From 5dc2fc0cd720b7aa37859f4b81976baba663d20d Mon Sep 17 00:00:00 2001 From: matthieu Date: Sun, 24 Apr 2011 10:30:40 +0000 Subject: [PATCH] Update to xorg-docs 1.6. As with previous version, only manual pages in section 7 are installed for now. More work is needed to be able to format and install the docs that have been converted to docbook xml. --- doc/xorg-docs/ChangeLog | 3186 + doc/xorg-docs/INSTALL | 291 + doc/xorg-docs/MAINTAINERS | 592 +- doc/xorg-docs/Makefile.am | 226 +- doc/xorg-docs/Makefile.in | 350 +- doc/xorg-docs/README | 32 +- doc/xorg-docs/aclocal.m4 | 1710 +- doc/xorg-docs/configure | 6334 +- doc/xorg-docs/configure.ac | 51 +- doc/xorg-docs/general/License.xml | 744 + doc/xorg-docs/general/Makefile.am | 17 + doc/xorg-docs/general/Makefile.in | 606 + doc/xorg-docs/general/README.xml | 345 + doc/xorg-docs/general/ReleaseNotes.xml | 2062 + doc/xorg-docs/general/Versions.xml | 329 + doc/xorg-docs/general/fonts/Makefile.am | 10 + .../general => general/fonts}/Makefile.in | 247 +- doc/xorg-docs/general/fonts/fonts.xml | 1950 + doc/xorg-docs/general/graphics/Makefile.am | 10 + doc/xorg-docs/general/graphics/Makefile.in | 442 + doc/xorg-docs/general/graphics/dps.xml | 81 + doc/xorg-docs/general/input/Makefile.am | 10 + doc/xorg-docs/general/input/Makefile.in | 442 + doc/xorg-docs/general/input/XKB-Config.xml | 319 + doc/xorg-docs/general/input/XKB-Enhancing.xml | 876 + doc/xorg-docs/general/platforms/Darwin.xml | 42 + doc/xorg-docs/general/platforms/Makefile.am | 12 + doc/xorg-docs/general/platforms/Makefile.in | 445 + doc/xorg-docs/general/platforms/Solaris.xml | 174 + .../man/{general => }/Consortium.man | 36 +- doc/xorg-docs/man/Makefile.am | 24 +- doc/xorg-docs/man/Makefile.in | 329 +- doc/xorg-docs/man/{general => }/Standards.man | 2 - doc/xorg-docs/man/{general => }/X.man | 464 +- .../man/{general => }/XOrgFoundation.man | 45 +- .../man/{general => }/XProjectTeam.man | 62 +- .../{general/security.man => Xsecurity.man} | 100 +- doc/xorg-docs/man/general/Makefile.am | 57 - doc/xorg-docs/man/general/Xprint.man | 421 - doc/xorg-docs/man/general/Xprint.sgml | 627 - doc/xorg-docs/misc/xlogo.epsi | 99 + doc/xorg-docs/misc/xlogo.svg | 72 + doc/xorg-docs/registry | 72 +- doc/xorg-docs/specs/BDF/bdf.ms | 1 - doc/xorg-docs/specs/CTEXT/Makefile.am | 9 + doc/xorg-docs/specs/CTEXT/Makefile.in | 442 + doc/xorg-docs/specs/CTEXT/ctext.tbl.ms | 450 - doc/xorg-docs/specs/CTEXT/ctext.xml | 876 + doc/xorg-docs/specs/Composite/protocol | 281 - doc/xorg-docs/specs/Damage/protocol | 190 - doc/xorg-docs/specs/FSProtocol/protocol.ms | 3602 - doc/xorg-docs/specs/Fixes/protocol | 494 - doc/xorg-docs/specs/GL/libGL.txt | 197 - doc/xorg-docs/specs/ICCCM/Makefile.am | 9 + doc/xorg-docs/specs/ICCCM/Makefile.in | 442 + doc/xorg-docs/specs/ICCCM/icccm.ms | 5721 -- doc/xorg-docs/specs/ICCCM/icccm.xml | 9100 ++ doc/xorg-docs/specs/ICCCM/indexmacros.t | 3 - doc/xorg-docs/specs/ICE/ICElib.ms | 3400 - doc/xorg-docs/specs/ICE/ice.ms | 1878 - doc/xorg-docs/specs/Makefile.am | 1 + doc/xorg-docs/specs/Makefile.in | 484 + doc/xorg-docs/specs/PM/PM_spec | 153 - doc/xorg-docs/specs/RX/RX.mif | 6185 -- doc/xorg-docs/specs/Randr/protocol.txt | 519 - doc/xorg-docs/specs/Render/library | 600 - doc/xorg-docs/specs/Render/protocol | 1256 - doc/xorg-docs/specs/SIAddresses/IPv6.txt | 11 - doc/xorg-docs/specs/SIAddresses/README | 6 - doc/xorg-docs/specs/SIAddresses/hostname.txt | 11 - doc/xorg-docs/specs/SIAddresses/localuser.txt | 21 - doc/xorg-docs/specs/SM/SMlib.ms | 2710 - doc/xorg-docs/specs/SM/xsmp.ms | 1621 - doc/xorg-docs/specs/X11/AppA | 604 - doc/xorg-docs/specs/X11/AppB | 101 - doc/xorg-docs/specs/X11/AppC | 2230 - doc/xorg-docs/specs/X11/AppD | 1183 - doc/xorg-docs/specs/X11/CH01 | 663 - doc/xorg-docs/specs/X11/CH02 | 2052 - doc/xorg-docs/specs/X11/CH03 | 3121 - doc/xorg-docs/specs/X11/CH04 | 1595 - doc/xorg-docs/specs/X11/CH05 | 518 - doc/xorg-docs/specs/X11/CH06 | 4773 - doc/xorg-docs/specs/X11/CH07 | 2357 - doc/xorg-docs/specs/X11/CH08 | 3468 - doc/xorg-docs/specs/X11/CH09 | 1290 - doc/xorg-docs/specs/X11/CH10 | 3886 - doc/xorg-docs/specs/X11/CH11 | 1664 - doc/xorg-docs/specs/X11/CH12 | 2680 - doc/xorg-docs/specs/X11/CH13 | 7673 -- doc/xorg-docs/specs/X11/CH14 | 3590 - doc/xorg-docs/specs/X11/CH15 | 1628 - doc/xorg-docs/specs/X11/CH16 | 2364 - doc/xorg-docs/specs/X11/abstract.t | 104 - doc/xorg-docs/specs/X11/credits.t | 216 - doc/xorg-docs/specs/X11/glossary | 1484 - doc/xorg-docs/specs/X11/indexmacros.t | 3 - doc/xorg-docs/specs/X11/postproc | 17 - doc/xorg-docs/specs/XDMCP/xdmcp.ms | 2177 - doc/xorg-docs/specs/XIM/xim.ms | 4277 - doc/xorg-docs/specs/XKB/Proto/XKBproto.book | Bin 24576 -> 0 bytes doc/xorg-docs/specs/XKB/Proto/dflttrns.fm5 | Bin 136192 -> 0 bytes doc/xorg-docs/specs/XKB/Proto/encoding.fm5 | Bin 150528 -> 0 bytes doc/xorg-docs/specs/XKB/Proto/keysyms.fm5 | Bin 118784 -> 0 bytes doc/xorg-docs/specs/XKB/Proto/protocol.fm5 | Bin 705536 -> 0 bytes doc/xorg-docs/specs/XKB/Proto/prototoc.doc | Bin 61440 -> 0 bytes doc/xorg-docs/specs/XKB/Proto/title.fm5 | Bin 23552 -> 0 bytes doc/xorg-docs/specs/XKB/Proto/types.fm5 | Bin 49152 -> 0 bytes doc/xorg-docs/specs/XKB/XKBlib/XKBlib.book | Bin 20480 -> 0 bytes doc/xorg-docs/specs/XKB/XKBlib/allchaps.fm5 | Bin 1544192 -> 0 bytes doc/xorg-docs/specs/XKB/XKBlib/allchaps.ix | Bin 133120 -> 0 bytes doc/xorg-docs/specs/XKB/XKBlib/allchaps.lof | Bin 36864 -> 0 bytes doc/xorg-docs/specs/XKB/XKBlib/allchaps.lot | Bin 41984 -> 0 bytes doc/xorg-docs/specs/XKB/XKBlib/allchaps.ps | 74364 ---------------- doc/xorg-docs/specs/XKB/XKBlib/allchaps.toc | Bin 57344 -> 0 bytes doc/xorg-docs/specs/XKB/XKBlib/fonts.fm5 | Bin 45056 -> 0 bytes doc/xorg-docs/specs/XKB/XKBlib/title.fm5 | Bin 22528 -> 0 bytes doc/xorg-docs/specs/XLFD/Makefile.am | 9 + doc/xorg-docs/specs/XLFD/Makefile.in | 442 + doc/xorg-docs/specs/XLFD/xlfd.tbl.ms | 2827 - doc/xorg-docs/specs/XLFD/xlfd.xml | 4118 + doc/xorg-docs/specs/XPRINT/xp_library.book | Bin 23552 -> 0 bytes doc/xorg-docs/specs/XPRINT/xp_library.mif | 34917 -------- doc/xorg-docs/specs/XPRINT/xp_libraryIX.doc | Bin 29696 -> 0 bytes doc/xorg-docs/specs/XPRINT/xp_libraryTOC.doc | Bin 19456 -> 0 bytes doc/xorg-docs/specs/XPRINT/xp_library_cov.mif | 3473 - doc/xorg-docs/specs/XPRINT/xp_proto.book | Bin 22528 -> 0 bytes doc/xorg-docs/specs/XPRINT/xp_proto.mif | 73304 --------------- doc/xorg-docs/specs/XPRINT/xp_protoIX.doc | Bin 34816 -> 0 bytes doc/xorg-docs/specs/XPRINT/xp_protoTOC.doc | Bin 19456 -> 0 bytes doc/xorg-docs/specs/XPRINT/xp_proto_cov.mif | 3467 - doc/xorg-docs/specs/XProtocol/X11.encoding | 4434 - doc/xorg-docs/specs/XProtocol/X11.keysyms | 1283 - doc/xorg-docs/specs/XProtocol/X11.protocol | 10551 --- doc/xorg-docs/specs/XProtocol/glossary | 1028 - doc/xorg-docs/specs/XProtocol/indexmacros.t | 3 - doc/xorg-docs/specs/XProtocol/postproc | 14 - doc/xorg-docs/specs/Xaw/AsciiSink | 77 - doc/xorg-docs/specs/Xaw/AsciiSource | 208 - doc/xorg-docs/specs/Xaw/AsciiText | 166 - doc/xorg-docs/specs/Xaw/Box | 139 - doc/xorg-docs/specs/Xaw/CH1 | 411 - doc/xorg-docs/specs/Xaw/CH2 | 1103 - doc/xorg-docs/specs/Xaw/CH3.intro | 67 - doc/xorg-docs/specs/Xaw/CH4.intro | 87 - doc/xorg-docs/specs/Xaw/CH5.intro | 292 - doc/xorg-docs/specs/Xaw/CH6.intro | 84 - doc/xorg-docs/specs/Xaw/CH7.intro | 99 - doc/xorg-docs/specs/Xaw/Command | 205 - doc/xorg-docs/specs/Xaw/Dialog | 280 - doc/xorg-docs/specs/Xaw/Form | 200 - doc/xorg-docs/specs/Xaw/Grip | 157 - doc/xorg-docs/specs/Xaw/Label | 122 - doc/xorg-docs/specs/Xaw/List | 341 - doc/xorg-docs/specs/Xaw/MenuButton | 215 - doc/xorg-docs/specs/Xaw/Paned | 492 - doc/xorg-docs/specs/Xaw/Panner | 247 - doc/xorg-docs/specs/Xaw/Porthole | 125 - doc/xorg-docs/specs/Xaw/Repeater | 184 - doc/xorg-docs/specs/Xaw/Scrollbar | 386 - doc/xorg-docs/specs/Xaw/Simple | 95 - doc/xorg-docs/specs/Xaw/SimpleMenu | 315 - doc/xorg-docs/specs/Xaw/Sme | 106 - doc/xorg-docs/specs/Xaw/SmeBSB | 125 - doc/xorg-docs/specs/Xaw/SmeLine | 72 - doc/xorg-docs/specs/Xaw/StripChart | 160 - doc/xorg-docs/specs/Xaw/TPage_Credits | 154 - doc/xorg-docs/specs/Xaw/Template | 426 - doc/xorg-docs/specs/Xaw/Text | 123 - doc/xorg-docs/specs/Xaw/TextActions | 506 - doc/xorg-docs/specs/Xaw/TextCustom | 63 - doc/xorg-docs/specs/Xaw/TextFuncs | 397 - doc/xorg-docs/specs/Xaw/TextSink | 420 - doc/xorg-docs/specs/Xaw/TextSource | 331 - doc/xorg-docs/specs/Xaw/Toggle | 370 - doc/xorg-docs/specs/Xaw/Tree | 181 - doc/xorg-docs/specs/Xaw/Viewport | 156 - doc/xorg-docs/specs/Xaw/Xtk.widg.front | 134 - doc/xorg-docs/specs/Xaw/Xtk.widgets | 5960 -- doc/xorg-docs/specs/Xaw/block.awk | 22 - doc/xorg-docs/specs/Xaw/fixindex.awk | 73 - doc/xorg-docs/specs/Xaw/strings.mit | 10 - doc/xorg-docs/specs/Xaw/strings.xaw | 714 - doc/xorg-docs/specs/Xaw/widg.idxmac.t | 3 - doc/xorg-docs/specs/Xext/AppGroup.mif | 10667 --- doc/xorg-docs/specs/Xext/DPMS.ms | 465 - doc/xorg-docs/specs/Xext/DPMSLib.ms | 331 - doc/xorg-docs/specs/Xext/Makefile.am | 9 + doc/xorg-docs/specs/Xext/Makefile.in | 442 + doc/xorg-docs/specs/Xext/bigreq.ms | 224 - doc/xorg-docs/specs/Xext/buffer.ms | 1301 - doc/xorg-docs/specs/Xext/dbe.tex | 782 - doc/xorg-docs/specs/Xext/dbelib.tex | 621 - doc/xorg-docs/specs/Xext/evi.ms | 344 - doc/xorg-docs/specs/Xext/lbx.book | Bin 22528 -> 0 bytes doc/xorg-docs/specs/Xext/lbx.mif | 56495 ------------ doc/xorg-docs/specs/Xext/lbxalg.mif | 2690 - doc/xorg-docs/specs/Xext/lbxalg.xml | 145 + doc/xorg-docs/specs/Xext/mit-shm.ms | 358 - doc/xorg-docs/specs/Xext/record.ms | 1472 - doc/xorg-docs/specs/Xext/recordlib.ms | 1409 - doc/xorg-docs/specs/Xext/security.tex | 830 - doc/xorg-docs/specs/Xext/shape.ms | 954 - doc/xorg-docs/specs/Xext/shapelib.ms | 556 - doc/xorg-docs/specs/Xext/sync.tex | 1010 - doc/xorg-docs/specs/Xext/synclib.tex | 773 - doc/xorg-docs/specs/Xext/tog-cup.ms | 396 - doc/xorg-docs/specs/Xext/xc-misc.ms | 222 - doc/xorg-docs/specs/Xext/xtest.ms | 483 - doc/xorg-docs/specs/Xext/xtest1.info | 90 - doc/xorg-docs/specs/Xext/xtest1.mm | 494 - doc/xorg-docs/specs/Xext/xtestlib.ms | 446 - doc/xorg-docs/specs/Xi/encoding.ms | 2016 - doc/xorg-docs/specs/Xi/library.ms | 6313 -- doc/xorg-docs/specs/Xi/porting.ms | 990 - doc/xorg-docs/specs/Xi/protocol.ms | 3157 - doc/xorg-docs/specs/Xmu/Xmu.ms | 2494 - doc/xorg-docs/specs/Xserver/Makefile.am | 9 + doc/xorg-docs/specs/Xserver/Makefile.in | 443 + doc/xorg-docs/specs/Xserver/XACE-Spec.xml | 1040 + doc/xorg-docs/specs/Xserver/Xprt.book | Bin 25600 -> 0 bytes doc/xorg-docs/specs/Xserver/Xprt.mif | 42787 --------- doc/xorg-docs/specs/Xserver/XprtIX.doc | Bin 38912 -> 0 bytes doc/xorg-docs/specs/Xserver/XprtTOC.doc | Bin 24576 -> 0 bytes doc/xorg-docs/specs/Xserver/Xprt_cov.mif | 3054 - doc/xorg-docs/specs/Xserver/analysis.tex | 1528 - doc/xorg-docs/specs/Xserver/analysis.xml | 2217 + .../Xserver/{appgroup.ms => appgroup.xml} | 212 +- doc/xorg-docs/specs/Xserver/ddx.tbl.ms | 5283 -- doc/xorg-docs/specs/Xserver/fontlib.ms | 403 - doc/xorg-docs/specs/Xserver/secint.tex | 219 - doc/xorg-docs/specs/Xserver/secint.xml | 294 + doc/xorg-docs/specs/Xt/CH01 | 2471 - doc/xorg-docs/specs/Xt/CH02 | 3165 - doc/xorg-docs/specs/Xt/CH03 | 1031 - doc/xorg-docs/specs/Xt/CH04 | 1998 - doc/xorg-docs/specs/Xt/CH05 | 783 - doc/xorg-docs/specs/Xt/CH06 | 1110 - doc/xorg-docs/specs/Xt/CH07 | 3555 - doc/xorg-docs/specs/Xt/CH08 | 452 - doc/xorg-docs/specs/Xt/CH09 | 3211 - doc/xorg-docs/specs/Xt/CH10 | 1521 - doc/xorg-docs/specs/Xt/CH11 | 3566 - doc/xorg-docs/specs/Xt/CH12 | 1067 - doc/xorg-docs/specs/Xt/CH13 | 805 - doc/xorg-docs/specs/Xt/Xtk.intr.front | 334 - doc/xorg-docs/specs/Xt/appA | 107 - doc/xorg-docs/specs/Xt/appB | 783 - doc/xorg-docs/specs/Xt/appC | 1204 - doc/xorg-docs/specs/Xt/appD | 602 - doc/xorg-docs/specs/Xt/appE | 606 - doc/xorg-docs/specs/Xt/appF | 125 - doc/xorg-docs/specs/Xt/intr.idxmac.t | 3 - doc/xorg-docs/specs/Xt/postproc | 19 - doc/xorg-docs/specs/Xt/strings.mit | 17 - doc/xorg-docs/specs/Xv/xv-protocol-v2.txt | 654 - doc/xorg-docs/specs/XvMC/XvMC_API.txt | 1293 - doc/xorg-docs/specs/i18n/Framework.ms | 1567 - doc/xorg-docs/specs/i18n/LocaleDB.ms | 502 - doc/xorg-docs/specs/i18n/Trans.ms | 1146 - doc/xorg-docs/specs/rstart/fix.awk | 23 - doc/xorg-docs/specs/rstart/fix.nawk | 24 - doc/xorg-docs/specs/rstart/fix.sed | 12 - doc/xorg-docs/specs/rstart/rstart.ms | 841 - doc/xorg-docs/specs/rstart/rstartd.txt | 229 - doc/xorg-docs/specs/rstart/tmac.rfc | 81 - doc/xorg-docs/specs/saver/saver.ms | 881 - doc/xorg-docs/specs/xfs/FSlib.doc | 222 - doc/xorg-docs/specs/xfs/design.ms | 1498 - doc/xorg-docs/specs/xtrans/Xtrans.mm | 789 - doc/xorg-docs/xmlrules.in | 65 + 271 files changed, 41259 insertions(+), 505144 deletions(-) create mode 100644 doc/xorg-docs/ChangeLog create mode 100644 doc/xorg-docs/INSTALL create mode 100644 doc/xorg-docs/general/License.xml create mode 100644 doc/xorg-docs/general/Makefile.am create mode 100644 doc/xorg-docs/general/Makefile.in create mode 100644 doc/xorg-docs/general/README.xml create mode 100644 doc/xorg-docs/general/ReleaseNotes.xml create mode 100644 doc/xorg-docs/general/Versions.xml create mode 100644 doc/xorg-docs/general/fonts/Makefile.am rename doc/xorg-docs/{man/general => general/fonts}/Makefile.in (50%) create mode 100644 doc/xorg-docs/general/fonts/fonts.xml create mode 100644 doc/xorg-docs/general/graphics/Makefile.am create mode 100644 doc/xorg-docs/general/graphics/Makefile.in create mode 100644 doc/xorg-docs/general/graphics/dps.xml create mode 100644 doc/xorg-docs/general/input/Makefile.am create mode 100644 doc/xorg-docs/general/input/Makefile.in create mode 100644 doc/xorg-docs/general/input/XKB-Config.xml create mode 100644 doc/xorg-docs/general/input/XKB-Enhancing.xml create mode 100644 doc/xorg-docs/general/platforms/Darwin.xml create mode 100644 doc/xorg-docs/general/platforms/Makefile.am create mode 100644 doc/xorg-docs/general/platforms/Makefile.in create mode 100644 doc/xorg-docs/general/platforms/Solaris.xml rename doc/xorg-docs/man/{general => }/Consortium.man (95%) rename doc/xorg-docs/man/{general => }/Standards.man (98%) rename doc/xorg-docs/man/{general => }/X.man (83%) rename doc/xorg-docs/man/{general => }/XOrgFoundation.man (83%) rename doc/xorg-docs/man/{general => }/XProjectTeam.man (84%) rename doc/xorg-docs/man/{general/security.man => Xsecurity.man} (82%) delete mode 100644 doc/xorg-docs/man/general/Makefile.am delete mode 100644 doc/xorg-docs/man/general/Xprint.man delete mode 100644 doc/xorg-docs/man/general/Xprint.sgml create mode 100644 doc/xorg-docs/misc/xlogo.epsi create mode 100644 doc/xorg-docs/misc/xlogo.svg create mode 100644 doc/xorg-docs/specs/CTEXT/Makefile.am create mode 100644 doc/xorg-docs/specs/CTEXT/Makefile.in delete mode 100644 doc/xorg-docs/specs/CTEXT/ctext.tbl.ms create mode 100644 doc/xorg-docs/specs/CTEXT/ctext.xml delete mode 100644 doc/xorg-docs/specs/Composite/protocol delete mode 100644 doc/xorg-docs/specs/Damage/protocol delete mode 100644 doc/xorg-docs/specs/FSProtocol/protocol.ms delete mode 100644 doc/xorg-docs/specs/Fixes/protocol delete mode 100644 doc/xorg-docs/specs/GL/libGL.txt create mode 100644 doc/xorg-docs/specs/ICCCM/Makefile.am create mode 100644 doc/xorg-docs/specs/ICCCM/Makefile.in delete mode 100644 doc/xorg-docs/specs/ICCCM/icccm.ms create mode 100644 doc/xorg-docs/specs/ICCCM/icccm.xml delete mode 100644 doc/xorg-docs/specs/ICCCM/indexmacros.t delete mode 100644 doc/xorg-docs/specs/ICE/ICElib.ms delete mode 100644 doc/xorg-docs/specs/ICE/ice.ms create mode 100644 doc/xorg-docs/specs/Makefile.am create mode 100644 doc/xorg-docs/specs/Makefile.in delete mode 100644 doc/xorg-docs/specs/PM/PM_spec delete mode 100644 doc/xorg-docs/specs/RX/RX.mif delete mode 100644 doc/xorg-docs/specs/Randr/protocol.txt delete mode 100644 doc/xorg-docs/specs/Render/library delete mode 100644 doc/xorg-docs/specs/Render/protocol delete mode 100644 doc/xorg-docs/specs/SIAddresses/IPv6.txt delete mode 100644 doc/xorg-docs/specs/SIAddresses/README delete mode 100644 doc/xorg-docs/specs/SIAddresses/hostname.txt delete mode 100644 doc/xorg-docs/specs/SIAddresses/localuser.txt delete mode 100644 doc/xorg-docs/specs/SM/SMlib.ms delete mode 100644 doc/xorg-docs/specs/SM/xsmp.ms delete mode 100644 doc/xorg-docs/specs/X11/AppA delete mode 100644 doc/xorg-docs/specs/X11/AppB delete mode 100644 doc/xorg-docs/specs/X11/AppC delete mode 100644 doc/xorg-docs/specs/X11/AppD delete mode 100644 doc/xorg-docs/specs/X11/CH01 delete mode 100644 doc/xorg-docs/specs/X11/CH02 delete mode 100644 doc/xorg-docs/specs/X11/CH03 delete mode 100644 doc/xorg-docs/specs/X11/CH04 delete mode 100644 doc/xorg-docs/specs/X11/CH05 delete mode 100644 doc/xorg-docs/specs/X11/CH06 delete mode 100644 doc/xorg-docs/specs/X11/CH07 delete mode 100644 doc/xorg-docs/specs/X11/CH08 delete mode 100644 doc/xorg-docs/specs/X11/CH09 delete mode 100644 doc/xorg-docs/specs/X11/CH10 delete mode 100644 doc/xorg-docs/specs/X11/CH11 delete mode 100644 doc/xorg-docs/specs/X11/CH12 delete mode 100644 doc/xorg-docs/specs/X11/CH13 delete mode 100644 doc/xorg-docs/specs/X11/CH14 delete mode 100644 doc/xorg-docs/specs/X11/CH15 delete mode 100644 doc/xorg-docs/specs/X11/CH16 delete mode 100644 doc/xorg-docs/specs/X11/abstract.t delete mode 100644 doc/xorg-docs/specs/X11/credits.t delete mode 100644 doc/xorg-docs/specs/X11/glossary delete mode 100644 doc/xorg-docs/specs/X11/indexmacros.t delete mode 100644 doc/xorg-docs/specs/X11/postproc delete mode 100644 doc/xorg-docs/specs/XDMCP/xdmcp.ms delete mode 100644 doc/xorg-docs/specs/XIM/xim.ms delete mode 100644 doc/xorg-docs/specs/XKB/Proto/XKBproto.book delete mode 100644 doc/xorg-docs/specs/XKB/Proto/dflttrns.fm5 delete mode 100644 doc/xorg-docs/specs/XKB/Proto/encoding.fm5 delete mode 100644 doc/xorg-docs/specs/XKB/Proto/keysyms.fm5 delete mode 100644 doc/xorg-docs/specs/XKB/Proto/protocol.fm5 delete mode 100644 doc/xorg-docs/specs/XKB/Proto/prototoc.doc delete mode 100644 doc/xorg-docs/specs/XKB/Proto/title.fm5 delete mode 100644 doc/xorg-docs/specs/XKB/Proto/types.fm5 delete mode 100644 doc/xorg-docs/specs/XKB/XKBlib/XKBlib.book delete mode 100644 doc/xorg-docs/specs/XKB/XKBlib/allchaps.fm5 delete mode 100644 doc/xorg-docs/specs/XKB/XKBlib/allchaps.ix delete mode 100644 doc/xorg-docs/specs/XKB/XKBlib/allchaps.lof delete mode 100644 doc/xorg-docs/specs/XKB/XKBlib/allchaps.lot delete mode 100644 doc/xorg-docs/specs/XKB/XKBlib/allchaps.ps delete mode 100644 doc/xorg-docs/specs/XKB/XKBlib/allchaps.toc delete mode 100644 doc/xorg-docs/specs/XKB/XKBlib/fonts.fm5 delete mode 100644 doc/xorg-docs/specs/XKB/XKBlib/title.fm5 create mode 100644 doc/xorg-docs/specs/XLFD/Makefile.am create mode 100644 doc/xorg-docs/specs/XLFD/Makefile.in delete mode 100644 doc/xorg-docs/specs/XLFD/xlfd.tbl.ms create mode 100644 doc/xorg-docs/specs/XLFD/xlfd.xml delete mode 100644 doc/xorg-docs/specs/XPRINT/xp_library.book delete mode 100644 doc/xorg-docs/specs/XPRINT/xp_library.mif delete mode 100644 doc/xorg-docs/specs/XPRINT/xp_libraryIX.doc delete mode 100644 doc/xorg-docs/specs/XPRINT/xp_libraryTOC.doc delete mode 100644 doc/xorg-docs/specs/XPRINT/xp_library_cov.mif delete mode 100644 doc/xorg-docs/specs/XPRINT/xp_proto.book delete mode 100644 doc/xorg-docs/specs/XPRINT/xp_proto.mif delete mode 100644 doc/xorg-docs/specs/XPRINT/xp_protoIX.doc delete mode 100644 doc/xorg-docs/specs/XPRINT/xp_protoTOC.doc delete mode 100644 doc/xorg-docs/specs/XPRINT/xp_proto_cov.mif delete mode 100644 doc/xorg-docs/specs/XProtocol/X11.encoding delete mode 100644 doc/xorg-docs/specs/XProtocol/X11.keysyms delete mode 100644 doc/xorg-docs/specs/XProtocol/X11.protocol delete mode 100644 doc/xorg-docs/specs/XProtocol/glossary delete mode 100644 doc/xorg-docs/specs/XProtocol/indexmacros.t delete mode 100644 doc/xorg-docs/specs/XProtocol/postproc delete mode 100644 doc/xorg-docs/specs/Xaw/AsciiSink delete mode 100644 doc/xorg-docs/specs/Xaw/AsciiSource delete mode 100644 doc/xorg-docs/specs/Xaw/AsciiText delete mode 100644 doc/xorg-docs/specs/Xaw/Box delete mode 100644 doc/xorg-docs/specs/Xaw/CH1 delete mode 100644 doc/xorg-docs/specs/Xaw/CH2 delete mode 100644 doc/xorg-docs/specs/Xaw/CH3.intro delete mode 100644 doc/xorg-docs/specs/Xaw/CH4.intro delete mode 100644 doc/xorg-docs/specs/Xaw/CH5.intro delete mode 100644 doc/xorg-docs/specs/Xaw/CH6.intro delete mode 100644 doc/xorg-docs/specs/Xaw/CH7.intro delete mode 100644 doc/xorg-docs/specs/Xaw/Command delete mode 100644 doc/xorg-docs/specs/Xaw/Dialog delete mode 100644 doc/xorg-docs/specs/Xaw/Form delete mode 100644 doc/xorg-docs/specs/Xaw/Grip delete mode 100644 doc/xorg-docs/specs/Xaw/Label delete mode 100644 doc/xorg-docs/specs/Xaw/List delete mode 100644 doc/xorg-docs/specs/Xaw/MenuButton delete mode 100644 doc/xorg-docs/specs/Xaw/Paned delete mode 100644 doc/xorg-docs/specs/Xaw/Panner delete mode 100644 doc/xorg-docs/specs/Xaw/Porthole delete mode 100644 doc/xorg-docs/specs/Xaw/Repeater delete mode 100644 doc/xorg-docs/specs/Xaw/Scrollbar delete mode 100644 doc/xorg-docs/specs/Xaw/Simple delete mode 100644 doc/xorg-docs/specs/Xaw/SimpleMenu delete mode 100644 doc/xorg-docs/specs/Xaw/Sme delete mode 100644 doc/xorg-docs/specs/Xaw/SmeBSB delete mode 100644 doc/xorg-docs/specs/Xaw/SmeLine delete mode 100644 doc/xorg-docs/specs/Xaw/StripChart delete mode 100644 doc/xorg-docs/specs/Xaw/TPage_Credits delete mode 100644 doc/xorg-docs/specs/Xaw/Template delete mode 100644 doc/xorg-docs/specs/Xaw/Text delete mode 100644 doc/xorg-docs/specs/Xaw/TextActions delete mode 100644 doc/xorg-docs/specs/Xaw/TextCustom delete mode 100644 doc/xorg-docs/specs/Xaw/TextFuncs delete mode 100644 doc/xorg-docs/specs/Xaw/TextSink delete mode 100644 doc/xorg-docs/specs/Xaw/TextSource delete mode 100644 doc/xorg-docs/specs/Xaw/Toggle delete mode 100644 doc/xorg-docs/specs/Xaw/Tree delete mode 100644 doc/xorg-docs/specs/Xaw/Viewport delete mode 100644 doc/xorg-docs/specs/Xaw/Xtk.widg.front delete mode 100644 doc/xorg-docs/specs/Xaw/Xtk.widgets delete mode 100644 doc/xorg-docs/specs/Xaw/block.awk delete mode 100644 doc/xorg-docs/specs/Xaw/fixindex.awk delete mode 100644 doc/xorg-docs/specs/Xaw/strings.mit delete mode 100644 doc/xorg-docs/specs/Xaw/strings.xaw delete mode 100644 doc/xorg-docs/specs/Xaw/widg.idxmac.t delete mode 100644 doc/xorg-docs/specs/Xext/AppGroup.mif delete mode 100644 doc/xorg-docs/specs/Xext/DPMS.ms delete mode 100644 doc/xorg-docs/specs/Xext/DPMSLib.ms create mode 100644 doc/xorg-docs/specs/Xext/Makefile.am create mode 100644 doc/xorg-docs/specs/Xext/Makefile.in delete mode 100644 doc/xorg-docs/specs/Xext/bigreq.ms delete mode 100644 doc/xorg-docs/specs/Xext/buffer.ms delete mode 100644 doc/xorg-docs/specs/Xext/dbe.tex delete mode 100644 doc/xorg-docs/specs/Xext/dbelib.tex delete mode 100644 doc/xorg-docs/specs/Xext/evi.ms delete mode 100644 doc/xorg-docs/specs/Xext/lbx.book delete mode 100644 doc/xorg-docs/specs/Xext/lbx.mif delete mode 100644 doc/xorg-docs/specs/Xext/lbxalg.mif create mode 100644 doc/xorg-docs/specs/Xext/lbxalg.xml delete mode 100644 doc/xorg-docs/specs/Xext/mit-shm.ms delete mode 100644 doc/xorg-docs/specs/Xext/record.ms delete mode 100644 doc/xorg-docs/specs/Xext/recordlib.ms delete mode 100644 doc/xorg-docs/specs/Xext/security.tex delete mode 100644 doc/xorg-docs/specs/Xext/shape.ms delete mode 100644 doc/xorg-docs/specs/Xext/shapelib.ms delete mode 100644 doc/xorg-docs/specs/Xext/sync.tex delete mode 100644 doc/xorg-docs/specs/Xext/synclib.tex delete mode 100644 doc/xorg-docs/specs/Xext/tog-cup.ms delete mode 100644 doc/xorg-docs/specs/Xext/xc-misc.ms delete mode 100644 doc/xorg-docs/specs/Xext/xtest.ms delete mode 100644 doc/xorg-docs/specs/Xext/xtest1.info delete mode 100644 doc/xorg-docs/specs/Xext/xtest1.mm delete mode 100644 doc/xorg-docs/specs/Xext/xtestlib.ms delete mode 100644 doc/xorg-docs/specs/Xi/encoding.ms delete mode 100644 doc/xorg-docs/specs/Xi/library.ms delete mode 100644 doc/xorg-docs/specs/Xi/porting.ms delete mode 100644 doc/xorg-docs/specs/Xi/protocol.ms delete mode 100644 doc/xorg-docs/specs/Xmu/Xmu.ms create mode 100644 doc/xorg-docs/specs/Xserver/Makefile.am create mode 100644 doc/xorg-docs/specs/Xserver/Makefile.in create mode 100644 doc/xorg-docs/specs/Xserver/XACE-Spec.xml delete mode 100644 doc/xorg-docs/specs/Xserver/Xprt.book delete mode 100644 doc/xorg-docs/specs/Xserver/Xprt.mif delete mode 100644 doc/xorg-docs/specs/Xserver/XprtIX.doc delete mode 100644 doc/xorg-docs/specs/Xserver/XprtTOC.doc delete mode 100644 doc/xorg-docs/specs/Xserver/Xprt_cov.mif delete mode 100644 doc/xorg-docs/specs/Xserver/analysis.tex create mode 100644 doc/xorg-docs/specs/Xserver/analysis.xml rename doc/xorg-docs/specs/Xserver/{appgroup.ms => appgroup.xml} (74%) delete mode 100644 doc/xorg-docs/specs/Xserver/ddx.tbl.ms delete mode 100644 doc/xorg-docs/specs/Xserver/fontlib.ms delete mode 100644 doc/xorg-docs/specs/Xserver/secint.tex create mode 100644 doc/xorg-docs/specs/Xserver/secint.xml delete mode 100644 doc/xorg-docs/specs/Xt/CH01 delete mode 100644 doc/xorg-docs/specs/Xt/CH02 delete mode 100644 doc/xorg-docs/specs/Xt/CH03 delete mode 100644 doc/xorg-docs/specs/Xt/CH04 delete mode 100644 doc/xorg-docs/specs/Xt/CH05 delete mode 100644 doc/xorg-docs/specs/Xt/CH06 delete mode 100644 doc/xorg-docs/specs/Xt/CH07 delete mode 100644 doc/xorg-docs/specs/Xt/CH08 delete mode 100644 doc/xorg-docs/specs/Xt/CH09 delete mode 100644 doc/xorg-docs/specs/Xt/CH10 delete mode 100644 doc/xorg-docs/specs/Xt/CH11 delete mode 100644 doc/xorg-docs/specs/Xt/CH12 delete mode 100644 doc/xorg-docs/specs/Xt/CH13 delete mode 100644 doc/xorg-docs/specs/Xt/Xtk.intr.front delete mode 100644 doc/xorg-docs/specs/Xt/appA delete mode 100644 doc/xorg-docs/specs/Xt/appB delete mode 100644 doc/xorg-docs/specs/Xt/appC delete mode 100644 doc/xorg-docs/specs/Xt/appD delete mode 100644 doc/xorg-docs/specs/Xt/appE delete mode 100644 doc/xorg-docs/specs/Xt/appF delete mode 100644 doc/xorg-docs/specs/Xt/intr.idxmac.t delete mode 100644 doc/xorg-docs/specs/Xt/postproc delete mode 100644 doc/xorg-docs/specs/Xt/strings.mit delete mode 100644 doc/xorg-docs/specs/Xv/xv-protocol-v2.txt delete mode 100644 doc/xorg-docs/specs/XvMC/XvMC_API.txt delete mode 100644 doc/xorg-docs/specs/i18n/Framework.ms delete mode 100644 doc/xorg-docs/specs/i18n/LocaleDB.ms delete mode 100644 doc/xorg-docs/specs/i18n/Trans.ms delete mode 100644 doc/xorg-docs/specs/rstart/fix.awk delete mode 100644 doc/xorg-docs/specs/rstart/fix.nawk delete mode 100644 doc/xorg-docs/specs/rstart/fix.sed delete mode 100644 doc/xorg-docs/specs/rstart/rstart.ms delete mode 100644 doc/xorg-docs/specs/rstart/rstartd.txt delete mode 100644 doc/xorg-docs/specs/rstart/tmac.rfc delete mode 100644 doc/xorg-docs/specs/saver/saver.ms delete mode 100644 doc/xorg-docs/specs/xfs/FSlib.doc delete mode 100644 doc/xorg-docs/specs/xfs/design.ms delete mode 100644 doc/xorg-docs/specs/xtrans/Xtrans.mm create mode 100644 doc/xorg-docs/xmlrules.in diff --git a/doc/xorg-docs/ChangeLog b/doc/xorg-docs/ChangeLog new file mode 100644 index 000000000..787b409f8 --- /dev/null +++ b/doc/xorg-docs/ChangeLog @@ -0,0 +1,3186 @@ +commit 52f5021347d87289eeb77f992986a17ae0b28cdd +Author: Alan Coopersmith +Date: Sat Dec 18 20:55:06 2010 -0800 + + xorg-docs 1.6 (X11R7.6) + + Signed-off-by: Alan Coopersmith + +commit fc35d5f86590fd33cdad09f6face76f824a3f4eb +Author: Alan Coopersmith +Date: Sat Dec 18 01:16:01 2010 -0800 + + ReleaseNotes: more credits updates + + Signed-off-by: Alan Coopersmith + +commit ea5fd6d15740d9e9285e8df3117fb74c42eee29c +Author: Alan Coopersmith +Date: Wed Dec 15 19:50:16 2010 -0800 + + appgroup: Fix section titles/nesting + + Signed-off-by: Alan Coopersmith + +commit e3d8d8f848fe28a51dd2d1dfdd1c851cf9fbf268 +Author: Alan Coopersmith +Date: Wed Dec 15 19:46:50 2010 -0800 + + CTEXT: Fix section titles/nesting + + Signed-off-by: Alan Coopersmith + +commit 8e81e3a4eb24dcde839bdeb77fe908e0220c4b76 +Author: Alan Coopersmith +Date: Wed Dec 15 19:40:44 2010 -0800 + + specs: Fix some conversion of 2 argument .PN -> tags + + perl -i -p -e 's{ (\W*?)\s*}{$1}g' specs/*/*.xml + + Signed-off-by: Alan Coopersmith + +commit 7d03cd132e850fa8d7249742d1f09e55dbe845dd +Author: Alan Coopersmith +Date: Wed Dec 15 19:35:34 2010 -0800 + + XLFD: Fix cross-references to other sections of the document + + Signed-off-by: Alan Coopersmith + +commit 700a926c599be2b6915c4def72a9e9a2251bed0e +Author: Alan Coopersmith +Date: Wed Dec 15 19:24:29 2010 -0800 + + XLFD: Fix chapter titles/section nesting + + Signed-off-by: Alan Coopersmith + +commit d8846c1d47091c77605a6ca4e47b71614434d72c +Author: Alan Coopersmith +Date: Wed Dec 15 18:19:57 2010 -0800 + + Sun's copyrights belong to Oracle now + + Signed-off-by: Alan Coopersmith + +commit 31a0694baaaba32dfe0afdd1e156f626bd13488a +Author: Alan Coopersmith +Date: Wed Dec 15 18:17:14 2010 -0800 + + ICCCM: Pair copyright notices with matching license notices + + Makes the legal notice layout like the troff version was + + Signed-off-by: Alan Coopersmith + +commit 483568553b57f6ddd426b2ab5395365d863c64ed +Author: Alan Coopersmith +Date: Wed Dec 15 18:03:56 2010 -0800 + + ICCCM: Update X Registry contact address + + Signed-off-by: Alan Coopersmith + +commit 6d8405888a204047fa5e34898a70b1e02d44443e +Author: Alan Coopersmith +Date: Wed Dec 15 17:58:17 2010 -0800 + + ICCCM: Fix Preface titles & section nesting + + Signed-off-by: Alan Coopersmith + +commit a65219148f0cb6bbf798b3e6f4f91dc6c004f108 +Author: Peter Hutterer +Date: Sat Dec 4 11:30:20 2010 +1000 + + MAINTAINERS: aiptek is unmaintained again + + CC: Rene van Paassen + Signed-off-by: Peter Hutterer + +commit f871a55c5a8e84f2b1faea8ee26bcc506ad96727 +Author: Alan Coopersmith +Date: Wed Dec 15 11:30:47 2010 -0800 + + ctext.xml: Replace incorrect fi ligature character with "fi" + + Signed-off-by: Alan Coopersmith + +commit 3954402a111f39dd749db28abda72c5bf8bebaa3 +Author: Alan Coopersmith +Date: Tue Dec 14 18:33:45 2010 -0800 + + Update Xserver security docs from DocBook 4.1.2 to 4.3 to match the rest + + Signed-off-by: Alan Coopersmith + Reviewed-by: Gaetan Nadon + +commit cd42d8704350bf73801d7d0277468648bb2e614e +Author: Alan Coopersmith +Date: Mon Dec 13 18:16:15 2010 -0800 + + ReleaseNotes: fix typos + + Signed-off-by: Alan Coopersmith + +commit d77dadafcd0ae10f4bbc918c80db4e865ad70caf +Author: Alan Coopersmith +Date: Mon Dec 13 12:37:49 2010 -0800 + + XKB-Enhancing: Fix URL for XKB spec + + Signed-off-by: Alan Coopersmith + +commit 3af357433644e62f32174c8be6529193006176ee +Author: Alan Coopersmith +Date: Mon Nov 29 14:26:51 2010 -0800 + + Release Notes: Add 7.6 dedication + + Signed-off-by: Alan Coopersmith + +commit 28e928def5839189c8d340232fa881e0b7107722 +Author: Alan Coopersmith +Date: Sun Nov 28 22:10:05 2010 -0800 + + ReleaseNotes: Comment out draft note for upcoming final release + + Signed-off-by: Alan Coopersmith + +commit e795fa604dfca292029f36df6c03c02ed7b08440 +Author: Gaetan Nadon +Date: Thu Dec 2 16:19:17 2010 -0500 + + specs: move SIAddresses docs to x11proto + + Signed-off-by: Gaetan Nadon + +commit 0c5f693d6617a740faaceb657a1fda260316e414 +Author: Gaetan Nadon +Date: Thu Dec 2 12:04:01 2010 -0500 + + specs: remove xtest1.info, no longer relevant + + This appears to be a text snippet regarding an implementation note + on the x11 input synthesis extension. The function referenced + can be found in the hw/hp/input directory of the server + in the xext1imp.c file. + + http://195.113.144.229/MIRRORS/ftp.xfree86.org/pub/mirror/X.Org/pub + /R6.6/xc/programs/Xserver/hw/hp/input/xtest1imp.c + + Signed-off-by: Gaetan Nadon + +commit 0c176b97addf92a6ed4959dac2587b5b53efc74b +Author: Gaetan Nadon +Date: Thu Dec 2 11:55:46 2010 -0500 + + specs: remove roff version of x11 input synthesis extension + + Now located in libXext in docBook/XML format + + Signed-off-by: Gaetan Nadon + +commit 6bc74d111f1aa80f3395ee06223e47c5f6d3a010 +Author: Gaetan Nadon +Date: Tue Nov 30 11:21:02 2010 -0500 + + specs: XKB proto and lib specs are now in xextproto and libX11 + + Signed-off-by: Gaetan Nadon + +commit 1b51a0a2c25dd92fb61a0943a97e4152b54ff490 +Author: Gaetan Nadon +Date: Tue Nov 30 11:17:34 2010 -0500 + + RX: remove the framemaker file from distribution + + Signed-off-by: Gaetan Nadon + +commit fa5ce8a189438ee6b19c09d67269ee18aff29d9d +Author: Gaetan Nadon +Date: Tue Nov 30 09:10:00 2010 -0500 + + specs: move RX Mime spec to app/xrx + + Signed-off-by: Gaetan Nadon + +commit 8bcf9fd199096f8be33b5139b0b8bac017aab073 +Author: Gaetan Nadon +Date: Tue Nov 30 09:08:03 2010 -0500 + + specs: move low bandwith protocol specs to xextproto + + Signed-off-by: Gaetan Nadon + +commit dc570809bea74c65f0def809767f666f10c96479 +Author: Gaetan Nadon +Date: Mon Nov 29 17:25:41 2010 -0500 + + specs: remove Framemaker version of appgroup now in xextproto + + Signed-off-by: Gaetan Nadon + +commit beb347ae32e970b492e1ccd3ec27e8c7bb8f3bd9 +Author: Matt Dew +Date: Mon Nov 29 17:19:49 2010 -0500 + + specs: convert low bandwidth extention from Framemaker to DocBook/XML + + Signed-off-by: Gaetan Nadon + +commit d98ed0b746a91c8154b893714b1bf8b8f373105f +Author: Alan Coopersmith +Date: Thu Nov 11 17:24:33 2010 -0800 + + xorg-docs 1.5.99.901 (1.6 RC 1) snapshot for X11R7.6 RC1 docs + + Signed-off-by: Alan Coopersmith + +commit 20083aeb845a43bf1f358d041912e06b939d356b +Author: Alan Coopersmith +Date: Wed Nov 10 16:28:07 2010 -0800 + + ReleaseNotes.xml: Update credits section for 7.6 RC1 + + The list of people to credit in this release was created by running + the script at https://gist.github.com/671819 with my current list of + katamari modules/versions to get a unified ChangeLog for all katamari + modules. For xcb modules, since this is their first inclusion, this + went back to the dawn of the xcb project. + + From that list, everyone listed in the long form log output under either + Author: or *-by: was collected and added to the "These people contributed + in some way to X11R&relvers; since the release of X11R&prevrelvers;" list. + + The output was manually edited to remove duplicates which appeared to be + the same person, and non-identifiable usernames ("root", "xgi0007", etc.) + Additionally, the lead freedesktop.org sysadmin was manually added. + + For the second list, "This product includes software developed by", + the COPYING files in all katamari modules were mined for Copyright + notices and merged with the existing list. + + Signed-off-by: Alan Coopersmith + +commit 8b52358bde047c9ecbd4a52c13591ce0df28be9e +Author: Gaetan Nadon +Date: Sun Nov 7 10:32:21 2010 -0500 + + Implement the --disable-docs option + + The XORG_ENABLE_DOCS macro provide a configure option to + disable the generation of general documentation. + + The makefiles need to use the Automake conditional ENABLE_DOCS + + Reviewed-by: Alan Coopersmith + Signed-off-by: Gaetan Nadon + +commit fdebf058052aca57361153687fcdb5cd29b68cae +Author: Gaetan Nadon +Date: Fri Nov 5 17:24:24 2010 -0400 + + xmlrules.in: do not use --searchpath when sgml-doctools not installed + + The option to define a searchpath for css and xsl files is not + required when such files are known to be missing. + + The command emitted is: + /usr/bin/xmlto --searchpath /X11 xhtml-nochunks dps.xml + + Reviewed-by: Alan Coopersmith + Signed-off-by: Gaetan Nadon + +commit c8510a9a0bb10da9cfea6703aa38e5343a0d8b36 +Author: Gaetan Nadon +Date: Fri Nov 5 15:22:29 2010 -0400 + + HTML file generation: use the installed copy of xorg.css + + Currenlty the xorg.css file is copied in each location + where a DocBook/XML file resides. This produces about + 70 copies in the $(docdir) install tree. + + With this patch the HTML file contains the following XML element: + + when build from prefix /home/nadon/xorg/src. + + Reviewed-by: Alan Coopersmith + Signed-off-by: Gaetan Nadon + +commit 92d11dbaba41fc68ad6ba2af91e85de2f328d48c +Author: Alan Coopersmith +Date: Wed Nov 3 23:54:56 2010 -0700 + + First round of updates for X11R7.6 release notes + + Signed-off-by: Alan Coopersmith + Reviewed-by: Dan Nicholson + +commit 509ed4a982ed2e5232ef3f8d9f162a51a2939546 +Author: Gaetan Nadon +Date: Fri Nov 5 11:28:22 2010 -0400 + + specs: remove .gitignore, already covered by toplevel + + Signed-off-by: Gaetan Nadon + +commit 5ac02409a2b91cf0d55adfb9cd49555d28dc225f +Author: Gaetan Nadon +Date: Fri Nov 5 11:25:19 2010 -0400 + + xmlrules.in: add a clean-local target for chunked-html + + CLEANFILES does not work directories + + Signed-off-by: Gaetan Nadon + +commit 33f568d915d8e36d2c9d1d36d630c28a9f2889e7 +Author: Alan Coopersmith +Date: Wed Nov 3 20:14:27 2010 -0700 + + Versions.xml: Update to reflect current state + + - Explain xorg-server vs. X11R7.x numbering and why versions + reported by the server went backwards. + - Use 1.8.x instead of 6.8.x in examples to reinforce current versioning + - Show git tag/branch name format instead of CVS + - Stop claiming to speak for XFree86 + + Signed-off-by: Alan Coopersmith + +commit e0cabf2727539d216a097416a6ec8bfa0985b2a6 +Author: Alan Coopersmith +Date: Wed Nov 3 19:33:24 2010 -0700 + + Update README now that most of the docs have moved out + + Signed-off-by: Alan Coopersmith + +commit 9f522ffff753fbf37630c1d2d4e365883809cef7 +Author: Alan Coopersmith +Date: Wed Nov 3 19:21:18 2010 -0700 + + Remove NetBSD & OpenBSD platform docs + + Matthieu Herrb explains: + + "I would rather remove this document (and its brother NetBSD.xml) + completely. It was written for times where XFree86 was not yet + included in OpenBSD binary distributions and people had to download, + build and install it by themselve. + + Now (well it's been more than 10 years) that X is included with + OpenBSD distributions, this document is mostly and contains many + other out of date information." + + Signed-off-by: Alan Coopersmith + +commit 8c9927593051c952b0a18616418519ca8b01db19 +Author: Alan Coopersmith +Date: Tue Nov 2 19:25:40 2010 -0700 + + Convert platform docs from DocBook SGML to DocBook XML + + Uses newer tools for formatting, better matching other new docs + Moved from sgml/platform to new directory general/platform + + Delete SCO.sgml, since it's not been updated since the monolith + and the SCO port hasn't been maintained in a while. + + Since these were the last sgml documents, remove the sgml subdirectory, + and the configure.ac macros to find the docbook sgml tools. + + Signed-off-by: Alan Coopersmith + +commit a6f01f42733110b191d95cb9f48357c92a796f08 +Author: Alan Coopersmith +Date: Tue Nov 2 18:32:35 2010 -0700 + + Convert Versions doc from DocBook SGML to DocBook XML + + Uses newer tools for formatting, better matching other new docs + Moved from sgml/Versions.sgml to general/Versions.xml + + Signed-off-by: Alan Coopersmith + +commit 61aab1e0b6c5b4435e34f3aeb4ee0843ee1ce9b0 +Author: Alan Coopersmith +Date: Tue Nov 2 14:46:32 2010 -0700 + + Convert README doc from DocBook SGML to DocBook XML + + Uses newer tools for formatting, better matching other new docs + Moved from sgml/README.sgml to general/README.xml + + Signed-off-by: Alan Coopersmith + +commit 65c02da8c6b2e88eceeb418963ecc785e6245cc7 +Author: Alan Coopersmith +Date: Mon Nov 1 20:31:45 2010 -0700 + + Convert license doc from DocBook SGML to DocBook XML + + Uses newer tools for formatting, better matching other new docs + Moved from sgml/LICENSE.sgml to general/License.xml + + Signed-off-by: Alan Coopersmith + +commit 922bb8b668ef64514b906f8ab07bc6b81f35b75c +Author: Alan Coopersmith +Date: Mon Nov 1 18:59:25 2010 -0700 + + Convert font docs from DocBook SGML to DocBook XML + + Uses newer tools for formatting, better matching other new docs + Moved from sgml/fonts to new directory general/fonts + + Signed-off-by: Alan Coopersmith + +commit b12e1b22c0ecb7009ce31aa34206a277aff12faf +Author: Alan Coopersmith +Date: Mon Nov 1 18:32:43 2010 -0700 + + Use XML tools for release notes instead of SGML tools + + Document was already mostly xml-compatible + Uses newer tools for formatting, better matching other new docs + Moved from sgml/RELNOTES.sgml to general/release-notes.xml + + Signed-off-by: Alan Coopersmith + +commit d19d82db8672cc131be3060e80597d03c7606b0d +Author: Alan Coopersmith +Date: Mon Nov 1 17:43:45 2010 -0700 + + Convert DPS docs from DocBook SGML to DocBook XML + + Uses newer tools for formatting, better matching other new docs + Moved from sgml/graphics to new directory general/graphics + + Signed-off-by: Alan Coopersmith + +commit f4bcf39835cffe404cee002735f7429a8e9c065c +Author: Alan Coopersmith +Date: Mon Nov 1 17:35:12 2010 -0700 + + DPS.sgml: Trim down to just the obsolesence notice + + Signed-off-by: Alan Coopersmith + +commit 20497d4f075203a20e78ec2ee50fce5a893160a7 +Author: Alan Coopersmith +Date: Mon Nov 1 17:10:40 2010 -0700 + + XKB-Config.xml: update for current releases + + - Document xorg.conf.d keyboard matches instead of kbd driver entries + in xorg.conf + - Update to current xkb-config file names & paths, and link to the + xkb-config project site + - Add an example of enabling the ctrl-alt-bksp zapping sequence + - Delete "Direct XKB Configuration" section, since that no longer works + + Signed-off-by: Alan Coopersmith + Reviewed-by: Peter Hutterer + Reviewed-by: Julien Cristau + +commit a3e5dbf687984c93c5585c3e24650fa0a81c5be9 +Author: Alan Coopersmith +Date: Mon Nov 1 16:13:48 2010 -0700 + + XKB-Config.xml: misc markup cleanups + + Signed-off-by: Alan Coopersmith + +commit d98561ac2b8c36aec665c2b676705ec7e8d05b03 +Author: Alan Coopersmith +Date: Mon Nov 1 15:54:53 2010 -0700 + + XKB-Config.xml: convert itemizedlist to variablelist + + Signed-off-by: Alan Coopersmith + +commit 939f07b30537a18795bd8101b6049d397a00470f +Author: Alan Coopersmith +Date: Mon Nov 1 15:45:26 2010 -0700 + + Convert XKB docs from DocBook SGML to DocBook XML + + Uses newer tools for formatting, better matching other new docs + Moved from sgml/input to new directory general/input + + Signed-off-by: Alan Coopersmith + +commit dc55f8e10ed557083f15e57936f4115f689c211d +Author: Samuel Thibault +Date: Sun Oct 24 14:26:53 2010 +0200 + + Add GNU/Hurd subsystem + + Signed-off-by: Samuel Thibault + +commit 99191ab80e2f34f8c897a17f8232786a1957f109 +Author: Jesse Adkins +Date: Tue Sep 28 13:29:50 2010 -0700 + + Purge cvs tags. + + Signed-off-by: Jesse Adkins + Signed-off-by: Alan Coopersmith + +commit 21dad83872bf308ac7fd9583a250b27e6b379ecb +Author: Gaetan Nadon +Date: Tue Sep 28 20:19:54 2010 -0400 + + XACE spec: move from sgml/security to specs/Xserver directory + + This spec is a DocBook XML despite its sgml file extension. + + Reviewed-by: Alan Coopersmith + Signed-off-by: Gaetan Nadon + +commit 1a287268ed75cf115286686bac419b40915d9961 +Author: Gaetan Nadon +Date: Tue Sep 28 16:53:46 2010 -0400 + + xmlrules: make it accessible to more DocBook XML docs. + + Move it up at the toplevel and adjust existing makefiles. + Others will soon follow. + The "spec" dir stem has been renamed to "xml". + + Signed-off-by: Gaetan Nadon + +commit 45d90e7846d1b0fe07627170e794c043bc9ae9da +Author: Gaetan Nadon +Date: Tue Sep 28 16:35:19 2010 -0400 + + .gitignore: adjust to cover more generated files + + Now that more DocBook XML files are being generated. + Make an exception for a few manually edited text files. + + Signed-off-by: Gaetan Nadon + +commit 6e39a2649210ba267c2674947a214686ef0ed586 +Author: Gaetan Nadon +Date: Tue Sep 28 09:35:13 2010 -0400 + + Remove Linuxdoc Japanese XFree86 PC98 Dependent Information + + Alan Coopersmith wrote: + + "I think we recently dropped PC98 support from the X server, so I'd be okay + with dropping the documentation now". + + These documents will always be available in previously shipped tarballs + matching older server versions. They have never been built or installed. + + Reviewed-by: Matt Turner + Signed-off-by: Gaetan Nadon + +commit a66e77431b7ecbe762d6b0cf537e49dd12fc75fb +Author: Alan Coopersmith +Date: Wed Sep 22 15:44:35 2010 -0700 + + registry: Update paper mail address for registry submissions + + Signed-off-by: Alan Coopersmith + +commit 5ba228b0bbe76b76dc6e61e5ab9926afc77934be +Author: Alan Coopersmith +Date: Wed Sep 22 10:22:38 2010 -0700 + + registry: Update Sun Microsystems contact information + + Signed-off-by: Alan Coopersmith + +commit 4ad1771ca87392e69d843eef7340d56bc68591f1 +Author: Alan Coopersmith +Date: Wed Sep 22 10:18:32 2010 -0700 + + registry: Update X.Org Foundation contact information + + Signed-off-by: Alan Coopersmith + +commit f66df8c08728382b33e048d6ea2b30c4de62bf8f +Author: Gaetan Nadon +Date: Tue Sep 14 14:31:00 2010 -0400 + + config: delete various accessory build files for old docs + + Signed-off-by: Gaetan Nadon + +commit 49c27f4af739d5426cd43cff36c848929b574fcf +Author: Marc Balmer +Date: Sat Sep 18 14:12:48 2010 +0200 + + Add myself as maintainer for xf86-input-elographics. + + Acked-by: Peter Hutterer + +commit c9b0fe521bab59d602cae57a9fcdaba53a2a9a00 +Author: Gaetan Nadon +Date: Tue Sep 14 17:18:20 2010 -0400 + + Install.sgml: remove until suitable replacement is available + + The content is completely out of date (X11R6) and has not been + used since then. + + Reviewed-by: alan.coopersmith@oracle.com + Signed-off-by: Gaetan Nadon + +commit cb2eae04b5edbc6c1d11a8903b30012a0cae1371 +Author: Gaetan Nadon +Date: Tue Sep 14 16:55:56 2010 -0400 + + registry: update link to find latest version + + Unable to find the registry on the ftp site. + Use a link to git master. + + Reviewed-by: alan.coopersmith@oracle.com + Signed-off-by: Gaetan Nadon + +commit df3782b81bfdac5a8aaaf96209af9d30f701bf38 +Author: Gaetan Nadon +Date: Mon Sep 13 16:40:27 2010 -0400 + + config: build XLFD spec now in DocBook XML format + + Signed-off-by: Gaetan Nadon + +commit ee362193126bafdb14b1bd7a7e7847f750ee27ec +Author: Gaetan Nadon +Date: Mon Sep 13 16:31:14 2010 -0400 + + config: build ICCCM spec now in DocBook XML format + + Signed-off-by: Gaetan Nadon + +commit 2f1e4820e6867fb3e7c1cf684200ed5d936dcaef +Author: Gaetan Nadon +Date: Mon Sep 13 15:37:23 2010 -0400 + + config: build CTEXT spec now in DocBook XML format + + Signed-off-by: Gaetan Nadon + +commit 31df41d34725f2d43e28a0247582992873ef6d5d +Author: Gaetan Nadon +Date: Mon Sep 13 08:55:54 2010 -0400 + + config: install the documents in $(docdir) + + They were installed in $(datadir)/X11/doc. + This is not the appropriate location for documents. + If a distro/OS has a reason for installating them in $(datadir) + they can configure with --docdir=DOCDIR which removes the need + for a custom configure option. + + Reviewed-by: Alan Coopersmith + Signed-off-by: Gaetan Nadon + +commit 6ac3d9d7038bc65c3e3c98826a5b685827328886 +Author: Gaetan Nadon +Date: Mon Sep 13 08:54:09 2010 -0400 + + config: use the XORG_ENABLE_DOCS macro to control docs building + + As used in all modules containing docs. + It may look a bit over-kill in this case, but it will help + batch building if it is consistent. + + Reviewed-by: Alan Coopersmith + Signed-off-by: Gaetan Nadon + +commit 49e493163a6fafec93e37c221390d10518b04807 +Author: Gaetan Nadon +Date: Mon Sep 13 08:51:34 2010 -0400 + + config: use XORG_CHECK_DOCBOOK macro as is. + + Only a few sgml files are left to be converted to DocBook XML. + The new doc macros in util-macros will, by default, build all + formats unless the tool to do the job is not found. This + is what XORG_CHECK_DOCBOOK does as well. + + Reviewed-by: Alan Coopersmith + Signed-off-by: Gaetan Nadon + +commit 0fd6a2b459a9ff2ecc9514f6d5dac466c3f450cd +Author: Gaetan Nadon +Date: Sun Sep 12 22:30:13 2010 -0400 + + config: statement order for XORG_CHECK_DOCBOOK + + It should come after the configure options as they + modify the macro internal variable. + Found on MAC/OS as the docbook2 tools are missing. + + Signed-off-by: Gaetan Nadon + +commit 533956eaf9e60fdcde3cbc5536d89e41fea74c68 +Author: Gaetan Nadon +Date: Sun Sep 12 18:54:38 2010 -0400 + + config: duplicate specification to distribute MAINTAINERS + + No need to use both dist_ and EXTRA_DIST + + Signed-off-by: Gaetan Nadon + +commit 6e5eef2c17c0f8e321d97a9f62367570822374b8 +Author: Gaetan Nadon +Date: Sun Sep 12 15:24:38 2010 -0400 + + config: fix automake waring, use AC_CONFIG_FILES + + AC_OUTPUT with parms is deprecated. + + Signed-off-by: Gaetan Nadon + +commit 946cebf428ab1a917aaf3f086717fc317390cfd4 +Author: Gaetan Nadon +Date: Sun Sep 12 15:16:21 2010 -0400 + + config: add AC_CONFIG_SRCDIR, layout and comment + + Signed-off-by: Gaetan Nadon + +commit 7cf67b92cfdcbd4673b83960264b72a81d3ba16b +Author: Gaetan Nadon +Date: Sun Sep 12 15:04:24 2010 -0400 + + config: update AC_PREREQ statement to 2.60 + + Unrelated to the previous patches, the new value simply reflects + the reality that the minimum level for autoconf to configure + all x.org modules is 2.60 dated June 2006. + + ftp://ftp.gnu.org/gnu/autoconf/autoconf-2.60.tar.gz + + Signed-off-by: Gaetan Nadon + +commit 090da909f923565b4a420d823af8bec32ed105d9 +Author: Gaetan Nadon +Date: Sun Sep 12 14:38:08 2010 -0400 + + man: remove whitespace as reported by git-diff + + Signed-off-by: Gaetan Nadon + +commit b110165be41eaeaec3b1fce1d0e9be9965193855 +Author: Gaetan Nadon +Date: Sun Sep 12 13:29:34 2010 -0400 + + man: remove the "general" subdirectory + + Also remove old IMakefile revision tags. + The "man" subdir now consistent with all other modules. + + Signed-off-by: Gaetan Nadon + +commit 9993bc48ac187e341c6db2255fb44e165fcf3aab +Author: Gaetan Nadon +Date: Thu Sep 9 16:26:58 2010 -0400 + + Replace converted roff files with DocBook XML files + + Gather the remaining DocBook XML files from www.osource.org/xorg/docbook. + Some will be build in this xorg-docs modules, other may be moved + closer to the module they document. + + Reviewed-by: Alan Coopersmith + Signed-off-by: Gaetan Nadon + +commit 2f7229674a2da3b9d4397fe99df25f9b795eb86e +Author: Gaetan Nadon +Date: Thu Sep 9 15:39:07 2010 -0400 + + Move X Input protocol specs to lib/libXi and proto/inputproto + + Following the DocBook conversion + + Reviewed-by: Alan Coopersmith + Signed-off-by: Gaetan Nadon + +commit b607108c265330454769f5dc6f3cef791c48bd38 +Author: Gaetan Nadon +Date: Thu Sep 9 14:51:20 2010 -0400 + + Move XDMCP extension spec to lib/libXdmcp + + Following the DocBook conversion. + + Reviewed-by: Alan Coopersmith + Signed-off-by: Gaetan Nadon + +commit e788e0a580e42a411a90f802b35eff6289a8af82 +Author: Gaetan Nadon +Date: Thu Sep 9 14:48:07 2010 -0400 + + Move Screen Saver Extension spec to proto/scrnsaverproto + + Following the DocBook conversion + + Reviewed-by: Alan Coopersmith + Signed-off-by: Gaetan Nadon + +commit 5315569e2de5c37b4b303136d64af51da8ed1149 +Author: Gaetan Nadon +Date: Thu Sep 9 14:42:50 2010 -0400 + + Move Font Service protocol spec to proto/fontsproto/specs + + Following the DocBook XML conversion + + Reviewed-by: Alan Coopersmith + Signed-off-by: Gaetan Nadon + +commit 5490e43d4118ee6ef5c2557e5ee338f262dde980 +Author: Gaetan Nadon +Date: Thu Sep 9 14:22:28 2010 -0400 + + Move extension protocols specs from specs/Xext + + Following a DocBook XML conversions, bigreq, record and xc-misc + have moved to /proto in their respective directories. + + All others have moved to /proto/xextproto. + + Reviewed-by: Alan Coopersmith + Signed-off-by: Gaetan Nadon + +commit d10df6087d1f759a6a9bec3026528fd45899bad0 +Author: Gaetan Nadon +Date: Thu Sep 9 13:07:33 2010 -0400 + + Move X Protocol spec to proto/x11proto + + As a result of DocBook conversion + + Reviewed-by: Alan Coopersmith + Signed-off-by: Gaetan Nadon + +commit 0a33b798bbd8c04eab2e6258e6db500e65e12f9f +Author: Gaetan Nadon +Date: Thu Sep 9 11:23:25 2010 -0400 + + Remove check for PDF tooling for X protocol spec. + + The spec moved to proto/x11proto + + Reviewed-by: Alan Coopersmith + Signed-off-by: Gaetan Nadon + +commit 2fc350853a1d4591b86aa2f4446779e776c1b1da +Author: Gaetan Nadon +Date: Thu Sep 9 10:26:58 2010 -0400 + + Remove Makefile for specs/XProtocol. Now built in proto/x11proto + + As a result of the recent DocBook conversion. + + Reviewed-by: Alan Coopersmith + Signed-off-by: Gaetan Nadon + +commit a4559b762c2f67b28d59e804ad6a1ed76913f689 +Author: Gaetan Nadon +Date: Thu Sep 9 13:06:10 2010 -0400 + + config: xlogo.svg was missing in the tarball + + Signed-off-by: Gaetan Nadon + +commit bd575588e3ad149e5a967436f60f2de56cd5dde7 +Author: Gaetan Nadon +Date: Thu Aug 19 20:13:16 2010 -0400 + + config: upgrade to util-macros 1.8 for additional man page support + + Use MAN_SUBST now supplied in XORG_MANPAGE_SECTIONS + The value of MAN_SUBST is the same for all X.Org packages. + + Use AC_PROG_SED now supplied by XORG_DEFAULT_OPTIONS + + Signed-off-by: Gaetan Nadon + +commit aab6187cadb5a642ec4a7d97daf99ce08d5966ff +Author: Thomas Hellstrom +Date: Wed Aug 18 09:57:54 2010 +0200 + + Add myself as maintainer of xf86-input-vmmouse + + Signed-off-by: Thomas Hellstrom + +commit 3399ae70c5f6c44258c31f497f607929707d8d85 +Author: Thomas Hellstrom +Date: Wed Aug 18 09:51:44 2010 +0200 + + Added myself as maintainer of xf86-video-vmware + + Signed-off-by: Thomas Hellstrom + +commit 3c72169cde346fb14d73903818af9de4442ff0a5 +Author: Dirk Wallenstein +Date: Mon Jul 19 10:35:14 2010 +0200 + + Improve the section about available XKB options + + Signed-off-by: Dirk Wallenstein + Reviewed-by: Alan Coopersmith + Signed-off-by: Alan Coopersmith + +commit e16c615962e130bb251ff273bdb0e4c5df0c909a +Author: Gaetan Nadon +Date: Sat Jul 10 13:32:18 2010 -0400 + + Add the X11 protocol spec to the build system - Part II + + There was an non-Automake Makefile checked-in for which + an override was needed in .gitignore. It can go now. + + Signed-off-by: Gaetan Nadon + +commit 7436f4f910deaed2825ce99438f98aef0e0f9f82 +Author: Alan Coopersmith +Date: Sat Jun 12 08:49:29 2010 -0700 + + Move recordlib.ms & xtestlib.ms to libXtst module + + Signed-off-by: Alan Coopersmith + +commit a002cf8acbc1d0ac9f8c8beef0cd6111843d416d +Author: Alan Coopersmith +Date: Fri Jun 11 18:50:31 2010 -0700 + + Move several extension API specs to libXext module + + Only took those which had separate API vs. protocol specs. + + Signed-off-by: Alan Coopersmith + +commit 939250fa7e39c60f16ce648be07f3c6d11e79337 +Author: Julien Cristau +Date: Wed Jun 9 18:52:35 2010 +0200 + + Check for ps2pdf and pdftk in configure + + Signed-off-by: Julien Cristau + +commit 59a7d41a255a6b9d7738245983e5c775a7147f08 +Author: Julien Cristau +Date: Wed Jun 9 17:49:25 2010 +0200 + + Add the X11 protocol spec to the build system + + Signed-off-by: Julien Cristau + Reviewed-by: Alan Coopersmith + +commit 92e8aea8967bbe597cc7bd72ef3306fc482d0133 +Author: Alan Coopersmith +Date: Tue Jun 8 20:22:02 2010 -0700 + + Move specs/Xt to lib/libXt module + + Signed-off-by: Alan Coopersmith + +commit 56e8de26f874417b307245044fe84959b3b59bb6 +Author: Alan Coopersmith +Date: Tue Jun 8 20:16:58 2010 -0700 + + Move specs/ICE to lib/libICE module + + Signed-off-by: Alan Coopersmith + +commit fdab711a62793a9fd344cbaa6ceaa62626de973f +Author: Alan Coopersmith +Date: Mon Jun 7 15:50:55 2010 -0700 + + Move specs/Xmu/Xmu.ms to libXmu module + + Signed-off-by: Alan Coopersmith + +commit 30b4460ffa138fded4b872eff6f0c02ac4188ae2 +Author: Alan Coopersmith +Date: Mon Jun 7 15:45:30 2010 -0700 + + Remove out of date specs/GL/libGL.txt + + Mesa developers agreed that this documentation belongs with Mesa, not + xorg-docs, so an updated version should go there. + + Signed-off-by: Alan Coopersmith + +commit c2d690a68aa39f34bee60240eac613d5e7dff38f +Author: Alan Coopersmith +Date: Thu May 20 18:48:39 2010 -0700 + + Move sgml/core/Xserver-spec.sgml to xserver module + + Signed-off-by: Alan Coopersmith + +commit b01740e07e96dce8def3dc97514110d19fd736ae +Author: Yaakov Selkowitz +Date: Sun Apr 4 13:56:44 2010 -0500 + + MAINTAINERS: update Cygwin and MinGW ports + + Signed-off-by: Yaakov Selkowitz + +commit c707343c363c3fb9fd54d547796f66eae0dea5c4 +Author: Alan Coopersmith +Date: Tue Mar 16 22:20:17 2010 -0700 + + Xsecurity.man: Removing Kerberos left 5 mechanisms implemented + + Signed-off-by: Alan Coopersmith + +commit 5e046e3a62e2dfc633cd079d76fd105ebbb19faa +Author: Julien Cristau +Date: Tue Dec 23 19:58:35 2008 +0100 + + X.man: add manpage section to Xsecurity reference + +commit 51294b3eee4b059476a64ec71feb98b804195d5c +Author: Julien Cristau +Date: Tue Dec 23 19:57:48 2008 +0100 + + X.man: fix some minus vs hyphen confusions + +commit 39d3fd0fabd63a507aafbdfe13c6caaf393978ea +Author: Julien Cristau +Date: Tue Dec 23 19:27:44 2008 +0100 + + X.man: X servers don't "generally" support DECnet connections anymore + + xtrans lost DECnet support in 2008, the server and libs before that. + +commit 185953fd217dc69f0af0ef8d513197ceee6753b3 +Author: Alan Coopersmith +Date: Fri Jan 15 16:03:09 2010 -0800 + + Update Sun license notices to current X.Org standard form + + Signed-off-by: Alan Coopersmith + +commit c7ccb5d578c755e3e8e382867b43bbee53b0cce0 +Author: Tilman Sauerbeck +Date: Tue Dec 29 18:22:54 2009 +0100 + + Removed myself from the mga maintainers list. + + Signed-off-by: Gaetan Nadon + +commit a55e2fd430efbdedd7b854aebdae4f4012d233f7 +Author: Peter Hutterer +Date: Fri Dec 18 08:11:41 2009 +1000 + + MAINTAINERS: making myself the maintainer of xinput + + Given I've effectively maintained it since 1.3, it seems sensible to state + so. + + Signed-off-by: Peter Hutterer + +commit b0e990b93b4189217be175a9a3bdc6cb04b61edd +Author: Gaetan Nadon +Date: Wed Dec 16 16:30:52 2009 -0500 + + MAINTAINERS: add video-mach64, update video-ati + + Reported-by: Alex Deucher + Acked-by: Mark Kettenis + Signed-off-by: Gaetan Nadon + +commit de4f1bcbfcccf10887ca8bba7f8d4600be6a5aca +Author: Alan Coopersmith +Date: Thu Dec 10 21:06:46 2009 -0800 + + Grammar fix in X.man + + Signed-off-by: Alan Coopersmith + +commit c70e059150213a00c76b5f10768c8ed5ab8c3d80 +Author: Gaetan Nadon +Date: Mon Nov 30 20:31:00 2009 -0500 + + sgml: add missing generated formats + + These are not build by default, so they can be missed. ps and html + + Signed-off-by: Gaetan Nadon + +commit 49aa344ffad3e4f276f05b68169d9b857cf6437c +Author: Gaetan Nadon +Date: Mon Nov 30 20:27:39 2009 -0500 + + man: delete redundant .gitignore file for man pages + + This is now handled by the defaults section at the toplevel gitignore + + Signed-off-by: Gaetan Nadon + +commit 130b53c632b71b1dd9ded154816743622930734a +Author: Gaetan Nadon +Date: Sun Nov 29 20:32:13 2009 -0500 + + Makefile.am: add ChangeLog and INSTALL on MAINTAINERCLEANFILES + + Now that the INSTALL file is generated. + Allows running make maintainer-clean. + +commit 5370081e632c34bee523faca40e5763cfeb22868 +Author: Gaetan Nadon +Date: Wed Oct 28 15:43:41 2009 -0400 + + configure.ac: AM_MAINTAINER_MODE missing #24238 + + This turns off maintainer mode build rules in tarballs. + Works in conjunction with autogen.sh --enable-maintainer-mode + For all X.Org components. + +commit 10fcd352ea6ea56f7bdea325e5f4ae2f08045d94 +Author: Gaetan Nadon +Date: Wed Oct 28 14:09:09 2009 -0400 + + INSTALL, NEWS, README or AUTHORS files are missing/incorrect #24206 + + Add missing INSTALL file. Use standard GNU file on building tarball + README may have been updated + Remove AUTHORS file as it is empty and no content available yet. + Remove NEWS file as it is empty and no content available yet. + +commit 221061239b76a8c769a51edab009de6bd2492df4 +Author: Gaetan Nadon +Date: Mon Oct 26 22:08:40 2009 -0400 + + Makefile.am: ChangeLog not required: EXTRA_DIST or *CLEANFILES #24432 + + ChangeLog filename is known to Automake and requires no further + coding in the makefile. + +commit 9e7a10a089ec9dec1171268cf74aa2f8dd989fb6 +Author: Gaetan Nadon +Date: Thu Oct 22 12:34:16 2009 -0400 + + .gitignore: use common defaults with custom section # 24239 + + Using common defaults will reduce errors and maintenance. + Only the very small or inexistent custom section need periodic maintenance + when the structure of the component changes. Do not edit defaults. + +commit e938abdd50f4801f2009927624813a23dbd29ef4 +Author: Alan Coopersmith +Date: Mon Oct 26 00:08:03 2009 -0700 + + Mouse driver man page is now mousedrv(4), not mouse(4) + + Nothing like posting a finished release tarball to bring a mistake + to your attention... + + Signed-off-by: Alan Coopersmith + +commit df2c2f9b91f2a6a7708e2760d2ec45ce2efa002b +Author: Alan Coopersmith +Date: Sun Oct 25 14:59:41 2009 -0700 + + xorg-docs 1.5 (X11R7.5) + + Signed-off-by: Alan Coopersmith + +commit f40bbed9f92dfd86168facdb874663aa0de63395 +Author: Alan Coopersmith +Date: Sun Oct 25 14:52:57 2009 -0700 + + Migrate to xorg macros 1.3 & XORG_DEFAULT_OPTIONS + + Signed-off-by: Alan Coopersmith + +commit 570e2ff8736bbc977085c5b3e47d159d4dffd90b +Author: Alan Coopersmith +Date: Sat Oct 24 00:06:05 2009 -0700 + + More updates to Release Notes for X11R7.5 + + - Try to explain the katamari & modules better in the introduction + - Add section about build system changes + - Add VPDAU to DRI2 description + - Move driver list after new feature list & server overview + - Update driver list for new & dropped drivers, add missing man page links + - Drop out-of-date XDarwin description + - Drop out-of-date warning that window managers don't support Xinerama + - Move DGA 2.0 to deprecated features section + - Add notes about changes to C-A-B default & blackroot/nocursor (-retro) + - Drop description of Luxi fonts that duplicates fonts.sgml + - Add note about new default font directory & compression options + - Update CID font support section to state it's been removed + - Add to removed features section: fontcache extension, libXaw8 (Xprint), + kdrive servers (Xvesa and friends) + - Add to future removals: HAL input device support, Xsdl, DGA 2.0 + - Updates to contributor lists + - Change from DocBook/SGML 4.2 to DocBook/XML 4.3 + + Signed-off-by: Alan Coopersmith + +commit 2c6eff5f97be03af4673c313033d7b28a7e5f1ed +Author: Alan Coopersmith +Date: Sat Oct 24 00:05:11 2009 -0700 + + Make DTD version match DTD URL in XACE-Spec.sgml & Xserver-spec.sgml + + Signed-off-by: Alan Coopersmith + +commit 0107875923cb585e9ba0b86c11e14d94a0954f61 +Author: Alan Coopersmith +Date: Fri Oct 23 16:41:16 2009 -0700 + + Update BSD platform docs for 7.5 release + + Signed-off-by: Alan Coopersmith + +commit 98b7aa8dd7d270f578144ba2e78c36c3bd57c0fd +Author: Alan Coopersmith +Date: Fri Oct 23 16:35:40 2009 -0700 + + Update fonts.sgml for the last few years worth of font changes + + - CID fonts are no longer supported + - font backends are no longer loadable modules + - font paths may be specified as catalogue: directories + - font paths are now optional in xorg.conf files + - default font dir change from /usr/X11R6/lib/X11/fonts + to /usr/share/fonts/X11 + - the Type1 & X-TT font backends/modules are no longer available + + Signed-off-by: Alan Coopersmith + +commit 7fb8d99c74fc122313323de177f20ed2601bbbd7 +Author: Alan Coopersmith +Date: Thu Oct 22 23:21:07 2009 -0700 + + Move description of XFree86 4.4 compose changes to Compose man page in libX11 + + After 5 years, they no longer need to be called out as a new feature in + the release notes. + + Signed-off-by: Alan Coopersmith + +commit 2f53384c7b3f2bdde1be530ef213f413a9e87e02 +Author: Alan Coopersmith +Date: Sun Oct 18 00:20:01 2009 -0700 + + RELNOTES: Correct release for Compose file changes + + Signed-off-by: Alan Coopersmith + +commit d8a9612d5d0855f711955cd1f4fbc9e5d6f44038 +Author: Alan Coopersmith +Date: Sun Oct 18 00:16:57 2009 -0700 + + RELNOTES: Fix some character entity codes + + Signed-off-by: Alan Coopersmith + +commit 47ab9a206702b732dfe9713d0425ab94a32cc8e9 +Author: Alan Coopersmith +Date: Sat Oct 17 21:18:50 2009 -0700 + + xorg-docs 1.4.99.902 (1.5 RC 2) snapshot for X11R7.5 RC1 docs + + Signed-off-by: Alan Coopersmith + +commit 88790927611a794b9acd55d35886679a84c449c6 +Author: Alan Coopersmith +Date: Sat Oct 17 20:34:51 2009 -0700 + + RELNOTES: Update contributor list from git-log of all katamari modules + + Signed-off-by: Alan Coopersmith + +commit cb5a9694f696564173bcf247af2ab329c8e7ed8d +Author: Alan Coopersmith +Date: Sat Oct 17 14:08:38 2009 -0700 + + Move xtrans specs to lib/libxtrans module + + Signed-off-by: Alan Coopersmith + +commit 15d1cb348904f849c671926fa3a03ed2652b27e8 +Author: Alan Coopersmith +Date: Wed Oct 14 20:02:00 2009 -0700 + + LICENSE: update license notes for 7.5 release + + - Copy introductory comments from README.sgml + - Add preferred license format from xserver/COPYING + - In sections with mixed license text & description, use blockquotes to + distinguish the license text + - Move XFree86 1.1 license statement from the top to the XFree86 license + section + - Update NetBSD Foundation license to current form (drop advertising clauses) + - Drop NVIDIA custom license now that they've moved to standard MIT + - Replace GLX Public License with SGI Free B + - Drop SGI CID Font Code Public License since the code is no longer shipped + + Signed-off-by: Alan Coopersmith + +commit 11bc345d8693ed308ce2473c66f65d8fe4efaaf6 +Author: Alan Coopersmith +Date: Wed Oct 14 19:05:42 2009 -0700 + + Move libX11/XIM/locale specs to libX11 module + + Signed-off-by: Alan Coopersmith + +commit b32b02d3da0b1a197c249aa92d3a2c5f039f38d0 +Author: Alan Coopersmith +Date: Tue Oct 13 13:37:41 2009 -0700 + + Move Xprint docs to printproto, libXp, & Xprint server modules + + Signed-off-by: Alan Coopersmith + +commit e97bdda6d9ce4046b29afd6780ec1d8468f6f751 +Author: Alan Coopersmith +Date: Tue Oct 13 10:56:35 2009 -0700 + + Move rstart specs to app/rstart module + + Signed-off-by: Alan Coopersmith + +commit 35108198ceed3969ce89d7ea2499ced0b08fbfa6 +Author: Alan Coopersmith +Date: Mon Oct 12 22:54:38 2009 -0700 + + Move specs/PM/PM_spec to proto/pmproto module + + Signed-off-by: Alan Coopersmith + +commit 0fb0e8edd5418f07a3f7144d5b2818efe2b748ac +Author: Alan Coopersmith +Date: Sat Oct 10 16:37:10 2009 -0700 + + Move xv-protocol-v2.txt from xorg-docs to videoproto + + Signed-off-by: Alan Coopersmith + +commit fb6bf562b558b59a9d0e06dd8886ff93deeee1dd +Author: Alan Coopersmith +Date: Sat Oct 10 00:46:05 2009 -0700 + + Move session management specs to libSM module + + Signed-off-by: Alan Coopersmith + +commit 2b2cf62524e99075b6c613e38310748e769efddb +Author: Alan Coopersmith +Date: Fri Oct 9 22:14:54 2009 -0700 + + Bug 10274: X(7) manpage doesn't document %D for environment variables + + https://bugs.freedesktop.org/show_bug.cgi?id=10274 + Reported to Debian by Julian Gilbey (Debian BTS #243597) + + Signed-off-by: Alan Coopersmith + +commit c10b0ac6f19778d6e8d0ce5033ee7e8710b02c17 +Author: Alan Coopersmith +Date: Fri Oct 9 16:01:18 2009 -0700 + + Move Xaw specs to libXaw repo + + Signed-off-by: Alan Coopersmith + +commit d6c1d6f145c39981ae0757b419241c0d4bcc9919 +Author: Alan Coopersmith +Date: Wed Oct 7 21:31:39 2009 -0700 + + Replace old Xdarwin docs with pointer to current Xquartz website + + Signed-off-by: Alan Coopersmith + Reviewed-by: Jeremy Huddleston + +commit f52d807aa18580b7b23ddf4d743d61c3df248052 +Author: Alan Coopersmith +Date: Wed Oct 7 11:01:41 2009 -0700 + + Remove very-out-of-date docs for Lynx & OS/2 platforms + + Signed-off-by: Alan Coopersmith + +commit d3aa188d287fb449e620d9b8e5dddffabd321eee +Author: Alan Coopersmith +Date: Wed Oct 7 10:53:40 2009 -0700 + + Move specs/Xserver/fontlib.ms to lib/libXfont + + Signed-off-by: Alan Coopersmith + +commit ea742b44c81800616ba308c5a021bf4b32312947 +Author: Alan Coopersmith +Date: Wed Oct 7 10:52:33 2009 -0700 + + Mark XTrap as Obsolete in MAINTAINERS + + Signed-off-by: Alan Coopersmith + +commit c2f2503d2dd26b9306c5783a29785380bf531a24 +Author: Guillem Jover +Date: Wed Sep 23 02:55:53 2009 +0200 + + Add .gitignore files + + Signed-off-by: Guillem Jover + +commit 724b114c4eb98e505936455079864af23169cfdf +Author: Guillem Jover +Date: Sat Sep 19 15:14:08 2009 +0200 + + MAINTAINERS: Use xorg-devel instead of xorg for mailing list + + Signed-off-by: Guillem Jover + Signed-off-by: Daniel Stone + +commit 11d244cdb677447947aebdca6ea44a74a3480cfe +Author: Alan Coopersmith +Date: Thu Oct 1 23:24:03 2009 -0700 + + Move specs/XvMC/XvMC_API.txt to libXvMC module + + Signed-off-by: Alan Coopersmith + +commit 6143ef460e0f5c1aca28effa2f4ec0c0a9ebe26a +Author: Alan Coopersmith +Date: Thu Oct 1 23:21:32 2009 -0700 + + Move specs/Xv/xv-library-v2.2.txt to libXv module + + Remove library spec this time, not the protocol spec. Oops. + + Signed-off-by: Alan Coopersmith + +commit adaa4bdc67098f6ca26c214b7c62d8cacebc840b +Author: Alan Coopersmith +Date: Thu Oct 1 23:05:51 2009 -0700 + + Move specs/Xv/xv-library-v2.2.txt to libXv module + + Signed-off-by: Alan Coopersmith + +commit 7aecfa578192aeb37e8f82ff827695fb4d4b5c1b +Author: Alan Coopersmith +Date: Thu Oct 1 22:18:24 2009 -0700 + + Move specs/Render/library to libXrender module + + Signed-off-by: Alan Coopersmith + +commit 16e0cf42ff7d160c1b917c1e671d8832359986ca +Author: Alan Coopersmith +Date: Thu Oct 1 21:25:09 2009 -0700 + + Remove hardcopy directory + + Almost all files in there were generated output, many of which were + generated from older versions and were now out of date. + + Signed-off-by: Alan Coopersmith + +commit d905ce5cab6c4845e459e7f531233e50c9a1f543 +Author: Peter Hutterer +Date: Fri Oct 2 11:44:06 2009 +1000 + + Remove X Input protocol spec. + + The protocol spec has moved to the inputproto component. Rather than having + two different specs that may become out-of-sync, remove it from here and + stick a reference in. + + Signed-off-by: Peter Hutterer + Reviewed-by: Alan Coopersmith + +commit f0299dace37eb111bcc09cf6578bb4b16c874c7d +Author: Peter Hutterer +Date: Fri Oct 2 11:50:23 2009 +1000 + + Remove out-dated XI2 stuff from Xi protocol spec. + + The protocol spec here represents the state after the MPX merge and has + changed considerably since. The new spec is over in the inputproto module. + + Signed-off-by: Peter Hutterer + Reviewed-by: Alan Coopersmith + +commit f7fe7beb7a4d0509a23ffc34a4a5739b28d82850 +Author: Alan Coopersmith +Date: Fri Sep 18 21:19:15 2009 -0700 + + 1.4.99.901 (1.5 RC 1) snapshot for X11R7.5 RC1 docs + + Signed-off-by: Alan Coopersmith + +commit ce15facd8bfac5abdf263c416be06665aeacad46 +Author: Alan Coopersmith +Date: Fri Sep 18 21:07:18 2009 -0700 + + Fix X11R version numbers in fonts document + + Signed-off-by: Alan Coopersmith + +commit 5df216cea0c400f6e8ea6878907377d034e54de5 +Author: Alan Coopersmith +Date: Fri Sep 18 20:36:03 2009 -0700 + + Drop Bitstream Vera from license doc since we no longer ship those fonts + + Signed-off-by: Alan Coopersmith + +commit c8690bf2becafef051445aae5a4a0e1b79494c2d +Author: Alan Coopersmith +Date: Fri Sep 18 19:51:22 2009 -0700 + + Add SVG conversion of misc/xlogo.epsi + + Signed-off-by: Alan Coopersmith + +commit f670bbb87a4c9658d0257cb9c58b31e6a8fd870e +Author: Alan Coopersmith +Date: Fri Sep 18 18:48:34 2009 -0700 + + General man page updates for 7.5 release + + - Correct current default paths for many files/env vars + - Remove Xprint, XDarwin, lbxproxy, kbd_mode, & MIT-KERBEROS-5 references + - Add Xephyr, Xquartz, Xvnc & XWin to X server list in "See Also" + - Make display manager discussion more generic + - Displays can have more than one keyboard and mouse each now + - Note that Qt & GTK+ apps don't use X Resources + - Remove XFT_CONFIG from list of environment variables + - Strip trailing whitespace + + Signed-off-by: Alan Coopersmith + +commit b142c8140bf726246ef28ffc7e9438c32512b0bc +Author: Alan Coopersmith +Date: Fri Sep 18 17:38:31 2009 -0700 + + Add pointers to wiki, bugzilla & git to the readme + + Signed-off-by: Alan Coopersmith + +commit eed6e609cc55ab30889de303fdb9ef9663e7709a +Author: Alan Coopersmith +Date: Fri Sep 18 17:36:49 2009 -0700 + + MAINTAINERS: vga is obsolete, ati 3-way-split has been finished + + Signed-off-by: Alan Coopersmith + +commit c469f170a9371171fac3abbaf5e398a5fd5535bf +Author: Alan Coopersmith +Date: Thu Sep 17 08:08:18 2009 -0700 + + Reformat credits list in RELNOTES for better readability + + Signed-off-by: Alan Coopersmith + +commit cc89c042e1143f276fe7ab22d2171d7569f5c902 +Author: Alan Coopersmith +Date: Wed Sep 16 20:53:26 2009 -0700 + + Start updating README & RELNOTES for X11R7.5 + + Signed-off-by: Alan Coopersmith + +commit 265aa0510d925efb59de9eea6b5da63ef2834483 +Author: Alan Coopersmith +Date: Wed Sep 16 17:30:13 2009 -0700 + + Strip trailing whitespace from sgml docs + + Signed-off-by: Alan Coopersmith + +commit 7b5518a9c3bb35f50fe2dd9f7be1a77549a05f54 +Author: Alan Coopersmith +Date: Wed Sep 16 11:26:13 2009 -0700 + + Solaris platform docs update for Xorg 1.7 + + Drop long out of date information + Add updates for new virtual terminal support in OpenSolaris + + Signed-off-by: Alan Coopersmith + +commit 8b49e7e5eca50f47c70639e74be72b71df9d0577 +Author: Peter Hutterer +Date: Wed Sep 9 13:52:22 2009 +1000 + + MAINTAINERS: Update input-void maintainer from ajax to me. + + Signed-off-by: Peter Hutterer + +commit 8bb6f8d72d67ace53771bbec9c748dd115b8dbcf +Author: Keith Packard +Date: Thu Sep 3 14:06:17 2009 -0700 + + Add Makefile to build x11.pdf + + Signed-off-by: Keith Packard + +commit e73134d2e82b147c857e0c2bda8f16f7fff58142 +Author: Eamon Walsh +Date: Mon Jun 29 16:05:09 2009 -0400 + + xace: property access hook documentation updates for Post hook. + + Signed-off-by: Eamon Walsh + +commit 3cc3a00d84ea54e659d93f0c5a1ba403be07f7ec +Author: Eamon Walsh +Date: Fri Jun 19 18:17:59 2009 -0400 + + xace: device access hook documentation updates for XI2. + + Signed-off-by: Eamon Walsh + +commit 18556c4ba2840b94549630797fc10c26f344f387 +Author: Alan Coopersmith +Date: Thu Jun 4 21:35:48 2009 -0700 + + Move xfs/libFS docs to app/xfs & lib/libFS + + Signed-off-by: Alan Coopersmith + +commit 957e9fc847048b48b84f0aaca4f810724eca2fd1 +Author: Peter Hutterer +Date: Fri May 15 10:03:22 2009 +1000 + + Xi: DevicePropertyNotify events were introduced with 1.5, not 2.0 + + Reported-by: Alan Coopersmith + Signed-off-by: Peter Hutterer + +commit dc85e859c5690d6d467c6b61653991ad289e4f15 +Author: Peter Hutterer +Date: Fri May 15 10:02:09 2009 +1000 + + Xi: s/secifies/specifies/g + + Signed-off-by: Peter Hutterer + +commit 73ced6e24e28f97f1b4c5f6ec612e06c0c2c6477 +Author: Peter Hutterer +Date: Wed Feb 18 10:51:49 2009 +1000 + + Add "Deactivated" state, mark deactivated input drivers as such. + + "Deactivated" is a step down from unmaintained, but before obsolete. If users + come and require a deactivated package, this package may change back into + "unmaintained" (or in paradise, even "Maintained") state. + + Signed-off-by: Peter Hutterer + +commit 00f4c1f5cbb16b819739f77e2b318a1b28973dcb +Author: Peter Hutterer +Date: Mon Feb 2 09:15:39 2009 +1000 + + Add xf86-input-synaptics maintainers. + + Signed-off-by: Peter Hutterer + +commit 4aa9abf958582588829c591a3f83420577301925 +Author: Alan Coopersmith +Date: Tue Feb 17 17:19:43 2009 -0800 + + MAINTAINERS: Update lists of unmaintained and obsolete modules + + Signed-off-by: Alan Coopersmith + +commit 83541f688b0e903f1c8c5b520ff0fd1b406f4420 +Author: Alan Coopersmith +Date: Tue Feb 17 15:54:48 2009 -0800 + + MAINTAINERS: Remove compiz from X.Org apps + + They're moving away from X.Org/Freedesktop.Org hosting to their own + bugzilla/git/mailing lists - see + http://lists.freedesktop.org/archives/compiz/2009-February/003284.html + + Signed-off-by: Alan Coopersmith + +commit 037374d93f7655bad76006c0f6e195974d079c21 +Author: Alan Coopersmith +Date: Tue Feb 17 15:18:33 2009 -0800 + + MAINTAINERS: Add pointers to SubmittingPatches wiki page & xorg-devel list + + Signed-off-by: Alan Coopersmith + +commit 026f0eae5357478cdf49449109d4c14c238ebad9 +Author: Alan Coopersmith +Date: Wed Feb 4 17:01:17 2009 -0800 + + Accept maintainership of keyboard & mouse drivers + +commit d1eb4c61b465e36c509358d3a1d8861f53059bb5 +Author: Paulo Cesar Pereira de Andrade +Date: Tue Jan 27 15:45:47 2009 -0200 + + Correct make distcheck. + +commit b7362d0bd77957d30fe16b14708643eea2a01acf +Author: Peter Hutterer +Date: Fri Sep 26 13:08:02 2008 +0930 + + Xi specs: Add JOYSTICK as predefined device type. + +commit 4d54bb7e109816f374ea0211aff0a82c38b59d4e +Author: Peter Hutterer +Date: Fri Sep 26 11:42:43 2008 +0930 + + Xi specs: Update device properties requests/event. + + ConfigureDeviceProperty and QueryDevicProperty have been removed, "pending" + does not exist anymore. + BadAccess may be returned for deletion or modification. + DevicePropertyNotify events are not XGE events. + + Label DPs as introduced with XI 1.5 + +commit a1048ea88ad0bcb05cee9592039578ba3e89e648 +Author: Jerome Pinot +Date: Sun Sep 21 21:51:53 2008 +0200 + + Fix rgb.txt. Bug #17689. + +commit 372749a6871cefa3277407c5098fcdcd0c20c3d6 +Author: Paulo Cesar Pereira de Andrade +Date: Wed Jul 30 18:09:01 2008 -0300 + + Update configure.ac for removal of empty directories. + + This is a minor correction to commit 1cd356558d2748e4f8bca0d63c832cf5a623321e. + +commit 409c8df5fe657ef3700d5e475b4d07cb152ac807 +Author: Alan Coopersmith +Date: Tue Jul 29 18:10:24 2008 -0700 + + Update XOrgFoundation man page to point to git, not cvs + +commit 34c863c2ba2838d42ff88e5f008538d2a250dfb7 +Author: Alan Coopersmith +Date: Tue Jul 29 17:56:21 2008 -0700 + + X(7) man page formatting & typo fixes + +commit a9fb8c55a03609c5314a4162a48007eb695eb66a +Author: Peter Hutterer +Date: Tue Jul 29 09:47:29 2008 +0930 + + Xi specs: Update DevicePresence for DeviceControlChanged + + Also stick a comment into ChangeDeviceControl that it causes presence events. + +commit b5b6acedd659328206dc20ff08818fd11502b460 +Author: Julien Cristau +Date: Sun Jul 27 14:24:37 2008 +0200 + + rename security.man to Xsecurity.man + +commit 1cd356558d2748e4f8bca0d63c832cf5a623321e +Author: Julien Cristau +Date: Sun Jul 27 14:14:48 2008 +0200 + + fix build in a builddir + + wildcards considered harmful + also remove empty subdirectories + +commit 3fcc6b06b64535550ea95582d3d5d70fb6490ee9 +Author: Peter Hutterer +Date: Mon Jul 21 16:51:38 2008 +0930 + + Xi specs: Allow same mapping for multiple buttons in XI 2. + +commit b7f15e42b23264053f366770e514c1dd48420d6b +Author: Peter Hutterer +Date: Wed Jul 9 12:40:25 2008 +0930 + + Xi specs: add protocol documation for input device properties. + +commit e445b3aaaa514813ce52ba775c62d2e2d97da1d1 +Author: Adam Jackson +Date: Wed Jul 2 14:52:24 2008 -0400 + + Various subsystem updates. + +commit 214b85c4fabc14aa53a8b8a94fb36567074f3df7 +Author: Peter Hutterer +Date: Wed Jul 2 21:51:22 2008 +0930 + + MAINTAINERS: update my email address. + +commit 790e697dd052ffabdf2b9489ec256be060b94605 +Author: Peter Hutterer +Date: Thu Jun 19 20:45:05 2008 +0930 + + Xi specs: update the description of the state field (device events). + + XI 2: + If dev is a master device: state == device state + state of paired master + If dev is attached: state == device state + state of device paired with master + if dev is floating: state == device state, all other bits 0 + +commit 6c951a0c5ee439db66c350f7429460f81c3af497 +Author: Peter Hutterer +Date: Tue Jun 17 14:38:54 2008 +0930 + + MAINTAINERS: Looks like evdev is mine now. + + Complaints can be filed at every full moon but only before 3pm. + +commit 46335b4f4f55174ff72175ee3487902c20e21156 +Author: Daniel Stone +Date: Thu Jun 12 01:11:39 2008 +0300 + + MAINTAINERS: Peter is really the input king these days + + Make this reflect the status quo. Not checked with Peter for fear he'd + say no. + +commit 2e3ce4a2ca3e3ce1a29b9d78dffd8cf5029ce72c +Author: Peter Hutterer +Date: Thu May 22 11:44:34 2008 +0930 + + Xi specs: Add note that we're including 2.0 as well now. + +commit b7b59362de9389d5d891eb77731ca8c260e0d845 +Merge: c86a9b7 4c4b977 +Author: Peter Hutterer +Date: Mon May 12 17:46:58 2008 +0930 + + Merge branch 'master' into mpx + + Conflicts: + + specs/Xi/protocol.xml + +commit 4c4b977b3f53b14a33028160bc3b43b6f49bba3c +Author: Peter Hutterer +Date: Mon May 12 17:45:16 2008 +0930 + + Xi specs: note about deprecated Change[Keyboard|Pointer]Device. + + Server 1.4 (coincidentally also XI 1.4) always returns BadDevice. + +commit 019258abc5bb90afb725676510f76799b54be814 +Author: Peter Hutterer +Date: Mon May 12 16:56:15 2008 +0930 + + Xi specs: add DevicePresence events. + (cherry picked from commit c86a9b7b93e8c47ff6382f3960b427bf2adb4861) + +commit c86a9b7b93e8c47ff6382f3960b427bf2adb4861 +Author: Peter Hutterer +Date: Mon May 12 16:54:21 2008 +0930 + + Xi specs: add DevicePresence events. + +commit 3fc64c7b9699d628be5f148d3c78c0ec49bfa74e +Author: Peter Hutterer +Date: Mon May 12 16:43:33 2008 +0930 + + Xi specs: add XI 2.0 events. + +commit b8bfc9ad2d7cf1698dc7878ce892f1587e1cfd01 +Author: Peter Hutterer +Date: Mon May 12 15:16:43 2008 +0930 + + Xi specs: add new requests for XI 2. + +commit c25407c99646ba6ac801f7e7bd6005bbe074a72b +Author: Peter Hutterer +Date: Mon May 12 14:01:54 2008 +0930 + + Xi specs: ListInputDevices, GetExtensionVersion and OpenDevice specs for XI2. + +commit 1653c34f80420024c3e3d82cbee4d9afb0a714ed +Author: Peter Hutterer +Date: Mon May 12 12:36:19 2008 +0930 + + Xi specs: add blurb about XI 2 device handling. + +commit 8d70d2e02231a535299ab48e88928d6c853bc71a +Author: Peter Hutterer +Date: Sat May 10 23:22:25 2008 +0930 + + Xi specs: clean up xml, try to get a readable output. + + doclifter isn't perfect. + +commit 3122c88092b11253ed8ee43d70d692fa5428fbce +Author: Peter Hutterer +Date: Sat May 10 23:08:19 2008 +0930 + + Xi specs: clean up the layout of the first page. + +commit d03eeef819d444504cae3f5135da2d3b3f0e5235 +Author: Peter Hutterer +Date: Sat May 10 23:02:29 2008 +0930 + + Xi specs: remove double headers, clean a few things out. + +commit a869e62df356837200bd0aee3575ee59c4d5d4cf +Author: Peter Hutterer +Date: Sat May 10 16:32:48 2008 +0930 + + Xi specs: modify xml to parse through xmlto. + + Output isn't perfect, but at least is parses and spits out a PDF file. + +commit 023bac145790e87a2400bc6ad2fdf684f12a1098 +Author: Peter Hutterer +Date: Sat May 10 16:26:46 2008 +0930 + + Xi specs: Doclifted protocol.xml. + +commit 2327364cf7d2b71455a5b4f5aa3600516533e376 +Author: Peter Hutterer +Date: Sat May 10 16:25:39 2008 +0930 + + Remove a couple of tags unparseable by doclifter. + +commit b3c82abd3b1124dd27ab26a62b4135d74a24ed21 +Author: Ed Catmur +Date: Tue May 6 17:49:20 2008 -0700 + + Bug 9842: "65533" is not a character number in the document character set + + X.Org Bugzilla #9842 + Patch #9127 + + Signed-off-by: Alan Coopersmith + +commit 48040b27fdc800498d302c019b2364af0bd327e8 +Author: Alan Coopersmith +Date: Tue May 6 17:35:03 2008 -0700 + + Bug 4727: X(7) manpage is dated + + + +commit e76d57030b7cf2bd1db6b3bb05d3b167b4180a4b +Author: Eamon Walsh +Date: Tue Apr 1 17:34:07 2008 -0400 + + Update the server spec revision history to reflect recent changes. + +commit 206be459e2dca389a24e44e40d63b6ccb0ee9871 +Author: Eamon Walsh +Date: Tue Apr 1 17:21:33 2008 -0400 + + Update the server documentation for the devPrivates rework. + +commit d3ac8588bcd30c5bac145fb9913270e191e216fd +Author: Eamon Walsh +Date: Fri Mar 28 18:11:34 2008 -0400 + + Attempt to banish the old DDX server documentation once more. + +commit b7a0378c908db6c4ce5744f143ab59df7416fdbd +Author: Adam Jackson +Date: Fri Mar 28 17:44:16 2008 -0400 + + Document fb, not mfb or cfb. + Document changes to backing store and PaintWindow. + + Changes ported from old non-DocBook document. + +commit 5044891a7071dbcf85b77ba44b2e628d8fa3856a +Author: Eamon Walsh +Date: Fri Mar 28 16:38:27 2008 -0400 + + Update XACE documentation for version 2.0. + +commit 9efacd15b8359cb4186717f148950020de3c7f75 +Author: Alan Coopersmith +Date: Tue Mar 11 15:04:28 2008 -0700 + + List pcpa as xedit maintainer + +commit 2a72f382c7685f9188f9c0eca8f14642f0fcdbf6 +Author: Adam Jackson +Date: Sun Feb 17 09:33:46 2008 +1100 + + Document changes to backing store and PaintWindow. + +commit 9918fd466fac4fac80e4054157d42af955aefccd +Author: Adam Jackson +Date: Sun Feb 17 09:22:14 2008 +1100 + + Document fb, not mfb or cfb. + +commit 3852d7c82410bd1b4cbd6934f28a579d99794660 +Author: Adam Jackson +Date: Sun Feb 17 09:05:12 2008 +1100 + + Nuke RCS tag. + +commit 74e2e3975a962bd468d321d09271cc1c23235871 +Author: Adam Jackson +Date: Sun Feb 17 08:47:40 2008 +1100 + + Import the source for the DDX documentation from old Xorg CVS. + +commit 27aa7a163ab71f0359a422d1fbf361af59e029e0 +Author: Ben Byer +Date: Mon Feb 11 20:33:09 2008 -0800 + + Adding Jeremy Huddleston to Xquartz + +commit 0683f91831724a0ed4f58a87d2baf0b8f6421ac3 +Author: Eric Anholt +Date: Thu Jan 24 10:46:22 2008 -0800 + + Add xf86-input-aiptek maintainer per request. + +commit 28a07e8424a0493290ecfd443157e635a51d3cc5 +Author: Eric Anholt +Date: Thu Jan 24 10:44:46 2008 -0800 + + Update xf86-video-intel entry. + +commit 681c2c135e00a3f212a814842921c993bfe1fc09 +Author: Philip Langdale +Date: Thu Dec 20 14:20:20 2007 -0800 + + MAINTAINERS: Add xinput maintainer + +commit 776ed20c42f93dc70c055b9f53112b3c827bf702 +Author: James Cloos +Date: Thu Dec 6 16:37:36 2007 -0500 + + Replace static ChangeLog with dist-hook to generate from git log + +commit 40a33d1fdfccecb1b5d5c88e75b0efa8c2bb0c57 +Author: Alan Coopersmith +Date: Tue Sep 4 15:09:09 2007 -0700 + + Remove more $XdotOrg$ CVS id tags + +commit 71d1526ff9296913a1c64790e7c087ff8b244f2a +Author: Alan Coopersmith +Date: Tue Sep 4 15:07:00 2007 -0700 + + Update server-interpreted address types registry + +commit a0dbd3543cdfc407c042c5e7ae28f00a6e1b893c +Author: Alan Coopersmith +Date: Tue Sep 4 15:04:58 2007 -0700 + + Remove RCS/CVS id tags from registry + +commit 475c4c083591522d336cf63e88b6368b403388d8 +Author: James Cloos +Date: Thu Aug 23 22:31:38 2007 -0400 + + Add comment to X11.keysyms about what is missing + +commit c95f550eadc47b61b8709267f0fd06be7e3821f8 +Author: Matthieu Herrb +Date: Fri Aug 10 11:12:17 2007 +0200 + + Add me as xsetroot maintainer + +commit 8f8a87978ba53597f89fde2e439f257a2bfea0b7 +Author: Jochen Voss +Date: Wed May 30 09:35:06 2007 -0700 + + Bug 11104: misprint in xlib manual, broken example in X Toolkit intrinsics, etc. + + X.Org Bugzilla #11104 + Patch #10137 + Contributed upstream from Debian's 023_specs_doc_fixes.diff + +commit 9707b3c3990690ea699cd1c2331ac9929e5c12e6 +Author: Giuseppe Bilotta +Date: Fri Apr 27 00:41:07 2007 +0200 + + Add myself as maintainer for xf86-input-acecad. + +commit df52a9aee5f24d9d464cb9345cc1bb00c90342da +Author: Matthieu Herrb +Date: Sun Apr 15 19:56:01 2007 +0200 + + Add my self as maintainer for a couple of applications. + +commit 1f00575247a08f389eeea3ca1d8abecbcb73e3ac +Author: Sascha Hlusiak +Date: Mon Mar 12 23:39:40 2007 -0400 + + MAINTAINERS: Add xf86-input-joystick maintainer + +commit b66ba1b856dfeb9a8a474f753118ba31bd599364 +Author: Daniel Stone +Date: Sat Mar 10 20:18:10 2007 +0200 + + MAINTAINERS: Add xf86-video-glide maintainer + For some reason, someone's stepped up to maintain glide. + +commit 88e89743908cf8c271a2a8a4adadc064e9f9192d +Author: Daniel Stone +Date: Sat Mar 10 20:17:28 2007 +0200 + + Remove ChangeLog + +commit 8ba785a9defd823f8a3ccae052f53462f7141a05 +Merge: b3e029d e8dccc9 +Author: Ian Romanick +Date: Fri Feb 23 10:18:37 2007 -0800 + + Merge branch 'master' of git+ssh://git.freedesktop.org/git/xorg/doc/xorg-docs + +commit b3e029d998c3039f816a602ffd92cbda6a97ac39 +Author: Ian Romanick +Date: Fri Feb 23 10:18:25 2007 -0800 + + Add libpciaccess and xf86-video-xgi. Update xf86-video-mga. + + Add entries for libpciaccess (I hope this is the correct place for it) + and xf86-video-xgi. Mark myself as the maintainer for both. Add + myself and Tilman Sauerbeck as maintainers for xf86-video-mga. + +commit e8dccc9b413f6c8e3fb46d451fcc555b55113302 +Author: Eamon Walsh +Date: Thu Feb 15 11:41:20 2007 -0500 + + Bug #6988: Change behavior of Security extension per user feature request. + +commit 7b39be73bf4b92b6fa86d98d66d34e4d43d1edff +Author: Ben Byer +Date: Sun Feb 11 17:09:04 2007 -0800 + + added my email address + +commit 2a98afc388150e18e06d18d3178b1229ef35cbc6 +Author: Jesse Barnes +Date: Sun Feb 11 14:04:38 2007 -0800 + + Update OS X maintainer and list OS X/Darwin port as maintained (still need email and possible co-maintainer entries for OS X though). + +commit 95fc2f18c07ce12e3a86395a96f70ffee96f2a02 +Author: Alan Coopersmith +Date: Tue Jan 30 13:31:24 2007 -0800 + + Update video driver table + + - Add wsfb + - Remove vmware man page from listings for voodoo & wfb + +commit 8cade4ba11c7793101a28671c8263a93a1ec307e +Author: Alan Coopersmith +Date: Tue Jan 30 13:25:44 2007 -0800 + + Add missing closing tags to clear docbook2txt errors + +commit 303789056e7ffa648c01c476f60a4add8b27cee7 +Author: Adam Jackson +Date: Tue Jan 23 02:36:20 2007 -0500 + + Bump to 1.4. + +commit 845cea72f6a16a922762c32e3699840446eeeeca +Author: Adam Jackson +Date: Tue Jan 23 02:34:05 2007 -0500 + + Fix distcheck. + +commit c81c8da44ca0123dc6db7d5ce9efbfa60bfb9d30 +Author: Eric Anholt +Date: Tue Jan 9 11:30:35 2007 -0800 + + Remove render protocol doc now that it's been moved back to renderproto. + +commit b18066caf3c0bd70b21565ab748aee988f774cde +Author: Eric Anholt +Date: Tue Jan 9 10:58:22 2007 -0800 + + More .gitignores for autoconf stuff. + +commit 181ab067fdb5b55834cb6a8f3587f80f243dc401 +Author: Eric Anholt +Date: Tue Jan 9 10:52:55 2007 -0800 + + Remove duplicated specs from proto modules. + + Updates that happened to these files (assuming the initial import was already + from modular) have been propagated back to the proper locations in the + protocol modules. + +commit ac409b9b393c739fc49e193c15412848124dec32 +Author: Eamon Walsh +Date: Fri Dec 22 20:55:05 2006 -0500 + + Revisions: reordering of sections. + +commit 55bf6ec04b8ec89b1c015da2ab4bdaed21f97938 +Author: Eamon Walsh +Date: Fri Dec 22 20:10:32 2006 -0500 + + Docbook conversion: X "Porting Layer" server spec. + +commit 9c33bb06a7a4d62e3cca77d3e54985b285a1cd83 +Author: Eamon Walsh +Date: Fri Dec 22 20:07:32 2006 -0500 + + Move SGML documents into category subdirectories. + +commit dcee0015b6c60e2c9d521491907da61e4c525a05 +Author: Eamon Walsh +Date: Fri Dec 22 19:29:53 2006 -0500 + + Add some semblance of subdirectories for categorizing SGML docs. + +commit 74087020664d01d3aa28871276dc277308b0d9d4 +Author: Eamon Walsh +Date: Fri Dec 22 19:18:50 2006 -0500 + + Put Makefile.am SGML build rules into a separate include file. + +commit 5c1ffdb7047f3daa453695c7568fe96b1f3b4050 +Author: Eamon Walsh +Date: Fri Dec 22 17:43:04 2006 -0500 + + Don't need directory cleaning stuff now that HTML target is fixed. + +commit d48586d03a30cf09d8ff7d055fbd3c3d69a91d6c +Author: Eamon Walsh +Date: Fri Dec 22 16:22:35 2006 -0500 + + Change version in docbook DTD header - possible typo. + +commit 23aeba70a63a42709afcd0ec3881d56150d1a3a8 +Author: Alan Coopersmith +Date: Thu Dec 14 13:34:10 2006 -0800 + + Typo fixes in XFixes protocol spec + +commit 85494798ed73eaabf8e9c030199a9deb33d21380 +Author: Alan Coopersmith +Date: Thu Dec 14 13:32:20 2006 -0800 + + Update XFixes protocol spec to match XFixes 4.0 + + Add ExpandRegion, HideCursor & ShowCursor requests + Correct description of version numbering to match XFixes conventions + +commit 6910ace0a11f8596a67d2317e42da9bf3e0d4a48 +Author: David Nusinow +Date: Mon Dec 4 19:01:10 2006 -0500 + + Document that xkbdata is now deprecated. + +commit 8e604c3f7e991df4f99815e69cbb9b81a09c0d81 +Author: David Nusinow +Date: Sun Dec 3 11:16:26 2006 -0500 + + Spell check + +commit fb7d3dab570fee0d28afdfbfc7e49ce67cd63428 +Author: David Nusinow +Date: Sun Dec 3 11:10:37 2006 -0500 + + Rearrange configuration section. X -configure is the preferred method now. + +commit c1e6cecb9a3830bf5f3deee56d3b20a4af334d1f +Author: David Nusinow +Date: Thu Nov 30 22:01:30 2006 -0500 + + Update driver list + +commit d18bdc85a4da799b49f4a7896e030257ad9e89d8 +Author: David Nusinow +Date: Thu Nov 30 21:41:48 2006 -0500 + + Comment out "Other extensions" section, which we don't need this time + +commit 480134a5cbc65aee820f9f499f2b72d2e3c6c739 +Author: David Nusinow +Date: Thu Nov 30 21:22:02 2006 -0500 + + Format new additions so that we don't need titles for each bulletpoint + +commit c48136dd02607847e268921013f52de868e9d1d5 +Author: David Nusinow +Date: Thu Nov 30 21:12:26 2006 -0500 + + Missing close bracket. Yay structured text. + +commit 1547c2ea9a0c9ac8182c787e7c903996c213a354 +Author: David Nusinow +Date: Thu Nov 30 21:11:37 2006 -0500 + + * Modular isn't new any more + * Remove stuff about new platform support expected soon + * Remove the loader things. That change happened in 7.1 so we don't have + to belabor it now + * Put EXA information in the section about the various extensions + * Add information about system-wide DRM in the DRI section + * Remove old new features of Xv + * The keyboard -> kbd transition happened last release. Don't document it + now + * Formatting galore + +commit 3e00f62bc6961931e1138066f7a2a8fc2327d88c +Author: David Nusinow +Date: Thu Nov 30 20:46:50 2006 -0500 + + Reorder platform-specific fixes because I'm biased + +commit 7fcd6428d4ba6091f6ace340d48d902c0c73294b +Author: David Nusinow +Date: Thu Nov 30 20:46:00 2006 -0500 + + No extension protocol updates of note (just bugfixes) this release + +commit 75e15b618274396d712aa9c08c69d1b105c85192 +Author: David Nusinow +Date: Thu Nov 30 20:22:34 2006 -0500 + + * Modular isn't new any more. Don't pretend that it is. + * Formatting fixes for the new features + +commit 6005194bc52ebd02af7df489e3b4884562375631 +Author: David Nusinow +Date: Thu Nov 30 20:16:19 2006 -0500 + + * Document autoconfig improvements + * Document removal of LBX + * Document removal of CID font support and deprecation of mkcmf + * Massive amount of formatting cleanups + +commit 7fa58bbddb17224dbbda8354c929eb0cc14f64c7 +Author: David Nusinow +Date: Sun Nov 19 19:50:56 2006 -0500 + + Remove old big new features and add XACE info + +commit c0e11a6d03b9ce2950caaa1d322e804fad0ce568 +Author: David Nusinow +Date: Mon Nov 13 00:08:56 2006 -0500 + + Actually install the docs that we build + (cherry picked from commit e3b8dbd8ff459883a5f0500bbc1361e1f4e8ff74) + +commit f0985f447bfbb1582896a5b4c82519fc9b581aaa +Author: David Nusinow +Date: Sun Nov 12 23:48:02 2006 -0500 + + Build html docs as one big doc rather than several with bizarre names + (cherry picked from commit a178dddc5114c1ad8fff7eb00f04ea062927b1ec) + +commit 1c263d078433f94135cb096e992fb15bb43c5964 +Author: Daniel Stone +Date: Wed Nov 8 19:05:51 2006 +0200 + + bump to 1.3 + +commit 4bdf33417bf381e7f06abd5d15051fd4d0d4005e +Author: David Nusinow +Date: Sun Nov 5 13:26:11 2006 -0500 + + Format RELNOTES harder. + +commit 55e41efa4846b7cbe6698466bf8592b203ea8a3c +Author: Eamon Walsh +Date: Fri Nov 3 13:20:48 2006 -0500 + + Add XACE documentation. + +commit d5bdb7df83b9763f7e4dd7f891ace7629c66ed31 +Author: Eamon Walsh +Date: Fri Nov 3 13:20:26 2006 -0500 + + Wildcard SGML files instead of having a hardcoded list. + +commit 32c2096e5ea92c440b7bc3fffe1f5925167b1d44 +Author: Eamon Walsh +Date: Fri Nov 3 12:34:46 2006 -0500 + + Introduce separate configure switches for each output format. + +commit 9a79090915b30bedac2ed31ab3567f849b6eabc4 +Author: David Nusinow +Date: Mon Oct 30 21:12:03 2006 -0500 + + Update fonts and dps after merge + +commit c32459ffdc34cb02e5dbf9187e5d838ee34dc6ef +Merge: 34b795c f1c534b +Author: David Nusinow +Date: Mon Oct 30 20:56:08 2006 -0500 + + Merge branch 'master' of git+ssh://gravity@git.freedesktop.org/git/xorg/doc/xorg-docs + + Conflicts: + + sgml/dps.sgml + sgml/fonts.sgml + +commit 34b795ce4b40d0c3a7283c5fcf54ac954ad590ff +Author: David Nusinow +Date: Mon Oct 30 20:50:07 2006 -0500 + + Look for defs.ent in the standard location on the system. Currently, that assumes that defs.ent is in /usr/share/sgml, but I need to figure out how to make that configurable so that /usr/local/share/ will work also. + +commit 519da606a99e253e7e3742e343dea53dc594cefc +Author: David Nusinow +Date: Mon Oct 30 20:34:49 2006 -0500 + + Put html files in a directory named after the sgml filename + +commit f1c534b0cf1924efdd714ca228a06e7b27ae02be +Author: Juliusz Chroboczek +Date: Tue Oct 31 02:33:43 2006 +0100 + + Update DPS docs. + +commit fe4734f5886eb04960f9100096ea142455acb787 +Author: Juliusz Chroboczek +Date: Tue Oct 31 02:26:45 2006 +0100 + + Minor tweaks to fonts documentation. + +commit f497eaba3dd8af7de43edf8b3f0866e2c4c317c7 +Author: David Nusinow +Date: Sun Oct 29 18:47:27 2006 -0500 + + * Modify the build system to build docbook instead of linuxdoc + * Remove outdated dps docs + +commit 7aa9940c2ba03b8d2f68430c8205c774aa53c3cf +Author: David Nusinow +Date: Sun Oct 29 17:51:03 2006 -0500 + + Convert sgml docs to docbook. In classic xorg style, it's late 90's technology, + coming to you today! + +commit 9340e597d8a2050dc9612c56a9e397a0a1b5e4e7 +Author: David Nusinow +Date: Tue Oct 17 17:28:35 2006 -0400 + + Add switch to disable building pdfs. Enabled by default. + +commit 53a87bc802b954d74deb4dc923711f88f29559c9 +Author: Alan Coopersmith +Date: Wed Oct 11 13:15:15 2006 -0700 + + Add .gitignore + +commit 568ad6c48eea8e28eb5c9bbef90b676fa94ead01 +Author: Alan Coopersmith +Date: Wed Oct 11 13:13:16 2006 -0700 + + Typo fixes in Render protocol spec + +commit 4e3cf7ab9f05ec3e5d9fa32176ff5a84ed03f231 +Author: Alan Coopersmith +Date: Wed Oct 11 13:08:51 2006 -0700 + + Update date/version on Render protocol spec to match last update (0.10) + +commit fcb1831985960cf1778f4b0b23aa39eaedb1da50 +Author: Alan Coopersmith +Date: Fri Oct 6 18:10:46 2006 -0700 + + Add MAINTAINERS entry for XACE subsystem of X server, Eamon Walsh as maintainer + +commit 83510b7ac42fbe2dbad45cd5e014b046516260da +Author: Adam Jackson +Date: Mon May 22 23:05:48 2006 +0000 + + Bump to 1.2 + +commit ed321adecf440b78713c3385341750cae3c37f79 +Author: Kevin E Martin +Date: Mon May 22 20:03:26 2006 +0000 + + More updates for 7.1 release. + +commit 4e74365bef92cc02b2fb46984ca97dd469e559f2 +Author: Adam Jackson +Date: Mon May 22 15:39:58 2006 +0000 + + 7.1 updates. + +commit 66b56616efe520a197efd41cdef973cb907500c5 +Author: Deron Johnson +Date: Sat May 13 23:28:03 2006 +0000 + + Update for Composite protocol version 0.3 (Composite Overlay Window). + +commit c9bd5c8326eb6cc9192969f7cf1fa907cb22da16 +Author: Daniel Stone +Date: Mon Apr 17 14:57:42 2006 +0000 + + Fix a couple of email addresses; nominate atimisc/via maintainers. + +commit 2f3b4c15765c57b263af45155ee5b667dbe05d3a +Author: Aaron Plattner +Date: Fri Apr 7 17:51:05 2006 +0000 + + Add my email address. + +commit 26d548d350cbd471ec30891628215943aa9b408f +Author: Alan Coopersmith +Date: Fri Apr 7 00:37:18 2006 +0000 + + Start splitting out maintained apps. (Accepted the xdm hot potato, stuck + xkbcomp on Daniel as part of his XKB master plan, compiz on Dave R. - + left the rest assigned to Jim, though probably should be listed as + "Seeking maintainers".) + +commit fe0b23cf1db86fca2f68a3758964974a35717b88 +Author: Adam Jackson +Date: Sat Apr 1 23:38:43 2006 +0000 + + Bump to 1.1 for some reason. + +commit 56779f633a467efecd113ecb5b5913807fd906d9 +Author: Alan Coopersmith +Date: Thu Mar 16 21:53:03 2006 +0000 + + Add lists.x.org & www.x.org maintainers + +commit cfa448f026c95b24ae7ab6c473b7ea5e0bfff1d9 +Author: Alan Coopersmith +Date: Wed Mar 15 21:10:16 2006 +0000 + + Add xf86-video-ast + +commit 09629c068e27ec483dd7839f8afc85898c226bdc +Author: Daniel Stone +Date: Sun Mar 12 16:34:06 2006 +0000 + + Claim Xi for myself and Mercury. Note that XKB and Xi in the srever are in + the middle of some serious work. Acknowledge Luc's pivotal role in X + development. Some minor space -> tab reindenting of my sections. + +commit 15106550608d42a473d62fcd332e0f4e8ef80e37 +Author: Egbert Eich +Date: Mon Feb 20 12:16:27 2006 +0000 + + - Signed myself up for maintainance of drivers and DDX components. + +commit 3dc04b3d95bc3b7c7b5523f4bc45a2e6f9c39443 +Author: Jesse Barnes +Date: Sun Feb 19 22:10:04 2006 +0000 + + keithp is the maintainer for libX11. he volunteered at the devconf but I + didn't note that in the initial checkin + +commit 2a77d4ac877c9a4a4580a88b937f8e7b4e74827c +Author: Keith Packard +Date: Fri Feb 17 15:12:55 2006 +0000 + + Include Input shapes, update to version 1.1 + +commit fd80ab2b8c5b520fb088eda13a4367b72aed2915 +Author: Zack Rusin +Date: Thu Feb 16 18:03:16 2006 +0000 + + adding protocol specs for composite, damage and fixes + +commit 0533aeb5312985faf526f23e7b0351f382e0b9ab +Author: Matthieu Herrb +Date: Sun Feb 12 09:20:50 2006 +0000 + + Add myself as maintainer for the OpenBSD port (although 7.0 doesn't support + OpenBSD, I'm actively working to get in supported in the next release) + and the wsfb driver. + +commit aea395850796cde05347248a53c81f32649affab +Author: Alex Deucher +Date: Sun Feb 12 04:25:35 2006 +0000 + + - Add my email address for savage + - take on smi, it's interesting hardware with open docs + +commit 095d37bd948f99dcdf231c68bd69338b38a9ea75 +Author: Adam Jackson +Date: Sun Feb 12 03:30:44 2006 +0000 + + URL fixes + +commit 9539619f6fb08e0b451a10a8867daccf70acf108 +Author: Adam Jackson +Date: Sun Feb 12 03:28:33 2006 +0000 + + More maintainers, more obsoletes + +commit 794f7e790735982fbb7caaa0eccbc6b51f3c6a46 +Author: Kean Johnson +Date: Sun Feb 12 03:19:36 2006 +0000 + + Added myself as maintainer for SCO / UnixWare platforms + +commit f190f253fef7d45745962c561a0bcd5f02317a62 +Author: Zephaniah E. Hull +Date: Sat Feb 11 10:51:22 2006 +0000 + + Took over xf86-input-evdev in MAINTAINERS. + +commit bbd3b3a615a35097bd1a081c9fd593987b2fd77e +Author: philipl +Date: Sat Feb 11 02:19:40 2006 +0000 + + Add MAINTAINER info for the vmware drivers. + +commit cbfc0ee201ccb2c0b799a0f95e87caae49b439b5 +Author: Alan Hourihane +Date: Sat Feb 11 01:15:56 2006 +0000 + + some more Unmaintained -> Maintained + +commit aaa7535e38d79573eed9e0511a7ec93f1969c63f +Author: Alan Hourihane +Date: Sat Feb 11 01:14:45 2006 +0000 + + Unmaintained -> Maintained + +commit 60354eb27613b5a67f1291e1af87104f6e21c3b1 +Author: Alan Hourihane +Date: Sat Feb 11 01:13:49 2006 +0000 + + claim some of the drivers - nsc, trident, glint + +commit 302aaf03c1217790faa1e6d12b180aa7e3bcd904 +Author: Luc Verhaegen +Date: Sat Feb 11 01:05:37 2006 +0000 + + Sucker up for tseng. + +commit 5b0a50487a63517015711931a8db53f9a4bb8497 +Author: Alan Coopersmith +Date: Sat Feb 11 00:37:04 2006 +0000 + + Solaris port *is* maintained (and has a website on opensolaris.org too) + +commit f6829d2d0f1851c33ea06268d1842b6af711bd25 +Author: Daniel Stone +Date: Sat Feb 11 00:17:42 2006 +0000 + + Double-paragraph snafu. + +commit fdc1c5dfec8ea62b152b215b35862ebd171ae931 +Author: Daniel Stone +Date: Sat Feb 11 00:14:47 2006 +0000 + + Change list to xorg@l.fd.o, site to wiki.x.org. + +commit a60bee818be497ac3e048fd444631af63379703d +Author: Daniel Stone +Date: Sat Feb 11 00:12:15 2006 +0000 + + Claim xkbfile and xkbui; fix my email address. + +commit 40fb1cfae38c69c9911592088d84a843b387dfd3 +Author: Jesse Barnes +Date: Fri Feb 10 22:23:23 2006 +0000 + + add MAINTAINERS file + +commit c1279d1a135a2416895e90dbcd078e1343a48e58 +Author: Adam Jackson +Date: Wed Dec 21 05:19:26 2005 +0000 + + Updated contributors list and copyright holders. + +commit 8a617d8138228672f1c8ff438cf85ce72c747f0e +Author: Kevin E Martin +Date: Wed Dec 21 02:53:00 2005 +0000 + + Additional RELNOTES updates. + +commit 8662dfa92b6f3290876c5306007caba4de101fbb +Author: Kevin E Martin +Date: Wed Dec 21 02:29:55 2005 +0000 + + Update package version for X11R7 release. + +commit 0185328e6e7b8d50f1449df842fca372d4edc16c +Author: Kevin E Martin +Date: Wed Dec 21 00:19:54 2005 +0000 + + Update RELNOTES.sgml for X11R6.9/X11R7.0 release (Daniel Stone, Kevin + Martin). + +commit b502009fe3f7cb128aa551bc3bcd41112e139a2b +Author: Kevin E Martin +Date: Tue Dec 20 21:54:57 2005 +0000 + + Bump hardcoded version numbers. + +commit 03c2547a6eaddcde5602ec48dbfa9b24d3ea979c +Author: Kevin E Martin +Date: Tue Dec 20 18:24:23 2005 +0000 + + Update hardcopy specs for 6.9/7.0 release. + +commit 3a09ba5e6cafc45c6453a1cdf9973a64cd1a78c5 +Author: Alan Coopersmith +Date: Mon Dec 19 08:26:18 2005 +0000 + + Typo fixes, mailing list & url updates, and other changes to prepare for + X11R6.9 & 7.0 releases. + +commit 47e95124420d376047b8602a43be88b78b39865e +Author: Kevin E Martin +Date: Mon Dec 19 06:10:28 2005 +0000 + + Update README and RELNOTES from monolith. + +commit e2d3e1fbe8aba9ce2be76bc8501545d0c37e4e85 +Author: Kevin E Martin +Date: Thu Dec 15 00:24:13 2005 +0000 + + Update package version number for final X11R7 release candidate. + +commit 09250e7742a9c0577402920cdbd1fb4de61ece5d +Author: Alan Coopersmith +Date: Wed Dec 14 23:38:14 2005 +0000 + + Correct spelling of X.Org Foundation name. Updates for 7.0 release. + +commit 5cd9a5e3793496f9f81166634e5ff28c39ce543c +Author: Kevin E Martin +Date: Fri Dec 9 03:02:57 2005 +0000 + + Initial revision. + +commit 237a97f9b7fd888bc5e53523ad9fe0f83010b592 +Author: Kean Johnson +Date: Tue Nov 8 06:33:28 2005 +0000 + + See ChangeLog entry 2005-11-07 for details. + +commit 6ee822b4c151b026d5d3825fe58f96d8fcd410e2 +Author: Alan Coopersmith +Date: Fri Sep 2 23:06:40 2005 +0000 + + Replace X.Org Group with X.Org Foundation Update contact info for Sun, The + Open Group, and the X.Org Foundation. + +commit fb22d052c01d7469032497725f02cf2b2e800896 +Author: Eric Anholt +Date: Thu Aug 25 02:43:49 2005 +0000 + + Bugzilla #1045: Fix the DDX documentation to describe what is the defacto + current policy on GC wrappers, which is more liberal than the previous + policy, and hopefully more clear as well. + Reviewed by: keithp + +commit bb8460bfc11687ba769d8d8aaac05b98a0f2343f +Author: Alan Coopersmith +Date: Mon Aug 8 18:52:30 2005 +0000 + + Bug #4017 Grammatical & + typo fixes (reported as Debian bugs #315555 & #321946, by Daniel Hulme + & Adrian von Bidder, reported upstream to X.org by David Mart?nez + Moreno, additional changes by myself.) + +commit a93e74f17f5267d996c04a50e154732d59942e03 +Author: Alan Coopersmith +Date: Mon Aug 8 18:07:36 2005 +0000 + + Bug #4018 Patch #3300 + Typo fix (Debian + bug #320545 - A Costa, David Mart?nez Moreno) + +commit 69836d72471d8fb4c753f772ba815df6dcc415b3 +Author: Alan Coopersmith +Date: Fri Jul 29 22:07:54 2005 +0000 + + Bugzilla #3916 (https://bugs.freedesktop.org/show_bug.cgi?id=3916) Fix + broken link to comp.fonts FAQ (reported by Siward de Groot) + +commit c9bbc1800cea86873a3f9e8fd6c563e54e196be7 +Author: Alan Coopersmith +Date: Tue Jul 5 18:42:31 2005 +0000 + + Remove Speedo font module documentation. + Remove Speedo from list of font directories + Update default font path to remove Speedo, add TTF. + +commit e14ec0603f19c12c7fe05f1b7d2f67bfbceddad1 +Author: Lars Knoll +Date: Fri Jul 1 10:04:01 2005 +0000 + + sync with current spec from the modular tree. + +commit 9e04ff9918d949018d989f05d8a5206cfc1bb6f9 +Author: Alan Coopersmith +Date: Sun May 8 22:58:08 2005 +0000 + + Damn. Try 3 (went 0 for 3 on correct spelling of maintenance in previous + attempts). + +commit 5707221f3d80243c3a5e01f75c2c26c24fe6eec0 +Author: Alan Coopersmith +Date: Sun May 8 22:38:24 2005 +0000 + + Fix typo (it's -> its) in last commit noticed by Daniel Stone + +commit ed948bcd91a7eb418b885c3ddb9513c87da1b198 +Author: Alan Coopersmith +Date: Sun May 8 22:19:32 2005 +0000 + + programs/Xserver/hw/xfree86/doc/README.dps + programs/Xserver/hw/xfree86/doc/RELNOTES + programs/Xserver/hw/xfree86/doc/sgml/RELNOTES.sgml + https://bugs.freedesktop.org/show_bug.cgi?id=3080 Patch #2636: + https://bugs.freedesktop.org/attachment.cgi?id=2636 Clearly document + impending demise of DPS. + +commit aa8a36ec2c2393308db49824a7a20a8db888820b +Author: Matthieu Herrb +Date: Sun Feb 6 16:38:40 2005 +0000 + + Doc updates for OpenBSD, reflecting X11R6.8.2. + +commit c7b803278c3c0ac1ac1751e4e1ac98a77a1e540e +Author: Alexander Gottwald +Date: Wed Dec 8 13:42:01 2004 +0000 + + Bugzilla #1980 (https://bugs.freedesktop.org/show_bug.cgi?id=1980) Handle + XERRORDB only on WIN32 platform + +commit 1a015fcb005bc904e4840d7b9b3729e648607c2c +Author: Alexander Gottwald +Date: Sat Dec 4 17:20:24 2004 +0000 + + Bugzilla #1980, https://bugs.freedesktop.org/show_bug.cgi?id=1980 Document + XERRORDB in X.man + +commit 875ba3e53ca6f11f9cc8de4c2a32213824a77bd9 +Author: Roland Mainz +Date: Fri Nov 26 09:00:08 2004 +0000 + + xc/doc/man/general/Imakefile + xc/doc/man/general/Xprint.html + xc/doc/man/general/Xprint.man + xc/doc/man/general/Xprint.sgml + xc/programs/Xserver/Xprint/Imakefile + xc/programs/Xserver/Xprint/Xprint.html + xc/programs/Xserver/Xprint/Xprint.man + //freedesktop.org/bugzilla/show_bug.cgi?id=811): Fixing "make install.man" + build bustage caused by previous checkin via moving the Xprint(7) + manual page it's correct location (=xc/doc/man/general/). + +commit 2f971dc44aa789a87d7f9fa256b3da1bb6eff578 +Author: Jim Gettys +Date: Wed Oct 27 20:42:11 2004 +0000 + + put the updated postscript in place. + +commit 84c5bca89066a89688c72c1f4396c85f8aa4f83b +Author: Jim Gettys +Date: Wed Oct 27 20:37:04 2004 +0000 + + Document the Timer routines in the ddx interface, which are used by various + facilities, and have not been documented before. + Lots more work is needed to flesh out new facilities; this document hasn't + been touched in 10 years!!! + +commit f54753619b1781da2954c2e972372bce3840c115 +Author: Roland Mainz +Date: Fri Oct 8 02:39:39 2004 +0000 + + Fix for https://freedesktop.org/bugzilla/show_bug.cgi?id=1557 - Update + DocBook SGML+XML manual pages and docmentation and the in-tree copies + of the generated files (*.man, *.html) to get them properly working + with newer versions of the tools within the Xorg tree. + +commit a240049e57cf752fb3854e98a4af2de9d3b6d50b +Author: Markus Kuhn +Date: Sat Sep 25 16:37:21 2004 +0000 + + Revision of KEYSYM encoding to include Unicode KEYSYMs and Unicode mapping + of Legacy KEYSYMs + +commit f795d52f1be0b0fffc53f1f4b3b881f0a6f086cc +Author: Matthieu Herrb +Date: Sat Sep 18 15:04:29 2004 +0000 + + define dependencies for libXevie for *BSD systems. + fix spelling of my first name and remove duplicate. + build fix. + +commit 5dfffb32c1ea5a5df33938f6d9a396919c61b942 +Author: Kevin E Martin +Date: Wed Sep 8 01:54:29 2004 +0000 + + Fix dates for release. + +commit f02447159d5b422f2a925a672149f81b0e54eab6 +Author: Kevin E Martin +Date: Sat Sep 4 00:22:32 2004 +0000 + + Update docs for Mac OS changes (Torrey T. Lyons). + +commit 15530878e2d52c027658e7d432406c0b2056a708 +Author: Kevin E Martin +Date: Fri Sep 3 23:26:19 2004 +0000 + + Updated release notes for bug #999. + Update Radeon man page to note that RenderAccel is now enabled by default + on certain chips. + +commit b0425304786b33196047e3e07da2a4932b366a9e +Author: Kevin E Martin +Date: Fri Sep 3 22:00:10 2004 +0000 + + Second round of documentation updates. + +commit f60c834b84e4a7c6b047bdf7e47dc3661bf20cd9 +Author: Keith Packard +Date: Fri Sep 3 18:48:11 2004 +0000 + + Mostly fix version numbers and use symbolic release date. + Fix lots of version numbers. Change description of Composite extension a + bit. Add reference to Xaw8 as the version of Xaw which includes + XawPrintShell. Document Render additions to xclock. Document to XPrint + additions to xedit. Note disappearance of X-TrueType. + Add 'R' before &relvers; + Add reldate entity + Add 'R' before &relvers; + Fix version numbers. Note disapparance of X-TrueType + +commit 9507b7a223bf5ada5c92f280080df5a90d304c62 +Author: Kevin E Martin +Date: Fri Sep 3 16:18:22 2004 +0000 + + First set of documentation updates. + Include more correct fix for rootless interaction with damage (Bug #1168, + Keith Packard). + +commit 719ac6c84480381069b74220fc93500e1ed2c453 +Author: Søren Sandmann Pedersen +Date: Mon Aug 30 21:01:21 2004 +0000 + + Update release notes + +commit 777ab97690f9145c95bfb433f51fd43493d59d4a +Author: Egbert Eich +Date: Fri Aug 27 19:27:12 2004 +0000 + + Added support for LynxOS 4.0 (Thomas Mueller). + Fix arm netwinder build (Donnie Berkholz). + +commit 78ba26404aa3320ac632c5ba6af7ee4225585288 +Author: Alan Coopersmith +Date: Fri Aug 20 01:55:35 2004 +0000 + + Documentation only update: + Update documentation of authentication methods to cover the + ServerInterpreted access type added in X11R6.7 and the authentication + types available via its framework. + +commit 29173edcbc53a616b97a48ad104e30da30d31140 +Author: Kevin E Martin +Date: Thu Aug 19 16:28:42 2004 +0000 + + Fix the build on Solaris/sparc to use Xorg server instead of the deprecated + Xsun (Bug #1134, Alan Coopersmith). + +commit 4bf2b7f0742c1c874e697b96a9b0fee95a169cf3 +Author: Roland Mainz +Date: Wed Aug 11 17:51:24 2004 +0000 + + Updating FAQ + +commit de9676e191f5a31ea0920a194ec16966add70f55 +Author: Alan Coopersmith +Date: Sat Jul 17 01:13:31 2004 +0000 + + Fix typo in debug message in MakeAllCLTSServerListeners + Add $(GETPEER_DEFINES) to DEPEND_DEFINES for makedepend + Add "localuser" and "localgroup" access types to server-interpreted + authentication scheme. + +commit b67211135e61c1458a730fa66b56519cca6a702a +Author: Thomas Winischhofer +Date: Fri Jun 18 21:54:46 2004 +0000 + + Add my license (Could someone please "update the formatted docs"?) + +commit b3037a48b217914a1058ebb3d91571a7881a1eb6 +Author: Alan Coopersmith +Date: Sun Jun 13 04:50:21 2004 +0000 + + Manual page X(7) does not reference Xprt(1x), xplsprinters(1x), etc. + xc/config/cf/Imake.rules Correct comment to match rule name for + InstallDriverSDKObjectModule + xc/programs/Xserver/hw/xfree86/os-support/sunos/sun_kbd.c Log results of + ioctls to probe keyboard type & layout + +commit c188d608b9bb94133b4349e8d548e666eb84153a +Author: Roland Mainz +Date: Wed May 26 02:58:41 2004 +0000 + + No bugid - Update FAQ for new bugzilla URLs and rebuild the HTML and + plaintext versions. + +commit 250f6d2ae21283f98a052d0a86fb4b10c0beb0ae +Author: Egbert Eich +Date: Fri Apr 23 19:23:59 2004 +0000 + + Merging XORG-CURRENT into trunk + +commit 625cc4967802a36e9b0e7306928d293f12747fc4 +Author: Roland Mainz +Date: Tue Apr 13 03:16:30 2004 +0000 + + file Xprint_FAQ.html was initially added on branch XPRINT. + +commit 0ef59b27dfbbb6b39fd07fda6fa236be46fa7fad +Author: Roland Mainz +Date: Tue Apr 13 03:16:30 2004 +0000 + + file Xprint_FAQ.txt was initially added on branch XPRINT. + +commit 1807071f968038bdf5b5f2ca4c47d9e1de68e2ae +Author: Roland Mainz +Date: Tue Apr 13 03:16:30 2004 +0000 + + file docbook.css was initially added on branch XPRINT. + +commit 4338d020661bcf0ec46de4545ca84005040a7227 +Author: Roland Mainz +Date: Tue Apr 13 03:16:30 2004 +0000 + + file dtprint_fspec.PS.gz was initially added on branch XPRINT. + +commit 7c250a3dbf32171f0a170d25de277976d5bae235 +Author: Roland Mainz +Date: Tue Apr 13 03:16:30 2004 +0000 + + file Xprint_FAQ.xml was initially added on branch XPRINT. + +commit abceb5dc00aa43caaa88976700a3e0648ff94922 +Author: Roland Mainz +Date: Tue Apr 13 03:16:30 2004 +0000 + + file Xprint_old_FAQ.txt was initially added on branch XPRINT. + +commit 5f1b72f41d60e401f045ad10528870c216f82a4a +Author: Egbert Eich +Date: Sun Mar 14 08:33:16 2004 +0000 + + Importing vendor version xf86-4_4_99_1 on Sun Mar 14 00:26:39 PST 2004 + +commit b2f42889efb22ef39da5ab5b3ca5445ddc30978a +Author: Alan Coopersmith +Date: Sat Mar 13 18:48:39 2004 +0000 + + file hostname.txt was initially added on branch IPv6-REVIEW. + +commit 40ab103f4e707c9b1936036f3076d7d5d0c8bd52 +Author: Alan Coopersmith +Date: Sat Mar 13 18:48:39 2004 +0000 + + file README was initially added on branch IPv6-REVIEW. + +commit 72f58d0d330c06cb2bb8e1378a8590a6d8a5e8b9 +Author: Alan Coopersmith +Date: Sat Mar 13 18:48:39 2004 +0000 + + file IPv6.txt was initially added on branch IPv6-REVIEW. + +commit 933a6f1a89881bd37661e0b8b557fe5bb6be2672 +Author: Egbert Eich +Date: Wed Mar 3 12:12:15 2004 +0000 + + Importing vendor version xf86-4_4_0 on Wed Mar 3 04:09:24 PST 2004 + +commit 0b6671edbecd1ef7de3d559c6efab4cca2320c22 +Author: Kaleb Keithley +Date: Tue Mar 2 18:18:05 2004 +0000 + + file XOrgFoundation.man was initially added on branch XORG-CURRENT. + +commit 8d85cb567decc9911011de45f768f76959f752dd +Author: Egbert Eich +Date: Thu Feb 26 13:35:46 2004 +0000 + + readding XFree86's cvs IDs + +commit c78de49b5ee6ba5f8a92c712fdc0f0668c015667 +Author: Egbert Eich +Date: Thu Feb 26 09:23:14 2004 +0000 + + Importing vendor version xf86-4_3_99_903 on Wed Feb 26 01:21:00 PST 2004 + +commit 103d012ca409bc25af7f7c35f93f2aabbe5e89cb +Author: Kaleb Keithley +Date: Mon Feb 23 20:35:02 2004 +0000 + + Import most of XFree86 4.4RC3. This import excludes files which have the + new license. If we want to, later we can import 4.4RC3 again and pick + up the files that have the new license, but for now the vendor branch + is "pure." + +commit 9073878116f165101309611a8161e39505e6d091 +Author: Egbert Eich +Date: Thu Jan 29 08:08:27 2004 +0000 + + Importing vendor version xf86-012804-2330 on Thu Jan 29 00:06:33 PST 2004 + +commit 8b38d3043a35e843df9b3aa6790e7103d3301b33 +Author: Kaleb Keithley +Date: Fri Dec 19 20:55:05 2003 +0000 + + XFree86 4.3.99.902 (RC 2) + +commit 0323a41d2c512c64fd0150096349ca9e9c9b5609 +Author: Kaleb Keithley +Date: Thu Dec 4 22:03:15 2003 +0000 + + XFree86 4.3.99.901 (RC 1) + +commit b1ee756a2b3769dedbcc7abbb94f560195bca4c7 +Author: Kaleb Keithley +Date: Tue Nov 25 19:28:33 2003 +0000 + + XFree86 4.3.99.16 Bring the tree up to date for the Cygwin folks + +commit b050d760f72956e04705abb6bbe69fb5e7a6a8c3 +Author: Kaleb Keithley +Date: Tue Nov 25 19:26:58 2003 +0000 + + Initial revision + +commit 83652d15f9f1692730e5d9457ddf4086dc70704f +Author: Kaleb Keithley +Date: Fri Nov 14 16:48:55 2003 +0000 + + XFree86 4.3.0.1 + +commit 67f7a131c3e3616149d4775546dba04857607f96 +Author: Kaleb Keithley +Date: Fri Nov 14 16:48:55 2003 +0000 + + Initial revision + +commit 3e77e75b5a28b1b5a258396f4f15a61c9f3dc87c +Author: Kaleb Keithley +Date: Fri Nov 14 15:54:49 2003 +0000 + + R6.6 is the Xorg base-line diff --git a/doc/xorg-docs/INSTALL b/doc/xorg-docs/INSTALL new file mode 100644 index 000000000..8b82ade08 --- /dev/null +++ b/doc/xorg-docs/INSTALL @@ -0,0 +1,291 @@ +Installation Instructions +************************* + +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, +2006, 2007, 2008 Free Software Foundation, Inc. + + This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + + Briefly, the shell commands `./configure; make; make install' should +configure, build, and install this package. The following +more-detailed instructions are generic; see the `README' file for +instructions specific to this package. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. Caching is +disabled by default to prevent problems with accidental use of stale +cache files. + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You need `configure.ac' if +you want to change it or regenerate `configure' using a newer version +of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. + + Running `configure' might take a while. While running, it prints + some messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + + 6. Often, you can also type `make uninstall' to remove the installed + files again. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c99 CFLAGS=-g LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you can use GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + With a non-GNU `make', it is safer to compile the package for one +architecture at a time in the source code directory. After you have +installed the package for one architecture, use `make distclean' before +reconfiguring for another architecture. + + On MacOS X 10.5 and later systems, you can create libraries and +executables that work on multiple system types--known as "fat" or +"universal" binaries--by specifying multiple `-arch' options to the +compiler but only a single `-arch' option to the preprocessor. Like +this: + + ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CPP="gcc -E" CXXCPP="g++ -E" + + This is not guaranteed to produce working output in all cases, you +may have to build one architecture at a time and combine the results +using the `lipo' tool if you have problems. + +Installation Names +================== + + By default, `make install' installs the package's commands under +`/usr/local/bin', include files under `/usr/local/include', etc. You +can specify an installation prefix other than `/usr/local' by giving +`configure' the option `--prefix=PREFIX'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +pass the option `--exec-prefix=PREFIX' to `configure', the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=DIR' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Particular systems +================== + + On HP-UX, the default C compiler is not ANSI C compatible. If GNU +CC is not installed, it is recommended to use the following options in +order to use an ANSI C compiler: + + ./configure CC="cc -Ae" + +and if that doesn't work, install pre-built binaries of GCC for HP-UX. + + On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot +parse its `' header file. The option `-nodtk' can be used as +a workaround. If GNU CC is not installed, it is therefore recommended +to try + + ./configure CC="cc" + +and if that doesn't work, try + + ./configure CC="cc -nodtk" + +Specifying the System Type +========================== + + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the option `--target=TYPE' to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + + Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +causes the specified `gcc' to be used as the C compiler (unless it is +overridden in the site shell script). + +Unfortunately, this technique does not work for `CONFIG_SHELL' due to +an Autoconf bug. Until the bug is fixed you can use this workaround: + + CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash + +`configure' Invocation +====================== + + `configure' recognizes the following options to control how it +operates. + +`--help' +`-h' + Print a summary of all of the options to `configure', and exit. + +`--help=short' +`--help=recursive' + Print a summary of the options unique to this package's + `configure', and exit. The `short' variant lists options used + only in the top level, while the `recursive' variant lists options + also present in any nested packages. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--prefix=DIR' + Use DIR as the installation prefix. *Note Installation Names:: + for more details, including other options available for fine-tuning + the installation locations. + +`--no-create' +`-n' + Run the configure checks, but stop before creating any output + files. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/doc/xorg-docs/MAINTAINERS b/doc/xorg-docs/MAINTAINERS index 19f613da9..49fb70b6a 100644 --- a/doc/xorg-docs/MAINTAINERS +++ b/doc/xorg-docs/MAINTAINERS @@ -8,8 +8,8 @@ Maintainer guidelines: 3) Make sure your changes compile! Rules: -1) The first person to complain about an unresponsive maintainer - automatically assumes maintainership of the code in question. + 1) The first person to complain about an unresponsive maintainer + automatically assumes maintainership of the code in question. Unlike the kernel maintainers file, this goes more or less alphabetically by component within each subsystem, rather than alphabetically on maintainer @@ -27,52 +27,152 @@ S: Status, one of the following: much other than throw the odd patch in. See below.. Unmaintained: No current maintainer [but maybe you could take the role as you write your new code]. + Deactivated: Package is about to be obsoleted. A deactivated + package will not receive general fixes unless a user + requires this package to be reactivated first. Obsolete: Old code. Something tagged obsolete generally means it has been replaced by a better system and you should be using that. +For patch submission instructions, see: + http://www.x.org/wiki/Development/Documentation/SubmittingPatches + +Send all patches for modules without a specific maintainer address listed +to xorg-devel@lists.x.org + Misc. core code --------------- DRM library P: Adam Jackson M: ajax@nwnk.net -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained +PCI Access Library +P: Ian Romanick +M: ? +L: xorg-devel@lists.x.org +W: http://wiki.freedesktop.org/wiki/PciRework +S: Supported + X.Org apps --------------- -compiz -P: David Reveman -M: davidr@novell.com -L: compiz@lists.freedesktop.org -W: http://wiki.freedesktop.org/wiki/Software_2fCompiz + +beforelight +S: Obsolete + +lbxproxy +S: Obsolete - use ssh X forwarding + compression instead + +makepsres +S: Obsolete - DPS support has been dropped + +mkcfm +S: Obsolete - CID font support has been dropped + +pclcomp +S: Obsolete - only used by Xprint + +rstart +S: Obsolete - use ssh instead + +xbiff +P: Matthieu Herrb +M: matthieu.herrb@laas.fr +L: xorg-devel@lists.x.org +W: http://wiki.x.org +S: Maintained + +xcalc +P: Matthieu Herrb +M: matthieu.herrb@laas.fr +L: xorg-devel@lists.x.org +W: http://wiki.x.org +S: Maintained + +xclock +P: Matthieu Herrb +M: matthieu.herrb@laas.fr +L: xorg-devel@lists.x.org +W: http://wiki.x.org +S: Maintained + +xconsole +P: Matthieu Herrb +M: matthieu.herrb@laas.fr +L: xorg-devel@lists.x.org +W: http://wiki.x.org S: Maintained xdm P: Alan Coopersmith M: alan.coopersmith@sun.com -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org +W: http://wiki.x.org +S: Maintained + +xedit +P: Paulo César Pereira de Andrade +M: pcpa@mandriva.com.br +L: xorg-devel@lists.x.org +W: http://wiki.x.org +S: Maintained + +xinput +P: Peter Hutterer +M: peter.hutterer@who-t.net +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained xkbcomp P: Daniel Stone M: daniel@fooishbar.org -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: htp://wiki.x.org S: Maintained S: XKB being overhauled S: Please contact Daniel if you're planning to work on this - -all others -P: Jim Gettys -M: ? -L: xorg@lists.freedesktop.org +xload +P: Matthieu Herrb +M: matthieu.herrb@laas.fr +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained +xman +P: Matthieu Herrb +M: matthieu.herrb@laas.fr +L: xorg-devel@lists.x.org +W: http://wiki.x.org +S: Maintained + +xmessage +P: Matthieu Herrb +M: matthieu.herrb@laas.fr +L: xorg-devel@lists.x.org +W: http://wiki.x.org +S: Maintained + +xmh +S: Obsolete - use exmh instead + +xsetroot +P: Matthieu Herrb +M: matthieu.herrb@laas.fr +L: xorg-devel@lists.x.org +W: http://wiki.x.org +S: Maintained + +all others +P: ? +M: xorg-devel@lists.x.org +L: xorg-devel@lists.x.org +W: http://wiki.x.org +S: Unmaintained + X.Org libraries --------------- @@ -83,14 +183,13 @@ SM WindowsWM XRes XScrnSaver -XTrap Xau Xaw X11, Xcomposite, Xcursor, Xdamage, Xfixes, Xrandr, Xrender P: Keith Packard M: keith.packard@intel.com -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained @@ -105,7 +204,7 @@ Xinerama Xi, xkbfile, xkbui P: Daniel Stone M: daniel@fooishbar.org -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: htp://wiki.x.org S: Maintained S: XKB being overhauled @@ -134,133 +233,122 @@ lbxutil S: Obsolete oldX -S: Obsolete +S: Obsolete - use libX11 instead + +XTrap +S: Obsolete - use libXtst instead xtrans P: Bill Crawford M: billcrawford1970@gmail.com -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained X.Org core ---------- -Cfb subsystem -P: Adam Jackson -M: ajax@nwnk.net -L: xorg@lists.freedesktop.org -W: http://wiki.x.org -S: Obsolete - Composite extension P: Keith Packard M: keith.packard@intel.com -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained Configuration subsystem P: Adam Jackson M: ajax@nwnk.net -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained Damage extension P: Keith Packard M: keith.packard@intel.com -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained Device Independent X (DIX) P: Keith Packard M: keith.packard@intel.com -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained DRI subsystem P: Adam Jackson M: ajax@nwnk.net -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained EXA subsystem P: Eric Anholt M: anholt@freebsd.org -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained GL subsystem P: Ian Romanick M: idr@us.ibm.com -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained KDrive P: Keith Packard M: keith.packard@intel.com -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained Loader subsystem P: Adam Jackson M: ajax@nwnk.net -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained Randr extension P: Keith Packard M: keith.packard@intel.com -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained Render extension P: Keith Packard M: keith.packard@intel.com -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained XAA subsystem P: Adam Jackson M: ajax@nwnk.net -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org -S: Obsolete +S: Despised XACE subsystem (security policy extensions framework) P: Eamon Walsh M: ewalsh@tycho.nsa.gov -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://people.freedesktop.org/~ewalsh/xace_proposal.html S: Maintained Xfixes extension P: Keith Packard M: keith.packard@intel.com -L: xorg@lists.freedesktop.org -W: http://wiki.x.org -S: Maintained - -Xgl -P: David Reveman -M: davidr@novell.com -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained XKB P: Daniel Stone M: daniel@fooishbar.org -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained, being seriously overhauled S: Please contact Daniel if you're planning to work on this @@ -268,18 +356,18 @@ S: Please contact Daniel if you're planning to work on this Input subsystem P: Daniel Stone M: daniel@fooishbar.org -P: Zepheniah E. Hull -M: warp@debian.org -L: xorg@lists.freedesktop.org +P: Peter Hutterer +M: peter.hutterer@who-t.net +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained, being overhauled -S: Please contact Daniel or Zepheniah if you're planning to work on this +S: Please contact Daniel or Peter if you're planning to work on this Xprint P: Drew Parsons P: Felix Schulte M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained @@ -288,396 +376,420 @@ X.Org OS ports FreeBSD P: Eric Anholt M: anholt@freebsd.org -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained Linux/i386 P: Egbert Eich M: eich@freedesktop.org -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained Linux/x86_64 P: Egbert Eich M: eich@freedesktop.org -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained Linux/ia64 P: Jesse Barnes M: jbarnes@virtuousgeek.org -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained Linux/ppc P: Benjamin Herrenschmidt M: benh@kernel.crashing.org -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained Linux/sparc P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Unmaintained LynxOS -P: ? -M: ? -L: xorg@lists.freedesktop.org -W: http://wiki.x.org -S: Unmaintained +S: Obsolete / Removed -Mac OS X/Darwin +Mac OS X (Xquartz) +P: Ben Byer +M: bbyer@apple.com +P: Jeremy Huddleston +M: jeremyhu@apple.com +L: xquartz-dev@lists.macosforge.org +W: http://xquartz.macosforge.org +L: xorg-devel@lists.x.org +W: http://wiki.x.org +S: Maintained + +NetBSD P: ? -M: ? -L: xorg@lists.freedesktop.org +M: xorg-devel@lists.x.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Unmaintained OpenBSD P: Matthieu Herrb M: matthieu.herrb@laas.fr -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained SCO (OpenServer 5) P: Kean Johnston M: jkj@freedesktop.org -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained -System V +System V (other than Solaris & SCO) P: ? -M: ? -L: xorg@lists.freedesktop.org +M: xorg-devel@lists.x.org +L: xorg-devel@lists.x.org W: http://wiki.x.org -S: Unmaintained +S: Unmaintained (libraries/apps) ; Obsolete/Removed (Xorg server) Solaris (x86 & sparc) P: Alan Coopersmith M: alan.coopersmith@sun.com -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org & http://opensolaris.org/os/community/x_win/ S: Maintained USL (UnixWare 7.1.x, OpenServer 6) P: Kean Johnston M: jkj@freedesktop.org -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained -Xwin (Cygwin/mingw port) -P: Alan Hourihane -M: alanh@freedesktop.org -L: xorg@lists.freedesktop.org +Cygwin +P: Jon TURNEY +M: jon.turney@dronecode.org.uk +P: Yaakov Selkowitz +M: yselkowitz@users.sourceforge.net +L: cygwin-xfree@cygwin.com +W: http://x.cygwin.com/ +S: Maintained + +MinGW +P: Colin Harrison +M: colin.harrison@virgin.net +W: http://www.straightrunning.com/XmingNotes/ +S: Maintained + +GNU/Hurd +P: Samuel Thibault +M: samuel.thibault@ens-lyon.org W: http://wiki.x.org +L: bug-hurd@gnu.org S: Maintained Drivers ------- xf86-input-acecad -P: ? -M: ? -L: xorg@lists.freedesktop.org +P: Giuseppe Bilotta +M: giuseppe.bilotta@gmail.org +L: xorg-devel@lists.x.org W: http://wiki.x.org -S: Unmaintained +S: Maintained xf86-input-aiptek P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Unmaintained xf86-input-calcomp P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org -S: Unmaintained +S: Deactivated xf86-input-citron P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org -S: Unmaintained +S: Deactivated xf86-input-digitaledge P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org -S: Unmaintained +S: Deactivated xf86-input-dmc P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org -S: Unmaintained +S: Deactivated xf86-input-dynapro P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org -S: Unmaintained +S: Deactivated xf86-input-elo2300 P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org -S: Unmaintained +S: Deactivated xf86-input-elographics -P: ? -M: ? -L: xorg@lists.freedesktop.org +P: Marc Balmer +M: marc.balmer@arcapos.com +L: xorg-devel@lists.x.org W: http://wiki.x.org -S: Unmaintained +S: Maintained xf86-input-evdev -P: Zephaniah E. Hull -M: warp@aehallh.com -L: xorg@lists.freedesktop.org +P: Peter Hutterer +M: peter.hutterer@who-t.net +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained xf86-input-fpit P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Unmaintained xf86-input-hyperpen P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Unmaintained xf86-input-jamstudio P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org -S: Unmaintained +S: Deactivated xf86-input-joystick -P: ? -M: ? -L: xorg@lists.freedesktop.org +P: Sascha Hlusiak +M: saschahlusiak@arcor.de +L: xorg-devel@lists.x.org W: http://wiki.x.org -S: Unmaintained +S: Maintained xf86-input-keyboard -P: ? -M: ? -L: xorg@lists.freedesktop.org +P: Alan Coopersmith +M: alan.coopersmith@sun.com +L: xorg-devel@lists.x.org W: http://wiki.x.org -S: Unmaintained +S: Maintained xf86-input-magellan P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org -S: Unmaintained +S: Deactivated xf86-input-magictouch P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org -S: Unmaintained +S: Deactivated xf86-input-microtouch P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Unmaintained xf86-input-mouse -P: Egbert Eich -M: eich@freedesktop.org -L: xorg@lists.freedesktop.org +P: Alan Coopersmith +M: alan.coopersmith@sun.com +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained xf86-input-mutouch P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Unmaintained xf86-input-palmax P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org -S: Unmaintained +S: Deactivated xf86-input-penmount P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Unmaintained xf86-input-sample P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Obsolete xf86-input-spaceorb P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org -S: Unmaintained +S: Deactivated xf86-input-summa P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org -S: Unmaintained +S: Deactivated + +xf86-input-synaptics +P: Christoph Brill +M: egore911@egore911.de +P: Peter Hutterer +M: peter.hutterer@who-t.net +L: xorg-devel@lists.x.org +W: http://wiki.x.org +S: Maintained xf86-input-tek4957 P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org -S: Unmaintained +S: Deactivated xf86-input-ur98 P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org -S: Unmaintained +S: Deactivated xf86-input-vmmouse -P: Philip Langdale -M: plangdale@vmware.com -L: xorg@lists.freedesktop.org +P: Thomas Hellstrom +M: thellstrom@vmware.com +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained xf86-input-void -P: Adam Jackson -M: ajax@nwnk.net -L: xorg@lists.freedesktop.org +P: Peter Hutterer +M: peter.hutterer@who-t.net +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained xf86-video-apm P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Unmaintained xf86-video-ark P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Unmaintained xf86-video-ast P: Y.C. Chen M: yc_chen@aspeedtech.com -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained -xf86-video-ati/atimisc -P: Luc Verhaegen -M: libv@skynet.be -L: xorg@lists.freedesktop.org -W: http://wiki.x.org -S: Maintained, being overhauled - -xf86-video-ati/r128, radeon +xf86-video-ati P: Alex Deucher P: Ben Herrenschmidt P: et al M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained xf86-video-chips P: Egbert Eich M: eich@freedesktop.org -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained xf86-video-cirrus P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Unmaintained xf86-video-cyrix P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Unmaintained xf86-video-dummy P: Adam Jackson M: ajax@nwnk.net -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained xf86-video-fbdev P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Unmaintained xf86-video-glide -P: ? -M: ? -L: xorg@lists.freedesktop.org +P: Guillem Jover +M: guillem@hadrons.org +L: xorg-devel@lists.x.org W: http://wiki.x.org -S: Obsolete +S: Obsolete, yet still somehow maintained xf86-video-glint P: Alan Hourihane M: alanh@fairlite.demon.co.uk -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained xf86-video-i128 P: Adam Jackson M: ajax@nwnk.net -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained @@ -685,242 +797,286 @@ xf86-video-i740 P: Egbert Eich P: ?? M: eich@freedesktop.org -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Unmaintained -xf86-video-i810 -P: Alan Hourihane -M: alanh@fairlite.demon.co.uk -L: xorg@lists.freedesktop.org +xf86-video-intel +P: Eric Anholt +M: eric@anholt.net +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained +xf86-video-mach64 +P: Luc Verhaegen +M: libv@skynet.be +L: xorg-devel@lists.x.org +W: http://wiki.x.org +S: Maintained + xf86-video-imstt P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Unmaintained xf86-video-mga -P: ? +P: Ian Romanick M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org -S: Unmaintained +S: Maintained xf86-video-neomagic P: Egbert Eich M: eich@freedesktop.org -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained xf86-video-newport P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Unmaintained xf86-video-nsc P: Alan Hourihane M: alanh@fairlite.demon.co.uk -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained xf86-video-nv P: Aaron Plattner M: aplattner@freedesktop.org -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained xf86-video-rendition P: Adam Jackson M: ajax@nwnk.net -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Odd fixes. +xf86-video-r128 +P: Alex Deucher +P: Ben Herrenschmidt +P: et al +M: ? +L: xorg-devel@lists.x.org +W: http://wiki.x.org +S: Maintained + +xf86-video-radeon +P: Alex Deucher +P: Ben Herrenschmidt +P: et al +M: ? +L: xorg-devel@lists.x.org +W: http://wiki.x.org +S: Maintained + xf86-video-s3 P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Unmaintained xf86-video-s3virge P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Unmaintained xf86-video-savage P: Alex Deucher M: agd5f@yahoo.com -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained xf86-video-siliconmotion P: Alex Deucher M: agd5f@yahoo.com -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Unmaintained xf86-video-sis -P: Thomas Winischhofer +P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org -S: Maintained +S: Unmaintained xf86-video-sisusb -P: Thomas Winischhofer +P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org -S: Maintained +S: Unmaintained xf86-video-sunbw2 P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Unmaintained xf86-video-suncg14 P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Unmaintained xf86-video-suncg3 P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Unmaintained xf86-video-suncg6 P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Unmaintained xf86-video-sunffb P: David S. Miller M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Odd fixes xf86-video-sunleo P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Unmaintained xf86-video-suntcx P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Unmaintained xf86-video-tdfx P: Adam Jackson M: ajax@nwnk.net -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained xf86-video-tga P: Alan Hourihane M: alanh@fairlite.demon.co.uk -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained xf86-video-trident P: Alan Hourihane M: alanh@fairlite.demon.co.uk -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained xf86-video-tseng P: Luc Verhaegen M: libv@skynet.be -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained xf86-video-v4l P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Unmaintained xf86-video-vesa -P: ? -M: ? -L: xorg@lists.freedesktop.org +P: Adam Jackson +M: ajax@nwnk.net +L: xorg-devel@lists.x.org W: http://wiki.x.org -S: Unmaintained +S: Maintained xf86-video-vga P: ? M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org -S: Unmaintained +S: Obsolete - use xf86-video-vesa instead xf86-video-via P: Luc Verhaegen P: Thomas Hellström M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org W: http://unichrome.sf.net S: Unmaintained xf86-video-vmware -P: Philip Langdale -M: plangdale@vmware.com -L: xorg@lists.freedesktop.org +P: Thomas Hellstrom +M: thellstrom@vmware.com +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained xf86-video-voodoo P: Alan Cox M: ? -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Odd fixes xf86-video-wsfb P: Matthieu Herrb M: matthieu.herrb@laas.fr -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Maintained +xf86-video-xgi +P: Ian Romanick +M: ? +L: xorg-devel@lists.x.org +W: http://wiki.x.org +S: Maintained + +Other modules +------------- + +data/bitmaps, data/cursors, doc/*, fonts/*, util/* +P: ? +M: xorg-devel@lists.x.org +L: xorg-devel@lists.x.org +W: http://wiki.x.org +S: Unmaintained + +xkbdata +S: Obsolete - use xkeyboard-config instead Developer relations & services ------------------------------ Mailing lists (lists.x.org) -P: Mike Harris +P: ? M: mailman@lists.x.org L: mailman@lists.x.org W: http://lists.x.org/mailman/listinfo/ @@ -929,14 +1085,14 @@ S: Maintained Website (www.x.org) P: Stuart Anderson M: anderson@netsweng.com -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://www.x.org/ S: Maintained Supply of pastries, other food, beverages P: Luc Verhaegen M: libv@skynet.be -L: xorg@lists.freedesktop.org +L: xorg-devel@lists.x.org W: http://wiki.x.org S: Disrepair S: 'Other food' may induce illness. Beware. diff --git a/doc/xorg-docs/Makefile.am b/doc/xorg-docs/Makefile.am index a7b8d805c..7ac492db2 100644 --- a/doc/xorg-docs/Makefile.am +++ b/doc/xorg-docs/Makefile.am @@ -21,223 +21,25 @@ # Process this file with autoconf to create configure. SUBDIRS = man -x11docdir = @X11DOCDIR@ -dist_x11doc_DATA = MAINTAINERS +dist_doc_DATA = MAINTAINERS +MAINTAINERCLEANFILES = ChangeLog INSTALL EXTRA_DIST = \ - MAINTAINERS \ misc/xlogo.epsi \ + misc/xlogo.svg \ registry \ specs/BDF/bdf.ms \ specs/BDF/fig1.ps \ specs/BDF/fig2.ps \ - specs/CTEXT/ctext.tbl.ms \ - specs/FSProtocol/protocol.ms \ - specs/GL/libGL.txt \ - specs/i18n/Framework.ms \ - specs/i18n/LocaleDB.ms \ - specs/i18n/Trans.ms \ - specs/ICCCM/icccm.ms \ - specs/ICCCM/indexmacros.t \ - specs/ICE/ICElib.ms \ - specs/ICE/ice.ms \ - specs/PM/PM_spec \ - specs/Randr/protocol.txt \ - specs/Render/library \ - specs/Render/protocol \ - specs/rstart/fix.awk \ - specs/rstart/fix.nawk \ - specs/rstart/fix.sed \ - specs/rstart/rstartd.txt \ - specs/rstart/rstart.ms \ - specs/rstart/tmac.rfc \ - specs/RX/RX.mif \ - specs/saver/saver.ms \ - specs/SIAddresses/hostname.txt \ - specs/SIAddresses/IPv6.txt \ - specs/SIAddresses/localuser.txt \ - specs/SIAddresses/README \ - specs/SM/SMlib.ms \ - specs/SM/xsmp.ms \ - specs/specindex.html \ - specs/X11/abstract.t \ - specs/X11/AppA \ - specs/X11/AppB \ - specs/X11/AppC \ - specs/X11/AppD \ - specs/X11/CH01 \ - specs/X11/CH02 \ - specs/X11/CH03 \ - specs/X11/CH04 \ - specs/X11/CH05 \ - specs/X11/CH06 \ - specs/X11/CH07 \ - specs/X11/CH08 \ - specs/X11/CH09 \ - specs/X11/CH10 \ - specs/X11/CH11 \ - specs/X11/CH12 \ - specs/X11/CH13 \ - specs/X11/CH14 \ - specs/X11/CH15 \ - specs/X11/CH16 \ - specs/X11/credits.t \ - specs/X11/glossary \ - specs/X11/indexmacros.t \ - specs/X11/postproc \ - specs/Xaw/AsciiSink \ - specs/Xaw/AsciiSource \ - specs/Xaw/AsciiText \ - specs/Xaw/block.awk \ - specs/Xaw/Box \ - specs/Xaw/CH1 \ - specs/Xaw/CH2 \ - specs/Xaw/CH3.intro \ - specs/Xaw/CH4.intro \ - specs/Xaw/CH5.intro \ - specs/Xaw/CH6.intro \ - specs/Xaw/CH7.intro \ - specs/Xaw/Command \ - specs/Xaw/Dialog \ - specs/Xaw/fixindex.awk \ - specs/Xaw/Form \ - specs/Xaw/Grip \ - specs/Xaw/Label \ - specs/Xaw/List \ - specs/Xaw/MenuButton \ - specs/Xaw/Paned \ - specs/Xaw/Panner \ - specs/Xaw/Porthole \ - specs/Xaw/Repeater \ - specs/Xaw/Scrollbar \ - specs/Xaw/Simple \ - specs/Xaw/SimpleMenu \ - specs/Xaw/Sme \ - specs/Xaw/SmeBSB \ - specs/Xaw/SmeLine \ - specs/Xaw/strings.mit \ - specs/Xaw/strings.xaw \ - specs/Xaw/StripChart \ - specs/Xaw/Template \ - specs/Xaw/Text \ - specs/Xaw/TextActions \ - specs/Xaw/TextCustom \ - specs/Xaw/TextFuncs \ - specs/Xaw/TextSink \ - specs/Xaw/TextSource \ - specs/Xaw/Toggle \ - specs/Xaw/TPage_Credits \ - specs/Xaw/Tree \ - specs/Xaw/Viewport \ - specs/Xaw/widg.idxmac.t \ - specs/Xaw/Xtk.widgets \ - specs/Xaw/Xtk.widg.front \ - specs/XDMCP/xdmcp.ms \ - specs/Xext/AppGroup.mif \ - specs/Xext/bigreq.ms \ - specs/Xext/buffer.ms \ - specs/Xext/dbelib.tex \ - specs/Xext/dbe.tex \ - specs/Xext/DPMSLib.ms \ - specs/Xext/DPMS.ms \ - specs/Xext/evi.ms \ - specs/Xext/lbxalg.mif \ - specs/Xext/lbx.book \ - specs/Xext/lbx.mif \ - specs/Xext/mit-shm.ms \ - specs/Xext/recordlib.ms \ - specs/Xext/record.ms \ - specs/Xext/security.tex \ - specs/Xext/shapelib.ms \ - specs/Xext/shape.ms \ - specs/Xext/synclib.tex \ - specs/Xext/sync.tex \ - specs/Xext/tog-cup.ms \ - specs/Xext/xc-misc.ms \ - specs/Xext/xtest1.info \ - specs/Xext/xtest1.mm \ - specs/Xext/xtestlib.ms \ - specs/Xext/xtest.ms \ - specs/xfs/design.ms \ - specs/xfs/FSlib.doc \ - specs/Xi/encoding.ms \ - specs/Xi/library.ms \ - specs/XIM/xim.ms \ - specs/Xi/porting.ms \ - specs/Xi/protocol.ms \ - specs/XKB/Proto/dflttrns.fm5 \ - specs/XKB/Proto/encoding.fm5 \ - specs/XKB/Proto/keysyms.fm5 \ - specs/XKB/Proto/protocol.fm5 \ - specs/XKB/Proto/prototoc.doc \ - specs/XKB/Proto/title.fm5 \ - specs/XKB/Proto/types.fm5 \ - specs/XKB/Proto/XKBproto.book \ - specs/XKB/XKBlib/allchaps.fm5 \ - specs/XKB/XKBlib/allchaps.ix \ - specs/XKB/XKBlib/allchaps.lof \ - specs/XKB/XKBlib/allchaps.lot \ - specs/XKB/XKBlib/allchaps.ps \ - specs/XKB/XKBlib/allchaps.toc \ - specs/XKB/XKBlib/fonts.fm5 \ - specs/XKB/XKBlib/title.fm5 \ - specs/XKB/XKBlib/XKBlib.book \ - specs/XLFD/xlfd.tbl.ms \ - specs/Xmu/Xmu.ms \ - specs/XPRINT/xp_library.book \ - specs/XPRINT/xp_library_cov.mif \ - specs/XPRINT/xp_libraryIX.doc \ - specs/XPRINT/xp_library.mif \ - specs/XPRINT/xp_libraryTOC.doc \ - specs/XPRINT/xp_proto.book \ - specs/XPRINT/xp_proto_cov.mif \ - specs/XPRINT/xp_protoIX.doc \ - specs/XPRINT/xp_proto.mif \ - specs/XPRINT/xp_protoTOC.doc \ - specs/XProtocol/glossary \ - specs/XProtocol/indexmacros.t \ - specs/XProtocol/postproc \ - specs/XProtocol/X11.encoding \ - specs/XProtocol/X11.keysyms \ - specs/XProtocol/X11.protocol \ - specs/Xserver/analysis.tex \ - specs/Xserver/appgroup.ms \ - specs/Xserver/ddx.tbl.ms \ - specs/Xserver/fontlib.ms \ - specs/Xserver/secint.tex \ - specs/Xserver/Xprt.book \ - specs/Xserver/Xprt_cov.mif \ - specs/Xserver/XprtIX.doc \ - specs/Xserver/Xprt.mif \ - specs/Xserver/XprtTOC.doc \ - specs/Xt/appA \ - specs/Xt/appB \ - specs/Xt/appC \ - specs/Xt/appD \ - specs/Xt/appE \ - specs/Xt/appF \ - specs/Xt/CH01 \ - specs/Xt/CH02 \ - specs/Xt/CH03 \ - specs/Xt/CH04 \ - specs/Xt/CH05 \ - specs/Xt/CH06 \ - specs/Xt/CH07 \ - specs/Xt/CH08 \ - specs/Xt/CH09 \ - specs/Xt/CH10 \ - specs/Xt/CH11 \ - specs/Xt/CH12 \ - specs/Xt/CH13 \ - specs/Xt/intr.idxmac.t \ - specs/Xt/postproc \ - specs/xtrans/Xtrans.mm \ - specs/Xt/strings.mit \ - specs/Xt/Xtk.intr.front \ - specs/XvMC/XvMC_API.txt \ - specs/Xv/xv-protocol-v2.txt \ - util/block.awk \ - util/fixindex.awk \ - util/indexmacros.t \ - util/macros.t + specs/specindex.html + +.PHONY: ChangeLog INSTALL + +INSTALL: + $(INSTALL_CMD) + +ChangeLog: + $(CHANGELOG_CMD) + +dist-hook: ChangeLog INSTALL diff --git a/doc/xorg-docs/Makefile.in b/doc/xorg-docs/Makefile.in index 48e5bfd8a..774402f2a 100644 --- a/doc/xorg-docs/Makefile.in +++ b/doc/xorg-docs/Makefile.in @@ -58,10 +58,10 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -DIST_COMMON = README $(am__configure_deps) $(dist_x11doc_DATA) \ +DIST_COMMON = README $(am__configure_deps) $(dist_doc_DATA) \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/configure config.guess config.sub install-sh \ - missing + $(top_srcdir)/configure ChangeLog INSTALL config.guess \ + config.sub install-sh missing subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac @@ -85,9 +85,9 @@ am__vpath_adj = case $$p in \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -am__installdirs = "$(DESTDIR)$(x11docdir)" -dist_x11docDATA_INSTALL = $(INSTALL_DATA) -DATA = $(dist_x11doc_DATA) +am__installdirs = "$(DESTDIR)$(docdir)" +dist_docDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_doc_DATA) ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -105,35 +105,68 @@ distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHANGELOG_CMD = @CHANGELOG_CMD@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ +DEPDIR = @DEPDIR@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ENABLE_DOCS_FALSE = @ENABLE_DOCS_FALSE@ +ENABLE_DOCS_TRUE = @ENABLE_DOCS_TRUE@ +ENABLE_SPECS_FALSE = @ENABLE_SPECS_FALSE@ +ENABLE_SPECS_TRUE = @ENABLE_SPECS_TRUE@ +EXEEXT = @EXEEXT@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ -HARDCOPYDIR = @HARDCOPYDIR@ +FOP = @FOP@ +GREP = @GREP@ +HAVE_FOP_FALSE = @HAVE_FOP_FALSE@ +HAVE_FOP_TRUE = @HAVE_FOP_TRUE@ +HAVE_STYLESHEETS_FALSE = @HAVE_STYLESHEETS_FALSE@ +HAVE_STYLESHEETS_TRUE = @HAVE_STYLESHEETS_TRUE@ +HAVE_XMLTO_FALSE = @HAVE_XMLTO_FALSE@ +HAVE_XMLTO_TEXT_FALSE = @HAVE_XMLTO_TEXT_FALSE@ +HAVE_XMLTO_TEXT_TRUE = @HAVE_XMLTO_TEXT_TRUE@ +HAVE_XMLTO_TRUE = @HAVE_XMLTO_TRUE@ +INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ +MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ +OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -141,13 +174,23 @@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ +STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ VERSION = @VERSION@ -X11DOCDIR = @X11DOCDIR@ -ac_ct_STRIP = @ac_ct_STRIP@ +XMLTO = @XMLTO@ +XORG_MAN_PAGE = @XORG_MAN_PAGE@ +XORG_SGML_PATH = @XORG_SGML_PATH@ +XSL_STYLESHEET = @XSL_STYLESHEET@ +ac_ct_CC = @ac_ct_CC@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ @@ -157,253 +200,52 @@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ SUBDIRS = man -x11docdir = @X11DOCDIR@ -dist_x11doc_DATA = MAINTAINERS +dist_doc_DATA = MAINTAINERS +MAINTAINERCLEANFILES = ChangeLog INSTALL EXTRA_DIST = \ - MAINTAINERS \ misc/xlogo.epsi \ + misc/xlogo.svg \ registry \ specs/BDF/bdf.ms \ specs/BDF/fig1.ps \ specs/BDF/fig2.ps \ - specs/CTEXT/ctext.tbl.ms \ - specs/FSProtocol/protocol.ms \ - specs/GL/libGL.txt \ - specs/i18n/Framework.ms \ - specs/i18n/LocaleDB.ms \ - specs/i18n/Trans.ms \ - specs/ICCCM/icccm.ms \ - specs/ICCCM/indexmacros.t \ - specs/ICE/ICElib.ms \ - specs/ICE/ice.ms \ - specs/PM/PM_spec \ - specs/Randr/protocol.txt \ - specs/Render/library \ - specs/Render/protocol \ - specs/rstart/fix.awk \ - specs/rstart/fix.nawk \ - specs/rstart/fix.sed \ - specs/rstart/rstartd.txt \ - specs/rstart/rstart.ms \ - specs/rstart/tmac.rfc \ - specs/RX/RX.mif \ - specs/saver/saver.ms \ - specs/SIAddresses/hostname.txt \ - specs/SIAddresses/IPv6.txt \ - specs/SIAddresses/localuser.txt \ - specs/SIAddresses/README \ - specs/SM/SMlib.ms \ - specs/SM/xsmp.ms \ - specs/specindex.html \ - specs/X11/abstract.t \ - specs/X11/AppA \ - specs/X11/AppB \ - specs/X11/AppC \ - specs/X11/AppD \ - specs/X11/CH01 \ - specs/X11/CH02 \ - specs/X11/CH03 \ - specs/X11/CH04 \ - specs/X11/CH05 \ - specs/X11/CH06 \ - specs/X11/CH07 \ - specs/X11/CH08 \ - specs/X11/CH09 \ - specs/X11/CH10 \ - specs/X11/CH11 \ - specs/X11/CH12 \ - specs/X11/CH13 \ - specs/X11/CH14 \ - specs/X11/CH15 \ - specs/X11/CH16 \ - specs/X11/credits.t \ - specs/X11/glossary \ - specs/X11/indexmacros.t \ - specs/X11/postproc \ - specs/Xaw/AsciiSink \ - specs/Xaw/AsciiSource \ - specs/Xaw/AsciiText \ - specs/Xaw/block.awk \ - specs/Xaw/Box \ - specs/Xaw/CH1 \ - specs/Xaw/CH2 \ - specs/Xaw/CH3.intro \ - specs/Xaw/CH4.intro \ - specs/Xaw/CH5.intro \ - specs/Xaw/CH6.intro \ - specs/Xaw/CH7.intro \ - specs/Xaw/Command \ - specs/Xaw/Dialog \ - specs/Xaw/fixindex.awk \ - specs/Xaw/Form \ - specs/Xaw/Grip \ - specs/Xaw/Label \ - specs/Xaw/List \ - specs/Xaw/MenuButton \ - specs/Xaw/Paned \ - specs/Xaw/Panner \ - specs/Xaw/Porthole \ - specs/Xaw/Repeater \ - specs/Xaw/Scrollbar \ - specs/Xaw/Simple \ - specs/Xaw/SimpleMenu \ - specs/Xaw/Sme \ - specs/Xaw/SmeBSB \ - specs/Xaw/SmeLine \ - specs/Xaw/strings.mit \ - specs/Xaw/strings.xaw \ - specs/Xaw/StripChart \ - specs/Xaw/Template \ - specs/Xaw/Text \ - specs/Xaw/TextActions \ - specs/Xaw/TextCustom \ - specs/Xaw/TextFuncs \ - specs/Xaw/TextSink \ - specs/Xaw/TextSource \ - specs/Xaw/Toggle \ - specs/Xaw/TPage_Credits \ - specs/Xaw/Tree \ - specs/Xaw/Viewport \ - specs/Xaw/widg.idxmac.t \ - specs/Xaw/Xtk.widgets \ - specs/Xaw/Xtk.widg.front \ - specs/XDMCP/xdmcp.ms \ - specs/Xext/AppGroup.mif \ - specs/Xext/bigreq.ms \ - specs/Xext/buffer.ms \ - specs/Xext/dbelib.tex \ - specs/Xext/dbe.tex \ - specs/Xext/DPMSLib.ms \ - specs/Xext/DPMS.ms \ - specs/Xext/evi.ms \ - specs/Xext/lbxalg.mif \ - specs/Xext/lbx.book \ - specs/Xext/lbx.mif \ - specs/Xext/mit-shm.ms \ - specs/Xext/recordlib.ms \ - specs/Xext/record.ms \ - specs/Xext/security.tex \ - specs/Xext/shapelib.ms \ - specs/Xext/shape.ms \ - specs/Xext/synclib.tex \ - specs/Xext/sync.tex \ - specs/Xext/tog-cup.ms \ - specs/Xext/xc-misc.ms \ - specs/Xext/xtest1.info \ - specs/Xext/xtest1.mm \ - specs/Xext/xtestlib.ms \ - specs/Xext/xtest.ms \ - specs/xfs/design.ms \ - specs/xfs/FSlib.doc \ - specs/Xi/encoding.ms \ - specs/Xi/library.ms \ - specs/XIM/xim.ms \ - specs/Xi/porting.ms \ - specs/Xi/protocol.ms \ - specs/XKB/Proto/dflttrns.fm5 \ - specs/XKB/Proto/encoding.fm5 \ - specs/XKB/Proto/keysyms.fm5 \ - specs/XKB/Proto/protocol.fm5 \ - specs/XKB/Proto/prototoc.doc \ - specs/XKB/Proto/title.fm5 \ - specs/XKB/Proto/types.fm5 \ - specs/XKB/Proto/XKBproto.book \ - specs/XKB/XKBlib/allchaps.fm5 \ - specs/XKB/XKBlib/allchaps.ix \ - specs/XKB/XKBlib/allchaps.lof \ - specs/XKB/XKBlib/allchaps.lot \ - specs/XKB/XKBlib/allchaps.ps \ - specs/XKB/XKBlib/allchaps.toc \ - specs/XKB/XKBlib/fonts.fm5 \ - specs/XKB/XKBlib/title.fm5 \ - specs/XKB/XKBlib/XKBlib.book \ - specs/XLFD/xlfd.tbl.ms \ - specs/Xmu/Xmu.ms \ - specs/XPRINT/xp_library.book \ - specs/XPRINT/xp_library_cov.mif \ - specs/XPRINT/xp_libraryIX.doc \ - specs/XPRINT/xp_library.mif \ - specs/XPRINT/xp_libraryTOC.doc \ - specs/XPRINT/xp_proto.book \ - specs/XPRINT/xp_proto_cov.mif \ - specs/XPRINT/xp_protoIX.doc \ - specs/XPRINT/xp_proto.mif \ - specs/XPRINT/xp_protoTOC.doc \ - specs/XProtocol/glossary \ - specs/XProtocol/indexmacros.t \ - specs/XProtocol/postproc \ - specs/XProtocol/X11.encoding \ - specs/XProtocol/X11.keysyms \ - specs/XProtocol/X11.protocol \ - specs/Xserver/analysis.tex \ - specs/Xserver/appgroup.ms \ - specs/Xserver/ddx.tbl.ms \ - specs/Xserver/fontlib.ms \ - specs/Xserver/secint.tex \ - specs/Xserver/Xprt.book \ - specs/Xserver/Xprt_cov.mif \ - specs/Xserver/XprtIX.doc \ - specs/Xserver/Xprt.mif \ - specs/Xserver/XprtTOC.doc \ - specs/Xt/appA \ - specs/Xt/appB \ - specs/Xt/appC \ - specs/Xt/appD \ - specs/Xt/appE \ - specs/Xt/appF \ - specs/Xt/CH01 \ - specs/Xt/CH02 \ - specs/Xt/CH03 \ - specs/Xt/CH04 \ - specs/Xt/CH05 \ - specs/Xt/CH06 \ - specs/Xt/CH07 \ - specs/Xt/CH08 \ - specs/Xt/CH09 \ - specs/Xt/CH10 \ - specs/Xt/CH11 \ - specs/Xt/CH12 \ - specs/Xt/CH13 \ - specs/Xt/intr.idxmac.t \ - specs/Xt/postproc \ - specs/xtrans/Xtrans.mm \ - specs/Xt/strings.mit \ - specs/Xt/Xtk.intr.front \ - specs/XvMC/XvMC_API.txt \ - specs/Xv/xv-protocol-v2.txt \ - util/block.awk \ - util/fixindex.awk \ - util/indexmacros.t \ - util/macros.t + specs/specindex.html all: all-recursive .SUFFIXES: am--refresh: @: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ @@ -430,27 +272,27 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck -$(top_srcdir)/configure: $(am__configure_deps) +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(srcdir) && $(AUTOCONF) -$(ACLOCAL_M4): $(am__aclocal_m4_deps) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) uninstall-info-am: -install-dist_x11docDATA: $(dist_x11doc_DATA) +install-dist_docDATA: $(dist_doc_DATA) @$(NORMAL_INSTALL) - test -z "$(x11docdir)" || $(mkdir_p) "$(DESTDIR)$(x11docdir)" - @list='$(dist_x11doc_DATA)'; for p in $$list; do \ + test -z "$(docdir)" || $(mkdir_p) "$(DESTDIR)$(docdir)" + @list='$(dist_doc_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ - echo " $(dist_x11docDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(x11docdir)/$$f'"; \ - $(dist_x11docDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(x11docdir)/$$f"; \ + echo " $(dist_docDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(docdir)/$$f'"; \ + $(dist_docDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(docdir)/$$f"; \ done -uninstall-dist_x11docDATA: +uninstall-dist_docDATA: @$(NORMAL_UNINSTALL) - @list='$(dist_x11doc_DATA)'; for p in $$list; do \ + @list='$(dist_doc_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(x11docdir)/$$f'"; \ - rm -f "$(DESTDIR)$(x11docdir)/$$f"; \ + echo " rm -f '$(DESTDIR)$(docdir)/$$f'"; \ + rm -f "$(DESTDIR)$(docdir)/$$f"; \ done # This directory's subdirectories are mostly independent; you can cd @@ -588,7 +430,7 @@ distclean-tags: distdir: $(DISTFILES) $(am__remove_distdir) mkdir $(distdir) - $(mkdir_p) $(distdir)/misc $(distdir)/specs $(distdir)/specs/BDF $(distdir)/specs/CTEXT $(distdir)/specs/FSProtocol $(distdir)/specs/GL $(distdir)/specs/ICCCM $(distdir)/specs/ICE $(distdir)/specs/PM $(distdir)/specs/RX $(distdir)/specs/Randr $(distdir)/specs/Render $(distdir)/specs/SIAddresses $(distdir)/specs/SM $(distdir)/specs/X11 $(distdir)/specs/XDMCP $(distdir)/specs/XIM $(distdir)/specs/XKB/Proto $(distdir)/specs/XKB/XKBlib $(distdir)/specs/XLFD $(distdir)/specs/XPRINT $(distdir)/specs/XProtocol $(distdir)/specs/Xaw $(distdir)/specs/Xext $(distdir)/specs/Xi $(distdir)/specs/Xmu $(distdir)/specs/Xserver $(distdir)/specs/Xt $(distdir)/specs/Xv $(distdir)/specs/XvMC $(distdir)/specs/i18n $(distdir)/specs/rstart $(distdir)/specs/saver $(distdir)/specs/xfs $(distdir)/specs/xtrans $(distdir)/util + $(mkdir_p) $(distdir)/misc $(distdir)/specs $(distdir)/specs/BDF @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ @@ -630,6 +472,9 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ @@ -732,7 +577,7 @@ check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: - for dir in "$(DESTDIR)$(x11docdir)"; do \ + for dir in "$(DESTDIR)$(docdir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-recursive @@ -759,6 +604,7 @@ distclean-generic: maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic mostlyclean-am @@ -778,7 +624,7 @@ info: info-recursive info-am: -install-data-am: install-dist_x11docDATA +install-data-am: install-dist_docDATA install-exec-am: @@ -806,26 +652,36 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-dist_x11docDATA uninstall-info-am +uninstall-am: uninstall-dist_docDATA uninstall-info-am uninstall-info: uninstall-info-recursive .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ check-am clean clean-generic clean-recursive ctags \ - ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-shar \ - dist-tarZ dist-zip distcheck distclean distclean-generic \ - distclean-recursive distclean-tags distcleancheck distdir \ - distuninstallcheck dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am \ - install-dist_x11docDATA install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ - installcheck installcheck-am installdirs installdirs-am \ - maintainer-clean maintainer-clean-generic \ + ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-hook \ + dist-shar dist-tarZ dist-zip distcheck distclean \ + distclean-generic distclean-recursive distclean-tags \ + distcleancheck distdir distuninstallcheck dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dist_docDATA install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ maintainer-clean-recursive mostlyclean mostlyclean-generic \ mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-dist_x11docDATA \ + uninstall uninstall-am uninstall-dist_docDATA \ uninstall-info-am + +.PHONY: ChangeLog INSTALL + +INSTALL: + $(INSTALL_CMD) + +ChangeLog: + $(CHANGELOG_CMD) + +dist-hook: ChangeLog INSTALL # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/doc/xorg-docs/README b/doc/xorg-docs/README index f9e4211b2..7bd3eba42 100644 --- a/doc/xorg-docs/README +++ b/doc/xorg-docs/README @@ -1,4 +1,28 @@ -The documentation in this package is from xc/doc in the monolithic -source tree. It is expected that most of the documentation included -here will be converted to a new format and then moved to the appropriate -package. +This package provides miscellaneous documentation for the X Window System +that doesn't better fit into other packages. + +The preferred documentation format for these documents is DocBook XML. + +All questions regarding this software should be directed at the +Xorg mailing list: + + http://lists.freedesktop.org/mailman/listinfo/xorg + +Please submit bug reports to the Xorg bugzilla: + + https://bugs.freedesktop.org/enter_bug.cgi?product=xorg + +The master development code repository can be found at: + + git://anongit.freedesktop.org/git/xorg/doc/xorg-docs + + http://cgit.freedesktop.org/xorg/doc/xorg-docs + +For patch submission instructions, see: + + http://www.x.org/wiki/Development/Documentation/SubmittingPatches + +For more information on the git code manager, see: + + http://wiki.x.org/wiki/GitPage + diff --git a/doc/xorg-docs/aclocal.m4 b/doc/xorg-docs/aclocal.m4 index e65ea7ddd..7fbecba59 100644 --- a/doc/xorg-docs/aclocal.m4 +++ b/doc/xorg-docs/aclocal.m4 @@ -11,6 +11,164 @@ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# +# Copyright © 2004 Scott James Remnant . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# PKG_PROG_PKG_CONFIG([MIN-VERSION]) +# ---------------------------------- +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi + +fi[]dnl +])# PKG_PROG_PKG_CONFIG + +# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# Check to see whether a particular set of modules exists. Similar +# to PKG_CHECK_MODULES(), but does not set variables or print errors. +# +# +# Similar to PKG_CHECK_MODULES, make sure that the first instance of +# this or PKG_CHECK_MODULES is called, or make sure to call +# PKG_CHECK_EXISTS manually +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_ifval([$2], [$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + + +# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +# --------------------------------------------- +m4_define([_PKG_CONFIG], +[if test -n "$PKG_CONFIG"; then + if test -n "$$1"; then + pkg_cv_[]$1="$$1" + else + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], + [pkg_failed=yes]) + fi +else + pkg_failed=untried +fi[]dnl +])# _PKG_CONFIG + +# _PKG_SHORT_ERRORS_SUPPORTED +# ----------------------------- +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])# _PKG_SHORT_ERRORS_SUPPORTED + + +# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +# [ACTION-IF-NOT-FOUND]) +# +# +# Note that if there is a possibility the first call to +# PKG_CHECK_MODULES might not happen, you should be sure to include an +# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +# +# +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $1]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + ifelse([$4], , [AC_MSG_ERROR(dnl +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT +])], + [AC_MSG_RESULT([no]) + $4]) +elif test $pkg_failed = untried; then + ifelse([$4], , [AC_MSG_FAILURE(dnl +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see .])], + [$4]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + ifelse([$3], , :, [$3]) +fi[]dnl +])# PKG_CHECK_MODULES + # Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation @@ -83,6 +241,263 @@ AC_PREREQ([2.50])dnl am_aux_dir=`cd $ac_aux_dir && pwd` ]) +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 7 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE]) +AC_SUBST([$1_FALSE]) +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 8 + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH]) +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +#serial 3 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 @@ -232,6 +647,87 @@ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering + +# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +AC_DEFUN([AM_MAINTAINER_MODE], +[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode is disabled by default + AC_ARG_ENABLE(maintainer-mode, +[ --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer], + USE_MAINTAINER_MODE=$enableval, + USE_MAINTAINER_MODE=no) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST(MAINT)dnl +] +) + +AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 3 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005 @@ -487,33 +983,28 @@ AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR +dnl xorg-macros.m4. Generated from xorg-macros.m4.in xorgversion.m4 by configure. dnl -dnl Copyright 2005-2006 Sun Microsystems, Inc. All rights reserved. +dnl Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. dnl dnl Permission is hereby granted, free of charge, to any person obtaining a -dnl copy of this software and associated documentation files (the -dnl "Software"), to deal in the Software without restriction, including -dnl without limitation the rights to use, copy, modify, merge, publish, -dnl distribute, and/or sell copies of the Software, and to permit persons -dnl to whom the Software is furnished to do so, provided that the above -dnl copyright notice(s) and this permission notice appear in all copies of -dnl the Software and that both the above copyright notice(s) and this -dnl permission notice appear in supporting documentation. +dnl copy of this software and associated documentation files (the "Software"), +dnl to deal in the Software without restriction, including without limitation +dnl the rights to use, copy, modify, merge, publish, distribute, sublicense, +dnl and/or sell copies of the Software, and to permit persons to whom the +dnl Software is furnished to do so, subject to the following conditions: dnl -dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -dnl OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -dnl HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL -dnl INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING -dnl FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -dnl NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION -dnl WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +dnl The above copyright notice and this permission notice (including the next +dnl paragraph) shall be included in all copies or substantial portions of the +dnl Software. dnl -dnl Except as contained in this notice, the name of a copyright holder -dnl shall not be used in advertising or otherwise to promote the sale, use -dnl or other dealings in this Software without prior written authorization -dnl of the copyright holder. +dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +dnl IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +dnl FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +dnl THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +dnl LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +dnl FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +dnl DEALINGS IN THE SOFTWARE. # XORG_MACROS_VERSION(required-version) # ------------------------------------- @@ -523,27 +1014,24 @@ dnl of the copyright holder. # your configure.ac with the minimum required version, such as: # XORG_MACROS_VERSION(1.1) # -# To force at least a version with this macro defined, also add: -# m4_ifndef([XORG_MACROS_VERSION], [AC_FATAL([must install xorg-macros 1.1 or later before running autoconf/autogen])]) +# To ensure that this macro is defined, also add: +# m4_ifndef([XORG_MACROS_VERSION], +# [m4_fatal([must install xorg-macros 1.1 or later before running autoconf/autogen])]) # # # See the "minimum version" comment for each macro you use to see what # version you require. -AC_DEFUN([XORG_MACROS_VERSION],[ - [XORG_MACROS_needed_version=$1 - XORG_MACROS_needed_major=`echo $XORG_MACROS_needed_version | sed 's/\..*$//'` - XORG_MACROS_needed_minor=`echo $XORG_MACROS_needed_version | sed -e 's/^[0-9]*\.//' -e 's/\..*$//'`] - AC_MSG_CHECKING([if xorg-macros used to generate configure is at least ${XORG_MACROS_needed_major}.${XORG_MACROS_needed_minor}]) - [XORG_MACROS_version=1.1.5 - XORG_MACROS_major=`echo $XORG_MACROS_version | sed 's/\..*$//'` - XORG_MACROS_minor=`echo $XORG_MACROS_version | sed -e 's/^[0-9]*\.//' -e 's/\..*$//'`] - if test $XORG_MACROS_major -ne $XORG_MACROS_needed_major ; then - AC_MSG_ERROR([configure built with incompatible version of xorg-macros.m4 - requires version ${XORG_MACROS_major}.x]) - fi - if test $XORG_MACROS_minor -lt $XORG_MACROS_needed_minor ; then - AC_MSG_ERROR([configure built with too old of a version of xorg-macros.m4 - requires version ${XORG_MACROS_major}.${XORG_MACROS_minor}.0 or newer]) - fi - AC_MSG_RESULT([yes, $XORG_MACROS_version]) +m4_defun([XORG_MACROS_VERSION],[ +m4_define([vers_have], [1.13.0]) +m4_define([maj_have], m4_substr(vers_have, 0, m4_index(vers_have, [.]))) +m4_define([maj_needed], m4_substr([$1], 0, m4_index([$1], [.]))) +m4_if(m4_cmp(maj_have, maj_needed), 0,, + [m4_fatal([xorg-macros major version ]maj_needed[ is required but ]vers_have[ found])]) +m4_if(m4_version_compare(vers_have, [$1]), -1, + [m4_fatal([xorg-macros version $1 or higher is required but ]vers_have[ found])]) +m4_undefine([vers_have]) +m4_undefine([maj_have]) +m4_undefine([maj_needed]) ]) # XORG_MACROS_VERSION # XORG_PROG_RAWCPP() @@ -568,6 +1056,10 @@ else if test `${RAWCPP} -undef < conftest.$ac_ext | grep -c 'unix'` -eq 1 ; then RAWCPPFLAGS=-undef AC_MSG_RESULT([yes]) + # under Cygwin unix is still defined even with -undef + elif test `${RAWCPP} -undef -ansi < conftest.$ac_ext | grep -c 'unix'` -eq 1 ; then + RAWCPPFLAGS="-undef -ansi" + AC_MSG_RESULT([yes, with -ansi]) else AC_MSG_ERROR([${RAWCPP} defines unix with or without -undef. I don't know what to do.]) fi @@ -598,9 +1090,12 @@ AC_SUBST(RAWCPPFLAGS) # on this OS - replaces *ManSuffix settings in old Imake *.cf per-os files. # Not sure if there's any better way than just hardcoding by OS name. # Override default settings by setting environment variables +# Added MAN_SUBSTS in version 1.8 +# Added AC_PROG_SED in version 1.8 AC_DEFUN([XORG_MANPAGE_SECTIONS],[ AC_REQUIRE([AC_CANONICAL_HOST]) +AC_REQUIRE([AC_PROG_SED]) if test x$APP_MAN_SUFFIX = x ; then APP_MAN_SUFFIX=1 @@ -669,8 +1164,60 @@ AC_SUBST([FILE_MAN_DIR]) AC_SUBST([MISC_MAN_DIR]) AC_SUBST([DRIVER_MAN_DIR]) AC_SUBST([ADMIN_MAN_DIR]) + +XORG_MAN_PAGE="X Version 11" +AC_SUBST([XORG_MAN_PAGE]) +MAN_SUBSTS="\ + -e 's|__vendorversion__|\"\$(PACKAGE_STRING)\" \"\$(XORG_MAN_PAGE)\"|' \ + -e 's|__xorgversion__|\"\$(PACKAGE_STRING)\" \"\$(XORG_MAN_PAGE)\"|' \ + -e 's|__xservername__|Xorg|g' \ + -e 's|__xconfigfile__|xorg.conf|g' \ + -e 's|__projectroot__|\$(prefix)|g' \ + -e 's|__apploaddir__|\$(appdefaultdir)|g' \ + -e 's|__appmansuffix__|\$(APP_MAN_SUFFIX)|g' \ + -e 's|__drivermansuffix__|\$(DRIVER_MAN_SUFFIX)|g' \ + -e 's|__adminmansuffix__|\$(ADMIN_MAN_SUFFIX)|g' \ + -e 's|__libmansuffix__|\$(LIB_MAN_SUFFIX)|g' \ + -e 's|__miscmansuffix__|\$(MISC_MAN_SUFFIX)|g' \ + -e 's|__filemansuffix__|\$(FILE_MAN_SUFFIX)|g'" +AC_SUBST([MAN_SUBSTS]) + ]) # XORG_MANPAGE_SECTIONS +# XORG_CHECK_SGML_DOCTOOLS([MIN-VERSION]) +# ------------------------ +# Minimum version: 1.7.0 +# +# Defines the variable XORG_SGML_PATH containing the location of X11/defs.ent +# provided by xorg-sgml-doctools, if installed. +AC_DEFUN([XORG_CHECK_SGML_DOCTOOLS],[ +AC_MSG_CHECKING([for X.Org SGML entities m4_ifval([$1],[>= $1])]) +XORG_SGML_PATH= +PKG_CHECK_EXISTS([xorg-sgml-doctools m4_ifval([$1],[>= $1])], + [XORG_SGML_PATH=`$PKG_CONFIG --variable=sgmlrootdir xorg-sgml-doctools`], + [m4_ifval([$1],[:], + [if test x"$cross_compiling" != x"yes" ; then + AC_CHECK_FILE([$prefix/share/sgml/X11/defs.ent], + [XORG_SGML_PATH=$prefix/share/sgml]) + fi]) + ]) + +# Define variables STYLESHEET_SRCDIR and XSL_STYLESHEET containing +# the path and the name of the doc stylesheet +if test "x$XORG_SGML_PATH" != "x" ; then + AC_MSG_RESULT([$XORG_SGML_PATH]) + STYLESHEET_SRCDIR=$XORG_SGML_PATH/X11 + XSL_STYLESHEET=$STYLESHEET_SRCDIR/xorg.xsl +else + AC_MSG_RESULT([no]) +fi + +AC_SUBST(XORG_SGML_PATH) +AC_SUBST(STYLESHEET_SRCDIR) +AC_SUBST(XSL_STYLESHEET) +AM_CONDITIONAL([HAVE_STYLESHEETS], [test "x$XSL_STYLESHEET" != "x"]) +]) # XORG_CHECK_SGML_DOCTOOLS + # XORG_CHECK_LINUXDOC # ------------------- # Minimum version: 1.0.0 @@ -680,17 +1227,14 @@ AC_SUBST([ADMIN_MAN_DIR]) # Whether or not the necessary tools and files are found can be checked # with the AM_CONDITIONAL "BUILD_LINUXDOC" AC_DEFUN([XORG_CHECK_LINUXDOC],[ -XORG_SGML_PATH=$prefix/share/sgml -HAVE_DEFS_ENT= - -AC_CHECK_FILE([$XORG_SGML_PATH/X11/defs.ent], [HAVE_DEFS_ENT=yes]) +AC_REQUIRE([XORG_CHECK_SGML_DOCTOOLS]) +AC_REQUIRE([XORG_WITH_PS2PDF]) AC_PATH_PROG(LINUXDOC, linuxdoc) -AC_PATH_PROG(PS2PDF, ps2pdf) -AC_MSG_CHECKING([Whether to build documentation]) +AC_MSG_CHECKING([whether to build documentation]) -if test x$HAVE_DEFS_ENT != x && test x$LINUXDOC != x ; then +if test x$XORG_SGML_PATH != x && test x$LINUXDOC != x ; then BUILDDOC=yes else BUILDDOC=no @@ -700,9 +1244,9 @@ AM_CONDITIONAL(BUILD_LINUXDOC, [test x$BUILDDOC = xyes]) AC_MSG_RESULT([$BUILDDOC]) -AC_MSG_CHECKING([Whether to build pdf documentation]) +AC_MSG_CHECKING([whether to build pdf documentation]) -if test x$PS2PDF != x && test x$BUILD_PDFDOC != xno; then +if test x$have_ps2pdf != xno && test x$BUILD_PDFDOC != xno; then BUILDPDFDOC=yes else BUILDPDFDOC=no @@ -712,7 +1256,7 @@ AM_CONDITIONAL(BUILD_PDFDOC, [test x$BUILDPDFDOC = xyes]) AC_MSG_RESULT([$BUILDPDFDOC]) -MAKE_TEXT="SGML_SEARCH_PATH=$XORG_SGML_PATH GROFF_NO_SGR=y $LINUXDOC -B txt" +MAKE_TEXT="SGML_SEARCH_PATH=$XORG_SGML_PATH GROFF_NO_SGR=y $LINUXDOC -B txt -f" MAKE_PS="SGML_SEARCH_PATH=$XORG_SGML_PATH $LINUXDOC -B latex --papersize=letter --output=ps" MAKE_PDF="$PS2PDF" MAKE_HTML="SGML_SEARCH_PATH=$XORG_SGML_PATH $LINUXDOC -B html --split=0" @@ -732,46 +1276,44 @@ AC_SUBST(MAKE_HTML) # indicates whether the necessary tools and files are found and, if set, # $(MAKE_XXX) blah.sgml will produce blah.xxx. AC_DEFUN([XORG_CHECK_DOCBOOK],[ -XORG_SGML_PATH=$prefix/share/sgml -HAVE_DEFS_ENT= +AC_REQUIRE([XORG_CHECK_SGML_DOCTOOLS]) + BUILDTXTDOC=no BUILDPDFDOC=no BUILDPSDOC=no BUILDHTMLDOC=no -AC_CHECK_FILE([$XORG_SGML_PATH/X11/defs.ent], [HAVE_DEFS_ENT=yes]) - AC_PATH_PROG(DOCBOOKPS, docbook2ps) AC_PATH_PROG(DOCBOOKPDF, docbook2pdf) AC_PATH_PROG(DOCBOOKHTML, docbook2html) AC_PATH_PROG(DOCBOOKTXT, docbook2txt) -AC_MSG_CHECKING([Whether to build text documentation]) -if test x$HAVE_DEFS_ENT != x && test x$DOCBOOKTXT != x && +AC_MSG_CHECKING([whether to build text documentation]) +if test x$XORG_SGML_PATH != x && test x$DOCBOOKTXT != x && test x$BUILD_TXTDOC != xno; then BUILDTXTDOC=yes fi AM_CONDITIONAL(BUILD_TXTDOC, [test x$BUILDTXTDOC = xyes]) AC_MSG_RESULT([$BUILDTXTDOC]) -AC_MSG_CHECKING([Whether to build PDF documentation]) -if test x$HAVE_DEFS_ENT != x && test x$DOCBOOKPDF != x && +AC_MSG_CHECKING([whether to build PDF documentation]) +if test x$XORG_SGML_PATH != x && test x$DOCBOOKPDF != x && test x$BUILD_PDFDOC != xno; then BUILDPDFDOC=yes fi AM_CONDITIONAL(BUILD_PDFDOC, [test x$BUILDPDFDOC = xyes]) AC_MSG_RESULT([$BUILDPDFDOC]) -AC_MSG_CHECKING([Whether to build PostScript documentation]) -if test x$HAVE_DEFS_ENT != x && test x$DOCBOOKPS != x && +AC_MSG_CHECKING([whether to build PostScript documentation]) +if test x$XORG_SGML_PATH != x && test x$DOCBOOKPS != x && test x$BUILD_PSDOC != xno; then BUILDPSDOC=yes fi AM_CONDITIONAL(BUILD_PSDOC, [test x$BUILDPSDOC = xyes]) AC_MSG_RESULT([$BUILDPSDOC]) -AC_MSG_CHECKING([Whether to build HTML documentation]) -if test x$HAVE_DEFS_ENT != x && test x$DOCBOOKHTML != x && +AC_MSG_CHECKING([whether to build HTML documentation]) +if test x$XORG_SGML_PATH != x && test x$DOCBOOKHTML != x && test x$BUILD_HTMLDOC != xno; then BUILDHTMLDOC=yes fi @@ -789,6 +1331,799 @@ AC_SUBST(MAKE_PDF) AC_SUBST(MAKE_HTML) ]) # XORG_CHECK_DOCBOOK +# XORG_WITH_XMLTO([MIN-VERSION], [DEFAULT]) +# ---------------- +# Minimum version: 1.5.0 +# Minimum version for optional DEFAULT argument: 1.11.0 +# +# Documentation tools are not always available on all platforms and sometimes +# not at the appropriate level. This macro enables a module to test for the +# presence of the tool and obtain it's path in separate variables. Coupled with +# the --with-xmlto option, it allows maximum flexibilty in making decisions +# as whether or not to use the xmlto package. When DEFAULT is not specified, +# --with-xmlto assumes 'auto'. +# +# Interface to module: +# HAVE_XMLTO: used in makefiles to conditionally generate documentation +# XMLTO: returns the path of the xmlto program found +# returns the path set by the user in the environment +# --with-xmlto: 'yes' user instructs the module to use xmlto +# 'no' user instructs the module not to use xmlto +# +# Added in version 1.10.0 +# HAVE_XMLTO_TEXT: used in makefiles to conditionally generate text documentation +# xmlto for text output requires either lynx, links, or w3m browsers +# +# If the user sets the value of XMLTO, AC_PATH_PROG skips testing the path. +# +AC_DEFUN([XORG_WITH_XMLTO],[ +AC_ARG_VAR([XMLTO], [Path to xmlto command]) +m4_define([_defopt], m4_default([$2], [auto])) +AC_ARG_WITH(xmlto, + AS_HELP_STRING([--with-xmlto], + [Use xmlto to regenerate documentation (default: ]_defopt[)]), + [use_xmlto=$withval], [use_xmlto=]_defopt) +m4_undefine([_defopt]) + +if test "x$use_xmlto" = x"auto"; then + AC_PATH_PROG([XMLTO], [xmlto]) + if test "x$XMLTO" = "x"; then + AC_MSG_WARN([xmlto not found - documentation targets will be skipped]) + have_xmlto=no + else + have_xmlto=yes + fi +elif test "x$use_xmlto" = x"yes" ; then + AC_PATH_PROG([XMLTO], [xmlto]) + if test "x$XMLTO" = "x"; then + AC_MSG_ERROR([--with-xmlto=yes specified but xmlto not found in PATH]) + fi + have_xmlto=yes +elif test "x$use_xmlto" = x"no" ; then + if test "x$XMLTO" != "x"; then + AC_MSG_WARN([ignoring XMLTO environment variable since --with-xmlto=no was specified]) + fi + have_xmlto=no +else + AC_MSG_ERROR([--with-xmlto expects 'yes' or 'no']) +fi + +# Test for a minimum version of xmlto, if provided. +m4_ifval([$1], +[if test "$have_xmlto" = yes; then + # scrape the xmlto version + AC_MSG_CHECKING([the xmlto version]) + xmlto_version=`$XMLTO --version 2>/dev/null | cut -d' ' -f3` + AC_MSG_RESULT([$xmlto_version]) + AS_VERSION_COMPARE([$xmlto_version], [$1], + [if test "x$use_xmlto" = xauto; then + AC_MSG_WARN([xmlto version $xmlto_version found, but $1 needed]) + have_xmlto=no + else + AC_MSG_ERROR([xmlto version $xmlto_version found, but $1 needed]) + fi]) +fi]) + +# Test for the ability of xmlto to generate a text target +have_xmlto_text=no +cat > conftest.xml << "EOF" +EOF +AS_IF([test "$have_xmlto" = yes], + [AS_IF([$XMLTO --skip-validation txt conftest.xml >/dev/null 2>&1], + [have_xmlto_text=yes], + [AC_MSG_WARN([xmlto cannot generate text format, this format skipped])])]) +rm -f conftest.xml +AM_CONDITIONAL([HAVE_XMLTO_TEXT], [test $have_xmlto_text = yes]) +AM_CONDITIONAL([HAVE_XMLTO], [test "$have_xmlto" = yes]) +]) # XORG_WITH_XMLTO + +# XORG_WITH_XSLTPROC([MIN-VERSION], [DEFAULT]) +# -------------------------------------------- +# Minimum version: 1.12.0 +# Minimum version for optional DEFAULT argument: 1.12.0 +# +# XSLT (Extensible Stylesheet Language Transformations) is a declarative, +# XML-based language used for the transformation of XML documents. +# The xsltproc command line tool is for applying XSLT stylesheets to XML documents. +# It is used under the cover by xmlto to generate html files from DocBook/XML. +# The XSLT processor is often used as a standalone tool for transformations. +# It should not be assumed that this tool is used only to work with documnetation. +# When DEFAULT is not specified, --with-xsltproc assumes 'auto'. +# +# Interface to module: +# HAVE_XSLTPROC: used in makefiles to conditionally generate documentation +# XSLTPROC: returns the path of the xsltproc program found +# returns the path set by the user in the environment +# --with-xsltproc: 'yes' user instructs the module to use xsltproc +# 'no' user instructs the module not to use xsltproc +# have_xsltproc: returns yes if xsltproc found in PATH or no +# +# If the user sets the value of XSLTPROC, AC_PATH_PROG skips testing the path. +# +AC_DEFUN([XORG_WITH_XSLTPROC],[ +AC_ARG_VAR([XSLTPROC], [Path to xsltproc command]) +m4_define([_defopt], m4_default([$2], [auto])) +AC_ARG_WITH(xsltproc, + AS_HELP_STRING([--with-xsltproc], + [Use xsltproc for the transformation of XML documents (default: ]_defopt[)]), + [use_xsltproc=$withval], [use_xsltproc=]_defopt) +m4_undefine([_defopt]) + +if test "x$use_xsltproc" = x"auto"; then + AC_PATH_PROG([XSLTPROC], [xsltproc]) + if test "x$XSLTPROC" = "x"; then + AC_MSG_WARN([xsltproc not found - cannot transform XML documents]) + have_xsltproc=no + else + have_xsltproc=yes + fi +elif test "x$use_xsltproc" = x"yes" ; then + AC_PATH_PROG([XSLTPROC], [xsltproc]) + if test "x$XSLTPROC" = "x"; then + AC_MSG_ERROR([--with-xsltproc=yes specified but xsltproc not found in PATH]) + fi + have_xsltproc=yes +elif test "x$use_xsltproc" = x"no" ; then + if test "x$XSLTPROC" != "x"; then + AC_MSG_WARN([ignoring XSLTPROC environment variable since --with-xsltproc=no was specified]) + fi + have_xsltproc=no +else + AC_MSG_ERROR([--with-xsltproc expects 'yes' or 'no']) +fi + +# Checking for minimum version is not implemented +# but we want to keep the interface consistent with other commands +m4_ifval([$1],[AC_MSG_WARN(Checking for MIN-VERSION is not implemented.)]) + +AM_CONDITIONAL([HAVE_XSLTPROC], [test "$have_xsltproc" = yes]) +]) # XORG_WITH_XSLTPROC + + +# XORG_WITH_ASCIIDOC([MIN-VERSION], [DEFAULT]) +# ---------------- +# Minimum version: 1.5.0 +# Minimum version for optional DEFAULT argument: 1.11.0 +# +# Documentation tools are not always available on all platforms and sometimes +# not at the appropriate level. This macro enables a module to test for the +# presence of the tool and obtain it's path in separate variables. Coupled with +# the --with-asciidoc option, it allows maximum flexibilty in making decisions +# as whether or not to use the asciidoc package. When DEFAULT is not specified, +# --with-asciidoc assumes 'auto'. +# +# Interface to module: +# HAVE_ASCIIDOC: used in makefiles to conditionally generate documentation +# ASCIIDOC: returns the path of the asciidoc program found +# returns the path set by the user in the environment +# --with-asciidoc: 'yes' user instructs the module to use asciidoc +# 'no' user instructs the module not to use asciidoc +# +# If the user sets the value of ASCIIDOC, AC_PATH_PROG skips testing the path. +# +AC_DEFUN([XORG_WITH_ASCIIDOC],[ +AC_ARG_VAR([ASCIIDOC], [Path to asciidoc command]) +m4_define([_defopt], m4_default([$2], [auto])) +AC_ARG_WITH(asciidoc, + AS_HELP_STRING([--with-asciidoc], + [Use asciidoc to regenerate documentation (default: ]_defopt[)]), + [use_asciidoc=$withval], [use_asciidoc=]_defopt) +m4_undefine([_defopt]) + +if test "x$use_asciidoc" = x"auto"; then + AC_PATH_PROG([ASCIIDOC], [asciidoc]) + if test "x$ASCIIDOC" = "x"; then + AC_MSG_WARN([asciidoc not found - documentation targets will be skipped]) + have_asciidoc=no + else + have_asciidoc=yes + fi +elif test "x$use_asciidoc" = x"yes" ; then + AC_PATH_PROG([ASCIIDOC], [asciidoc]) + if test "x$ASCIIDOC" = "x"; then + AC_MSG_ERROR([--with-asciidoc=yes specified but asciidoc not found in PATH]) + fi + have_asciidoc=yes +elif test "x$use_asciidoc" = x"no" ; then + if test "x$ASCIIDOC" != "x"; then + AC_MSG_WARN([ignoring ASCIIDOC environment variable since --with-asciidoc=no was specified]) + fi + have_asciidoc=no +else + AC_MSG_ERROR([--with-asciidoc expects 'yes' or 'no']) +fi +m4_ifval([$1], +[if test "$have_asciidoc" = yes; then + # scrape the asciidoc version + AC_MSG_CHECKING([the asciidoc version]) + asciidoc_version=`$ASCIIDOC --version 2>/dev/null | cut -d' ' -f2` + AC_MSG_RESULT([$asciidoc_version]) + AS_VERSION_COMPARE([$asciidoc_version], [$1], + [if test "x$use_asciidoc" = xauto; then + AC_MSG_WARN([asciidoc version $asciidoc_version found, but $1 needed]) + have_asciidoc=no + else + AC_MSG_ERROR([asciidoc version $asciidoc_version found, but $1 needed]) + fi]) +fi]) +AM_CONDITIONAL([HAVE_ASCIIDOC], [test "$have_asciidoc" = yes]) +]) # XORG_WITH_ASCIIDOC + +# XORG_WITH_DOXYGEN([MIN-VERSION], [DEFAULT]) +# -------------------------------- +# Minimum version: 1.5.0 +# Minimum version for optional DEFAULT argument: 1.11.0 +# +# Documentation tools are not always available on all platforms and sometimes +# not at the appropriate level. This macro enables a module to test for the +# presence of the tool and obtain it's path in separate variables. Coupled with +# the --with-doxygen option, it allows maximum flexibilty in making decisions +# as whether or not to use the doxygen package. When DEFAULT is not specified, +# --with-doxygen assumes 'auto'. +# +# Interface to module: +# HAVE_DOXYGEN: used in makefiles to conditionally generate documentation +# DOXYGEN: returns the path of the doxygen program found +# returns the path set by the user in the environment +# --with-doxygen: 'yes' user instructs the module to use doxygen +# 'no' user instructs the module not to use doxygen +# +# If the user sets the value of DOXYGEN, AC_PATH_PROG skips testing the path. +# +AC_DEFUN([XORG_WITH_DOXYGEN],[ +AC_ARG_VAR([DOXYGEN], [Path to doxygen command]) +m4_define([_defopt], m4_default([$2], [auto])) +AC_ARG_WITH(doxygen, + AS_HELP_STRING([--with-doxygen], + [Use doxygen to regenerate documentation (default: ]_defopt[)]), + [use_doxygen=$withval], [use_doxygen=]_defopt) +m4_undefine([_defopt]) + +if test "x$use_doxygen" = x"auto"; then + AC_PATH_PROG([DOXYGEN], [doxygen]) + if test "x$DOXYGEN" = "x"; then + AC_MSG_WARN([doxygen not found - documentation targets will be skipped]) + have_doxygen=no + else + have_doxygen=yes + fi +elif test "x$use_doxygen" = x"yes" ; then + AC_PATH_PROG([DOXYGEN], [doxygen]) + if test "x$DOXYGEN" = "x"; then + AC_MSG_ERROR([--with-doxygen=yes specified but doxygen not found in PATH]) + fi + have_doxygen=yes +elif test "x$use_doxygen" = x"no" ; then + if test "x$DOXYGEN" != "x"; then + AC_MSG_WARN([ignoring DOXYGEN environment variable since --with-doxygen=no was specified]) + fi + have_doxygen=no +else + AC_MSG_ERROR([--with-doxygen expects 'yes' or 'no']) +fi +m4_ifval([$1], +[if test "$have_doxygen" = yes; then + # scrape the doxygen version + AC_MSG_CHECKING([the doxygen version]) + doxygen_version=`$DOXYGEN --version 2>/dev/null` + AC_MSG_RESULT([$doxygen_version]) + AS_VERSION_COMPARE([$doxygen_version], [$1], + [if test "x$use_doxygen" = xauto; then + AC_MSG_WARN([doxygen version $doxygen_version found, but $1 needed]) + have_doxygen=no + else + AC_MSG_ERROR([doxygen version $doxygen_version found, but $1 needed]) + fi]) +fi]) +AM_CONDITIONAL([HAVE_DOXYGEN], [test "$have_doxygen" = yes]) +]) # XORG_WITH_DOXYGEN + +# XORG_WITH_GROFF([DEFAULT]) +# ---------------- +# Minimum version: 1.6.0 +# Minimum version for optional DEFAULT argument: 1.11.0 +# +# Documentation tools are not always available on all platforms and sometimes +# not at the appropriate level. This macro enables a module to test for the +# presence of the tool and obtain it's path in separate variables. Coupled with +# the --with-groff option, it allows maximum flexibilty in making decisions +# as whether or not to use the groff package. When DEFAULT is not specified, +# --with-groff assumes 'auto'. +# +# Interface to module: +# HAVE_GROFF: used in makefiles to conditionally generate documentation +# HAVE_GROFF_MM: the memorandum macros (-mm) package +# HAVE_GROFF_MS: the -ms macros package +# GROFF: returns the path of the groff program found +# returns the path set by the user in the environment +# --with-groff: 'yes' user instructs the module to use groff +# 'no' user instructs the module not to use groff +# +# Added in version 1.9.0: +# HAVE_GROFF_HTML: groff has dependencies to output HTML format: +# pnmcut pnmcrop pnmtopng pnmtops from the netpbm package. +# psselect from the psutils package. +# the ghostcript package. Refer to the grohtml man pages +# +# If the user sets the value of GROFF, AC_PATH_PROG skips testing the path. +# +# OS and distros often splits groff in a basic and full package, the former +# having the groff program and the later having devices, fonts and macros +# Checking for the groff executable is not enough. +# +# If macros are missing, we cannot assume that groff is useless, so we don't +# unset HAVE_GROFF or GROFF env variables. +# HAVE_GROFF_?? can never be true while HAVE_GROFF is false. +# +AC_DEFUN([XORG_WITH_GROFF],[ +AC_ARG_VAR([GROFF], [Path to groff command]) +m4_define([_defopt], m4_default([$1], [auto])) +AC_ARG_WITH(groff, + AS_HELP_STRING([--with-groff], + [Use groff to regenerate documentation (default: ]_defopt[)]), + [use_groff=$withval], [use_groff=]_defopt) +m4_undefine([_defopt]) + +if test "x$use_groff" = x"auto"; then + AC_PATH_PROG([GROFF], [groff]) + if test "x$GROFF" = "x"; then + AC_MSG_WARN([groff not found - documentation targets will be skipped]) + have_groff=no + else + have_groff=yes + fi +elif test "x$use_groff" = x"yes" ; then + AC_PATH_PROG([GROFF], [groff]) + if test "x$GROFF" = "x"; then + AC_MSG_ERROR([--with-groff=yes specified but groff not found in PATH]) + fi + have_groff=yes +elif test "x$use_groff" = x"no" ; then + if test "x$GROFF" != "x"; then + AC_MSG_WARN([ignoring GROFF environment variable since --with-groff=no was specified]) + fi + have_groff=no +else + AC_MSG_ERROR([--with-groff expects 'yes' or 'no']) +fi + +# We have groff, test for the presence of the macro packages +if test "x$have_groff" = x"yes"; then + AC_MSG_CHECKING([for ${GROFF} -ms macros]) + if ${GROFF} -ms -I. /dev/null >/dev/null 2>&1 ; then + groff_ms_works=yes + else + groff_ms_works=no + fi + AC_MSG_RESULT([$groff_ms_works]) + AC_MSG_CHECKING([for ${GROFF} -mm macros]) + if ${GROFF} -mm -I. /dev/null >/dev/null 2>&1 ; then + groff_mm_works=yes + else + groff_mm_works=no + fi + AC_MSG_RESULT([$groff_mm_works]) +fi + +# We have groff, test for HTML dependencies, one command per package +if test "x$have_groff" = x"yes"; then + AC_PATH_PROGS(GS_PATH, [gs gswin32c]) + AC_PATH_PROG(PNMTOPNG_PATH, [pnmtopng]) + AC_PATH_PROG(PSSELECT_PATH, [psselect]) + if test "x$GS_PATH" != "x" -a "x$PNMTOPNG_PATH" != "x" -a "x$PSSELECT_PATH" != "x"; then + have_groff_html=yes + else + have_groff_html=no + AC_MSG_WARN([grohtml dependencies not found - HTML Documentation skipped. Refer to grohtml man pages]) + fi +fi + +# Set Automake conditionals for Makefiles +AM_CONDITIONAL([HAVE_GROFF], [test "$have_groff" = yes]) +AM_CONDITIONAL([HAVE_GROFF_MS], [test "$groff_ms_works" = yes]) +AM_CONDITIONAL([HAVE_GROFF_MM], [test "$groff_mm_works" = yes]) +AM_CONDITIONAL([HAVE_GROFF_HTML], [test "$have_groff_html" = yes]) +]) # XORG_WITH_GROFF + +# XORG_WITH_FOP([DEFAULT]) +# ---------------- +# Minimum version: 1.6.0 +# Minimum version for optional DEFAULT argument: 1.11.0 +# +# Documentation tools are not always available on all platforms and sometimes +# not at the appropriate level. This macro enables a module to test for the +# presence of the tool and obtain it's path in separate variables. Coupled with +# the --with-fop option, it allows maximum flexibilty in making decisions +# as whether or not to use the fop package. When DEFAULT is not specified, +# --with-fop assumes 'auto'. +# +# Interface to module: +# HAVE_FOP: used in makefiles to conditionally generate documentation +# FOP: returns the path of the fop program found +# returns the path set by the user in the environment +# --with-fop: 'yes' user instructs the module to use fop +# 'no' user instructs the module not to use fop +# +# If the user sets the value of FOP, AC_PATH_PROG skips testing the path. +# +AC_DEFUN([XORG_WITH_FOP],[ +AC_ARG_VAR([FOP], [Path to fop command]) +m4_define([_defopt], m4_default([$1], [auto])) +AC_ARG_WITH(fop, + AS_HELP_STRING([--with-fop], + [Use fop to regenerate documentation (default: ]_defopt[)]), + [use_fop=$withval], [use_fop=]_defopt) +m4_undefine([_defopt]) + +if test "x$use_fop" = x"auto"; then + AC_PATH_PROG([FOP], [fop]) + if test "x$FOP" = "x"; then + AC_MSG_WARN([fop not found - documentation targets will be skipped]) + have_fop=no + else + have_fop=yes + fi +elif test "x$use_fop" = x"yes" ; then + AC_PATH_PROG([FOP], [fop]) + if test "x$FOP" = "x"; then + AC_MSG_ERROR([--with-fop=yes specified but fop not found in PATH]) + fi + have_fop=yes +elif test "x$use_fop" = x"no" ; then + if test "x$FOP" != "x"; then + AC_MSG_WARN([ignoring FOP environment variable since --with-fop=no was specified]) + fi + have_fop=no +else + AC_MSG_ERROR([--with-fop expects 'yes' or 'no']) +fi +AM_CONDITIONAL([HAVE_FOP], [test "$have_fop" = yes]) +]) # XORG_WITH_FOP + +# XORG_WITH_PS2PDF([DEFAULT]) +# ---------------- +# Minimum version: 1.6.0 +# Minimum version for optional DEFAULT argument: 1.11.0 +# +# Documentation tools are not always available on all platforms and sometimes +# not at the appropriate level. This macro enables a module to test for the +# presence of the tool and obtain it's path in separate variables. Coupled with +# the --with-ps2pdf option, it allows maximum flexibilty in making decisions +# as whether or not to use the ps2pdf package. When DEFAULT is not specified, +# --with-ps2pdf assumes 'auto'. +# +# Interface to module: +# HAVE_PS2PDF: used in makefiles to conditionally generate documentation +# PS2PDF: returns the path of the ps2pdf program found +# returns the path set by the user in the environment +# --with-ps2pdf: 'yes' user instructs the module to use ps2pdf +# 'no' user instructs the module not to use ps2pdf +# +# If the user sets the value of PS2PDF, AC_PATH_PROG skips testing the path. +# +AC_DEFUN([XORG_WITH_PS2PDF],[ +AC_ARG_VAR([PS2PDF], [Path to ps2pdf command]) +m4_define([_defopt], m4_default([$1], [auto])) +AC_ARG_WITH(ps2pdf, + AS_HELP_STRING([--with-ps2pdf], + [Use ps2pdf to regenerate documentation (default: ]_defopt[)]), + [use_ps2pdf=$withval], [use_ps2pdf=]_defopt) +m4_undefine([_defopt]) + +if test "x$use_ps2pdf" = x"auto"; then + AC_PATH_PROG([PS2PDF], [ps2pdf]) + if test "x$PS2PDF" = "x"; then + AC_MSG_WARN([ps2pdf not found - documentation targets will be skipped]) + have_ps2pdf=no + else + have_ps2pdf=yes + fi +elif test "x$use_ps2pdf" = x"yes" ; then + AC_PATH_PROG([PS2PDF], [ps2pdf]) + if test "x$PS2PDF" = "x"; then + AC_MSG_ERROR([--with-ps2pdf=yes specified but ps2pdf not found in PATH]) + fi + have_ps2pdf=yes +elif test "x$use_ps2pdf" = x"no" ; then + if test "x$PS2PDF" != "x"; then + AC_MSG_WARN([ignoring PS2PDF environment variable since --with-ps2pdf=no was specified]) + fi + have_ps2pdf=no +else + AC_MSG_ERROR([--with-ps2pdf expects 'yes' or 'no']) +fi +AM_CONDITIONAL([HAVE_PS2PDF], [test "$have_ps2pdf" = yes]) +]) # XORG_WITH_PS2PDF + +# XORG_ENABLE_DOCS (enable_docs=yes) +# ---------------- +# Minimum version: 1.6.0 +# +# Documentation tools are not always available on all platforms and sometimes +# not at the appropriate level. This macro enables a builder to skip all +# documentation targets except traditional man pages. +# Combined with the specific tool checking macros XORG_WITH_*, it provides +# maximum flexibilty in controlling documentation building. +# Refer to: +# XORG_WITH_XMLTO --with-xmlto +# XORG_WITH_ASCIIDOC --with-asciidoc +# XORG_WITH_DOXYGEN --with-doxygen +# XORG_WITH_FOP --with-fop +# XORG_WITH_GROFF --with-groff +# XORG_WITH_PS2PDF --with-ps2pdf +# +# Interface to module: +# ENABLE_DOCS: used in makefiles to conditionally generate documentation +# --enable-docs: 'yes' user instructs the module to generate docs +# 'no' user instructs the module not to generate docs +# parm1: specify the default value, yes or no. +# +AC_DEFUN([XORG_ENABLE_DOCS],[ +m4_define([docs_default], m4_default([$1], [yes])) +AC_ARG_ENABLE(docs, + AS_HELP_STRING([--enable-docs], + [Enable building the documentation (default: ]docs_default[)]), + [build_docs=$enableval], [build_docs=]docs_default) +m4_undefine([docs_default]) +AM_CONDITIONAL(ENABLE_DOCS, [test x$build_docs = xyes]) +AC_MSG_CHECKING([whether to build documentation]) +AC_MSG_RESULT([$build_docs]) +]) # XORG_ENABLE_DOCS + +# XORG_ENABLE_DEVEL_DOCS (enable_devel_docs=yes) +# ---------------- +# Minimum version: 1.6.0 +# +# This macro enables a builder to skip all developer documentation. +# Combined with the specific tool checking macros XORG_WITH_*, it provides +# maximum flexibilty in controlling documentation building. +# Refer to: +# XORG_WITH_XMLTO --with-xmlto +# XORG_WITH_ASCIIDOC --with-asciidoc +# XORG_WITH_DOXYGEN --with-doxygen +# XORG_WITH_FOP --with-fop +# XORG_WITH_GROFF --with-groff +# XORG_WITH_PS2PDF --with-ps2pdf +# +# Interface to module: +# ENABLE_DEVEL_DOCS: used in makefiles to conditionally generate developer docs +# --enable-devel-docs: 'yes' user instructs the module to generate developer docs +# 'no' user instructs the module not to generate developer docs +# parm1: specify the default value, yes or no. +# +AC_DEFUN([XORG_ENABLE_DEVEL_DOCS],[ +m4_define([devel_default], m4_default([$1], [yes])) +AC_ARG_ENABLE(devel-docs, + AS_HELP_STRING([--enable-devel-docs], + [Enable building the developer documentation (default: ]devel_default[)]), + [build_devel_docs=$enableval], [build_devel_docs=]devel_default) +m4_undefine([devel_default]) +AM_CONDITIONAL(ENABLE_DEVEL_DOCS, [test x$build_devel_docs = xyes]) +AC_MSG_CHECKING([whether to build developer documentation]) +AC_MSG_RESULT([$build_devel_docs]) +]) # XORG_ENABLE_DEVEL_DOCS + +# XORG_ENABLE_SPECS (enable_specs=yes) +# ---------------- +# Minimum version: 1.6.0 +# +# This macro enables a builder to skip all functional specification targets. +# Combined with the specific tool checking macros XORG_WITH_*, it provides +# maximum flexibilty in controlling documentation building. +# Refer to: +# XORG_WITH_XMLTO --with-xmlto +# XORG_WITH_ASCIIDOC --with-asciidoc +# XORG_WITH_DOXYGEN --with-doxygen +# XORG_WITH_FOP --with-fop +# XORG_WITH_GROFF --with-groff +# XORG_WITH_PS2PDF --with-ps2pdf +# +# Interface to module: +# ENABLE_SPECS: used in makefiles to conditionally generate specs +# --enable-specs: 'yes' user instructs the module to generate specs +# 'no' user instructs the module not to generate specs +# parm1: specify the default value, yes or no. +# +AC_DEFUN([XORG_ENABLE_SPECS],[ +m4_define([spec_default], m4_default([$1], [yes])) +AC_ARG_ENABLE(specs, + AS_HELP_STRING([--enable-specs], + [Enable building the specs (default: ]spec_default[)]), + [build_specs=$enableval], [build_specs=]spec_default) +m4_undefine([spec_default]) +AM_CONDITIONAL(ENABLE_SPECS, [test x$build_specs = xyes]) +AC_MSG_CHECKING([whether to build functional specifications]) +AC_MSG_RESULT([$build_specs]) +]) # XORG_ENABLE_SPECS + +# XORG_ENABLE_UNIT_TESTS (enable_unit_tests=auto) +# ---------------------------------------------- +# Minimum version: 1.13.0 +# +# This macro enables a builder to enable/disable unit testing +# It makes no assumption about the test cases implementation +# Test cases may or may not use Automake "Support for test suites" +# They may or may not use the software utility library GLib +# +# When used in conjunction with XORG_WITH_GLIB, use both AM_CONDITIONAL +# ENABLE_UNIT_TESTS and HAVE_GLIB. Not all unit tests may use glib. +# The variable enable_unit_tests is used by other macros in this file. +# +# Interface to module: +# ENABLE_UNIT_TESTS: used in makefiles to conditionally build tests +# enable_unit_tests: used in configure.ac for additional configuration +# --enable-unit-tests: 'yes' user instructs the module to build tests +# 'no' user instructs the module not to build tests +# parm1: specify the default value, yes or no. +# +AC_DEFUN([XORG_ENABLE_UNIT_TESTS],[ +AC_BEFORE([$0], [XORG_WITH_GLIB]) +AC_BEFORE([$0], [XORG_LD_WRAP]) +m4_define([_defopt], m4_default([$1], [auto])) +AC_ARG_ENABLE(unit-tests, AS_HELP_STRING([--enable-unit-tests], + [Enable building unit test cases (default: ]_defopt[)]), + [enable_unit_tests=$enableval], [enable_unit_tests=]_defopt) +m4_undefine([_defopt]) +AM_CONDITIONAL(ENABLE_UNIT_TESTS, [test "x$enable_unit_tests" != xno]) +AC_MSG_CHECKING([whether to build unit test cases]) +AC_MSG_RESULT([$enable_unit_tests]) +]) # XORG_ENABLE_UNIT_TESTS + +# XORG_WITH_GLIB([MIN-VERSION], [DEFAULT]) +# ---------------------------------------- +# Minimum version: 1.13.0 +# +# GLib is a library which provides advanced data structures and functions. +# This macro enables a module to test for the presence of Glib. +# +# When used with ENABLE_UNIT_TESTS, it is assumed GLib is used for unit testing. +# Otherwise the value of $enable_unit_tests is blank. +# +# Interface to module: +# HAVE_GLIB: used in makefiles to conditionally build targets +# with_glib: used in configure.ac to know if GLib has been found +# --with-glib: 'yes' user instructs the module to use glib +# 'no' user instructs the module not to use glib +# +AC_DEFUN([XORG_WITH_GLIB],[ +AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +m4_define([_defopt], m4_default([$2], [auto])) +AC_ARG_WITH(glib, AS_HELP_STRING([--with-glib], + [Use GLib library for unit testing (default: ]_defopt[)]), + [with_glib=$withval], [with_glib=]_defopt) +m4_undefine([_defopt]) + +have_glib=no +# Do not probe GLib if user explicitly disabled unit testing +if test "x$enable_unit_tests" != x"no"; then + # Do not probe GLib if user explicitly disabled it + if test "x$with_glib" != x"no"; then + m4_ifval( + [$1], + [PKG_CHECK_MODULES([GLIB], [glib-2.0 >= $1], [have_glib=yes], [have_glib=no])], + [PKG_CHECK_MODULES([GLIB], [glib-2.0], [have_glib=yes], [have_glib=no])] + ) + fi +fi + +# Not having GLib when unit testing has been explicitly requested is an error +if test "x$enable_unit_tests" = x"yes"; then + if test "x$have_glib" = x"no"; then + AC_MSG_ERROR([--enable-unit-tests=yes specified but glib-2.0 not found]) + fi +fi + +# Having unit testing disabled when GLib has been explicitly requested is an error +if test "x$enable_unit_tests" = x"no"; then + if test "x$with_glib" = x"yes"; then + AC_MSG_ERROR([--enable-unit-tests=yes specified but glib-2.0 not found]) + fi +fi + +# Not having GLib when it has been explicitly requested is an error +if test "x$with_glib" = x"yes"; then + if test "x$have_glib" = x"no"; then + AC_MSG_ERROR([--with-glib=yes specified but glib-2.0 not found]) + fi +fi + +AM_CONDITIONAL([HAVE_GLIB], [test "$have_glib" = yes]) +]) # XORG_WITH_GLIB + +# XORG_LD_WRAP +# ------------ +# Minimum version: 1.13.0 +# +# Check if linker supports -wrap, passed via compiler flags +# +# When used with ENABLE_UNIT_TESTS, it is assumed -wrap is used for unit testing. +# Otherwise the value of $enable_unit_tests is blank. +# +AC_DEFUN([XORG_LD_WRAP],[ +XORG_CHECK_LINKER_FLAGS([-Wl,-wrap,exit],[have_ld_wrap=yes],[have_ld_wrap=no]) +# Not having ld wrap when unit testing has been explicitly requested is an error +if test "x$enable_unit_tests" = x"yes"; then + if test "x$have_ld_wrap" = x"no"; then + AC_MSG_ERROR([--enable-unit-tests=yes specified but ld -wrap support is not available]) + fi +fi +AM_CONDITIONAL([HAVE_LD_WRAP], [test "$have_ld_wrap" = yes]) +# +]) # XORG_LD_WRAP + +# XORG_CHECK_LINKER_FLAGS +# ----------------------- +# SYNOPSIS +# +# XORG_CHECK_LINKER_FLAGS(FLAGS, [ACTION-SUCCESS], [ACTION-FAILURE]) +# +# DESCRIPTION +# +# Check whether the given linker FLAGS work with the current language's +# linker, or whether they give an error. +# +# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on +# success/failure. +# +# NOTE: Based on AX_CHECK_COMPILER_FLAGS. +# +# LICENSE +# +# Copyright (c) 2009 Mike Frysinger +# Copyright (c) 2009 Steven G. Johnson +# Copyright (c) 2009 Matteo Frigo +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well.# +AC_DEFUN([XORG_CHECK_LINKER_FLAGS], +[AC_MSG_CHECKING([whether the linker accepts $1]) +dnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname: +AS_LITERAL_IF([$1], + [AC_CACHE_VAL(AS_TR_SH(xorg_cv_linker_flags_[$1]), [ + ax_save_FLAGS=$LDFLAGS + LDFLAGS="$1" + AC_LINK_IFELSE([AC_LANG_PROGRAM()], + AS_TR_SH(xorg_cv_linker_flags_[$1])=yes, + AS_TR_SH(xorg_cv_linker_flags_[$1])=no) + LDFLAGS=$ax_save_FLAGS])], + [ax_save_FLAGS=$LDFLAGS + LDFLAGS="$1" + AC_LINK_IFELSE([AC_LANG_PROGRAM()], + eval AS_TR_SH(xorg_cv_linker_flags_[$1])=yes, + eval AS_TR_SH(xorg_cv_linker_flags_[$1])=no) + LDFLAGS=$ax_save_FLAGS]) +eval xorg_check_linker_flags=$AS_TR_SH(xorg_cv_linker_flags_[$1]) +AC_MSG_RESULT($xorg_check_linker_flags) +if test "x$xorg_check_linker_flags" = xyes; then + m4_default([$2], :) +else + m4_default([$3], :) +fi +]) # XORG_CHECK_LINKER_FLAGS + # XORG_CHECK_MALLOC_ZERO # ---------------------- # Minimum version: 1.0.0 @@ -798,27 +2133,26 @@ AC_SUBST(MAKE_HTML) # their AM_CFLAGS (or other appropriate *_CFLAGS) to use them. AC_DEFUN([XORG_CHECK_MALLOC_ZERO],[ AC_ARG_ENABLE(malloc0returnsnull, - AC_HELP_STRING([--enable-malloc0returnsnull], + AS_HELP_STRING([--enable-malloc0returnsnull], [malloc(0) returns NULL (default: auto)]), [MALLOC_ZERO_RETURNS_NULL=$enableval], [MALLOC_ZERO_RETURNS_NULL=auto]) AC_MSG_CHECKING([whether malloc(0) returns NULL]) if test "x$MALLOC_ZERO_RETURNS_NULL" = xauto; then - AC_RUN_IFELSE([ -char *malloc(); -char *realloc(); -char *calloc(); -main() { + AC_RUN_IFELSE([AC_LANG_PROGRAM([ +#include +],[ char *m0, *r0, *c0, *p; m0 = malloc(0); p = malloc(10); r0 = realloc(p,0); - c0 = calloc(0); - exit(m0 == 0 || r0 == 0 || c0 == 0 ? 0 : 1); -}], + c0 = calloc(0,10); + exit((m0 == 0 || r0 == 0 || c0 == 0) ? 0 : 1); +])], [MALLOC_ZERO_RETURNS_NULL=yes], - [MALLOC_ZERO_RETURNS_NULL=no]) + [MALLOC_ZERO_RETURNS_NULL=no], + [MALLOC_ZERO_RETURNS_NULL=yes]) fi AC_MSG_RESULT([$MALLOC_ZERO_RETURNS_NULL]) @@ -841,38 +2175,69 @@ AC_SUBST([XTMALLOC_ZERO_CFLAGS]) # ---------------- # Minimum version: 1.1.0 # -# Sets up flags for source checkers such as lint and sparse if --with-lint -# is specified. (Use --with-lint=sparse for sparse.) -# Sets $LINT to name of source checker passed with --with-lint (default: lint) -# Sets $LINT_FLAGS to flags to pass to source checker -# Sets LINT automake conditional if enabled (default: disabled) +# This macro enables the use of a tool that flags some suspicious and +# non-portable constructs (likely to be bugs) in C language source code. +# It will attempt to locate the tool and use appropriate options. +# There are various lint type tools on different platforms. +# +# Interface to module: +# LINT: returns the path to the tool found on the platform +# or the value set to LINT on the configure cmd line +# also an Automake conditional +# LINT_FLAGS: an Automake variable with appropriate flags +# +# --with-lint: 'yes' user instructs the module to use lint +# 'no' user instructs the module not to use lint (default) +# +# If the user sets the value of LINT, AC_PATH_PROG skips testing the path. +# If the user sets the value of LINT_FLAGS, they are used verbatim. # AC_DEFUN([XORG_WITH_LINT],[ -# Allow checking code with lint, sparse, etc. -AC_ARG_WITH(lint, [AC_HELP_STRING([--with-lint], +AC_ARG_VAR([LINT], [Path to a lint-style command]) +AC_ARG_VAR([LINT_FLAGS], [Flags for the lint-style command]) +AC_ARG_WITH(lint, [AS_HELP_STRING([--with-lint], [Use a lint-style source code checker (default: disabled)])], [use_lint=$withval], [use_lint=no]) -if test "x$use_lint" = "xyes" ; then - LINT="lint" + +# Obtain platform specific info like program name and options +# The lint program on FreeBSD and NetBSD is different from the one on Solaris +case $host_os in + *linux* | *openbsd* | kfreebsd*-gnu | darwin* | cygwin*) + lint_name=splint + lint_options="-badflag" + ;; + *freebsd* | *netbsd*) + lint_name=lint + lint_options="-u -b" + ;; + *solaris*) + lint_name=lint + lint_options="-u -b -h -erroff=E_INDISTING_FROM_TRUNC2" + ;; +esac + +# Test for the presence of the program (either guessed by the code or spelled out by the user) +if test "x$use_lint" = x"yes" ; then + AC_PATH_PROG([LINT], [$lint_name]) + if test "x$LINT" = "x"; then + AC_MSG_ERROR([--with-lint=yes specified but lint-style tool not found in PATH]) + fi +elif test "x$use_lint" = x"no" ; then + if test "x$LINT" != "x"; then + AC_MSG_WARN([ignoring LINT environment variable since --with-lint=no was specified]) + fi else - LINT="$use_lint" -fi -if test "x$LINT_FLAGS" = "x" -a "x$LINT" != "xno" ; then - case $LINT in - lint|*/lint) - case $host_os in - solaris*) - LINT_FLAGS="-u -b -h -erroff=E_INDISTING_FROM_TRUNC2" - ;; - esac - ;; - esac + AC_MSG_ERROR([--with-lint expects 'yes' or 'no'. Use LINT variable to specify path.]) fi -AC_SUBST(LINT) -AC_SUBST(LINT_FLAGS) -AM_CONDITIONAL(LINT, [test x$LINT != xno]) +# User supplied flags override default flags +if test "x$LINT_FLAGS" != "x"; then + lint_options=$LINT_FLAGS +fi + +AC_SUBST([LINT_FLAGS],[$lint_options]) +AM_CONDITIONAL(LINT, [test "x$LINT" != x]) ]) # XORG_WITH_LINT @@ -882,33 +2247,123 @@ AM_CONDITIONAL(LINT, [test x$LINT != xno]) # # Sets up flags for building lint libraries for checking programs that call # functions in the library. -# Disabled by default, enable with --enable-lint-library -# Sets: -# @LINTLIB@ - name of lint library file to make -# MAKE_LINT_LIB - automake conditional # +# Interface to module: +# LINTLIB - Automake variable with the name of lint library file to make +# MAKE_LINT_LIB - Automake conditional +# +# --enable-lint-library: - 'yes' user instructs the module to created a lint library +# - 'no' user instructs the module not to create a lint library (default) AC_DEFUN([XORG_LINT_LIBRARY],[ AC_REQUIRE([XORG_WITH_LINT]) -# Build lint "library" for more indepth checks of programs calling this library -AC_ARG_ENABLE(lint-library, [AC_HELP_STRING([--enable-lint-library], +AC_ARG_ENABLE(lint-library, [AS_HELP_STRING([--enable-lint-library], [Create lint library (default: disabled)])], [make_lint_lib=$enableval], [make_lint_lib=no]) -if test "x$make_lint_lib" != "xno" ; then - if test "x$LINT" = "xno" ; then - AC_MSG_ERROR([Cannot make lint library without --with-lint]) - fi - if test "x$make_lint_lib" = "xyes" ; then - LINTLIB=llib-l$1.ln - else - LINTLIB=$make_lint_lib - fi + +if test "x$make_lint_lib" = x"yes" ; then + LINTLIB=llib-l$1.ln + if test "x$LINT" = "x"; then + AC_MSG_ERROR([Cannot make lint library without --with-lint]) + fi +elif test "x$make_lint_lib" != x"no" ; then + AC_MSG_ERROR([--enable-lint-library expects 'yes' or 'no'.]) fi + AC_SUBST(LINTLIB) AM_CONDITIONAL(MAKE_LINT_LIB, [test x$make_lint_lib != xno]) ]) # XORG_LINT_LIBRARY +# XORG_CWARNFLAGS +# --------------- +# Minimum version: 1.2.0 +# +# Defines CWARNFLAGS to enable C compiler warnings. +# +AC_DEFUN([XORG_CWARNFLAGS], [ +AC_REQUIRE([AC_PROG_CC_C99]) +if test "x$GCC" = xyes ; then + CWARNFLAGS="-Wall -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes \ +-Wmissing-declarations -Wnested-externs -fno-strict-aliasing \ +-Wbad-function-cast -Wformat=2" + case `$CC -dumpversion` in + 3.4.* | 4.*) + CWARNFLAGS="$CWARNFLAGS -Wold-style-definition -Wdeclaration-after-statement" + ;; + esac +else + AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"]) + if test "x$SUNCC" = "xyes"; then + CWARNFLAGS="-v" + fi +fi +AC_SUBST(CWARNFLAGS) +]) # XORG_CWARNFLAGS + +# XORG_STRICT_OPTION +# ----------------------- +# Minimum version: 1.3.0 +# +# Add configure option to enable strict compilation +AC_DEFUN([XORG_STRICT_OPTION], [ +# If the module's configure.ac calls AC_PROG_CC later on, CC gets set to C89 +AC_REQUIRE([AC_PROG_CC_C99]) +AC_REQUIRE([XORG_CWARNFLAGS]) + +AC_ARG_ENABLE(strict-compilation, + AS_HELP_STRING([--enable-strict-compilation], + [Enable all warnings from compiler and make them errors (default: disabled)]), + [STRICT_COMPILE=$enableval], [STRICT_COMPILE=no]) +if test "x$STRICT_COMPILE" = "xyes"; then + AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"]) + AC_CHECK_DECL([__INTEL_COMPILER], [INTELCC="yes"], [INTELCC="no"]) + if test "x$GCC" = xyes ; then + STRICT_CFLAGS="-pedantic -Werror" + elif test "x$SUNCC" = "xyes"; then + STRICT_CFLAGS="-errwarn" + elif test "x$INTELCC" = "xyes"; then + STRICT_CFLAGS="-Werror" + fi +fi +CWARNFLAGS="$CWARNFLAGS $STRICT_CFLAGS" +AC_SUBST([CWARNFLAGS]) +]) # XORG_STRICT_OPTION + +# XORG_DEFAULT_OPTIONS +# -------------------- +# Minimum version: 1.3.0 +# +# Defines default options for X.Org modules. +# +AC_DEFUN([XORG_DEFAULT_OPTIONS], [ +AC_REQUIRE([AC_PROG_INSTALL]) +XORG_CWARNFLAGS +XORG_STRICT_OPTION +XORG_RELEASE_VERSION +XORG_CHANGELOG +XORG_INSTALL +XORG_MANPAGE_SECTIONS +m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])], + [AC_SUBST([AM_DEFAULT_VERBOSITY], [1])]) +]) # XORG_DEFAULT_OPTIONS + +# XORG_INSTALL() +# ---------------- +# Minimum version: 1.4.0 +# +# Defines the variable INSTALL_CMD as the command to copy +# INSTALL from $prefix/share/util-macros. +# +AC_DEFUN([XORG_INSTALL], [ +AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +macros_datadir=`$PKG_CONFIG --print-errors --variable=pkgdatadir xorg-macros` +INSTALL_CMD="(cp -f "$macros_datadir/INSTALL" \$(top_srcdir)/.INSTALL.tmp && \ +mv \$(top_srcdir)/.INSTALL.tmp \$(top_srcdir)/INSTALL) \ +|| (rm -f \$(top_srcdir)/.INSTALL.tmp; touch \$(top_srcdir)/INSTALL; \ +echo 'util-macros \"pkgdatadir\" from xorg-macros.pc not found: installing possibly empty INSTALL.' >&2)" +AC_SUBST([INSTALL_CMD]) +]) # XORG_INSTALL dnl Copyright 2005 Red Hat, Inc dnl dnl Permission to use, copy, modify, distribute, and sell this software and its @@ -936,33 +2391,20 @@ dnl # XORG_RELEASE_VERSION # -------------------- -# Adds --with/without-release-string and changes the PACKAGE and -# PACKAGE_TARNAME to use "$PACKAGE{_TARNAME}-$RELEASE_VERSION". If -# no option is given, PACKAGE and PACKAGE_TARNAME are unchanged. Also -# defines PACKAGE_VERSION_{MAJOR,MINOR,PATCHLEVEL} for modules to use. +# Defines PACKAGE_VERSION_{MAJOR,MINOR,PATCHLEVEL} for modules to use. AC_DEFUN([XORG_RELEASE_VERSION],[ - AC_ARG_WITH(release-version, - AC_HELP_STRING([--with-release-version=STRING], - [Use release version string in package name]), - [RELEASE_VERSION="$withval"], - [RELEASE_VERSION=""]) - if test "x$RELEASE_VERSION" != "x"; then - PACKAGE="$PACKAGE-$RELEASE_VERSION" - PACKAGE_TARNAME="$PACKAGE_TARNAME-$RELEASE_VERSION" - AC_MSG_NOTICE([Building with package name set to $PACKAGE]) - fi AC_DEFINE_UNQUOTED([PACKAGE_VERSION_MAJOR], [`echo $PACKAGE_VERSION | cut -d . -f 1`], [Major version of this package]) - PVM=`echo $PACKAGE_VERSION | cut -d . -f 2` + PVM=`echo $PACKAGE_VERSION | cut -d . -f 2 | cut -d - -f 1` if test "x$PVM" = "x"; then PVM="0" fi AC_DEFINE_UNQUOTED([PACKAGE_VERSION_MINOR], [$PVM], [Minor version of this package]) - PVP=`echo $PACKAGE_VERSION | cut -d . -f 3` + PVP=`echo $PACKAGE_VERSION | cut -d . -f 3 | cut -d - -f 1` if test "x$PVP" = "x"; then PVP="0" fi @@ -971,3 +2413,19 @@ AC_DEFUN([XORG_RELEASE_VERSION],[ [Patch version of this package]) ]) +# XORG_CHANGELOG() +# ---------------- +# Minimum version: 1.2.0 +# +# Defines the variable CHANGELOG_CMD as the command to generate +# ChangeLog from git. +# +# +AC_DEFUN([XORG_CHANGELOG], [ +CHANGELOG_CMD="(GIT_DIR=\$(top_srcdir)/.git git log > \$(top_srcdir)/.changelog.tmp && \ +mv \$(top_srcdir)/.changelog.tmp \$(top_srcdir)/ChangeLog) \ +|| (rm -f \$(top_srcdir)/.changelog.tmp; touch \$(top_srcdir)/ChangeLog; \ +echo 'git directory not found: installing possibly empty changelog.' >&2)" +AC_SUBST([CHANGELOG_CMD]) +]) # XORG_CHANGELOG + diff --git a/doc/xorg-docs/configure b/doc/xorg-docs/configure index 3943f2623..82d13ac66 100644 --- a/doc/xorg-docs/configure +++ b/doc/xorg-docs/configure @@ -1,27 +1,84 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.59 for xorg-docs 1.3. +# Generated by GNU Autoconf 2.62 for xorg-docs 1.6. # # Report bugs to . # -# Copyright (C) 2003 Free Software Foundation, Inc. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## -# Be Bourne compatible +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' -elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then - set -o posix + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } fi -DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then @@ -31,33 +88,60 @@ else fi +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + # Work around bugs in pre-3.0 UWIN ksh. -$as_unset ENV MAIL MAILPATH +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - $as_unset $as_var - fi -done +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE # Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1; then +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi -if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false @@ -65,157 +149,391 @@ fi # Name of the executable. -as_me=`$as_basename "$0" || +as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)$' \| \ - . : '\(.\)' 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } - /^X\/\(\/\/\)$/{ s//\1/; q; } - /^X\/\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH -# PATH needs CR, and LINENO needs CR and PATH. -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh +if test "x$CONFIG_SHELL" = x; then + if (eval ":") 2>/dev/null; then + as_have_required=yes +else + as_have_required=no fi + if test $as_have_required = yes && (eval ": +(as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" || { - # Find who we are. Look in the path if we contain no path at all - # relative or not. - case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi - ;; - esac - # We did not find ourselves, most probably we were run as `sh COMMAND' - # in which case we are not to be found in the path. - if test "x$as_myself" = x; then - as_myself=$0 - fi - if test ! -f "$as_myself"; then - { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 - { (exit 1); exit 1; }; } - fi - case $CONFIG_SHELL in - '') +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=\$LINENO + as_lineno_2=\$LINENO + test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && + test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } +") 2> /dev/null; then + : +else + as_candidate_shells= as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for as_base in sh bash ksh sh5; do - case $as_dir in + case $as_dir in /*) - if ("$as_dir/$as_base" -c ' + for as_base in sh bash ksh sh5; do + as_candidate_shells="$as_candidate_shells $as_dir/$as_base" + done;; + esac +done +IFS=$as_save_IFS + + + for as_shell in $as_candidate_shells $SHELL; do + # Try only shells that exist, to save several forks. + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { ("$as_shell") 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +_ASEOF +}; then + CONFIG_SHELL=$as_shell + as_have_required=yes + if { "$as_shell" 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +(as_func_return () { + (exit $1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = "$1" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test $exitcode = 0) || { (exit 1); exit 1; } + +( as_lineno_1=$LINENO as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then - $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } - $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } - CONFIG_SHELL=$as_dir/$as_base - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$0" ${1+"$@"} - fi;; - esac - done -done -;; - esac + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } + +_ASEOF +}; then + break +fi + +fi + + done + + if test "x$CONFIG_SHELL" != x; then + for as_var in BASH_ENV ENV + do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + done + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + + if test $as_have_required = no; then + echo This script requires a shell more modern than all the + echo shells that I found on your system. Please install a + echo modern shell, or manually run the script under such a + echo shell if you do have one. + { (exit 1); exit 1; } +fi + + +fi + +fi + + + +(eval "as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0") || { + echo No shell found that supports shell functions. + echo Please tell bug-autoconf@gnu.org about your system, + echo including any error possibly output before this message. + echo This can help us improve future autoconf versions. + echo Configuration will now proceed without shell functions. +} + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line before each line; the second 'sed' does the real - # work. The second script uses 'N' to pair each line-number line - # with the numbered line, and appends trailing '-' during - # substitution so that $LINENO is not a special case at line end. + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) - sed '=' <$as_myself | + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno N - s,$,-, - : loop - s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop - s,-$,, - s,^['$as_cr_digits']*\n,, + s/-\n.*// ' >$as_me.lineno && - chmod +x $as_me.lineno || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensible to this). - . ./$as_me.lineno + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" # Exit status is that of the last command. exit } -case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in - *c*,-n*) ECHO_N= ECHO_C=' -' ECHO_T=' ' ;; - *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; - *) ECHO_N= ECHO_C='\c' ECHO_T= ;; -esac +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi -if expr a : '\(a\)' >/dev/null 2>&1; then +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - # We could just check for DJGPP; but this test a) works b) is more generic - # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). - if test -f conf$$.exe; then - # Don't use ln at all; we don't have any links - as_ln_s='cp -p' - else +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' fi -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln else as_ln_s='cp -p' fi -rm -f conf$$ conf$$.exe conf$$.file +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: @@ -224,7 +542,28 @@ else as_mkdir_p=false fi -as_executable_p="test -f" +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -233,52 +572,288 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" -# IFS -# We need space, tab and new line, in precisely that order. -as_nl=' +as_awk_strverscmp=' + # Use only awk features that work with 7th edition Unix awk (1978). + # My, what an old awk you have, Mr. Solaris! + END { + while (length(v1) && length(v2)) { + # Set d1 to be the next thing to compare from v1, and likewise for d2. + # Normally this is a single character, but if v1 and v2 contain digits, + # compare them as integers and fractions as strverscmp does. + if (v1 ~ /^[0-9]/ && v2 ~ /^[0-9]/) { + # Split v1 and v2 into their leading digit string components d1 and d2, + # and advance v1 and v2 past the leading digit strings. + for (len1 = 1; substr(v1, len1 + 1) ~ /^[0-9]/; len1++) continue + for (len2 = 1; substr(v2, len2 + 1) ~ /^[0-9]/; len2++) continue + d1 = substr(v1, 1, len1); v1 = substr(v1, len1 + 1) + d2 = substr(v2, 1, len2); v2 = substr(v2, len2 + 1) + if (d1 ~ /^0/) { + if (d2 ~ /^0/) { + # Compare two fractions. + while (d1 ~ /^0/ && d2 ~ /^0/) { + d1 = substr(d1, 2); len1-- + d2 = substr(d2, 2); len2-- + } + if (len1 != len2 && ! (len1 && len2 && substr(d1, 1, 1) == substr(d2, 1, 1))) { + # The two components differ in length, and the common prefix + # contains only leading zeros. Consider the longer to be less. + d1 = -len1 + d2 = -len2 + } else { + # Otherwise, compare as strings. + d1 = "x" d1 + d2 = "x" d2 + } + } else { + # A fraction is less than an integer. + exit 1 + } + } else { + if (d2 ~ /^0/) { + # An integer is greater than a fraction. + exit 2 + } else { + # Compare two integers. + d1 += 0 + d2 += 0 + } + } + } else { + # The normal case, without worrying about digits. + d1 = substr(v1, 1, 1); v1 = substr(v1, 2) + d2 = substr(v2, 1, 1); v2 = substr(v2, 2) + } + if (d1 < d2) exit 1 + if (d1 > d2) exit 2 + } + # Beware Solaris /usr/xgp4/bin/awk (at least through Solaris 10), + # which mishandles some comparisons of empty strings to integers. + if (length(v2)) exit 1 + if (length(v1)) exit 2 + } ' -IFS=" $as_nl" - -# CDPATH. -$as_unset CDPATH +exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` -exec 6>&1 - # # Initializations. # ac_default_prefix=/usr/local +ac_clean_files= ac_config_libobj_dir=. +LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} -# Maximum number of lines to put in a shell here document. -# This variable seems obsolete. It should probably be removed, and -# only ac_max_sed_lines should be used. -: ${ac_max_here_lines=38} - # Identity of this package. PACKAGE_NAME='xorg-docs' PACKAGE_TARNAME='xorg-docs' -PACKAGE_VERSION='1.3' -PACKAGE_STRING='xorg-docs 1.3' +PACKAGE_VERSION='1.6' +PACKAGE_STRING='xorg-docs 1.6' PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg' -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar X11DOCDIR HARDCOPYDIR build build_cpu build_vendor build_os host host_cpu host_vendor host_os APP_MAN_SUFFIX LIB_MAN_SUFFIX FILE_MAN_SUFFIX MISC_MAN_SUFFIX DRIVER_MAN_SUFFIX ADMIN_MAN_SUFFIX APP_MAN_DIR LIB_MAN_DIR FILE_MAN_DIR MISC_MAN_DIR DRIVER_MAN_DIR ADMIN_MAN_DIR LIBOBJS LTLIBOBJS' +ac_unique_file="Makefile.am" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='SHELL +PATH_SEPARATOR +PACKAGE_NAME +PACKAGE_TARNAME +PACKAGE_VERSION +PACKAGE_STRING +PACKAGE_BUGREPORT +exec_prefix +prefix +program_transform_name +bindir +sbindir +libexecdir +datarootdir +datadir +sysconfdir +sharedstatedir +localstatedir +includedir +oldincludedir +docdir +infodir +htmldir +dvidir +pdfdir +psdir +libdir +localedir +mandir +DEFS +ECHO_C +ECHO_N +ECHO_T +LIBS +build_alias +host_alias +target_alias +INSTALL_PROGRAM +INSTALL_SCRIPT +INSTALL_DATA +CYGPATH_W +PACKAGE +VERSION +ACLOCAL +AUTOCONF +AUTOMAKE +AUTOHEADER +MAKEINFO +install_sh +STRIP +INSTALL_STRIP_PROGRAM +mkdir_p +AWK +SET_MAKE +am__leading_dot +AMTAR +am__tar +am__untar +MAINTAINER_MODE_TRUE +MAINTAINER_MODE_FALSE +MAINT +CC +CFLAGS +LDFLAGS +CPPFLAGS +ac_ct_CC +EXEEXT +OBJEXT +DEPDIR +am__include +am__quote +AMDEP_TRUE +AMDEP_FALSE +AMDEPBACKSLASH +CCDEPMODE +am__fastdepCC_TRUE +am__fastdepCC_FALSE +CPP +GREP +EGREP +CWARNFLAGS +CHANGELOG_CMD +PKG_CONFIG +INSTALL_CMD +build +build_cpu +build_vendor +build_os +host +host_cpu +host_vendor +host_os +SED +APP_MAN_SUFFIX +LIB_MAN_SUFFIX +FILE_MAN_SUFFIX +MISC_MAN_SUFFIX +DRIVER_MAN_SUFFIX +ADMIN_MAN_SUFFIX +APP_MAN_DIR +LIB_MAN_DIR +FILE_MAN_DIR +MISC_MAN_DIR +DRIVER_MAN_DIR +ADMIN_MAN_DIR +XORG_MAN_PAGE +MAN_SUBSTS +AM_DEFAULT_VERBOSITY +ENABLE_DOCS_TRUE +ENABLE_DOCS_FALSE +ENABLE_SPECS_TRUE +ENABLE_SPECS_FALSE +XMLTO +HAVE_XMLTO_TEXT_TRUE +HAVE_XMLTO_TEXT_FALSE +HAVE_XMLTO_TRUE +HAVE_XMLTO_FALSE +FOP +HAVE_FOP_TRUE +HAVE_FOP_FALSE +XORG_SGML_PATH +STYLESHEET_SRCDIR +XSL_STYLESHEET +HAVE_STYLESHEETS_TRUE +HAVE_STYLESHEETS_FALSE +LIBOBJS +LTLIBOBJS' ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_maintainer_mode +enable_dependency_tracking +enable_strict_compilation +enable_docs +enable_specs +with_xmlto +with_fop +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP +PKG_CONFIG +XMLTO +FOP' + # Initialize some variables set by options. ac_init_help= ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null @@ -301,34 +876,48 @@ x_libraries=NONE # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' -datadir='${prefix}/share' +datarootdir='${prefix}/share' +datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' -libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' -infodir='${prefix}/info' -mandir='${prefix}/man' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' ac_prev= +ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then - eval "$ac_prev=\$ac_option" + eval $ac_prev=\$ac_option ac_prev= continue fi - ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` + case $ac_option in + *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *) ac_optarg=yes ;; + esac # Accept the important Cygnus configure options, so we can diagnose typos. - case $ac_option in + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; @@ -350,33 +939,61 @@ do --config-cache | -C) cache_file=config.cache ;; - -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) + -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + -disable-* | --disable-*) - ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/-/_/g'` - eval "enable_$ac_feature=no" ;; + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; -enable-* | --enable-*) - ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/-/_/g'` - case $ac_option in - *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; - *) ac_optarg=yes ;; + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; esac - eval "enable_$ac_feature='$ac_optarg'" ;; + eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ @@ -403,6 +1020,12 @@ do -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; @@ -427,13 +1050,16 @@ do | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst \ - | --locals | --local | --loca | --loc | --lo) + | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* \ - | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) @@ -498,6 +1124,16 @@ do | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; @@ -548,26 +1184,38 @@ do ac_init_version=: ;; -with-* | --with-*) - ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 { (exit 1); exit 1; }; } - ac_package=`echo $ac_package| sed 's/-/_/g'` - case $ac_option in - *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; - *) ac_optarg=yes ;; + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; esac - eval "with_$ac_package='$ac_optarg'" ;; + eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) - ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/-/_/g'` - eval "with_$ac_package=no" ;; + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. @@ -587,7 +1235,7 @@ do | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; - -*) { echo "$as_me: error: unrecognized option: $ac_option + -*) { $as_echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; @@ -596,17 +1244,16 @@ Try \`$0 --help' for more information." >&2 ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } - ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` - eval "$ac_envvar='$ac_optarg'" + eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. - echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; @@ -615,31 +1262,39 @@ done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` - { echo "$as_me: error: missing argument to $ac_option" >&2 + { $as_echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi -# Be sure to have absolute paths. -for ac_var in exec_prefix prefix -do - eval ac_val=$`echo $ac_var` - case $ac_val in - [\\/$]* | ?:[\\/]* | NONE | '' ) ;; - *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; };; +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) { $as_echo "$as_me: error: Unrecognized options: $ac_unrecognized_opts" >&2 + { (exit 1); exit 1; }; } ;; + *) $as_echo "$as_me: WARNING: Unrecognized options: $ac_unrecognized_opts" >&2 ;; esac -done +fi -# Be sure to have absolute paths. -for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ - localstatedir libdir includedir oldincludedir infodir mandir +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir do - eval ac_val=$`echo $ac_var` + eval ac_val=\$$ac_var + # Remove trailing slashes. case $ac_val in - [\\/$]* | ?:[\\/]* ) ;; - *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; };; + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; } done # There might be people who depend on the old broken behavior: `$host' @@ -653,7 +1308,7 @@ target=$target_alias if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe - echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes @@ -666,54 +1321,76 @@ test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + { $as_echo "$as_me: error: Working directory cannot be determined" >&2 + { (exit 1); exit 1; }; } +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + { $as_echo "$as_me: error: pwd does not report name of working directory" >&2 + { (exit 1); exit 1; }; } + + # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes - # Try the directory containing this script, then its parent. - ac_confdir=`(dirname "$0") 2>/dev/null || -$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$0" : 'X\(//\)[^/]' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$0" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` srcdir=$ac_confdir - if test ! -r $srcdir/$ac_unique_file; then + if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi -if test ! -r $srcdir/$ac_unique_file; then - if test "$ac_srcdir_defaulted" = yes; then - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } - else - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 - { (exit 1); exit 1; }; } - fi fi -(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || - { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2 { (exit 1); exit 1; }; } -srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` -ac_env_build_alias_set=${build_alias+set} -ac_env_build_alias_value=$build_alias -ac_cv_env_build_alias_set=${build_alias+set} -ac_cv_env_build_alias_value=$build_alias -ac_env_host_alias_set=${host_alias+set} -ac_env_host_alias_value=$host_alias -ac_cv_env_host_alias_set=${host_alias+set} -ac_cv_env_host_alias_value=$host_alias -ac_env_target_alias_set=${target_alias+set} -ac_env_target_alias_value=$target_alias -ac_cv_env_target_alias_set=${target_alias+set} -ac_cv_env_target_alias_value=$target_alias + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done # # Report the --help message. @@ -722,7 +1399,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures xorg-docs 1.3 to adapt to many kinds of systems. +\`configure' configures xorg-docs 1.6 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -742,14 +1419,11 @@ Configuration: -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] -_ACEOF - - cat <<_ACEOF Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] + [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] + [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify @@ -759,18 +1433,25 @@ for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --datadir=DIR read-only architecture-independent data [PREFIX/share] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --infodir=DIR info documentation [PREFIX/info] - --mandir=DIR man documentation [PREFIX/man] + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/xorg-docs] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF @@ -788,134 +1469,131 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of xorg-docs 1.3:";; + short | recursive ) echo "Configuration of xorg-docs 1.6:";; esac cat <<\_ACEOF +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --enable-strict-compilation + Enable all warnings from compiler and make them + errors (default: disabled) + --enable-docs Enable building the documentation (default: yes) + --enable-specs Enable building the specs (default: yes) + Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-x11docdir= Where to install X11 docs (default: - ${datadir}/X11/doc) - --with-release-version=STRING - Use release version string in package name + --with-xmlto Use xmlto to regenerate documentation (default: + auto) + --with-fop Use fop to regenerate documentation (default: auto) + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CPP C preprocessor + PKG_CONFIG path to pkg-config utility + XMLTO Path to xmlto command + FOP Path to fop command + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF +ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. - ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d $ac_dir || continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue ac_builddir=. -if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` -else - ac_dir_suffix= ac_top_builddir= -fi +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix case $srcdir in - .) # No --srcdir option. We are building in place. + .) # We are building in place. ac_srcdir=. - if test -z "$ac_top_builddir"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) # Absolute path. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; - *) # Relative path. - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix -# Do not use `cd foo && pwd` to compute absolute paths, because -# the directories may not exist. -case `pwd` in -.) ac_abs_builddir="$ac_dir";; -*) - case "$ac_dir" in - .) ac_abs_builddir=`pwd`;; - [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; - *) ac_abs_builddir=`pwd`/"$ac_dir";; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_builddir=${ac_top_builddir}.;; -*) - case ${ac_top_builddir}. in - .) ac_abs_top_builddir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; - *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_srcdir=$ac_srcdir;; -*) - case $ac_srcdir in - .) ac_abs_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; - *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_srcdir=$ac_top_srcdir;; -*) - case $ac_top_srcdir in - .) ac_abs_top_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; - *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; - esac;; -esac - - cd $ac_dir - # Check for guested configure; otherwise get Cygnus style configure. - if test -f $ac_srcdir/configure.gnu; then - echo - $SHELL $ac_srcdir/configure.gnu --help=recursive - elif test -f $ac_srcdir/configure; then - echo - $SHELL $ac_srcdir/configure --help=recursive - elif test -f $ac_srcdir/configure.ac || - test -f $ac_srcdir/configure.in; then - echo - $ac_configure --help + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive else - echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi - cd $ac_popdir + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } done fi -test -n "$ac_init_help" && exit 0 +test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -xorg-docs configure 1.3 -generated by GNU Autoconf 2.59 +xorg-docs configure 1.6 +generated by GNU Autoconf 2.62 -Copyright (C) 2003 Free Software Foundation, Inc. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF - exit 0 + exit fi -exec 5>config.log -cat >&5 <<_ACEOF +cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by xorg-docs $as_me 1.3, which was -generated by GNU Autoconf 2.59. Invocation command line was +It was created by xorg-docs $as_me 1.6, which was +generated by GNU Autoconf 2.62. Invocation command line was $ $0 $@ _ACEOF +exec 5>>config.log { cat <<_ASUNAME ## --------- ## @@ -934,7 +1612,7 @@ uname -v = `(uname -v) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -hostinfo = `(hostinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` @@ -946,8 +1624,9 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - echo "PATH: $as_dir" + $as_echo "PATH: $as_dir" done +IFS=$as_save_IFS } >&5 @@ -969,7 +1648,6 @@ _ACEOF ac_configure_args= ac_configure_args0= ac_configure_args1= -ac_sep= ac_must_keep_next=false for ac_pass in 1 2 do @@ -980,8 +1658,8 @@ do -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; @@ -1002,9 +1680,7 @@ do -* ) ac_must_keep_next=true ;; esac fi - ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" - # Get rid of the leading space. - ac_sep=" " + ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac done @@ -1015,8 +1691,8 @@ $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_ # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. -# WARNING: Be sure not to use single quotes in there, as some shells, -# such as our DU 5.0 friend, will then `close' the trap. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { @@ -1029,20 +1705,35 @@ trap 'exit_status=$? _ASBOX echo # The following way of writing the cache mishandles newlines in values, -{ +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 +$as_echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done (set) 2>&1 | - case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in - *ac_space=\ *) + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) sed -n \ - "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" - ;; + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( *) - sed -n \ - "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; - esac; -} + esac | + sort +) echo cat <<\_ASBOX @@ -1053,22 +1744,28 @@ _ASBOX echo for ac_var in $ac_subst_vars do - eval ac_val=$`echo $ac_var` - echo "$ac_var='"'"'$ac_val'"'"'" + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX -## ------------- ## -## Output files. ## -## ------------- ## +## ------------------- ## +## File substitutions. ## +## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do - eval ac_val=$`echo $ac_var` - echo "$ac_var='"'"'$ac_val'"'"'" + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi @@ -1080,26 +1777,24 @@ _ASBOX ## ----------- ## _ASBOX echo - sed "/^$/d" confdefs.h | sort + cat confdefs.h echo fi test "$ac_signal" != 0 && - echo "$as_me: caught signal $ac_signal" - echo "$as_me: exit $exit_status" + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" } >&5 - rm -f core *.core && - rm -rf conftest* confdefs* conf$$* $ac_clean_files && + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status - ' 0 +' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo >confdefs.h +rm -f -r conftest* confdefs.h # Predefined preprocessor variables. @@ -1129,18 +1824,24 @@ _ACEOF # Let the site file select an alternate cache file if it wants to. -# Prefer explicitly selected file to automatically selected ones. -if test -z "$CONFIG_SITE"; then - if test "x$prefix" != xNONE; then - CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" - else - CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" - fi +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + ac_site_file1=$CONFIG_SITE +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site fi -for ac_site_file in $CONFIG_SITE; do +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue if test -r "$ac_site_file"; then - { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 -echo "$as_me: loading site script $ac_site_file" >&6;} + { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi @@ -1150,54 +1851,61 @@ if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then - { echo "$as_me:$LINENO: loading cache $cache_file" >&5 -echo "$as_me: loading cache $cache_file" >&6;} + { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in - [\\/]* | ?:[\\/]* ) . $cache_file;; - *) . ./$cache_file;; + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; esac fi else - { echo "$as_me:$LINENO: creating cache $cache_file" >&5 -echo "$as_me: creating cache $cache_file" >&6;} + { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false -for ac_var in `(set) 2>&1 | - sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do +for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val="\$ac_cv_env_${ac_var}_value" - eval ac_new_val="\$ac_env_${ac_var}_value" + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then - { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 -echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 -echo "$as_me: former value: $ac_old_val" >&2;} - { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 -echo "$as_me: current value: $ac_new_val" >&2;} - ac_cache_corrupted=: + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:$LINENO: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:$LINENO: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in @@ -1207,13 +1915,37 @@ echo "$as_me: current value: $ac_new_val" >&2;} fi done if $ac_cache_corrupted; then - { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 -echo "$as_me: error: changes in the environment can compromise the build" >&2;} - { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 -echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +$as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi + + + + + + + + + + + + + + + + + + + + + + + + ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -1223,54 +1955,38 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - - - - - - - - - - - - - - - - - - - - - +# Initialize Automake am__api_version="1.9" ac_aux_dir= -for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do - if test -f $ac_dir/install-sh; then +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break - elif test -f $ac_dir/install.sh; then + elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break - elif test -f $ac_dir/shtool; then + elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then - { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 -echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} + { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 +$as_echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} { (exit 1); exit 1; }; } fi -ac_config_guess="$SHELL $ac_aux_dir/config.guess" -ac_config_sub="$SHELL $ac_aux_dir/config.sub" -ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or @@ -1285,11 +2001,12 @@ ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. -echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 -echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -1308,7 +2025,7 @@ case $as_dir/ in # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. @@ -1318,30 +2035,43 @@ case $as_dir/ in # program-specific install script used by HP pwplus--don't use. : else - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi fi fi done done ;; esac -done +done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else - # As a last resort, use the slow shell script. We don't cache a - # path for INSTALL within a source directory, because that will + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is - # removed, or if the path is relative. + # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi -echo "$as_me:$LINENO: result: $INSTALL" >&5 -echo "${ECHO_T}$INSTALL" >&6 +{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. @@ -1352,17 +2082,14 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' test "$program_prefix" != NONE && - program_transform_name="s,^,$program_prefix,;$program_transform_name" + program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && - program_transform_name="s,\$,$program_suffix,;$program_transform_name" -# Double any \ or $. echo might interpret backslashes. + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. # By default was `s,x,x', remove it if useless. -cat <<\_ACEOF >conftest.sed -s/[\\$]/&&/g;s/;s,x,x,$// -_ACEOF -program_transform_name=`echo $program_transform_name | sed -f conftest.sed` -rm conftest.sed +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` @@ -1373,8 +2100,8 @@ if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= - { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 -echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then @@ -1414,10 +2141,10 @@ for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AWK+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. @@ -1428,54 +2155,58 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done +IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - echo "$as_me:$LINENO: result: $AWK" >&5 -echo "${ECHO_T}$AWK" >&6 + { $as_echo "$as_me:$LINENO: result: $AWK" >&5 +$as_echo "$AWK" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$AWK" && break done -echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 -set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` -if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF +SHELL = /bin/sh all: - @echo 'ac_maketemp="$(MAKE)"' + @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. -eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` -if test -n "$ac_maketemp"; then - eval ac_cv_prog_make_${ac_make}_set=yes -else - eval ac_cv_prog_make_${ac_make}_set=no -fi +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac rm -f conftest.make fi -if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } SET_MAKE= else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi @@ -1491,8 +2222,8 @@ rmdir .tst 2>/dev/null # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then - { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 -echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} + { { $as_echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 +$as_echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi @@ -1508,7 +2239,7 @@ fi # Define the identity of the package. PACKAGE='xorg-docs' - VERSION='1.3' + VERSION='1.6' cat >>confdefs.h <<_ACEOF @@ -1546,10 +2277,10 @@ if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. @@ -1560,34 +2291,36 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done +IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then - echo "$as_me:$LINENO: result: $STRIP" >&5 -echo "${ECHO_T}$STRIP" >&6 + { $as_echo "$as_me:$LINENO: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. @@ -1598,27 +2331,41 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done +IFS=$as_save_IFS - test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then - echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 -echo "${ECHO_T}$ac_ct_STRIP" >&6 + { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi - STRIP=$ac_ct_STRIP + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi else STRIP="$ac_cv_prog_STRIP" fi @@ -1638,72 +2385,2505 @@ am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' - -DEFAULT_X11DOCDIR=${datadir}/X11/doc - -# Check whether --with-x11docdir or --without-x11docdir was given. -if test "${with_x11docdir+set}" = set; then - withval="$with_x11docdir" - X11DOCDIR="$withval" +{ $as_echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else - X11DOCDIR="$DEFAULT_X11DOCDIR" -fi; -HARDCOPYDIR=$X11DOCDIR/hardcopy + USE_MAINTAINER_MODE=no +fi + + { $as_echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + + +if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE +# Require xorg-macros minimum of 1.10 for DocBook XML documentation + + + + + + + + + + + +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi + + +{ $as_echo "$as_me:$LINENO: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + + +if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + +# Provide some information about the compiler. +$as_echo "$as_me:$LINENO: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +{ (ac_try="$ac_compiler --version >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { (ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi + +{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +if test -z "$ac_file"; then + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: C compiler cannot create executables +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } +fi + +ac_exeext=$ac_cv_exeext + +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + fi + fi +fi +{ $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +{ $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest$ac_cv_exeext +{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if test "${ac_cv_objext+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + CFLAGS="" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_c89=$ac_arg +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:$LINENO: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:$LINENO: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + + +if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + { $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C99" >&5 +$as_echo_n "checking for $CC option to accept ISO C99... " >&6; } +if test "${ac_cv_prog_cc_c99+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +#include + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +#define debug(...) fprintf (stderr, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + your preprocessor is broken; +#endif +#if BIG_OK +#else + your preprocessor is broken; +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\0'; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static void +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str; + int number; + float fnumber; + + while (*format) + { + switch (*format++) + { + case 's': // string + str = va_arg (args_copy, const char *); + break; + case 'd': // int + number = va_arg (args_copy, int); + break; + case 'f': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); +} + +int +main () +{ + + // Check bool. + _Bool success = false; + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + test_varargs ("s, d' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' + || dynamic_array[ni.number - 1] != 543); + + ; + return 0; +} +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -xc99=all -qlanglvl=extc99 +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_c99=$ac_arg +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c99" in + x) + { $as_echo "$as_me:$LINENO: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:$LINENO: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c99" + { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c99" >&5 +$as_echo "$ac_cv_prog_cc_c99" >&6; } ;; +esac + + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:$LINENO: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done +done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +$as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:$LINENO: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done +done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +$as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_header_stdc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_header_stdc=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. + + + + + + + + + +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + eval "$as_ac_Header=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_Header=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if test `eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PKG_CONFIG+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:$LINENO: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi + +fi # Make sure we can run config.sub. -$ac_config_sub sun4 >/dev/null 2>&1 || - { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 -echo "$as_me: error: cannot run $ac_config_sub" >&2;} +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 +$as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} { (exit 1); exit 1; }; } -echo "$as_me:$LINENO: checking build system type" >&5 -echo $ECHO_N "checking build system type... $ECHO_C" >&6 +{ $as_echo "$as_me:$LINENO: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } if test "${ac_cv_build+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else - ac_cv_build_alias=$build_alias -test -z "$ac_cv_build_alias" && - ac_cv_build_alias=`$ac_config_guess` -test -z "$ac_cv_build_alias" && - { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 -echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + { { $as_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 +$as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } -ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || - { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 -echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 +$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi -echo "$as_me:$LINENO: result: $ac_cv_build" >&5 -echo "${ECHO_T}$ac_cv_build" >&6 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 +$as_echo "$as_me: error: invalid value of canonical build" >&2;} + { (exit 1); exit 1; }; };; +esac build=$ac_cv_build -build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac -echo "$as_me:$LINENO: checking host system type" >&5 -echo $ECHO_N "checking host system type... $ECHO_C" >&6 +{ $as_echo "$as_me:$LINENO: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } if test "${ac_cv_host+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else - ac_cv_host_alias=$host_alias -test -z "$ac_cv_host_alias" && - ac_cv_host_alias=$ac_cv_build_alias -ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || - { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 -echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 +$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} { (exit 1); exit 1; }; } +fi fi -echo "$as_me:$LINENO: result: $ac_cv_host" >&5 -echo "${ECHO_T}$ac_cv_host" >&6 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 +$as_echo "$as_me: error: invalid value of canonical host" >&2;} + { (exit 1); exit 1; }; };; +esac host=$ac_cv_host -host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if test "${ac_cv_path_SED+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + $as_unset ac_script || ac_script= + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done +done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + { { $as_echo "$as_me:$LINENO: error: no acceptable sed could be found in \$PATH" >&5 +$as_echo "$as_me: error: no acceptable sed could be found in \$PATH" >&2;} + { (exit 1); exit 1; }; } + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + + + + + +if test "x$GCC" = xyes ; then + CWARNFLAGS="-Wall -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes \ +-Wmissing-declarations -Wnested-externs -fno-strict-aliasing \ +-Wbad-function-cast -Wformat=2" + case `$CC -dumpversion` in + 3.4.* | 4.*) + CWARNFLAGS="$CWARNFLAGS -Wold-style-definition -Wdeclaration-after-statement" + ;; + esac +else + { $as_echo "$as_me:$LINENO: checking whether __SUNPRO_C is declared" >&5 +$as_echo_n "checking whether __SUNPRO_C is declared... " >&6; } +if test "${ac_cv_have_decl___SUNPRO_C+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +#ifndef __SUNPRO_C + (void) __SUNPRO_C; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_have_decl___SUNPRO_C=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_have_decl___SUNPRO_C=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl___SUNPRO_C" >&5 +$as_echo "$ac_cv_have_decl___SUNPRO_C" >&6; } +if test $ac_cv_have_decl___SUNPRO_C = yes; then + SUNCC="yes" +else + SUNCC="no" +fi + + if test "x$SUNCC" = "xyes"; then + CWARNFLAGS="-v" + fi +fi + + + +# If the module's configure.ac calls AC_PROG_CC later on, CC gets set to C89 + + + +# Check whether --enable-strict-compilation was given. +if test "${enable_strict_compilation+set}" = set; then + enableval=$enable_strict_compilation; STRICT_COMPILE=$enableval +else + STRICT_COMPILE=no +fi + +if test "x$STRICT_COMPILE" = "xyes"; then + { $as_echo "$as_me:$LINENO: checking whether __SUNPRO_C is declared" >&5 +$as_echo_n "checking whether __SUNPRO_C is declared... " >&6; } +if test "${ac_cv_have_decl___SUNPRO_C+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +#ifndef __SUNPRO_C + (void) __SUNPRO_C; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_have_decl___SUNPRO_C=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_have_decl___SUNPRO_C=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl___SUNPRO_C" >&5 +$as_echo "$ac_cv_have_decl___SUNPRO_C" >&6; } +if test $ac_cv_have_decl___SUNPRO_C = yes; then + SUNCC="yes" +else + SUNCC="no" +fi + + { $as_echo "$as_me:$LINENO: checking whether __INTEL_COMPILER is declared" >&5 +$as_echo_n "checking whether __INTEL_COMPILER is declared... " >&6; } +if test "${ac_cv_have_decl___INTEL_COMPILER+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +#ifndef __INTEL_COMPILER + (void) __INTEL_COMPILER; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_have_decl___INTEL_COMPILER=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_have_decl___INTEL_COMPILER=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl___INTEL_COMPILER" >&5 +$as_echo "$ac_cv_have_decl___INTEL_COMPILER" >&6; } +if test $ac_cv_have_decl___INTEL_COMPILER = yes; then + INTELCC="yes" +else + INTELCC="no" +fi + + if test "x$GCC" = xyes ; then + STRICT_CFLAGS="-pedantic -Werror" + elif test "x$SUNCC" = "xyes"; then + STRICT_CFLAGS="-errwarn" + elif test "x$INTELCC" = "xyes"; then + STRICT_CFLAGS="-Werror" + fi +fi +CWARNFLAGS="$CWARNFLAGS $STRICT_CFLAGS" + + + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION_MAJOR `echo $PACKAGE_VERSION | cut -d . -f 1` +_ACEOF + + PVM=`echo $PACKAGE_VERSION | cut -d . -f 2 | cut -d - -f 1` + if test "x$PVM" = "x"; then + PVM="0" + fi + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION_MINOR $PVM +_ACEOF + + PVP=`echo $PACKAGE_VERSION | cut -d . -f 3 | cut -d - -f 1` + if test "x$PVP" = "x"; then + PVP="0" + fi + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION_PATCHLEVEL $PVP +_ACEOF + + + +CHANGELOG_CMD="(GIT_DIR=\$(top_srcdir)/.git git log > \$(top_srcdir)/.changelog.tmp && \ +mv \$(top_srcdir)/.changelog.tmp \$(top_srcdir)/ChangeLog) \ +|| (rm -f \$(top_srcdir)/.changelog.tmp; touch \$(top_srcdir)/ChangeLog; \ +echo 'git directory not found: installing possibly empty changelog.' >&2)" + + + + +macros_datadir=`$PKG_CONFIG --print-errors --variable=pkgdatadir xorg-macros` +INSTALL_CMD="(cp -f "$macros_datadir/INSTALL" \$(top_srcdir)/.INSTALL.tmp && \ +mv \$(top_srcdir)/.INSTALL.tmp \$(top_srcdir)/INSTALL) \ +|| (rm -f \$(top_srcdir)/.INSTALL.tmp; touch \$(top_srcdir)/INSTALL; \ +echo 'util-macros \"pkgdatadir\" from xorg-macros.pc not found: installing possibly empty INSTALL.' >&2)" + @@ -1777,47 +4957,434 @@ fi +XORG_MAN_PAGE="X Version 11" + +MAN_SUBSTS="\ + -e 's|__vendorversion__|\"\$(PACKAGE_STRING)\" \"\$(XORG_MAN_PAGE)\"|' \ + -e 's|__xorgversion__|\"\$(PACKAGE_STRING)\" \"\$(XORG_MAN_PAGE)\"|' \ + -e 's|__xservername__|Xorg|g' \ + -e 's|__xconfigfile__|xorg.conf|g' \ + -e 's|__projectroot__|\$(prefix)|g' \ + -e 's|__apploaddir__|\$(appdefaultdir)|g' \ + -e 's|__appmansuffix__|\$(APP_MAN_SUFFIX)|g' \ + -e 's|__drivermansuffix__|\$(DRIVER_MAN_SUFFIX)|g' \ + -e 's|__adminmansuffix__|\$(ADMIN_MAN_SUFFIX)|g' \ + -e 's|__libmansuffix__|\$(LIB_MAN_SUFFIX)|g' \ + -e 's|__miscmansuffix__|\$(MISC_MAN_SUFFIX)|g' \ + -e 's|__filemansuffix__|\$(FILE_MAN_SUFFIX)|g'" -# Check whether --with-release-version or --without-release-version was given. -if test "${with_release_version+set}" = set; then - withval="$with_release_version" - RELEASE_VERSION="$withval" + +AM_DEFAULT_VERBOSITY=1 + + + + +# Check whether --enable-docs was given. +if test "${enable_docs+set}" = set; then + enableval=$enable_docs; build_docs=$enableval else - RELEASE_VERSION="" -fi; - if test "x$RELEASE_VERSION" != "x"; then - PACKAGE="$PACKAGE-$RELEASE_VERSION" - PACKAGE_TARNAME="$PACKAGE_TARNAME-$RELEASE_VERSION" - { echo "$as_me:$LINENO: Building with package name set to $PACKAGE" >&5 -echo "$as_me: Building with package name set to $PACKAGE" >&6;} - fi - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION_MAJOR `echo $PACKAGE_VERSION | cut -d . -f 1` -_ACEOF - - PVM=`echo $PACKAGE_VERSION | cut -d . -f 2` - if test "x$PVM" = "x"; then - PVM="0" - fi - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION_MINOR $PVM -_ACEOF - - PVP=`echo $PACKAGE_VERSION | cut -d . -f 3` - if test "x$PVP" = "x"; then - PVP="0" - fi - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION_PATCHLEVEL $PVP -_ACEOF + build_docs=yes +fi - ac_config_files="$ac_config_files Makefile man/Makefile man/general/Makefile" + +if test x$build_docs = xyes; then + ENABLE_DOCS_TRUE= + ENABLE_DOCS_FALSE='#' +else + ENABLE_DOCS_TRUE='#' + ENABLE_DOCS_FALSE= +fi + +{ $as_echo "$as_me:$LINENO: checking whether to build documentation" >&5 +$as_echo_n "checking whether to build documentation... " >&6; } +{ $as_echo "$as_me:$LINENO: result: $build_docs" >&5 +$as_echo "$build_docs" >&6; } + + + +# Check whether --enable-specs was given. +if test "${enable_specs+set}" = set; then + enableval=$enable_specs; build_specs=$enableval +else + build_specs=yes +fi + + + + +if test x$build_specs = xyes; then + ENABLE_SPECS_TRUE= + ENABLE_SPECS_FALSE='#' +else + ENABLE_SPECS_TRUE='#' + ENABLE_SPECS_FALSE= +fi + +{ $as_echo "$as_me:$LINENO: checking whether to build functional specifications" >&5 +$as_echo_n "checking whether to build functional specifications... " >&6; } +{ $as_echo "$as_me:$LINENO: result: $build_specs" >&5 +$as_echo "$build_specs" >&6; } + + + + + +# Check whether --with-xmlto was given. +if test "${with_xmlto+set}" = set; then + withval=$with_xmlto; use_xmlto=$withval +else + use_xmlto=auto +fi + + + +if test "x$use_xmlto" = x"auto"; then + # Extract the first word of "xmlto", so it can be a program name with args. +set dummy xmlto; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_XMLTO+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case $XMLTO in + [\\/]* | ?:[\\/]*) + ac_cv_path_XMLTO="$XMLTO" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_XMLTO="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + + ;; +esac +fi +XMLTO=$ac_cv_path_XMLTO +if test -n "$XMLTO"; then + { $as_echo "$as_me:$LINENO: result: $XMLTO" >&5 +$as_echo "$XMLTO" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$XMLTO" = "x"; then + { $as_echo "$as_me:$LINENO: WARNING: xmlto not found - documentation targets will be skipped" >&5 +$as_echo "$as_me: WARNING: xmlto not found - documentation targets will be skipped" >&2;} + have_xmlto=no + else + have_xmlto=yes + fi +elif test "x$use_xmlto" = x"yes" ; then + # Extract the first word of "xmlto", so it can be a program name with args. +set dummy xmlto; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_XMLTO+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case $XMLTO in + [\\/]* | ?:[\\/]*) + ac_cv_path_XMLTO="$XMLTO" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_XMLTO="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + + ;; +esac +fi +XMLTO=$ac_cv_path_XMLTO +if test -n "$XMLTO"; then + { $as_echo "$as_me:$LINENO: result: $XMLTO" >&5 +$as_echo "$XMLTO" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$XMLTO" = "x"; then + { { $as_echo "$as_me:$LINENO: error: --with-xmlto=yes specified but xmlto not found in PATH" >&5 +$as_echo "$as_me: error: --with-xmlto=yes specified but xmlto not found in PATH" >&2;} + { (exit 1); exit 1; }; } + fi + have_xmlto=yes +elif test "x$use_xmlto" = x"no" ; then + if test "x$XMLTO" != "x"; then + { $as_echo "$as_me:$LINENO: WARNING: ignoring XMLTO environment variable since --with-xmlto=no was specified" >&5 +$as_echo "$as_me: WARNING: ignoring XMLTO environment variable since --with-xmlto=no was specified" >&2;} + fi + have_xmlto=no +else + { { $as_echo "$as_me:$LINENO: error: --with-xmlto expects 'yes' or 'no'" >&5 +$as_echo "$as_me: error: --with-xmlto expects 'yes' or 'no'" >&2;} + { (exit 1); exit 1; }; } +fi + +# Test for a minimum version of xmlto, if provided. +if test "$have_xmlto" = yes; then + # scrape the xmlto version + { $as_echo "$as_me:$LINENO: checking the xmlto version" >&5 +$as_echo_n "checking the xmlto version... " >&6; } + xmlto_version=`$XMLTO --version 2>/dev/null | cut -d' ' -f3` + { $as_echo "$as_me:$LINENO: result: $xmlto_version" >&5 +$as_echo "$xmlto_version" >&6; } + as_arg_v1=$xmlto_version +as_arg_v2=0.0.20 +awk "$as_awk_strverscmp" v1="$as_arg_v1" v2="$as_arg_v2" /dev/null +case $? in +1) if test "x$use_xmlto" = xauto; then + { $as_echo "$as_me:$LINENO: WARNING: xmlto version $xmlto_version found, but 0.0.20 needed" >&5 +$as_echo "$as_me: WARNING: xmlto version $xmlto_version found, but 0.0.20 needed" >&2;} + have_xmlto=no + else + { { $as_echo "$as_me:$LINENO: error: xmlto version $xmlto_version found, but 0.0.20 needed" >&5 +$as_echo "$as_me: error: xmlto version $xmlto_version found, but 0.0.20 needed" >&2;} + { (exit 1); exit 1; }; } + fi;; +0) ;; +2) ;; +esac +fi + +# Test for the ability of xmlto to generate a text target +have_xmlto_text=no +cat > conftest.xml << "EOF" +EOF +if test "$have_xmlto" = yes; then + if $XMLTO --skip-validation txt conftest.xml >/dev/null 2>&1; then + have_xmlto_text=yes +else + { $as_echo "$as_me:$LINENO: WARNING: xmlto cannot generate text format, this format skipped" >&5 +$as_echo "$as_me: WARNING: xmlto cannot generate text format, this format skipped" >&2;} +fi + +fi + +rm -f conftest.xml + + +if test $have_xmlto_text = yes; then + HAVE_XMLTO_TEXT_TRUE= + HAVE_XMLTO_TEXT_FALSE='#' +else + HAVE_XMLTO_TEXT_TRUE='#' + HAVE_XMLTO_TEXT_FALSE= +fi + + + +if test "$have_xmlto" = yes; then + HAVE_XMLTO_TRUE= + HAVE_XMLTO_FALSE='#' +else + HAVE_XMLTO_TRUE='#' + HAVE_XMLTO_FALSE= +fi + + + + + + +# Check whether --with-fop was given. +if test "${with_fop+set}" = set; then + withval=$with_fop; use_fop=$withval +else + use_fop=auto +fi + + + +if test "x$use_fop" = x"auto"; then + # Extract the first word of "fop", so it can be a program name with args. +set dummy fop; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_FOP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case $FOP in + [\\/]* | ?:[\\/]*) + ac_cv_path_FOP="$FOP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_FOP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + + ;; +esac +fi +FOP=$ac_cv_path_FOP +if test -n "$FOP"; then + { $as_echo "$as_me:$LINENO: result: $FOP" >&5 +$as_echo "$FOP" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$FOP" = "x"; then + { $as_echo "$as_me:$LINENO: WARNING: fop not found - documentation targets will be skipped" >&5 +$as_echo "$as_me: WARNING: fop not found - documentation targets will be skipped" >&2;} + have_fop=no + else + have_fop=yes + fi +elif test "x$use_fop" = x"yes" ; then + # Extract the first word of "fop", so it can be a program name with args. +set dummy fop; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_FOP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case $FOP in + [\\/]* | ?:[\\/]*) + ac_cv_path_FOP="$FOP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_FOP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + + ;; +esac +fi +FOP=$ac_cv_path_FOP +if test -n "$FOP"; then + { $as_echo "$as_me:$LINENO: result: $FOP" >&5 +$as_echo "$FOP" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$FOP" = "x"; then + { { $as_echo "$as_me:$LINENO: error: --with-fop=yes specified but fop not found in PATH" >&5 +$as_echo "$as_me: error: --with-fop=yes specified but fop not found in PATH" >&2;} + { (exit 1); exit 1; }; } + fi + have_fop=yes +elif test "x$use_fop" = x"no" ; then + if test "x$FOP" != "x"; then + { $as_echo "$as_me:$LINENO: WARNING: ignoring FOP environment variable since --with-fop=no was specified" >&5 +$as_echo "$as_me: WARNING: ignoring FOP environment variable since --with-fop=no was specified" >&2;} + fi + have_fop=no +else + { { $as_echo "$as_me:$LINENO: error: --with-fop expects 'yes' or 'no'" >&5 +$as_echo "$as_me: error: --with-fop expects 'yes' or 'no'" >&2;} + { (exit 1); exit 1; }; } +fi + + +if test "$have_fop" = yes; then + HAVE_FOP_TRUE= + HAVE_FOP_FALSE='#' +else + HAVE_FOP_TRUE='#' + HAVE_FOP_FALSE= +fi + + + +{ $as_echo "$as_me:$LINENO: checking for X.Org SGML entities >= 1.5" >&5 +$as_echo_n "checking for X.Org SGML entities >= 1.5... " >&6; } +XORG_SGML_PATH= +if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"xorg-sgml-doctools >= 1.5\"") >&5 + ($PKG_CONFIG --exists --print-errors "xorg-sgml-doctools >= 1.5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + XORG_SGML_PATH=`$PKG_CONFIG --variable=sgmlrootdir xorg-sgml-doctools` +else + : + +fi + +# Define variables STYLESHEET_SRCDIR and XSL_STYLESHEET containing +# the path and the name of the doc stylesheet +if test "x$XORG_SGML_PATH" != "x" ; then + { $as_echo "$as_me:$LINENO: result: $XORG_SGML_PATH" >&5 +$as_echo "$XORG_SGML_PATH" >&6; } + STYLESHEET_SRCDIR=$XORG_SGML_PATH/X11 + XSL_STYLESHEET=$STYLESHEET_SRCDIR/xorg.xsl +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + + +if test "x$XSL_STYLESHEET" != "x"; then + HAVE_STYLESHEETS_TRUE= + HAVE_STYLESHEETS_FALSE='#' +else + HAVE_STYLESHEETS_TRUE='#' + HAVE_STYLESHEETS_FALSE= +fi + + + +ac_config_files="$ac_config_files Makefile general/Makefile general/fonts/Makefile general/input/Makefile general/graphics/Makefile general/platforms/Makefile man/Makefile specs/Makefile specs/CTEXT/Makefile specs/ICCCM/Makefile specs/Xext/Makefile specs/XLFD/Makefile specs/Xserver/Makefile" + cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure @@ -1836,39 +5403,59 @@ _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. -# So, don't put newlines in cache variables' values. +# So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. -{ +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 +$as_echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + (set) 2>&1 | - case `(ac_space=' '; set | grep ac_space) 2>&1` in - *ac_space=\ *) + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; + ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n \ - "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; - esac; -} | + esac | + sort +) | sed ' + /^ac_cv_env_/b end t clear - : clear + :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end - /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - : end' >>confcache -if diff $cache_file confcache >/dev/null 2>&1; then :; else - if test -w $cache_file; then - test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else - echo "not updating unwritable cache $cache_file" + { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -1877,76 +5464,131 @@ test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/; -s/:*\${srcdir}:*/:/; -s/:*@srcdir@:*/:/; -s/^\([^=]*=[ ]*\):*/\1/; -s/:*$//; -s/^[^=]*=[ ]*$//; -}' -fi - # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that -# take arguments), then we branch to the quote section. Otherwise, +# take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. -cat >confdef2opt.sed <<\_ACEOF +ac_script=' +:mline +/\\$/{ + N + s,\\\n,, + b mline +} t clear -: clear -s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g +:clear +s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote -s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g +s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote -d -: quote -s,[ `~#$^&*(){}\\|;'"<>?],\\&,g -s,\[,\\&,g -s,\],\\&,g -s,\$,$$,g -p -_ACEOF -# We use echo to avoid assuming a particular line-breaking character. -# The extra dot is to prevent the shell from consuming trailing -# line-breaks from the sub-command output. A line-break within -# single-quotes doesn't work because, if this script is created in a -# platform that uses two characters for line-breaks (e.g., DOS), tr -# would break. -ac_LF_and_DOT=`echo; echo .` -DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'` -rm -f confdef2opt.sed +b any +:quote +s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g +s/\[/\\&/g +s/\]/\\&/g +s/\$/$$/g +H +:any +${ + g + s/^\n// + s/\n/ /g + p +} +' +DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. - ac_i=`echo "$ac_i" | - sed 's/\$U\././;s/\.o$//;s/\.obj$//'` - # 2. Add them. - ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" - ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${ENABLE_DOCS_TRUE}" && test -z "${ENABLE_DOCS_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"ENABLE_DOCS\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"ENABLE_DOCS\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${ENABLE_SPECS_TRUE}" && test -z "${ENABLE_SPECS_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"ENABLE_SPECS\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"ENABLE_SPECS\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${HAVE_XMLTO_TEXT_TRUE}" && test -z "${HAVE_XMLTO_TEXT_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_XMLTO_TEXT\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"HAVE_XMLTO_TEXT\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${HAVE_XMLTO_TRUE}" && test -z "${HAVE_XMLTO_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_XMLTO\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"HAVE_XMLTO\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${HAVE_FOP_TRUE}" && test -z "${HAVE_FOP_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_FOP\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"HAVE_FOP\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${HAVE_STYLESHEETS_TRUE}" && test -z "${HAVE_STYLESHEETS_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_STYLESHEETS\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"HAVE_STYLESHEETS\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi : ${CONFIG_STATUS=./config.status} +ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 -echo "$as_me: creating $CONFIG_STATUS" >&6;} -cat >$CONFIG_STATUS <<_ACEOF +{ $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. @@ -1959,22 +5601,78 @@ ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## -# Be Bourne compatible +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' -elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then - set -o posix + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } fi -DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then @@ -1984,33 +5682,60 @@ else fi +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + # Work around bugs in pre-3.0 UWIN ksh. -$as_unset ENV MAIL MAILPATH +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - $as_unset $as_var - fi -done +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE # Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1; then +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi -if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false @@ -2018,159 +5743,122 @@ fi # Name of the executable. -as_me=`$as_basename "$0" || +as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)$' \| \ - . : '\(.\)' 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } - /^X\/\(\/\/\)$/{ s//\1/; q; } - /^X\/\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` +# CDPATH. +$as_unset CDPATH -# PATH needs CR, and LINENO needs CR and PATH. -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi as_lineno_1=$LINENO as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" || { - # Find who we are. Look in the path if we contain no path at all - # relative or not. - case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done - - ;; - esac - # We did not find ourselves, most probably we were run as `sh COMMAND' - # in which case we are not to be found in the path. - if test "x$as_myself" = x; then - as_myself=$0 - fi - if test ! -f "$as_myself"; then - { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 -echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} - { (exit 1); exit 1; }; } - fi - case $CONFIG_SHELL in - '') - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for as_base in sh bash ksh sh5; do - case $as_dir in - /*) - if ("$as_dir/$as_base" -c ' - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then - $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } - $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } - CONFIG_SHELL=$as_dir/$as_base - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$0" ${1+"$@"} - fi;; - esac - done -done -;; - esac + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line before each line; the second 'sed' does the real - # work. The second script uses 'N' to pair each line-number line - # with the numbered line, and appends trailing '-' during - # substitution so that $LINENO is not a special case at line end. + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) - sed '=' <$as_myself | + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno N - s,$,-, - : loop - s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop - s,-$,, - s,^['$as_cr_digits']*\n,, + s/-\n.*// ' >$as_me.lineno && - chmod +x $as_me.lineno || - { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 -echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensible to this). - . ./$as_me.lineno + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" # Exit status is that of the last command. exit } -case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in - *c*,-n*) ECHO_N= ECHO_C=' -' ECHO_T=' ' ;; - *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; - *) ECHO_N= ECHO_C='\c' ECHO_T= ;; -esac +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi -if expr a : '\(a\)' >/dev/null 2>&1; then +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - # We could just check for DJGPP; but this test a) works b) is more generic - # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). - if test -f conf$$.exe; then - # Don't use ln at all; we don't have any links - as_ln_s='cp -p' - else +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' fi -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln else as_ln_s='cp -p' fi -rm -f conf$$ conf$$.exe conf$$.file +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: @@ -2179,7 +5867,28 @@ else as_mkdir_p=false fi -as_executable_p="test -f" +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -2188,31 +5897,14 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" -# IFS -# We need space, tab and new line, in precisely that order. -as_nl=' -' -IFS=" $as_nl" - -# CDPATH. -$as_unset CDPATH - exec 6>&1 -# Open the log real soon, to keep \$[0] and so on meaningful, and to +# Save the log message, to keep $[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. Logging --version etc. is OK. -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX -} >&5 -cat >&5 <<_CSEOF - -This file was extended by xorg-docs $as_me 1.3, which was -generated by GNU Autoconf 2.59. Invocation command line was +# values after options handling. +ac_log=" +This file was extended by xorg-docs $as_me 1.6, which was +generated by GNU Autoconf 2.62. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -2220,30 +5912,19 @@ generated by GNU Autoconf 2.59. Invocation command line was CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ -_CSEOF -echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 -echo >&5 +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + _ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. -if test -n "$ac_config_files"; then - echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS -fi +config_files="$ac_config_files" +config_commands="$ac_config_commands" -if test -n "$ac_config_headers"; then - echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS -fi - -if test -n "$ac_config_links"; then - echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS -fi - -if test -n "$ac_config_commands"; then - echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS -fi - -cat >>$CONFIG_STATUS <<\_ACEOF +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. @@ -2251,94 +5932,85 @@ current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit - -V, --version print version number, then exit + -V, --version print version number and configuration settings, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] - instantiate the configuration file FILE + instantiate the configuration file FILE Configuration files: $config_files +Configuration commands: +$config_commands + Report bugs to ." + _ACEOF - -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_version="\\ -xorg-docs config.status 1.3 -configured by $0, generated by GNU Autoconf 2.59, - with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" +xorg-docs config.status 1.6 +configured by $0, generated by GNU Autoconf 2.62, + with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" -Copyright (C) 2003 Free Software Foundation, Inc. +Copyright (C) 2008 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." -srcdir=$srcdir -INSTALL="$INSTALL" + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +AWK='$AWK' +test -n "\$AWK" || AWK=awk _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -# If no file are specified by the user, then we need to provide default -# value. By we need to know if files were specified by the user. +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) - ac_option=`expr "x$1" : 'x\([^=]*\)='` - ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; - -*) + *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; - *) # This is not an option, so the user has probably given explicit - # arguments. - ac_option=$1 - ac_need_defaults=false;; esac case $ac_option in # Handling of the options. -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; - --version | --vers* | -V ) - echo "$ac_cs_version"; exit 0 ;; - --he | --h) - # Conflict between --help and --header - { { echo "$as_me:$LINENO: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&5 -echo "$as_me: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&2;} - { (exit 1); exit 1; }; };; - --help | --hel | -h ) - echo "$ac_cs_usage"; exit 0 ;; - --debug | --d* | -d ) + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift - CONFIG_FILES="$CONFIG_FILES $ac_optarg" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + CONFIG_FILES="$CONFIG_FILES '$ac_optarg'" ac_need_defaults=false;; + --he | --h | --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. - -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&5 -echo "$as_me: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&2;} + -*) { $as_echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; - *) ac_config_targets="$ac_config_targets $1" ;; + *) ac_config_targets="$ac_config_targets $1" + ac_need_defaults=false ;; esac shift @@ -2352,401 +6024,665 @@ if $ac_cs_silent; then fi _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then - echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 - exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" fi _ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF +# Handling of arguments. for ac_config_target in $ac_config_targets do - case "$ac_config_target" in - # Handling of arguments. - "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "man/Makefile" ) CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; - "man/general/Makefile" ) CONFIG_FILES="$CONFIG_FILES man/general/Makefile" ;; - *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 -echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + case $ac_config_target in + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "general/Makefile") CONFIG_FILES="$CONFIG_FILES general/Makefile" ;; + "general/fonts/Makefile") CONFIG_FILES="$CONFIG_FILES general/fonts/Makefile" ;; + "general/input/Makefile") CONFIG_FILES="$CONFIG_FILES general/input/Makefile" ;; + "general/graphics/Makefile") CONFIG_FILES="$CONFIG_FILES general/graphics/Makefile" ;; + "general/platforms/Makefile") CONFIG_FILES="$CONFIG_FILES general/platforms/Makefile" ;; + "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; + "specs/Makefile") CONFIG_FILES="$CONFIG_FILES specs/Makefile" ;; + "specs/CTEXT/Makefile") CONFIG_FILES="$CONFIG_FILES specs/CTEXT/Makefile" ;; + "specs/ICCCM/Makefile") CONFIG_FILES="$CONFIG_FILES specs/ICCCM/Makefile" ;; + "specs/Xext/Makefile") CONFIG_FILES="$CONFIG_FILES specs/Xext/Makefile" ;; + "specs/XLFD/Makefile") CONFIG_FILES="$CONFIG_FILES specs/XLFD/Makefile" ;; + "specs/Xserver/Makefile") CONFIG_FILES="$CONFIG_FILES specs/Xserver/Makefile" ;; + + *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done + # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason to put it here, and in addition, +# simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. -# Create a temporary directory, and hook for its removal unless debugging. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. $debug || { - trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } - # Create a (secure) tmp directory for tmp files. { - tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { - tmp=./confstat$$-$RANDOM - (umask 077 && mkdir $tmp) + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") } || { - echo "$me: cannot create a temporary directory in ." >&2 + $as_echo "$as_me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=' ' +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$tmp/subs1.awk" && _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF -# -# CONFIG_FILES section. -# +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } +ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } -# No need to generate the scripts if there are no CONFIG_FILES. -# This happens for instance when ./config.status config.h -if test -n "\$CONFIG_FILES"; then - # Protect against being on the right side of a sed subst in config.status. - sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; - s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF -s,@SHELL@,$SHELL,;t t -s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t -s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t -s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t -s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t -s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t -s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t -s,@exec_prefix@,$exec_prefix,;t t -s,@prefix@,$prefix,;t t -s,@program_transform_name@,$program_transform_name,;t t -s,@bindir@,$bindir,;t t -s,@sbindir@,$sbindir,;t t -s,@libexecdir@,$libexecdir,;t t -s,@datadir@,$datadir,;t t -s,@sysconfdir@,$sysconfdir,;t t -s,@sharedstatedir@,$sharedstatedir,;t t -s,@localstatedir@,$localstatedir,;t t -s,@libdir@,$libdir,;t t -s,@includedir@,$includedir,;t t -s,@oldincludedir@,$oldincludedir,;t t -s,@infodir@,$infodir,;t t -s,@mandir@,$mandir,;t t -s,@build_alias@,$build_alias,;t t -s,@host_alias@,$host_alias,;t t -s,@target_alias@,$target_alias,;t t -s,@DEFS@,$DEFS,;t t -s,@ECHO_C@,$ECHO_C,;t t -s,@ECHO_N@,$ECHO_N,;t t -s,@ECHO_T@,$ECHO_T,;t t -s,@LIBS@,$LIBS,;t t -s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t -s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t -s,@INSTALL_DATA@,$INSTALL_DATA,;t t -s,@CYGPATH_W@,$CYGPATH_W,;t t -s,@PACKAGE@,$PACKAGE,;t t -s,@VERSION@,$VERSION,;t t -s,@ACLOCAL@,$ACLOCAL,;t t -s,@AUTOCONF@,$AUTOCONF,;t t -s,@AUTOMAKE@,$AUTOMAKE,;t t -s,@AUTOHEADER@,$AUTOHEADER,;t t -s,@MAKEINFO@,$MAKEINFO,;t t -s,@install_sh@,$install_sh,;t t -s,@STRIP@,$STRIP,;t t -s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t -s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t -s,@mkdir_p@,$mkdir_p,;t t -s,@AWK@,$AWK,;t t -s,@SET_MAKE@,$SET_MAKE,;t t -s,@am__leading_dot@,$am__leading_dot,;t t -s,@AMTAR@,$AMTAR,;t t -s,@am__tar@,$am__tar,;t t -s,@am__untar@,$am__untar,;t t -s,@X11DOCDIR@,$X11DOCDIR,;t t -s,@HARDCOPYDIR@,$HARDCOPYDIR,;t t -s,@build@,$build,;t t -s,@build_cpu@,$build_cpu,;t t -s,@build_vendor@,$build_vendor,;t t -s,@build_os@,$build_os,;t t -s,@host@,$host,;t t -s,@host_cpu@,$host_cpu,;t t -s,@host_vendor@,$host_vendor,;t t -s,@host_os@,$host_os,;t t -s,@APP_MAN_SUFFIX@,$APP_MAN_SUFFIX,;t t -s,@LIB_MAN_SUFFIX@,$LIB_MAN_SUFFIX,;t t -s,@FILE_MAN_SUFFIX@,$FILE_MAN_SUFFIX,;t t -s,@MISC_MAN_SUFFIX@,$MISC_MAN_SUFFIX,;t t -s,@DRIVER_MAN_SUFFIX@,$DRIVER_MAN_SUFFIX,;t t -s,@ADMIN_MAN_SUFFIX@,$ADMIN_MAN_SUFFIX,;t t -s,@APP_MAN_DIR@,$APP_MAN_DIR,;t t -s,@LIB_MAN_DIR@,$LIB_MAN_DIR,;t t -s,@FILE_MAN_DIR@,$FILE_MAN_DIR,;t t -s,@MISC_MAN_DIR@,$MISC_MAN_DIR,;t t -s,@DRIVER_MAN_DIR@,$DRIVER_MAN_DIR,;t t -s,@ADMIN_MAN_DIR@,$ADMIN_MAN_DIR,;t t -s,@LIBOBJS@,$LIBOBJS,;t t -s,@LTLIBOBJS@,$LTLIBOBJS,;t t -CEOF - -_ACEOF - - cat >>$CONFIG_STATUS <<\_ACEOF - # Split the substitutions into bite-sized pieces for seds with - # small command number limits, like on Digital OSF/1 and HP-UX. - ac_max_sed_lines=48 - ac_sed_frag=1 # Number of current file. - ac_beg=1 # First line for current file. - ac_end=$ac_max_sed_lines # Line after last line for current file. - ac_more_lines=: - ac_sed_cmds= - while $ac_more_lines; do - if test $ac_beg -gt 1; then - sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag - else - sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag - fi - if test ! -s $tmp/subs.frag; then - ac_more_lines=false - else - # The purpose of the label and of the branching condition is to - # speed up the sed processing (if there are no `@' at all, there - # is no need to browse any of the substitutions). - # These are the two extra sed commands mentioned above. - (echo ':t - /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed - if test -z "$ac_sed_cmds"; then - ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" - else - ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" - fi - ac_sed_frag=`expr $ac_sed_frag + 1` - ac_beg=$ac_end - ac_end=`expr $ac_end + $ac_max_sed_lines` - fi - done - if test -z "$ac_sed_cmds"; then - ac_sed_cmds=cat + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` = $ac_delim_num; then + break + elif $ac_last_try; then + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\).*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\).*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5 +$as_echo "$as_me: error: could not setup config files machinery" >&2;} + { (exit 1); exit 1; }; } +_ACEOF + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case $ac_file in - - | *:- | *:-:* ) # input from stdin - cat >$tmp/stdin - ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - * ) ac_file_in=$ac_file.in ;; + +eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 +$as_echo "$as_me: error: Invalid tag $ac_tag." >&2;} + { (exit 1); exit 1; }; };; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 +$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;} + { (exit 1); exit 1; }; };; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + ac_file_inputs="$ac_file_inputs '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:$LINENO: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin" \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } ;; + esac + ;; esac - # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. - ac_dir=`(dirname "$ac_file") 2>/dev/null || + ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p "$ac_dir" - else - as_dir="$ac_dir" + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir="$ac_dir" + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 -echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +$as_echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } - ac_builddir=. -if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` -else - ac_dir_suffix= ac_top_builddir= -fi +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix case $srcdir in - .) # No --srcdir option. We are building in place. + .) # We are building in place. ac_srcdir=. - if test -z "$ac_top_builddir"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) # Absolute path. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; - *) # Relative path. - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix -# Do not use `cd foo && pwd` to compute absolute paths, because -# the directories may not exist. -case `pwd` in -.) ac_abs_builddir="$ac_dir";; -*) - case "$ac_dir" in - .) ac_abs_builddir=`pwd`;; - [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; - *) ac_abs_builddir=`pwd`/"$ac_dir";; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_builddir=${ac_top_builddir}.;; -*) - case ${ac_top_builddir}. in - .) ac_abs_top_builddir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; - *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_srcdir=$ac_srcdir;; -*) - case $ac_srcdir in - .) ac_abs_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; - *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_srcdir=$ac_top_srcdir;; -*) - case $ac_top_srcdir in - .) ac_abs_top_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; - *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; - esac;; -esac + case $ac_mode in + :F) + # + # CONFIG_FILE + # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_builddir$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac - - if test x"$ac_file" != x-; then - { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - rm -f "$ac_file" - fi - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - if test x"$ac_file" = x-; then - configure_input= - else - configure_input="$ac_file. " - fi - configure_input=$configure_input"Generated from `echo $ac_file_in | - sed 's,.*/,,'` by configure." - - # First look for the input files in the build tree, otherwise in the - # src tree. - ac_file_inputs=`IFS=: - for f in $ac_file_in; do - case $f in - -) echo $tmp/stdin ;; - [\\/$]*) - # Absolute (can't be DOS-style, as IFS=:) - test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - echo "$f";; - *) # Relative - if test -f "$f"; then - # Build tree - echo "$f" - elif test -f "$srcdir/$f"; then - # Source tree - echo "$srcdir/$f" - else - # /dev/null tree - { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - fi;; - esac - done` || { (exit 1); exit 1; } _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF - sed "$ac_vpsub + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= + +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p +' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub $extrasub _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s,@configure_input@,$configure_input,;t t -s,@srcdir@,$ac_srcdir,;t t -s,@abs_srcdir@,$ac_abs_srcdir,;t t -s,@top_srcdir@,$ac_top_srcdir,;t t -s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t -s,@builddir@,$ac_builddir,;t t -s,@abs_builddir@,$ac_abs_builddir,;t t -s,@top_builddir@,$ac_top_builddir,;t t -s,@abs_top_builddir@,$ac_abs_top_builddir,;t t -s,@INSTALL@,$ac_INSTALL,;t t -" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out - rm -f $tmp/stdin - if test x"$ac_file" != x-; then - mv $tmp/out $ac_file +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&2;} + + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + ;; + + + :C) { $as_echo "$as_me:$LINENO: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` else - cat $tmp/out - rm -f $tmp/out + continue fi - + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir=$dirpart/$fdir + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +$as_echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done done -_ACEOF + ;; + + esac +done # for ac_tag -cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save +test $ac_write_fail = 0 || + { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. @@ -2768,4 +6704,8 @@ if test "$no_create" != yes; then # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:$LINENO: WARNING: Unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: Unrecognized options: $ac_unrecognized_opts" >&2;} +fi diff --git a/doc/xorg-docs/configure.ac b/doc/xorg-docs/configure.ac index 4137edff4..fc9b8b85e 100644 --- a/doc/xorg-docs/configure.ac +++ b/doc/xorg-docs/configure.ac @@ -20,23 +20,40 @@ dnl USE OR PERFORMANCE OF THIS SOFTWARE. dnl dnl Process this file with autoconf to create configure. -AC_PREREQ([2.57]) -AC_INIT([xorg-docs], [1.3], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg]) +# Initialize Autoconf +AC_PREREQ([2.60]) +AC_INIT([xorg-docs], + [1.6], + [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], + [xorg-docs]) +AC_CONFIG_SRCDIR([Makefile.am]) + +# Initialize Automake AM_INIT_AUTOMAKE([foreign dist-bzip2]) +AM_MAINTAINER_MODE -DEFAULT_X11DOCDIR=${datadir}/X11/doc -AC_ARG_WITH(x11docdir, - AC_HELP_STRING([--with-x11docdir=], - [Where to install X11 docs (default: ${datadir}/X11/doc)]), - [X11DOCDIR="$withval"], - [X11DOCDIR="$DEFAULT_X11DOCDIR"]) -HARDCOPYDIR=$X11DOCDIR/hardcopy -AC_SUBST([X11DOCDIR]) -AC_SUBST([HARDCOPYDIR]) +# Require xorg-macros minimum of 1.10 for DocBook XML documentation +m4_ifndef([XORG_MACROS_VERSION], + [m4_fatal([must install xorg-macros 1.10 or later before running autoconf/autogen])]) +XORG_MACROS_VERSION(1.10) +XORG_DEFAULT_OPTIONS +XORG_ENABLE_DOCS +XORG_ENABLE_SPECS +XORG_WITH_XMLTO(0.0.20) +XORG_WITH_FOP +XORG_CHECK_SGML_DOCTOOLS(1.5) -XORG_MANPAGE_SECTIONS -XORG_RELEASE_VERSION - -AC_OUTPUT([Makefile - man/Makefile - man/general/Makefile]) +AC_CONFIG_FILES([Makefile + general/Makefile + general/fonts/Makefile + general/input/Makefile + general/graphics/Makefile + general/platforms/Makefile + man/Makefile + specs/Makefile + specs/CTEXT/Makefile + specs/ICCCM/Makefile + specs/Xext/Makefile + specs/XLFD/Makefile + specs/Xserver/Makefile]) +AC_OUTPUT diff --git a/doc/xorg-docs/general/License.xml b/doc/xorg-docs/general/License.xml new file mode 100644 index 000000000..d8b947a38 --- /dev/null +++ b/doc/xorg-docs/general/License.xml @@ -0,0 +1,744 @@ + + %defs; +]> + +
+ + + +Licenses +The X.Org Foundation +&reldate; + + + +Introduction + + +The X.Org Foundation X Window System distribution is a compilation of code and +documentation from many sources. This document is intended primarily +as a guide to the licenses used in the distribution: you must check +each file and/or package for precise redistribution +terms. None-the-less, this summary may be useful to many users. + + + +This document is based on the compilation from XFree86. +If you find any errors or significant omissions in this document, please +contact us with details at xorg@lists.freedesktop.org. + + + +Most of these licenses are based on the MIT, X Consortium, or BSD +(original and revised) licenses. All of them are consistent with the +Open Source Definition, and most are +consistent with the Free Software Foundation's Free Software +Definition. + + + +While the current licenses are all open source licenses, the +X.Org Foundation is attempting, over time, to bring as much as +possible of the code's licenses in the distribution into compliance with the +Debian Free Software Guidelines. + + + + + +X.Org Preferred License + + +The X.Org Foundation has chosen the following format of the MIT +License as the preferred format for code included in the X Window System +distribution. This is a slight variant of the common MIT license +form published by the Open Source Initiative at +. + + +
+ +Copyright ©[year] [copyright holder] + + + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + + + +The above copyright notice and this permission notice (including the next +paragraph) shall be included in all copies or substantial portions of the +Software. + + + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +
+ + +When listing multiple copyright holders with the license statement, +please sort by surname for people, and by the full name for other +entities (e.g. Juliusz Chroboczek sorts before Intel Corporation sorts +before Daniel Stone). + + +
+ + +XFree86 License 1.0 + + +XFree86 code without an explicit copyright is covered by the following +copyright/license: + + +
+ +Copyright (C) 1994-2003 The XFree86 Project, Inc. All Rights Reserved. + + + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + + + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + + + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + +Except as contained in this notice, the name of the XFree86 Project shall +not be used in advertising or otherwise to promote the sale, use or other +dealings in this Software without prior written authorization from the +XFree86 Project. + +
+ + +No software incorporating the XFree86 1.1 license has been incorporated. + + +
+ + +Other Licenses + + +Portions of code are covered by the following licenses/copyrights. See +individual files for the copyright dates. + + + +X/MIT Copyrights + + +X Consortium + + +Copyright (C) <date> X Consortium + + + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without +limitation the rights to use, copy, modify, merge, publish, distribute, +sublicense, and/or sell copies of the Software, and to permit persons to +whom the Software is furnished to do so, subject to the following conditions: + + + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + + + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. + + + +Except as contained in this notice, the name of the X Consortium shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization from +the X Consortium. + + + +X Window System is a trademark of X Consortium, Inc. + + + + + +The Open Group + + +Copyright <date> The Open Group + + + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + + + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + + + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. + + + + + + + +Berkeley-based copyrights: + + +General + + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + + + + + + + +Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + + + + + +Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + + + + + +The name of the author may not be used to endorse or promote products +derived from this software without specific prior written permission. + + + + + + + + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + + + +UCB/LBL + + +Copyright (c) 1993 +The Regents of the University of California. All rights reserved. + + + +This software was developed by the Computer Systems Engineering group +at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and +contributed to Berkeley. + + + +All advertising materials mentioning features or use of this software +must display the following acknowledgement: +This product includes software developed by the University of +California, Lawrence Berkeley Laboratory. + + + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + + + + + + + +Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + + + + + +Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + + + + + +All advertising materials mentioning features or use of this software +must display the following acknowledgement: +This product includes software developed by the University of +California, Berkeley and its contributors. + + + + + +Neither the name of the University nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + + + + + + + + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + + + + + +The NetBSD Foundation, Inc. + + +Copyright (c) 2003 The NetBSD Foundation, Inc. +All rights reserved. + + + +This code is derived from software contributed to The NetBSD Foundation +by Ben Collver <collver1@attbi.com> + + + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + + + + + Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + + + + + + Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + + + + + + + + +THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + + + + + +Theodore Ts'o. + + +Copyright Theodore Ts'o, 1994, 1995, 1996, 1997, 1998, 1999. All +rights reserved. + + + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + + + + +Redistributions of source code must retain the above copyright +notice, and the entire permission notice in its entirety, +including the disclaimer of warranties. + + + + + +Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + + + + + +The name of the author may not be used to endorse or promote +products derived from this software without specific prior +written permission. + + + + + + + + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF +WHICH ARE HEREBY DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + + + + + +Theo de Raadt and Damien Miller + + +Copyright (c) 1995,1999 Theo de Raadt. All rights reserved. +Copyright (c) 2001-2002 Damien Miller. All rights reserved. + + + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + + + + + Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + + + + + + Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + + + + + + + + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + + + +Todd C. Miller + + +Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com> + + + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + + + +THE SOFTWARE IS PROVIDED "AS IS" AND TODD C. MILLER DISCLAIMS ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL TODD C. MILLER BE LIABLE +FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + + + + +Thomas Winischhofer + + +Copyright (C) 2001-2004 Thomas Winischhofer + + + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + + + + + + + + Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + + + + + + Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + + + + + + The name of the author may not be used to endorse or promote products +derived from this software without specific prior written permission. + + + + + + + + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESSED OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + + + + + + + +SGI Free Software License B + + +SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) + + + +Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved. + + + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + + + +The above copyright notice including the dates of first publication and +either this permission notice or a reference to + +shall be included in all copies or substantial portions of the Software. + + + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + + + +Bigelow & Holmes Inc and URW++ GmbH Luxi font license + + +Luxi fonts copyright (c) 2001 by Bigelow & Holmes Inc. Luxi font +instruction code copyright (c) 2001 by URW++ GmbH. All Rights +Reserved. Luxi is a registered trademark of Bigelow & Holmes Inc. + + + +Permission is hereby granted, free of charge, to any person obtaining +a copy of these Fonts and associated documentation files (the "Font +Software"), to deal in the Font Software, including without +limitation the rights to use, copy, merge, publish, distribute, +sublicense, and/or sell copies of the Font Software, and to permit +persons to whom the Font Software is furnished to do so, subject to +the following conditions: + + + +The above copyright and trademark notices and this permission notice +shall be included in all copies of one or more of the Font Software. + + + +The Font Software may not be modified, altered, or added to, and in +particular the designs of glyphs or characters in the Fonts may not +be modified nor may additional glyphs or characters be added to the +Fonts. This License becomes null and void when the Fonts or Font +Software have been modified. + + + +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL +BIGELOW & HOLMES INC. OR URW++ GMBH. BE LIABLE FOR ANY CLAIM, DAMAGES +OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, +INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF +CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR +INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT +SOFTWARE. + + + +Except as contained in this notice, the names of Bigelow & Holmes +Inc. and URW++ GmbH. shall not be used in advertising or otherwise to +promote the sale, use or other dealings in this Font Software without +prior written authorization from Bigelow & Holmes Inc. and URW++ GmbH. + + + +For further information, contact: + + + +info@urwpp.de +or +design@bigelowandholmes.com + + + + + + +
diff --git a/doc/xorg-docs/general/Makefile.am b/doc/xorg-docs/general/Makefile.am new file mode 100644 index 000000000..70f74745f --- /dev/null +++ b/doc/xorg-docs/general/Makefile.am @@ -0,0 +1,17 @@ + +SUBDIRS = fonts input graphics platforms + +if ENABLE_DOCS + +doc_sources = \ + License.xml \ + README.xml \ + ReleaseNotes.xml \ + Versions.xml + +xmldir = $(docdir) +dist_xml_DATA = $(doc_sources) + +include $(top_srcdir)/xmlrules.in + +endif ENABLE_DOCS diff --git a/doc/xorg-docs/general/Makefile.in b/doc/xorg-docs/general/Makefile.in new file mode 100644 index 000000000..9acb87492 --- /dev/null +++ b/doc/xorg-docs/general/Makefile.in @@ -0,0 +1,606 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice (including the next +# paragraph) shall be included in all copies or substantial portions of the +# Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = .. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(am__dist_xml_DATA_DIST) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/xmlrules.in +@ENABLE_DOCS_TRUE@@HAVE_FOP_TRUE@@HAVE_XMLTO_TRUE@am__append_1 = $(doc_sources:.xml=.ps) $(doc_sources:.xml=.pdf) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@am__append_2 = $(doc_sources:.xml=.txt) +subdir = general +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(install_sh) -d +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-exec-recursive install-info-recursive \ + install-recursive installcheck-recursive installdirs-recursive \ + pdf-recursive ps-recursive uninstall-info-recursive \ + uninstall-recursive +am__dist_xml_DATA_DIST = License.xml README.xml ReleaseNotes.xml \ + Versions.xml +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(xmldir)" "$(DESTDIR)$(xmldir)" +dist_xmlDATA_INSTALL = $(INSTALL_DATA) +xmlDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_xml_DATA) $(xml_DATA) +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ +ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APP_MAN_DIR = @APP_MAN_DIR@ +APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHANGELOG_CMD = @CHANGELOG_CMD@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CWARNFLAGS = @CWARNFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ +DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ENABLE_DOCS_FALSE = @ENABLE_DOCS_FALSE@ +ENABLE_DOCS_TRUE = @ENABLE_DOCS_TRUE@ +ENABLE_SPECS_FALSE = @ENABLE_SPECS_FALSE@ +ENABLE_SPECS_TRUE = @ENABLE_SPECS_TRUE@ +EXEEXT = @EXEEXT@ +FILE_MAN_DIR = @FILE_MAN_DIR@ +FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ +FOP = @FOP@ +GREP = @GREP@ +HAVE_FOP_FALSE = @HAVE_FOP_FALSE@ +HAVE_FOP_TRUE = @HAVE_FOP_TRUE@ +HAVE_STYLESHEETS_FALSE = @HAVE_STYLESHEETS_FALSE@ +HAVE_STYLESHEETS_TRUE = @HAVE_STYLESHEETS_TRUE@ +HAVE_XMLTO_FALSE = @HAVE_XMLTO_FALSE@ +HAVE_XMLTO_TEXT_FALSE = @HAVE_XMLTO_TEXT_FALSE@ +HAVE_XMLTO_TEXT_TRUE = @HAVE_XMLTO_TEXT_TRUE@ +HAVE_XMLTO_TRUE = @HAVE_XMLTO_TRUE@ +INSTALL_CMD = @INSTALL_CMD@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIB_MAN_DIR = @LIB_MAN_DIR@ +LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +MAN_SUBSTS = @MAN_SUBSTS@ +MISC_MAN_DIR = @MISC_MAN_DIR@ +MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ +VERSION = @VERSION@ +XMLTO = @XMLTO@ +XORG_MAN_PAGE = @XORG_MAN_PAGE@ +XORG_SGML_PATH = @XORG_SGML_PATH@ +XSL_STYLESHEET = @XSL_STYLESHEET@ +ac_ct_CC = @ac_ct_CC@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +SUBDIRS = fonts input graphics platforms +@ENABLE_DOCS_TRUE@doc_sources = \ +@ENABLE_DOCS_TRUE@ License.xml \ +@ENABLE_DOCS_TRUE@ README.xml \ +@ENABLE_DOCS_TRUE@ ReleaseNotes.xml \ +@ENABLE_DOCS_TRUE@ Versions.xml + +@ENABLE_DOCS_TRUE@xmldir = $(docdir) +@ENABLE_DOCS_TRUE@dist_xml_DATA = $(doc_sources) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@xml_DATA = \ +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(doc_sources:.xml=.html) \ +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(am__append_1) \ +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(am__append_2) +@ENABLE_DOCS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FLAGS = \ +@ENABLE_DOCS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ -m $(XSL_STYLESHEET) \ +@ENABLE_DOCS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --searchpath $(XORG_SGML_PATH)/X11 \ +@ENABLE_DOCS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam html.stylesheet=$(STYLESHEET_SRCDIR)/xorg.css \ +@ENABLE_DOCS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam img.src.path=$(abs_builddir)/ + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@CLEANFILES = $(xml_DATA) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@SUFFIXES = .xml .ps .pdf .txt .html +all: all-recursive + +.SUFFIXES: +.SUFFIXES: .xml .ps .pdf .txt .html +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/xmlrules.in $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign general/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --foreign general/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +uninstall-info-am: +install-dist_xmlDATA: $(dist_xml_DATA) + @$(NORMAL_INSTALL) + test -z "$(xmldir)" || $(mkdir_p) "$(DESTDIR)$(xmldir)" + @list='$(dist_xml_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_xmlDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(xmldir)/$$f'"; \ + $(dist_xmlDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(xmldir)/$$f"; \ + done + +uninstall-dist_xmlDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_xml_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(xmldir)/$$f'"; \ + rm -f "$(DESTDIR)$(xmldir)/$$f"; \ + done +install-xmlDATA: $(xml_DATA) + @$(NORMAL_INSTALL) + test -z "$(xmldir)" || $(mkdir_p) "$(DESTDIR)$(xmldir)" + @list='$(xml_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(xmlDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(xmldir)/$$f'"; \ + $(xmlDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(xmldir)/$$f"; \ + done + +uninstall-xmlDATA: + @$(NORMAL_UNINSTALL) + @list='$(xml_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(xmldir)/$$f'"; \ + rm -f "$(DESTDIR)$(xmldir)/$$f"; \ + done + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(mkdir_p) $(distdir)/.. + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(mkdir_p) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile $(DATA) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(xmldir)" "$(DESTDIR)$(xmldir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +@ENABLE_DOCS_FALSE@clean-local: +@HAVE_XMLTO_FALSE@clean-local: +clean: clean-recursive + +clean-am: clean-generic clean-local mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: install-dist_xmlDATA install-xmlDATA + +install-exec-am: + +install-info: install-info-recursive + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-dist_xmlDATA uninstall-info-am \ + uninstall-xmlDATA + +uninstall-info: uninstall-info-recursive + +.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ + clean clean-generic clean-local clean-recursive ctags \ + ctags-recursive distclean distclean-generic \ + distclean-recursive distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dist_xmlDATA install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip install-xmlDATA installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic maintainer-clean-recursive \ + mostlyclean mostlyclean-generic mostlyclean-recursive pdf \ + pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ + uninstall-dist_xmlDATA uninstall-info-am uninstall-xmlDATA + + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@%.txt: %.xml $(dist_xml_DATA) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) txt $< + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@%.html: %.xml $(dist_xml_DATA) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) xhtml-nochunks $< + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@%.pdf: %.xml $(dist_xml_DATA) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop pdf $< + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@%.ps: %.xml $(dist_xml_DATA) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop ps $< + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@chunked-html: $(doc_sources) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) -o html xhtml $(doc_sources) + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@clean-local: +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)rm -fr html/ +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/doc/xorg-docs/general/README.xml b/doc/xorg-docs/general/README.xml new file mode 100644 index 000000000..7c11e2739 --- /dev/null +++ b/doc/xorg-docs/general/README.xml @@ -0,0 +1,345 @@ + %defs; +]> + +
+ + + +README for X11R&relvers; + + +The X.Org Foundation + + +&reldate; + + + + +X11R&relvers; is an Open Source version of the X Window System that +supports many UNIX and UNIX-like +operating systems (such as Linux, FreeBSD, NetBSD, OpenBSD, and Solaris) +on a variety of platforms. This version is compatible with +X11R&prevrelvers; and other X Window System implementations which support +the X11 standard. + + + + + + + +What is X11R&relvers;? + + + +X11R&relvers; is the &whichfullrel; release in the X11R&majorvers; series. +Tarballs for packages that have had updates since the &prevrelvers; release +are included in this release. To build this release, you will first need to +get the packages from X11R&prevrelvers; and then add the new packages from +X11R&relvers; to them. + + + + + +Specific release enhancements can be viewed in the Release Notes. + + + + +Most modern PC video hardware is supported in this release, and most PC +video hardware that isn't supported explicitly can be used with the +"vesa" driver. The Release Notes +has a table showing the drivers provided with X11R&relvers;, and links to +related documentation. + + + +The X.Org Foundation X releases are produced by the X.Org Foundation. +The X.Org Foundation has been formed as a Delaware corporation organized +to operate as a scientific charity under IRS code 501(c)(3) chartered +to develop and execute effective strategies which provide world-wide +stewardship of the X Window System technology and standards. Membership +in the X.Org Foundation is free to all participants. Applications for +Membership are now being accepted, and active participants in the +further development of the X Window Technology are invited to complete a +membership application. The X11R&relvers; release has been +produced by the many contributors to the X.Org community and members of +the X.Org Foundation and includes code from the X Consortium, the Open +Group and the XFree86 Project. +This release is dedicated to the greater X community, developers and +users alike. + + + + + + + +Licensing + + +X Window System source code is covered by many licenses. All of these +licenses have in common the fact that they do not impose significant +conditions on the modification or redistribution or either source code +or binaries beyond requiring one or more of the following: + + + + + + + + +Copyright and/or license notices are left intact. + + + + + +Copyright and/or license notices are reproduced verbatim in +documentation accompanying binary distributions. + + + + + +Attributions are included with documentation accompanying binaries. + + + + + + + + +Most of these licenses are based on the MIT, X Consortium, or BSD +(original and revised) licenses. All of them are consistent with the +Open Source Definition, and most are +consistent with the Free Software Foundation's Free Software Definition. + + + +Copyright and Licensing information for X, including the reproduction +of copyright and/or license notices and attributions required by some +of the licenses for binary distributions, can be found in the License Document. If you find any omissions +in that document, please contact us with details at +xorg@lists.freedesktop.org. +While the current licenses are all open source licenses, the +X.Org Foundation is attempting, with time, to bring as much as +possible of the code's licenses in the distribution into compliance with the +Debian Free Software Guidelines. + + + + + +Pointers to additional information + + +The documentation for this release can be found online at the X.Org web site. + + + +The X11 version numbering system (including historical information) +can be found in the Versions Document. + + + +Additional information may be available at the X.Org Foundation Wiki. + + + + + +The Public Mailing Lists + + +Current information about the X.Org Foundation public mailing lists is +available on the X.Org +mailing list page and related desktop +technology mailing lists can be found on Freedesktop.org's mailing list +page. + + + + + +Contributing to the X.Org Foundation's X efforts. + + +If you have any new work or enhancements/bug fixes for existing work, +please send them as git format patches to +xorg-devel@lists.freedesktop.org or to our +bug tracking system +using the xorg component. This will help ensure that they are included +in future releases. More details on patch submission and review +process are available on the + +SubmittingPatches page of the X.Org wiki. + + + + + +How to get the release + + + +Information about X11R&relvers; can be found from the +X.Org Foundation wiki, and at +mirrors of this server. + + + + +X11R&relvers; + + +This is the &whichfullrel; release of the new modular source code tree. The +source code has been split into nine logical modules: app, data, doc, +driver, font, lib. proto, util and xserver. Each of these modules +contain one or more packages that can be configured, built and installed +separately. Please see an X11R&relvers; release site for a complete +list of the tarballs. + + + +For information on how to build the modular tree packages see the Modular Developer's Guide. This guide also +contains information for developers who want to help improve the modular +build system and modular code base. + + + + + +The current development tree + + +The X source code for this and all releases/snapshots as well as +development versions can also be accessed via the Freedesktop.org git +repository. It's also possible to browse the freedesktop git repository. + + + +To check out the latest development version, don't specify any tag. + + + + + + + +Reporting Bugs + + +Bugs should be reported to freedesktop.org's bug tracking system +using the xorg component. Before +reporting bugs, please check the server log file, which can be found at +/var/log/Xorg.0.log on most platforms. If you can't +resolve the problem yourself, send the entire log file with your bug report but +not the operating system core dump. Do not edit the log file as our +developers use it to reproduce and debug your problem. Please attach it +to your bug report. + + + + +
diff --git a/doc/xorg-docs/general/ReleaseNotes.xml b/doc/xorg-docs/general/ReleaseNotes.xml new file mode 100644 index 000000000..984878eb2 --- /dev/null +++ b/doc/xorg-docs/general/ReleaseNotes.xml @@ -0,0 +1,2062 @@ + + %defs; +]> + +
+ + + + Release Notes for X11R&relvers; + + + + The X.Org Foundation + + + + &reldate; + + + + + These release notes contain information about features and their + status in the X.Org Foundation X11R&relvers; release. + + + + + + + + Dedication + + + Two of the early leaders of the X Window System community were + lost to cancer this year — Smokey Wallace, who led the DEC + WSL team which created the initial implementation of X11, and + Hideki Hiura from Sun Microsystems who helped design the X11R6 + internationalization framework. This release is dedicated to + their memory. + + + + + Introduction to the X11R&relvers; Release + + + This release is the &whichfullrel; modular release of the + X Window System. + The next full release will be X11R&nextrelvers; and is expected in + &nextfullreldate;. + + + + Unlike X11R1 through X11R6.9, X11R7.x releases are not built from one + monolithic source tree, but many individual modules. These modules + are distributed as individual source code releases, and each one is + released when it is ready, instead of only when the overall window + system is ready for release. The X11R7.x releases are made by + “rolling up” the individual module releases into a + collection that is often affectionately called the + “katamari” by the developers. + + + + The X11R&relvers; release does not include all of the software + formerly included in the previous X Window System releases. + It is designed to be a reasonable baseline from which to start + when building the window system for the first time for a new + installation, distribution, or package set. It does not provide + a full desktop environment, expecting a more feature rich set of + applications to be installed from one of the several excellent + desktop environments available for the X Window System. The + X.Org developers continue to maintain and produce new releases + of much of the software that was formerly in the main window + system releases but is no longer included in the katamari + releases, including many of the Athena Widgets desktop + applications that were provided as samples in previous window + system versions. + + + + Once their window system build is established, most builders watch for + announcements of individual module updates on the xorg-announce mailing list and update to those as needed. + The X.Org Foundation currently releases the X Window System + katamari releases approximately once a year, but many modules, + especially the X servers and drivers, are updated more frequently + between those releases. + + + + For help with how to build and develop in the modular tree see the + Modular + Developer's Guide in the X.Org wiki. + + + + We encourage you to report bugs using + freedesktop.org's + bug tracking system using the xorg product, and to + submit bug fixes and enhancements to + xorg-devel@lists.x.org. + More details on patch submission and review process are available on the + + SubmittingPatches page of the X.Org wiki. + + + +The release numbering is based on the original MIT X numbering system. +X11 refers to the version of the network protocol that the X Window +system is based on: Version 11 was first released in 1988 and has been +stable for 22 years, with only upward compatible additions to the core X +protocol, a record of stability envied in computing. Formal releases of +X started with X version 9 from MIT; the first commercial X products +were based on X version 10. The MIT X Consortium and its successors, +the X Consortium, the Open Group X Project Team, and the X.Org Group +released versions X11R3 through X11R6.6. Since the founding of the +X.Org Foundation in early 2004, many further releases have been +issued, from X11R6.7 to the current &relvers;. + + + + +The next section describes what is new in the latest full release +(&relvers;) compared with the previous full release +(&prevrelvers;). + + + + + + + + + Summary of new features in X11R&relvers; + + + This is a sampling of the new features in X11R&relvers;. + A more complete list of changes can be found in the ChangeLog files that + are part of the source of each X module. + + + + + + + + InputClass sections in Xorg configuration + files are used to apply configuration options to any input + device matching specified rules, such as device path, + type of device, device manufacturer, or other data provided + by the input hotplug backend. Details can be found in the + INPUTCLASS section of the + xorg.conf(5) manual page. + + + + + + Xorg configuration directories are + used to allow fragments of the X server configuration to be + delivered in individual files. For instance, the input device + driver matching rules previously provided in HAL + .fdi files are now provided as + InputClass sections in + .conf files in a + xorg.conf.d directory. + + + + + + udev is now used by the X server on + Linux systems for input device discovery and hot-plug + notification. Other platforms continue to use the HAL + framework for these tasks for now. + + + + + + X protocol C-language Binding (XCB) + is now included in the katamari, and is required by several + client-side modules, including + libX11, + xlsatoms, xlsclients + and xwininfo. + + XCB is a replacement for Xlib featuring a small footprint, + latency hiding, direct access to the protocol, improved threading + support, and extensibility. More information can be found on + the XCB website at . + + + + + + Major progress has been made on the X.Org Documentation + modernization - most of the library and protocol specifications + are now included in the modules for those libraries and protocols + so they can be updated in sync with new versions, and many have + been converted to DocBook XML from the variety of formats they + were previously in. On most systems these documents will be + installed under /usr/share/doc/. They + are also posted on the X.Org website at + . + + + + + + Video and input driver enhancements. + Please see the ChangeLog files for individual drivers; there are + far too many updates to list here. + + + + + + ... and the usual assortment of correctness and crash fixes. + + + + + + + + Overview of X11R&relvers; + + + On most platforms, X11R&relvers; has a single hardware-driving + X server binary called Xorg. This binary can + dynamically load the video drivers, input drivers, and other modules + that are needed. + + Xorg has currently has support for Linux, Solaris, + and some BSD OSs on Alpha, PowerPC, IA-64, AMD64, Intel x86, Sparc, + and MIPS platforms. + + + + + Additional specialized X server binaries may be found depending on + the platform and build configuration, including: + + + + Xdmx + + is a proxy X server that uses one or more other X servers as its + display devices. It provides multi-head X functionality for + displays that might be located on different machines. + + + + Xnest + + is a nested X server, that operates as both an X client and X + server. Xnest is a client of the real server + which manages windows and graphics requests on its behalf. + Xnest is a server to its own clients, and + manages windows and graphics requests on their behalf. + To these clients, it appears to be a conventional server. + + + + Xephyr + + is a X server that outputs to a window on a pre-existing + “host” X display. Unlike Xnest + which is an X proxy, and thus limited to the capabilities of + the host X server, Xephyr is a full X server + which uses the host X server window as a + “framebuffer” via fast SHM XImages. + + + + Xvfb + + is a virtual framebuffer X server that can run on machines with + no display hardware and no physical input devices. It emulates + a dumb framebuffer using virtual memory. + + + + Xquartz + + is an X server that interacts with the MacOS X native Aqua window + system, displaying windows on the Mac desktop and accepting + input from the Mac system devices, allowing X11 applications + to be used in a native Mac desktop session. + + + + Xwin + + is an X server that runs under the Cygwin environment, + interacting with the Microsoft Windows native window + system, displaying windows on the Windows desktop and accepting + input from the Windows system devices, allowing X11 applications + to be used in a native Windows desktop session. + + + + + + + + Details of X11R&relvers; components + + + Video Drivers + + + X11R&relvers; includes the following video drivers: + + + + + + + + + + + Driver Name + Description + Further Information + + + apm + Alliance Pro Motion + README.apm + + + ark + Ark Logic +   + + + ast + ASPEED Technology +   + + + chips + Chips & Technologies + README.chips, + chips(4) + + + + cirrus + Cirrus Logic +   + + + fbdev + Linux framebuffer device + fbdev(4) + + + geode (*) + AMD Geode GX and LX +   + + + glint + 3Dlabs, TI + glint(4) + + + i128 + Number Nine + README.I128, + i128(4) + + + i740 + Intel i740 + README.i740 + + + imstt + Integrated Micro Solns +   + + + intel + Intel i8xx/i9xx + README.intel, + intel(4) + + + mach64 + ATI Mach64 + README.ati + + + mga + Matrox + mga(4) + + + neomagic + NeoMagic + neomagic(4) + + + newport (-) + SGI Newport + README.newport, + newport(4) + + + nsc + National Semiconductor + nsc(4) + + + nv + NVIDIA + nv(4) + + + r128 + ATI Rage128 + README.r128, + r128(4) + + + radeon + ATI Radeon + radeon(4) + + + + rendition + Rendition + README.rendition, + rendition(4) + + + s3 + S3 (not ViRGE or Savage) +   + + + s3virge + S3 ViRGE + README.s3virge, + s3virge(4) + + + savage + S3 Savage + savage(4) + + + siliconmotion + Silicon Motion + siliconmotion(4) + + + sis + SiS + README.SiS, + sis(4) + + + sisusb + SiS USB + sisusb(4) + + + suncg14 (+) + Sun cg14 +   + + + suncg3 (+) + Sun cg3 +   + + + suncg6 (+) + Sun GX and Turbo GX +   + + + sunffb (+) + Sun Creator/3D, Elite 3D +   + + + sunleo (+) + Sun Leo (ZX) +   + + + + suntcx (+) + Sun TCX +   + + + tdfx + 3Dfx Voodoo Banshee, 3, 4 & 5 + tdfx(4) + + + tga + DEC TGA + README.DECtga + + + trident + Trident + trident(4) + + + tseng + Tseng Labs +   + + + v4l + Video4Linux + v4l(4) + + + vesa + VESA + vesa(4) + + + vmware + VMware guest OS + vmware(4) + + + voodoo + 3Dfx Voodoo 1 & 2 + voodoo(4) + + + wsfb + Workstation Framebuffer + wsfb(4) + + + xgi + XGI + xgi(4) + + + xgixp + XGI XP + xgixp(4) + + + + + + + + Drivers marked with (*) are present in a preliminary form in this release, + but are not complete and/or stable yet. + + + + Drivers marked with (+) are for Linux/Sparc only. + + + + Drivers marked with (-) are for Linux/mips only. + + + + + Input Drivers + + + X11R&relvers; includes the following input drivers: + + + + + + + + + + + + Driver Name + Description + Further Information + + + acecad + Acecad Flair + acecad(4) + + + aiptek(*) + Aiptek USB tablet + aiptek(4) + + + evdev(*) + Linux kernel EvDev + evdev(4) + + + joystick + Joystick + joystick(4) + + + kbd + generic keyboards (non-evdev systems) + kbd(4) + + + mouse + most mouse devices (non-evdev systems) + mousedrv(4) + + + synaptics + Synaptics & ALP touchpads + synaptics(4) + + + vmmouse + VMWare virtual mouse + vmmouse(4) + + + void + dummy device + void(4) + + + + + + + + Drivers marked with (*) are available for Linux only. + + + + + + Xorg server + + Loader and Modules + + + The Xorg server relies on the operating system's native + module loader support for handling program modules. The X + server makes use of modules for video drivers, X server + extensions, input device drivers, framebuffer layers, and + internal components used by some drivers (like XAA & EXA). + + + + The module interfaces (both API and ABI) used in this release are + subject to change without notice. While we will attempt to provide + backward compatibility for the module interfaces, we cannot + guarantee this. Compatibility in the other direction is explicitly + not guaranteed because new modules may rely on interfaces added in + new releases. + + + + Note about module security + The X server runs with root privileges, i.e., + the X server loadable modules also run with these privileges. + For this reason we recommend that all users be careful to only + use loadable modules from reliable sources, otherwise the + introduction of viruses and contaminated code can occur and + wreak havoc on your system. We hope to have a mechanism for + signing/verifying the modules that we provide available in a + future release. + + + + + Configuration File + + + The Xorg server uses a configuration file as the primary mechanism + for providing configuration and run-time parameters. The configuration + file format is described in detail in the + xorg.conf(5) manual page. + + + + Note that this release features significant improvements + for running the server without a configuration file, so many users + may find that that they don't need a configuration file. + + + + If you do need to customize the configuration file, see the xorg.conf manual page . You can also + check the driver-specific manual pages and the related + documentation (found at ) also. + + + + The recommended method for generating a configuration file is to use + the Xorg server itself. Run as root: + + + Xorg -configure + + and follow the instructions. + + + + + + Command Line Options + + + Command line options can be used to override some default + parameters and parameters provided in the configuration file. + These command line options are described in the Xorg(1) manual page. + + + + + Multi-head + + + Some multi-head configurations are supported in X11R&relvers;. + Support for multiple PCI/AGP cards may require a kernel with + changes to support VGA arbitration. + + + + One of the main problems is with drivers not sufficiently + initializing cards that were not initialized at boot time. This + has been improved somewhat with the INT10 support that is used by + most drivers (which allows secondary card to be "soft-booted", but + in some cases there are other issues that still need to be + resolved. Some combinations can be made to work better by changing + which card is the primary card (either by using a different PCI + slot, or by changing the system BIOS's preference for the primary + card). + + + + + Xinerama + + Xinerama is an X server extension that + allows multiple physical screens connected to multiple video devices + to behave as a single screen. With traditional multi-head in X11, + windows cannot span or cross physical screens. Xinerama removes this + limitation. Xinerama does, however, require that the physical screens + all have the same root depth, so it isn't possible, for example, to use + an 8-bit screen together with a 16-bit screen in Xinerama mode. + + + + Xinerama is not enabled by default, and can be enabled with the + command line option for the X server. + Note that enabling Xinerama may disable certain other extensions + which are not compatible with Xinerama. + + + + + DDC + + + The VESA® Display Data Channel + (DDC) standard allows + the monitor to tell the video card (or in some cases the + computer directly) about itself; particularly the supported + screen resolutions and refresh rates. + + + + Partial or complete DDC support is available in most of the video + drivers. DDC is enabled by default, but can be disabled with a + "Device" section entry: Option + "NoDDC". We have support for DDC versions 1 and 2; these + can be disabled independently with Option + "NoDDC1" and Option + "NoDDC2". + + + + At startup the server prints out DDC information from the display, + and can use this information to set the default monitor parameters, + or to warn about monitor sync limits if those provided in the + configuration file don't match those that are detected. + + + + Changed behavior caused by DDC. + + + Several drivers use DDC information to set the screen size and + pitch. This can be overridden by explicitly resetting it to + the and non-DDC default value 75 with the + command line option for the X + server, or by specifying appropriate screen dimensions with the + "DisplaySize" keyword in the "Monitor" section of the config + file. + + + + + + GLX and the Direct Rendering Infrastructure (DRI) + + + Direct rendered OpenGL® support is provided for several + hardware platforms by the Direct Rendering Infrastructure (DRI). + Further information about DRI can be found at the DRI Project's web site. The 3D + core rendering component is provided by Mesa. + + + + Of note is that this release supports building the X server using + the system-wide libdrm. Previously, drm was kept in the server's + tree and loaded as a module, rather than using the standard OS + mechanisms for managing shared libraries of code. This requires + that the server be built using a version of libdrm of 2.3.0 or + newer if it is to use DRM. + + + + + Terminate Server keystroke + + + The Xorg server has previously allowed users to exit the server + by pressing the keys + Control + + Alt + + Backspace. + While this function is still enabled by default in this release, + the keymap data usually used with Xorg, from the + xkeyboard-config project, has been modified to not map that + sequence by default, in order to reduce the chance that + inexperienced users will accidentally destroy their work. + + + Users who wish to have this functionality available by default + may enable it via the XKB configuration option + “”. For + instance, the setxkbmap command can be used + to enable this by running: + + setxkbmap -option "terminate:ctrl_alt_bksp" + + The XKB Configuration + Guide also includes + an example xorg.conf.d + file that sets the + “” + option by default on all keyboards. + Many desktop environments include XKB configuration options in + their preferences to enable this as well. + + + + + + X Server startup state + + + The X servers in the X11R&relvers; release now start by default + with an empty black screen and do not draw the mouse cursor until + a client sets the cursor image. To restore the classic behavior + of starting with the grey weave pattern and × cursor, start + the X server with the option. + + + + + + + + + + + + Font support + + + Details about the font support in X11R&relvers; can be + found in the Fonts in X11R&relvers; document. + + + + Default font installation directory + + + Previous versions of X installed font files under the + lib/X11/fonts subdirectory + of the X installation directory (for instance, in X11R6 releases, + /usr/X11R6/lib/X11/fonts + was commonly used). This release uses the default installation + path of the fonts + subdirectory of the datadir setting from the + GNU autoconf configuration. For instance, if the fonts are + configured with ./configure --prefix=/usr, + they will be installed under subdirectories of + /usr/share/fonts/X11. + The font module configure scripts all take an option of + + to override the default. If + is not specified, the fontutil pkg-config + file will be consulted to find the fontrootdir + specified when the fontutil module was + installed. + + + + + Bitmap font compression methods + + + The X11R&relvers; release supports PCF format bitmap fonts stored + uncompressed or compressed via the compress, + gzip, or bzip2 programs. + To utilize bzip2 compression, the libXfont + and mkfontscale modules must be built with + the — all other methods are + enabled by default. + + + To specify which compression method to use when installing + a font module from X11R&relvers; the configure scripts accept + an option of + , + where TYPE may be none, + compress, gzip, or + bzip2. + + + + + Type1 Font support + + + Previous versions of X came with two Postscript Type1 font + backends. The functionality from the “Type1” + backend has been replaced by the Type1 support in the + “FreeType” backend. + + + + + CID Font support + + + The CID-keyed font format was designed by Adobe Systems for + fonts with large character sets. The CID-keyed format is + obsolete, as it has been superseded by other formats such as + OpenType/CFF and support for CID-keyed fonts has been removed + from X11. + + + + + + + + + Build changes and issues + + + Silent build rules + + + Most of the modules in this release use the + AM_SILENT_RULES option of GNU automake 1.11. + When building the software, most output will show an abbreviated + format for the commands being run, such as: + + CC xmen.o + + To enable verbose output, showing all the arguments to the commands + being run, add the flag to the + make command line or add the flag + to the configure command. + + + + + New configure options for font modules + + + The bitmap font modules now accept a configure option of + to set the default for + all encodings to off, requiring builders to then pass + + flags for each encoding to be built. + + + + + New configure options for documentation in modules + + + As many more modules now contain documentation to be converted + from DocBook XML to text, HTML, PostScript, and/or PDF formats, + new standard options have been added to the configure macros + to control the build of these in the modules. + + + + + + + + Enables or disables use of the xmlto command to translate + DocBook XML to other formats. All DocBook XML conversions + require use of this command. + + + + + + + + + Enables or disables use of the Apache fop command to translate + DocBook XML to PostScript and PDF formats. + + + + + + + + + Enables or disables the build and installation of all + documentation except traditional man pages or those + covered by the --enable-devel-docs and --enable-specs options. + + + + + + + + + Enables or disables the build and installation of documentation + for developers of the X.Org software modules. + + + + + + + + + + Enables or disables the build and installation of the + formal specification documents for protocols and APIs. + + + + + + + + + + + Miscellaneous + + + This section describes other items of note for the + X11R&relvers; release. + + + + Socket directory ownership and permissions + + + The socket directories created in /tmp + are now required to be owned by root and have their sticky-bit + set. If the permissions are not set correctly, the component + using this directory will print an error message and fail to + start. Common socket directories that are known to be + affected include: + + + /tmp/.font-unix + /tmp/.ICE-unix + /tmp/.X11-unix + + + These directories are used by the font server + (xfs), applications using the Inter-Client + Exchange protocol (ICE) and the X server, + respectively. + + + + There are several solutions to the problem of when to create these + directories. They could be created at install time by the system's + installer if the /tmp dir is + persistent. They could be created at boot time by the system's + boot scripts (e.g., the init.d + scripts). Or, they could be created by PAM modules at service + startup or user login time. + + + + The solution chosen is platform dependent, and the system administrator + should be able to handle creating those directories on any systems that + do not have the correct ownership or permissions. + + + + + + + Deprecated components and removal plans + + + This section lists current plans for removal of obsolete or deprecated + components in the X.Org releases. As our releases are open source, + users who continue to require these can find the source in previous + releases and continue to use these, but the X.Org Foundation and its + volunteers have decided the burden of continued maintenance and + distribution in the core X11 releases outweighs the benefits of doing + so. In some cases, this is simply because no one has volunteered to do + continued maintenance, so if software is listed here that you need, you + can contact xorg@lists.freedesktop.org to volunteer to + take over maintainership, either inside or outside of the Xorg release + process. + + + + + Future Removals + + + + DGA version 2 + + + DGA 2.0 is included in &relvers;. Documentation for the client + libraries can be found in the + XDGA(3) man page. DGA should be + considered deprecated; if you are relying on it, please let us + know what you need it for so we can find better solutions. + In this release, support has been removed for all DGA + rendering and mapping code, leaving just mode setting and + raw input device access. + + + + + + Input device discovery via HAL + + + The Xorg server currently uses the HAL + framework to discover connected input devices, + receive notification of hotplug events for them, and to + retrieve configuration parameters for them. The HAL + maintainers have deprecated HAL, so the X.Org developers + have begun replacement with alternatives. As a result, + configuration of input devices via HAL + *.fdi files is no longer supported + on Linux platforms using udev, and may not be supported + on other platforms in future Xorg server releases. + + + + + + + + Removed in this Release + + + + Xprint + + + The Xprint server and extension were previously removed + from X11R7.5. This release removes Xprint support from + a number of client programs that still had it. + + + + + + Xsdl server + + + The experimental Xsdl server has never been finished or + maintained, and was removed in this release. + + + + + + Unmaintained extensions + + + Support has been removed from the X servers for the + following extensions, which were obsolete, not widely + used, or not working: + + Multi-Buffering + + + + + + + + + + + Attributions/Acknowledgements/Credits + + + + + This section lists the credits for the X11R&relvers; release. + For a more detailed breakdown, refer to the ChangeLog file in + the source tree for each module, the history in the xorg product in + freedesktop.org's git repositories or the + 'git log' information for individual source files. + + + + The X Window System has been a collaborative effort from its inception. + Our apologies for anyone or organization inadvertently overlooked. + Many individuals (including major contributors) who worked on X are + represented by their employers in this list. If you feel we have left + anyone out, please let us know. + + + + These people contributed in some way to X11R&relvers; + since the release of X11R&prevrelvers;: + + + 邓逸昕 + Aaron Plattner + Aaron Zang + Adam Jackson + Adam Tkac + Adrian 'Dagurashibanipal' von Bidder + Adrian Bunk + Alan Coopersmith + Alberto Milone + Alex Deucher + Alex Warg + Alexander Kabaev + Alp Toker + Andrej Gelenberg + Andres Salomon + Andrew Chant + Andrew Randrianasulu + Andrzej Hajda + Andy Furniss + Andy Ritger + Antoine Latter + Arkadiusz Miśkiewicz + Arnaud Fontaine + Auke Kok + Bart Massey + Bartek Iwaniec + Bartosz Brachaczek + Ben Byer + Ben Hutchings + Ben Skeggs + Benjamin Close + Benjamin Tissoires + Bernhard R. Link + Bob Ham + Brian Paul + Brice Goglin + Bryce Harrington + Carl Worth + Carlos Garnacho + Carsten Meier + Cedric Cellier + Chase Douglas + Chris Bagwell + Chris Ball + Chris Dekter + Chris Humbert + Chris Wilson + Christian Bühler + Christian Hartmann + Christian Zander + Christoph Pfister + Christopher James Halse Rogers + Cody Maloney + Colin Harrison + Colin Watson + Cooper Yuan + Corbin Simpson + Csillag Kristof + Cyril Brulebois + Dan Nicholson + Daniel Drake + Daniel Kahn Gillmor + Daniel Stone + Dave Airlie + David Ge + David James + David Ronis + David Woodhouse + Diego 'Flameeyes' Pettenò + Dima Kogan + Dirk Wallenstein + Dmitry Torokhov + Dominik Jasiok + Donnie Berkholz + Eamon Walsh + Ed Schouten + Edward Moy + Edward O'Callaghan + Egbert Eich + Eric Anholt + Éric Piel + Eric Sesterhenn + Fabio Pedretti + Fernando Carrijo + Francisco Jerez + Frank Huang + Fredrik Höglund + Gabor Z. Papp + Gaetan Nadon + Geoffrey Li + Guillem Jover + Hans Nieser + Heikki Lindholm + Henning Sten + Henry Zhao + Hiroyuki Ikezoe + Horst Wente + Hunk Cui + Ian Osgood + Ian Romanick + Ingmar Vanhassel + Jakob Bornecrantz + James Cloos + James Jones + James Le Cuirot + Jamey Sharp + Jan Hauffa + Jens Petersen + Jeremy Huddleston + Jeremy Kolb + Jeroen Hoek + Jerome Glisse + Jesse Adkins + Jesse Barnes + Jim Ingram + Jim Ramsay + Joachim Breitner + Jon TURNEY + Josh Triplett + Julien Cristau + Julien Danjou + Juliusz Chroboczek + Justin Mattock + Kalle Olavi Niemitalo + Karl Tomlinson + Kees Cook + Keith Packard + Kenneth Graunke + Kevin E Martin + Kevin Van Vechten + Kim Woelders + Kok, Auke + Kristian Høgsberg + Kusanagi Kouichi + Lee Leahu + Leif Middelschulte + Leonardo Chiquitto + Lubos Lunak + Luc Verhaegen + Luca Tettamanti + Ma Ling + Maarten Maathuis + Macpaul Lin + Magnus Kessler + Marc Majka + Marcin Baczyński + Marcin Kościelnicki + Marcin Slusarz + Marek Olšák + Mario Kleiner + Mark Kettenis + Marko Myllynen + Markus Duft + Markus Gapp + Markus Strobl + Mart Raudsepp + Martin Ettl + Martin Otte + Martin Pärtel + Martin-Éric Racine + Márton Németh + Matt Dew + Matt Turner + Matteo Delfino + Matthias Hopf + Matthieu Herrb + Matthijs Kooijman + Michael Cree + Michael Jansen + Michael Olbrich + Michael Ost + Michael Stapelberg + Michael Vogt + Michał Górny + Michel Dänzer + Mikhail Gusarov + Nicolai Hähnle + Nicolas Boullis + Nicolas George + Nicolas Reinecke + Nigel Tamplin + Nirbheek Chauhan + Oldřich Jedlička + Oliver McFadden + Olivier Samyn + Osamu Sayama + Oswald Buddenhagen + Otavio Salvador + Owain G. Ainsworth + Owen W. Taylor + Patrick Caulfield + Patrick Curran + Patrick E. Kane + Patrick Guimond + Paul Bender + Paul Loewenstein + Paul "TBBle" Hampson + Pauli Nieminen + Paulo César Pereira de Andrade + Paulo Ricardo Zanoni + Peter Harris + Peter Hutterer + Peter Korsgaard + Petr Salinger + Philippe Ribet + Pierre-Loup A. Griffais + Rami Ylimäki + Rémi Cardona + Rémi Denis-Courmont + Richard Barnette + Richard Purdie + Rob Taylor + Robert Bragg + Robert Hooker + Robert Morell + Roel Kluin + Roland Scheidegger + Ruediger Oertel + Ryan Hajdaj + Sam Lau + Sami Farin + Samuel Thibault + Sascha Hlusiak + Sedat Dilek + Shunichi Fuji + Simon Farnsworth + Simon Thum + Søren Sandmann Pedersen + Thien-Thi Nguyen + Thomas Coppi + Thomas Hellstrom + Thomas Hunger + Thomas Jaeger + Tiago Vignatti + Tilman Sauerbeck + Tim Yamin + Timo Aaltonen + Timo Myyra + Tobias Droste + Tobias Koch + Tollef Fog Heen + Tomas Carnecky + Tomáš Chvátal + Tormod Volden + Trevor Woerner + Ville Syrjälä + Vincent Torri + Walter Harms + Will Thompson + Wolfram + Xavier Chantry + Xiaoyang Yu (Max) + Y.C. Chen + Yaakov Selkowitz + Yang Zhao + Yann Droneaud + Yannick Heneault + Zephaniah E. Hull + Zhao Yakui + + + + + This product includes software developed by: + + 2d3d Inc. + 3Dlabs Inc. Ltd. + Aaron Plattner + Adam de Boor + Adam Jackson + Adobe Systems Inc. + Advanced Micro Devices, Inc. + After X-TT Project + AGE Logic Inc. + Alan Coopersmith + Alan Cox + Alan Hourihane + Alexander Gottwald + Alex Deucher + Alex Williamson + Alexei Gilchrist + Anders Carlsson + Andreas Luik + Andreas Monitzer + Andreas Robinson + Andrei Barbu + Andrew C Aitchison + Andrey A. Chernov + Andy Ritger + Angus Lees + Ani Joshi + Anton Zioviev + Apollo Computer Inc. + Apple Computer Inc. + Apple Inc. + Ares Software Corp. + Arnaud LE HORS + Arne Schwabe + ASPEED Technology Inc. + AT&T Inc. + ATI Technologies Inc. + Bart Massey + Bart Trojanowski, Symbio Technologies, LLC + BEAM Ltd. + Benjamin Herrenschmidt + Benjamin Rienfenstahl + Ben Skeggs + Beth Mardutho: The Syriac Institute + Bigelow and Holmes + Bill Reynolds + Bitstream Inc. + Bogdan Diaconescu + Branden Robinson + Brian Fundakowski Feldman + Brian Goines + Bogdan D. + Brian Paul + Bruce Kalk + Bruno Haible + Bryan Stine + Bryan W. Headley. + C. Scott Ananian + Carl Switzky + Catharon Productions Inc. + Charles Murcko + Chen Xiangyang + Chisato Yamauchi + Chris Constello + Chris Salch + Christian Thaeter + Christian Zietz + Cognition Corp. + Compaq Computer Corporation + Concurrent Computer Corporation + Conectiva S.A. + Corin Anderson + Corvin Zahn. + Cronyx Ltd. + Craig Struble + Daewoo Electronics Co. Ltd. + Dag-Erling Smørgrav + Dale Schumacher + Damien Miller + Daniel Berrange + Daniel Borca + Daniel Stone + Daniver Limited + Daryll Strauss + Data General Corporation + Dave Airlie + David Bateman + David Dawes + David E. Wexelblat + David Holland + David J. McKay + David McCullough + David Mosberger-Tang + David Reveman + David S. Miller + David Woodhouse + Davor Matic + Deron Johnson + Digeo Inc. + Dennis De Winter + Digital Equipment Corporation + Dirk Hohndel + Dmitry Golubev + Donnie Berkholz + DOS-EMU-Development-Team + Doug Anson + Drew Parsons + Earle F. Philhower III + Edouard TISSERANT + Eduard Fuchs + Eduardo Horvath + Egbert Eich + Egmont Koblinger + Elliot Lee + Eric Anholt + Eric Fortune + Eric Sunshine + Erik Fortune + Erik Nygren + Evans & Sutherland Computer Corp. + Fabio Massimo Di Nitto + Fabrizio Gennari + Fedor P. Goncharov + Felix Kühling + Finn Thoegersen + Francesco Zappa Nardelli + Frank C. Earl + Florian Loitsch + Francisco Jerez + Fred Hucht + Frederic Lepied + Fredrik Höglund + Free Software Foundation + Fujitsu Limited + Fujitsu Open Systems Solutions Inc. + Fuji Xerox Co. Ltd. + Gaetan Nadon + Gareth Hughes + Geert Uytterhoeven + George Fufutos + George Sapountzis + Gerrit Jan Akkerman + Gerry Toll + Ghozlane Toumi + Glenn G. Lai + GNOME Foundation + Go Watanabe + Google Summer of Code participants + Greg Kroah-Hartman + Gregory Mokhin + Greg Parker + GROUPE BULL + Guillem Jover + Guy Martin + Hans Oey + Harald Koenig + Harm Hanemaayer + Harold L Hunt II + Harry Langenbacher + Hartwig Felger + Henry A. Worth + Henry Davies + Hewlett-Packard Company + Hideki Hiura + Hitachi Ltd. + Holger Veit + Hong Bo Peng + Howard Greenwell + Hummingbird Communications Ltd. + Ian Romanick + IBM Corporation + Inst. of Software Academia Sinica + Intel Corporation + INTERACTIVE Systems Corporation + Itai Nahshon + Itronix Inc. + Ivan Kokshaysky + Ivan Pascal + Jakub Jelinek + James Tsillas + Jamey Sharp + Jason Bacon + Jaymz Julian + Jean-loup Gailly + Jeff Hartmann + Jeff Kirk + Jeffrey Hsu + Jehan Bing + Jeremy C. Reed + Jeremy Katz + Jeremy Huddleston + Jerome Glisse + Jesse Barnes + Jim Gettys + Jim Tsillas + Joerg Sonnenberger + John Dennis + John Harper + John Heasley + Jonathan Adamczewski + Jon Block + Jon Smirl + Jon Tombs + Jörg Bösner + Jorge Delgado + José Fonseca + Josh Triplett + Joseph Friedman + Joseph P. Skudlarek + Joseph V. Moss + Julio M. Merino Vidal + Juan Romero Pardines + Juliusz Chroboczek + Jyunji Takagi + Kaleb Keithley + Kazushi (Jam) Marukawa + Kazuyuki (ikko-) Okamoto + Kazutaka YOKOTA + Kean Johnston + Keith Packard + Keith Whitwell + Kensuke Matsuzaki + Kevin E. Martin + Kim woelders + Kristian Høgsberg + Larry Wall + Lars Knoll + Lawrence Berkeley Laboratory + Leif Delgass + Lennart Augustsson + Leon Shiman + Lexmark International Inc. + Linus Torvalds + Linuxcare Inc. + Lorens Younes + Luc Verhaegen + Machine Vision Holdings Inc. + Mandriva Linux + Manfred Brands + Manish Singh + Marc Aurele La France + Mark Adler + Mark J. Kilgard + Mark Kettenis + Mark Leisher + Mark Smulders + Mark Vojkovich + Martin Husemann + Marvin Solomon + Massachusetts Inst. Of Technology + Matrox Graphics + Matt Dew + Matthew Grossman + Matthias Hopf + Matthias Ihmig + Matthieu Herrb + Metro Link Inc. + Michal Rehacek + Michael Bax + Michael H. Schimek + Michael P. Marking + Michael Schimek + Michael Smith + Michel Dänzer + Mike A. Harris + Mike Harris + Ming Yu + MIPS Computer Systems Inc. + MontaVista Software Inc. + National Security Agency + National Semiconductor + NCR Corporation Inc. + Neil Brown + NetBSD Foundation + Netscape Communications Corp. + Network Computing Devices Inc. + New Mexico State University + Nicholas Joly + Nicholas Miell + Nicholas Wourms + Nicolai Haehnle + Noah Levitt + Nolan Leake + Nokia Corporation + Nokia Home Communications + Novell Inc. + Nozomi YTOW + NTT Software Corporation + Number Nine Computer Corp. + Number Nine Visual Technologies + NVIDIA Corporation + Oivier Danet + Oki Technosystems Laboratory Inc. + Olivetti Research Limited + OMRON Corporation + Open Software Foundation + Open Text Corporation + OpenedHand Ltd. + Oracle Corp. + Orest Zborowski + Owen Taylor + Pablo Saratxaga + Panacea Inc. + Panagiotis Tsirigotis + Paolo Severini + Pascal Haible + Patrick Lecoanet + Patrick Lerda + Paul Anderson + Paul Elliott + Paul Mackerras + Peter Breitenlohner + Peter Hutterer + Peter Kunzmann + Peter Osterlund + Peter Trattler + Phil Karlton + Philip Blundell + Philip Homburg + Philip Langdale + Precision Insight Inc. + Prentice Hall + Quarterdeck Office Systems + Radek Doulik + Ralf Habacker + Randy Hendry + Ranier Keller + Red Hat Inc. + Regis Cridlig + Rene Cougnenc + Richard A. Hecker + Richard Burdick + Rich Murphey + Rickard E. Faith + Rik Faith + Robert Chesler + Robert Millan + Robert V. Baron + Robert W. Scheifler + Robin Cutshaw + Roland Mainz + Roland Scheidegger + Ronny Vindenes + Russ Blaine + Ryan Breen + Ryan Lortie + Ryan Underwood + S. Lehner + S3 Graphics Inc. + Sam Leffler + Santa Cruz Operation Inc. + Sascha Hlusiak. + SciTech Software + Scott Laird + Sebastien Marineau + Serge Winitzki + Sergey Vovk + Shigehiro Nomura + ShoGraphics Inc. + Shunsuke Akiyama + Silicon Graphics Computer Systems + Silicon Graphics, Inc. + Silicon Integrated Systems Corp + Silicon Motion Inc. + Simon P. Cooper + Simon Thum + Snitily Graphics Consulting Services + Sony Corporation + Søren Sandmann + SRI + Stanislav Brabec + Stefan Bethge + Stefan Dirsch + Stefan Gmeiner + Stephane Marchesin + Stephan Lang + Steven Lang + Stuart Kreitman + Sun Microsystems Inc. + SunSoft Inc. + SuSE Inc + Sven Luther + Takis Psarogiannakopoulos + Takuma Murakami + Takuya SHIOZAKI + T. A. Phelps + Tektronix Inc. + Theo de Raadt + Theodore Ts'o + The Open Group + The Unichrome Project + The Weather Channel Inc. + Thomas E. Dickey + Thomas G. Lane + Thomas Hellström + Thomas Mueller + Thomas Roell + Thomas Thanner + Thomas Winischhofer + Thomas Wolfram + Thorsten.Ohl + Tiago Gons + Tilman Sauerbeck + Todd C. Miller + Tomohiro KUBOTA + Torrey Lyons + Torrey T. Lyons + TOSHIBA Corp. + Toshimitsu Tanaka + Travis Tilley + Trolltech AS + Troy D. Hanson + Tungsten Graphics Inc. + Tuomas J. Lukka + Ty Sarna + UCHIYAMA Yasushi + Unicode Inc. + UniSoft Group Limited + University of California + University of South Australia + University of Utah + University of Wisconsin + UNIX System Laboratories Inc. + URW++ GmbH + Valery Inozemtsev + VA Linux Systems + VIA Technologies Inc. + Video Electronics Standard Assoc. + VMware Inc. + Vrije Universiteit + Wittawat Yamwong + Wyse Technology Inc. + X Consortium + XFree86 Project Inc. + Xi Graphics Inc. + X-Oz Technologies + X-TrueType Server Project + X.Org Foundation + XGI Technology + Yu Shao + Zack Rusin + Zephaniah E. Hull + Zhenyu Wang + + + + + This product includes software developed by The XFree86 Project, Inc + () and its contributors. + + + + This product includes software that is based in part on the work of the + FreeType Team (). + + + + This product includes software developed by the University of California, + Berkeley and its contributors. + + + + This product includes software developed by Christopher G. Demetriou. + + + + This product includes software developed by the NetBSD Foundation, Inc. + () and its contributors. + + + + This product includes software developed by X-Oz Technologies + (). + + + + +
diff --git a/doc/xorg-docs/general/Versions.xml b/doc/xorg-docs/general/Versions.xml new file mode 100644 index 000000000..913b56236 --- /dev/null +++ b/doc/xorg-docs/general/Versions.xml @@ -0,0 +1,329 @@ + + +
+ + + +X.Org Version Numbering Schemes + +The XFree86 Project, Inc + + +Updated for X.Org by Keith Packard, Kevin E. Martin, and Alan Coopersmith + +November 2010 + + + + +X.Org has adopted the same basic numbering scheme used by the XFree86 +Project, Inc. for their releases. The actual numbers are different, but the +basic scheme is the same. This document reflects the policy that X.Org uses. + + + + + + + +Module Versions + + +Starting with the X11R7.0 release, each module has its own version number. +For those without a natural starting point, the version numbers started at +1.0. For instance, the X11R7.0 release included the xorg-server 1.0 +module. As modules are released independently from the rest of the +window system, the module version is the most accurate source of version +information. For instance, there are many X server releases in a year, +but generally only one window system release, so an X server version number +such as 1.7.7 is more informative than the X11R7.5 version for the window +system katamari release. + + + +Unfortunately, up through the X server 1.3 release, the X server +used the Window System version when reporting its version number +in log files, the -version option, and the connection setup string +(displayed by xdpyinfo). This was corrected with X server 1.3, which +caused the visible version number string to appear to jump backwards +from 7.2 to 1.3. + + + + +Releases, Development Streams and Branches + + +X.Org has two release branches for the X server software, and several +other modules with active ongoing development. +First is the trunk of the git repository. This is +the main development stream, where all new work and work for future +releases is done. + + + +Second is the stable bugfix branch for the latest full release. It is +created around the time of the release. The branch will be named for the +release version, such as server-1.9-branch +for the X server 1.9.x series of releases. +Fixes for bugs found in the release will be added to this branch (as +well as the trunk), and updates to this release (if any) will be cut +from this branch. Similar stable branches are present for previous full +releases. + + + +The X.Org Foundation is planning to make full releases from the main +development stream at regular intervals in the 6-12 month range. The +feature freezes for these releases will usually be 2-3 months before the +release dates. This general plan is a goal, not a binding commitment. +The actual release intervals and dates will depend to a large degree on +the resource available to X.Org. +Update/bugfix releases will be made on an as-required basis, +depending also on the availability of resources, and will generally be +limited to serious bug and security fixes. New features will not +usually be added in update releases. + + + +Aside from actual releases, snapshots of the active release branches +are tagged in the git repository from time to time. Each such snapshot +has an identifiable version number. + + + + + +Current Version Numbering Scheme + + +Starting with the main development branch after X11R6.7, the X.Org +versions are numbered according to the scheme outlined here. + + + +The version numbering format is M.m.P.s, +where M is the major version number, +m is the minor version number, +P is the patch level, and +s is the snapshot number. +Full releases have P set to zero, and it is +incremented for each subsequent bug fix release on the post-release +stable branch. The snapshot number s is +present only for between-release snapshots of the development and +stable branches. + + + +Development Branch + + +Immediately after forming a release stable branch, the patch level +number for the main development branch is bumped to 99, and the snapshot +number is reset. The snapshot number is incremented for each tagged +development snapshot. The git tag for snapshots is +xorg-server-M.m.P.s. +When the development branch enters feature +freeze, the snapshot number is bumped to 900. A stable branch may be +created for the next full release at any time after the feature freeze. +When it is, the branch is called +server-M.m-branch. The +snapshot number is incremented from there until the release is +finalised. Each of these snapshots is a release candidate. When the +release is finalised, the minor version is incremented, the patch level +is set to zero, and the snapshot number removed. + + + +Here's an example which shows the version number sequence for the +development leading up to version 1.8: + + + + + + +1.7.99.1 + + +The first snapshot of the pre-1.8 development branch. + + + + +1.7.99.23 + + +The twenty-third snapshot of the pre-1.8 development branch. + + + + +1.7.99.900 + + +The start of the 1.8 feature freeze. + + + + +1.7.99.903 + + +The third 1.8 release candidate. + + + + +1.8.0 + + +The 1.8 release. + + + + +1.8.99.1 + + +The first pre-1.9 development snapshot, which is the first main +branch snapshot after creating the 1.8 stable branch. + + + + + + + + + +Stable Branch + + +After a full release, the stable branch for the release will be +maintained with bug fixes and important updates until the next full +release. Any snapshots on this branch are considered release +candidates, which is indicated by setting s +to a number above +900. The snapshot number is incremented for each release candidate +until the update release is finalised. The patch level value +(P) is incremented for each update release. + + + +Here's an example which shows a version number sequence for a 1.8.x +stable branch: + + + + + + +1.8.0 + + +The 1.8 release. + + + + +1.8.0.901 + + +The first pre 1.8.1 snapshot. + + + + +1.8.0.903 + + +The third pre 1.8.1 snapshot, also known as the third 1.8.1 release +candidate. + + + + +1.8.1 + + +The 1.8.1 release. + + + + +1.8.1.901 + + +The first pre 1.8.2 snapshot. + + + + +1.8.2 + + +The 1.8.2 release. + + + + + + + + + + + +Finding the X.Org X Server Version From a Client + + +The X.Org X servers report a VendorRelease value that +matches the X.Org version number. There have been some cases of releases where +this value wasn't set correctly. The rules for interpreting this value +as well as the known exceptions are outlined here. + + + +As noted above, the version reported by VendorRelease +changed from the window system version to the X server version starting in +the xorg-server 1.3 release. + + + +For all X.Org development and release versions using this numbering +scheme, the VendorRelease value is +MMmmPPsss. That is, version +M.m.P.s has VendorRelease set to +M * 10000000 + m * 100000 + P * 1000 + s. + + + +The following is a code fragment taken from xdpyinfo.c +that shows how the VendorRelease information can be +interpreted. + + + + + + if (strstr(ServerVendor(dpy), "X.Org")) { + int vendrel = VendorRelease(dpy); + + printf("X.Org version: "); + printf("%d.%d.%d", vendrel / 10000000, + (vendrel / 100000) % 100, + (vendrel / 1000) % 100); + if (vendrel % 1000) { + printf(".%d", vendrel % 1000); + } + } + + + + + + +
diff --git a/doc/xorg-docs/general/fonts/Makefile.am b/doc/xorg-docs/general/fonts/Makefile.am new file mode 100644 index 000000000..57f9bd2e3 --- /dev/null +++ b/doc/xorg-docs/general/fonts/Makefile.am @@ -0,0 +1,10 @@ +if ENABLE_DOCS + +doc_sources = fonts.xml + +xmldir = $(docdir)/fonts +dist_xml_DATA = $(doc_sources) + +include $(top_srcdir)/xmlrules.in + +endif ENABLE_DOCS diff --git a/doc/xorg-docs/man/general/Makefile.in b/doc/xorg-docs/general/fonts/Makefile.in similarity index 50% rename from doc/xorg-docs/man/general/Makefile.in rename to doc/xorg-docs/general/fonts/Makefile.in index 77fd37755..f58ee02b4 100644 --- a/doc/xorg-docs/man/general/Makefile.in +++ b/doc/xorg-docs/general/fonts/Makefile.in @@ -14,27 +14,28 @@ @SET_MAKE@ -# Copyright 2005 Red Hat, Inc. -# -# Permission to use, copy, modify, distribute, and sell this software -# and its documentation for any purpose is hereby granted without fee, -# provided that the above copyright notice appear in all copies and -# that both that copyright notice and this permission notice appear in -# supporting documentation, and that the name of Red Hat not be used in -# advertising or publicity pertaining to distribution of the software -# without specific, written prior permission. Red Hat makes no -# representations about the suitability of this software for any -# purpose. It is provided "as is" without express or implied warranty. -# -# RED HAT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN -# NO EVENT SHALL RED HAT BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE -# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE -# USE OR PERFORMANCE OF THIS SOFTWARE. # -# Process this file with autoconf to create configure. +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice (including the next +# paragraph) shall be included in all copies or substantial portions of the +# Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# srcdir = @srcdir@ top_srcdir = @top_srcdir@ @@ -58,8 +59,11 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -subdir = man/general -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +DIST_COMMON = $(am__dist_xml_DATA_DIST) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/xmlrules.in +@ENABLE_DOCS_TRUE@@HAVE_FOP_TRUE@@HAVE_XMLTO_TRUE@am__append_1 = $(doc_sources:.xml=.ps) $(doc_sources:.xml=.pdf) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@am__append_2 = $(doc_sources:.xml=.txt) +subdir = general/fonts ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ @@ -68,48 +72,83 @@ mkinstalldirs = $(SHELL) $(install_sh) -d CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = +am__dist_xml_DATA_DIST = fonts.xml am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -am__installdirs = "$(DESTDIR)$(miscmandir)" -miscmanDATA_INSTALL = $(INSTALL_DATA) -DATA = $(miscman_DATA) +am__installdirs = "$(DESTDIR)$(xmldir)" "$(DESTDIR)$(xmldir)" +dist_xmlDATA_INSTALL = $(INSTALL_DATA) +xmlDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_xml_DATA) $(xml_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHANGELOG_CMD = @CHANGELOG_CMD@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ +DEPDIR = @DEPDIR@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ENABLE_DOCS_FALSE = @ENABLE_DOCS_FALSE@ +ENABLE_DOCS_TRUE = @ENABLE_DOCS_TRUE@ +ENABLE_SPECS_FALSE = @ENABLE_SPECS_FALSE@ +ENABLE_SPECS_TRUE = @ENABLE_SPECS_TRUE@ +EXEEXT = @EXEEXT@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ -HARDCOPYDIR = @HARDCOPYDIR@ +FOP = @FOP@ +GREP = @GREP@ +HAVE_FOP_FALSE = @HAVE_FOP_FALSE@ +HAVE_FOP_TRUE = @HAVE_FOP_TRUE@ +HAVE_STYLESHEETS_FALSE = @HAVE_STYLESHEETS_FALSE@ +HAVE_STYLESHEETS_TRUE = @HAVE_STYLESHEETS_TRUE@ +HAVE_XMLTO_FALSE = @HAVE_XMLTO_FALSE@ +HAVE_XMLTO_TEXT_FALSE = @HAVE_XMLTO_TEXT_FALSE@ +HAVE_XMLTO_TEXT_TRUE = @HAVE_XMLTO_TEXT_TRUE@ +HAVE_XMLTO_TRUE = @HAVE_XMLTO_TRUE@ +INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ +MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ +OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -117,13 +156,23 @@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ +STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ VERSION = @VERSION@ -X11DOCDIR = @X11DOCDIR@ -ac_ct_STRIP = @ac_ct_STRIP@ +XMLTO = @XMLTO@ +XORG_MAN_PAGE = @XORG_MAN_PAGE@ +XORG_SGML_PATH = @XORG_SGML_PATH@ +XSL_STYLESHEET = @XSL_STYLESHEET@ +ac_ct_CC = @ac_ct_CC@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ @@ -133,59 +182,54 @@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ -miscmandir = $(MISC_MAN_DIR) -miscman_PRE = \ - Consortium.man \ - security.man \ - Standards.man \ - X.man \ - XOrgFoundation.man \ - Xprint.man \ - XProjectTeam.man +@ENABLE_DOCS_TRUE@doc_sources = fonts.xml +@ENABLE_DOCS_TRUE@xmldir = $(docdir)/fonts +@ENABLE_DOCS_TRUE@dist_xml_DATA = $(doc_sources) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@xml_DATA = \ +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(doc_sources:.xml=.html) \ +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(am__append_1) \ +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(am__append_2) +@ENABLE_DOCS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FLAGS = \ +@ENABLE_DOCS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ -m $(XSL_STYLESHEET) \ +@ENABLE_DOCS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --searchpath $(XORG_SGML_PATH)/X11 \ +@ENABLE_DOCS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam html.stylesheet=$(STYLESHEET_SRCDIR)/xorg.css \ +@ENABLE_DOCS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam img.src.path=$(abs_builddir)/ -miscman_DATA = $(miscman_PRE:man=@MISC_MAN_SUFFIX@) -CLEANFILES = $(miscman_DATA) -SED = sed - -# Strings to replace in man pages -XORGRELSTRING = @PACKAGE_STRING@ -XORGMANNAME = X Version 11 -MAN_SUBSTS = \ - -e 's|__vendorversion__|"$(XORGRELSTRING)" "$(XORGMANNAME)"|' \ - -e 's|__xorgversion__|"$(XORGRELSTRING)" "$(XORGMANNAME)"|' \ - -e 's|__projectroot__|$(prefix)|g' \ - -e 's|__appmansuffix__|$(APP_MAN_SUFFIX)|g' \ - -e 's|__libmansuffix__|$(APP_LIB_SUFFIX)|g' \ - -e 's|__miscmansuffix__|$(MISC_MAN_SUFFIX)|g' - -SUFFIXES = .$(MISC_MAN_SUFFIX) .man -EXTRA_DIST = $(miscman_PRE) Xprint.sgml +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@CLEANFILES = $(xml_DATA) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@SUFFIXES = .xml .ps .pdf .txt .html all: all-am .SUFFIXES: -.SUFFIXES: .$(MISC_MAN_SUFFIX) .man -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +.SUFFIXES: .xml .ps .pdf .txt .html +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/xmlrules.in $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ @@ -194,9 +238,9 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/general/Makefile'; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign general/fonts/Makefile'; \ cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign man/general/Makefile + $(AUTOMAKE) --foreign general/fonts/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -210,27 +254,44 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(top_srcdir)/configure: $(am__configure_deps) +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh uninstall-info-am: -install-miscmanDATA: $(miscman_DATA) +install-dist_xmlDATA: $(dist_xml_DATA) @$(NORMAL_INSTALL) - test -z "$(miscmandir)" || $(mkdir_p) "$(DESTDIR)$(miscmandir)" - @list='$(miscman_DATA)'; for p in $$list; do \ + test -z "$(xmldir)" || $(mkdir_p) "$(DESTDIR)$(xmldir)" + @list='$(dist_xml_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ - echo " $(miscmanDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(miscmandir)/$$f'"; \ - $(miscmanDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(miscmandir)/$$f"; \ + echo " $(dist_xmlDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(xmldir)/$$f'"; \ + $(dist_xmlDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(xmldir)/$$f"; \ done -uninstall-miscmanDATA: +uninstall-dist_xmlDATA: @$(NORMAL_UNINSTALL) - @list='$(miscman_DATA)'; for p in $$list; do \ + @list='$(dist_xml_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(miscmandir)/$$f'"; \ - rm -f "$(DESTDIR)$(miscmandir)/$$f"; \ + echo " rm -f '$(DESTDIR)$(xmldir)/$$f'"; \ + rm -f "$(DESTDIR)$(xmldir)/$$f"; \ + done +install-xmlDATA: $(xml_DATA) + @$(NORMAL_INSTALL) + test -z "$(xmldir)" || $(mkdir_p) "$(DESTDIR)$(xmldir)" + @list='$(xml_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(xmlDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(xmldir)/$$f'"; \ + $(xmlDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(xmldir)/$$f"; \ + done + +uninstall-xmlDATA: + @$(NORMAL_UNINSTALL) + @list='$(xml_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(xmldir)/$$f'"; \ + rm -f "$(DESTDIR)$(xmldir)/$$f"; \ done tags: TAGS TAGS: @@ -240,6 +301,7 @@ CTAGS: distdir: $(DISTFILES) + $(mkdir_p) $(distdir)/../.. @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ @@ -270,7 +332,7 @@ check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: - for dir in "$(DESTDIR)$(miscmandir)"; do \ + for dir in "$(DESTDIR)$(xmldir)" "$(DESTDIR)$(xmldir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-am @@ -298,9 +360,11 @@ distclean-generic: maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." +@ENABLE_DOCS_FALSE@clean-local: +@HAVE_XMLTO_FALSE@clean-local: clean: clean-am -clean-am: clean-generic mostlyclean-am +clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile @@ -316,7 +380,7 @@ info: info-am info-am: -install-data-am: install-miscmanDATA +install-data-am: install-dist_xmlDATA install-xmlDATA install-exec-am: @@ -342,20 +406,37 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am uninstall-miscmanDATA +uninstall-am: uninstall-dist_xmlDATA uninstall-info-am \ + uninstall-xmlDATA -.PHONY: all all-am check check-am clean clean-generic distclean \ - distclean-generic distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-exec \ - install-exec-am install-info install-info-am install-man \ - install-miscmanDATA install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ - uninstall-am uninstall-info-am uninstall-miscmanDATA +.PHONY: all all-am check check-am clean clean-generic clean-local \ + distclean distclean-generic distdir dvi dvi-am html html-am \ + info info-am install install-am install-data install-data-am \ + install-dist_xmlDATA install-exec install-exec-am install-info \ + install-info-am install-man install-strip install-xmlDATA \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am uninstall uninstall-am uninstall-dist_xmlDATA \ + uninstall-info-am uninstall-xmlDATA -.man.$(MISC_MAN_SUFFIX): - sed $(MAN_SUBSTS) < $< > $@ +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@%.txt: %.xml $(dist_xml_DATA) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) txt $< + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@%.html: %.xml $(dist_xml_DATA) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) xhtml-nochunks $< + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@%.pdf: %.xml $(dist_xml_DATA) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop pdf $< + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@%.ps: %.xml $(dist_xml_DATA) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop ps $< + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@chunked-html: $(doc_sources) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) -o html xhtml $(doc_sources) + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@clean-local: +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)rm -fr html/ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/doc/xorg-docs/general/fonts/fonts.xml b/doc/xorg-docs/general/fonts/fonts.xml new file mode 100644 index 000000000..72c07238f --- /dev/null +++ b/doc/xorg-docs/general/fonts/fonts.xml @@ -0,0 +1,1950 @@ + + %defs; +]> + +
+ + + +Fonts in X11R&relvers; +JuliuszChroboczek +jch@freedesktop.org + +23 October 2009 + + + + +Introduction + + +This document describes the support for fonts in X11R&relvers;. + is aimed at the +casual user wishing to install fonts in X11R&relvers; the rest of the +document describes the font support in more detail. + + + +We assume some familiarity with digital fonts. If anything is not +clear to you, please consult at the +end of this document for background information. + + + +Two font systems + + +X11 includes two font systems: the original core X11 fonts +system, which is present in all implementations of X11, and the Xft +fonts system, which may not yet be distributed with implementations of +X11 that are not based on either XFree86 or X11R6.8 or later. + + + +The core X11 fonts system is directly derived from the fonts system +included with X11R1 in 1987, which could only use monochrome bitmap +fonts. Over the years, it has been more or less happily coerced into +dealing with scalable fonts and rotated glyphs. + + + +Xft was designed from the start to provide good support for scalable +fonts, and to do so efficiently. Unlike the core fonts system, it +supports features such as anti-aliasing and sub-pixel rasterisation. +Perhaps more importantly, it gives applications full control over the +way glyphs are rendered, making fine typesetting and WYSIWIG display +possible. Finally, it allows applications to use fonts that are not +installed system-wide for displaying documents with embedded fonts. + + + +Xft is not compatible with the core fonts system: usage of Xft +requires fairly extensive changes to toolkits (user-interface +libraries). While X.Org will continue to maintain the core fonts +system, toolkit authors are encouraged to switch to Xft as soon as +possible. + + + + + + + +Installing fonts + + +This section explains how to configure both Xft and the core fonts +system to access newly-installed fonts. + + + +Configuring Xft + + +Xft has no configuration mechanism itself, it relies upon the +fontconfig +library to configure and customise fonts. That library is +not specific to the X Window system, and does not rely on any +particular font output mechanism. + + + +Installing fonts in Xft + + +Fontconfig looks for fonts in a set of well-known directories that +include all of X11R&relvers;'s standard font directories +(`/usr/share/fonts/X11/*') by default) as well as a +directory called `.fonts/' in the user's home directory. +Installing a font for use by Xft applications is as simple +as copying a font file into one of these directories. + + +$ cp lucbr.ttf ~/.fonts/ + + +Fontconfig will notice the new font at the next opportunity and rebuild its +list of fonts. If you want to trigger this update from the command +line, you may run the command `fc-cache'. + + +$ fc-cache + + + + + +In order to globally update the system-wide Fontconfig information on +Unix systems, you will typically need to run this command as root: + + +$ su -c fc-cache + + + + + + + +Fine-tuning Xft + + +Fontconfig's behaviour is controlled by a set of configuration +files: a standard configuration file, `/etc/fonts/fonts.conf', +a host-specific configuration file, `/etc/fonts/local.conf', +and a user-specific file called `.fonts.conf' in the user's +home directory (this can be overridden with the +`FONTCONFIG_FILE' environment variable). + + + +Every Fontconfig configuration file must start with the following +boilerplate: + + +<?xml version="1.0"?> +<!DOCTYPE fontconfig SYSTEM "fonts.dtd"> +<fontconfig> + + +In addition, every Fontconfig configuration file must end with the +following line: + + +</fontconfig> + + + + + +The default Fontconfig configuration file includes the directory +`˜/.fonts/' in the list of directories searched for font +files, and this is where user-specific font files should be installed. +In the unlikely case that a new font directory needs to be added, this +can be done with the following syntax: + + +<dir>/usr/local/share/fonts/</dir> + + + + + +Another useful option is the ability to disable anti-aliasing (font +smoothing) for selected fonts. This can be done with the following +syntax: + + +<match target="font"> + <test qual="any" name="family"> + <string>Lucida Console</string> + </test> + <edit name="antialias" mode="assign"> + <bool>false</bool> + </edit> +</match> + + +Anti-aliasing can be disabled for all fonts by the following incantation: + + +<match target="font"> + <edit name="antialias" mode="assign"> + <bool>false</bool> + </edit> +</match> + + + + + +Xft supports sub-pixel rasterisation on LCD displays. X11R&relvers; should +automatically enable this feature on laptops and when using an LCD +monitor connected with a DVI cable; you can check whether this was +done by typing + + +$ xdpyinfo -ext RENDER | grep sub-pixel + + +If this doesn't print anything, you will need to configure Render for +your particular LCD hardware manually; this is done with the following +syntax: + + +<match target="font"> + <edit name="rgba" mode="assign"> + <const>rgb</const> + </edit> +</match> + + +The string `rgb' within the +`<const>'...`</const>' +specifies the order of pixel components on your display, and should be +changed to match your hardware; it can be one of `rgb (normal +LCD screen), `bgr' (backwards LCD screen), `vrgb' (LCD +screen rotated clockwise) or `vbgr' (LCD screen rotated +counterclockwise). + + + + + +Configuring applications + + +A growing number of applications use Xft in preference to the core +fonts system. Some applications, however, need to be explicitly +configured to use Xft. + + + +A case in point is XTerm, which can be set to use Xft by using the +`-fa' command line option or by setting the `XTerm*faceName' +resource: + + +XTerm*faceName: Courier + + +or + + +$ xterm -fa "Courier" + + + + + +For KDE applications, you should select ``Anti-alias fonts'' in the +``Fonts'' panel of KDE's ``Control Center''. Note that this option is +misnamed: it switches KDE to using Xft but doesn't enable +anti-aliasing in case it was disabled by your Xft configuration file. + + + +Gnome applications and Mozilla Firefox will use Xft by default. + + + + + + + +Configuring the core X11 fonts system + + +Installing fonts in the core system is a two step process. First, +you need to create a font directory that contains all the +relevant font files as well as some index files. You then need to +inform the X server of the existence of this new directory by +including it in the font path. + + + +Installing bitmap fonts + + +The X11R&relvers; server can use bitmap fonts in both the cross-platform +BDF format and the somewhat more efficient binary PCF format. +(X11R&relvers; also supports the obsolete SNF format.) + + + +Bitmap fonts are normally distributed in the BDF format. Before +installing such fonts, it is desirable (but not absolutely necessary) +to convert the font files to the PCF format. This is done by using the +command `bdftopcf', e.g. + + +$ bdftopcf courier12.bdf + + +You will then want to compress the resulting PCF font files: + + +$ gzip courier12.pcf + + + + + +After the fonts have been converted, you should copy all the font +files that you wish to make available into a arbitrary directory, say +`/usr/local/share/fonts/bitmap/'. You should then create the +index file `fonts.dir' by running the command `mkfontdir' +(please see the mkfontdir(1) +manual page for more information): + + +$ mkdir /usr/local/share/fonts/bitmap/ +$ cp *.pcf.gz /usr/local/share/fonts/bitmap/ +$ mkfontdir /usr/local/share/fonts/bitmap/ + + + + + +All that remains is to tell the X server about the existence of the +new font directory; see below. + + + + + +Installing scalable fonts + + +The X11R&relvers; server supports scalable fonts in multiple +formats, including Type 1, TrueType, and OpenType/CFF. +(Earlier versions of X11 also included support for the Speedo and +CID scalable font formats, but that is not included in current releases.) + + + +Installing scalable fonts is very similar to installing bitmap fonts: +you create a directory with the font files, and run `mkfontdir' +to create an index file called `fonts.dir'. + + + +There is, however, a big difference: `mkfontdir' cannot +automatically recognise scalable font files. For that reason, you +must first index all the font files in a file called +`fonts.scale'. While this can be done by hand, it is best done +by using the `mkfontscale' utility. + + +$ mkfontscale /usr/local/share/fonts/Type1/ +$ mkfontdir /usr/local/share/fonts/Type1/ + + +Under some circumstances, it may be necessary to modify the +`fonts.scale' file generated by mkfontscale; for more +information, please see the mkfontdir(1) and mkfontscale(1) manual pages and +later in this document. + + + + + +CID-keyed fonts + + +The CID-keyed font format was designed by Adobe Systems for fonts +with large character sets. The CID-keyed format is obsolete, as it +has been superseded by other formats such as OpenType/CFF and +support for CID-keyed fonts has been removed from X11. + + + + + +Setting the server's font path + + +The list of directories where the server looks for fonts is known +as the font path. Informing the server of the existence of a new +font directory consists of putting it on the font path. + + + +The font path is an ordered list; if a client's request matches +multiple fonts, the first one in the font path is the one that gets +used. When matching fonts, the server makes two passes over the font +path: during the first pass, it searches for an exact match; during +the second, it searches for fonts suitable for scaling. + + + +For best results, scalable fonts should appear in the font path before +the bitmap fonts; this way, the server will prefer bitmap fonts to +scalable fonts when an exact match is possible, but will avoid scaling +bitmap fonts when a scalable font can be used. (The `:unscaled' +hack, while still supported, should no longer be necessary in X11R&relvers;.) + + + +You may check the font path of the running server by typing the command + + +$ xset q + + + + + +Font path catalogue directories + + +You can specify a special kind of font path directory in the form +catalogue:<dir>. +The directory specified after the catalogue: +prefix will be scanned for symlinks and each symlink destination will be +added as a local font path entry. + + + +The symlink can be suffixed by attributes such as +'unscaled', which will be passed through +to the underlying font path entry. The only exception is the newly +introduced 'pri' attribute, which will be +used for ordering the font paths specified by the symlinks. + + + +An example configuration: + + 75dpi:unscaled:pri=20 -> /usr/share/X11/fonts/75dpi + ghostscript:pri=60 -> /usr/share/fonts/default/ghostscript + misc:unscaled:pri=10 -> /usr/share/X11/fonts/misc + type1:pri=40 -> /usr/share/X11/fonts/Type1 + type1:pri=50 -> /usr/share/fonts/default/Type1 + + + + +This will add /usr/share/X11/fonts/misc as the +first font path entry with the attribute +unscaled. This is functionally equivalent to +setting the following font path: + + /usr/share/X11/fonts/misc:unscaled, + /usr/share/X11/fonts/75dpi:unscaled, + /usr/share/X11/fonts/Type1, + /usr/share/fonts/default/Type1, + /usr/share/fonts/default/ghostscript + + + + + +Temporary modification of the font path + + +The `xset' utility may be used to modify the font path for the +current session. The font path is set with the command xset fp; +a new element is added to the front with xset +fp, and added to +the end with xset fp+. For example, + + +$ xset +fp /usr/local/fonts/Type1 +$ xset fp+ /usr/local/fonts/bitmap + + + + + +Conversely, an element may be removed from the front of the font path +with `xset -fp', and removed from the end with `xset fp-'. +You may reset the font path to its default value with +`xset fp default'. + + + +For more information, please consult the xset(1) manual page. + + + + + +Permanent modification of the font path + + +The default font path (the one used just after server startup or +after `xset fp default') may be specified in the +X server's +`xorg.conf' file. It is computed by appending all the +directories mentioned in the `FontPath' entries of the +`Files' section in the order in which they appear. If no font path is specified in a config file, the server uses a default +value specified when it was built. + + +FontPath "/usr/local/fonts/Type1" +... +FontPath "/usr/local/fonts/bitmap" + + + + + +For more information, please consult the xorg.conf(5) manual page. + + + + + + + +Troubleshooting + + +If you seem to be unable to use some of the fonts you have +installed, the first thing to check is that the `fonts.dir' files +are correct and that they are readable by the server (the X server +usually runs as root, beware of NFS-mounted font directories). If +this doesn't help, it is quite possible that you are trying to use a +font in a format that is not supported by your server. + + + +X11R&relvers; supports the BDF, PCF, SNF, Type 1, TrueType, and OpenType +font formats. However, not all X11R&relvers; servers +come with all the font backends configured in. + + + +On most platforms, the X11R&relvers; servers no longer uses font +backends from modules that are loaded at runtime. The built in +font support corresponds to the functionality formerly provided by +these modules: + + + + + + "bitmap": + bitmap fonts (`*.bdf', + `*.pcf' + and `*.snf'); + + + + + + "freetype": + TrueType fonts (`*.ttf' and + `*.ttc'), + OpenType fonts (`*.otf' and + `*.otc') and + Type 1 fonts (`*.pfa' + and `*.pfb'). + + + + + + + + + + + + + + +Fonts included with X11R&relvers; + + +Standard bitmap fonts + + +The Sample Implementation of X11 (SI) comes with a large number of +bitmap fonts, including the `fixed' family, and bitmap versions +of Courier, Times, Helvetica and some members of the Lucida family. + + + +In X11R&relvers;, a number of these fonts are provided in Unicode-encoded +font files now. At build time, these fonts are split into font +files encoded according to legacy encodings, a process which allows +us to provide the standard fonts in a number of regional encodings +with no duplication of work. + + + +For example, the font file + + +/usr/share/fonts/X11/misc/6x13.bdf + + +with XLFD + + +-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1 + + +is a Unicode-encoded version of the standard `fixed' font with +added support for the Latin, Greek, Cyrillic, Georgian, Armenian, IPA +and other scripts plus numerous technical symbols. It contains over +2800 glyphs, covering all characters of ISO 8859 parts 1-5, +7-10, 13-15, as well as all European IBM and Microsoft code pages, +KOI8, WGL4, and the repertoires of many other character sets. + + + +This font is used at build time for generating the font files + + +6x13-ISO8859-1.bdf +6x13-ISO8859-2.bdf +... +6x13-ISO8859-15.bdf +6x13-KOI8-R.bdf + + +with respective XLFDs + + +-misc-fixed-medium-r-normal--13-120-75-75-c-60-iso8859-1 +... +-misc-fixed-medium-r-normal--13-120-75-75-c-60-iso8859-15 +-misc-fixed-medium-r-normal--13-120-75-75-c-60-koi8-r + + +The standard short name `fixed' is normally an alias for + + +-misc-fixed-medium-r-normal--13-120-75-75-c-60-iso8859-1 + + + + + + + +The ClearlyU Unicode font family + + +The ClearlyU family of fonts provides a set of 12 pt, +100 dpi proportional fonts with many of the glyphs needed for +Unicode text. Together, the fonts contain approximately 7500 glyphs. + + + +The main ClearlyU font has the XLFD + + +-mutt-clearlyu-medium-r-normal--17-120-100-100-p-101-iso10646-1 + + +and resides in the font file + + +/usr/share/fonts/X11/misc/cu12.pcf.gz + + +Additional ClearlyU fonts include + + +-mutt-clearlyu alternate glyphs-medium-r-normal--17-120-100-100-p-91-iso10646-1 +-mutt-clearlyu pua-medium-r-normal--17-120-100-100-p-111-iso10646-1 +-mutt-clearlyu arabic extra-medium-r-normal--17-120-100-100-p-103-fontspecific-0 +-mutt-clearlyu ligature-medium-r-normal--17-120-100-100-p-141-fontspecific-0 + + + + + +The Alternate Glyphs font contains additional glyph shapes that +are needed for certain languages. A second alternate glyph font will +be provided later for cases where a character has more than one +commonly used alternate shape (e.g. the Urdu heh). + + + +The PUA font contains extra glyphs that are useful for certain +rendering purposes. + + + +The Arabic Extra font contains the glyphs necessary for +characters that don't have all of their possible shapes encoded in +ISO 10646. The glyphs are roughly ordered according to the order +of the characters in the ISO 10646 standard. + + + +The Ligature font contains ligatures for various scripts that +may be useful for improved presentation of text. + + + + + +Standard scalable fonts + + +X11R&relvers; includes all the scalable fonts distributed with X11R6. + + + +Standard Type 1 fonts + + +The IBM Courier set of fonts cover ISO 8859-1 and +ISO 8859-2 as well as Adobe Standard Encoding. These fonts have +XLFD + + +-adobe-courier-medium-*-*--0-0-0-0-m-0-*-* + + +and reside in the font files + + +/usr/share/fonts/X11/Type1/cour*.pfa + + + + + +The Adobe Utopia set of fonts only cover ISO 8859-1 as well as +Adobe Standard Encoding. These fonts have XLFD + + +-adobe-utopia-*-*-normal--0-0-0-0-p-0-iso8859-1 + + +and reside in the font files + + +/usr/share/fonts/X11/Type1/UT*.pfa + + + + + +Finally, X11R&relvers; also comes with Type 1 versions of Bitstream +Courier and Charter. These fonts have XLFD + + +-bitstream-courier-*-*-normal--0-0-0-0-m-0-iso8859-1 +-bitstream-charter-*-*-normal--0-0-0-0-p-0-iso8859-1 + + +and reside in the font files + + +/usr/share/fonts/X11/Type1/c*bt_.pfb + + + + + + + + + +The Bigelow & Holmes Luxi family + + +X11R&relvers; includes the Luxi family of scalable fonts, in both +TrueType and Type 1 format. This family consists of the fonts +Luxi Serif, with XLFD + + +-b&h-luxi serif-medium-*-normal--*-*-*-*-p-*-*-* + + +Luxi Sans, with XLFD + + +-b&h-luxi sans-medium-*-normal--*-*-*-*-p-*-*-* + + +and Luxi Mono, with XLFD + + +-b&h-luxi mono-medium-*-normal--*-*-*-*-m-*-*-* + + +Each of these fonts comes Roman, oblique, bold and bold oblique variants +The TrueType version have glyphs covering the basic ASCII Unicode +range, the Latin 1 range, as well as the Extended Latin +range and some additional punctuation characters. In particular, +these fonts include all the glyphs needed for ISO 8859 parts 1, +2, 3, 4, 9, 13 and 15, as well as all the glyphs in the Adobe Standard +encoding and the Windows 3.1 character set. + + + +The glyph coverage of the Type 1 versions is somewhat reduced, +and only covers ISO 8859 parts 1, 2 and 15 as well as the Adobe +Standard encoding. + + + +The Luxi fonts are original designs by Kris Holmes and Charles +Bigelow. Luxi fonts include seriffed, sans serif, and monospaced +styles, in roman and oblique, and normal and bold weights. The fonts +share stem weight, x-height, capital height, ascent and descent, for +graphical harmony. + + + +The character width metrics of Luxi roman and bold fonts match those +of core fonts bundled with popular operating and window systems. + + + +The license terms for the Luxi fonts are included in the file +`COPYRIGHT.BH', as well as in the License document. + + + +Charles Bigelow and Kris Holmes from Bigelow and Holmes Inc. +developed the Luxi typeface designs in Ikarus digital format. + + + +URW++ Design and Development GmbH converted the Ikarus format fonts +to TrueType and Type1 font programs and implemented the grid-fitting +"hints" and kerning tables in the Luxi fonts. + + + +For more information, please contact +design@bigelowandholmes.com or +info@urwpp.de, or consult +the URW++ web site. + + + +An earlier version of the Luxi fonts was made available under the +name Lucidux. This name should no longer be used due to +trademark uncertainties, and all traces of the Lucidux +name have been removed from X11R&relvers;. + + + + + + + +More about core fonts + + +This section describes X11R&relvers;-specific enhancements to the core +X11 fonts system. + + + +Core fonts and internationalisation + + +The scalable font backends (Type 1 and TrueType) can +automatically re-encode fonts to the encoding specified in the +XLFD in `fonts.dir'. For example, a `fonts.dir' file can +contain entries for the Type 1 Courier font such as + + +cour.pfa -adobe-courier-medium-r-normal--0-0-0-0-m-0-iso8859-1 +cour.pfa -adobe-courier-medium-r-normal--0-0-0-0-m-0-iso8859-2 + + +which will lead to the font being recoded to ISO 8859-1 and +ISO 8859-2 respectively. + + + +The <emphasis remap="it">fontenc</emphasis> layer + + +Two of the scalable backends (Type 1 and the +FreeType TrueType backend) use a common fontenc layer for +font re-encoding. This allows these backends to share their encoding +data, and allows simple configuration of new locales independently of +font type. + + + +Please note: the X-TrueType (X-TT) backend is not included +in X11R&relvers;. That functionality has been merged into the FreeType +backend.> + + + +In the fontenc layer, an encoding is defined by a name (such as +iso8859-1), possibly a number of aliases (alternate names), and +an ordered collection of mappings. A mapping defines the way the +encoding can be mapped into one of the target encodings known to +fontenc; currently, these consist of Unicode, Adobe glyph names, +and arbitrary TrueType ``cmap''s. + + + +A number of encodings are hardwired into fontenc, and are +therefore always available; the hardcoded encodings cannot easily be +redefined. These include: + + + + + + iso10646-1: Unicode; + + + + + + iso8859-1: ISO Latin-1 (Western Europe); + + + + + + iso8859-2: ISO Latin-2 (Eastern Europe); + + + + + + iso8859-3: ISO Latin-3 (Southern Europe); + + + + + + iso8859-4: ISO Latin-4 (Northern Europe); + + + + + + iso8859-5: ISO Cyrillic; + + + + + + iso8859-6: ISO Arabic; + + + + + + iso8859-7: ISO Greek; + + + + + + iso8859-8: ISO Hebrew; + + + + + + iso8859-9: ISO Latin-5 (Turkish); + + + + + + iso8859-10: ISO Latin-6 (Nordic); + + + + + + iso8859-15: ISO Latin-9, or Latin-0 (Revised +Western-European); + + + + + + koi8-r: KOI8 Russian; + + + + + + koi8-u: KOI8 Ukrainian (see RFC 2319); + + + + + + koi8-ru: KOI8 Russian/Ukrainian; + + + + + + koi8-uni: KOI8 ``Unified'' (Russian, Ukrainian, and +Byelorussian); + + + + + + koi8-e: KOI8 ``European,'' ISO-IR-111, or ECMA-Cyrillic; + + + + + + microsoft-symbol and apple-roman: these are only +likely to be useful with TrueType symbol fonts. + + + + + + + + +Additional encodings can be added by defining encoding files. +When a font encoding is requested that the fontenc layer doesn't +know about, the backend checks the directory in which the font file +resides (not necessarily the directory with fonts.dir!) for a +file named `encodings.dir'. If found, this file is scanned for +the requested encoding, and the relevant encoding definition file is +read in. The `mkfontdir' utility, when invoked with the +`-e' option followed by the name of a directory containing +encoding files, can be used to automatically build `encodings.dir' +files. Please see the mkfontdir(1) +manual page for more details. + + + +A number of encoding files for common encodings are included with +X11R&relvers;. Information on writing new encoding files can be found in + and later in this document. + + + + + +Backend-specific notes about fontenc + + +The <emphasis remap="it">FreeType</emphasis> backend + + +For TrueType and OpenType fonts, the FreeType backend scans the +mappings in order. Mappings with a target of PostScript are ignored; +mappings with a TrueType or Unicode target are checked against all the +cmaps in the file. The first applicable mapping is used. + + + +For Type 1 fonts, the FreeType backend first searches for a +mapping with a target of PostScript. If one is found, it is used. +Otherwise, the backend searches for a mapping with target Unicode, +which is then composed with a built-in table mapping codes to glyph +names. Note that this table only covers part of the Unicode code +points that have been assigned names by Adobe. + + + +Specifying an encoding value of adobe-fontspecific for a +Type 1 font disables the encoding mechanism. This is useful with +symbol and incorrectly encoded fonts (see below). + + + +If a suitable mapping is not found, the FreeType backend defaults to +ISO 8859-1. + + + + + + + +Format of encoding directory files + + +In order to use a font in an encoding that the font backend does +not know about, you need to have an `encodings.dir' file either +in the same directory as the font file used or in a system-wide +location (`/usr/share/fonts/X11/encodings/' by default). + + + +The `encodings.dir' file has a similar format to +`fonts.dir'. Its first line specifies the number of encodings, +while every successive line has two columns, the name of the encoding, +and the name of the encoding file; this can be relative to the current +directory, or absolute. Every encoding name should agree with the +encoding name defined in the encoding file. For example, + + + + + +3 +mulearabic-0 /usr/share/fonts/X11/encodings/mulearabic-0.enc +mulearabic-1 /usr/share/fonts/X11/encodings/mulearabic-1.enc +mulearabic-2 /usr/share/fonts/X11/encodings/mulearabic-2.enc + + + + + +The name of an encoding must be specified in the encoding file's +`STARTENCODING' or `ALIAS' line. It is not enough to create +an `encodings.dir' entry. + + + +If your platform supports it (it probably does), encoding files may be +compressed or gzipped. + + + +The `encoding.dir' files are best maintained by the +`mkfontdir' utility. Please see the mkfontdir(1) manual page for more information. + + + + + +Format of encoding files + + +The encoding files are ``free form,'' i.e. any string of +whitespace is equivalent to a single space. Keywords are parsed in a +non-case-sensitive manner, meaning that `size', `SIZE', and +`SiZE' all parse as the same keyword; on the other hand, case is +significant in glyph names. + + + +Numbers can be written in decimal, as in `256', in hexadecimal, +as in `0x100', or in octal, as in `0400'. + + + +Comments are introduced by a hash sign `#'. A `#' may +appear at any point in a line, and all characters following the +`#' are ignored, up to the end of the line. + + + +The encoding file starts with the definition of the name of the +encoding, and possibly its alternate names (aliases): + + +STARTENCODING mulearabic-0 +ALIAS arabic-0 + + +The name of the encoding and its aliases should be suitable for use in +an XLFD font name, and therefore contain exactly one dash `-'. + + + +The encoding file may then optionally declare the size of the +encoding. For a linear encoding (such as ISO 8859-1), the SIZE +line specifies the maximum code plus one: + + +SIZE 0x2B + + +For a matrix encoding, it should specify two numbers. The first is +the number of the last row plus one, the other, the highest column +number plus one. In the case of `jisx0208.1990-0' +(JIS X 0208(1990), double-byte encoding, high bit clear), it +should be + + +SIZE 0x75 0x80 + + +In the case of a matrix encoding, a `FIRSTINDEX' line may be +included to specify the minimum glyph index in an encoding. The +keyword `FIRSTINDEX' is followed by two integers, the minimum row +number followed by the minimum column number: + + +FIRSTINDEX 0x20 0x20 + + +In the case of a linear encoding, a `FIRSTINDEX' line is not very +useful. If for some reason however you chose to include on, it should +be followed by a single integer. + + + +Note that in most font backends inclusion of a `FIRSTINDEX' line +has the side effect of disabling default glyph generation, and this +keyword should therefore be avoided unless absolutely necessary. + + + +Codes outside the region defined by the `SIZE' and +`FIRSTINDEX' lines are understood to be undefined. Encodings +default to linear encoding with a size of 256 (0x100). This means +that you must declare the size of all 16 bit encodings. + + + +What follows is one or more mapping sections. A mapping section +starts with a `STARTMAPPING' line stating the target of the mapping. +The target may be one of: + + + + + +Unicode (ISO 10646): + + +STARTMAPPING unicode + + + + + + + +a given TrueType ``cmap'': + + +STARTMAPPING cmap 3 1 + + + + + + + +PostScript glyph names: + + +STARTMAPPING postscript + + + + + + + +Every line in a mapping section maps one from the encoding being +defined to the target of the mapping. In mappings with a Unicode or +TrueType mapping, codes are mapped to codes: + + +0x21 0x0660 +0x22 0x0661 +... + + +As an abbreviation, it is possible to map a contiguous range of codes +in a single line. A line consisting of three integers + + +<it/start/ <it/end/ <it/target/ + + +is an abbreviation for the range of lines + + +start target + + + +start+1 target+1 + + + +... + + + +end target+end-start + + +For example, the line + + +0x2121 0x215F 0x8140 + + +is an abbreviation for + + +0x2121 0x8140 +0x2122 0x8141 +... +0x215F 0x817E + + +Codes not listed are assumed to map through the identity (i.e. to +the same numerical value). In order to override this default mapping, +you may specify a range of codes to be undefined by using an +`UNDEFINE' line: + + +UNDEFINE 0x00 0x2A + + +or, for a single code, + + +UNDEFINE 0x1234 + + + + + +PostScript mappings are different. Every line in a PostScript mapping +maps a code to a glyph name + + +0x41 A +0x42 B +... + + +and codes not explicitly listed are undefined. + + + +A mapping section ends with an ENDMAPPING line + + +ENDMAPPING + + +After all the mappings have been defined, the file ends with an +ENDENCODING line + + +ENDENCODING + + + + + +In order to make future extensions to the format possible, lines +starting with an unknown keyword are silently ignored, as are mapping +sections with an unknown target. + + + + + +Using symbol fonts + + +Type 1 symbol fonts should be installed using the +adobe-fontspecific encoding. + + + +In an ideal world, all TrueType symbol fonts would be installed using +one of the microsoft-symbol and apple-roman encodings. A +number of symbol fonts, however, are not marked as such; such fonts +should be installed using microsoft-cp1252, or, for older fonts, +microsoft-win3.1. + + + +In order to guarantee consistent results (especially between +Type 1 and TrueType versions of the same font), it is possible to +define a special encoding for a given font. This has already been done +for the ZapfDingbats font; see the file +`encodings/adobe-dingbats.enc'. + + + + + +Hints about using badly encoded fonts + + +A number of text fonts are incorrectly encoded. Incorrect encoding +is sometimes done by design, in order to make a font for an exotic +script appear like an ordinary Western text font on systems which are +not easily extended with new locale data. It is often the result of +the font designer's laziness or incompetence; for some reason, most +people seem to find it easier to invent idiosyncratic glyph names +rather than follow the Adobe glyph list. + + + +There are two ways of dealing with such fonts: using them with the +encoding they were designed for, and creating an ad hoc encoding +file. + + + +Using fonts with the designer's encoding + + +In the case of Type 1 fonts, the font designer can specify a +default encoding; this encoding is requested by using the +`adobe-fontspecific' encoding in the XLFD name. Sometimes, the +font designer omitted to specify a reasonable default encoding, in +which case you should experiment with `adobe-standard', +`iso8859-1', `microsoft-cp1252', and +`microsoft-win3.1'. (The encoding `microsoft-symbol' doesn't +make sense for Type 1 fonts). + + + +TrueType fonts do not have a default encoding. However, most TrueType +fonts are designed with either Microsoft or Apple platforms in mind, +so one of `microsoft-symbol', `microsoft-cp1252', +`microsoft-win3.1', or `apple-roman' should yield reasonable +results. + + + + + +Specifying an <emphasis remap="it">ad hoc</emphasis> encoding file + + +It is always possible to define an encoding file to put the glyphs +in a font in any desired order. Again, see the +`encodings/adobe-dingbats.enc' file to see how this is done. + + + + + +Specifying font aliases + + +By following the directions above, you will find yourself with a +number of fonts with unusual names --- with encodings such as +`adobe-fontspecific', `microsoft-win3.1' etc. In order +to use these fonts with standard applications, it may be useful to +remap them to their proper names. + + + +This is done by writing a `fonts.alias' file. The format of this file +is very simple: it consists of a series of lines each mapping an alias +name to a font name. A `fonts.alias' file might look as follows: + + +"-ogonki-alamakota-medium-r-normal--0-0-0-0-p-0-iso8859-2" \ + "-ogonki-alamakota-medium-r-normal--0-0-0-0-p-0-adobe-fontspecific" + + +(both XLFD names on a single line). The syntax of the +`fonts.alias' file is more precisely described in the +mkfontdir(1) manual page. + + + + + + + + + +Additional notes about scalable core fonts + + + +About the <emphasis remap="it">FreeType</emphasis> backend + + +The FreeType backend (formerly xfsft) +is a backend based on version 2 of the FreeType library (see the FreeType web site) and has +the X-TT functionalities for CJKV support provided by the After X-TT +Project (see the After X-TT Project web site). The FreeType backend has support for the +``fontenc'' style of internationalisation (see ). This backend supports TrueType font files +(`*.ttf'), OpenType font files (`*.otf'), TrueType Collections +(`*.ttc'), OpenType Collections (`*.otc') and Type 1 font +files (`*.pfa' and `*.pfb'). + + + +In order to access the faces in a TrueType Collection file, the face +number must be specified in the fonts.dir file before the filename, +within a pair of colons, or by setting the 'fn' TTCap option. For example, + + + + + +:1:mincho.ttc -misc-pmincho-medium-r-normal--0-0-0-0-p-0-jisx0208.1990-0 + + + + + +refers to face 1 in the `mincho.ttc' TrueType Collection file. + + + +The new FreeType backend supports the extended +`fonts.dir' syntax introduced by X-TrueType with a number +of options, collectively known as `TTCap'. A `TTCap' entry follows the +general syntax + + + + + +option=value: + + + + + +and should be specified before the filename. The new FreeType +almost perfectly supports TTCap options that are compatible with X-TT +1.4. The Automatic Italic (`ai'), Double Strike (`ds') and +Bounding box Width (`bw') options are indispensable in CJKV. +For example, + + + + + +mincho.ttc -misc-mincho-medium-r-normal--0-0-0-0-c-0-jisx0208.1990-0 +ds=y:mincho.ttc -misc-mincho-bold-r-normal--0-0-0-0-c-0-jisx0208.1990-0 +ai=0.2:mincho.ttc -misc-mincho-medium-i-normal--0-0-0-0-c-0-jisx0208.1990-0 +ds=y:ai=0.2:mincho.ttc -misc-mincho-bold-i-normal--0-0-0-0-c-0-jisx0208.1990-0 +bw=0.5:mincho.ttc -misc-mincho-medium-r-normal--0-0-0-0-c-0-jisx0201.1976-0 +bw=0.5:ds=y:mincho.ttc -misc-mincho-bold-r-normal--0-0-0-0-c-0-jisx0201.1976-0 +bw=0.5:ai=0.2:mincho.ttc -misc-mincho-medium-i-normal--0-0-0-0-c-0-jisx0201.1976-0 +bw=0.5:ds=y:ai=0.2:mincho.ttc -misc-mincho-bold-i-normal--0-0-0-0-c-0-jisx0201.1976-0 + + + + + +setup the complete combination of jisx0208 and jisx0201 using mincho.ttc +only. More information on the TTCap syntax is found on the After X-TT Project page. + + + +The FreeType backend uses the fontenc layer in order to support +recoding of fonts; this was described in and especially earlier in this document. + + + + + +Delayed glyph rasterisation + + +When loading a proportional fonts which contain a huge number of glyphs, +the old FreeType delayed glyph rasterisation until the time at which +the glyph was first used. The new FreeType (libfreetype-xtt2) has an +improved `very lazy' metric calculation method to speed up the process when +loading TrueType or OpenType fonts. Although the X-TT module also +has this method, the "vl=y" TTCap option must be set if you want to +use it. This is the default method for FreeType when it loads +multi-byte fonts. Even if you use a unicode font which has tens of +thousands of glyphs, this delay will not be worrisome as long as you use +the new FreeType backend -- its `very lazy' method is super-fast. + + + +The maximum error of bitmap position using `very lazy' method is 1 pixel, +and is the same as that of a character-cell spacing. When the X-TT +backend is used with the `vl=y' option, a chipped bitmap is displayed +with certain fonts. However, the new FreeType backend has minimal problem +with this, since it corrects left- and right-side bearings using +`italicAngle' in the TrueType/OpenType post table, and does automatic +correction of bitmap positions when rasterisation so that chipped bitmaps +are not displayed. Nevertheless if you don't want to use the `very lazy' +method when using multi-bytes fonts, set `vl=n' in the TTCap option to +disable it: + + + + + +vl=n:luxirr.ttf -b&h-Luxi Serif-medium-r-normal--0-0-0-0-p-0-iso10646-1 + + + + + +Of course, both backends also support an optimisation for character-cell +fonts (fonts with all glyph metrics equal, or terminal fonts). A font +with an XLFD specifying a character-cell spacing `c', as in + + + + + +-misc-mincho-medium-r-normal--0-0-0-0-c-0-jisx0208.1990-0 + + + + + +or + + + + + +fs=c:mincho.ttc -misc-mincho-medium-r-normal--0-0-0-0-p-0-jisx0208.1990-0 + + + + + +will not compute the metric for each glyph, but instead +trust the font to be a character-cell font. You are +encouraged to make use of this optimisation when useful, but be warned +that not all monospaced fonts are character-cell fonts. + + + + + + + + + +Appendix: background and terminology + + +Characters and glyphs + + +A computer text-processing system inputs keystrokes and outputs +glyphs, small pictures that are assembled on paper or on a +computer screen. Keystrokes and glyphs do not, in general, coincide: +for example, if the system does generate ligatures, then to the +sequence of two keystrokes <f><i> will typically +correspond a single glyph. Similarly, if the system shapes Arabic +glyphs in a vaguely reasonable manner, then multiple different glyphs +may correspond to a single keystroke. + + + +The complex transformation rules from keystrokes to glyphs are usually +factored into two simpler transformations, from keystrokes to +characters and from characters to glyphs. You may want to think +of characters as the basic unit of text that is stored e.g. in +the buffer of your text editor. While the definition of a character +is intrinsically application-specific, a number of standardised +collections of characters have been defined. + + + +A coded character set is a set of characters together with a +mapping from integer codes --- known as codepoints --- to +characters. Examples of coded character sets include US-ASCII, +ISO 8859-1, KOI8-R, and JIS X 0208(1990). + + + +A coded character set need not use 8 bit integers to index characters. +Many early systems used 6 bit character sets, while 16 bit (or more) +character sets are necessary for ideographic writing systems. + + + + + +Font files, fonts, and XLFD + + +Traditionally, typographers speak about typefaces and +founts. A typeface is a particular style or design, such as +Times Italic, while a fount is a molten-lead incarnation of a given +typeface at a given size. + + + +Digital fonts come in font files. A font file contains the +information necessary for generating glyphs of a given typeface, and +applications using font files may access glyph information in an +arbitrary order. + + + +Digital fonts may consist of bitmap data, in which case they are said +to be bitmap fonts. They may also consist of a mathematical +description of glyph shapes, in which case they are said to be +scalable fonts. Common formats for scalable font files are +Type 1 (sometimes incorrectly called ATM fonts or +PostScript fonts), TrueType and OpenType. + + + +The glyph data in a digital font needs to be indexed somehow. How +this is done depends on the font file format. In the case of +Type 1 fonts, glyphs are identified by glyph names. In the +case of TrueType fonts, glyphs are indexed by integers corresponding +to one of a number of indexing schemes (usually Unicode --- see below). + + + +The X11 core fonts system uses the data in a font file to generate +font instances, which are collections of glyphs at a given size +indexed according to a given encoding. + + + +X11 core font instances are usually specified using a notation known +as the X Logical Font Description (XLFD). An XLFD starts with a +dash `-', and consists of fourteen fields separated by dashes, +for example: + + +-adobe-courier-medium-r-normal--12-120-75-75-m-70-iso8859-1 + + +Or particular interest are the last two fields `iso8859-1', which +specify the font instance's encoding. + + + +A scalable font is specified by an XLFD which contains zeroes instead +of some fields: + + +-adobe-courier-medium-r-normal--0-0-0-0-m-0-iso8859-1 + + + + + +X11 font instances may also be specified by short name. Unlike an +XLFD, a short name has no structure and is simply a conventional name +for a font instance. Two short names are of particular interest, as +the server will not start if font instances with these names cannot be +opened. These are `fixed', which specifies the fallback font to +use when the requested font cannot be opened, and `cursor', which +specifies the set of glyphs to be used by the mouse pointer. + + + +Short names are usually implemented as aliases to XLFDs; the +standard `fixed' and `cursor' aliases are defined in + + +/usr/share/font/X11/misc/fonts.alias + + + + + + + +Unicode + + +Unicode (http://www.unicode.org) is a coded character +set with the goal of uniquely identifying all characters for all +scripts, current and historical. While Unicode was explicitly not +designed as a glyph encoding scheme, it is often possible to use it as +such. + + + +Unicode is an open character set, meaning that codepoint +assignments may be added to Unicode at any time (once specified, +though, an assignment can never be changed). For this reason, a +Unicode font will be sparse, meaning that it only defines glyphs +for a subset of the character registry of Unicode. + + + +The Unicode standard is defined in parallel with the international +standard ISO 10646. Assignments in the two standards are always +equivalent, and we often use the terms Unicode and +ISO 10646 interchangeably. + + + +When used in the X11 core fonts system, Unicode-encoded fonts should +have the last two fields of their XLFD set to `iso10646-1'. + + + + + + + +References + + +X11R&relvers; comes with extensive documentation in the form of manual +pages and typeset documents. Before installing fonts, you really should +read the fontconfig(3) and +mkfontdir(1) manual pages; other +manual pages of interest include X(7), +Xserver(1), xset(1), Xft(3), xlsfonts(1) and showfont(1). In addition, you may want to read the X Logical +Font Description document, by Jim Flowers, which is provided in the file +`xc/doc/xlfd.PS.Z'. + + + +The comp.fonts FAQ, +which is unfortunately no longer being maintained, contains a wealth +of information about digital fonts. + + + +Xft and Fontconfig are described on +Keith Packard's Fontconfig site. + + + +The +xfsft home page +has been superseded by this document, and is now obsolete; you may +however still find some of the information that it contains useful. +Joerg Pommnitz' xfsft page +is the canonical source for the `ttmkfdir' utility, which is the +ancestor of mkfontscale. + + + +The author's software pages +might or might not contain related scribbles and development versions +of software. + + + +The documentation of X-TrueType is available from the After X-TT Project page. + + + +While the Unicode consortium site +may be of interest, you are more likely to find what you need in +Markus Kuhn's UTF-8 and Unicode FAQ. + + + +The IANA RFC documents, available from a number of sites throughout +the world, often provide interesting information about character set +issues; see for example RFC 373. + + + + +
diff --git a/doc/xorg-docs/general/graphics/Makefile.am b/doc/xorg-docs/general/graphics/Makefile.am new file mode 100644 index 000000000..542f12c72 --- /dev/null +++ b/doc/xorg-docs/general/graphics/Makefile.am @@ -0,0 +1,10 @@ +if ENABLE_DOCS + +doc_sources = dps.xml + +xmldir = $(docdir)/graphics +dist_xml_DATA = $(doc_sources) + +include $(top_srcdir)/xmlrules.in + +endif ENABLE_DOCS diff --git a/doc/xorg-docs/general/graphics/Makefile.in b/doc/xorg-docs/general/graphics/Makefile.in new file mode 100644 index 000000000..2e4bffa7d --- /dev/null +++ b/doc/xorg-docs/general/graphics/Makefile.in @@ -0,0 +1,442 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice (including the next +# paragraph) shall be included in all copies or substantial portions of the +# Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(am__dist_xml_DATA_DIST) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/xmlrules.in +@ENABLE_DOCS_TRUE@@HAVE_FOP_TRUE@@HAVE_XMLTO_TRUE@am__append_1 = $(doc_sources:.xml=.ps) $(doc_sources:.xml=.pdf) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@am__append_2 = $(doc_sources:.xml=.txt) +subdir = general/graphics +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(install_sh) -d +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__dist_xml_DATA_DIST = dps.xml +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(xmldir)" "$(DESTDIR)$(xmldir)" +dist_xmlDATA_INSTALL = $(INSTALL_DATA) +xmlDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_xml_DATA) $(xml_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ +ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APP_MAN_DIR = @APP_MAN_DIR@ +APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHANGELOG_CMD = @CHANGELOG_CMD@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CWARNFLAGS = @CWARNFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ +DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ENABLE_DOCS_FALSE = @ENABLE_DOCS_FALSE@ +ENABLE_DOCS_TRUE = @ENABLE_DOCS_TRUE@ +ENABLE_SPECS_FALSE = @ENABLE_SPECS_FALSE@ +ENABLE_SPECS_TRUE = @ENABLE_SPECS_TRUE@ +EXEEXT = @EXEEXT@ +FILE_MAN_DIR = @FILE_MAN_DIR@ +FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ +FOP = @FOP@ +GREP = @GREP@ +HAVE_FOP_FALSE = @HAVE_FOP_FALSE@ +HAVE_FOP_TRUE = @HAVE_FOP_TRUE@ +HAVE_STYLESHEETS_FALSE = @HAVE_STYLESHEETS_FALSE@ +HAVE_STYLESHEETS_TRUE = @HAVE_STYLESHEETS_TRUE@ +HAVE_XMLTO_FALSE = @HAVE_XMLTO_FALSE@ +HAVE_XMLTO_TEXT_FALSE = @HAVE_XMLTO_TEXT_FALSE@ +HAVE_XMLTO_TEXT_TRUE = @HAVE_XMLTO_TEXT_TRUE@ +HAVE_XMLTO_TRUE = @HAVE_XMLTO_TRUE@ +INSTALL_CMD = @INSTALL_CMD@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIB_MAN_DIR = @LIB_MAN_DIR@ +LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +MAN_SUBSTS = @MAN_SUBSTS@ +MISC_MAN_DIR = @MISC_MAN_DIR@ +MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ +VERSION = @VERSION@ +XMLTO = @XMLTO@ +XORG_MAN_PAGE = @XORG_MAN_PAGE@ +XORG_SGML_PATH = @XORG_SGML_PATH@ +XSL_STYLESHEET = @XSL_STYLESHEET@ +ac_ct_CC = @ac_ct_CC@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +@ENABLE_DOCS_TRUE@doc_sources = dps.xml +@ENABLE_DOCS_TRUE@xmldir = $(docdir)/graphics +@ENABLE_DOCS_TRUE@dist_xml_DATA = $(doc_sources) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@xml_DATA = \ +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(doc_sources:.xml=.html) \ +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(am__append_1) \ +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(am__append_2) +@ENABLE_DOCS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FLAGS = \ +@ENABLE_DOCS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ -m $(XSL_STYLESHEET) \ +@ENABLE_DOCS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --searchpath $(XORG_SGML_PATH)/X11 \ +@ENABLE_DOCS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam html.stylesheet=$(STYLESHEET_SRCDIR)/xorg.css \ +@ENABLE_DOCS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam img.src.path=$(abs_builddir)/ + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@CLEANFILES = $(xml_DATA) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@SUFFIXES = .xml .ps .pdf .txt .html +all: all-am + +.SUFFIXES: +.SUFFIXES: .xml .ps .pdf .txt .html +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/xmlrules.in $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign general/graphics/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --foreign general/graphics/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +uninstall-info-am: +install-dist_xmlDATA: $(dist_xml_DATA) + @$(NORMAL_INSTALL) + test -z "$(xmldir)" || $(mkdir_p) "$(DESTDIR)$(xmldir)" + @list='$(dist_xml_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_xmlDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(xmldir)/$$f'"; \ + $(dist_xmlDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(xmldir)/$$f"; \ + done + +uninstall-dist_xmlDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_xml_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(xmldir)/$$f'"; \ + rm -f "$(DESTDIR)$(xmldir)/$$f"; \ + done +install-xmlDATA: $(xml_DATA) + @$(NORMAL_INSTALL) + test -z "$(xmldir)" || $(mkdir_p) "$(DESTDIR)$(xmldir)" + @list='$(xml_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(xmlDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(xmldir)/$$f'"; \ + $(xmlDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(xmldir)/$$f"; \ + done + +uninstall-xmlDATA: + @$(NORMAL_UNINSTALL) + @list='$(xml_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(xmldir)/$$f'"; \ + rm -f "$(DESTDIR)$(xmldir)/$$f"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + $(mkdir_p) $(distdir)/../.. + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(xmldir)" "$(DESTDIR)$(xmldir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +@ENABLE_DOCS_FALSE@clean-local: +@HAVE_XMLTO_FALSE@clean-local: +clean: clean-am + +clean-am: clean-generic clean-local mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-dist_xmlDATA install-xmlDATA + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_xmlDATA uninstall-info-am \ + uninstall-xmlDATA + +.PHONY: all all-am check check-am clean clean-generic clean-local \ + distclean distclean-generic distdir dvi dvi-am html html-am \ + info info-am install install-am install-data install-data-am \ + install-dist_xmlDATA install-exec install-exec-am install-info \ + install-info-am install-man install-strip install-xmlDATA \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am uninstall uninstall-am uninstall-dist_xmlDATA \ + uninstall-info-am uninstall-xmlDATA + + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@%.txt: %.xml $(dist_xml_DATA) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) txt $< + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@%.html: %.xml $(dist_xml_DATA) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) xhtml-nochunks $< + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@%.pdf: %.xml $(dist_xml_DATA) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop pdf $< + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@%.ps: %.xml $(dist_xml_DATA) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop ps $< + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@chunked-html: $(doc_sources) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) -o html xhtml $(doc_sources) + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@clean-local: +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)rm -fr html/ +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/doc/xorg-docs/general/graphics/dps.xml b/doc/xorg-docs/general/graphics/dps.xml new file mode 100644 index 000000000..ebb30f72b --- /dev/null +++ b/doc/xorg-docs/general/graphics/dps.xml @@ -0,0 +1,81 @@ + + + +
+ + + +X and DPS + +JuliuszChroboczek +jch@freedesktop.org + +27 February 2001, updated 30 October 2006 + + + + +Updated by Jim Gettys and Juliusz Chroboczek. + + + + + + + + + + + +Notice of Obsolescence and Removal from X.Org Releases + + +DPS is now obsolete. + + + +At the time when I started this project, there was no decent rendering +interface for X11 other than DPS. + + + +Since then, there has been a large amount of work on a simple and +clean X server extension, Xrender, which provides the basis for just +such an interface. + + + +Rendering libraries that are being built above Xrender include Xft, a +font rendering library built on FreeType; Cairo, a geometry rendering +library that provides PostScript-like rendering primitives but with +from-the-ground support for Porter-Duff compositing (transparency); +Pango, a high-level typesetting library. + + + +If your application uses DPS, please consider porting it to the above libraries. +See the DPS extension site +for more details + + + +The client-side DPS software was included and built by default (except +as noted below) in the X.Org X11R6.8 release series. The client-side +software was included, but not built unless specifically +configured by the builder, in the X.Org X11R6.9 release series. +The client-side DPS software is no longer included in X11R7.0 or +later releases. + + + +The server-side software is not included in any X.Org release for +licensing reasons; the code is still available +from the DPS extension site; +it is not known whether it still compiles. + + + + +
diff --git a/doc/xorg-docs/general/input/Makefile.am b/doc/xorg-docs/general/input/Makefile.am new file mode 100644 index 000000000..292ed2c25 --- /dev/null +++ b/doc/xorg-docs/general/input/Makefile.am @@ -0,0 +1,10 @@ +if ENABLE_DOCS + +doc_sources = XKB-Config.xml XKB-Enhancing.xml + +xmldir = $(docdir)/input +dist_xml_DATA = $(doc_sources) + +include $(top_srcdir)/xmlrules.in + +endif ENABLE_DOCS diff --git a/doc/xorg-docs/general/input/Makefile.in b/doc/xorg-docs/general/input/Makefile.in new file mode 100644 index 000000000..64263262f --- /dev/null +++ b/doc/xorg-docs/general/input/Makefile.in @@ -0,0 +1,442 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice (including the next +# paragraph) shall be included in all copies or substantial portions of the +# Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(am__dist_xml_DATA_DIST) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/xmlrules.in +@ENABLE_DOCS_TRUE@@HAVE_FOP_TRUE@@HAVE_XMLTO_TRUE@am__append_1 = $(doc_sources:.xml=.ps) $(doc_sources:.xml=.pdf) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@am__append_2 = $(doc_sources:.xml=.txt) +subdir = general/input +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(install_sh) -d +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__dist_xml_DATA_DIST = XKB-Config.xml XKB-Enhancing.xml +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(xmldir)" "$(DESTDIR)$(xmldir)" +dist_xmlDATA_INSTALL = $(INSTALL_DATA) +xmlDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_xml_DATA) $(xml_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ +ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APP_MAN_DIR = @APP_MAN_DIR@ +APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHANGELOG_CMD = @CHANGELOG_CMD@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CWARNFLAGS = @CWARNFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ +DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ENABLE_DOCS_FALSE = @ENABLE_DOCS_FALSE@ +ENABLE_DOCS_TRUE = @ENABLE_DOCS_TRUE@ +ENABLE_SPECS_FALSE = @ENABLE_SPECS_FALSE@ +ENABLE_SPECS_TRUE = @ENABLE_SPECS_TRUE@ +EXEEXT = @EXEEXT@ +FILE_MAN_DIR = @FILE_MAN_DIR@ +FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ +FOP = @FOP@ +GREP = @GREP@ +HAVE_FOP_FALSE = @HAVE_FOP_FALSE@ +HAVE_FOP_TRUE = @HAVE_FOP_TRUE@ +HAVE_STYLESHEETS_FALSE = @HAVE_STYLESHEETS_FALSE@ +HAVE_STYLESHEETS_TRUE = @HAVE_STYLESHEETS_TRUE@ +HAVE_XMLTO_FALSE = @HAVE_XMLTO_FALSE@ +HAVE_XMLTO_TEXT_FALSE = @HAVE_XMLTO_TEXT_FALSE@ +HAVE_XMLTO_TEXT_TRUE = @HAVE_XMLTO_TEXT_TRUE@ +HAVE_XMLTO_TRUE = @HAVE_XMLTO_TRUE@ +INSTALL_CMD = @INSTALL_CMD@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIB_MAN_DIR = @LIB_MAN_DIR@ +LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +MAN_SUBSTS = @MAN_SUBSTS@ +MISC_MAN_DIR = @MISC_MAN_DIR@ +MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ +VERSION = @VERSION@ +XMLTO = @XMLTO@ +XORG_MAN_PAGE = @XORG_MAN_PAGE@ +XORG_SGML_PATH = @XORG_SGML_PATH@ +XSL_STYLESHEET = @XSL_STYLESHEET@ +ac_ct_CC = @ac_ct_CC@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +@ENABLE_DOCS_TRUE@doc_sources = XKB-Config.xml XKB-Enhancing.xml +@ENABLE_DOCS_TRUE@xmldir = $(docdir)/input +@ENABLE_DOCS_TRUE@dist_xml_DATA = $(doc_sources) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@xml_DATA = \ +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(doc_sources:.xml=.html) \ +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(am__append_1) \ +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(am__append_2) +@ENABLE_DOCS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FLAGS = \ +@ENABLE_DOCS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ -m $(XSL_STYLESHEET) \ +@ENABLE_DOCS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --searchpath $(XORG_SGML_PATH)/X11 \ +@ENABLE_DOCS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam html.stylesheet=$(STYLESHEET_SRCDIR)/xorg.css \ +@ENABLE_DOCS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam img.src.path=$(abs_builddir)/ + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@CLEANFILES = $(xml_DATA) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@SUFFIXES = .xml .ps .pdf .txt .html +all: all-am + +.SUFFIXES: +.SUFFIXES: .xml .ps .pdf .txt .html +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/xmlrules.in $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign general/input/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --foreign general/input/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +uninstall-info-am: +install-dist_xmlDATA: $(dist_xml_DATA) + @$(NORMAL_INSTALL) + test -z "$(xmldir)" || $(mkdir_p) "$(DESTDIR)$(xmldir)" + @list='$(dist_xml_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_xmlDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(xmldir)/$$f'"; \ + $(dist_xmlDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(xmldir)/$$f"; \ + done + +uninstall-dist_xmlDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_xml_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(xmldir)/$$f'"; \ + rm -f "$(DESTDIR)$(xmldir)/$$f"; \ + done +install-xmlDATA: $(xml_DATA) + @$(NORMAL_INSTALL) + test -z "$(xmldir)" || $(mkdir_p) "$(DESTDIR)$(xmldir)" + @list='$(xml_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(xmlDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(xmldir)/$$f'"; \ + $(xmlDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(xmldir)/$$f"; \ + done + +uninstall-xmlDATA: + @$(NORMAL_UNINSTALL) + @list='$(xml_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(xmldir)/$$f'"; \ + rm -f "$(DESTDIR)$(xmldir)/$$f"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + $(mkdir_p) $(distdir)/../.. + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(xmldir)" "$(DESTDIR)$(xmldir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +@ENABLE_DOCS_FALSE@clean-local: +@HAVE_XMLTO_FALSE@clean-local: +clean: clean-am + +clean-am: clean-generic clean-local mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-dist_xmlDATA install-xmlDATA + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_xmlDATA uninstall-info-am \ + uninstall-xmlDATA + +.PHONY: all all-am check check-am clean clean-generic clean-local \ + distclean distclean-generic distdir dvi dvi-am html html-am \ + info info-am install install-am install-data install-data-am \ + install-dist_xmlDATA install-exec install-exec-am install-info \ + install-info-am install-man install-strip install-xmlDATA \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am uninstall uninstall-am uninstall-dist_xmlDATA \ + uninstall-info-am uninstall-xmlDATA + + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@%.txt: %.xml $(dist_xml_DATA) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) txt $< + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@%.html: %.xml $(dist_xml_DATA) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) xhtml-nochunks $< + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@%.pdf: %.xml $(dist_xml_DATA) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop pdf $< + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@%.ps: %.xml $(dist_xml_DATA) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop ps $< + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@chunked-html: $(doc_sources) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) -o html xhtml $(doc_sources) + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@clean-local: +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)rm -fr html/ +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/doc/xorg-docs/general/input/XKB-Config.xml b/doc/xorg-docs/general/input/XKB-Config.xml new file mode 100644 index 000000000..fab061c09 --- /dev/null +++ b/doc/xorg-docs/general/input/XKB-Config.xml @@ -0,0 +1,319 @@ + + + +
+ + + + The XKB Configuration Guide + + + KamilToman + + + IvanU. + Pascal + + + November 2010 + + + + +This document describes how to configure Xorg XKB from a user's point +of view. It covers basic configuration syntax and gives also a few examples. + + +This version covers Xorg server versions 1.8 and later, used with the +data files from the xkeyboard-config project. + + + + + + + + Overview + + +The XKB configuration is decomposed into a number of components. Selecting +proper parts and combining them back you can achieve most of the configurations +you might need. Unless you have a completely atypical keyboard you really don't +need to touch any of the xkb configuration files. + + + +Some desktop environments now provide integrated graphical configuration +tools for setting XKB configuration as part of your desktop session. The +instructions in this document are provided for those without such support, +those who need to configure XKB before the session startup (such as at the +login screen), or those who need to perform more advanced configuration +than those tools provide. + + + + + + Selecting XKB Configuration + + +The easiest and the most natural way to specify a keyboard mapping is to use +the rules component. As its name suggests it describes a number of +general rules to combine all bits and pieces into a valid and useful keyboard +mapping. All you need to do is to select a suitable rules file and then to +feed it with a few parameters that will adjust the keyboard behaviour to +fulfill your needs. + + + + The parameters are: + + + + + +files of rules to be used for keyboard mapping composition + + + + + + + name of the model of your keyboard type + + + + + + + layout(s) you intend to use + + + + + + + variant(s) of the layout you intend to use + + + + + + + extra xkb configuration options + + + + + + + + +The rules file used depends on your system. The rules files commonly +used with Xorg are provided by the xkeyboard-config project. +On Linux systems, the evdev rules are most +commonly used, on other systems the base rules +are used. Some additional rules files exist for historical reasons, +but are no longer widely used. In general, it's best to simply not +specify the rules file, in order to use the default rules selected +automatically by the X server. + + +For each rules file there is a description file named +<vendor-rules>.lst, +for instance base.lst which is located in +the xkb configuration subdirectory rules +(for example /usr/share/X11/xkb/rules). + + + + Basic Configuration + + +Let's say you want to configure a PC-style American keyboard with 104 +keys as described in base.lst. This can be done +by simply writing several lines from below to a new configuration file +in /etc/X11/xorg.conf.d, such +as /etc/X11/xorg.conf.d/90-custom-kbd.conf. + + + +Section "InputClass" + Identifier "keyboard defaults" + MatchIsKeyboard "on" + + Option "XkbModel" "pc104" + Option "XkbLayout" "us" + Option "XKbOptions" "" +EndSection + + +The values of and are +really not surprising. The +has been explicitly set to the empty set of parameters. +The option has been left out. +That means the default variant named basic +is loaded. + + + +Of course, this can be also done at runtime using the utility +setxkbmap. +The shell command loading the same keyboard mapping would look like: + + +setxkbmap -model pc104 -layout us -option "" + + +The configuration and the shell command would be very analogous +for most other layouts (internationalized mappings). + + + +If you wanted to enable the Ctrl +AltBackspace sequence to kill +the X server by default, you could create a configuration snippet +/etc/X11/xorg.conf.d/90-zap.conf containing: + + +Section "InputClass" + Identifier "keyboard defaults" + MatchIsKeyboard "on" + + Option "XKbOptions" "terminate:ctrl_alt_bksp" +EndSection + + +This would be equivalent to running the shell command: + + +setxkbmap -option "terminate:ctrl_alt_bksp" + + + + + + + Advanced Configuration + + +You can use multi-layouts xkb configuration. +What does it mean? Basically it allows to load up to four different +keyboard layouts at a time. Each such layout would reside in its +own group. The groups (unlike complete keyboard remapping) can be +switched very fast from one to another by a combination of keys. + + + +Let's say you want to configure your new Logitech cordless desktop +keyboard, you intend to use three different layouts at the same +time - us, czech and german (in this order), and that you are used to +AltShift +combination for switching among them. + + + +Then the configuration snippet could look like this: + + +Section "InputClass" + Identifier "Logitech Cordless" + MatchIsKeyboard "on" + + Option "XkbModel" "logicordless" + Option "XkbLayout" "us,cz,de" + Option "XKbOptions" "grp:alt_shift_toggle" +EndSection + + +Of course, this can be also done at runtime using the utility +setxkbmap. +The shell command loading the same keyboard mapping would look like: + + +setxkbmap -model logicordless -layout "us,cz,de" \ + -option "grp:alt_shift_toggle" + + + + + + + + Even More Advanced Configuration + + +Okay, let's say you are more demanding. You do like the example +above but you want it to change a bit. Let's imagine you want +the czech keyboard mapping to use another variant but basic. +The configuration snippet then changes into: + + +Section "InputClass" + Identifier "Logitech Cordless" + MatchIsKeyboard "on" + + Option "XkbModel" "logicordless" + Option "XkbLayout" "us,cz,de" + Option "XkbVariant" ",bksl," + Option "XKbOptions" "grp:alt_shift_toggle" +EndSection + + +That seems tricky but it is not. The logic for settings of variants +is the same as for layouts, that means the first and the third variant +settings are left out (set to basic), +the second is set to bksl (a special +variant with an enhanced definition of the backslash key). + + + +Analogously, the loading runtime will change to: + + +setxkbmap -model logicordless -layout "us,cz,de" \ + -variant ",bksl," -option "grp:alt_shift_toggle" + + + + + + + + Basic Global Options + + +For a list of available options, with a short decription of what they do, +see the section starting with ! option in the +rules/*.lst files. + + + + + + + + + + Keymap XKB Configuration + + +Keymap configuration is the way formerly used to configure xkb. The +user included a special keymap file which specified the direct xkb +configuration. This method has been obsoleted by previously described +rules files which are far more flexible and allow simpler and more +intuitive syntax. It is preserved merely for compatibility reasons and +should be avoided if possible. + + + + +
diff --git a/doc/xorg-docs/general/input/XKB-Enhancing.xml b/doc/xorg-docs/general/input/XKB-Enhancing.xml new file mode 100644 index 000000000..060165198 --- /dev/null +++ b/doc/xorg-docs/general/input/XKB-Enhancing.xml @@ -0,0 +1,876 @@ + + + +
+ + + + How to further enhance XKB configuration + + + KamilToman + + + IvanU. + Pascal + + + 25 November 2002 + + + +This guide is aimed to relieve one's labour to create a new (internationalized) +keyboard layout. Unlike other documents this guide accents the keymap developer's point of view. + + + + + + + + Overview + + +The developer of a new layout should read the xkb +protocol specification (The X Keyboard Extension: Protocol Specification) at least +to clarify for himself some xkb-specific terms used in this document +and elsewhere in xkb configuration. Also it shows wise to understand +how the X server and a client digest their keyboard inputs +(with and without xkb). + + + +A useful source is also Ivan Pascal's text about xkb configuration often referenced throughout this +document. + + + +Note that this document covers only enhancements which +are to be made to XFree86 version 4.3 and X11R6.7.0 and above. + + + + + + The Basics + + +At the startup (or at later at user's command) X server starts its xkb +keyboard module extension and reads data from a compiled configuration +file. + + + +This compiled configuration file is prepared by the +program xkbcomp which behaves altogether as an +ordinary compiler (see man xkbcomp). +Its input are human readable xkb configuration files which are verified and +then composed into a useful xkb configuration. Users don't need to mess with +xkbcomp themselves, for them it is invisible. Usually, +it is started upon X server startup. + + + +As you probably already know, the xkb configuration consists of five +main modules: + + + + Keycodes + + +Tables that defines translation from keyboard scan codes into reasonable +symbolic names, maximum, minimum legal keycodes, symbolic aliases and +description of physically present LED-indicators. The primary sence of +this component is to allow definitions of maps of symbols (see below) +to be independent of physical keyboard scancodes. There are two main +naming conventions for symbolic names (always four bytes long): + + + + + names which express some traditional meaning like +<SPCE> (stands for space bar) or + + + + + + names which express some relative positioning on a keyboard, for +example <AE01> (an exclamation mark on US keyboards), on +the right there are keys <AE02>, <AE03> +etc. + + + + + + + + + Types + + +Types describe how the produced key is changed by active modifiers (like +Shift, Control, Alt, ...). There are several predefined types which +cover most of used combinations. + + + + + Compat + + +Compatibility component defines internal behaviour of modifiers. Using +compat component you can assign various actions (elaborately described +in xkb specification) to key events. This is also the place where +LED-indicators behaviour is defined. + + + + + Symbols + + +For i18n purposes, this is the most important table. It defines what +values (=symbols) are assigned to what keycodes (represented by their +symbolic name, see above). There may be defined more than one value +for each key and then it depends on a key type and on modifiers state +(respective compat component) which value will be the resulting one. + + + + + Geometry + + +Geometry files aren't used by xkb itself but they may be used by some +external programs to depict a keyboard image. + + + + +All these components have the files located in xkb configuration tree +in subdirectories with the same names (usually in +/usr/lib/X11/xkb). + + + + + + Enhancing XKB Configuration + + +Most of xkb enhancements concerns a need to define new output symbols +for the some input key events. In other words, a need to define a new +symbol map (for a new language, standard or just to feel more comfortable +when typing text). + + + +What do you need to do? Generally, you have to define following things: + + + + + the map of symbols itself + + + + + the rules to allow users to select the new mapping + + + + + the description of the new layout + + + + + + + +First of all, it is good to go through existing layouts and to examine +them if there is something you could easily adjust to fit your needs. +Even if there is nothing similar you may get some ideas about basic +concepts and used tricks. + + + + Levels And Groups + + +Since XFree86 4.3.0 and X11R6.7.0 you can use +multi-layout concept of xkb +configuration. +Though it is still in boundaries of xkb protocol and general ideas, the +keymap designer must obey new rules when creating new maps. In exchange +we get a more powerful and cleaner configuration system. + + + +Remember that it is the application which must decide which symbol +matches which keycode according to effective modifier state. The X server +itself sends only an input event message to. Of course, usually +the general interpretation is processed by Xlib, Xaw, Motif, Qt, Gtk +and similar libraries. The X server only supplies its mapping table +(usually upon an application startup). + + + +You can think of the X server's symbol table as of a irregular table where each +keycode has its row and where each combination of modifiers determines exactly +one column. The resulting cell then gives the proper symbolic value. Not all +keycodes need to bind different values for different combination of modifiers. +<ENTER> key, for instance, usually doesn't depend on any +modifiers so it its row has only one column defined. + + + +Note that in XKB there is no prior assumption that certain modifiers are bound +to certain columns. By editing proper files (see ) +this mapping can be changed as well. + + + +Unlike the original X protocol the XKB approach is far more +flexible. It is comfortable to add one additional XKB term - group. You can +think of a group as of a vector of columns per each keycode (naturally the +dimension of this vector may differ for different keycodes). What is it good +for? The group is not very useful unless you intend to use more than one +logically different set of symbols (like more than one alphabet) defined in a +single mapping table. But then, the group has a natural meaning - each symbol +set has its own group and changing it means selecting a different one. +XKB approach allows up to four different groups. The columns inside each group +are called (shift) levels. The X server knows the current group and reports it +together with modifier set and with a keycode in key events. + + + +To sum it up: + + + + + for each keycode XKB keyboard map contains up to four one-dimensional +tables - groups (logically different symbol sets) + + + + + for each group of a keycode XKB keyboard map contains some columns +- shift levels (values reached by combinations of Shift, Ctrl, Alt, ... +modifiers) + + + + + different keycodes can have different number of groups + + + + + different groups of one keycode can have different number of shift levels + + + + + the current group number is tracked by X server + + + + + + +It is clear that if you sanely define levels, groups and sanely bind +modifiers and associated actions you can have simultaneously loaded up to +four different symbol sets where each of them would reside in its own group. + + + +The multi-layout concept provides a facility to manipulate xkb groups +and symbol definitions in a way that allows almost arbitrary composition of +predefined symbol tables. To keep it fully functional you have to: + + + + + define all symbols only in the first group + + + + + (re)define any modifiers with extra care to avoid strange (anisometric) +behaviour + + + + + + + + + + + + Defining New Layouts + + + + +See Some Words About XKB internals for explanation of used xkb terms and problems +addressed by XKB extension. + + + +See Common notes about XKB configuration files language for more precise explanation of +syntax of xkb configuration files. + + + + Predefined XKB Symbol Sets + + +If you are about to define some European symbol map extension, you might +want to use on of four predefined latin alphabet layouts. + + + + + +Okay, let's assume you want extend an existing keymap and you want to override +a few keys. Let's take a simple U.K. keyboard as an example (defined in +pc/gb): + + +partial default alphanumeric_keys +xkb_symbols "basic" { + include "pc/latin" + + name[Group1]="Great Britain"; + + key <AE02> { [ 2, quotedbl, twosuperior, oneeighth ] }; + key <AE03> { [ 3, sterling, threesuperior, sterling ] }; + key <AC11> { [apostrophe, at, dead_circumflex, dead_caron] }; + key <TLDE> { [ grave, notsign, bar, bar ] }; + key <BKSL> { [numbersign, asciitilde, dead_grave, dead_breve ] }; + key <RALT> { type[Group1]="TWO_LEVEL", + [ ISO_Level3_Shift, Multi_key ] }; + + modifier_map Mod5 { <RALT> }; +}; + + + + + + + +It defines a new layout in basic variant as an extension of common +latin alphabet layout. The layout (symbol set) name is set to "Great Britain". +Then there are redefinitions of a few keycodes and a modifiers binding. As you +can see the number of shift levels is the same for +<AE02>, <AE03>, +<AC11>, <TLDE> and +<BKSL> keys but it differs from number of shift +levels of <RALT>. + + + +Note that the <RALT> key itself is a binding key for Mod5 and +that it +serves like a shift modifier for LevelThree, together with Shift +as a multi-key. It is a good habit to respect this rule in a new similar +layout. + + + +Okay, you could now define more variants of your new layout besides +basic simply by including (augmenting/overriding/...) the basic +definition and altering what may be needed. + + + + + + Key Types + + +The differences in the number of columns (shift levels) are caused by +a different types of keys (see the types definition in section basics). Most +keycodes have implicitly set the keytype in the included +pc/latin file to +FOUR_LEVEL_ALPHABETIC. The only exception is +<RALT> keycode which is explicitly set +TWO_LEVEL keytype. + + + +All those names refer to pre-defined shift level schemes. Usually you can +choose a suitable shift level scheme from default types scheme list +in proper xkb component's subdirectory. + + + +The most used schemes are: + + + ONE_LEVEL + + +The key does not depend on any modifiers. The symbol from first level +is always chosen. + + + + + TWO_LEVEL + + +The key uses a modifier Shift and may have two possible values. +The second level may be chosen by Shift modifier. If Lock modifier +(usually Caps-lock) applies the symbol is further processed using +system-specific capitalization rules. If both Shift+Lock modifier apply the +symbol from the second level is taken and capitalization rules are applied +(and usually have no effect). + + + + + ALPHABETIC + + +The key uses modifiers Shift and Lock. It may have two possible +values. The second level may be chosen by Shift modifier. When Lock +modifier applies, the symbol from the first level is taken and further +processed using system-specific capitalization rules. If both Shift+Lock +modifier apply the symbol from the first level is taken and no +capitalization rules applied. This is often called shift-cancels-caps +behaviour. + + + + + THREE_LEVEL + + +Is the same as TWO_LEVEL but it considers an extra modifier - +LevelThree which can be used to gain the symbol value from the third +level. If both Shift+LevelThree modifiers apply the value from the third +level is also taken. As in TWO_LEVEL, the Lock modifier doesn't influence +the resulting level. Only Shift and LevelThree are taken into that +consideration. If the Lock modifier is active capitalization rules +are applied on the resulting symbol. + + + + + FOUR_LEVEL + + +Is the same as THREE_LEVEL but unlike LEVEL_THREE if both Shift+LevelThree +modifiers apply the symbol is taken from the fourth level. + + + + + FOUR_LEVEL_ALPHABETIC + + +Is similar to FOUR_LEVEL but also defines shift-cancels-caps behaviour +as in ALPHABETIC. If Lock+LevelThree apply the symbol from the +third level is taken and the capitalization rules are applied. +If Lock+Shift+LevelThree apply the symbol from the third level is taken +and no capitalization rules are applied. + + + + + KEYPAD + + +As the name suggest this scheme is primarily used for numeric keypads. +The scheme considers two modifiers - Shift and NumLock. If none +of modifiers applies the symbol from the first level is taken. If either +Shift or NumLock modifiers apply the symbol from the second level is taken. +If both Shift+NumLock modifiers apply the symbol from the first level +is taken. Again, shift-cancels-caps variant. + + + + + FOUR_LEVEL_KEYPAD + + +Is similar to KEYPAD scheme but considers also LevelThree modifier. +If LevelThree modifier applies the symbol from the third level is taken. +If Shift+LevelThree or NumLock+LevelThree apply the symbol from the fourth +level is taken. If all Shift+NumLock+LevelThree modifiers apply the symbol +from the third level is taken. This also, shift-cancels-caps variant. + + + + + + + +Besides that, there are several schemes for special purposes: + + + + PC_BREAK + + +It is similar to TWO_LEVEL scheme but it considers the Control +modifier rather than Shift. That means, the symbol from the second level +is chosen by Control rather than by Shift. + + + + + PC_SYSRQ + + +It is similar to TWO_LEVEL scheme but it considers the Alt modifier rather +than Shift. That means, the symbol from the second level +is chosen by Alt rather than by Shift. + + + + + CTRL+ALT + + +The key uses modifiers Alt and Control. It may have two possible +values. If only one modifier (Alt or Control) applies the symbol +from the first level is chosen. Only if both Alt+Control modifiers apply +the symbol from the second level is chosen. + + + + + SHIFT+ALT + + +The key uses modifiers Shift and Alt. It may have two possible values. +If only one modifier (Alt or Shift) applies the symbol +from the first level is chosen. Only if both Alt+Shift modifiers apply +the symbol from the second level is chosen. + + + + + + + +If needed, special caps schemes may be used. +They redefine the standard behaviour of all +*ALPHABETIC types. The layouts (maps of +symbols) with keys defined in respective types then automatically change +their behaviour accordingly. Possible redefinitions are: + + + internal + internal_nocancel + shift + shift_nocancel + + +None of these schemes should be used directly. They are defined merely +for 'caps:' xkb options (used to globally +change the layouts behaviour). + + + +Don't alter any of existing key types. If you need a different behaviour +create a new one. + + + + More On Definitions Of Types + + +When the XKB software deals with a separate type description it gets +a complete list of modifiers that should be taken into account from the +'modifiers=<list of modifiers>' list and expects that a set +of 'map[<combination of modifiers>]=<list of modifiers>' +instructions that contain the mapping for each combination of modifiers +mentioned in that list. Modifiers that are not explicitly listed are NOT taken +into account +when the resulting shift level is computed. +If some combination is omitted the program (subroutine) should choose the first +level for this combination (a quite reasonable behavior). + + + +Lets consider an example with two modifiers ModOne and +ModTwo: + + +type "..." { + modifiers = ModOne+ModTwo; + map[None] = Level1; + map[ModOne] = Level2; +}; + + +In this case the map statements for ModTwo only and +ModOne+ModTwo are omitted. It means that if +the ModTwo is active the subroutine can't found +explicit mapping for such combination an will use +the default level i.e. Level1. + + + +But in the case the type described as: + + +type "..." { + modifiers = ModOne; + map[None] = Level1; + map[ModOne] = Level2; +}; + + +the ModTwo will not be taken into account and the resulting level depends on +the ModOne state only. That means, ModTwo alone produces the Level1 but the +combination ModOne+ModTwo produces the Level2 as well as ModOne alone. + + + +What does it mean if the second modifier is the Lock? It means that in +the first case (the Lock itself is included in the list of modifiers but +combinations with this modifier aren't mentioned in the map statements) +the internal capitalization rules will be applied to the symbol from the first +level. But in the second case the capitalization will be applied to the symbol +chosen accordingly to he first modifier - and this can be the symbol from the +first as well as from the second level. + + + +Usually, all modifiers introduced in 'modifiers=<list of modifiers>' list are used for shift level calculation and then +discarded. Sometimes this is not desirable. If you want to use a modifier +for shift level calculation but you don't want to discard it, you may +list in 'preserve[<combination of modifiers>]=<list of modifiers>'. That means, for a given combination all listed modifiers +will be preserved. If the Lock modifier is preserved then the resulting +symbol is passed to internal capitalization routine regardless whether +it has been used for a shift level calculation or not. + + + +Any key type description can use both real and virtual modifiers. Since real +modifiers always have standard names it is not necessary to explicitly declare +them. Virtual modifiers can have arbitrary names and can be declared (prior +using them) directly in key type definition: + + +virtual_modifiers <comma-separated list of modifiers> ; + + +as seen in for example basic, pc or mousekeys key +type definitions. + + + + + + + + Rules + + +Once you are finished with your symbol map you need to add it +to rules file. The rules file describes how all the +five basic keycodes, types, compat, symbols and geometry components +should be composed to give a sensible resulting xkb configuration. + + + +The main advantage of rules over formerly used keymaps is a possibility +to simply parameterize (once) fixed patterns of configurations and thus +to elegantly allow substitutions of various local configurations +into predefined templates. + + + +A pattern in a rules file (often located in +/usr/lib/X11/xkb/rules) + can be parameterized with four other arguments: +Model, Layout, +Variant and Options. +For most cases parameters model and +layout should +be sufficient for choosing a functional keyboard mapping. + + + +The rules file itself is composed of pattern lines and lines with rules. The +pattern line starts with an exclamation mark ('!') +and describes how will the xkb interpret the following lines (rules). A sample +rules file looks like this: + + +! model = keycodes + macintosh_old = macintosh + ... + * = xorg + +! model = symbols + hp = +inet(%m) + microsoftpro = +inet(%m) + geniuscomfy = +inet(%m) + +! model layout[1] = symbols + macintosh us = macintosh/us%(v[1]) + * * = pc/pc(%m)+pc/%l[1]%(v[1]) + +! model layout[2] = symbols + macintosh us = +macintosh/us[2]%(v[2]):2 + * * = +pc/%l[2]%(v[2]):2 + +! option = types + caps:internal = +caps(internal) + caps:internal_nocancel = +caps(internal_nocancel) + + + + + +Each rule defines what certain combination of values on the left side +of equal sign ('=') results in. For +example a (keyboard) model macintosh_old +instructs xkb to take definitions of keycodes from +file keycodes/macintosh while the rest +of models (represented by a wild card '*') +instructs it to take them from file keycodes/xorg. +The wild card represents all possible values on the left side which +were not found in any of the previous rules. The more specialized +(more complete) rules have higher precedence than general ones, +i.e. the more general rules supply reasonable default values. + + + +As you can see some lines contain substitution parameters - the parameters +preceded by the percent sign ('%'). +The first alphabetical character after the percent sign expands to the +value which has been found on the left side. For +example +%l%(v) expands +into +cz(bksl) if the respective values +on the left side were cz layout in +its bksl variant. More, if the layout +resp. variant parameter is followed by a pair of brackets +('[', ']') +it means that xkb should place the layout resp. variant into +specified xkb group. If the brackets are omitted the first +group is the default value. + + + +So the second block of rules enhances symbol definitions for some particular +keyboard models with extra keys (for internet, multimedia, ...) . Other models +are left intact. Similarly, the last block overrides some key type definitions, +so the common global behaviour ''shift cancels caps'' or ''shift doesn't cancel +caps'' can be selected. The rest of rules produces special symbols for each +variant us layout of +macintosh keyboard and standard pc +symbols in appropriate variants as a default. + + + + + + + + + + Descriptive Files of Rules + + +Now you just need to add a detailed description to +<rules>.xml +description file so the other users (and external programs which often parse +this file) know what is your work about. + + + + + + Old Descriptive Files + + +The formerly used descriptive files were named <rules>.lst +Its structure is very simple and quite self descriptive but such simplicity +had also some cavities, for example there was no way how to describe local +variants of layouts and there were problems with the localization of +descriptions. To preserve compatibility with some older programs, +new XML descriptive files can be converted to old format '.lst'. + + + +For each parameter of rules file should be described its meaning. For the rules +file described above the .lst file could look like: + + +! model + pc104 Generic 104-key PC + microsoft Microsoft Natural + pc98 PC-98xx Series + macintosh Original Macintosh + ... + +! layout + us U.S. English + cz Czech + de German + ... + +! option + caps:internal uses internal capitalization. Shift cancels Caps + caps:internal_nocancel uses internal capitalization. Shift doesn't cancel Caps + + + + + + +And that should be it. Enjoy creating your own xkb mapping. + + + + + + + + +
diff --git a/doc/xorg-docs/general/platforms/Darwin.xml b/doc/xorg-docs/general/platforms/Darwin.xml new file mode 100644 index 000000000..552eee014 --- /dev/null +++ b/doc/xorg-docs/general/platforms/Darwin.xml @@ -0,0 +1,42 @@ + + %defs; +]> + +
+ + + + X.Org X11R&relvers; on Darwin and Mac OS X + October 2009 + + + + + Introduction + + + X11R&relvers;, a freely + redistributable open-source implementation of the + X Window System from + the X.Org + Foundation, has been ported to + Darwin + and Mac OS X. + + + + Most of the current work on X for Darwin and Mac OS X is + centered around the + XQuartz Project + at MacOSforge. + If you are interested in up-to-date status, want to report a bug, + or are interested in working on X11 for Darwin, stop by the project + website at + + + + +
diff --git a/doc/xorg-docs/general/platforms/Makefile.am b/doc/xorg-docs/general/platforms/Makefile.am new file mode 100644 index 000000000..65dbf2ab9 --- /dev/null +++ b/doc/xorg-docs/general/platforms/Makefile.am @@ -0,0 +1,12 @@ +if ENABLE_DOCS + +doc_sources = \ + Darwin.xml \ + Solaris.xml + +xmldir = $(docdir)/platforms +dist_xml_DATA = $(doc_sources) + +include $(top_srcdir)/xmlrules.in + +endif ENABLE_DOCS diff --git a/doc/xorg-docs/general/platforms/Makefile.in b/doc/xorg-docs/general/platforms/Makefile.in new file mode 100644 index 000000000..44d7f939e --- /dev/null +++ b/doc/xorg-docs/general/platforms/Makefile.in @@ -0,0 +1,445 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice (including the next +# paragraph) shall be included in all copies or substantial portions of the +# Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(am__dist_xml_DATA_DIST) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/xmlrules.in +@ENABLE_DOCS_TRUE@@HAVE_FOP_TRUE@@HAVE_XMLTO_TRUE@am__append_1 = $(doc_sources:.xml=.ps) $(doc_sources:.xml=.pdf) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@am__append_2 = $(doc_sources:.xml=.txt) +subdir = general/platforms +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(install_sh) -d +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__dist_xml_DATA_DIST = Darwin.xml Solaris.xml +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(xmldir)" "$(DESTDIR)$(xmldir)" +dist_xmlDATA_INSTALL = $(INSTALL_DATA) +xmlDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_xml_DATA) $(xml_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ +ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APP_MAN_DIR = @APP_MAN_DIR@ +APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHANGELOG_CMD = @CHANGELOG_CMD@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CWARNFLAGS = @CWARNFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ +DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ENABLE_DOCS_FALSE = @ENABLE_DOCS_FALSE@ +ENABLE_DOCS_TRUE = @ENABLE_DOCS_TRUE@ +ENABLE_SPECS_FALSE = @ENABLE_SPECS_FALSE@ +ENABLE_SPECS_TRUE = @ENABLE_SPECS_TRUE@ +EXEEXT = @EXEEXT@ +FILE_MAN_DIR = @FILE_MAN_DIR@ +FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ +FOP = @FOP@ +GREP = @GREP@ +HAVE_FOP_FALSE = @HAVE_FOP_FALSE@ +HAVE_FOP_TRUE = @HAVE_FOP_TRUE@ +HAVE_STYLESHEETS_FALSE = @HAVE_STYLESHEETS_FALSE@ +HAVE_STYLESHEETS_TRUE = @HAVE_STYLESHEETS_TRUE@ +HAVE_XMLTO_FALSE = @HAVE_XMLTO_FALSE@ +HAVE_XMLTO_TEXT_FALSE = @HAVE_XMLTO_TEXT_FALSE@ +HAVE_XMLTO_TEXT_TRUE = @HAVE_XMLTO_TEXT_TRUE@ +HAVE_XMLTO_TRUE = @HAVE_XMLTO_TRUE@ +INSTALL_CMD = @INSTALL_CMD@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIB_MAN_DIR = @LIB_MAN_DIR@ +LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +MAN_SUBSTS = @MAN_SUBSTS@ +MISC_MAN_DIR = @MISC_MAN_DIR@ +MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ +VERSION = @VERSION@ +XMLTO = @XMLTO@ +XORG_MAN_PAGE = @XORG_MAN_PAGE@ +XORG_SGML_PATH = @XORG_SGML_PATH@ +XSL_STYLESHEET = @XSL_STYLESHEET@ +ac_ct_CC = @ac_ct_CC@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +@ENABLE_DOCS_TRUE@doc_sources = \ +@ENABLE_DOCS_TRUE@ Darwin.xml \ +@ENABLE_DOCS_TRUE@ Solaris.xml + +@ENABLE_DOCS_TRUE@xmldir = $(docdir)/platforms +@ENABLE_DOCS_TRUE@dist_xml_DATA = $(doc_sources) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@xml_DATA = \ +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(doc_sources:.xml=.html) \ +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(am__append_1) \ +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(am__append_2) +@ENABLE_DOCS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FLAGS = \ +@ENABLE_DOCS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ -m $(XSL_STYLESHEET) \ +@ENABLE_DOCS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --searchpath $(XORG_SGML_PATH)/X11 \ +@ENABLE_DOCS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam html.stylesheet=$(STYLESHEET_SRCDIR)/xorg.css \ +@ENABLE_DOCS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam img.src.path=$(abs_builddir)/ + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@CLEANFILES = $(xml_DATA) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@SUFFIXES = .xml .ps .pdf .txt .html +all: all-am + +.SUFFIXES: +.SUFFIXES: .xml .ps .pdf .txt .html +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/xmlrules.in $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign general/platforms/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --foreign general/platforms/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +uninstall-info-am: +install-dist_xmlDATA: $(dist_xml_DATA) + @$(NORMAL_INSTALL) + test -z "$(xmldir)" || $(mkdir_p) "$(DESTDIR)$(xmldir)" + @list='$(dist_xml_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_xmlDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(xmldir)/$$f'"; \ + $(dist_xmlDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(xmldir)/$$f"; \ + done + +uninstall-dist_xmlDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_xml_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(xmldir)/$$f'"; \ + rm -f "$(DESTDIR)$(xmldir)/$$f"; \ + done +install-xmlDATA: $(xml_DATA) + @$(NORMAL_INSTALL) + test -z "$(xmldir)" || $(mkdir_p) "$(DESTDIR)$(xmldir)" + @list='$(xml_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(xmlDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(xmldir)/$$f'"; \ + $(xmlDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(xmldir)/$$f"; \ + done + +uninstall-xmlDATA: + @$(NORMAL_UNINSTALL) + @list='$(xml_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(xmldir)/$$f'"; \ + rm -f "$(DESTDIR)$(xmldir)/$$f"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + $(mkdir_p) $(distdir)/../.. + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(xmldir)" "$(DESTDIR)$(xmldir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +@ENABLE_DOCS_FALSE@clean-local: +@HAVE_XMLTO_FALSE@clean-local: +clean: clean-am + +clean-am: clean-generic clean-local mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-dist_xmlDATA install-xmlDATA + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_xmlDATA uninstall-info-am \ + uninstall-xmlDATA + +.PHONY: all all-am check check-am clean clean-generic clean-local \ + distclean distclean-generic distdir dvi dvi-am html html-am \ + info info-am install install-am install-data install-data-am \ + install-dist_xmlDATA install-exec install-exec-am install-info \ + install-info-am install-man install-strip install-xmlDATA \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am uninstall uninstall-am uninstall-dist_xmlDATA \ + uninstall-info-am uninstall-xmlDATA + + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@%.txt: %.xml $(dist_xml_DATA) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) txt $< + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@%.html: %.xml $(dist_xml_DATA) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) xhtml-nochunks $< + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@%.pdf: %.xml $(dist_xml_DATA) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop pdf $< + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@%.ps: %.xml $(dist_xml_DATA) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop ps $< + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@chunked-html: $(doc_sources) +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) -o html xhtml $(doc_sources) + +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@clean-local: +@ENABLE_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)rm -fr html/ +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/doc/xorg-docs/general/platforms/Solaris.xml b/doc/xorg-docs/general/platforms/Solaris.xml new file mode 100644 index 000000000..0a60a3450 --- /dev/null +++ b/doc/xorg-docs/general/platforms/Solaris.xml @@ -0,0 +1,174 @@ + + %defs; +]> + +
+ + + + + X Window System support for <trademark>Solaris</trademark> & + <trademark>OpenSolaris</trademark> from X.Org + + + + DavidHolland + XFree86 + Project + + + + MarcAurele La France + XFree86 + Project + + + + AlanCoopersmith + Sun + Microsystems, Inc. + + + + 2009 September 16 + + + + + + +The VT-switching sub-system in Solaris + + +The original virtual terminal sub-system is a undocumented, and +unsupported feature of Solaris x86 releases 2.1 through 7. It was removed +in Solaris 8 and later releases, and was never present on Solaris SPARC. +Support for this version of virtual terminals is only present in Xorg 1.6.x +and earlier releases of Xorg, and has been removed in Xorg 1.7 and later. +If you use this form of virtual terminals, you do so at +YOUR OWN RISK. + + + +A new virtual terminal sub-system has been introduced in Solaris 11 +(currently available in pre-release development builds). This version +is supported on both SPARC and x86 platforms, though SPARC support is +limited to devices with "Coherent Console" support in the kernel frame buffer +driver. Support for it is found only in Xorg 1.7 and later releases. + + + +When available, the virtual terminals of Solaris work basically the same way as +most other VT sub-systems. + + + + + +Notes for building X11R&relvers; on Solaris + + + + + + +Both GCC, and the Sun Studio compilers are supported by X11R&relvers;. +The minimum recommended GCC release is 3.4. +Some earlier GCC's are known to not work and should be avoided. + + +You should also make certain your version of GCC predefines `sun'. +If needed edit /usr/local/lib/gcc-lib/*/*/specs, and modify the +*predefines: line. + + + + + +To build X11R&relvers; with GCC you need gcc and (optionally) c++filt from GNU +binutils. +Don't install gas or ld from GNU binutils, use the one provided by Sun. + + + + +If you are using Sun compilers to compile the X11R&relvers; distribution, you need to +modify your PATH appropriately so the Sun compiler tools are available. +Normally, they should be in +/opt/SUNWspro/bin + + + + +You MUST put +/usr/ccs/bin +at the front of your PATH. There are known problems with some GNU +replacements for the utilities found there, +so the /usr/ccs/bin versions of +these programs must be found before any possible GNU versions. +(Most notably GNU 'ar' does not work during the build). + + + + + + + + + + +Notes for running Xorg on Solaris + + + + + + +Depending on the release or architecture of Solaris you are running, you might +need to install an OS driver for an aperture device. + + +Under Solaris x86 2.5 and later, there's a system driver +(/dev/xsvc) +that provides this functionality. +It will be detected automatically by the server, so you don't need to install +the aperture driver. + + + +For older Solaris x86 and for Solaris SPARC releases, the source for this +driver is included in +hw/xfree86/os-support/solaris/apSolaris.shar +in the xserver source distribution. +Building, and installing the driver is relatively straight forward. Please read +its accompanying README file. + + + + +Xqueue is NOT supported under Solaris. + + + + + + + + + + + +Bug Notification + + +Bug reports should be reported at + using the +xorg product or sent to xorg@lists.freedesktop.org. + + + + +
diff --git a/doc/xorg-docs/man/general/Consortium.man b/doc/xorg-docs/man/Consortium.man similarity index 95% rename from doc/xorg-docs/man/general/Consortium.man rename to doc/xorg-docs/man/Consortium.man index b7080199c..d5b7b0c23 100644 --- a/doc/xorg-docs/man/general/Consortium.man +++ b/doc/xorg-docs/man/Consortium.man @@ -1,36 +1,34 @@ -.\" $TOG: Consortium.cpp /main/71 1997/10/13 14:55:16 kaleb $ .\" Copyright (c) 1993, 1994, 1996 X Consortium -.\" +.\" .\" Permission is hereby granted, free of charge, to any person obtaining a -.\" copy of this software and associated documentation files (the "Software"), -.\" to deal in the Software without restriction, including without limitation -.\" the rights to use, copy, modify, merge, publish, distribute, sublicense, -.\" and/or sell copies of the Software, and to permit persons to whom the +.\" copy of this software and associated documentation files (the "Software"), +.\" to deal in the Software without restriction, including without limitation +.\" the rights to use, copy, modify, merge, publish, distribute, sublicense, +.\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: -.\" +.\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. -.\" +.\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -.\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -.\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -.\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -.\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +.\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +.\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +.\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +.\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall not -.\" be used in advertising or otherwise to promote the sale, use or other -.\" dealing in this Software without prior written authorization from the -.\" X Consortium. .\" -.\" $XFree86$ +.\" Except as contained in this notice, the name of the X Consortium shall not +.\" be used in advertising or otherwise to promote the sale, use or other +.\" dealing in this Software without prior written authorization from the +.\" X Consortium. .\" .TH XCONSORTIUM __miscmansuffix__ __xorgversion__ .SH NAME XConsortium \- X Consortium information .SH SYNOPSIS -Release 6.3 of X Version 11 was brought to you by X Consortium, Inc. +Releases 6.0 through 6.3 of X Version 11 were brought to you by the +X Consortium, Inc. .SH DESCRIPTION The X Consortium was an independent, not-for-profit Delaware membership corporation. It was formed in 1993 as the successor to the MIT X Consortium. diff --git a/doc/xorg-docs/man/Makefile.am b/doc/xorg-docs/man/Makefile.am index 68eda4914..74ad43e43 100644 --- a/doc/xorg-docs/man/Makefile.am +++ b/doc/xorg-docs/man/Makefile.am @@ -20,4 +20,26 @@ # # Process this file with autoconf to create configure. -SUBDIRS = general +miscmandir = $(MISC_MAN_DIR) + +miscman_PRE = \ + Consortium.man \ + Xsecurity.man \ + Standards.man \ + X.man \ + XOrgFoundation.man \ + XProjectTeam.man + +miscman_DATA = $(miscman_PRE:man=@MISC_MAN_SUFFIX@) + +EXTRA_DIST = $(miscman_PRE) +CLEANFILES = $(miscman_DATA) +SUFFIXES = .$(MISC_MAN_SUFFIX) .man + +# String replacements in MAN_SUBSTS now come from xorg-macros.m4 via configure +MAN_SUBSTS += -e 's|__datadir__|$(datadir)|g' \ + -e 's|__libdir__|$(libdir)|g' \ + -e 's|__sysconfdir__|$(sysconfdir)|g' + +.man.$(MISC_MAN_SUFFIX): + $(AM_V_GEN)$(SED) $(MAN_SUBSTS) < $< > $@ diff --git a/doc/xorg-docs/man/Makefile.in b/doc/xorg-docs/man/Makefile.in index 672651c66..bdf5cbbed 100644 --- a/doc/xorg-docs/man/Makefile.in +++ b/doc/xorg-docs/man/Makefile.in @@ -35,6 +35,7 @@ # USE OR PERFORMANCE OF THIS SOFTWARE. # # Process this file with autoconf to create configure. + srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ @@ -67,48 +68,85 @@ mkinstalldirs = $(SHELL) $(install_sh) -d CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive -ETAGS = etags -CTAGS = ctags -DIST_SUBDIRS = $(SUBDIRS) +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(miscmandir)" +miscmanDATA_INSTALL = $(INSTALL_DATA) +DATA = $(miscman_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHANGELOG_CMD = @CHANGELOG_CMD@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ +DEPDIR = @DEPDIR@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ENABLE_DOCS_FALSE = @ENABLE_DOCS_FALSE@ +ENABLE_DOCS_TRUE = @ENABLE_DOCS_TRUE@ +ENABLE_SPECS_FALSE = @ENABLE_SPECS_FALSE@ +ENABLE_SPECS_TRUE = @ENABLE_SPECS_TRUE@ +EXEEXT = @EXEEXT@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ -HARDCOPYDIR = @HARDCOPYDIR@ +FOP = @FOP@ +GREP = @GREP@ +HAVE_FOP_FALSE = @HAVE_FOP_FALSE@ +HAVE_FOP_TRUE = @HAVE_FOP_TRUE@ +HAVE_STYLESHEETS_FALSE = @HAVE_STYLESHEETS_FALSE@ +HAVE_STYLESHEETS_TRUE = @HAVE_STYLESHEETS_TRUE@ +HAVE_XMLTO_FALSE = @HAVE_XMLTO_FALSE@ +HAVE_XMLTO_TEXT_FALSE = @HAVE_XMLTO_TEXT_FALSE@ +HAVE_XMLTO_TEXT_TRUE = @HAVE_XMLTO_TEXT_TRUE@ +HAVE_XMLTO_TRUE = @HAVE_XMLTO_TRUE@ +INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ + +# String replacements in MAN_SUBSTS now come from xorg-macros.m4 via configure +MAN_SUBSTS = @MAN_SUBSTS@ -e 's|__datadir__|$(datadir)|g' -e \ + 's|__libdir__|$(libdir)|g' -e \ + 's|__sysconfdir__|$(sysconfdir)|g' MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ +OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -116,13 +154,23 @@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ +STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ VERSION = @VERSION@ -X11DOCDIR = @X11DOCDIR@ -ac_ct_STRIP = @ac_ct_STRIP@ +XMLTO = @XMLTO@ +XORG_MAN_PAGE = @XORG_MAN_PAGE@ +XORG_SGML_PATH = @XORG_SGML_PATH@ +XSL_STYLESHEET = @XSL_STYLESHEET@ +ac_ct_CC = @ac_ct_CC@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ @@ -132,32 +180,52 @@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ -SUBDIRS = general -all: all-recursive +miscmandir = $(MISC_MAN_DIR) +miscman_PRE = \ + Consortium.man \ + Xsecurity.man \ + Standards.man \ + X.man \ + XOrgFoundation.man \ + XProjectTeam.man + +miscman_DATA = $(miscman_PRE:man=@MISC_MAN_SUFFIX@) +EXTRA_DIST = $(miscman_PRE) +CLEANFILES = $(miscman_DATA) +SUFFIXES = .$(MISC_MAN_SUFFIX) .man +all: all-am .SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +.SUFFIXES: .$(MISC_MAN_SUFFIX) .man +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ @@ -182,143 +250,34 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(top_srcdir)/configure: $(am__configure_deps) +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh uninstall-info-am: - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ +install-miscmanDATA: $(miscman_DATA) + @$(NORMAL_INSTALL) + test -z "$(miscmandir)" || $(mkdir_p) "$(DESTDIR)$(miscmandir)" + @list='$(miscman_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(miscmanDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(miscmandir)/$$f'"; \ + $(miscmanDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(miscmandir)/$$f"; \ done -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique +uninstall-miscmanDATA: + @$(NORMAL_UNINSTALL) + @list='$(miscman_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(miscmandir)/$$f'"; \ + rm -f "$(DESTDIR)$(miscmandir)/$$f"; \ + done tags: TAGS +TAGS: -TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ - fi ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique +CTAGS: -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ @@ -347,35 +306,22 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done - list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ - || exit 1; \ - distdir=`$(am__cd) $(distdir) && pwd`; \ - top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ - (cd $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$top_distdir" \ - distdir="$$distdir/$$subdir" \ - distdir) \ - || exit 1; \ - fi; \ - done check-am: all-am -check: check-recursive -all-am: Makefile -installdirs: installdirs-recursive -installdirs-am: -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(miscmandir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -installcheck: installcheck-recursive +installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ @@ -384,6 +330,7 @@ install-strip: mostlyclean-generic: clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) @@ -391,66 +338,64 @@ distclean-generic: maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -clean: clean-recursive +clean: clean-am clean-am: clean-generic mostlyclean-am -distclean: distclean-recursive +distclean: distclean-am -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-tags +distclean-am: clean-am distclean-generic -dvi: dvi-recursive +dvi: dvi-am dvi-am: -html: html-recursive +html: html-am -info: info-recursive +info: info-am info-am: -install-data-am: +install-data-am: install-miscmanDATA install-exec-am: -install-info: install-info-recursive +install-info: install-info-am install-man: installcheck-am: -maintainer-clean: maintainer-clean-recursive +maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic -mostlyclean: mostlyclean-recursive +mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic -pdf: pdf-recursive +pdf: pdf-am pdf-am: -ps: ps-recursive +ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: uninstall-info-am uninstall-miscmanDATA -uninstall-info: uninstall-info-recursive - -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-recursive ctags ctags-recursive \ - distclean distclean-generic distclean-recursive distclean-tags \ - distdir dvi dvi-am html html-am info info-am install \ - install-am install-data install-data-am install-exec \ +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-exec \ install-exec-am install-info install-info-am install-man \ - install-strip installcheck installcheck-am installdirs \ - installdirs-am maintainer-clean maintainer-clean-generic \ - maintainer-clean-recursive mostlyclean mostlyclean-generic \ - mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-info-am + install-miscmanDATA install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ + uninstall-am uninstall-info-am uninstall-miscmanDATA + +.man.$(MISC_MAN_SUFFIX): + $(AM_V_GEN)$(SED) $(MAN_SUBSTS) < $< > $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/doc/xorg-docs/man/general/Standards.man b/doc/xorg-docs/man/Standards.man similarity index 98% rename from doc/xorg-docs/man/general/Standards.man rename to doc/xorg-docs/man/Standards.man index d904efddb..49fe37aa1 100644 --- a/doc/xorg-docs/man/general/Standards.man +++ b/doc/xorg-docs/man/Standards.man @@ -1,5 +1,3 @@ -.\" $Xorg: Standards.cpp,v 1.3 2000/08/17 19:42:04 cpqbld Exp $ -.\" $XdotOrg: xc/doc/man/general/Standards.man,v 1.3 2004/09/03 16:18:18 kem Exp $ .\" Copyright (c) 1993, 1994, 1996, 2004 The Open Group .\" .\" All rights reserved. diff --git a/doc/xorg-docs/man/general/X.man b/doc/xorg-docs/man/X.man similarity index 83% rename from doc/xorg-docs/man/general/X.man rename to doc/xorg-docs/man/X.man index 484bc5720..1d426d4f5 100644 --- a/doc/xorg-docs/man/general/X.man +++ b/doc/xorg-docs/man/X.man @@ -1,9 +1,7 @@ -.\" $Xorg: X.cpp,v 1.3 2000/08/17 19:42:04 cpqbld Exp $ -.\" $XdotOrg: xc/doc/man/general/X.man,v 1.6 2004/12/08 13:42:01 ago Exp $ .\" .\" Copyright (c) 1994, 2004 The Open Group .\" Copyright \(co 2000 The XFree86 Project, Inc. -.\" +.\" .\" All rights reserved. .\" .\" Permission is hereby granted, free of charge, to any person obtaining a @@ -33,8 +31,6 @@ .\" .\" X Window System is a trademark of The Open Group. .\" -.\" $XFree86: xc/doc/man/general/X.man,v 1.7 2001/10/01 13:43:56 eich Exp $ -.\" .TH X __miscmansuffix__ __vendorversion__ .SH NAME X \- a portable, network-transparent window system @@ -76,7 +72,7 @@ X supports overlapping hierarchical subwindows and text and graphics operations, on both monochrome and color displays. For a full explanation of the functions that are available, see -the \fIXlib - C Language X Interface\fP manual, +the \fIXlib - C Language X Interface\fP manual, the \fIX Window System Protocol\fP specification, the \fIX Toolkit Intrinsics - C Language Interface\fP manual, and various toolkit documents. @@ -84,7 +80,7 @@ and various toolkit documents. The number of programs that use \fIX\fP is quite large. Programs provided in the core X.Org Foundation distribution include: a terminal emulator, \fIxterm\fP; -a window manager, \fItwm\fP; +a window manager, \fItwm\fP; a display manager, \fIxdm\fP; a console redirect program, \fIxconsole\fP; a bitmap editor, \fIbitmap\fP; @@ -93,7 +89,7 @@ access control programs, \fIxauth\fP, \fIxhost\fP, and \fIiceauth\fP; user preference setting programs, \fIxrdb\fP, \fIxcmsdb\fP, \fIxset\fP, \fIxsetroot\fP, \fIxstdcmap\fP, and \fIxmodmap\fP; clocks, \fIxclock\fP and \fIoclock\fP; -a font displayer, (\fIxfd\fP; +a font displayer, \fIxfd\fP; utilities for listing information about fonts, windows, and displays, \fIxlsfonts\fP, \fIxwininfo\fP, \fIxlsclients\fP, \fIxdpyinfo\fP, \fIxlsatoms\fP, and \fIxprop\fP; @@ -101,53 +97,50 @@ screen image manipulation utilities, \fIxwd\fP, \fIxwud\fP, and \fIxmag\fP; a performance measurement utility, \fIx11perf\fP; a font compiler, \fIbdftopcf\fP; a font server and related utilities, \fIxfs\fP, \fIfsinfo\fP, \fIfslsfonts\fP, \fIfstobdf\fP; -a display server and related utilities, \fIXserver\fP, \fImkfontdir\fP; +a display server and related utilities, \fIXserver\fP, \fIrgb\fP, \fImkfontdir\fP; a clipboard manager, \fIxclipboard\fP; keyboard description compiler and related utilities, \fIxkbcomp\fP, \fIsetxkbmap\fP \fIxkbprint\fP, \fIxkbbell\fP, \fIxkbevd\fP, \fIxkbvleds\fP, and \fIxkbwatch\fP; -a utility to terminate clients, \fIxkill\fP; +a utility to terminate clients, \fIxkill\fP; a firewall security proxy, \fIxfwp\fP; -and a utility to cause part or all of the screen to be redrawn, \fIxrefresh\fP. +and a utility to cause part or all of the screen to be redrawn, \fIxrefresh\fP. .PP Many other utilities, window managers, games, toolkits, etc. are included as user-contributed software in the X.Org Foundation distribution, or are available on the Internet. See your site administrator for details. .SH "STARTING UP" -.PP +.PP There are two main ways of getting the X server and an initial set of client applications started. The particular method used depends on what operating system you are running and whether or not you use other window systems in addition to X. .TP 8 -.B "\fIxdm\fP (the X Display Manager)" +.B "Display Manager" If you want to always have X running on your display, your site administrator -can set your machine up to use the X Display Manager \fIxdm\fP. This program +can set your machine up to use a Display Manager such as \fIxdm\fP, \fIgdm\fP, +or \fIkdm\fP. This program is typically started by the system at boot time and takes care of keeping the -server running and getting users logged in. If you are running -\fIxdm\fP, you will see a window on the screen welcoming you to the system and -asking for your username and password. Simply type them in as you would at -a normal terminal, pressing the Return key after each. If you make a mistake, -\fIxdm\fP will display an error message and ask you to try again. After you -have successfully logged in, \fIxdm\fP will start up your X environment. By -default, if you have an executable file named \fI.xsession\fP in your -home directory, -\fIxdm\fP will treat it as a program (or shell script) to run to start up -your initial clients (such as terminal emulators, clocks, a window manager, -user settings for things like the background, the speed of the pointer, etc.). -Your site administrator can provide details. +server running and getting users logged in. If you are running one of these +display managers, you will normally see a window on the screen welcoming you +to the system and asking for your login information. Simply type them in as +you would at a normal terminal. If you make a mistake, the display manager +will display an error message and ask you to try again. After you +have successfully logged in, the display manager will start up your X +environment. The documentation for the display manager you use can provide +more details. .TP 8 .B "\fIxinit\fP (run manually from the shell)" Sites that support more than one window system might choose to use the -\fIxinit\fP program for starting X manually. If this is true for your -machine, your site administrator will probably have provided a program +\fIxinit\fP program for starting X manually. If this is true for your +machine, your site administrator will probably have provided a program named "x11", "startx", or "xstart" that will do site-specific initialization -(such as loading convenient default resources, running a window manager, +(such as loading convenient default resources, running a window manager, displaying a clock, and starting several terminal emulators) in a nice way. If not, you can build such a script using the \fIxinit\fP program. This utility simply runs one user-specified program to start the server, runs another to start up any desired clients, and then waits for either to -finish. Since either or both of the user-specified programs may be a shell +finish. Since either or both of the user-specified programs may be a shell script, this gives substantial flexibility at the expense of a nice interface. For this reason, \fIxinit\fP is not intended for end users. .SH "DISPLAY NAMES" @@ -164,14 +157,13 @@ connect to the server and which screen it should use by default .TP 8 .I hostname The \fIhostname\fP specifies the name of the machine to which the display is -physically connected. If the hostname is not given, the most efficient way of +physically connected. If the hostname is not given, the most efficient way of communicating to a server on the same machine will be used. .TP 8 .I displaynumber -The phrase "display" is usually used to refer to collection of monitors that -share a common keyboard and pointer (mouse, tablet, etc.). Most workstations -tend to only have one keyboard, and therefore, only one display. Larger, -multi-user +The phrase "display" is usually used to refer to a collection of monitors that +share a common set of input devices (keyboard, mouse, tablet, etc.). +Most workstations tend to only have one display. Larger, multi-user systems, however, frequently have several displays so that more than one person can be doing graphics work at once. To avoid confusion, each display on a machine is assigned a \fIdisplay number\fP (beginning at 0) @@ -179,40 +171,43 @@ when the X server for that display is started. The display number must always be given in a display name. .TP 8 .I screennumber -Some displays share a single keyboard and pointer among two or more monitors. -Since each monitor has its own set of windows, each screen is assigned a +Some displays share their input devices among two or more monitors. +These may be configured as a single logical screen, which allows windows to +move across screens, or as individual screens, each with their own set of +windows. If configured such that each monitor has its own set of windows, +each screen is assigned a \fIscreen number\fP (beginning at 0) when the X server for that display is started. If the screen number is not given, screen 0 will be used. .PP -On POSIX systems, the default display name is stored +On POSIX systems, the default display name is stored in your DISPLAY environment variable. This variable is set automatically by the \fIxterm\fP terminal emulator. However, when you log into another -machine on a network, you will need to set DISPLAY by hand to point to your +machine on a network, you may need to set DISPLAY by hand to point to your display. For example, .sp .nf % setenv DISPLAY myws:0 $ DISPLAY=myws:0; export DISPLAY .fi -The \fIxon\fP script can be used to start an X program on a remote machine; +The \fIssh\fP program can be used to start an X program on a remote machine; it automatically sets the DISPLAY variable correctly. .PP -Finally, most X programs accept a command line option of -\fB-display \fIdisplayname\fR to temporarily override the contents of +Finally, most X programs accept a command line option of +\fB\-display \fIdisplayname\fR to temporarily override the contents of DISPLAY. This is most commonly used to pop windows on another person's -screen or as part of a "remote shell" command to start an xterm pointing back +screen or as part of a "remote shell" command to start an xterm pointing back to your display. For example, .sp .nf - % xeyes -display joesws:0 -geometry 1000x1000+0+0 - % rsh big xterm -display myws:0 -ls \fP, \fI\fP, \fI\fP := \fIh\fP | \fIhh\fP | \fIhhh\fP | \fIhhhh\fP \fIh\fP := single hexadecimal digits .fi -Note that \fIh\fP indicates the value scaled in 4 bits, +Note that \fIh\fP indicates the value scaled in 4 bits, \fIhh\fP the value scaled in 8 bits, \fIhhh\fP the value scaled in 12 bits, and \fIhhhh\fP the value scaled in 16 bits, respectively. @@ -558,7 +549,7 @@ a numeric specification, in one of the following formats: .fi .PP The R, G, and B represent single hexadecimal digits. -When fewer than 16 bits each are specified, +When fewer than 16 bits each are specified, they represent the most-significant bits of the value (unlike the "rgb:" syntax, in which values are scaled). For example, #3a7 is the same as #3000a0007000. @@ -578,7 +569,7 @@ These values will be gamma corrected by \fIXlib\fP before being sent to the X server. The input format for these values is an optional sign, a string of numbers possibly containing a decimal point, -and an optional exponent field containing an E or e +and an optional exponent field containing an E or e followed by a possibly signed integer string. .PP The standard device-independent string specifications have @@ -598,19 +589,19 @@ All of the values (C, H, V, X, Y, Z, a, b, u, v, y, x) are floating point values. Some of the values are constrained to be between zero and some upper bound; the upper bounds are given in parentheses above. -The syntax for these values is an optional '+' or '-' sign, +The syntax for these values is an optional '+' or '\-' sign, a string of digits possibly containing a decimal point, and an optional exponent field consisting of an 'E' or 'e' -followed by an optional '+' or '-' followed by a string of digits. +followed by an optional '+' or '\-' followed by a string of digits. .PP For more information on device independent color, see the \fIXlib\fP reference manual. .SH KEYBOARDS .PP The X keyboard model is broken into two layers: server-specific codes -(called \fIkeycodes\fP) which represent the physical keys, and +(called \fIkeycodes\fP) which represent the physical keys, and server-independent symbols (called \fIkeysyms\fP) which -represent the letters or words that appear on the keys. +represent the letters or words that appear on the keys. Two tables are kept in the server for converting keycodes to keysyms: .TP 8 .I "modifier list" @@ -618,11 +609,11 @@ Some keys (such as Shift, Control, and Caps Lock) are known as \fImodifier\fP and are used to select different symbols that are attached to a single key (such as Shift-a generates a capital A, and Control-l generates a control character ^L). The server keeps a list of keycodes corresponding to the -various modifier keys. Whenever a key is pressed or released, the server -generates an \fIevent\fP that contains the keycode of the indicated key as +various modifier keys. Whenever a key is pressed or released, the server +generates an \fIevent\fP that contains the keycode of the indicated key as well as a mask that specifies which of the modifier keys are currently pressed. Most servers set up this list to initially contain -the various shift, control, and shift lock keys on the keyboard. +the various shift, control, and shift lock keys on the keyboard. .TP 8 .I "keymap table" Applications translate event keycodes and modifier masks into keysyms @@ -683,15 +674,15 @@ Either option specifies the width in pixels of the window border. .B \-fg \fIcolor\fP, \fB\-foreground \fIcolor\fP Either option specifies the color to use for text or graphics. .TP 8 -.B \-fn \fIfont\fP, \fB-font \fIfont\fP +.B \-fn \fIfont\fP, \fB\-font \fIfont\fP Either option specifies the font to use for displaying text. .TP 8 .B \-iconic .br This option indicates that the user would prefer that the application's -windows initially not be visible as if the windows had be immediately +windows initially not be visible as if the windows had be immediately iconified by the user. Window managers may choose not to honor the -application's request. +application's request. .TP 8 .B \-name .br @@ -701,14 +692,14 @@ aliases to distinguish between invocations of an application, without resorting to creating links to alter the executable file name. .TP 8 .B \-rv\fP, \fB\-reverse\fP -Either option indicates that the program should simulate reverse video if +Either option indicates that the program should simulate reverse video if possible, often by swapping the foreground and background colors. Not all programs honor this or implement it correctly. It is usually only used on monochrome displays. .TP 8 .B \+rv .br -This option indicates that the program should not simulate reverse video. +This option indicates that the program should not simulate reverse video. This is used to override any defaults since reverse video doesn't always work properly. .TP 8 @@ -718,16 +709,16 @@ communicating applications must respond to one another for a selection request. .TP 8 .B \-synchronous -This option indicates that requests to the X server should be sent -synchronously, instead of asynchronously. Since +This option indicates that requests to the X server should be sent +synchronously, instead of asynchronously. Since .I Xlib normally buffers requests to the server, errors do not necessarily get reported immediately after they occur. This option turns off the buffering so that -the application can be debugged. It should never be used with a working +the application can be debugged. It should never be used with a working program. .TP 8 .B \-title \fIstring\fP -This option specifies the title to be used for this window. This information +This option specifies the title to be used for this window. This information is sometimes used by a window manager to provide some sort of header identifying the window. .TP 8 @@ -736,13 +727,15 @@ This option specifies the language, territory, and codeset for use in resolving resource and other filenames. .TP 8 .B \-xrm \fIresourcestring\fP -This option specifies a resource name and value to override any defaults. It -is also very useful for setting resources that don't have explicit command +This option specifies a resource name and value to override any defaults. It +is also very useful for setting resources that don't have explicit command line arguments. .SH RESOURCES -To make the tailoring of applications to personal preferences easier, X +To make the tailoring of applications to personal preferences easier, X provides a mechanism for storing default values for program resources -(e.g. background color, window title, etc.) +(e.g. background color, window title, etc.) that is used by programs that +use toolkits based on the X Toolkit Intrinsics library libXt. (Programs +using the common Gtk+ and Qt toolkits use other configuration mechanisms.) Resources are specified as strings that are read in from various places when an application is run. Program components are named in a hierarchical fashion, @@ -767,7 +760,7 @@ Binding = "\&." | "*" WhiteSpace = { | } Component = "?" | ComponentName ComponentName = NameChar {NameChar} -NameChar = "a"\-"z" | "A"\-"Z" | "0"\-"9" | "_" | "-" +NameChar = "a"\-"z" | "A"\-"Z" | "0"\-"9" | "_" | "\-" Value = {} .fi .PP @@ -853,12 +846,12 @@ entries that match using "?". An entry preceded by a tight binding takes precedence over entries preceded by a loose binding. .PP -Programs based on the X Tookit Intrinsics +Programs based on the X Toolkit Intrinsics obtain resources from the following sources (other programs usually support some subset of these sources): .TP 8 .B "RESOURCE_MANAGER root window property" -Any global resources that should be available to clients on all machines +Any global resources that should be available to clients on all machines should be stored in the RESOURCE_MANAGER property on the root window of the first screen using the \fIxrdb\fP program. This is frequently taken care @@ -866,7 +859,7 @@ of when the user starts up X through the display manager or \fIxinit\fP. .TP 8 .B "SCREEN_RESOURCES root window property" Any resources specific to a given screen (e.g. colors) -that should be available to clients on all machines +that should be available to clients on all machines should be stored in the SCREEN_RESOURCES property on the root window of that screen. The \fIxrdb\fP program will sort resources automatically and place them @@ -876,11 +869,11 @@ in RESOURCE_MANAGER or SCREEN_RESOURCES, as appropriate. Directories named by the environment variable XUSERFILESEARCHPATH or the environment variable XAPPLRESDIR (which names a single directory and should end with a '/' on POSIX systems), plus directories in a -standard place (usually under __projectroot__/lib/X11/, +standard place (usually under __datadir__/X11/, but this can be overridden with the XFILESEARCHPATH environment variable) are searched for for application-specific resources. For example, application default resources are usually kept in -__projectroot__/lib/X11/app-defaults/. +__datadir__/X11/app-defaults/. See the \fIX Toolkit Intrinsics - C Language Interface\fP manual for details. .TP 8 @@ -888,24 +881,24 @@ details. Any user- and machine-specific resources may be specified by setting the XENVIRONMENT environment variable to the name of a resource file to be loaded by all applications. If this variable is not defined, -a file named \fI$HOME\fP/.Xdefaults-\fIhostname\fP is looked for instead, +a file named \fI$HOME\fP/.Xdefaults\-\fIhostname\fP is looked for instead, where \fIhostname\fP is the name of the host where the application is executing. .TP 8 .B \-xrm \fIresourcestring\fP -Resources can also be specified from the +Resources can also be specified from the command line. The \fIresourcestring\fP is a single resource name and value as shown above. Note that if the string contains characters interpreted by the shell (e.g., asterisk), they must be quoted. Any number of \fB\-xrm\fP arguments may be given on the command line. .PP -Program resources are organized into groups called \fIclasses\fP, so that -collections of individual resources (each of which are +Program resources are organized into groups called \fIclasses\fP, so that +collections of individual resources (each of which are called \fIinstances\fP) can be set all at once. By convention, the instance name of a resource begins with a lowercase letter and class name with an upper case letter. -Multiple word resources are concatenated with the first letter of the +Multiple word resources are concatenated with the first letter of the succeeding words capitalized. Applications written with the X Toolkit Intrinsics will have at least the following resources: .PP @@ -926,7 +919,7 @@ Most applications using the X Toolkit Intrinsics also have the resource (class \fBForeground\fP), specifying the color to use for text and graphics within the window. .PP -By combining class and instance specifications, application preferences +By combining class and instance specifications, application preferences can be set quickly and easily. Users of color displays will frequently want to set Background and Foreground classes to particular defaults. Specific color instances such as text cursors can then be overridden @@ -943,7 +936,7 @@ without having to define all of the related resources. For example, XTerm*scrollBar: on XTerm*scrollbar*thickness: 5 XTerm*multiClickTime: 500 - XTerm*charClass: 33:48,37:48,45-47:48,64:48 + XTerm*charClass: 33:48,37:48,45\-47:48,64:48 XTerm*cutNewline: off XTerm*cutToBeginningOfLine: off XTerm*titeInhibit: on @@ -952,13 +945,13 @@ without having to define all of the related resources. For example, XLoad*Foreground: red XLoad*highlight: black XLoad*borderWidth: 0 - emacs*Geometry: 80x65-0-0 + emacs*Geometry: 80x65\-0\-0 emacs*Background: rgb:5b/76/86 emacs*Foreground: white emacs*Cursor: white emacs*BorderColor: white emacs*Font: 6x10 - xmag*geometry: -0-0 + xmag*geometry: \-0\-0 xmag*borderColor: white .fi .PP @@ -967,13 +960,13 @@ directory, they could be added to any existing resources in the server with the following command: .sp .nf - % xrdb -merge $HOME/.Xresources + % xrdb \-merge $HOME/.Xresources .fi .sp -This is frequently how user-friendly startup scripts merge user-specific +This is frequently how user-friendly startup scripts merge user-specific defaults into any site-wide defaults. All sites are encouraged to set up convenient -ways of automatically loading resources. See the \fIXlib\fP +ways of automatically loading resources. See the \fIXlib\fP manual section \fIResource Manager Functions\fP for more information. .SH ENVIRONMENT .TP @@ -987,8 +980,8 @@ X server. See section "Display Names" above. This must point to a file that contains authorization data. The default is \fI$HOME/.Xauthority\fP. See .BR Xsecurity (__miscmansuffix__), -.BR xauth (1), -.BR xdm (1), +.BR xauth (__appmansuffix__), +.BR xdm (__appmansuffix__), .BR Xau (3). .TP .SM @@ -1010,18 +1003,18 @@ text encoding. See This variable can be set to contain additional information important for the current locale setting. Typically set to \fI@im=\fP to enable a particular input method. See -.BR XSetLocaleModifiers (3). +.BR XSetLocaleModifiers (__libmansuffix__). .TP .SM .B XLOCALEDIR This must point to a directory containing the locale.alias file and Compose and XLC_LOCALE file hierarchies for all locales. The default value -is\fI __projectroot__/lib/X11/locale\fP. +is\fI __datadir__/X11/locale\fP. .TP .SM .B XENVIRONMENT This must point to a file containing X resources. The default is -\fI$HOME/.Xdefaults-\fP. Unlike\fI __projectroot__/lib/X11/Xresources\fP, +\fI$HOME/.Xdefaults\-\fP. Unlike \fI$HOME/.Xresources\fP, it is consulted each time an X application starts. .TP .SM @@ -1030,17 +1023,30 @@ This must contain a colon separated list of path templates, where libXt will search for resource files. The default value consists of .sp .nf - __projectroot__/lib/X11/%L/%T/%N%C%S:\\ - __projectroot__/lib/X11/%l/%T/%N%C%S:\\ - __projectroot__/lib/X11/%T/%N%C%S:\\ - __projectroot__/lib/X11/%L/%T/%N%S:\\ - __projectroot__/lib/X11/%l/%T/%N%S:\\ - __projectroot__/lib/X11/%T/%N%S + __sysconfdir__/X11/%L/%T/%N%C%S:\\ + __sysconfdir__/X11/%l/%T/%N%C%S:\\ + __sysconfdir__/X11/%T/%N%C%S:\\ + __sysconfdir__/X11/%L/%T/%N%S:\\ + __sysconfdir__/X11/%l/%T/%N%S:\\ + __sysconfdir__/X11/%T/%N%S:\\ + __datadir__/X11/%L/%T/%N%C%S:\\ + __datadir__/X11/%l/%T/%N%C%S:\\ + __datadir__/X11/%T/%N%C%S:\\ + __datadir__/X11/%L/%T/%N%S:\\ + __datadir__/X11/%l/%T/%N%S:\\ + __datadir__/X11/%T/%N%S:\\ + __libdir__/X11/%L/%T/%N%C%S:\\ + __libdir__/X11/%l/%T/%N%C%S:\\ + __libdir__/X11/%T/%N%C%S:\\ + __libdir__/X11/%L/%T/%N%S:\\ + __libdir__/X11/%l/%T/%N%S:\\ + __libdir__/X11/%T/%N%S .fi .sp A path template is transformed to a pathname by substituting: .sp .nf + %D => the implementation-specific default path %N => name (basename) being searched for %T => type (dirname) being searched for %S => suffix being searched for @@ -1074,6 +1080,7 @@ $XAPPLRESDIR defaults to \fI$HOME\fP, see below. A path template is transformed to a pathname by substituting: .sp .nf + %D => the implementation-specific default path %N => name (basename) being searched for %T => type (dirname) being searched for %S => suffix being searched for @@ -1094,17 +1101,12 @@ XUSERFILESEARCHPATH is not set. .SM .B XKEYSYMDB This must point to a file containing nonstandard keysym definitions. -The default value is\fI __projectroot__/lib/X11/XKeysymDB\fP. +The default value is\fI __datadir__/X11/XKeysymDB\fP. .TP .SM .B XCMSDB This must point to a color name database file. The default value is -\fI\__projectroot__/lib/X11/Xcms.txt\fP. -.TP -.SM -.B XFT_CONFIG -This must point to a configuration file for the Xft library. The default -value is\fI __projectroot__/lib/X11/XftConfig\fP. +\fI __libdir__/X11/Xcms.txt\fP. .TP .SM .B RESOURCE_NAME @@ -1113,13 +1115,13 @@ being executed. It defaults to the basename of pathname of the program. .TP .SM .B SESSION_MANAGER -Denotes the session manager the application should connect. See -.BR xsm (1), -.BR rstart (1). +Denotes the session manager to which the application should connect. See +.BR xsm (__appmansuffix__), +.BR rstart (__appmansuffix__). .TP .SM .B XF86BIGFONT_DISABLE -Setting this variable to a non-empty value disables the XFree86-Bigfont +Setting this variable to a non-empty value disables the XFree86\-Bigfont extension. This extension is a mechanism to reduce the memory consumption of big fonts by use of shared memory. .LP @@ -1149,44 +1151,42 @@ of big fonts by use of shared memory. .B _XKB_COMP_FAIL_BEEP .TP .SM -.I "" These variables influence the X Keyboard Extension. .SH EXAMPLES -The following is a collection of sample command lines for some of the +The following is a collection of sample command lines for some of the more frequently used commands. For more information on a particular command, please refer to that command's manual page. .sp .nf % xrdb $HOME/.Xresources - % xmodmap -e "keysym BackSpace = Delete" + % xmodmap \-e "keysym BackSpace = Delete" % mkfontdir /usr/local/lib/X11/otherfonts % xset fp+ /usr/local/lib/X11/otherfonts % xmodmap $HOME/.keymap.km - % xsetroot -solid 'rgbi:.8/.8/.8' + % xsetroot \-solid 'rgbi:.8/.8/.8' % xset b 100 400 c 50 s 1800 r on % xset q % twm % xmag - % xclock -geometry 48x48-0+0 -bg blue -fg white - % xeyes -geometry 48x48-48+0 - % xbiff -update 20 + % xclock \-geometry 48x48-0+0 \-bg blue \-fg white + % xeyes \-geometry 48x48\-48+0 + % xbiff \-update 20 % xlsfonts '*helvetica*' - % xwininfo -root - % xdpyinfo -display joesworkstation:0 - % xhost -joesworkstation + % xwininfo \-root + % xdpyinfo \-display joesworkstation:0 + % xhost \-joesworkstation % xrefresh % xwd | xwud % bitmap companylogo.bm 32x32 - % xcalc -bg blue -fg magenta - % xterm -geometry 80x66-0-0 -name myxterm $* - % xon filesysmachine xload + % xcalc \-bg blue \-fg magenta + % xterm \-geometry 80x66\-0\-0 \-name myxterm $* .fi .SH DIAGNOSTICS A wide variety of error messages are generated from various programs. The default error handler in \fIXlib\fP (also used by many toolkits) uses standard resources to construct diagnostic messages when errors occur. The defaults for these messages are usually stored in -\fI\__projectroot__/lib/X11/XErrorDB\fP. If this file is not present, +\fI\__datadir__/X11/XErrorDB\fP. If this file is not present, error messages will be rather terse and cryptic. .PP When the X Toolkit Intrinsics encounter errors converting resource strings to @@ -1196,7 +1196,7 @@ convenient when it is desirable to have one set of resources across a variety of displays (e.g. color vs. monochrome, lots of fonts vs. very few, etc.), although it can pose problems for trying to determine why an application might be failing. This behavior can be overridden by the setting the -\fIStringConversionsWarning\fP resource. +\fIStringConversionWarnings\fP resource. .PP To force the X Toolkit Intrinsics to always print string conversion error messages, @@ -1221,67 +1221,67 @@ the appropriate instance name can be placed before the asterisk: .BR XOrgFoundation (__miscmansuffix__), .BR XStandards (__miscmansuffix__), .BR Xsecurity (__miscmansuffix__), -.BR Xprint (__miscmansuffix__), .\" clients, utilities, and demos -.BR appres (1), -.BR bdftopcf (1), -.BR bitmap (1), -.BR editres (1), -.BR fsinfo (1), -.BR fslsfonts (1), -.BR fstobdf (1), -.BR iceauth (1), -.BR imake (1), -.BR makedepend (1), -.BR mkfontdir (1), -.BR oclock (1), -.BR resize (1), -.BR smproxy (1), -.BR twm (1), -.BR x11perf (1), -.BR x11perfcomp (1), -.BR xauth (1), -.BR xclipboard (1), -.BR xclock (1), -.BR xcmsdb (1), -.BR xconsole (1), -.BR xdm (1), -.BR xdpyinfo (1), -.BR xfd (1), -.BR xfs (1), -.BR xfwp (1), -.BR xhost (1), -.BR xinit (1), -.BR xkbbell (1), -.BR xkbcomp (1), -.BR xkbevd (1), -.BR xkbprint (1), -.BR xkbvleds (1), -.BR xkbwatch (1), -.BR xkill (1), -.BR xlogo (1), -.BR xlsatoms (1), -.BR xlsclients (1), -.BR xlsfonts (1), -.BR xmag (1), -.BR xmodmap (1), -.BR xprop (1), -.BR xrdb (1), -.BR xrefresh (1), -.BR xset (1), -.BR xsetroot (1), -.BR xsm (1), -.BR xstdcmap (1), -.BR xterm (1), -.BR xwd (1), -.BR xwininfo (1), -.BR xwud (1). +.BR appres (__appmansuffix__), +.BR bdftopcf (__appmansuffix__), +.BR bitmap (__appmansuffix__), +.BR editres (__appmansuffix__), +.BR fsinfo (__appmansuffix__), +.BR fslsfonts (__appmansuffix__), +.BR fstobdf (__appmansuffix__), +.BR iceauth (__appmansuffix__), +.BR imake (__appmansuffix__), +.BR makedepend (__appmansuffix__), +.BR mkfontdir (__appmansuffix__), +.BR oclock (__appmansuffix__), +.BR resize (__appmansuffix__), +.BR smproxy (__appmansuffix__), +.BR twm (__appmansuffix__), +.BR x11perf (__appmansuffix__), +.BR x11perfcomp (__appmansuffix__), +.BR xauth (__appmansuffix__), +.BR xclipboard (__appmansuffix__), +.BR xclock (__appmansuffix__), +.BR xcmsdb (__appmansuffix__), +.BR xconsole (__appmansuffix__), +.BR xdm (__appmansuffix__), +.BR xdpyinfo (__appmansuffix__), +.BR xfd (__appmansuffix__), +.BR xfs (__appmansuffix__), +.BR xfwp (__appmansuffix__), +.BR xhost (__appmansuffix__), +.BR xinit (__appmansuffix__), +.BR xkbbell (__appmansuffix__), +.BR xkbcomp (__appmansuffix__), +.BR xkbevd (__appmansuffix__), +.BR xkbprint (__appmansuffix__), +.BR xkbvleds (__appmansuffix__), +.BR xkbwatch (__appmansuffix__), +.BR xkill (__appmansuffix__), +.BR xlogo (__appmansuffix__), +.BR xlsatoms (__appmansuffix__), +.BR xlsclients (__appmansuffix__), +.BR xlsfonts (__appmansuffix__), +.BR xmag (__appmansuffix__), +.BR xmodmap (__appmansuffix__), +.BR xprop (__appmansuffix__), +.BR xrdb (__appmansuffix__), +.BR xrefresh (__appmansuffix__), +.BR xrx (__appmansuffix__), +.BR xset (__appmansuffix__), +.BR xsetroot (__appmansuffix__), +.BR xsm (__appmansuffix__), +.BR xstdcmap (__appmansuffix__), +.BR xterm (__appmansuffix__), +.BR xwd (__appmansuffix__), +.BR xwininfo (__appmansuffix__), +.BR xwud (__appmansuffix__). .\" servers -.BR Xserver (1), -.BR Xdmx (1), -.BR Xnest (1), -.BR Xvfb (1), -.BR Xorg (1), +.BR Xserver (__appmansuffix__), +.BR Xorg (__appmansuffix__), +.BR Xephyr (__appmansuffix__), +.BR Xnest (__appmansuffix__), +.BR Xvfb (__appmansuffix__), .\" specifications .I "Xlib \- C Language X Interface\fR,\fP" and @@ -1291,9 +1291,9 @@ and X Window System is a trademark of The Open Group. .SH AUTHORS .PP -A cast of thousands, literally. Releases 6.7 and later are -brought to you by the X.Org Foundation, LLC. The names of all people who -made it a reality will be found in the individual documents and +A cast of thousands, literally. Releases 6.7 and later are +brought to you by the X.Org Foundation. The names of all people who +made it a reality will be found in the individual documents and source files. .PP Releases 6.6 and 6.5 were done by The X.Org Group. Release 6.4 was done by @@ -1304,8 +1304,8 @@ Matt Landau (emeritus), Ralph Mor (emeritus), Janet O'Halloran, Bob Scheifler, Ralph Swick, Dave Wiggins (emeritus), and Reed Augliere. .PP The X Window System standard was originally developed at the -Laboratory for Computer Science at the Massachusetts Institute -of Technology, and all rights thereto were assigned to the X Consortium +Laboratory for Computer Science at the Massachusetts Institute +of Technology, and all rights thereto were assigned to the X Consortium on January 1, 1994. X Consortium, Inc. closed its doors on December 31, 1996. All rights to the X Window System have been assigned to The Open Group. diff --git a/doc/xorg-docs/man/general/XOrgFoundation.man b/doc/xorg-docs/man/XOrgFoundation.man similarity index 83% rename from doc/xorg-docs/man/general/XOrgFoundation.man rename to doc/xorg-docs/man/XOrgFoundation.man index 4d9946d82..0ed0779d2 100644 --- a/doc/xorg-docs/man/general/XOrgFoundation.man +++ b/doc/xorg-docs/man/XOrgFoundation.man @@ -1,56 +1,57 @@ .\" .\" Copyright 2004, 2005 X.Org Foundation, LLC .\" Copyright (c) 1993, 1994, 1996 X Consortium -.\" +.\" .\" Permission is hereby granted, free of charge, to any person obtaining a -.\" copy of this software and associated documentation files (the "Software"), -.\" to deal in the Software without restriction, including without limitation -.\" the rights to use, copy, modify, merge, publish, distribute, sublicense, -.\" and/or sell copies of the Software, and to permit persons to whom the +.\" copy of this software and associated documentation files (the "Software"), +.\" to deal in the Software without restriction, including without limitation +.\" the rights to use, copy, modify, merge, publish, distribute, sublicense, +.\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: -.\" +.\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. -.\" +.\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -.\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -.\" THE X.ORG FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -.\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -.\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +.\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +.\" THE X.ORG FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +.\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +.\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .TH XORGFOUNDATION __miscmansuffix__ __xorgversion__ .SH NAME XOrgFoundation \- X.Org Foundation information .SH SYNOPSIS -Release 7.0 of X Version 11 is brought to you by the X.Org Foundation, LLC. +Release 6.7 and later of X Version 11 is brought to you by the +X.Org Foundation. .SH DESCRIPTION The X.Org Foundation is an independent, not-for-profit 501(c)(3) charity corporation. It was formed in 2004 as the successor to the X.Org Group at -The Open Group. The purpose of the X.Org Foundation is to foster the -development, evolution, and maintenance of the X Window System, a -comprehensive set of vendor-neutral, system-architecture neutral, +The Open Group. The purpose of the X.Org Foundation is to foster the +development, evolution, and maintenance of the X Window System, a +comprehensive set of vendor-neutral, system-architecture neutral, network-transparent windowing and user interface standards. Membership in the X.Org Foundation is free and open to anyone. The X.Org Foundation -hosts a public CVS repository of the source code on Freedesktop.Org. +hosts a public git repository of the source code on freedesktop.org. .PP The X Window System was created in the mid-1980s at the Massachusetts Institute of Technology. In 1988, MIT formed a member-funded consortium to provide the technical and administrative leadership necessary to support further development of the X Window System. In 1992, MIT and the membership decided it was in their best interests to move the consortium out of MIT and -create an independent, stand-alone organization. All rights to the X Window -System were assigned by MIT to X Consortium, Inc. on January 1, 1994. On -December 31, 1996 the X Consortium, Inc. closed its doors and all rights +create an independent, stand-alone organization. All rights to the X Window +System were assigned by MIT to X Consortium, Inc. on January 1, 1994. On +December 31, 1996 the X Consortium, Inc. closed its doors and all rights to the X Window System were assigned to The Open Group (then known as the -Open Software Foundation.) +Open Software Foundation). .PP .SH "ADDRESSES" The X.Org Foundation's web site is http://www.x.org/ .PP The X.Org Foundation's public ftp site is ftp://ftp.x.org/ .PP -Information about the X.Org Foundation CVS repository is on the -Freedesktop.Org web site at http://www.freedesktop.org/Software/xorg +Information about the X.Org Foundation git repository is on the +X.Org web site at http://www.x.org/wiki/Development/git .fi diff --git a/doc/xorg-docs/man/general/XProjectTeam.man b/doc/xorg-docs/man/XProjectTeam.man similarity index 84% rename from doc/xorg-docs/man/general/XProjectTeam.man rename to doc/xorg-docs/man/XProjectTeam.man index d7673dad5..ebf1de407 100644 --- a/doc/xorg-docs/man/general/XProjectTeam.man +++ b/doc/xorg-docs/man/XProjectTeam.man @@ -1,31 +1,29 @@ -.\" $Xorg: XProjectTeam.cpp,v 1.6 2001/01/29 17:44:41 coskrey Exp $ .\" Copyright (c) 1993, 1994, 1996 X Consortium .\" Copyright (c) 1996, 2000 The Open Group -.\" +.\" .\" Permission is hereby granted, free of charge, to any person obtaining a -.\" copy of this software and associated documentation files (the "Software"), -.\" to deal in the Software without restriction, including without limitation -.\" the rights to use, copy, modify, merge, publish, distribute, sublicense, -.\" and/or sell copies of the Software, and to permit persons to whom the +.\" copy of this software and associated documentation files (the "Software"), +.\" to deal in the Software without restriction, including without limitation +.\" the rights to use, copy, modify, merge, publish, distribute, sublicense, +.\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: -.\" +.\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. -.\" +.\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -.\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -.\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -.\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -.\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +.\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +.\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +.\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +.\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall not -.\" be used in advertising or otherwise to promote the sale, use or other -.\" dealing in this Software without prior written authorization from the +.\" +.\" Except as contained in this notice, the name of the X Consortium shall not +.\" be used in advertising or otherwise to promote the sale, use or other +.\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" -.\" $XFree86: xc/doc/man/general/XProjectTeam.man,v 1.2 2001/01/27 18:20:38 dawes Exp $ .\" .TH XORG __miscmansuffix__ __xorgversion__ .SH NAME @@ -34,28 +32,28 @@ X.Org, XProjectTeam \- X.Org Group information Release 6.5 and 6.6 of X Version 11 was brought to you by The X.Org Group. Release 6.4 of X Version 11 was brought to you by The X Project Team. .SH DESCRIPTION -The Open Group's X Project Team was created as the successor +The Open Group's X Project Team was created as the successor to the X Consortium, Inc., after the X Consortium ceased operations and -transferred ownership of X11 to The Open Group. The X.Org Group -(hereinafter called "X.Org") was created as the successor to The X Project -Team after the The Open Group ceased operating The X Project Team. The -purpose of X.Org was to foster development, evolution, and maintenance of -the X Window System. X.Org operates under the corporate umbrella of The +transferred ownership of X11 to The Open Group. The X.Org Group +(hereinafter called "X.Org") was created as the successor to The X Project +Team after the The Open Group ceased operating The X Project Team. The +purpose of X.Org was to foster development, evolution, and maintenance of +the X Window System. X.Org operates under the corporate umbrella of The Open Group. .PP The X Consortium was an independent, not-for-profit Delaware membership -corporation. It was formed in 1993 as the successor to the MIT X +corporation. It was formed in 1993 as the successor to the MIT X Consortium. .PP The X Window System was created in the mid-1980s at the Massachusetts -Institute of Technology. In 1988, MIT formed a member-funded consortium -to provide the technical and administrative leadership necessary to -support further development of the X Window System. In 1992, MIT and -the membership decided it was in their best interests to move the -consortium out of MIT and create an independent, stand-alone organization. -All rights to the X Window System were assigned by MIT to X Consortium, -Inc. on January 1, 1994. On December 31, 1996 the X Consortium, Inc. -closed its doors and all rights to the X Window System were assigned to +Institute of Technology. In 1988, MIT formed a member-funded consortium +to provide the technical and administrative leadership necessary to +support further development of the X Window System. In 1992, MIT and +the membership decided it was in their best interests to move the +consortium out of MIT and create an independent, stand-alone organization. +All rights to the X Window System were assigned by MIT to X Consortium, +Inc. on January 1, 1994. On December 31, 1996 the X Consortium, Inc. +closed its doors and all rights to the X Window System were assigned to The Open Group. .PP .SH "ADDRESS" diff --git a/doc/xorg-docs/man/general/security.man b/doc/xorg-docs/man/Xsecurity.man similarity index 82% rename from doc/xorg-docs/man/general/security.man rename to doc/xorg-docs/man/Xsecurity.man index c2be69256..5f709c229 100644 --- a/doc/xorg-docs/man/general/security.man +++ b/doc/xorg-docs/man/Xsecurity.man @@ -1,8 +1,26 @@ -.\" $Xorg: security.cpp,v 1.3 2000/08/17 19:42:05 cpqbld Exp $ -.\" $XdotOrg: $ +.\" Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. +.\" +.\" Permission is hereby granted, free of charge, to any person obtaining a +.\" copy of this software and associated documentation files (the "Software"), +.\" to deal in the Software without restriction, including without limitation +.\" the rights to use, copy, modify, merge, publish, distribute, sublicense, +.\" and/or sell copies of the Software, and to permit persons to whom the +.\" Software is furnished to do so, subject to the following conditions: +.\" +.\" The above copyright notice and this permission notice (including the next +.\" paragraph) shall be included in all copies or substantial portions of the +.\" Software. +.\" +.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +.\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +.\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +.\" THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +.\" LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +.\" FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +.\" DEALINGS IN THE SOFTWARE. +.\" .\" Copyright (c) 1993, 1994 X Consortium -.\" Copyright 2004 Sun Microsystems, Inc. -.\" +.\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including @@ -12,7 +30,7 @@ .\" copyright notice(s) and this permission notice appear in all copies of .\" the Software and that both the above copyright notice(s) and this .\" permission notice appear in supporting documentation. -.\" +.\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT @@ -22,15 +40,13 @@ .\" FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, .\" NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION .\" WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -.\" +.\" .\" Except as contained in this notice, the name of a copyright holder .\" shall not be used in advertising or otherwise to promote the sale, use .\" or other dealings in this Software without prior written authorization .\" of the copyright holder. -.\" -.\" X Window System is a trademark of The Open Group. .\" -.\" $XFree86: xc/doc/man/general/security.man,v 1.4tsi Exp $ +.\" X Window System is a trademark of The Open Group. .\" .nr )S 12 .TH XSECURITY __miscmansuffix__ __xorgversion__ @@ -39,7 +55,7 @@ Xsecurity \- X display access control .SH SYNOPSIS .PP X provides mechanism for implementing many access control systems. -The sample implementation includes six mechanisms: +The sample implementation includes five mechanisms: .nf .br .ta 3.4i @@ -47,7 +63,6 @@ The sample implementation includes six mechanisms: MIT-MAGIC-COOKIE-1 Shared plain-text "cookies". XDM-AUTHORIZATION-1 Secure DES based private-keys. SUN-DES-1 Based on Sun's secure rpc system. - MIT-KERBEROS-5 Kerberos Version 5 user-to-user. Server Interpreted Server-dependent methods of access control .fi Not all of these are available in all builds or implementations. @@ -60,7 +75,7 @@ to a given machine, and is easy to use when the list of hosts used is small. This system does not work well when multiple people can log in to a single machine and mutual trust does not exist. The list of allowed hosts is stored in the X server and can be changed with -the \fIxhost\fP command. The list is stored in the server by network +the \fIxhost\fP command. The list is stored in the server by network address, not host names, so is not automatically updated if a host changes address while the server is running. When using the more secure mechanisms listed below, the host list is @@ -139,38 +154,9 @@ users which have set up the appropriate public/private key pairs on their system. See the Secure RPC documentation for details. To access the display from a remote host, you may have to do a \fIkeylogin\fP on the remote host first. -.IP MIT-KERBEROS-5 -Kerberos is a network-based authentication scheme developed by MIT for -Project Athena. It allows mutually suspicious principals to -authenticate each other as long as each trusts a third party, -Kerberos. Each principal has a secret key known only to it and -Kerberos. Principals includes servers, such as an FTP server or X -server, and human users, whose key is their password. Users gain -access to services by getting Kerberos tickets for those services from -a Kerberos server. Since the X server has no place to store a secret -key, it shares keys with the user who logs in. X authentication thus -uses the user-to-user scheme of Kerberos version 5. -.IP -When you log in via \fIxdm\fP, \fIxdm\fP will use your password to -obtain the initial Kerberos tickets. \fIxdm\fP stores the tickets in -a credentials cache file and sets the environment variable -\fIKRB5CCNAME\fP to point to the file. The credentials cache is -destroyed when the session ends to reduce the chance of the tickets -being stolen before they expire. -.IP -Since Kerberos is a user-based authorization protocol, like the -SUN-DES-1 protocol, the owner of a display can enable -and disable specific users, or Kerberos principals. -The \fIxhost\fP client is used to enable or disable authorization. -For example, -.nf - xhost krb5:judy krb5:gildea@x.org -.fi -adds "judy" from the Kerberos realm of the local machine, and "gildea" -from the "x.org" realm. .IP "Server Interpreted" The Server Interpreted method provides two strings to the X server for -entry in the access control list. The first string represents the type +entry in the access control list. The first string represents the type of entry, and the second string contains the value of the entry. These strings are interpreted by the server and different implementations and builds may support different types of entries. The types supported in @@ -180,7 +166,7 @@ TYPES section below. Entries of this type can be manipulated via localuser with a value of root, the command is \fBxhost +si:localuser:root\fP. .SH "THE AUTHORIZATION FILE" .PP -Except for Host Access control and Server Interpreted Access Control, each of +Except for Host Access control and Server Interpreted Access Control, each of these systems uses data stored in the \fI.Xauthority\fP file to generate the correct authorization information to pass along to the X server at connection setup. MIT-MAGIC-COOKIE-1 and @@ -202,7 +188,7 @@ type to generate the correct information at connection setup time. The \fIxauth\fP program manipulates the \fI.Xauthority\fP file format. It understands the semantics of the connection families and address formats, displaying them in an easy to understand format. It also understands that -SUN-DES-1 and MIT-KERBEROS-5 use +SUN-DES-1 uses string values for the authorization data, and displays them appropriately. .PP @@ -235,22 +221,6 @@ principal for the machine on which it is running "unix.expire.lcs.mit.edu@our.domain.edu"). Putting the correct principal name in the \fI.Xauthority\fP file causes Xlib to generate the appropriate authorization information using the secure RPC library. -.IP "MIT-KERBEROS-5" -Kerberos reads tickets from the cache pointed to by the -\fIKRB5CCNAME\fP environment variable, so does not use any data from -the \fI.Xauthority\fP file. An entry with no data must still exist to tell -clients that MIT-KERBEROS-5 is available. -.IP -Unlike the \fI.Xauthority\fP file for clients, the authority file -passed by xdm to -a local X server (with ``\fB\-auth\fP \fIfilename\fP'', see xdm(1)) -does contain the name of the credentials cache, since -the X server will not have the -\fIKRB5CCNAME\fP environment variable set. -The data of the MIT-KERBEROS-5 entry is the credentials cache name and -has the form ``UU:FILE:\fIfilename\fP'', where \fIfilename\fP is the -name of the credentials cache file created by xdm. Note again that -this form is \fInot\fP used by clients. .SH "SERVER INTERPRETED ACCESS TYPES" The sample implementation includes several Server Interpreted mechanisms: .nf @@ -262,7 +232,9 @@ The sample implementation includes several Server Interpreted mechanisms: localgroup Local connection group id .fi .IP "IPv6" -A literal IPv6 address as defined in IETF RFC 3513. +A literal IPv6 address as defined in IETF RFC 3513. This allows adding +IPv6 addresses when the X server supports IPv6, but the xhost client was +compiled without IPv6 support. .IP "hostname" The value must be a hostname as defined in IETF RFC 2396. Due to Mobile IP and dynamic DNS, the name service is consulted at connection @@ -274,12 +246,12 @@ not allow use of literal IP addresses. On systems which can determine in a secure fashion the credentials of a client process, the "localuser" and "localgroup" authentication methods provide access based on those credentials. The format of the values provided is platform -specific. For POSIX & UNIX platforms, if the value starts with the -character '#', the rest of the string is treated as a decimal uid or gid, +specific. For POSIX & UNIX platforms, if the value starts with the +character '#', the rest of the string is treated as a decimal uid or gid, otherwise the string is defined as a user name or group name. .IP If your system supports this method and you use it, be warned that some -programs that proxy connections and are setuid or setgid may get authenticated +programs that proxy connections and are setuid or setgid may get authenticated as the uid or gid of the proxy process. For instance, some versions of ssh will be authenticated as the user root, no matter what user is running the ssh client, so on systems with such software, adding access for localuser:root diff --git a/doc/xorg-docs/man/general/Makefile.am b/doc/xorg-docs/man/general/Makefile.am deleted file mode 100644 index 35a65f870..000000000 --- a/doc/xorg-docs/man/general/Makefile.am +++ /dev/null @@ -1,57 +0,0 @@ -# Copyright 2005 Red Hat, Inc. -# -# Permission to use, copy, modify, distribute, and sell this software -# and its documentation for any purpose is hereby granted without fee, -# provided that the above copyright notice appear in all copies and -# that both that copyright notice and this permission notice appear in -# supporting documentation, and that the name of Red Hat not be used in -# advertising or publicity pertaining to distribution of the software -# without specific, written prior permission. Red Hat makes no -# representations about the suitability of this software for any -# purpose. It is provided "as is" without express or implied warranty. -# -# RED HAT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN -# NO EVENT SHALL RED HAT BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE -# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE -# USE OR PERFORMANCE OF THIS SOFTWARE. -# -# Process this file with autoconf to create configure. - -miscmandir = $(MISC_MAN_DIR) - -miscman_PRE = \ - Consortium.man \ - security.man \ - Standards.man \ - X.man \ - XOrgFoundation.man \ - Xprint.man \ - XProjectTeam.man - -miscman_DATA = $(miscman_PRE:man=@MISC_MAN_SUFFIX@) - -CLEANFILES = $(miscman_DATA) - -SED = sed - -# Strings to replace in man pages -XORGRELSTRING = @PACKAGE_STRING@ - XORGMANNAME = X Version 11 - -MAN_SUBSTS = \ - -e 's|__vendorversion__|"$(XORGRELSTRING)" "$(XORGMANNAME)"|' \ - -e 's|__xorgversion__|"$(XORGRELSTRING)" "$(XORGMANNAME)"|' \ - -e 's|__projectroot__|$(prefix)|g' \ - -e 's|__appmansuffix__|$(APP_MAN_SUFFIX)|g' \ - -e 's|__libmansuffix__|$(APP_LIB_SUFFIX)|g' \ - -e 's|__miscmansuffix__|$(MISC_MAN_SUFFIX)|g' - -SUFFIXES = .$(MISC_MAN_SUFFIX) .man - -.man.$(MISC_MAN_SUFFIX): - sed $(MAN_SUBSTS) < $< > $@ - -EXTRA_DIST = $(miscman_PRE) Xprint.sgml diff --git a/doc/xorg-docs/man/general/Xprint.man b/doc/xorg-docs/man/general/Xprint.man deleted file mode 100644 index 39b0ccc70..000000000 --- a/doc/xorg-docs/man/general/Xprint.man +++ /dev/null @@ -1,421 +0,0 @@ -.\" -*- coding: us-ascii -*- -.TH Xprint __miscmansuffix__ "8 October 2004" -.SH NAME -Xprint \- The "X print service" - a portable, network-transparent printing system based on the X11 protocol -.SH SYNOPSIS -Xprint is a very flexible, extensible, scaleable, client/server -print system based on ISO 10175 (and some other specs) and the X11 -rendering protocol. -Using Xprint an application can search, query and use devices like -printers, FAX machines or create documents in formats like PDF. -In particular, an application can seek a printer, query supported -attributes (like paper size, trays, fonts etc.), configure the printer -device to match it\(cqs needs and print on it like on any other X device -reusing parts of the code which is used for the video card Xserver. -.SH OVERVIEW -The "X Print Service" technology allows X rendering to devices such as -printers and fax. Most of the service is available in the X11 -technology stack as Xp, with the remainder in single toolkit stacks (e.g. DtPrint for CDE). -Modifications have also been made to the LessTif/Motif/Qt technology -stacks to support Xprint. -.PP -The Xp portion consists of: -.TP 0.2i -\(bu -Xp Extension for the X-Server (included in the X-Server Xprt) -.TP 0.2i -\(bu -Xp Extension API for the client side (libXp/libXprintUtils) -.TP 0.2i -\(bu -PCL ddx driver that converts core X to native PCL -.TP 0.2i -\(bu -PDF ddx driver that converts core X to native PDF -.TP 0.2i -\(bu -PostScript ddx driver that converts core X to native PostScript -.TP 0.2i -\(bu -Raster ddx driver that generates xwd rasters which can be converted to PCL, PDF or PostScript rasters -.PP -.PP -From an X clients perspective, it can attach to one of two nearly -identical X-Servers, a "Video" X-Server, and a "Print" X-Server -which has the additional Xp capability but otherwise looks and -behaves the same. -.SH "HOW THE X PRINT SERVICE WORKS" -The X Print Service expands on the traditional X-Server and Xlib world -in four ways. -.TP 0.4i -1. -Most obvious is the use of "print ddx drivers" instead of -"video ddx drivers". While a video ddx driver modifies pixels -in a video frame buffer, a print ddx driver generates "page -description language (PDL)" output (such as PCL, PDF or PostScript) -or sends the print rendering instructions to a platform-specific -print API (like Win32/GDI). - -Once a print ddx driver generates PDL output, it can be sent to -a spooler such as \fBlp\fR(1) -or retrieved by the client (to implement functionality like "print-to-file"). - -Though not currently done, a single X-Server can support both -print and video ddx drivers. -.TP 0.4i -2. -Since printers support "paged" output, unlike video, a portion -of the Xp Extension supports APIs to delineate printed output. -For example, XpStartPage and XpEndPage tell the X-Server where -a physical page starts and ends in an otherwise continuous -stream of X rendering primitives. Likewise, XpStartJob and -XpEndJob determine when a collection of pages starts and ends. -XpEndJob typically causes the generated PDL to be submitted to -a spooler, such as \fBlp\fR(1). -.TP 0.4i -3. -Since printers have extensive capabilities, another portion of -the Xp Extension supports APIs to manipulate "print contexts". - -Once a printer is selected using the Xp Extension API, a print -context to represent it can be created. A print context -embodies the printer selected - it contains the printer's -default capabilities, selectable range of capabilities, -printer state, and generated output. Some "attributes" within -the print context can be modified by the user, and the -X-Server and print ddx driver will react accordingly. For -example, the attribute "content-orientation" can be set to -"landscape" or "portrait" (if the printer supports these -values - which can be queried using the Xprint API as well). -.TP 0.4i -4. -Since printers can have "built in" fonts, the Xp Extension in -the X-Server works with the print ddx drivers to make -available (for printing only) additional fonts on a per print -context basis. - -When a print context is created and set for a given printer, -the X font calls may be able to access additional printer -fonts. To do this (typically), the X-Server must have access -to "printer metric files" (.pmf) that describe at minimum the -metrics of the built in fonts. -.PP -.SH USAGE -There are three tasks to start the X Print Service: -.TP 0.4i -1. -configuring the X Print Server, -.TP 0.4i -2. -starting the X Print Service -.TP 0.4i -3. -configuring the user session so that clients can find the running X Print Service -.PP -.PP -The tasks are described in detail below. -.SH "SERVER CONFIGURATION" -The X Print Server (Xprt) can read a number of configuration files which -control its behavior and support for printers. Each vendor platform has -a default location for this information. Xprt can also read the -environment variable \fBXPCONFIGDIR\fR to locate alternate configuration -directories. Common settings include: - -export XPCONFIGDIR=/X11/lib/X11/XpConfig/ -.PP -export XPCONFIGDIR=/proj/x11/xc/programs/Xserver/XpConfig/ - -.PP -Xprt has many built-in defaults, and lacking any configuration files, -will immediately try to support all printers visible via \fBlpstat\fR(1). -.PP -In order of importance for configuration by a system administrator, the -configuration files for a "C" locale are as follows (see \fBXprt\fR(__appmansuffix__) for more -details (including support for non-"C" locales)): -.TP -\fB${XPCONFIGDIR}/C/print/Xprinters\fR -\&'Xprinters' is the top most configuration file. It tells -Xprt which specific printer names (e.g. mylaser) should -be supported, and whether \fBlpstat\fR(1) or other commands -should be used to automatically supplement the list of -printers. -.TP -\fB${XPCONFIGDIR}/C/print/attributes/printer\fR -The 'printer' file maps printer names to model -configurations (see 'model-config' below). For example, -"mylaser" could be mapped to a "HPDJ1600C", and all other -arbitrary printers could be mapped to a default, such as -"HPLJ4SI". When depending on \fBlpstat\fR(1) in the Xprinters -file, setting up defaults in 'printer' becomes all the -more important. -.TP -\fB${XPCONFIGDIR}/C/print/attributes/document\fR -The 'document' file specifies the initial document values -for any print jobs. For example, which paper tray to -use, what default resolution, etc. -.TP -\fB${XPCONFIGDIR}/C/print/attributes/job\fR -The 'job' file specifies the initial job values for any -print jobs. For example, "notification-profile" can be -set so that when a print job is successfully sent to a -printer, e-mail is sent to the user. -.TP -\fB${XPCONFIGDIR}/C/print/models/PSdefault/model\-config\fR, \fB${XPCONFIGDIR}/C/print/models/PSdefault/fonts/fonts.dir\fR, \fB${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00051.pmf\fR, \fB${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00093.pmf\fR -The 'model-config' file has attributes that describe the -printer model\(cqs capabilities and default settings. -Printer model fonts may also be present. The model-config -file also identifies the print ddx driver to be used. -For each printer model supported, a complete hierarchy of -files should exist. In most cases, these files do not -need to be modified. -.TP -\fB${XPCONFIGDIR}/C/print/ddx\-config/raster/pcl\fR, \fB${XPCONFIGDIR}/C/print/ddx\-config/raster/pdf\fR, \fB${XPCONFIGDIR}/C/print/ddx\-config/raster/postscript\fR -The print ddx drivers can have highly specific -configuration files to control their behavior. In most -cases, these files do not need to be modified. -.PP -More information in how to configure and customize the X print server can be found in the -\fBXprt\fR(__appmansuffix__) -manual page. -.SH "STARTING UP" -The summary checklist for starting the X Print Service is as follows: -.TP 0.4i -1. -Choose an execution model for the X Print Service. The X -Print Service can be run on a per-user session basis, per -machine basis, or can be run on a few machines globally -available to a number of users. -.TP 0.4i -2. -If print jobs are to be submitted to a spooler (almost always -the case), make sure all needed printers are available to the -spooler subsystem (most often \fBlp\fR(1)) -on the same machine running the X Print Service. -.TP 0.4i -3. -Configure the X Print Server. See ``X Print Server -Configuration''. -.TP 0.4i -4. -Depending on #1, start the X Print Server process "Xprt", and -then the toolkit-specific Print Dialog Manager Daemon process -(such as CDEnext's "dtpdmd") at the appropriate times. -Note that libXprintUtils-based applications/toolkits do not need -a Print Dialog Manager Daemon process to use Xprint. -.PP -The details are described below. -.PP -Because the X Print Service is based on X, it can be easily distributed. -The most significant factors in which execution model to choose will be -driven by: -.TP 0.2i -\(bu -how many printers will be accessable through the printer -subsystem on any given machine. A system administrator may -choose to cluster printers on a few given machines, or -scatter them across an organization and possibly make -extensive use of remote spoolers to make them globally -available. -.TP 0.2i -\(bu -how many machines will need a copy of the X Print Server -configuration files. The files have been architected so -that one super-set version of them can be maintained and -distributed (e.g. via NFS), and a per-machine or per-user -version of the `Xprinters' is all that is needed to have the -appropriate information in them utilized or ignored. -.TP 0.2i -\(bu -how many users can demand services from a given X Print -Service. -.PP -With the above in mind, some obvious execution models include: -.TP 0.2i -\(bu -Global - in this model, the system administrator is choosing -to run the X Print Service on a *few* select machines with -appropriate printers configured, and allow clients access to -the global resource. This can centralize the administration -of printers and configuration files, but may have to be -monitored for performance loading. - -Startup would likely be done by boot-up scripts (such as \fB/etc/init.d/xprint\fR). -.TP 0.2i -\(bu -Per-machine - every machine with potential X Print Service -users would run the service. Printer and configuration file -administration is decentralized, and usage would be limited -to the users on the machine. - -Startup would likely be done by boot-up scripts (such as \fB/etc/init.d/xprint\fR). -.TP 0.2i -\(bu -Per-user session - every user would run an entire X Print -Service for themselves. In the future, the Video X Server -normally started may contain Print X Server capability, so -this model becomes very natural. - -Startup would likely be done at session login or by -launching actions or processes manually once the user -logs in. Note: Deamons like "dtpdmd" must be started after Xprt. -.PP -.PP -Starting of the processes is straight forward. In strict order (example is for manually starting the X print server for CDEnext usage): -.TP 0.4i -1. - -.nf -[machineA] % Xprt [\-XpFile ] [:dispNum] & -.fi - - -Note that Xprt will look for configuration files in either -a default location or where \fBXPCONFIGDIR\fR points. - -\fB\-XpFile\fR specifies an alternate `Xprinters' file, rather -than the default one or `\fB${XPCONFIGDIR}/C/print/Xprinters\fR'. -.TP 0.4i -2. - -.nf -[machineA] % dtpdmd \-d machineA[:dispNum] [\-l /tmp/dtpdmd.log] & -.fi - - -The dtpdmd will maintain an X-Selection on the X-Server, -and will start dtpdm's as required to service requests. -.PP -.PP -In all but the per-user session model, the machine running the dtpdmd -(thus dtpdm's) will need display authorization to the users video -display. -.SH "CLIENT CONFIGURATION" -Once a X Print Server and dtpdmd have been started -- many of them -in some cases -- clients will need to find and use them. There are -two mechanisms that allow clients to discover X Print Servers and -printers. -.TP 0.2i -\(bu -"X Print Specifier" - assuming usage of the DtPrint/XprintUtils-based print -applications, the following notation is understood: - - -.nf -printer_name@machine[:dispNum] -.fi - - -For example: - - -.nf -colorlj7@printhub:2 -.fi - - -In the above example, the X Print Server running at `printhub:2' -is assumed to support the printer named `colorlj7'. -.TP 0.2i -\(bu -\fB${XPSERVERLIST}\fR - assuming usage of the DtPrint print dialogs, -the environment variable \fB${XPSERVERLIST}\fR can contain a list -of X Print Servers. For example: - - -.nf -XPSERVERLIST="printhub:2 printhub:3 otherdept:0" -.fi - - -Then in the dialogs, only a printer name needs to be entered. -The dialog will then search the X Print Servers in \fB${XPSERVERLIST}\fR -for a server than supports the printer, and then establish -contact. -.PP -.SH "END-USER SEQUENCE" -From most CDEnext applications, printing is accomplished by bringing -down the menu and selecting . This will result in -the DtPrintSetupBox dialog, which will request the name of a printer, -and offer limited capability to configure print options (e.g. number -of copies). If the user wishes, they can select , which -will start a dtpdm capable of modifying additional print options. -Finally, the user should select . -.SH ENVIRONMENT -.TP -\fB${XPCONFIGDIR}\fR -This environment variable points to the root -of the Xprint server configuration directory hierarchy. -If the variable is not defined, the default -path is be assumed. The default path may be -\fB/usr/X11R6/lib/X11/xserver/\fR, -\fB/usr/lib/X11/xserver/\fR, -\fB/usr/share/Xprint/xserver/\fR or -\fB/usr/openwin/server/etc/XpConfig\fR, depending on the -system, and may be configured in \fB/etc/init.d/xprint\fR. -.TP -\fB${LANG}\fR -This environment variable selects the locale settings used by the Xprint server. -Xprt allows language-specific settings (stored in \fB${XPCONFIGDIR}/${LANG}/print/\fR) -which will override the default settings (stored in \fB${XPCONFIGDIR}/C/print/\fR). -If \fB${LANG}\fR is not set "C" is assumed. -.TP -\fB${XPSERVERLIST}\fR -The environment variable \fB${XPSERVERLIST}\fR contains a list -of display identifiers (separated by whitespace) which tell an -application where it can find the Xprint servers. Usually -\fB${XPSERVERLIST}\fR is set by the profile startup scripts (e.g. -\fB/etc/profile\fR or \fB/etc/profile.d/xprint.sh\fR) using the output of -\fB/etc/init.d/xprint get_xpserverlist\fR. - -Example: - -.nf - - export XPSERVERLIST="`/etc/init.d/xprint get_xpserverlist`" -.fi - - -Alternatively \fB${XPSERVERLIST}\fR can be set -manually. Example: - -.nf - - export XPSERVERLIST="littlecat:80 bitdog:72" -.fi - -instructs an application to find an Xprint server at display -80 on the machine "littlecat" and at display 72 on the -machine bigdog. -.TP -\fB${XPRINTER}\fR -The environment variable \fB${XPRINTER}\fR -defines the default printer used by print -applications. The syntax is either -\fIprintername\fR or -\fIprintername\fR@\fIdisplay\fR. - -Examples: -.RS -.TP -\fBXPRINTER=ps003\fR -tells an application to look for the -first printer named "ps003" on all Xprint -servers. -.TP -\fBXPRINTER=hplaser19@littlecat:80\fR -tells an application to use the printer "hplaser19" -on the Xprint server at display -"littlecat:80". -.RE - - -If \fB${XPRINTER}\fR is not set the applications -will examine the values of the \fB${PDPRINTER}\fR, -\fB${LPDEST}\fR, and -\fB${PRINTER}\fR environment variables (in that order). -.SH "SEE ALSO" -\fBX11\fR(__miscmansuffix__), \fBxplsprinters\fR(__appmansuffix__), \fBxprehashprinterlist\fR(__appmansuffix__), \fBxphelloworld\fR(__appmansuffix__), \fBxpxmhelloworld\fR(__appmansuffix__), \fBxpawhelloworld\fR(__appmansuffix__), \fBxpxthelloworld\fR(__appmansuffix__), \fBxpsimplehelloworld\fR(__appmansuffix__), \fBXserver\fR(__appmansuffix__), \fBXprt\fR(__appmansuffix__), \fBlibXp\fR(__libmansuffix__), \fBlibXprintUtils\fR(__libmansuffix__), \fBlibXprintAppUtils\fR(__libmansuffix__), \fBXmPrintShell\fR(__libmansuffix__), \fBXawPrintShell\fR(__libmansuffix__), Xprint FAQ (http://xprint.mozdev.org/docs/Xprint_FAQ.html), Xprint main site (http://xprint.mozdev.org/) -.SH AUTHORS -This manual page was written by -Roland Mainz based on the original X11R6.6 -\fBxc/programs/Xserver/XpConfig/README\fR. diff --git a/doc/xorg-docs/man/general/Xprint.sgml b/doc/xorg-docs/man/general/Xprint.sgml deleted file mode 100644 index 1f7e0a75e..000000000 --- a/doc/xorg-docs/man/general/Xprint.sgml +++ /dev/null @@ -1,627 +0,0 @@ - - - - - - - Xprint - __miscmansuffix__ - - - Xprint - - The "X print service" - a portable, network-transparent printing system based on the X11 protocol - - - Xprint is a very flexible, extensible, scaleable, client/server - print system based on ISO 10175 (and some other specs) and the X11 - rendering protocol. - Using Xprint an application can search, query and use devices like - printers, FAX machines or create documents in formats like PDF. - In particular, an application can seek a printer, query supported - attributes (like paper size, trays, fonts etc.), configure the printer - device to match it’s needs and print on it like on any other X device - reusing parts of the code which is used for the video card Xserver. - - - - - OVERVIEW - - The "X Print Service" technology allows X rendering to devices such as - printers and fax. Most of the service is available in the X11 - technology stack as Xp, with the remainder in single toolkit stacks (e.g. DtPrint for CDE). - Modifications have also been made to the LessTif/Motif/Qt technology - stacks to support Xprint. - - - The Xp portion consists of: - - Xp Extension for the X-Server (included in the X-Server Xprt) - Xp Extension API for the client side (libXp/libXprintUtils) - PCL ddx driver that converts core X to native PCL - PDF ddx driver that converts core X to native PDF - PostScript ddx driver that converts core X to native PostScript - Raster ddx driver that generates xwd rasters which can be converted to PCL, PDF or PostScript rasters - - - - From an X clients perspective, it can attach to one of two nearly - identical X-Servers, a "Video" X-Server, and a "Print" X-Server - which has the additional Xp capability but otherwise looks and - behaves the same. - - - - - HOW THE X PRINT SERVICE WORKS - - The X Print Service expands on the traditional X-Server and Xlib world - in four ways. - - - - - Most obvious is the use of "print ddx drivers" instead of - "video ddx drivers". While a video ddx driver modifies pixels - in a video frame buffer, a print ddx driver generates "page - description language (PDL)" output (such as PCL, PDF or PostScript) - or sends the print rendering instructions to a platform-specific - print API (like Win32/GDI). - - - Once a print ddx driver generates PDL output, it can be sent to - a spooler such as lp1 - or retrieved by the client (to implement functionality like "print-to-file"). - - - Though not currently done, a single X-Server can support both - print and video ddx drivers. - - - - - - Since printers support "paged" output, unlike video, a portion - of the Xp Extension supports APIs to delineate printed output. - For example, XpStartPage and XpEndPage tell the X-Server where - a physical page starts and ends in an otherwise continuous - stream of X rendering primitives. Likewise, XpStartJob and - XpEndJob determine when a collection of pages starts and ends. - XpEndJob typically causes the generated PDL to be submitted to - a spooler, such as lp1. - - - - - Since printers have extensive capabilities, another portion of - the Xp Extension supports APIs to manipulate "print contexts". - - - Once a printer is selected using the Xp Extension API, a print - context to represent it can be created. A print context - embodies the printer selected - it contains the printer's - default capabilities, selectable range of capabilities, - printer state, and generated output. Some "attributes" within - the print context can be modified by the user, and the - X-Server and print ddx driver will react accordingly. For - example, the attribute "content-orientation" can be set to - "landscape" or "portrait" (if the printer supports these - values - which can be queried using the Xprint API as well). - - - - - Since printers can have "built in" fonts, the Xp Extension in - the X-Server works with the print ddx drivers to make - available (for printing only) additional fonts on a per print - context basis. - - - When a print context is created and set for a given printer, - the X font calls may be able to access additional printer - fonts. To do this (typically), the X-Server must have access - to "printer metric files" (.pmf) that describe at minimum the - metrics of the built in fonts. - - - - - - - - USAGE - - There are three tasks to start the X Print Service: - - configuring the X Print Server, - starting the X Print Service - configuring the user session so that clients can find the running X Print Service - - - - The tasks are described in detail below. - - - - - SERVER CONFIGURATION - - The X Print Server (Xprt) can read a number of configuration files which - control its behavior and support for printers. Each vendor platform has - a default location for this information. Xprt can also read the - environment variable XPCONFIGDIR to locate alternate configuration - directories. Common settings include: - - - export XPCONFIGDIR=/X11/lib/X11/XpConfig/ - export XPCONFIGDIR=/proj/x11/xc/programs/Xserver/XpConfig/ - - - - Xprt has many built-in defaults, and lacking any configuration files, - will immediately try to support all printers visible via lpstat1. - - - In order of importance for configuration by a system administrator, the - configuration files for a "C" locale are as follows (see Xprt__appmansuffix__ for more - details (including support for non-"C" locales)): - - - ${XPCONFIGDIR}/C/print/Xprinters - - - 'Xprinters' is the top most configuration file. It tells - Xprt which specific printer names (e.g. mylaser) should - be supported, and whether lpstat1 or other commands - should be used to automatically supplement the list of - printers. - - - - - - ${XPCONFIGDIR}/C/print/attributes/printer - - - The 'printer' file maps printer names to model - configurations (see 'model-config' below). For example, - "mylaser" could be mapped to a "HPDJ1600C", and all other - arbitrary printers could be mapped to a default, such as - "HPLJ4SI". When depending on lpstat1 in the Xprinters - file, setting up defaults in 'printer' becomes all the - more important. - - - - - - ${XPCONFIGDIR}/C/print/attributes/document - - - The 'document' file specifies the initial document values - for any print jobs. For example, which paper tray to - use, what default resolution, etc. - - - - - - ${XPCONFIGDIR}/C/print/attributes/job - - - The 'job' file specifies the initial job values for any - print jobs. For example, "notification-profile" can be - set so that when a print job is successfully sent to a - printer, e-mail is sent to the user. - - - - - - ${XPCONFIGDIR}/C/print/models/PSdefault/model-config - ${XPCONFIGDIR}/C/print/models/PSdefault/fonts/fonts.dir - ${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00051.pmf - ${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00093.pmf - - - - The 'model-config' file has attributes that describe the - printer model’s capabilities and default settings. - Printer model fonts may also be present. The model-config - file also identifies the print ddx driver to be used. - - For each printer model supported, a complete hierarchy of - files should exist. In most cases, these files do not - need to be modified. - - - - - - ${XPCONFIGDIR}/C/print/ddx-config/raster/pcl - ${XPCONFIGDIR}/C/print/ddx-config/raster/pdf - ${XPCONFIGDIR}/C/print/ddx-config/raster/postscript - - - - The print ddx drivers can have highly specific - configuration files to control their behavior. In most - cases, these files do not need to be modified. - - - - - - More information in how to configure and customize the X print server can be found in the - Xprt__appmansuffix__ - manual page. - - - - - STARTING UP - - The summary checklist for starting the X Print Service is as follows: - - - - - Choose an execution model for the X Print Service. The X - Print Service can be run on a per-user session basis, per - machine basis, or can be run on a few machines globally - available to a number of users. - - - - - If print jobs are to be submitted to a spooler (almost always - the case), make sure all needed printers are available to the - spooler subsystem (most often lp1) - on the same machine running the X Print Service. - - - - - Configure the X Print Server. See ``X Print Server - Configuration''. - - - - - Depending on #1, start the X Print Server process "Xprt", and - then the toolkit-specific Print Dialog Manager Daemon process - (such as CDEnext's "dtpdmd") at the appropriate times. - Note that libXprintUtils-based applications/toolkits do not need - a Print Dialog Manager Daemon process to use Xprint. - - - - The details are described below. - - - Because the X Print Service is based on X, it can be easily distributed. - The most significant factors in which execution model to choose will be - driven by: - - - - how many printers will be accessable through the printer - subsystem on any given machine. A system administrator may - choose to cluster printers on a few given machines, or - scatter them across an organization and possibly make - extensive use of remote spoolers to make them globally - available. - - - - - how many machines will need a copy of the X Print Server - configuration files. The files have been architected so - that one super-set version of them can be maintained and - distributed (e.g. via NFS), and a per-machine or per-user - version of the `Xprinters' is all that is needed to have the - appropriate information in them utilized or ignored. - - - - - how many users can demand services from a given X Print - Service. - - - - - With the above in mind, some obvious execution models include: - - - - Global - in this model, the system administrator is choosing - to run the X Print Service on a *few* select machines with - appropriate printers configured, and allow clients access to - the global resource. This can centralize the administration - of printers and configuration files, but may have to be - monitored for performance loading. - - - Startup would likely be done by boot-up scripts (such as /etc/init.d/xprint). - - - - - - Per-machine - every machine with potential X Print Service - users would run the service. Printer and configuration file - administration is decentralized, and usage would be limited - to the users on the machine. - - - Startup would likely be done by boot-up scripts (such as /etc/init.d/xprint). - - - - - - Per-user session - every user would run an entire X Print - Service for themselves. In the future, the Video X Server - normally started may contain Print X Server capability, so - this model becomes very natural. - - - Startup would likely be done at session login or by - launching actions or processes manually once the user - logs in. Note: Deamons like "dtpdmd" must be started after Xprt. - - - - - - Starting of the processes is straight forward. In strict order (example is for manually starting the X print server for CDEnext usage): - - - - [machineA] % Xprt [-XpFile <Xprinters file>] [:dispNum] & - - - Note that Xprt will look for configuration files in either - a default location or where XPCONFIGDIR points. - - - specifies an alternate `Xprinters' file, rather - than the default one or `${XPCONFIGDIR}/C/print/Xprinters'. - - - - - [machineA] % dtpdmd -d machineA[:dispNum] [-l /tmp/dtpdmd.log] & - - - The dtpdmd will maintain an X-Selection on the X-Server, - and will start dtpdm's as required to service requests. - - - - - - In all but the per-user session model, the machine running the dtpdmd - (thus dtpdm's) will need display authorization to the users video - display. - - - - - CLIENT CONFIGURATION - - Once a X Print Server and dtpdmd have been started -- many of them - in some cases -- clients will need to find and use them. There are - two mechanisms that allow clients to discover X Print Servers and - printers. - - - - - "X Print Specifier" - assuming usage of the DtPrint/XprintUtils-based print - applications, the following notation is understood: - - - printer_name@machine[:dispNum] - - - For example: - - - colorlj7@printhub:2 - - - In the above example, the X Print Server running at `printhub:2' - is assumed to support the printer named `colorlj7'. - - - - - ${XPSERVERLIST} - assuming usage of the DtPrint print dialogs, - the environment variable ${XPSERVERLIST} can contain a list - of X Print Servers. For example: - - - XPSERVERLIST="printhub:2 printhub:3 otherdept:0" - - - Then in the dialogs, only a printer name needs to be entered. - The dialog will then search the X Print Servers in ${XPSERVERLIST} - for a server than supports the printer, and then establish - contact. - - - - - - - - END-USER SEQUENCE - - From most CDEnext applications, printing is accomplished by bringing - down the <File> menu and selecting <Print...>. This will result in - the DtPrintSetupBox dialog, which will request the name of a printer, - and offer limited capability to configure print options (e.g. number - of copies). If the user wishes, they can select <Setup...>, which - will start a dtpdm capable of modifying additional print options. - Finally, the user should select <Print>. - - - - - ENVIRONMENT - - - ${XPCONFIGDIR} - - This environment variable points to the root - of the Xprint server configuration directory hierarchy. - If the variable is not defined, the default - path is be assumed. The default path may be - /usr/X11R6/lib/X11/xserver/, - /usr/lib/X11/xserver/, - /usr/share/Xprint/xserver/ or - /usr/openwin/server/etc/XpConfig, depending on the - system, and may be configured in /etc/init.d/xprint. - - - - - ${LANG} - - - This environment variable selects the locale settings used by the Xprint server. - Xprt allows language-specific settings (stored in ${XPCONFIGDIR}/${LANG}/print/) - which will override the default settings (stored in ${XPCONFIGDIR}/C/print/). - If ${LANG} is not set "C" is assumed. - - - - - - ${XPSERVERLIST} - - The environment variable ${XPSERVERLIST} contains a list - of display identifiers (separated by whitespace) which tell an - application where it can find the Xprint servers. Usually - ${XPSERVERLIST} is set by the profile startup scripts (e.g. - /etc/profile or /etc/profile.d/xprint.sh) using the output of - /etc/init.d/xprint get_xpserverlist. - Example: - - - export XPSERVERLIST="`/etc/init.d/xprint get_xpserverlist`" - - - Alternatively ${XPSERVERLIST} can be set - manually. Example: - - - export XPSERVERLIST="littlecat:80 bitdog:72" - - - instructs an application to find an Xprint server at display - 80 on the machine "littlecat" and at display 72 on the - machine bigdog. - - - - - - ${XPRINTER} - - - The environment variable ${XPRINTER} - defines the default printer used by print - applications. The syntax is either - printername or - printername@display. - Examples: - - - XPRINTER=ps003 - - tells an application to look for the - first printer named "ps003" on all Xprint - servers. - - - - - - XPRINTER=hplaser19@littlecat:80 - - tells an application to use the printer "hplaser19" - on the Xprint server at display - "littlecat:80". - - - - - - If ${XPRINTER} is not set the applications - will examine the values of the ${PDPRINTER}, - ${LPDEST}, and - ${PRINTER} environment variables (in that order). - - - - - - - - SEE ALSO - - - - - - - - X11__miscmansuffix__ - xplsprinters__appmansuffix__ - xprehashprinterlist__appmansuffix__ - xphelloworld__appmansuffix__ - xpxmhelloworld__appmansuffix__ - xpawhelloworld__appmansuffix__ - xpxthelloworld__appmansuffix__ - xpsimplehelloworld__appmansuffix__ - Xserver__appmansuffix__ - Xprt__appmansuffix__ - - libXp__libmansuffix__ - libXprintUtils__libmansuffix__ - libXprintAppUtils__libmansuffix__ - XmPrintShell__libmansuffix__ - XawPrintShell__libmansuffix__ - Xprint FAQ (http://xprint.mozdev.org/docs/Xprint_FAQ.html) - Xprint main site (http://xprint.mozdev.org/) - - - - - - AUTHORS - - This manual page was written by - Roland Mainz roland.mainz@nrubsig.org based on the original X11R6.6 - xc/programs/Xserver/XpConfig/README. - - - - diff --git a/doc/xorg-docs/misc/xlogo.epsi b/doc/xorg-docs/misc/xlogo.epsi new file mode 100644 index 000000000..829bf2b2f --- /dev/null +++ b/doc/xorg-docs/misc/xlogo.epsi @@ -0,0 +1,99 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Title: X Logo +%%Creator: Stephen Gildea +%%BoundingBox: 0 0 44 44 +%%EndComments +%%BeginPreview: 44 44 1 44 +% fff0000000f0 +% 7ff8000001e0 +% 3ff8000003c0 +% 1ffc00000780 +% 1ffe00000780 +% 0fff00000f00 +% 07ff00001e00 +% 07ff80003c00 +% 03ffc0007800 +% 01ffc0007800 +% 00ffe000f000 +% 00fff001e000 +% 007ff803c000 +% 003ff8078000 +% 001ffc078000 +% 001ffe0f0000 +% 000fff1e0000 +% 0007ff3c0000 +% 0003ff3c0000 +% 0003fe780000 +% 0001fcf00000 +% 0000f9e00000 +% 000079f00000 +% 0000f3f80000 +% 0001e7fc0000 +% 0003cffc0000 +% 0003cffe0000 +% 00078fff0000 +% 000f07ff8000 +% 001e03ff8000 +% 001e01ffc000 +% 003c01ffe000 +% 007800fff000 +% 00f0007ff000 +% 01e0003ff800 +% 01e0003ffc00 +% 03c0001ffe00 +% 0780000ffe00 +% 0f00000fff00 +% 1e000007ff80 +% 1e000003ff80 +% 3c000001ffc0 +% 78000001ffe0 +% f0000000fff0 +%%EndPreview +% Draw the "official" X Window System Logo, designed by Danny Chong. +% Code translated from Xmu/DrawLogo.c by gildea, July 1994. +/size 44 def +/thin size 11 idiv def +/gap thin 3 add 4 idiv def +/d31 thin gap thin add add def +% Draw what will be the thin strokes. +newpath +size dup moveto +size d31 sub size lineto +0 0 lineto +d31 0 lineto +closepath +fill +% Erase area not needed for lower thin stroke. +1 setgray +newpath +d31 2 idiv 0 moveto +size 2 idiv dup lineto +size 2 idiv d31 d31 2 idiv sub add size 2 idiv lineto +d31 0 lineto +closepath +% Erase area not needed for upper thin stroke. +size d31 2 idiv sub size moveto +size 2 idiv dup lineto +size 2 idiv d31 dup 2 idiv sub sub size 2 idiv lineto +size d31 sub size lineto +closepath +fill +% Draw thick stroke. +0 setgray +newpath +0 size moveto +size 4 idiv size lineto +size 0 lineto +size dup 4 idiv sub 0 lineto +closepath +fill +% Erase to create gap. +1 setgray +newpath +size thin sub size moveto +size thin gap add sub size lineto +thin 0 lineto +thin gap add 0 lineto +closepath +fill +%%EOF diff --git a/doc/xorg-docs/misc/xlogo.svg b/doc/xorg-docs/misc/xlogo.svg new file mode 100644 index 000000000..b1dbe10c4 --- /dev/null +++ b/doc/xorg-docs/misc/xlogo.svg @@ -0,0 +1,72 @@ + + + +X Window System Logoimage/svg+xmlX Window System LogoDesigned by Danny Cheng +Converted to EPS by Stephen Gildea +Converted from EPS to SVG by Inkscape \ No newline at end of file diff --git a/doc/xorg-docs/registry b/doc/xorg-docs/registry index fdcecac80..4c332ed21 100644 --- a/doc/xorg-docs/registry +++ b/doc/xorg-docs/registry @@ -1,5 +1,3 @@ -/* $Xorg: registry,v 1.7 2001/06/01 18:55:58 coskrey Exp $ */ -/* $XdotOrg: xc/registry,v 1.2 2004/04/23 18:41:44 eich Exp $ */ X Registry @@ -10,10 +8,12 @@ addressed to xregistry@x.org or to The X.Org Foundation -- X11 Registry - c/o Ienup Sung - Sun Microsystems, Inc. - 4150 Network Circle, M/S USCA21-311 + c/o Alan Coopersmith + Oracle Corporation + M/S SCA17-3824 + 4170 Network Circle Santa Clara, CA 95054 + USA Electronic mail will be acknowledged upon receipt. Please allow up to 4 weeks for a formal response to registration and inquiries. @@ -21,7 +21,7 @@ Please allow up to 4 weeks for a formal response to registration and inquiries. The registry is published as part of the X software distribution from The X.Org Foundation. The latest registry can be found at: - ftp://ftp.x.org/pub/DOCS/registry + http://cgit.freedesktop.org/xorg/doc/xorg-docs/tree/registry All registered items must have the postal address of someone responsible for the item, or a reference to a document describing the item and the postal @@ -1036,10 +1036,12 @@ See the description of ChangeHosts in section 9 of the X11 Protocol standard. Registered address types: -Name Reference ----- --------- -"hostname" [135 - xc/doc/spec/SIAddresses/hostname.txt] -"IPv6" [135 - xc/doc/spec/SIAddresses/IPv6.txt] +Name Reference +---- --------- +"hostname" [135 - xorg-docs/specs/SIAddresses/hostname.txt] +"IPv6" [135 - xorg-docs/specs/SIAddresses/IPv6.txt] +"localuser" [135 - xorg-docs/specs/SIAddresses/localuser.txt] +"localgroup" [135 - xorg-docs/specs/SIAddresses/localgroup.txt] Vendor-specific prefixes: @@ -1089,36 +1091,19 @@ REFERENCES X.Org website: http://www.x.org/ X.Org mailing lists: - http://www.x.org/XOrg_Foundation_Join_OpenLists.html - - X.Org Non-Profit Business Manager: - - The Open Group - 8 New England Executive Park, Suite 325 - Burlington MA 01803-5007, USA - http://www.opengroup.org/contacts/ - - Birgit C. Hartje - b.hartje@opengroup.org + http://www.x.org/wiki/XorgMailingLists X.Org Foundation Board of Directors: - xf_board@x.org + http://www.x.org/wiki/BoardOfDirectors + board@foundation.x.org Board Secretary: - Leon Shiman - Shiman Associates Inc. - 163 Tappan Street - Brookline, MA 02445, USA - - X.Org Foundation Sponsor Group: - - Chair: - Stuart Kreitman - Sun Microsystems, Inc. - 17 Network Circle, MS UMPK17-202 - Menlo Park, CA 94025, USA - stuart.kreitman@sun.com - + Alan Coopersmith + Oracle Corporation + M/S SCA17-3824 + 4170 Network Circle + Santa Clara, CA 95054 + USA [9] PEX Protocol Specification PEX Protocol Encoding @@ -1345,12 +1330,13 @@ REFERENCES MIT Station Cambridge, MA 02139-0901 -[57] (Previously David Rosenthal, Steve Swales) - Stuart Krietman - Sun Microsystems, Inc. - 17 Network Circle, MS UMPK17-202 - Menlo Park, CA 94025 - stuart.krietman@sun.com +[57] (Previously David Rosenthal, Steve Swales, Sun Microsystems) + Stuart Kreitman + Oracle Corporation + M/S SCA17-3856 + 4170 Network Circle + Santa Clara, CA 95054 + stuart.kreitman@oracle.com [58] (Originally Murali V. Srinivasan) See Reference [57] @@ -1710,5 +1696,5 @@ REFERENCES [135] X.Org Foundation source implementation See Reference [8] -/* $XFree86: xc/registry,v 1.8 2003/07/09 15:27:23 tsi Exp $ */ + diff --git a/doc/xorg-docs/specs/BDF/bdf.ms b/doc/xorg-docs/specs/BDF/bdf.ms index 9c62e6dc8..d2cd0e395 100644 --- a/doc/xorg-docs/specs/BDF/bdf.ms +++ b/doc/xorg-docs/specs/BDF/bdf.ms @@ -1,4 +1,3 @@ -.\" $Xorg: bdf.ms,v 1.3 2000/08/17 19:42:06 cpqbld Exp $ \& .sp 1 .ce 4 diff --git a/doc/xorg-docs/specs/CTEXT/Makefile.am b/doc/xorg-docs/specs/CTEXT/Makefile.am new file mode 100644 index 000000000..9492c4a11 --- /dev/null +++ b/doc/xorg-docs/specs/CTEXT/Makefile.am @@ -0,0 +1,9 @@ +if ENABLE_SPECS + +xmldir = $(docdir)/$(subdir) +doc_sources = ctext.xml +dist_xml_DATA = $(doc_sources) + +include $(top_srcdir)/xmlrules.in + +endif ENABLE_SPECS diff --git a/doc/xorg-docs/specs/CTEXT/Makefile.in b/doc/xorg-docs/specs/CTEXT/Makefile.in new file mode 100644 index 000000000..cf440f451 --- /dev/null +++ b/doc/xorg-docs/specs/CTEXT/Makefile.in @@ -0,0 +1,442 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice (including the next +# paragraph) shall be included in all copies or substantial portions of the +# Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(am__dist_xml_DATA_DIST) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/xmlrules.in +@ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_XMLTO_TRUE@am__append_1 = $(doc_sources:.xml=.ps) $(doc_sources:.xml=.pdf) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@am__append_2 = $(doc_sources:.xml=.txt) +subdir = specs/CTEXT +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(install_sh) -d +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__dist_xml_DATA_DIST = ctext.xml +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(xmldir)" "$(DESTDIR)$(xmldir)" +dist_xmlDATA_INSTALL = $(INSTALL_DATA) +xmlDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_xml_DATA) $(xml_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ +ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APP_MAN_DIR = @APP_MAN_DIR@ +APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHANGELOG_CMD = @CHANGELOG_CMD@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CWARNFLAGS = @CWARNFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ +DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ENABLE_DOCS_FALSE = @ENABLE_DOCS_FALSE@ +ENABLE_DOCS_TRUE = @ENABLE_DOCS_TRUE@ +ENABLE_SPECS_FALSE = @ENABLE_SPECS_FALSE@ +ENABLE_SPECS_TRUE = @ENABLE_SPECS_TRUE@ +EXEEXT = @EXEEXT@ +FILE_MAN_DIR = @FILE_MAN_DIR@ +FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ +FOP = @FOP@ +GREP = @GREP@ +HAVE_FOP_FALSE = @HAVE_FOP_FALSE@ +HAVE_FOP_TRUE = @HAVE_FOP_TRUE@ +HAVE_STYLESHEETS_FALSE = @HAVE_STYLESHEETS_FALSE@ +HAVE_STYLESHEETS_TRUE = @HAVE_STYLESHEETS_TRUE@ +HAVE_XMLTO_FALSE = @HAVE_XMLTO_FALSE@ +HAVE_XMLTO_TEXT_FALSE = @HAVE_XMLTO_TEXT_FALSE@ +HAVE_XMLTO_TEXT_TRUE = @HAVE_XMLTO_TEXT_TRUE@ +HAVE_XMLTO_TRUE = @HAVE_XMLTO_TRUE@ +INSTALL_CMD = @INSTALL_CMD@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIB_MAN_DIR = @LIB_MAN_DIR@ +LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +MAN_SUBSTS = @MAN_SUBSTS@ +MISC_MAN_DIR = @MISC_MAN_DIR@ +MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ +VERSION = @VERSION@ +XMLTO = @XMLTO@ +XORG_MAN_PAGE = @XORG_MAN_PAGE@ +XORG_SGML_PATH = @XORG_SGML_PATH@ +XSL_STYLESHEET = @XSL_STYLESHEET@ +ac_ct_CC = @ac_ct_CC@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +@ENABLE_SPECS_TRUE@xmldir = $(docdir)/$(subdir) +@ENABLE_SPECS_TRUE@doc_sources = ctext.xml +@ENABLE_SPECS_TRUE@dist_xml_DATA = $(doc_sources) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@xml_DATA = \ +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(doc_sources:.xml=.html) \ +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(am__append_1) \ +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(am__append_2) +@ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FLAGS = \ +@ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ -m $(XSL_STYLESHEET) \ +@ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --searchpath $(XORG_SGML_PATH)/X11 \ +@ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam html.stylesheet=$(STYLESHEET_SRCDIR)/xorg.css \ +@ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam img.src.path=$(abs_builddir)/ + +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@CLEANFILES = $(xml_DATA) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@SUFFIXES = .xml .ps .pdf .txt .html +all: all-am + +.SUFFIXES: +.SUFFIXES: .xml .ps .pdf .txt .html +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/xmlrules.in $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign specs/CTEXT/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --foreign specs/CTEXT/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +uninstall-info-am: +install-dist_xmlDATA: $(dist_xml_DATA) + @$(NORMAL_INSTALL) + test -z "$(xmldir)" || $(mkdir_p) "$(DESTDIR)$(xmldir)" + @list='$(dist_xml_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_xmlDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(xmldir)/$$f'"; \ + $(dist_xmlDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(xmldir)/$$f"; \ + done + +uninstall-dist_xmlDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_xml_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(xmldir)/$$f'"; \ + rm -f "$(DESTDIR)$(xmldir)/$$f"; \ + done +install-xmlDATA: $(xml_DATA) + @$(NORMAL_INSTALL) + test -z "$(xmldir)" || $(mkdir_p) "$(DESTDIR)$(xmldir)" + @list='$(xml_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(xmlDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(xmldir)/$$f'"; \ + $(xmlDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(xmldir)/$$f"; \ + done + +uninstall-xmlDATA: + @$(NORMAL_UNINSTALL) + @list='$(xml_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(xmldir)/$$f'"; \ + rm -f "$(DESTDIR)$(xmldir)/$$f"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + $(mkdir_p) $(distdir)/../.. + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(xmldir)" "$(DESTDIR)$(xmldir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +@ENABLE_SPECS_FALSE@clean-local: +@HAVE_XMLTO_FALSE@clean-local: +clean: clean-am + +clean-am: clean-generic clean-local mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-dist_xmlDATA install-xmlDATA + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_xmlDATA uninstall-info-am \ + uninstall-xmlDATA + +.PHONY: all all-am check check-am clean clean-generic clean-local \ + distclean distclean-generic distdir dvi dvi-am html html-am \ + info info-am install install-am install-data install-data-am \ + install-dist_xmlDATA install-exec install-exec-am install-info \ + install-info-am install-man install-strip install-xmlDATA \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am uninstall uninstall-am uninstall-dist_xmlDATA \ + uninstall-info-am uninstall-xmlDATA + + +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@%.txt: %.xml $(dist_xml_DATA) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) txt $< + +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@%.html: %.xml $(dist_xml_DATA) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) xhtml-nochunks $< + +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@%.pdf: %.xml $(dist_xml_DATA) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop pdf $< + +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@%.ps: %.xml $(dist_xml_DATA) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop ps $< + +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@chunked-html: $(doc_sources) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) -o html xhtml $(doc_sources) + +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@clean-local: +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)rm -fr html/ +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/doc/xorg-docs/specs/CTEXT/ctext.tbl.ms b/doc/xorg-docs/specs/CTEXT/ctext.tbl.ms deleted file mode 100644 index de9dc3145..000000000 --- a/doc/xorg-docs/specs/CTEXT/ctext.tbl.ms +++ /dev/null @@ -1,450 +0,0 @@ -.\" $XdotOrg: xc/doc/specs/CTEXT/ctext.tbl.ms,v 1.2 2004/04/23 18:42:15 eich Exp $ -.\" Use tbl and -ms -.sp 8 -.ce 5 -\s+2\fBCompound Text Encoding\fP\s-2 -.sp 6p -Version 1.1 -X Consortium Standard -X Version 11, Release 6.8 -Robert W. Scheifler -.sp 2 -.LP -Copyright \(co 1989 by X Consortium -.LP -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -.LP -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -.LP -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. -.sp 2 -.NH 1 -Overview -.LP -Compound Text is a format for multiple character set data, such as -multi-lingual text. The format is based on ISO -standards for encoding and combining character sets. Compound Text is intended -to be used in three main contexts: inter-client communication using selections, -as defined in the \fIInter-Client Communication Conventions Manual\fP (ICCCM); -window properties (e.g., window manager hints as defined in the ICCCM); -and resources (e.g., as defined in Xlib and the Xt Intrinsics). -.LP -Compound Text is intended as an external representation, or interchange format, -not as an internal representation. It is expected (but not required) that -clients will convert Compound Text to some internal representation for -processing and rendering, and convert from that internal representation to -Compound Text when providing textual data to another client. -.NH 1 -Values -.LP -The name of this encoding is ``COMPOUND_TEXT''. When text values are used in -the ICCCM-compliant selection mechanism or are stored as window properties in -the server, the type used should be the atom for ``COMPOUND_TEXT''. -.LP -Octet values are represented in this document as two decimal numbers in the -form col/row. This means the value (col * 16) + row. For example, 02/01 means -the value 33. -.LP -For our purposes, the octet encoding space is divided into four ranges: -.RS -.TS -l l. -C0 octets from 00/00 to 01/15 -GL octets from 02/00 to 07/15 -C1 octets from 08/00 to 09/15 -GR octets from 10/00 to 15/15 -.TE -.RE -.LP -C0 and C1 are ``control character'' sets, while GL and GR are ``graphic -character'' sets. Only a subset of C0 and C1 octets are used in the encoding, -and depending on the character set encoding defined as GL or GR, a subset of -GL and GR octets may be used; see below for details. All octets (00/00 to -15/15) may appear inside the text of extended segments (defined below). -.LP -[For those familiar with ISO 2022, we will use only an 8-bit environment, and -we will always use G0 for GL and G1 for GR.] -.NH 1 -Control Characters -.LP -In C0, only the following values will be used: -.RS -.TS -l l l. -00/09 HT HORIZONTAL TABULATION -00/10 NL NEW LINE -01/11 ESC (ESCAPE) -.TE -.RE -.LP -In C1, only the following value will be used: -.RS -.TS -l l l. -09/11 CSI CONTROL SEQUENCE INTRODUCER -.TE -.RE -.LP -[The alternate 7-bit CSI encoding 01/11 05/11 is not used in Compound Text.] -.LP -No control sequences are defined in Compound Text for changing the C0 and C1 -sets. -.LP -A horizontal tab can be represented with the octet 00/09. Specification of -tabulation width settings is not part of Compound Text and must be obtained -from context (in an unspecified manner). -.LP -[Inclusion of horizontal tab is for consistency with the STRING type currently -defined in the ICCCM.] -.LP -A newline (line separator/terminator) can be represented with the octet 00/10. -.LP -[Note that 00/10 is normally LINEFEED, but is being interpreted as NEWLINE. -This can be thought of as using the (deprecated) NEW LINE mode, E.1.3, in ISO -6429. Use of this value instead of 08/05 (NEL, NEXT LINE) is for consistency -with the STRING type currently defined in the ICCCM.] -.LP -The remaining C0 and C1 values (01/11 and 09/11) are only used in the control -sequences defined below. -.NH 1 -Standard Character Set Encodings -.LP -The default GL and GR sets in Compound Text correspond to the left and right -halves of ISO 8859-1 (Latin 1). As such, any legal instance of a STRING type -(as defined in the ICCCM) is also a legal instance of type COMPOUND_TEXT. -.LP -.nf -[The implied initial state in ISO 2022 is defined with the sequence: - 01/11 02/00 04/03 GO and G1 in an 8-bit environment only. Designation also invokes. - 01/11 02/00 04/07 In an 8-bit environment, C1 represented as 8-bits. - 01/11 02/00 04/09 Graphic character sets can be 94 or 96. - 01/11 02/00 04/11 8-bit code is used. - 01/11 02/08 04/02 Designate ASCII into G0. - 01/11 02/13 04/01 Designate right-hand part of ISO Latin-1 into G1. -] -.fi -.LP -To define one of the approved standard character set encodings to be -the GL set, one of the following control sequences is used: -.RS -.TS -l l. -01/11 02/08 {I} F 94 character set -01/11 02/04 02/08 {I} F 94\u\s-2N\s+2\d character set -.TE -.RE -.LP -To define one of the approved standard character set encodings to be -the GR set, one of the following control sequences is used: -.RS -.TS -l l. -01/11 02/09 {I} F 94 character set -01/11 02/13 {I} F 96 character set -01/11 02/04 02/09 {I} F 94\u\s-2N\s+2\d character set -.TE -.RE -.LP -The ``F''in the control sequences above stands for ``Final character'', which -is always in the range 04/00 to 07/14. The ``{I}'' stands for zero or more -``intermediate characters'', which are always in the range 02/00 to 02/15, with -the first intermediate character always in the range 02/01 to 02/03. The -registration authority has defined an ``{I} F'' sequence for each registered -character set encoding. -.LP -[Final characters for private encodings (in the range 03/00 to 03/15) are not -permitted here in Compound Text.] -.LP -For GL, octet 02/00 is always defined as SPACE, and octet 07/15 (normally -DELETE) is never used. For a 94-character set defined as GR, octets 10/00 and -15/15 are never used. -.LP -[This is consistent with ISO 2022.] -.LP -A 94\u\s-2N\s+2\d character set uses N octets (N > 1) for each character. -The value of N is derived from the column value for F: -.RS -.TS -l l. -column 04 or 05 2 octets -column 06 3 octets -column 07 4 or more octets -.TE -.RE -.LP -In a 94\u\s-2N\s+2\d encoding, the octet values 02/00 and 07/15 (in GL) and -10/00 and 15/15 (in GR) are never used. -.LP -[The column definitions come from ISO 2022.] -.LP -Once a GL or GR set has been defined, all further octets in that range (except -within control sequences and extended segments) are interpreted with respect to -that character set encoding, until the GL or GR set is redefined. GL and GR -sets can be defined independently, they do not have to be defined in pairs. -.LP -Note that when actually using a character set encoding as the GR set, you must -force the most significant bit (08/00) of each octet to be a one, so that it -falls in the range 10/00 to 15/15. -.LP -[Control sequences to specify character set encoding revisions (as in section -6.3.13 of ISO 2022) are not used in Compound Text. Revision indicators do not -appear to provide useful information in the context of Compound Text. The most -recent revision can always be assumed, since revisions are upward compatible.] -.NH 1 -Approved Standard Encodings -.LP -The following are the approved standard encodings to be used with Compound -Text. Note that none have Intermediate characters; however, a good parser will -still deal with Intermediate characters in the event that additional encodings -are later added to this list. -.RS -.TS -l l l. -_ -.sp 4p -\fB{I} F\fP \fB94/96\fP \fBDescription\fP -.sp 4p -_ -.sp 6p -4/02 94 7-bit ASCII graphics (ANSI X3.4-1968), - Left half of ISO 8859 sets -04/09 94 Right half of JIS X0201-1976 (reaffirmed 1984), - 8-Bit Alphanumeric-Katakana Code -04/10 94 Left half of JIS X0201-1976 (reaffirmed 1984), - 8-Bit Alphanumeric-Katakana Code -.sp 6p -04/01 96 Right half of ISO 8859-1, Latin alphabet No. 1 -04/02 96 Right half of ISO 8859-2, Latin alphabet No. 2 -04/03 96 Right half of ISO 8859-3, Latin alphabet No. 3 -04/04 96 Right half of ISO 8859-4, Latin alphabet No. 4 -04/06 96 Right half of ISO 8859-7, Latin/Greek alphabet -04/07 96 Right half of ISO 8859-6, Latin/Arabic alphabet -04/08 96 Right half of ISO 8859-8, Latin/Hebrew alphabet -04/12 96 Right half of ISO 8859-5, Latin/Cyrillic alphabet -04/13 96 Right half of ISO 8859-9, Latin alphabet No. 5 -.sp 6p -04/01 94\u\s-22\s+2\d GB2312-1980, China (PRC) Hanzi -04/02 94\u\s-22\s+2\d JIS X0208-1983, Japanese Graphic Character Set -04/03 94\u\s-22\s+2\d KS C5601-1987, Korean Graphic Character Set -.sp 6p -_ -.TE -.RE -.LP -The sets listed as ``Left half of ...'' should always be defined as GL. The -sets listed as ``Right half of ...'' should always be defined as GR. Other -sets can be defined either as GL or GR. -.NH 1 -Non-Standard Character Set Encodings -.LP -Character set encodings that are not in the list of approved standard -encodings can be included -using ``extended segments''. An extended segment begins with one of the -following sequences: -.RS -.TS -l l. -01/11 02/05 02/15 03/00 M L variable number of octets per character -01/11 02/05 02/15 03/01 M L 1 octet per character -01/11 02/05 02/15 03/02 M L 2 octets per character -01/11 02/05 02/15 03/03 M L 3 octets per character -01/11 02/05 02/15 03/04 M L 4 octets per character -.TE -.RE -[This uses the ``other coding system'' of ISO 2022, using private Final -characters.] -.LP -The ``M'' and ``L'' octets represent a 14-bit unsigned value giving the number -of octets that appear in the remainder of the segment. The number is computed -as ((M - 128) * 128) + (L - 128). The most significant bit M and L are always -set to one. The remainder of the segment consists of two parts, the name of -the character set encoding and the actual text. The name of the encoding comes -first and is separated from the text by the octet 00/02 (STX, START OF TEXT). -Note that the length defined by M and L includes the encoding name and -separator. -.LP -[The encoding of the length is chosen to avoid having zero octets in Compound -Text when possible, because embedded NUL values are problematic in many C -language routines. The use of zero octets cannot be ruled out entirely -however, since some octets in the actual text of the extended segment may have -to be zero.] -.LP -The name of the encoding should be registered with the X Consortium to avoid -conflicts and should when appropriate match the CharSet Registry and Encoding -registration used in the X Logical Font Description. The name itself should be -encoded using ISO 8859-1 (Latin 1), should not use question mark (03/15) or -asterisk (02/10), and should use hyphen (02/13) only in accordance with the X -Logical Font Description. -.LP -Extended segments are not to be used for any character set encoding that can -be constructed from a GL/GR pair of approved standard encodings. For -example, it is incorrect to use an extended segment for any of the ISO 8859 -family of encodings. -.LP -It should be noted that the contents of an extended segment are arbitrary; -for example, -they may contain octets in the C0 and C1 ranges, including 00/00, and -octets comprising a given character may differ in their most significant bit. -.LP -[ISO-registered ``other coding systems'' are not used in Compound Text; -extended segments are the only mechanism for non-2022 encodings.] -.NH 1 -Directionality -.LP -If desired, horizontal text direction can be indicated using the following -control sequences: -.RS -.TS -l l. -09/11 03/01 05/13 begin left-to-right text -09/11 03/02 05/13 begin right-to-left text -09/11 05/13 end of string -.TE -.RE -.LP -[This is a subset of the SDS (START DIRECTED STRING) control in the Draft -Bidirectional Addendum to ISO 6429.] -.LP -Directionality can be nested. Logically, a stack of directions is maintained. -Each of the first two control sequences pushes a new direction on the stack, -and the third sequence (revert) pops a direction from the stack. The stack -starts out empty at the beginning of a Compound Text string. When the stack is -empty, the directionality of the text is unspecified. -.LP -Directionality applies to all subsequent text, whether in GL, GR, or an -extended segment. If the desired directionality of GL, GR, or extended -segments differs, then directionality control sequences must be inserted when -switching between them. -.LP -Note that definition of GL and GR sets is independent of directionality; -defining a new GL or GR set does not change the current directionality, and -pushing or popping a directionality does not change the current GL and GR -definitions. -.LP -Specification of directionality is entirely optional; text direction should be -clear from context in most cases. However, it must be the case that either -all characters in a Compound Text string have explicitly specified direction -or that all characters have unspecified direction. That is, if directionality -control sequences are used, the first such control sequence must precede the -first graphic character in a Compound Text string, and graphic characters are -not permitted whenever the directionality stack is empty. -.NH 1 -Resources -.LP -To use Compound Text in a resource, you can simply treat all octets as if they -were ASCII/Latin-1 and just replace all ``\\'' octets (05/12) with the two -octets ``\\\\'', all newline octets (00/10) with the two octets ``\\n'', and -all zero octets with the four octets ``\\000''. -It is up to the client making use of the resource to interpret the data as -Compound Text; the policy by which this is ascertained is not constrained by -the Compound Text specification. -.NH 1 -Font Names -.LP -The following CharSet names for the standard character set encodings are -registered for use in font names under the X Logical Font Description: -.RS -.TS -l l l. -_ -.sp 6p -\fBName\fP \fBEncoding Standard\fP \fBDescription\fP -.sp 6p -_ -.sp 6p -ISO8859-1 ISO 8859-1 Latin alphabet No. 1 -ISO8859-2 ISO 8859-2 Latin alphabet No. 2 -ISO8859-3 ISO 8859-3 Latin alphabet No. 3 -ISO8859-4 ISO 8859-4 Latin alphabet No. 4 -ISO8859-5 ISO 8859-5 Latin/Cyrillic alphabet -ISO8859-6 ISO 8859-6 Latin/Arabic alphabet -ISO8859-7 ISO 8859-7 Latin/Greek alphabet -ISO8859-8 ISO 8859-8 Latin/Hebrew alphabet -ISO8859-9 ISO 8859-9 Latin alphabet No. 5 -JISX0201.1976-0 JIS X0201-1976 (reaffirmed 1984) 8-bit Alphanumeric-Katakana Code -GB2312.1980-0 GB2312-1980, GL encoding China (PRC) Hanzi -JISX0208.1983-0 JIS X0208-1983, GL encoding Japanese Graphic Character Set -KSC5601.1987-0 KS C5601-1987, GL encoding Korean Graphic Character Set -.sp 6p -_ -.TE -.RE -.LP -.NH 1 -Extensions -.LP -There is no absolute requirement for a parser to deal with anything but the -particular encoding syntax defined in this specification. However, it is -possible that Compound Text may be extended in the future, and as such it may -be desirable to construct the parser to handle 2022/6429 syntax more generally. -.LP -There are two general formats covering all control sequences that are expected -to appear in extensions: -.LP -01/11 {I} F -.IP -For this format, I is always in the range 02/00 to 02/15, and F is always -in the range 03/00 to 07/14. -.LP -09/11 {P} {I} F -.IP -For this format, P is always in the range 03/00 to 03/15, I is always in -the range 02/00 to 02/15, and F is always in the range 04/00 to 07/14. -.LP -In addition, new (singleton) control characters (in the C0 and C1 ranges) might -be defined in the future. -.LP -Finally, new kinds of ``segments'' might be defined in the future using syntax -similar to extended segments: -.LP -01/11 02/05 02/15 F M L -.IP -For this format, F is in the range 03/05 to 3/15. M and L are as defined -in extended segments. Such a segment will always be followed by the number -of octets defined by M and L. These octets can have arbitrary values and -need not follow the internal structure defined for current extended -segments. -.LP -If extensions to this specification are defined in the future, then any string -incorporating instances of such extensions must start with one of the following -control sequences: -.RS -.TS -l l. -01/11 02/03 V 03/00 ignoring extensions is OK -01/11 02/03 V 03/01 ignoring extensions is not OK -.TE -.RE -.LP -In either case, V is in the range 02/00 to 02/15 and indicates the major -version -minus one of the specification being used. These version control sequences are -for use by clients that implement earlier versions, but have implemented a -general parser. The first control sequence indicates that it is acceptable to -ignore all extension control sequences; no mandatory information will be lost -in the process. The second control sequence indicates that it is unacceptable -to ignore any extension control sequences; mandatory information would be lost -in the process. In general, it will be up to the client generating the -Compound Text to decide which control sequence to use. -.NH 1 -Errors -.LP -If a Compound Text string does not match the specification here (e.g., uses -undefined control characters, or undefined control sequences, or incorrectly -formatted extended segments), it is best to treat the entire string as invalid, -except as indicated by a version control sequence. diff --git a/doc/xorg-docs/specs/CTEXT/ctext.xml b/doc/xorg-docs/specs/CTEXT/ctext.xml new file mode 100644 index 000000000..2561e8bc8 --- /dev/null +++ b/doc/xorg-docs/specs/CTEXT/ctext.xml @@ -0,0 +1,876 @@ + + + + + +
+ + + Compound Text Encoding + X Consortium Standard + X Version 11, Release 6.8 + + + RobertW.Scheifler + + + X Consortium Standard + 1989X Consortium + Version 1.1 + X Consortium + + + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + + + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + + + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +Except as contained in this notice, the name of the X Consortium shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from the X Consortium. + + + + +Overview + + +Compound Text is a format for multiple character set data, such as +multi-lingual text. The format is based on ISO +standards for encoding and combining character sets. Compound Text is intended +to be used in three main contexts: inter-client communication using selections, +as defined in the +Inter-Client Communication Conventions Manual +(ICCCM); +window properties (e.g., window manager hints as defined in the ICCCM); +and resources (e.g., as defined in Xlib and the Xt Intrinsics). + + + +Compound Text is intended as an external representation, or interchange format, +not as an internal representation. It is expected (but not required) that +clients will convert Compound Text to some internal representation for +processing and rendering, and convert from that internal representation to +Compound Text when providing textual data to another client. + + + + +Values + + +The name of this encoding is "COMPOUND_TEXT". When text values are used in +the ICCCM-compliant selection mechanism or are stored as window properties in +the server, the type used should be the atom for "COMPOUND_TEXT". + + + + +Octet values are represented in this document as two decimal numbers in the +form col/row. This means the value (col * 16) + row. For example, 02/01 means +the value 33. + + +For our purposes, the octet encoding space is divided into four ranges: + + + + + + + + + C0 + octets from 00/00 to 01/15 + + + GL + octets from 02/00 to 07/15 + + + C1 + octets from 08/00 to 09/15 + + + GR + octets from 10/00 to 15/15 + + + + + + + +C0 and C1 are "control character" sets, while GL and GR are "graphic +character" sets. Only a subset of C0 and C1 octets are used in the encoding, +and depending on the character set encoding defined as GL or GR, a subset of +GL and GR octets may be used; see below for details. All octets (00/00 to +15/15) may appear inside the text of extended segments (defined below). + + + +[For those familiar with ISO 2022, we will use only an 8-bit environment, and +we will always use G0 for GL and G1 for GR.] + + + + +Control Characters + +In C0, only the following values will be used: + + + + + + + + + + 00/09 + HT + HORIZONTAL TABULATION + + + 00/10 + NL + NEW LINE + + + 01/11 + ESC + (ESCAPE) + + + + + + +In C1, only the following value will be used: + + + + + + + + + + 09/11 + CSI + CONTROL SEQUENCE INTRODUCER + + + + + + + +[The alternate 7-bit CSI encoding 01/11 05/11 is not used in Compound Text.] + + + +No control sequences are defined in Compound Text for changing the C0 and C1 +sets. + + + +A horizontal tab can be represented with the octet 00/09. Specification of +tabulation width settings is not part of Compound Text and must be obtained +from context (in an unspecified manner). + + + +[Inclusion of horizontal tab is for consistency with the STRING type currently +defined in the ICCCM.] + + + +A newline (line separator/terminator) can be represented with the octet 00/10. + + + +[Note that 00/10 is normally LINEFEED, but is being interpreted as NEWLINE. +This can be thought of as using the (deprecated) NEW LINE mode, E.1.3, in ISO +6429. Use of this value instead of 08/05 (NEL, NEXT LINE) is for consistency +with the STRING type currently defined in the ICCCM.] + + + +The remaining C0 and C1 values (01/11 and 09/11) are only used in the control +sequences defined below. + + + + +Standard Character Set Encodings + + +The default GL and GR sets in Compound Text correspond to the left and right +halves of ISO 8859-1 (Latin 1). As such, any legal instance of a STRING type +(as defined in the ICCCM) is also a legal instance of type COMPOUND_TEXT. + + +[The implied initial state in ISO 2022 is defined with the sequence: + 01/11 02/00 04/03 GO and G1 in an 8-bit environment only. Designation also invokes. + 01/11 02/00 04/07 In an 8-bit environment, C1 represented as 8-bits. + 01/11 02/00 04/09 Graphic character sets can be 94 or 96. + 01/11 02/00 04/11 8-bit code is used. + 01/11 02/08 04/02 Designate ASCII into G0. + 01/11 02/13 04/01 Designate right-hand part of ISO Latin-1 into G1. +] + + + +To define one of the approved standard character set encodings to be +the GL set, one of the following control sequences is used: + + + + + + + + + + + 01/11 + 02/08 + {I} F + 94 character set + + + 01/11 + 02/04 + 02/08{I} F + 94N character set + + + + + + + +To define one of the approved standard character set encodings to be +the GR set, one of the following control sequences is used: + + + + + + + + + + + 01/11 + 02/09 + {I} F + 94 character set + + + 01/11 + 02/13 + {I} F + 96 character set + + + 01/11 + 02/04 + 02/09 {I} F + 94N character set + + + + + + + +The "F"in the control sequences above stands for "Final character", which +is always in the range 04/00 to 07/14. The "{I}" stands for zero or more +"intermediate characters", which are always in the range 02/00 to 02/15, with +the first intermediate character always in the range 02/01 to 02/03. The +registration authority has defined an "{I} F" sequence for each registered +character set encoding. + + + + +[Final characters for private encodings (in the range 03/00 to 03/15) are not +permitted here in Compound Text.] + + + +For GL, octet 02/00 is always defined as SPACE, and octet 07/15 (normally +DELETE) is never used. For a 94-character set defined as GR, octets 10/00 and +15/15 are never used. + + + +[This is consistent with ISO 2022.] + + + +A 94N character set uses N octets (N > 1) for each character. +The value of N is derived from the column value for F: + + + + + + + + + column 04 or 05 + 2 octets + + + column 06 + 3 octets + + + column 07 + 4 or more octets + + + + + + +In a 94N encoding, the octet values 02/00 and 07/15 (in GL) and +10/00 and 15/15 (in GR) are never used. + + + +[The column definitions come from ISO 2022.] + + + +Once a GL or GR set has been defined, all further octets in that range (except +within control sequences and extended segments) are interpreted with respect to +that character set encoding, until the GL or GR set is redefined. GL and GR +sets can be defined independently, they do not have to be defined in pairs. + + + +Note that when actually using a character set encoding as the GR set, you must +force the most significant bit (08/00) of each octet to be a one, so that it +falls in the range 10/00 to 15/15. + + + +[Control sequences to specify character set encoding revisions (as in section +6.3.13 of ISO 2022) are not used in Compound Text. Revision indicators do not +appear to provide useful information in the context of Compound Text. The most +recent revision can always be assumed, since revisions are upward compatible.] + + + + +Approved Standard Encodings + +The following are the approved standard encodings to be used with Compound +Text. Note that none have Intermediate characters; however, a good parser will +still deal with Intermediate characters in the event that additional encodings +are later added to this list. + + + + + + + + + + {I} F + 94/96 + Description + + + + + 4/02 + 94 + +7-bit ASCII graphics (ANSI X3.4-1968), Left half of ISO 8859 sets + + + + 04/09 + 94 + +Right half of JIS X0201-1976 (reaffirmed 1984), +8-Bit Alphanumeric-Katakana Code + + + + 04/10 + 94 + +Left half of JIS X0201-1976 (reaffirmed 1984), +8-Bit Alphanumeric-Katakana Code + + + + 04/01 + 96 + Right half of ISO 8859-1, Latin alphabet No. 1 + + + 04/02 + 96 + Right half of ISO 8859-2, Latin alphabet No. 2 + + + 04/03 + 96 + Right half of ISO 8859-3, Latin alphabet No. 3 + + + 04/04 + 96 + Right half of ISO 8859-4, Latin alphabet No. 4 + + + 04/06 + 96 + Right half of ISO 8859-7, Latin/Greek alphabet + + + 04/07 + 96 + Right half of ISO 8859-6, Latin/Arabic alphabet + + + 04/08 + 96 + Right half of ISO 8859-8, Latin/Hebrew alphabet + + + 04/12 + 96 + Right half of ISO 8859-5, Latin/Cyrillic alphabet + + + 04/13 + 96 + Right half of ISO 8859-9, Latin alphabet No. 5 + + + 04/01 + 942 + GB2312-1980, China (PRC) Hanzi + + + 04/02 + 942 + JIS X0208-1983, Japanese Graphic Character Set + + + 04/03 + 942 + KS C5601-1987, Korean Graphic Character Set + + + + + + + +The sets listed as "Left half of ..." should always be defined as GL. The +sets listed as "Right half of ..." should always be defined as GR. Other +sets can be defined either as GL or GR. + + + + +Non-Standard Character Set Encodings + +Character set encodings that are not in the list of approved standard +encodings can be included +using "extended segments". An extended segment begins with one of the +following sequences: + + + + + + + + + 01/11 2/05 02/15 03/00 M L + variable number of octets per character + + + 01/11 2/05 02/15 03/01 M L + 1 octet per character + + + 01/11 2/05 02/15 03/02 M L + 2 octet per character + + + 01/11 2/05 02/15 03/03 M L + 3 octet per character + + + 01/11 2/05 02/15 03/04 M L + 4 octet per character + + + + + + +[This uses the "other coding system" of ISO 2022, using private Final +characters.] + + + +The "M" and "L" octets represent a 14-bit unsigned value giving the number +of octets that appear in the remainder of the segment. The number is computed +as ((M - 128) * 128) + (L - 128). The most significant bit M and L are always +set to one. The remainder of the segment consists of two parts, the name of +the character set encoding and the actual text. The name of the encoding comes +first and is separated from the text by the octet 00/02 (STX, START OF TEXT). +Note that the length defined by M and L includes the encoding name and +separator. + + + +[The encoding of the length is chosen to avoid having zero octets in Compound +Text when possible, because embedded NUL values are problematic in many C +language routines. The use of zero octets cannot be ruled out entirely +however, since some octets in the actual text of the extended segment may have +to be zero.] + + + +The name of the encoding should be registered with the X Consortium to avoid +conflicts and should when appropriate match the CharSet Registry and Encoding +registration used in the X Logical Font Description. The name itself should be +encoded using ISO 8859-1 (Latin 1), should not use question mark (03/15) or +asterisk (02/10), and should use hyphen (02/13) only in accordance with the X +Logical Font Description. + + + +Extended segments are not to be used for any character set encoding that can +be constructed from a GL/GR pair of approved standard encodings. For +example, it is incorrect to use an extended segment for any of the ISO 8859 +family of encodings. + + + +It should be noted that the contents of an extended segment are arbitrary; +for example, +they may contain octets in the C0 and C1 ranges, including 00/00, and +octets comprising a given character may differ in their most significant bit. + + + +[ISO-registered "other coding systems" are not used in Compound Text; +extended segments are the only mechanism for non-2022 encodings.] + + + + +Directionality + + +If desired, horizontal text direction can be indicated using the following +control sequences: + + + + + + + + + 09/11 03/01 05/13 + begin left-to-right text + + + 09/11 03/02 05/13 + begin right-to-left text + + + 09/11 05/13 + end of string + + + + + + + +[This is a subset of the SDS (START DIRECTED STRING) control in the Draft +Bidirectional Addendum to ISO 6429.] + + + +Directionality can be nested. Logically, a stack of directions is maintained. +Each of the first two control sequences pushes a new direction on the stack, +and the third sequence (revert) pops a direction from the stack. The stack +starts out empty at the beginning of a Compound Text string. When the stack is +empty, the directionality of the text is unspecified. + + + +Directionality applies to all subsequent text, whether in GL, GR, or an +extended segment. If the desired directionality of GL, GR, or extended +segments differs, then directionality control sequences must be inserted when +switching between them. + + + +Note that definition of GL and GR sets is independent of directionality; +defining a new GL or GR set does not change the current directionality, and +pushing or popping a directionality does not change the current GL and GR +definitions. + + + +Specification of directionality is entirely optional; text direction should be +clear from context in most cases. However, it must be the case that either +all characters in a Compound Text string have explicitly specified direction +or that all characters have unspecified direction. That is, if directionality +control sequences are used, the first such control sequence must precede the +first graphic character in a Compound Text string, and graphic characters are +not permitted whenever the directionality stack is empty. + + + + +Resources + + +To use Compound Text in a resource, you can simply treat all octets as if they +were ASCII/Latin-1 and just replace all "\" octets (05/12) with the two +octets "\\", all newline octets (00/10) with the two octets "\n", and +all zero octets with the four octets "\000". +It is up to the client making use of the resource to interpret the data as +Compound Text; the policy by which this is ascertained is not constrained by +the Compound Text specification. + + + + +Font Names + + +The following CharSet names for the standard character set encodings are +registered for use in font names under the X Logical Font Description: + + + + + + + + + + Name + Encoding Standard + Description + + + + + ISO8859-1 + ISO8859-1 + Latinalphabet No. 1 + + + ISO8859-2 + ISO8859-2 + Latinalphabet No. 2 + + + ISO8859-3 + ISO8859-3 + Latinalphabet No. 3 + + + ISO8859-4 + ISO8859-4 + Latinalphabet No. 4 + + + ISO8859-5 + ISO 8859-5 + Latin/Cyrillic alphabet + + + ISO8859-6 + ISO 8859-6 + Latin/Arabic alphabet + + + ISO8859-7 + ISO8859-7 + Latin/Greekalphabet + + + ISO8859-8 + ISO8859-8 + Latin/Hebrew alphabet + + + ISO8859-9 + ISO8859-9 + Latinalphabet No. 5 + + + JISX0201.1976-0 + JIS X0201-1976 (reaffirmed 1984) + 8-bit Alphanumeric-Katakana Code + + + GB2312.1980-0 + GB2312-1980, GL encoding + China (PRC) Hanzi + + + JISX0208.1983-0 + JIS X0208-1983, GL encoding + Japanese Graphic Character Set + + + KSC5601.1987-0 + KS C5601-1987, GL encoding + Korean Graphic Character Set + + + + + + + +Extensions + + +There is no absolute requirement for a parser to deal with anything but the +particular encoding syntax defined in this specification. However, it is +possible that Compound Text may be extended in the future, and as such it may +be desirable to construct the parser to handle 2022/6429 syntax more generally. + + + +There are two general formats covering all control sequences that are expected +to appear in extensions: + + + +01/11 {I} F + + + +For this format, I is always in the range 02/00 to 02/15, and F is always +in the range 03/00 to 07/14. + + + +09/11 {P} {I} F + + + +For this format, P is always in the range 03/00 to 03/15, I is always in +the range 02/00 to 02/15, and F is always in the range 04/00 to 07/14. + + + + +In addition, new (singleton) control characters (in the C0 and C1 ranges) might +be defined in the future. + + + + +Finally, new kinds of "segments" might be defined in the future using syntax +similar to extended segments: + + + +01/11 02/05 02/15 F M L + + + +For this format, F is in the range 03/05 to 3/15. M and L are as defined +in extended segments. Such a segment will always be followed by the number +of octets defined by M and L. These octets can have arbitrary values and +need not follow the internal structure defined for current extended +segments. + + + + +If extensions to this specification are defined in the future, then any string +incorporating instances of such extensions must start with one of the following +control sequences: + + + + + + + + + 01/11 02/03 V 03/00 + ignoring extensions is OK + + + 01/11 02/03 V 03/01 + ignoring extensions is not OK + + + + + + + +In either case, V is in the range 02/00 to 02/15 and indicates the major +version +minus one of the specification being used. These version control sequences are +for use by clients that implement earlier versions, but have implemented a +general parser. The first control sequence indicates that it is acceptable to +ignore all extension control sequences; no mandatory information will be lost +in the process. The second control sequence indicates that it is unacceptable +to ignore any extension control sequences; mandatory information would be lost +in the process. In general, it will be up to the client generating the +Compound Text to decide which control sequence to use. + + + + +Errors + + +If a Compound Text string does not match the specification here (e.g., uses +undefined control characters, or undefined control sequences, or incorrectly +formatted extended segments), it is best to treat the entire string as invalid, +except as indicated by a version control sequence. + + +
diff --git a/doc/xorg-docs/specs/Composite/protocol b/doc/xorg-docs/specs/Composite/protocol deleted file mode 100644 index aba9df441..000000000 --- a/doc/xorg-docs/specs/Composite/protocol +++ /dev/null @@ -1,281 +0,0 @@ - Composite Extension - - Version 0.2 - 2004-7-8 - Keith Packard - keithp@keithp.com - - Version 0.3 - 2006-5-13 - Deron Johnson - deron.johnson@sun.com - - -1. Introduction - -Many user interface operations would benefit from having pixel contents of -window hierarchies available without respect to sibling and antecedent -clipping. In addition, placing control over the composition of these pixel -contents into a final screen image in an external application will enable -a flexible system for dynamic application content presentation. - -2. Acknowledgements - -This small extension has been brewing for several years, contributors to -both early prototypes and the final design include: - - + Bill Haneman for motivating the ability to magnify occluded windows - with his work on accessibility - - + Carsten Haitzler for Enlightenment, the original eye-candy window - manager which demonstrated that clever hacks are an awfully - close substitute for changes in the underlying system. - - + Jim Gettys for key insights into the relationship between damage - events and per-window pixmap usage - - + Mike Harris and Owen Taylor for figuring out what to call it. - -3. Architecture - -The composite extension provides two related mechanisms: - - 1. Per-hierarchy storage. The rendering of an entire hierarchy of windows - is redirected to off-screen storage. The pixels of that hierarchy - are available whenever it is viewable. Storage is automatically - reallocated when the top level window changes size. Contents beyond - the geometry of the top window are not preserved. - - 2. Automatic shadow update. When a hierarchy is rendered off-screen, - the X server provides an automatic mechanism for presenting those - contents within the parent window. The implementation is free to - make this update lag behind actual rendering operations by an - unspecified amount of time. This automatic update mechanism may - be disabled so that the parent window contents can be completely - determined by an external application. - -Per-hierarchy storage may be created for individual windows or for all -children of a window. Manual shadow update may be selected by only a single -application for each window; manual update may also be selected on a -per-window basis or for each child of a window. Detecting when to update -may be done with the Damage extension. - -The off-screen storage includes the window contents, its borders and the -contents of all descendants. - -Version 0.2 of the protocol introduces a mechanism for associating an XID -with the off-screen pixmap used to store these contents. This can be used -to hold onto window contents after the window is unmapped (and hence animate -it's disappearance), and also to access the border of the window, which is -not reachable through the Window ID itself. A new pixmap is created each -time the window is mapped or resized; as these events are nicely signalled -with existing events, no additional notification is needed. The old pixmap -will remain allocated as long as the Pixmap ID is left valid, it is -important that the client use the FreePixmap request when it is done with -the contents and to create a new name for the newly allocated pixmap. - -In automatic update mode, the X server is itself responsible for presenting -the child window contents within the parent. It seems reasonable, then, for -rendering to the parent window to be clipped so as not to interfere with any -child window content. In an environment with a mixure of manual and -automatic updating windows, rendering to the parent in the area nominally -occupied by a manual update window should be able to affect parent pixel -values in those areas, but such rendering should be clipped to automatic -update windows, and presumably to other manual update windows managed by -other applications. In any of these cases, it should be easy to ensure that -rendering has no effect on any non-redirected windows. - -Instead of attempting to define new clipping modes for rendering, the -Composite extension instead defines ClipByChildren rendering to the parent -to exclude regions occupied by redirected windows (either automatic or -manual). The CreateRegionFromBorderClip request can be used along with -IncludeInferiors clipping modes to restrict manual shadow updates to the -apporpriate region of the screen. Bracketing operations with -GrabServer/UngrabServer will permit atomic sequences that can update the -screen without artifact. As all of these operations are asynchronous, -network latency should not adversely affect update latency. - -4. Errors - -The composite extension does not define any new errors. - -5. Types - - UPDATETYPE { Automatic, Manual } - -6. Events - -The composite extension does not define any new events. - -7. Extension Initialization - -The client must negotiate the version of the extension before executing -extension requests. Otherwise, the server will return BadRequest for any -operations other than QueryVersion. - - QueryVersion - - client-major-version: CARD32 - client-minor-version: CARD32 - - -> - - major-version: CARD32 - minor-version: CARD32 - - The client sends the highest supported version to the server and - the server sends the highest version it supports, but no higher than - the requested version. Major versions changes can introduce - incompatibilities in existing functionality, minor version - changes introduce only backward compatible changes. It is - the client's responsibility to ensure that the server supports - a version which is compatible with its expectations. Servers - are encouraged to support multiple versions of the extension. - -8. Hierarchy Redirection - - RedirectWindow - - window: Window - update: UPDATETYPE - - errors: Window, Access, Match - - The hierarchy starting at 'window' is directed to off-screen - storage. 'automatic-update' specifies whether the contents - are mirrored to the parent window automatically or not. Only - one client may specify this flag, another attempt will result in an - Access error. When all clients enabling redirection terminate, - the redirection will automatically be disabled. - - The root window may not be redirected. Doing so results in a Match - error. - - RedirectSubwindows - - window: Window - update UPDATETYPE - - errors: Window, Access - - Hierarchies starting at all current and future children of window - will be redirected as in RedirectWindow. If update is Manual, - then painting of the window background during window manipulation - and ClearArea requests is inhibited. - - UnredirectWindow: - - window: Window - - errors: Window, Value - - Redirection of the specified window will be terminated. If - the specified window was not selected for redirection by the - current client, a 'Value' error results. - - UnredirectWindows: - - window: Window - - errors: Window, Value - - Redirection of all children of window will be terminated. If - the specified window was not selected for sub-redirection by the - current client, a 'Value' error results. - -9. Clip lists - - CreateRegionFromBorderClip - - region: Region - window: Window - - errors: Window, IDChoice - - This request creates a region containing the "usual" border clip - value; that is the area of the window clipped against siblings and - the parent. This region can be used to restrict rendering to - suitable areas while updating only a single window. The region - is copied at the moment the request is executed; future changes - to the window hierarchy will not be reflected in this region. - -10. Associating a Pixmap ID with the off-screen storage (0.2 and later) - - NameWindowPixmap - - window: Window - pixmap: Pixmap - - errors: Window, Match, IDChoice - - This request makes 'pixmap' a reference to the off-screen storage - for 'window'. This pixmap will remain allocated until freed, even - if 'window' is unmapped, reconfigured or destroyed. However, - 'window' will get a new pixmap allocated each time it is - mapped or resized, so this request will need to be reinvoked for - the client to continue to refer to the storage holding the current - window contents. Generates a 'Match' error if 'window' is not - redirected. - -Version 0.3: - -11. Composite Overlay Window - -The Composite Overlay Window provides composite managers with a -surface on which to draw without interference. This window is always -above normal windows and is always below the screen saver window. It -is an InputOutput window whose width and height are the screen -dimensions. Its visual is the root visual and its border width is -zero. Attempts to redirect it using the composite extension are -ignored. This window does not appear in the reply of the QueryTree -request. It is also an override redirect window. These last two -features make it invisible to window managers and other X11 -clients. The only way to access the XID of this window is via the -CompositeGetOverlayWindow request. Initially, the Composite Overlay -Window is unmapped. - -CompositeGetOverlayWindow returns the XID of the Composite Overlay -Window. If the window has not yet been mapped, it is mapped by this -request. When all clients who have called this request have terminated -their X11 connections the window is unmapped. - -Composite managers may render directly to the Composite Overlay -Window, or they may reparent other windows to be children of this -window and render to these. Multiple clients may render to the -Composite Overlay Window, create child windows of it, reshape it, and -redefine its input region, but the specific arbitration rules followed -by these clients is not defined by this specification; these policies -should be defined by the clients themselves. - - CompositeGetOverlayWindow - - window: Window - - -> - - overlayWin: Window - - This request returns the XID of the Composite Overlay Window for - the screen specified by the argument 'window'. This request - indicates that the client wishes to use the Composite Overlay - Window of this screen. If this Composite Overlay Window has not - yet been mapped, it is mapped by this request. - - The Composite Overlay Window for a particular screen will be - unmapped when all clients who have invoked this request have - also invoked CompositeReleaseOverlayWindow for that screen. Also, - CompositeReleaseOverlayWindow for a screen will be implicitly - called when a client using the Composite Overlay Window on that - screen terminates its X11 connection. - - - CompositeReleaseOverlayWindow - - window: Window - - This request specifies that the client is no longer using the - Composite Overlay Window on the screen specified by the - argument 'window'. A screen's Composite Overlay Window is - unmapped when there are no longer any clients using it. - - diff --git a/doc/xorg-docs/specs/Damage/protocol b/doc/xorg-docs/specs/Damage/protocol deleted file mode 100644 index 7bbfc137d..000000000 --- a/doc/xorg-docs/specs/Damage/protocol +++ /dev/null @@ -1,190 +0,0 @@ - The DAMAGE Extension - Protocol Version 0.0 - Document Revision 1 - 2003-11-03 - - Keith Packard - keithp@keithp.com - -1. Introduction - -Monitoring the regions affected by rendering has wide-spread use, from -VNC-like systems scraping the screen to screen magnifying applications -designed to aid users with limited visual acuity. The DAMAGE extension is -designed to make such applications reasonably efficient in the face of -server-client latency. - -2. Acknolwedgements - -As usual, the author had significant input from many people, in particular: - - + Havoc Pennington who designed and implemented a Damage extension - last year which was then lost to the mists of time. - - + Bill Haneman whose work on accessibility in the Gnome environment - is legendary. - - + Jim Gettys who found a way to avoid streaming damage rectangles - to the client in many cases. - - + Owen Taylor who suggested that streaming damage rectangles may - be warranted in some cases after all. - -3. Damage Model - -We call changes made to pixel contents of windows and pixmaps 'damage' -throughout this extension. Another notion of 'damage' are drawable regions -which are in need of redisplay to repair the effects of window manipulation -or other data loss. This extension doesn't deal with this second notion at -all; suggestions on a better term which isn't easily conflated with existing -notions are eagerly solicited. - -Damage accumulates as drawing occurs in the drawable. Each drawing operation -'damages' one or more rectangular areas within the drawable. The rectangles -are guaranteed to include the set of pixels modified by each operation, but -may include significantly more than just those pixels. The desire is for -the damage to strike a balance between the number of rectangles reported and -the extraneous area included. A reasonable goal is for each primitive -object drawn (line, string, rectangle) to be represented as a single -rectangle and for the damage area of the operation to be the union of these -rectangles. - -The DAMAGE extension allows applications to either receive the raw -rectangles as a stream of events, or to have them partially processed within -the X server to reduce the amount of data transmitted as well as reduce the -processing latency once the repaint operation has started. - -Damage to a window reflects both drawing within the window itself as well as -drawing within any inferior window that affects pixels seen by -IncludeInferiors rendering operations. To reduce the computational -complexity of this, the DAMAGE extension allows the server to monitor all -rendering operations within the physical target pixel storage that fall -within the bounds of the window. In a system with a single frame buffer -holding all windows, this means that damage will accumulate for all -rendering operations that lie within the visible part of the window. - -The precise reason for this architecture will be made clear in the XSPLITTREE -extension which will provide multiple pixel storage areas for the screen -contents. - -4. Data types - -The "Damage" object holds any accumulated damage region and reflects the -relationship between the drawable selected for damage notification and the -drawable for which damage is tracked. - -5. Errors - -Damage - A value for a DAMAGE argument does not name a defined DAMAGE. - -6. Types - - DAMAGE 32-bit value (top three bits guaranteed to be zero) - - DamageReportLevel { DamageReportRawRectangles, - DamageReportDeltaRectangles, - DamageReportBoundingBox, - DamageReportNonEmpty } - - DamageReportRawRectangles - - Delivers DamageNotify events each time the screen - is modified with rectangular bounds that circumscribe - the damaged area. No attempt to compress out overlapping - rectangles is made. - - DamageReportDeltaRectangles - - Delivers DamageNotify events each time damage occurs - which is not included in the damage region. The - reported rectangles include only the changes to that - area, not the raw damage data. - - DamageReportBoundingBox - - Delivers DamageNotify events each time the bounding - box enclosing the damage region increases in size. - The reported rectangle encloses the entire damage region, - not just the changes to that size. - - DamageReportNonEmpty - - Delivers a single DamageNotify event each time the - damage rectangle changes from empty to non-empty, and - also whenever the result of a DamageSubtract request - results in a non-empty region. - -7. Events - -DamageNotify - - level: DamageReportLevel - drawable: Drawable - damage: DAMAGE - more: Bool - timestamp: Timestamp - area: Rectangle - drawable-geometry: Rectangle - - 'more' indicates whether there are subsequent damage events - being delivered immediately as part of a larger damage region - -8. Extension Initialization - -The client must negotiate the version of the extension before executing -extension requests. Otherwise, the server will return BadRequest for any -operations other than QueryVersion. - -QueryVersion - - client-major-version: CARD32 - client-minor-version: CARD32 - - -> - - major-version: CARD32 - minor-version: CARD32 - - The client sends the highest supported version to the server and - the server sends the highest version it supports, but no higher than - the requested version. Major versions changes can introduce - incompatibilities in existing functionality, minor version - changes introduce only backward compatible changes. It is - the clients responsibility to ensure that the server supports - a version which is compatible with its expectations. Servers - are encouraged to support multiple versions of the extension. - -9. Enable Monitoring - -DamageCreate - - damage: DAMAGE - drawable: Drawable - level: DamageReportLevel - - Creates a damage object to monitor changes to Drawable - -DamageDestroy - damage: DAMAGE - - Destroys damage. - -DamageSubtract - - damage: DAMAGE - repair: Region or None - parts: Region - - Synchronously modifies the regions in the following manner: - - If repair is None: - - 1) parts = damage - 2) damage = - - Otherwise: - - 1) parts = damage INTERSECT repair - 2) damage = damage - parts - 3) Generate DamageNotify for remaining damage areas diff --git a/doc/xorg-docs/specs/FSProtocol/protocol.ms b/doc/xorg-docs/specs/FSProtocol/protocol.ms deleted file mode 100644 index 52e9b47f3..000000000 --- a/doc/xorg-docs/specs/FSProtocol/protocol.ms +++ /dev/null @@ -1,3602 +0,0 @@ -.\" $Xorg: protocol.ms,v 1.3 2000/08/17 19:42:07 cpqbld Exp $ -.\" $XdotOrg: xc/doc/specs/FSProtocol/protocol.ms,v 1.2 2004/04/23 18:42:15 eich Exp $ -.\" Use tbl, -ms, and macros.t -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.ps 11 -.nr PS 11 -\& -.sp 8 -.ce 50 -\s+3\fBThe X Font Service Protocol\fP\s-3 -.sp -\fBVersion 2.0\fP -\fBX Window System Standard\fR -.sp -\fBX Version 11, Release 6.8\fR -.sp 6 -Jim Fulton -Network Computing Devices, Inc. -.sp 6 -Revised May 2, 1994 -.ce 0 -.bp -.br -\& -.sp 15 -.ps 9 -.nr PS 9 -.LP -Copyright \(co 1991 Network Computing Devices, Inc. -.LP -Permission to use, copy, modify, distribute, and sell this -documentation for any purpose is hereby granted without fee, -provided that the above copyright notice and this permission -notice appear in all copies. Network Computing Devices, Inc. -makes no representations about the suitability for any purpose -of the information in this document. This documentation is -provided ``as is'' without express or implied warranty. -.LP -Copyright \(co 1994 X Consortium -.LP -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -.LP -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -.LP -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. -.ps 11 -.nr PS 11 -.bp 1 -.EH '\fBX Font Service Protocol\fP''\fBX11, Release 6.8\fP' -.OH '\fBX Font Service Protocol\fP''\fBX11, Release 6.8\fP' -.EF ''\fB\\\\n(PN\fP'' -.OF ''\fB\\\\n(PN\fP'' -.NH 1 -Introduction -.XS -\*(SN Introduction -.XE -.LP -The management of fonts in large, heterogeneous environments is one of the -hardest aspects of using the X Window System.* -.FS -* \fIX Window System\fP is a trademark of The Open Group. -.FE -Multiple formats and the lack of -a consistent mechanism for exporting font data to all displays on a network -prevent the transparent use of applications across different display platforms. -The X Font Service protocol is designed to address this and other issues, with -specific emphasis on the needs of the core X protocol. Upward-compatible -changes (typically in the form of new requests) are expected as consensus is -reached on new features (particularly outline font support). -.LP -Currently, most X displays use network file protocols such as NFS and TFTP to -obtain raw font data which they parse directly. Since a common binary format -for this data doesn't exist, displays must be able to interpret a variety of -formats if they are to be used with different application hosts. This leads to -wasted code and data space and a loss of interoperability as displays are used -in unforeseen environments. -.LP -By moving the interpretation of font data out of the X server into a separate -service on the network, these problems can be greatly reduced. In addition, -new technologies, such as dynamically generating bitmaps from scaled or outline -fonts, can be provided to all displays transparently. For horizontal text, -caching techniques and increased processor power can potentially make -rasterization more efficient on large, centralized hosts than on individual -displays. -.LP -Each font server provides sets of fonts that may be listed and queried for -header, property, glyph extents, and bitmap information. This data is -transmitted over the network using a binary format (with variations to support -different bit- and byte-orders) designed to minimize the amount of processing -required by the display. Since the font server, rather than the display, is -responsible for parsing the raw font data, new formats can be used by all -displays by modifying a single font server. -.LP -From the user's point of view, font servers are simply a new type of name in -the X font path. Network name services allow descriptive names (such as -DEPARTMENT-FONTS or APPLICATION-FONTS) to be translated into proper network -addresses. X displays send requests to and read replies from the font server -rather than reading directly from files. Since the X Font Service protocol is -designed to allow subsets of the font data to be requested, displays may easily -implement a variety of strategies for fine-grained demand-loading of glyphs. -.NH 1 -Architectural Model -.XS -\*(SN Architectural Model -.XE -.LP -In this document, the words ``client'' and ``server'' refer to the consumer and -provider of a font, respectively, unless otherwise indicated. It is important -to note that in this context, the X server is also a font client. -.LP -The X Font Service protocol does not require any changes to the core X protocol -or to any applications. To the user, font servers are simply additional types -of font path elements. As such, X servers may connect to multiple font -servers, as shown in Figure 2.1. Although the font protocol is geared towards -the X Window System, it may be also used by other consumers of font data (such -as printer drivers). -.DS -.ft C - +--------+ +---------------+ - | X1 |--------------| | - | Server | | Font Server | - +--------+ +-------| 1 | - | +---------------+ - +--------+ | - | X2 |------+ +---------------+ - | Server |--------------| | - +--------+ | Font Server | - +-------| 2 | -+---------+ | +---------------+ -| other | | -| clients |------+ -+---------+ -.ft -.DE -.ce -Figure \*(SN1: Connecting to a Font Server -.LP -Clients communicate with the font server using the request/reply/event model -over any mutually-understood virtual stream connection (such as TCP/IP, DECnet,* -.FS -*DECnet is a trademark of Digital Equipment Corporation. -.FE -etc.). Font servers are responsible for providing data in the bit and byte -orders requested by the client. The set of requests and events provided in the -first version of the X Font Service protocol is limited to supporting the needs -of the bitmap-oriented core X Window System protocol. Extensions are expected -as new needs evolve. -.LP -A font server reads raw font data from a variety of sources (possibly -including other font servers) and converts it into a common format that is -transmitted to the client using the protocol described in Section 4. New font -formats are handled by adding new converters to a font server, as shown in -Figure 2.2. -.DS -.ft C - +------------+ - | client | - | (X server) | - +------------+ - | - network - | -+--------------------------------------------+ -| | -| font server 1 | -| | -+-----+-----+-----+-----+----+-----+---+-----+ -| bdf | snf | pcf | atm | f3 | dwf | | | ... | -+-----+-----+-----+-----+----+-----+-|-+-----+ - | - network - | - +----------+ - | font | - | server 2 | - +----------+ -.ft -.DE -.ce -Figure \*(SN2: Where Font Data Comes From -.LP -The server may choose to provide named sets of fonts called ``catalogues.'' -Clients may specify which of the sets should be used in listing or opening a -font. -.LP -An event mechanism similar to that used in the X protocol is provided for -asynchronous notification of clients by the server. -.LP -Clients may provide authorization data for the server to be used in determining -(according to the server's licensing policy) whether or not access should be -granted to particular fonts. This is particularly useful for clients whose -authorization changes over time (such as an X server that can verify the -identity of the user). -.LP -Implementations that wish to provide additional requests or events may use the -extension mechanism. Adding to the core font service protocol (with the -accompanying change in the major or minor version numbers) is reserved to the X -Consortium. -.NH 1 -Font Server Naming -.XS -\*(SN Font Server Naming -.XE -.LP -Font clients that expose font server names to the user are encouraged to -provide ways of naming font servers symbolically (e.g. DEPARTMENT-FONTS). -However, for environments that lack appropriate name services -transport-specific names are necessary. Since these names do occur in the -protocol, clients and servers should support at least the applicable formats -described below. Formats for additional transports may be registered with the -X Consortium. -.NH 2 -TCP/IP Names -.XS -\*(SN TCP/IP Names -.XE -.LP -The following syntax should be used for TCP/IP names: -.DS - ::= "tcp/" ":" ["/" ] -.DE -where is either symbolic (such as expo.lcs.mit.edu) or numeric -decimal (such as 18.30.0.212). The is the port on which the -font server is listening for connections. The string at -the end is optional and specifies a plus-separated list of catalogues -that may be requested. For example: -.DS - tcp/expo.lcs.mit.edu:8012/available+special - tcp/18.30.0.212:7890 -.DE -.NH 2 -DECnet Names -.XS -\*(SN DECnet Names -.XE -.LP -The following syntax should be used for DECnet names: -.DS - ::= "decnet/" "::font$" - ["/" ] -.DE -where is either symbolic (such as SRVNOD) or the numeric decimal -form of the DECnet address (such as 44.70). The is normal, -case-insensitive DECnet object name. The string at the end is -optional and specifies a plus-separated list of catalogues that may be -requested. For example: -.DS - DECNET/SRVNOD::FONT$DEFAULT/AVAILABLE - decnet/44.70::font$other -.DE -.NH 1 -Protocol -.XS -\*(SN Protocol -.XE -.LP -The protocol described below uses the request/reply/error model and is -specified using the same conventions outlined in Section 2 of the core X Window -System protocol [1]: -.IP \(bu 5 -Data type names are spelled in upper case with no word separators, -as in: FONTID -.IP \(bu 5 -Alternate values are capitalized with no word separators, -as in: MaxWidth -.IP \(bu 5 -Structure element declarations are in lower case with hyphens -as word separators, as in: byte-order-msb -.NT -Structure element names are referred to in -upper case (e.g. BYTE-ORDER-MSB) when used in -descriptions to set them off from the surrounding -text. When this document is typeset they will be -printed in lower case in a distinct font. -.NE -.IP \(bu 5 -Type declarations have the form ``name: type'', -as in: CARD8: 8-bit byte -.IP \(bu 5 -Comma-separated lists of alternate values are enclosed in -braces, as in: { Min, MaxWidth, Max } -.IP \(bu 5 -Comma-separated lists of structure elements are enclosed in -brackets, as in: [ byte1: CARD8, byte2: CARD8 ] -.LP -A type with a prefix ``LISTof'' represents a counted list of -elements of that type, as in: LISTofCARD8 -.NH 2 -Data Types -.XS -\*(SN Data Types -.XE -.LP -The following data types are used in the core X Font Server protocol: -.LP -ACCESSCONTEXT: ID -.IP -This value is specified in the CreateAC request as the identifier -to be used when referring to a particular AccessContext resource -within the server. These resources are used by the server to -store client-specified authorization information. This -information may be used by the server to determine whether or not -the client should be granted access to particular font data. -.sp -In order to preserve the integrity of font licensing being performed by -the font server, care must be taken by a client to properly represent the -identity of the true user of the font. Some font clients will in fact -be servers (for example, X servers) requesting fonts for their own clients. -Other font clients may be doing work on behalf of a number of different -users over time (for example, print spoolers). -.sp -.PN AccessContexts -must be created (with -.PN CreateAC ) -and switched among (with -.PN SetAuthorization ) -to represent all of these ``font users'' properly. -.LP -ALTERNATESERVER: [ name: STRING8, -.br - subset: BOOL ] -.IP -This structure specifies the NAME, encoded in ISO 8859-1 according -to Section 3, of another font server that may be useful as a -substitute for this font server. The SUBSET field indicates -whether or not the alternate server is likely to only contain a -subset of the fonts available from this font server. This -information is returned during the initial connection setup and -may be used by the client to find a backup server in case of -failure. -.LP -AUTH: [ name: STRING8, -.br - data: LISTofBYTE ] -.IP -This structure specifies the name of an authorization protocol and -initial data for that protocol. It is used in the authorization -negotiation in the initial connection setup and in the CreateAC -request. -.ne 5 -.LP -BITMAPFORMAT: -.IP -CARD32 containing the following fields defined by the -sets of values given further below -.RS -.DS -.TA .75i .75i .75i .75i -[ - byte-order-msb: 1 bit, - bit-order-msb: 1 bit, - image-rect: 2 bits { Min, - MaxWidth, - Max }, - zero-pad: 4 bits, - scanline-pad: 2 bits { ScanlinePad8, - ScanlinePad16, - ScanlinePad32, - ScanlinePad64 }, - zero-pad: 2 bits, - scanline-unit: 2 bits { ScanlineUnit8, - ScanlineUnit16, - ScanlineUnit32, - ScanlineUnit64 }, - zero-pad: 2 bits, - zero-pad: 16 bits, -] -.DE -.RE -This structure specifies how glyph images are transmitted in -response to -.PN QueryXBitmaps8 -and -.PN QueryXBitmaps16 -requests. -.sp -If the BYTE-ORDER-MSB bit (1 << 0) is set, the Most Significant -Byte of each scanline unit is returned first. Otherwise, the -Least Significant Byte is returned first. -.sp -If the BIT-ORDER-MSB bit (1 << 1) is set, the left-most bit in -each glyph scanline unit is stored in the Most Significant Bit of -each transmitted scanline unit. Otherwise, the left-most bit is -stored in the Least Significant Bit. -.sp -The IMAGE-RECT field specifies a rectangle of pixels within the -glyph image. It contains one of the following alternate values: -.RS -.DS - - ImageRectMin (0 << 2) - ImageRectMaxWidth (1 << 2) - ImageRectMax (2 << 2) -.DE -.RE -For a glyph with extents XCHARINFO in a font with header information -XFONTINFO, the IMAGE-RECT values have the following meanings: -.RS -.in +5n -.IP -.PN ImageRectMin - -This refers to the minimal bounding rectangle -surrounding the inked pixels in the glyph. This is the -most compact representation. The edges of the rectangle -are: -.RS -.DS -.TA .75i .75i .75i .75i - left: XCHARINFO.LBEARING - right: XCHARINFO.RBEARING - top: XCHARINFO.ASCENT - bottom: XCHARINFO.DESCENT -.DE -.RE -.IP -.PN ImageRectMaxWidth - -This refers to the scanlines between the -glyph's ascent and descent, padded on the left to the minimum -left-bearing (or 0, whichever is less) and on the right to -the maximum right-bearing (or logical-width, whichever is -greater). All glyph images share a common horizontal -origin. This is a combination of ImageRectMax in the -horizontal direction and ImageRectMin in the vertical -direction. The edges of the rectangle are: -.RS -.DS -.TA .75i .75i .75i .75i -left: min (XFONTINFO.MIN-BOUNDS.LBEARING, 0) -right: max (XFONTINFO.MAX-BOUNDS.RBEARING, - XFONTINFO.MAX-BOUNDS.WIDTH) -top: XCHARINFO.ASCENT -bottom: XCHARINFO.DESCENT -.DE -.RE -.IP -ImageRectMax - This refers to all scanlines, from the maximum -ascent (or the font ascent, whichever is greater) to the -maximum descent (or the font descent, whichever is greater), -padded to the same horizontal extents as MaxWidth. -All glyph images have the same sized bitmap and share a -common origin. This is the least compact representation, -but may be the easiest or most efficient (particularly for -character cell fonts) for some clients to use. The edges of -the rectangle are: -.RS -.DS -.TA .75i .75i .75i .75i -left: min (XFONTINFO.MIN-BOUNDS.LBEARING, 0) -right: max (XFONTINFO.MAX-BOUNDS.RBEARING, - XFONTINFO.MAX-BOUNDS.WIDTH) -top: max (XFONTINFO.FONT-ASCENT, - XFONTINFO.MAX-BOUNDS.ASCENT) -bottom: max (XFONTINFO.FONT-DESCENT, - XFONTINFO.MAX-BOUNDS.DESCENT) -.DE -.RE -The SCANLINE-PAD field specifies the number of bits (8, 16, 32, -or 64) to which each glyph scanline is padded before transmitting. -It contains one of the following alternate values: -.RS -.DS -.TA .75i .75i .75i .75i - ScanlinePad8 (0 << 8) - ScanlinePad16 (1 << 8) - ScanlinePad32 (2 << 8) - ScanlinePad64 (3 << 8) -.DE -.RE -The SCANLINE-UNIT field specifies the number of bits (8, 16, 32, -or 64) that should be treated as a unit for swapping. This value -must be less than or equal to the number of bits specified by the -SCANLINE-PAD. It contains one of the following alternate values: -.RS -.DS -.TA .75i .75i .75i .75i - ScanlineUnit8 (0 << 12) - ScanlineUnit16 (1 << 12) - ScanlineUnit32 (2 << 12) - ScanlineUnit64 (3 << 12) -.DE -.RE -BITMAPFORMATs are byte-swapped as CARD32s. All unspecified bits -must be zero. -.sp -Use of an invalid BITMAPFORMAT causes a Format error to -be returned. -.in -5n -.RE -.LP -BITMAPFORMATMASK: CARD32 mask -.IP -This is a mask of bits representing the fields in a BITMAPFORMAT: -.RS -.DS -.TA .75i .75i .75i .75i - ByteOrderMask (1 << 0) - BitOrderMask (1 << 1) - ImageRectMask (1 << 2) - ScanlinePadMask (1 << 3) - ScanlineUnitMask (1 << 4) -.DE -.RE -Unspecified bits are required to be zero or else a Format error -is returned. -.LP -BOOL: CARD8 -.IP -This is a boolean value containing one of the following alternate -values: -.RS -.DS -.TA .75i .75i .75i .75i - - False 0 - True 1 -.DE -.RE -.LP -BYTE: 8-bit value -.IP -This is an unsigned byte of data whose encoding -is determined by the context in which it is used. -.sp 12p -.LP -CARD8: 8-bit unsigned integer -.sp 12p -.LP -CARD16: 16-bit unsigned integer -.sp 12p -.LP -CARD32: 32-bit unsigned integer -.IP -These are unsigned numbers. The latter two are byte-swapped when -the server and client have different byte orders. -.sp 12p -.LP -CHAR2B: [ byte1, byte2: CARD8 ] -.IP -This structure specifies an individual character code within -either a 2-dimensional matrix (using BYTE1 and BYTE2 as the row -and column indices, respectively) or a vector (using BYTE1 and -BYTE2 as most- and least-significant bytes, respectively). This -data type is treated as a pair of 8-bit values and is never -byte-swapped. Therefore, the client should always transmit BYTE1 -first. -.sp 12p -.LP -EVENTMASK: CARD32 mask -.IP -This is a mask of bits indicating which of an extension's (or the -core's) maskable events the client would like to receive. Each -bit indicates one or more events, and a bit value of one indicates -interest in a corresponding set of events. The following bits are -defined for event masks specified for the core protocol (i.e. an -EXTENSION-OPCODE of zero in -.PN SetEventMask -and -.PN GetEventMask -requests): -.RS -.DS -.TA .75i .75i .75i .75i - - CatalogueListChangeMask (1 << 0) - FontListChangeMask (1 << 1) -.DE -.RE -If -.PN CatalogueListChangeMask -is set, client is interested in -receiving -.PN CatalogueListNotify -events. If -.PN FontListChangeMask -is set, the client is interested in -receiving -.PN FontListNotify -events. -.sp -Extensions that provide additional events may define their own -event masks. These event masks have their own scope and may use -the same bit values as the core or other extensions. -.sp -All unused bits must be set to zero. In -.PN SetEventMask -requests, if -any bits are set that are not defined for the extension (or core) -for which this EVENTMASK is intended (according to the EXTENSION- -OPCODE given in the -.PN SetEventMask -request), an -.PN EventMask -error is generated. -.sp -This value is swapped as a CARD32. -.LP -FONTID: ID -.IP -This is specified by the client in the request -.PN OpenBitmapFont -as the identifier to be used when referring to a particular open -font. -.LP -ID: CARD32 -.IP -This is a 32-bit value in which the top 3 bits must be clear, and -at least 1 other bit must be set (yielding a range of 1 through -2^29-1). It is specified by the client to represent objects in -the server. Identifiers are scoped according to their type are -private to the client; thus, the same identifier may be used for -both a FONTID and an ACCESSCONTEXT as well as by multiple clients. -.sp -An ID of zero is referred to as None. -.LP -INT8: 8-bit signed integer -.LP -INT16: 16-bit signed integer -.LP -INT32: 32-bit signed integer -.IP -These are signed numbers. The latter two are byte-swapped when -the client and server have different byte orders. -.LP -OFFSET32: [ position: CARD32, -.br - length: CARD32 ] -.IP -This structure indicates a position and length within a block of -data. -.LP -PROPINFO: [ offsets: LISTofPROPOFFSET, -.br - data: LISTofBYTE ] -.IP -This structure describes the list of properties provided by a -font. Strings for all of the properties names and values are -stored within the data block and are located using a table of -offsets and lengths. -.sp -This structure is padded to 32-bit alignment. -.LP -PROPOFFSET: [ name: OFFSET32, -.br - value: OFFSET32, -.br - type: CARD8, -.br - zero-pad3: BYTE, BYTE, BYTE ] -.IP -This structure specifies the position, length, and type of -of data for a property. -.sp -The NAME field specifies the position and length (which must be -greater than zero) of the property name relative to the beginning -of the PROPINFO.DATA block for this font. The interpretation of -the position and length of the VALUE field is determined by the -TYPE field, which contains one of the following alternate values: -.RS -.DS -.TA .75i .75i .75i .75i - String 0 - Unsigned 1 - Signed 2 -.DE -.RE -.IP -which have the following meanings: -.RS -.in +5n -.IP String -.br -This property contains a counted string of bytes. The -data is stored in the PROPINFO.DATA block beginning at -relative byte VALUE.POSITION (beginning with zero), extending -for VALUE.LENGTH (at least zero) bytes. -.IP Unsigned -This property contains a unsigned, 32-bit number stored -as a CARD32 in VALUE.POSITION (VALUE.LENGTH is zero). -.IP Signed -.br -This property contains a signed, 32-bit number stored as -an INT32 in VALUE.POSITION (VALUE.LENGTH is zero). -.in -5n -.RE -.sp -This structure is zero-padded to 32-bit alignment. -.LP -RANGE: [ min-char, max-char: CHAR2B ] -.IP -This structure specifies a range of character codes. A single -character is represented by MIN-CHAR equals MAX-CHAR. If the -linear interpretation of MAX-CHAR is less than that of MIN-CHAR, -or if MIN-CHAR is less than the font's -XFONTINFO.CHAR-RANGE.MIN-CHAR, or if MAX-CHAR is greater than the -font's XFONTINFO.CHAR-RANGE.MAX-CHAR, the range is invalid. -.LP -RESOLUTION: [ x-resolution: CARD16, -.br - y-resolution: CARD16, -.br - decipoint-size: CARD16 ] -.IP -This structure specifies resolution and point size to be used in -resolving partially-specified scaled font names. The X-RESOLUTION -and Y-RESOLUTION are measured in pixels-per-inch and must be -greater than zero. The DECIPOINT-SIZE is the preferred font -size, measured in tenths of a point, and must be greater than zero. -.LP -STRING8: LISTofCARD8 -.IP -This is a counted list of 1-byte character codes, typically -encoded in ISO 8859-1. A character code ``c'' is equivalent to a -CHAR2B structure whose BYTE1 is zero and whose BYTE2 is ``c''. -.LP -TIMESTAMP: CARD32 -.IP -This is the number of milliseconds that have passed since a server- -dependent origin. It is provided in errors and events and is -permitted to wrap. -.LP -XCHARINFO: [ lbearing, rbearing: INT16, -.br - width: INT16, -.br - ascent, descent: INT16, -.br - attributes: CARD16 ] -.IP -This structure specifies the ink extents and horizontal escapement -(also known as the set- or logical width) of an individual -character. The first five values represent directed distances in -a coordinate system whose origin is aligned with the lower-left -edge of the left-most pixel of the glyph baseline (i.e. the -baseline falls between two pixels as shown in Figure 3-1 of the -``Bitmap Distribution Format 2.1'' Consortium standard [2]). -.sp -The LBEARING field specifies the directed distance measured to the -right from the origin to the left edge of the left-most inked -pixel in the glyph. -.sp -The RBEARING field specifies the directed distance (measured to -the right) from the origin to the right edge of the right-most -inked pixel in the glyph. -.sp -The WIDTH field specifies the directed distance (measured to the -right) from the origin to the position where the next character -should appear (called the ``escapement point''). This distance -includes any whitespace used for intercharacter padding and is -also referred to as the ``logical width'' or ``horizontal -escapement.'' -.sp -The ASCENT field specifies the directed distance (measured up) -from the baseline to the top edge of the top-most inked pixel -in the glyph. -.sp -The DESCENT field specifies the directed distance (measured -down) from the baseline to the bottom edge of the bottom-most -inked pixel. -.sp -The ATTRIBUTES field specifies glyph-specific information that -is passed through the application. If this value is not being -used, it should be zero. -.sp -The ink bounding box of a glyph is defined to be the smallest -rectangle that encloses all of the inked pixels. This box has -a width of RBEARING - LBEARING pixels and a height of -ASCENT + DESCENT pixels. -.LP -XFONTINFO: [ flags: CARD32, -.br - drawing-direction: { LeftToRight, RightToLeft } -.br - char-range: RANGE, -.br - default-char: CHAR2B, -.br - min-bounds: XCHARINFO, -.br - max-bounds: XCHARINFO, -.br - font-ascent: INT16, -.br - font-descent: INT16, -.br - properties: PROPINFO ] -.IP -This structure specifies attributes related to the font as a -whole. -.sp -The FLAGS field is a bit mask containing zero or more of the -following boolean values (unspecified bits must be zero): -.RS -.DS -.TA .75i .75i .75i .75i - AllCharactersExist (1 << 0) - InkInside (1 << 1) - HorizontalOverlap (1 << 2) -.DE -.RE -.IP -which have the following meanings: -.RS -.in +5n -.IP AllCharactersExist -If this bit is set, all of the characters -in the range given by CHAR-RANGE have glyphs encoded in -the font. If this bit is clear, some of the characters -may not have encoded glyphs. -.IP InkInside -If this bit is set, the inked pixels of each glyph -fall within the rectangle described by the font's ascent, -descent, origin, and the glyph's escapement point. If -this bit is clear, there may be glyphs whose ink extends -outside this rectangle. -.IP HorizontalOverlap -If this bit is set, the two ink bounding -boxes (smallest rectangle enclosing the inked pixels) of -some pairs of glyphs in the font may overlap when displayed -side-by-side (i.e. the second character is imaged at the -escapement point of the first) on a common baseline. If -this bit is clear, there are no pairs of glyphs whose ink -bounding boxes overlap. -.in -5n -.RE -.IP -The DRAWING-DIRECTION field contains a hint indicating whether -most of the character metrics have a positive (or ``LeftToRight'') -logical width or a negative (``RightToLeft'') logical width. It -contains the following alternate values: -.RS -.DS - - LeftToRight 0 - RightToLeft 1 -.DE -.RE -The CHAR-RANGE.MIN-CHAR and CHAR-RANGE.MAX-CHAR fields specify the -first and last character codes that have glyphs encoded in this font. -All fonts must have at least one encoded glyph (in which case the -MIN-CHAR and MAX-CHAR are equal), but are not required to have glyphs -encoded at all positions between the first and last characters. -.sp -The DEFAULT-CHAR field specifies the character code of the glyph -that the client should substitute for unencoded characters. Requests -for extents or bitmaps for an unencoded character generate zero-filled -metrics and a zero-length glyph bitmap, respectively. -.sp -The MIN-BOUNDS and MAX-BOUNDS fields contain the minimum and maximum -values of each of the extents field of all encoded characters in the -font (i.e. non-existent characters are ignored). -.sp -The FONT-ASCENT and FONT-DESCENT fields specify the font designer's -logical height of the font, above and below the baseline, -respectively. The sum of the two values is often used as the -vertical line spacing of the font. Individual glyphs are permitted -to have ascents and descents that are greater than these values. -.sp -The PROPERTIES field contains the property data associated with -this font. -.sp -This structure is padded to 32-bit alignment. -.NH 2 -Requests -.XS -\*(SN Requests -.XE -.LP -This section describes the requests that may be sent by the client and the -replies or errors that are generated in response. Versions of the protocol -with the same major version are required to be upward-compatible. -.LP -Every request on a given connection is implicitly assigned a sequence number, -starting with 1, that is used in replies, error, and events. Servers are -required to generate replies and errors in the order in which the corresponding -requests are received. Servers are permitted to add or remove fonts to the -list visible to the client between any two requests, but requests must be -processed atomically. Each request packet is at least 4 bytes long and -contains the following fields: -.RS -.DS - major-opcode: CARD8 - minor-opcode: CARD8 - length: CARD16 -.DE -.RE -The MAJOR-OPCODE specifies which core request or extension package this packet -represents. If the MAJOR-OPCODE corresponds to a core request, the -MINOR-OPCODE contains 8 bits of request-specific data. Otherwise, the -MINOR-OPCODE specifies which extension request this packet represents. The -LENGTH field specifies the number of 4-byte units contained within the packet -and must be at least one. If this field contains a value greater than one it -is followed by (LENGTH - 1) * 4 bytes of request-specific data. Unless -otherwise specified, unused bytes are not required to be zero. -.LP -If a request packet contains too little or too much data, the server returns -a Length error. If the server runs out of internal resources (such as -memory) while processing a request, it returns an Alloc error. If a server is -deficient (and therefore non-compliant) and is unable to process a request, it -may return an Implementation error. If a client uses an extension request -without previously having issued a -.PN QueryExtension -request for that extension, the server responds with a -.PN Request -error. If the server encounters a request -with an unknown MAJOR-OPCODE or MINOR-OPCODE, it responds with a -.PN Request -error. -At most one error is generated per request. If more than one error condition -is encountered in processing a requests, the choice of which error is returned -is server-dependent. -.LP -Core requests have MAJOR-OPCODE values between 0 and 127, inclusive. Extension -requests have MAJOR-OPCODE values between 128 and 255, inclusive, that are -assigned by by the server. All MINOR-OPCODE values in extension requests are -between 0 and 255, inclusive. -.LP -Each reply is at least 8 bytes long and contains the following fields: -.RS -.DS -.TA .75i .75i .75i .75i - - type: CARD8 value of 0 - data-or-unused: CARD8 - sequence-number: CARD16 - length: CARD32 -.DE -.RE -The TYPE field has a value of zero. The DATA-OR-UNUSED field may be used to -encode one byte of reply-specific data (see Section 5.2 on request encoding). -The least-significant 16 bits of the sequence number of the request that -generated the reply are stored in the SEQUENCE-NUMBER field. The LENGTH field -specifies the number of 4-byte units in this reply packet, including the fields -described above, and must be at least two. If LENGTH is greater than two, the -fields described above are followed by (LENGTH - 2) * 4 bytes of additional -data. -.LP -Requests that have replies are described using the following syntax: -.RS -.DS - - RequestName - \fIarg1\fP\^: type1 - \fIarg2\fP\^: type2 - ... - \fIargN\fP\^: typeN - => - \fIresult1\fP\^: type1 - \fIresult2\fP\^: type2 - ... - \fIresultM\fP\^: typeM - - Errors: \fIkind1\fR, \fIkind2\fR ..., \fIkindK\fR - - Description -.DE -.RE -If a request does not generate a reply, the``=>'' and result lines are -omitted. If a request may generate multiple replies, the ``=>'' is replaced by -a ``=>+''. In the authorization data exchanges in the initial connection setup -and the CreateAC request, ``->'' indicates data sent by the client in response -to data sent by the server. -.LP -The protocol begins with the establishment of a connection over a -mutually-understood virtual stream: -.RS -.DS - - open connection - byte-order: BYTE - client-major-protocol-version: CARD16 - client-minor-protocol-version: CARD16 - authorization-protocols: LISTofAUTH -.DE -.RE -The initial byte of the connection specifies the BYTE-ORDER in -which subsequent 16-bit and 32-bit numeric values are to be -transmitted. The octal value 102 (ASCII uppercase `B') -indicates that the most-significant byte is to be transmitted -first; the octal value 154 (ASCII lowercase `l') indicates -that the least-significant byte is to be transmitted first. -If any other value is encountered the server closes the -connection without any response. -.IP -The CLIENT-MAJOR-PROTOCOL-VERSION and -CLIENT-MINOR-PROTOCOL-VERSION specify which version of the -font service protocol the client would like to use. If the -client can support multiple versions, the highest version -should be given. This version of the protocol has a -major version of 2 and a minor version of 0. -.IP -The AUTHORIZATION-PROTOCOLS contains a list of protocol names and -optional initial data for which the client can provide -information. The server may use this to determine which -protocol to use or as part of the initial exchange of -authorization data. -.RS -.DS -=> -status: { Success, Continue, - Busy, Denied } -server-major-protocol-version: CARD16 -server-minor-protocol-version: CARD16 -alternate-servers-hint: LISTofALTERNATESERVER -authorization-index: CARD8 -authorization-data: LISTofBYTE -.DE -.RE -The SERVER-MAJOR-PROTOCOL-VERSION and -SERVER-MINOR-PROTOCOL-VERSION specify the version of the font -service protocol that the server expects from the client. If -the server supports the version specified by the client, this -version number should be returned. If the client has -requested a higher version than is supported by the server, -the server's highest version should be returned. Otherwise, -if the client has requested a lower version than is supported -by the server, the server's lowest version should be returned. -It is the client's responsibility to decide whether or not it -can match this version of the protocol. -.IP -The ALTERNATE-SERVERS-HINT is a list of other font servers -that may have related sets of fonts (determined by means -outside this protocol, typically by the system administrator). -Clients may choose to contact these font servers if the -connection is rejected or lost. -.IP -The STATUS field indicates whether the server accepted, -rejected, or would like more information about the connection. -It has one of the following alternate values: -.RS -.DS - - Success 0 - Continue 1 - Busy 2 - Denied 3 -.DE -.RE -If STATUS is Denied, the server has rejected the client's -authorization information. If STATUS is Busy, the server has -simply decided that it cannot provide fonts to this client at -this time (it may be able to at a later time). In both cases, -AUTHORIZATION-INDEX is set to zero, no authorization-data is -returned, and the server closes the connection after sending -the data described so far. -.IP -Otherwise the AUTHORIZATION-INDEX is set to the index -(beginning with 1) into the AUTHORIZATION-PROTOCOLS list of -the protocol that the server will use for this connection. If -the server does not want to use any of the given protocols, -this value is set to zero. The AUTHORIZATION-DATA field is -used to send back authorization protocol-dependent data to the -client (such as a challenge, authentication of the server, -etc.). -.LP -If STATUS is Success, the following section of protocol is -omitted. Otherwise, if STATUS is Continue, the server expects -more authorization data from the client (i.e. the connection -setup is not finished, so no requests or events may be sent): -.RS -.DS --> -more-authorization-data: STRING8 -=> -status: { Success, Continue, - Busy, Denied } -more-authorization-data: LISTofBYTE -.DE -.RE -The values in STATUS have the same meanings as described -above. This section of protocol is repeated until the server -either accepts (sets STATUS to Success) or rejects (sets -STATUS to Denied or Busy) the connection. -.LP -Once the connection has been accepted and STATUS is Success, -an implicit AccessContext is created for the authorization -data and the protocol continues with the following data sent -from the server: -.RS -.DS -=> -remaining-length: CARD32 -maximum-request-length: CARD16 -release-number: CARD32 -vendor: STRING8 -.DE -.RE -The REMAINING-LENGTH specifies the length in 4-byte units of -the remaining data to be transmitted to the client. The -MAXIMUM-REQUEST-LENGTH specifies the largest request size in -4-byte units that is accepted by the server and must have a -value of at least 4096. Requests with a length field larger -than this value are ignored and a Length error is returned. -The VENDOR string specifies the name of the manufacturer of -the font server. The RELEASE-NUMBER specifies the particular -release of the server in a manufacturer-dependent manner. -.LP -After the connection is established and the setup information has been -exchanged, the client may issue any of requests described below: -.LP -.IN "NoOp" "" "@DEF@" -.PN NoOp -.IP -Errors: Alloc -.IP -This request does nothing. It is typically used in response -to a -.PN KeepAlive -event. -.LP -.IN "ListExtensions" "" "@DEF@" -.PN ListExtensions -.LP - => -.IP -\fInames\fP\^: LISTofSTRING8 -.IP -Errors: Alloc -.IP -This request returns the names of the extension packages -that are supported by the server. Extension names are -case-sensitive and are encoded in ISO 8859-1. -.LP -.IN "QueryExtension" "" "@DEF@" -.PN QueryExtension -.IP -\fIname\fP\^: STRING8 -.LP - => -.IP -\fIpresent\fP\^: BOOL -.br -\fImajor-version\fP\^: CARD16 -.br -\fIminor-version\fP\^: CARD16 -.br -\fImajor-opcode\fP\^: CARD8 -.br -\fIfirst-event\fP\^: CARD8 -.br -\fInumber-events\fP\^: CARD8 -.br -\fIfirst-error\fP\^: CARD8 -.br -\fInumber-errors\fP\^: CARD8 -.IP -Errors: -.PN Alloc -.IP -This request determines whether or not the extension package -specified by NAME (encoded in ISO 8859-1) is supported by the -server and that there is sufficient number of major opcode, -event, and error codes available. If so, then PRESENT is set -to True, MAJOR-VERSION and MINOR-VERSION are set to the -respective major and minor version numbers of the protocol -that the server would prefer; MAJOR-OPCODE is set to the value -to use in extension requests; FIRST-EVENT is set to the value -of the first extension-specific event code or zero if the -extension does not have any events; NUMBER-EVENTS is set to -the number of new events that the event defines; FIRST-ERROR -is set to the value of the first extension-specific error code -or zero if the extension does not define any new errors; and -NUMBER-ERRORS is set to the number of new errors the extension -defines. -.sp -Otherwise, PRESENT is set to False and the remaining fields are -set to zero. -.sp -The server is free to return different values to different -clients. Therefore, clients must use this request before -issuing any of the requests in the named extension package or -using the -.PN SetEventMask request to express interest in any of -this extension's events. Otherwise, a -.PN Request -error is returned. -.LP -.IN "ListCatalogues" "" "@DEF@" -.PN ListCatalogues -.IP -\fIpattern\fP\^: STRING8 -\fImax-names\fP\^: CARD32 -.LP - =>+ -.IP -\fIreplies-following-hint\fP\^: CARD32 -.br -\fInames\fP\^: LISTofSTRING8 -.IP -Errors: -.PN Alloc -.IP -This request returns a list of at most MAX-NAMES names -of collections (called catalogues) of fonts that match -the specified PATTERN. In the pattern (which is encoded -in ISO 8859-1), the `?' character (octal 77) matches any -single character; the `*' character (octal 52) matches -any series of zero or more characters; and alphabetic -characters match either upper- or lowercase. The -returned NAMES are encoded in ISO 8859-1 and may contain -mixed character cases. -.sp -If PATTERN is of zero length or MAX-NAMES is equal to zero, -one reply containing a zero-length list of names is returned. -This may be used to synchronize the client with the server. -.sp -Servers are free to add or remove catalogues to the set returned by -.PN ListCatalogues -between any two requests. This request is not -cumulative; repeated uses are processed in isolation and do -result in an iteration through the list. -.sp -To reduce the amount of buffering needed by the server, the -list of names may be split across several reply packets, so -long as the names arrive in the same order that they would -have appeared had they been in a single packet. The -REPLIES-FOLLOWING-HINT field in all but the last reply -contains a positive value that specifies the number of -replies that are likely, but not required, to follow. In the -last reply, which may contain zero or more names, this field -is set to zero. -.LP -.IN "SetCatalogues" "" "@DEF@" -.PN SetCatalogues -.IP -\fInames\fP\^: LISTofSTRING8 -.IP -Errors: -.PN Alloc , -.PN Name -.IP -This request sets the list of catalogues whose fonts should be -visible to the client. The union of the fonts provided by -each of the named catalogues forms the set of fonts whose -names match patterns in -.PN ListFonts , -.PN ListFontsWithXInfo , -and -.PN OpenBitmapFont -requests. The catalogue names are -case-insensitive and are encoded in ISO 8859-1. A zero-length -list resets the client's catalogue list to the -server-dependent default. -.sp -If any of the catalogue names are invalid, a -.PN Name -error is returned and the request is ignored. -.LP -.IN "GetCatalogues" "" "@DEF@" -.PN GetCatalogues -.LP - => -.IP -\fInames\fP\^: LISTofSTRING8 -.IP -Errors: -.PN Alloc -.IP -This request returns the current list of catalogue names -(encoded in ISO 8859-1) associated with the client. These -catalogues determine the set of fonts that are visible -to -.PN ListFonts , -.PN ListFontsWithXInfo , -and -.PN OpenBitmapFont . -A zero-length list indicates the server's default set of -fonts. Catalogue names are case-insensitive and may be -returned in mixed case. -.LP -.IN "SetEventMask" "" "@DEF@" -.PN SetEventMask -.IP -\fIextension-opcode\fP\^: CARD8 -.br -\fIevent-mask\fP\^: EVENTMASK -.IP -Errors: -.PN EventMask , -.PN Request -.IP -This request specifies the set of maskable events that the -extension indicated by EXTENSION-OPCODE (or zero for the core) -should generate for the client. Event masks are limited in -scope to the extension (or core) for which they are defined, -so expressing interest in events from one or more extensions -requires multiple uses of this request. -.sp -The default event mask if -.PN SetEventMask -has not been called -is zero, indicating no interest in any maskable events. -Some events are not maskable and cannot be blocked. -.sp -If EXTENSION-OPCODE is not a valid extension opcode previously -returned by -.PN QueryExtension -or zero, a -.PN Request -error is -returned. If EVENT-MASK contains any bits that do not -correspond to valid events for the specified extension (or -core), an -.PN EventMask -error is returned and the request is -ignored. -.LP -.IN "GetEventMask" "" "@DEF@" -.PN GetEventMask -.IP -\fIextension-opcode\fP\^: CARD8 -.LP - => -.IP -\fIevent-mask\fP\^: EVENTMASK -.IP -Errors: -.PN Request -.IP -This request returns the set of maskable core events the -extension indicated by EXTENSION-OPCODE (or the core if zero) -should generate for the client. Non-maskable events are -always sent to the client. - -If EXTENSION-OPCODE is not a valid extension opcode -previously returned by -.PN QueryExtension -or zero, a -.PN Request -error is returned. -.LP -.IN "CreateAC" "" "@DEF@" -.PN CreateAC -.IP -\fIac\fP\^: ACCESSCONTEXT -.br -\fIauthorization-protocols\fP\^: LISTofAUTH -.LP - => -.IP -\fIstatus\fP\^: { Success, Continue, Denied } -.br -\fIauthorization-index\fP\^: CARD8 -.br -\fIauthorization-data\fP\^: LISTofBYTE -.IP -Errors: -.PN IDChoice -.IP -This request creates a new -.PN AccessContext -object within the -server containing the specified authorization data. When -this -.PN AccessContext -is selected by the client using the -.PN SetAuthorization -request, the data may be used by the server -to determine whether or not the client should be granted -access to particular font information. -.sp -If STATUS is Denied, the server rejects the client's -authorization information and does not associate AC with any -valid -.PN AccessContext . -In this case, AUTHORIZATION-INDEX is set -to zero, and zero bytes of AUTHORIZATION-DATA is returned. -.sp -Otherwise, AUTHORIZATION-INDEX is set to the index (beginning -with 1) into the AUTHORIZATION-PROTOCOLS list of the protocol -that the server will use for this connection. If the server -does not want to use any of the given protocols, this value is -set to zero. The AUTHORIZATION-DATA field is used to send -back authorization protocol-dependent data to the client (such -as a challenge, authentication of the server, etc.). -.sp -If STATUS is Continue, the client is expected to continue -the request by sending the following protocol and receiving -the indicated response from the server. This continues -until STATUS is set to either Success or Denied. -.RS -.DS - \-> - more-authorization-data: STRING8 - => - status: { Success, Continue, Denied } - more-authorization-data: LISTofBYTE -.DE -.RE -Once the connection has been accepted and STATUS is Success, -the request is complete. -.sp -If AC is not in the range [1..2^29-1] or is already associated -with an access context, an IDChoice error is returned. -.LP -.IN "FreeAC" "" "@DEF@" -.PN FreeAC -.IP -\fIac\fP\^: ACCESSCONTEXT -.IP -Errors: -.PN AccessContext , -.PN Alloc -.IP -This request indicates that the specified AC should no longer -be associated with a valid access context. If AC is also the -current -.PN AccessContext -(as set by the -.PN SetAuthorization -request), an implicit -.PN SetAuthorization -of None is done to -restore the -.PN AccessContext -established for the initial -connection setup. Operations on fonts that were opened under -AC are not affected. The client may reuse the value of AC in -a subsequent -.PN CreateAC -request. -.sp -If AC isn't associated with any valid authorization previously -created by -.PN CreateAC , an -.PN AccessContext -error is returned. -.LP -.IN "SetAuthorization" "" "@DEF@" -.PN SetAuthorization -.IP -\fIac\fP\^: ACCESSCONTEXT -.IP -Errors: -.PN AccessContext -.IP -This request sets the -.PN AccessContext -to be used for subsequent -requests (except for -.PN QueryXInfo , -.PN QueryXExtents8 , -.PN QueryXExtents16 , -.PN QueryXBitmaps8 , -.PN QueryXBitmaps16 , -and -.PN CloseFont -which are done under the -.PN AccessContext -of the -corresponding -.PN OpenBitmapFont ")." -An AC of None restores the -.PN AccessContext -established for the initial connection setup. -.sp -If AC is neither None nor a value associated with a valid -.PN AccessContext -previously created by -.PN CreateAC , -an -.PN AccessContext -error is returned. -.LP -.IN "SetResolution" "" "@DEF@" -.PN SetResolution -.IP -\fIresolutions\fP\^: LISTofRESOLUTION -.IP -Errors: -.PN Resolution , -.PN Alloc -.IP -This request provides a hint as to the resolution and -preferred point size of the drawing surfaces for which the -client will be requesting fonts. The server may use this -information to set the RESOLUTION_X and RESOLUTION_Y fields -of scalable XLFD font names, to order sets of names based on -their resolutions, and to choose the server-dependent -instance that is used when a partially-specified scalable -fontname is opened. -.sp -If a zero-length list of RESOLUTIONS is given, the -server-dependent default value is restored. Otherwise, if -elements of all of the specified RESOLUTIONS are non-zero, the -default resolutions for this client are changed. -.sp -If a RESOLUTION entry contains a zero, a Resolution error is -returned and the default resolutions are not changed. -.LP -.IN "GetResolution" "" "@DEF@" -.PN GetResolution -.LP - => -.IP -\fIresolutions\fP\^: LISTofRESOLUTION -.IP -Errors: -.PN Alloc -.IP -This request returns the current list of default resolutions. -If a client has not performed a -.PN SetResolution , -a server-dependent default value is returned. -.LP -.IN "ListFonts" "" "@DEF@" -.PN ListFonts -.IP -\fIpattern\fP\^: STRING8 -\fImax-names\fP\^: CARD32 -.LP - =>+ -.IP -\fIreplies-following-hint\fP\^: CARD32 -.br -\fInames\fP\^: LISTofSTRING8 -.IP -Errors: -.PN Alloc -.IP -This request returns a list of at most MAX-NAMES font names -that match the specified PATTERN, according to matching rules -of the X Logical Font Description Conventions [3]. In the -pattern (which is encoded in ISO 8859-1) the `?' character -(octal 77) matches any single character; the `*' character -(octal 52) matches any series of zero or more characters; and -alphabetic characters match either upper- or lowercase. The -returned NAMES are encoded in ISO 8859-1 and may contain mixed -character cases. Font names are not required to be in XLFD -format. -.sp -If PATTERN is of zero length or MAX-NAMES is equal to zero, -one reply containing a zero-length list of names is returned. -This may be used to synchronize the client with the server. -.sp -Servers are free to add or remove fonts to the set returned by -.PN ListFonts -between any two requests. This request is not -cumulative; repeated uses are processed in isolation and do -result in an iteration through the list. -.sp -To reduce the amount of buffering needed by the server, the -list of names may be split across several reply packets, so -long as the names arrive in the same order that they would -have appeared had they been in a single packet. The -REPLIES-FOLLOWING-HINT field in all but the last reply -contains a positive value that specifies the number of -replies that are likely, but not required, to follow. In the -last reply, which may contain zero or more names, this field -is set to zero. -.LP -.IN "ListFontsWithXInfo" "" "@DEF@" -.PN ListFontsWithXInfo -.IP -\fIpattern\fP\^: STRING8 -.br -\fImax-names\fP\^: CARD32 -.LP - =>+ -.IP -\fIreplies-following-hint\fP\^: CARD32 -.br -\fIinfo\fP\^: XFONTINFO -.br -\fIname\fP\^: STRING8 -.IP -Errors: -.PN Alloc -.IP -This request is similar to -.PN ListFonts -except that a separate -reply containing the name, header, and property data is -generated for each matching font name. Following these -replies, if any, a final reply containing a zero-length NAME -and no INFO is sent. -.sp -The REPLIES-FOLLOWING-HINT field in all but the last reply -contains a positive value that specifies the number of replies -that are likely, but not required, to follow. In the last -reply, this field is set to zero. -.sp -If PATTERN is of zero length or if MAX-NAMES is equal to -zero, only the final reply containing a zero-length NAME and -no INFO is returned. This may be used to synchronize the -client with the server. -.LP -.IN "OpenBitmapFont" "" "@DEF@" -.PN OpenBitmapFont -.IP -\fIfontid\fP\^: FONTID -.br -\fIpattern\fP\^: STRING8 -.br -\fIformat-mask\fP\^: BITMAPFORMATMASK -.br -\fIformat-hint\fP\^: BITMAPFORMAT -.LP - => -.IP -\fIotherid\fP\^: FONTID or None -.br -\fIotherid-valid\fP\^: BOOL -.br -\fIcachable\fP\^: BOOL -.IP -Errors: -.PN IDChoice , -.PN Name , -.PN Format , -.PN AccessContext , -.PN Alloc -.IP -This request looks for a server-dependent choice of the -font names that match the specified PATTERN according to the -rules described for -.PN ListFonts . -If no matches are found, a -.PN Name -error is returned. Otherwise, the server attempts to -open the font associated with the chosen name. -.sp -Permission to access the font is determined by the server -according the licensing policy used for this font. The server -may use the client's current -.PN AccessContext -(as set by the most -recent -.PN SetAuthorization -request or the original connection -setup) to determine any client-specific sets of permissions. -After the font has been opened, the client is allowed to -specify a new -.PN AccessContext -with -.PN SetAuthorization -or release -the -.PN AccessContext -using -.PN FreeAC . Subsequent -.PN QueryXInfo , -.PN QueryXExtents8 , -.PN QueryXExtents16 , -.PN QueryXBitmaps8 , -.PN QueryXBitmaps16 , and -.PN CloseFont -requests on this FONTID are -performed according to permissions granted at the time of the -.PN OpenBitmapFont -request. -.sp -If the server is willing and able to detect that the client -has already opened the font successfully (possibly under a -different name), the OTHERID field may be set to one of the -identifiers previously used to open the font. The -OTHERID-VALID field indicates whether or not OTHERID is -still associated with an open font: if it is True, the -client may use OTHERID as an alternative to FONTID. -Otherwise, if OTHERID-VALID is False, OTHERID is no longer -open but has not been reused by a subsequent -.PN OpenBitmapFont -request. -.sp -If OTHERID is set to None, then OTHERID-VALID should be set -to False. -.sp -The FORMAT-MASK indicates which fields in FORMAT-HINT -the client is likely to use in subsequent -.PN GetXBitmaps8 -and -.PN GetXBitmaps16 -requests. Servers may wish to use -this information to precompute certain values. -.sp -If CACHABLE is set to True, the client may cache the font -(so that redundant opens of the same font may be avoided) -and use it with all -.PN AccessContexts -during the life of the -client without violating the font's licensing policy. This -flag is typically set whenever a font is unlicensed or is -licensed on a per-display basis. If CACHABLE is False, the -client should reopen the font for each -.PN AccessContext . -.sp -The server is permitted to add to or remove from the set of -fonts returned by -.PN ListFonts -between any two requests, though -mechanisms outside the protocol. Therefore, it is possible -for this request (which is atomic) to return a different font -than would result from separate a -.PN ListFonts -followed by an -.PN OpenBitmapFont -with a non-wildcarded font name. -.sp -If FONTID is not in the range [1..2^29-1] or if it is already -associated with an open font, an -.PN IDChoice -error is returned. -If no font is available that matches the specified PATTERN, a -.PN Name -error is returned. If the font is present but the client -is not permitted access, an -.PN AccessContext -error is returned. -If FORMAT-MASK has any unspecified bits set or if any of the -fields in FORMAT-HINT indicated by FORMAT-MASK are invalid, a -.PN Format -error is returned. -.LP -.IN "QueryXInfo" "" "@DEF@" -.PN QueryXInfo -.IP -\fIfontid\fP\^: FONTID -.LP - => -.IP -\fIinfo\fP\^: XFONTINFO -.IP -Errors: -.PN Font , -.PN Alloc -.IP -This request returns the font header and property information -for the open font associated with FONTID. -.sp -If FONTID is not associated with any open fonts, a -.PN Font -error -is returned. -.LP -.IN "QueryXExtents8" "" "@DEF@" -.PN QueryXExtents8 -.IP -\fIfontid\fP\^: FONTID -.br -\fIrange\fP\^: BOOL -.br -\fIchars\fP\^: STRING8 -.LP - => -.IP -\fIextents\fP\^: LISTofXCHARINFO -.IP -Errors: -.PN Font , -.PN Range , -.PN Alloc -.IP -This request is equivalent to -.PN QueryXExtents16 -except that it -uses 1-byte character codes. -.LP -.IN "QueryXExtents16" "" "@DEF@" -.PN QueryXExtents16 -.IP -\fIfontid\fP\^: FONTID -.br -\fIrange\fP\^: BOOL -.br -\fIchars\fP\^: LISTofCHAR2B -.LP - => -.IP -\fIextents\fP\^: LISTofXCHARINFO -.IP -Errors: -.PN Font , -.PN Range , -.PN Alloc -.IP -This request returns a list of glyph extents from the open -font associated with FONTID for the series of characters -specified by RANGE and CHARS. -.sp -If RANGE is True, each succeeding pair of elements in CHARS is -treated as a range of characters for which extents should be -returned. If CHARS contains an odd number of elements, the -font's XFONTINFO.CHAR-RANGE.MAX-CHAR is implicitly appended to -the list. If CHARS contains no elements, the list is -implicitly replaced with the font's XFONTINFO.CHAR-RANGE. If -any of the resulting character ranges are invalid, a Range -error is returned. Otherwise, the character ranges are -concatenated in the order given by CHARS to produce a set of -character codes for which extents are returned. -.sp -If RANGE is False, then CHARS specifies the set of character -codes for which extents are returned. If CHARS is of -zero length, then a zero-length list of extents is returned. -.sp -The extents for each character code in the resulting set (which -may contain duplicates) are returned in the order in -which the character codes appear in the set. -At least one metric for each character shall be non-zero -unless the character is not encoded in the font, in which case -all-zero metrics are returned. -A blank, zero-width character can be encoded -with non-zero but equal left and right bearings. -.sp -If FONTID is not associated with any open fonts, a -.PN Font -error is -returned. If RANGE is True and CHARS contains any invalid -ranges, a -.PN Range -error is returned. -.LP -.IN "QueryXBitmaps8" "" "@DEF@" -.PN QueryXBitmaps8 -.IP -\fIfontid\fP\^: FONTID -.br -\fIrange\fP\^: BOOL -.br -\fIchars\fP\^: STRING8 -.br -\fIformat\fP\^: BITMAPFORMAT -.LP - =>+ -.IP -\fIreplies-following-hint\fP\^: CARD32 -.br -\fIoffsets\fP\^: LISTofOFFSET32 -.br -\fIbitmaps\fP\^: LISTofBYTE -.IP -Errors: -.PN Font , -.PN Range , -.PN Format , -.PN Alloc -.IP -This request is equivalent to -.PN QueryXBitmaps16 -except that it -uses 1-byte character codes. -.LP -.IN "QueryXBitmaps16" "" "@DEF@" -.PN QueryXBitmaps16 -.IP -\fIfontid\fP\^: FONTID -.br -\fIrange\fP\^: BOOL -.br -\fIchars\fP\^: LISTofCHAR2B -.br -\fIformat\fP\^: BITMAPFORMAT -.LP - =>+ -.IP -\fIreplies-following-hint\fP\^: CARD32 -.br -\fIoffsets\fP\^: LISTofOFFSET32 -.br -\fIbitmaps\fP\^: LISTofBYTE -.IP -Errors: -.PN Font , -.PN Range , -.PN Format , -.PN Alloc -.IP -This request returns a list of glyph bitmaps from the open -font associated with FONTID for the series of characters -specified by RANGE and CHARS. -.sp -If RANGE is True, each succeeding pair of elements in CHARS is -treated as a range of characters for which bitmaps should be -returned. If CHARS contains an odd number of elements, the -font's XFONTINFO.CHAR-RANGE.MAX-CHAR is implicitly appended to -the list. If CHARS contains no elements, the list is -implicitly replaced with the font's XFONTINFO.CHAR-RANGE. If -any of the resulting character ranges are invalid, a Range -error is returned. Otherwise, the character ranges are -concatenated in the order given by CHARS to produce a set of -character codes for which bitmaps are returned. -.sp -If RANGE is False, then CHARS specifies the set of character -codes for which bitmaps are returned. If CHARS is of zero -length, then a single reply containing a zero-length list of -offsets and bitmaps is returned. -.sp -If any of the resulting character ranges are invalid, a Range -error is returned. Otherwise, the resulting character ranges -are concatenated in the order given by CHARS to produce a set -of character codes for which bitmaps are returned. -.sp -The server is free to return the glyph bitmaps in multiple -replies to reduce the amount of buffering that is necessary. -In this situation, the set of characters obtained above is -partitioned into an implementation-dependent number of -ordered, non-overlapping subsets containing runs of one or -more consecutive characters. The global ordering of -characters must be maintained such that concatenating the -subsets in order that they were produced yields the original -set. A reply is generated for each subset, in the order that -it was produced. -.sp -For each character in a subset, an image of that character's -glyph is described by a rectangle of bits corresponding to the -pixels specified by FORMAT.IMAGE-RECT. Within the image, set -and clear bits represent inked and non-inked pixels, -respectively. -.sp -Each scanline of a glyph image, from top to bottom, is zero-padded -on the right to a multiple of the number of bits specified by -FORMAT.SCANLINE-PAD. The scanline is then divided from left -to right into a sequence of FORMAT.SCANLINE-UNIT bits. The -bits of each unit are then arranged such that the left-most -pixel is stored in the most- or least-significant bit, -according to FORMAT.BIT-ORDER-MSB. The bytes of each unit are -then arranged such that the most- or least-significant byte, -according to FORMAT.BYTE-ORDER-MSB, is transmitted first. -Finally, the units are arranged such that the left-most is -transmitted first and the right-most is transmitted last. -.sp -The individual images within a subset are then concatenated in -a server-dependent order to form the BITMAPS data of the -reply. If a glyph image is duplicated within a reply, the -server is free to return fewer (but at least one) copies of -the image. If a character is not encoded within the font, a -zero-length bitmap is substituted for this character. Each -glyph image must begin at a bit position that is a multiple of -the FORMAT.SCANLINE-UNIT. -.sp -The OFFSETS array in a reply contains one entry for each -character in the subset being returned, in the order that the -characters appear in the subset. Each entry specifies the -starting location in bytes and size in bytes of the -corresponding glyph image in the BITMAPS data of that reply -(i.e. an offset may not refer to data in another reply). -.sp -The REPLIES-FOLLOWING-HINT field in all but the last reply -contains a positive value that specifies the number of replies -that are likely, but not required, to follow. In the last -reply, which may contain data for zero or more characters, -this field is set to zero. -.sp -If FONTID is not associated with any open fonts, a Font error -is returned. If RANGE is True and CHARS contains any invalid -ranges, a Range error is returned. If FORMAT is invalid, a -Format error is returned. -.LP -.IN "CloseFont" "" "@DEF@" -.PN CloseFont -.IP -\fIfontid\fP\^: FONTID -.IP -Errors: -.PN Font , -.PN Alloc -.IP -This request indicates that the specified FONTID should no -longer be associated with an open font. The server is free to -release any client-specific storage or licenses allocated for -the font. The client may reuse the value of FONTID in a -subsequent -.PN OpenBitmapFont -request. -.sp -If FONTID is not associated with any open fonts, a -.PN Font -error is returned. -.LP -.PN "close connection" -.IN "close connection" "" "@DEF@" -.IP -When a connection is closed, a -.PN CloseFont -is done on all fonts -that are open on the connection. In addition, the server is -free to release any storage or licenses allocated on behalf of -the client that made the connection. -.NH 2 -Errors -.XS -\*(SN Errors -.XE -.LP -All errors are at least 16 bytes long and contain the following fields: -.TA .75i -.ta .75i -.IP -\fItype\fP\^: CARD8 value of 1 -.br -\fIerror-code\fP\^: CARD8 -.br -\fIsequence-number\fP\^: CARD16 -.br -\fIlength\fP\^: CARD32 -.br -\fItimestamp\fP\^: TIMESTAMP -.br -\fImajor-opcode\fP\^: CARD8 -.br -\fIminor-opcode\fP\^: CARD8 -.br -\fIdata-or-unused\fP\^: CARD16 -.LP -The TYPE field has a value of one. The ERROR-CODE field specifies which error -occurred. Core errors codes are in the range 0 through 127, extension error -codes are in the range 128 through 255. The SEQUENCE-NUMBER field contains the -least significant 16 bits of the sequence number of the request that caused the -error. The LENGTH field specifies the length of the error packet in 4-byte -units and must have a value of at least 4. The TIMESTAMP specifies the server -time when the error occurred. The MAJOR-OPCODE and MINOR-OPCODE (zero for core -requests) fields specify the type of request that generated the error. The -DATA-OR-UNUSED field may be used for 16 bits of error-specific information. If -LENGTH is greater than four, these fields are followed by (LENGTH - 4) * 4 -bytes of extra data. -.LP -The following errors are defined for the core protocol: -.LP -.IN "Error Codes" "Request" "@DEF@" -.PN Request -.IP -.TA .75i .75i .75i .75i -\fIdata-or-unused\fP\^: CARD16 unused -.IP -This error is generated by any request that has an unknown -combination of major and minor request numbers, or by any -extension request that is issued before a -.PN QueryExtension -of that extension. -.LP -.IN "Error Codes" "Format" "@DEF@" -.PN Format -.IP -.TA .75i .75i .75i .75i -\fIdata-or-unused\fP\^: CARD16 unused -.br -\fIformat\fP\^: BITMAPFORMAT bad format value -.IP -This error is generated by the use of an invalid BITMAPFORMAT -in the -.PN OpenBitmapFont , -.PN QueryXBitmaps8 , -and -.PN QueryXBitmaps16 -requests. -The value that caused the error is included as extra data. -.LP -.IN "Error Codes" "Font" "@DEF@" -.PN Font -.IP -.TA .75i .75i .75i .75i -\fIdata-or-unused\fP\^: CARD16 unused -.br -\fIfontid\fP\^: FONTID bad font identifier -.IP -This error is generated by an invalid FONTID in the -.PN QueryXInfo , -.PN QueryXExtents8 , -.PN QueryXExtents16 , -.PN QueryXBitmaps8 , -.PN QueryXBitmaps16 , -and -.PN CloseFont -requests. The value that caused -the error is included as extra data. -.LP -.IN "Error Codes" "Range" "@DEF@" -.PN Range -.IP -.TA .75i .75i .75i .75i -\fIdata-or-unused\fP\^: CARD16 unused -.br -\fIrange\fP\^: RANGE bad range -.IP -This error is generated by an invalid RANGE in the -.PN QueryXExtents8 , -.PN QueryXExtents16 , -.PN QueryXBitmaps8 , and -.PN QueryXBitmaps16 -requests. The -value that caused the error is included as extra data. -.LP -.IN "Error Codes" "EventMask" "@DEF@" -.PN EventMask -.IP -.TA .75i .75i .75i .75i -\fIdata-or-unused\fP\^: CARD16 unused -.br -\fIevent-mask\fP\^: EVENTMASK bad event mask -.IP -This error is generated by an invalid EVENTMASK in the -.PN SetEventMask -request. The value that caused the error is -included as extra data. -.LP -.IN "Error Codes" "AccessContext" "@DEF@" -.PN AccessContext -.IP -.TA .75i .75i .75i .75i -\fIdata-or-unused\fP\^: CARD16 unused -.br -\fIac\fP\^: ACCESSCONTEXT unaccepted -.PN AccessContext -.IP -This error is generated by an invalid ACCESSCONTEXT in the -.PN FreeAC -or -.PN SetAuthorization -request or by an -.PN OpenBitmapFont -request performed without sufficient authorization. In the -first two cases, the ACCESSCONTEXT of the errant request is -returned as extra data. In the third case, the current -ACCESSCONTEXT is returned as extra data. -.LP -.IN "Error Codes" "IDChoice" "@DEF@" -.PN IDChoice -.IP -.TA .75i .75i .75i .75i -\fIdata-or-unused\fP\^: CARD16 unused -.br -\fIid\fP\^: ID bad identifier -.IP -This error is generated by an invalid or already associated -ACCESSCONTEXT identifier in a -.PN CreateAC -request or FONTID identifier -in an -.PN OpenBitmapFont -request. The value that caused the error -is included as extra data. -.LP -.IN "Error Codes" "Name" "@DEF@" -.PN Name -.IP -.TA .75i .75i .75i .75i -\fIdata-or-unused\fP\^: CARD16 unused -.IP -This error is generated by a font name pattern that matches -no fonts in an -.PN OpenBitmapFont -request or no catalogue names in a -.PN SetCatalogues -request. -.LP -.IN "Error Codes" "Resolution" "@DEF@" -.PN Resolution -.IP -.TA .75i .75i .75i .75i -\fIdata-or-unused\fP\^: CARD16 X value of errant resolution -.br -\fIy-resolution\fP\^: CARD16 Y value of errant resolution -.br -\fIpoint-size\fP\^: CARD16 point size of errant resolution -.IP -This error is generated in response to an invalid RESOLUTION -structure in a -.PN SetResolution -request. The value that caused the -error is included in the DATA-OR-UNUSED field and as extra data. -.LP -.IN "Error Codes" "Alloc" "@DEF@" -.PN Alloc -.IP -.TA .75i .75i .75i .75i -\fIdata-or-unused\fP\^: CARD16 unused -.IP -This error is generated by any request for which the server -lacks sufficient resources (especially memory). -.LP -.IN "Error Codes" "Length" "@DEF@" -.PN Length -.IP -.TA .75i .75i .75i .75i -\fIdata-or-unused\fP\^: CARD16 unused -.br -\fIlength\fP\^: CARD32 bad length value -.IP -This error is generated by any request that has a length field -greater than (MAXIMUM-REQUEST-LENGTH * 4) bytes. The value that -caused the error is included as extra data. -.LP -.IN "Error Codes" "Implementation" "@DEF@" -.PN Implementation -.IP -.TA .75i .75i .75i .75i -\fIdata-or-unused\fP\^: CARD16 unused -.IP -This error may be generated in response to any request that -the server is unable to process because it is deficient. Use -of this error is highly discouraged and indicates lack of -conformance to the protocol. -.sp -Additional errors may be defined by extensions. -.NH 2 -Events -.XS -\*(SN Events -.XE -.LP -Events may be generated in response to requests or at the server's discretion -after the initial connection setup information has been exchanged. Each event -is at least 12 bytes long and contains the following fields: -.IP -.TA .75i .75i .75i .75i -\fItype\fP\^: CARD8 value of 2 -.br -\fIevent-code\fP\^: CARD8 -.br -\fIsequence-number\fP\^: CARD16 -.br -\fIlength\fP\^: CARD32 -.br -\fItimestamp\fP\^: TIMESTAMP -.LP -The TYPE field contains the value 2. The EVENT-CODE field specifies the number -of the event and is in the range 0-127 for core events or the range 128-255 for -extensions. The SEQUENCE-NUMBER field specifies the least significant 16 bits -of the sequence number of the last request to have been processed by the -server. The LENGTH field specifies the number of 4-byte units in this event -packet and must always have a value of at least 3. The TIMESTAMP field -specifies the server time when the event occurred. If LENGTH is greater than -three, these fields are followed by (LENGTH - 3) * 4 bytes of additional data. -.LP -Events are described using the following syntax: -.LP -.RS -.DS -.TA .75i -.ta .75i -.PN EventName - \fIarg1\fP\^: type1 - ... - \fIargN\fP\^: typeN - - Description -.DE -.RE -If an event does not provide any extra arguments, the \fIarg1\fP...\fIargN\fP -lines are omitted from the description. -.LP -The core X Font Service protocol defines the following events: -.LP -.IN "KeepAlive" "" "@DEF@" -.PN KeepAlive -.IP -This unsolicited, nonmaskable event may be sent by the -server to verify that the connection has not been broken -(for transports that do not provide this information). -Clients should acknowledge receipt of this request -by sending any request (such as -.PN NoOp ")." -.LP -.IN "CatalogueListNotify" "" "@DEF@" -.PN CatalogueListNotify -.IP -\fIadded\fP\^: BOOL -.br -\fIdeleted\fP\^: BOOL -.IP -This event is sent to clients that have included -.PN CatalogueListChangeMask -in their core event mask -whenever the list of catalogues that are available has -changed. The ADDED field is True if new catalogues have -been added to the server, otherwise it is False. The -DELETED field is True if any existing catalogues have -been removed from the server, otherwise it is False. -.LP -.IN "FontListNotify" "" "@DEF@" -.PN FontListNotify -.IP -\fIadded\fP\^: BOOL -.br -\fIdeleted\fP\^: BOOL -.IP -This event is sent to clients that have included -.PN FontListChangeMask -in their event mask whenever the -list of fonts that are provided by the currently selected -catalogues has changed. The ADDED field is True if new -fonts have been added to any of the catalogues currently -used by the client, otherwise it is False. The DELETED -field is True if any existing fonts have been removed -from any of catalogues used by the client, otherwise it -is False. -.sp -Additional events may be defined by extensions. -.NH 1 -Protocol Encoding -.XS -\*(SN Protocol Encoding -.XE -.LP -Numbers that are prefixed with ``#x'' are in hexadecimal (base 16). All other -numbers are in decimal. Requests, replies, errors, events, and compound types -are described using the syntax: -.RS -.DS -.TA .75i .75i .75i .75i - - Name - \fIcount\fP \fIcontents\fP \fIname\fP - ... - \fIcount\fP \fIcontents\fP \fIname\fP -.DE -.RE -where COUNT is the number of bytes in the data stream occupied by this -field, CONTENTS is the name of the type as given in Section 4 or the value if -this field contains a constant, and NAME is a description of this field. -.LP -Objects containing counted lists use a lowercase single-letter variable (whose -scope is limited to the request, reply, event, or error in which it is found) -to represent the number of objects in the list. These variables, and any -expressions in which they are used, should be treated as unsigned integers. -Multiple copies of an object are indicated by CONTENTS prefix ``LISTof''. -.LP -Unused bytes (whose value is undefined) will have a blank CONTENTS field and a -NAME field of ``unused''. Zeroed bytes (whose value must be zero) will have a -blank CONTENTS field and a NAME field of ``zero''. The expression pad(e) -refers to the number of bytes needed to round a value ``e'' up to the closed -multiple of four: -.RS -.DS - - pad(e) = (4 - (e mod 4)) mod 4 -.DE -.RE -.NH 2 -Data Types -.XS -\*(SN Data Types -.XE -.sp 6p -.LP -ACCESSCONTEXT -.sp 6p -.TA .75i .75i .75i .75i -4 CARD32 access context with at least one of the following bits set: -.sp 6p -#x1fffffff -.sp 6p -but none of the following bits set: -.sp 6p -#xe0000000 zero -.sp 18p -.LP -.TS -tab (@) ; -l s s -l l l. -ALTERNATESERVER -.sp 6p -1@BOOL@subset -1@n@length of name -n@STRING8@name -p@@unused, p=pad(n+2) -.TE -.sp 6p -.TS -tab (@) ; -l s s -l l l. -AUTH -.sp 6p -2@n@length of name -2@d@length of data -n@STRING8@name -p@@unused, p=pad(n) -d@STRING8@data -q@@unused, q=pad(d) -.TE -.sp 12p -.LP -BITMAPFORMAT -.TA .75i .75i .75i .75i -.sp 6p -4 CARD32 value, union of the following bits: -.TS -tab (@) ; -n l. -#x00000001@ByteOrderMSB -#x00000002@BitOrderMSB -#x00000000@ImageRectMin -#x00000004@ImageRectMaxWidth -#x00000008@ImageRectMax -#x00000000@ScanlinePad8 -#x00000100@ScanlinePad16 -#x00000200@ScanlinePad32 -#x00000300@ScanlinePad64 -#x00000000@ScanlineUnit8 -#x00001000@ScanlineUnit16 -#x00002000@ScanlineUnit32 -#x00003000@ScanlineUnit64 -.T& -l s -n l. -.sp 6p -except for the following bits which must be zero: -.sp 6p -#xffffccf0@zero -.T& -l s -n l. -.sp 6p -and the following of which at most one bit may be set: -.sp 6p -#x0000000c@at most one bit can be set -.TE -.sp 12p -.LP -BITMAPFORMATMASK -.sp 6p -.TA .75i .75i .75i .75i -4 CARD32 value, mask of the following bits: -.TS -tab (@) ; -n l. -#x00000001@ByteOrderMask -#x00000002@BitOrderMask -#x00000004@ImageRectMask -#x00000008@ScanlinePadMask -#x00000010@ScanlineUnitMask -.T& -l s -n l. -.sp 6p -except for the following bits which must be zero: -.sp 6p -#xffffffe0@zero -.TE -.sp 12p -.KS -.LP -BOOL -.sp 6p -.TA .75i .75i .75i .75i -1 BOOL boolean, one of the following values: -.sp 6p - 0 False -.br - 1 True -.sp 6p -.KE -.sp 18p -.LP -BYTE -.sp 6p -.TA .75i .75i .75i .75i -1 BYTE unsigned byte of data -.sp 18p -.LP -CARD8 -.sp 6p -.TA .75i .75i .75i .75i -1 CARD8 8-bit unsigned integer -.sp 18p -.LP -CARD16 -.sp 6p -.TA .75i .75i .75i .75i -2 CARD16 16-bit unsigned integer -.sp 18p -.LP -CARD32 -.sp 6p -.TA .75i .75i .75i .75i -4 CARD32 32-bit unsigned integer -.sp 18p -.LP -CHAR2B -.sp 6p -.TA .75i .75i .75i .75i -1 CARD8 byte1 -.br -1 CARD8 byte2 -.sp 18p -.LP -EVENTMASK -.sp 6p -.TA .75i .75i .75i .75i -4 CARD32 event mask -.br -.TS -tab (@) ; -l s -n l. -for core events, this is union of the following bits: -.sp 6p -#00000001@CatalogueListChangeMask -#00000002@FontListChangeMask -.T& -l s -n l. -.sp 6p -but none of the following bits set: -.sp 6p -#fffffffc@ -.TE -extensions define their own sets of bits -.sp 18p -.LP -FONTID -.sp 6p -.TA .75i .75i .75i .75i -4 CARD32 font identifier with at least one of -.br - the following bits set: -.TS -tab (@) ; -n l. -#x1fffffff -.sp 6p -.T& -l s -n l. -but none of the following bits set: -.sp 6p -#xe0000000@zero -.TE -.sp 18p -.LP -INT8 -.br -.TA .75i .75i .75i .75i -1 INT8 8-bit signed integer -.sp 18p -.LP -INT16 -.br -.TA .75i .75i .75i .75i -2 INT16 16-bit signed integer -.sp 18p -.LP -INT32 -.br -.TA .75i .75i .75i .75i -4 INT32 32-bit signed integer -.sp 18p -.LP -OFFSET32 -.br -.TA .75i .75i .75i .75i -4 CARD32 position (or integer value) -.br -4 CARD32 length -.sp 18p -.LP -PROPINFO -.br -.TA .75i .75i .75i .75i -4 n number of PROPOFFSET components -.br -4 m number of bytes of property data -.br -20*n PROPOFFSET property offsets into data block -.br -m LISTofBYTE property data block -.sp 18p -.LP -PROPOFFSET -.br -.TA .75i .75i .75i .75i -8 OFFSET32 name in data block -.br -8 OFFSET32 value in data block -.br -1 CARD8 type, one of the following values: -.sp 6p - 0 String -.br - 1 Unsigned -.br - 2 Signed -.br -3 zero -.sp 18p -.LP -RANGE -.sp 6p -.TA .75i .75i .75i .75i -2 CHAR2B minimum character code -.br -2 CHAR2B maximum character code -.sp 18p -.LP -RESOLUTION -.sp 6p -.TA .75i .75i .75i .75i -2 CARD16 x resolution in pixels per inch -.br -2 CARD16 y resolution in pixels per inch -.br -2 CARD16 point size in decipoints -.sp 18p -.LP -STRNAME -.sp 6p -.TA .75i .75i .75i .75i -1 n length of name -.br -n STRING8 name -.sp 18p -.LP -STRING8 -.sp 6p -.TA .75i .75i .75i .75i -n LISTofBYTE array of 8-bit character values -.sp 18p -.LP -TIMESTAMP -.sp 6p -.TA .75i .75i .75i .75i -4 CARD32 milliseconds since server time origin -.sp 18p -.LP -XCHARINFO -.sp 6p -.TA .75i .75i .75i .75i -2 INT16 left bearing -.br -2 INT16 right bearing -.br -2 INT16 width -.br -2 INT16 ascent -.br -2 INT16 descent -.br -2 CARD16 attributes -.sp 18p -.LP -XFONTINFO -.sp 6p -.TA .75i .75i .75i .75i -4 CARD32 flags, union of the following bits: -.TS -n l. -#x00000001 AllCharactersExist -#x00000002 InkInside -#x00000004 HorizontalOverlap -.T& -l s -n l. -.sp 6p -but none of the following bits set: -.sp 6p -#xfffffff8 zero -.TE -.TA .75i .75i .75i .75i -4 RANGE range of characters in font -.br -1 CARD8 drawing direction -.sp 6p - 0 LeftToRight -.br - 1 RightToLeft -.sp 6p -1 unused -.br -2 CHAR2B default character -.br -12 XCHARINFO minimum bounds -.br -12 XCHARINFO maximum bounds -.br -2 INT16 font ascent -.br -2 INT16 font descent -.br -n PROPINFO property data -.NH 2 -Requests -.XS -\*(SN Requests -.XE -.LP -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -open connection -.sp 6p -1@BYTE@byte order, one of the values: -@#x42@Most Significant Byte first -@#x6c@Least Significant Byte first -1@CARD8@number of auth in auth-data -2@2@client-major-protocol-version -2@0@client-minor-protocol-version -2@a/4@length of auth-data -a@LISTofAUTH@auth-data -=>@@ -2@CARD16@status -@0@Success -@1@Continue -@2@Busy -@3@Denied -2@2@major version -2@0@minor version -1@CARD8@number of alternate-servers-hint -1@CARD8@authorization-index -2@a/4@length of alternate-servers-hint -2@(d+q)/4@length of authorization-data -a@LISTofALTERNATESERVER@alternate-servers-hint -d@LISTofBYTE@authorization-data -q@@unused, q=pad(d) -.TE -.LP -If STATUS is Busy or Denied, the protocol stops and -the connection is closed. If STATUS is Continue, the -client is expected to respond with additional data, to -which the server responds with a new status value and -more data. This dialog continues until the status is -set to Success, or until the server sets STATUS to Busy -or Denied and closes the connection: -.LP -.TS -tab (@) ; -lw(.25i) lw(2i) l. --> -4@1+(d+q)/4@length -d@LISTofBYTE@more-authorization-data -q@@unused, q=pad(d) -=> -4@2+(d+q)/4@length -2@CARD16@status -@0@Success -@1@Continue -@2@Busy -@3@Denied -2@@unused -d@LISTofBYTE@more-authorization-data -q@@unused, q=pad(d) -.TE -.LP -When STATUS is Success, the protocol resumes with the -following sent by the server: -.LP -.TS -tab (@) ; -lw(.25i) lw(2i) l. -4@3+(v+w)/4@length of rest of data -2@CARD16@maximum-request-length -2@v@length of vendor string -4@CARD32@release-number -v@STRING8@vendor-string -w@@unused, w=pad(v) -.TE -.LP -Once the connection has been established, the client may send the -following requests: -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -NoOp -.sp 6p -1@0@major-opcode -1@@unused -2@1@length -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -ListExtensions -1@1@major-opcode -1@@unused -2@1@length -=> -1@0@type reply -1@CARD8@number of names -2@CARD16@sequence-number -4@2+(n+p)/4@length -n@LISTofSTRNAME@names -p@@unused, p=pad(n) -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -QueryExtension -.sp 6p -1@2@major-opcode -1@n@length of name -2@1+(n+p)/4@length -n@STRING8@name -p@@unused, p=pad(n) -=> -1@0@type reply -1@BOOL@present -2@CARD16@sequence-number -4@5@length -2@CARD16@major-version -2@CARD16@minor-version -1@CARD8@major-opcode -1@CARD8@first-event -1@CARD8@number-events -1@CARD8@first-error -1@CARD8@number-errors -3@@unused -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -ListCatalogues -1@3@major-opcode -1@@unused -2@3+(n+p)/4@length -4@CARD32@max-names -2@n@length of pattern -2@@unused -n@STRING8@pattern -p@@unused, p=pad(n) -=>+ -1@0@type reply -1@@unused -2@CARD16@sequence-number -4@4+(n+p)/4@length -4@CARD32@replies-following-hint -4@CARD32@number of catalogue-names -n@LISTofSTRNAME@catalogue-names -p@@unused, p=pad(n) -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -SetCatalogues -1@4@major-opcode -1@CARD8@number of catalogue-names -2@1+(n+p)/4@length -n@LISTofSTRNAME@catalogue-names -p@@unused, p=pad(n) -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -GetCatalogues -.sp 6p -1@5@major-opcode -1@@unused -2@1@length -=> -1@0@type reply -1@CARD8@number of catalogue-names -2@CARD16@sequence-number -4@2+(n+p)/4@length -n@LISTofSTRNAME@catalogue-names -p@@unused, p=pad(n) -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -SetEventMask -.sp 6p -1@6@major-opcode -1@CARD8@extension-opcode -2@2@length -4@EVENTMASK@event-mask -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -GetEventMask -.sp 6p -1@7@major-opcode -1@CARD8@extension-opcode -2@1@length -=> -1@0@type reply -1@@unused -2@CARD16@sequence-number -4@3@length -4@EVENTMASK@event-mask -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -CreateAC -.sp 6p -1@8@major-opcode -1@CARD8@number of authorization-protocols -2@2+a/4@length -4@ACCESSCONTEXT@ac -a@LISTofAUTH@authorization-protocols -=> -1@0@type reply -1@CARD8@authorization-index -2@CARD16@sequence-number -4@3+(d+q)/4@length -2@CARD16@status -@0@Success -@1@Continue -@2@Busy -@3@Denied -2@@unused -d@LISTofBYTE@authorization-data -q@@unused, q=pad(d) -.TE -.LP -If STATUS is Continue, the client is expected to respond -with additional data, to which the server responds with -a new status value and more data. This dialog continues -until the status is set to Success, Busy, or Denied at -which point the request is finished. -.LP -.TS -tab (@) ; -lw(.25i) lw(2i) l. --> -4@1+(d+q)/4@length -d@LISTofBYTE@more-authorization-data -q@@unused, q=pad(d) -=> -4@2+(d+q)/4@length -2@CARD16@status -@0@Success -@1@Continue -@2@Busy -@3@Denied -2@@unused -d@LISTofBYTE@authorization-data -q@@unused, q=pad(d) -.TE -.sp 12p -.ne 3 -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -FreeAC -.sp 6p -1@9@major-opcode -1@@unused -2@2@length -4@ACCESSCONTEXT@ac -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -SetAuthorization -.sp 6p -1@10@major-opcode -1@@unused -2@2@length -4@ACCESSCONTEXT@ac -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -SetResolution -.sp 6p -1@11@major-opcode -1@n@number of resolutions -2@1+(6*n+p)/4@length -6*n@LISTofRESOLUTION@resolutions -p@p=pad(6*n) -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -GetResolution -.sp 6p -1@12@major-opcode -1@@unused -2@1@length -=> -1@0@type reply -1@n@number of resolutions -2@CARD16@sequence-number -4@2+(6*n+p)/4@length -6*n@LISTofRESOLUTION@resolutions -p@@p=pad(6*n) -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -ListFonts -.sp 6p -1@13@major-opcode -1@@unused -2@3+(n+p)/4@length -4@CARD32@max-names -2@n@length of pattern -2@@unused -n@STRING8@pattern -p@@unused, p=pad(n) -=>+ -1@0@type reply -1@@unused -2@CARD16@sequence-number -4@4+(n+p)/4@length -4@CARD32@replies-following-hint -4@CARD32@number of font-names -n@LISTofSTRNAME@font-names -p@@unused, p=pad(n) -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -ListFontsWithXInfo -.sp 6p -1@14@major-opcode -1@@unused -2@3+(n+p)/4@length -4@CARD32@max-names -2@n@length of pattern -2@@unused -n@STRING8@pattern -p@@unused, p=pad(n) -.T& -l s s -lw(.25i) lw(2i) l. -=>+(except for last in series) -1@0@type reply -1@n@length of name -2@CARD16@sequence-number -4@3+(n+p+f)/4@length -4@CARD32@replies-hint -f@XFONTINFO@font info -n@STRING8@name -p@@unused, p=pad(n) -@@@ -.T& -l s s -lw(.25i) lw(2i) l. -=>(last in series) -1@0@type reply -1@0@last-reply indicator -2@CARD16@sequence-number -4@2@reply length -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -OpenBitmapFont -.sp 6p -1@15@major-opcode -1@@unused -2@4+(n+p)/4@length -4@FONTID@fontid -4@BITMAPFORMATMASK@format-mask -4@BITMAPFORMAT@format -n@STRNAME@pattern -p@@unused, p=pad(n) -=> -1@0@type reply -1@BOOL@otherid-valid -2@CARD16@sequence-number -4@4@length -4@FONTID@otherid -1@BOOL@cachable -3@@unused -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -QueryXInfo -.sp 6p -1@16@major-opcode -1@@unused -2@2@length -4@FONTID@fontid -=> -1@0@type reply -1@@unused -2@CARD16@sequence-number -4@2+f/4@length -f@XFONTINFO@font info -p@@unused, p=pad(f\^) -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -QueryXExtents8 -.sp 6p -1@17@major-opcode -1@BOOL@range -2@3+(n+p)/4@length -4@FONTID@fontid -4@n@number chars entries -n@STRING8@chars -p@@unused, p=pad(n) -=> -1@0@type reply -1@@unused -2@CARD16@sequence-number -4@3+3*n@length -4@n@number of extents -12*n@LISTofXCHARINFO@extents -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -QueryXExtents16 -.sp 6p -1@18@major-opcode -1@BOOL@range -2@3+(2*n+p)/4@length -4@FONTID@fontid -4@n@number chars entries -2*n@LISTofCHAR2B@chars -p@@unused, p=pad(2*n) -=> -1@0@type reply -1@@unused -2@CARD16@sequence-number -4@3+3*n@length -4@n@number of extents -12*n@LISTofXCHARINFO@extents -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -QueryXBitmaps8 -.sp 6p -1@19@major-opcode -1@BOOL@range -2@4+(n+p)/4@length -4@FONTID@fontid -4@BITMAPFORMAT@format -4@n@number of chars entries -n@STRING8@chars -p@@unused, p=pad(n) -=>+ -1@0@type reply -1@@unused -2@CARD16@sequence-number -4@5+2*n+(m+p)/4@length -4@CARD32@replies-following-hint -4@n@number of offsets -4@m@number of bytes of glyph images -8*n@LISTofOFFSET32@offsets -m@LISTofBYTE@glyph images -p@@unused, p=pad(m) -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -QueryXBitmaps16 -.sp 6p -1@20@major-opcode -1@BOOL@range -2@4+(2*n+p)/4@length -4@FONTID@fontid -4@BITMAPFORMAT@format -4@n@number of chars entries -2*n@LISTofCHAR2B@chars -p@@unused, p=pad(2*n) -=> -1@0@type reply -1@@unused -2@CARD16@sequence-number -4@5+2*n+(m+p)/4@length -4@CARD32@replies-following-hint -4@n@number of offsets -4@m@number of bytes of glyph images -8*n@LISTofOFFSET32@offsets -m@LISTofBYTE@glyph images -p@@unused, p=pad(m) -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -CloseFont -.sp 6p -1@21@major-opcode -1@@unused -2@2@length -4@FONTID@fontid -.TE -.NH 2 -Errors -.XS -\*(SN Errors -.XE -.LP -.TS -tab (@) ; -lfB s s -n lw(2i) l. -Request -.sp 6p -1@1@type error -1@0@Request -2@CARD16@sequence-number -4@4@length -4@TIMESTAMP@timestamp -1@CARD8@major-opcode -1@CARD8@minor-opcode -2@@unused -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -n lw(2i) l. -Format -.sp 6p -1@1@type error -1@1@Format -2@CARD16@sequence-number -4@5@length -4@TIMESTAMP@timestamp -1@CARD8@major-opcode -1@CARD8@minor-opcode -2@@unused -4@BITMAPFORMAT@bad-format -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -n lw(2i) l. -Font -.sp 6p -1@1@type error -1@2@Font -2@CARD16@sequence-number -4@5@length -4@TIMESTAMP@timestamp -1@CARD8@major-opcode -1@CARD8@minor-opcode -2@@unused -4@FONTID@bad-fontid -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -n lw(2i) l. -Range -.sp 6p -1@1@type error -1@3@Range -2@CARD16@sequence-number -4@5@length -4@TIMESTAMP@timestamp -1@CARD8@major-opcode -1@CARD8@minor-opcode -2@@unused -4@RANGE@bad-range -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -n lw(2i) l. -EventMask -.sp 6p -1@1@type error -1@4@EventMask -2@CARD16@sequence-number -4@5@length -4@TIMESTAMP@timestamp -1@CARD8@major-opcode -1@CARD8@minor-opcode -2@@unused -4@EVENTMASK@event-mask -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -n lw(2i) l. -AccessContext -.sp 6p -1@1@type error -1@5@AccessContext -2@CARD16@sequence-number -4@5@length -4@TIMESTAMP@timestamp -1@CARD8@major-opcode -1@CARD8@minor-opcode -2@@unused -4@ACCESSCONTEXT@access context -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -n lw(2i) l. -IDChoice -.sp 6p -1@1@type error -1@6@IDChoice -2@CARD16@sequence-number -4@5@length -4@TIMESTAMP@timestamp -1@CARD8@major-opcode -1@CARD8@minor-opcode -2@@unused -4@FONTID@bad-fontid -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -n lw(2i) l. -Name -.sp 6p -1@1@type error -1@7@Name -2@CARD16@sequence-number -4@4@length -4@TIMESTAMP@timestamp -1@CARD8@major-opcode -1@CARD8@minor-opcode -2@@unused -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -n lw(2i) l. -Resolution -.sp 6p -1@1@type error -1@8@Resolution -2@CARD16@sequence-number -4@5@length -4@TIMESTAMP@timestamp -1@CARD8@major-opcode -1@CARD8@minor-opcode -6@RESOLUTION@resolution -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -n lw(2i) l. -Alloc -.sp 6p -1@1@type error -1@9@Alloc -2@CARD16@sequence-number -4@4@length -4@TIMESTAMP@timestamp -1@CARD8@major-opcode -1@CARD8@minor-opcode -2@@unused -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -n lw(2i) l. -Length -.sp 6p -1@1@type error -1@10@Length -2@CARD16@sequence-number -4@5@length -4@TIMESTAMP@timestamp -1@CARD8@major-opcode -1@CARD8@minor-opcode -2@@unused -4@CARD32@bad-length -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -n lw(2i) l. -Implementation -.sp 6p -1@1@type error -1@11@Implementation -2@CARD16@sequence-number -4@4@length -4@TIMESTAMP@timestamp -1@CARD8@major-opcode -1@CARD8@minor-opcode -2@@unused -.TE -.NH 2 -Events -.XS -\*(SN Events -.XE -.LP -.TS -tab (@) ; -lfB s s -n lw(2i) l. -KeepAlive -.sp 6p -1@2@type event -1@0@event KeepAlive -2@CARD16@sequence-number -4@3@length -4@TIMESTAMP@timestamp -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -n lw(2i) l. -CatalogueListNotify -.sp 6p -1@2@type event -1@1@event CatalogueListNotify -2@CARD16@sequence-number -4@4@length -4@TIMESTAMP@timestamp -1@BOOL@added -1@BOOL@deleted -2@@unused -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -n lw(2i) l. -FontListNotify -.sp 6p -1@2@type event -1@2@event FontListNotify -2@CARD16@sequence-number -4@4@length -4@TIMESTAMP@timestamp -1@BOOL@added -1@BOOL@deleted -2@@unused -.TE -.NH 1 -Acknowledgements -.XS -\*(SN Acknowledgements -.XE -.LP -This document represents the culmination of several years of debate and -experiments done under the auspices of the MIT X Consortium font working group. -Although this was a group effort, the author remains responsible for any errors -or omissions. The protocol presented here was primarily designed by Jim -Fulton, Keith Packard, and Bob Scheifler. Special thanks goes to Ned -Batchelder, Jim Flowers, and Axel Deininger for their invigorating comments -which never failed to make this a better document. -Stephen Gildea edited version 2 of this document. -Finally, David Lemke -deserves great credit for designing and coding the sample implementation. -.NH 1 -References -.XS -\*(SN References -.XE -.LP -All of the following documents are X Consortium standards available from -the X Consortium. -.LP -[1] Scheifler, Robert W. ``X Window System Protocol Version 11'' -.LP -[2] Adobe Systems. ``Bitmap Distribution Format 2.1'' -.LP -[3] X Consortium. ``X Logical Font Description Conventions, Version 1.5'' -.bp -.XS -Appendix A \- Suggested Licensing Policies -.XE -.ce 10 -.sp 5 -\s+2\fBAppendix A\fP\s-2 -.sp -\s+1\fBSuggested Licensing Policies\fP\s-1 -.ce 0 -.sp -.LP -The authorization data passed by the client in the initial connection -setup information may be used by the font server to implement restrictions -on which fonts may be accessed. Furthermore, the font server is free to -refuse new connections at any time. -.LP -Configuration or management of the license restrictions is outside the scope of -the font service protocol and is done in a server-dependent manner. Possible -policies might include, but are not limited to, combinations of the following: -.IP "a." -No restrictions - anyone may access any fonts. The server neither -refuses any connections nor generates AccessContext errors on any -fonts. For environments without specially-licensed fonts, this is -sufficient. -.IP "b." -Per-machine - only those clients connecting from a known set of -machines are permitted access. The server could get the address -of the connection and look in a list of allowed machines. -.IP "c." -Per-user - only a known set of users may access the fonts. The -server can use the authorization data (such as a Kerberos ticket -or a Secure RPC credential) to verify the identity of the user -and then look in a list of allowed users. -.IP "d." -Simultaneous Use - only a certain number of clients may use a given -font at any one time. Additional clients would receive AccessContext -errors if they attempt to open the font. This is only effective if -the initial clients keep the font open for the entire time that it -is being used (even if all of the data has been transmitted and is -being cached). -.IP "e." -Postage Meter - a particular font may only be accessed a limited -number of times before its license must be renewed. Each time -the font is opened, the server decrements a counter. When the -counter reaches zero, all further attempts to open the font -return an AccessContext error. -.LP -It should be noted that chaining of font servers (obtaining font data from -other font servers) may conflict with certain license policies. -.bp -.XS -Appendix B \- Implementation Suggestions -.XE -.sp 5 -.ce 10 -\s+2\fBAppendix B\fP\s-2 -.sp -\s+1\fBImplementation Suggestions\s-1\fP -.ce 0 -.sp -.LP -Font server implementations will probably wish to use techniques such as the -following to avoid limits on the number of simultaneous connections: -.IP "a." -The initial connection information returned by the font -server contains the names of other font servers that -may be used as substitutes. A font server may refuse to -accept a connection, indicating that the client should -try one of the alternatives instead. -.IP "b." -On operating systems that support processing forking, font -servers might choose to fork so that the child can continue -processing the existing connections and the parent can accept -new connections. Such implementations are encouraged to use -shared memory so that in-memory font databases can be shared. -.IP "c." -On operating systems that support passing stream file descriptors -between processes, cooperating font servers could collect -connections in a single process when there are few connections -and spread them among several processes as the load increases. -.IP "d." -If a font client is unable to connect to a server (as opposed -to having the connection terminated), it should retry for an -implementation-dependent length of time (see Xlib's -handling of ECONNREFUSED in XConnDis.c). -.\" -.\" print Table of Contents page -.if o .bp \" blank page to make count even -.bp 1 -.af PN i -.PX diff --git a/doc/xorg-docs/specs/Fixes/protocol b/doc/xorg-docs/specs/Fixes/protocol deleted file mode 100644 index cdea08132..000000000 --- a/doc/xorg-docs/specs/Fixes/protocol +++ /dev/null @@ -1,494 +0,0 @@ - The XFIXES Extension - Version 2.0 - Document Revision 1 - 2003-11-20 - Keith Packard - keithp@keithp.com - -1. Introduction - -X applications have often needed to work around various shortcomings in the -core X window system. This extension is designed to provide the minimal -server-side support necessary to eliminate problems caused by these -workarounds. - -2. Acknowledgements - -This extension is a direct result of requests made by application -developers, in particular, - - + Owen Taylor for describing the issues raised with the XEMBED - mechanisms and SaveSet processing and his initial extension - to handle this issue. - - + Bill Haneman for the design for cursor image tracking. - - + Havoc Pennington - - + Fredrik Höglund for cursor names - -3. Basic Premise - -Requests in this extension may seem to wander all over the map of X server -capabilities, but they are tied by a simple rule -- resolving issues raised -by application interaction with core protocol mechanisms that cannot be -adequately worked around on the client side of the wire. - -4. Extension initialization - -The client must negotiate the version of the extension before executing -extension requests. Behavior of the server is undefined otherwise. - -QueryVersion - - client-major-version: CARD32 - client-minor-version: CARD32 - - -> - - major-version: CARD32 - minor-version: CARD32 - - The client sends the highest supported version to the server and - the server sends the highest version it supports, but no higher than - the requested version. Major versions changes can introduce - incompatibilities in existing functionality, minor version - changes introduce only backward compatible changes. It is - the clients responsibility to ensure that the server supports - a version which is compatible with its expectations. - -************* XFIXES VERSION 1 OR BETTER *********** - -5. Save Set processing changes - -Embedding one application within another provides a way of unifying -disparate documents and views within a single framework. From the X -protocol perspective, this appears similar to nested window managers; the -embedding application "manages" the embedded windows much as a window -manager does for top-level windows. To protect the embedded application -from embedding application failure, it is reasonable to use the core SaveSet -mechanism so that embedding application failure causes embedded windows to -be preserved instead of destroyed. - -The core save set mechanism defines the target for each save set member -window as the nearest enclosing window not owned by the terminating client. -For embedding applications, this nearest window is usually the window -manager frame. The problem here is that the window manager will not -generally expect to receive and correctly manage new windows appearing within -that window by the save set mechanism, and will instead destroy the frame -window in response to the client window destruction. This causes the -embedded window to be destroyed. - -An easy fix for this problem is to change the target of the save set member -to a window which won't be affected by the underlying window destruction. -XFIXES chooses the root window as the target. - -Having embedded windows suddenly appear at the top level can confuse users, -so XFIXES also permits these windows to remain unmapped instead of being -remapped. - -5.1 Requests - -ChangeSaveSet - - window: Window - mode: { Insert, Delete } - target: { Nearest, Root } - map: { Map, Unmap } - - ChangeSaveSet is an extension of the core protocol ChangeSaveSet - request. As in that request, mode specifies whether the indicated - window is inserted or deleted from the save-set. Target specifies - whether the window is reparented to the nearest non-client window as - in the core protocol, or reparented to the root window. Map - specifies whether the window is mapped as in the core protocol or - unmapped. - -6. Selection Tracking - -Applications wishing to monitor the contents of current selections must -poll for selection changes. XFIXES improves this by providing an event -delivered whenever the selection ownership changes. - -6.1 Types - - SELECTIONEVENT { SetSelectionOwner, - SelectionWindowDestroy, - SelectionClientClose } - -6.1 Events - -SelectionNotify - - subtype: SELECTIONEVENT - window: Window - owner: Window - selection: Atom - timestamp: Timestamp - selection-timestamp: Timestamp - -6.2 Requests - -SelectSelectionInput - - window: Window - selection: Atom - event-mask: SETofSELECTIONEVENT - - Selects for events to be delivered to window when various causes of - ownership of selection occur. Subtype indicates the cause of the - selection ownership change. Owner is set to the current selection - owner, or None. Timestamp indicates the time the event was - generated while selection-timestamp indicates the timestamp used to - own the selection. - -7. Cursor Image Monitoring - -Mirroring the screen contents is easily done with the core protocol or VNC -addons, except for the current cursor image. There is no way using the core -protocol to discover which cursor image is currently displayed. The -cursor image often contains significant semantic content about the user -interface. XFIXES provides a simple mechanism to discover when the cursor -image changes and to fetch the current cursor image. - -As the current cursor may or may not have any XID associated with it, there -is no stable name available. Instead, XFIXES returns only the image of the -current cursor and provides a way to identify cursor images to avoid -refetching the image each time it changes to a previously seen cursor. - -7.1 Types - CURSOREVENT { DisplayCursor } - -7.2 Events - -CursorNotify - - subtype: CURSOREVENT - window: Window - cursor-serial: CARD32 - timestamp: Timestamp - name: Atom (Version 2 only) - -7.3 Requests - -SelectCursorInput - - window: Window - event-mask: SETofCURSOREVENT - - This request directs cursor change events to the named window. - Events will be delivered irrespective of the screen on which they - occur. Subtype indicates the cause of the cursor image change - (there is only one subtype at present). Cursor-serial is a number - assigned to the cursor image which identifies the image. Cursors - with different serial numbers may have different images. Timestamp - is the time of the cursor change. - -GetCursorImage - - -> - - x: INT16 - y: INT16 - width: CARD16 - height: CARD16 - x-hot: CARD16 - y-hot: CARD16 - cursor-serial: CARD32 - cursor-image: LISTofCARD32 - - GetCursorImage returns the image of the current cursor. X and y are - the current cursor position. Width and height are the size of the - cursor image. X-hot and y-hot mark the hotspot within the cursor - image. Cursor-serial provides the number assigned to this cursor - image, this same serial number will be reported in a CursorNotify - event if this cursor image is redisplayed in the future. - - The cursor image itself is returned as a single image at 32 bits per - pixel with 8 bits of alpha in the most significant 8 bits of the - pixel followed by 8 bits each of red, green and finally 8 bits of - blue in the least significant 8 bits. The color components are - pre-multiplied with the alpha component. - -************* XFIXES VERSION 2 OR BETTER *********** - -8. Region Objects - -The core protocol doesn't expose regions as a primitive object and this -makes many operations more complicated than they really need to be. Adding -region objects simplifies expose handling, the Shape extension and other -operations. These operations are also designed to support a separate -extension, the X Damage Extension. - -8.1 Types - - Region: XID - WINDOW_REGION_KIND: { Bounding, Clip } - -8.2 Errors - - Region The specified region is invalid - -8.3 Requests - -CreateRegion - - region: REGION - rects: LISTofRECTANGLE - - Creates a region initialized to the specified list of rectangles. - The rectangles may be specified in any order, their union becomes - the region. The core protocol allows applications to specify an - order for the rectangles, but it turns out to be just as hard to - verify the rectangles are actually in that order as it is to simply - ignore the ordering information and union them together. Hence, - this request dispenses with the ordering information. - - Errors: IDChoice - -CreateRegionFromBitmap - - region: REGION - bitmap: PIXMAP - - Creates a region initialized to the set of 'one' pixels in bitmap - (which must be depth 1, else Match error). - - Errors: Pixmap, IDChoice, Match - -CreateRegionFromWindow - - window: Window - kind: WINDOW_REGION_KIND - region: Region - - Creates a region initialized to the specified window region. See the - Shape extension for the definition of Bounding and Clip regions. - - Errors: Window, IDChoice, Value - -CreateRegionFromGC - - gc: GContext - region: Region - - Creates a region initialized from the clip list of the specified - GContext. - - Errors: GContext, IDChoice - -CreateRegionFromPicture - - picture: Picture - region: Region - - - Creates a region initialized from the clip list of the specified - Picture. - - Errors: Picture, IDChoice - -DestroyRegion - - region: Region - - Destroys the specified region. - - Errors: Region - -SetRegion - - region: Region - rects: LISTofRECTANGLE - - This replaces the current contents of region with the region formed - by the union of rects. - -CopyRegion - source: Region - destination: Region - - This replaces the contents of destination with the contents of - source. - -UnionRegion -IntersectRegion -SubtractRegion - - source1: Region - source2: Region - destination: Region - - Combines source1 and source2, placing the result in destination. - Destination may be the same as either source1 or source2. - - Errors: Region, Value - -InvertRegion - - source: Region - bounds: RECTANGLE - destination: Region - - The source region is subtracted from the region specified by - bounds. The result is placed in destination, replacing its contents. - - Errors: Region - -TranslateRegion - - region: Region - dx, dy: INT16 - - The region is translated by dx, dy in place. - - Errors: Region - -RegionExtents - - source: Region - destination: Region - - The extents of the source region are placed in the destination - -FetchRegion - - region: Region - -> - extents: RECTANGLE - rectangles: LISTofRECTANGLE - - The region is returned as a list of rectangles in YX-banded order. - - Errors: Region - -SetGCClipRegion - - gc: GCONTEXT - clip-x-origin, clip-y-origin: INT16 - region: Region or None - - This request changes clip-mask in gc to the specified region and - sets the clp origin. Output will be clippped to remain contained - within the region. The clip origin is interpreted relative to the - origin of whatever destination drawable is specified in a graphics - request. The region is interpreted relative to the clip origin. - Future changes to region have no effect on the gc clip-mask. - - Errors: GContext, Region - -SetWindowShapeRegion - - dest: Window - destKind: SHAPE_KIND - xOff, yOff: INT16 - region: Region or None - - This request sets the specified (by destKind) Shape extension region - of the window to region, offset by xOff and yOff. Future changes to - region have no effect on the window shape. - - Errors: Window, Value, Region - -SetPictureClipRegion - - picture: Picture - clip-x-origin, clip-y-origin: INT16 - region: Region or None - - This request changes clip-mask in picture to the specified region - and sets the clip origin. Input and output will be clipped to - remain contained within the region. The clip origin is interpreted - relative to the origin of the drawable associated with picture. The - region is interpreted relative to the clip origin. Future changes - to region have no effect on the picture clip-mask. - - Errors: Picture, Region - -9. Cursor Names - -Attaching names to cursors permits some abstract semantic content to be -associated with specific cursor images. Reflecting those names back to -applications allows that semantic content to be related to the user through -non-visual means. - -9.1 Events - -CursorNotify - - subtype: CURSOREVENT - window: Window - cursor-serial: CARD32 - timestamp: Timestamp - name: Atom or None - - In Version 2 of the XFIXES protocol, this event adds the atom - of any name associated with the current cursor (else None). - -9.2 Requests - -SetCursorName - - cursor: CURSOR - name: LISTofCARD8 - - This request interns name as an atom and sets that atom as the name - of cursor. - - Errors: Cursor - -GetCursorName - - cursor: CURSOR - -> - atom: ATOM or None - name: LISTofCARD8 - - This request returns the name and atom of cursor. If no name is - set, atom is None and name is empty. - - Errors: Cursor - -GetCursorImageAndName - - -> - - x: INT16 - y: INT16 - width: CARD16 - height: CARD16 - x-hot: CARD16 - y-hot: CARD16 - cursor-serial: CARD32 - cursor-atom: ATOM - cursor-name: LISTofCARD8 - cursor-image: LISTofCARD32 - - This is similar to GetCursorImage except for including both - the atom and name of the current cursor. - -ChangeCursor - - source, destination: CURSOR - - This request replaces all references to the destination with a - reference to source. Any existing uses of the destination cursor - object will now show the source cursor image. - -ChangeCursorByName - - src: CURSOR - name: LISTofCARD8 - - This request replaces the contents of all cursors with the specified - name with the src cursor. - -99. Future compatibility - -This extension is not expected to remain fixed. Future changes will -strive to remain compatible if at all possible. The X server will always -support version 1 of the extension protocol if requested by a client. - -Additions to the protocol will always by marked by minor version number -changes so that applications will be able to detect what requests are -supported. diff --git a/doc/xorg-docs/specs/GL/libGL.txt b/doc/xorg-docs/specs/GL/libGL.txt deleted file mode 100644 index cb9884043..000000000 --- a/doc/xorg-docs/specs/GL/libGL.txt +++ /dev/null @@ -1,197 +0,0 @@ - - - -Introduction ------------- - -This document describes the implementation of the XFree86 4.0 libGL.so -library defined by the Linux/OpenGL Base specification found at -http://reality.sgi.com/opengl/linux/linuxbase.html. - -The documentation is divided into two sections: - User's Guide - Driver Developer's Guide - -Author: Brian Paul (brian@precisioninsight.com) -Date: February 2000 - - - -User's Guide ------------- - -Using libGL.so - -The libGL.so library defines the gl- and glX-prefixed functions needed to -run OpenGL programs. OpenGL client applications should link with the --lGL option to use it. - -libGL.so serves two primary functions: GLX protocol generation for indirect -rendering and loading/management of hardware drivers for direct rendering. - -When libGL.so initializes itself it uses the DRI to determine the -appropriate hardware driver for each screen on the local X display. -The hardware drivers are expected to be in the /usr/X11R6/lib/modules/dri/ -directory. Drivers are named with the convention _dri.so where - is a driver such as "tdfx", "i810", "gamma", etc. - -The LIBGL_DRIVERS_DIR environment variable may be used to specify a -different DRI modules directory, overriding /usr/X11R6/lib/modules/dri/. -This environment variable is ignored in setuid programs for security -reasons. - -When libGL.so is unable to locate appropriate hardware drivers it will -fall back to using indirect GLX rendering. - -To aid in solving problems, libGL.so will print diagnostic messages to -stderr if the LIBGL_DEBUG environment variable is defined. - -libGL.so is thread safe. The overhead of thread safety for common, -single-thread clients is negligible. However, the overhead of thread -safety for multi-threaded clients is significant. Each GL API call -requires two calls to pthread_get_specific() which can noticably -impact performance. Warning: libGL.so is thread safe but individual -DRI drivers may not be. Please consult the documentation for a driver -to learn if it is thread safe. - - - -Indirect Rendering - -You can force indirect rendering mode by setting the LIBGL_ALWAYS_INDIRECT -environment variable. Hardware acceleration will not be used. - - - -libGL.so Extensibility - -libGL.so is designed to be extended without upgrading. That is, -drivers may install new OpenGL extension functions into libGL.so -without requiring libGL.so to be replaced. Clients of libGL.so should -use the glXGetProcAddressEXT() function to obtain the address of -functions by name. For more details of GLX_ARB_get_proc_address see -http://oss.sgi.com/projects/ogl-sample/registry/ARB/get_proc_address.spec - -libGL.so is also designed with flexibility such that it may be used -with many generations of hardware drivers to come. - - - - -Driver Developer's Guide ------------------------- - -This section describes the requirements to make an XFree86 4.0 -libGL.so-compatible hardware driver. It is not intended for end -users of libGL.so. - - -XFree86 source files - -libGL.so is built inside XFree86 with sources found in xc/lib/GL/. -Specifically, libGL.so is built from: - - xc/lib/GL/glx/*.c - xc/lib/dri/XF86dri.c - xc/lib/dri/dri_glx.c - xc/lib/GL/mesa/src/glapi.c - xc/lib/GL/mesa/src/glapitemp.h - xc/lib/GL/mesa/src/glapitable.h - xc/lib/GL/mesa/src/glapioffsets.h - xc/lib/GL/mesa/src/glapinoop.c - xc/lib/GL/mesa/src/glheader.h - xc/lib/GL/mesa/src/glthread.c - xc/lib/GL/mesa/src/glthread.h - xc/lib/GL/mesa/src/X86/glapi_x86.S - xc/lib/GL/mesa/src/X86/assyntax.h - -Understand that the mesa/src/gl*.[ch] files are not tied to Mesa. They -have no dependencies on the rest of Mesa and are designed to be reusable -in a number of projects. - -The glapi_x86.X and assyntax.h files implement x86-optimized dispatch -of GL functions. They are not required; C-based dispatch can be used -instead, with a slight performance penalty. - - - -Driver loading and binding - -When libGL.so initializes itself (via the __glXInitialize function) a -call is made to driCreateDisplay(). This function uses DRI facilities -to determine the driver file appropriate for each screen on the local -display. Each screen's driver is then opened with dlopen() and asked -for its __driCreateScreen() function. The pointers to the __driCreateScreen() -functions are kept in an array, indexed by screen number, in the -__DRIdisplayRec struct. - -When a driver's __driCreateScreen() function is called, it must initialize -a __DRIscreenRec struct. This struct acts as the root of a tree of -function pointers which are called to create and destroy contexts and -drawables and perform all the operations needed by the GLX interface. -See the xc/lib/GL/glx/glxclient.h file for details. - - - -Dynamic Extension Function Registration - -In order to provide forward compatibility with future drivers, libGL.so -allows drivers to register new OpenGL extension functions which weren't -known when libGL.so was built. - -The register_extensions() function in xc/lib/GL/dri/dri_glx.c is called -as soon as libGL.so is loaded. This is done with gcc's constructor -attribute. This mechanism will likely have to be changed for other compilers. - -register_extensions() loops over all local displays and screens, determines -the DRI driver for each, and calls the driver's __driRegisterExtensions() -function, if present. - -The __driRegisterExtensions() function can add new entrypoints to libGL -by calling: - - GLboolean _glapi_add_entrypoint(const char *funcName, GLuint offset) - -The parameters are the name of the function (such as "glFoobarEXT") and the -offset of the dispatch slot in the API dispatch table. The return value -indicates success (GL_TRUE) or failure (GL_FALSE). - -_glapi_add_entrypoint() will synthesize entrypoint code in assembly -language. Assembly languages is required since parameter passing -can't be handled correctly using a C-based solution. - -The address of the new entrypoint is obtained by calling the -glXGetProcAddressARB() function. - -The dispatch offset number MUST be a number allocated by SGI in the same -manner in which new GL_* constants are allocated. Using an arbitrary -offset number will result in many problems. - - - -Dispatch Management - -When a GL context is made current, the driver must install its dispatch -table as the current dispatch table. This is done by calling - - void _glapi_set_dispatch(struct _glapi_table *dispatch); - -This will install the named dispatch table for the calling thread. -The current dispatch table for a thread can be obtained by calling - - struct _glapi_table *_glapi_get_dispatch(void); - -For higher performance in the common single-thread case, the global -variable _glapi_Dispatch will point to the current dispatch table. -This variable will be NULL when in multi-thread mode. - - - -Context Management - -libGL.so uses the XFree86 xthreads package to manage a thread-specific -current context pointer. See __glXGet/SetCurrentContext() in glext.c - -Drivers may use the _glapi_set/get_context() functions to maintain -a private thread-specific context pointer. - diff --git a/doc/xorg-docs/specs/ICCCM/Makefile.am b/doc/xorg-docs/specs/ICCCM/Makefile.am new file mode 100644 index 000000000..274a3956f --- /dev/null +++ b/doc/xorg-docs/specs/ICCCM/Makefile.am @@ -0,0 +1,9 @@ +if ENABLE_SPECS + +xmldir = $(docdir)/$(subdir) +doc_sources = icccm.xml +dist_xml_DATA = $(doc_sources) + +include $(top_srcdir)/xmlrules.in + +endif ENABLE_SPECS diff --git a/doc/xorg-docs/specs/ICCCM/Makefile.in b/doc/xorg-docs/specs/ICCCM/Makefile.in new file mode 100644 index 000000000..ccca6a57f --- /dev/null +++ b/doc/xorg-docs/specs/ICCCM/Makefile.in @@ -0,0 +1,442 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice (including the next +# paragraph) shall be included in all copies or substantial portions of the +# Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(am__dist_xml_DATA_DIST) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/xmlrules.in +@ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_XMLTO_TRUE@am__append_1 = $(doc_sources:.xml=.ps) $(doc_sources:.xml=.pdf) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@am__append_2 = $(doc_sources:.xml=.txt) +subdir = specs/ICCCM +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(install_sh) -d +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__dist_xml_DATA_DIST = icccm.xml +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(xmldir)" "$(DESTDIR)$(xmldir)" +dist_xmlDATA_INSTALL = $(INSTALL_DATA) +xmlDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_xml_DATA) $(xml_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ +ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APP_MAN_DIR = @APP_MAN_DIR@ +APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHANGELOG_CMD = @CHANGELOG_CMD@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CWARNFLAGS = @CWARNFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ +DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ENABLE_DOCS_FALSE = @ENABLE_DOCS_FALSE@ +ENABLE_DOCS_TRUE = @ENABLE_DOCS_TRUE@ +ENABLE_SPECS_FALSE = @ENABLE_SPECS_FALSE@ +ENABLE_SPECS_TRUE = @ENABLE_SPECS_TRUE@ +EXEEXT = @EXEEXT@ +FILE_MAN_DIR = @FILE_MAN_DIR@ +FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ +FOP = @FOP@ +GREP = @GREP@ +HAVE_FOP_FALSE = @HAVE_FOP_FALSE@ +HAVE_FOP_TRUE = @HAVE_FOP_TRUE@ +HAVE_STYLESHEETS_FALSE = @HAVE_STYLESHEETS_FALSE@ +HAVE_STYLESHEETS_TRUE = @HAVE_STYLESHEETS_TRUE@ +HAVE_XMLTO_FALSE = @HAVE_XMLTO_FALSE@ +HAVE_XMLTO_TEXT_FALSE = @HAVE_XMLTO_TEXT_FALSE@ +HAVE_XMLTO_TEXT_TRUE = @HAVE_XMLTO_TEXT_TRUE@ +HAVE_XMLTO_TRUE = @HAVE_XMLTO_TRUE@ +INSTALL_CMD = @INSTALL_CMD@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIB_MAN_DIR = @LIB_MAN_DIR@ +LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +MAN_SUBSTS = @MAN_SUBSTS@ +MISC_MAN_DIR = @MISC_MAN_DIR@ +MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ +VERSION = @VERSION@ +XMLTO = @XMLTO@ +XORG_MAN_PAGE = @XORG_MAN_PAGE@ +XORG_SGML_PATH = @XORG_SGML_PATH@ +XSL_STYLESHEET = @XSL_STYLESHEET@ +ac_ct_CC = @ac_ct_CC@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +@ENABLE_SPECS_TRUE@xmldir = $(docdir)/$(subdir) +@ENABLE_SPECS_TRUE@doc_sources = icccm.xml +@ENABLE_SPECS_TRUE@dist_xml_DATA = $(doc_sources) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@xml_DATA = \ +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(doc_sources:.xml=.html) \ +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(am__append_1) \ +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(am__append_2) +@ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FLAGS = \ +@ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ -m $(XSL_STYLESHEET) \ +@ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --searchpath $(XORG_SGML_PATH)/X11 \ +@ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam html.stylesheet=$(STYLESHEET_SRCDIR)/xorg.css \ +@ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam img.src.path=$(abs_builddir)/ + +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@CLEANFILES = $(xml_DATA) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@SUFFIXES = .xml .ps .pdf .txt .html +all: all-am + +.SUFFIXES: +.SUFFIXES: .xml .ps .pdf .txt .html +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/xmlrules.in $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign specs/ICCCM/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --foreign specs/ICCCM/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +uninstall-info-am: +install-dist_xmlDATA: $(dist_xml_DATA) + @$(NORMAL_INSTALL) + test -z "$(xmldir)" || $(mkdir_p) "$(DESTDIR)$(xmldir)" + @list='$(dist_xml_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_xmlDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(xmldir)/$$f'"; \ + $(dist_xmlDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(xmldir)/$$f"; \ + done + +uninstall-dist_xmlDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_xml_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(xmldir)/$$f'"; \ + rm -f "$(DESTDIR)$(xmldir)/$$f"; \ + done +install-xmlDATA: $(xml_DATA) + @$(NORMAL_INSTALL) + test -z "$(xmldir)" || $(mkdir_p) "$(DESTDIR)$(xmldir)" + @list='$(xml_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(xmlDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(xmldir)/$$f'"; \ + $(xmlDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(xmldir)/$$f"; \ + done + +uninstall-xmlDATA: + @$(NORMAL_UNINSTALL) + @list='$(xml_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(xmldir)/$$f'"; \ + rm -f "$(DESTDIR)$(xmldir)/$$f"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + $(mkdir_p) $(distdir)/../.. + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(xmldir)" "$(DESTDIR)$(xmldir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +@ENABLE_SPECS_FALSE@clean-local: +@HAVE_XMLTO_FALSE@clean-local: +clean: clean-am + +clean-am: clean-generic clean-local mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-dist_xmlDATA install-xmlDATA + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_xmlDATA uninstall-info-am \ + uninstall-xmlDATA + +.PHONY: all all-am check check-am clean clean-generic clean-local \ + distclean distclean-generic distdir dvi dvi-am html html-am \ + info info-am install install-am install-data install-data-am \ + install-dist_xmlDATA install-exec install-exec-am install-info \ + install-info-am install-man install-strip install-xmlDATA \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am uninstall uninstall-am uninstall-dist_xmlDATA \ + uninstall-info-am uninstall-xmlDATA + + +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@%.txt: %.xml $(dist_xml_DATA) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) txt $< + +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@%.html: %.xml $(dist_xml_DATA) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) xhtml-nochunks $< + +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@%.pdf: %.xml $(dist_xml_DATA) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop pdf $< + +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@%.ps: %.xml $(dist_xml_DATA) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop ps $< + +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@chunked-html: $(doc_sources) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) -o html xhtml $(doc_sources) + +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@clean-local: +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)rm -fr html/ +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/doc/xorg-docs/specs/ICCCM/icccm.ms b/doc/xorg-docs/specs/ICCCM/icccm.ms deleted file mode 100644 index e62d78fd4..000000000 --- a/doc/xorg-docs/specs/ICCCM/icccm.ms +++ /dev/null @@ -1,5721 +0,0 @@ -.\" $Xorg: icccm.ms,v 1.3 2000/08/17 19:42:08 cpqbld Exp $ -.\" $XdotOrg: xc/doc/specs/ICCCM/icccm.ms,v 1.2 2004/04/23 18:42:15 eich Exp $ -.\" Use tbl, eqn, -ms, and macros.t -.\" @(#)icccm.ms 1.50 16 Apr 1994 14:13:55 -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.ps 11 -.nr PS 11 -.hw time-stamp -.\" -.\" --- bP --- bulleted paragraph macro -.\" -.de bP -.IP \(bu 4 -.. -.\" -.\" --- cT --- centered title; centers $1, adds TOC entry unless $2 is "no" -.\" -.de cT -\\& \" filler so that the following .sp really leaves a space -.sp 1 -.ce 1 -\\s+1\\fB\\$1\\fP\\s-1 -.sp 1 -.if !'\\$2'no' \{\ -.XS \\n(PN -\\$1 -.XE -\} -.. -.\" -.\" --- dA --- double arrow string -.\" -.ds dA "\o'\(<-\(->' -\& -.sp 8 -.ce 9999 -.B -\s+2Inter-Client Communication Conventions Manual\s0 - -Version 2.0 - -X Consortium Standard - -X Version 11, Release 6.8 -.R -.ce 0 -.sp 6 -.ce 9999 -\s+1David Rosenthal\s0 -.sp 6p -\s+1Sun Microsystems, Inc.\s0 -.sp 2 -\s+1Version 2 edited by Stuart W. Marks\s0 -.sp 6p -\s+1SunSoft, Inc.\s0 -.ce 0 -.bp -\& -.ps 9 -.nr PS 9 -.sp 8 -.LP -X Window System is a trademark of The Open Group -.LP -.LP -Copyright \(co 1988, 1991, 1993, 1994 -X Consortium -.LP -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: -.LP -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. -.LP -Except as contained in this notice, the name of the X Consortium shall -not be used in advertising or otherwise to promote the sale, use or -other dealings in this Software without prior written authorization -from the X Consortium. -.LP -.sp 2 -Copyright \(co 1987, 1988, 1989, 1993, 1994 -Sun Microsystems, Inc. -.LP -Permission to use, copy, modify, and distribute this documentation -for any purpose and without fee is hereby granted, provided -that the above copyright notice and this permission -notice appear in all copies. -Sun Microsystems makes no representations about the -suitability for any purpose of the information in this document. -This documentation is provided as is without express or implied warranty. -.ps 11 -.nr PS 11 -.af PN i -.EF ''\\\\n(PN'' -.OF ''\\\\n(PN'' -.bp +4 \" the TOC is three pages long -.\" force preface onto odd page -.if e \{\ -\& -.bp -\} -.cT "Preface to Version 2.0" -.LP -The goal of the ICCCM Version 2.0 effort was to add new facilities, to fix -problems with earlier drafts, and to improve readability and -understandability, while maintaining compatibility with the earlier -versions. This document is the product of over two years of discussion among -the members of the X Consortium's \fBwmtalk\fP working group. The following -people deserve thanks for their contributions: -.LP -.Ds -.ta 3i -Gabe Beged-Dov Bill Janssen -Chan Benson Vania Joloboff -Jordan Brown Phil Karlton -Larry Cable Kaleb Keithley -Ellis Cohen Mark Manasse -Donna Converse Ralph Mor -Brian Cripe Todd Newman -Susan Dahlberg Bob Scheifler -Peter Daifuku Keith Taylor -Andrew deBlois Jim VanGilder -Clive Feather Mike Wexler -Stephen Gildea Michael Yee -Christian Jacobi -.De -.LP -It has been a privilege for me to work with this fine group of people. -.sp -Stuart W. Marks -.br -December 1993 -.br -.bp -.cT "Preface to Version 1.1" -.LP -David Rosenthal had overall architectural responsibility -for the conventions defined in this document; -he wrote most of the text and edited the document, -but its development has been a communal effort. -The details were thrashed out in meetings at the January 1988 MIT X Conference -and at the 1988 Summer Usenix conference, -and through months (and megabytes) of argument -on the -.PN wmtalk -mail alias. -Thanks are due to everyone who contributed, -and especially to the following people. -.LP -For the Selection section: -.LP -.Ds -Jerry Farrell -Phil Karlton -Loretta Guarino Reid -Mark Manasse -Bob Scheifler -.De -.LP -For the Cut-Buffer section: -.LP -.Ds -Andrew Palay -.De -.LP -For the Window and Session Manager sections: -.LP -.Ds -.ta 3i -Todd Brunhoff Matt Landau -Ellis Cohen Mark Manasse -Jim Fulton Bob Scheifler -Hania Gajewska Ralph Swick -Jordan Hubbard Mike Wexler -Kerry Kimbrough Glenn Widener -Audrey Ishizaki -.De -.LP -For the Device Color Characterization section: -.Ds -Keith Packard -.De -.LP -In addition, thanks are due to those who contributed to the public review: -.LP -.Ds -.ta 3i -Gary Combs John Irwin -Errol Crary Vania Joloboff -Nancy Cyprych John Laporta -John Diamant Ken Lee -Clive Feather Stuart Marks -Burns Fisher Alan Mimms -Richard Greco Colas Nahaboo -Tim Greenwood Mark Patrick -Kee Hinckley Steve Pitschke -Brian Holt Brad Reed -John Interrante John Thomas -.De -.bp 1 -.af PN 1 -.EH '\fBInter-Client Communication Conventions\fP''\fBX11, Release 6.8\fP' -.OH '\fBInter-Client Communication Conventions\fP''\fBX11, Release 6.8\fP' -.EF ''\fB % \fP'' -.OF ''\fB % \fP'' -.nH 1 Introduction -.LP -It was an explicit design goal of X Version 11 to specify mechanism, -not policy. -As a result, -a client that converses with the server using the protocol defined -by the \fIX Window System Protocol\fP, \fIVersion 11\fP may operate correctly -in isolation but may not coexist properly with others sharing the same server. -.LP -Being a good citizen in the X Version 11 world involves adhering to -conventions that govern inter-client communications in the following areas: -.bP -Selection mechanism -.bP -Cut buffers -.bP -Window manager -.bP -Session manager -.bP -Manipulation of shared resources -.bP -Device color characterization -.LP -This document proposes suitable conventions without attempting to enforce -any particular user interface. -To permit clients written in different languages to communicate, -these conventions are expressed solely in terms of protocol operations, -not in terms of their associated Xlib interfaces, -which are probably more familiar. -The binding of these operations to the Xlib interface for C -and to the equivalent interfaces for other languages -is the subject of other documents. -.nH 2 "Evolution of the Conventions" -.LP -In the interests of timely acceptance, -the \fIInter-Client Communication Conventions Manual\fP (ICCCM) -covers only a minimal set of required conventions. -These conventions will be added to and updated as appropriate, -based on the experiences of the X Consortium. -.LP -As far as possible, -these conventions are upwardly compatible with those in the February 25, 1988, -draft that was distributed with the X Version 11, Release 2, of the software. -In some areas, -semantic problems were discovered with those conventions, -and, thus, complete upward compatibility could not be assured. -These areas are noted in the text and are summarized in Appendix A. -.LP -In the course of developing these conventions, -a number of minor changes to the protocol were identified as desirable. -They also are identified in the text, are summarized in Appendix B, -and are offered as input to a future protocol revision process. -If and when a protocol revision incorporating these changes is undertaken, -it is anticipated that the ICCCM will need to be revised. -Because it is difficult to ensure that clients and servers are upgraded -simultaneously, -clients using the revised conventions should examine the minor protocol -revision number and be prepared to use the older conventions -when communicating with an older server. -.LP -It is expected that these revisions will ensure that clients using -the conventions appropriate to protocol minor revision \fIn\fP -will interoperate correctly with those that use the conventions -appropriate to protocol minor revision \fIn\fP + 1 if the server supports both. -.nH 2 Atoms -.LP -Many of the conventions use atoms. -To assist the reader, -the following sections attempt to amplify the description of atoms -that is provided in the protocol specification. -.nH 3 "What Are Atoms?" -.LP -At the conceptual level, -atoms are unique names that clients can use to communicate information -to each other. -They can be thought of as a bundle of octets, -like a string but without an encoding being specified. -The elements are not necessarily ASCII characters, -and no case folding happens.\** -.FS -The comment in the protocol specification for -.PN InternAtom -that ISO Latin-1 encoding should be used is in the nature of a convention; -the server treats the string as a byte sequence. -.FE -.LP -The protocol designers felt that passing these -sequences of bytes back and forth across the wire would be too costly. -Further, they thought it important that events -as they appear on the wire have a fixed size (in fact, 32 bytes) -and that because some events contain atoms, a fixed-size representation -for them was needed. -.LP -To allow a fixed-size representation, -a protocol request -.Pn ( InternAtom ) -was provided to register a byte sequence with the server, -which returns a 32-bit value (with the top three bits zero) -that maps to the byte sequence. -The inverse operator is also available -.Pn ( GetAtomName ). -.nH 3 "Predefined Atoms" -.LP -The protocol specifies a number of atoms as being predefined: -.QP -Predefined atoms are not strictly necessary -and may not be useful in all environments, -but they will eliminate many -.PN InternAtom -requests in most applications. -Note that they are predefined only in the sense of having numeric values, -not in the sense of having required semantics. -.LP -Predefined atoms are an implementation trick to avoid the cost of interning -many of the atoms that are expected to be used during the startup phase -of all applications. -The results of the -.PN Intern\%Atom -requests, which require a handshake, can be assumed \fIa priori\fP. -.LP -Language interfaces should probably cache the atom-name mappings -and get them only when required. -The CLX interface, for instance, makes no distinction between predefined atoms -and other atoms; all atoms are viewed as symbols at the interface. -However, a CLX implementation will typically keep a symbol or atom cache -and will typically initialize this cache with the predefined atoms. -.nH 3 "Naming Conventions" -.LP -The built-in atoms are composed of uppercase ASCII characters with the -logical words separated by an underscore character (_), for example, -WM_ICON_NAME. -The protocol specification recommends that atoms used -for private vendor-specific reasons should begin with an underscore. -To prevent conflicts among organizations, -additional prefixes should be chosen -(for example, _DEC_WM_DECORATION_GEOMETRY). -.LP -The names were chosen in this fashion to make it easy to use them in a -natural way within LISP. -Keyword constructors allow the programmer to specify the atoms as LISP atoms. -If the atoms were not all uppercase, -special quoting conventions would have to be used. -.nH 3 Semantics -.LP -The core protocol imposes no semantics on atoms except as they are used in -FONTPROP structures. -For further information on FONTPROP semantics, -see the \fIX Logical Font Description Conventions\fP. -.nH 3 "Name Spaces" -.LP -The protocol defines six distinct spaces in which atoms are interpreted. -Any particular atom may or may not have some valid interpretation -with respect to each of these name spaces. -.br -.ne 6 -.TS H -l l lw(3.6i). -_ -.sp 6p -.B -Space Briefly Examples -.sp 6p -_ -.sp 6p -.TH -.R -Property name Name WM_HINTS, WM_NAME, RGB_BEST_MAP, .\^.\^. -Property type Type WM_HINTS, CURSOR, RGB_COLOR_MAP, .\^.\^. -Selection name Selection PRIMARY, SECONDARY, CLIPBOARD -Selection target Target FILE_NAME, POSTSCRIPT, PIXMAP, .\^.\^. -Font property QUAD_WIDTH, POINT_SIZE, .\^.\^. -T{ -.PN ClientMessage -type -T} T{ -T} T{ -WM_SAVE_YOURSELF, _DEC_SAVE_EDITS, \&.\^.\^. -T} -.sp 6p -_ -.TE -.nH 3 "Discriminated Names" -.LP -Sometimes a protocol requires an arbitrary number of similar -objects that need unique names (usually because the objects are created -dynamically, so that names cannot be invented in advance). For example, a -colormap-generating program might use the selection mechanism to offer -colormaps for each screen and so needs a selection name for each screen. -Such names are called \*Qdiscriminated names\*U and are discriminated by -some entity. This entity can be: -.DS - A screen - An X resource (a window, a colormap, a visual, etc.) - A client -.DE -.LP -If it is only necessary to generate a fixed set of names for each value -of the discriminating entity, then the discriminated names are formed by -suffixing an ordinary name according to the value of the entity. -.LP -If \fIname\fP is a descriptive portion for the name, \fId\fP is a decimal -number with no leading zeroes, and \fIx\fP is a hexadecimal number with -exactly 8 digits, and using uppercase letters, then such discriminated names -shall have the form: -.br -.ne 6 -.TS -lB lB lB -l l l . -_ -.sp 6p -Name Discriminated by Form Example -.sp 6p -_ -.sp 6p -screen number \fIname\fP_S\fId\fP WM_COMMS_S2 -X resource \fIname\fP_R\fIx\fP GROUP_LEADER_R1234ABCD -.sp 6p -_ -.TE -.LP -To discriminate a name by client, use an X resource ID created by that -client. This resource can be of any type. -.LP -Sometimes it is simply necessary to generate a unique set of names (for -example, for the properties on a window used by a MULTIPLE selection). -These names should have the form: -.DS -.ta 2i -U\fId\fP (e.g., U0 U1 U2 U3 .\^.\^.) -.DE -.LP -if the names stand totally alone, and the form: -.DS -.ta 2i -\fIname\fP_U\fId\fP (e.g., FOO_U0 BAR_U0 FOO_U1 BAR_U1 .\^.\^.) -.DE -.LP -if they come in sets (here there are two sets, named \*QFOO\*U and -\*QBAR\*U). The stand-alone U\fId\fP form should be used only if it is -clear that the module using it has complete control over the relevant -namespace or has the active cooperation of all other entities that might -also use these names. (Naming properties on a window created specifically -for a particular selection is such a use; naming properties on the root -window is almost certainly not.) -.LP -In a particularly difficult case, it might be necessary to combine both -forms of discrimination. If this happens, the U form should come after -the other form, thus: -.DS - FOO_R12345678_U23 -.DE -.NT Rationale -Existing protocols will not be changed to use these naming conventions, -because doing so will cause too much disruption. However, it is expected -that future protocols \(em both standard and private \(em will use these -conventions. -.NE -.nH 1 "Peer-to-Peer Communication by Means of Selections" -.LP -Selections are the primary mechanism that X Version 11 defines -for the exchange of information between clients, -for example, by cutting and pasting between windows. -Note that there can be an arbitrary number of selections -(each named by an atom) and that they are global to the server. -Section 2.6 discusses the choice of an atom. -Each selection is owned by a client and is attached to a window. -.LP -Selections communicate between an owner and a requestor. -The owner has the data representing the value of its selection, -and the requestor receives it. -A requestor wishing to obtain the value of a selection provides the following: -.bP -The name of the selection -.bP -The name of a property -.bP -A window -.bP -The atom representing the data type required -.bP -Optionally, some parameters for the request -.LP -If the selection is currently owned, -the owner receives an event and is expected to do the following: -.bP -Convert the contents of the selection to the requested data type -.bP -Place this data in the named property on the named window -.bP -Send the requestor an event to let it know the property is available -.LP -Clients are strongly encouraged to use this mechanism. -In particular, -displaying text in a permanent window without providing the ability -to select and convert it into a string is definitely considered antisocial. -.LP -Note that all data transferred between an owner and a requestor must usually -go by means of the server in an X Version 11 environment. -A client cannot assume that another client can open the same files -or even communicate directly. -The other client may be talking to the server by means of -a completely different networking mechanism (for example, one client might -be DECnet and the other TCP/IP). -Thus, passing indirect references to data -(such as, file names, host names, and port numbers) -is permitted only if both clients specifically agree. -.nH 2 "Acquiring Selection Ownership" -.LP -A client wishing to acquire ownership of a particular selection -should call -.PN SetSelectionOwner, -which is defined as follows: -.LP -.sM -.IN "SetSelectionOwner" "" "@DEF@" -.PN SetSelectionOwner -.IP "" .2i -\fIselection\fP\^: ATOM -.br -\fIowner\fP\^: WINDOW or -.PN None -.br -\fItime\fP\^: TIMESTAMP or -.PN CurrentTime -.LP -.eM -.LP -The client should set the specified selection to the atom that represents -the selection, -set the specified owner to some window that the client created, -and set the specified time to some time between the current last-change time -of the selection concerned and the current server time. -This time value usually will be obtained from the timestamp of the event -that triggers the acquisition of the selection. -Clients should not set the time -value to -.PN CurrentTime , -because if they do so, they have no way of finding -when they gained ownership of the selection. -Clients must use a window they created so that requestors -can route events to the owner of the selection.\** -.FS -At present, no part of the protocol requires requestors -to send events to the owner of a selection. -This restriction is imposed to prepare for possible future extensions. -.FE -.NT Convention -Clients attempting to acquire a selection must set the time value of the -.PN Set\%Selection\%Owner -request to the timestamp of the event triggering the acquisition attempt, -not to -.PN CurrentTime . -A zero-length append to a property is a way to obtain a timestamp for -this purpose; -the timestamp is in the corresponding -.PN Property\%Notify -event. -.NE -.LP -If the time in the -.PN SetSelectionOwner -request is in the future relative to the server's current time -or is in the past relative to the last time the specified selection -changed hands, the -.PN SetSelectionOwner -request appears to the client to succeed, -but ownership is not actually transferred. -.LP -Because clients cannot name other clients directly, -the specified owner window is used to refer to the owning client -in the replies to -.PN GetSelectionOwner , -in -.PN SelectionRequest -and -.PN SelectionClear -events, and possibly as a place to put properties describing the selection -in question. -To discover the owner of a particular selection, -a client should invoke -.PN GetSelectionOwner , -which is defined as follows: -.LP -.sM -.IN "GetSelectionOwner" "" "@DEF@" -.PN GetSelectionOwner -.IP "" .2i -\fIselection\fP\^: ATOM -.LP -\(-> -.IP "" .2i -owner: WINDOW or -.PN None -.LP -.eM -.NT Convention -Clients are expected to provide some visible confirmation -of selection ownership. -To make this feedback reliable, -a client must perform a sequence like the following: -.sp -.Ds 0 -SetSelectionOwner(selection=PRIMARY, owner=Window, time=timestamp) -owner = GetSelectionOwner(selection=PRIMARY) -if (owner != Window) Failure -.De -.NE -.LP -If the -.PN SetSelectionOwner -request succeeds (not merely appears to succeed), -the client that issues it is recorded by the server as being the owner -of the selection for the time period starting at the specified time. -.nH 2 "Responsibilities of the Selection Owner" -.LP -When a requestor wants the value of a selection, -the owner receives a -.PN SelectionRequest -event, which is defined as follows: -.LP -.sM -.IN "SelectionRequest" "" "@DEF@" -.PN SelectionRequest -.IP "" .2i -\fIowner\fP\^: WINDOW -.br -\fIselection\fP\^: ATOM -.br -\fItarget\fP\^: ATOM -.br -\fIproperty\fP\^: ATOM or -.PN None -.br -\fIrequestor\fP\^: WINDOW -.br -\fItime\fP\^: TIMESTAMP or -.PN CurrentTime -.LP -.eM -.LP -The specified owner and selection will be the values that were specified in -the -.PN SetSelection\%Owner -request. -The owner should compare the timestamp with the period -it has owned the selection and, if the time is outside, -refuse the -.PN SelectionRequest -by sending the requestor window a -.PN SelectionNotify -event with the property set to -.PN None -(by means of a -.PN SendEvent -request with an empty event mask). -.LP -More advanced selection owners are free to maintain a history -of the value of the selection and to respond to requests for the -value of the selection during periods they owned it -even though they do not own it now. -.LP -If the specified property is -.PN None , -the requestor is an obsolete client. -Owners are encouraged to support these clients by using the specified target -atom as the property name to be used for the reply. -.LP -Otherwise, -the owner should use the target to decide the form into which the selection -should be converted. -Some targets may be defined such that requestors can pass parameters -along with the request. The owner will find these parameters in the -property named in the selection request. The type, format, and -contents of this property are dependent upon the definition of the -target. If the target is not defined to have parameters, the owner -should ignore the property if it is present. -If the selection cannot be converted -into a form based on the target (and parameters, if any), -the owner should refuse the -.PN Selection\%Request -as previously described. -.LP -If the specified property is not -.PN None , -the owner should place the data resulting from converting the selection -into the specified property on the requestor window -and should set the property's type to some appropriate value, -which need not be the same as the specified target. -.NT Convention -All properties used to reply to -.PN SelectionRequest -events must be placed on the requestor window. -.NE -.LP -In either case, -if the data comprising the selection cannot be stored on the requestor window -(for example, because the server cannot provide sufficient memory), -the owner must refuse the -.PN SelectionRequest , -as previously described. -See also section 2.5. -.LP -If the property is successfully stored, -the owner should acknowledge the successful conversion -by sending the requestor window a -.PN SelectionNotify -event (by means of a -.PN SendEvent -request with an empty mask). -.PN SelectionNotify -is defined as follows: -.LP -.sM -.IN "SelectionNotify" "" "@DEF@" -.PN SelectionNotify -.IP "" .2i -\fIrequestor\fP\^: WINDOW -.br -\fIselection\fP, \fItarget\fP\^: ATOM -.br -\fIproperty\fP\^: ATOM or -.PN None -.br -\fItime\fP\^: TIMESTAMP or -.PN CurrentTime -.LP -.eM -.LP -The owner should set the specified selection, target, time, -and property arguments to the values received in the -.PN SelectionRequest -event. -(Note that setting the property argument to -.PN None -indicates that the conversion requested could not be made.) -.NT Convention -The selection, target, time, and property arguments in the -.PN SelectionNotify -event should be set to the values received in the -.PN SelectionRequest -event. -.NE -.LP -If the owner receives more than one -.PN Selection\%Request -event with the same requestor, selection, target, and timestamp it must -respond to them in the same order in which they were received. -.NT Rationale -It is possible for a requestor to have multiple outstanding requests that -use the same requestor window, selection, target, and timestamp, and that -differ only in the property. If this occurs, and one of the conversion -requests fails, the resulting -.PN Selection\%Notify -event will have its property argument set to -.PN None . -This may make it impossible for the requestor to determine which conversion -request had failed, unless the requests are responded to in order. -.NE -.LP -The data stored in the property must eventually be deleted. -A convention is needed to assign the responsibility for doing so. -.NT Convention -Selection requestors are responsible for deleting properties whose -names they receive in -.PN SelectionNotify -events (see section 2.4) or in properties with type MULTIPLE. -.NE -.LP -A selection owner will often need confirmation that the data comprising the -selection has actually been transferred. -(For example, -if the operation has side effects on the owner's internal data structures, -these should not take place until the requestor has indicated -that it has successfully received the data.) -Owners should express interest in -.PN PropertyNotify -events for the specified requestor window -and wait until the property in the -.PN SelectionNotify -event has been deleted before assuming that the selection data has been -transferred. For the MULTIPLE request, if the different conversions require -separate confirmation, the selection owner can also watch for the deletion -of the individual properties named in the property in the -.PN Selection\%Notify -event. -.LP -When some other client acquires a selection, -the previous owner receives a -.PN SelectionClear -event, which is defined as follows: -.LP -.sM -.IN "SelectionClear" "" "@DEF@" -.PN SelectionClear -.IP "" .2i -\fIowner\fP\^: WINDOW -.br -\fIselection\fP\^: ATOM -.br -\fItime\fP\^: TIMESTAMP -.LP -.eM -.LP -The timestamp argument is the time at which the ownership changed hands, -and the owner argument is the window the previous owner specified in its -.PN SetSelectionOwner -request. -.LP -If an owner loses ownership while it has a transfer in progress (that is, -before it receives notification that the requestor has received all the data), -it must continue to service the ongoing transfer until it is complete. -.LP -If the selection value completely changes, but the owner happens -to be the same client (for example, selecting a totally different -piece of text in the same \fBxterm\fP as before), then the client should -reacquire the selection ownership as if it were not the owner, -providing a new timestamp. If the selection value is modified, but -can still reasonably be viewed as the same selected object,\** the -owner should take no action. -.FS -The division between these two cases is a matter of judgment -on the part of the software developer. -.FE -.nH 2 "Giving Up Selection Ownership" -.LP -Clients may either give up selection ownership voluntarily -or lose it forcibly as the result of some other client's actions. -.nH 3 "Voluntarily Giving Up Selection Ownership" -.LP -To relinquish ownership of a selection voluntarily, -a client should execute a -.PN SetSelection\%Owner -request for that selection atom, with owner specified as -.PN None -and the time specified as the timestamp that was used to acquire the selection. -.LP -Alternatively, -the client may destroy the window used as the owner value of the -.PN SetSelection\%Owner -request, or the client may terminate. -In both cases, -the ownership of the selection involved will revert to -.PN None . -.nH 3 "Forcibly Giving Up Selection Ownership" -.LP -If a client gives up ownership of a selection -or if some other client executes a -.PN SetSelection\%Owner -for it and thus reassigns it forcibly, -the previous owner will receive a -.PN Selection\%Clear -event. For the definition of a -.PN Selection\%Clear -event, see section 2.2. -.LP -The timestamp is the time the selection changed hands. -The specified owner is the window that was specified by the current owner -in its -.PN SetSelectionOwner -request. -.nH 2 "Requesting a Selection" -.LP -A client that wishes to obtain the value of a selection in a particular -form (the requestor) issues a -.PN ConvertSelection -request, which is defined as follows: -.LP -.sM -.IN "ConvertSelection" "" "@DEF@" -.PN ConvertSelection -.IP "" .2i -\fIselection\fP, \fItarget\fP\^: ATOM -.br -\fIproperty\fP\^: ATOM or -.PN None -.br -\fIrequestor\fP\^: WINDOW -.br -\fItime\fP\^: TIMESTAMP or -.PN CurrentTime -.LP -.eM -.LP -The selection argument specifies the particular selection involved, -and the target argument specifies the required form of the information. -For information about the choice of suitable atoms to use, -see section 2.6. -The requestor should set the requestor argument to a window that it created; -the owner will place the reply property there. -The requestor should set the time argument to the timestamp on the event -that triggered the request for the selection value. -Note that clients should not specify -.PN CurrentTime . -.NT Convention -Clients should not use -.PN CurrentTime -for the time argument of a -.PN ConvertSelection -request. -Instead, they should use the timestamp of the event that caused the request -to be made. -.NE -.LP -The requestor should set the property argument to the name of a property -that the owner can use to report the value of the selection. -Requestors should ensure that the named property does not exist -on the window before issuing the -.PN Convert\%Selection -request.\** The exception to this rule is when the requestor intends to pass -parameters with the request (see below). -.NT Rationale -It is necessary for requestors to delete the property before issuing the -request so that the target can later be extended to take parameters without -introducing an incompatibility. Also note that the requestor of a selection -need not know the client that owns the selection nor the window on which -the selection was acquired. -.NE -.FS -This requirement is new in version 2.0, and, in general, existing -clients do not conform to this requirement. To prevent these clients -from breaking, no existing targets should be extended to take -parameters until sufficient time has passed for clients to be updated. -Note that the MULTIPLE target was defined to take parameters in version -1.0 and its definition is not changing. There is thus no conformance -problem with MULTIPLE. -.FE -.LP -Some targets may be defined such that requestors can pass parameters -along with the request. If the requestor wishes to provide parameters -to a request, they should be placed in the specified property on the -requestor window before the requestor issues the -.PN Convert\%Selection -request, and this property should be named in the request. -.LP -Some targets may be defined so that parameters are optional. If no -parameters are to be supplied with the request of such a target, the -requestor must ensure that the property does not exist before issuing -the -.PN Convert\%Selection -request. -.LP -The protocol allows the property field to be set to -.PN None , -in which case the owner is supposed to choose a property name. -However, it is difficult for the owner to make this choice safely. -.NT Conventions -.IP 1. 5 -Requestors should not use -.PN None -for the property argument of a -.PN ConvertSelection -request. -.IP 2. 5 -Owners receiving -.PN ConvertSelection -requests with a property argument of -.PN None -are talking to an obsolete client. -They should choose the target atom as the property name to be used -for the reply. -.NE -.LP -The result of the -.PN ConvertSelection -request is that a -.PN SelectionNotify -event will be received. -For the definition of a -.PN SelectionNotify -event, see section 2.2. -.LP -The requestor, selection, time, and target arguments will be the same -as those on the -.PN ConvertSelection -request. -.LP -If the property argument is -.PN None , -the conversion has been refused. -This can mean either that there is no owner for the selection, -that the owner does not support the conversion implied by the target, -or that the server did not have sufficient space to accommodate the data. -.LP -If the property argument is not -.PN None , -then that property will exist on the requestor window. -The value of the selection can be retrieved from this -property by using the -.PN GetProperty -request, which is defined as follows: -.LP -.sM -.IN "GetProperty" "" "@DEF@" -.PN GetProperty -.IP "" .2i -\fIwindow\fP\^: WINDOW -.br -\fIproperty\fP\^: ATOM -.br -\fItype\fP\^: ATOM or -.PN AnyPropertyType -.br -\fIlong-offset\fP, \fIlong-length\fP\^: CARD32 -.br -\fIdelete\fP\^: BOOL -.LP -\(-> -.IP "" .2i -type: ATOM or -.PN None -.br -format: {0, 8, 16, 32} -.br -bytes-after: CARD32 -.br -value: LISTofINT8 or LISTofINT16 or LISTofINT32 -.LP -.eM -.LP -When using -.PN GetProperty -to retrieve the value of a selection, -the property argument should be set to the corresponding value in the -.PN SelectionNotify -event. -Because the requestor has no way of knowing beforehand what type -the selection owner will use, -the type argument should be set to -.PN AnyPropertyType . -Several -.PN GetProperty -requests may be needed to retrieve all the data in the selection; -each should set the long-offset argument to the amount of data received so far, -and the size argument to some reasonable buffer size (see section 2.5). -If the returned value of bytes-after is zero, -the whole property has been transferred. -.LP -Once all the data in the selection has been retrieved -(which may require getting the values of several properties \(em -see section 2.7), -the requestor should delete the property in the -.PN SelectionNotify -request by using a -.PN GetProperty -request with the delete argument set to -.PN True . -As previously discussed, -the owner has no way of knowing when the data has been -transferred to the requestor unless the property is removed. -.NT Convention -The requestor must delete the property named in the -.PN SelectionNotify -once all the data has been retrieved. -The requestor should invoke either -.PN DeleteProperty -or -.PN GetProperty (delete==True) -after it has successfully retrieved all the data in the selection. -For further information, -see section 2.5. -.NE -.nH 2 "Large Data Transfers" -.LP -Selections can get large, which poses two problems: -.bP -Transferring large amounts of data to the server is expensive. -.bP -All servers will have limits on the amount of data that can be stored -in properties. -Exceeding this limit will result in an -.PN Alloc -error on the -.PN ChangeProperty -request that the selection owner uses to store the data. -.LP -The problem of limited server resources is addressed by the following -conventions: -.NT Conventions -.IP 1. 5 -Selection owners should transfer the data describing a large selection -(relative to the maximum-request-size they received -in the connection handshake) using the INCR property mechanism -(see section 2.7.2). -.IP 2. 5 -Any client using -.PN SetSelectionOwner -to acquire selection ownership should arrange to process -.PN Alloc -errors in property change requests. -For clients using Xlib, -this involves using the -.PN XSetErrorHandler -function to override the default handler. -.IP 3. 5 -A selection owner must confirm that no -.PN Alloc -error occurred while storing the properties for a selection -before replying with a confirming -.PN SelectionNotify -event. -.IP 4. 5 -When storing large amounts of data (relative to maximum-request-size), -clients should use a sequence of -.PN ChangeProperty (mode==Append) -requests for reasonable quantities of data. -This avoids locking servers up and limits the waste of data an -.PN Alloc -error would cause. -.IP 5. 5 -If an -.PN Alloc -error occurs during the storing of the selection data, -all properties stored for this selection should be deleted -and the -.PN ConvertSelection -request should be refused (see section 2.2). -.IP 6. 5 -To avoid locking servers up for inordinate lengths of time, -requestors retrieving large quantities of data from a property -should perform a series of -.PN GetProperty -requests, each asking for a reasonable amount of data. -.NE -.NT "Advice to Implementors" -Single-threaded servers should take care to avoid locking up during large -data transfers. -.NE -.nH 2 "Use of Selection Atoms" -.LP -Defining a new atom consumes resources in the server -that are not released until the server reinitializes. -Thus, reducing the need for newly minted atoms is an important goal -for the use of the selection atoms. -.nH 3 "Selection Atoms" -.LP -There can be an arbitrary number of selections, each named by an atom. -To conform with the inter-client conventions, however, -clients need deal with only these three selections: -.bP -PRIMARY -.bP -SECONDARY -.bP -CLIPBOARD -.LP -Other selections may be used freely for private communication among -related groups of clients. -.nH 4 "The PRIMARY Selection" -.LP -The selection named by the atom PRIMARY is used for all commands -that take only a single argument and is the principal means of communication -between clients that use the selection mechanism. -.nH 4 "The SECONDARY Selection" -.LP -The selection named by the atom SECONDARY is used: -.bP -As the second argument to commands taking two arguments -(for example, \*Qexchange primary and secondary selections\*U) -.bP -As a means of obtaining data when there is a primary selection -and the user does not want to disturb it -.nH 4 "The CLIPBOARD Selection" -.LP -The selection named by the atom CLIPBOARD is used to hold data -that is being transferred between clients, -that is, data that usually is being cut and then pasted -or copied and then pasted. -Whenever a client wants to transfer data to the clipboard: -.bP -It should assert ownership of the CLIPBOARD. -.bP -If it succeeds in acquiring ownership, -it should be prepared to respond to a request for the contents of the CLIPBOARD -in the usual way (retaining the data to be able to return it). -The request may be generated by the clipboard client described below. -.bP -If it fails to acquire ownership, -a cutting client should not actually perform the cut or provide feedback -that would suggest that it has actually transferred data to the clipboard. -.LP -The owner should repeat this process whenever the data to be transferred -would change. -.LP -Clients wanting to paste data from the clipboard should request -the contents of the CLIPBOARD selection in the usual way. -.LP -Except while a client is actually deleting or copying data, -the owner of the CLIPBOARD selection may be a single, special client -implemented for the purpose. -This client maintains the content of the clipboard up-to-date -and responds to requests for data from the clipboard as follows: -.bP -It should assert ownership of the CLIPBOARD selection -and reassert it any time the clipboard data changes. -.bP -If it loses the selection (because another client has some new data -for the clipboard), -it should: -.RS -.IP \- 5 -Obtain the contents of the selection from the new owner by using the timestamp -in the -.PN SelectionClear -event. -.IP \- 5 -Attempt to reassert ownership of the CLIPBOARD selection -by using the same timestamp. -.IP \- 5 -Restart the process using a newly acquired timestamp if this attempt fails. -This timestamp should be obtained by asking the current owner of the -CLIPBOARD selection to convert it to a TIMESTAMP. -If this conversion is refused or if the same timestamp is received twice, -the clipboard client should acquire a fresh timestamp in the -usual way (for example by a zero-length append to a property). -.RE -.bP -It should respond to requests for the CLIPBOARD contents in the usual way. -.LP -A special CLIPBOARD client is not necessary. -The protocol used by the cutting client and the pasting client -is the same whether the CLIPBOARD client is running or not. -The reasons for running the special client include: -.bP -Stability \- If the cutting client were to crash or terminate, -the clipboard value would still be available. -.bP -Feedback \- The clipboard client can display the contents of the clipboard. -.bP -Simplicity \- A client deleting data does not have to retain it for so long, -thus reducing the chance of race conditions causing problems. -.LP -The reasons not to run the clipboard client include: -.bP -Performance \- Data is transferred only if it is actually required -(that is, when some client actually wants the data). -.bP -Flexibility \- The clipboard data may be available as more than one target. -.nH 3 "Target Atoms" -.LP -The atom that a requestor supplies as the target of a -.PN ConvertSelection -request determines the form of the data supplied. -The set of such atoms is extensible, -but a generally accepted base set of target atoms is needed. -As a starting point for this, -the following table contains those that have been suggested so far. -.br -.ne 6 -.\" This table has very tricky formatting. Several targets are too long to -.\" fit, so the table format needs to change around them. If the table -.\" format changes, it will need to be changed in several places. There are -.\" also two footnotes in this table, but the footnote text can't be -.\" embedded in the table. This means that the auto-numbering needs to be -.\" dinked around with after the end of the table. -.TS H -lw(1.8i) lw(1i) lw(3i) . -_ -.sp 6p -.B -Atom Type Data Received -.R -.sp 6p -_ -.sp 6p -.TH -.T& -l s s . -ADOBE_PORTABLE_DOCUMENT_FORMAT -.T& -lw(1.8i) lw(1i) lw(3i) . - STRING T{ -[1] -T} -.sp 6p -APPLE_PICT APPLE_PICT T{ -[2] -T} -BACKGROUND PIXEL A list of pixel values -BITMAP BITMAP A list of bitmap IDs -CHARACTER_POSITION SPAN T{ -The start and end of the selection in bytes -T} -CLASS TEXT (see section 4.1.2.5) -CLIENT_WINDOW WINDOW T{ -Any top-level window owned by the selection owner -T} -COLORMAP COLORMAP A list of colormap IDs -COLUMN_NUMBER SPAN T{ -The start and end column numbers -T} -COMPOUND_TEXT COMPOUND_TEXT Compound Text -DELETE NULL (see section 2.6.3.1) -DRAWABLE DRAWABLE A list of drawable IDs -.sp 6p -.T& -l s s . -ENCAPSULATED_POSTSCRIPT -.T& -lw(1.8i) lw(1i) lw(3i) . - STRING T{ -[3], Appendix H\|\** -T} -.sp 6p -.T& -l s s . -ENCAPSULATED_POSTSCRIPT_INTERCHANGE -.T& -lw(1.8i) lw(1i) lw(3i) . - STRING T{ -[3], Appendix H -T} -.sp 6p -FILE_NAME TEXT The full path name of a file -FOREGROUND PIXEL T{ -A list of pixel values -T} -HOST_NAME TEXT (see section 4.1.2.9) -INSERT_PROPERTY NULL (see section 2.6.3.3) -INSERT_SELECTION NULL (see section 2.6.3.2) -LENGTH INTEGER T{ -The number of bytes in the selection\|\** -T} -LINE_NUMBER SPAN T{ -The start and end line numbers -T} -LIST_LENGTH INTEGER T{ -The number of disjoint parts of the selection -T} -MODULE TEXT T{ -The name of the selected procedure -T} -MULTIPLE ATOM_PAIR T{ -(see the discussion that follows) -T} -NAME TEXT (see section 4.1.2.1) -ODIF TEXT T{ -ISO Office Document Interchange Format -T} -OWNER_OS TEXT T{ -The operating system of the owner client -T} -PIXMAP T{ -PIXMAP\|\** -T} T{ -A list of pixmap IDs -T} -POSTSCRIPT STRING T{ -[3] -T} -PROCEDURE TEXT T{ -The name of the selected procedure -T} -PROCESS INTEGER, TEXT T{ -The process ID of the owner -T} -STRING STRING ISO Latin-1 (+TAB+NEWLINE) text -TARGETS ATOM A list of valid target atoms -TASK INTEGER, TEXT T{ -The task ID of the owner -T} -TEXT TEXT T{ -The text in the owner's choice of encoding -T} -TIMESTAMP INTEGER T{ -The timestamp used to acquire the selection -T} -USER TEXT T{ -The name of the user running the owner -T} -.sp 6p -_ -.TE -.\" Conditionalized on groff because -.\" groff keeps track of footnotes and fn references separately, -.\" so resetting isn't necessary (and referencing \n* gives a warning). -.if !\n(GS .nr * \n*-3 \" decrement by the number of footnotes in the table -.if 0 \{\ -HACK! There are several footnotes in the table above, each marked with the -construct "\**". The actual footnote text is here, because I haven't found -a way to place it within the table itself. This causes a numbering problem, -because each \** increments the footnote counter (number register *) and the -FS macro uses its current value. To get around this, we decrement the * -register by the number of footnotes in the table. Then, before calling each -FS macro, we increment the register. - -Also note that footnotes must appear within the T{ T} construct in tables. -If they don't, strange numbering problems will result, probably as a result -of multiple evaluation. -\} -.\" These footnotes are in the wrong order because Sun tbl numbers the -.\" footnote references wrong in the above table. Thus this doesn't -.\" do the right thing with gtbl, which gets the order right. -.if !\n(GS .nr * +1 -.FS -Earlier versions of this document erroneously specified that conversion of -the PIXMAP target returns a property of type DRAWABLE instead of PIXMAP. -Implementors should be aware of this and may want to support the DRAWABLE -type as well to allow for compatibility with older clients. -.FE -.if !\n(GS .nr * +1 -.FS -The targets ENCAPSULATED_POSTSCRIPT and ENCAPSULATED_POSTSCRIPT_INTERCHANGE -are equivalent to the targets _ADOBE_EPS and _ADOBE_EPSI (respectively) that -appear in the selection targets registry. The _ADOBE_ targets are -deprecated, but clients are encouraged to continue to support them for -backward compatibility. -.FE -.if !\n(GS .nr * +1 -.FS -This definition is ambiguous, as the selection may be converted into any of -several targets that may return differing amounts of data. The requestor -has no way of knowing which, if any, of these targets corresponds to the -result of LENGTH. Clients are advised that no guarantees can be made about -the result of a conversion to LENGTH; its use is thus deprecated. -.FE -.LP -References: -.IP [1] 5 -Adobe Systems, Incorporated. -.I -Portable Document Format Reference Manual. -.R -Reading, MA, Addison-Wesley, ISBN 0-201-62628-4. -.IP [2] 5 -Apple Computer, Incorporated. -.I -Inside Macintosh, Volume V. -.R -Chapter 4, \*QColor QuickDraw,\*U Color \%Picture Format. -ISBN 0-201-17719-6. -.IP [3] 5 -Adobe Systems, Incorporated. -.I -PostScript Language Reference Manual. -.R -Reading, MA, Addison-Wesley, ISBN 0-201-18127-4. -.LP -It is expected that this table will grow over time. -.LP -Selection owners are required to support the following targets. -All other targets are optional. -.bP -TARGETS \- The owner should return a list of atoms that represent -the targets for which an attempt to convert the current selection -will succeed (barring unforseeable problems such as -.PN Alloc -errors). -This list should include all the required atoms. -.bP -MULTIPLE \- The MULTIPLE target atom is valid only when a property -is specified on the -.PN ConvertSelection -request. -If the property argument in the -.PN SelectionRequest -event is -.PN None -and the target is MULTIPLE, -it should be refused. -.IP -When a selection owner receives a -.PN SelectionRequest (target==MULTIPLE) -request, -the contents of the property named in the request will be a list of atom pairs: -the first atom naming a target and the second naming a property -.Pn ( None -is not valid here). -The effect should be as if the owner had received a sequence of -.PN SelectionRequest -events (one for each atom pair) except that: -.RS -.IP \- 5 -The owner should reply with a -.PN SelectionNotify -only when all the requested conversions have been performed. -.IP \- 5 -If the owner fails to convert the target named by an atom -in the MULTIPLE property, -it should replace that atom in the property with -.PN None . -.RE -.NT Convention -The entries in a MULTIPLE property must be processed in the order -they appear in the property. -For further information, -see section 2.6.3. -.NE -.RS -.LP -The requestor should delete each individual property when it has -copied the data from that conversion, and the property specified in the -MULTIPLE request when it has copied all the data. -.LP -The requests are otherwise to be processed independently, and they -should succeed or fail independently. The MULTIPLE target is an -optimization that reduces the amount of protocol traffic between the -owner and the requestor; it is not a transaction mechanism. For -example, a client may issue a MULTIPLE request with two targets: a data -target and the DELETE target. The DELETE target will still be processed -even if the conversion of the data target fails. -.RE -.bP -TIMESTAMP \- To avoid some race conditions, -it is important that requestors be able to discover the timestamp -the owner used to acquire ownership. -Until and unless the protocol is changed so that a -.PN GetSelectionOwner -request returns the timestamp used to acquire ownership, -selection owners must support conversion to TIMESTAMP, -returning the timestamp they used to obtain the selection. -.nH 3 "Selection Targets with Side Effects" -.LP -Some targets (for example, DELETE) have side effects. -To render these targets unambiguous, -the entries in a MULTIPLE property must be processed in the order -that they appear in the property. -.LP -In general, -targets with side effects will return no information, -that is, they will return a zero length property of type NULL. -(Type NULL means the result of -.PN InternAtom -on the string \*QNULL\*U, not the value zero.) -In all cases, -the requested side effect must be performed before the conversion is accepted. -If the requested side effect cannot be performed, -the corresponding conversion request must be refused. -.NT Conventions -.IP 1. 5 -Targets with side effects should return no information -(that is, they should have a zero-length property of type NULL). -.IP 2. 5 -The side effect of a target must be performed before the conversion is accepted. -.IP 3. 5 -If the side effect of a target cannot be performed, -the corresponding conversion request must be refused. -.NE -.NT Problem -The need to delay responding to the -.PN ConvertSelection -request until a further conversion has succeeded poses problems -for the Intrinsics interface that need to be addressed. -.NE -.LP -These side-effect targets are used to implement operations such as -\*Qexchange PRIMARY and SECONDARY selections.\*U -.nH 4 "DELETE" -.LP -When the owner of a selection receives a request to convert it to DELETE, -it should delete the corresponding selection -(whatever doing so means for its internal data structures) -and return a zero-length property of type NULL if the deletion was successful. -.nH 4 "INSERT_SELECTION" -.LP -When the owner of a selection receives a request to convert it to -INSERT_SELECTION, -the property named will be of type ATOM_PAIR. -The first atom will name a selection, -and the second will name a target. -The owner should use the selection mechanism to convert the named selection -into the named target and should insert it at the location of the selection -for which it got the INSERT_SELECTION request -(whatever doing so means for its internal data structures). -.nH 4 "INSERT_PROPERTY" -.LP -When the owner of a selection receives a request to convert it to -INSERT_PROPERTY, -it should insert the property named in the request at the location -of the selection for which it got the INSERT_SELECTION request -(whatever doing so means for its internal data structures). -.nH 2 "Use of Selection Properties" -.LP -The names of the properties used in selection data transfer are chosen by -the requestor. -The use of -.PN None -property fields in -.PN ConvertSelection -requests (which request the selection owner to choose a name) -is not permitted by these conventions. -.LP -The selection owner always chooses the type of the property -in the selection data transfer. -Some types have special semantics assigned by convention, -and these are reviewed in the following sections. -.LP -In all cases, -a request for conversion to a target should return either -a property of one of the types listed in the previous table for that target -or a property of type INCR and then a property of one of the listed types. -.LP -Certain selection properties may contain resource IDs. The selection owner -should ensure that the resource is not destroyed and that its contents are -not changed until after the selection transfer is complete. Requestors that -rely on the existence or on the proper contents of a resource must operate -on the resource (for example, by copying the contents of a pixmap) before -deleting the selection property. -.LP -The selection owner will return a list of zero or more items -of the type indicated by the property type. -In general, -the number of items in the list will correspond to the number -of disjoint parts of the selection. -Some targets (for example, side-effect targets) will be of length zero -irrespective of the number of disjoint selection parts. -In the case of fixed-size items, -the requestor may determine the number of items by the property size. -Selection property types are listed in the table below. -For variable-length items such as text, -the separators are also listed. -.br -.ne 6 -.TS H -l c l. -_ -.sp 6p -.B -Type Atom Format Separator -.R -.sp 6p -_ -.sp 6p -.TH -APPLE_PICT 8 T{ -Self-sizing -T} -ATOM 32 Fixed-size -ATOM_PAIR 32 Fixed-size -BITMAP 32 Fixed-size -C_STRING 8 T{ -Zero -T} -COLORMAP 32 T{ -Fixed-size -T} -COMPOUND_TEXT 8 Zero -DRAWABLE 32 Fixed-size -INCR 32 Fixed-size -INTEGER 32 Fixed-size -PIXEL 32 T{ -Fixed-size -T} -PIXMAP 32 Fixed-size -SPAN 32 Fixed-size -STRING 8 Zero -WINDOW 32 Fixed-size -.sp 6p -_ -.TE -.LP -It is expected that this table will grow over time. -.nH 3 "TEXT Properties" -.LP -In general, -the encoding for the characters in a text string property is specified -by its type. -It is highly desirable for there to be a simple, invertible mapping -between string property types and any character set names -embedded within font names in any font naming standard adopted by the -Consortium. -.LP -The atom TEXT is a polymorphic target. -Requesting conversion into TEXT will convert into whatever encoding -is convenient for the owner. -The encoding chosen will be indicated by the type of the property returned. -TEXT is not defined as a type; -it will never be the returned type from a selection conversion request. -.LP -If the requestor wants the owner to return the contents of the selection -in a specific encoding, -it should request conversion into the name of that encoding. -.LP -In the table in section 2.6.2, -the word TEXT (in the Type column) is used to indicate one -of the registered encoding names. -The type would not actually be TEXT; -it would be STRING or some other ATOM naming the encoding chosen by the owner. -.LP -STRING as a type or a target specifies the ISO Latin-1 character set plus the -control characters TAB (octal 11) and NEWLINE (octal 12). -The spacing interpretation of TAB is context dependent. -Other ASCII control characters are explicitly not included in STRING -at the present time. -.LP -COMPOUND_TEXT as a type or a target specifies the Compound Text interchange -format; see the \fICompound Text Encoding\fP. -.LP -There are some text objects where the source or intended user, as the -case may be, does not have a specific character set for the text, but -instead merely requires a zero-terminated sequence of bytes with no -other restriction; no element of the selection mechanism may assume that -any byte value is forbidden or that any two differing sequences are -equivalent.\** For these objects, the type C_STRING should be used. -.FS -Note that this is different from STRING, where many byte values are -forbidden, and from COMPOUND_TEXT, where, for example, inserting the -sequence 27,\ 40,\ 66 (designate ASCII into GL) at the start does not alter -the meaning. -.FE -.NT Rationale -An example of the need for C_STRING is to transmit the names of -files; many operating systems do not interpret filenames as having -a character set. For example, the same character string uses a -different sequence of bytes in ASCII and EBCDIC, and so most -operating systems see these as different filenames and offer no -way to treat them as the same. Thus no character-set based -property type is suitable. -.NE -.LP -Type STRING, COMPOUND_TEXT, and C_STRING properties will consist of a list -of elements separated by null characters; other encodings will need to -specify an appropriate list format. -.nH 3 "INCR Properties" -.LP -Requestors may receive a property of type INCR\** -in response to any target that results in selection data. -.FS -These properties were called INCREMENTAL in an earlier draft. -The protocol for using them has changed, -and so the name has changed to avoid confusion. -.FE -This indicates that the owner will send the actual data incrementally. -The contents of the INCR property will be an integer, -which represents a lower bound on the number of bytes of data in the selection. -The requestor and the selection owner transfer the data in the selection -in the following manner. -.LP -The selection requestor starts the transfer process by deleting -the (type==INCR) property forming the reply to the selection. -.LP -The selection owner then: -.bP -Appends the data in suitable-size chunks to the -same property on the same window as the selection reply -with a type corresponding to the actual type of the converted selection. -The size should be less than the maximum-request-size in the connection -handshake. -.bP -Waits between each append for a -.PN PropertyNotify (state==Deleted) -event that shows that the requestor has read the data. -The reason for doing this is to limit the consumption of space in the server. -.bP -Waits (after the entire data has been transferred to the server) until a -.PN PropertyNotify (state==Deleted) -event that shows that the data has been read by the requestor -and then writes zero-length data to the property. -.LP -The selection requestor: -.bP -Waits for the -.PN SelectionNotify -event. -.bP -Loops: -.RS -.IP \- 5 -Retrieving data using -.PN GetProperty -with the delete argument -.PN True . -.IP \- 5 -Waiting for a -.PN PropertyNotify -with the state argument -.PN NewValue . -.RE -.bP -Waits until the property named by the -.PN PropertyNotify -event is zero-length. -.bP -Deletes the zero-length property. -.LP -The type of the converted selection is the type of the first partial property. -The remaining partial properties must have the same type. -.nH 3 "DRAWABLE Properties" -.LP -Requestors may receive properties of type PIXMAP, BITMAP, DRAWABLE, or WINDOW, -which contain an appropriate ID. -While information about these drawables is available from the server by means of -the -.PN GetGeometry -request, -the following items are not: -.bP -Foreground pixel -.bP -Background pixel -.bP -Colormap ID -.LP -In general, -requestors converting into targets whose returned type in the table -in section 2.6.2 is one of the DRAWABLE types should expect to convert also -into the following targets (using the MULTIPLE mechanism): -.bP -FOREGROUND returns a PIXEL value. -.bP -BACKGROUND returns a PIXEL value. -.bP -COLORMAP returns a colormap ID. -.nH 3 "SPAN Properties" -.LP -Properties with type SPAN contain a list of cardinal-pairs -with the length of the cardinals determined by the format. -The first specifies the starting position, -and the second specifies the ending position plus one. -The base is zero. -If they are the same, -the span is zero-length and is before the specified position. -The units are implied by the target atom, -such as LINE_NUMBER or CHARACTER_POSITION. -.nH 2 "Manager Selections" -.LP -Certain clients, often called managers, take on responsibility -for managing shared resources. A client that manages a shared -resource should take ownership of an appropriate selection, -named using the conventions described in sections 1.2.3 -and 1.2.6. A client that manages multiple -shared resources (or groups of resources) should take -ownership of a selection for each one. -.LP -The manager may support conversion of various targets -for that selection. Managers are encouraged to use this -technique as the primary means by which clients interact -with the managed resource. Note that the conventions for -interacting with the window manager predate this section; -as a result many interactions with the window manager use -other techniques. -.LP -Before a manager takes ownership of a manager selection, it -should use the -.PN GetSelection\%Owner -request to check whether the selection is already owned by another client, -and, where appropriate, it should ask the user if the new manager should -replace the old one. If so, it may then take ownership of the selection. -Managers should acquire the selection using a window created expressly for -this purpose. Managers must conform to the rules for selection owners -described in sections 2.1 and 2.2, and they must also support the required -targets listed in section 2.6.2. -.LP -If a manager loses ownership of a manager selection, this -means that a new manager is taking over its responsibilities. -The old manager must release all resources it has managed -and must then destroy the window that owned the selection. -For example, a window manager losing ownership of WM_S2 -must deselect from -.PN SubstructureRedirect -on the root window of screen 2 before destroying the window that owned -WM_S2. -.LP -When the new manager notices that the window owning the selection -has been destroyed, it knows that it can successfully proceed to -control the resource it is planning to manage. If the old -manager does not destroy the window within a reasonable time, -the new manager should check with the user before destroying -the window itself or killing the old manager. -.LP -If a manager wants to give up, on its own, management of a shared -resource controlled by a selection, it must do so by releasing -the resources it is managing and then by destroying the -window that owns the selection. It should not first disown -the selection, since this introduces a race condition. -.LP -Clients who are interested in knowing when the owner of a -manager selection is no longer managing the corresponding shared -resource should select for -.PN StructureNotify -on the window owning the selection so they can be notified when the window -is destroyed. Clients are warned that after doing a -.PN GetSelectionOwner -and selecting for -.PN StructureNotify , -they should do a -.PN GetSelectionOwner -again to ensure that the owner did not change after initially getting the -selection owner and before selecting for -.PN StructureNotify . -.LP -Immediately after a manager successfully acquires ownership of a -manager selection, it should announce its arrival by sending a -.PN ClientMessage -event. This event should be sent using the -.PN SendEvent -protocol request with the following arguments: -.br -.ne 6 -.TS -l lw(4.5i) . -_ -.sp 6p -.B -Argument Value -.R -.sp 6p -_ -.sp 6p -destination: T{ -the root window of screen 0, or the root -window of the appropriate screen if the -manager is managing a screen-specific resource -T} -propagate: False -event-mask: T{ -.PN StructureNotify -T} -event: T{ -.PN ClientMessage -T} -\h'4n'type: MANAGER -\h'4n'format: 32 -T{ -\h'4n'data[0]:\|\** -T} timestamp -\h'4n'data[1]: manager selection atom -\h'4n'data[2]: the window owning the selection -\h'4n'data[3]: manager-selection-specific data -\h'4n'data[4]: manager-selection-specific data -.sp 6p -_ -.TE -.FS -We use the notation data[n] to indicate the n\s-2\uth\d\s0 element -of the LISTofINT8, LISTofINT16, or LISTofINT32 in the data field of the -.PN ClientMessage , -according to the format field. -The list is indexed from zero. -.FE -.LP -Clients that wish to know when a specific manager has started should -select for -.PN Structure\%Notify -on the appropriate root window and should watch for the appropriate MANAGER -.PN Client\%Message . -.nH 1 "Peer-to-Peer Communication by Means of Cut Buffers" -.LP -The cut buffer mechanism is much simpler but much less powerful -than the selection mechanism. -The selection mechanism is active in that it provides a link -between the owner and requestor clients. -The cut buffer mechanism is passive; -an owner places data in a cut buffer from which a requestor retrieves -the data at some later time. -.LP -The cut buffers consist of eight properties on the root of screen zero, -named by the predefined atoms CUT_BUFFER0 to CUT_BUFFER7. -These properties must, at present, have type STRING and format 8. -A client that uses the cut buffer mechanism must initially ensure that -all eight properties exist by using -.PN ChangeProperty -requests to append zero-length data to each. -.LP -A client that stores data in the cut buffers (an owner) first must rotate the -ring of buffers by plus 1 by using -.PN RotateProperties -requests to rename each buffer; -that is, CUT_BUFFER0 to CUT_BUFFER1, CUT_BUFFER1 to CUT_BUFFER2, .\^.\^.\|, -and CUT_BUFFER7 to CUT_BUFFER0. -It then must store the data into CUT_BUFFER0 by using a -.PN Change\%Property -request in mode -.PN Replace . -.LP -A client that obtains data from the cut buffers should use a -.PN GetProperty -request to retrieve the contents of CUT_BUFFER0. -.LP -In response to a specific user request, -a client may rotate the cut buffers by minus 1 by using -.PN RotateProperties -requests to rename each buffer; -that is, CUT_BUFFER7 to CUT_BUFFER6, CUT_BUFFER6 to CUT_BUFFER5, .\^.\^.\|, -and CUT_BUFFER0 to CUT_BUFFER7. -.LP -Data should be stored to the cut buffers -and the ring rotated only when requested by explicit user action. -Users depend on their mental model of cut buffer operation -and need to be able to identify operations that transfer data to and fro. -.nH 1 "Client-to-Window-Manager Communication" -.LP -To permit window managers to perform their role of mediating the competing -demands for resources such as screen space, -the clients being managed must adhere to certain conventions -and must expect the window managers to do likewise. -These conventions are covered here from the client's point of view. -.LP -In general, -these conventions are somewhat complex -and will undoubtedly change as new window management paradigms are developed. -Thus, there is a strong bias toward defining only those conventions -that are essential and that apply generally to all window management paradigms. -Clients designed to run with a particular window manager can easily -define private protocols to add to these conventions, -but they must be aware that their users may decide to run some other -window manager no matter how much the designers of the private protocol -are convinced that they have seen the \*Qone true light\*U of user interfaces. -.LP -It is a principle of these conventions that a general client should -neither know nor care which window manager is running or, indeed, -if one is running at all. -The conventions do not support all client functions -without a window manager running; -for example, the concept of Iconic -is not directly supported by clients. -If no window manager is running, -the concept of Iconic does not apply. -A goal of the conventions is to make it possible to kill and -restart window managers without loss of functionality. -.LP -Each window manager will implement a particular window management policy; -the choice of an appropriate window management policy -for the user's circumstances is not one for an individual client to -make but will be made by the user or the user's system administrator. -This does not exclude the possibility of writing clients that -use a private protocol to restrict themselves to operating only -under a specific window manager. -Rather, -it merely ensures that no claim of general utility is made for such programs. -.LP -For example, -the claim is often made: -\*QThe client I'm writing is important, and it needs to be on top.\*U -Perhaps it is important when it is being run in earnest, -and it should then be run under the control of a window manager -that recognizes \*Qimportant\*U windows through some private protocol -and ensures that they are on top. -However, imagine, for example, that the \*Qimportant\*U client is being debugged. -Then, ensuring that it is always on top is no longer -the appropriate window management policy, -and it should be run under a window manager that allows other windows -(for example, the debugger) to appear on top. -.nH 2 "Client's Actions" -.LP -In general, -the object of the X Version 11 design is that clients should, -as far as possible, do exactly what they would do in the absence -of a window manager, except for the following: -.bP -Hinting to the window manager about the resources they would like -to obtain -.bP -Cooperating with the window manager by accepting the resources they -are allocated even if they are not those requested -.bP -Being prepared for resource allocations to change at any time -.nH 3 "Creating a Top-Level Window" -.LP -A client's \fItop-level window\fP is a window whose override-redirect -attribute is -.PN False . -It must either be a child of a root window, or it must have been a child of -a root window immediately prior to having been reparented by the window -manager. If the client reparents the window away from the root, the window -is no longer a top-level window; but it can become a top-level window again -if the client reparents it back to the root. -.LP -A client usually would expect to create its top-level windows -as children of one or more of the root windows by using some -boilerplate like the following: -.LP -.Ds 0 -.TA 2i -.ta 2i -win = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), xsh.x, xsh.y, - xsh.width, xsh.height, bw, bd, bg); -.De -.LP -If a particular one of the root windows was required, however, -it could use something like the following: -.LP -.Ds 0 -.TA 2i -.ta 2i -win = XCreateSimpleWindow(dpy, RootWindow(dpy, screen), xsh.x, xsh.y, - xsh.width, xsh.height, bw, bd, bg); -.De -.LP -Ideally, -it should be possible to override the choice of a root window -and allow clients (including window managers) to treat a nonroot window -as a pseudo-root. -This would allow, for example, the testing of window managers and the -use of application-specific window managers to control the subwindows -owned by the members of a related suite of clients. -Doing so properly requires an extension, -the design of which is under study. -.LP -From the client's point of view, -the window manager will regard its top-level window as being in -one of three states: -.bP -Normal -.bP -Iconic -.bP -Withdrawn -.LP -Newly created windows start in the Withdrawn state. -Transitions between states happen when the top-level window is mapped -and unmapped and when the window manager receives certain messages. -For further details, see sections 4.1.2.4 and 4.1.4. -.nH 3 "Client Properties" -.LP -Once the client has one or more top-level windows, -it should place properties on those windows to inform the window manager -of the behavior that the client desires. -Window managers will assume values they find convenient -for any of these properties that are not supplied; -clients that depend on particular values must explicitly supply them. -The window manager will not change properties written by the client. -.LP -The window manager will examine the contents of these -properties when the window makes the transition from the Withdrawn state -and will monitor some properties for changes while the window is -in the Iconic or Normal state. -When the client changes one of these properties, -it must use -.PN Replace -mode to overwrite the entire property with new data; -the window manager will retain no memory of the old value of the property. -All fields of the property must be set to suitable values in a single -.PN Replace -mode -.PN ChangeProperty -request. -This ensures that the full contents of the property will be -available to a new window manager if the existing one crashes, -if it is shut down and restarted, -or if the session needs to be shut down and restarted by the session manager. -.NT Convention -Clients writing or rewriting window manager properties must -ensure that the entire content of each property remains valid -at all times. -.NE -.LP -Some of these properties may contain the IDs of resources, such as -windows or pixmaps. Clients should ensure that these resources exist -for at least as long as the window on which the property resides. -.LP -If these properties are longer than expected, -clients should ignore the remainder of the property. -Extending these properties is reserved to the X Consortium; -private extensions to them are forbidden. -Private additional communication between clients and window managers -should take place using separate properties. -The only exception to this rule is the WM_PROTOCOLS property, which may be -of arbitrary length and which may contain atoms representing private -protocols (see section 4.1.2.7). -.LP -The next sections describe each of the properties the clients -need to set, in turn. -They are summarized in the table in section 4.4. -.nH 4 "WM_NAME Property" -.LP -The WM_NAME property is an uninterpreted string -that the client wants the window manager to display -in association with the window (for example, in a window headline bar). -.LP -The encoding used for this string -(and all other uninterpreted string properties) -is implied by the type of the property. -The type atoms to be used for this purpose are described in section 2.7.1. -.LP -Window managers are expected to make an effort to display this information. -Simply ignoring WM_NAME is not acceptable behavior. -Clients can assume that at least the first part of this string -is visible to the user and that if the information is not visible to the user, -it is because the user has taken an explicit action to make it invisible. -.LP -On the other hand, -there is no guarantee that the user can see the WM_NAME string -even if the window manager supports window headlines. -The user may have placed the headline off-screen -or have covered it by other windows. -WM_NAME should not be used for application-critical information -or to announce asynchronous changes of an application's state -that require timely user response. -The expected uses are to permit the user to identify one of a -number of instances of the same client -and to provide the user with noncritical state information. -.LP -Even window managers that support headline bars will place some limit -on the length of the WM_NAME string that can be visible; -brevity here will pay dividends. -.nH 4 "WM_ICON_NAME Property" -.LP -The WM_ICON_NAME property is an uninterpreted string -that the client wants to be displayed in association with the window -when it is iconified (for example, in an icon label). -In other respects, -including the type, it is similar to WM_NAME. -For obvious geometric reasons, -fewer characters will normally be visible in WM_ICON_NAME than WM_NAME. -.LP -Clients should not attempt to display this string in their icon pixmaps -or windows; rather, they should rely on the window manager to do so. -.nH 4 "WM_NORMAL_HINTS Property" -.LP -The type of the WM_NORMAL_HINTS property is WM_SIZE_HINTS. -Its contents are as follows: -.br -.ne 6 -.TS H -lw(1i) lw(1i) lw(2i). -_ -.sp 6p -.B -Field Type Comments -.sp 6p -_ -.sp 6p -.TH -.R -flags CARD32 (see the next table) -pad 4*CARD32 For backwards compatibility -min_width INT32 If missing, assume base_width -min_height INT32 If missing, assume base_height -max_width INT32 -max_height INT32 -width_inc INT32 -height_inc INT32 -min_aspect (INT32,INT32) -max_aspect (INT32,INT32) -base_width INT32 If missing, assume min_width -base_height INT32 If missing, assume min_height -win_gravity INT32 T{ -If missing, assume -.PN NorthWest -T} -.sp 6p -_ -.TE -.LP -The WM_SIZE_HINTS.flags bit definitions are as follows: -.br -.ne 6 -.TS H -lw(1i) nw(.5i) lw(3i). -_ -.sp 6p -.B -Name Value Field -.sp 6p -_ -.sp 6p -.TH -.R -T{ -.PN USPosition -T} 1 User-specified x, y -T{ -.PN USSize -T} 2 User-specified width, height -T{ -.PN PPosition -T} 4 Program-specified position -T{ -.PN PSize -T} 8 Program-specified size -T{ -.PN PMinSize -T} 16 Program-specified minimum size -T{ -.PN PMaxSize -T} 32 Program-specified maximum size -T{ -.PN PResizeInc -T} 64 Program-specified resize increments -T{ -.PN PAspect -T} 128 Program-specified min and max aspect ratios -T{ -.PN PBaseSize -T} 256 Program-specified base size -T{ -.PN PWinGravity -T} 512 Program-specified window gravity -.sp 6p -_ -.TE -.LP -To indicate that the size and position of the window -(when a transition from the Withdrawn state occurs) was specified by the user, -the client should set the -.PN USPosition -and -.PN USSize -flags, -which allow a window manager to know that the user specifically asked where -the window should be placed or how the window should be sized and that -further interaction is superfluous. -To indicate that it was specified by the client without any user involvement, -the client should set -.PN PPosition -and -.PN PSize . -.LP -The size specifiers refer to the width and height of the client's -window excluding borders. -.LP -The win_gravity may be any of the values specified for WINGRAVITY in -the core protocol except for -.PN Unmap : -.PN NorthWest -(1), -.PN North -(2), -.PN NorthEast -(3), -.PN West -(4), -.PN Center -(5), -.PN East -(6), -.PN SouthWest -(7), -.PN South -(8), and -.PN SouthEast -(9). It specifies how and whether the client window wants to be shifted to -make room for the window manager frame. -.LP -If the win_gravity is -.PN Static , -the window manager frame is positioned -so that the inside border of the client window inside the frame is -in the same position on the screen as it was when the client -requested the transition from Withdrawn state. Other values of -win_gravity specify a window reference point. For -.PN NorthWest , -.PN NorthEast , -.PN SouthWest , -and -.PN SouthEast -the reference point is the specified outer corner of the window (on the -outside border edge). For -.PN North , -.PN South , -.PN East , -and -.PN West -the reference point is the center of the specified outer edge of the window -border. For -.PN Center -the reference point is the center of the window. The reference point of the -window manager frame is placed at the location on the screen where the -reference point of the client window was when the client requested the -transition from Withdrawn state. -.LP -The min_width and min_height elements specify the -minimum size that the window can be for the client to be useful. -The max_width and max_height elements specify the maximum size. -The base_width and base_height elements in conjunction with width_inc -and height_inc define an arithmetic progression of preferred window -widths and heights for non-negative integers \fIi\fP and \fIj\fP: -.LP -.Ds -.EQ C -width ~ = ~ base_width ~ + ~ ( i ~ times ~ width_inc ) -.EN -.EQ C -height ~ = ~ base_height ~ + ~ ( j ~ times ~ height_inc ) -.EN -.De -.LP -Window managers are encouraged to use \fIi\fP and \fIj\fP -instead of width and height in reporting window sizes to users. -If a base size is not provided, -the minimum size is to be used in its place and vice versa. -.LP -The min_aspect and max_aspect fields are fractions with the numerator first -and the denominator second, and they allow a client to specify the range of -aspect ratios it prefers. Window managers that honor aspect ratios should -take into account the base size in determining the preferred window size. If -a base size is provided along with the aspect ratio fields, the base size -should be subtracted from the window size prior to checking that the aspect -ratio falls in range. If a base size is not provided, nothing should be -subtracted from the window size. (The minimum size is not to be used in -place of the base size for this purpose.) -.nH 4 "WM_HINTS Property" -.LP -The WM_HINTS property (whose type is WM_HINTS) -is used to communicate to the window manager. -It conveys the information the window manager needs -other than the window geometry, -which is available from the window itself; -the constraints on that geometry, -which is available from the WM_NORMAL_HINTS structure; -and various strings, -which need separate properties, such as WM_NAME. -The contents of the properties are as follows: -.br -.ne 6 -.TS H -l l l. -_ -.sp 6p -.B -Field Type Comments -.sp 6p -_ -.sp 6p -.TH -.R -flags CARD32 (see the next table) -input CARD32 The client's input model -initial_state CARD32 The state when first mapped -icon_pixmap PIXMAP The pixmap for the icon image -icon_window WINDOW The window for the icon image -icon_x INT32 The icon location -icon_y INT32 -icon_mask PIXMAP The mask for the icon shape -window_group WINDOW The ID of the group leader window -.sp 6p -_ -.TE -.LP -The WM_HINTS.flags bit definitions are as follows: -.br -.ne 6 -.TS H -lw(1.5i) nw(.5i) lw(1.5i). -_ -.sp 6p -.B -Name Value Field -.sp 6p -_ -.sp 6p -.TH -.R -T{ -.PN InputHint -T} 1 input -T{ -.PN StateHint -T} 2 initial_state -T{ -.PN IconPixmapHint -T} 4 icon_pixmap -T{ -.PN IconWindowHint -T} 8 icon_window -T{ -.PN IconPositionHint -T} 16 icon_x & icon_y -T{ -.PN IconMaskHint -T} 32 icon_mask -T{ -.PN WindowGroupHint -T} 64 window_group -T{ -.PN MessageHint -T} 128 (this bit is obsolete) -T{ -.PN UrgencyHint -T} 256 urgency -.sp 6p -_ -.TE -.LP -Window managers are free to assume convenient values for all fields of -the WM_HINTS property if a window is mapped without one. -.LP -The input field is used to communicate to the window manager the input focus -model used by the client (see section 4.1.7). -.LP -Clients with the Globally Active and No Input models should set the -input flag to -.PN False . -Clients with the Passive and Locally Active models should set the input -flag to -.PN True . -.LP -From the client's point of view, -the window manager will regard the client's top-level window as being -in one of three states: -.bP -Normal -.bP -Iconic -.bP -Withdrawn -.LP -The semantics of these states are described in section 4.1.4. -Newly created windows start in the Withdrawn state. -Transitions between states happen when a -top-level window is mapped and unmapped -and when the window manager receives certain messages. -.LP -The value of the initial_state field determines the state the client -wishes to be in at the time the top-level window is mapped -from the Withdrawn state, as shown in the following table: -.br -.ne 6 -.TS H -l n l. -_ -.sp 6p -.B -State Value Comments -.sp 6p -_ -.sp 6p -.TH -.R -T{ -.PN NormalState -T} 1 The window is visible. -T{ -.PN IconicState -T} 3 The icon is visible. -.sp 6p -_ -.TE -.LP -The icon_pixmap field may specify a pixmap to be used as an icon. -This pixmap should be: -.bP -One of the sizes specified in the WM_ICON_SIZE property -on the root if it exists (see section 4.1.3.2). -.bP -1-bit deep. -The window manager will select, through the defaults database, -suitable background (for the 0 bits) and foreground (for the 1 bits) colors. -These defaults can, of course, specify different colors for the icons -of different clients. -.LP -The icon_mask specifies which pixels of the icon_pixmap should be used as the -icon, allowing for icons to appear nonrectangular. -.LP -The icon_window field is the ID of a window the client wants used as its icon. -Most, but not all, window managers will support icon windows. -Those that do not are likely to have a user interface in which small -windows that behave like icons are completely inappropriate. -Clients should not attempt to remedy the omission by working around it. -.LP -Clients that need more capabilities from the icons than a simple 2-color -bitmap should use icon windows. -Rules for clients that do are set out in section 4.1.9. -.LP -The (icon_x,icon_y) coordinate is a hint to the window manager -as to where it should position the icon. -The policies of the window manager control the positioning of icons, -so clients should not depend on attention being paid to this hint. -.LP -The window_group field lets the client specify that this window belongs -to a group of windows. -An example is a single client manipulating multiple -children of the root window. -.NT Conventions -.IP 1. 5 -The window_group field should be set to the ID of the group leader. -The window group leader may be a window that exists only for that purpose; -a placeholder group leader of this kind would never be mapped -either by the client or by the window manager. -.IP 2. 5 -The properties of the window group leader are those for the group as -a whole (for example, the icon to be shown when the entire group is iconified). -.NE -.LP -Window managers may provide facilities for manipulating the group as a whole. -Clients, at present, have no way to operate on the group as a whole. -.LP -The messages bit, if set in the flags field, indicates that the -client is using an obsolete window manager communication protocol,\** -rather than the WM_PROTOCOLS mechanism of section 4.1.2.7. -.FS -This obsolete protocol was described in the July 27, 1988, -draft of the ICCCM. -Windows using it can also be detected because their WM_HINTS properties are -4 bytes longer than expected. -Window managers are free to support clients using the obsolete protocol -in a backwards compatibility mode. -.FE -.LP -The -.PN UrgencyHint -flag, if set in the flags field, indicates that the client deems the window -contents to be urgent, requiring the timely response of the user. The -window manager must make some effort to draw the user's attention to this -window while this flag is set. The window manager must also monitor the -state of this flag for the entire time the window is in the Normal or Iconic -state and must take appropriate action when the state of the flag changes. -The flag is otherwise independent of the window's state; in particular, the -window manager is not required to deiconify the window if the client sets -the flag on an Iconic window. Clients must provide some means by which the -user can cause the -.PN UrgencyHint -flag to be set to zero or the window to be withdrawn. The user's action can -either mitigate the actual condition that made the window urgent, or it can -merely shut off the alarm. -.NT Rationale -This mechanism is useful for alarm dialog boxes or reminder windows, in -cases where mapping the window is not enough (e.g., in the presence of -multi-workspace or virtual desktop window managers), and where using an -override-redirect window is too intrusive. For example, the window manager -may attract attention to an urgent window by adding an indicator to its -title bar or its icon. Window managers may also take additional action -for a window that is newly urgent, such as by flashing its icon (if the -window is iconic) or by raising it to the top of the stack. -.NE -.nH 4 "WM_CLASS Property" -.LP -The WM_CLASS property (of type STRING without control characters) -contains two consecutive null-terminated strings. -These specify the Instance and Class names to be used by both the client -and the window manager for looking up resources for the application -or as identifying information. -This property must be present when the window leaves the Withdrawn state -and may be changed only while the window is in the Withdrawn state. -Window managers may examine the property only when they start up -and when the window leaves the Withdrawn state, -but there should be no need for a client to change its state dynamically. -.LP -The two strings, respectively, are: -.bP -A string that names the particular instance of the application to which -the client that owns this window belongs. -Resources that are specified by instance name override any resources -that are specified by class name. -Instance names can be specified by the user in an operating-system specific -manner. -On POSIX-conformant systems, -the following conventions are used: -.RS -.IP \- 5 -If \*Q\-name NAME\*U is given on the command line, -NAME is used as the instance name. -.IP \- 5 -Otherwise, if the environment variable RESOURCE_NAME is set, -its value will be used as the instance name. -.IP \- 5 -Otherwise, -the trailing part of the name used to invoke the program -(argv[0] stripped of any directory names) is used as the instance name. -.RE -.bP -A string that names the general class of applications to which the client -that owns this window belongs. -Resources that are specified by class apply to all applications -that have the same class name. -Class names are specified by the application writer. -Examples of commonly used class names include: -\*QEmacs\*U, \*QXTerm\*U, \*QXClock\*U, \*QXLoad\*U, and so on. -.LP -Note that WM_CLASS strings are null-terminated -and, thus, differ from the general conventions that STRING properties -are null-separated. -This inconsistency is necessary for backwards compatibility. -.nH 4 "WM_TRANSIENT_FOR Property" -.LP -The WM_TRANSIENT_FOR property (of type WINDOW) -contains the ID of another top-level window. -The implication is that this window is a pop-up on behalf of the named window, -and window managers may decide not to decorate transient windows -or may treat them differently in other ways. -In particular, -window managers should present newly mapped WM_TRANSIENT_FOR -windows without requiring any user interaction, -even if mapping top-level windows normally does require interaction. -Dialogue boxes, for example, are an example of windows that should have -WM_TRANSIENT_FOR set. -.LP -It is important not to confuse WM_TRANSIENT_FOR with override-redirect. -WM_TRANSIENT_FOR should be used in those cases where the pointer -is not grabbed while the window is mapped (in other words, -if other windows are allowed to be active while the transient is up). -If other windows must be prevented from processing input -(for example, when implementing pop-up menus), -use override-redirect and grab the pointer while the window is mapped. -.nH 4 "WM_PROTOCOLS Property" -.LP -The WM_PROTOCOLS property (of type ATOM) is a list of atoms. -Each atom identifies a communication protocol between the client -and the window manager in which the client is willing to participate. -Atoms can identify both standard protocols and private protocols -specific to individual window managers. -.LP -All the protocols in which a client can volunteer to take part -involve the window manager sending the client a -.PN ClientMessage -event and the client taking appropriate action. -For details of the contents of the event, -see section 4.2.8. -In each case, -the protocol transactions are initiated by the window manager. -.LP -The WM_PROTOCOLS property is not required. -If it is not present, -the client does not want to participate in any window manager protocols. -.LP -The X Consortium will maintain a registry of protocols to avoid collisions -in the name space. -The following table lists the protocols that have been defined to date. -.br -.ne 6 -.TS H -l c l. -_ -.sp 6p -.B -Protocol Section Purpose -.sp 6p -_ -.sp 6p -.TH -.R -WM_TAKE_FOCUS 4.1.7 Assignment of input focus -WM_SAVE_YOURSELF Appendix C Save client state request (deprecated) -WM_DELETE_WINDOW 4.2.8.1 Request to delete top-level window -.sp 6p -_ -.TE -It is expected that this table will grow over time. -.nH 4 "WM_COLORMAP_WINDOWS Property" -.LP -The WM_COLORMAP_WINDOWS property (of type WINDOW) on a top-level window -is a list of the IDs of windows that may need colormaps installed -that differ from the colormap of the top-level window. -The window manager will watch this list of windows for changes in their -colormap attributes. -The top-level window is always (implicitly or explicitly) on the watch list. -For the details of this mechanism, -see section 4.1.8. -.nH 4 "WM_CLIENT_MACHINE Property" -.LP -The client should set the WM_CLIENT_MACHINE property (of one of the TEXT -types) to a string that forms the name of the machine running the client as -seen from the machine running the server. -.nH 3 "Window Manager Properties" -.LP -The properties that were described in the previous section are those -that the client is responsible for maintaining on its top-level windows. -This section describes the properties that the window manager places on -client's top-level windows and on the root. -.nH 4 "WM_STATE Property" -.LP -The window manager will place a WM_STATE property (of type WM_STATE) on each -top-level client window that is not in the Withdrawn state. Top-level -windows in the Withdrawn state may or may not have the WM_STATE property. -Once the top-level window has been withdrawn, the client may re-use it for -another purpose. Clients that do so should remove the WM_STATE property if -it is still present. -.LP -Some clients (such as \fBxprop\fP) will ask the user to click over a window -on which the program is to operate. Typically, the intent is for this to be -a top-level window. To find a top-level window, clients should search the -window hierarchy beneath the selected location for a window with the -WM_STATE property. This search must be recursive in order to cover all -window manager reparenting possibilities. If no window with a WM_STATE -property is found, it is recommended that programs use a mapped -child-of-root window if one is present beneath the selected location. -.LP -The contents of the WM_STATE property are defined as follows: -.br -.ne 6 -.TS H -l l l. -_ -.sp 6p -.B -Field Type Comments -.R -.sp 6p -_ -.sp 6p -.TH -state CARD32 (see the next table) -icon WINDOW ID of icon window -.sp 6p -_ -.TE -.LP -The following table lists the WM_STATE.state values: -.br -.ne 6 -.TS H -l n. -_ -.sp 6p -.B -State Value -.R -.sp 6p -_ -.sp 6p -.TH -T{ -.PN WithdrawnState -T} 0 -T{ -.PN NormalState -T} 1 -T{ -.PN IconicState -T} 3 -.sp 6p -_ -.TE -.LP -Adding other fields to this property is reserved to the X Consortium. -Values for the state field other than those defined in the above -table are reserved for use by the X Consortium. -.LP -The state field describes the window manager's idea of the state -the window is in, which may not match the client's idea as expressed -in the initial_state field of the WM_HINTS property -(for example, if the user has asked the window manager to iconify the window). -If it is -.PN Normal\%State , -the window manager believes the client should be animating its window. -If it is -.PN IconicState , -the client should animate its icon window. -In either state, -clients should be prepared to handle exposure events from either window. -.LP -When the window is withdrawn, the window manager will either change the -state field's value to -.PN Withdrawn\%State -or it will remove the WM_STATE property entirely. -.LP -The icon field should contain the window ID of the window that the -window manager uses as the icon for the window on which this property is -set. If no such window exists, the icon field should be -.PN None . -Note that this window could be but is not necessarily the same window as the -icon window that the client may have specified in its WM_HINTS property. -The WM_STATE icon may be a window that the window manager has supplied and -that contains the client's icon pixmap, or it may be an ancestor of the -client's icon window. -.nH 4 "WM_ICON_SIZE Property" -.LP -A window manager that wishes to place constraints on the sizes of icon -pixmaps and/or windows should place a property called WM_ICON_SIZE on the root. -The contents of this property are listed in the following table. -.br -.ne 6 -.TS H -l l l. -_ -.sp 6p -.B -Field Type Comments -.sp 6p -_ -.sp 6p -.TH -.R -min_width CARD32 The data for the icon size series -min_height CARD32 -max_width CARD32 -max_height CARD32 -width_inc CARD32 -height_inc CARD32 -.sp 6p -_ -.TE -.LP -For more details see section 14.1.12 in \fIXlib \- C Language X Interface\fP. -.nH 3 "Changing Window State" -.LP -From the client's point of view, -the window manager will regard each of the client's top-level -windows as being in one of three states, -whose semantics are as follows: -.bP -.PN NormalState -\- The client's top-level window is viewable. -.bP -.PN IconicState -\- The client's top-level window is iconic -(whatever that means for this window manager). -The client can assume that its top-level window is not viewable, -its icon_window (if any) will be viewable -and, failing that, -its icon_pixmap (if any) or its WM_ICON_NAME will be displayed. -.bP -.PN WithdrawnState -\- Neither the client's top-level window nor its icon is visible. -.LP -In fact, -the window manager may implement states with semantics -other than those described above. -For example, -a window manager might implement a concept of an \*Qinactive\*U state -in which an infrequently used client's window would be represented -as a string in a menu. -But this state is invisible to the client, -which would see itself merely as being in the Iconic state. -.LP -Newly created top-level windows are in the Withdrawn state. -Once the window has been provided with suitable properties, -the client is free to change its state as follows: -.bP -Withdrawn \(-> Normal \- The client should map the window with -WM_HINTS.initial_state being -.PN NormalState . -.bP -Withdrawn \(-> Iconic \- The client should map the window with -WM_HINTS.initial_state being -.PN IconicState . -.bP -Normal \(-> Iconic \- The client should send a -.PN ClientMessage -event as described later in this section. -.bP -Normal \(-> Withdrawn \- The client should unmap the window and follow it -with a synthetic -.PN UnmapNotify -event as described later in this section. -.bP -Iconic \(-> Normal \- The client should map the window. -The contents of WM_HINTS.initial_state are irrelevant in this case. -.bP -Iconic \(-> Withdrawn \- The client should unmap the window -and follow it with a synthetic -.PN UnmapNotify -event as described later in this section. -.LP -Only the client can effect a transition into or out of the Withdrawn -state. -Once a client's window -has left the Withdrawn state, -the window will be mapped if it is in the Normal state and the window will be -unmapped if it is in the Iconic state. Reparenting window managers -must unmap the client's window when it is in the Iconic state, even if an -ancestor window being unmapped renders the client's window unviewable. -Conversely, if a reparenting window manager renders the client's window -unviewable by unmapping an ancestor, the client's window is by definition in -the Iconic state and must also be unmapped. -.NT "Advice to Implementors" -Clients can select for -.PN StructureNotify -on their -top-level windows to track transitions between Normal and Iconic states. -Receipt of a -.PN MapNotify -event will indicate a transition to the Normal state, and receipt of an -.PN UnmapNotify -event will indicate a transition to the Iconic state. -.NE -.LP -When changing the state of the window to Withdrawn, the client must (in -addition to unmapping the window) send a synthetic -.PN UnmapNotify -event by -using a -.PN SendEvent -request with the following arguments: -.br -.ne 6 -.TS -l lw(3.5i). -_ -.sp 6p -.B -Argument Value -.sp 6p -_ -.sp 6p -.R -destination: The root -propagate: T{ -.PN False -T} -event-mask: T{ -.Pn ( SubstructureRedirect|SubstructureNotify ) -T} -T{ -event: an -.PN UnmapNotify -with: -T} T{ -T} -\h'4n'event: The root -\h'4n'window: The window itself -\h'4n'from-configure: T{ -.PN False -T} -.sp 6p -_ -.TE -.NT Rationale -The reason for requiring the client to send a synthetic -.PN UnmapNotify -event is to ensure that the window manager -gets some notification of the client's desire to change state, -even though the window may already be unmapped when the desire is expressed. -.NE -.NT "Advice to Implementors" -For compatibility with obsolete clients, -window managers should trigger the transition to the Withdrawn state -on the real -.PN UnmapNotify -rather than waiting for the synthetic one. -They should also trigger the transition if they receive a synthetic -.PN UnmapNotify -on a window for which they have not yet received a real -.PN UnmapNotify . -.NE -.LP -When a client withdraws a window, -the window manager will then update or remove the WM_STATE -property as described in section 4.1.3.1. -Clients that want to re-use a client window (e.g., by mapping it again or -reparenting it elsewhere) after withdrawing it must wait for the -withdrawal to be complete before proceeding. The preferred method for -doing this is for clients to wait for the window manager to update or -remove the WM_STATE property.\** -.FS -Earlier versions of these conventions prohibited clients from -reading the WM_STATE property. Clients operating under the earlier -conventions used the technique of tracking -.PN ReparentNotify -events to wait for the top-level window to be reparented back to the root -window. This is still a valid technique; however, it works only for -reparenting window managers, and the WM_STATE technique is to be preferred. -.FE -.LP -If the transition is from the Normal to the Iconic state, -the client should send a -.PN ClientMessage -event to the root with: -.bP -Window == the window to be iconified -.bP -Type\** == the atom WM_CHANGE_STATE -.FS -The type field of the -.PN ClientMessage -event (called the message_type field by Xlib) should not be confused with -the code field of the event itself, -which will have the value 33 -.Pn ( ClientMessage ). -.FE -.bP -Format == 32 -.bP -Data[0] == IconicState -.NT Rationale -The format of this -.PN ClientMessage -event does not match the format of -.PN ClientMessages -in section 4.2.8. -This is because they are sent by the window manager to clients, -and this message is sent by clients to the window manager. -.NE -.LP -Other values of data[0] are reserved for future extensions to these -conventions. The parameters of the -.PN SendEvent -request should be those described for the synthetic -.PN UnmapNotify -event. -.NT "Advice to Implementors" -Clients can also select for -.PN VisibilityChange -events on their top-level or icon windows. -They will then receive a -.PN VisibilityNotify (state==FullyObscured) -event when the window concerned becomes completely -obscured even though mapped (and thus, perhaps a waste -of time to update) and a -.PN VisibilityNotify (state!=FullyObscured) -event when it becomes even partly viewable. -.NE -.NT "Advice to Implementors" -When a window makes a transition from the Normal state to either the Iconic -or the Withdrawn state, clients should be aware that the window manager -may make transients for this window inaccessible. Clients should not rely -on transient windows being available to the user when the transient owner -window is not in the Normal state. When withdrawing a window, clients are -advised to withdraw transients for the window. -.NE -.nH 3 "Configuring the Window" -.LP -Clients can resize and reposition their top-level windows by using the -.PN ConfigureWindow -request. -The attributes of the window that can be altered -with this request are as follows: -.bP -The [x,y] location of the window's upper left-outer corner -.bP -The [width,height] of the inner region of the window (excluding -borders) -.bP -The border width of the window -.bP -The window's position in the stack -.LP -The coordinate system in which the location is expressed is that of the root -(irrespective of any reparenting that may have occurred). -The border width to be used and win_gravity position hint -to be used are those most recently requested by the client. -Client configure requests are interpreted by the window manager -in the same manner as the initial window geometry mapped from -the Withdrawn state, as described in section 4.1.2.3. -Clients must be aware that there is no guarantee that the window manager -will allocate them the requested size or location and must be prepared to -deal with any size and location. -If the window manager decides to respond to a -.PN ConfigureRequest -request by: -.bP -Not changing the size, location, border width, or stacking order -of the window at all. -.IP -A client will receive a synthetic -.PN ConfigureNotify -event that describes the (unchanged) geometry of the window. -The (x,y) coordinates will be in the root coordinate system, -adjusted for the border width the client requested, -irrespective of any reparenting that has taken place. -The border_width will be the border width the client requested. -The client will not receive a real -.PN ConfigureNotify -event because no change has actually taken place. -.bP -Moving or restacking the window without resizing it or -changing its border width. -.IP -A client will receive a synthetic -.PN ConfigureNotify -event following the change that describes the new geometry of the window. -The event's (x,y) coordinates will be in the root coordinate system adjusted -for the border width the client requested. -The border_width will be the border width the client requested. -The client may not receive a real -.PN ConfigureNotify -event that describes this change because the window manager may have reparented -the top-level window. -If the client does receive a real event, -the synthetic event will follow the real one. -.bP -Resizing the window or changing its border width (regardless of whether the -window was also moved or restacked). -.IP -A client that has selected for -.PN StructureNotify -events will receive a real -.PN ConfigureNotify -event. -Note that the coordinates in this event are relative to the parent, -which may not be the root if the window has been reparented. -The coordinates will reflect the actual border width of the window -(which the window manager may have changed). -The -.PN Translate\%Coordinates -request can be used to convert the coordinates if required. -.LP -The general rule is that coordinates in real -.PN ConfigureNotify -events are in the parent's space; -in synthetic events, they are in the root space. -.NT "Advice to Implementors" -Clients cannot distinguish between the case where a top-level window is -resized and moved from the case where the window is resized but not moved, -since a real -.PN ConfigureNotify -event will be received in both cases. Clients that are concerned with -keeping track of the absolute position of a top-level window should keep a -piece of state indicating whether they are certain of its position. Upon -receipt of a real -.PN ConfigureNotify -event on the top-level window, the client should note that the position is -unknown. Upon receipt of a synthetic -.PN ConfigureNotify -event, the client should note the position as known, using the position in -this event. If the client receives a -.PN KeyPress , -.PN KeyRelease , -.PN ButtonPress , -.PN ButtonRelease , -.PN MotionNotify , -.PN EnterNotify , -or -.PN LeaveNotify -event on the window (or on any descendant), the client can deduce the -top-level window's position from the difference between the (event-x, -event-y) and (root-x, root-y) coordinates in these events. Only when the -position is unknown does the client need to use the -.PN Translate\%Coordinates -request to find the position of a top-level window. -.NE -.LP -Clients should be aware that their borders may not be visible. -Window managers are free to use reparenting techniques to -decorate client's top-level windows with borders containing -titles, controls, and other details to maintain a consistent look-and-feel. -If they do, -they are likely to override the client's attempts to set the border width -and set it to zero. -Clients, therefore, should not depend on the top-level window's border -being visible or use it to display any critical information. -Other window managers will allow the top-level windows border to -be visible. -.NT Convention -Clients should set the desired value of the border-width attribute on all -.PN ConfigureWindow -requests to avoid a race condition. -.NE -.LP -Clients that change their position in the stack must be aware -that they may have been reparented, -which means that windows that used to be siblings no longer are. -Using a nonsibling as the sibling parameter on a -.PN ConfigureWindow -request will cause an error. -.NT Convention -Clients that use a -.PN ConfigureWindow -request to request a change in their position in the stack -should do so using -.PN None -in the sibling field. -.NE -.LP -Clients that must position themselves in the stack relative to some -window that was originally a sibling must do the -.PN ConfigureWindow -request (in case they are running under a nonreparenting window manager), -be prepared to deal with a resulting error, -and then follow with a synthetic -.PN ConfigureRequest -event by invoking a -.PN SendEvent -request with the following arguments: -.br -.ne 6 -.TS -l lw(3.5i). -_ -.sp 6p -.B -Argument Value -.sp 6p -_ -.sp 6p -.R -destination: The root -propagate: T{ -.PN False -T} -event-mask: T{ -.Pn ( SubstructureRedirect|SubstructureNotify ) -T} -T{ -event: a -.PN ConfigureRequest -with: -T} T{ -T} -\h'4n'event: The root -\h'4n'window: The window itself -T{ -\h'4n'\&.\^.\^. -T} T{ -Other parameters from the -.PN ConfigureWindow -request -T} -.sp 6p -_ -.TE -.LP -Window managers are in any case free to position windows in the stack as -they see fit, and so clients should not rely on receiving the stacking -order they have requested. Clients should ignore the above-sibling -field of both real and synthetic -.PN ConfigureNotify -events received on their top-level windows because this field may not -contain useful information. -.nH 3 "Changing Window Attributes" -.LP -The attributes that may be supplied when a window is created may be -changed by using the -.PN ChangeWindowAttributes -request. -The window attributes are listed in the following table: -.br -.ne 6 -.TS H -l l -l c. -_ -.sp 6p -.B -Attribute Private to Client -.sp 6p -_ -.sp 6p -.TH -.R -Background pixmap Yes -Background pixel Yes -Border pixmap Yes -Border pixel Yes -Bit gravity Yes -Window gravity No -Backing-store hint Yes -Save-under hint No -Event mask No -Do-not-propagate mask Yes -Override-redirect flag No -Colormap Yes -Cursor Yes -.sp 6p -_ -.TE -.LP -Most attributes are private to the client and will never be interfered with -by the window manager. -For the attributes that are not private to the client: -.bP -The window manager is free to override the window gravity; -a reparenting window manager may want to set the top-level window's -window gravity for its own purposes. -.bP -Clients are free to set the save-under hint on their top-level windows, -but they must be aware that the hint may be overridden by the window manager. -.bP -Windows, in effect, have per-client event masks, -and so, clients may select for whatever events are convenient irrespective -of any events the window manager is selecting for. -There are some events for which only one client at a time may select, -but the window manager should not select for them on any of the client's -windows. -.bP -Clients can set override-redirect on top-level windows but are -encouraged not to do so except as described in sections 4.1.10 and 4.2.9. -.nH 3 "Input Focus" -.LP -There are four models of input handling: -.bP -No Input \- The client never expects keyboard input. -An example would be -.PN xload -or another output-only client. -.bP -Passive Input \- The client expects keyboard input but never explicitly sets -the input focus. -An example would be a simple client with no subwindows, -which will accept input in -.PN PointerRoot -mode or when the window manager sets the input focus to its top-level window -(in click-to-type mode). -.bP -Locally Active Input \- The client expects keyboard input and explicitly sets -the input focus, -but it only does so when one of its windows already has the focus. -An example would be a client with subwindows defining various data -entry fields that uses Next and Prev keys to move the input focus -between the fields. -It does so when its top-level window has acquired the focus in -.PN PointerRoot -mode or when the window manager sets the input focus to its top-level window -(in click-to-type mode). -.bP -Globally Active Input \- The client expects keyboard input and explicitly sets -the input focus, -even when it is in windows the client does not own. -An example would be a client with a scroll bar that wants to allow -users to scroll the window without disturbing the input focus even if -it is in some other window. -It wants to acquire the input focus when the user clicks in the scrolled -region but not when the user clicks in the scroll bar itself. -Thus, it wants to prevent the window manager from setting the input focus -to any of its windows. -.LP -The four input models and the corresponding values of the input field -and the presence or absence of the WM_TAKE_FOCUS atom in the -WM_PROTOCOLS property are listed in the following table: -.br -.ne 6 -.TS H -l l l -l c c. -_ -.sp 6p -.B -Input Model Input Field WM_TAKE_FOCUS -.sp 6p -_ -.sp 6p -.TH -.R -T{ -No Input -T} T{ -.PN False -T} T{ -Absent -T} -T{ -Passive -T} T{ -.PN True -T} T{ -Absent -T} -T{ -Locally Active -T} T{ -.PN True -T} T{ -Present -T} -T{ -Globally Active -T} T{ -.PN False -T} T{ -Present -T} -.sp 6p -_ -.TE -.LP -Passive and Locally Active clients set the input field of WM_HINTS to -.PN True , -which indicates that they require window manager assistance in acquiring the -input focus. -No Input and Globally Active clients set the input field to -.PN False , -which requests that the window manager not set the input focus -to their top-level window. -.LP -Clients that use a -.PN SetInputFocus -request must set the time field to the timestamp of the event -that caused them to make the attempt. -This cannot be a -.PN FocusIn -event because they do not have timestamps. -Clients may also acquire -the focus without a corresponding -.PN EnterNotify . -Note that clients must not use -.PN CurrentTime -in the time field. -.LP -Clients using the Globally Active model can only use a -.PN SetInputFocus -request to acquire the input focus when they do not already have it on -receipt of one of the following events: -.bP -.PN ButtonPress -.bP -.PN ButtonRelease -.bP -Passive-grabbed -.PN KeyPress -.bP -Passive-grabbed -.PN KeyRelease -.LP -In general, -clients should avoid using passive-grabbed key events for this purpose, -except when they are unavoidable (as, for example, a selection tool -that establishes a passive grab on the keys that cut, copy, or paste). -.LP -The method by which the user commands the window manager to -set the focus to a window is up to the window manager. -For example, -clients cannot determine whether they will see the click -that transfers the focus. -.LP -Windows with the atom WM_TAKE_FOCUS in their WM_PROTOCOLS property -may receive a -.PN ClientMessage -event from the window manager (as described in section 4.2.8) -with WM_TAKE_FOCUS in its data[0] field and a valid timestamp -(i.e., not -.PN CurrentTime ) -in its data[1] field. -If they want the focus, -they should respond with a -.PN SetInputFocus -request with its window field set to the window of theirs -that last had the input focus or to their default input window, -and the time field set to the timestamp in the message. -For further information, -see section 4.2.7. -.LP -A client could receive WM_TAKE_FOCUS when opening from an icon -or when the user has clicked outside the top-level window in an area that -indicates to the window manager that it should assign the focus -(for example, clicking in the headline bar can be used to assign the focus). -.LP -The goal is to support window managers that want to assign the input focus -to a top-level window in such a way that the top-level window either -can assign it to one of its subwindows or can decline the offer of the focus. -For example, a clock or a text editor with no currently open frames -might not want to take focus even though the window manager generally -believes that clients should take the input focus after being deiconified -or raised. -.LP -Clients that set the input focus need to decide a value for the -revert-to field of the -.PN SetInputFocus -request. -This determines the behavior of the input focus -if the window the focus has been set to becomes not viewable. -The value can be any of the following: -.bP -.PN Parent -\- In general, -clients should use this value when assigning focus to one of their subwindows. -Unmapping the subwindow will cause focus to revert to the parent, -which is probably what you want. -.bP -.PN PointerRoot -\- Using -this value with a click-to-type focus management policy -leads to race conditions because the window becoming unviewable may -coincide with the window manager deciding to move the focus elsewhere. -.bP -.PN None -\- Using -this value causes problems if the window manager reparents -the window, as most window managers will, and then crashes. -The input focus will be -.PN None , -and there will probably be no way to change it. -.LP -Note that neither -.PN PointerRoot -nor -.PN None -is really safe to use. -.NT Convention -Clients that invoke a -.PN SetInputFocus -request should set the revert-to argument to -.PN Parent . -.NE -.LP -A convention is also required for clients that want to give up the -input focus. -There is no safe value set for them to set the input focus to; -therefore, they should ignore input material. -.NT Convention -Clients should not give up the input focus of their own volition. -They should ignore input that they receive instead. -.NE -.nH 3 "Colormaps" -.LP -The window manager is responsible for installing and uninstalling -colormaps on behalf of clients with top-level windows that -the window manager manages. -.LP -Clients provide the window manager with hints as to which colormaps to -install and uninstall. Clients must not install or uninstall colormaps -themselves (except under the circumstances noted below). When a client's -top-level window gets the colormap focus (as a result of whatever colormap -focus policy is implemented by the window manager), the window manager will -ensure that one or more of the client's colormaps are installed. -.LP -Clients whose top-level windows and subwindows all use the same colormap -should set its ID in the colormap field of the top-level window's -attributes. They should not set a WM_COLORMAP_WINDOWS property on the -top-level window. If they want to change the colormap, they should change -the top-level window's colormap attribute. The window manager will track -changes to the window's colormap attribute and install colormaps as -appropriate. -.LP -Clients that create windows can use the value -.PN CopyFrom\%Parent -to inherit their parent's colormap. Window managers will ensure that the -root window's colormap field contains a colormap that is suitable for -clients to inherit. In particular, the colormap will provide -distinguishable colors for -.PN BlackPixel -and -.PN WhitePixel . -.LP -Top-level windows that have subwindows or override-redirect pop-up windows -whose colormap requirements differ from the top-level window should have a -WM_COLORMAP_WINDOWS property. This property contains a list of IDs for -windows whose colormaps the window manager should attempt to have installed -when, in the course of its individual colormap focus policy, it assigns the -colormap focus to the top-level window (see section 4.1.2.8). The list is -ordered by the importance to the client of having the colormaps installed. -The window manager will track changes to this property and will track -changes to the colormap attribute of the windows in the property. -.LP -If the relative importance of colormaps changes, the client should update -the WM_COLORMAP_WINDOWS property to reflect the new ordering. If the -top-level window does not appear in the list, the window manager will assume -it to be of higher priority than any window in the list. -.LP -WM_TRANSIENT_FOR windows can either have their own WM_COLORMAP_WINDOWS -property or appear in the property of the window they are transient for, -as appropriate. -.NT Rationale -An alternative design was considered for how clients should hint to the -window manager about their colormap requirements. This alternative design -specified a list of colormaps instead of a list of windows. The current -design, a list of windows, was chosen for two reasons. First, it allows -window managers to find the visuals of the colormaps, thus permitting -visual-dependent colormap installation policies. Second, it allows window -managers to select for -.PN Visibility\%Change -events on the windows concerned and to ensure that colormaps are only -installed if the windows that need them are visible. The alternative design -allows for neither of these policies. -.NE -.NT "Advice to Implementors" -Clients should be aware of the min-installed-maps and max-installed-maps -fields of the connection setup information, and the effect that the minimum -value has on the \*Qrequired list\*U defined by the Protocol in the -description of the -.PN Install\%Colormap -request. Briefly, the min-installed-maps most recently installed maps are -guaranteed to be installed. This value is often one; clients needing -multiple colormaps should beware. -.NE -.LP -Whenever possible, clients should use the mechanisms described above and let -the window manager handle colormap installation. However, clients are -permitted to perform colormap installation on their own while they have the -pointer grabbed. A client performing colormap installation must notify the -window manager prior to the first installation. When the client has -finished its colormap installation, it must also notify the window manager. -The client notifies the window manager by issuing a -.PN Send\%Event -request with the following arguments: -.br -.LP -.ne 6 -.TS -tab(/) ; -lB lB -l lw(3.5i) -. -_ -.sp 6p -Argument/Value -.sp 6p -_ -destination:/T{ -the root window of the screen on -which the colormap is being installed -T} -propagate:/T{ -.PN False -T} -event-mask:/T{ -.PN ColormapChange -T} -T{ -event: a -.PN ClientMessage -with: -T} -\h'2m'window:/the root window, as above -\h'2m'type:/WM_COLORMAP_NOTIFY -\h'2m'format:/32 -\h'2m'data[0]:/T{ -the timestamp of the event that caused -the client to start or stop installing colormaps -T} -\h'2m'data[1]:/T{ -1 if the client is starting colormap installation, 0 if the client is -finished with colormap installation -T} -\h'2m'data[2]:/reserved, must be zero -\h'2m'data[3]:/reserved, must be zero -\h'2m'data[4]:/reserved, must be zero -.sp 6p -_ -.TE -.LP -This feature was introduced in version 2.0 of this document, and there will -be a significant period of time before all window managers can be expected -to implement this feature. Before using this feature, clients must check -the compliance level of the window manager (using the mechanism described in -section 4.3) to verify that it supports this feature. This is necessary to -prevent colormap installation conflicts between clients and older window -managers. -.LP -Window managers should refrain from installing colormaps while a client has -requested control of colormap installation. The window manager should -continue to track the set of installed colormaps so that it can reinstate -its colormap focus policy when the client has finished colormap installation. -.LP -This technique has race conditions that may result in the colormaps -continuing to be installed even after a client has issued its notification -message. For example, the window manager may have issued some -.PN Install\%Colormap -requests that are not executed until after the -client's -.PN SendEvent \% -and -.PN Install\%Colormap -requests, thus uninstalling the client's colormaps. If this occurs while -the client still has the pointer grabbed and before the client has issued -the \*Qfinished\*U message, the client may reinstall the desired colormaps. -.NT "Advice to Implementors" -Clients are expected to use this mechanism for things such as -pop-up windows and for animations that use override-redirect windows. -.\" Avoid .LP within a .NT, because it resets the margins. The .NT -.\" macro should probably be fixed. -.br -.sp \n(PDu -If a client fails to issue the \*Qfinished\*U message, the window manager -may be left in a state where its colormap installation policy is suspended. -Window manager implementors may want to implement a feature that resets -colormap installation policy in response to a command from the user. -.NE -.nH 3 "Icons" -.LP -A client can hint to the window manager about the desired appearance -of its icon by setting: -.bP -A string in WM_ICON_NAME. -.IP -All clients should do this -because it provides a fallback for window managers whose ideas -about icons differ widely from those of the client. -.bP -A -.PN Pixmap -into the icon_pixmap field of the WM_HINTS property -and possibly another into the icon_mask field. -.IP -The window manager is expected to display the pixmap masked by the mask. -The pixmap should be one of the sizes found in the WM_ICON_SIZE property -on the root. -If this property is not found, -the window manager is unlikely to display icon pixmaps. -Window managers usually will clip or tile pixmaps that do not match -WM_ICON_SIZE. -.bP -A window into the icon_window field of the WM_HINTS property. -.IP -The window manager is expected to map that window whenever the client is -in the Iconic state. -In general, -the size of the icon window should be one of those specified in WM_ICON_SIZE -on the root, if it exists. -Window managers are free to resize icon windows. -.LP -In the Iconic state, -the window manager usually will ensure that: -.bP -If the window's WM_HINTS.icon_window is set, -the window it names is visible. -.bP -If the window's WM_HINTS.icon_window is not set -but the window's WM_HINTS.icon_pixmap is set, -the pixmap it names is visible. -.bP -Otherwise, -the window's WM_ICON_NAME string is visible. -.LP -Clients should observe the following conventions about their icon windows: -.NT Conventions -.IP 1. 5 -The icon window should be an -.PN InputOutput -child of the root. -.IP 2. 5 -The icon window should be one of the sizes specified -in the WM_ICON_SIZE property on the root. -.IP 3. 5 -The icon window should use the root visual and default colormap -for the screen in question. -.IP 4. 5 -Clients should not map their icon windows. -.IP 5. 5 -Clients should not unmap their icon windows. -.IP 6. 5 -Clients should not configure their icon windows. -.IP 7. 5 -Clients should not set override-redirect on their icon windows -or select for -.PN Resize\%Redirect -events on them. -.IP 8. 5 -Clients must not depend on being able to receive input events -by means of their icon windows. -.IP 9. 5 -Clients must not manipulate the borders of their icon windows. -.IP 10. 5 -Clients must select for -.PN Exposure -events on their icon window and repaint it when requested. -.NE -.LP -Window managers will differ as to whether they support input events -to client's icon windows; -most will allow the client to receive some subset of the keys and buttons. -.LP -Window managers will ignore any WM_NAME, WM_ICON_NAME, WM_NORMAL_HINTS, -WM_HINTS, WM_CLASS, WM_TRANSIENT_FOR, WM_PROTOCOLS, WM_COLORMAP_WINDOWS, -WM_COMMAND, or WM_CLIENT_MACHINE -properties they find on icon windows. -.nH 3 "Pop-up Windows" -.LP -Clients that wish to pop up a window can do one of three things: -.IP 1. 5 -They can create and map another normal top-level window, -which will get decorated and managed as normal by the window manager. -See the discussion of window groups that follows. -.IP 2. 5 -If the window will be visible for a relatively short time -and deserves a somewhat lighter treatment, -they can set the WM_TRANSIENT_FOR property. -They can expect less decoration but can set all the normal -window manager properties on the window. -An example would be a dialog box. -.IP 3. 5 -If the window will be visible for a very short time -and should not be decorated at all, -the client can set override-redirect on the window. -In general, -this should be done only if the pointer is grabbed while the window is mapped. -The window manager will never interfere with these windows, -which should be used with caution. -An example of an appropriate use is a pop-up menu. -.NT "Advice to Implementors" -The user will not be able to move, resize, restack, or transfer the input -focus to override-redirect windows, since the window manager is not managing -them. If it is necessary for a client to receive keystrokes on an -override-redirect window, either the client must grab the keyboard or the -client must have another top-level window that is not override-redirect and -that has selected the Locally Active or Globally Active focus model. The -client may set the focus to the override-redirect window when the other -window receives a WM_TAKE_FOCUS message or one of the events listed in -section 4.1.7 in the description of the Globally Active focus model. -.NE -.LP -Window managers are free to decide if WM_TRANSIENT_FOR windows -should be iconified when the window they are transient for is. -Clients displaying WM_TRANSIENT_FOR windows that have -(or request to have) the window they are transient for iconified -do not need to request that the same operation be performed -on the WM_TRANSIENT_FOR window; -the window manager will change its state if that is the policy it wishes -to enforce. -.nH 3 "Window Groups" -.LP -A set of top-level windows that should be treated from the user's point of view -as related (even though they may belong to a number of clients) should be linked -together using the window_group field of the WM_HINTS structure. -.LP -One of the windows (that is, the one the others point to) -will be the group leader and will carry the group as opposed -to the individual properties. -Window managers may treat the group leader differently -from other windows in the group. -For example, -group leaders may have the full set of decorations, -and other group members may have a restricted set. -.LP -It is not necessary that the client ever map the group leader; -it may be a window that exists solely as a placeholder. -.LP -It is up to the window manager to determine the policy -for treating the windows in a group. -At present, -there is no way for a client to request a group, -as opposed to an individual, operation. -.nH 2 "Client Responses to Window Manager Actions" -.LP -The window manager performs a number of operations on client resources, -primarily on their top-level windows. -Clients must not try to fight this but may elect to receive notification -of the window manager's operations. -.nH 3 "Reparenting" -.LP -Clients must be aware that some window managers will reparent -their top-level windows -so that a window that was created as a child of the root will be displayed -as a child of some window belonging to the window manager. -The effects that this reparenting will have on the client are as follows: -.bP -The parent value returned by a -.PN QueryTree -request will no longer be the value supplied to the -.PN CreateWindow -request that created the reparented window. -There should be no need for the client to be aware of the identity -of the window to which the top-level window has been reparented. -In particular, -a client that wishes to create further top-level windows should continue -to use the root as the parent for these new windows. -.bP -The server will interpret the (x,y) coordinates in a -.PN ConfigureWindow -request in the new parent's coordinate space. -In fact, they usually will not be interpreted by the server -because a reparenting window manager usually will have intercepted -these operations (see section 4.2.2). -Clients should use the root coordinate space for these requests -(see section 4.1.5). -.bP -.PN ConfigureWindow -requests that name a specific sibling window may fail because the window named, -which used to be a sibling, no longer is after the reparenting operation -(see section 4.1.5). -.bP -The (x,y) coordinates returned by a -.PN GetGeometry -request are in the parent's coordinate space -and are thus not directly useful after a reparent operation. -.bP -A background of -.PN ParentRelative -will have unpredictable results. -.bP -A cursor of -.PN None -will have unpredictable results. -.LP -Clients that want to be notified when they are reparented can select for -.PN StructureNotify -events on their top-level window. -They will receive a -.PN ReparentNotify -event if and when reparenting takes place. -When a client withdraws a top-level window, the window manager will -reparent it back to the root window if the window had been reparented -elsewhere. -.LP -If the window manager reparents a client's window, -the reparented window will be placed in the save-set -of the parent window. -This means that the reparented window will not be destroyed -if the window manager terminates and will be remapped if it was unmapped. -Note that this applies to all client windows the window manager reparents, -including transient windows and client icon windows. -.nH 3 "Redirection of Operations" -.LP -Clients must be aware that some window managers will arrange -for some client requests to be intercepted and redirected. -Redirected requests are not executed; -they result instead in events being sent to the window manager, -which may decide to do nothing, to alter the arguments, -or to perform the request on behalf of the client. -.LP -The possibility that a request may be redirected means -that a client cannot assume that any redirectable request is actually -performed when the request is issued or is actually performed at all. -The requests that may be redirected are -.PN \%MapWindow , -.PN Configure\%Window , -and -.PN Circulate\%Window . -.NT "Advice to Implementors" -The following is incorrect because the -.PN MapWindow -request may be intercepted and the -.PN PolyLine -output made to an unmapped window: -.LP -.DS -MapWindow A -PolyLine A GC .\^.\^. -.DE -.LP -The client must wait for an -.PN Expose -event before drawing in the window.\** -.FS -This is true even if the client set the backing-store attribute to -.PN Always . -The backing-store attribute is a only a hint, -and the server may stop maintaining backing store contents at any time. -.FE -.LP -This next example incorrectly assumes that the -.PN ConfigureWindow -request is actually executed with the arguments supplied: -.LP -.DS -ConfigureWindow width=N height=M - -.DE -.LP -The client should select for -.PN Structure\%Notify -on its window and monitor the window's size by tracking -.PN Configure\%Notify -events. -.LP -Clients must be especially careful when attempting to set the focus to a -window that they have just mapped. This sequence may result in an X -protocol error: -.LP -.DS -MapWindow B -SetInputFocus B -.DE -.LP -If the -.PN Map\%Window -request has been intercepted, the window will still be -unmapped, causing the -.PN SetInput\%Focus -request to generate the error. The solution to this problem is for clients -to select for -.PN Visibility\%Change -on the window and to delay the issuance of the -.PN SetInput\%Focus -request until they have received a -.PN Visibility\%Notify -event indicating that the window is visible. -.LP -This technique does not guarantee correct operation. The user may have -iconified the window by the time the -.PN SetInput\%Focus -request reaches the server, still causing an error. Or the window manager -may decide to map the window into Iconic state, in which case the window -will not be visible. This will delay the generation of the -.PN Visibility\%Notify -event indefinitely. Clients must be prepared to handle these cases. -.NE -.LP -A window with the override-redirect bit set is immune from redirection, -but the bit should be set on top-level windows only in cases -where other windows should be prevented from processing input -while the override-redirect window is mapped (see section 4.1.10) -and while responding to -.PN ResizeRequest -events (see section 4.2.9). -.LP -Clients that have no non-Withdrawn top-level windows -and that map an override-redirect top-level window are taking over total -responsibility for the state of the system. -It is their responsibility to: -.bP -Prevent any preexisting window manager from interfering with their activities -.bP -Restore the status quo exactly after they unmap the window -so that any preexisting window manager does not get confused -.LP -In effect, clients of this kind are acting as temporary window managers. -Doing so is strongly discouraged because these clients will be unaware -of the user interface policies the window manager is trying to maintain -and because their user interface behavior is likely to conflict with that of -less demanding clients. -.nH 3 "Window Move" -.LP -If the window manager moves a top-level window without changing its size, -the client will receive a synthetic -.PN ConfigureNotify -event following the move that describes the new location -in terms of the root coordinate space. -Clients must not respond to being moved by attempting to move -themselves to a better location. -.LP -Any real -.PN ConfigureNotify -event on a top-level window implies that the window's position -on the root may have changed, -even though the event reports that the window's position -in its parent is unchanged because the window may have been reparented. -Note that the coordinates in the event will not, in this case, -be directly useful. -.LP -The window manager will send these events by using a -.PN SendEvent -request with the following arguments: -.br -.ne 6 -.TS -l l. -_ -.sp 6p -.B -Argument Value -.sp 6p -_ -.sp 6p -.R -destination: The client's window -propagate: T{ -.PN False -T} -event-mask: T{ -.PN StructureNotify -T} -.sp 6p -_ -.TE -.nH 3 "Window Resize" -.LP -The client can elect to receive notification of being resized by selecting for -.PN StructureNotify -events on its top-level windows. -It will receive a -.PN ConfigureNotify -event. -The size information in the event will be correct, -but the location will be in the parent window (which may not be the root). -.LP -The response of the client to being resized should be to accept -the size it has been given and to do its best with it. -Clients must not respond to being resized by attempting to resize -themselves to a better size. -If the size is impossible to work with, -clients are free to request to change to the Iconic state. -.nH 3 "Iconify and Deiconify" -.LP -A top-level window that is not Withdrawn will be -in the Normal state if it is mapped and in the Iconic state if it is unmapped. -This will be true even if the window has been reparented; -the window manager will unmap the window as well as its parent -when switching to the Iconic state. -.LP -The client can elect to be notified of these state changes by selecting for -.PN StructureNotify -events on the top-level window. -It will receive a -.PN UnmapNotify -event when it goes Iconic and a -.PN MapNotify -event when it goes Normal. -.nH 3 "Colormap Change" -.LP -Clients that wish to be notified of their colormaps being installed -or uninstalled should select for -.PN ColormapNotify -events on their top-level windows and on any windows they have named -in WM_COLORMAP_WINDOWS properties on their top-level windows. -They will receive -.PN ColormapNotify -events with the new field FALSE when the colormap for that window -is installed or uninstalled. -.nH 3 "Input Focus" -.LP -Clients can request notification that they have the input focus by selecting -for -.PN FocusChange -events on their top-level windows; -they will receive -.PN FocusIn -and -.PN FocusOut -events. -Clients that need to set the input focus to one of their -subwindows should not do so unless -they have set WM_TAKE_FOCUS in their WM_PROTOCOLS property -and have done one of the following: -.bP -Set the input field of WM_HINTS to -.PN True -and actually have the input focus in one of their top-level windows -.bP -Set the input field of WM_HINTS to -.PN False -and have received a suitable event as described in section 4.1.7 -.bP -Have received a WM_TAKE_FOCUS message as described in section 4.1.7 -.LP -Clients should not warp the pointer in an attempt to transfer the focus; -they should set the focus and leave the pointer alone. -For further information, -see section 6.2. -.LP -Once a client satisfies these conditions, -it may transfer the focus to another of its windows by using the -.PN SetInputFocus -request, which is defined as follows: -.LP -.sM -.IN "SetInputFocus" "" "@DEF@" -.PN SetInputFocus -.IP "" .2i -\fIfocus\fP\^: WINDOW or -.PN PointerRoot -or -.PN None -.br -\fIrevert-to\fP\^: -.Pn { Parent , -.PN PointerRoot , -.PN None } -.br -\fItime\fP\^: TIMESTAMP or -.PN CurrentTime -.LP -.eM -.NT Conventions -.IP 1. 5 -Clients that use a -.PN SetInputFocus -request must set the time argument to the timestamp of the event -that caused them to make the attempt. -This cannot be a -.PN FocusIn -event because they do not have timestamps. -Clients may also acquire the focus without a corresponding -.PN EnterNotify -event. -Clients must not use -.PN CurrentTime -for the time argument. -.IP 2. 5 -Clients that use a -.PN SetInputFocus -request to set the focus to one of their windows must set -the revert-to field to -.PN Parent . -.NE -.nH 3 "ClientMessage Events" -.LP -There is no way for clients to prevent themselves being sent -.PN ClientMessage -events. -.LP -Top-level windows with a WM_PROTOCOLS property may be sent -.PN ClientMessage -events specific to the protocols named by the atoms in the property -(see section 4.1.2.7). -For all protocols, the -.PN ClientMessage -events have the following: -.bP -WM_PROTOCOLS as the type field -.bP -Format 32 -.bP -The atom that names their protocol in the data[0] field -.bP -A timestamp in their data[1] field -.LP -The remaining fields of the event, -including the window field, -are determined by the protocol. -.LP -These events will be sent by using a -.PN SendEvent -request with the following arguments: -.br -.ne 6 -.TS -l l. -_ -.sp 6p -.B -Argument Value -.sp 6p -_ -.sp 6p -.R -destination: The client's window -propagate: T{ -.PN False -T} -event-mask: () empty -event: As specified by the protocol -.sp 6p -_ -.TE -.nH 4 "Window Deletion" -.LP -Clients, usually those with multiple top-level windows, whose server -connection must survive the deletion of some of their top-level windows, -should include the atom WM_DELETE_WINDOW in the WM_PROTOCOLS property on -each such window. They will receive a -.PN ClientMessage -event as described above whose data[0] field is WM_DELETE_WINDOW. -.LP -Clients receiving a WM_DELETE_WINDOW message should behave as if the user -selected \*Qdelete window\*U from a hypothetical menu. -They should perform any confirmation dialog with the user -and, if they decide to complete the deletion, should do the following: -.bP -Either change the window's state to Withdrawn (as described in section 4.1.4) -or destroy the window. -.bP -Destroy any internal state associated with the window. -.LP -If the user aborts the deletion during the confirmation dialog, -the client should ignore the message. -.LP -Clients are permitted to interact with the user and ask, for example, -whether a file associated with the window to be deleted should be saved -or the window deletion should be cancelled. -Clients are not required to destroy the window itself; -the resource may be reused, -but all associated state (for example, backing store) should be released. -.LP -If the client aborts a destroy and the user then selects DELETE WINDOW again, -the window manager should start the WM_DELETE_WINDOW protocol again. -Window managers should not use -.PN DestroyWindow -requests on a window that has WM_DELETE_WINDOW in its WM_PROTOCOLS property. -.LP -Clients that choose not to include WM_DELETE_WINDOW in the WM_PROTOCOLS -property may be disconnected from the server -if the user asks for one of the client's top-level windows to be deleted. -.nH 3 "Redirecting Requests" -.LP -Normal clients can use the redirection mechanism just as window managers do -by selecting for -.PN SubstructureRedirect -events on a parent window or -.PN ResizeRedirect -events on a window itself. -However, at most, -one client per window can select for these events, -and a convention is needed to avoid clashes. -.NT Convention -Clients (including window managers) should select for -.PN SubstructureRedirect -and -.PN ResizeRedirect -events only on windows that they own. -.NE -.LP -In particular, -clients that need to take some special action if they are resized can select -for -.PN Resize\%Redirect -events on their top-level windows. -They will receive a -.PN ResizeRequest -event if the window manager resizes their window, -and the resize will not actually take place. -Clients are free to make what use they like of the information -that the window manager wants to change their size, -but they must configure the window to the width and height specified -in the event in a timely fashion. -To ensure that the resize will actually happen at this stage -instead of being intercepted and executed by the window manager -(and thus restarting the process), -the client needs temporarily to set override-redirect on the window. -.NT Convention -Clients receiving -.PN ResizeRequest -events must respond by doing the following: -.bP -Setting override-redirect on the window specified in the event -.bP -Configuring the window specified in the event -to the width and height specified in the event as soon as possible -and before making any other geometry requests -.bP -Clearing override-redirect on the window specified in the event -.NE -.LP -If a window manager detects that a client is not obeying this convention, -it is free to take whatever measures it deems appropriate to deal with -the client. -.nH 2 "Communication with the Window Manager by Means of Selections" -.LP -For each screen they manage, window managers will acquire ownership of a -selection named WM_S\fIn\fP, where \fIn\fP is the screen number, as -described in section 1.2.6. Window managers should comply with the -conventions for \*QManager Selections\*U described in section 2.8. The -intent is for clients to be able to request a variety of information or -services by issuing conversion requests on this selection. Window managers -should support conversion of the following target on their manager -selection: -.LP -.br -.ne 8 -.TS -l l lw(3.5i) . -_ -.sp 6p -.B -Atom Type Data Received -.R -.sp 6p -_ -.sp 6p -VERSION INTEGER T{ -Two integers, which are the major and minor -release numbers (respectively) of the ICCCM -with which the window manager complies. For -this version of the ICCCM, the numbers are -2 and 0.\** -T} -.sp 6p -_ -.TE -.FS -As a special case, clients not wishing to implement a selection -request may simply issue a -.PN GetSelectionOwner -request on the appropriate WM_S\fIn\fP selection. If this selection is owned, -clients may assume that the window manager complies with ICCCM version 2.0 -or later. -.FE -.nH 2 "Summary of Window Manager Property Types" -.LP -The window manager properties are summarized in the following table -(see also section 14.1 of \fIXlib \- C Language X Interface\fP). -.br -.ne 6 -.TS H -l l n c. -_ -.sp 6p -.B -Name Type Format See Section -.sp 6p -_ -.sp 6p -.TH -.R -WM_CLASS STRING 8 4.1.2.5 -WM_CLIENT_MACHINE TEXT \& 4.1.2.9 -WM_COLORMAP_WINDOWS WINDOW 32 4.1.2.8 -WM_HINTS WM_HINTS 32 4.1.2.4 -WM_ICON_NAME TEXT 4.1.2.2 -WM_ICON_SIZE WM_ICON_SIZE 32 4.1.3.2 -WM_NAME TEXT 4.1.2.1 -WM_NORMAL_HINTS WM_SIZE_HINTS 32 4.1.2.3 -WM_PROTOCOLS ATOM 32 4.1.2.7 -WM_STATE WM_STATE 32 4.1.3.1 -WM_TRANSIENT_FOR WINDOW 32 4.1.2.6 -.sp 6p -_ -.TE -.nH 1 "Session Management and Additional Inter-Client Exchanges" -.LP -This section contains some conventions for clients that participate in -session management. See -.I -X Session Management Protocol -.R -for further details. Clients that do not support this protocol cannot -expect their window state (e.g., WM_STATE, position, size, and stacking order) -to be preserved across sessions. -.nH 2 "Client Support for Session Management" -.LP -Each session participant will obtain a unique client identifier (client-ID) -from the session manager. The client must identify one top-level window as -the \*Qclient leader.\*U This window must be created by the client. It may -be in any state, including the Withdrawn state. The client leader window -must have a SM_CLIENT_ID property, which contains the client-ID obtained -from the session management protocol. That property must: -.bP -Be of type STRING -.bP -Be of format 8 -.bP -Contain the client-ID as a string of XPCS characters encoded using ISO -8859-1 -.LP -All top-level, nontransient windows created by a client on the same display -as the client leader must have a WM_CLIENT_LEADER property. This property -contains a window ID that identifies the client leader window. The client -leader window must have a WM_CLIENT_LEADER property containing its own -window ID (i.e., the client leader window is pointing to itself). Transient -windows need not have a WM_CLIENT_LEADER property if the client leader can -be determined using the information in the WM_TRANSIENT_FOR property. The -WM_CLIENT_LEADER property must: -.bP -Be of type WINDOW -.bP -Be of format 32 -.bP -Contain the window ID of the client leader window -.LP -A client must withdraw all of its top-level windows on the same display -before modifiying either the WM_CLIENT_LEADER or the SM_CLIENT_ID property -of its client leader window. -.LP -It is necessary that other clients be able to uniquely identify a window -(across sessions) among all windows related to the same client-ID. For -example, a window manager can require this unique ID to restore geometry -information from a previous session, or a workspace manager could use it to -restore information about which windows are in which workspace. A client -may optionally provide a WM_WINDOW_ROLE property to uniquely identify a -window within the scope specified above. The combination of SM_CLIENT_ID -and WM_WINDOW_ROLE can be used by other clients to uniquely identify a -window across sessions. -.LP -If the WM_WINDOW_ROLE property is not specified on a top-level window, a -client that needs to uniquely identify that window will try to use instead -the values of WM_CLASS and WM_NAME. If a client has multiple windows with -identical WM_CLASS and WM_NAME properties, then it should provide a -WM_WINDOW_ROLE property. -.LP -The client must set the WM_WINDOW_ROLE property to a string that uniquely -identifies that window among all windows that have the same client leader -window. The property must: -.bP -Be of type STRING -.bP -Be of format 8 -.bP -Contain a string restricted to the XPCS characters, encoded in ISO 8859-1 -.nH 2 "Window Manager Support for Session Management" -.LP -A window manager supporting session management must register with the -session manager and obtain its own client-ID. The window manager should -save and restore information such as the WM_STATE, the layout of windows on -the screen, and their stacking order for every client window that has a -valid SM_CLIENT_ID property (on itself, or on the window named by -WM_CLIENT_LEADER) and that can be uniquely identified. -Clients are allowed to change this state during the first phase of the -session checkpoint process. Therefore, window managers should request a -second checkpoint phase and save clients' state only during that phase. -.nH 2 "Support for ICE Client Rendezvous" -.IN "ICE Rendezvous" -.LP -The Inter-Client Exchange protocol (ICE) defined as of X11R6 -specifies a generic communication framework, independent of the X -server, for data exchange between arbitrary clients. ICE also defines -a protocol for any two ICE clients who also have X connections -to the same X server to locate (rendezvous with) each other. -.LP -This protocol, called the "ICE X Rendezvous" protocol, is defined in -the ICE specification, Appendix B, -and uses the property ICE_PROTOCOLS plus -.PN ClientMessage -events. Refer to that specification for complete details. -.nH 1 "Manipulation of Shared Resources" -.LP -X Version 11 permits clients to manipulate a number of shared resources, -for example, the input focus, the pointer, and colormaps. -Conventions are required so that clients share resources in an -orderly fashion. -.nH 2 "The Input Focus" -.LP -Clients that explicitly set the input focus must observe one of two modes: -.bP -Locally active mode -.bP -Globally active mode -.NT Conventions -.IP 1. 5 -Locally active clients should set the input focus to one of their windows -only when it is already in one of their windows -or when they receive a WM_TAKE_FOCUS message. -They should set the input field of the WM_HINTS structure to -.PN True . -.IP 2. 5 -Globally active clients should set the input focus to one of their windows -only when they receive a button event and a passive-grabbed key event, -or when they receive a WM_TAKE_FOCUS message. -They should set the input field of the WM_HINTS structure to -.PN False . -.IP 3. 5 -In addition, clients should use the timestamp of the event -that caused them to attempt to set the input focus as the time field on the -.PN SetInputFocus -request, not -.PN CurrentTime . -.NE -.nH 2 "The Pointer" -.LP -In general, clients should not warp the pointer. -Window managers, however, may do so -(for example, to maintain the invariant that the pointer is always -in the window with the input focus). -Other window managers may want to preserve the illusion that the user -is in sole control of the pointer. -.NT Conventions -.IP 1. 5 -Clients should not warp the pointer. -.IP 2. 5 -Clients that insist on warping the pointer should do so only -with the src-window argument of the -.PN WarpPointer -request set to one of their windows. -.NE -.nH 2 "Grabs" -.LP -A client's attempt to establish a button or a key grab on a window -will fail if some other client has already established a conflicting -grab on the same window. -The grabs, therefore, are shared resources, -and their use requires conventions. -.LP -In conformance with the principle that clients should behave, -as far as possible, -when a window manager is running as they would when it is not, -a client that has the input focus may assume that it can receive all -the available keys and buttons. -.NT Convention -Window managers should ensure that they provide some mechanism for -their clients to receive events from all keys and all buttons, -except for events involving keys whose KeySyms are registered as being for -window management functions (for example, a hypothetical WINDOW KeySym). -.NE -.LP -In other words, -window managers must provide some mechanism by which a client -can receive events from every key and button (regardless of modifiers) -unless and until the X Consortium registers some KeySyms as being reserved -for window management functions. -Currently, no KeySyms are registered for window management functions. -.LP -Even so, clients are advised to allow the key and button combinations -used to elicit program actions to be modified, -because some window managers may choose not to observe this convention -or may not provide a convenient method for the user to transmit events -from some keys. -.NT Convention -Clients should establish button and key grabs only on windows that -they own. -.NE -.LP -In particular, this convention means that a window manager that wishes -to establish a grab over the client's top-level window should either establish -the grab on the root or reparent the window and establish the grab -on a proper ancestor. -In some cases, -a window manager may want to consume the event received, -placing the window in a state where a subsequent such event will go to -the client. -Examples are: -.bP -Clicking in a window to set focus with the click not being offered -to the client -.bP -Clicking in a buried window to raise it, again, with the click not offered -to the client -.LP -More typically, -a window manager should add to, rather than replace, the client's semantics -for key+button combinations by allowing the event to be used by the client -after the window manager is done with it. -To ensure this, -the window manager should establish the grab on the parent -by using the following: -.LP -.Ds -pointer/keyboard-mode == Synchronous -.De -.LP -Then, the window manager should release the grab by using an -.PN AllowEvents -request with the following specified: -.LP -.Ds -mode == ReplayPointer/Keyboard -.De -.LP -In this way, -the client will receive the events as if they had not been intercepted. -.LP -Obviously, -these conventions place some constraints on possible user interface policies. -There is a trade-off here between freedom for window managers to implement -their user interface policies and freedom for clients to implement theirs. -The dilemma is resolved by: -.bP -Allowing window managers to decide if and when a client will receive an -event from any given key or button -.bP -Placing a requirement on the window manager to provide some mechanism, -perhaps a \*QQuote\*U key, -by which the user can send an event from any key or button to the client -.nH 2 "Colormaps" -.LP -Section 4.1.8 prescribes conventions for clients to communicate with the -window manager about their colormap needs. If your clients are -.PN DirectColor -type applications, -you should consult section 14.3 of \fIXlib \- C Language X Interface\fP -for conventions connected with sharing standard colormaps. -They should look for and create the properties described there on -the root window of the appropriate screen. -.LP -The contents of the RGB_COLOR_MAP type property are as follows: -.br -.ne 6 -.TS H -l l l. -_ -.sp 6p -.B -Field Type Comments -.sp 6p -_ -.sp 6p -.TH -.R -colormap COLORMAP ID of the colormap described -red_max CARD32 Values for pixel calculations -red_mult CARD32 -green_max CARD32 -green_mult CARD32 -blue_max CARD32 -blue_mult CARD32 -base_pixel CARD32 -visual_id VISUALID Visual to which colormap belongs -kill_id CARD32 ID for destroying the resources -.sp 6p -_ -.TE -.LP -When deleting or replacing an RGB_COLOR_MAP, -it is not sufficient to delete the property; -it is important to free the associated colormap resources as well. -If kill_id is greater than one, -the resources should be freed by issuing a -.PN KillClient -request with kill_id as the argument. -If kill_id is one, -the resources should be freed by issuing a -.PN FreeColormap -request with colormap as the colormap -argument. -If kill_id is zero, -no attempt should be made to free the resources. -A client that creates an RGB_COLOR_MAP for which the colormap resource -is created specifically for this purpose should set kill_id to one -(and can create more than one such standard colormap -using a single connection). -A client that creates an RGB_COLOR_MAP for which the colormap resource -is shared in some way (for example, is the default colormap -for the root window) should create an arbitrary resource and use its -resource ID for kill_id (and should create no other standard colormaps -on the connection). -.NT Convention -If an RGB_COLOR_MAP property is too short to contain the visual_id field, -it can be assumed that the visual_id is the root visual -of the appropriate screen. -If an RGB_COLOR_MAP property is too short to contain the kill_id field, -a value of zero can be assumed. -.NE -.LP -During the connection handshake, -the server informs the client of the default colormap for each screen. -This is a colormap for the root visual, -and clients can use it to improve the extent of colormap sharing -if they use the root visual. -.nH 2 "The Keyboard Mapping" -.LP -The X server contains a table (which is read by -.PN GetKeyboardMapping -requests) that describes the set of symbols appearing -on the corresponding key for each keycode generated by the server. -This table does not affect the server's operations in any way; -it is simply a database used by clients that attempt to understand -the keycodes they receive. -Nevertheless, it is a shared resource and requires conventions. -.LP -It is possible for clients to modify this table by using a -.PN ChangeKeyboardMapping -request. -In general, clients should not do this. -In particular, this is not the way in which clients should implement -key bindings or key remapping. -The conversion between a sequence of keycodes received from the server -and a string in a particular encoding is a private matter for each client -(as it must be in a world where applications may be using different -encodings to support different languages and fonts). -See the Xlib reference manual for converting keyboard events to text. -.LP -The only valid reason for using a -.PN ChangeKeyboardMapping -request is when the symbols written on the keys have changed as, for example, -when a Dvorak key conversion kit or a set of APL keycaps has been installed. -Of course, a client may have to take the change to the keycap on trust. -.LP -The following illustrates a permissible interaction between a client -and a user: -.IP Client: 10 -\*QYou just started me on a server without a Pause key. -Please choose a key to be the Pause key and press it now.\*U -.IP User: 10 -Presses the Scroll Lock key -.IP Client: 10 -\*QAdding Pause to the symbols on the Scroll Lock key: Confirm or Abort.\*U -.IP User: 10 -Confirms -.IP Client: 10 -Uses a -.PN ChangeKeyboardMapping -request to add Pause to the keycode that already contains Scroll Lock and -issues this request, \*QPlease paint Pause on the Scroll Lock key.\*U -.NT Convention -Clients should not use -.PN ChangeKeyboardMapping -requests. -.NE -.LP -If a client succeeds in changing the keyboard mapping table, -all clients will receive -.PN MappingNotify (request==Keyboard) -events. -There is no mechanism to avoid receiving these events. -.NT Convention -Clients receiving -.PN MappingNotify (request==Keyboard) -events should update any internal keycode translation tables they are using. -.NE -.nH 2 "The Modifier Mapping" -.LP -X Version 11 supports 8 modifier bits of which 3 are preassigned -to Shift, Lock, and Control. -Each modifier bit is controlled by the state of a set of keys, -and these sets are specified in a table accessed by -.PN GetModifierMapping -and -.PN SetModifierMapping -requests. -This table is a shared resource and requires conventions. -.LP -A client that needs to use one of the preassigned modifiers should assume -that the modifier table has been set up correctly to control these modifiers. -The Lock modifier should be interpreted as Caps Lock or Shift Lock -according as the keycodes in its controlling set include XK_Caps_Lock -or XK_Shift_Lock. -.NT Convention -Clients should determine the meaning of a modifier bit from the KeySyms -being used to control it. -.NE -.LP -A client that needs to use an extra modifier (for example, META) should do -the following: -.bP -Scan the existing modifier mappings. -If it finds a modifier that contains a keycode whose set of KeySyms -includes XK_Meta_L or XK_Meta_R, -it should use that modifier bit. -.bP -If there is no existing modifier controlled by XK_Meta_L or XK_Meta_R, -it should select an unused modifier bit (one with an empty controlling set) -and do the following: -.RS -.IP \- 5 -If there is a keycode with XL_Meta_L in its set of KeySyms, -add that keycode to the set for the chosen modifier. -.IP \- 5 -If there is a keycode with XL_Meta_R in its set of KeySyms, -add that keycode to the set for the chosen modifier. -.IP \- 5 -If the controlling set is still empty, -interact with the user to select one or more keys to be META. -.RE -.bP -If there are no unused modifier bits, -ask the user to take corrective action. -.NT Conventions -.IP 1. 5 -Clients needing a modifier not currently in use should assign keycodes -carrying suitable KeySyms to an unused modifier bit. -.IP 2. 5 -Clients assigning their own modifier bits should ask the user politely to -remove his or her hands from the key in question if their -.PN SetModifierMapping -request returns a -.PN Busy -status. -.NE -.LP -There is no good solution to the problem of reclaiming assignments -to the five nonpreassigned modifiers when they are no longer being used. -.NT Convention -The user must use -.PN xmodmap -or some other utility to deassign obsolete modifier mappings by hand. -.NE -.LP -When a client succeeds in performing a -.PN SetModifierMapping -request, -all clients will receive -.PN MappingNotify (request==Modifier) -events. -There is no mechanism for preventing these events from being received. -A client that uses one of the nonpreassigned modifiers that receives -one of these events should do a -.PN GetModifierMapping -request to discover the new mapping, -and if the modifier it is using has been cleared, -it should reinstall the modifier. -.LP -Note that a -.PN GrabServer -request must be used to make the -.PN GetModifierMapping -and -.PN SetModifierMapping -pair in these transactions atomic. -.nH 1 "Device Color Characterization" -.LP -.EQ -delim @@ -define oc % "\\fR{\\fP" % -define cc % "\\fR}\\fP" % -.EN -The X protocol provides explicit Red, Green, and Blue (RGB) values, -which are used to directly drive a monitor, and color names. RGB values -provide a mechanism for accessing the full capabilities of the display -device, but at the expense of having the color perceived by the user remain -unknowable through the protocol. Color names were originally designed to -provide access to a device-independent color database by having the server -vendor tune the definitions of the colors in that textual database. -Unfortunately, this still does not provide the client any way of using -an existing device-independent color, nor for the client to get -device-independent color information back about colors that it has selected. -.LP -Furthermore, the client must be able to discover which set of colors are -displayable by the device (the device gamut), both to allow colors to be -intelligently modified to fit within the device capabilities (gamut -compression) and to enable the user interface to display a representation of -the reachable color space to the user (gamut display). -.LP -Therefore, a system is needed that will provide full access to -device-independent color spaces for X clients. This system should use a -standard mechanism for naming the colors, be able to provide names for -existing colors, and provide means by which unreachable colors can be -modified to fall within the device gamut. -.LP -We are fortunate in this area to have a seminal work, the 1931 CIE color -standard, which is nearly universally agreed upon as adequate for describing -colors on CRT devices. This standard uses a tri-stimulus model called CIE -XYZ in which each perceivable color is specified as a triplet of numbers. -Other appropriate device-independent color models do exist, but most of them -are directly traceable back to this original work. -.LP -X device color characterization -provides device-independent color spaces to X clients. It does this by -providing the barest possible amount of information to the client that -allows the client to construct a mapping between CIE XYZ and the regular X -RGB color descriptions. -.LP -Device color characterization is defined by -the name and contents of two window properties that, -together, permit converting between CIE XYZ space and -linear RGB device space (such as standard CRTs). -Linear RGB devices require just two -pieces of information to completely characterize them: -.IP \(bu 5 -A @3 times 3@ matrix @M@ and its inverse @M sup -1@, which convert between -XYZ and RGB intensity (@RGB sub intensity@): -.EQ C -RGB sub intensity ~ = ~ M ~ times ~ XYZ -.EN -.EQ C -XYZ ~ = ~ M sup -1 ~ times ~ RGB sub intensity -.EN -.IP \(bu 5 -A way of mapping between RGB intensity and RGB protocol value. XDCCC -supports three mechanisms which will be outlined later. -.LP -If other device types are eventually necessary, additional -properties will be required to describe them. -.nH 2 "XYZ \*(dA RGB Conversion Matrices" -.LP -Because of the limited dynamic range of both XYZ and RGB intensity, -these matrices will be encoded using a fixed-point representation of a -32-bit two's complement number scaled by @2 sup 27@, giving a range of @-16@ to -@16 - epsilon@, where @epsilon ~ = ~ 2 sup -27@. -.LP -These matrices will be packed into an 18-element list of 32-bit values, -XYZ \(-> RGB matrix first, in row major order and stored in the -XDCCC_LINEAR_RGB_MATRICES properties (format = 32) on the root window of -each screen, using values appropriate for that screen. -.LP -This will be encoded as shown in the following table: -.br -.ne 6 -.TS -center; -c s s -c c c -l l l. -XDCCC_LINEAR_RGB_MATRICES property contents -.sp 6p -_ -.sp 6p -.B -Field Type Comments -.R -.sp 6p -_ -.sp 6p -@M sub 0,0@ INT32 Interpreted as a fixed-point number @-16~<=~x~<~16@ -@M sub 0,1@ INT32 -\&.\^.\^. -@M sub 3,3@ INT32 -@{M sup -1} sub 0,0@ INT32 -@{M sup -1} sub 0,1@ INT32 -\&.\^.\^. -@{M sup -1} sub 3,3@ INT32 -.sp 6p -_ -.TE -.nH 2 "Intensity \*(dA RGB Value Conversion" -.LP -XDCCC provides two representations for describing the conversion -between RGB intensity and the actual X protocol RGB values: -.DS -.TA .5i -.ta .5i -0 RGB value/RGB intensity level pairs -1 RGB intensity ramp -.DE -.LP -In both cases, the relevant data will be stored in the -XDCCC_LINEAR_RGB_CORRECTION properties on the root window of each screen, -using values appropriate for that screen, in whatever format provides -adequate resolution. Each property can consist of multiple entries -concatenated together, if different visuals for the screen require different -conversion data. An entry with a VisualID of 0 specifies data for all -visuals of the screen that are not otherwise explicitly listed. -.LP -The first representation is an array of RGB value/intensity level pairs, with -the RGB values in strictly increasing order. When converting, the client must -linearly interpolate between adjacent entries in the table to compute the -desired value. This allows the server to perform gamma correction -itself and encode that fact in a short two-element correction table. The -intensity will be encoded as an unsigned number to be interpreted as a value -between 0 and 1 (inclusive). The precision of this value will depend on the -format of the property in which it is stored (8, 16, or 32 bits). For 16-bit -and 32-bit formats, the RGB value will simply be the value stored in the -property. When stored in 8-bit format, the RGB value can be computed from -the value in the property by: -.EQ C -RGB sub value ~ = ~ { Property ~ Value ~ times ~ 65535 } over 255 -.EN -.LP -Because the three electron guns in the device may not be exactly alike in -response characteristics, it is necessary to allow for three separate -tables, one each for red, green, and blue. Therefore, each table will be -preceded by the number of entries in that table, and the set of tables will be -preceded by the number of tables. -When three tables are provided, they will be in red, green, blue order. -.LP -This will be encoded as shown in the following table: -.br -.ne 6 -.TS -center; -c s s -c c c -l l l. -XDCCC_LINEAR_RGB_CORRECTION Property Contents for Type 0 Correction -.sp 6p -_ -.sp 6p -.B -Field Type Comments -.R -.sp 6p -_ -.sp 6p -VisualID0 CARD Most significant portion of VisualID -VisualID1 CARD Exists if and only if the property format is 8 -VisualID2 CARD Exists if and only if the property format is 8 -VisualID3 CARD T{ -Least significant portion, exists if and only if the property format -is 8 or 16 -T} -type CARD 0 for this type of correction -count CARD Number of tables following (either 1 or 3) -length CARD Number of pairs \- 1 following in this table -value CARD X Protocol RGB value -intensity CARD Interpret as a number @0~<=~intensity~<=~1@ -\&.\^.\^. .\^.\^. Total of \fIlength+1\fP pairs of value/intensity values -lengthg CARD T{ -Number of pairs \- 1 following in this table (if and -only if \fIcount\fP is 3) -T} -value CARD X Protocol RGB value -intensity CARD Interpret as a number @0~<=~intensity~<=~1@ -\&.\^.\^. .\^.\^. Total of \fIlengthg+1\fP pairs of value/intensity values -lengthb CARD T{ -Number of pairs \- 1 following in this table (if and -only if \fIcount\fP is 3) -T} -value CARD X Protocol RGB value -intensity CARD Interpret as a number @0~<=~intensity~<=~1@ -\&.\^.\^. .\^.\^. Total of \fIlengthb+1\fP pairs of value/intensity values -.sp 6p -_ -.TE -.LP -The VisualID is stored in 4, 2, or 1 pieces, depending on whether -the property format is 8, 16, or 32, respectively. The VisualID is always -stored most significant piece first. -Note that the length fields are stored as one less than the actual length, -so 256 entries can be stored in format 8. -.LP -The second representation is a simple array of intensities for a linear subset -of RGB values. The expected size of this table is the bits-per-rgb-value of -the screen, but it can be any length. This is similar to the first mechanism, -except that the RGB value numbers are implicitly defined by the index in the -array (indices start at 0): -.EQ C -RGB sub value ~ = ~ { Array ~ Index ~ times ~ 65535 } over -{ Array ~ Size ~ - ~ 1 } -.EN -When converting, the client may linearly interpolate between entries in this -table. The intensity values will be encoded just as in the first -representation. -.LP -This will be encoded as shown in the following table: -.br -.ne 6 -.TS -center; -c s s -c c c -l l l. -XDCCC_LINEAR_RGB_CORRECTION Property Contents for Type 1 Correction -.sp 6p -_ -.sp 6p -.B -Field Type Comments -.R -.sp 6p -_ -.sp 6p -VisualID0 CARD Most significant portion of VisualID -VisualID1 CARD Exists if and only if the property format is 8 -VisualID2 CARD Exists if and only if the property format is 8 -VisualID3 CARD T{ -Least significant portion, exists if and only if -the property format is 8 or 16 -T} -type CARD 1 for this type of correction -count CARD Number of tables following (either 1 or 3) -length CARD Number of elements \- 1 following in this table -intensity CARD Interpret as a number @0~<=~intensity~<=~1@ -\&.\^.\^. .\^.\^. Total of \fIlength+1\fP intensity elements -lengthg CARD T{ -Number of elements \- 1 following in this table (if and -only if \fIcount\fP is 3) -T} -intensity CARD Interpret as a number @0~<=~intensity~<=~1@ -\&.\^.\^. .\^.\^. Total of \fIlengthg+1\fP intensity elements -lengthb CARD T{ -Number of elements \- 1 following in this table (if and -only if \fIcount\fP is 3) -T} -intensity CARD Interpret as a number @0~<=~intensity~<=~1@ -\&.\^.\^. .\^.\^. Total of \fIlengthb+1\fP intensity elements -.sp 6p -_ -.TE -.nH 1 "Conclusion" -.LP -This document provides the protocol-level specification of the minimal -conventions needed to ensure that X Version 11 clients can interoperate -properly. This document specifies interoperability conventions only for the -X Version 11 protocol. Clients should be aware of other protocols that -should be used for better interoperation in the X environment. The reader -is referred to -.I -X Session Management Protocol -.R -for information on session management, and to -.I -Inter-Client Exchange Protocol -.R -for information on general-purpose communication among clients. -.nH 2 "The X Registry" -.IN "Registry" -.IN "X Registry" -.LP -The X Consortium maintains a registry of certain X-related items, to aid in -avoiding conflicts and in sharing of such items. Readers are -encouraged to use the registry. The classes of items kept in the registry -that are relevant to the ICCCM include property names, property types, -selection names, selection targets, WM_PROTOCOLS protocols, -.PN Client\%Message -types, and application classes. Requests to register items, or questions -about registration, should be addressed to -.EQ -delim off -.EN -.DS - xregistry@x.org -.DE -or to -.DS - The X.Org Group -- X11 Registry - c/o Ienup Sung - Sun Microsystems, Inc. - 4150 Network Circle, MS SJC07-201 - Santa Clara, CA 95054 - USA -.DE -Electronic mail will be acknowledged upon receipt. Please allow up to 4 -weeks for a formal response to registration and inquiries. -.LP -The registry is published as part of the X software distribution from the X -Consortium. All registered items must have the postal address of someone -responsible for the item or a reference to a document describing the item -and the postal address of where to write to obtain the document. -.bp -.\" Set registers to number the appendixes A.1, B.1, C.1, ... -.nr H1 0 -.af H1 A -.cT "Appendix A" no -.nH 1 "Revision History" -.LP -This appendix describes the revision history of this document and -summarizes the incompatibilities between this and earlier versions. -.nH 2 "The X11R2 Draft" -.LP -The February 25, 1988, draft that was distributed as part of X Version 11, -Release 2, was clearly labeled as such, -and many areas were explicitly labeled as liable to change. -Nevertheless, in the revision work done since then, -we have been very careful not to introduce gratuitous incompatibility. -As far as possible, -we have tried to ensure that clients obeying the conventions -in the X11R2 draft would still work. -.nH 2 "The July 27, 1988, Draft" -.LP -The Consortium review was based on a draft dated July 27, 1988. This draft -included several areas in which incompatibilities with the X11R2 draft were -necessary: -.bP -The use of property -.PN None -in -.PN ConvertSelection -requests is no longer allowed. -Owners that receive them are free to use the target atom as the property -to respond with, -which will work in most cases. -.bP -The protocol for INCREMENTAL type properties as selection replies has changed, -and the name has been changed to INCR. -Selection requestors are free to implement the earlier protocol -if they receive properties of type INCREMENTAL. -.bP -The protocol for INDIRECT type properties as selection replies has changed, -and the name has been changed to MULTIPLE. -Selection requestors are free to implement the earlier protocol -if they receive properties of type INDIRECT. -.bP -The protocol for the special CLIPBOARD client has changed. -The earlier protocol is subject to race conditions and should not be used. -.bP -The set of state values in WM_HINTS.initial_state has been reduced, -but the values that are still valid are unchanged. -Window managers should treat the other values sensibly. -.bP -The methods an application uses to change the state of its top-level window -have changed but in such a way that cases that used to work will still work. -.bP -The x, y, width, and height fields have been removed from the WM_NORMAL_HINTS -property and replaced by pad fields. -Values set into these fields will be ignored. -The position and size of the window should be set by setting the appropriate -window attributes. -.bP -A pair of base fields and a win_gravity field have been added -to the WM_NORMAL_HINTS property. -Window managers will assume values for these fields if the client -sets a short property. -.nH 2 "The Public Review Drafts" -.LP -The Consortium review resulted in several incompatible changes. These -changes were included in drafts that were distributed for public review -during the first half of 1989. -.bP -The messages field of the WM_HINTS property was found to be unwieldy -and difficult to evolve. -It has been replaced by the WM_PROTOCOLS property, -but clients that use the earlier mechanism can be detected -because they set the messages bit in the flags field of the WM_HINTS property, -and window managers can provide a backwards compatibility mode. -.bP -The mechanism described in the earlier draft by which clients installed -their own subwindow colormaps could not be made to work reliably -and mandated some features of the look and feel. -It has been replaced by the WM_COLORMAP_WINDOWS property. -Clients that use the earlier mechanism can be detected by the WM_COLORMAPS -property they set on their top-level window, -but providing a reliable backwards compatibility mode is not possible. -.bP -The recommendations for window manager treatment of top-level window borders -have been changed as those in the earlier draft produced problems -with Visibility events. -For nonwindow manager clients, -there is no incompatibility. -.bP -The pseudoroot facility in the earlier draft has been removed. -Although it has been successfully implemented, -it turns out to be inadequate to support the uses envisaged. -An extension will be required to support these uses fully, -and it was felt that the maximum freedom should be left to the designers -of the extension. -In general, -the previous mechanism was invisible to clients and no incompatibility -should result. -.bP -The addition of the WM_DELETE_WINDOW protocol (which prevents the danger -that multi-window clients may be terminated unexpectedly) -has meant some changes in the WM_SAVE_YOURSELF protocol, -to ensure that the two protocols are orthogonal. -Clients using the earlier protocol can be detected (see WM_PROTOCOLS above) -and supported in a backwards compatibility mode. -.bP -The conventions in Section 14.3.1. of \fIXlib \- C Language X Interface\fP -regarding properties of type RGB_COLOR_MAP have been changed, -but clients that use the earlier conventions can be detected -because their properties are 4 bytes shorter. -These clients will work correctly if the server supports only a single Visual -or if they use only the Visual of the root. -These are the only cases in which they would have worked, anyway. -.nH 2 "Version 1.0, July 1989" -.LP -The public review resulted in a set of mostly editorial changes. The -changes in version 1.0 that introduced some degree of incompatibility with -the earlier drafts are: -.bP -A new section (6.3) was added covering the window manager's -use of Grabs. -The restrictions it imposes should affect only window managers. -.bP -The TARGETS selection target has been clarified, -and it may be necessary for clients to add some entries to their replies. -.bP -A selection owner using INCR transfer should no longer replace targets in -a MULTIPLE property with the atom INCR. -.bP -The contents of the -.PN ClientMessage -event sent by a client to iconify itself has been clarified, -but there should be no incompatibility because the earlier contents -would not in fact have worked. -.bP -The border-width in synthetic -.PN ConfigureNotify -events is now specified, -but this should not cause any incompatibility. -.bP -Clients are now asked to set a border-width on all -.PN ConfigureWindow -requests. -.bP -Window manager properties on icon windows now will be ignored, -but there should be no incompatibility -because there was no specification that they be obeyed previously. -.bP -The ordering of real and synthetic -.PN ConfigureNotify -events is now specified, -but any incompatibility should affect only window managers. -.bP -The semantics of WM_SAVE_YOURSELF have been clarified and restricted to -be a checkpoint operation only. -Clients that were using it as part of a shutdown sequence may need to -be modified, -especially if they were interacting with the user during the shutdown. -.bP -A kill_id field has been added to RGB_COLOR_MAP properties. -Clients using earlier conventions can be detected by the size of their -RGB_COLOR_MAP properties, -and the cases that would have worked will still work. -.nH 2 "Version 1.1" -.LP -Version 1.1 was released with X11R5 in September 1991. In addition to some -minor editorial changes, there were a few semantic changes since Version -1.0: -.bP -The section on Device Color Characterization was added. -.bP -The meaning of the NULL property type was clarified. -.bP -Appropriate references to Compound Text were added. -.nH 2 "Public Review Draft, December 1993" -.LP -The following changes have been made in preparing the public review draft -for Version 2.0. -.bP -[P01] Addition of advice to clients on how to keep track of a top-level -window's absolute position on the screen. -.bP -[P03] A technique for clients to detect when it is safe to reuse a -top-level window has been added. -.bP -[P06] Section 4.1.8, on colormaps, has been rewritten. A new feature that -allows clients to install their own colormaps has also been added. -.bP -[P08] The LENGTH target has been deprecated. -.bP -[P11] The manager selections facility was added. -.bP -[P17] The definition of the aspect ratio fields of the WM_NORMAL_HINTS -property has been changed to include the base size. -.bP -[P19] -.PN StaticGravity -has been added to the list of values allowed for the win_gravity field of -the WM_HINTS property. The meaning of the -.PN CenterGravity -value has been clarified. -.bP -[P20] A means for clients to query the ICCCM compliance level of the window -manager has been added. -.bP -[P22] The definition of the MULTIPLE selection target has been clarified. -.bP -[P25] A definition of \*Qtop-level window\*U has been added. The WM_STATE -property has been defined and exposed to clients. -.bP -[P26] The definition of window states has been clarified and the wording -regarding window state changes has been made more consistent. -.bP -[P27] Clarified the rules governing when window managers are required to send -synthetic -.PN \%ConfigureNotify -events. -.bP -[P28] Added a recommended technique for setting the input focus to a window -as soon as it is mapped. -.bP -[P29] The required lifetime of resource IDs named in window manager -properties has been specified. -.bP -[P30] Advice for dealing with keystrokes and override-redirect windows has -been added. -.bP -[P31] A statement on the ownership of resources transferred through the -selection mechanism has been added. -.bP -[P32] The definition of the CLIENT_WINDOW target has been clarified. -.bP -[P33] A rule about requiring the selection owner to reacquire the -selection under certain circumstances has been added. -.bP -[P42] Added several new selection targets. -.bP -[P44] Ambiguous wording regarding the withdrawal of top-level windows -has been removed. -.bP -[P45] A facility for requestors to pass parameters during a selection -request has been added. -.bP -[P49] A convention on discrimated names has been added. -.bP -[P57] The C_STRING property type was added. -.bP -[P62] An ordering requirement on processing selection requests was added. -.bP -[P63] The -.PN VisibleHint -flag was added. -.bP -[P64] The session management section has been updated to align with the new -session management protocol. The old session management conventions have -been moved to Appendix C. -.bP -References to the never-forthcoming \fIWindow and Session Manager -Conventions Manual\fP have been removed. -.bP -Information on the X Registry and references to the session management and -ICE documents have been added. -.bP -Numerous editorial and typographical improvements have been made. -.nH 2 "Version 2.0, April 1994" -.LP -The following changes have been made in preparation for releasing -the final edition of Version 2.0 with X11R6. -.bP -The PIXMAP selection target has been revised to return a property of type -PIXMAP instead of type DRAWABLE. -.bP -The session management section has been revised slightly to correspond with -the changes to the \fIX Session Management Protocol\fP. -.bP -Window managers are now prohibited from placing -.PN CurrentTime -in the timestamp field of WM_TAKE_FOCUS messages. -.bP -In the WM_HINTS property, the -.PN VisibleHint -flag has been renamed to -.PN UrgencyHint . -Its semantics have also been defined more thoroughly. -.bP -Additional editorial and typographical changes have been made. -.bp -.cT "Appendix B" no -.nH 1 "Suggested Protocol Revisions" -.LP -During the development of these conventions, -a number of inadequacies have been discovered in the -core X11 protocol. -They are summarized here as input to an eventual protocol revision -design process: -.bP -There is no way for anyone to find out the last-change time of -a selection. -The -.PN Get\%Selection\%Owner -request should be changed to return the last-change time as well as the owner. -.bP -There is no way for a client to find out which selection atoms are valid. -.bP -There would be no need for WM_TAKE_FOCUS if the -.PN FocusIn -event contained a timestamp and a previous-focus field. -This could avoid the potential race condition. -There is space in the event for this information; -it should be added at the next protocol revision. -.bP -There is a race condition in the -.PN Install\%Colormap -request. -It does not take a timestamp and may be executed after the top-level colormap -has been uninstalled. -The next protocol revision should provide the timestamp in the -.PN Install\%Colormap , -.PN Uninstall\%Colormap , -.PN List\%Installed\%Colormaps -requests and in the -.PN Colormap\%Notify -event. -The timestamp should be used in a similar way to the last-focus-change -time for the input focus. The lack of timestamps in these packets is the -reason for restricting colormap installation to the window manager. -.bP -The protocol needs to be changed to provide some way of identifying -the Visual and the Screen of a colormap. -.bP -There should be some way to reclaim assignments to the five nonpreassigned -modifiers when they are no longer needed. The manual method is unpleasantly -low-tech. -.bp -.cT "Appendix C" no -.nH 1 "Obsolete Session Manager Conventions" -.LP -This appendix contains obsolete conventions for session management using X -properties and messages. The conventions described here are deprecated and -are described only for historical interest. For further information on -session management, see -.I -X Session Management Protocol. -.R -.nH 2 "Properties" -.LP -The client communicates with the session manager by placing two properties -(WM_COMMAND and WM_CLIENT_MACHINE) on its top-level window. -If the client has a group of top-level windows, -these properties should be placed on the group leader window. -.LP -The window manager is responsible for placing a WM_STATE property -on each top-level client window for use by session managers and other clients -that need to be able to identify top-level client windows and their state. -.nH 3 "WM_COMMAND Property" -.LP -The WM_COMMAND property represents the command used to start or restart the -client. By updating this property, clients should ensure that it always -reflects a command that will restart them in their current state. The -content and type of the property depend on the operating system of the -machine running the client. On POSIX-conformant systems using ISO Latin-1 -characters for their command lines, the property should: -.bP -Be of type STRING -.bP -Contain a list of null-terminated strings -.bP -Be initialized from argv -.IP -Other systems will need to set appropriate conventions for the type -and contents of WM_COMMAND properties. -Window and session managers should not assume that STRING is -the type of WM_COMMAND or that they will be able to understand -or display its contents. -.LP -Note that WM_COMMAND strings are null-terminated -and differ from the general conventions that STRING properties -are null-separated. -This inconsistency is necessary for backwards compatibility. -.LP -A client with multiple top-level windows should ensure -that exactly one of them has a WM_COMMAND with nonzero length. -Zero-length WM_COMMAND properties can be used to reply to WM_SAVE_YOURSELF -messages on other top-level windows but will otherwise be ignored. -.nH 3 "WM_CLIENT_MACHINE Property" -.LP -This property is described in section 4.1.2.9. -.nH 2 "Termination" -.LP -Because they communicate by means of unreliable network connections, clients -must be prepared for their connection to the server to be terminated at any -time without warning. They cannot depend on getting notification that -termination is imminent or on being able to use the server to negotiate with -the user about their fate. For example, clients cannot depend on being able -to put up a dialog box. -.LP -Similarly, clients may terminate at any time without notice to the session -manager. When a client terminates itself rather than being terminated by -the session manager, it is viewed as having resigned from the session in -question, and it will not be revived if the session is revived. -.nH 2 "Client Responses to Session Manager Actions" -.LP -Clients may need to respond to session manager actions in two ways: -.bP -Saving their internal state -.bP -Deleting a window -.nH 3 "Saving Client State" -.LP -Clients that want to be warned when the session manager feels -that they should save their internal state (for example, -when termination impends) should include the atom WM_SAVE_YOURSELF -in the WM_PROTOCOLS property on their top-level windows to participate -in the WM_SAVE_YOURSELF protocol. -They will receive a -.PN ClientMessage -event as described in section 4.2.8 -with the atom WM_SAVE_YOURSELF in its data[0] field. -.LP -Clients that receive WM_SAVE_YOURSELF should place themselves in a state from -which they can be restarted and should update WM_COMMAND to -be a command that will restart them in this state. -The session manager will be waiting for a -.PN PropertyNotify -event on WM_COMMAND as a confirmation that the client has saved its state. -Therefore, WM_COMMAND should be updated (perhaps with a zero-length append) -even if its contents are correct. -No interactions with the user are permitted during this process. -.LP -Once it has received this confirmation, -the session manager will feel free to terminate the client if that is what -the user asked for. -Otherwise, -if the user asked for the session to be put to sleep, -the session manager will ensure that the client does not -receive any mouse or keyboard events. -.LP -After receiving a WM_SAVE_YOURSELF, saving its state, and updating WM_COMMAND, -the client should not change its state (in the sense of doing anything -that would require a change to WM_COMMAND) until it receives a mouse -or keyboard event. -Once it does so, -it can assume that the danger is over. -The session manager will ensure that these events do not reach -clients until the danger is over or until the clients have been killed. -.LP -Irrespective of how they are arranged in window groups, -clients with multiple top-level windows should ensure the following: -.bP -Only one of their top-level windows has a nonzero-length WM_COMMAND -property. -.bP -They respond to a WM_SAVE_YOURSELF message by: -.RS -.IP \- 5 -First, updating the nonzero-length WM_COMMAND property, if necessary -.IP \- 5 -Second, updating the WM_COMMAND property on the window for which they received -the WM_SAVE_YOURSELF message if it was not updated in the first step -.RE -.LP -Receiving WM_SAVE_YOURSELF on a window is, conceptually, a command -to save the entire client state.\** -.FS -This convention has changed since earlier drafts because of the -introduction of the protocol in the next section. -In the public review draft, -there was ambiguity as to whether WM_SAVE_YOURSELF was a checkpoint -or a shutdown facility. -It is now unambiguously a checkpoint facility; -if a shutdown facility is judged to be necessary, -a separate WM_PROTOCOLS protocol will be developed and registered -with the X Consortium. -.FE -.nH 3 "Window Deletion" -.LP -Windows are deleted using the WM_DELETE_WINDOW protocol, which -is described in section 4.2.8.1. -.nH 2 "Summary of Session Manager Property Types" -.LP -The session manager properties are listed in the following table: -.br -.ne 6 -.TS H -l l n c. -_ -.sp 6p -.B -Name Type Format See Section -.sp 6p -_ -.sp 6p -.TH -.R -WM_CLIENT_MACHINE TEXT 4.1.2.9 -WM_COMMAND TEXT C.1.1 -WM_STATE WM_STATE 32 4.1.3.1 -.sp 6p -_ -.TE -.\" Finish up! -.YZ 3 diff --git a/doc/xorg-docs/specs/ICCCM/icccm.xml b/doc/xorg-docs/specs/ICCCM/icccm.xml new file mode 100644 index 000000000..fb39ca78e --- /dev/null +++ b/doc/xorg-docs/specs/ICCCM/icccm.xml @@ -0,0 +1,9100 @@ + + + + + + + + Inter-Client Communication Conventions Manual + X Consortium Standard + Version 2.0 + + + DavidRosenthal + Sun Microsystems, Inc. + + + Version 2 edited by + StuartW.Marks + SunSoft, Inc. + + + X Consortium Standard + X Consortium + X Version 11, Release 6.8 + + + + +X Window System is a trademark of The Open Group + + + + + +Copyright © 1988, 1991, 1993, 1994 X Consortium + + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + + +Except as contained in this notice, the name of the X Consortium shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from the X Consortium. + + + + + +Copyright © 1987, 1988, 1989, 1993, 1994 Sun Microsystems, Inc + + +Permission to use, copy, modify, and distribute this documentation +for any purpose and without fee is hereby granted, provided +that the above copyright notice and this permission +notice appear in all copies. +Sun Microsystems makes no representations about the +suitability for any purpose of the information in this document. +This documentation is provided as is without express or implied warranty. + + + + + + +Preface to Version 2.0 + +The goal of the ICCCM Version 2.0 effort was to add new facilities, to fix +problems with earlier drafts, and to improve readability and +understandability, while maintaining compatibility with the earlier +versions. This document is the product of over two years of discussion among +the members of the X Consortium's wmtalk working group. +The following people deserve thanks for their contributions: + + + +Gabe Beged-Dov Bill Janssen +Chan Benson Vania Joloboff +Jordan Brown Phil Karlton +Larry Cable Kaleb Keithley +Ellis Cohen Mark Manasse +Donna Converse Ralph Mor +Brian Cripe Todd Newman +Susan Dahlberg Bob Scheifler +Peter Daifuku Keith Taylor +Andrew deBlois Jim VanGilder +Clive Feather Mike Wexler +Stephen Gildea Michael Yee +Christian Jacobi + + + +It has been a privilege for me to work with this fine group of people. + + +Stuart W. Marks + + +December 1993 + + + + +Preface to Version 1.1 + + +David Rosenthal had overall architectural responsibility +for the conventions defined in this document; +he wrote most of the text and edited the document, +but its development has been a communal effort. +The details were thrashed out in meetings at the January 1988 MIT X Conference +and at the 1988 Summer Usenix conference, +and through months (and megabytes) of argument +on the +wmtalk +mail alias. +Thanks are due to everyone who contributed, +and especially to the following people. + + + + +For the Selection section: + + + +Jerry Farrell +Phil Karlton +Loretta Guarino Reid +Mark Manasse +Bob Scheifler + + + +For the Cut-Buffer section: + + + +Andrew Palay + + + +For the Window and Session Manager sections: + + + +Todd Brunhoff Matt Landau +Ellis Cohen Mark Manasse +Jim Fulton Bob Scheifler +Hania Gajewska Ralph Swick +Jordan Hubbard Mike Wexler +Kerry Kimbrough Glenn Widener +Audrey Ishizaki + + + +For the Device Color Characterization section: + + + +Keith Packard + + + +In addition, thanks are due to those who contributed to the public review: + + + +Gary Combs John Irwin +Errol Crary Vania Joloboff +Nancy Cyprych John Laporta +John Diamant Ken Lee +Clive Feather Stuart Marks +Burns Fisher Alan Mimms +Richard Greco Colas Nahaboo +Tim Greenwood Mark Patrick +Kee Hinckley Steve Pitschke +Brian Holt Brad Reed +John Interrante John Thomas + + + + +Introduction + +It was an explicit design goal of X Version 11 to specify mechanism, +not policy. +As a result, +a client that converses with the server using the protocol defined +by the X Window System Protocol, Version 11 may operate correctly +in isolation but may not coexist properly with others sharing the same server. + + + +Being a good citizen in the X Version 11 world involves adhering to +conventions that govern inter-client communications in the following areas: + + + + + +Selection mechanism + + + + +Cut buffers + + + + +Window manager + + + + +Session manager + + + + +Manipulation of shared resources + + + + +Device color characterization + + + + + + +This document proposes suitable conventions without attempting to enforce +any particular user interface. +To permit clients written in different languages to communicate, +these conventions are expressed solely in terms of protocol operations, +not in terms of their associated Xlib interfaces, +which are probably more familiar. +The binding of these operations to the Xlib interface for C +and to the equivalent interfaces for other languages +is the subject of other documents. + + + +Evolution of the Conventions + +In the interests of timely acceptance, +the Inter-Client Communication Conventions Manual (ICCCM) +covers only a minimal set of required conventions. +These conventions will be added to and updated as appropriate, +based on the experiences of the X Consortium. + + +As far as possible, +these conventions are upwardly compatible with those in the February 25, 1988, +draft that was distributed with the X Version 11, Release 2, of the software. +In some areas, +semantic problems were discovered with those conventions, +and, thus, complete upward compatibility could not be assured. +These areas are noted in the text and are summarized in Appendix A. + + + +In the course of developing these conventions, +a number of minor changes to the protocol were identified as desirable. +They also are identified in the text, are summarized in Appendix B, +and are offered as input to a future protocol revision process. +If and when a protocol revision incorporating these changes is undertaken, +it is anticipated that the ICCCM will need to be revised. +Because it is difficult to ensure that clients and servers are upgraded +simultaneously, +clients using the revised conventions should examine the minor protocol +revision number and be prepared to use the older conventions +when communicating with an older server. + + +It is expected that these revisions will ensure that clients using +the conventions appropriate to protocol minor revision n +will interoperate correctly with those that use the conventions +appropriate to protocol minor revision +n + 1 if the server supports both. + + + + +Atoms + +Many of the conventions use atoms. +To assist the reader, +the following sections attempt to amplify the description of atoms +that is provided in the protocol specification. + + +What Are Atoms? + +At the conceptual level, +atoms are unique names that clients can use to communicate information +to each other. +They can be thought of as a bundle of octets, +like a string but without an encoding being specified. +The elements are not necessarily ASCII characters, +and no case folding happens. + +The comment in the protocol specification for +InternAtom +that ISO Latin-1 encoding should be used is in the nature of a convention; +the server treats the string as a byte sequence. + + + +The protocol designers felt that passing these +sequences of bytes back and forth across the wire would be too costly. +Further, they thought it important that events +as they appear on the wire have a fixed size (in fact, 32 bytes) +and that because some events contain atoms, a fixed-size representation +for them was needed. + + + +To allow a fixed-size representation, +a protocol request +( InternAtom ) +was provided to register a byte sequence with the server, +which returns a 32-bit value (with the top three bits zero) +that maps to the byte sequence. +The inverse operator is also available +( GetAtomName ). + + + + +Predefined Atoms + +The protocol specifies a number of atoms as being predefined: + +
+ +Predefined atoms are not strictly necessary +and may not be useful in all environments, +but they will eliminate many +InternAtom +requests in most applications. +Note that they are predefined only in the sense of having numeric values, +not in the sense of having required semantics. + +
+ + +Predefined atoms are an implementation trick to avoid the cost of interning +many of the atoms that are expected to be used during the startup phase +of all applications. +The results of the +InternAtom +requests, which require a handshake, can be assumed a priori. + + + +Language interfaces should probably cache the atom-name mappings +and get them only when required. +The CLX interface, for instance, makes no distinction between predefined atoms +and other atoms; all atoms are viewed as symbols at the interface. +However, a CLX implementation will typically keep a symbol or atom cache +and will typically initialize this cache with the predefined atoms. + +
+ + +Naming Conventions + +The built-in atoms are composed of uppercase ASCII characters with the +logical words separated by an underscore character (_), for example, +WM_ICON_NAME. +The protocol specification recommends that atoms used +for private vendor-specific reasons should begin with an underscore. +To prevent conflicts among organizations, +additional prefixes should be chosen +(for example, _DEC_WM_DECORATION_GEOMETRY). + + + +The names were chosen in this fashion to make it easy to use them in a +natural way within LISP. +Keyword constructors allow the programmer to specify the atoms as LISP atoms. +If the atoms were not all uppercase, +special quoting conventions would have to be used. + + + + +Semantics + +The core protocol imposes no semantics on atoms except as they are used in +FONTPROP structures. +For further information on FONTPROP semantics, +see the X Logical Font Description Conventions. + + + +Name Spaces + +The protocol defines six distinct spaces in which atoms are interpreted. +Any particular atom may or may not have some valid interpretation +with respect to each of these name spaces. + + + + + + + + + + + Space + Briefly + Examples + + + + + Property name + Name + WM_HINTS, WM_NAME, RGB_BEST_MAP, ... + + + Property type + Type + WM_HINTS, CURSOR, RGB_COLOR_MAP, ... + + + Selection name + Selection + PRIMARY, SECONDARY, CLIPBOARD + + + Selection target + Target + FILE_NAME, POSTSCRIPT, PIXMAP, ... + + + Font property + + QUAD_WIDTH, POINT_SIZE, ... + + + ClientMessage type + + WM_SAVE_YOURSELF, _DEC_SAVE_EDITS, &... + + + + + + + +Discriminated Names + +Sometimes a protocol requires an arbitrary number of similar +objects that need unique names (usually because the objects are created +dynamically, so that names cannot be invented in advance). For example, a +colormap-generating program might use the selection mechanism to offer +colormaps for each screen and so needs a selection name for each screen. +Such names are called "discriminated names" and are discriminated by +some entity. This entity can be: + + + + A screen + An X resource (a window, a colormap, a visual, etc.) + A client + + + +If it is only necessary to generate a fixed set of names for each value +of the discriminating entity, then the discriminated names are formed by +suffixing an ordinary name according to the value of the entity. + + + +If name is a descriptive portion for the name, d is a decimal +number with no leading zeroes, and x is a hexadecimal number with +exactly 8 digits, and using uppercase letters, then such discriminated names +shall have the form: + + + + + + + + + + + Name Discriminated by + Form + Example + + + + + screen number + name_Sd + WM_COMMS_S2 + + + X resource + name_Rx + GROUP_LEADER_R1234ABCD + + + + + + +To discriminate a name by client, use an X resource ID created by that +client. This resource can be of any type. + + + +Sometimes it is simply necessary to generate a unique set of names (for +example, for the properties on a window used by a MULTIPLE selection). +These names should have the form: + + + +Ud (e.g., U0 U1 U2 U3 ...) + + + +if the names stand totally alone, and the form: + + + +name_Ud (e.g., FOO_U0 BAR_U0 FOO_U1 BAR_U1 ...) + + + +if they come in sets (here there are two sets, named "FOO" and +"BAR"). The stand-alone Ud form should be used only if it is +clear that the module using it has complete control over the relevant +namespace or has the active cooperation of all other entities that might +also use these names. (Naming properties on a window created specifically +for a particular selection is such a use; naming properties on the root +window is almost certainly not.) + + + +In a particularly difficult case, it might be necessary to combine both +forms of discrimination. If this happens, the U form should come after +the other form, thus: + + + + FOO_R12345678_U23 + + +
+Rationale + +Existing protocols will not be changed to use these naming conventions, +because doing so will cause too much disruption. However, it is expected +that future protocols -- both standard and private -- will use these +conventions. + +
+
+
+
+ + +Peer-to-Peer Communication by Means of Selections + +Selections are the primary mechanism that X Version 11 defines +for the exchange of information between clients, +for example, by cutting and pasting between windows. +Note that there can be an arbitrary number of selections +(each named by an atom) and that they are global to the server. + +. +discusses the choice of an atom. +Each selection is owned by a client and is attached to a window. + + +Selections communicate between an owner and a requestor. +The owner has the data representing the value of its selection, +and the requestor receives it. +A requestor wishing to obtain the value of a selection provides the following: + + + + + +The name of the selection + + + + +The name of a property + + + + +A window + + + + +The atom representing the data type required + + + + +Optionally, some parameters for the request + + + + + +If the selection is currently owned, +the owner receives an event and is expected to do the following: + + + + + +Convert the contents of the selection to the requested data type + + + + +Place this data in the named property on the named window + + + + +Send the requestor an event to let it know the property is available + + + + + +Clients are strongly encouraged to use this mechanism. +In particular, +displaying text in a permanent window without providing the ability +to select and convert it into a string is definitely considered antisocial. + + + +Note that all data transferred between an owner and a requestor must usually +go by means of the server in an X Version 11 environment. +A client cannot assume that another client can open the same files +or even communicate directly. +The other client may be talking to the server by means of +a completely different networking mechanism (for example, one client might +be DECnet and the other TCP/IP). +Thus, passing indirect references to data +(such as, file names, host names, and port numbers) +is permitted only if both clients specifically agree. + + + +Acquiring Selection Ownership + +A client wishing to acquire ownership of a particular selection +should call +SetSelectionOwner, +which is defined as follows: + + + +SetSelectionOwner + + + + + + + + selection: ATOM + + + +owner: WINDOW or +None + + + + +time: TIMESTAMP or +CurrentTime + + + + + + + +The client should set the specified selection to the atom that represents +the selection, +set the specified owner to some window that the client created, +and set the specified time to some time between the current last-change time +of the selection concerned and the current server time. +This time value usually will be obtained from the timestamp of the event +that triggers the acquisition of the selection. +Clients should not set the time +value to +CurrentTime, +because if they do so, they have no way of finding +when they gained ownership of the selection. +Clients must use a window they created so that requestors +can route events to the owner of the selection. + +At present, no part of the protocol requires requestors +to send events to the owner of a selection. +This restriction is imposed to prepare for possible future extensions. + + + + +
+Convention + +Clients attempting to acquire a selection must set the time value of the +SetSelectionOwner +request to the timestamp of the event triggering the acquisition attempt, +not to +CurrentTime. +A zero-length append to a property is a way to obtain a timestamp for +this purpose; +the timestamp is in the corresponding +PropertyNotify +event. + +
+ + +If the time in the +SetSelectionOwner +request is in the future relative to the server's current time +or is in the past relative to the last time the specified selection +changed hands, the +SetSelectionOwner +request appears to the client to succeed, +but ownership is not actually transferred. + + + +Because clients cannot name other clients directly, +the specified owner window is used to refer to the owning client +in the replies to +GetSelectionOwner, in +SelectionRequest and +SelectionClear +events, and possibly as a place to put properties describing the selection +in question. +To discover the owner of a particular selection, +a client should invoke +GetSelectionOwner, +which is defined as follows: + + + + +GetSelectionOwner + + + + + + + + selection: ATOM + + + -> + + + +owner: WINDOW or +None + + + + + + +
+Convention + +Clients are expected to provide some visible confirmation +of selection ownership. +To make this feedback reliable, +a client must perform a sequence like the following: + +
+ + +SetSelectionOwner(selection=PRIMARY, owner=Window, time=timestamp) +owner = GetSelectionOwner(selection=PRIMARY) +if (owner != Window) Failure + + + +If the +SetSelectionOwner +request succeeds (not merely appears to succeed), +the client that issues it is recorded by the server as being the owner +of the selection for the time period starting at the specified time. + +
+ + +Responsibilities of the Selection Owner + +When a requestor wants the value of a selection, +the owner receives a +SelectionRequest +event, which is defined as follows: + + + +SelectionRequest + + + + + + + + owner: WINDOW + + + selection: ATOM + + + selection: ATOM + + + target: ATOM + + + property: ATOM or +None + + + requestor: WINDOW + + + time: TIMESTAMP or +CurrentTime + + + + + + +The specified owner and selection will be the values that were specified in +the +SetSelectionOwner +request. +The owner should compare the timestamp with the period +it has owned the selection and, if the time is outside, +refuse the +SelectionRequest +by sending the requestor window a +SelectionNotify +event with the property set to +None +(by means of a +SendEvent +request with an empty event mask). + + + +More advanced selection owners are free to maintain a history +of the value of the selection and to respond to requests for the +value of the selection during periods they owned it +even though they do not own it now. + + + +If the specified property is +None, +the requestor is an obsolete client. +Owners are encouraged to support these clients by using the specified target +atom as the property name to be used for the reply. + + + +Otherwise, +the owner should use the target to decide the form into which the selection +should be converted. +Some targets may be defined such that requestors can pass parameters +along with the request. The owner will find these parameters in the +property named in the selection request. The type, format, and +contents of this property are dependent upon the definition of the +target. If the target is not defined to have parameters, the owner +should ignore the property if it is present. +If the selection cannot be converted +into a form based on the target (and parameters, if any), +the owner should refuse the +SelectionRequest +as previously described. + + + +If the specified property is not +None, +the owner should place the data resulting from converting the selection +into the specified property on the requestor window +and should set the property's type to some appropriate value, +which need not be the same as the specified target. +
+Convention + +All properties used to reply to +SelectionRequest +events must be placed on the requestor window. + +
+
+ + +In either case, +if the data comprising the selection cannot be stored on the requestor window +(for example, because the server cannot provide sufficient memory), +the owner must refuse the +SelectionRequest, +as previously described. +See also + +. + + + + +If the property is successfully stored, +the owner should acknowledge the successful conversion +by sending the requestor window a +SelectionNotify +event (by means of a +SendEvent +request with an empty mask). +SelectionNotify +is defined as follows: + + + + +SelectionNotify + + + + + + + + + requestor: WINDOW + + + +selection, +target: ATOM + + + + +property: ATOM or +None + + + + +time: TIMESTAMP or +CurrentTime + + + + + + + +The owner should set the specified selection, target, time, +and property arguments to the values received in the +SelectionRequest +event. +(Note that setting the property argument to +None +indicates that the conversion requested could not be made.) + + +
+Convention + +The selection, target, time, and property arguments in the +SelectionNotify +event should be set to the values received in the +SelectionRequest +event. + +
+ + +If the owner receives more than one +SelectionRequest +event with the same requestor, selection, target, and timestamp it must +respond to them in the same order in which they were received. + + +
+Rationale + +It is possible for a requestor to have multiple outstanding requests that +use the same requestor window, selection, target, and timestamp, and that +differ only in the property. If this occurs, and one of the conversion +requests fails, the resulting +SelectionNotify +event will have its property argument set to +None. +This may make it impossible for the requestor to determine which conversion +request had failed, unless the requests are responded to in order. + +
+ + +The data stored in the property must eventually be deleted. +A convention is needed to assign the responsibility for doing so. + + +
+Convention + +Selection requestors are responsible for deleting properties whose +names they receive in +SelectionNotify +events (See + + +) or in properties with type MULTIPLE. + +
+ + +A selection owner will often need confirmation that the data comprising the +selection has actually been transferred. +(For example, +if the operation has side effects on the owner's internal data structures, +these should not take place until the requestor has indicated +that it has successfully received the data.) +Owners should express interest in +PropertyNotify +events for the specified requestor window +and wait until the property in the +SelectionNotify +event has been deleted before assuming that the selection data has been +transferred. For the MULTIPLE request, if the different conversions require +separate confirmation, the selection owner can also watch for the deletion +of the individual properties named in the property in the +SelectionNotify +event. + + + +When some other client acquires a selection, +the previous owner receives a +SelectionClear +event, which is defined as follows: + + + + +SelectionClear + + + + + + + + +owner: WINDOW + + + + +selection: ATOM + + + + +time: TIMESTAMP + + + + + + + + +The timestamp argument is the time at which the ownership changed hands, +and the owner argument is the window the previous owner specified in its +SetSelectionOwner +request. + + + +If an owner loses ownership while it has a transfer in progress (that is, +before it receives notification that the requestor has received all the data), +it must continue to service the ongoing transfer until it is complete. + + + +If the selection value completely changes, but the owner happens +to be the same client (for example, selecting a totally different +piece of text in the same xterm as before), +then the client should +reacquire the selection ownership as if it were not the owner, +providing a new timestamp. If the selection value is modified, but +can still reasonably be viewed as the same selected object, + + +The division between these two cases is a matter of judgment +on the part of the software developer. + + +the owner should take no action. + + +
+ + +Giving Up Selection Ownership + +Clients may either give up selection ownership voluntarily +or lose it forcibly as the result of some other client's actions. + + + +Voluntarily Giving Up Selection Ownership + +To relinquish ownership of a selection voluntarily, +a client should execute a +SetSelectionOwner +request for that selection atom, with owner specified as +None +and the time specified as the timestamp that was used to acquire the selection. + + + +Alternatively, +the client may destroy the window used as the owner value of the +SetSelectionOwner +request, or the client may terminate. +In both cases, +the ownership of the selection involved will revert to +None. + + + + +Forcibly Giving Up Selection Ownership + +If a client gives up ownership of a selection +or if some other client executes a +SetSelectionOwner +for it and thus reassigns it forcibly, +the previous owner will receive a +SelectionClear +event. For the definition of a +SelectionClear +event, see + + + + + +The timestamp is the time the selection changed hands. +The specified owner is the window that was specified by the current owner +in its +SetSelectionOwner +request. + + + + + +Requesting a Selection + +A client that wishes to obtain the value of a selection in a particular +form (the requestor) issues a +ConvertSelection +request, which is defined as follows: + + + + +ConvertSelection + + + + + + + + +selection, +target: ATOM + + + + +property: ATOM or +None + + + + +requestor: WINDOW + + + + +time: TIMESTAMP or +CurrentTime + + + + + + + +The selection argument specifies the particular selection involved, +and the target argument specifies the required form of the information. +For information about the choice of suitable atoms to use, +see + + +The requestor should set the requestor argument to a window that it created; +the owner will place the reply property there. +The requestor should set the time argument to the timestamp on the event +that triggered the request for the selection value. +Note that clients should not specify +CurrentTime. + + +
+Convention + +Clients should not use +CurrentTime +for the time argument of a +ConvertSelection +request. +Instead, they should use the timestamp of the event that caused the request +to be made. + +
+ + +The requestor should set the property argument to the name of a property +that the owner can use to report the value of the selection. +Requestors should ensure that the named property does not exist +on the window before issuing the +ConvertSelection +request. + +This requirement is new in version 2.0, and, in general, existing +clients do not conform to this requirement. To prevent these clients +from breaking, no existing targets should be extended to take +parameters until sufficient time has passed for clients to be updated. +Note that the MULTIPLE target was defined to take parameters in version +1.0 and its definition is not changing. There is thus no conformance +problem with MULTIPLE. + + +The exception to this rule is when the requestor intends to pass +parameters with the request (see below). + + +
+Rationale + +It is necessary for requestors to delete the property before issuing the +request so that the target can later be extended to take parameters without +introducing an incompatibility. Also note that the requestor of a selection +need not know the client that owns the selection nor the window on which +the selection was acquired. + +
+ + +Some targets may be defined such that requestors can pass parameters +along with the request. If the requestor wishes to provide parameters +to a request, they should be placed in the specified property on the +requestor window before the requestor issues the +ConvertSelection +request, and this property should be named in the request. + + + +Some targets may be defined so that parameters are optional. If no +parameters are to be supplied with the request of such a target, the +requestor must ensure that the property does not exist before issuing +the +ConvertSelection +request. + + + +The protocol allows the property field to be set to +None, +in which case the owner is supposed to choose a property name. +However, it is difficult for the owner to make this choice safely. + + +Conventions + + + + +Requestors should not use +None +for the property argument of a +ConvertSelection +request. + + + + +Owners receiving +ConvertSelection +requests with a property argument of +None +are talking to an obsolete client. +They should choose the target atom as the property name to be used +for the reply. + + + + + +The result of the +ConvertSelection +request is that a +SelectionNotify +event will be received. +For the definition of a +SelectionNotify +event, see + +. + + + +The requestor, selection, time, and target arguments will be the same +as those on the +ConvertSelection +request. + + + +If the property argument is +None, +the conversion has been refused. +This can mean either that there is no owner for the selection, +that the owner does not support the conversion implied by the target, +or that the server did not have sufficient space to accommodate the data. + + + +If the property argument is not +None, +then that property will exist on the requestor window. +The value of the selection can be retrieved from this +property by using the +GetProperty +request, which is defined as follows: + + + + +GetProperty + + + + + + + + +window: WINDOW + + + + +property: ATOM + + + + +type: ATOM or +AnyPropertyType + + + + +long-offset, +long-length: CARD32 + + + + +delete: BOOL + + + + +-> + + + + +type: ATOM or None + + + + +format: {0, 8, 16, 32} + + + + +bytes-after: CARD32 + + + + +value: LISTofINT8 or LISTofINT16 or LISTofINT32 + + + + + + + + +GetProperty +to retrieve the value of a selection, +the property argument should be set to the corresponding value in the +SelectionNotify +event. +Because the requestor has no way of knowing beforehand what type +the selection owner will use, +the type argument should be set to +AnyPropertyType. +Several +GetProperty +requests may be needed to retrieve all the data in the selection; +each should set the long-offset argument to the amount of data received so far, +and the size argument to some reasonable buffer size (see + +. +). +If the returned value of bytes-after is zero, +the whole property has been transferred. + + + +Once all the data in the selection has been retrieved +(which may require getting the values of several properties -- +see + +. +), +the requestor should delete the property in the +SelectionNotify +request by using a +GetProperty +request with the delete argument set to +True. +As previously discussed, +the owner has no way of knowing when the data has been +transferred to the requestor unless the property is removed. + + +
+Convention + +The requestor must delete the property named in the +SelectionNotify +once all the data has been retrieved. +The requestor should invoke either +DeleteProperty or +GetProperty +(delete==True) +after it has successfully retrieved all the data in the selection. +For further information, +see + +. + + +
+
+ + +Large Data Transfers + +Selections can get large, which poses two problems: + + + + +Transferring large amounts of data to the server is expensive. + + + + +All servers will have limits on the amount of data that can be stored +in properties. +Exceeding this limit will result in an +Alloc +error on the +ChangeProperty +request that the selection owner uses to store the data. + + + + + +The problem of limited server resources is addressed by the following +conventions: + + + +Conventions + + + + + +Selection owners should transfer the data describing a large selection +(relative to the maximum-request-size they received +in the connection handshake) using the INCR property mechanism +(see + +. +). + + + + +Any client using +SetSelectionOwner +to acquire selection ownership should arrange to process +Alloc +errors in property change requests. +For clients using Xlib, +this involves using the +XSetErrorHandler +function to override the default handler. + + + + +A selection owner must confirm that no +Alloc +error occurred while storing the properties for a selection +before replying with a confirming +SelectionNotify +event. + + + + +When storing large amounts of data (relative to maximum-request-size), +clients should use a sequence of +ChangeProperty (mode==Append) +requests for reasonable quantities of data. +This avoids locking servers up and limits the waste of data an +Alloc +error would cause. + + + + +If an +Alloc +error occurs during the storing of the selection data, +all properties stored for this selection should be deleted +and the +ConvertSelection +request should be refused (see + +. +). + + + + +To avoid locking servers up for inordinate lengths of time, +requestors retrieving large quantities of data from a property +should perform a series of +GetProperty +requests, each asking for a reasonable amount of data. + + + + +
+Advice to Implementors + +Single-threaded servers should take care to avoid locking up during large +data transfers. + +
+
+ + +Use of Selection Atoms + +Defining a new atom consumes resources in the server +that are not released until the server reinitializes. +Thus, reducing the need for newly minted atoms is an important goal +for the use of the selection atoms. + + + +Selection Atoms + +There can be an arbitrary number of selections, each named by an atom. +To conform with the inter-client conventions, however, +clients need deal with only these three selections: + + + + +PRIMARY + + + + +SECONDARY + + + + +CLIPBOARD + + + + + +Other selections may be used freely for private communication among +related groups of clients. + + + +The PRIMARY Selection + +The selection named by the atom PRIMARY is used for all commands +that take only a single argument and is the principal means of communication +between clients that use the selection mechanism. + + + + +The SECONDARY Selection + +The selection named by the atom SECONDARY is used: + + + + +As the second argument to commands taking two arguments +(for example, "exchange primary and secondary selections") + + + + +As a means of obtaining data when there is a primary selection +and the user does not want to disturb it + + + + + + +The CLIPBOARD Selection + +The selection named by the atom CLIPBOARD is used to hold data +that is being transferred between clients, +that is, data that usually is being cut and then pasted +or copied and then pasted. +Whenever a client wants to transfer data to the clipboard: + + + + + +It should assert ownership of the CLIPBOARD. + + + + +If it succeeds in acquiring ownership, +it should be prepared to respond to a request for the contents of the CLIPBOARD +in the usual way (retaining the data to be able to return it). +The request may be generated by the clipboard client described below. + + + + +If it fails to acquire ownership, +a cutting client should not actually perform the cut or provide feedback +that would suggest that it has actually transferred data to the clipboard. + + + + + +The owner should repeat this process whenever the data to be transferred +would change. + + + +Clients wanting to paste data from the clipboard should request +the contents of the CLIPBOARD selection in the usual way. + + + +Except while a client is actually deleting or copying data, +the owner of the CLIPBOARD selection may be a single, special client +implemented for the purpose. +This client maintains the content of the clipboard up-to-date +and responds to requests for data from the clipboard as follows: + + + + + + +It should assert ownership of the CLIPBOARD selection +and reassert it any time the clipboard data changes. + + + + +If it loses the selection (because another client has some new data +for the clipboard), +it should: + + + + +Obtain the contents of the selection from the new owner by using the timestamp +in the +SelectionClear +event. + + + + +Attempt to reassert ownership of the CLIPBOARD selection +by using the same timestamp. + + + + +Restart the process using a newly acquired timestamp if this attempt fails. +This timestamp should be obtained by asking the current owner of the +CLIPBOARD selection to convert it to a TIMESTAMP. +If this conversion is refused or if the same timestamp is received twice, +the clipboard client should acquire a fresh timestamp in the +usual way (for example by a zero-length append to a property). + + + + + + +It should respond to requests for the CLIPBOARD contents in the usual way. + + + + + +A special CLIPBOARD client is not necessary. +The protocol used by the cutting client and the pasting client +is the same whether the CLIPBOARD client is running or not. +The reasons for running the special client include: + + + + + +Stability - If the cutting client were to crash or terminate, +the clipboard value would still be available. + + + + +Feedback - The clipboard client can display the contents of the clipboard. + + + + +Simplicity - A client deleting data does not have to retain it for so long, +thus reducing the chance of race conditions causing problems. + + + + + +The reasons not to run the clipboard client include: + + + + + +Performance - Data is transferred only if it is actually required +(that is, when some client actually wants the data). + + + + +Flexibility - The clipboard data may be available as more than one target. + + + + + + + +Target Atoms + +The atom that a requestor supplies as the target of a +ConvertSelection +request determines the form of the data supplied. +The set of such atoms is extensible, +but a generally accepted base set of target atoms is needed. +As a starting point for this, +the following table contains those that have been suggested so far. + + + + + + + + + + + + Atom + Type + Data Received + + + + + ADOBE_PORTABLE_DOCUMENT_FORMAT + STRING + [1] + + + APPLE_PICT + APPLE_PICT + [2] + + + BACKGROUND + PIXEL + A list of pixel values + + + BITMAP + BITMAP + A list of bitmap IDs + + + CHARACTER_POSITION + SPAN + The start and end of the selection in bytes + + + CLASS + TEXT + (see + +. +) + + + CLIENT_WINDOW + WINDOW + Any top-level window owned by the selection owner + + + COLORMAP + COLORMAP + A list of colormap IDs + + + COLUMN_NUMBER + SPAN + The start and end column numbers + + + COMPOUND_TEXT + COMPOUND_TEXT + Compound Text + + + DELETE + NULL + (see + +. +) + + + DRAWABLE + DRAWABLE + A list of drawable IDs + + + ENCAPSULATED_POSTSCRIPT + STRING + [3], Appendix H + +Earlier versions of this document erroneously specified that conversion of +the PIXMAP target returns a property of type DRAWABLE instead of PIXMAP. +Implementors should be aware of this and may want to support the DRAWABLE +type as well to allow for compatibility with older clients. + + + + + ENCAPSULATED_POSTSCRIPT_INTERCHANGE + STRING + [3], Appendix H + + + FILE_NAME + TEXT + The full path name of a file + + + FOREGROUND + PIXEL + A list of pixel values + + + HOST_NAME + TEXT + (see + +. +) + + + INSERT_PROPERTY + NULL + (see + +. +) + + + INSERT_SELECTION + NULL + (see + +. +) + + + LENGTH + INTEGER + The number of bytes in the selection + +The targets ENCAPSULATED_POSTSCRIPT and ENCAPSULATED_POSTSCRIPT_INTERCHANGE +are equivalent to the targets _ADOBE_EPS and _ADOBE_EPSI (respectively) that +appear in the selection targets registry. The _ADOBE_ targets are +deprecated, but clients are encouraged to continue to support them for +backward compatibility. + + + + + LINE_NUMBER + SPAN + The start and end line numbers + + + LIST_LENGTH + INTEGER + The number of disjoint parts of the selection + + + MODULE + TEXT + The name of the selected procedure + + + MULTIPLE + ATOM_PAIR + (see the discussion that follows) + + + NAME + TEXT + (see + +. +) + + + ODIF + TEXT + ISO Office Document Interchange Format + + + OWNER_OS + TEXT + The operating system of the owner client + + + PIXMAP + PIXMAP + + +This definition is ambiguous, as the selection may be converted into any of +several targets that may return differing amounts of data. The requestor +has no way of knowing which, if any, of these targets corresponds to the +result of LENGTH. Clients are advised that no guarantees can be made about +the result of a conversion to LENGTH; its use is thus deprecated. + + + + A list of pixmap IDs + + + POSTSCRIPT + STRING + [3] + + + PROCEDURE + TEXT + The name of the selected procedure + + + PROCESS + INTEGER, TEXT + The process ID of the owner + + + STRING + STRING + ISO Latin-1 (+TAB+NEWLINE) text + + + TARGETS + ATOM + A list of valid target atoms + + + TASK + INTEGER, TEXT + The task ID of the owner + + + TEXT + TEXT + The text in the owner's choice of encoding + + + TIMESTAMP + INTEGER + The timestamp used to acquire the selection + + + USER + TEXT + The name of the user running the owner + + + + + + + + + + + + + + + + + + + + + +References: + + + + + +Adobe Systems, Incorporated. +Portable Document Format Reference Manual. +Reading, MA, Addison-Wesley, ISBN 0-201-62628-4. + + + + +Apple Computer, Incorporated. +Inside Macintosh, Volume V. +Chapter 4, "Color QuickDraw," Color Picture Format. +ISBN 0-201-17719-6. + + + + +Adobe Systems, Incorporated. +PostScript Language Reference Manual. +Reading, MA, Addison-Wesley, ISBN 0-201-18127-4. + + + + + +It is expected that this table will grow over time. + + + +Selection owners are required to support the following targets. +All other targets are optional. + + + + + +TARGETS - The owner should return a list of atoms that represent +the targets for which an attempt to convert the current selection +will succeed (barring unforseeable problems such as +Alloc +errors). +This list should include all the required atoms. + + + + +MULTIPLE - The MULTIPLE target atom is valid only when a property +is specified on the +ConvertSelection +request. +If the property argument in the +SelectionRequest +event is +None +and the target is MULTIPLE, +it should be refused. + + +When a selection owner receives a +SelectionRequest (target==MULTIPLE) +request, +the contents of the property named in the request will be a list of atom pairs: +the first atom naming a target and the second naming a property +( None +is not valid here). +The effect should be as if the owner had received a sequence of +SelectionRequest +events (one for each atom pair) except that: + + + + + +The owner should reply with a +SelectionNotify +only when all the requested conversions have been performed. + + + + +If the owner fails to convert the target named by an atom +in the MULTIPLE property, +it should replace that atom in the property with +None. + + + +
Convention + +The entries in a MULTIPLE property must be processed in the order +they appear in the property. +For further information, +see + +. + +
+ +The requestor should delete each individual property when it has +copied the data from that conversion, and the property specified in the +MULTIPLE request when it has copied all the data. + + +The requests are otherwise to be processed independently, and they +should succeed or fail independently. The MULTIPLE target is an +optimization that reduces the amount of protocol traffic between the +owner and the requestor; it is not a transaction mechanism. For +example, a client may issue a MULTIPLE request with two targets: a data +target and the DELETE target. The DELETE target will still be processed +even if the conversion of the data target fails. + +
+ + +TIMESTAMP - To avoid some race conditions, +it is important that requestors be able to discover the timestamp +the owner used to acquire ownership. +Until and unless the protocol is changed so that a +GetSelectionOwner +request returns the timestamp used to acquire ownership, +selection owners must support conversion to TIMESTAMP, +returning the timestamp they used to obtain the selection. + + +
+
+ + +Selection Targets with Side Effects + +Some targets (for example, DELETE) have side effects. +To render these targets unambiguous, +the entries in a MULTIPLE property must be processed in the order +that they appear in the property. + + +In general, +targets with side effects will return no information, +that is, they will return a zero length property of type NULL. +(Type NULL means the result of +InternAtom +on the string "NULL", not the value zero.) +In all cases, +the requested side effect must be performed before the conversion is accepted. +If the requested side effect cannot be performed, +the corresponding conversion request must be refused. + + +
+Conventions + + + + +Targets with side effects should return no information +(that is, they should have a zero-length property of type NULL). + + + + +The side effect of a target must be performed before the conversion is accepted. + + + + +If the side effect of a target cannot be performed, +the corresponding conversion request must be refused. + + + +
+ +
+Problem + + +The need to delay responding to the +ConvertSelection +request until a further conversion has succeeded poses problems +for the Intrinsics interface that need to be addressed. + +
+ + +These side-effect targets are used to implement operations such as +"exchange PRIMARY and SECONDARY selections." + + + +DELETE + +When the owner of a selection receives a request to convert it to DELETE, +it should delete the corresponding selection +(whatever doing so means for its internal data structures) +and return a zero-length property of type NULL if the deletion was successful. + + + + +INSERT_SELECTION + +When the owner of a selection receives a request to convert it to +INSERT_SELECTION, +the property named will be of type ATOM_PAIR. +The first atom will name a selection, +and the second will name a target. +The owner should use the selection mechanism to convert the named selection +into the named target and should insert it at the location of the selection +for which it got the INSERT_SELECTION request +(whatever doing so means for its internal data structures). + + + +INSERT_PROPERTY + +When the owner of a selection receives a request to convert it to +INSERT_PROPERTY, +it should insert the property named in the request at the location +of the selection for which it got the INSERT_SELECTION request +(whatever doing so means for its internal data structures). + + +
+
+ + +Use of Selection Properties + +The names of the properties used in selection data transfer are chosen by +the requestor. +The use of +None +property fields in +ConvertSelection +requests (which request the selection owner to choose a name) +is not permitted by these conventions. + + +The selection owner always chooses the type of the property +in the selection data transfer. +Some types have special semantics assigned by convention, +and these are reviewed in the following sections. + + +In all cases, +a request for conversion to a target should return either +a property of one of the types listed in the previous table for that target +or a property of type INCR and then a property of one of the listed types. + + +Certain selection properties may contain resource IDs. The selection owner +should ensure that the resource is not destroyed and that its contents are +not changed until after the selection transfer is complete. Requestors that +rely on the existence or on the proper contents of a resource must operate +on the resource (for example, by copying the contents of a pixmap) before +deleting the selection property. + + +The selection owner will return a list of zero or more items +of the type indicated by the property type. +In general, +the number of items in the list will correspond to the number +of disjoint parts of the selection. +Some targets (for example, side-effect targets) will be of length zero +irrespective of the number of disjoint selection parts. +In the case of fixed-size items, +the requestor may determine the number of items by the property size. +Selection property types are listed in the table below. +For variable-length items such as text, +the separators are also listed. + + + + + + + + + + Type Atom + Format + Separator + + + + + APPLE_PICT + 8 + Self-sizing + + + ATOM + 32 + Fixed-size + + + ATOM_PAIR + 32 + Fixed-size + + + BITMAP + 32 + Fixed-size + + + C_STRING + 8 + Zero + + + COLORMAP + 32 + Fixed-size + + + COMPOUND_TEXT + 8 + Zero + + + DRAWABLE + 32 + Fixed-size + + + INCR + 32 + Fixed-size + + + INTEGER + 32 + Fixed-size + + + PIXEL + 32 + Fixed-size + + + PIXMAP + 32 + Fixed-size + + + SPAN + 32 + Fixed-size + + + STRING + 8 + Zero + + + WINDOW + 32 + Fixed-size + + + + + + +It is expected that this table will grow over time. + + + +TEXT Properties + +In general, +the encoding for the characters in a text string property is specified +by its type. +It is highly desirable for there to be a simple, invertible mapping +between string property types and any character set names +embedded within font names in any font naming standard adopted by the +Consortium. + + + +The atom TEXT is a polymorphic target. +Requesting conversion into TEXT will convert into whatever encoding +is convenient for the owner. +The encoding chosen will be indicated by the type of the property returned. +TEXT is not defined as a type; +it will never be the returned type from a selection conversion request. + + + +If the requestor wants the owner to return the contents of the selection +in a specific encoding, +it should request conversion into the name of that encoding. + + + +In the table in + +, +the word TEXT (in the Type column) is used to indicate one +of the registered encoding names. +The type would not actually be TEXT; +it would be STRING or some other ATOM naming the encoding chosen by the owner. + + + +STRING as a type or a target specifies the ISO Latin-1 character set plus the +control characters TAB (octal 11) and NEWLINE (octal 12). +The spacing interpretation of TAB is context dependent. +Other ASCII control characters are explicitly not included in STRING +at the present time. + + + +COMPOUND_TEXT as a type or a target specifies the Compound Text interchange +format; see the +Compound Text Encoding. + + + + +There are some text objects where the source or intended user, as the +case may be, does not have a specific character set for the text, but +instead merely requires a zero-terminated sequence of bytes with no +other restriction; no element of the selection mechanism may assume that +any byte value is forbidden or that any two differing sequences are +equivalent. + + +Note that this is different from STRING, where many byte values are +forbidden, and from COMPOUND_TEXT, where, for example, inserting the +sequence 27,\ 40,\ 66 (designate ASCII into GL) at the start does not alter +the meaning. + + + For these objects, the type C_STRING should be used. + +
+Rationale + +An example of the need for C_STRING is to transmit the names of +files; many operating systems do not interpret filenames as having +a character set. For example, the same character string uses a +different sequence of bytes in ASCII and EBCDIC, and so most +operating systems see these as different filenames and offer no +way to treat them as the same. Thus no character-set based +property type is suitable. + +
+ + +Type STRING, COMPOUND_TEXT, and C_STRING properties will consist of a list +of elements separated by null characters; other encodings will need to +specify an appropriate list format. + +
+ + +INCR Properties + +Requestors may receive a property of type INCR + + +These properties were called INCREMENTAL in an earlier draft. +The protocol for using them has changed, +and so the name has changed to avoid confusion. + + +in response to any target that results in selection data. + + +This indicates that the owner will send the actual data incrementally. +The contents of the INCR property will be an integer, +which represents a lower bound on the number of bytes of data in the selection. +The requestor and the selection owner transfer the data in the selection +in the following manner. + + +The selection requestor starts the transfer process by deleting +the (type==INCR) property forming the reply to the selection. + + +The selection owner then: + + + + + +Appends the data in suitable-size chunks to the +same property on the same window as the selection reply +with a type corresponding to the actual type of the converted selection. +The size should be less than the maximum-request-size in the connection +handshake. + + + + +Waits between each append for a +PropertyNotify +(state==Deleted) event that shows that the requestor has read the data. +The reason for doing this is to limit the consumption of space in the server. + + + + +Waits (after the entire data has been transferred to the server) until a +PropertyNotify +(state==Deleted) +event that shows that the data has been read by the requestor +and then writes zero-length data to the property. + + + + + +The selection requestor: + + + + + +Waits for the +SelectionNotify +event. + + + + +Loops: + + + + +Retrieving data using +GetProperty +with the delete argument +True. + + + + +Waiting for a +PropertyNotify +with the state argument +NewValue. + + + + + + +Waits until the property named by the +PropertyNotify +event is zero-length. + + + + +Deletes the zero-length property. + + + + + +The type of the converted selection is the type of the first partial property. +The remaining partial properties must have the same type. + + + + +DRAWABLE Properties + +Requestors may receive properties of type PIXMAP, BITMAP, DRAWABLE, or WINDOW, +which contain an appropriate ID. +While information about these drawables is available from the server by means of +the +GetGeometry request, +the following items are not: + + + + + +Foreground pixel + + + + +Background pixel + + + + +Colormap ID + + + + + +In general, +requestors converting into targets whose returned type in the table in + + +is one of the DRAWABLE types should expect to convert also +into the following targets (using the MULTIPLE mechanism): + + + + + + +FOREGROUND returns a PIXEL value. + + + + +BACKGROUND returns a PIXEL value. + + + + +COLORMAP returns a colormap ID. + + + + + + + +SPAN Properties + +Properties with type SPAN contain a list of cardinal-pairs +with the length of the cardinals determined by the format. +The first specifies the starting position, +and the second specifies the ending position plus one. +The base is zero. +If they are the same, +the span is zero-length and is before the specified position. +The units are implied by the target atom, +such as LINE_NUMBER or CHARACTER_POSITION. + + +
+ + +Manager Selections + +Certain clients, often called managers, take on responsibility +for managing shared resources. A client that manages a shared +resource should take ownership of an appropriate selection, +named using the conventions described in + + +and + +. +A client that manages multiple +shared resources (or groups of resources) should take +ownership of a selection for each one. + + +The manager may support conversion of various targets +for that selection. Managers are encouraged to use this +technique as the primary means by which clients interact +with the managed resource. Note that the conventions for +interacting with the window manager predate this section; +as a result many interactions with the window manager use +other techniques. + + +Before a manager takes ownership of a manager selection, it +should use the +GetSelectionOwner +request to check whether the selection is already owned by another client, +and, where appropriate, it should ask the user if the new manager should +replace the old one. If so, it may then take ownership of the selection. +Managers should acquire the selection using a window created expressly for +this purpose. Managers must conform to the rules for selection owners +described in + + +and + + +, and they must also support the required +targets listed in + +. + + + +If a manager loses ownership of a manager selection, this +means that a new manager is taking over its responsibilities. +The old manager must release all resources it has managed +and must then destroy the window that owned the selection. +For example, a window manager losing ownership of WM_S2 +must deselect from +SubstructureRedirect +on the root window of screen 2 before destroying the window that owned +WM_S2. + + + +When the new manager notices that the window owning the selection +has been destroyed, it knows that it can successfully proceed to +control the resource it is planning to manage. If the old +manager does not destroy the window within a reasonable time, +the new manager should check with the user before destroying +the window itself or killing the old manager. + + + +If a manager wants to give up, on its own, management of a shared +resource controlled by a selection, it must do so by releasing +the resources it is managing and then by destroying the +window that owns the selection. It should not first disown +the selection, since this introduces a race condition. + + + +Clients who are interested in knowing when the owner of a +manager selection is no longer managing the corresponding shared +resource should select for +StructureNotify +on the window owning the selection so they can be notified when the window +is destroyed. Clients are warned that after doing a +GetSelectionOwner +and selecting for +StructureNotify, +they should do a +GetSelectionOwner +again to ensure that the owner did not change after initially getting the +selection owner and before selecting for +StructureNotify. + + + +Immediately after a manager successfully acquires ownership of a +manager selection, it should announce its arrival by sending a +ClientMessage +event. This event should be sent using the +SendEvent +protocol request with the following arguments: + + + + + + + + + + + + Argument + Value + + + + + destination: + +the root window of screen 0, or the root +window of the appropriate screen if the +manager is managing a screen-specific resource + + + propogate: + False + + + event-mask: + StructureNotify + + + event: + + ClientMessage + + + + type: + MANAGER + + + + format: + 32 + + + + data[0] + + +We use the notation data[n] to indicate the n +th element +of the LISTofINT8, LISTofINT16, or LISTofINT32 in the data field of the +ClientMessage, +according to the format field. +The list is indexed from zero. + + + + timestamp + + + + data[1]: + manager selection atom + + + + data[2]: + the window owning the selection + + + + data[3]: + manager-selection-specific data + + + + data[4]: + manager-selection-specific data + + + + + + +Clients that wish to know when a specific manager has started should +select for +StructureNotify +on the appropriate root window and should watch for the appropriate MANAGER +ClientMessage. + + +
+ + +Peer-to-Peer Communication by Means of Cut Buffers + +The cut buffer mechanism is much simpler but much less powerful +than the selection mechanism. +The selection mechanism is active in that it provides a link +between the owner and requestor clients. +The cut buffer mechanism is passive; +an owner places data in a cut buffer from which a requestor retrieves +the data at some later time. + + + +The cut buffers consist of eight properties on the root of screen zero, +named by the predefined atoms CUT_BUFFER0 to CUT_BUFFER7. +These properties must, at present, have type STRING and format 8. +A client that uses the cut buffer mechanism must initially ensure that +all eight properties exist by using +ChangeProperty +requests to append zero-length data to each. + + + +A client that stores data in the cut buffers (an owner) first must rotate the +ring of buffers by plus 1 by using +RotateProperties +requests to rename each buffer; +that is, CUT_BUFFER0 to CUT_BUFFER1, CUT_BUFFER1 to CUT_BUFFER2, ..., +and CUT_BUFFER7 to CUT_BUFFER0. +It then must store the data into CUT_BUFFER0 by using a +ChangeProperty +request in mode +Replace. + + + +A client that obtains data from the cut buffers should use a +GetProperty +request to retrieve the contents of CUT_BUFFER0. + + + +In response to a specific user request, +a client may rotate the cut buffers by minus 1 by using +RotateProperties +requests to rename each buffer; +that is, CUT_BUFFER7 to CUT_BUFFER6, CUT_BUFFER6 to CUT_BUFFER5, ..., +and CUT_BUFFER0 to CUT_BUFFER7. + + + +Data should be stored to the cut buffers +and the ring rotated only when requested by explicit user action. +Users depend on their mental model of cut buffer operation +and need to be able to identify operations that transfer data to and fro. + + + + +Client-to-Window-Manager Communication + +To permit window managers to perform their role of mediating the competing +demands for resources such as screen space, +the clients being managed must adhere to certain conventions +and must expect the window managers to do likewise. +These conventions are covered here from the client's point of view. + + +In general, +these conventions are somewhat complex +and will undoubtedly change as new window management paradigms are developed. +Thus, there is a strong bias toward defining only those conventions +that are essential and that apply generally to all window management paradigms. +Clients designed to run with a particular window manager can easily +define private protocols to add to these conventions, +but they must be aware that their users may decide to run some other +window manager no matter how much the designers of the private protocol +are convinced that they have seen the "one true light" of user interfaces. + + +It is a principle of these conventions that a general client should +neither know nor care which window manager is running or, indeed, +if one is running at all. +The conventions do not support all client functions +without a window manager running; +for example, the concept of Iconic +is not directly supported by clients. +If no window manager is running, +the concept of Iconic does not apply. +A goal of the conventions is to make it possible to kill and +restart window managers without loss of functionality. + + +Each window manager will implement a particular window management policy; +the choice of an appropriate window management policy +for the user's circumstances is not one for an individual client to +make but will be made by the user or the user's system administrator. +This does not exclude the possibility of writing clients that +use a private protocol to restrict themselves to operating only +under a specific window manager. +Rather, +it merely ensures that no claim of general utility is made for such programs. + + + +For example, +the claim is often made: +"The client I'm writing is important, and it needs to be on top." +Perhaps it is important when it is being run in earnest, +and it should then be run under the control of a window manager +that recognizes "important" windows through some private protocol +and ensures that they are on top. +However, imagine, for example, that the "important" client is being debugged. +Then, ensuring that it is always on top is no longer +the appropriate window management policy, +and it should be run under a window manager that allows other windows +(for example, the debugger) to appear on top. + + + +Client's Actions + +In general, +the object of the X Version 11 design is that clients should, +as far as possible, do exactly what they would do in the absence +of a window manager, except for the following: + + + + +Hinting to the window manager about the resources they would like +to obtain + + + + +Cooperating with the window manager by accepting the resources they +are allocated even if they are not those requested + + + + +Being prepared for resource allocations to change at any time + + + + + +Creating a Top-Level Window + +A client's +top-level window is a window whose +override-redirect attribute is +False. +It must either be a child of a root window, or it must have been a child of +a root window immediately prior to having been reparented by the window +manager. If the client reparents the window away from the root, the window +is no longer a top-level window; but it can become a top-level window again +if the client reparents it back to the root. + + +A client usually would expect to create its top-level windows +as children of one or more of the root windows by using some +boilerplate like the following: + + + +win = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), xsh.x, xsh.y, + xsh.width, xsh.height, bw, bd, bg); + + + +If a particular one of the root windows was required, however, +it could use something like the following: + + + +win = XCreateSimpleWindow(dpy, RootWindow(dpy, screen), xsh.x, xsh.y, + xsh.width, xsh.height, bw, bd, bg); + + + +Ideally, +it should be possible to override the choice of a root window +and allow clients (including window managers) to treat a nonroot window +as a pseudo-root. +This would allow, for example, the testing of window managers and the +use of application-specific window managers to control the subwindows +owned by the members of a related suite of clients. +Doing so properly requires an extension, +the design of which is under study. + + + +From the client's point of view, +the window manager will regard its top-level window as being in +one of three states: + + + + + +Normal + + + + +Iconic + + + + +Withdrawn + + + + + +Newly created windows start in the Withdrawn state. +Transitions between states happen when the top-level window is mapped +and unmapped and when the window manager receives certain messages. +For further details, see + +. + and + +. + + + + +Client Properties + +Once the client has one or more top-level windows, +it should place properties on those windows to inform the window manager +of the behavior that the client desires. +Window managers will assume values they find convenient +for any of these properties that are not supplied; +clients that depend on particular values must explicitly supply them. +The window manager will not change properties written by the client. + + +The window manager will examine the contents of these +properties when the window makes the transition from the Withdrawn state +and will monitor some properties for changes while the window is +in the Iconic or Normal state. +When the client changes one of these properties, +it must use +Replace +mode to overwrite the entire property with new data; +the window manager will retain no memory of the old value of the property. +All fields of the property must be set to suitable values in a single +Replace +mode ChangeProperty +request. +This ensures that the full contents of the property will be +available to a new window manager if the existing one crashes, +if it is shut down and restarted, +or if the session needs to be shut down and restarted by the session manager. + + +
Convention + +Clients writing or rewriting window manager properties must +ensure that the entire content of each property remains valid +at all times. + +
+ + +Some of these properties may contain the IDs of resources, such as +windows or pixmaps. Clients should ensure that these resources exist +for at least as long as the window on which the property resides. + + +If these properties are longer than expected, +clients should ignore the remainder of the property. +Extending these properties is reserved to the X Consortium; +private extensions to them are forbidden. +Private additional communication between clients and window managers +should take place using separate properties. +The only exception to this rule is the WM_PROTOCOLS property, which may be +of arbitrary length and which may contain atoms representing private +protocols (see + + +). + + + +The next sections describe each of the properties the clients +need to set, in turn. +They are summarized in the table in + + + + + + +WM_NAME Property + +The WM_NAME property is an uninterpreted string +that the client wants the window manager to display +in association with the window (for example, in a window headline bar). + + +The encoding used for this string +(and all other uninterpreted string properties) +is implied by the type of the property. +The type atoms to be used for this purpose are described in + +. + + + +Window managers are expected to make an effort to display this information. +Simply ignoring WM_NAME is not acceptable behavior. +Clients can assume that at least the first part of this string +is visible to the user and that if the information is not visible to the user, +it is because the user has taken an explicit action to make it invisible. + + + +On the other hand, +there is no guarantee that the user can see the WM_NAME string +even if the window manager supports window headlines. +The user may have placed the headline off-screen +or have covered it by other windows. +WM_NAME should not be used for application-critical information +or to announce asynchronous changes of an application's state +that require timely user response. +The expected uses are to permit the user to identify one of a +number of instances of the same client +and to provide the user with noncritical state information. + + + +Even window managers that support headline bars will place some limit +on the length of the WM_NAME string that can be visible; +brevity here will pay dividends. + + + + +WM_ICON_NAME Property + +The WM_ICON_NAME property is an uninterpreted string +that the client wants to be displayed in association with the window +when it is iconified (for example, in an icon label). +In other respects, +including the type, it is similar to WM_NAME. +For obvious geometric reasons, +fewer characters will normally be visible in WM_ICON_NAME than WM_NAME. + + + +Clients should not attempt to display this string in their icon pixmaps +or windows; rather, they should rely on the window manager to do so. + + + + +WM_NORMAL_HINTS Property + +The type of the WM_NORMAL_HINTS property is WM_SIZE_HINTS. +Its contents are as follows: + + + + + + + + + + Field + Type + Comments + + + + + flags + CARD32 + (see the next table) + + + pad + 4*CARD32 + For backwards compatibility + + + min_width + INT32 + If missing, assume base_width + + + min_height + INT32 + If missing, assume base_height + + + max_width + INT32 + + + max_height + INT32 + + + width_inc + INT32 + + + height_inc + INT32 + + + min_aspect + (INT32,INT32) + + + max_aspect + (INT32,INT32) + + + base_width + INT32 + If missing, assume min_width + + + base_height + INT32 + If missing, assume min_height + + + win_gravity + INT32 + If missing, assume NorthWest + + + + + + +The WM_SIZE_HINTS.flags bit definitions are as follows: + + + + + + + + + + Name + Value + Field + + + + + USPosition + 1 + User-specified x, y + + + USSize + 2 + User-specified width, height + + + PPosition + 4 + Program-specified position + + + PSize + 8 + Program-specified size + + + PMinSize + 16 + Program-specified minimum size + + + PMaxSize + 32 + Program-specified maximum size + + + PResizeInc + 64 + Program-specified resize increments + + + PAspect + 128 + Program-specified min and max aspect ratios + + + PBaseSize + 256 + Program-specified base size + + + PWinGravity + 512 + Program-specified window gravity + + + + + + +To indicate that the size and position of the window +(when a transition from the Withdrawn state occurs) was specified by the user, +the client should set the +USPosition +and +USSize +flags, +which allow a window manager to know that the user specifically asked where +the window should be placed or how the window should be sized and that +further interaction is superfluous. +To indicate that it was specified by the client without any user involvement, +the client should set +PPosition +and +PSize. + + + +The size specifiers refer to the width and height of the client's +window excluding borders. + + + +The win_gravity may be any of the values specified for WINGRAVITY in +the core protocol except for +Unmap: +NorthWest +(1), +North +(2), +NorthEast +(3), +West +(4), +Center +(5), +East +(6), +SouthWest +(7), +South +(8), and +SouthEast +(9). It specifies how and whether the client window wants to be shifted to +make room for the window manager frame. + + + +If the win_gravity is +Static, +the window manager frame is positioned +so that the inside border of the client window inside the frame is +in the same position on the screen as it was when the client +requested the transition from Withdrawn state. Other values of +win_gravity specify a window reference point. For +NorthWest, +NorthEast, +SouthWest, +and +SouthEast +the reference point is the specified outer corner of the window (on the +outside border edge). For +North, +South, +East +and +West +the reference point is the center of the specified outer edge of the window +border. For +Center +the reference point is the center of the window. The reference point of the +window manager frame is placed at the location on the screen where the +reference point of the client window was when the client requested the +transition from Withdrawn state. + + + +The min_width and min_height elements specify the +minimum size that the window can be for the client to be useful. +The max_width and max_height elements specify the maximum size. +The base_width and base_height elements in conjunction with width_inc +and height_inc define an arithmetic progression of preferred window +widths and heights for non-negative integers +i and j: + + + +width = base_width + ( i x width_inc ) + +height = base_height + ( j x height_inc ) + + + +Window managers are encouraged to use +i and j +instead of width and height in reporting window sizes to users. +If a base size is not provided, +the minimum size is to be used in its place and vice versa. + + + +The min_aspect and max_aspect fields are fractions with the numerator first +and the denominator second, and they allow a client to specify the range of +aspect ratios it prefers. Window managers that honor aspect ratios should +take into account the base size in determining the preferred window size. If +a base size is provided along with the aspect ratio fields, the base size +should be subtracted from the window size prior to checking that the aspect +ratio falls in range. If a base size is not provided, nothing should be +subtracted from the window size. (The minimum size is not to be used in +place of the base size for this purpose.) + + + + +WM_HINTS Property + +The WM_HINTS property (whose type is WM_HINTS) +is used to communicate to the window manager. +It conveys the information the window manager needs +other than the window geometry, +which is available from the window itself; +the constraints on that geometry, +which is available from the WM_NORMAL_HINTS structure; +and various strings, +which need separate properties, such as WM_NAME. +The contents of the properties are as follows: + + + + + + + + + + Field + Type + Comments + + + + + flags + CARD32 + (see the next table) + + + input + CARD32 + The client's input model + + + initial_state + CARD32 + The state when first mapped + + + icon_pixmap + PIXMAP + The pixmap for the icon image + + + icon_window + WINDOW + The window for the icon image + + + icon_x + INT32 + The icon location + + + icon_y + INT32 + + + icon_mask + PIXMAP + The mask for the icon shape + + + window_group + WINDOW + The ID of the group leader window + + + + + + +The WM_HINTS.flags bit definitions are as follows: + + + + + + + + + + Name + Value + Field + + + + + InputHint + 1 + input + + + StateHint + 2 + initial_state + + + IconPixmapHint + 4 + icon_pixmap + + + IconWindowHint + 8 + icon_window + + + IconPositionHint + 16 + icon_x & icon_y + + + IconMaskHint + 32 + icon_mask + + + WindowGroupHint + 64 + window_group + + + MessageHint + 128 + (this bit is obsolete) + + + UrgencyHint + 256 + urgency + + + + + + +Window managers are free to assume convenient values for all fields of +the WM_HINTS property if a window is mapped without one. + + + +The input field is used to communicate to the window manager the input focus +model used by the client (see + + +). + + + +Clients with the Globally Active and No Input models should set the +input flag to +False. +Clients with the Passive and Locally Active models should set the input +flag to +True. + + + +From the client's point of view, +the window manager will regard the client's top-level window as being +in one of three states: + + + + + +Normal + + + + +Iconic + + + + +Withdrawn + + + + + +The semantics of these states are described in + +. +Newly created windows start in the Withdrawn state. +Transitions between states happen when a +top-level window is mapped and unmapped +and when the window manager receives certain messages. + + + +The value of the initial_state field determines the state the client +wishes to be in at the time the top-level window is mapped +from the Withdrawn state, as shown in the following table: + + + + + + + + + + State + Value + Comments + + + + + NormalState + 1 + The window is visible + + + IconicState + 3 + The icon is visible + + + + + + +The icon_pixmap field may specify a pixmap to be used as an icon. +This pixmap should be: + + + + + +One of the sizes specified in the WM_ICON_SIZE property +on the root if it exists (see + + +). + + + + +1-bit deep. +The window manager will select, through the defaults database, +suitable background (for the 0 bits) and foreground (for the 1 bits) colors. +These defaults can, of course, specify different colors for the icons +of different clients. + + + + + +The icon_mask specifies which pixels of the icon_pixmap should be used as the +icon, allowing for icons to appear nonrectangular. + + +The icon_window field is the ID of a window the client wants used as its icon. +Most, but not all, window managers will support icon windows. +Those that do not are likely to have a user interface in which small +windows that behave like icons are completely inappropriate. +Clients should not attempt to remedy the omission by working around it. + + +Clients that need more capabilities from the icons than a simple 2-color +bitmap should use icon windows. +Rules for clients that do are set out in + +. + + + +The (icon_x,icon_y) coordinate is a hint to the window manager +as to where it should position the icon. +The policies of the window manager control the positioning of icons, +so clients should not depend on attention being paid to this hint. + + + +The window_group field lets the client specify that this window belongs +to a group of windows. +An example is a single client manipulating multiple +children of the root window. + + +
+Conventions + + + + +The window_group field should be set to the ID of the group leader. +The window group leader may be a window that exists only for that purpose; +a placeholder group leader of this kind would never be mapped +either by the client or by the window manager. + + + + +The properties of the window group leader are those for the group as +a whole (for example, the icon to be shown when the entire group is iconified). + + + + +
+ + +Window managers may provide facilities for manipulating the group as a whole. +Clients, at present, have no way to operate on the group as a whole. + + + +The messages bit, if set in the flags field, indicates that the +client is using an obsolete window manager communication protocol, + + +This obsolete protocol was described in the July 27, 1988, +draft of the ICCCM. +Windows using it can also be detected because their WM_HINTS properties are +4 bytes longer than expected. +Window managers are free to support clients using the obsolete protocol +in a backwards compatibility mode. + + +rather than the WM_PROTOCOLS mechanism of + + + + + +The +UrgencyHint +flag, if set in the flags field, indicates that the client deems the window +contents to be urgent, requiring the timely response of the user. The +window manager must make some effort to draw the user's attention to this +window while this flag is set. The window manager must also monitor the +state of this flag for the entire time the window is in the Normal or Iconic +state and must take appropriate action when the state of the flag changes. +The flag is otherwise independent of the window's state; in particular, the +window manager is not required to deiconify the window if the client sets +the flag on an Iconic window. Clients must provide some means by which the +user can cause the +UrgencyHint +flag to be set to zero or the window to be withdrawn. The user's action can +either mitigate the actual condition that made the window urgent, or it can +merely shut off the alarm. + + +
Rationale + +This mechanism is useful for alarm dialog boxes or reminder windows, in +cases where mapping the window is not enough (e.g., in the presence of +multi-workspace or virtual desktop window managers), and where using an +override-redirect window is too intrusive. For example, the window manager +may attract attention to an urgent window by adding an indicator to its +title bar or its icon. Window managers may also take additional action +for a window that is newly urgent, such as by flashing its icon (if the +window is iconic) or by raising it to the top of the stack. + +
+
+ + +WM_CLASS Property + +The WM_CLASS property (of type STRING without control characters) +contains two consecutive null-terminated strings. +These specify the Instance and Class names to be used by both the client +and the window manager for looking up resources for the application +or as identifying information. +This property must be present when the window leaves the Withdrawn state +and may be changed only while the window is in the Withdrawn state. +Window managers may examine the property only when they start up +and when the window leaves the Withdrawn state, +but there should be no need for a client to change its state dynamically. + + +The two strings, respectively, are: + + + + + +A string that names the particular instance of the application to which +the client that owns this window belongs. +Resources that are specified by instance name override any resources +that are specified by class name. +Instance names can be specified by the user in an operating-system specific +manner. +On POSIX-conformant systems, +the following conventions are used: + + + + +If "-name NAME" is given on the command line, +NAME is used as the instance name. + + + + +Otherwise, if the environment variable RESOURCE_NAME is set, +its value will be used as the instance name. + + + + +Otherwise, the trailing part of the name used to invoke the program +(argv[0] stripped of any directory names) is used as the instance name. + + + + + + +A string that names the general class of applications to which the client +that owns this window belongs. +Resources that are specified by class apply to all applications +that have the same class name. +Class names are specified by the application writer. +Examples of commonly used class names include: +"Emacs", "XTerm", "XClock", "XLoad", and so on. + + + + + +Note that WM_CLASS strings are null-terminated +and, thus, differ from the general conventions that STRING properties +are null-separated. +This inconsistency is necessary for backwards compatibility. + + + + +WM_TRANSIENT_FOR Property + +The WM_TRANSIENT_FOR property (of type WINDOW) +contains the ID of another top-level window. +The implication is that this window is a pop-up on behalf of the named window, +and window managers may decide not to decorate transient windows +or may treat them differently in other ways. +In particular, +window managers should present newly mapped WM_TRANSIENT_FOR +windows without requiring any user interaction, +even if mapping top-level windows normally does require interaction. +Dialogue boxes, for example, are an example of windows that should have +WM_TRANSIENT_FOR set. + + + +It is important not to confuse WM_TRANSIENT_FOR with override-redirect. +WM_TRANSIENT_FOR should be used in those cases where the pointer +is not grabbed while the window is mapped (in other words, +if other windows are allowed to be active while the transient is up). +If other windows must be prevented from processing input +(for example, when implementing pop-up menus), +use override-redirect and grab the pointer while the window is mapped. + + + + +WM_PROTOCOLS Property + +The WM_PROTOCOLS property (of type ATOM) is a list of atoms. +Each atom identifies a communication protocol between the client +and the window manager in which the client is willing to participate. +Atoms can identify both standard protocols and private protocols +specific to individual window managers. + + +All the protocols in which a client can volunteer to take part +involve the window manager sending the client a +ClientMessage +event and the client taking appropriate action. +For details of the contents of the event, +see + + +In each case, +the protocol transactions are initiated by the window manager. + + +The WM_PROTOCOLS property is not required. +If it is not present, +the client does not want to participate in any window manager protocols. + + +The X Consortium will maintain a registry of protocols to avoid collisions +in the name space. +The following table lists the protocols that have been defined to date. + + + + + + + + + + Protocol + Section + Purpose + + + + + WM_TAKE_FOCUS + + + + + Assignment of input focus + + + WM_SAVE_YOURSELF + Appendix C + Save client state request (deprecated) + + + WM_DELETE_WINDOW + + + + + Request to delete top-level window + + + + + + +It is expected that this table will grow over time. + + + + +WM_COLORMAP_WINDOWS Property + +The WM_COLORMAP_WINDOWS property (of type WINDOW) on a top-level window +is a list of the IDs of windows that may need colormaps installed +that differ from the colormap of the top-level window. +The window manager will watch this list of windows for changes in their +colormap attributes. +The top-level window is always (implicitly or explicitly) on the watch list. +For the details of this mechanism, +see + + + + + + +WM_CLIENT_MACHINE Property + +The client should set the WM_CLIENT_MACHINE property (of one of the TEXT +types) to a string that forms the name of the machine running the client as +seen from the machine running the server. + + +
+ + +Window Manager Properties + +The properties that were described in the previous section are those +that the client is responsible for maintaining on its top-level windows. +This section describes the properties that the window manager places on +client's top-level windows and on the root. + + + +WM_STATE Property + +The window manager will place a WM_STATE property (of type WM_STATE) on each +top-level client window that is not in the Withdrawn state. Top-level +windows in the Withdrawn state may or may not have the WM_STATE property. +Once the top-level window has been withdrawn, the client may re-use it for +another purpose. Clients that do so should remove the WM_STATE property if +it is still present. + + + +Some clients (such as xprop) will ask the user to +click over a window +on which the program is to operate. Typically, the intent is for this to be +a top-level window. To find a top-level window, clients should search the +window hierarchy beneath the selected location for a window with the +WM_STATE property. This search must be recursive in order to cover all +window manager reparenting possibilities. If no window with a WM_STATE +property is found, it is recommended that programs use a mapped +child-of-root window if one is present beneath the selected location. + + + +The contents of the WM_STATE property are defined as follows: + + + + + + + + + + Field + Type + Comments + + + + + state + CARD32 + (see the next table) + + + icon + WINDOW + ID of icon window + + + + + + +The following table lists the WM_STATE.state values: + + + + + + + + + State + Value + + + + + WithdrawnState + 0 + + + NormalState + 1 + + + IconicState + 3 + + + + + + +Adding other fields to this property is reserved to the X Consortium. +Values for the state field other than those defined in the above +table are reserved for use by the X Consortium. + + + +The state field describes the window manager's idea of the state +the window is in, which may not match the client's idea as expressed +in the initial_state field of the WM_HINTS property +(for example, if the user has asked the window manager to iconify the window). +If it is +NormalState, +the window manager believes the client should be animating its window. +If it is +IconicState, +the client should animate its icon window. +In either state, +clients should be prepared to handle exposure events from either window. + + + +When the window is withdrawn, the window manager will either change the +state field's value to +WithdrawnState +or it will remove the WM_STATE property entirely. + + + +The icon field should contain the window ID of the window that the +window manager uses as the icon for the window on which this property is +set. If no such window exists, the icon field should be +None. +Note that this window could be but is not necessarily the same window as the +icon window that the client may have specified in its WM_HINTS property. +The WM_STATE icon may be a window that the window manager has supplied and +that contains the client's icon pixmap, or it may be an ancestor of the +client's icon window. + + + + +WM_ICON_SIZE Property + +A window manager that wishes to place constraints on the sizes of icon +pixmaps and/or windows should place a property called WM_ICON_SIZE on the root. +The contents of this property are listed in the following table. + + + + + + + + + + Field + Type + Comments + + + + + min_width + CARD32 + The data for the icon size series + + + min_height + CARD32 + + + max_width + CARD32 + + + max_height + CARD32 + + + width_inc + CARD32 + + + height_inc + CARD32 + + + + + + +For more details see section 14.1.12 in +Xlib - C Language X Interface. + + + + + +Changing Window State + +From the client's point of view, +the window manager will regard each of the client's top-level +windows as being in one of three states, +whose semantics are as follows: + + + + +NormalState +- The client's top-level window is viewable. + + + + +IconicState +- The client's top-level window is iconic +(whatever that means for this window manager). +The client can assume that its top-level window is not viewable, +its icon_window (if any) will be viewable +and, failing that, +its icon_pixmap (if any) or its WM_ICON_NAME will be displayed. + + + + +WithdrawnState +- Neither the client's top-level window nor its icon is visible. + + + + + +In fact, +the window manager may implement states with semantics +other than those described above. +For example, +a window manager might implement a concept of an "inactive" state +in which an infrequently used client's window would be represented +as a string in a menu. +But this state is invisible to the client, +which would see itself merely as being in the Iconic state. + + + +Newly created top-level windows are in the Withdrawn state. +Once the window has been provided with suitable properties, +the client is free to change its state as follows: + + + + + +Withdrawn -> Normal - The client should map the window with +WM_HINTS.initial_state being +NormalState. + + + + +Withdrawn -> Iconic - The client should map the window with +WM_HINTS.initial_state being +IconicState. + + + + +Normal -> Iconic - The client should send a +ClientMessage +event as described later in this section. + + + + +Normal -> Withdrawn - The client should unmap the window and follow it +with a synthetic +UnmapNotify +event as described later in this section. + + + + +Iconic -> Normal - The client should map the window. +The contents of WM_HINTS.initial_state are irrelevant in this case. + + + + +Iconic -> Withdrawn - The client should unmap the window +and follow it with a synthetic +UnmapNotify +event as described later in this section. + + + + + +Only the client can effect a transition into or out of the Withdrawn +state. +Once a client's window +has left the Withdrawn state, +the window will be mapped if it is in the Normal state and the window will be +unmapped if it is in the Iconic state. Reparenting window managers +must unmap the client's window when it is in the Iconic state, even if an +ancestor window being unmapped renders the client's window unviewable. +Conversely, if a reparenting window manager renders the client's window +unviewable by unmapping an ancestor, the client's window is by definition in +the Iconic state and must also be unmapped. + + +
Advice to Implementors + +Clients can select for +StructureNotify +on their +top-level windows to track transitions between Normal and Iconic states. +Receipt of a +MapNotify +event will indicate a transition to the Normal state, and receipt of an +UnmapNotify +event will indicate a transition to the Iconic state. + +
+ + +When changing the state of the window to Withdrawn, the client must (in +addition to unmapping the window) send a synthetic +UnmapNotify +event by +using a +SendEvent +request with the following arguments: + + + + + + + + + + Argument + Value + + + + + destination + The root + + + propogate + False + + + event-mask + (SubstructureRedirect|SubstructureNotify) + + + +event: an UnmapNotify with: + + + + + event: + The root + + + + window: + The window itself + + + + from-configure: + False + + + + + +
+Rationale + +The reason for requiring the client to send a synthetic +UnmapNotify +event is to ensure that the window manager +gets some notification of the client's desire to change state, +even though the window may already be unmapped when the desire is expressed. + +
+ +
+Advice to Implementors + +For compatibility with obsolete clients, +window managers should trigger the transition to the Withdrawn state +on the real +UnmapNotify +rather than waiting for the synthetic one. +They should also trigger the transition if they receive a synthetic +UnmapNotify +on a window for which they have not yet received a real +UnmapNotify. + +
+ + +When a client withdraws a window, +the window manager will then update or remove the WM_STATE +property as described in + +. +Clients that want to re-use a client window (e.g., by mapping it again or +reparenting it elsewhere) after withdrawing it must wait for the +withdrawal to be complete before proceeding. The preferred method for +doing this is for clients to wait for the window manager to update or +remove the WM_STATE property. + +Earlier versions of these conventions prohibited clients from +reading the WM_STATE property. Clients operating under the earlier +conventions used the technique of tracking +ReparentNotify +events to wait for the top-level window to be reparented back to the root +window. This is still a valid technique; however, it works only for +reparenting window managers, and the WM_STATE technique is to be preferred. + + + + +If the transition is from the Normal to the Iconic state, +the client should send a +ClientMessage +event to the root with: + + + + +Window == the window to be iconified + + + + +Type + + +The type field of the +ClientMessage +event (called the message_type field by Xlib) should not be confused with +the code field of the event itself, +which will have the value 33 +( ClientMessage). + + +== the atom WM_CHANGE_STATE + + + + +Format == 32 + + + + +Data[0] == IconicState + + + + +
Rationale + +The format of this +ClientMessage +event does not match the format of +ClientMessages +in + +. +This is because they are sent by the window manager to clients, +and this message is sent by clients to the window manager. + +
+ + +Other values of data[0] are reserved for future extensions to these +conventions. The parameters of the +SendEvent +request should be those described for the synthetic +UnmapNotify +event. + + +
Advice to Implementors + +Clients can also select for +VisibilityChange +events on their top-level or icon windows. +They will then receive a +VisibilityNotify +(state==FullyObscured) +event when the window concerned becomes completely +obscured even though mapped (and thus, perhaps a waste +of time to update) and a +VisibilityNotify +(state!=FullyObscured) +event when it becomes even partly viewable. + +
+ +
Advice to Implementors + +When a window makes a transition from the Normal state to either the Iconic +or the Withdrawn state, clients should be aware that the window manager +may make transients for this window inaccessible. Clients should not rely +on transient windows being available to the user when the transient owner +window is not in the Normal state. When withdrawing a window, clients are +advised to withdraw transients for the window. + +
+ +
+ + +Configuring the Window + +Clients can resize and reposition their top-level windows by using the +ConfigureWindow +request. +The attributes of the window that can be altered +with this request are as follows: + + + + + +The [x,y] location of the window's upper left-outer corner + + + + +The [width,height] of the inner region of the window (excluding +borders) + + + + +The border width of the window + + + + +The window's position in the stack + + + + + +The coordinate system in which the location is expressed is that of the root +(irrespective of any reparenting that may have occurred). +The border width to be used and win_gravity position hint +to be used are those most recently requested by the client. +Client configure requests are interpreted by the window manager +in the same manner as the initial window geometry mapped from +the Withdrawn state, as described in + + +Clients must be aware that there is no guarantee that the window manager +will allocate them the requested size or location and must be prepared to +deal with any size and location. +If the window manager decides to respond to a +ConfigureRequest +request by: + + + + + +Not changing the size, location, border width, or stacking order +of the window at all. + + +A client will receive a synthetic +ConfigureNotify +event that describes the (unchanged) geometry of the window. +The (x,y) coordinates will be in the root coordinate system, +adjusted for the border width the client requested, +irrespective of any reparenting that has taken place. +The border_width will be the border width the client requested. +The client will not receive a real +ConfigureNotify +event because no change has actually taken place. + + + + +Moving or restacking the window without resizing it or +changing its border width. + + +A client will receive a synthetic +ConfigureNotify +event following the change that describes the new geometry of the window. +The event's (x,y) coordinates will be in the root coordinate system adjusted +for the border width the client requested. +The border_width will be the border width the client requested. +The client may not receive a real +ConfigureNotify +event that describes this change because the window manager may have reparented +the top-level window. +If the client does receive a real event, +the synthetic event will follow the real one. + + + + +Resizing the window or changing its border width (regardless of whether the +window was also moved or restacked). + + +A client that has selected for +StructureNotify +events will receive a real +ConfigureNotify +event. +Note that the coordinates in this event are relative to the parent, +which may not be the root if the window has been reparented. +The coordinates will reflect the actual border width of the window +(which the window manager may have changed). +The +TranslateCoordinates +request can be used to convert the coordinates if required. + + + + + +The general rule is that coordinates in real +ConfigureNotify +events are in the parent's space; +in synthetic events, they are in the root space. + + +
+Advice to Implementors + +Clients cannot distinguish between the case where a top-level window is +resized and moved from the case where the window is resized but not moved, +since a real +ConfigureNotify +event will be received in both cases. Clients that are concerned with +keeping track of the absolute position of a top-level window should keep a +piece of state indicating whether they are certain of its position. Upon +receipt of a real +ConfigureNotify +event on the top-level window, the client should note that the position is +unknown. Upon receipt of a synthetic +ConfigureNotify +event, the client should note the position as known, using the position in +this event. If the client receives a +KeyPress, +KeyRelease, +ButtonPress, +ButtonRelease, +MotionNotify, +EnterNotify +or +LeaveNotify +event on the window (or on any descendant), the client can deduce the +top-level window's position from the difference between the (event-x, +event-y) and (root-x, root-y) coordinates in these events. Only when the +position is unknown does the client need to use the +TranslateCoordinates +request to find the position of a top-level window. + +
+ + +Clients should be aware that their borders may not be visible. +Window managers are free to use reparenting techniques to +decorate client's top-level windows with borders containing +titles, controls, and other details to maintain a consistent look-and-feel. +If they do, +they are likely to override the client's attempts to set the border width +and set it to zero. +Clients, therefore, should not depend on the top-level window's border +being visible or use it to display any critical information. +Other window managers will allow the top-level windows border to +be visible. + + +
+Convention + +Clients should set the desired value of the border-width attribute on all +ConfigureWindow +requests to avoid a race condition. + +
+ + +Clients that change their position in the stack must be aware +that they may have been reparented, +which means that windows that used to be siblings no longer are. +Using a nonsibling as the sibling parameter on a +ConfigureWindow +request will cause an error. + + +
+Convention + +Clients that use a +ConfigureWindow +request to request a change in their position in the stack +should do so using +None +in the sibling field. + +
+ + +Clients that must position themselves in the stack relative to some +window that was originally a sibling must do the +ConfigureWindow +request (in case they are running under a nonreparenting window manager), +be prepared to deal with a resulting error, +and then follow with a synthetic +ConfigureRequest +event by invoking a +SendEvent +request with the following arguments: + + + + + + + + + + Argument + Value + + + + + destination + The root + + + propogate + False + + + event-mask + (SubstructureRedirect|SubstructureNotify) + + + +event: an ConfigureRequest with: + + + + + event: + The root + + + + window: + The window itself + + + + ... + Other parameters from the ConfigureWindow request + + + + + + +Window managers are in any case free to position windows in the stack as +they see fit, and so clients should not rely on receiving the stacking +order they have requested. Clients should ignore the above-sibling +field of both real and synthetic +ConfigureNotify +events received on their top-level windows because this field may not +contain useful information. + +
+ + +Changing Window Attributes + +The attributes that may be supplied when a window is created may be +changed by using the +ChangeWindowAttributes +request. +The window attributes are listed in the following table: + + + + + + + + + Attribute + Private to Client + + + + + Background pixmap + Yes + + + Background pixel + Yes + + + Border pixmap + Yes + + + Border pixel + Yes + + + Bit gravity + Yes + + + Window gravity + No + + + Backing-store hint + Yes + + + Save-under hint + No + + + Event Mask + No + + + Do-not-propagate mask + Yes + + + Override-redirect flag + No + + + Colormap + Yes + + + Cursor + Yes + + + + + + +Most attributes are private to the client and will never be interfered with +by the window manager. +For the attributes that are not private to the client: + + + + + +The window manager is free to override the window gravity; +a reparenting window manager may want to set the top-level window's +window gravity for its own purposes. + + + + +Clients are free to set the save-under hint on their top-level windows, +but they must be aware that the hint may be overridden by the window manager. + + + + +Windows, in effect, have per-client event masks, +and so, clients may select for whatever events are convenient irrespective +of any events the window manager is selecting for. +There are some events for which only one client at a time may select, +but the window manager should not select for them on any of the client's +windows. + + + + +Clients can set override-redirect on top-level windows but are +encouraged not to do so except as described in + +. +and + +. + + + + + + + +Input Focus + +There are four models of input handling: + + + + +No Input - The client never expects keyboard input. +An example would be +xload +or another output-only client. + + + + + +Passive Input - The client expects keyboard input but never explicitly sets +the input focus. +An example would be a simple client with no subwindows, +which will accept input in +PointerRoot +mode or when the window manager sets the input focus to its top-level window +(in click-to-type mode). + + + + +Locally Active Input - The client expects keyboard input and explicitly sets +the input focus, +but it only does so when one of its windows already has the focus. +An example would be a client with subwindows defining various data +entry fields that uses Next and Prev keys to move the input focus +between the fields. +It does so when its top-level window has acquired the focus in +PointerRoot +mode or when the window manager sets the input focus to its top-level window +(in click-to-type mode). + + + + +Globally Active Input - The client expects keyboard input and explicitly sets +the input focus, +even when it is in windows the client does not own. +An example would be a client with a scroll bar that wants to allow +users to scroll the window without disturbing the input focus even if +it is in some other window. +It wants to acquire the input focus when the user clicks in the scrolled +region but not when the user clicks in the scroll bar itself. +Thus, it wants to prevent the window manager from setting the input focus +to any of its windows. + + + + + +The four input models and the corresponding values of the input field +and the presence or absence of the WM_TAKE_FOCUS atom in the +WM_PROTOCOLS property are listed in the following table: + + + + + + + + + + Input Model + Input Field + WM_TAKE_FOCUS + + + + + No Input + False + Absent + + + Passive + True + Absent + + + Locally Active + True + Present + + + Globally Active + False + Present + + + + + + +Passive and Locally Active clients set the input field of WM_HINTS to +True, +which indicates that they require window manager assistance in acquiring the +input focus. +No Input and Globally Active clients set the input field to +False, +which requests that the window manager not set the input focus +to their top-level window. + + + +Clients that use a +SetInputFocus +request must set the time field to the timestamp of the event +that caused them to make the attempt. +This cannot be a +FocusIn +event because they do not have timestamps. +Clients may also acquire +the focus without a corresponding +EnterNotify. +Note that clients must not use +CurrentTime +in the time field. + + + +Clients using the Globally Active model can only use a +SetInputFocus +request to acquire the input focus when they do not already have it on +receipt of one of the following events: + + + + + +ButtonPress + + + + +ButtonRelease + + + + +Passive-grabbed +KeyPress + + + + +Passive-grabbed +KeyRelease + + + + + +In general, +clients should avoid using passive-grabbed key events for this purpose, +except when they are unavoidable (as, for example, a selection tool +that establishes a passive grab on the keys that cut, copy, or paste). + + + +The method by which the user commands the window manager to +set the focus to a window is up to the window manager. +For example, +clients cannot determine whether they will see the click +that transfers the focus. + + + +Windows with the atom WM_TAKE_FOCUS in their WM_PROTOCOLS property +may receive a +ClientMessage +event from the window manager (as described in + +. +) +with WM_TAKE_FOCUS in its data[0] field and a valid timestamp +(i.e., not +CurrentTime) +in its data[1] field. +If they want the focus, +they should respond with a +SetInputFocus +request with its window field set to the window of theirs +that last had the input focus or to their default input window, +and the time field set to the timestamp in the message. +For further information, +see + + + + + +A client could receive WM_TAKE_FOCUS when opening from an icon +or when the user has clicked outside the top-level window in an area that +indicates to the window manager that it should assign the focus +(for example, clicking in the headline bar can be used to assign the focus). + + + +The goal is to support window managers that want to assign the input focus +to a top-level window in such a way that the top-level window either +can assign it to one of its subwindows or can decline the offer of the focus. +For example, a clock or a text editor with no currently open frames +might not want to take focus even though the window manager generally +believes that clients should take the input focus after being deiconified +or raised. + + + +Clients that set the input focus need to decide a value for the +revert-to field of the +SetInputFocus +request. +This determines the behavior of the input focus +if the window the focus has been set to becomes not viewable. +The value can be any of the following: + + + + + +Parent +- In general, +clients should use this value when assigning focus to one of their subwindows. +Unmapping the subwindow will cause focus to revert to the parent, +which is probably what you want. + + + + + +PointerRoot +- Using +this value with a click-to-type focus management policy +leads to race conditions because the window becoming unviewable may +coincide with the window manager deciding to move the focus elsewhere. + + + + +None +- Using +this value causes problems if the window manager reparents +the window, as most window managers will, and then crashes. +The input focus will be +None, +and there will probably be no way to change it. + + + + + +Note that neither +PointerRoot +nor +None +is really safe to use. + + +
+Convention + +Clients that invoke a +SetInputFocus +request should set the revert-to argument to +Parent. + +
+ + +A convention is also required for clients that want to give up the +input focus. +There is no safe value set for them to set the input focus to; +therefore, they should ignore input material. + + +
+Convention + +Clients should not give up the input focus of their own volition. +They should ignore input that they receive instead. + +
+
+ + +Colormaps + +The window manager is responsible for installing and uninstalling +colormaps on behalf of clients with top-level windows that +the window manager manages. + + +Clients provide the window manager with hints as to which colormaps to +install and uninstall. Clients must not install or uninstall colormaps +themselves (except under the circumstances noted below). When a client's +top-level window gets the colormap focus (as a result of whatever colormap +focus policy is implemented by the window manager), the window manager will +ensure that one or more of the client's colormaps are installed. + + + +Clients whose top-level windows and subwindows all use the same colormap +should set its ID in the colormap field of the top-level window's +attributes. They should not set a WM_COLORMAP_WINDOWS property on the +top-level window. If they want to change the colormap, they should change +the top-level window's colormap attribute. The window manager will track +changes to the window's colormap attribute and install colormaps as +appropriate. + + + +Clients that create windows can use the value +CopyFromParent +to inherit their parent's colormap. Window managers will ensure that the +root window's colormap field contains a colormap that is suitable for +clients to inherit. In particular, the colormap will provide +distinguishable colors for +BlackPixel +and +WhitePixel. + + + +Top-level windows that have subwindows or override-redirect pop-up windows +whose colormap requirements differ from the top-level window should have a +WM_COLORMAP_WINDOWS property. This property contains a list of IDs for +windows whose colormaps the window manager should attempt to have installed +when, in the course of its individual colormap focus policy, it assigns the +colormap focus to the top-level window (see + + +). The list is +ordered by the importance to the client of having the colormaps installed. +The window manager will track changes to this property and will track +changes to the colormap attribute of the windows in the property. + + + +If the relative importance of colormaps changes, the client should update +the WM_COLORMAP_WINDOWS property to reflect the new ordering. If the +top-level window does not appear in the list, the window manager will assume +it to be of higher priority than any window in the list. + + + +WM_TRANSIENT_FOR windows can either have their own WM_COLORMAP_WINDOWS +property or appear in the property of the window they are transient for, +as appropriate. + + +
+Rationale + +An alternative design was considered for how clients should hint to the +window manager about their colormap requirements. This alternative design +specified a list of colormaps instead of a list of windows. The current +design, a list of windows, was chosen for two reasons. First, it allows +window managers to find the visuals of the colormaps, thus permitting +visual-dependent colormap installation policies. Second, it allows window +managers to select for +VisibilityChange +events on the windows concerned and to ensure that colormaps are only +installed if the windows that need them are visible. The alternative design +allows for neither of these policies. + +
+ +
+Advice to Implementors + +Clients should be aware of the min-installed-maps and max-installed-maps +fields of the connection setup information, and the effect that the minimum +value has on the "required list" defined by the Protocol in the +description of the +InstallColormap +request. Briefly, the min-installed-maps most recently installed maps are +guaranteed to be installed. This value is often one; clients needing +multiple colormaps should beware. + +
+ + +Whenever possible, clients should use the mechanisms described above and let +the window manager handle colormap installation. However, clients are +permitted to perform colormap installation on their own while they have the +pointer grabbed. A client performing colormap installation must notify the +window manager prior to the first installation. When the client has +finished its colormap installation, it must also notify the window manager. +The client notifies the window manager by issuing a +SendEvent +request with the following arguments: + + + + + + + + + + Argument + Value + + + + + destination + +The root window of the screen on which the colormap is installed + + + + propogate + False + + + event-mask + ColormapChange + + + +event: an ClientMessage with: + + + + + window: + The root window, as above + + + + type: + WM_COLORMAP_NOTIFY + + + + format + 32 + + + + data[0] + +the timestampe of the event that caused the client to start or stop +installing colormaps + + + + + data[1] + +1 if the client is starting colormap installation, +0 if the client is finished with colormap installation + + + + + data[2] + +reserved, must be zero + + + + + data[3] + +reserved, must be zero + + + + + data[4] + +reserved, must be zero + + + + + + + + + +This feature was introduced in version 2.0 of this document, and there will +be a significant period of time before all window managers can be expected +to implement this feature. Before using this feature, clients must check +the compliance level of the window manager (using the mechanism described in + + +) to verify that it supports this feature. This is necessary to +prevent colormap installation conflicts between clients and older window +managers. + + + +Window managers should refrain from installing colormaps while a client has +requested control of colormap installation. The window manager should +continue to track the set of installed colormaps so that it can reinstate +its colormap focus policy when the client has finished colormap installation. + + + +This technique has race conditions that may result in the colormaps +continuing to be installed even after a client has issued its notification +message. For example, the window manager may have issued some +InstallColormap +requests that are not executed until after the +client's +SendEvent +and +InstallColormap +requests, thus uninstalling the client's colormaps. If this occurs while +the client still has the pointer grabbed and before the client has issued +the "finished" message, the client may reinstall the desired colormaps. + + + +
+Advice to Implementors + +Clients are expected to use this mechanism for things such as +pop-up windows and for animations that use override-redirect windows. + + + + + + +If a client fails to issue the "finished" message, the window manager +may be left in a state where its colormap installation policy is suspended. +Window manager implementors may want to implement a feature that resets +colormap installation policy in response to a command from the user. + +
+
+ + +Icons + +A client can hint to the window manager about the desired appearance +of its icon by setting: + + + + + +A string in WM_ICON_NAME. + + + + +All clients should do this +because it provides a fallback for window managers whose ideas +about icons differ widely from those of the client. + + +A +Pixmap +into the icon_pixmap field of the WM_HINTS property +and possibly another into the icon_mask field. + + + + +The window manager is expected to display the pixmap masked by the mask. +The pixmap should be one of the sizes found in the WM_ICON_SIZE property +on the root. +If this property is not found, +the window manager is unlikely to display icon pixmaps. +Window managers usually will clip or tile pixmaps that do not match +WM_ICON_SIZE. + + + + +A window into the icon_window field of the WM_HINTS property. + + +The window manager is expected to map that window whenever the client is +in the Iconic state. +In general, +the size of the icon window should be one of those specified in WM_ICON_SIZE +on the root, if it exists. +Window managers are free to resize icon windows. + + + + + +In the Iconic state, +the window manager usually will ensure that: + + + + + +If the window's WM_HINTS.icon_window is set, +the window it names is visible. + + + + +If the window's WM_HINTS.icon_window is not set +but the window's WM_HINTS.icon_pixmap is set, +the pixmap it names is visible. + + + + +Otherwise, +the window's WM_ICON_NAME string is visible. + + + + + +Clients should observe the following conventions about their icon windows: + + +
+Conventions + + + + +The icon window should be an +InputOutput +child of the root. + + + + +The icon window should be one of the sizes specified +in the WM_ICON_SIZE property on the root. + + + + +The icon window should use the root visual and default colormap +for the screen in question. + + + + +Clients should not map their icon windows. + + + + +Clients should not unmap their icon windows. + + + + +Clients should not configure their icon windows. + + + + +Clients should not set override-redirect on their icon windows +or select for +ResizeRedirect +events on them. + + + + +Clients must not depend on being able to receive input events +by means of their icon windows. + + + + +Clients must not manipulate the borders of their icon windows. + + + + +Clients must select for +Exposure +events on their icon window and repaint it when requested. + + + + +
+ + +Window managers will differ as to whether they support input events +to client's icon windows; +most will allow the client to receive some subset of the keys and buttons. + + + +Window managers will ignore any WM_NAME, WM_ICON_NAME, WM_NORMAL_HINTS, +WM_HINTS, WM_CLASS, WM_TRANSIENT_FOR, WM_PROTOCOLS, WM_COLORMAP_WINDOWS, +WM_COMMAND, or WM_CLIENT_MACHINE +properties they find on icon windows. + +
+ + +Pop-up Windows + +Clients that wish to pop up a window can do one of three things: + + + + + +They can create and map another normal top-level window, +which will get decorated and managed as normal by the window manager. +See the discussion of window groups that follows. + + + + +If the window will be visible for a relatively short time +and deserves a somewhat lighter treatment, +they can set the WM_TRANSIENT_FOR property. +They can expect less decoration but can set all the normal +window manager properties on the window. +An example would be a dialog box. + + + + +If the window will be visible for a very short time +and should not be decorated at all, +the client can set override-redirect on the window. +In general, +this should be done only if the pointer is grabbed while the window is mapped. +The window manager will never interfere with these windows, +which should be used with caution. +An example of an appropriate use is a pop-up menu. + + + + +
+Advice to Implementors + +The user will not be able to move, resize, restack, or transfer the input +focus to override-redirect windows, since the window manager is not managing +them. If it is necessary for a client to receive keystrokes on an +override-redirect window, either the client must grab the keyboard or the +client must have another top-level window that is not override-redirect and +that has selected the Locally Active or Globally Active focus model. The +client may set the focus to the override-redirect window when the other +window receives a WM_TAKE_FOCUS message or one of the events listed in + + +in the description of the Globally Active focus model. + +
+ + +Window managers are free to decide if WM_TRANSIENT_FOR windows +should be iconified when the window they are transient for is. +Clients displaying WM_TRANSIENT_FOR windows that have +(or request to have) the window they are transient for iconified +do not need to request that the same operation be performed +on the WM_TRANSIENT_FOR window; +the window manager will change its state if that is the policy it wishes +to enforce. + +
+ + +Window Groups + +A set of top-level windows that should be treated from the user's point of view +as related (even though they may belong to a number of clients) should be linked +together using the window_group field of the WM_HINTS structure. + + +One of the windows (that is, the one the others point to) +will be the group leader and will carry the group as opposed +to the individual properties. +Window managers may treat the group leader differently +from other windows in the group. +For example, +group leaders may have the full set of decorations, +and other group members may have a restricted set. + + + +It is not necessary that the client ever map the group leader; +it may be a window that exists solely as a placeholder. + + + +It is up to the window manager to determine the policy +for treating the windows in a group. +At present, +there is no way for a client to request a group, +as opposed to an individual, operation. + + +
+ + +Client Responses to Window Manager Actions + +The window manager performs a number of operations on client resources, +primarily on their top-level windows. +Clients must not try to fight this but may elect to receive notification +of the window manager's operations. + + + +Reparenting + +Clients must be aware that some window managers will reparent +their top-level windows +so that a window that was created as a child of the root will be displayed +as a child of some window belonging to the window manager. +The effects that this reparenting will have on the client are as follows: + + + + + + +The parent value returned by a +QueryTree +request will no longer be the value supplied to the +CreateWindow +request that created the reparented window. +There should be no need for the client to be aware of the identity +of the window to which the top-level window has been reparented. +In particular, +a client that wishes to create further top-level windows should continue +to use the root as the parent for these new windows. + + + + + +The server will interpret the (x,y) coordinates in a +ConfigureWindow +request in the new parent's coordinate space. +In fact, they usually will not be interpreted by the server +because a reparenting window manager usually will have intercepted +these operations (see + + +). +Clients should use the root coordinate space for these requests +(see + + +). + + + + + +ConfigureWindow +requests that name a specific sibling window may fail because the window named, +which used to be a sibling, no longer is after the reparenting operation +(see + + +). + + + + + +The (x,y) coordinates returned by a +GetGeometry +request are in the parent's coordinate space +and are thus not directly useful after a reparent operation. + + + + + +A background of +ParentRelative +will have unpredictable results. + + + + + +A cursor of +None +will have unpredictable results. + + + + + +Clients that want to be notified when they are reparented can select for +StructureNotify +events on their top-level window. +They will receive a +ReparentNotify +event if and when reparenting takes place. +When a client withdraws a top-level window, the window manager will +reparent it back to the root window if the window had been reparented +elsewhere. + + + +If the window manager reparents a client's window, +the reparented window will be placed in the save-set +of the parent window. +This means that the reparented window will not be destroyed +if the window manager terminates and will be remapped if it was unmapped. +Note that this applies to all client windows the window manager reparents, +including transient windows and client icon windows. + + + + +Redirection of Operations + +Clients must be aware that some window managers will arrange +for some client requests to be intercepted and redirected. +Redirected requests are not executed; +they result instead in events being sent to the window manager, +which may decide to do nothing, to alter the arguments, +or to perform the request on behalf of the client. + + + +The possibility that a request may be redirected means +that a client cannot assume that any redirectable request is actually +performed when the request is issued or is actually performed at all. +The requests that may be redirected are +MapWindow, +ConfigureWindow, +and +CirculateWindow. + + +
+Advice to Implementors + +The following is incorrect because the +MapWindow +request may be intercepted and the +PolyLine +output made to an unmapped window: + + +MapWindow A +PolyLine A GC <point> <point> ... + + + +The client must wait for an +Expose +event before drawing in the window. + +This is true even if the client set the backing-store attribute to +Always. +The backing-store attribute is a only a hint, +and the server may stop maintaining backing store contents at any time. + + + + + +This next example incorrectly assumes that the +ConfigureWindow +request is actually executed with the arguments supplied: + + + +ConfigureWindow width=N height=M +<output assuming window is N by M> + + + +The client should select for +StructureNotify +on its window and monitor the window's size by tracking +ConfigureNotify +events. + + + +Clients must be especially careful when attempting to set the focus to a +window that they have just mapped. This sequence may result in an X +protocol error: + + + +MapWindow B +SetInputFocus B + + + +If the +MapWindow +request has been intercepted, the window will still be +unmapped, causing the +SetInputFocus +request to generate the error. The solution to this problem is for clients +to select for +VisibilityChange +on the window and to delay the issuance of the +SetInputFocus +request until they have received a +VisibilityNotify +event indicating that the window is visible. + + + +This technique does not guarantee correct operation. The user may have +iconified the window by the time the +SetInputFocus +request reaches the server, still causing an error. Or the window manager +may decide to map the window into Iconic state, in which case the window +will not be visible. This will delay the generation of the +VisibilityNotify +event indefinitely. Clients must be prepared to handle these cases. + +
+ + +A window with the override-redirect bit set is immune from redirection, +but the bit should be set on top-level windows only in cases +where other windows should be prevented from processing input +while the override-redirect window is mapped (see + + +) +and while responding to +ResizeRequest +events (see + + +). + + + +Clients that have no non-Withdrawn top-level windows +and that map an override-redirect top-level window are taking over total +responsibility for the state of the system. +It is their responsibility to: + + + + + +Prevent any preexisting window manager from interfering with their activities + + + + +Restore the status quo exactly after they unmap the window +so that any preexisting window manager does not get confused + + + + + +In effect, clients of this kind are acting as temporary window managers. +Doing so is strongly discouraged because these clients will be unaware +of the user interface policies the window manager is trying to maintain +and because their user interface behavior is likely to conflict with that of +less demanding clients. + +
+ + +Window Move + + +If the window manager moves a top-level window without changing its size, +the client will receive a synthetic +ConfigureNotify +event following the move that describes the new location +in terms of the root coordinate space. +Clients must not respond to being moved by attempting to move +themselves to a better location. + + + +Any real +ConfigureNotify +event on a top-level window implies that the window's position +on the root may have changed, +even though the event reports that the window's position +in its parent is unchanged because the window may have been reparented. +Note that the coordinates in the event will not, in this case, +be directly useful. + + + +The window manager will send these events by using a +SendEvent +request with the following arguments: + + + + + + + + + Argument + Value + + + + + destination + The client's window + + + propagate + False + + + event-mask + StructureNotify + + + + + + + + +Window Resize + +The client can elect to receive notification of being resized by selecting for +StructureNotify +events on its top-level windows. +It will receive a +ConfigureNotify +event. +The size information in the event will be correct, +but the location will be in the parent window (which may not be the root). + + + +The response of the client to being resized should be to accept +the size it has been given and to do its best with it. +Clients must not respond to being resized by attempting to resize +themselves to a better size. +If the size is impossible to work with, +clients are free to request to change to the Iconic state. + + + + +Iconify and Deiconify + +A top-level window that is not Withdrawn will be +in the Normal state if it is mapped and in the Iconic state if it is unmapped. +This will be true even if the window has been reparented; +the window manager will unmap the window as well as its parent +when switching to the Iconic state. + + + +The client can elect to be notified of these state changes by selecting for +StructureNotify +events on the top-level window. +It will receive a +UnmapNotify +event when it goes Iconic and a +MapNotify +event when it goes Normal. + + + + +Colormap Change + +Clients that wish to be notified of their colormaps being installed +or uninstalled should select for +ColormapNotify +events on their top-level windows and on any windows they have named +in WM_COLORMAP_WINDOWS properties on their top-level windows. +They will receive +ColormapNotify +events with the new field FALSE when the colormap for that window +is installed or uninstalled. + + + + +Input Focus + +Clients can request notification that they have the input focus by selecting +for +FocusChange +events on their top-level windows; +they will receive +FocusIn +and +FocusOut +events. +Clients that need to set the input focus to one of their +subwindows should not do so unless +they have set WM_TAKE_FOCUS in their WM_PROTOCOLS property +and have done one of the following: + + + + + +Set the input field of WM_HINTS to +True +and actually have the input focus in one of their top-level windows + + + + +Set the input field of WM_HINTS to +False +and have received a suitable event as described in + +. + + + + +Have received a WM_TAKE_FOCUS message as described in + +. + + + + +Clients should not warp the pointer in an attempt to transfer the focus; +they should set the focus and leave the pointer alone. +For further information, +see + +. + + + +Once a client satisfies these conditions, +it may transfer the focus to another of its windows by using the +SetInputFocus +request, which is defined as follows: + + + + +SetInputFocus + + + + + + + + +focus: WINDOW or +PointerRoot or +None + + + + +revert-to: +{ Parent, +PointerRoot, +None } + + + + +time: TIMESTAMP or CurrentTime + + + + + + + + +
+Conventions + + + + +Clients that use a +SetInputFocus +request must set the time argument to the timestamp of the event +that caused them to make the attempt. +This cannot be a +FocusIn +event because they do not have timestamps. +Clients may also acquire the focus without a corresponding +EnterNotify +event. +Clients must not use +CurrentTime +for the time argument. + + + + +Clients that use a +SetInputFocus +request to set the focus to one of their windows must set +the revert-to field to +Parent. + + + + +
+ +
+ + +ClientMessage Events + +There is no way for clients to prevent themselves being sent +ClientMessage +events. + + +Top-level windows with a WM_PROTOCOLS property may be sent +ClientMessage +events specific to the protocols named by the atoms in the property +(see + + +). +For all protocols, the +ClientMessage +events have the following: + + + + + +WM_PROTOCOLS as the type field + + + + +Format 32 + + + + +The atom that names their protocol in the data[0] field + + + + +A timestamp in their data[1] field + + + + + +The remaining fields of the event, +including the window field, +are determined by the protocol. + + + +These events will be sent by using a +SendEvent +request with the following arguments: + + + + + + + + + Argument + Value + + + + + destination + The client's window + + + propagate + False + + + event-mask + () empty + + + event + As specified by the protocol + + + + + + +Window Deletion + +Clients, usually those with multiple top-level windows, whose server +connection must survive the deletion of some of their top-level windows, +should include the atom WM_DELETE_WINDOW in the WM_PROTOCOLS property on +each such window. They will receive a +ClientMessage +event as described above whose data[0] field is WM_DELETE_WINDOW. + + + +Clients receiving a WM_DELETE_WINDOW message should behave as if the user +selected "delete window" from a hypothetical menu. +They should perform any confirmation dialog with the user +and, if they decide to complete the deletion, should do the following: + + + + + +Either change the window's state to Withdrawn (as described in + + +) +or destroy the window. + + + + +Destroy any internal state associated with the window. + + + + + +If the user aborts the deletion during the confirmation dialog, +the client should ignore the message. + + + +Clients are permitted to interact with the user and ask, for example, +whether a file associated with the window to be deleted should be saved +or the window deletion should be cancelled. +Clients are not required to destroy the window itself; +the resource may be reused, +but all associated state (for example, backing store) should be released. + + + +If the client aborts a destroy and the user then selects DELETE WINDOW again, +the window manager should start the WM_DELETE_WINDOW protocol again. +Window managers should not use +DestroyWindow +requests on a window that has WM_DELETE_WINDOW in its WM_PROTOCOLS property. + + + +Clients that choose not to include WM_DELETE_WINDOW in the WM_PROTOCOLS +property may be disconnected from the server +if the user asks for one of the client's top-level windows to be deleted. + + + + + +Redirecting Requests + +Normal clients can use the redirection mechanism just as window managers do +by selecting for +SubstructureRedirect +events on a parent window or +ResizeRedirect +events on a window itself. +However, at most, +one client per window can select for these events, +and a convention is needed to avoid clashes. + + +
+Convention + +Clients (including window managers) should select for +SubstructureRedirect +and +ResizeRedirect +events only on windows that they own. + +
+ + +In particular, +clients that need to take some special action if they are resized can select +for +ResizeRedirect +events on their top-level windows. +They will receive a +ResizeRequest +event if the window manager resizes their window, +and the resize will not actually take place. +Clients are free to make what use they like of the information +that the window manager wants to change their size, +but they must configure the window to the width and height specified +in the event in a timely fashion. +To ensure that the resize will actually happen at this stage +instead of being intercepted and executed by the window manager +(and thus restarting the process), +the client needs temporarily to set override-redirect on the window. + + +
+Convention + +Clients receiving +ResizeRequest +events must respond by doing the following: + + + + + +Setting override-redirect on the window specified in the event + + + + +Configuring the window specified in the event +to the width and height specified in the event as soon as possible +and before making any other geometry requests + + + + +Clearing override-redirect on the window specified in the event + + + +
+ + +If a window manager detects that a client is not obeying this convention, +it is free to take whatever measures it deems appropriate to deal with +the client. + +
+
+ + +Communication with the Window Manager by Means of Selections + +For each screen they manage, window managers will acquire ownership of a +selection named WM_Sn, where +n is the screen number, as +described in + + +Window managers should comply with the +conventions for "Manager Selections" described in + +. +The +intent is for clients to be able to request a variety of information or +services by issuing conversion requests on this selection. Window managers +should support conversion of the following target on their manager +selection: + + + + + + + + + + Atom + Type + Data Received + + + + + VERSION + INTEGER + +Two integers, which are the major and minor release numbers (respectively) of +the ICCCM with which the window manager complies. For this version of the +ICCCM, the numbers are 2 and 0. + + +As a special case, clients not wishing to implement a selection +request may simply issue a +GetSelectionOwner +request on the appropriate WM_Sn selection. +If this selection is owned, +clients may assume that the window manager complies with ICCCM version 2.0 +or later. + + + + + + + + + + +Summary of Window Manager Property Types + +The window manager properties are summarized in the following table +(see also section 14.1 of +Xlib - C Language X Interface). + + + + + + + + + + + Name + Type + Format + See Section + + + + + WM_CLASS + STRING + 8 + + + + + + + WM_CLIENT_MACHINE + TEXT + + + + + + + + WM_COLORMAP_WINDOWS + WINDOW + 32 + + + + + + + WM_HINTS + WM_HINTS + 32 + + + + + + + WM_ICON_NAME + TEXT + + + + + + + + WM_ICON_SIZE + WM_ICON_SIZE + 32 + + + + + + + WM_NAME + TEXT + + + + + + + + WM_NORMAL_HINTS + WM_SIZE_HINTS + 32 + + + + + + + WM_PROTOCOLS + ATOM + 32 + + + + + + + WM_STATE + WM_STATE + 32 + + + + + + + WM_TRANSIENT_FOR + WINDOW + 32 + + + + + + + + + +
+ + +Session Management and Additional Inter-Client Exchanges + +This section contains some conventions for clients that participate in +session management. See +X Session Management Protocol +for further details. Clients that do not support this protocol cannot +expect their window state (e.g., WM_STATE, position, size, and stacking order) +to be preserved across sessions. + + + +Client Support for Session Management + +Each session participant will obtain a unique client identifier (client-ID) +from the session manager. The client must identify one top-level window as +the "client leader." This window must be created by the client. It may +be in any state, including the Withdrawn state. The client leader window +must have a SM_CLIENT_ID property, which contains the client-ID obtained +from the session management protocol. That property must: + + + + + +Be of type STRING + + + + +Be of format 8 + + + + +Contain the client-ID as a string of XPCS characters encoded using ISO +8859-1 + + + + + +All top-level, nontransient windows created by a client on the same display +as the client leader must have a WM_CLIENT_LEADER property. This property +contains a window ID that identifies the client leader window. The client +leader window must have a WM_CLIENT_LEADER property containing its own +window ID (i.e., the client leader window is pointing to itself). Transient +windows need not have a WM_CLIENT_LEADER property if the client leader can +be determined using the information in the WM_TRANSIENT_FOR property. The +WM_CLIENT_LEADER property must: + + + + + +Be of type WINDOW + + + + +Be of format 32 + + + + +Contain the window ID of the client leader window + + + + + +A client must withdraw all of its top-level windows on the same display +before modifiying either the WM_CLIENT_LEADER or the SM_CLIENT_ID property +of its client leader window. + + + +It is necessary that other clients be able to uniquely identify a window +(across sessions) among all windows related to the same client-ID. For +example, a window manager can require this unique ID to restore geometry +information from a previous session, or a workspace manager could use it to +restore information about which windows are in which workspace. A client +may optionally provide a WM_WINDOW_ROLE property to uniquely identify a +window within the scope specified above. The combination of SM_CLIENT_ID +and WM_WINDOW_ROLE can be used by other clients to uniquely identify a +window across sessions. + + + +If the WM_WINDOW_ROLE property is not specified on a top-level window, a +client that needs to uniquely identify that window will try to use instead +the values of WM_CLASS and WM_NAME. If a client has multiple windows with +identical WM_CLASS and WM_NAME properties, then it should provide a +WM_WINDOW_ROLE property. + + + +The client must set the WM_WINDOW_ROLE property to a string that uniquely +identifies that window among all windows that have the same client leader +window. The property must: + + + + + +Be of type STRING + + + + +Be of format 8 + + + + +Contain a string restricted to the XPCS characters, encoded in ISO 8859-1 + + + + + + +Window Manager Support for Session Management + +A window manager supporting session management must register with the +session manager and obtain its own client-ID. The window manager should +save and restore information such as the WM_STATE, the layout of windows on +the screen, and their stacking order for every client window that has a +valid SM_CLIENT_ID property (on itself, or on the window named by +WM_CLIENT_LEADER) and that can be uniquely identified. +Clients are allowed to change this state during the first phase of the +session checkpoint process. Therefore, window managers should request a +second checkpoint phase and save clients' state only during that phase. + + + + +Support for ICE Client Rendezvous + +The Inter-Client Exchange protocol (ICE) defined as of X11R6 +specifies a generic communication framework, independent of the X +server, for data exchange between arbitrary clients. ICE also defines +a protocol for any two ICE clients who also have X connections +to the same X server to locate (rendezvous with) each other. + + +This protocol, called the "ICE X Rendezvous" protocol, is defined in +the ICE specification, Appendix B, +and uses the property ICE_PROTOCOLS plus +ClientMessage +events. Refer to that specification for complete details. + + + + + +Manipulation of Shared Resources + +X Version 11 permits clients to manipulate a number of shared resources, +for example, the input focus, the pointer, and colormaps. +Conventions are required so that clients share resources in an +orderly fashion. + + +The Input Focus + +Clients that explicitly set the input focus must observe one of two modes: + + + + + +Locally active mode + + + + +Globally active mode + + + + +
+Conventions + + + +Locally active clients should set the input focus to one of their windows +only when it is already in one of their windows +or when they receive a WM_TAKE_FOCUS message. +They should set the input field of the WM_HINTS structure to +True. + + + + +Globally active clients should set the input focus to one of their windows +only when they receive a button event and a passive-grabbed key event, +or when they receive a WM_TAKE_FOCUS message. +They should set the input field of the WM_HINTS structure to +False. + + + + +In addition, clients should use the timestamp of the event +that caused them to attempt to set the input focus as the time field on the +SetInputFocus +request, not +CurrentTime. + + + +
+ +
+ + +The Pointer + +In general, clients should not warp the pointer. +Window managers, however, may do so +(for example, to maintain the invariant that the pointer is always +in the window with the input focus). +Other window managers may want to preserve the illusion that the user +is in sole control of the pointer. + +
+Conventions + + + + +Clients should not warp the pointer. + + + + +Clients that insist on warping the pointer should do so only +with the src-window argument of the +WarpPointer +request set to one of their windows. + + + +
+
+ + +Grabs + +A client's attempt to establish a button or a key grab on a window +will fail if some other client has already established a conflicting +grab on the same window. +The grabs, therefore, are shared resources, +and their use requires conventions. + + +In conformance with the principle that clients should behave, +as far as possible, +when a window manager is running as they would when it is not, +a client that has the input focus may assume that it can receive all +the available keys and buttons. + + +
+ Convention + +Window managers should ensure that they provide some mechanism for +their clients to receive events from all keys and all buttons, +except for events involving keys whose KeySyms are registered as being for +window management functions (for example, a hypothetical WINDOW KeySym). + +
+ + +In other words, +window managers must provide some mechanism by which a client +can receive events from every key and button (regardless of modifiers) +unless and until the X Consortium registers some KeySyms as being reserved +for window management functions. +Currently, no KeySyms are registered for window management functions. + + +Even so, clients are advised to allow the key and button combinations +used to elicit program actions to be modified, +because some window managers may choose not to observe this convention +or may not provide a convenient method for the user to transmit events +from some keys. + +
+Convention + +Clients should establish button and key grabs only on windows that +they own. + +
+ + +In particular, this convention means that a window manager that wishes +to establish a grab over the client's top-level window should either establish +the grab on the root or reparent the window and establish the grab +on a proper ancestor. +In some cases, +a window manager may want to consume the event received, +placing the window in a state where a subsequent such event will go to +the client. +Examples are: + + + + + +Clicking in a window to set focus with the click not being offered +to the client + + + + +Clicking in a buried window to raise it, again, with the click not offered +to the client + + + + + +More typically, +a window manager should add to, rather than replace, the client's semantics +for key+button combinations by allowing the event to be used by the client +after the window manager is done with it. +To ensure this, +the window manager should establish the grab on the parent +by using the following: + + + +pointer/keyboard-mode == Synchronous + + + +Then, the window manager should release the grab by using an +AllowEvents +request with the following specified: + + + +mode == ReplayPointer/Keyboard + + + +In this way, +the client will receive the events as if they had not been intercepted. + + + +Obviously, +these conventions place some constraints on possible user interface policies. +There is a trade-off here between freedom for window managers to implement +their user interface policies and freedom for clients to implement theirs. +The dilemma is resolved by: + + + + + +Allowing window managers to decide if and when a client will receive an +event from any given key or button + + + + +Placing a requirement on the window manager to provide some mechanism, +perhaps a "Quote" key, +by which the user can send an event from any key or button to the client + + + + +
+ +Colormaps + + + +prescribes conventions for clients to communicate with the +window manager about their colormap needs. If your clients are +DirectColor +type applications, +you should consult section 14.3 of +Xlib - C Language X Interface +for conventions connected with sharing standard colormaps. +They should look for and create the properties described there on +the root window of the appropriate screen. + + + +The contents of the RGB_COLOR_MAP type property are as follows: + + + + + + + + + + Field + Type + Comments + + + + + colormap + COLORMAP + ID of the colormap described + + + red_max + CARD32 + Values for pixel calculations + + + red_mult + CARD32 + + + + green_max + CARD32 + + + + green_mult + CARD32 + + + + blue_max + CARD32 + + + + blue_mult + CARD32 + + + + base_pixel + CARD32 + + + + visual_id + VISUALID + Visual to which colormap belongs + + + kill_id + CARD32 + ID for destroying the resources + + + + + + +When deleting or replacing an RGB_COLOR_MAP, +it is not sufficient to delete the property; +it is important to free the associated colormap resources as well. +If kill_id is greater than one, +the resources should be freed by issuing a +KillClient +request with kill_id as the argument. +If kill_id is one, +the resources should be freed by issuing a +FreeColormap +request with colormap as the colormap +argument. +If kill_id is zero, +no attempt should be made to free the resources. +A client that creates an RGB_COLOR_MAP for which the colormap resource +is created specifically for this purpose should set kill_id to one +(and can create more than one such standard colormap +using a single connection). +A client that creates an RGB_COLOR_MAP for which the colormap resource +is shared in some way (for example, is the default colormap +for the root window) should create an arbitrary resource and use its +resource ID for kill_id (and should create no other standard colormaps +on the connection). + + +
+Convention + +If an RGB_COLOR_MAP property is too short to contain the visual_id field, +it can be assumed that the visual_id is the root visual +of the appropriate screen. +If an RGB_COLOR_MAP property is too short to contain the kill_id field, +a value of zero can be assumed. + +
+ + +During the connection handshake, +the server informs the client of the default colormap for each screen. +This is a colormap for the root visual, +and clients can use it to improve the extent of colormap sharing +if they use the root visual. + +
+ + +The Keyboard Mapping + +The X server contains a table (which is read by +GetKeyboardMapping +requests) that describes the set of symbols appearing +on the corresponding key for each keycode generated by the server. +This table does not affect the server's operations in any way; +it is simply a database used by clients that attempt to understand +the keycodes they receive. +Nevertheless, it is a shared resource and requires conventions. + + +It is possible for clients to modify this table by using a +ChangeKeyboardMapping +request. +In general, clients should not do this. +In particular, this is not the way in which clients should implement +key bindings or key remapping. +The conversion between a sequence of keycodes received from the server +and a string in a particular encoding is a private matter for each client +(as it must be in a world where applications may be using different +encodings to support different languages and fonts). +See the Xlib reference manual for converting keyboard events to text. + + +The only valid reason for using a +ChangeKeyboardMapping +request is when the symbols written on the keys have changed as, for example, +when a Dvorak key conversion kit or a set of APL keycaps has been installed. +Of course, a client may have to take the change to the keycap on trust. + + + +The following illustrates a permissible interaction between a client +and a user: + + + + +"You just started me on a server without a Pause key. +Please choose a key to be the Pause key and press it now." + + + + +Presses the Scroll Lock key + + + + +"Adding Pause to the symbols on the Scroll Lock key: Confirm or Abort." + + + + +Confirms + + + + +Uses a +ChangeKeyboardMapping +request to add Pause to the keycode that already contains Scroll Lock and +issues this request, "Please paint Pause on the Scroll Lock key." + +Clients should not use +ChangeKeyboardMapping +requests. + + + + + + +If a client succeeds in changing the keyboard mapping table, +all clients will receive +MappingNotify +(request==Keyboard) events. +There is no mechanism to avoid receiving these events. + + +
+Convention + +Clients receiving +MappingNotify +(request==Keyboard) +events should update any internal keycode translation tables they are using. + +
+ +
+ + +The Modifier Mapping + +X Version 11 supports 8 modifier bits of which 3 are preassigned +to Shift, Lock, and Control. +Each modifier bit is controlled by the state of a set of keys, +and these sets are specified in a table accessed by +GetModifierMapping and +SetModifierMapping requests. +This table is a shared resource and requires conventions. + + + +A client that needs to use one of the preassigned modifiers should assume +that the modifier table has been set up correctly to control these modifiers. +The Lock modifier should be interpreted as Caps Lock or Shift Lock +according as the keycodes in its controlling set include XK_Caps_Lock +or XK_Shift_Lock. + + + +
+Convention + +Clients should determine the meaning of a modifier bit from the KeySyms +being used to control it. + +
+ + +A client that needs to use an extra modifier (for example, META) should do +the following: + + + + + +Scan the existing modifier mappings. +If it finds a modifier that contains a keycode whose set of KeySyms +includes XK_Meta_L or XK_Meta_R, +it should use that modifier bit. + + + + +If there is no existing modifier controlled by XK_Meta_L or XK_Meta_R, +it should select an unused modifier bit (one with an empty controlling set) +and do the following: + + + + +If there is a keycode with XL_Meta_L in its set of KeySyms, +add that keycode to the set for the chosen modifier. + + + + +If there is a keycode with XL_Meta_R in its set of KeySyms, +add that keycode to the set for the chosen modifier. + + + + +If the controlling set is still empty, +interact with the user to select one or more keys to be META. + + + + + + +If there are no unused modifier bits, +ask the user to take corrective action. + + +
+ Conventions + + + +Clients needing a modifier not currently in use should assign keycodes +carrying suitable KeySyms to an unused modifier bit. + + + + +Clients assigning their own modifier bits should ask the user politely to +remove his or her hands from the key in question if their +SetModifierMapping +request returns a +Busy +status. + + + +
+
+
+ + +There is no good solution to the problem of reclaiming assignments +to the five nonpreassigned modifiers when they are no longer being used. + + +
+Convention + +The user must use +xmodmap +or some other utility to deassign obsolete modifier mappings by hand. + +
+ + +When a client succeeds in performing a +SetModifierMapping +request, +all clients will receive +MappingNotify +(request==Modifier) events. +There is no mechanism for preventing these events from being received. +A client that uses one of the nonpreassigned modifiers that receives +one of these events should do a +GetModifierMapping +request to discover the new mapping, +and if the modifier it is using has been cleared, +it should reinstall the modifier. + + + +Note that a +GrabServer +request must be used to make the +GetModifierMapping +and +SetModifierMapping +pair in these transactions atomic. + +
+
+ + +Device Color Characterization + + + +The X protocol provides explicit Red, Green, and Blue (RGB) values, +which are used to directly drive a monitor, and color names. RGB values +provide a mechanism for accessing the full capabilities of the display +device, but at the expense of having the color perceived by the user remain +unknowable through the protocol. Color names were originally designed to +provide access to a device-independent color database by having the server +vendor tune the definitions of the colors in that textual database. +Unfortunately, this still does not provide the client any way of using +an existing device-independent color, nor for the client to get +device-independent color information back about colors that it has selected. + + +Furthermore, the client must be able to discover which set of colors are +displayable by the device (the device gamut), both to allow colors to be +intelligently modified to fit within the device capabilities (gamut +compression) and to enable the user interface to display a representation of +the reachable color space to the user (gamut display). + + +Therefore, a system is needed that will provide full access to +device-independent color spaces for X clients. This system should use a +standard mechanism for naming the colors, be able to provide names for +existing colors, and provide means by which unreachable colors can be +modified to fall within the device gamut. + + +We are fortunate in this area to have a seminal work, the 1931 CIE color +standard, which is nearly universally agreed upon as adequate for describing +colors on CRT devices. This standard uses a tri-stimulus model called CIE +XYZ in which each perceivable color is specified as a triplet of numbers. +Other appropriate device-independent color models do exist, but most of them +are directly traceable back to this original work. + + +X device color characterization +provides device-independent color spaces to X clients. It does this by +providing the barest possible amount of information to the client that +allows the client to construct a mapping between CIE XYZ and the regular X +RGB color descriptions. + + +Device color characterization is defined by +the name and contents of two window properties that, +together, permit converting between CIE XYZ space and +linear RGB device space (such as standard CRTs). +Linear RGB devices require just two +pieces of information to completely characterize them: + + + + + +A 3 x 3 matrix M and its inverse M-1, +which convert between +XYZ and RGB intensity (RGBintensity): +
+ + +RGBintensity = M x XYZ + + + +XYZ = M-1 x RGBintensity + + +
+
+
+ + +A way of mapping between RGB intensity and RGB protocol value. XDCCC +supports three mechanisms which will be outlined later. + + +
+ + +If other device types are eventually necessary, additional +properties will be required to describe them. + + + +XYZ <-> RGB Conversion Matrices + +Because of the limited dynamic range of both XYZ and RGB intensity, +these matrices will be encoded using a fixed-point representation of a +32-bit two's complement number scaled by 227, +giving a range of -16 to 16 - Ε, where +Ε = 2-27. + + + +These matrices will be packed into an 18-element list of 32-bit values, +XYZ -> RGB matrix first, in row major order and stored in the +XDCCC_LINEAR_RGB_MATRICES properties (format = 32) on the root window of +each screen, using values appropriate for that screen. + + + +This will be encoded as shown in the following table: + + + + + + + + + + Field + Type + Comments + + + + + M0,0 + INT32 + Interpreted as a fixed-point number -16 ≤ x < 16 + + + M0,1 + INT32 + + + + ... + INT32 + + + + M3,3 + INT32 + + + + M-10,0 + INT32 + + + + M-10,1 + INT32 + + + + ... + INT32 + + + + M-13,3 + INT32 + + + + + + + + +Intensity (dA RGB Value Conversion + +XDCCC provides two representations for describing the conversion +between RGB intensity and the actual X protocol RGB values: + + + +0 RGB value/RGB intensity level pairs +1 RGB intensity ramp + + + +In both cases, the relevant data will be stored in the +XDCCC_LINEAR_RGB_CORRECTION properties on the root window of each screen, +using values appropriate for that screen, in whatever format provides +adequate resolution. Each property can consist of multiple entries +concatenated together, if different visuals for the screen require different +conversion data. An entry with a VisualID of 0 specifies data for all +visuals of the screen that are not otherwise explicitly listed. + + +The first representation is an array of RGB value/intensity level pairs, with +the RGB values in strictly increasing order. When converting, the client must +linearly interpolate between adjacent entries in the table to compute the +desired value. This allows the server to perform gamma correction +itself and encode that fact in a short two-element correction table. The +intensity will be encoded as an unsigned number to be interpreted as a value +between 0 and 1 (inclusive). The precision of this value will depend on the +format of the property in which it is stored (8, 16, or 32 bits). For 16-bit +and 32-bit formats, the RGB value will simply be the value stored in the +property. When stored in 8-bit format, the RGB value can be computed from +the value in the property by: + + + + +RGB sub value ~ = ~ { Property ~ Value ~ times ~ 65535 } over 255 + + + +Because the three electron guns in the device may not be exactly alike in +response characteristics, it is necessary to allow for three separate +tables, one each for red, green, and blue. Therefore, each table will be +preceded by the number of entries in that table, and the set of tables will be +preceded by the number of tables. +When three tables are provided, they will be in red, green, blue order. + + +This will be encoded as shown in the following table: + + + +XDCCC_LINEAR_RGB_CORRECTION Property Contents for Type 0 Correction + + + + + + + + + Field + Type + Comments + + + + + VisualID0 + CARD + Most significant portion of VisualID + + + VisualID1 + CARD + Exists if and only if the property format is 8 + + + VisualID2 + CARD + Exists if and only if the property format is 8 + + + VisualID3 + CARD + +Least significant portion, exists if and only if the property +format is 8 or 16 + + + + type + CARD + 0 for this type of correction + + + count + CARD + Number of tables following (either 1 or 3) + + + length + CARD + Number of pairs -1 following in this table + + + value + CARD + X Protocol RBG value + + + intensity + CARD + +Interpret as number 0 ≤ intensity ≤ 1 + + + + ... + ... + +Total of length+1 pairs of +value/intensity values + + + + lengthg + CARD + +Number of pairs -1 following in this table (if and only if +count is 3 + + + + value + CARD + X Protocol RBG value + + + intensity + CARD + +Interpret as a number 0 ≤ intensity ≤ 1 + + + + ... + ... + +Total of length+1 pairs of +value/intensity values + + + + lengthb + CARD + +Number of pairs -1 following in this table (if and only if +count is 3 + + + + value + CARD + X Protocol RBG value + + + intensity + CARD + +Interpret as a number 0 ≤ intensity ≤ 1 + + + + ... + ... + +Total of length+1 pairs of +value/intensity values + + + + + + + +The VisualID is stored in 4, 2, or 1 pieces, depending on whether +the property format is 8, 16, or 32, respectively. The VisualID is always +stored most significant piece first. +Note that the length fields are stored as one less than the actual length, +so 256 entries can be stored in format 8. + + +The second representation is a simple array of intensities for a linear subset +of RGB values. The expected size of this table is the bits-per-rgb-value of +the screen, but it can be any length. This is similar to the first mechanism, +except that the RGB value numbers are implicitly defined by the index in the +array (indices start at 0): + +
+ + + +RGB sub value ~ = ~ { Array ~ Index ~ times ~ 65535 } over +{ Array ~ Size ~ - ~ 1 } + +
+ + +When converting, the client may linearly interpolate between entries in this +table. The intensity values will be encoded just as in the first +representation. + + + +This will be encoded as shown in the following table: + + + +XDCCC_LINEAR_RGB_CORRECTION Property Contents for Type 1 Correction + + + + + + + + + + Field + Type + Comments + + + + + VisualID0 + CARD + Most significant portion of VisualID + + + VisualID1 + CARD + Exists if and only if the property format is 8 + + + VisualID2 + CARD + Exists if and only if the property format is 8 + + + VisualID3 + CARD + +Least significant portion, exists if and only if the property +format is 8 or 16 + + + + type + CARD + 1 for this type of correction + + + count + CARD + Number of tables following (either 1 or 3) + + + length + CARD + Number of pairs -1 following in this table + + + intensity + CARD + +Interpret as number 0 ≤ intensity ≤ 1 + + + + ... + ... + +Total of length+1 pairs of +value/intensity values + + + + lengthg + CARD + +Number of pairs -1 following in this table (if and only if +count is 3 + + + + intensity + CARD + +Interpret as a number 0 ≤ intensity ≤ 1 + + + + ... + ... + +Total of length+1 pairs of +value/intensity values + + + + lengthb + CARD + +Number of pairs -1 following in this table (if and only if +count is 3 + + + + intensity + CARD + +Interpret as a number 0 ≤ intensity ≤ 1 + + + + ... + ... + +Total of length+1 pairs of +value/intensity values + + + + + +
+
+ + +Conclusion + +This document provides the protocol-level specification of the minimal +conventions needed to ensure that X Version 11 clients can interoperate +properly. This document specifies interoperability conventions only for the +X Version 11 protocol. Clients should be aware of other protocols that +should be used for better interoperation in the X environment. The reader +is referred to +X Session Management Protocol +for information on session management, and to +Inter-Client Exchange Protocol +for information on general-purpose communication among clients. + + + +The X Registry + + +The X Consortium maintains a registry of certain X-related items, to aid in +avoiding conflicts and in sharing of such items. Readers are +encouraged to use the registry. The classes of items kept in the registry +that are relevant to the ICCCM include property names, property types, +selection names, selection targets, WM_PROTOCOLS protocols, +ClientMessage +types, and application classes. Requests to register items, or questions +about registration, should be addressed to +
+ xregistry@x.org +
+or to +
+ The X.Org Foundation -- X11 Registry + c/o Alan Coopersmith + Oracle Corporation + M/S SCA17-3824 + 4170 Network Circle + Santa Clara, CA 95054 + USA +
+
+ +Electronic mail will be acknowledged upon receipt. Please allow up to 4 +weeks for a formal response to registration and inquiries. + + +The registry is published as part of the X software distribution from the +X.Org Foundation. All registered items must have the postal address of someone +responsible for the item or a reference to a document describing the item +and the postal address of where to write to obtain the document. + + + + + + +
+
+ + +Revision History + +This appendix describes the revision history of this document and +summarizes the incompatibilities between this and earlier versions. + + +The X11R2 Draft + +The February 25, 1988, draft that was distributed as part of X Version 11, +Release 2, was clearly labeled as such, +and many areas were explicitly labeled as liable to change. +Nevertheless, in the revision work done since then, +we have been very careful not to introduce gratuitous incompatibility. +As far as possible, +we have tried to ensure that clients obeying the conventions +in the X11R2 draft would still work. + + + + +The July 27, 1988, Draft + +The Consortium review was based on a draft dated July 27, 1988. This draft +included several areas in which incompatibilities with the X11R2 draft were +necessary: + + + + + +The use of property +None +in +ConvertSelection +requests is no longer allowed. +Owners that receive them are free to use the target atom as the property +to respond with, +which will work in most cases. + + + + +The protocol for INCREMENTAL type properties as selection replies has changed, +and the name has been changed to INCR. +Selection requestors are free to implement the earlier protocol +if they receive properties of type INCREMENTAL. + + + + +The protocol for INDIRECT type properties as selection replies has changed, +and the name has been changed to MULTIPLE. +Selection requestors are free to implement the earlier protocol +if they receive properties of type INDIRECT. + + + + +The protocol for the special CLIPBOARD client has changed. +The earlier protocol is subject to race conditions and should not be used. + + + + +The set of state values in WM_HINTS.initial_state has been reduced, +but the values that are still valid are unchanged. +Window managers should treat the other values sensibly. + + + + +The methods an application uses to change the state of its top-level window +have changed but in such a way that cases that used to work will still work. + + + + +The x, y, width, and height fields have been removed from the WM_NORMAL_HINTS +property and replaced by pad fields. +Values set into these fields will be ignored. +The position and size of the window should be set by setting the appropriate +window attributes. + + + + +A pair of base fields and a win_gravity field have been added +to the WM_NORMAL_HINTS property. +Window managers will assume values for these fields if the client +sets a short property. + + + + + + +The Public Review Drafts + +The Consortium review resulted in several incompatible changes. These +changes were included in drafts that were distributed for public review +during the first half of 1989. + + + + + +The messages field of the WM_HINTS property was found to be unwieldy +and difficult to evolve. +It has been replaced by the WM_PROTOCOLS property, +but clients that use the earlier mechanism can be detected +because they set the messages bit in the flags field of the WM_HINTS property, +and window managers can provide a backwards compatibility mode. + + + + +The mechanism described in the earlier draft by which clients installed +their own subwindow colormaps could not be made to work reliably +and mandated some features of the look and feel. +It has been replaced by the WM_COLORMAP_WINDOWS property. +Clients that use the earlier mechanism can be detected by the WM_COLORMAPS +property they set on their top-level window, +but providing a reliable backwards compatibility mode is not possible. + + + + +The recommendations for window manager treatment of top-level window borders +have been changed as those in the earlier draft produced problems +with Visibility events. +For nonwindow manager clients, +there is no incompatibility. + + + + +The pseudoroot facility in the earlier draft has been removed. +Although it has been successfully implemented, +it turns out to be inadequate to support the uses envisaged. +An extension will be required to support these uses fully, +and it was felt that the maximum freedom should be left to the designers +of the extension. +In general, +the previous mechanism was invisible to clients and no incompatibility +should result. + + + + +The addition of the WM_DELETE_WINDOW protocol (which prevents the danger +that multi-window clients may be terminated unexpectedly) +has meant some changes in the WM_SAVE_YOURSELF protocol, +to ensure that the two protocols are orthogonal. +Clients using the earlier protocol can be detected (see WM_PROTOCOLS above) +and supported in a backwards compatibility mode. + + + + +The conventions in Section 14.3.1. of +Xlib - C Language X Interface +regarding properties of type RGB_COLOR_MAP have been changed, +but clients that use the earlier conventions can be detected +because their properties are 4 bytes shorter. +These clients will work correctly if the server supports only a single Visual +or if they use only the Visual of the root. +These are the only cases in which they would have worked, anyway. + + + + + + +Version 1.0, July 1989 + +The public review resulted in a set of mostly editorial changes. The +changes in version 1.0 that introduced some degree of incompatibility with +the earlier drafts are: + + + + +A new section ( + + +) was added covering the window manager's +use of Grabs. +The restrictions it imposes should affect only window managers. + + + + + +The TARGETS selection target has been clarified, +and it may be necessary for clients to add some entries to their replies. + + + + + +A selection owner using INCR transfer should no longer replace targets in +a MULTIPLE property with the atom INCR. + + + + + +The contents of the +ClientMessage +event sent by a client to iconify itself has been clarified, +but there should be no incompatibility because the earlier contents +would not in fact have worked. + + + + + +The border-width in synthetic +ConfigureNotify +events is now specified, +but this should not cause any incompatibility. + + + + + +Clients are now asked to set a border-width on all +ConfigureWindow +requests. + + + + + +Window manager properties on icon windows now will be ignored, +but there should be no incompatibility +because there was no specification that they be obeyed previously. + + + + + +The ordering of real and synthetic +ConfigureNotify +events is now specified, +but any incompatibility should affect only window managers. + + + + + +The semantics of WM_SAVE_YOURSELF have been clarified and restricted to +be a checkpoint operation only. +Clients that were using it as part of a shutdown sequence may need to +be modified, +especially if they were interacting with the user during the shutdown. + + + + + +A kill_id field has been added to RGB_COLOR_MAP properties. +Clients using earlier conventions can be detected by the size of their +RGB_COLOR_MAP properties, +and the cases that would have worked will still work. + + + + + + +Version 1.1 + +Version 1.1 was released with X11R5 in September 1991. In addition to some +minor editorial changes, there were a few semantic changes since Version +1.0: + + + + + + + +The section on Device Color Characterization was added. + + + + + +The meaning of the NULL property type was clarified. + + + + + +Appropriate references to Compound Text were added. + + + + + + +Public Review Draft, December 1993 + +The following changes have been made in preparing the public review draft +for Version 2.0. + + + + + +[P01] Addition of advice to clients on how to keep track of a top-level +window's absolute position on the screen. + + + + + +[P03] A technique for clients to detect when it is safe to reuse a +top-level window has been added. + + + + + +[P06] + + +, on colormaps, has been rewritten. A new feature that +allows clients to install their own colormaps has also been added. + + + + + +[P08] The LENGTH target has been deprecated. + + + + + +[P11] The manager selections facility was added. + + + + + +[P17] The definition of the aspect ratio fields of the WM_NORMAL_HINTS +property has been changed to include the base size. + + + + + +[P19] +StaticGravity +has been added to the list of values allowed for the win_gravity field of +the WM_HINTS property. The meaning of the +CenterGravity +value has been clarified. + + + + + +[P20] A means for clients to query the ICCCM compliance level of the window +manager has been added. + + + + + +[P22] The definition of the MULTIPLE selection target has been clarified. + + + + + +[P25] A definition of "top-level window" has been added. The WM_STATE +property has been defined and exposed to clients. + + + + + +[P26] The definition of window states has been clarified and the wording +regarding window state changes has been made more consistent. + + + + + +[P27] Clarified the rules governing when window managers are required to send +synthetic +ConfigureNotify +events. + + + + + +[P28] Added a recommended technique for setting the input focus to a window +as soon as it is mapped. + + + + + +[P29] The required lifetime of resource IDs named in window manager +properties has been specified. + + + + + +[P30] Advice for dealing with keystrokes and override-redirect windows has +been added. + + + + + +[P31] A statement on the ownership of resources transferred through the +selection mechanism has been added. + + + + + +[P32] The definition of the CLIENT_WINDOW target has been clarified. + + + + + +[P33] A rule about requiring the selection owner to reacquire the +selection under certain circumstances has been added. + + + + + +[P42] Added several new selection targets. + + + + + +[P44] Ambiguous wording regarding the withdrawal of top-level windows +has been removed. + + + + + +[P45] A facility for requestors to pass parameters during a selection +request has been added. + + + + + +[P49] A convention on discrimated names has been added. + + + + + +[P57] The C_STRING property type was added. + + + + + +[P62] An ordering requirement on processing selection requests was added. + + + + + +[P63] The +VisibleHint +flag was added. + + + + + +[P64] The session management section has been updated to align with the new +session management protocol. The old session management conventions have +been moved to Appendix C. + + + + + +References to the never-forthcoming +Window and Session Manager +Conventions Manual have been removed. + + + + + +Information on the X Registry and references to the session management and +ICE documents have been added. + + + + + +Numerous editorial and typographical improvements have been made. + + + + + + +Version 2.0, April 1994 + +The following changes have been made in preparation for releasing +the final edition of Version 2.0 with X11R6. + + + + + +The PIXMAP selection target has been revised to return a property of type +PIXMAP instead of type DRAWABLE. + + + + + +The session management section has been revised slightly to correspond with +the changes to the +X Session Management Protocol. + + + + + +Window managers are now prohibited from placing +CurrentTime +in the timestamp field of WM_TAKE_FOCUS messages. + + + + + +In the WM_HINTS property, the +VisibleHint +flag has been renamed to +UrgencyHint. +Its semantics have also been defined more thoroughly. + + + + + +Additional editorial and typographical changes have been made. + + + + + + + + + +Suggested Protocol Revisions + +During the development of these conventions, +a number of inadequacies have been discovered in the +core X11 protocol. +They are summarized here as input to an eventual protocol revision +design process: + + + + + +There is no way for anyone to find out the last-change time of +a selection. +The +GetSelectionOwner +request should be changed to return the last-change time as well as the owner. + + + + + +There is no way for a client to find out which selection atoms are valid. + + + + + +There would be no need for WM_TAKE_FOCUS if the +FocusIn +event contained a timestamp and a previous-focus field. +This could avoid the potential race condition. +There is space in the event for this information; +it should be added at the next protocol revision. + + + + + +There is a race condition in the +InstallColormap +request. +It does not take a timestamp and may be executed after the top-level colormap +has been uninstalled. +The next protocol revision should provide the timestamp in the +InstallColormap, +UninstallColormap, +ListInstalledColormaps +requests and in the +ColormapNotify +event. +The timestamp should be used in a similar way to the last-focus-change +time for the input focus. The lack of timestamps in these packets is the +reason for restricting colormap installation to the window manager. + + + + + +The protocol needs to be changed to provide some way of identifying +the Visual and the Screen of a colormap. + + + + + +There should be some way to reclaim assignments to the five nonpreassigned +modifiers when they are no longer needed. The manual method is unpleasantly +low-tech. + + + + + + + +Obsolete Session Manager Conventions + + +This appendix contains obsolete conventions for session management using X +properties and messages. The conventions described here are deprecated and +are described only for historical interest. For further information on +session management, see +X Session Management Protocol. + + + +Properties + +The client communicates with the session manager by placing two properties +(WM_COMMAND and WM_CLIENT_MACHINE) on its top-level window. +If the client has a group of top-level windows, +these properties should be placed on the group leader window. + + +The window manager is responsible for placing a WM_STATE property +on each top-level client window for use by session managers and other clients +that need to be able to identify top-level client windows and their state. + + + +WM_COMMAND Property + +The WM_COMMAND property represents the command used to start or restart the +client. By updating this property, clients should ensure that it always +reflects a command that will restart them in their current state. The +content and type of the property depend on the operating system of the +machine running the client. On POSIX-conformant systems using ISO Latin-1 +characters for their command lines, the property should: + + + + + + +Be of type STRING + + + + +Contain a list of null-terminated strings + + + + +Be initialized from argv + + +Other systems will need to set appropriate conventions for the type +and contents of WM_COMMAND properties. +Window and session managers should not assume that STRING is +the type of WM_COMMAND or that they will be able to understand +or display its contents. + + + + + +Note that WM_COMMAND strings are null-terminated +and differ from the general conventions that STRING properties +are null-separated. +This inconsistency is necessary for backwards compatibility. + + +A client with multiple top-level windows should ensure +that exactly one of them has a WM_COMMAND with nonzero length. +Zero-length WM_COMMAND properties can be used to reply to WM_SAVE_YOURSELF +messages on other top-level windows but will otherwise be ignored. + + + + +WM_CLIENT_MACHINE Property + +This property is described in + +. + + + + + +Termination + +Because they communicate by means of unreliable network connections, clients +must be prepared for their connection to the server to be terminated at any +time without warning. They cannot depend on getting notification that +termination is imminent or on being able to use the server to negotiate with +the user about their fate. For example, clients cannot depend on being able +to put up a dialog box. + + +Similarly, clients may terminate at any time without notice to the session +manager. When a client terminates itself rather than being terminated by +the session manager, it is viewed as having resigned from the session in +question, and it will not be revived if the session is revived. + + + + +Client Responses to Session Manager Actions + +Clients may need to respond to session manager actions in two ways: + + + + + +Saving their internal state + + + + + +Deleting a window + + + + + +Saving Client State + +Clients that want to be warned when the session manager feels +that they should save their internal state (for example, +when termination impends) should include the atom WM_SAVE_YOURSELF +in the WM_PROTOCOLS property on their top-level windows to participate +in the WM_SAVE_YOURSELF protocol. +They will receive a +ClientMessage +event as described in + + +with the atom WM_SAVE_YOURSELF in its data[0] field. + + + +Clients that receive WM_SAVE_YOURSELF should place themselves in a state from +which they can be restarted and should update WM_COMMAND to +be a command that will restart them in this state. +The session manager will be waiting for a +PropertyNotify +event on WM_COMMAND as a confirmation that the client has saved its state. +Therefore, WM_COMMAND should be updated (perhaps with a zero-length append) +even if its contents are correct. +No interactions with the user are permitted during this process. + + + +Once it has received this confirmation, +the session manager will feel free to terminate the client if that is what +the user asked for. +Otherwise, +if the user asked for the session to be put to sleep, +the session manager will ensure that the client does not +receive any mouse or keyboard events. + + + +After receiving a WM_SAVE_YOURSELF, saving its state, and updating WM_COMMAND, +the client should not change its state (in the sense of doing anything +that would require a change to WM_COMMAND) until it receives a mouse +or keyboard event. +Once it does so, +it can assume that the danger is over. +The session manager will ensure that these events do not reach +clients until the danger is over or until the clients have been killed. + + + +Irrespective of how they are arranged in window groups, +clients with multiple top-level windows should ensure the following: + + + + + +Only one of their top-level windows has a nonzero-length WM_COMMAND +property. + + + + +They respond to a WM_SAVE_YOURSELF message by: + + + + +First, updating the nonzero-length WM_COMMAND property, if necessary + + + + +Second, updating the WM_COMMAND property on the window for which they received +the WM_SAVE_YOURSELF message if it was not updated in the first step + + + + + + + +Receiving WM_SAVE_YOURSELF on a window is, conceptually, a command +to save the entire client state. + +This convention has changed since earlier drafts because of the +introduction of the protocol in the next section. +In the public review draft, +there was ambiguity as to whether WM_SAVE_YOURSELF was a checkpoint +or a shutdown facility. +It is now unambiguously a checkpoint facility; +if a shutdown facility is judged to be necessary, +a separate WM_PROTOCOLS protocol will be developed and registered +with the X Consortium. + + + + + + +Window Deletion + +Windows are deleted using the WM_DELETE_WINDOW protocol, which +is described in + +. + + + + + +Summary of Session Manager Property Types + +The session manager properties are listed in the following table: + + + + + + + + + + + Name + Type + Format + See Section + + + + + WM_CLIENT_MACHINE + TEXT + + + + + + + + WM_COMMAND + TEXT + + + + + + + + WM_STATE + WM_STATE + 32 + + + + + + + + + + +
diff --git a/doc/xorg-docs/specs/ICCCM/indexmacros.t b/doc/xorg-docs/specs/ICCCM/indexmacros.t deleted file mode 100644 index 13a4375ac..000000000 --- a/doc/xorg-docs/specs/ICCCM/indexmacros.t +++ /dev/null @@ -1,3 +0,0 @@ -.eh '\s+1\fBInter-Client Communication Conventions\fP''\fBX11, Release 6.8\fP\s-1' -.oh '\s+1\fBInter-Client Communication Conventions\fP''\fBX11, Release 6.8\fP\s-1' -.so index.pageno diff --git a/doc/xorg-docs/specs/ICE/ICElib.ms b/doc/xorg-docs/specs/ICE/ICElib.ms deleted file mode 100644 index 0c35d6009..000000000 --- a/doc/xorg-docs/specs/ICE/ICElib.ms +++ /dev/null @@ -1,3400 +0,0 @@ -.\" $Xorg: ICElib.ms,v 1.3 2000/08/17 19:42:09 cpqbld Exp $ -.\" $XdotOrg: xc/doc/specs/ICE/ICElib.ms,v 1.2 2004/04/23 18:42:16 eich Exp $ -.\" -.\" Use tbl, -ms, and macros.t -.\" -.\" macro: start marker -.de sM -.ne 4 -.sp 1 -\\h'-0.3i'\\L'-1v'\\v'3p'\\l'1v'\\v'1v-3p' -.sp -1 -.. -.\" macro: end marker -.de eM -.sp -1 -\\h'-0.3i'\\L'-1v'\\v'1v+4p'\\l'1v'\\v'-4p' -.sp 1 -.. -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.ad b -.sp 10 -.TL -\s+2\fBInter-Client Exchange Library\fP\s-2 -.sp -Version 1.0 -.sp -X Consortium Standard -.sp -X Version 11, Release 6.8 -.AU -Ralph Mor -.AI -X Consortium -.LP -.DS C -Copyright \(co 1993, 1994, 1996 X Consortium -.DE -.LP -.sp 5 -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -.LP -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -.LP -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. -.sp 5 -X Window System is a trademark of The Open Group. -.bp -.EH '\fBInter-Client Exchange Library\fP''\fBX11, Release 6.8\fP' -.OH '\fBInter-Client Exchange Library\fP''\fBX11, Release 6.8\fP' -.bp 1 -.EF ''\- \\\\n(PN \-'' -.OF ''\- \\\\n(PN \-'' -.NH 1 -Overview of ICE -.XS -\*(SN Overview of ICE -.XE -.LP -There are numerous possible inter-client protocols, with many similarities -and common needs - authentication, version negotiation, byte -order negotiation, and so on. -The Inter-Client Exchange (ICE) protocol is intended to provide a framework -for building such protocols, allowing them to make use of common negotiation -mechanisms and to be multiplexed over a single transport connection. -.NH 1 -The ICE Library - C Language Interface to ICE -.XS -\*(SN The ICE Library - C Language Interface to ICE -.XE -.LP -A client that wishes to utilize ICE must first register the protocols it -understands with the ICE library. Each protocol is dynamically assigned -a major opcode ranging from 1-255 (two clients can use different -major opcodes for the same protocol). The next step for the client is either -to open a connection with another client or to wait for connections made -by other clients. Authentication may be required. A client can both -initiate connections with other clients and be -waiting for clients to connect to itself (a nested session manager is an -example). Once an ICE connection is established between the two clients, one -of the clients needs to initiate a -.PN ProtocolSetup -in order to -"activate" a given protocol. Once the other client accepts the -.PN ProtocolSetup -(once again, authentication may be required), the -two clients are ready to start passing messages specific to that protocol to -each other. Multiple protocols may be active on a single ICE connection. -Clients are responsible for notifying the ICE library when a protocol is no -longer active on an ICE connection, although ICE does not define how each -subprotocol triggers a protocol shutdown. -.LP -The ICE library utilizes callbacks to process incoming messages. Using -callbacks allows -.PN ProtocolSetup -messages and authentication to happen -behind the scenes. An additional benefit is that messages never need -to be buffered up by the library when the client blocks waiting for a -particular message. -.NH 1 -Intended Audience -.XS -\*(SN Intended Audience -.XE -.LP -This document is intended primarily for implementors of protocol libraries -layered on top of ICE. Typically, applications that wish to utilize ICE -will make calls into individual protocol libraries rather than directly -make calls into the ICE library. However, some applications will have to -make some initial calls into the ICE library in order to accept ICE -connections (for example, a session manager accepting connections from -clients). But in general, protocol libraries should be designed to hide -the inner details of ICE from applications. -.NH 1 -Header Files and Library Name -.XS -\*(SN Header Files and Library Name -.XE -.LP -The header file -.Pn < X11/ICE/ICElib.h > -defines all of the ICElib data structures and function prototypes. -.PN ICElib.h -includes the header file -.Pn < X11/ICE/ICE.h >, -which defines all of the ICElib constants. -Protocol libraries that need to read and write messages should include -the header file -.Pn < X11/ICE/ICEmsg.h >. -.LP -Applications should link against ICElib using -lICE. -.NH 1 -Note on Prefixes -.XS -\*(SN Note on Prefixes -.XE -.LP -The following name prefixes are used in the library to distinguish between -a client that initiates a -.PN ProtocolSetup -and a client that -responds with a -.PN ProtocolReply : -.IP \(bu 5 -.PN IcePo -\- Ice Protocol Originator -.IP \(bu 5 -.PN IcePa -\- Ice Protocol Acceptor -.NH 1 -Protocol Registration -.XS -\*(SN Protocol Registration -.XE -.LP -In order for two clients to exchange messages for a given protocol, each -side must register the protocol with the ICE library. The purpose of -registration is for each side to obtain a major opcode for the protocol -and to provide callbacks for processing messages and handling authentication. -There are two separate registration functions: -.IP \(bu 5 -One to handle the side that does a -.PN ProtocolSetup -.IP \(bu 5 -One to handle the side that responds with a -.PN ProtocolReply -.LP -It is recommended that protocol registration occur before the two clients -establish an ICE connection. If protocol registration occurs after an -ICE connection is created, there can be a brief interval of time in which -a -.PN ProtocolSetup -is received, but the protocol is not registered. -If it is not possible to register a protocol before the creation of an -ICE connection, proper precautions should be taken to avoid the above race -condition. -.sp -.LP -The -.PN IceRegisterForProtocolSetup -function should be called for the client that initiates a -.PN ProtocolSetup . -.sM -.FD 0 -int IceRegisterForProtocolSetup\^(\^\fIprotocol_name\fP, \fIvendor\fP\^, \ -\fIrelease\fP\^, \fIversion_count\fP\^, \fIversion_recs\fP\^, -.br - \fIauth_count\fP\^, \fIauth_names\fP\^, \fIauth_procs\fP\^, \ -\fIio_error_proc\fP\^) -.br - char *\fIprotocol_name\fP\^; -.br - char *\fIvendor\fP\^; -.br - char *\fIrelease\fP\^; -.br - int \fIversion_count\fP\^; -.br - IcePoVersionRec *\fIversion_recs\fP\^; -.br - int \fIauth_count\fP\^; -.br - char **\fIauth_names\fP\^; -.br - IcePoAuthProc *\fIauth_procs\fP\^; -.br - IceIOErrorProc \fIio_error_proc\fP\^; -.FN -.IP \fIprotocol_name\fP 1i -A string specifying the name of the protocol to register. -.IP \fIvendor\fP 1i -A vendor string with semantics specified by the protocol. -.IP \fIrelease\fP 1i -A release string with semantics specified by the protocol. -.IP \fIversion_count\fP 1i -The number of different versions of the protocol supported. -.IP \fIversion_recs\fP 1i -List of versions and associated callbacks. -.IP \fIauth_count\fP 1i -The number of authentication methods supported. -.IP \fIauth_names\fP 1i -The list of authentication methods supported. -.IP \fIauth_procs\fP 1i -The list of authentication callbacks, one for each authentication method. -.IP \fIio_error_proc\fP 1i -IO error handler, or NULL. -.LP -.eM -.PN IceRegisterForProtocolSetup -returns the major opcode reserved or -1 if an error occurred. In order -to actually activate the protocol, the -.PN IceProtocolSetup -function needs to be called with this major opcode. Once the protocol is -activated, all messages for the protocol should be sent using this major -opcode. -.LP -A protocol library may support multiple versions of the same protocol. -The version_recs argument specifies a list of supported versions of the protocol, -which are prioritized in decreasing order of preference. -Each version record consists of a major and minor version of the protocol -as well as a callback to be used for processing incoming messages. -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - int major_version; - int minor_version; - IcePoProcessMsgProc process_msg_proc; -} IcePoVersionRec; -.De -.LP -.eM -The -.PN IcePoProcessMsgProc -callback is responsible for processing the set of messages that can be -received by the client that initiated the -.PN ProtocolSetup . -For further information, -see section 6.1, ``Callbacks for Processing Messages.'' -.LP -Authentication may be required before the protocol can become active. -The protocol library must register the authentication methods that it -supports with the ICE library. -The auth_names and auth_procs arguments are a list of authentication names -and callbacks that are prioritized in decreasing order of preference. -For information on the -.PN IcePoAuthProc -callback, see section 6.2, ``Authentication Methods.'' -.LP -The -.PN IceIOErrorProc -callback is invoked if the ICE connection unexpectedly breaks. -You should pass NULL for io_error_proc if not interested in being notified. -For further information, -see section 13, ``Error Handling.'' -.sp -.LP -The -.PN IceRegisterForProtocolReply -function should be called for the client that responds to a -.PN ProtocolSetup -with a -.PN ProtocolReply . -.sM -.FD 0 -int IceRegisterForProtocolReply\^(\^\fIprotocol_name\fP, \fIvendor\fP\^, \fIrelease\fP\^, \fIversion_count\fP\^, \fIversion_recs\fP\^, -.br - \fIauth_count\fP\^, \fIauth_names\fP\^, \fIauth_procs\fP\^, \fIhost_based_auth_proc\fP\^, \fIprotocol_setup_proc\fP\^, -.br - \fIprotocol_activate_proc\fP\^, \fIio_error_proc\fP\^) -.br - char *\fIprotocol_name\fP\^; -.br - char *\fIvendor\fP\^; -.br - char *\fIrelease\fP\^; -.br - int \fIversion_count\fP\^; -.br - IcePaVersionRec *\fIversion_recs\fP\^; -.br - int \fIauth_count\fP\^; -.br - char **\fIauth_names\fP\^; -.br - IcePaAuthProc *\fIauth_procs\fP\^; -.br - IceHostBasedAuthProc \fIhost_based_auth_proc\fP\^; -.br - IceProtocolSetupProc \fIprotocol_setup_proc\fP\^; -.br - IceProtocolActivateProc \fIprotocol_activate_proc\fP\^; -.br - IceIOErrorProc \fIio_error_proc\fP\^; -.FN -.IP \fIprotocol_name\fP 1i -A string specifying the name of the protocol to register. -.IP \fIvendor\fP 1i -A vendor string with semantics specified by the protocol. -.IP \fIrelease\fP 1i -A release string with semantics specified by the protocol. -.IP \fIversion_count\fP 1i -The number of different versions of the protocol supported. -.IP \fIversion_recs\fP 1i -List of versions and associated callbacks. -.IP \fIauth_count\fP 1i -The number of authentication methods supported. -.IP \fIauth_names\fP 1i -The list of authentication methods supported. -.IP \fIauth_procs\fP 1i -The list of authentication callbacks, one for each authentication method. -.IP \fIhost_based_auth_proc\fP 1i -Host based authentication callback. -.IP \fIprotocol_setup_proc\fP 1i -A callback to be invoked when authentication has succeeded for a -.PN ProtocolSetup -but before the -.PN ProtocolReply -is sent. -.IP \fIprotocol_activate_proc\fP 1i -A callback to be invoked after the -.PN ProtocolReply -is sent. -.IP \fIio_error_proc\fP 1i -IO error handler, or NULL. -.LP -.eM -.PN IceRegisterForProtocolReply -returns the major opcode reserved or -1 if an error occurred. The major -opcode should be used in all subsequent messages sent for this protocol. -.LP -A protocol library may support multiple versions of the same protocol. -The version_recs argument specifies a list of supported versions of the protocol, -which are prioritized in decreasing order of preference. -Each version record consists of a major and minor version of the protocol -as well as a callback to be used for processing incoming messages. -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - int major_version; - int minor_version; - IcePaProcessMsgProc process_msg_proc; -} IcePaVersionRec; -.De -.LP -.eM -The -.PN IcePaProcessMsgProc -callback is responsible for processing the set of messages that can be -received by the client that accepted the -.PN ProtocolSetup . -For further information, -see section 6.1, ``Callbacks for Processing Messages.'' -.LP -Authentication may be required before the protocol can become active. -The protocol library must register the authentication methods that it -supports with the ICE library. -The auth_names and auth_procs arguments are a list of authentication names -and callbacks that are prioritized in decreasing order of preference. -For information on the -.PN IcePaAuthProc -callback, see section 6.2, ``Authentication Methods.'' -.LP -If authentication fails and the client attempting to initiate -the -.PN ProtocolSetup -has not required authentication, the -.PN IceHostBasedAuthProc -callback is invoked with the host name of the originating client. -If the callback returns -.PN True , -the -.PN ProtocolSetup -will succeed, even though the original -authentication failed. -Note that authentication can effectively be disabled by registering an -.PN IceHostBasedAuthProc , -which always returns -.PN True . -If no host based -authentication is allowed, you should pass NULL for host_based_auth_proc. -.LP -.sM -.FD 0 -typedef Bool (*IceHostBasedAuthProc) (); - -Bool HostBasedAuthProc\^(\^\fIhost_name\fP\^) -.br - char *\fIhost_name\fP\^; -.FN -.IP \fIhost_name\fP 1i -The host name of the client that sent the -.PN ProtocolSetup . -.LP -.eM -The host_name argument is a string of the form \fIprotocol\fP\^/\^\fIhostname\fP, -where \fIprotocol\fP\^ is one of {tcp, decnet, local}. -.LP -Because -.PN ProtocolSetup -messages and authentication happen behind the scenes -via callbacks, the protocol library needs some way of being notified when the -.PN ProtocolSetup -has completed. -This occurs in two phases. -In the first phase, the -.PN IceProtocolSetupProc -callback is invoked after authentication has -successfully completed but before the ICE library sends a -.PN ProtocolReply . -Any resources required for this protocol should be allocated at this time. -If the -.PN IceProtocolSetupProc -returns a successful status, the ICE library will -send the -.PN ProtocolReply -and then invoke the -.PN IceProtocolActivateProc -callback. Otherwise, an error will be sent to the -other client in response to the -.PN ProtocolSetup . -.LP -The -.PN IceProtocolActivateProc -is an optional callback and should be registered only if the protocol -library intends to generate a message immediately following the -.PN ProtocolReply . -You should pass NULL for protocol_activate_proc if not interested -in this callback. -.if t .bp -.sM -.FD 0 -typedef Status (*IceProtocolSetupProc) (); - -Status ProtocolSetupProc\^(\^\fIice_conn\fP, \fImajor_version\fP\^, \ -\fIminor_version\fP\^, \fIvendor\fP\^, \fIrelease\fP\^, -.br - \fIclient_data_ret\fP\^, \fIfailure_reason_ret\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - int \fImajor_version\fP\^; -.br - int \fIminor_version\fP\^; -.br - char *\fIvendor\fP\^; -.br - char *\fIrelease\fP\^; -.br - IcePointer *\fIclient_data_ret\fP\^; -.br - char **\fIfailure_reason_ret\fP\^; -.FN -.IP \fIice_conn\fP 1i -The ICE connection object. -.IP \fImajor_version\fP 1i -The major version of the protocol. -.IP \fIminor_version\fP 1i -The minor version of the protocol. -.IP \fIvendor\fP 1i -The vendor string registered by the protocol originator. -.IP \fIrelease\fP 1i -The release string registered by the protocol originator. -.IP \fIclient_data_ret\fP 1i -Client data to be set by callback. -.IP \fIfailure_reason_ret\fP 1i -Failure reason returned. -.LP -.eM -The pointer stored in the client_data_ret argument will be passed -to the -.PN IcePaProcessMsgProc -callback whenever a message has arrived for this protocol on the -ICE connection. -.LP -The vendor and release strings should be freed with -.PN free -when they are no longer needed. -.LP -If a failure occurs, the -.PN IceProtocolSetupProc -should return a zero status as well as allocate and return a failure -reason string in failure_reason_ret. -The ICE library will be responsible for freeing this memory. -.LP -The -.PN IceProtocolActivateProc -callback is defined as follows: -.sM -.FD 0 -typedef void (*IceProtocolActivateProc)(); - -void ProtocolActivateProc\^(\^\fIice_conn\fP, \fIclient_data\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - IcePointer \fIclient_data\fP\^; -.FN -.IP \fIice_conn\fP 1i -The ICE connection object. -.IP \fIclient_data\fP 1i -The client data set in the -.PN IceProtocolSetupProc -callback. -.LP -.eM -The -.PN IceIOErrorProc -callback is invoked if the ICE connection unexpectedly breaks. -You should pass NULL for io_error_proc if not interested in being notified. -For further information, -see section 13, ``Error Handling.'' -.NH 2 -Callbacks for Processing Messages -.XS -\*(SN Callbacks for Processing Messages -.XE -.LP -When an application detects that there is new data to read on an ICE -connection (via -.PN select ), -it calls the -.PN IceProcessMessages -function (see section 9, ``Processing Messages''). -When -.PN IceProcessMessages -reads an ICE message header with a major opcode other than -zero (reserved for the ICE protocol), it needs to call a function that will -read the rest of the message, unpack it, and process it accordingly. -.LP -If the message arrives at the client that initiated the -.PN ProtocolSetup , -the -.PN IcePoProcessMsgProc -callback is invoked. -.sM -.FD 0 -typedef void (*IcePoProcessMsgProc)(); - -void PoProcessMsgProc\^(\^\fIice_conn\fP, \fIclient_data\fP\^, \fIopcode\fP\^, \fIlength\fP\^, \fIswap\fP\^, \fIreply_wait\fP\^, \fIreply_ready_ret\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - IcePointer \fIclient_data\fP\^; -.br - int \fIopcode\fP\^; -.br - unsigned long \fIlength\fP\^; -.br - Bool \fIswap\fP\^; -.br - IceReplyWaitInfo *\fIreply_wait\fP\^; -.br - Bool *\fIreply_ready_ret\fP\^; -.FN -.IP \fIice_conn\fP 1i -The ICE connection object. -.IP \fIclient_data\fP 1i -Client data associated with this protocol on the ICE connection. -.IP \fIopcode\fP 1i -The minor opcode of the message. -.IP \fIlength\fP 1i -The length (in 8-byte units) of the message beyond the ICE header. -.IP \fIswap\fP 1i -A flag that indicates if byte swapping is necessary. -.IP \fIreply_wait\fP 1i -Indicates if the invoking client is waiting for a reply. -.IP \fIreply_ready_ret\fP 1i -If set to -.PN True , -a reply is ready. -.LP -.eM -If the message arrives at the client that accepted the -.PN ProtocolSetup , -the -.PN IcePaProcessMsgProc -callback is invoked. -.sM -.FD 0 -typedef void (*IcePaProcessMsgProc)(); - -void PaProcessMsgProc\^(\^\fIice_conn\fP, \fIclient_data\fP\^, \fIopcode\fP\^, \fIlength\fP\^, \fIswap\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - IcePointer \fIclient_data\fP\^; -.br - int \fIopcode\fP\^; -.br - unsigned long \fIlength\fP\^; -.br - Bool \fIswap\fP\^; -.FN -.IP \fIice_conn\fP 1i -The ICE connection object. -.IP \fIclient_data\fP 1i -Client data associated with this protocol on the ICE connection. -.IP \fIopcode\fP 1i -The minor opcode of the message. -.IP \fIlength\fP 1i -The length (in 8-byte units) of the message beyond the ICE header. -.IP \fIswap\fP 1i -A flag that indicates if byte swapping is necessary. -.LP -.eM -In order to read the message, both of these callbacks should use the -macros defined for this purpose (see section 12.2, ``Reading ICE Messages''). -Note that byte swapping may be necessary. -As a convenience, the length field in the ICE header will be swapped by ICElib -if necessary. -.LP -In both of these callbacks, the client_data argument is a pointer to client -data that was registered at -.PN ProtocolSetup -time. -In the case of -.PN IcePoProcessMsgProc , -the client data was set in the call to -.PN IceProtocolSetup . -In the case of -.PN IcePaProcessMsgProc , -the client data was set in the -.PN IceProtocolSetupProc -callback. -.LP -The -.PN IcePoProcessMsgProc -callback needs to check the reply_wait argument. -If reply_wait is NULL , -the ICE library expects the function to -pass the message to the client via a callback. -For example, if this is a Session Management ``Save Yourself'' message, -this function should notify the client of the ``Save Yourself'' via a callback. -The details of how such a callback would be defined -are implementation-dependent. -.LP -However, if reply_wait is not NULL , -then the client is waiting for -a reply or an error for a message it previously sent. -The reply_wait is of type -.PN IceReplyWaitInfo . -.sM -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { - unsigned long sequence_of_request; - int major_opcode_of_request; - int minor_opcode_of_request; - IcePointer reply; -} IceReplyWaitInfo; -.De -.LP -.eM -.PN IceReplyWaitInfo -contains the major/minor opcodes and sequence number of -the message for which a reply is being awaited. -It also contains a pointer to the reply message to be filled in -(the protocol library should cast this -.PN IcePointer -to the appropriate reply type). -In most cases, the reply will have some fixed-size part, and the client waiting -for the reply will have provided a pointer to a structure to hold -this fixed-size data. If there is variable-length data, it would be -expected that the -.PN IcePoProcessMsgProc -callback will have to allocate additional -memory and store pointer(s) to that memory in the fixed-size -structure. If the entire data is variable length (for example., a single -variable-length string), then the client waiting for the reply would probably -just pass a pointer to fixed-size space to hold a pointer, and the -.PN IcePoProcessMsgProc -callback would allocate the storage and store the pointer. -It is the responsibility of the client receiving the reply to -free any memory allocated on its behalf. -.LP -If reply_wait is not NULL and -.PN IcePoProcessMsgProc -has a reply or error to return in response to this reply_wait -(that is, no callback was generated), then the reply_ready_ret argument -should be set to -.PN True . -Note that an error should only be returned -if it corresponds to the reply being waited for. Otherwise, the -.PN IcePoProcessMsgProc -should either handle the error internally or invoke an error handler -for its library. -.LP -If reply_wait is NULL, -then care must be taken not to store any value in reply_ready_ret, -because this pointer may also be NULL. -.LP -The -.PN IcePaProcessMsgProc -callback, on the other hand, should always pass -the message to the client via a callback. For example, if this is a Session -Management ``Interact Request'' message, this function should notify the -client of the ``Interact Request'' via a callback. -.LP -The reason the -.PN IcePaProcessMsgProc -callback does not have a reply_wait, like -.PN IcePoProcessMsgProc -does, is because a process that is acting as -a server should never block for a reply (infinite blocking can -occur if the connecting client does not act properly, denying access -to other clients). -.NH 2 -Authentication Methods -.XS -\*(SN Authentication Methods -.XE -.LP -As already stated, a protocol library must register the authentication -methods that it supports with the ICE library. For each authentication -method, there are two callbacks that may be registered: -.IP \(bu 5 -One to handle the side that initiates a -.PN ProtocolSetup -.IP \(bu 5 -One to handle the side that accepts or rejects this request -.LP -.PN IcePoAuthProc -is the callback invoked for the client that initiated the -.PN ProtocolSetup . -This callback must be able to respond -to the initial ``Authentication Required'' message or subsequent -``Authentication Next Phase'' messages sent by the other client. -.if t .bp -.sM -.FD 0 -typedef IcePoAuthStatus (*IcePoAuthProc)(); - -IcePoAuthStatus PoAuthProc\^(\^\fIice_conn\fP, \fIauth_state_ptr\fP\^, \fIclean_up\fP\^, \fIswap\fP\^, \fIauth_datalen\fP\^, \fIauth_data\fP\^, -.br - \fIreply_datalen_ret\fP\^, \fIreply_data_ret\fP\^, \fIerror_string_ret\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - IcePointer *\fIauth_state_ptr\fP\^; -.br - Bool \fIclean_up\fP\^; -.br - Bool \fIswap\fP\^; -.br - int \fIauth_datalen\fP\^; -.br - IcePointer \fIauth_data\fP\^; -.br - int *\fIreply_datalen_ret\fP\^; -.br - IcePointer *\fIreply_data_ret\fP\^; -.br - char **\fIerror_string_ret\fP\^; -.FN -.IP \fIice_conn\fP 1i -The ICE connection object. -.IP \fIauth_state_ptr\fP 1i -A pointer to state for use by the authentication callback procedure. -.IP \fIclean_up\fP 1i -If -.PN True , -authentication is over, and the function -should clean up any state it was maintaining. The -last 6 arguments should be ignored. -.IP \fIswap\fP 1i -If -.PN True , -the auth_data may have to be byte swapped -(depending on its contents). -.IP \fIauth_datalen\fP 1i -The length (in bytes) of the authenticator data. -.IP \fIauth_data\fP 1i -The data from the authenticator. -.IP \fIreply_datalen_ret\fP 1i -The length (in bytes) of the reply data returned. -.IP \fIreply_data_ret\fP 1i -The reply data returned. -.IP \fIerror_string_ret\fP 1i -If the authentication procedure encounters an error during -authentication, it should allocate and return -an error string. -.LP -.eM -Authentication may require several phases, depending on the authentication -method. As a result, the -.PN IcePoAuthProc -may be called more than once when authenticating a client, and -some state will have to be maintained between each invocation. -At the start of each -.PN ProtocolSetup , -*auth_state_ptr is NULL, -and the function should initialize its state and set -this pointer. In subsequent invocations of the callback, the pointer -should be used to get at any state previously stored by the callback. -.LP -If needed, the network ID of the client accepting the -.PN ProtocolSetup -can be obtained by calling the -.PN IceConnectionString -function. -.LP -ICElib will be responsible for freeing the reply_data_ret and -error_string_ret pointers with -.PN free . -.LP -The auth_data pointer may point to a volatile block of memory. -If the data must be kept beyond this invocation of the callback, be sure -to make a copy of it. -.LP -The -.PN IcePoAuthProc -should return one of four values: -.IP \(bu 5 -.PN IcePoAuthHaveReply -\- a reply is available. -.IP \(bu 5 -.PN IcePoAuthRejected -\- authentication rejected. -.IP \(bu 5 -.PN IcePoAuthFailed -\- authentication failed. -.IP \(bu 5 -.PN IcePoAuthDoneCleanup -\- done cleaning up. -.LP -.PN IcePaAuthProc -is the callback invoked for the client that received the -.PN ProtocolSetup . -.if t .bp -.sM -.FD 0 -typedef IcePaAuthStatus (*IcePaAuthProc) (); - -IcePaAuthStatus PaAuthProc\^(\^\fIice_conn\fP, \fIauth_state_ptr\fP\^, \fIswap\fP\^, \fIauth_datalen\fP\^, \fIauth_data\fP\^, -.br - \fIreply_datalen_ret\fP\^, \fIreply_data_ret\fP\^, \fIerror_string_ret\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - IcePointer *\fIauth_state_ptr\fP\^; -.br - Bool \fIswap\fP\^; -.br - int \fIauth_datalen\fP\^; -.br - IcePointer \fIauth_data\fP\^; -.br - int *\fIreply_datalen_ret\fP\^; -.br - IcePointer *\fIreply_data_ret\fP\^; -.br - char **\fIerror_string_ret\fP\^; -.FN -.IP \fIice_conn\fP 1i -The ICE connection object. -.IP \fIauth_state_ptr\fP 1i -A pointer to state for use by the authentication callback procedure. -.IP \fIswap\fP 1i -If -.PN True , -auth_data may have to be byte swapped -(depending on its contents). -.IP \fIauth_datalen\fP 1i -The length (in bytes) of the protocol originator authentication data. -.IP \fIauth_data\fP 1i -The authentication data from the protocol originator. -.IP \fIreply_datalen_ret\fP 1i -The length of the authentication data returned. -.IP \fIreply_data_ret\fP 1i -The authentication data returned. -.IP \fIerror_string_ret\fP 1i -If authentication is rejected or fails, an error -string is returned. -.LP -.eM -.LP -Authentication may require several phases, depending on the authentication -method. As a result, the -.PN IcePaAuthProc -may be called more than once when authenticating a client, and -some state will have to be maintained between each invocation. -At the start of each -.PN ProtocolSetup , -auth_datalen is zero, -*auth_state_ptr is NULL, -and the function should initialize its state and set -this pointer. In subsequent invocations of the callback, the pointer -should be used to get at any state previously stored by the callback. -.LP -If needed, the network ID of the client accepting the -.PN ProtocolSetup -can be obtained by calling the -.PN IceConnectionString -function. -.LP -The auth_data pointer may point to a volatile block of memory. -If the data must be kept beyond this invocation of the callback, be sure -to make a copy of it. -.LP -ICElib will be responsible for transmitting and freeing the reply_data_ret and -error_string_ret pointers with -.PN free . -.LP -The -.PN IcePaAuthProc -should return one of four values: -.IP \(bu 5 -.PN IcePaAuthContinue -\- continue (or start) authentication. -.IP \(bu 5 -.PN IcePaAuthAccepted -\- authentication accepted. -.IP \(bu 5 -.PN IcePaAuthRejected -\- authentication rejected. -.IP \(bu 5 -.PN IcePaAuthFailed -\- authentication failed. -.NH 1 -ICE Connections -.XS -\*(SN ICE Connections -.XE -.LP -In order for two clients to establish an ICE connection, one client has -to be waiting for connections, and the other client has to initiate the -connection. -Most clients will initiate connections, so we discuss that first. -.NH 2 -Opening an ICE Connection -.XS -\*(SN Opening an ICE Connection -.XE -.LP -To open an ICE connection with another client (that is, waiting -for connections), use -.PN IceOpenConnection . -.sM -.FD 0 -IceConn IceOpenConnection\^(\^\fInetwork_ids_list\fP, \fIcontext\fP\^, \fImust_authenticate\fP\^, \fImajor_opcode_check\fP\^, -.br - \fIerror_length\fP\^, \fIerror_string_ret\fP\^) -.br - char *\fInetwork_ids_list\fP\^; -.br - IcePointer \fIcontext\fP\^; -.br - Bool \fImust_authenticate\fP\^; -.br - int \fImajor_opcode_check\fP\^; -.br - int \fIerror_length\fP\^; -.br - char *\fIerror_string_ret\fP\^; -.FN -.IP \fInetwork_ids_list\fP 1i -Specifies the network ID(s) of the other client. -.IP \fIcontext\fP 1i -A pointer to an opaque object or NULL. Used to determine if an -ICE connection can be shared (see below). -.IP \fImust_authenticate\fP 1i -If -.PN True , -the other client may not bypass authentication. -.IP \fImajor_opcode_check\fP 1i -Used to force a new ICE connection to be created (see below). -.IP \fIerror_length\fP 1i -Length of the error_string_ret argument passed in. -.IP \fIerror_string_ret\fP 1i -Returns a null-terminated error message, if any. -The error_string_ret argument points to user supplied memory. -No more than error_length bytes -are used. -.LP -.eM -.PN IceOpenConnection -returns an opaque ICE connection object if it succeeds; -otherwise, it returns NULL. -.LP -The network_ids_list argument contains a list of network IDs separated by commas. -An attempt will be made to use the first network ID. If that fails, -an attempt will be made using the second network ID, and so on. -Each network ID has the following format: -.TS -lw(0.25i) lw(2.5i) lw(1i). - tcp/: or - decnet/:: or - local/: -.TE -.LP -Most protocol libraries will have some sort of open function that should -internally make a call into -.PN IceOpenConnection . -When -.PN IceOpenConnection -is called, it may be possible to use a previously opened ICE connection (if -the target client is the same). However, there are cases in which shared -ICE connections are not desired. -.LP -The context argument is used to determine if an ICE connection can -be shared. -If context is NULL, -then the caller is always willing to share the connection. -If context is not NULL, -then the caller is not willing to use a previously opened ICE connection -that has a different non-NULL context associated with it. -.LP -In addition, if major_opcode_check contains a nonzero major opcode value, -a previously created ICE connection will be used only if the major opcode -is not active on the connection. This can be used to force multiple ICE -connections between two clients for the same protocol. -.LP -Any authentication requirements are handled internally by the ICE library. -The method by which the authentication data is obtained -is implementation-dependent.\(dg -.FS \(dg -The X Consortium's ICElib implementation uses an \&.ICEauthority file (see -Appendix A). -.FE -.LP -After -.PN IceOpenConnection -is called, the client is ready to send a -.PN ProtocolSetup -(provided that -.PN IceRegisterForProtocolSetup -was called) or receive a -.PN ProtocolSetup -(provided that -.PN IceRegisterForProtocolReply -was called). -.NH 2 -Listening for ICE Connections -.XS -\*(SN Listening for ICE Connections -.XE -.LP -Clients wishing to accept ICE connections must first call -.PN IceListenForConnections -or -.PN IceListenForWellKnownConnections -so that they can listen for connections. A list of opaque "listen" objects are -returned, one for each type of transport method that is available -(for example, Unix Domain, TCP, DECnet, and so on). -.LP -Normally clients will let ICElib allocate an available name in each -transport and return listen objects. Such a client will then use -.PN IceComposeNetworkIdList -to extract the chosen names and make them -available to other clients for opening the connection. In certain -cases it may be necessary for a client to listen for connections -on pre-arranged transport object names. Such a client may use -.PN IceListenForWellKnownConnections -to specify the names for the listen objects. -.sM -.FD 0 -Status IceListenForConnections\^(\^\fIcount_ret\fP, \fIlisten_objs_ret\fP\^, \fIerror_length\fP\^, \fIerror_string_ret\fP\^) -.br - int *\fIcount_ret\fP\^; -.br - IceListenObj **\fIlisten_objs_ret\fP\^; -.br - int \fIerror_length\fP\^; -.br - char *\fIerror_string_ret\fP\^; -.FN -.IP \fIcount_ret\fP 1i -Returns the number of listen objects created. -.IP \fIlisten_objs_ret\fP 1i -Returns a list of pointers to opaque listen objects. -.IP \fIerror_length\fP 1i -The length of the error_string_ret argument passed in. -.IP \fIerror_string_ret\fP 1i -Returns a null-terminated error message, if any. -The error_string_ret points to user supplied memory. -No more than error_length bytes are used. -.LP -.eM -The return value of -.PN IceListenForConnections -is zero for failure and a positive value for success. -.sp -.sM -.FD 0 -Status IceListenForWellKnownConnections\^(\^\fIport_id\fP, \fIcount_ret\fP, \fIlisten_objs_ret\fP\^, \fIerror_length\fP\^, \fIerror_string_ret\fP\^) -.br - char *\fIport_id\fP\^; -.br - int *\fIcount_ret\fP\^; -.br - IceListenObj **\fIlisten_objs_ret\fP\^; -.br - int \fIerror_length\fP\^; -.br - char *\fIerror_string_ret\fP\^; -.FN -.IP \fIport_id\fP 1i -Specifies the port identification for the address(es) -to be opened. The value must not contain the slash -(\^``/''\^) or comma (\^``,''\^) character; -these are reserved for future use. -.IP \fIcount_ret\fP 1i -Returns the number of listen objects created. -.IP \fIlisten_objs_ret\fP 1i -Returns a list of pointers to opaque listen objects. -.IP \fIerror_length\fP 1i -The length of the error_string_ret argument passed in. -.IP \fIerror_string_ret\fP 1i -Returns a null-terminated error message, if any. -The error_string_ret points to user supplied memory. -No more than error_length bytes are used. -.LP -.eM -.PN IceListenForWellKnownConnections -constructs a list of network IDs -by prepending each known transport to port_id and then attempts to -create listen objects for the result. Port_id is the portnumber, -objname, or path portion of the ICE network ID. If a listen object for -a particular network ID cannot be created the network ID is ignored. -If no listen objects are created -.PN IceListenForWellKnownConnections -returns failure. -.LP -The return value of -.PN IceListenForWellKnownConnections -is zero for failure and a positive value for success. -.sp -.LP -To close and free the listen objects, use -.PN IceFreeListenObjs . -.LP -.sM -.FD 0 -void IceFreeListenObjs\^(\^\fIcount\fP, \fIlisten_objs\fP\^) -.br - int \fIcount\fP\^; -.br - IceListenObj *\fIlisten_objs\fP\^; -.FN -.IP \fIcount\fP 1i -The number of listen objects. -.IP \fIlisten_objs\fP 1i -The listen objects. -.LP -.eM -.LP -To detect a new connection on a listen object, use -.PN select -on the descriptor associated with the listen object. -.sp -.LP -To obtain the descriptor, use -.PN IceGetListenConnectionNumber . -.LP -.sM -.FD 0 -int IceGetListenConnectionNumber\^(\^\fIlisten_obj\fP\^) -.br - IceListenObj \fIlisten_obj\fP\^; -.FN -.IP \fIlisten_obj\fP 1i -The listen object. -.LP -.eM -.LP -To obtain the network ID string associated with a listen object, use -.PN IceGetListenConnectionString . -.sM -.FD 0 -char *IceGetListenConnectionString\^(\^\fIlisten_obj\fP\^) -.br - IceListenObj \fIlisten_obj\fP\^; -.FN -.IP \fIlisten_obj\fP 1i -The listen object. -.LP -.eM -.LP -A network ID has the following format: -.TS -lw(0.25i) lw(2.5i) lw(1i). - tcp/: or - decnet/:: or - local/: -.TE -.LP -To compose a string containing a list of network IDs separated by commas -(the format recognized by -.PN IceOpenConnection ), -use -.PN IceComposeNetworkIdList . -.LP -.sM -.FD 0 -char *IceComposeNetworkIdList\^(\^\fIcount\fP, \fIlisten_objs\fP\^) -.br - int \fIcount\fP\^; -.br - IceListenObj *\fIlisten_objs\fP\^; -.FN -.IP \fIcount\fP 1i -The number of listen objects. -.IP \fIlisten_objs\fP 1i -The listen objects. -.LP -.eM -.NH 2 -Host Based Authentication for ICE Connections -.XS -\*(SN Host Based Authentication for ICE Connections -.XE -.LP -If authentication fails when a client attempts to open an -ICE connection and the initiating client has not required authentication, -a host based authentication procedure may be invoked to provide -a last chance for the client to connect. Each listen object has such a -callback associated with it, and this callback is set using the -.PN IceSetHostBasedAuthProc -function. -.sM -.FD 0 -void IceSetHostBasedAuthProc\^(\^\fIlisten_obj\fP, \fIhost_based_auth_proc\fP\^) -.br - IceListenObj \fIlisten_obj\fP\^; -.br - IceHostBasedAuthProc \fIhost_based_auth_proc\fP\^; -.FN -.IP \fIlisten_obj\fP 1i -The listen object. -.IP \fIhost_based_auth_proc\fP 1i -The host based authentication procedure. -.LP -.eM -By default, each listen object has no host based authentication procedure -associated with it. -Passing NULL for host_based_auth_proc turns off host based authentication -if it was previously set. -.LP -.sM -.FD 0 -typedef Bool (*IceHostBasedAuthProc) (); - -Bool HostBasedAuthProc\^(\^\fIhost_name\fP\^) -.br - char *\fIhost_name\fP\^; -.FN -.IP \fIhost_name\fP 1i -The host name of the client that tried to open an ICE connection. -.LP -.eM -The host_name argument is a string in the form \fIprotocol\fP\^/\^\fIhostname\fP, -where \fIprotocol\fP\^ is one of {tcp, decnet, local}. -.LP -If -.PN IceHostBasedAuthProc -returns -.PN True , -access will be granted, even though the original -authentication failed. Note that authentication can effectively be -disabled by registering an -.PN IceHostBasedAuthProc , -which always returns -.PN True . -.LP -Host based authentication is also allowed at -.PN ProtocolSetup -time. -The callback is specified in the -.PN IceRegisterForProtocolReply -function (see section 6, ``Protocol Registration''). -.NH 2 -Accepting ICE Connections -.XS -\*(SN Accepting ICE Connections -.XE -.LP -After a connection attempt is detected on a listen object returned by -.PN IceListenForConnections , -you should call -.PN IceAcceptConnection . -This returns a new opaque ICE connection object. -.sM -.FD 0 -IceConn IceAcceptConnection\^(\^\fIlisten_obj\fP, \fI\^status_ret\fP\^) -.br - IceListenObj \fIlisten_obj\fP\^; -.br - IceAcceptStatus *\fIstatus_ret\fP\^; -.FN -.IP \fIlisten_obj\fP 1i -The listen object on which a new connection was detected. -.IP \fIstatus_ret\fP 1i -Return status information. -.LP -.eM -The status_ret argument is set to one of the following values: -.IP \(bu 5 -.PN IceAcceptSuccess -\- the accept operation succeeded, -and the function returns a new connection object. -.IP \(bu 5 -.PN IceAcceptFailure -\- the accept operation failed, and the function returns NULL. -.IP \(bu 5 -.PN IceAcceptBadMalloc -\- a memory allocation failed, and the function returns NULL. -.LP -In general, to detect new connections, you should call -.PN select -on the file descriptors associated with the listen objects. -When a new connection is detected, the -.PN IceAcceptConnection -function should be called. -.PN IceAcceptConnection -may return a new ICE connection that is in a pending state. This is because -before the connection can become valid, authentication may be necessary. -Because the ICE library cannot block and wait for the connection to -become valid (infinite blocking can occur if the connecting client -does not act properly), the application must wait for the connection status -to become valid. -.LP -The following pseudo-code demonstrates how connections are accepted: -.if t .bp -.LP -.Ds 0 -.TA .5i 1i 1.5i 2i -.ta .5i 1i 1.5i 2i -new_ice_conn = IceAcceptConnection (listen_obj, &accept_status); -if (accept_status != IceAcceptSuccess) -{ - close the file descriptor and return -} - -status = IceConnectionStatus (new_ice_conn); -time_start = time_now; - -while (status == IceConnectPending) -{ - select() on {new_ice_conn, all open connections} - - for (each ice_conn in the list of open connections) - if (data ready on ice_conn) - { - status = IceProcessMessages (ice_conn, NULL, NULL); - if (status == IceProcessMessagesIOError) - IceCloseConnection (ice_conn); - } - - if (data ready on new_ice_conn) - { - /* - * IceProcessMessages is called until the connection - * is non-pending. Doing so handles the connection - * setup request and any authentication requirements. - */ - - IceProcessMessages (new_ice_conn, NULL, NULL); - status = IceConnectionStatus (new_ice_conn); - } - else - { - if (time_now - time_start > MAX_WAIT_TIME) - status = IceConnectRejected; - } -} - -if (status == IceConnectAccepted) -{ - Add new_ice_conn to the list of open connections -} -else -{ - IceCloseConnection (new_ice_conn); -} -.De -.LP -After -.PN IceAcceptConnection -is called and the connection has been -validated, the client is ready to receive a -.PN ProtocolSetup -(provided -that -.PN IceRegisterForProtocolReply -was called) or send a -.PN ProtocolSetup -(provided that -.PN IceRegisterForProtocolSetup -was called). -.NH 2 -Closing ICE Connections -.XS -\*(SN Closing ICE Connections -.XE -.LP -To close an ICE connection created with -.PN IceOpenConnection -or -.PN IceAcceptConnection , -use -.PN IceCloseConnection . -.sM -.FD 0 -IceCloseStatus IceCloseConnection\^(\^\fIice_conn\fP\^) -.br - IceConn \fIice_conn\fP\^; -.FN -.IP \fIice_conn\fP 1i -The ICE connection to close. -.LP -.eM -To actually close an ICE connection, the following conditions -must be met: -.IP \(bu 5 -The \fIopen reference count\fP must have reached zero on this ICE connection. -When -.PN IceOpenConnection -is called, it tries to use a previously opened -ICE connection. If it is able to use an existing connection, it increments -the open reference count on the connection by one. -So, to close an ICE connection, each call to -.PN IceOpenConnection -must be matched with a call to -.PN IceCloseConnection . -The connection can be closed only -on the last call to -.PN IceCloseConnection . -.IP \(bu 5 -The \fIactive protocol count\fP\^ must have reached zero. Each time a -.PN ProtocolSetup -succeeds on the connection, the active protocol count -is incremented by one. When the client no longer expects to use the -protocol on the connection, the -.PN IceProtocolShutdown -function should be called, which decrements the active protocol count -by one (see section 8, ``Protocol Setup and Shutdown''). -.IP \(bu 5 -If shutdown negotiation is enabled on the connection, the client on the other -side of the ICE connection must agree to have the connection closed. -.LP -.PN IceCloseConnection -returns one of the following values: -.IP \(bu 5 -.PN IceClosedNow -\- the ICE connection was closed at this time. The watch procedures were -invoked and the connection was freed. -.IP \(bu 5 -.PN IceClosedASAP -\- an IO error had occurred on the connection, but -.PN IceCloseConnection -is being called within a nested -.PN IceProcessMessages . -The watch procedures have been invoked at this time, but the connection -will be freed as soon as possible (when the nesting level reaches zero and -.PN IceProcessMessages -returns a status of -.PN IceProcessMessagesConnectionClosed ). -.IP \(bu 5 -.PN IceConnectionInUse -\- the connection was not closed at this time, because it is being used by -other active protocols. -.IP \(bu 5 -.PN IceStartedShutdownNegotiation -\- the connection was not closed at this time and shutdown negotiation started -with the client on the other side of the ICE connection. When the connection -is actually closed, -.PN IceProcessMessages -will return a status of -.PN IceProcessMessagesConnectionClosed . -.sp -.LP -When it is known that the client on the other side of the ICE connection -has terminated the connection without initiating shutdown negotiation, the -.PN IceSetShutdownNegotiation -function should be called to turn off shutdown negotiation. This will prevent -.PN IceCloseConnection -from writing to a broken connection. -.sM -.FD 0 -void IceSetShutdownNegotiation\^(\^\fIice_conn\fP, \fInegotiate\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - Bool \fInegotiate\fP\^; -.FN -.IP \fIice_conn\fP 1i -A valid ICE connection object. -.IP \fInegotiate\fP 1i -If -.PN False , -shutdown negotiating will be turned off. -.LP -.eM -.LP -To check the shutdown negotiation status of an ICE connection, use -.PN IceCheckShutdownNegotiation . -.sM -.FD 0 -Bool IceCheckShutdownNegotiation\^(\^\fIice_conn\fP\^) -.br - IceConn \fIice_conn\fP\^; -.FN -.IP \fIice_conn\fP 1i -A valid ICE connection object. -.LP -.eM -.PN IceCheckShutdownNegotiation -returns -.PN True -if shutdown negotiation will take place on the connection; -otherwise, it returns -.PN False . -Negotiation is on by default for a connection. It -can only be changed with the -.PN IceSetShutdownNegotiation -function. -.NH 2 -Connection Watch Procedures -.XS -\*(SN Connection Watch Procedures -.XE -.LP -To add a watch procedure that will be called -each time ICElib opens a new connection via -.PN IceOpenConnection -or -.PN IceAcceptConnection -or closes a connection via -.PN IceCloseConnection , -use -.PN IceAddConnectionWatch . -.sM -.FD 0 -Status IceAddConnectionWatch\^(\^\fIwatch_proc\fP, \fIclient_data\fP\^) -.br - IceWatchProc \fIwatch_proc\fP\^; -.br - IcePointer \fIclient_data\fP\^; -.FN -.IP \fIwatch_proc\fP 1i -The watch procedure to invoke when ICElib opens or -closes a connection. -.IP \fIclient_data\fP 1i -This pointer will be passed to the watch procedure. -.LP -.eM -The return value of -.PN IceAddConnectionWatch -is zero for failure, and a positive value for success. -.LP -Note that several calls to -.PN IceOpenConnection -might share the same ICE connection. In such a case, the watch procedure -is only invoked when the connection is first created (after authentication -succeeds). Similarly, because -connections might be shared, the watch procedure is called only if -.PN IceCloseConnection -actually closes the connection (right before the IceConn is freed). -.LP -The watch procedures are very useful for applications that -need to add a file descriptor to a select mask when a new connection -is created and remove the file descriptor when the connection is destroyed. -Because connections are shared, knowing when to add and remove the file -descriptor from the select mask would be difficult without the watch -procedures. -.LP -Multiple watch procedures may be registered with the ICE library. -No assumptions should be made about their order of invocation. -.LP -If one or more ICE connections were already created by the ICE library at the -time the watch procedure is registered, the watch procedure will instantly -be invoked for each of these ICE connections (with the opening argument -set to -.PN True ). -.LP -The watch procedure is of type -.PN IceWatchProc . -.sM -.FD 0 -typedef void (*IceWatchProc)(); - -void WatchProc\^(\^\fIice_conn\fP, \fIclient_data\fP\^, \fIopening\fP\^, \fIwatch_data\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - IcePointer \fIclient_data\fP\^; -.br - Bool \fIopening\fP\^; -.br - IcePointer *\fIwatch_data\fP\^; -.FN -.IP \fIice_conn\fP\^ 1i -The opened or closed ICE connection. Call -.PN IceConnectionNumber -to get the file descriptor associated with this connection. -.IP \fIclient_data\fP\^ 1i -Client data specified in the call to -.PN IceAddConnectionWatch . -.IP \fIopening\fP\^ 1i -If -.PN True , -the connection is being opened. If -.PN False , -the connection is being closed. -.IP \fIwatch_data\fP\^ 1i -Can be used to save a pointer to client data. -.LP -.eM -If opening is -.PN True , -the client should set the *watch_data -pointer to any data it may need to save until the connection is closed -and the watch procedure is -invoked again with opening set to -.PN False . -.sp -.LP -To remove a watch procedure, use -.PN IceRemoveConnectionWatch . -.sM -.FD 0 -void IceRemoveConnectionWatch\^(\^\fIwatch_proc\fP, \fIclient_data\fP\^) -.br - IceWatchProc \fIwatch_proc\fP\^; -.br - IcePointer \fIclient_data\fP\^; -.LP -.FN -.IP \fIwatch_proc\fP 1i -The watch procedure that was passed to -.PN IceAddConnectionWatch . -.IP \fIclient_data\fP 1i -The client_data pointer that was passed to -.PN IceAddConnectionWatch . -.LP -.eM -.NH 1 -Protocol Setup and Shutdown -.XS -\*(SN Protocol Setup and Shutdown -.XE -.LP -To activate a protocol on a given ICE connection, use -.PN IceProtocolSetup . -.LP -.sM -.FD 0 -IceProtocolSetupStatus IceProtocolSetup\^(\^\fIice_conn\fP, \fImy_opcode\fP\^, \fIclient_data\fP\^, \fImust_authenticate\fP\^, -.br - \fImajor_version_ret\fP\^, \fIminor_version_ret\fP\^, \fIvendor_ret\fP\^, \fIrelease_ret\fP\^, \fIerror_length\fP\^, \fIerror_string_ret\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - int \fImy_opcode\fP\^; -.br - IcePointer \fIclient_data\fP\^; -.br - Bool \fImust_authenticate\fP\^; -.br - int *\fImajor_version_ret\fP\^; -.br - int *\fIminor_version_ret\fP\^; -.br - char **\fIvendor_ret\fP\^; -.br - char **\fIrelease_ret\fP\^; -.br - int \fIerror_length\fP\^; -.br - char *\fIerror_string_ret\fP\^; -.FN -.IP \fIice_conn\fP 1i -A valid ICE connection object. -.IP \fImy_opcode\fP 1i -The major opcode of the protocol to be set up, as returned by -.PN IceRegisterForProtocolSetup . -.IP \fIclient_data\fP 1i -The client data stored in this pointer will be passed to the -.PN IcePoProcessMsgProc -callback. -.IP \fImust_authenticate\fP 1i -If -.PN True , -the other client may not bypass authentication. -.IP \fImajor_version_ret\fP 1i -The major version of the protocol to be used is returned. -.IP \fIminor_version_ret\fP 1i -The minor version of the protocol to be used is returned. -.IP \fIvendor_ret\fP 1i -The vendor string specified by the protocol acceptor. -.IP \fIrelease_ret\fP 1i -The release string specified by the protocol acceptor. -.IP \fIerror_length\fP 1i -Specifies the length of the error_string_ret argument passed in. -.IP \fIerror_string_ret\fP 1i -Returns a null-terminated error message, if any. -The error_string_ret argument points to user supplied memory. -No more than error_length bytes are used. -.LP -.eM -The vendor_ret and release_ret strings should be freed with -.PN free -when no longer needed. -.LP -.PN IceProtocolSetup -returns one of the following values: -.IP \(bu 5 -.PN IceProtocolSetupSuccess -\- the major_version_ret, minor_version_ret, vendor_ret, release_ret are set. -.IP \(bu 5 -.PN IceProtocolSetupFailure -or -.PN IceProtocolSetupIOError -\- check error_string_ret for failure reason. -The major_version_ret, minor_version_ret, vendor_ret, release_ret are not set. -.IP \(bu 5 -.PN IceProtocolAlreadyActive -\- this protocol is already active on this connection. -The major_version_ret, minor_version_ret, vendor_ret, release_ret are not set. -.sp -.LP -To notify the ICE library when a given protocol -will no longer be used on an ICE connection, use -.PN IceProtocolShutdown . -.LP -.sM -.FD 0 -Status IceProtocolShutdown\^(\^\fIice_conn\fP, \fImajor_opcode\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - int \fImajor_opcode\fP\^; -.FN -.IP \fIice_conn\fP 1i -A valid ICE connection object. -.IP \fImajor_opcode\fP 1i -The major opcode of the protocol to shut down. -.LP -.eM -The return value of -.PN IceProtocolShutdown -is zero for failure and a positive value for success. -.LP -Failure will occur if the major opcode was never registered OR the protocol -of the major opcode was never activated on the connection. By activated, -we mean that a -.PN ProtocolSetup -succeeded on the connection. -Note that ICE does not define how each sub-protocol triggers a -protocol shutdown. -.NH 1 -Processing Messages -.XS -\*(SN Processing Messages -.XE -.LP -To process incoming messages on an ICE connection, use -.PN IceProcessMessages . -.sM -.FD 0 -IceProcessMessagesStatus IceProcessMessages\^(\^\fIice_conn\fP, \fIreply_wait\fP\^, \fIreply_ready_ret\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - IceReplyWaitInfo *\fIreply_wait\fP\^; -.br - Bool *\fIreply_ready_ret\fP\^; -.FN -.IP \fIice_conn\fP 1i -A valid ICE connection object. -.IP \fIreply_wait\fP 1i -Indicates if a reply is being waited for. -.IP \fIreply_ready_ret\fP 1i -If set to -.PN True -on return, a reply is ready. -.LP -.eM -.PN IceProcessMessages -is used in two ways: -.IP \(bu 5 -In the first, a client may -generate a message and block by calling -.PN IceProcessMessages -repeatedly until it gets its reply. -.IP \(bu 5 -In the second, a -client calls -.PN IceProcessMessages -with reply_wait set to NULL in response to -.PN select -showing that there is data to read on the ICE connection. -The ICE library may process zero or more complete messages. -Note that messages that are not blocked for are always processed by -invoking callbacks. -.LP -.PN IceReplyWaitInfo -contains the major/minor opcodes and sequence number -of the message for which a reply is being awaited. It also contains -a pointer to the reply message to be filled in (the protocol library -should cast this -.PN IcePointer -to the appropriate reply type). In most -cases, the reply will have some fixed-size part, and the client waiting -for the reply will have provided a pointer to a structure to hold -this fixed-size data. If there is variable-length data, it would be -expected that the -.PN IcePoProcessMsgProc -callback will have to allocate additional -memory and store pointer(s) to that memory in the fixed-size -structure. If the entire data is variable length (for example, a single -variable-length string), then the client waiting for the reply would probably -just pass a pointer to fixed-size space to hold a pointer, and the -.PN IcePoProcessMsgProc -callback would allocate the storage and store the pointer. -It is the responsibility of the client receiving the reply to -free up any memory allocated on its behalf. -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - unsigned long sequence_of_request; - int major_opcode_of_request; - int minor_opcode_of_request; - IcePointer reply; -} IceReplyWaitInfo; -.De -.LP -.eM -If reply_wait is not NULL and -.PN IceProcessMessages -has a reply or error to return in response to this reply_wait -(that is, no callback was generated), then the reply_ready_ret argument -will be set to -.PN True . -.LP -If reply_wait is NULL, -then the caller may also pass NULL -for reply_ready_ret and be guaranteed that no value will be stored -in this pointer. -.LP -.PN IceProcessMessages -returns one of the following values: -.IP \(bu 5 -.PN IceProcessMessagesSuccess -\- no error occurred. -.IP \(bu 5 -.PN IceProcessMessagesIOError -\- an IO error occurred, -and the caller must explicitly close the connection by calling -.PN IceCloseConnection . -.IP \(bu 5 -.PN IceProcessMessagesConnectionClosed -\- the ICE connection has been closed (closing of the connection was deferred -because of shutdown negotiation, or because the -.PN IceProcessMessages -nesting level was not zero). Do not attempt -to access the ICE connection at this point, since it has been freed. -.NH 1 -Ping -.XS -\*(SN Ping -.XE -.LP -To send a ``Ping'' message to the client on the other side of the -ICE connection, use -.PN IcePing . -.sM -.FD 0 -Status IcePing\^(\^\fIice_conn\fP, \fIping_reply_proc\fP\^, \fIclient_data\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - IcePingReplyProc \fIping_reply_proc\fP\^; -.br - IcePointer \fIclient_data\fP\^; -.FN -.IP \fIice_conn\fP 1i -A valid ICE connection object. -.IP \fIping_reply_proc\fP 1i -The callback to invoke when the Ping reply arrives. -.IP \fIclient_data\fP 1i -This pointer will be passed to the -.PN IcePingReplyProc -callback. -.LP -.eM -.PN IcePing -returns zero for failure and a positive value for success. -.LP -When -.PN IceProcessMessages -processes the Ping reply, it will invoke the -.PN IcePingReplyProc -callback. -.sM -.FD 0 -typedef void (*IcePingReplyProc)(); - -void PingReplyProc\^(\^\fIice_conn\fP, \fIclient_data\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - IcePointer \fIclient_data\fP\^; -.FN -.IP \fIice_conn\fP 1i -The ICE connection object. -.IP \fIclient_data\fP 1i -The client data specified in the call to -.PN IcePing . -.LP -.eM -.NH 1 -Using ICElib Informational Functions -.XS -\*(SN Using ICElib Informational Functions -.XE -.LP -.sM -.FD 0 -IceConnectStatus IceConnectionStatus\^(\^\fIice_conn\fP\^) -.br - IceConn \fIice_conn\fP\^; -.FN -.eM -.PN IceConnectionStatus -returns the status of an ICE connection. The possible return values are: -.IP \(bu 5 -.PN IceConnectPending -\- the connection is not valid yet (that is, authentication is taking place). -This is only relevant to connections created by -.PN IceAcceptConnection . -.IP \(bu 5 -.PN IceConnectAccepted -\- the connection has been accepted. -This is only relevant to connections created by -.PN IceAcceptConnection . -.IP \(bu 5 -.PN IceConnectRejected -\- the connection had been rejected (that is, authentication failed). -This is only relevant to connections created by -.PN IceAcceptConnection . -.IP \(bu 5 -.PN IceConnectIOError -\- an IO error has occurred on the connection. -.LP -.sM -.FD 0 -char *IceVendor\^(\^\fIice_conn\fP\^) -.br - IceConn \fIice_conn\fP\^; -.FN -.eM -.PN IceVendor -returns the ICE library vendor identification -for the other side of the connection. -The string should be freed with a call to -.PN free -when no longer needed. -.LP -.sM -.FD 0 -char *IceRelease\^(\^\fIice_conn\fP\^) -.br - IceConn \fIice_conn\fP\^; -.FN -.eM -.PN IceRelease -returns the release identification of the ICE library -on the other side of the connection. -The string should be freed with a call to -.PN free -when no longer needed. -.LP -.sM -.FD 0 -int IceProtocolVersion\^(\^\fIice_conn\fP\^) -.br - IceConn \fIice_conn\fP\^; -.FN -.eM -.PN IceProtocolVersion -returns the major version of the ICE protocol on this connection. -.LP -.sM -.FD 0 -int IceProtocolRevision\^(\^\fIice_conn\fP\^) -.br - IceConn \fIice_conn\fP\^; -.FN -.eM -.PN IceProtocolRevision -returns the minor version of the ICE protocol on this connection. -.LP -.sM -.FD 0 -int IceConnectionNumber\^(\^\fIice_conn\fP\^) -.br - IceConn \fIice_conn\fP\^; -.FN -.eM -.PN IceConnectionNumber -returns the file descriptor of this ICE connection. -.LP -.sM -.FD 0 -char *IceConnectionString\^(\^\fIice_conn\fP\^) -.br - IceConn \fIice_conn\fP\^; -.FN -.eM -.PN IceConnectionString -returns the network ID of the client that -accepted this connection. The string should be freed with a call to -.PN free -when no longer needed. -.LP -.sM -.FD 0 -unsigned long IceLastSentSequenceNumber\^(\^\fIice_conn\fP\^) -.br - IceConn \fIice_conn\fP\^; -.FN -.eM -.PN IceLastSentSequenceNumber -returns the sequence number of the last message sent on this ICE connection. -.LP -.sM -.FD 0 -unsigned long IceLastReceivedSequenceNumber\^(\^\fIice_conn\fP\^) -.br - IceConn \fIice_conn\fP\^; -.FN -.eM -.PN IceLastReceivedSequenceNumber -returns the sequence number of the last message received on this -ICE connection. -.LP -.sM -.FD 0 -Bool IceSwapping\^(\^\fIice_conn\fP\^) -.br - IceConn \fIice_conn\fP\^; -.FN -.eM -.PN IceSwapping -returns -.PN True -if byte swapping is necessary when reading messages on the ICE connection. -.LP -.sM -.FD 0 -IcePointer IceGetContext\^(\^\fIice_conn\fP\^) -.br - IceConn \fIice_conn\fP\^; -.FN -.eM -.PN IceGetContext -returns the context associated with a connection created by -.PN IceOpenConnection . -.NH 1 -ICE Messages -.XS -\*(SN ICE Messages -.XE -.LP -All ICE messages have a standard 8-byte header. The ICElib macros that -read and write messages rely on the following naming convention for message -headers: -.LP -.Ds 0 -.TA .5i 1i -.ta .5i 1i - CARD8 major_opcode; - CARD8 minor_opcode; - CARD8 data[2]; - CARD32 length B32; -.De -.LP -The 3rd and 4th bytes of the message header can be used as needed. -The length field is specified in units of 8 bytes. -.NH 2 -Sending ICE Messages -.XS -\*(SN Sending ICE Messages -.XE -.LP -The ICE library maintains an output buffer used for generating messages. -Protocol libraries layered on top of ICE may choose to batch messages -together and flush the output buffer at appropriate times. -.LP -If an IO error has occurred on an ICE connection, all write operations -will be ignored. -For further information, see section 13, ``Error Handling.'' -.sp -.LP -To get the size of the ICE output buffer, use -.PN IceGetOutBufSize . -.sM -.FD 0 -int IceGetOutBufSize\^(\^\fIice_conn\fP\^) -.br - IceConn \fIice_conn\fP\^; -.FN -.IP \fIice_conn\fP 1i -A valid ICE connection object. -.LP -.eM -.LP -To flush the ICE output buffer, use -.PN IceFlush . -.sM -.FD 0 -IceFlush\^(\^\fIice_conn\fP\^) -.br - IceConn \fIice_conn\fP\^; -.FN -.IP \fIice_conn\fP 1i -A valid ICE connection object. -.LP -.eM -Note that the output buffer may be implicitly flushed if there is insufficient -space to generate a message. -.LP -The following macros can be used to generate ICE messages: -.LP -.sM -.FD 0 -IceGetHeader\^(\^\fIice_conn\fP, \fImajor_opcode\fP\^, \fIminor_opcode\fP\^, \fIheader_size\fP\^, \fI\fP\^, \fIpmsg\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - int \fImajor_opcode\fP\^; -.br - int \fIminor_opcode\fP\^; -.br - int \fIheader_size\fP\^; -.br - *\fIpmsg\fP\^; -.FN -.IP \fIice_conn\fP 1i -A valid ICE connection object. -.IP \fImajor_opcode\fP 1i -The major opcode of the message. -.IP \fIminor_opcode\fP 1i -The minor opcode of the message. -.IP \fIheader_size\fP 1i -The size of the message header (in bytes). -.IP \fI\fP 1i -The actual C data type of the message header. -.IP \fIpmsg\fP 1i -The message header pointer. After this macro is called, the -library can store data in the message header. -.LP -.eM -.PN IceGetHeader -is used to set up a message header on an ICE connection. -It sets the major and minor opcodes of the message, and initializes -the message's length to the length of the header. If additional -variable length data follows, the message's length field should be -updated. -.sp -.LP -.sM -.FD 0 -IceGetHeaderExtra\^(\^\fIice_conn\fP, \fImajor_opcode\fP\^, \fIminor_opcode\fP\^, \fIheader_size\fP\^, \fIextra\fP\^, \fI\fP\^, \fIpmsg\fP\^, \fIpdata\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - int \fImajor_opcode\fP\^; -.br - int \fIminor_opcode\fP\^; -.br - int \fIheader_size\fP\^; -.br - int \fIextra\fP\^; -.br - *\fIpmsg\fP\^; -.br - char *\fIpdata\fP\^; -.FN -.IP \fIice_conn\fP 1i -A valid ICE connection object. -.IP \fImajor_opcode\fP 1i -The major opcode of the message. -.IP \fIminor_opcode\fP 1i -The minor opcode of the message. -.IP \fIheader_size\fP 1i -The size of the message header (in bytes). -.IP \fIextra\fP 1i -The size of the extra data beyond the header (in 8-byte units). -.IP \fI\fP 1i -The actual C data type of the message header. -.IP \fIpmsg\fP 1i -The message header pointer. After this macro is called, the -library can store data in the message header. -.IP \fIpdata\fP 1i -Returns a pointer to the ICE output buffer that points -immediately after the message header. The variable length -data should be stored here. If there was not enough room -in the ICE output buffer, pdata is set to NULL. -.LP -.eM -.PN IceGetHeaderExtra -is used to generate a message with a fixed (and relatively small) amount -of variable length data. The complete message must fit in the ICE output -buffer. -.sp -.LP -.sM -.FD 0 -IceSimpleMessage\^(\^\fIice_conn\fP, \fImajor_opcode\fP\^, \fIminor_opcode\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - int \fImajor_opcode\fP\^; -.br - int \fIminor_opcode\fP\^; -.FN -.br -.IP \fIice_conn\fP 1i -A valid ICE connection object. -.IP \fImajor_opcode\fP 1i -The major opcode of the message. -.IP \fIminor_opcode\fP 1i -The minor opcode of the message. -.LP -.eM -.PN IceSimpleMessage -is used to generate a message that is identical -in size to the ICE header message, and has no additional data. -.sp -.LP -.sM -.FD 0 -IceErrorHeader\^(\^\fIice_conn\fP, \fIoffending_major_opcode\fP\^, \fIoffending_minor_opcode\fP\^, \fIoffending_sequence_num\fP\^, -.br - \fIseverity\fP\^, \fIerror_class\fP\^, \fIdata_length\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - int \fIoffending_major_opcode\fP\^; -.br - int \fIoffending_minor_opcode\fP\^; -.br - int \fIoffending_sequence_num\fP\^; -.br - int \fIseverity\fP\^; -.br - int \fIerror_class\fP\^; -.br - int \fIdata_length\fP\^; -.FN -.IP \fIice_conn\fP 1i -A valid ICE connection object. -.IP \fIoffending_major_opcode\fP 1i -The major opcode of the protocol in which an error was detected. -.IP \fIoffending_minor_opcode\fP 1i -The minor opcode of the protocol in which an error was detected. -.IP \fIoffending_sequence_num\fP 1i -The sequence number of the message that caused the error. -.IP \fIseverity\fP 1i -.PN IceCanContinue , -.PN IceFatalToProtocol , -or -.PN IceFatalToConnection . -.IP \fIerror_class\fP 1i -The error class. -.IP \fIdata_length\fP 1i -Length of data (in 8-byte units) to be written after the header. -.LP -.eM -.PN IceErrorHeader -sets up an error message header. -.LP -Note that the two clients connected by ICE may be using different -major opcodes for a given protocol. The offending_major_opcode passed -to this macro is the major opcode of the protocol for the client -sending the error message. -.LP -Generic errors, which are common to all protocols, have classes -in the range 0x8000..0xFFFF. -See the \fIInter-Client Exchange Protocol\fP\^ standard for more details. -.TS -lw(1i) lw(1i). -T{ -.PN IceBadMinor -T} T{ -0x8000 -T} -.sp 4p -T{ -.PN IceBadState -T} T{ -0x8001 -T} -.sp 4p -T{ -.PN IceBadLength -T} T{ -0x8002 -T} -.sp 4p -T{ -.PN IceBadValue -T} T{ -0x8003 -T} -.TE -.LP -Per-protocol errors have classes in the range 0x0000-0x7fff. -.sp -.LP -To write data to an ICE connection, use the -.PN IceWriteData -macro. If the data fits into the ICE output buffer, it is copied there. -Otherwise, the ICE output buffer is flushed and the data is directly sent. -.LP -This macro is used in conjunction with -.PN IceGetHeader -and -.PN IceErrorHeader . -.sp -.LP -.sM -.FD 0 -IceWriteData\^(\^\fIice_conn\fP, \fIbytes\fP\^, \fIdata\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - int \fIbytes\fP\^; -.br - char *\fIdata\fP\^; -.FN -.IP \fIice_conn\fP 1i -A valid ICE connection object. -.IP \fIbytes\fP 1i -The number of bytes to write. -.IP \fIdata\fP 1i -The data to write. -.LP -.eM -.sp -To write data as 16-bit quantities, use -.PN IceWriteData16 . -.sM -.FD 0 -IceWriteData16\^(\^\fIice_conn\fP, \fIbytes\fP\^, \fIdata\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - int \fIbytes\fP\^; -.br - short *\fIdata\fP\^; -.FN -.IP \fIice_conn\fP 1i -A valid ICE connection object. -.IP \fIbytes\fP 1i -The number of bytes to write. -.IP \fIdata\fP 1i -The data to write. -.LP -.eM -.sp -To write data as 32-bit quantities, use -.PN IceWriteData32 . -.sM -.FD 0 -IceWriteData32\^(\^\fIice_conn\fP, \fIbytes\fP\^, \fIdata\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - int \fIbytes\fP\^; -.br - long *\fIdata\fP\^; -.FN -.IP \fIice_conn\fP 1i -A valid ICE connection object. -.IP \fIbytes\fP 1i -The number of bytes to write. -.IP \fIdata\fP 1i -The data to write. -.LP -.eM -.sp -To bypass copying data to the ICE output buffer, use -.PN IceSendData -to directly send data over the network connection. If necessary, the -ICE output buffer is first flushed. -.sM -.FD 0 -IceSendData\^(\^\fIice_conn\fP, \fIbytes\fP\^, \fI(char *) data\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - int \fIbytes\fP\^; -.br - char *\fIdata\fP\^; -.FN -.IP \fIice_conn\fP 1i -A valid ICE connection object. -.IP \fIbytes\fP 1i -The number of bytes to send. -.IP \fIdata\fP 1i -The data to send. -.LP -.eM -.sp -To force 32-bit or 64-bit alignment, use -.PN IceWritePad . -A maximum of 7 pad bytes can be specified. -.sM -.FD 0 -IceWritePad\^(\^\fIice_conn\fP, \fIbytes\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - int \fIbytes\fP\^; -.FN -.IP \fIice_conn\fP 1i -A valid ICE connection object. -.IP \fIbytes\fP 1i -The number of pad bytes. -.LP -.eM -.NH 2 -Reading ICE Messages -.XS -\*(SN Reading ICE Messages -.XE -.LP -The ICE library maintains an input buffer used for reading messages. -If the ICE library chooses to perform nonblocking reads (this is -implementation-dependent), then for every read operation that it makes, -zero or more complete messages may be read into the input buffer. As -a result, for all of the macros described in this section that read -messages, an actual read operation will occur on the connection only if -the data is not already present in the input buffer. -.sp -.LP -To get the size of the ICE input buffer, use -.PN IceGetInBufSize . -.sM -.FD 0 -int IceGetInBufSize\^(\^\fIice_conn\fP\^) -.br - IceConn \fIice_conn\fP\^; -.FN -.IP \fIice_conn\fP 1i -A valid ICE connection object. -.LP -.eM -.LP -When reading messages, care must be taken to check for IO errors. If -any IO error occurs in reading any part of a message, the message should -be thrown out. After using any of the macros described below for reading -messages, the -.PN IceValidIO -macro can be used to check if an IO error occurred on the -connection. After an IO error has occurred on an ICE connection, all -read operations will be ignored. -For further information, see section 13, ``Error Handling.'' -.sp -.LP -.sM -.FD 0 -Bool IceValidIO\^(\^\fIice_conn\fP\^) -.br - IceConn \fIice_conn\fP\^; -.FN -.LP -.eM -.LP -The following macros can be used to read ICE messages. -.sM -.FD 0 -IceReadSimpleMessage\^(\^\fIice_conn\fP, \fI\fP\^, \fIpmsg\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - *\fIpmsg\fP\^; -.FN -.IP \fIice_conn\fP 1i -A valid ICE connection object. -.IP \fI\fP 1i -The actual C data type of the message header. -.IP \fIpmsg\fP 1i -This pointer is set to the message header. -.LP -.eM -.PN IceReadSimpleMessage -is used for messages that are identical in size to the 8-byte ICE header, but -use the spare 2 bytes in the header to encode additional data. Note that the -ICE library always reads in these first 8 bytes, so it can obtain the major -opcode of the message. -.PN IceReadSimpleMessage -simply returns a pointer to these 8 bytes; it does not actually read any data -into the input buffer. -.LP -For a message with variable length data, there are two ways of reading -the message. One method involves reading the complete message in one -pass using -.PN IceReadCompleteMessage . -The second method involves reading the message header (note that this may -be larger than the 8-byte ICE header), then reading -the variable length data in chunks (see -.PN IceReadMessageHeader -and -.PN IceReadData ). -.sp -.LP -.sM -.FD 0 -IceReadCompleteMessage\^(\^\fIice_conn\fP, \fIheader_size\fP\^, \fI\fP\^, \fIpmsg\fP\^, \fIpdata\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - int \fIheader_size\fP\^; -.br - *\fIpmsg\fP\^; -.br - char *\fIpdata\fP\^; -.FN -.IP \fIice_conn\fP 1i -A valid ICE connection object. -.IP \fIheader_size\fP 1i -The size of the message header (in bytes). -.IP \fI\fP 1i -The actual C data type of the message header. -.IP \fIpmsg\fP 1i -This pointer is set to the message header. -.IP \fIpdata\fP 1i -This pointer is set to the variable length data of the message. -.LP -.eM -If the ICE input buffer has sufficient space, -.PN IceReadCompleteMessage -will read the complete message into the -ICE input buffer. Otherwise, a buffer will be allocated to hold the -variable length data. After the call, the pdata argument should -be checked against NULL to make sure that there was sufficient memory -to allocate the buffer. -.sp -.LP -After calling -.PN IceReadCompleteMessage -and processing the message, -.PN IceDisposeCompleteMessage -should be called. -.LP -.sM -.FD 0 -IceDisposeCompleteMessage\^(\^\fIice_conn\fP, \fIpdata\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - char *\fIpdata\fP\^; -.FN -.IP \fIice_conn\fP 1i -A valid ICE connection object. -.IP \fIpdata\fP 1i -The pointer to the variable length data returned in -.PN IceReadCompleteMessage . -.LP -.eM -If a buffer had to be allocated to hold the variable length data (because -it did not fit in the ICE input buffer), it is freed here by ICElib. -.sp -.LP -.sM -.FD 0 -IceReadMessageHeader\^(\^\fIice_conn\fP, \fIheader_size\fP\^, \fI\fP\^, \fIpmsg\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - int \fIheader_size\fP\^; -.br - *\fIpmsg\fP\^; -.FN -.IP \fIice_conn\fP 1i -A valid ICE connection object. -.IP \fIheader_size\fP 1i -The size of the message header (in bytes). -.IP \fI\fP 1i -The actual C data type of the message header. -.IP \fIpmsg\fP 1i -This pointer is set to the message header. -.LP -.eM -.PN IceReadMessageHeader -reads just the message header. The rest -of the data should be read with the -.PN IceReadData -family of macros. This method of reading a message should be used when the -variable length data must be read in chunks. -.sp -.LP -To read data directly into a user supplied buffer, use -.PN IceReadData . -.sM -.FD 0 -IceReadData\^(\^\fIice_conn\fP, \fIbytes\fP\^, \fIpdata\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - int \fIbytes\fP\^; -.br - char *\fIpdata\fP\^; -.FN -.IP \fIice_conn\fP 1i -A valid ICE connection object. -.IP \fIbytes\fP 1i -The number of bytes to read. -.IP \fIpdata\fP 1i -The data is read into this user supplied buffer. -.LP -.eM -.sp -To read data as 16-bit quantities, use -.PN IceReadData16 . -.sM -.FD 0 -IceReadData16\^(\^\fIice_conn\fP, \fIswap\fP\^, \fIbytes\fP\^, \fIpdata\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - Bool \fIswap\fP\^; -.br - int \fIbytes\fP\^; -.br - short *\fIpdata\fP\^; -.FN -.IP \fIice_conn\fP 1i -A valid ICE connection object. -.IP \fIswap\fP 1i -If -.PN True, -the values will be byte swapped. -.IP \fIbytes\fP 1i -The number of bytes to read. -.IP \fIpdata\fP 1i -The data is read into this user supplied buffer. -.LP -.eM -.sp -To read data as 32-bit quantities, use -.PN IceReadData32 . -.sM -.FD 0 -IceReadData32\^(\^\fIice_conn\fP, \fIswap\fP\^, \fIbytes\fP\^, \fIpdata\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - Bool \fIswap\fP\^; -.br - int \fIbytes\fP\^; -.br - long *\fIpdata\fP\^; -.FN -.IP \fIice_conn\fP 1i -A valid ICE connection object. -.IP \fIswap\fP 1i -If -.PN True, -the values will be byte swapped. -.IP \fIbytes\fP 1i -The number of bytes to read. -.IP \fIpdata\fP 1i -The data is read into this user supplied buffer. -.LP -.eM -.sp -To force 32-bit or 64-bit alignment, use -.PN IceReadPad . -A maximum of 7 pad bytes can be specified. -.sM -.FD 0 -IceReadPad\^(\^\fIice_conn\fP, \fIbytes\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - int \fIbytes\fP\^; -.FN -.IP \fIice_conn\fP 1i -A valid ICE connection object. -.IP \fIbytes\fP 1i -The number of pad bytes. -.LP -.eM -.NH 1 -Error Handling -.XS -\*(SN Error Handling -.XE -.LP -There are two default error handlers in ICElib: -.IP \(bu 5 -One to handle typically fatal conditions (for example, -a connection dying because a machine crashed) -.IP \(bu 5 -One to handle ICE-specific protocol errors -.LP -These error handlers can be changed to user-supplied routines if you -prefer your own error handling and can be changed as often as you like. -.sp -.LP -To set the ICE error handler, use -.PN IceSetErrorHandler . -.sM -.FD 0 -IceErrorHandler IceSetErrorHandler\^(\^\fIhandler\fP\^) -.br - IceErrorHandler \fIhandler\fP\^; -.FN -.IP \fIhandler\fP 1i -The ICE error handler. -You should pass NULL to restore the default handler. -.LP -.eM -.PN IceSetErrorHandler -returns the previous error handler. -.LP -The ICE error handler is invoked when an unexpected ICE protocol -error (major opcode 0) is encountered. The action of the default -handler is to print an explanatory message to -.PN stderr -and if the severity is fatal, call -.PN exit -with a nonzero value. If exiting -is undesirable, the application should register its own error handler. -.LP -Note that errors in other protocol -domains should be handled by their respective libraries (these libraries -should have their own error handlers). -.LP -An ICE error handler has the type of -.PN IceErrorHandler . -.sM -.FD 0 -typedef void (*IceErrorHandler)(); - -void ErrorHandler\^(\^\fIice_conn\fP, \fIswap\fP\^, \fIoffending_minor_opcode\fP\^, \fIoffending_sequence_num\fP\^, \fIerror_class\fP\^, -.br - \fIseverity\fP\^, \fIvalues\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - Bool \fIswap\fP\^; -.br - int \fIoffending_minor_opcode\fP\^; -.br - unsigned long \fIoffending_sequence_num\fP\^; -.br - int \fIerror_class\fP\^; -.br - int \fIseverity\fP\^; -.br - IcePointer \fIvalues\fP\^; -.FN -.IP \fIice_conn\fP 1i -The ICE connection object. -.IP \fIswap\fP 1i -A flag that indicates if the values need byte swapping. -.IP \fIoffending_minor_opcode\fP 1i -The ICE minor opcode of the offending message. -.IP \fIoffending_sequence_num\fP 1i -The sequence number of the offending message. -.IP \fIerror_class\fP 1i -The error class of the offending message. -.IP \fIseverity\fP 1i -.PN IceCanContinue , -.PN IceFatalToProtocol , -or -.PN IceFatalToConnection . -.IP \fIvalues\fP 1i -Any additional error values specific to the minor opcode and class. -.LP -.eM -The following error classes are defined at the ICE level: -.LP -.Ds 0 -.PN IceBadMinor -.PN IceBadState -.PN IceBadLength -.PN IceBadValue -.PN IceBadMajor -.PN IceNoAuth -.PN IceNoVersion -.PN IceSetupFailed -.PN IceAuthRejected -.PN IceAuthFailed -.PN IceProtocolDuplicate -.PN IceMajorOpcodeDuplicate -.PN IceUnknownProtocol -.De -.LP -For further information, see -the \fIInter-Client Exchange Protocol\fP\^ standard. -.sp -.LP -To handle fatal I/O errors, use -.PN IceSetIOErrorHandler . -.LP -.sM -.FD 0 -IceIOErrorHandler IceSetIOErrorHandler\^(\^\fIhandler\fP\^) -.br - IceIOErrorHandler \fIhandler\fP\^; -.FN -.IP \fIhandler\fP 1i -The I/O error handler. -You should pass NULL to restore the default handler. -.LP -.eM -.PN IceSetIOErrorHandler -returns the previous IO error handler. -.LP -An ICE I/O error handler has the type of -.PN IceIOErrorHandler . -.LP -.sM -.FD 0 -typedef void (*IceIOErrorHandler)(); - -void IOErrorHandler\^(\^\fIice_conn\fP\^) -.br - IceConn \fIice_conn\fP\^; -.FN -.IP \fIice_conn\fP 1i -The ICE connection object. -.LP -.eM -There are two ways of handling IO errors in ICElib: -.IP \(bu 5 -In the first, the IO error handler does whatever is necessary -to respond to the IO error and then returns, but it does not call -.PN IceCloseConnection . -The ICE connection is given a ``bad IO'' status, and all future reads -and writes to the connection are ignored. The next time -.PN IceProcessMessages -is called it will return a status of -.PN IceProcessMessagesIOError . -At that time, the application should call -.PN IceCloseConnection . -.IP \(bu 5 -In the second, the IO error handler does call -.PN IceCloseConnection , -and then uses the -.PN longjmp -call to get back to the application's main event loop. -The -.PN setjmp -and -.PN longjmp -calls may not work properly on all platforms, -and special care must be taken to avoid memory leaks. -Therefore, this second model is less desirable. -.LP -Before the application I/O error handler is invoked, protocol libraries -that were interested in being notified of I/O errors will have their -.PN IceIOErrorProc -handlers invoked. This handler is set up in the protocol registration -functions (see -.PN IceRegisterForProtocolSetup -and -.PN IceRegisterForProtocolReply ) -and could be used to clean up -state specific to the protocol. -.sp -.LP -.sM -typedef void (*IceIOErrorProc)(); -.LP -.FD 0 -void IOErrorProc\^(\^\fIice_conn\fP\^) -.br - IceConn \fIice_conn\fP\^; -.FN -.IP \fIice_conn\fP 1i -The ICE connection object. -.LP -.eM -Note that every -.PN IceIOErrorProc -callback must return. This is required -because each active protocol must be notified of the broken connection, -and the application IO error handler must be invoked afterwards. -.NH 1 -Multi-Threading Support -.XS -\*(SN Multi-Threading Support -.XE -.LP -To declare that multiple threads in an application will be using the ICE -library, use -.PN IceInitThreads . -.LP -.sM -.FD 0 -Status IceInitThreads\^() -.FN -.LP -.eM -The -.PN IceInitThreads -function must be the first ICElib function a -multi-threaded program calls. It must complete before any other ICElib -call is made. -.PN IceInitThreads -returns a nonzero status if and only if it was able -to initialize the threads package successfully. -It is safe to call -.PN IceInitThreads -more than once, although the threads package will only be initialized once. -.LP -Protocol libraries layered on top of ICElib will have to lock critical -sections of code that access an ICE connection (for example, when -generating messages). Two calls, which are generally implemented as -macros, are provided: -.sM -.FD 0 -IceLockConn\^(\^\fIice_conn\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br -.sp -IceUnlockConn\^(\^\fIice_conn\fP\^) -.br - IceConn \fIice_conn\fP\^; -.FN -.IP \fIice_conn\fP 1i -The ICE connection. -.LP -.eM -.sp -To keep an ICE connection locked across several ICElib calls, applications use -.PN IceAppLockConn -and -.PN IceAppUnlockConn . -.sM -.FD 0 -void IceAppLockConn\^(\^\fIice_conn\fP\^) -.br - IceConn \fIice_conn\fP\^; -.FN -.IP \fIice_conn\fP 1i -The ICE connection to lock. -.LP -.eM -The -.PN IceAppLockConn -function completely locks out other threads using the connection -until -.PN IceAppUnlockConn -is called. Other threads attempting to use ICElib -calls on the connection will block. -If the program has not previously called -.PN IceInitThreads , -.PN IceAppLockConn -has no effect. -.LP -.sM -.FD 0 -void IceAppUnlockConn\^(\^\fIice_conn\fP\^) -.br - IceConn \fIice_conn\fP\^; -.FN -.IP \fIice_conn\fP 1i -The ICE connection to unlock. -.LP -.eM -The -.PN IceAppUnlockConn -function allows other threads to complete ICElib -calls on the connection that were blocked by a previous call to -.PN IceAppLockConn -from this thread. If the program has not previously called -.PN IceInitThreads , -.PN IceAppUnlockConn -has no effect. -.NH 1 -Miscellaneous Functions -.XS -\*(SN Miscellaneous Functions -.XE -.LP -To allocate scratch space (for example, when generating -messages with variable data), use -.PN IceAllocScratch . -Each ICE connection has one scratch space associated with it. -The scratch space starts off as empty and grows as needed. -The contents of the scratch space is not guaranteed to be preserved -after any ICElib function is called. -.LP -.sM -.FD 0 -char *IceAllocScratch\^(\^\fIice_conn\fP, \fIsize\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - unsigned long \fIsize\fP\^; -.FN -.IP \fIice_conn\fP 1i -A valid ICE connection object. -.IP \fIsize\fP 1i -The number of bytes required. -.LP -.eM -Note that the memory returned by -.PN IceAllocScratch -should not be freed by the caller. -The ICE library will free the memory when the ICE connection is closed. -.NH 1 -Acknowledgements -.XS -\*(SN Acknowledgements -.XE -.LP -Thanks to Bob Scheifler for his thoughtful input on the design -of the ICE library. Thanks also to Jordan Brown, Larry Cable, Donna Converse, -Clive Feather, Stephen Gildea, Vania Joloboff, Kaleb Keithley, -Stuart Marks, Hiro Miyamoto, Ralph Swick, Jim VanGilder, and Mike Wexler. -.bp -.XS -Appendix A \- Authentication Utility Functions -.XE -.ce 10 -.sp 5 -\s+2\fBAppendix A\fP\s-2 -.sp -\s+1\fBAuthentication Utility Functions\fP\s-1 -.ce 0 -.sp -.LP -As discussed in this document, the means by which authentication data -is obtained by the ICE library (for -.PN ConnectionSetup -messages or -.PN ProtocolSetup -messages) is implementation-dependent.\(dg -.FS \(dg -The X Consortium's ICElib implementation assumes the presence of an -ICE authority file. -.FE -.LP -This appendix describes some utility functions that manipulate an -ICE authority file. The authority file can be used to pass authentication -data between clients. -.LP -The basic operations on the \&.ICEauthority file are: -.IP \(bu 5 -Get file name -.IP \(bu 5 -Lock -.IP \(bu 5 -Unlock -.IP \(bu 5 -Read entry -.IP \(bu 5 -Write entry -.IP \(bu 5 -Search for entry -.LP -These are fairly low-level operations, and it is expected that a program, -like "iceauth", would -exist to add, remove, and display entries in the file. -.LP -In order to use these utility functions, the -.Pn < X11/ICE/ICEutil.h > -header file must be included. -.LP -An entry in the \&.ICEauthority file is defined by the following data structure: -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - char *protocol_name; - unsigned short protocol_data_length; - char *protocol_data; - char *network_id; - char *auth_name; - unsigned short auth_data_length; - char *auth_data; -} IceAuthFileEntry; -.De -.LP -.eM -The protocol_name member is either ``ICE'' for connection setup authentication -or the subprotocol name, such as ``XSMP''. For each entry, protocol specific -data can be specified in the protocol_data member. This can be used -to search for old entries that need to be removed from the file. -.LP -The network_id member is the network ID of the client accepting authentication -(for example, the network ID of a session manager). -A network ID has the following form: -.TS -lw(0.25i) lw(2.5i) lw(1i). - tcp/: or - decnet/:: or - local/: -.TE -.LP -The auth_name member is the name of the authentication method. -The auth_data member is the actual authentication data, -and the auth_data_length member is the number of bytes in the data. -.sp -.LP -To obtain the default authorization file name, use -.PN IceAuthFileName . -.sM -.FD 0 -char *IceAuthFileName\^() -.FN -.LP -.eM -If the ICEAUTHORITY environment variable if set, this value is returned. -Otherwise, the default authorization file name is $HOME/\&.ICEauthority. -This name is statically allocated and should not be freed. -.LP -To synchronously update the authorization file, the file must -be locked with a call to -.PN IceLockAuthFile . -This function takes advantage of the fact that the -.PN link -system call will fail if the name of the new link already exists. -.sM -.FD 0 -int IceLockAuthFile\^(\^\fIfile_name\fP, \fIretries\fP\^, \fItimeout\fP\^, \fIdead\fP\^) -.br - char *\fIfile_name\fP\^; -.br - int \fIretries\fP\^; -.br - int \fItimeout\fP\^; -.br - long \fIdead\fP\^; -.FN -.IP \fIfile_name\fP 1i -The authorization file to lock. -.IP \fIretries\fP 1i -The number of retries. -.IP \fItimeout\fP 1i -The number of seconds before each retry. -.IP \fIdead\fP 1i -If a lock already exists that is the specified dead seconds old, -it is broken. -A value of zero is used to unconditionally break an old lock. -.LP -.eM -One of three values is returned: -.IP \(bu 5 -.PN IceAuthLockSuccess -\- the lock succeeded. -.IP \(bu 5 -.PN IceAuthLockError -\- a system error occurred, and -.PN errno -may prove useful. -.IP \(bu 5 -.PN IceAuthLockTimeout -\- the specified number of retries failed. -.LP -.sp -To unlock an authorization file, use -.PN IceUnlockAuthFile . -.sM -.FD 0 -void IceUnlockAuthFile\^(\^\fIfile_name\fP\^) -.br - char *\fIfile_name\fP\^; -.FN -.IP \fIfile_name\fP 1i -The authorization file to unlock. -.LP -.eM -.LP -To read the next entry in an authorization file, use -.PN IceReadAuthFileEntry . -.sM -.FD 0 -IceAuthFileEntry *IceReadAuthFileEntry\^(\^\fIauth_file\fP\^) -.br - FILE *\fIauth_file\fP\^; -.FN -.IP \fIauth_file\fP 1i -The authorization file. -.LP -.eM -Note that it is the responsibility of the application to open the file -for reading before calling this function. If an error is encountered, -or there are no more entries to read, NULL is returned. -.LP -Entries should be free with a call to -.PN IceFreeAuthFileEntry . -.LP -.sp -To write an entry in an authorization file, use -.PN IceWriteAuthFileEntry . -.sM -.FD 0 -Status IceWriteAuthFileEntry\^(\^\fIauth_file\fP, \fIentry\fP\^) -.br - FILE *\fIauth_file\fP\^; -.br - IceAuthFileEntry *\fIentry\fP\^; -.FN -.IP \fIauth_file\fP 1i -The authorization file. -.IP \fIentry\fP 1i -The entry to write. -.LP -.eM -Note that it is the responsibility of the application to open the file -for writing before calling this function. The function returns a nonzero -status if the operation was successful. -.LP -.sp -To search the default authorization file for an entry that matches a given -protocol_name/network_id/auth_name tuple, use -.PN IceGetAuthFileEntry . -.sM -.FD 0 -IceAuthFileEntry *IceGetAuthFileEntry\^(\^\fIprotocol_name\fP, \fInetwork_id\fP\^, \fIauth_name\fP\^) -.br - char *\fIprotocol_name\fP\^; -.br - char *\fInetwork_id\fP\^; -.br - char *\fIauth_name\fP\^; -.FN -.IP \fIprotocol_name\fP 1i -The name of the protocol to search on. -.IP \fInetwork_id\fP 1i -The network ID to search on. -.IP \fIauth_name\fP 1i -The authentication method to search on. -.LP -.eM -If -.PN IceGetAuthFileEntry -fails to find such an entry, NULL is returned. -.LP -.sp -To free an entry returned by -.PN IceReadAuthFileEntry -or -.PN IceGetAuthFileEntry , -use -.PN IceFreeAuthFileEntry . -.sM -.FD 0 -void IceFreeAuthFileEntry\^(\^\fIentry\fP\^) -.br - IceAuthFileEntry *\fIentry\fP\^; -.FN -.IP \fIentry\fP 1i -The entry to free. -.LP -.eM -.bp -.XS -Appendix B \- MIT-MAGIC-COOKIE-1 Authentication -.XE -.ce 10 -.sp 5 -\s+2\fBAppendix B\fP\s-2 -.sp -\s+1\fBMIT-MAGIC-COOKIE-1 Authentication\fP\s-1 -.ce 0 -.sp -.LP -The X Consortium's ICElib implementation supports a simple -MIT-MAGIC-COOKIE-1 authentication scheme using the authority file utilities -described in Appendix A. -.LP -In this model, an application, such as a session manager, obtains a -magic cookie by calling -.PN IceGenerateMagicCookie , -and then stores it in the user's local \&.ICEauthority file -so that local clients can connect. In order to allow remote clients to -connect, some remote execution mechanism should be used to store the -magic cookie in the user's \&.ICEauthority file on a remote machine. -.LP -In addition to storing the magic cookie in the \&.ICEauthority file, the -application needs to call the -.PN IceSetPaAuthData -function in order to store the magic cookie in memory. When it comes time -for the MIT-MAGIC-COOKIE-1 authentication procedure to accept or reject the -connection, it will compare the magic cookie presented by the requestor to -the magic cookie in memory. -.LP -.sM -.FD 0 -char *IceGenerateMagicCookie\^(\^\fIlength\fP\^) -.br - int \fIlength\fP\^; -.FN -.IP \fIlength\fP 1i -The desired length of the magic cookie. -.LP -.eM -.LP -The magic cookie returned will be null-terminated. If memory can not be -allocated for the magic cookie, the function will return NULL. -Otherwise, the magic cookie should be freed with a call to -.PN free . -.LP -.sp -To store the authentication data in memory, use -.PN IceSetPaAuthData . -Currently, this function is only used for MIT-MAGIC-COOKIE-1 -authentication, but it may be used for additional authentication -methods in the future. -.sM -.FD 0 -void IceSetPaAuthData\^(\^\fInum_entries\fP, \fIentries\fP\^) -.br - int \fInum_entries\fP\^; -.br - IceAuthDataEntry *\fIentries\fP\^; -.FN -.IP \fInum_entries\fP 1i -The number of authentication data entries. -.IP \fIentries\fP 1i -The list of authentication data entries. -.LP -.eM -Each entry has associated with it a protocol name -(for example, ``ICE'' for ICE connection setup authentication, -``XSMP'' for session management authentication), a network ID for the -``accepting'' client, an authentication name (for example, MIT-MAGIC-COOKIE-1), -and authentication data. The ICE library -will merge these entries with previously set entries, based on the -(protocol_name, network_id, auth_name) tuple. -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - char *protocol_name; - char *network_id; - char *auth_name; - unsigned short auth_data_length; - char *auth_data; -} IceAuthDataEntry; -.De -.LP -.eM -.EH '''' -.OH '''' -.YZ 3 diff --git a/doc/xorg-docs/specs/ICE/ice.ms b/doc/xorg-docs/specs/ICE/ice.ms deleted file mode 100644 index 7d31ea6e5..000000000 --- a/doc/xorg-docs/specs/ICE/ice.ms +++ /dev/null @@ -1,1878 +0,0 @@ -.\" Use tbl macros.t ice.ms | troff -ms -.\" $XdotOrg: xc/doc/specs/ICE/ice.ms,v 1.2 2004/04/23 18:42:16 eich Exp $ -.\" -.\" TODO: -.\" Think about connector/listener originator/answerer terminology. -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.\" -.\" Disable hyphenation. I hate it. -.hy 0 -.de hy -.. -.\" A couple of macros to standardize things and make them -.\" easy to type. -.de Ss \" Begin state - .Ss -.KS -.LP -\fC\\$1\fP\^: -.br -.. -.de St \" Transition - .St "condition" message -.RS -\\$1 -.PN \\$2 -\(-> \fC\\$3\fP -.RE -.. -.de Se \" End state - .Se -.LP -.KE -.. -.de Ms \" Start message header - .Ms messagename -.sM -.PN \\$1 -.RS -.. -.de Mf \" Field in message - .Mf name; types follow on separate line(s) -.\".br -.IP "\fI\\$1\fP\^:" "\w'\fI\\$1\fP\^:'u+1" -.. -.de Mc \" Field Continuation - .Mc; description follows on separate line(s) -.br -.\" \h'1i' -.. -.de Ma \" Message addendum - .Ma title; contents follow -.IP "\\$1:" "\w'\\$1:'u+1" -.. -.de Me \" End of message header - .Me -.RE -.LP -.eM -.. -.de Es \" Start Encoding - .Es messagename -.KS -.LP -.nf -.PN \\$1 -.ta .2i .5i 2.0i -.. -.de Ee \" End Encoding - .Ee -.fi -.LP -.KE -.. -.\" -.\" --- cT --- centered title; centers $1, adds TOC entry unless $2 is "no" -.\" -.de cT -\\& \" filler so that the following .sp really leaves a space -.sp 1 -.ce 1 -\\s+1\\fB\\$1\\fP\\s-1 -.sp 1 -.if !'\\$2'no' \{\ -.XS \\n(PN -\\$1 -.XE -\} -.. -.ps 10 -.nr PS 10 -\& -.TL -\s+2\fBInter-Client Exchange (ICE) Protocol\fP\s-2 -.sp -Version 1.1 -.sp -X Consortium Standard -.sp -X Version 11, Release 6.8 - - - -.AU -Robert Scheifler -.AI -X Consortium, Inc. -.AU -Jordan Brown -.AI -Quarterdeck Office Systems - - - -.AB -.LP -There are numerous possible protocols that can be used for communication -among clients. They have many similarities and common needs, including -authentication, -version negotiation, -data typing, and -connection management. The -.I -Inter-Client Exchange -.R -(ICE) protocol is intended to provide a framework for building such -protocols. Using ICE reduces the complexity of designing new protocols and -allows the sharing of many aspects of the implementation. -.AE -.LP -.bp -\& -.sp 8 -.LP -.DS C -.if n Copyright (c) 1993, 1994 X Consortium -.if t Copyright \(co 1993, 1994 X Consortium -.DE -.sp 3 -.LP -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -.LP -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -.LP -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. -.sp 5 -X Window System is a trademark of The Open Group. -.EH '\fBInter-Client Exchange Protocol\fP''\fBX11, Release 6.8\fP' -.OH '\fBInter-Client Exchange Protocol\fP''\fBX11, Release 6.8\fP' -.bp 1 -.EF ''\fB % \fP'' -.OF ''\fB % \fP'' -.nH 1 "Purpose and Goals" -.LP -In discussing a variety of protocols \(em existing, under development, and -hypothetical \(em it was noted that they have many elements in common. Most -protocols need mechanisms for authentication, for -version negotiation, -and for setting up and taking down connections. There are also -cases where the same two parties need to talk to each other using multiple -protocols. For example, an embedding relationship between two parties is -likely to require the simultaneous use of session management, data transfer, -focus negotiation, and command notification protocols. While these are -logically separate protocols, it is desirable for them to share as many -pieces of implementation as possible. -.LP -The -.I -Inter-Client Exchange -.R -(ICE) protocol provides a generic framework for building protocols on top of -reliable, byte-stream transport connections. It provides basic mechanisms -for setting up and shutting down connections, for performing authentication, -for negotiating -versions, -and for reporting errors. The -protocols running within an ICE connection are referred to here as -.I subprotocols. -ICE provides facilities for each subprotocol to do its own version -negotiation, authentication, and error reporting. In addition, if two -parties are communicating using several different subprotocols, ICE will -allow them to share the same transport layer connection. -.nH 1 "Overview of the protocol" -.LP -Through some mechanism outside ICE, two parties make themselves known to -each other and agree that they would like to communicate using an ICE -subprotocol. ICE assumes that this negotation includes some notion by which -the parties will decide which is the \*Qoriginating\*U party and which is -the \*Qanswering\*U party. The negotiation will also need to provide the -originating party with a name or address of the answering party. Examples -of mechanisms by which parties can make themselves known to each other are -the X selection mechanism, environment -variables, and shared files. -.LP -The originating party first determines whether there is an existing ICE -connection between the two parties. If there is, it can re-use the existing -connection and move directly to the setup of the subprotocol. If no ICE -connection exists, the originating party will open a transport connection to -the answering party and will start ICE connection setup. -.LP -The ICE connection setup dialog consists of three major parts: byte order -exchange, authentication, and connection information exchange. The first -message in each direction is a -.PN ByteOrder -message telling which byte order will be used by the sending party in -messages that it sends. After that, the originating party sends a -.PN ConnectionSetup -message giving information about itself (vendor name and release number) and -giving a list of ICE version numbers it is capable of supporting and a list -of authentication schemes it is willing to accept. Authentication is -optional. If no authentication is required, the answering party responds -with a -.PN ConnectionReply -message giving information about itself, and the connection setup is complete. -.LP -If the connection setup is to be authenticated, the answering party will -respond with an -.PN AuthenticationRequired -message instead of a -.PN ConnectionReply -message. The parties then exchange -.PN AuthenticationReply -and -.PN AuthenticationNextPhase -messages until authentication is complete, at which time the answering party -finally sends its -.PN ConnectionReply -message. -.LP -Once an ICE connection is established (or an existing connection reused), -the originating party starts subprotocol negotiation by sending a -.PN ProtocolSetup -message. This message gives the name of the subprotocol that the parties -have agreed to use, along with the ICE major opcode that the originating -party has assigned to that subprotocol. Authentication can also occur for -the subprotocol, independently of authentication for the connection. -Subprotocol authentication is optional. If there is no subprotocol -authentication, the answering party responds with a -.PN ProtocolReply -message, giving the ICE major opcode that it has assigned -for the subprotocol. -.LP -Subprotocols are authenticated independently of each other, because they may -have differing security requirements. If there is authentication for this -particular subprotocol, it takes place before the answering party emits the -.PN ProtocolReply -message, and it uses the -.PN AuthenticationRequired , -.PN AuthenticationReply , -and -.PN AuthenticationNextPhase -messages, just as for the connection authentication. Only when subprotocol -authentication is complete does the answering party send its -.PN ProtocolReply -message. -.LP -When a subprotocol has been set up and authenticated, the two parties can -communicate using messages defined by the subprotocol. Each message has two -opcodes: a major opcode and a minor opcode. Each party will send messages -using the major opcode it has assigned in its -.PN ProtocolSetup -or -.PN ProtocolReply -message. These opcodes will, in general, not be the same. For a particular -subprotocol, each party will need to keep track of two major opcodes: the -major opcode it uses when it sends messages, and the major opcode it expects -to see in messages it receives. The minor opcode values and semantics are -defined by each individual subprotocol. -.LP -Each subprotocol will have one or more messages whose semantics are that the -subprotocol is to be shut down. Whether this is done unilaterally or is -performed through negotiation is defined by each subprotocol. Once a -subprotocol is shut down, its major opcodes are removed from -use; no further messages on this subprotocol should be sent until the -opcode is reestablished with -.PN ProtocolSetup . -.LP -ICE has a facility to negotiate the closing of the connection when there are -no longer any active subprotocols. When either party decides that no -subprotocols are active, it can send a -.PN WantToClose -message. If the other party agrees to close the connection, it can simply -do so. If the other party wants to keep the connection open, it can -indicate its desire by replying with a -.PN NoClose -message. -.\" XXX - Note that it's likely that both parties will WantToClose at once. -.LP -It should be noted that the party that initiates the connection isn't -necessarily the same as the one that initiates setting up a subprotocol. -For example, suppose party A connects to party B. Party A will issue the -.PN ConnectionSetup -message and party B will respond with a -.PN ConnectionReply -message. (The authentication steps are omitted here for brevity.) -Typically, party A will also issue the -.PN ProtocolSetup -message and expect a -.PN ProtocolReply -from party B. Once the connection is established, however, either party may -initiate the negotiation of a subprotocol. Continuing this example, party B -may decide that it needs to set up a subprotocol for communication with -party A. Party B would issue the -.PN ProtocolSetup -message and expect a -.PN ProtocolReply -from party A. -.nH 1 "Data Types" -.LP -ICE messages contain several types of data. Byte order is negotiated in -the initial connection messages; in general data is sent in the sender's -byte order and the receiver is required to swap it appropriately. -In order to support 64-bit machines, ICE messages -are padded to multiples of 8 bytes. All messages are designed so that -fields are \*Qnaturally\*U aligned on 16-, 32-, and 64-bit boundaries. -The following formula gives the number of bytes necessary -to pad \fIE\fP bytes to the next multiple of \fIb\fP\^: -.DS -pad(\fIE\fP, \fIb\fP\^) = (\fIb\fP \- (\fIE\fP mod \fIb\fP\^)) mod \fIb\fP -.DE -.nH 2 "Primitive Types" -.LP -.TS H -expand; -lB lB -l lw(3.5i). -_ -.sp 6p -Type Name Description -.sp 6p -_ -.sp 6p -.TH -.R -CARD8 8-bit unsigned integer -CARD16 16-bit unsigned integer -CARD32 32-bit unsigned integer -BOOL T{ -.PN False -or -.PN True -T} -LPCE T{ -A character from the X Portable Character Set in Latin Portable Character -Encoding -T} -.sp 6p -_ -.TE -.KS -.nH 2 "Complex Types" -.LP -.TS H -expand; -lB lB -l lw(3.5i). -_ -.sp 6p -Type Name Type -.sp 6p -_ -.sp 6p -.TH -.R -VERSION [Major, minor: CARD16] -STRING LISTofLPCE -.sp 6p -_ -.TE -.KE -LISTof denotes a counted collection of . The exact encoding -varies depending on the context; see the encoding section. -.nH 1 "Message Format" -.LP -All ICE messages include the following information: -.TS H -expand; -cB lB - -l lw(3.5i). -_ -.sp 6p -Field Type Description -.sp 6p -_ -.sp 6p -.TH -CARD8 protocol major opcode -CARD8 protocol minor opcode -CARD32 length of remaining data in 8-byte units -.sp 6p -_ -.TE -.LP -The fields are as follows: -.LP -Protocol major opcode -.RS -This specifies what subprotocol the message is intended for. Major opcode -0 is reserved for ICE control messages. The major opcodes of other -subprotocols are dynamically assigned and exchanged at protocol -negotiation time. -.RE -.LP -Protocol minor opcode -.RS -This specifies what protocol-specific operation is to be performed. -Minor opcode 0 is reserved for Errors; other values are protocol-specific. -.RE -.LP -Length of data in 8-byte units -.RS -This specifies the length of the information following the first 8 bytes. -Each message-type has a different format, and will need to be separately -length-checked against this value. As every data item has either an -explicit length, or an implicit length, this can be easily accomplished. -Messages that have too little or too much data indicate a serious -protocol failure, and should result in a -.PN BadLength -error. -.RE -.nH 1 "Overall Protocol Description" -.LP -Every message sent in a given direction has an implicit sequence number, -starting with 1. Sequence numbers are global to the connection; independent -sequence numbers are \fInot\fP maintained for each protocol. -.LP -Messages of a given major-opcode (i.e., of a given protocol) must be -responded to (if a response is called for) in order by the receiving party. -Messages from different protocols can be responded to in arbitrary order. -.LP -Minor opcode 0 in every protocol is for reporting errors. At most one error -is generated per request. If more than one error condition is encountered -in processing a request, the choice of which error is returned is -implementation-dependent. -.Ms Error -.Mf offending-minor-opcode -CARD8 -.Mf severity -.Pn { CanContinue , -.PN FatalToProtocol , -.PN FatalToConnection } -.Mf sequence-number -CARD32 -.Mf class -CARD16 -.Mf value(s) - -.Me -This message is sent to report an error in response to a message -from any protocol. -The -.PN Error -message -exists in all protocol major-opcode spaces; it -is minor-opcode zero in every protocol. The minor opcode of the -message that caused the error is reported, as well as the sequence -number of that message. -The severity indicates the sender's behavior following -the identification of the error. -.PN CanContinue -indicates the sender is willing to accept additional messages for this -protocol. -.PN FatalToProcotol -indicates the sender is unwilling to accept further messages for this -protocol but that messages for other protocols may be accepted. -.PN FatalToConnection -indicates the sender is unwilling to accept any further -messages for any protocols on the connection. The sender -is required to conform to specified severity conditions -for generic and ICE (major opcode 0) errors; see Sections 6.1 -and 6.2. -The class defines the generic class of -error. Classes are specified separately for each protocol (numeric -values can mean different things in different protocols). The error -values, if any, and their types vary with the specific error class -for the protocol. -.LP -.\" XXX -.\" (Asynchronous errors \(em errors not associated with a previous -.\" message??? If so, offending-minor and sequence = 0.) -.nH 1 "ICE Control Subprotocol \(em Major Opcode 0" -.LP -Each of the ICE control opcodes is described below. -Most of the messages have additional information included beyond the -description above. The additional information is appended to the message -header and -the length field is computed accordingly. -.LP -In the following message descriptions, \*QExpected errors\*U indicates -errors that may occur in the normal course of events. Other errors -(in particular -.PN BadMajor , -.PN BadMinor , -.PN BadState , -.PN BadLength , -.PN BadValue , -.PN ProtocolDuplicate , -and -.PN MajorOpcodeDuplicate ) -might occur, but generally indicate a serious implementation failure on -the part of the -errant -peer. -.Ms ByteOrder -.Mf byte-order -.Pn { MSBfirst , -.PN LSBfirst } -.Me -Both parties must send this message before sending any other, -including errors. This message specifies the byte order that -will be used on subsequent messages sent by this party. -.LP -Note: If the receiver detects an error in this message, -it must be sure to send its own -.PN ByteOrder -message before sending the -.PN Error . -.Ms ConnectionSetup -.Mf versions -LISTofVERSION -.Mf must-authenticate -BOOL -.Mf authentication-protocol-names -LISTofSTRING -.Mf vendor -STRING -.Mf release -STRING -.LP -.Ma "Responses" -.PN ConnectionReply , -.PN AuthenticationRequired . -(See note) -.Ma "Expected errors" -.PN NoVersion , -.PN SetupFailed , -.PN NoAuthentication , -.PN AuthenticationRejected , -.Mc -.PN AuthenticationFailed . -.Me -The party that initiates the connection -(the -one that does the \*Qconnect()\*U) -must send this -message -as the second message (after -.PN ByteOrder ) -on startup. -.LP -Versions gives a list, in decreasing order of preference, of the -protocol versions this party is capable of speaking. This document -specifies major version 1, minor version 0. -.LP -If must-authenticate is -.PN True , -the initiating party demands authentication; the accepting party \fImust\fP -pick an authentication scheme and use it. In this case, the only valid -response is -.PN AuthenticationRequired . -.LP -If must-authenticate is -.PN False , -the accepting party may choose an authentication mechanism, use a -host-address-based authentication scheme, or skip authentication. -When must-authenticate is -.PN False , -.PN ConnectionReply -and -.PN AuthenticationRequired -are both valid responses. If a host-address-based authentication scheme is -used, -.PN AuthenticationRejected -and -.PN AuthenticationFailed -errors are possible. -.LP -Authentication-protocol-names specifies a (possibly null, if -must-authenticate is -.PN False ) -list of authentication protocols the party is willing to perform. If -must-authenticate is -.PN True , -presumably the party will offer only authentication mechanisms -allowing mutual authentication. -.LP -Vendor gives the name of the vendor of this ICE implementation. -.LP -Release gives the release identifier of this ICE implementation. -.LP -.Ms AuthenticationRequired -.Mf authentication-protocol-index -CARD8 -.Mf data - -.LP -.Ma "Response" -.PN AuthenticationReply . -.Ma "Expected errors" -.PN AuthenticationRejected , -.PN AuthenticationFailed . -.Me -This message is sent in response to a -.PN ConnectionSetup -or -.PN ProtocolSetup -message to specify that authentication is to be done and what authentication -mechanism is to be used. -.LP -The authentication protocol is specified by a 0-based index into the list -of names given in the -.PN ConnectionSetup -or -.PN ProtocolSetup . -Any protocol-specific data that might be required is also sent. -.Ms AuthenticationReply -.Mf data - -.LP -.Ma "Responses" -.PN AuthenticationNextPhase , -.PN ConnectionReply , -.PN ProtocolReply . -.Ma "Expected errors" -.PN AuthenticationRejected , -.PN AuthenticationFailed , -.PN SetupFailed . -.Me -This message is sent in response to an -.PN AuthenticationRequired -or -.PN AuthenticationNextPhase -message, to -supply authentication data as defined by the authentication protocol -being used. -.LP -Note that this message is sent by the party that initiated the current -negotiation \(em the party that sent the -.PN ConnectionSetup -or -.PN ProtocolSetup -message. -.LP -.PN AuthenticationNextPhase -indicates that more is to be done to complete the authentication. -If the authentication is complete, -.PN ConnectionReply -is appropriate if the current authentication handshake is the result of a -.PN ConnectionSetup , -and a -.PN ProtocolReply -is appropriate if it is the result of a -.PN ProtocolSetup . -.Ms AuthenticationNextPhase -.Mf data - -.LP -.Ma "Response" -.PN AuthenticationReply . -.Ma "Expected errors" -.PN AuthenticationRejected , -.PN AuthenticationFailed . -.Me -This message is sent in response to an -.PN AuthenticationReply -message, to supply authentication data as defined by the authentication -protocol being used. -.Ms ConnectionReply -.Mf version-index -CARD8 -.Mf vendor -STRING -.Mf release -STRING -.Me -This message is sent in response to a -.PN ConnectionSetup -or -.PN AuthenticationReply -message to indicate that the authentication handshake is complete. -.LP -Version-index gives a 0-based index into the list of versions offered in -the -.PN ConnectionSetup -message; it specifies the version of the ICE protocol that both parties -should speak for the duration of the connection. -.LP -Vendor gives the name of the vendor of this ICE implementation. -.LP -Release gives the release identifier of this ICE implementation. -.Ms ProtocolSetup -.Mf protocol-name -STRING -.Mf major-opcode -CARD8 -.Mf versions -LISTofVERSION -.Mf vendor -STRING -.Mf release -STRING -.Mf must-authenticate -BOOL -.Mf authentication-protocol-names -LISTofSTRING -.LP -.Ma "Responses" -.PN AuthenticationRequired , -.PN ProtocolReply . -.Ma "Expected errors" -.PN UnknownProtocol , -.PN NoVersion , -.PN SetupFailed , -.PN NoAuthentication , -.Mc -.PN AuthenticationRejected , -.PN AuthenticationFailed . -.Me -This message is used to initiate negotiation of -a protocol and establish any authentication -specific to it. -.LP -Protocol-name gives the name of the protocol the party wishes -to speak. -.LP -Major-opcode gives the opcode that the party will use in messages -it sends. -.LP -Versions gives a list of version numbers, in decreasing order of -preference, that the party is willing to speak. -.LP -Vendor and release are identification strings with semantics defined -by the specific protocol being negotiated. -.LP -If must-authenticate is -.PN True , -the initiating party demands authentication; the accepting party \fImust\fP -pick an authentication scheme and use it. In this case, the only valid -response is -.PN AuthenticationRequired . -.LP -If must-authenticate is -.PN False , -the accepting party may choose an authentication mechanism, use a -host-address-based authentication scheme, or skip authentication. -When must-authenticate is -.PN False , -.PN ProtocolReply -and -.PN AuthenticationRequired -are both valid responses. If a host-address-based authentication scheme is -used, -.PN AuthenticationRejected -and -.PN AuthenticationFailed -errors are possible. -.LP -Authentication-protocol-names specifies a (possibly null, if -must-authenticate is -.PN False ) -list of authentication protocols the party is willing to perform. If -must-authenticate is -.PN True , -presumably the party will offer only authentication mechanisms -allowing mutual authentication. -.Ms ProtocolReply -.Mf major-opcode -CARD8 -.Mf version-index -CARD8 -.Mf vendor -STRING -.Mf release -STRING -.Me -This message is sent in response to a -.PN ProtocolSetup -or -.PN AuthenticationReply -message to indicate that the authentication handshake is complete. -.LP -Major-opcode gives the opcode that this party will use in -messages that it sends. -.LP -Version-index gives a 0-based index into the list of versions offered in the -.PN ProtocolSetup -message; it specifies the version of the protocol that both -parties should speak for the duration of the connection. -.LP -Vendor and release are identification strings with semantics defined -by the specific protocol being negotiated. -.LP -.Ms Ping -.Ma "Response" -.PN PingReply . -.Me -This message is used to test if the connection is still functioning. -.Ms PingReply -.Me -This message is sent in response to a -.PN Ping -message, indicating that the connection is still functioning. -.Ms WantToClose -.Ma "Responses" -.PN WantToClose , -.PN NoClose , -.PN ProtocolSetup . -.Me -This message is used to initiate a possible close of the connection. -The sending party has noticed that, as a result of mechanisms specific -to each protocol, there are no active -protocols -left. -There are -four possible scenarios arising from this request: -.IP (1) 5 -The receiving side noticed too, and has already sent a -.PN WantToClose . -On receiving a -.PN WantToClose -while already attempting to shut down, each party should simply close the -connection. -.IP (2) -The receiving side hasn't noticed, but agrees. It closes -the connection. -.IP (3) -The receiving side has a -.PN ProtocolSetup -\*Qin flight,\*U in which case it is to ignore -.PN WantToClose -and the party sending -.PN WantToClose -is to abandon the shutdown attempt when it receives the -.PN ProtocolSetup . -.IP (4) -The receiving side wants the connection kept open for some -reason not specified by the ICE protocol, in which case it -sends -.PN NoClose . -.LP -See the state transition diagram for additional information. -.Ms NoClose -.Me -This message is sent in response to a -.PN WantToClose -message to indicate that the responding -party does not want the connection closed at -this time. The receiving party should not close the -connection. Either party may again initiate -.PN WantToClose -at some future time. -.nH 2 "Generic Error Classes" -.LP -These errors should be used by all protocols, as applicable. -For ICE (major opcode 0), -.PN FatalToProtocol -should -be interpreted as -.PN FatalToConnection. -.Ms BadMinor -.Mf offending-minor-opcode - -.Mf severity -.PN FatalToProtocol -or -.PN CanContinue -(protocol's discretion) -.Mf values -(none) -.Me -Received a message with an unknown minor opcode. -.br -.ne 9 -.Ms BadState -.Mf offending-minor-opcode - -.Mf severity -.PN FatalToProtocol -or -.PN CanContinue -(protocol's discretion) -.Mf values -(none) -.Me -Received a message with a valid minor opcode which is not appropriate -for the current state of the protocol. -.Ms BadLength -.Mf offending-minor-opcode - -.Mf severity -.PN FatalToProtocol -or -.PN CanContinue -(protocol's discretion) -.Mf values -(none) -.Me -Received a message with a bad length. The length of the message is -longer or shorter than required to contain the data. -.Ms BadValue -.Mf offending-minor-opcode - -.Mf severity -.PN CanContinue -.Mf values -CARD32 Byte offset to offending value in offending message -.Mc -CARD32 Length of offending value -.Mc - Offending value -.Me -Received a message with a bad value specified. -.nH 2 "ICE Error Classes" -.LP -These errors are all major opcode 0 errors. -.Ms BadMajor -.Mf offending-minor-opcode - -.Mf severity -.PN CanContinue -.Mf values -CARD8 Opcode -.Me -The opcode given is not one that has been registered. -.Ms NoAuthentication -.Mf offending-minor-opcode -.PN ConnectionSetup , -.PN ProtocolSetup -.Mf severity -.PN ConnectionSetup -\(-> -.PN FatalToConnection -.Mc -.PN ProtocolSetup -\(-> -.PN FatalToProtocol -.Mf values -(none) -.Me -None of the authentication protocols offered are available. -.Ms NoVersion -.Mf offending-minor-opcode -.PN ConnectionSetup , -.PN ProtocolSetup -.Mf severity -.PN ConnectionSetup -\(-> -.PN FatalToConnection -.Mc -.PN ProtocolSetup -\(-> -.PN FatalToProtocol -.Mf values -(none) -.Me -None of the protocol versions offered are available. -.\" .Ms SetupFailed -.sM -.PN SetupFailed -.RS -.Mf offending-minor-opcode -.PN ConnectionSetup , -.PN ProtocolSetup , -.PN AuthenticationReply -.Mf severity -.PN ConnectionSetup -\(-> -.PN FatalToConnection -.Mc -.PN ProtocolSetup -\(-> -.PN FatalToProtocol -.Mc -.PN AuthenticationReply -\(-> -.PN FatalToConnection -if authenticating a connection, otherwise -.PN FatalToProtocol -.Mf values -STRING reason -.Me -The sending side is unable to accept the -new connection or new protocol for a reason other than authentication -failure. Typically this error will be a result of inability to allocate -additional resources on the sending side. The reason field will give a -human-interpretable message providing further detail on the type of failure. -.br -.Ms AuthenticationRejected -.Mf offending-minor-opcode -.PN AuthenticationReply , -.PN AuthenticationRequired , -.br -.PN AuthenticationNextPhase -.Mf severity -.PN FatalToProtocol -.Mf values -STRING reason -.Me -Authentication rejected. The peer has failed to properly -authenticate itself. -The reason field will give a human-interpretable message -providing further detail. -.Ms AuthenticationFailed -.Mf offending-minor-opcode -.PN AuthenticationReply , -.PN AuthenticationRequired , -.br -.PN AuthenticationNextPhase -.Mf severity -.PN FatalToProtocol -.Mf values -STRING reason -.Me -Authentication failed. -.PN AuthenticationFailed -does not imply that the authentication was rejected, as -.PN AuthenticationRejected -does. Instead it means that the sender was unable to complete -the authentication for some other reason. (For instance, it -may have been unable to contact an authentication server.) -The reason field will give a human-interpretable message -providing further detail. -.br -.ne 10 -.Ms ProtocolDuplicate -.Mf offending-minor-opcode -.PN ProtocolSetup -.Mf severity -.PN FatalToProtocol -(but see note) -.Mf values -STRING protocol name -.Me -The protocol name was already registered. This is fatal to -the \*Qnew\*U protocol being set up by -.PN ProtocolSetup , -but it does not affect the existing registration. -.Ms MajorOpcodeDuplicate -.Mf offending-minor-opcode -.PN ProtocolSetup -.Mf severity -.PN FatalToProtocol -(but see note) -.Mf values -CARD8 opcode -.Me -The major opcode specified was already registered. This is -fatal to the \*Qnew\*U protocol being set up by -.PN ProtocolSetup , -but it does not affect the existing registration. -.Ms UnknownProtocol -.Mf offending-minor-opcode -.PN ProtocolSetup -.Mf severity -.PN FatalToProtocol -.Mf values -STRING protocol name -.Me -The protocol specified is not supported. -.nH 1 "State Diagrams" -.LP -Here are the state diagrams for the party that initiates the connection: -.Ss start -.\" .St "connect to other end, send" ConnectionSetup conn_wait -.RS -connect to other end, send -.PN ByteOrder , -.PN ConnectionSetup -\(-> \fCconn_wait\fP -.RE -.Se -.Ss conn_wait -.St "receive" ConnectionReply stasis -.St "receive" AuthenticationRequired conn_auth1 -.St "receive" Error quit -.St "receive , send" Error quit -.Se -.Ss conn_auth1 -.St "if good auth data, send" AuthenticationReply conn_auth2 -.St "if bad auth data, send" Error quit -.Se -.Ss conn_auth2 -.St "receive" ConnectionReply stasis -.St "receive" AuthenticationNextPhase conn_auth1 -.St "receive" Error quit -.St "receive , send" Error quit -.Se -.br -.ne 22 -Here are top-level state transitions for the party that accepts connections. -.Ss listener -.\" .St "accept connection" "" init_wait -.RS -accept connection \(-> \fCinit_wait\fP -.RE -.Se -.Ss init_wait -.\" .St "receive ByteOrder, ConnectionSetup" auth_ask -.RS -receive -.PN ByteOrder , -.PN ConnectionSetup -\(-> \fCauth_ask\fP -.RE -.St "receive , send" Error quit -.Se -.Ss auth_ask -.\" .St "send ByteOrder, ConnectionReply" stasis -.RS -send -.PN ByteOrder , -.PN ConnectionReply -\(-> \fCstasis\fP -.RE -.St "send" AuthenticationRequired auth_wait -.St "send" Error quit -.Se -.Ss auth_wait -.St "receive" AuthenticationReply auth_check -.St "receive , send" Error quit -.Se -.Ss auth_check -.St "if no more auth needed, send" ConnectionReply stasis -.St "if good auth data, send" AuthenticationNextPhase auth_wait -.St "if bad auth data, send" Error quit -.Se -.sp 1 -Here are the top-level state transitions for all parties after the initial -connection establishment subprotocol. -.LP -Note: this is not quite the truth for branches out from stasis, in -that multiple conversations can be interleaved on the connection. -.Ss stasis -.St "send" ProtocolSetup proto_wait -.St "receive" ProtocolSetup proto_reply -.St "send" Ping ping_wait -.\" .St "receive Ping, send PingReply" stasis -.RS -receive -.PN Ping , -send -.PN PingReply -\(-> \fCstasis\fP -.RE -.St "receive" WantToClose shutdown_attempt -.St "receive , send" Error stasis -.St "all protocols shut down, send" WantToClose close_wait -.Se -.Ss proto_wait -.St "receive" ProtocolReply stasis -.St "receive" AuthenticationRequired give_auth1 -.\" .St "receive Error, give up on this protocol" stasis -.RS -receive -.PN Error , -give up on this protocol \(-> \fCstasis\fP -.RE -.St "receive" WantToClose proto_wait -.Se -.Ss give_auth1 -.St "if good auth data, send" AuthenticationReply give_auth2 -.\" .St "if bad auth data, send Error, give up on this protocol" stasis -.RS -if bad auth data, send -.PN Error , -give up on this protocol \(-> \fCstasis\fP -.RE -.St "receive" WantToClose give_auth1 -.Se -.Ss give_auth2 -.St "receive" ProtocolReply stasis -.St "receive" AuthenticationNextPhase give_auth1 -.\" .St "receive Error, give up on this protocol" stasis -.RS -receive -.PN Error , -give up on this protocol \(-> \fCstasis\fP -.RE -.St "receive" WantToClose give_auth2 -.Se -.Ss proto_reply -.St "send" ProtocolReply stasis -.St "send" AuthenticationRequired take_auth1 -.\" .St "send Error, give up on this protocol" stasis -.RS -send -.PN Error , -give up on this protocol \(-> \fCstasis\fP -.RE -.Se -.Ss take_auth1 -.St "receive" AuthenticationReply take_auth2 -.\" .St "receive Error, give up on this protocol" stasis -.RS -receive -.PN Error , -give up on this protocol \(-> \fCstasis\fP -.RE -.Se -.Ss take_auth2 -.\" .St "if good auth data" take_auth3 -.RS -if good auth data \(-> \fCtake_auth3\fP -.RE -.\" .St "if bad auth data, send Error, give up on this protocol" stasis -.RS -if bad auth data, send -.PN Error , -give up on this protocol \(-> \fCstasis\fP -.RE -.Se -.Ss take_auth3 -.St "if no more auth needed, send" ProtocolReply stasis -.St "if good auth data, send" AuthenticationNextPhase take_auth1 -.\" .St "if bad auth data, send Error, give up on this protocol" stasis -.RS -if bad auth data, send -.PN Error , -give up on this protocol \(-> \fCstasis\fP -.RE -.Se -.Ss ping_wait -.St "receive" PingReply stasis -.Se -.Ss quit -.RS -\(-> close connection -.RE -.Se -.sp 1 -Here are the state transitions for shutting down the connection: -.Ss shutdown_attempt -.St "if want to stay alive anyway, send" NoClose stasis -.\" .St "else" quit -.RS -else \(-> \fCquit\fP -.RE -.Se -.Ss close_wait -.St "receive" ProtocolSetup proto_reply -.St "receive" NoClose stasis -.St "receive" WantToClose quit -.\" .St "connection close" quit -.RS -connection close \(-> \fCquit\fP -.RE -.Se -.nH 1 "Protocol Encoding" -.LP -In the encodings below, the first column is the number of bytes occupied. -The second column is either the type (if the value is variable) or the -actual value. The third column is the description of the value (e.g., -the parameter name). Receivers must ignore bytes that are designated -as unused or pad bytes. -.LP -This document describes major version 1, minor version 0 of the ICE protocol. -.LP -LISTof indicates some number of repetitions of , with no -additional padding. The number of repetitions must be specified elsewhere -in the message. -.KS -.nH 2 "Primitive Types" -.LP -.TS H -expand; -lB lB lB -l l lw(3.5i). -_ -.sp 6p -Type Name Length (bytes) Description -.sp 6p -_ -.sp 6p -.TH -.R -CARD8 1 8-bit unsigned integer -CARD16 2 16-bit unsigned integer -CARD32 4 32-bit unsigned integer -LPCE 1 T{ -A character from the X Portable Character Set in Latin Portable Character -Encoding -T} -.sp 6p -_ -.TE -.KE -.KS -.nH 2 "Enumerations" -.LP -.TS H -expand; -lB lB lB -l l lw(3.5i). -_ -.sp 6p -Type Name Value Description -.sp 6p -_ -.sp 6p -.TH -.R -BOOL 0 T{ -.PN False -T} - 1 T{ -.PN True -T} -.sp 6p -_ -.TE -.KE -.KS -.nH 2 "Compound Types" -.LP -.TS H -expand; -lB lB lB lB -l l l lw(3.5i). -_ -.sp 6p -Type Name Length (bytes) Type Description -.sp 6p -_ -.sp 6p -.TH -.R -VERSION - 2 CARD16 Major version number - 2 CARD16 Minor version number -STRING - 2 CARD16 length of string in bytes - n LISTofLPCE string - p unused, p = pad(n+2, 4) -.sp 6p -_ -.TE -.KE -.ne 6 -.nH 2 "ICE Minor opcodes" -.LP -.RS -.TS -lB cB -l n. -_ -.sp 6p -Message Name Encoding -.sp 6p -_ -.sp 6p -Error 0 -ByteOrder 1 -ConnectionSetup 2 -AuthenticationRequired 3 -AuthenticationReply 4 -AuthenticationNextPhase 5 -ConnectionReply 6 -ProtocolSetup 7 -ProtocolReply 8 -Ping 9 -PingReply 10 -WantToClose 11 -NoClose 12 -.sp 6p -_ -.TE -.RE -.\" XXX - This is hokey, but I don't think you can nest .KS/.KE. -.ne 16 -.nH 2 "Message Encoding" -.LP -.Es Error - 1 CARD8 major-opcode - 1 0 Error - 2 CARD16 class - 4 (n+p)/8+1 length - 1 CARD8 offending-minor-opcode - 1 severity: - 0 CanContinue - 1 FatalToProtocol - 2 FatalToConnection - 2 unused - 4 CARD32 sequence number of erroneous message - n value(s) - p pad, p = pad(n,8) -.Ee -.Es ByteOrder - 1 0 ICE - 1 1 ByteOrder - 1 byte-order: - 0 LSBfirst - 1 MSBfirst - 1 unused - 4 0 length -.Ee -.Es ConnectionSetup - 1 0 ICE - 1 2 ConnectionSetup - 1 CARD8 Number of versions offered - 1 CARD8 Number of authentication protocol names offered - 4 (i+j+k+m+p)/8+1 length - 1 BOOL must-authenticate - 7 unused - i STRING vendor - j STRING release - k LISTofSTRING authentication-protocol-names - m LISTofVERSION version-list - p unused, p = pad(i+j+k+m,8) -.Ee -.Es AuthenticationRequired - 1 0 ICE - 1 3 AuthenticationRequired - 1 CARD8 authentication-protocol-index - 1 unused - 4 (n+p)/8+1 length - 2 n length of authentication data - 6 unused - n data - p unused, p = pad(n,8) -.Ee -.Es AuthenticationReply - 1 0 ICE - 1 4 AuthenticationReply - 2 unused - 4 (n+p)/8+1 length - 2 n length of authentication data - 6 unused - n data - p unused, p = pad(n,8) -.Ee -.Es AuthenticationNextPhase - 1 0 ICE - 1 5 AuthenticationNextPhase - 2 unused - 4 (n+p)/8+1 length - 2 n length of authentication data - 6 unused - n data - p unused, p = pad(n,8) -.Ee -.Es ConnectionReply - 1 0 ICE - 1 6 ConnectionReply - 1 CARD8 version-index - 1 unused - 4 (i+j+p)/8 length - i STRING vendor - j STRING release - p unused, p = pad(i+j,8) -.Ee -.Es ProtocolSetup - 1 0 ICE - 1 7 ProtocolSetup - 1 CARD8 major-opcode - 1 BOOL must-authenticate - 4 (i+j+k+m+n+p)/8+1 length - 1 CARD8 Number of versions offered - 1 CARD8 Number of authentication protocol names offered - 6 unused - i STRING protocol-name - j STRING vendor - k STRING release - m LISTofSTRING authentication-protocol-names - n LISTofVERSION version-list - p unused, p = pad(i+j+k+m+n,8) -.Ee -.Es ProtocolReply - 1 0 ICE - 1 8 ProtocolReply - 1 CARD8 version-index - 1 CARD8 major-opcode - 4 (i+j+p)/8 length - i STRING vendor - j STRING release - p unused, p = pad(i+j, 8) -.Ee -.Es Ping - 1 0 ICE - 1 9 Ping - 2 0 unused - 4 0 length -.Ee -.Es PingReply - 1 0 ICE - 1 10 PingReply - 2 0 unused - 4 0 length -.Ee -.Es WantToClose - 1 0 ICE - 1 11 WantToClose - 2 0 unused - 4 0 length -.Ee -.Es NoClose - 1 0 ICE - 1 12 NoClose - 2 0 unused - 4 0 length -.Ee -.nH 2 "Error Class Encoding" -.LP -Generic errors have classes in the range 0x8000\-0xFFFF, and -subprotocol-specific errors are in the range 0x0000\-0x7FFF. -.nH 3 "Generic Error Class Encoding" -.LP -.TS -lB cB -l n. -_ -.sp 6p -Class Encoding -.sp 6p -_ -.sp 6p -BadMinor 0x8000 -BadState 0x8001 -BadLength 0x8002 -BadValue 0x8003 -.sp 6p -_ -.TE -.nH 3 "ICE-specific Error Class Encoding" -.LP -.TS -lB cB -l n. -_ -.sp 6p -Class Encoding -.sp 6p -_ -.sp 6p -BadMajor 0 -NoAuthentication 1 -NoVersion 2 -SetupFailed 3 -AuthenticationRejected 4 -AuthenticationFailed 5 -ProtocolDuplicate 6 -MajorOpcodeDuplicate 7 -UnknownProtocol 8 -.sp 6p -_ -.TE -.bp -.\" Set registers to number the appendixes A.1, B.1, C.1, ... -.nr H1 0 -.af H1 A -.cT "Appendix A" no -.nH 1 "Modification History" -.nH 2 "Release 6 to Release 6.1" -.LP -Release 6.1 added the ICE X rendezvous protocol (Appendix B) and -updated the document version to 1.1. -.nH 2 "Release 6.1 to Release 6.3" -.LP -Release 6.3 added the listen on well known ports feature. -.bp -.cT "Appendix B" no -.nH 1 "ICE X Rendezvous Protocol" -.nH 2 "Introduction" -.LP -The ICE X rendezvous protocol is designed to answer the need posed -in Section 2 for one mechanism by which two clients interested in -communicating via ICE are able to exchange the necessary information. -This protocol is appropriate for any two ICE clients who also have X -connections to the same X server. -.nH 2 "Overview of ICE X Rendezvous" -.LP -The ICE X Rendezvous Mechanism requires clients willing to act as ICE -originating parties to pre-register the ICE subprotocols they support in an -ICE_PROTOCOLS property on their top-level window. Clients willing to -act as ICE answering parties then send an ICE_PROTOCOLS X -.PN ClientMessage -event to the ICE originating parties. This -.PN ClientMessage -event identifies -the ICE network IDs of the ICE answering party as well as the ICE -subprotocol it wishes to speak. Upon receipt of this message the ICE -originating party uses the information to establish an ICE connection -with the ICE answering party. -.nH 2 "Registering Known Protocols" -.LP -Clients willing to act as ICE originating parties preregister -the ICE subprotocols they support in a list of atoms held by an -ICE_PROTOCOLS property on their top-level window. The name of each -atom listed in ICE_PROTOCOLS must be of the form -ICE_INITIATE_\fIpname\fP where \fIpname\fP is the name of the ICE -subprotocol the ICE originating party is willing to speak, as would be -specified in an ICE -.PN ProtocolSetup -message. -.LP -Clients with an ICE_INITIATE_\fIpname\fP atom in the ICE_PROTOCOLS property -on their top-level windows must respond to -.PN ClientMessage -events of -type ICE_PROTOCOLS specifying ICE_INITIATE_\fIpname\fP. If a client does not -want to respond to these client message events, it should -remove the ICE_INITIATE_\fIpname\fP atom from its ICE_PROTOCOLS property -or remove the ICE_PROTOCOLS property entirely. -.nH 2 "Initiating the Rendezvous" -.LP -To initiate the rendezvous a client acting as an ICE answering -party sends an X -.PN ClientMessage -event of type ICE_PROTOCOLS to an ICE -originating party. This ICE_PROTOCOLS client message contains the -information the ICE originating party needs to identify the ICE -subprotocol the two parties will use as well as the ICE network -identification string of the ICE answering party. -.LP -Before the ICE answering party sends the client message event it must -define a text property on one of its windows. This text property -contains the ICE answering party's ICE network identification string -and will be used by ICE originating parties to determine the ICE -answering party's list of ICE network IDs. -.LP -The property name will normally be ICE_NETWORK_IDS, but may be any -name of the ICE answering party's choosing. The format for this text -property is as follows: -.ne 7 -.TS -lB lB -lw(1.25i) lw(4i) . -_ -.sp 6p -Field Value -.sp 6p -_ -.sp 6p -type XA_STRING -format 8 -value comma-separated list of ICE network IDs -.sp 6p -_ -.TE -.LP -Once the ICE answering party has established this text property on one -of its windows, it initiates the rendezvous by sending an -ICE_PROTOCOLS -.PN ClientMessage -event to an ICE originating party's -top-level window. This event has the following format -and must only be sent to windows that have pre-registered the ICE -subprotocol in an ICE_PROTOCOLS property on their top-level window. -.ne 13 -.TS -lB lB -lw(1.25i) lw(4i) . -_ -.sp 6p -Field Value -.sp 6p -_ -.sp 6p -message_type Atom = "ICE_PROTOCOLS" -format 32 -data.l[0] Atom identifying the ICE subprotocol to speak -data.l[1] Timestamp -data.l[2] T{ -ICE answering party's window ID with -ICE network IDs text property -T} -data.l[3] T{ -Atom naming text property containing the ICE -answering party's ICE network IDs -T} -data.l[4] Reserved. Must be 0. -.sp 6p -_ -.TE -The name of the atom in data.l[0] must be of the form -ICE_INITIATE_\fIpname\fP, where \fIpname\fP is the name of the ICE -subprotocol the ICE answering party wishes to speak. -.LP -When an ICE originating party receives a -.PN ClientMessage -event of type -ICE_PROTOCOLS specifying ICE_INITIATE_\fIpname\fP it can initiate an ICE -connection with the ICE answering party. -To open this connection the client retrieves the ICE answering -party's ICE network IDs from the window specified in data.l[2] using -the text property specified in data.l[3]. -.LP -If the connection attempt fails for any reason, the client must -respond to the client message event by sending a return -.PN ClientMessage -event to the window specified in data.l[2]. This return -event has the following format: -.ne 13 -.TS -lB lB -lw(1.25i) lw(4i) . -_ -.sp 6p -Field Value -.sp 6p -_ -.sp 6p -message_type Atom = "ICE_INITIATE_FAILED" -format 32 -data.l[0] Atom identifying the ICE subprotocol requested -data.l[1] Timestamp -data.l[2] T{ -Initiating party's window ID -(holding ICE_PROTOCOLS) -T} -data.l[3] int: reason for failure -data.l[4] Reserved, must be 0 -.sp 6p -_ -.TE -The values of data.l[0] and data.l[1] are copied directly from the -client message event the client received. -.LP -The value in data.l[2] is -the id of the window to which the ICE_PROTOCOLS.ICE_INITIATE_\fIpname\fP -client message event was sent. -.LP -Data.l[3] has one of the following values: -.LP -.ne 21 -.TS -lB cBw(0.6i) lB -l n lw(4i) . -_ -.sp 6p -Value Encoding Description -.sp 6p -_ -.sp 6p -T{ -.PN OpenFailed -T} 1 T{ -The client was unable to open the connection -(e.g. a call to IceOpenConnection() failed). If the -client is able to distinguish authentication or -authorization errors from general errors, then -the preferred reply is -.PN AuthenticationFailed -for authorization errors. -T} -.sp 4p -T{ -.PN AuthenticationFailed -T} 2 T{ -Authentication or authorization of the -connection or protocol setup was refused. -This reply will be given only if the client is -able to distinguish it from -.PN OpenFailed ; -otherwise -.PN OpenFailed -will be returned. -T} -.sp 4p -T{ -.PN SetupFailed -T} 3 T{ -The client was unable to initiate the specified -protocol on the connection (e.g. a call to -IceProtocolSetup() failed). -T} -.sp 4p -T{ -.PN UnknownProtocol -T} 4 T{ -The client does not recognize the requested -protocol. (This represents a semantic error -on the part of the answering party.) -T} -.sp 4p -T{ -.PN Refused -T} 5 T{ -The client was in the process of removing -ICE_INITIATE_\fIpname\fP from its ICE_PROTOCOLS list -when the client message was sent; the client no -longer is willing to establish the specified ICE -communication. -T} -.sp 6p -_ -.TE -.sp -.NT "Advice to Implementors" -Clients willing to act as ICE originating parties must update the -ICE_PROTOCOLS property on their top-level windows to include the -ICE_INITIATE_\fIpname\fP atom(s) identifying the ICE subprotocols they -speak. The method a client uses to update the ICE_PROTOCOLS property -to include ICE_INITIATE_\fIpname\fP atoms is implementation dependent, but -the client must ensure the integrity of the list to prevent the -accidental omission of any atoms previously in the list. -.LP -When setting up the ICE network IDs text property on one of its -windows, the ICE answering party can determine its comma-separated -list of ICE network IDs by calling IceComposeNetworkIdList() after -making a call to IceListenForConnections(). The method an ICE -answering party uses to find the top-level windows of clients willing -to act as ICE originating parties is dependent upon the nature of the -answering party. Some may wish to use the approach of requiring the -user to click on a client's window. Others wishing to find existing -clients without requiring user interaction might use something similar -to the XQueryTree() method used by several freely-available -applications. In order for the ICE answering party to become -automatically aware of new clients willing to originate ICE -connections, the ICE answering party might register for -SubstructureNotify events on the root window of the display. When it -receives a SubstructureNotify event, the ICE answering party can check -to see if it was the result of the creation of a new client top-level -window with an ICE_PROTOCOLS property. -.LP -In any case, before attempting to use this ICE X Rendezvous Mechanism -ICE answering parties wishing to speak ICE subprotocol \fIpname\fP should -check for the ICE_INITIATE_\fIpname\fP atom in the ICE_PROTOCOLS property on -a client's top-level window. A client that does not include an -ICE_INITIATE_\fIpname\fP atom in a ICE_PROTOCOLS property on some top-level -window should be assumed to ignore -.PN ClientMessage -events of type -ICE_PROTOCOLS specifying ICE_INITIATE_\fIpname\fP for ICE subprotocol -\fIpname\fP. -.NE -.nH 2 "ICE Subprotocol Versioning" -.LP -Although the version of the ICE subprotocol could be passed in the -client message event, ICE provides more a flexible version negotiation -mechanism than will fit within a single -.PN ClientMessage -event. Because -of this, ICE subprotocol versioning is handled within the ICE protocol -setup phase. -.NT Example -Clients wish to communicate with each other via an ICE subprotocol -known as "RAP V1.0". In RAP terminology one party, the "agent", -communicates with other RAP-enabled applications on demand. The -user may direct the agent to establish communication with a specific -application by clicking on the application's window, or the agent may -watch for new application windows to be created and automatically -establish communication. -.LP -During startup the ICE answering party (the agent) first calls -IceRegisterForProtocolReply() with a list of -the versions (i.e., 1.0) of RAP the agent can speak. The answering -party then calls IceListenForConnections() followed by -IceComposeNetworkIdList() and stores the resulting ICE network IDs -string in a text property on one of its windows. -.LP -When the answering party (agent) finds a client with which it wishes to -speak, it checks to see if the ICE_INITIATE_RAP atom is in the ICE_PROTOCOLS -property on the client's top-level window. If it is present the agent -sends the client's top-level window an ICE_PROTOCOLS client -message event as described above. When the client receives the client -message event and is willing to originate an ICE connection using RAP, -it performs an IceRegisterForProtocolSetup() with a list of the -versions of RAP the client can speak. The client then retrieves -the agent's ICE network ID from the property and window specified by -the agent in the client message event and calls IceOpenConnection(). -After this call succeeds the client calls IceProtocolSetup() specifying -the RAP protocol. During this -process, ICE calls the RAP protocol routines that handle the version -negotiation. -.LP -Note that it is not necessary for purposes of this rendezvous that -the client application call any ICElib functions prior to receipt -of the client message event. -.NE -.YZ 1 diff --git a/doc/xorg-docs/specs/Makefile.am b/doc/xorg-docs/specs/Makefile.am new file mode 100644 index 000000000..dbe46517f --- /dev/null +++ b/doc/xorg-docs/specs/Makefile.am @@ -0,0 +1 @@ +SUBDIRS=CTEXT ICCCM Xext XLFD Xserver diff --git a/doc/xorg-docs/specs/Makefile.in b/doc/xorg-docs/specs/Makefile.in new file mode 100644 index 000000000..a87e1d9b0 --- /dev/null +++ b/doc/xorg-docs/specs/Makefile.in @@ -0,0 +1,484 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = .. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = specs +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(install_sh) -d +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-exec-recursive install-info-recursive \ + install-recursive installcheck-recursive installdirs-recursive \ + pdf-recursive ps-recursive uninstall-info-recursive \ + uninstall-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ +ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APP_MAN_DIR = @APP_MAN_DIR@ +APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHANGELOG_CMD = @CHANGELOG_CMD@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CWARNFLAGS = @CWARNFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ +DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ENABLE_DOCS_FALSE = @ENABLE_DOCS_FALSE@ +ENABLE_DOCS_TRUE = @ENABLE_DOCS_TRUE@ +ENABLE_SPECS_FALSE = @ENABLE_SPECS_FALSE@ +ENABLE_SPECS_TRUE = @ENABLE_SPECS_TRUE@ +EXEEXT = @EXEEXT@ +FILE_MAN_DIR = @FILE_MAN_DIR@ +FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ +FOP = @FOP@ +GREP = @GREP@ +HAVE_FOP_FALSE = @HAVE_FOP_FALSE@ +HAVE_FOP_TRUE = @HAVE_FOP_TRUE@ +HAVE_STYLESHEETS_FALSE = @HAVE_STYLESHEETS_FALSE@ +HAVE_STYLESHEETS_TRUE = @HAVE_STYLESHEETS_TRUE@ +HAVE_XMLTO_FALSE = @HAVE_XMLTO_FALSE@ +HAVE_XMLTO_TEXT_FALSE = @HAVE_XMLTO_TEXT_FALSE@ +HAVE_XMLTO_TEXT_TRUE = @HAVE_XMLTO_TEXT_TRUE@ +HAVE_XMLTO_TRUE = @HAVE_XMLTO_TRUE@ +INSTALL_CMD = @INSTALL_CMD@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIB_MAN_DIR = @LIB_MAN_DIR@ +LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +MAN_SUBSTS = @MAN_SUBSTS@ +MISC_MAN_DIR = @MISC_MAN_DIR@ +MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ +VERSION = @VERSION@ +XMLTO = @XMLTO@ +XORG_MAN_PAGE = @XORG_MAN_PAGE@ +XORG_SGML_PATH = @XORG_SGML_PATH@ +XSL_STYLESHEET = @XSL_STYLESHEET@ +ac_ct_CC = @ac_ct_CC@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +SUBDIRS = CTEXT ICCCM Xext XLFD Xserver +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign specs/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --foreign specs/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +uninstall-info-am: + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(mkdir_p) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-recursive + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-info-am + +uninstall-info: uninstall-info-recursive + +.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ + clean clean-generic clean-recursive ctags ctags-recursive \ + distclean distclean-generic distclean-recursive distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + maintainer-clean-recursive mostlyclean mostlyclean-generic \ + mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-info-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/doc/xorg-docs/specs/PM/PM_spec b/doc/xorg-docs/specs/PM/PM_spec deleted file mode 100644 index b371d46db..000000000 --- a/doc/xorg-docs/specs/PM/PM_spec +++ /dev/null @@ -1,153 +0,0 @@ - Proxy Management Protocol - Draft Version 1.0 - Ralph Mor, X Consortium - - -The Proxy Management Protocol is an ICE based protocol that provides a way -for application servers to easily locate proxy services available to them. - -Typically, a service called a "proxy manager" is responsible for resolving -requests for proxy services, starting new proxies when appropriate, and -keeping track of all of the available proxy services. The proxy manager -strives to reuse existing proxies whenever possible. - -In order to request a proxy service, the GET_PROXY_ADDR message is sent to -the proxy manager. The proxy manager will in turn forward this message to -a proxy that it thinks can satisfy the request. - -GET_PROXY_ADDR - proxy-service : STRING - server-address : STRING - host-address : STRING - options : STRING - auth-data-len : CARD16 - auth-name : STRING or None - auth-data : LISTofCARD8 or None - - --> - - status : CARD8 - proxy-address : STRING - failure-reason : STRING - - -proxy-service is the name of the proxy service to be requested, for example -"LBX". proxy-service is a case insensitive string. - -server-address is the network address of the target server. The format of -the address is specific to proxy-service. For example, for a proxy service -of "LBX", the address would be an X display address (e.g, "wkstn.x.org:0"). - -host-address is the network address of the host on which the proxied -application will run. This information might be used by the proxy to -restrict access to a specific host. - -options are proxy specific options that will be passed to the proxy. The -details of these options are not specified here. Their syntax and -semantics are defined by each proxy service. - -If auth-data-len is nonzero, then auth-name and auth-data contain -authentication or authorization information that should be passed to -the proxy. The proxy will typically use this to authenticate and -authorize itself to the target server. The details of how the -auth fields are used are specific to each proxy service. - - -After sending GET_PROXY_ADDR the proxy manager expects a reply from -the proxy. The status field of the reply indicates if the request can -be satisfied. - -If status is Success, proxy-address will contain the network address of the -proxy willing to handle this request. The format of the proxy address is -specific to the proxy service being used. For example, for a proxy service -of "LBX", the proxy address would be the X display address of the proxy -(e.g, "gateway.x.org:63"). The proxy manager will forward the successful -GET_PROXY_ADDR reply to whomever requested the proxy service. - -If status is Unable, the proxy is not able to satisfy the request but -it believes some other proxy might be able to do so. Proxy-address is -the empty string and failure-reason indicates the reason for failure. -The proxy manager may choose to forward the original GET_PROXY_ADDR to -another already running proxy, or it may choose to start up a new -proxy. In the event that the proxy manager can not find or start a -proxy, it will send a GET_PROXY_ADDR reply (with status Failure and an -appropriate failure-reason) to whomever requested the proxy service. - -If status is Failure, the proxy is not able to satisfy the request and -in addition is informing the requester that the request is invalid in -some way and should not be retried. - - -If the proxy manager starts up a new proxy, the proxy manager will -need an indication from the proxy that it is ready to accept -requests. The proxy is required to send a START_PROXY message to the -proxy manager to identify itself and signal its readiness to receive -requests. - -START_PROXY - proxy-service : STRING (name of proxy service, e.g. "LBX") - - -When the proxy manager receives the START_PROXY message from the -proxy it checks that the proxy-service is the one that it's expecting. -If the proxy-service is incorrect, an IceBadValue error will be sent -to the proxy. Otherwise, the proxy manager will forward the original -GET_PROXY_ADDR request to the proxy and the proxy will respond to the -GET_PROXY_ADDR request in the same way as discussed above. - - -Protocol --------- - -ICE protocol name is "PROXY_MANAGEMENT". -The major opcode is assigned at run-time by ICE. - - -Types ------ - -STRING - 2 CARD16 length - n LISTofCARD8 the string - p p = pad(2+n,8) - - - -Encoding --------- - -GET_PROXY_ADDR - - 1 ? PROXY_MANAGEMENT - 1 1 opcode - 2 n auth-data-len (in bytes) - 4 (a+b+c+d+e+n+p)/8 length of remaining data in 8-byte units - a STRING proxy-service - b STRING server-address - c STRING host-address - d STRING options - e STRING auth-name (if auth-data-len > 0) - n LISTofCARD8 auth-data (if auth-data-len > 0) - p unused, p=pad(n,8) - -GET_PROXY_ADDR_REPLY - - 1 ? PROXY_MANAGEMENT - 1 2 opcode - 1 CARD8 status - 0 Unable - 1 Success - 2 Failure - 1 unused - 4 (a+b)/8 length of remaining data in 8-byte units - a STRING proxy-address - b STRING failure-reason - - -START_PROXY - - 1 ? PROXY_MANAGEMENT - 1 3 opcode - 2 unused - 4 a/8 length of remaining data in 8-byte units - a STRING proxy-service diff --git a/doc/xorg-docs/specs/RX/RX.mif b/doc/xorg-docs/specs/RX/RX.mif deleted file mode 100644 index 530355e73..000000000 --- a/doc/xorg-docs/specs/RX/RX.mif +++ /dev/null @@ -1,6185 +0,0 @@ - # Generated by FrameMaker xm4.0.3P1a -# Options: -# Paragraph Text -# Paragraph Tags -# Paragraph Formats -# Font Information -# Markers -# Anchored Frames -# Tables -# Graphics and TextRect Layout -# Master Page Items -# Condition Catalog -# Table Catalogs -# Font Catalog -# Paragraph Catalog -# Document Template -# Document Dictionary -# Variables -# Element Definitions -# Elements -# - - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color -> # end of ColorCatalog - - - - - - > # end of Condition -> # end of ConditionCatalog - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - ] '> - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - ] '> - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - . '> - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - . '> - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - : '> - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf -> # end of PgfCatalog - # end of ElementDefCatalog - - - > # end of Font - - - > # end of Font -> # end of FontCatalog - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling -> # end of RulingCatalog - - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat - - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat -> # end of TblCatalog - - - > # end of View - - - - - - - - > # end of View - - - - > # end of View - - - > # end of View - - - > # end of View - - - > # end of View -> # end of Views - - '> - > # end of VariableFormat - - <$daynum\>, <$year\>'> - > # end of VariableFormat - - /<$daynum\>/<$shortyear\>'> - > # end of VariableFormat - - <$daynum\>, <$year\> <$hour\>:<$minute00\> <$ampm\>'> - > # end of VariableFormat - - /<$daynum\>/<$shortyear\>'> - > # end of VariableFormat - - <$daynum\>, <$year\>'> - > # end of VariableFormat - - /<$daynum\>/<$shortyear\>'> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - - > # end of VariableFormat - - of <$tblsheetcount\>)'> - > # end of VariableFormat -> # end of VariableFormats - - \xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - '> - > # end of XRefFormat - - \xd3 on page\x11 <$pagenum\>.'> - > # end of XRefFormat - - , \xd2 <$paratext\>,\xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - on page\x11 <$pagenum\>'> - > # end of XRefFormat - - '> - > # end of XRefFormat -> # end of XRefFormats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -> # end of Document -RXTOC.doc'> - - - - - -> # end of BookComponent - # end of InitialAutoNums -*element'> - - - - - - - - - - - - - - - - - -\xd3 '> -\xd3 )'> -> # end of Dictionary - # end of AFrames - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect - - - - - - - > # end of TextRect - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect - - - - - - - > # end of TextRect - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect - - - - - - - > # end of TextRect - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - > # end of TextLine - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of Frame - - - - - - - > # end of TextLine -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - > # end of Pgf - - - - > # end of Variable - > - > # end of Para -> # end of TextFlow - # end of Notes - - - > # end of Pgf - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - - - - - - - > - - > - > # end of Para - > # end of FNote - - - - - > - > # end of Para - > # end of FNote - - - - - > - > # end of Para - > # end of FNote - > # end of Notes - - - - - - - > # end of Font - - - > - - - > - - > - > # end of Para - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - - - - > # end of Font - - - > # end of Font - - > - - - > - - > - - > - > # end of Para - - - - > # end of Pgf - - - - - - - - > - > # end of Para - - - - - - - - > - - - - - > - - - - - > - - - - - > - > # end of Para - - - - - - - > - - > - > # end of Para - - - - - - - > - - - - - - > - - - - - > - - - - - > - - - - - > - - - - - > - > # end of Para - - - - - - - - > - - - - - > - > # end of Para - - - - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - > # end of XRef - - - - - - > - - - - - > - - > - - > - - - - - > - - - - - > - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - > - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - > - > # end of Para - - - \xd3 ) and '> - > - - - > - - > - - > - - > - > # end of Para - - - - > - > # end of Para - - - - - > - - > - > # end of Para - - - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - > - - > - > # end of Para - - - - > - > # end of Para - - - - > - *element\xd3 indicating at least and at most occurrences of element. '> - > - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - '> - > - > # end of Para - - - - - - - > - > # end of Para - - - - - '> - > - > # end of Para - - - - - '> - > - > # end of Para - - - - - - - - - - > - - - '> - > - > # end of Para - - - - - '> - > - > # end of Para - - - - - '> - > - > # end of Para - - - - - '> - > - > # end of Para - - - - - '> - > - > # end of Para - - - - - - - \xd3 | SP | HT | CR | LF'> - > - > # end of Para - - - - - - '> - > - > # end of Para - - - - - '> - > - > # end of Para - - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - > - - - - - - > # end of XRef - - - - - > - > # end of Para - - - \xd3 '> - > - > # end of Para - - - - - > # end of Pgf - - - - - - - > - - > - - - - - - - > - - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - \xd3 '> - > - > # end of Para - - - - > - > # end of Para - - - - - - - > - > # end of Para - - - - - > # end of Pgf - - - - > - - > - > # end of Para - - - - - - > - > # end of Para - - - - - > # end of Pgf - - - > - - - - - > - > # end of Para - - - - - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - - - - > - - > - > # end of Para - - - - > - > # end of Para - - - - > - - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - > - - > - > # end of Para - - - - > - > # end of Para - - - - - > - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - > - - > - > # end of Para - - - - > - > # end of Para - - - - > - - - - > - - > - > # end of Para - - - - > - > # end of Para - - - - > - - > - - > - - - - - > - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - > - - - > - - > - - - - - > # end of Font - - > - - > - > # end of Para - - - - - > - - > - > # end of Para - - - - - - - '> - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - - - - > - > # end of Para - - - - - - - > # end of TabStop - - - - > # end of TabStop - > # end of Pgf - - - > # end of Font - - - > # end of Font - - - - - - - > - > # end of Para - - - - - - - > - > # end of Para - - - - - - - > # end of TabStop - - - - > # end of TabStop - > # end of Pgf - - - > # end of Font - - - > # end of Font - - - - - > - > # end of Para - - - - - - - > # end of TabStop - - - - > # end of TabStop - > # end of Pgf - - - > # end of Font - - - > # end of Font - - - - > - > # end of Para - - - - - - - > - > # end of Para - - - - - - - - > - > # end of Para - - - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - - > - > # end of Para - - - - - > - - > - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - - > - - > - - > - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - - - - - - - - > - - - - - - - - > # end of XRef - - - - - - - - > - > # end of Para - - - - - - - > - > # end of Para - - - - - - - - > # end of TabStop - - - - > # end of TabStop - > # end of Pgf - - - > # end of Font - - - > # end of Font - - - - - - > # end of Font - - - > - - - > # end of Font - - - - - - - - > # end of Font - - - > - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - > - - - - - - - - > - - - - - - > - > # end of Para - - - - > - - > - - - - - - - > - - - > - - - - - - - - - - > - > # end of Para - - - - - - - - - > - > # end of Para - - - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - - - - - - - - - - > # end of Font - - - > # end of Font - - - - - - > # end of Font - - - > # end of Font - - > - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Pgf - - - > # end of Font - - - > # end of Font - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > - - > - - - > # end of Font - > - > # end of Para - - - - > - > # end of Para - - - - - - > # end of Font - - - > - - > - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - > - - - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - - > - - > - - - - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - - > - > # end of Para - - - - - > # end of Pgf - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - - > - - - - - > - > # end of Para - - - - - - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - - > # end of TabStop - - - - > # end of TabStop - > # end of Pgf - - - > # end of Font - - - > # end of Font - - - - > - > # end of Para - - - - - - - > # end of TabStop - - - - > # end of TabStop - > # end of Pgf - - - > # end of Font - - - > # end of Font - - - '> - > - > # end of Para - - - - - - - > # end of TabStop - - - - > # end of TabStop - > # end of Pgf - - - > # end of Font - - - > # end of Font - - - - > - > # end of Para - - - - - > - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - > # end of Font - > - > # end of Para - - - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - - > - > # end of Para - - - - - - - > # end of TabStop - - - - > # end of TabStop - > # end of Pgf - - - > # end of Font - - - - - > - > # end of Para - - - - - - - > # end of TabStop - - - - > # end of TabStop - > # end of Pgf - - - > # end of Font - - - - - > - > # end of Para - - - - - - - > # end of TabStop - - - - > # end of TabStop - > # end of Pgf - - - > # end of Font - - - - - > - > # end of Para - - - - - - - > # end of TabStop - - - - > # end of TabStop - > # end of Pgf - - - > # end of Font - - - - - - > - > # end of Para - - - - - - - - > # end of TabStop - - - - > # end of TabStop - > # end of Pgf - - - > # end of Font - - - - - > - - '> - > - > # end of Para - - - - - - - > # end of TabStop - - - - > # end of TabStop - > # end of Pgf - - - > # end of Font - - - - - > - > # end of Para - - - - - - - > # end of TabStop - - - - > # end of TabStop - > # end of Pgf - - - > # end of Font - - - - - > - > # end of Para - - - - - - - > # end of TabStop - - - - > # end of TabStop - > # end of Pgf - - - > # end of Font - - - - - - > - > # end of Para - - - - - > # end of Font - - - - > - > # end of Para - - - - - - - > # end of TabStop - - - - > # end of TabStop - > # end of Pgf - - - > # end of Font - - - - - > - > # end of Para - - - - - - - > # end of TabStop - - - - > # end of TabStop - > # end of Pgf - - - > # end of Font - - - - '> - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - - > # end of Font - > - > # end of Para - - - - > - - > - > # end of Para - - - '> - - > - - - > - - - - - - - - - > - - - - > - - '> - - > - - - - - - - - > - '> - - > - - - > - '> - > - > # end of Para - - - - - - - - - - - > # end of Font - - > - > # end of Para - - - '> - - > - - - > - - - - - - - '> - - > - - - > - '> - > - > # end of Para - - - - - > - > # end of Para - - - '> - - > - - - - - - - - '> - - > - - - '> - - > - '> - - > - - - - - - > - '> - - > - '> - - > - - - - '> - > - > # end of Para - - - - - > - > # end of Para - - - - - - - > # end of TabStop - > # end of Pgf - - - - - - > # end of Font - - - > # end of Font - - - - - > - - - - - - - - - > - - - - - > - - - - - - - - > - > # end of Para - - - - - - - - > - - - - - > - > # end of Para - - - - > # end of Pgf - - - - > - > # end of Para - - - - > # end of Pgf - - - - - > # end of Font - - - > # end of Font - - - > - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - > - - - - - - > - - - > - > # end of Para - - - - - - - - > # end of Marker - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - > - - - - > - > # end of Para - - - - - - - - > # end of Marker - - > - - > - - > - > # end of Para - - - - - - - - > # end of Marker - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - - > - - - - > - > # end of Para - - - - - - - - > # end of Marker - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - - > - - > - > # end of Para - - - - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow -# End of MIFFile diff --git a/doc/xorg-docs/specs/Randr/protocol.txt b/doc/xorg-docs/specs/Randr/protocol.txt deleted file mode 100644 index aa15f8384..000000000 --- a/doc/xorg-docs/specs/Randr/protocol.txt +++ /dev/null @@ -1,519 +0,0 @@ - The X Resize, Rotate and Reflect Extension - Version 1.0 - 2002-10-4 - - Jim Gettys - Jim.Gettys@hp.com - - Keith Packard - keithp@xfree86.org - - Cambridge Research Laboratory - HP Labs - Hewlett Packard Company - -1. Introduction - -The X Resize, Rotate and Reflect Extension, called RandR for short, -brings the ability to resize, rotate and reflect the root window of a -screen. It is based on the X Resize and Rotate Extension as specified -in the Proceedings of the 2001 Usenix Technical Conference [RANDR]. - -RandR as implemented and integrated into the XFree86 server differs in -one substantial fashion from the design discussed in that paper: that -is, RandR 1.0 does not implement the depth switching described in that -document, and the support described for that in the protocol in that -document and in the XFree86 implementationhas been removed from the -protocol described here, as it has been overtaken by events. - -These events include: - o Modern toolkits (in this case, GTK+ 2.x) have progressed to the point - of implementing migration between screens of arbitrary depths - o The continued advance of Moore's law has made limited amounts of VRAM - less of an issue, reducing the pressure to implement depth switching - on laptops or desktop systems - o The continued decline of legacy toolkits whose design would have - required depth switching to support migration - o The lack of depth switchin implementation experience in the - intervening time, due to events beyond our control - -Additionally, the requirement to support depth switching might -complicate other re-engineering of the device independent part of the -X server that is currently being contemplated. - -Rather than further delaying RandR's widespread deployment for a -feature long wanted by the community (resizing of screens, -particularly on laptops), or the deployment of a protocol design that -might be flawed due to lack of implementation experience, we decided -to remove depth switching from the protocol. It may be implementated -at a later time if resources and interests permit as a revision to the -protocol described here, which will remain a stable base for -applications. The protocol described here has been implemented in the -main XFree86 server, and more fully in the TinyX implementation in the -XFree86 distribution, which fully implements resizing, rotation and -reflection. - -2. Acknowlegements - -Our thanks to the contributors to the design found on the xpert mailing list. - -2. Screen change model - -Screens may change dynamically, either under control of this -extension, or due to external events. Examples include: monitors being -swapped, you pressing a button to switch from internal display to an -external monitor on a laptop, or, eventually, the hotplug of a display -card entirely on busses such as Cardbus which permit hot-swap (which -will require other work in addition to this extension). - -Since the screen configuration is dynamic and asynchronous to the -client and may change at any time RandR provides mechanisms to ensure -that your clients view is up to date with the configuration -possibilities of the moment and enforces applications that wish to -control the configuration to prove that their information is up to -date before honoring requests to change the screen configuration (by -requiring a timestamp on the request). - -Interested applications are notified whenever the screen configuration -changes, providing the current size of the screen and subpixel order -(see the Render extension [RENDER]), to enabel proper rendering of -subpixel decimated client text to continue, along with a time stamp of -the configuration change. A client must refresh its knowledge of the -screen configuration before attempting to change the configuration -after a notification, or the request will fail. - -To avoid multiplicative explosion between orientation, reflection -and sizes, the sizes are only those sizes in the normal (0) rotation. - -Rotation and reflection and how they interact can be confusing. In -Randr, the coordinate system is rotated in a counter-clockwise -direction relative to the normal orientation. Reflection is along the -window system coordinate system, not the physical screen X and Y axis, -so that rotation and reflection do not interact. The other way to -consider reflection is to is specified in the "normal" orientation, -before rotation, if you find the other way confusing. - -We expect that most clients and toolkits will be oblivious to changes -to the screen stucture, as they generally use the values in the -connections Display structure directly. By toolkits updating the -values on the fly, we believe pop-up menus and other pop up windows -will position themselves correctly in the face of screen configuration -changes (the issue is ensuring that pop-ups are visible on the -reconfigured screen). - -3. Data Types - -The subpixel order is shared with the Render extension, and is -documented there. The only datatype defined is the screen size, -defined in the normal (0 degree) orientation. - - -4. Errors - -There are no new error types defined by this extension. - -5. Protocol Types - -ROTATION { - RR_rotate_0 - RR_rotate_90 - RR_rotate_180 - RR_rotate_270 - RR-Reflect_X - RR_Reflect_Y } - -RRSELECTMASK { RRScreenChangeNotifyMask } - -SIZEID { CARD16 } - -SUBPIXELORDER { SubPixelUnknown The subpixel order uses the Render - SubPixelHorizontalRGB extensions definitions; they are here - SubPixelHorizontalBGR only for convenience. - SubPixelVerticalRGB - SubPixelVerticalBGR - SubPixelNone } - - -6. Extension Initialization - -The name of this extension is "RANDR". - -RRQueryVersion - client-major-version: CARD32 - client-minor-version: CARD32 - -> - major-version: CARD32 - minor-version: CARD32 - - The client sends the highest supported version to the server - and the server sends the highest version it supports, but no - higher than the requested version. Major versions changes can - introduce incompatibilities in existing functionality, minor - version changes introduce only backward compatible changes. - It is the clients responsibility to ensure that the server - supports a version which is compatible with its expectations. - -7. Extension Requests - -RRSelectInput - window: WINDOW - enable: SETofRRSELECTMASK - - Errors: BadWindow, BadValue - - If enable is RRScreenChangeNotifyMask, RRScreenChangeNotify - events will be sent anytime the screen configuration changes, - either from this protocol extension, or due to detected - external screen configuration changes. RRScreenChangeNotify - may also be sent immediately if the screen configuration has - changed since the client connected, to avoid race conditions. - -RRSetScreenConfig - drawable: DRAWABLE - timestamp: TIMESTAMP - config-timestamp: TIMESTAMP - sizeID: SIZEID - rotation: ROTATION - rate: CARD16 - - -> - - new-timestamp: TIMESTAMP - config-timestamp: TIMESTAMP - root: WINDOW - subpixelOrder: SUBPIXELORDER - - Errors: BadValue, BadMatch - - If the timestamp in this request is less than the time when - the configuration was last successfully set, the request is - ignored and False returned in success. If the - config-timestamp in this request is not equal to when the - server's screen configurations last changed, the request is - ignored and False returned in success. This could occur if - the screen changed since you last made a RRGetScreenInfo - request, perhaps by a different piece of display hardware - being installed. Rather than allowing an incorrect call to be - executed based on stale data, the server will ignore the - request. - - If rate is zero, the server selects an appropriate rate. - - If the request succeeds, this request sets the screen to the - specified size, rate, rotation and reflection. If the requests - succeeds, the new-time-stamp is returned containing the time - when the screen configuration was changed and config-timestamp - is returned to indicate when the possible screen - configurations were last changed, and success is set to True. - The root window for the screen indicated by the drawable - argument is also returned, along with the subpixel order, to - allow correct subpixel rendering. - - BadValue errors are generated if the rotation is not an - allowed rotation. BadValue errors are generated, if, when the - timestamps would allow the operation to succeed, or size-index - are not possible (out of range). - - -RRGetScreenInfo - window: WINDOW - - -> - - rotations: SETofROTATION - root: WINDOW - timestamp: TIMESTAMP - config-timestamp: TIMESTAMP - nSizes: CARD16 - sizeID: SIZEID - rotation: ROTATION - rate: CARD16 - sizes: LISTofSCREENSIZE - refresh: LISTofREFRESH - - where: - - SCREENSIZE { - widthInPixels, heightInPixels: CARD16 - widthInMillimeters, heightInMillimeters: CARD16 } - - REFRESH { - rates: LISTofCARD16 - } - - Errors: BadWindow - - This event is delivered to clients selecting for notification - with RRSelectInput requests using a RRScreenChangeNotifyMask. - - Size-index indicates which size is active. The returned - window is the window requsting notification. - - This call returns the root window of the screen which has changed. - - Rotations contains the set of rotations and reflections - supported by the screen of the window requested. The root - window of that screen is reported. The number of current sizes - supported is returned, along with which size rotation and - reflection the screen is currently set to. - - The config-timestamp indicates when the screen configuration - information last changed: requests to set the screen will fail - unless the timestamp indicates that the information the client - is using is up to date, to ensure clients can be well behaved - in the face of race conditions. Similarly, timestamp indicates - when the configuration was last set, and must both must be up - to date in a call to RRSetScreenConfig for it to succeed. - - Rate is the current refresh rate. This is zero when the refresh - rate is unknown or on devices for which refresh is not relevant. - - Sizes is the list of possible frame buffer sizes (at the - normal orientation, each provide both the linear physical size - of the screen and the pixel size. - - Refresh is the list of refresh rates for each size, each element - of sizes has a cooresponding element in refresh. An empty list - indicates no known rates, or a device for which refresh is not - relevant. - - The default size of the screen (the size that would become the - current size when the server resets) is the first size in the - list. The potential screen sizes themselves are also - returned. - - Toolkits SHOULD use RRScreenChangeSelectInput to be notified - via a RRScreenChangeNotify event, so that they can adapt to - screen size changes. - - -8. Extension Events - -Clients MAY select for ConfigureNotify on the root window to be -informed of screen changes. This may be advantageous if all your -clients need to know is the size of the root window, as it avoids -round trips to set up the extension. - -RRScreenChangeNotify is sent if RRSelectInput has requested it -whenever properties of the screen change, which may be due to external -factors, such as recabling a monitor, etc. - -RRScreenChangeNotify - - rotation: ROTATION; new rotation - sequenceNumber: CARD16 low 16 bits of request's seq. number - timestamp: TIMESTAMP time screen was changed - configTimestamp: TIMESTAMP time config data was changed - root: WINDOW root window of screen - window: WINDOW window requesting notification - sizeID: SIZEID new ID of size - subpixelOrder: SUBPIXELORDER order of subpixels - widthInPixels: INT16 - heightInPixels: INT16 - widthInMillimeters: INT16 - heightInMillimeters: INT16 - - This event is generated whenever the screen configuration is - changed and sent to requesting clients. The timestamp included - indicates when the screen configuration was changed, and - configTimestamp says when the last time the configuration was - changed. The root is the root of the screen the change - occurred on, and the event window is also returned. SizeID - contains an index indicating which size is current. - - This event is sent whenever the screen's configuration changes - or if a new screen configuration becomes available that was - not available in the past. In this case (config-timestamp in - the event not being equal to the config-timestamp returned in - the last call to RRGetScreenInfo), the client MUST call - RRGetScreenInfo to update its view of possible screen - configurations to have a correct view of possible screen - organizations. Timestamp is set to when the active screen - configuration was changed. - - Clients which select screen change notification events may be - sent an event immediately if the screen configuration was - changed between when they connected to the X server and - selected for notification. This is to prevent a common race - that might occur on log-in, where many applications start up - just at the time when a display manager or log in script might - be changing the screen size or configuration. - - -9. Extension Versioning - -The RandR extension was developed in parallel with the implementation -to ensure the feasibility of various portions of the design. As -portions of the extension are implemented, the version number of the -extension has changed to reflect the portions of the standard provied. -This document describes the version 1.0 of the specification, the -partial implementations have version numbers less than that. Here's a -list of what each version before 1.0 implemented: - - 0.0: This prototype implemented resize and rotation in the - TinyX server Used approximately the protocol described in - the Usenix paper. Appeared in the TinyX server in - XFree86 4.2, but not in the XFree86 main server. - - 0.1: Added subpixel order, added an event for subpixel order. - This version was never checked in to XFree86 CVS. - - 1.0: Implements resize, rotation, and reflection. Implemented - both in the XFree86 main server (size change only at this - date), and fully (size change, rotation, and reflection) - in XFree86's TinyX server. - - 1.1: Added refresh rates - -Compatibility between 0.0 and 1.0 was *NOT* preserved, and 0.0 clients -will fail against 1.0 servers. The wire encoding op-codes were -changed for GetScreenInfo to ensure this failure in a relatively -graceful way. Version 1.1 servers and clients are cross compatible with -1.0. Version 1.1 is considered to be stable and we intend upward -compatibility from this point. - - -Appendix A. Protocol Encoding - -Syntactic Conventions - -This document uses the same syntactic conventions as the core X -protocol encoding document. - - -A.1 Common Types - - SETofROTATION - - 0x0001 RR_Rotate_0 - 0x0002 RR_Rotate_90 - 0x0004 RR_Rotate_180 - 0x0008 RR_Rotate_270 - 0x0010 RR_Reflect_X - 0x0020 RR_Reflect_Y - - - SETofRRSELECTMASK - - 0x0001 RRScreenChangeNotifyMask - - -A.2 Protocol Requests - - -Opcodes 0x1 and 0x3 were used in the 0.0 protocols, and will return -errors if used in version 1.0. - - RRQueryVersion - - 1 CARD8 major opcode - 1 0x01 RandR opcode - 2 3 length - 4 CARD32 major version - 4 CARD32 minor version - -> - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 0 reply length - 1 CARD32 major version - 1 CARD32 minor version - - RRSetScreenConfig - - 1 CARD8 major opcode - 1 0x02 RandR opcode - 2 5 length - 4 DRAWABLE drawable on screen to be configured - 4 TIMESTAMP timestamp - 2 SIZEID size id - 2 ROTATION rotation/reflection - 2 CARD16 refresh rate (1.1 only) - 2 CARD16 pad - -> - 1 1 Reply - 1 CARD8 status - 0x0 RRSetConfigSuccess - 0x1 RRSetConfigInvalidConfigTime - 0x2 RRSetConfigInvalidTime - 0x3 RRSetConfigFailed - 2 CARD16 sequence number - 4 0 reply length - 4 TIMESTAMP new timestamp - 4 TIMESTAMP new configuration timestamp - 4 WINDOW root - 2 SUBPIXELORDER subpixel order defined in Render - 2 CARD16 pad4 - 4 CARD32 pad5 - 4 CARD32 pad6 - - - RRSelectInput - - 1 CARD8 major opcode - 1 0x04 RandR opcode - 2 3 length - 4 WINDOW window - 2 SETofRRSELECTMASK enable - 2 CARD16 pad - - - RRGetScreenInfo - - 1 CARD8 major opcode - 1 0x05 RandR opcode - 2 2 length - 4 WINDOW window - -> - 1 1 Reply - 1 CARD8 set of Rotations - 2 CARD16 sequence number - 4 0 reply length - 4 WINDOW root window - 4 TIMESTAMP timestamp - 4 TIMESTAMP config timestamp - 2 CARD16 number of SIZE following - 2 SIZEID sizeID - 2 ROTATION current rotation and reflection - 2 CARD16 rate (1.1) - 2 CARD16 length of rate info (number of CARD16s) - 2 CARD16 pad - - SIZE - 2 CARD16 width in pixels - 2 CARD16 height in pixels - 2 CARD16 width in millimeters - 2 CARD16 height in millimeters - - REFRESH - 2 CARD16 number of rates (n) - 2n CARD16 rates - -A.2 Protocol Event - - RRScreenChangeNotify - - 1 Base + 0 code - 1 ROTATION new rotation and reflection - 2 CARD16 sequence number - 4 TIMESTAMP timestamp - 4 TIMESTAMP configuration timestamp - 4 WINDOW root window - 4 WINDOW request window - 2 SIZEID size ID - 2 SUBPIXELORDER subpixel order defined in Render - 2 CARD16 width in pixels - 2 CARD16 height in pixels - 2 CARD16 width in millimeters - 2 CARD16 height in millimeters - - -Bibliography - -[RANDR] Gettys, Jim and Keith Packard, "The X Resize and Rotate - Extension - RandR", Proceedings of the 2001 USENIX Annual - Technical Conference, Boston, MA - -[RENDER] - Packard, Keith, "The X Rendering Extension", work in progress, - documents found in xc/specs/Render. diff --git a/doc/xorg-docs/specs/Render/library b/doc/xorg-docs/specs/Render/library deleted file mode 100644 index 97081c121..000000000 --- a/doc/xorg-docs/specs/Render/library +++ /dev/null @@ -1,600 +0,0 @@ - The Xrender Library - Version 0.7 - 2002-11-6 - Keith Packard - keithp@xfree86.org - -1. Introduction - -The Xrender library is designed as a lightweight library interface to the -Render extension. This document describes how the library maps to the -protocol without duplicating the semantics described by that document. - -2. Data Types - -2.1 Primitive Types - -For resources represented as CARD32 or XID on the wire, Xrender exposes them -using an 'unsigned long' type as is the norm for 32-bit data objects in an -Xlib compatible API. - - typedef unsigned long Glyph; - typedef unsigned long GlyphSet; - typedef unsigned long Picture; - typedef unsigned long PictFormat; - -Glyphs are just CARD32 objects, while GlyphSet, Picture and PictFormat -values are XIDs. - - typedef int XFixed; - -Fixed point numbers buck the Xlib convention by being represented as ints. -Machines for which 'int' is smaller than 32 bits cannot support the Xrender -library. - -2.2 PictFormat descriptions. - -The definition of a PictFormat is exposed by two data structures: - - typedef struct { - short red; - short redMask; - short green; - short greenMask; - short blue; - short blueMask; - short alpha; - short alphaMask; - } XRenderDirectFormat; - - typedef struct { - PictFormat id; - int type; - int depth; - XRenderDirectFormat direct; - Colormap colormap; - } XRenderPictFormat; - -These serve both as a description of the available formats and as patterns -against which available formats are matched. - -2.3 Picture Attributes - -When creating or changing Picture objects, attributes are passed much as -they are for XCreateWindow/XChangeWindowAttributes. A structure capable of -holding all of the attributes has the relevant ones set and a bitmask passed -as a separate argument which marks the valid entries. - - typedef struct _XRenderPictureAttributes { - Bool repeat; - Picture alpha_map; - int alpha_x_origin; - int alpha_y_origin; - int clip_x_origin; - int clip_y_origin; - Pixmap clip_mask; - Bool graphics_exposures; - int subwindow_mode; - int poly_edge; - int poly_mode; - Atom dither; - Bool component_alpha; - } XRenderPictureAttributes; - -2.4 Colors - -The core protocol XColor type doesn't include an alpha component, so Xrender -has a separate type. - - typedef struct { - unsigned short red; - unsigned short green; - unsigned short blue; - unsigned short alpha; - } XRenderColor; - -2.5 Glyph Types - -Glyphs are stored in the server, so these definitions are passed from the -client to the library and on to the server as glyphs are rasterized and -transmitted over the wire. - - typedef struct _XGlyphInfo { - unsigned short width; - unsigned short height; - short x; - short y; - short xOff; - short yOff; - } XGlyphInfo; - -2.6 Glyph Rendering types - -Glyph rendering can either take a single string of glyph indices or an array -of one of the following structures. - - typedef struct _XGlyphElt8 { - GlyphSet glyphset; - _Xconst char *chars; - int nchars; - int xOff; - int yOff; - } XGlyphElt8; - - typedef struct _XGlyphElt16 { - GlyphSet glyphset; - _Xconst unsigned short *chars; - int nchars; - int xOff; - int yOff; - } XGlyphElt16; - - typedef struct _XGlyphElt32 { - GlyphSet glyphset; - _Xconst unsigned int *chars; - int nchars; - int xOff; - int yOff; - } XGlyphElt32; - -2.7 Geometric Types - -Geometric operations directly expose the available protocol datatypes - - typedef struct _XPointFixed { - XFixed x, y; - } XPointFixed; - - typedef struct _XLineFixed { - XPointFixed p1, p2; - } XLineFixed; - - typedef struct _XTriangle { - XPointFixed p1, p2, p3; - } XTriangle; - - typedef struct _XTrapezoid { - XFixed top, bottom; - XLineFixed left, right; - } XTrapezoid; - - typedef struct _XTransform { - XFixed matrix[3][3]; - } XTransform; - -2.8 Transformation Filters - -All of the filters are named simultaneously; Xrender provides no convenience -functions for dealing with them. - - typedef struct _XFilters { - int nfilter; - char **filter; - int nalias; - short *alias; - } XFilters; - -2.9 Index type PictFormat colors - -PictFormats of Index type advertise which colors will be used for drawing -through this type. - - typedef struct _XIndexValue { - unsigned long pixel; - unsigned short red, green, blue, alpha; - } XIndexValue; - - -3 Application Startup Functions - -3.1 Initialization functions - - Bool XRenderQueryExtension (Display *dpy, - int *event_basep, - int *error_basep) - -This function returns True if the Render extension is available on dpy. -event_basep and error_basep will be filled in with the first event and error -numbers used by the extension (note that Render currently uses no events). - - Status XRenderQueryVersion (Display *dpy, - int *major_versionp, - int *minor_versionp) - -XRenderQueryVersion returns zero if the Render extension is not present or -some error occurred while attempting to discover the current Render version -number. Otherwise, XRenderQueryVersion returns 1 and stores the version -number returned by the server in *major_versionp and *minor_versionp, which -will be less than or equal to the library version numbers RENDER_MAJOR and -RENDER_MINOR. - - Status XRenderQueryFormats (Display *dpy) - -XRenderQueryFormats returns 1 if it successfully fetches the available -PictFormat information from the X server, 0 otherwise. Applications needn't -invoke this function directly (hmm, perhaps it should be removed from the -external interfaces then). - -3.2 Subpixel Order - - int XRenderQuerySubpixelOrder (Display *dpy, int screen) - - Bool XRenderSetSubpixelOrder (Display *dpy, int screen, int subpixel) - -Applications interested in the geometry of the elements making up a single -pixel on the screen should use XRenderQuerySubpixelOrder and not cache the -return value. XRenderSetSubpixelOrder is used by the XRandR library to -update the value stored by Xrender when the subpixel order changes as a -result of screen reconfiguration. - -3.3 PictFormat matching - -Xrender provides these APIs to help locate appropriate PictFormats; they are -intended to work much like the Visual matching APIs in Xlib. The -application provides a specification including the necessary PictFormat -characteristics and Xrender returns a matching XRenderPictFormat structure -which describes the PictFormat. - - XRenderPictFormat * - XRenderFindFormat (Display *dpy, - unsigned long mask, - _Xconst XRenderPictFormat *templ, - int count) - - #define PictFormatID (1 << 0) - #define PictFormatType (1 << 1) - #define PictFormatDepth (1 << 2) - #define PictFormatRed (1 << 3) - #define PictFormatRedMask (1 << 4) - #define PictFormatGreen (1 << 5) - #define PictFormatGreenMask (1 << 6) - #define PictFormatBlue (1 << 7) - #define PictFormatBlueMask (1 << 8) - #define PictFormatAlpha (1 << 9) - #define PictFormatAlphaMask (1 << 10) - #define PictFormatColormap (1 << 11) - -XRenderFindFormat locates a PictFormat matching the characteristics provided -in the templ. Only elements whose associated bit in mask are compared. - - XRenderPictFormat * - XRenderFindVisualFormat (Display *dpy, _Xconst Visual *visual) - -Finds the PictFormat suitable for use with the specified visual. - - XRenderPictFormat * - XRenderFindStandardFormat (Display *dpy, - int format) - - #define PictStandardARGB32 0 - #define PictStandardRGB24 1 - #define PictStandardA8 2 - #define PictStandardA4 3 - #define PictStandardA1 4 - #define PictStandardNUM 5 - -As a convenience, this function locates PictFormats that coorespond to -commonly used formats. - - ARGB32 depth 32, bits 31-24 A, 23-16 R, 15-8 G, 7-0 B - RGB24 depth 24, bits 23-16 R, 15-8 G, 7-0 B - A8 depth 8, bits 7-0 A - A4 depth 4, bits 3-0 A - A1 depth 1, bits 0 A - -Any server supporting Render must have a PictFormat cooresponding to each of -these standard formats. - -3.4 Index type PictFormat color values - - XIndexValue * - XRenderQueryPictIndexValues(Display *dpy, - _Xconst XRenderPictFormat *format, - int *num) - -If format refers to an Index type PictFormat, XRenderQueryPictIndexValues -returns the set of pixel values and their associated colors used when -drawing to Pictures created with that format. Otherwise, -XRenderQueryPictIndexValues generates a BadMatch error. - -3.5 Querying available filters - - XFilters * - XRenderQueryFilters (Display *dpy, Drawable drawable); - -Filters are used with non-identity transformation matrices, this function -returns a datastructure identifying the available filters on display that -can be associated with pictures for the screen associated with drawable. - -Free this structure with XFree. - -4 Picture Functions - - Picture - XRenderCreatePicture (Display *dpy, - Drawable drawable, - _Xconst XRenderPictFormat *format, - unsigned long valuemask, - _Xconst XRenderPictureAttributes *attributes) - - #define CPRepeat (1 << 0) - #define CPAlphaMap (1 << 1) - #define CPAlphaXOrigin (1 << 2) - #define CPAlphaYOrigin (1 << 3) - #define CPClipXOrigin (1 << 4) - #define CPClipYOrigin (1 << 5) - #define CPClipMask (1 << 6) - #define CPGraphicsExposure (1 << 7) - #define CPSubwindowMode (1 << 8) - #define CPPolyEdge (1 << 9) - #define CPPolyMode (1 << 10) - #define CPDither (1 << 11) - #define CPComponentAlpha (1 << 12) - #define CPLastBit 11 - -Creates a picture for drawable in the specified format. Any values -specified in 'attributes' and 'valuemask' are used in place of the default -values. - - void - XRenderChangePicture (Display *dpy, - Picture picture, - unsigned long valuemask, - _Xconst XRenderPictureAttributes *attributes) - -Change values in picture to those specified by valuemask and attributes. - - - void - XRenderSetPictureClipRectangles (Display *dpy, - Picture picture, - int xOrigin, - int yOrigin, - _Xconst XRectangle *rects, - int n) - -Sets the clip mask in picture to the union of rects offset by -xOrigin/yOrigin. - - void - XRenderSetPictureClipRegion (Display *dpy, - Picture picture, - Region r) - -Sets the clip mask in picture to r. - - void - XRenderSetPictureTransform (Display *dpy, - Picture picture, - XTransform *transform) - -Sets the projective transformation matrix of picture to transform. - - void - XRenderFreePicture (Display *dpy, - Picture picture) - -Instructs the server to free picture. - -5 GlyphSet functions - - GlyphSet - XRenderCreateGlyphSet (Display *dpy, _Xconst XRenderPictFormat *format) - -Creates a glyphset, every glyph in the set will use PictFormat format. - - GlyphSet - XRenderReferenceGlyphSet (Display *dpy, GlyphSet existing) - -Creates a new GlyphSet ID which references an existing GlyphSet. The -two IDs refer to the same object so that changes using one ID will be -visible through the other ID. This is designed to allow multiple clients to -share the same GlyphSet so that it doesn't get destroyed when the first -client exits. - - void - XRenderFreeGlyphSet (Display *dpy, GlyphSet glyphset) - -Frees the glyphset ID. If no other GlyphSet IDs refer to the underlying -GlyphSet, it will be destroyed. - - void - XRenderAddGlyphs (Display *dpy, - GlyphSet glyphset, - _Xconst Glyph *gids, - _Xconst XGlyphInfo *glyphs, - int nglyphs, - _Xconst char *images, - int nbyte_images) - -Add glyphs to glyphset. The images are packed together in Z-pixmap format -according to the depth of the PictFormat used in creating glyphset. - - void - XRenderFreeGlyphs (Display *dpy, - GlyphSet glyphset, - _Xconst Glyph *gids, - int nglyphs) - -Free some glyphs from glyphset. - -6 Glyph Drawing Routines - -Xrender provides two parallel APIs for glyph rendering, a simple API which -accepts a single string similar to XDrawString and a more complex API which -accepts an array of XGlyphElt{8,16,32} structures, each of which includes a -glyphset, string and x/y offsets which parallel the XDrawText API. Xrender -also provides glyphs in three sizes, 8 16 and 32 bits. The simple API is -just a convenience for the user as both forms generate the same underlying -Render protocol. - -6.1 Simple single-string glyph drawing functions - -These are identical except for the format of the glyph ids. - - void - XRenderCompositeString8 (Display *dpy, - int op, - Picture src, - Picture dst, - _Xconst XRenderPictFormat *maskFormat, - GlyphSet glyphset, - int xSrc, - int ySrc, - int xDst, - int yDst, - _Xconst char *string, - int nchar) - - void - XRenderCompositeString16 (Display *dpy, - int op, - Picture src, - Picture dst, - _Xconst XRenderPictFormat *maskFormat, - GlyphSet glyphset, - int xSrc, - int ySrc, - int xDst, - int yDst, - _Xconst unsigned short *string, - int nchar) - - void - XRenderCompositeString32 (Display *dpy, - int op, - Picture src, - Picture dst, - _Xconst XRenderPictFormat *maskFormat, - GlyphSet glyphset, - int xSrc, - int ySrc, - int xDst, - int yDst, - _Xconst unsigned int *string, - int nchar) - -6.2 Complete glyph drawing functions - -As with the simple functions above, these differ only in the type of the -underlying glyph id storage type. - - void - XRenderCompositeText8 (Display *dpy, - int op, - Picture src, - Picture dst, - _Xconst XRenderPictFormat *maskFormat, - int xSrc, - int ySrc, - int xDst, - int yDst, - _Xconst XGlyphElt8 *elts, - int nelt) - - void - XRenderCompositeText16 (Display *dpy, - int op, - Picture src, - Picture dst, - _Xconst XRenderPictFormat *maskFormat, - int xSrc, - int ySrc, - int xDst, - int yDst, - _Xconst XGlyphElt16 *elts, - int nelt) - - void - XRenderCompositeText32 (Display *dpy, - int op, - Picture src, - Picture dst, - _Xconst XRenderPictFormat *maskFormat, - int xSrc, - int ySrc, - int xDst, - int yDst, - _Xconst XGlyphElt32 *elts, - int nelt) - -7 Basic Graphics Functions - -These are the simplest graphics functions upon which the other functions are -conceptually built. - -7.1 Composite - -XRenderComposite exposes the RenderComposite protocol request directly. - - void - XRenderComposite (Display *dpy, - int op, - Picture src, - Picture mask, - Picture dst, - int src_x, - int src_y, - int mask_x, - int mask_y, - int dst_x, - int dst_y, - unsigned int width, - unsigned int height) - - -7.2 Rectangles - -These functions composite rectangles of the specified color, they differ -only in that XRenderFillRectangles draws more than one at a time. - - void - XRenderFillRectangle (Display *dpy, - int op, - Picture dst, - _Xconst XRenderColor *color, - int x, - int y, - unsigned int width, - unsigned int height) - - void - XRenderFillRectangles (Display *dpy, - int op, - Picture dst, - _Xconst XRenderColor *color, - _Xconst XRectangle *rectangles, - int n_rects) - -8 Geometric Objects - -All geometric drawing with Render is performed with sequences of trapezoids -or triangles; the client is responsible for breaking more complex figures -into these simple shapes. - -8.1 Trapezoids - - void - XRenderCompositeTrapezoids (Display *dpy, - int op, - Picture src, - Picture dst, - _Xconst XRenderPictFormat *maskFormat, - int xSrc, - int ySrc, - _Xconst XTrapezoid *traps, - int ntrap) - -XRenderCompositeTrapezoids builds RenderTrapezoids requests to composite the -specified list of trapezoids to dst. XRenderCompositeTrapezoids will split -the list of trapezoids to build requests no larger than the maximum request -size supported by the server. This can create rendering artifacts as the -precompositing done by RenderTrapezoids when a maskFormat is specified -cannot span multiple requests. - -8.2 Triangles - -Render provides three different ways of encoding triangles on the wire, -Xrender exposes those with three separate triangle drawing routines. As -with trapezoids above, Xrender will split the arguments to fit requests into -the servers limits, but this may cause rendering artifacts. diff --git a/doc/xorg-docs/specs/Render/protocol b/doc/xorg-docs/specs/Render/protocol deleted file mode 100644 index 4ec8a6488..000000000 --- a/doc/xorg-docs/specs/Render/protocol +++ /dev/null @@ -1,1256 +0,0 @@ - The X Rendering Extension - Version 0.10 - 2005-07-01 - Keith Packard - keithp@keithp.com - -1. Introduction - -The X Rendering Extension (Render) introduces digital image composition as -the foundation of a new rendering model within the X Window System. -Rendering geometric figures is accomplished by client-side tessellation into -either triangles or trapezoids. Text is drawn by loading glyphs into the -server and rendering sets of them. - -2. Acknowledgments - -This extension was the work of many people, in particular: - - + Thomas Porter and Tom Duff for their formal description - of image compositing. - - + Rob Pike and Russ Cox who designed the Plan 9 window system from - which the compositing model was lifted. - - + Juliusz Chroboczek and Raph Levien whose proposal for client-side - glyph management eliminated font handling from the X server. - - + Jon Leech, Brad Grantham and Allen Akin for patiently explaining - how OpenGL works. - - + Carl Worth for providing the sample implementation of - trapezoid rendering and showing how broken the spec was - - + Sam Pottle and Jamey Sharp for helping demonstrate the correctness - of the trapezoid specification. - - + Owen Taylor for helping specify projective transformations - -3. Rendering Model - -Render provides a single rendering operation which can be used in a variety of -ways to generate images: - - dest = (source IN mask) OP dest - -Where 'IN' is the Porter/Duff operator of that name and 'OP' is any of the -list of compositing operators described below, among which can be found all -of the Porter/Duff binary operators. - -To use this operator several additional values are required: - - + The destination rectangle. This is a subset of the destination - within which the rendering is performed. - - + The source location. This identifies the coordinate in the - source aligned with the upper left corner of the - destination rectangle. - - + The mask location. This identifies the coordinate in the - mask aligned with the upper left corner of the - destination rectangle. - - + A clip list. This limits the rendering to the intersection of the - destination rectangle with this clip list. - - + The OP to use - - + Whether the source should be repeated to cover the destination - rectangle, extended with a constant pixel value or extended by - using the nearest available source pixel. - - + Whether the mask should be repeated to cover the destination - rectangle, extended with a constant pixel value or extended by - using the nearest available mask pixel. - - + Whether the mask has a single alpha value for all four channels or - whether each mask channel should affect the associated source/dest - channels. - - + Whether the source should be reshaped with a projective - transformation, and if so, what filter to apply while - resampling the data. - - + Whether the mask should be reshaped with a projective - transformation, and if so, what filter to apply while - resampling the data. - -These parameters are variously attached to the operands or included in each -rendering request. - -4. Data types - -The core protocol rendering system uses a pixel model and applies color only -in the final generation of the video signal. A compositing model operates -on colors, not pixel values so a new datatype is needed to interpret data as -color instead of just bits. - -The "PictFormat" object holds information needed to translate pixel values -into red, green, blue and alpha channels. The server has a list of picture -formats corresponding to the various visuals on the screen. There are two -classes of formats, Indexed and Direct. Indexed PictFormats hold a list of -pixel values and RGBA values while Direct PictFormats hold bit masks for each -of R, G, B and A. - -The "Picture" object contains a Drawable, a PictFormat and some -rendering state. More than one Picture can refer to the same Drawable. - -5. Errors - -Errors are sent using core X error reports. - -PictFormat - A value for a PICTFORMAT argument does not name a defined PICTFORMAT. - -Picture - A value for a PICTURE argument does not name a defined PICTURE. - -PictOp - A value for a PICTOP argument does not name a defined PICTOP. - -GlyphSet - A value for a GLYPHSET argument does not name a defined GLYPHSET. - -Glyph - A value for a GLYPH argument does not name a defined GLYPH in the - glyphset. - -6. Protocol Types - -PICTURE 32-bit value (top three bits guaranteed to be zero) -PICTFORMAT 32-bit value (top three bits guaranteed to be zero) -PICTTYPE { Indexed, Direct } -PICTOP { Clear, Src, Dst, Over, OverReverse, In, InReverse, - Out, OutReverse, Atop, AtopReverse, Xor, Add, Saturate, - DisjointClear, DisjointSrc, DisjointDst, DisjointOver, - DisjointOverReverse, DisjointIn, DisjointInReverse, - DisjointOut, DisjointOutReverse, DisjointAtop, - DisjointAtopReverse, DisjointXor, - ConjointClear, ConjointSrc, ConjointDst, ConjointOver, - ConjointOverReverse, ConjointIn, ConjointInReverse, - ConjointOut, ConjointOutReverse, ConjointAtop, - ConjointAtopReverse, ConjointXor } -SUBPIXEL { Unknown, HorizontalRGB, HorizontalBGR, - VerticalRGB, VerticalBGR, None - } -COLOR [ - red, green, blue, alpha: CARD16 - ] -CHANNELMASK [ - shift, mask: CARD16 - ] -DIRECTFORMAT [ - red, green, blue, alpha: CHANNELMASK - ] -INDEXVALUE [ - pixel: Pixel; - red, green, blue, alpha: CARD16 - ] -PICTFORMINFO [ - id: PICTFORMAT - type: PICTTYPE - depth: CARD8 - direct: DIRECTFORMAT - colormap: COLORMAP or None - ] - -PICTVISUAL [ - visual: VISUALID or None - format: PICTFORMAT - ] - -PICTDEPTH [ - depth: CARD8 - visuals: LISTofPICTVISUAL - ] - -PICTSCREEN LISTofPICTDEPTH - -FIXED 32-bit value (top 16 are integer portion, bottom 16 are fraction) -TRANSFORM [ - p11, p12, p13: FIXED - p21, p22, p23: FIXED - p31, p32, p33: FIXED - ] -POINTFIX [ - x, y: FIXED - ] -POLYEDGE { Sharp, Smooth } -POLYMODE { Precise, Imprecise } -REPEAT { None, Regular, Pad, Reflect } -COLORPOINT [ - point: POINTFIX - color: COLOR - ] -SPANFIX [ - left, right, y: FIXED - ] -COLORSPANFIX [ - left, right, y: FIXED - left_color: COLOR - right_color: COLOR -QUAD [ - p1, p2, p3, p4: POINTFIX - ] -TRIANGLE [ - p1, p2, p3: POINTFIX - ] -LINEFIX [ - p1, p2: POINTFIX - ] -TRAP [ - top, bottom: SPANFIX - ] -TRAPEZOID [ - top, bottom: FIXED - left, right: LINEFIX - ] -(TRAPEZOID is deprecated) -COLORTRIANGLE [ - p1, p2, p3: COLORPOINT - ] -COLORTRAP [ - top, bottom: COLORSPANFIX - ] -GLYPHSET 32-bit value (top three bits guaranteed to be zero) -GLYPH 32-bit value -GLYPHINFO [ - width, height: CARD16 - x, y: INT16 - off-x, off-y: INT16 - ] -PICTGLYPH [ - info: GLYPHINFO - x, y: INT16 - ] -GLYPHABLE GLYPHSET or FONTABLE -GLYPHELT8 [ - dx, dy: INT16 - glyphs: LISTofCARD8 - ] -GLYPHITEM8 GLYPHELT8 or GLYPHABLE -GLYPHELT16 [ - dx, dy: INT16 - glyphs: LISTofCARD16 - ] -GLYPHITEM16 GLYPHELT16 or GLYPHABLE -GLYPHELT32 [ - dx, dy: INT16 - glyphs: LISTofCARD32 - ] -GLYPHITEM32 GLYPHELT32 or GLYPHABLE - -ANIMCURSORELT [ - cursor: CURSOR - delay: CARD32 - ] -7. Standard PictFormats - -The server must support a Direct PictFormat with 8 bits each of red, green, -blue and alpha as well as a Direct PictFormat with 8 bits of red, green and -blue and 0 bits of alpha. The server must also support Direct PictFormats -with 1, 4 and 8 bits of alpha and 0 bits of r, g and b. - -Pixel component values lie in the close range [0,1]. These values are -encoded in a varying number of bits. Values are encoded in a straight -forward manner. For a component encoded in m bits, a binary encoding b -is equal to a component value of b/(2^m-1). - -A Direct PictFormat with zero bits of alpha component is declared to have -alpha == 1 everywhere. A Direct PictFormat with zero bits of red, green and -blue is declared to have red, green, blue == 0 everywhere. If any of red, -green or blue components are of zero size, all are of zero size. Direct -PictFormats never have colormaps and are therefore screen independent. - -Indexed PictFormats never have alpha channels and the direct component is all -zeros. Indexed PictFormats always have a colormap in which the specified -colors are allocated read-only and are therefore screen dependent. Drawing -to in Indexed Picture uses only pixel values listed by QueryPictIndexValues. -Reading from an Indexed Picture uses red, green and blue values from the -colormap and alpha values from those listed by QueryPictIndexValues. Pixel -values not present in QueryPictIndexValues are given alpha values of 1. - -8. Compositing Operators - -For each pixel, the four channels of the image are computed with: - - C = Ca * Fa + Cb * Fb - -where C, Ca, Cb are the values of the respective channels and Fa and Fb -come from the following table: - - PictOp Fa Fb - -------------------------------------------------- - Clear 0 0 - Src 1 0 - Dst 0 1 - Over 1 1-Aa - OverReverse 1-Ab 1 - In Ab 0 - InReverse 0 Aa - Out 1-Ab 0 - OutReverse 0 1-Aa - Atop Ab 1-Aa - AtopReverse 1-Ab Aa - Xor 1-Ab 1-Aa - Add 1 1 - Saturate min(1,(1-Ab)/Aa) 1 - DisjointClear 0 0 - DisjointSrc 1 0 - DisjointDst 0 1 - DisjointOver 1 min(1,(1-Aa)/Ab) - DisjointOverReverse min(1,(1-Ab)/Aa) 1 - DisjointIn max(1-(1-Ab)/Aa,0) 0 - DisjointInReverse 0 max(1-(1-Aa)/Ab,0) - DisjointOut min(1,(1-Ab)/Aa) 0 - DisjointOutReverse 0 min(1,(1-Aa)/Ab) - DisjointAtop max(1-(1-Ab)/Aa,0) min(1,(1-Aa)/Ab) - DisjointAtopReverse min(1,(1-Ab)/Aa) max(1-(1-Aa)/Ab,0) - DisjointXor min(1,(1-Ab)/Aa) min(1,(1-Aa)/Ab) - ConjointClear 0 0 - ConjointSrc 1 0 - ConjointDst 0 1 - ConjointOver 1 max(1-Aa/Ab,0) - ConjointOverReverse max(1-Ab/Aa,0) 1 - ConjointIn min(1,Ab/Aa) 0 - ConjointInReverse 0 min(Aa/Ab,1) - ConjointOut max(1-Ab/Aa,0) 0 - ConjointOutReverse 0 max(1-Aa/Ab,0) - ConjointAtop min(1,Ab/Aa) max(1-Aa/Ab,0) - ConjointAtopReverse max(1-Ab/Aa,0) min(1,Aa/Ab) - ConjointXor max(1-Ab/Aa,0) max(1-Aa/Ab,0) - -Saturate and DisjointOverReverse are the same. They match OpenGL -compositing with FUNC_ADD, SRC_ALPHA_SATURATE, ONE, except that Render uses -premultiplied alpha while Open GL uses non-premultiplied alpha. - -The result of any compositing operator is always limited to the range -[0,1] for each component. Components whose value would be greater than 1 -are set to 1. - -For operations involving division, when the divisor is zero, define the -quotient to be positive infinity. The result is always well defined -because the division is surrounded with a max or min operator which will -give a finite result. - -When the mask contains separate alpha values for each channel, the -alpha value resulting from the combination of that value with the source -alpha channel is used in the final image composition. - -9. Source and Mask Transformations - -When fetching pixels from the source or mask pictures, Render provides three -options for pixel values which fall outside the drawable (this includes -pixels within a window geometry obscured by other windows). - - + Transparent. Missing values are replaced with transparent. - - + Nearest. Replace missing pixels with the nearest available - pixel. Where multiple pixels are equidistant, select - those with smallest Y and then smallest X coordinates - - + Tile. Select the pixel which would appear were the - drawable tiled to enclose the missing coordinate. If - the tiling doesn't cover the coordinate, use the - selected Constant or Nearest mode. - -When GraphicsExposures are selected in the destination picture, a region -containing at least the union of all destination pixel values affected by -data replaced as above is delivered after each compositing operation. If -the resulting region is empty, a NoExpose event is delivered instead. - -To construct the source and mask operands, the computed pixels values are -transformed through a homogeneous matrix, filtered and then used in the -fundamental rendering operator described above. Each screen provides a list -of supported filter names. There are a few required filters, and several -required filter alias which must map to one of the available filters. - -10. Polygon Rasterization - -Render provides only two kinds of polygons, trapezoids and triangles. To -improve efficiency, several different wire encodings exist for each. - -All trapezoids must be convex. Rendering of concave trapezoids is unspecified -except that the result must obey the clipping rules. - -Composite -Polygons are rasterized by implicit generating an alpha mask and using that -in the general compositing operator along with a supplied source image: - - tmp = Rasterize (polygon) - Composite (op, dst, src, tmp) - -When rasterized with Sharp edges, the mask is computed with a depth of 1 so -that all of the mask values are either 0 or 1. - -When rasterized with Smooth edges, the mask is generated by creating a square -around each pixel coordinate and computing the amount of that square covered -by the polygon. This ignores sampling theory but it provides a precise -definition which is close to the right answer. This value is truncated to -the alpha width in the fallback format before application of the compositing -operator. - -Rasterization -Alpha values are generated by point sampling the coverage of a square -surrounding the center of each pixel by the polygon. - -In Precise poly mode, the sample points are located in a regular grid. When -alpha depth 'e' is even, the regular grid is 2**(e/2) + 1 samples wide and -2**(e/2) -1 samples high. For odd alpha depth 'o', the sample grid is 2**o -- 1 samples wide and 1 sample high. Note that odd alpha depth usually -occurs only at depth 1, so this misshapen sample grid has no ill effects. -The sample grid is centered within the pixel and then each sample point is -rounded down to a point on the sub-pixel coordinate grid. - -In Imprecise mode, the location of the sample points is not specified, but -the implementation must conform to the following constraints: - - + Abutting edges must match precisely. When specifying two polygons - abutting along a common edge, if that edge is specified with the - same coordinates in each polygon then the sum of alpha values for - pixels inside the union of the two polygons must be precisely one. - - + Translationally invariant. The pixelization of the polygon must - be the same when either the polygon or the target drawable - are translated by any whole number of pixels in any direction. - - + Sharp edges are honored. When the polygon is rasterized with Sharp - edges, the implicit alpha mask will contain only 1 or 0 for - each pixel. - - + Order independent. Two identical polygons specified with vertices - in different orders must generate identical results. - -11. Image Filtering - -When computing pixels from source and mask images, a filter may be applied -to the data. This is usually used with a non-identity transformation -matrix, but filtering may be applied with an identity transformation. - -Each filter is given a unique name encoded as an ISO Latin-1 string. -Filters may be configured with a list of fixed point values; the number of -parameters and their interpretation is currently left to conventions passed -outside of the protocol. A set of standard filters are required to be -provided: - - Filter Name Description - - nearest Nearest neighbor filtering - bilinear Linear interpolation in two dimensions - -Additional names may be provided for any filter as aliases. A set of -standard alias names are required to be mapped to a provided filter so that -applications can use the alias names without checking for availability. - - Alias name Intended interpretation - - fast High performance, quality similar to Nearest - good Reasonable performance, quality similar to Bilinear - best Highest quality available, performance may not - be suitable for interactive use - -Aliases must map directly to a non-aliased filter name. - -There is also a set of standard filters which are not required but may be -provided. If they are provided, using the standard name, they must match -the definition specified here. - - Filter Name Description - - convolution MxN convolution filter. The values specified - in SetPictureFilter are M, N and then M * N - filter parameters. M and N must be integers - represented as fixed point numbers. - gaussian Gaussian blur. The value specified is a radius - in pixels (which can be fractional). A standard - Gaussian 2D convolution filter will be applied. - binomial Binomial blur. An approximation of a Gaussian - blur using binomial coefficients - -12. Glyph Rendering - -Glyphs are small alpha masks which can be stored in the X server and -rendered by referring to them by name. A set of glyphs can be rendered in a -single request. Glyphs are positioned by subtracting the x, y elements of -the GLYPHINFO from the requested rendering position. The next glyph -rendering position is set to the current rendering position plus the off-x -and off-y elements. - -Glyphs are stored in GlyphSets and are named within the GlyphSet with -client-specified 32-bit numbers. - -Glyphs can be stored in any PictFormat supported by the server. All glyphs -in a GlyphSet are stored in the same format. - -13. Extension Initialization - -The client must negotiate the version of the extension before executing -extension requests. Behavior of the server is undefined otherwise. - -QueryVersion - - client-major-version: CARD32 - client-minor-version: CARD32 - - -> - - major-version: CARD32 - minor-version: CARD32 - - The client sends the highest supported version to the server and - the server sends the highest version it supports, but no higher than - the requested version. Major versions changes can introduce - incompatibilities in existing functionality, minor version - changes introduce only backward compatible changes. It is - the clients responsibility to ensure that the server supports - a version which is compatible with its expectations. - -QueryPictFormats - - -> - - fallback: PICTFORMAT - formats: LISTofPICTFORMINFO - screens: LISTofPICTSCREEN - subpixels: LISTofSUBPIXEL - - Errors: - - - The server responds with a list of supported PictFormats and - a list of which PictFormat goes with each visual on each screen. - Every PictFormat must match a supported depth, but not every - PictFormat need have a matching visual. - - The fallback format is used as an intermediate representation - in cases where there is no ideal choice. - - The relationship between the red, green and blue elements making - up each pixel indexed by screen is returned in subpixels. - This list is not present in servers advertising protocol - versions earlier than 0.6. This list may be shorter than - the number of screens, in which case the remaining screens - are given sub pixel order Unknown. - -QueryPictIndexValues - - format: PICTFORMAT - - -> - - values: LISTofINDEXVALUE - - Errors: - PictFormat, Match - - Returns the mapping from pixel values to RGBA values for the - specified Indexed PictFormat. If 'format' does not refer to - an Indexed PictFormat a Match error is generated. - -QueryFilters - - drawable: DRAWABLE - - -> - - filters: LISTofSTRING8 - aliases: LISTofCARD16 - - -14. Extension Requests - -CreatePicture - - pid: PICTURE - drawable: DRAWABLE - format: PICTFORMAT - value-mask: BITMASK - value-list: LISTofVALUE - - Errors: - Alloc, Drawable, IDChoice, Match, Pixmap, Picture, - PictFormat, Value - - This request creates a Picture object associated with the specified - drawable and assigns the identifier pid to it. Pixel data in the - image are interpreted according to 'format'. It is a Match error - to specify a format with a different depth than the drawable. If - the drawable is a Window then the Red, Green and Blue masks must - match those in the visual for the window else a Match error is - generated. - - The value-mask and value-list specify attributes of the picture that - are to be explicitly initialized. The possible values are: - - repeat: REPEAT - alpha-map: PICTURE or None - alpha-x-origin: INT16 - alpha-y-origin: INT16 - clip-x-origin: INT16 - clip-y-origin: INT16 - clip-mask: PIXMAP or None - graphics-exposures: BOOL - subwindow-mode: { ClipByChildren, IncludeInferiors } - poly-edge: POLYEDGE - poly-mode: POLYMODE - dither: ATOM or None - component-alpha: BOOL - - When used as a source or mask operand, the repeat and fill-constant - values control how pixels outside the geometry of the drawable are - computed. - - Repeat indicates how the drawable contents should be extented - in both directions. - - The alpha channel of alpha-map is used in place of any alpha channel - contained within the drawable for all rendering operations. The - alpha-mask origin is interpreted relative to the origin of drawable. - Rendering is additionally clipped by the geometry of alpha-map. - Exposures to the window do not affect the contents of alpha-map. - Alpha-map must refer to a picture containing a Pixmap, not a Window - (or a Match error results). - - The clip-mask restricts reads and writes to drawable. Only pixels - where the clip-mask has bits set to 1 are read or written. Pixels - are not accessed outside the area covered by the clip-mask or where - the clip-mask has bits set to 0. The clip-mask affects all graphics - requests, including sources. The clip-mask origin is interpreted - relative to the origin of drawable. If a pixmap is specified as the - clip-mask, it must have depth 1 and have the same root as the - drawable (or a Match error results). If clip-mask is None, then - pixels are always drawn, regardless of the clip origin. The - clip-mask can also be set with the SetPictureClipRectangles request. - - For ClipByChildren, both source and destination windows are - additionally clipped by all viewable InputOutput children. For - IncludeInferiors , neither source nor destination window is clipped - by inferiors. This will result in including subwindow contents in - the source and drawing through subwindow boundaries of the - destination. The use of IncludeInferiors with a source or - destination window of one depth with mapped inferiors of differing - depth is not illegal, but the semantics are undefined by this - extension. - - The graphics-exposures flag controls GraphicsExposure event - generation for Composite requests (and any similar requests - defined by additional extensions). - - Poly-edge and poly-mode control the rasterization of polygons - as described above. - - Dither selects which of the available dither patterns should - be used. If dither is None, no dithering will be done. - - Component-alpha indicates whether each image component is - intended as a separate alpha value when the picture is used - as a mask operand. - - The default component values are - - Component Default - ------------------------------- - repeat False - fill-nearest: False - clip-x-origin 0 - clip-y-origin 0 - clip-mask None - graphics-exposures True - subwindow-mode ClipByChildren - poly-edge Smooth - poly-mode Precise - dither None - component-alpha False - -ChangePicture - - pid: PICTURE - value-mask: BITMASK - value-list: LISTofVALUE - - Errors: - Picture, Alloc, Pixmap, PictOp, Value - - The value-mask and value-list specify which attributes are to be - changed. The values and restrictions are the same as for - CreatePicture. - -SetPictureClipRectangles - - picture: PICTURE - clip-x-origin: INT16 - clip-y-origin: INT16 - rectangles: LISTofRECTANGLE - - Errors: - Alloc, Picture - - This request changes clip-mask in picture to the specified list of - rectangles and sets the clip origin. Input and output will be - clipped to remain contained within the rectangles. The clip origin - is interpreted relative to the origin of the drawable associated - with picture. The rectangle coordinates are interpreted relative to - the clip origin. Note that the list of rectangles can be empty, - which effectively disables output. This is the opposite of passing - None as the clip-mask in CreatePicture and ChangePicture. - - Note that output is clipped to the union of all of the rectangles - and that no particular ordering among the rectangles is required. - -SetPictureTransform - - picture: PICTURE - transform: TRANSFORM - - Errors: - Alloc, Value, Picture - - This request changes the projective transformation used to - map coordinates when 'picture' is used as the source or - mask in any compositing operation. The transform - maps from destination pixel geometry back to the source pixel - geometry. - - The matrix must be invertable, else a Value error is generated. - -SetPictureFilter - - picture: PICTURE - filter: STRING8 - values: LISTofFIXED - - Errors: - Value, Match, Picture - - This request sets the current filter used when picture is a source - or mask operand. Filter must be one of the filters supported - for the screen associated with picture, else a Match error - is generated. If the filter accepts additional parameters, - they can be provided in values, incorrect values generate Value - errors, too many values generate Match errors. Too few values - cause the filter to assume default values for the missing - parameters. - - When created, Pictures are set to the Nearest filter. - -FreePicture - - pid: PICTURE - - Errors: - Picture - - This request deletes the association between the resource ID and the - picture. The picture storage will be freed when no other resource - references it. - -Composite - - op: PICTOP - src: PICTURE - mask: PICTURE or None - dst: PICTURE - src-x, src-y: INT16 - mask-x, mask-y: INT16 - dst-x, dst-y: INT16 - width, height: CARD16 - - This request combines the specified rectangle of the transformed - src and mask operands with the specified rectangle of dst using op - as the compositing operator. The coordinates are relative their - respective (transformed) drawable's origin. Rendering is clipped - to the geometry of the dst drawable and then to the dst clip-list. - - Pixels outside the geometry of src or mask needed for this - computation are substituted as described in the Source and Mask - Transformations section above. - - If src, mask and dst are not in the same format, and one of their - formats can hold all without loss of precision, they are converted - to that format. Alternatively, the server will convert each - operand to the fallback format. - - If mask is None, it is replaced by a constant alpha value of 1. - - When dst has graphics-exposures true, a region covering all dst - pixels affected by substitutions performed on src or mask pixels - outside their respective geometries is computed. If that region is - empty, a NoExpose event is sent. Otherwise, a sequence of - GraphicsExpose events are sent covering that region. - -FillRectangles - - op: PICTOP - dst: PICTURE - color: COLOR - rects: LISTofRECTANGLE - - This request combines color with the destination drawable in the - area specified by rects. Each rectangle is combined separately; - overlapping areas will be rendered multiple times. The effect is - equivalent to compositing with a repeating source picture filled with - the specified color. - -Trapezoids - - op: PICTOP - src: PICTURE - src-x, src-y: INT16 - dst: PICTURE - mask-format: PICTFORMAT or None - traps: LISTofTRAPEZOID - - This request rasterizes the list of trapezoids. - - For each trap, the area between the left and right edges is filled - from the top to the bottom. src-x and src-y register the pattern to - the floor of the top x and y coordinate of the left edge of the - first trapezoid, they are adjusted for subsequent trapezoids so that - the pattern remains globally aligned within the destination. - - When mask-format is not None, trapezoids are rendered in the - following way with the effective mask computed in mask-format: - - tmp = temporary alpha picture (in mask-format) - Combine (Zero, tmp, tmp, None) - for each trapezoid - Combine (Add, tmp, trapezoid, None) - Combine (op, dst, source, tmp) - - When mask-format is None, trapezoids are rendered in the order - specified directly to the destination: - - for each trapezoid - Combine (op, dst, source, trapezoid) - -Triangles - - op: PICTOP - src: PICTURE - src-x, src-y: INT16 - dst: PICTURE - mask-format: PICTFORMAT or None - triangles: LISTofTRIANGLE - - This request rasterizes the list of triangles in the order they - occur in the list. - - When mask-format is not None, triangles are rendered in the - following way with the effective mask computed in mask-format: - - tmp = temporary alpha picture (in mask-format) - Combine (Zero, tmp, tmp, None) - for each triangle - Combine (Add, tmp, triangle, None) - Combine (op, dst, source, tmp) - - When mask-format is None, triangles are rendered in the order - specified directly to the destination: - - for each triangle - Combine (op, dst, source, triangle) - -TriStrip - - op: PICTOP - src: PICTURE - src-x, src-y: INT16 - dst: PICTURE - mask-format: PICTFORMAT or None - points: LISTofPOINTFIX - - Triangles are formed by initially using the first three points and - then by eliminating the first point and appending the next point in - the list. If fewer than three points are provided, this request does - nothing. - - When mask-format is not None, triangles are rendered in the - following way with the effective mask computed in mask-format: - - tmp = temporary alpha picture (in mask-format) - Combine (Zero, tmp, tmp, None) - for each triangle - Combine (Add, tmp, triangle, None) - Combine (op, dst, source, tmp) - - When mask-format is None, triangles are rendered in the order - specified directly to the destination: - - for each triangle - Combine (op, dst, source, triangle) - -TriFan - op: PICTOP - src: PICTURE - src-x, src-y: INT16 - dst: PICTURE - mask-format: PICTFORMAT or None - points: LISTofPOINTFIX - - Triangles are formed by initially using the first three points and - then by eliminating the second point and appending the next point - int the list. If fewer than three points are provided, this request - does nothing. - - When mask-format is not None, triangles are rendered in the - following way with the effective mask computed in mask-format: - - tmp = temporary alpha picture (in mask-format) - Combine (Zero, tmp, tmp, None) - for each triangle - Combine (Add, tmp, triangle, None) - Combine (op, dst, source, tmp) - - When mask-format is None, triangles are rendered in the order - specified directly to the destination: - - for each triangle - Combine (op, dst, source, triangle) - -ColorTrapezoids - - op: PICTOP - dst: PICTURE - trapezoids: LISTofCOLORTRAP - - The geometry of the trapezoids must meet the same requirements as - for the Trapezoids request. The trapezoids are filled in the order - they occur in the list. - -ColorTriangles - - op: PICTOP - dst: PICTURE - triangles: LISTofCOLORTRIANGLE - - The colored triangles are rasterized in the order they occur in the - list. - -??? - -Should I included compressed triangle representations here? - -??? - -CreateGlyphSet - - gsid: GLYPHSET - format: PICTFORMAT - - Errors: - Alloc, IDChoice, PictFormat, Match - - This request creates a container for glyphs. The glyphset and - all contained glyphs are destroyed when gsid and any other names - for the glyphset are freed. Format must be a Direct format, when - it contains RGB values, the glyphs are composited using - component-alpha True, otherwise they are composited using - component-alpha False. - -ReferenceGlyphSet - - gsid: GLYPHSET - existing: GLYPHSET - - Errors: - Alloc, IDChoice, GlyphSet - - This request creates an additional name for the existing glyphset. - The glyphset will not be freed until all references to it are - destroyed. - -FreeGlyphSet - - glyphset: GLYPHSET - - Errors: - GlyphSet - - This request frees the name for the glyphset. When all names have - been freed, the glyphset and all contained glyphs are freed. - -AddGlyphs - glyphset: GLYPHSET - glyphids: LISTofCARD32 - glyphs: LISTofGLYPHINFO - data: LISTofBYTE - - Errors: - GlyphSet, Alloc - - This request adds glyphs to glyphset. The image for the glyphs - are stored with each glyph in a separate Z-format image padded to a - 32-bit boundary. Existing glyphs with the same names are replaced. - -AddGlyphsFromPicture - - glyphset: GLYPHSET - src: PICTURE - glyphs: LISTofPICTGLYPH - - Errors: - GlyphSet, Alloc - - This request adds glyphs to glyphset by copying them from src from - the locations included in glyphs. Existing glyphs with the same - names are replaced. Src may be in a different PictFormat than - glyphset, in which case the images are converted to the glyphset - format. - -FreeGlyphs - - glyphset: GLYPHSET - glyphs: LISTofGLYPH - - Errors: - GlyphSet, Match - - This request removes glyphs from glyphset. Each glyph must exist - in glyphset (else a Match error results). - -CompositeGlyphs8 -CompositeGlyphs16 -CompositeGlyphs32 - - op: PICTOP - src: PICTURE - dst: PICTURE - mask-format: PICTFORMAT or None - glyphset: GLYPHABLE - src-x, src-y: INT16 - dst-x, dst-y: INT16 - glyphcmds: LISTofGLYPHITEM8 CompositeGlyphs8 - glyphcmds: LISTofGLYPHITEM16 CompositeGlyphs16 - glyphcmds: LISTofGLYPHITEM32 CompositeGlyphs32 - - Errors: - Picture, PictOp, PictFormat, GlyphSet, Glyph - - The dst-x and dst-y coordinates are relative to the drawable's - origin and specify the baseline starting position (the initial glyph - origin). Each glyph item is processed in turn. A glyphset item - causes the glyphset to be used for subsequent glyphs. Switching - among glyphsets does not affect the next glyph origin. A glyph - element delta-x and delta-y specify additional changes in the - position along the x and y axes before the string is drawn; the - deltas are always added to the glyph origin. - - All contained GLYPHSETs are always transmitted most significant byte - first. - - If a GlyphSet error is generated for an item, the previous items may - have been drawn. - - When mask-format is not None, glyphs are rendered in the following - way with the effective mask computed in mask-format: - - tmp = temporary alpha picture - Combine (Zero, tmp, tmp, None) - for each glyph - Combine (Add, tmp, glyph, None) - Combine (op, dst, source, tmp) - - When mask-format is None, glyphs are rendered in the order specified - directly to the destination: - - for each glyph - Combine (op, dst, source, glyph) - -CreateCursor - - cid: CURSOR - source: PICTURE - x, y: CARD16 - - Errors: Alloc, IDChoice, Match, Picture - - This request creates a cursor and associates identifier cid with it. - The x and y coordinates define the hotspot relative to the source's - origin and must be a point within the source (or a Match error - results). The resulting picture will nominally be drawn to the - screen with PictOpOver. - - The components of the cursor may be transformed arbitrarily to meet - display limitations. In particular, if the display supports only - two colors cursors without translucency, the cursor will be - transformed so that areas less than .5 alpha will be transparent, - else opaque, and areas darker than 50% gray will be black else white. - - The source picture can be freed immediately if no further explicit - references to it are to be made. - - Subsequent drawing in the source has an undefined effect on the - cursor. The server might or might not make a copy of the picture. - -CreateAnimCursor - cid: CURSOR - cursors: LISTofANIMCURSORELT - - Errors: Alloc, IDChoice, Cursor - - This request creates a cursor and associates identifier cid with it. - When active, the cursor image on the screen will cycle through - 'cursors', showing each cursor in the element for the number of - milliseconds indicated by the 'delay' member of that element. - -AddTraps - picture: PICTURE - off-x, off-y: INT16 - trapezoids: LISTofTRAP - - Errors: Match - - Each trap is PictOpAdd'ed to 'picture'. 'off-x', 'off-y' - are added to each coordinate. - - 'picture' must be an alpha-only picture else a 'Match' error is - returned. - -CreateSolidFill - pid: PICTURE - color: COLOR - - Creates a Source picture that represents a solid fill with - the specified color. - -CreateLinearGradient - pid: PICTURE - p1, p2: POINTFIX - spread: CARD16 - nstops: CARD16 - stops: LISTofFIXED - stop_colors: LISTofCOLOR - - Errors: Alloc, Value - - Creates a source picture representing a linear Gradient. The gradients - bounds are defined by the two end points p1 and p2. - - The gradient has nstops stop points between 0 and 1, each - having a stop color defined in stop_colors. - - The array of stops has to contain values between 0 and 1 (inclusive) and - has to be ordered in increasing size or a Value error is generated. If - p1 == p2 a Value error is generated. - - The colors are non premultiplied. - -CreateRadialGradient - pid: PICTURE - inner_center: POINTFIX - outer_center: POINTFIX - inner_radius: FIXED - outer_radius: FIXED - spread: CARD16 - nstops: CARD16 - stops: LISTofFIXED - stop_colors: LISTofCOLOR - - Errors: Alloc, Value - - Creates a source picture representing a linear Gradient. The - gradients bounds are defined by a center point, a focal point and a - radius around the center. - - The gradient has nstops stop points between 0 and 1, each - having a stop color defined in stop_colors. - - The array of stops has to contain values between 0 and 1 (inclusive) and - has to be ordered in increasing size or a Value error is generated. The inner - circle has to be completely contained inside the outer one or a Value error is - generated. - - The colors are non premultiplied. - -CreateConicalGradient - pid: PICTURE - center: POINTFIX - angle: FIXED - spread: CARD16 - nstops: CARD16 - stops: LISTofFIXED - stop_colors: LISTofCOLOR - - Errors: Alloc, Value - - Creates a source picture representing a conical Gradient. The - gradient is defined by a center point and an angle (in degrees). - - The gradient has nstops stop points between 0 and 1, each - having a stop color defined in stop_colors. - - The array of stops has to contain values between 0 and 1 (inclusive) and - has to be ordered in increasing size or a Value error is generated. - - The colors are non premultiplied. - - -15. Extension Versioning - -The Render extension was developed in parallel with the implementation to -ensure the feasibility of various portions of the design. As portions of -the extension are implemented, the version number of the extension has -changed to reflect the portions of the standard provided. This document -describes the intent for version 1.0 of the specification, the partial -implementations have version numbers less than that. Here's a list of -what each version before 1.0 implemented: - - 0.0: - No disjoint/conjoint operators - No component alpha - Composite - CreateGlyphSet - FreeGlyphSet - AddGlyphs - CompositeGlyphs - - 0.1: - Component alpha - FillRectangles - - 0.2: - Disjoint/Conjoint operators - - 0.3: - FreeGlyphs - - 0.4: - Trapezoids - Triangles - TriStrip - TriFan - - 0.5: - CreateCursor - - 0.6: - SetPictureTransform - QueryFilters - SetPictureFilter - subpixels member of QueryPictFormats - - 0.7: - QueryPictIndexValues - 0.8: - CreateAnimCursor - 0.9: - AddTrapezoids - - 0.10: - CreateSolidFill - CreateLinearGradient - CreateRadialGradient - CreateConicalGradient - - The repeat picture attribute now supports Pad and - Reflect, older versions only supported None and Normal. diff --git a/doc/xorg-docs/specs/SIAddresses/IPv6.txt b/doc/xorg-docs/specs/SIAddresses/IPv6.txt deleted file mode 100644 index 2d76f220a..000000000 --- a/doc/xorg-docs/specs/SIAddresses/IPv6.txt +++ /dev/null @@ -1,11 +0,0 @@ -ServerInterpreted address definition for type "IPv6": - -The X.org Architecture Task Force reserves the ServerInterpreted -address type of "IPv6" for use with IPv6 literal address formats. -The syntax for the value will be defined as specified in RFC 3513 -and the IETF RFC to be published based on the current draft at -http://www.ietf.org/internet-drafts/draft-ietf-ipv6-scoping-arch-00.txt -This address type specification will be formally issued once the -IETF IPv6 Working Group issues the corresponding RFC. - -Version 0.9, March 2004 diff --git a/doc/xorg-docs/specs/SIAddresses/README b/doc/xorg-docs/specs/SIAddresses/README deleted file mode 100644 index e6a3ff0a8..000000000 --- a/doc/xorg-docs/specs/SIAddresses/README +++ /dev/null @@ -1,6 +0,0 @@ -$XdotOrg$ - -This directory contains the specifications of address types for the -ServerInterpreted address family used in the ChangeHost and ListHosts -requests in the X11 Protocol. See Chapter 9 of the X11 Protocol spec -for more information. diff --git a/doc/xorg-docs/specs/SIAddresses/hostname.txt b/doc/xorg-docs/specs/SIAddresses/hostname.txt deleted file mode 100644 index 498fb0118..000000000 --- a/doc/xorg-docs/specs/SIAddresses/hostname.txt +++ /dev/null @@ -1,11 +0,0 @@ -ServerInterpreted address definition for type "hostname": - -A ServerInterpreted address with type "hostname" shall have a value -representing a hostname as defined in IETF RFC 2396. Due to Mobile IP -and dynamic DNS, the name service should be consulted at connection -authentication time. Clients supporting Internationalized Domain -Names must convert to ASCII Compatible Encoding as specified in the -relevant IETF RFC's before use in the X11 protocol. Note that this -definition of hostname does not allow use of literal IP addresses. - -Version 1.0, March 2004 diff --git a/doc/xorg-docs/specs/SIAddresses/localuser.txt b/doc/xorg-docs/specs/SIAddresses/localuser.txt deleted file mode 100644 index bb9be0e88..000000000 --- a/doc/xorg-docs/specs/SIAddresses/localuser.txt +++ /dev/null @@ -1,21 +0,0 @@ -Server-interpreted Authentication Types "localuser" and "localgroup": - -On systems which can determine in a secure fashion the credentials of a client -process, the "localuser" and "localgroup" authentication methods provide access -based on those credentials. The format of the values provided is platform -specific. For POSIX & UNIX platforms, if the value starts with the character -'#', the rest of the string shall be treated as a decimal uid or gid, otherwise -the string is defined as a user name or group name. - -Systems offering this MUST not simply trust a user supplied value (such as an -environment variable or IDENT protocol response). It is expected many systems -will only support this for clients running on the same host using a local IPC -transport. - -Examples: - xhost +SI:localuser:alanc - xhost +SI:localuser:#1234 - xhost +SI:localgroup:wheel - xhost +SI:localgroup:#0 - -$XdotOrg: $ diff --git a/doc/xorg-docs/specs/SM/SMlib.ms b/doc/xorg-docs/specs/SM/SMlib.ms deleted file mode 100644 index e8ad48994..000000000 --- a/doc/xorg-docs/specs/SM/SMlib.ms +++ /dev/null @@ -1,2710 +0,0 @@ -.\" $Xorg: SMlib.ms,v 1.3 2000/08/17 19:42:19 cpqbld Exp $ -.\" $XdotOrg: xc/doc/specs/SM/SMlib.ms,v 1.2 2004/04/23 18:42:16 eich Exp $ -.\" -.\" Use tbl, -ms, and macros.t -.\" edited for DP edits and code consistency w/ core protocol/xlib 4/18/96 -.\" macro: start marker -.de sM -.ne 4 -.sp 1 -\\h'-0.3i'\\L'-1v'\\v'3p'\\l'1v'\\v'1v-3p' -.sp -1 -.. -.\" macro: end marker -.de eM -.sp -1 -\\h'-0.3i'\\L'-1v'\\v'1v+4p'\\l'1v'\\v'-4p' -.sp 1 -.. -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.ad b -.sp 10 -.TL -\s+2\fBX Session Management Library\fP\s-2 -.sp -Version 1.0 -.sp -X Consortium Standard -.sp -X Version 11, Release 6.8 -.AU -Ralph Mor -.AI -X Consortium -.LP -.DS C -Copyright \(co 1993, 1994 X Consortium -.DE -.LP -.sp 5 -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -.LP -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -.LP -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. -.sp 3 -X Window System is a trademark of The Open Group. -.bp -.bp 1 -.EH '\fBX Session Management Library\fP''\fBX11, Release 6.8\fP' -.OH '\fBX Session Management Library\fP''\fBX11, Release 6.8\fP' -.EF ''\- \\\\n(PN \-'' -.OF ''\- \\\\n(PN \-'' -.NH 1 -Overview of Session Management -.XS -\*(SN Overview of Session Management -.XE -.LP -The purpose of the X Session Management Protocol (XSMP) is to provide a -uniform mechanism for users to save and restore their sessions. A -\fIsession\fP is a group of clients, each of which has a particular state. -The session is controlled by a network service called the \fIsession -manager\fP\^. The session manager issues commands to its clients on behalf -of the user. These commands may cause clients to save their state or to -terminate. It is expected that the client will save its state in such a -way that the client can be restarted at a later time and resume its -operation as if it had never been terminated. A client's state might -include information about the file currently being edited, the current -position of the insertion point within the file, or the start of an -uncommitted transaction. The means by which clients are restarted is -unspecified by this protocol. -.LP -For purposes of this protocol, a \fIclient\fP\^ of the session manager is -defined as a connection to the session manager. A client is typically, -though not necessarily, a process running an application program connected -to an X display. However, a client may be connected to more -than one X display or not be connected to any X displays at all. -.NH 1 -The Session Management Library -.XS -\*(SN The Session Management Library -.XE -.LP -The Session Management Library (SMlib) is a low-level "C" language -interface to XSMP. It is expected that higher level toolkits, such as -Xt, will hide many of -the details of session management from clients. Higher level toolkits -might also be developed for session managers to use, but no such effort -is currently under way. -.LP -SMlib has two parts to it: -.IP \(bu 5 -One set of functions for clients that want to be part of a session -.IP \(bu 5 -One set of functions for session managers to call -.LP -Some applications will use both sets of functions and act as \fInested -session managers\fP\^. -That is, they will be both a session manager and a client of another session. -An example is a mail program that could start a text editor for editing -the text of a mail message. The mail program is part of -a regular session and, at the same time, is also acting as a session manager -to the editor. -.LP -Clients initialize by connecting to the session manager and obtaining -a \fIclient-ID\fP\^ that uniquely identifies them in the session. -The session manager maintains a list of properties for each client in -the session. These properties describe the client's environment -and, most importantly, describe how the client can be restarted (via an -.PN SmRestartCommand ). -Clients are expected to save their state in such a way as to allow multiple -instantiations of themselves to be managed independently. For example, -clients may use their client-ID as part of a filename in which -to store the state for a particular instantiation. The client-ID -should be saved as part of the -.PN SmRestartCommand -so that the client will retain the same ID after it is restarted. -.LP -Once the client initializes itself with the session manager, it must be -ready to respond to messages from the session manager. For example, it -might be asked to save its state or to terminate. In the case of a shutdown, -the session manager might give each client a chance to interact with the -user and cancel the shutdown. -.NH 1 -Understanding SMlib's Dependence on ICE -.XS -\*(SN Understanding SMlib's Dependence on ICE -.XE -.LP -The X Session Management Protocol is layered on top of the Inter-Client -Exchange (ICE) Protocol. The ICE protocol is designed to multiplex several -protocols over a single connection. As a result, working with SMlib requires -a little knowledge of how the ICE library works. -.LP -The ICE library utilizes callbacks to process messages. When a client -detects that there is data to read on an ICE connection, it should call -the -.PN IceProcessMessages -function. -.PN IceProcessMessages -will read the message header and look at the major opcode in order -to determine which protocol the message was intended for. The appropriate -protocol library will then be triggered to unpack the message and hand it -off to the client via a callback. -.LP -The main point to be aware of is that an application using SMlib must -have some code that detects when there is data to read on an ICE connection. -This can be done via a -.PN select -call on the file descriptor for the ICE connection, but more typically, -.PN XtAppAddInput -will be used to register a callback that will invoke -.PN IceProcessMessages -each time there is data to read on the ICE connection. -.LP -To further complicate things, knowing which file descriptors to call -.PN select -on requires an understanding of how ICE connections are created. -On the client side, a call must be made to -.PN SmcOpenConnection -in order to open a connection with a session manager. -.PN SmcOpenConnection -will internally make a call into -.PN IceOpenConnection , -which will, in turn, determine if an ICE connection already exists between -the client and session manager. Most likely, a connection will not already -exist and a new ICE connection will be created. The main point to be aware -of is that, on the client side, it is not obvious when ICE connections get -created or destroyed, because connections are shared when possible. -To deal with this, the ICE library lets the application register -watch procedures that will be invoked each time an ICE connection -is opened or closed. -These watch procedures could be used to add or remove ICE file descriptors -from the list of descriptors to call -.PN select -on. -.LP -On the session manager side, things work a bit differently. The session -manager has complete control over the creation -of ICE connections. The session manager has to first call -.PN IceListenForConnections -in order to start listening for connections from clients. Once a connection -attempt is detected, -.PN IceAcceptConnection -must be called, and the session manager can simply add the new ICE -file descriptor to the list of descriptors to call -.PN select -on. -.LP -For further information on the library functions related to ICE connections, -see the \fIInter-Client Exchange Library\fP\^ standard. -.NH 1 -Header Files and Library Name -.XS -\*(SN Header Files and Library Name -.XE -.LP -Applications (both session managers and clients) should include the -header file -.Pn < X11/SM/SMlib.h >. -This header file defines all of the SMlib data structures -and function prototypes. -.PN SMlib.h -includes the header file -.Pn < X11/SM/SM.h >, -which defines all of the SMlib constants. -.LP -Because SMlib is dependent on ICE, applications should link against -SMlib and ICElib by using -.PN -lSM -.PN -lICE . -.NH 1 -Session Management Client (Smc) Functions -.XS -\*(SN Session Management Client (Smc) Functions -.XE -.LP -This section discusses how Session Management clients: -.IP \(bu 5 -Connect to the Session Manager -.IP \(bu 5 -Close the connection -.IP \(bu 5 -Modify callbacks -.IP \(bu 5 -Set, delete, and retrieve Session Manager properties -.IP \(bu 5 -Interact with the user -.IP \(bu 5 -Request a ``Save Yourself'' -.IP \(bu 5 -Request a ``Save Yourself Phase 2'' -.IP \(bu 5 -Complete a ``Save Yourself'' -.IP \(bu 5 -Use Smc informational functions -.IP \(bu 5 -Handle Errors -.NH 2 -Connecting to the Session Manager -.XS -\*(SN Connecting to the Session Manager -.XE -.LP -To open a connection with a session manager, use -.PN SmcOpenConnection . -.sM -.FD 0 -SmcConn SmcOpenConnection\^(\^\fInetwork_ids_list\fP, \fIcontext\fP\^, \fIxsmp_major_rev\fP\^, \fIxsmp_minor_rev\fP\^, -.br - \fImask\fP\^, \fIcallbacks\fP\^, \fIprevious_id\fP\^, \fIclient_id_ret\fP\^, \fIerror_length\fP\^, \fIerror_string_ret\fP\^) -.br - char *\fInetwork_ids_list\fP\^; -.br - SmPointer \fIcontext\fP\^; -.br - int \fIxsmp_major_rev\fP\^; -.br - int \fIxsmp_minor_rev\fP\^; -.br - unsigned long \fImask\fP\^; -.br - SmcCallbacks *\fIcallbacks\fP\^; -.br - char *\fIprevious_id\fP\^; -.br - char **\fIclient_id_ret\fP\^; -.br - int \fIerror_length\fP\^; -.br - char *\fIerror_string_ret\fP\^; -.FN -.IP \fInetwork_ids_list\fP 1i -Specifies the network ID(s) of the session manager. -.IP \fIcontext\fP 1i -A pointer to an opaque object or NULL. Used to determine if an -ICE connection can be shared (see below). -.IP \fIxsmp_major_rev\fP 1i -The highest major version of the XSMP the application supports. -.IP \fIxsmp_minor_rev\fP 1i -The highest minor version of the XSMP the application supports (for the -specified xsmp_major_rev). -.IP \fImask\fP\^ 1i -A mask indicating which callbacks to register. -.IP \fIcallbacks\fP 1i -The callbacks to register. These callbacks are used to respond to messages -from the session manager. -.IP \fIprevious_id\fP 1i -The client ID from the previous session. -.IP \fIclient_id_ret\fP 1i -The client ID for the current session is returned. -.IP \fIerror_length\fP 1i -Length of the error_string_ret argument passed in. -.IP \fIerror_string_ret\fP 1i -Returns a null-terminated error message, if any. -The error_string_ret argument points to user supplied memory. -No more than error_length bytes are used. -.LP -.eM -The network_ids_list argument is a null-terminated string containing a list of -network IDs for the session manager, separated by commas. -If network_ids_list is NULL, -the value of the -.PN SESSION_MANAGER -environment variable will be used. -Each network ID has the following format: -.TS -lw(0.25i) lw(2.5i) lw(1i). - tcp/: or - decnet/:: or - local/: -.TE -.LP -An attempt will be made to use the first network ID. If that fails, -an attempt will be made using the second network ID, and so on. -.LP -After the connection is established, -.PN SmcOpenConnection -registers the client with the session manager. If the client is being -restarted from a previous session, previous_id should contain a null -terminated string representing the client ID from the previous session. -If the client is first joining the session, previous_id should be -set to NULL. -If previous_id is specified but is determined to be invalid by the -session manager, SMlib will re-register -the client with previous_id set to NULL. -.LP -If -.PN SmcOpenConnection -succeeds, it returns an opaque connection pointer of type -.PN SmcConn -and the client_id_ret argument contains the client ID to be used for -this session. -The client_id_ret should be freed with a call to -.PN free -when no longer needed. On failure, -.PN SmcOpenConnection -returns NULL, -and the reason for failure is returned in error_string_ret. -.LP -Note that SMlib uses the ICE protocol to establish a connection with -the session manager. If an ICE connection already exists between the -client and session manager, it might be possible for the same ICE connection -to be used for session management. -.LP -The context argument indicates how willing the client is to share -the ICE connection with other protocols. If context is NULL, -then the caller is always willing to share the connection. -If context is not NULL, -then the caller is not willing to use a previously opened ICE connection -that has a different non-NULL context associated with it. -.LP -As previously discussed (section 3, ``Understanding SMlib's Dependence -on ICE''), the client will have to keep track of when ICE connections -are created or destroyed (using -.PN IceAddConnectionWatch -and -.PN IceRemoveConnectionWatch ), -and will have to call -.PN IceProcessMessages -each time a -.PN select -shows that there is data to read on an ICE connection. -For further information, see the -\fIInter-Client Exchange Library\fP\^ standard. -.LP -The callbacks argument contains a set of callbacks used to respond to session -manager events. The mask argument specifies which callbacks are set. -All of the callbacks specified in this version of SMlib are mandatory. The -mask argument is necessary in order to maintain backwards compatibility -in future versions of the library. -.LP -The following values may be ORed together to obtain a mask value: -.LP -.Ds 0 -.PN SmcSaveYourselfProcMask -.PN SmcDieProcMask -.PN SmcSaveCompleteProcMask -.PN SmcShutdownCancelledProcMask -.De -.LP -For each callback, the client can register a pointer to client data. -When SMlib invokes the callback, it will pass the client data pointer. -.LP -.sM -.Ds 0 -.TA .5i 1i 1.5i -.ta .5i 1i 1.5i -typedef struct { - - struct { - SmcSaveYourselfProc callback; - SmPointer client_data; - } save_yourself; - - struct { - SmcDieProc callback; - SmPointer client_data; - } die; - - struct { - SmcSaveCompleteProc callback; - SmPointer client_data; - } save_complete; - - struct { - SmcShutdownCancelledProc callback; - SmPointer client_data; - } shutdown_cancelled; - -} SmcCallbacks; -.De -.LP -.eM -.NH 3 -The Save Yourself Callback -.XS -\*(SN The Save Yourself Callback -.XE -.LP -The Save Yourself callback is of type -.PN SmcSaveYourselfProc . -.sM -.FD 0 -typedef void (*SmcSaveYourselfProc)(); - -void SaveYourselfProc\^(\^\fIsmc_conn\fP, \fIclient_data\fP\^, \fIsave_type\fP\^, \fIshutdown\fP\^, \fIinteract_style\fP\^, \fIfast\fP\^) -.br - SmcConn \fIsmc_conn\fP\^; -.br - SmPointer \fIclient_data\fP\^; -.br - int \fIsave_type\fP\^; -.br - Bool \fIshutdown\fP\^; -.br - int \fIinteract_style\fP\^; -.br - Bool \fIfast\fP\^; -.FN -.IP \fIsmc_conn\fP 1i -The session management connection object. -.IP \fIclient_data\fP 1i -Client data specified when the callback was registered. -.IP \fIsave_type\fP 1i -Specifies the type of information that should be saved. -.IP \fIshutdown\fP 1i -Specifies if a shutdown is taking place. -.IP \fIinteract_style\fP 1i -The type of interaction allowed with the user. -.IP \fIfast\fP 1i -If -.PN True , -the client should save its state as quickly as possible. -.LP -.eM -The session manager sends a ``Save Yourself'' message to a client -either to checkpoint it or just before -termination so that it can save its state. -The client responds with zero or more calls to -.PN SmcSetProperties -to update the properties indicating how to restart the client. -When all the properties have been set, the client calls -.PN SmcSaveYourselfDone . -.LP -If interact_style is -.PN SmInteractStyleNone , -the client must not interact with the -user while saving state. -If interact_style is -.PN SmInteractStyleErrors , -the client may interact with the user only if an error condition arises. -If interact_style is -.PN SmInteractStyleAny , -then the client may interact with the user for any purpose. -Because only one client can interact with the user at a time, -the client must call -.PN SmcInteractRequest -and wait for an ``Interact'' message from the session manager. -When the client is done interacting with the user, it calls -.PN SmcInteractDone . -The client may only call -.PN SmcInteractRequest -after it receives a ``Save Yourself'' message and before it -calls -.PN SmcSaveYourselfDone . -.LP -If save_type is -.PN SmSaveLocal , -the client must update the properties to reflect its current state. -Specifically, it should save enough information to restore -the state as seen by the user of this client. It should not affect the -state as seen by other users. If save_type is -.PN SmSaveGlobal , -the user wants the client to commit all of its data to permanent, -globally accessible storage. If save_type is -.PN SmSaveBoth , -the client should do both of these (it should first commit the data to -permanent storage before updating its properties). -.LP -Some examples are as follows: -.LP -.IP \(bu 5 -If a word processor were sent a ``Save Yourself'' with a type of -.PN SmSaveLocal , -it could create a temporary file that included the -current contents of the file, the location of the cursor, and -other aspects of the current editing session. -It would then update its SmRestartCommand property -with enough information to find this temporary file. -.IP \(bu 5 -If a word processor were sent a ``Save Yourself'' with a type of -.PN SmSaveGlobal , -it would simply save the currently edited file. -.IP \(bu 5 -If a word processor were sent a ``Save Yourself'' with a type of -.PN SmSaveBoth , -it would first save the currently edited file. -It would then create a temporary file with information -such as the current position of the cursor -and what file is being edited. -Finally, it would update its SmRestartCommand property -with enough information to find the temporary file. -.LP -The shutdown argument specifies whether the system is being -shut down. The interaction is different depending on whether or not -shutdown is set. If not shutting down, the client should save its -state and wait for a ``Save Complete'' message. If shutting down, -the client must save state and -then prevent interaction until it receives either a ``Die'' -or a ``Shutdown Cancelled.'' -.LP -The fast argument specifies that the client should save its state -as quickly as possible. For example, if the session manager knows that -power is about to fail, it would set fast to -.PN True . -.NH 3 -The Die Callback -.XS -\*(SN The Die Callback -.XE -.LP -The Die callback is of type -.PN SmcDieProc . -.sM -.FD 0 -typedef void (*SmcDieProc)(); - -void DieProc\^(\^\fIsmc_conn\fP, \fIclient_data\fP\^) -.br - SmcConn \fIsmc_conn\fP\^; -.br - SmPointer \fIclient_data\fP\^; -.FN -.IP \fIsmc_conn\fP 1i -The session management connection object. -.IP \fIclient_data\fP 1i -Client data specified when the callback was registered. -.LP -.eM -The session manager sends a ``Die'' message to a client -when it wants it to die. The client should respond by calling -.PN SmcCloseConnection . -A session manager that behaves properly will send a -``Save Yourself'' message before the ``Die'' message. -.NH 3 -The Save Complete Callback -.XS -\*(SN The Save Complete Callback -.XE -.LP -The Save Complete callback is of type -.PN SmcSaveCompleteProc . -.sM -.FD 0 -typedef void (*SmcSaveCompleteProc)(); - -void SaveCompleteProc\^(\^\fIsmc_conn\fP, \fIclient_data\fP\^) -.br - SmcConn \fIsmc_conn\fP\^; -.br - SmPointer \fIclient_data\fP\^; -.FN -.IP \fIsmc_conn\fP 1i -The session management connection object. -.IP \fIclient_data\fP 1i -Client data specified when the callback was registered. -.LP -.eM -When the session manager is done with a checkpoint, it will send each of -the clients a ``Save Complete'' message. The client is then free to -change its state. -.NH 3 -The Shutdown Cancelled Callback -.XS -\*(SN The Shutdown Cancelled Callback -.XE -.LP -The Shutdown Cancelled callback is of type -.PN SmcShutdownCancelledProc . -.sM -.FD 0 -typedef void (*SmcShutdownCancelledProc)(); - -void ShutdownCancelledProc\^(\^\fIsmc_conn\fP, \fIclient_data\fP\^) -.br - SmcConn \fIsmc_conn\fP\^; -.br - SmPointer \fIclient_data\fP\^; -.FN -.IP \fIsmc_conn\fP 1i -The session management connection object. -.IP \fIclient_data\fP 1i -Client data specified when the callback was registered. -.LP -.eM -The session manager sends a ``Shutdown Cancelled'' message -when the user cancelled the shutdown during an interaction -(see section 5.5, ``Interacting With the User''). -The client can now continue as if the shutdown had never happened. -If the client has not called -.PN SmcSaveYourselfDone -yet, it can either abort the save and then call -.PN SmcSaveYourselfDone -with the success argument set to -.PN False , -or it can continue with the save and then call -.PN SmcSaveYourselfDone -with the success argument set to reflect the outcome of the save. -.NH 2 -Closing the Connection -.XS -\*(SN Closing the Connection -.XE -.LP -To close a connection with a session manager, use -.PN SmcCloseConnection . -.LP -.sM -.FD 0 -SmcCloseStatus SmcCloseConnection\^(\^\fIsmc_conn\fP, \fIcount\fP\^, \fIreason_msgs\fP\^) -.br - SmcConn \fIsmc_conn\fP\^; -.br - int \fIcount\fP\^; -.br - char **\fIreason_msgs\fP\^; -.FN -.IP \fIsmc_conn\fP 1i -The session management connection object. -.IP \fIcount\fP 1i -The number of reason messages. -.IP \fIreason_msgs\fP 1i -The reasons for closing the connection. -.LP -.eM -The reason_msgs argument will most likely be NULL if resignation -is expected by the client. -Otherwise, it contains a list of null-terminated Compound Text strings -representing the reason for termination. -The session manager should display these reason messages -to the user. -.LP -Note that SMlib used the ICE protocol to establish a connection with -the session manager, and various protocols other than session management -may be active on the ICE connection. When -.PN SmcCloseConnection -is called, the ICE connection will be closed only if all protocols -have been shutdown on the connection. Check the ICElib -standard for -.PN IceAddConnectionWatch -and -.PN IceRemoveConnectionWatch -to learn how to set up a callback to be invoked each time an ICE connection is -opened or closed. Typically this callback adds/removes the ICE file -descriptor from the list of active descriptors to call -.PN select -on (or calls -.PN XtAppAddInput -or -.PN XtRemoveInput ). -.LP -.PN SmcCloseConnection -returns one of the following values: -.IP \(bu 5 -.PN SmcClosedNow -\- the ICE connection was closed at this time, the watch procedures were -invoked, and the connection was freed. -.IP \(bu 5 -.PN SmcClosedASAP -\- an IO error had occurred on the connection, but -.PN SmcCloseConnection -is being called within a nested -.PN IceProcessMessages . -The watch procedures have been invoked at this time, but the connection -will be freed as soon as possible (when the nesting level reaches zero and -.PN IceProcessMessages -returns a status of -.PN IceProcessMessagesConnectionClosed ). -.IP \(bu 5 -.PN SmcConnectionInUse -\- the connection was not closed at this time, because it is being used by -other active protocols. -.NH 2 -Modifying Callbacks -.XS -\*(SN Modifying Callbacks -.XE -.LP -To modify callbacks set up in -.PN SmcOpenConnection , -use -.PN SmcModifyCallbacks . -.sM -.FD 0 -void SmcModifyCallbacks\^(\^\fIsmc_conn\fP, \fImask\fP\^, \fIcallbacks\fP\^) -.br - SmcConn \fIsmc_conn\fP\^; -.br - unsigned long \fImask\fP\^; -.br - SmcCallbacks *\fIcallbacks\fP\^; -.FN -.IP \fIsmc_conn\fP 1i -The session management connection object. -.IP \fImask\fP 1i -A mask indicating which callbacks to modify. -.IP \fIcallbacks\fP 1i -The new callbacks. -.LP -.eM -When specifying a value for the mask argument, the following -values may be ORed together: -.LP -.Ds 0 -.PN SmcSaveYourselfProcMask -.PN SmcDieProcMask -.PN SmcSaveCompleteProcMask -.PN SmcShutdownCancelledProcMask -.De -.NH 2 -Setting, Deleting, and Retrieving Session Management Properties -.XS -\*(SN Setting, Deleting, and Retrieving Session Management Properties -.XE -.LP -To set session management properties for this client, use -.PN SmcSetProperties . -.sM -.FD 0 -void SmcSetProperties\^(\^\fIsmc_conn\fP, \fInum_props\fP\^, \fIprops\fP\^) -.br - SmcConn \fIsmc_conn\fP\^; -.br - int \fInum_props\fP\^; -.br - SmProp **\fIprops\fP\^; -.FN -.IP \fIsmc_conn\fP 1i -The session management connection object. -.IP \fInum_props\fP 1i -The number of properties. -.IP \fIprops\fP 1i -The list of properties to set. -.LP -.eM -The properties are specified as an array of property pointers. -Previously set property values may be over-written using the -.PN SmcSetProperties -function. Note that the session manager is not -expected to restore property values when the session is restarted. Because -of this, clients should not try to use the session manager as -a database for storing application specific state. -.LP -For a description of session management properties and the -.PN SmProp -structure, see section 7, ``Session Management Properties.'' -.sp -.LP -To delete properties previously set by the client, use -.PN SmcDeleteProperties . -.sM -.FD 0 -void SmcDeleteProperties\^(\^\fIsmc_conn\fP, \fInum_props\fP\^, \fIprop_names\fP\^) -.br - SmcConn \fIsmc_conn\fP\^; -.br - int \fInum_props\fP\^; -.br - char **\fIprop_names\fP\^; -.FN -.IP \fIsmc_conn\fP 1i -The session management connection object. -.IP \fInum_props\fP 1i -The number of properties. -.IP \fIprop_names\fP 1i -The list of properties to delete. -.LP -.eM -.LP -To get properties previously stored by the client, use -.PN SmcGetProperties . -.sM -.FD 0 -Status SmcGetProperties\^(\^\fIsmc_conn\fP, \fIprop_reply_proc\fP\^, \fIclient_data\fP\^) -.br - SmcConn \fIsmc_conn\fP\^; -.br - SmcPropReplyProc \fIprop_reply_proc\fP\^; -.br - SmPointer \fIclient_data\fP\^; -.FN -.IP \fIsmc_conn\fP 1i -The session management connection object. -.IP \fIprop_reply_proc\fP 1i -The callback to be invoked when the properties reply comes back. -.IP \fIclient_data\fP 1i -This pointer to client data will be passed to the -.PN SmcPropReplyProc -callback. -.LP -.eM -The return value of -.PN SmcGetProperties -is zero for failure and a positive value for success. -.LP -Note that the library does not block until the properties reply comes back. -Rather, a callback of type -.PN SmcPropReplyProc -is invoked when the data is ready. -.sM -.FD 0 -typedef void (*SmcPropReplyProc)(); - -void PropReplyProc\^(\^\fIsmc_conn\fP, \fIclient_data\fP\^, \fInum_props\fP\^, \fIprops\fP\^) -.br - SmcConn \fIsmc_conn\fP\^; -.br - SmPointer \fIclient_data\fP\^; -.br - int \fInum_props\fP\^; -.br - SmProp **\fIprops\fP\^; -.FN -.IP \fIsmc_conn\fP 1i -The session management connection object. -.IP \fIclient_data\fP 1i -Client data specified when the callback was registered. -.IP \fInum_props\fP 1i -The number of properties returned. -.IP \fIprops\fP 1i -The list of properties returned. -.LP -.eM -To free each property, use -.PN SmFreeProperty -(see section 8, ``Freeing Data''). -To free the actual array of pointers, use -.PN free . -.NH 2 -Interacting With the User -.XS -\*(SN Interacting With the User -.XE -.LP -After receiving a ``Save Yourself'' message with an interact_style of -.PN SmInteractStyleErrors -or -.PN SmInteractStyleAny , -the client may choose to interact with the user. -Because only one client can interact with the user at a time, the client -must call -.PN SmcInteractRequest -and wait for an ``Interact'' message from the session manager. -.sM -.FD 0 -Status SmcInteractRequest\^(\^\fIsmc_conn\fP, \fIdialog_type\fP\^, \fIinteract_proc\fP\^, \fIclient_data\fP\^) -.br - SmcConn \fIsmc_conn\fP\^; -.br - int \fIdialog_type\fP\^; -.br - SmcInteractProc \fIinteract_proc\fP\^; -.br - SmPointer \fIclient_data\fP\^; -.FN -.IP \fIsmc_conn\fP 1i -The session management connection object. -.IP \fIdialog_type\fP 1i -The type of dialog the client wishes to present to the user. -.IP \fIinteract_proc\fP 1i -The callback to be invoked when the ``Interact'' message arrives from -the session manager. -.IP \fIclient_data\fP 1i -This pointer to client data will be passed to the -.PN SmcInteractProc -callback when the ``Interact'' message arrives. -.LP -.eM -The return value of -.PN SmcInteractRequest -is zero for failure and a positive value for success. -.LP -The dialog_type argument specifies either -.PN SmDialogError , -indicating that the client wants to start an error dialog, or -.PN SmDialogNormal , -meaning that the client wishes to start a nonerror dialog. -.LP -Note that if a shutdown is in progress, the user may have the option of -cancelling the shutdown. If the shutdown is cancelled, the clients that -have not interacted yet with the user will receive a -``Shutdown Cancelled'' message instead of the ``Interact'' message. -.LP -The -.PN SmcInteractProc -callback will be invoked when the ``Interact'' message arrives from -the session manager. -.sM -.FD 0 -typedef void (*SmcInteractProc)(); - -void InteractProc\^(\^\fIsmc_conn\fP, \fIclient_data\fP\^) -.br - SmcConn \fIsmc_conn\fP\^; -.br - SmPointer \fIclient_data\fP\^; -.FN -.IP \fIsmc_conn\fP 1i -The session management connection object. -.IP \fIclient_data\fP 1i -Client data specified when the callback was registered. -.LP -.eM -.LP -After interacting with the user (in response to an ``Interact'' message), -you should call -.PN SmcInteractDone . -.sM -.FD 0 -void SmcInteractDone\^(\^\fIsmc_conn\fP, \fIcancel_shutdown\fP\^) -.br - SmcConn \fIsmc_conn\fP\^; -.br - Bool \fIcancel_shutdown\fP\^; -.FN -.IP \fIsmc_conn\fP 1i -The session management connection object. -.IP \fIcancel_shutdown\fP 1i -If -.PN True , -indicates that the user requests that the entire shutdown be cancelled. -.LP -.eM -The cancel_shutdown argument may only be -.PN True -if the corresponding ``Save Yourself'' specified -.PN True -for shutdown and -.PN SmInteractStyleErrors -or -.PN SmInteractStyleAny -for the interact_style. -.NH 2 -Requesting a Save Yourself -.XS -\*(SN Requesting a Save Yourself -.XE -.LP -To request a checkpoint from the session manager, use -.PN SmcRequestSaveYourself . -.sM -.FD 0 -void SmcRequestSaveYourself\^(\^\fIsmc_conn\fP, \fIsave_type\fP\^, \fIshutdown\fP\^, \fIinteract_style\fP\^, \fIfast\fP\^, \fIglobal\fP\^) -.br - SmcConn \fIsmc_conn\fP\^; -.br - int \fIsave_type\fP\^; -.br - Bool \fIshutdown\fP\^; -.br - int \fIinteract_style\fP\^; -.br - Bool \fIfast\fP\^; -.br - Bool \fIglobal\fP\^; -.FN -.IP \fIsmc_conn\fP 1i -The session management connection object. -.IP \fIsave_type\fP 1i -Specifies the type of information that should be saved. -.IP \fIshutdown\fP 1i -Specifies if a shutdown is taking place. -.IP \fIinteract_style\fP 1i -The type of interaction allowed with the user. -.IP \fIfast\fP 1i -If -.PN True , -the client should save its state as quickly as possible. -.IP \fIglobal\fP 1i -Controls who gets the ``Save Yourself.'' -.LP -.eM -The save_type, shutdown, interact_style, and -fast arguments are discussed in more detail in section 5.1.1, -``The Save Yourself Callback.'' -.LP -If global is set to -.PN True , -then the resulting ``Save Yourself'' should be -sent to all clients in the session. For example, a vendor of a -Uninterruptible Power Supply (UPS) might include a Session -Management client that would monitor the status of the UPS -and generate a fast shutdown if the power is about to be lost. -.LP -If global is set to -.PN False , -then the ``Save Yourself'' should only be sent to the client that -requested it. -.NH 2 -Requesting a Save Yourself Phase 2 -.XS -\*(SN Requesting a Save Yourself Phase 2 -.XE -.LP -In response to a ``Save Yourself, the client may request to be informed -when all the other clients are quiescent so that it can save their state. -To do so, use -.PN SmcRequestSaveYourselfPhase2 . -.sM -.FD 0 -Status SmcRequestSaveYourselfPhase2\^(\^\fIsmc_conn\fP, \fIsave_yourself_phase2_proc\fP\^, \fIclient_data\fP\^) -.br - SmcConn \fIsmc_conn\fP\^; -.br - SmcSaveYourselfPhase2Proc \fIsave_yourself_phase2_proc\fP\^; -.br - SmPointer \fIclient_data\fP\^; -.FN -.IP \fIsmc_conn\fP 1i -The session management connection object. -.IP \fIsave_yourself_phase2_proc\fP 1i -The callback to be invoked when the ``Save Yourself Phase 2'' message -arrives from the session manager. -.IP \fIclient_data\fP 1i -This pointer to client data will be passed to the -.PN SmcSaveYourselfPhase2Proc -callback when the ``Save Yourself Phase 2'' message arrives. -.LP -.eM -The return value of -.PN SmcRequestSaveYourselfPhase2 -is zero for failure and a positive value for success. -.LP -This request is needed by clients that manage other clients (for example, -window managers, workspace managers, and so on). -The manager must make sure that all of the clients that are being managed -are in an idle state so that their state can be saved. -.NH 2 -Completing a Save Yourself -.XS -\*(SN Completing a Save Yourself -.XE -.LP -After saving state in response to a ``Save Yourself'' message, -you should call -.PN SmcSaveYourselfDone . -.sM -.FD 0 -void SmcSaveYourselfDone\^(\^\fIsmc_conn\fP, \fIsuccess\fP\^) -.br - SmcConn \fIsmc_conn\fP\^; -.br - Bool \fIsuccess\fP\^; -.FN -.IP \fIsmc_conn\fP 1i -The session management connection object. -.IP \fIsuccess\fP 1i -If -.PN True , -the ``Save Yourself'' operation was completed successfully. -.LP -.eM -Before calling -.PN SmcSaveYourselfDone , -the client must have set each required property at least once since -the client registered with the session manager. -.NH 2 -Using Smc Informational Functions -.XS -\*(SN Using Smc Informational Functions -.XE -.LP -.sM -.FD 0 -int SmcProtocolVersion\^(\^\fIsmc_conn\fP\^) -.br - SmcConn \fIsmc_conn\fP\^; -.FN -.eM -.PN SmcProtocolVersion -returns the major version of the session management protocol -associated with this session. -.sp -.LP -.sM -.FD 0 -int SmcProtocolRevision\^(\^\fIsmc_conn\fP\^) -.br - SmcConn \fIsmc_conn\fP\^; -.FN -.eM -.PN SmcProtocolRevision -returns the minor version of the session management protocol -associated with this session. -.sp -.LP -.sM -.FD 0 -char *SmcVendor\^(\^\fIsmc_conn\fP\^) -.br - SmcConn \fIsmc_conn\fP\^; -.FN -.eM -.PN SmcVendor -returns a string that provides some identification of the owner of -the session manager. The string should be freed with a call to -.PN free . -.sp -.LP -.sM -.FD 0 -char *SmcRelease\^(\^\fIsmc_conn\fP\^) -.br - SmcConn \fIsmc_conn\fP\^; -.FN -.eM -.PN SmcRelease -returns a string that provides the release number of the session manager. -The string should be freed with a call to -.PN free . -.sp -.LP -.sM -.FD 0 -char *SmcClientID\^(\^\fIsmc_conn\fP\^) -.br - SmcConn \fIsmc_conn\fP\^; -.FN -.eM -.PN SmcClientID -returns a null-terminated string for the client ID associated with -this connection. This information was also returned in -.PN SmcOpenConnection -(it is provided here for convenience). -Call -.PN free -on this pointer when the client ID is no longer needed. -.sp -.LP -.sM -.FD 0 -IceConn SmcGetIceConnection\^(\^\fIsmc_conn\fP\^) -.br - SmcConn \fIsmc_conn\fP\^; -.FN -.eM -.PN SmcGetIceConnection -returns the ICE connection object associated with this session management -connection object. The ICE connection object can be used to get some -additional information about the connection. Some of the more useful -functions which can be used on the IceConn are -.PN IceConnectionNumber , -.PN IceConnectionString , -.PN IceLastSentSequenceNumber , -.PN IceLastReceivedSequenceNumber , -and -.PN IcePing . -For further information, -see the \fIInter-Client Exchange Library\fP standard. -.NH 2 -Error Handling -.XS -\*(SN Error Handling -.XE -.LP -If the client receives an unexpected protocol error from the session manager, -an error handler is invoked by SMlib. A default error handler exists that -simply prints the error message to -.PN stderr -and exits if the severity of the error is fatal. -The client can change this error handler by calling the -.PN SmcSetErrorHandler -function. -.sM -.FD 0 -SmcErrorHandler SmcSetErrorHandler\^(\^\fIhandler\fP\^) -.br - SmcErrorHandler \fIhandler\fP\^; -.FN -.IP \fIhandler\fP 1i -The error handler. You should pass NULL to restore the default handler. -.LP -.eM -.PN SmcSetErrorHandler -returns the previous error handler. -.LP -The -.PN SmcErrorHandler -has the following type: -.sM -.FD 0 -typedef void (*SmcErrorHandler)(); - -void ErrorHandler\^(\^\fIsmc_conn\fP, \fIswap\fP\^, \fIoffending_minor_opcode\fP\^, \fIoffending_sequence_num\fP\^, \fIerror_class\fP\^, \fIseverity\fP\^, \fIvalues\fP\^) -.br - SmcConn \fIsmc_conn\fP\^; -.br - Bool \fIswap\fP\^; -.br - int \fIoffending_minor_opcode\fP\^; -.br - unsigned long \fIoffending_sequence_num\fP\^; -.br - int \fIerror_class\fP\^; -.br - int \fIseverity\fP\^; -.br - IcePointer \fIvalues\fP\^; -.FN -.IP \fIsmc_conn\fP 1i -The session management connection object. -.IP \fIswap\fP 1i -A flag that indicates if the specified values need byte swapping. -.IP \fIoffending_minor_opcode\fP 1i -The minor opcode of the offending message. -.IP \fIoffending_sequence_num\fP 1i -The sequence number of the offending message. -.IP \fIerror_class\fP 1i -The error class of the offending message. -.IP \fIseverity\fP 1i -.PN IceCanContinue , -.PN IceFatalToProtocol , -or -.PN IceFatalToConnection . -.IP \fIvalues\fP 1i -Any additional error values specific to the minor opcode and class. -.LP -.eM -Note that this error handler is invoked for protocol related errors. -To install an error handler to be invoked when an IO error occurs, use -.PN IceSetIOErrorHandler . -For further information, -see the \fIInter-Client Exchange Library\fP\^ standard. -.NH 1 -Session Management Server (Sms) Functions -.XS -\*(SN Session Management Server (Sms) Functions -.XE -.LP -This section discusses how Session Management servers: -.IP \(bu 5 -Initialize the library -.IP \(bu 5 -Register the client -.IP \(bu 5 -Send a ``Save Yourself'' message -.IP \(bu 5 -Send a ``Save Yourself Phase 2'' message -.IP \(bu 5 -Send an ``Interact'' message -.IP \(bu 5 -Send a ``Save Complete'' message -.IP \(bu 5 -Send a ``Die'' message -.IP \(bu 5 -Cancel a shutdown -.IP \(bu 5 -Return properties -.IP \(bu 5 -Ping a client -.IP \(bu 5 -Clean up after a client disconnects -.IP \(bu 5 -Use Sms informational functions -.IP \(bu 5 -Handle errors -.NH 2 -Initializing the Library -.XS -\*(SN Initializing the Library -.XE -.LP -.PN SmsInitialize -is the first SMlib function that should be called by a -session manager. It provides information about the session manager -and registers a callback that will be invoked each -time a new client connects to the session manager. -.sM -.FD 0 -Status SmsInitialize\^(\^\fIvendor\fP, \fIrelease\fP\^, \fInew_client_proc\fP\^, \fImanager_data\fP\^, \fIhost_based_auth_proc\fP\^, -.br - \fIerror_length\fP\^, \fIerror_string_ret\fP\^) -.br - char *\fIvendor\fP\^; -.br - char *\fIrelease\fP\^; -.br - SmsNewClientProc \fInew_client_proc\fP\^; -.br - SmPointer \fImanager_data\fP\^; -.br - IceHostBasedAuthProc \fIhost_based_auth_proc\fP\^; -.br - int \fIerror_length\fP\^; -.br - char *\fIerror_string_ret\fP\^; -.FN -.IP \fIvendor\fP 1i -A string specifying the session manager vendor. -.IP \fIrelease\fP 1i -A string specifying the session manager release number. -.IP \fInew_client_proc\fP 1i -Callback to be invoked each time a new client connects to the session manager. -.IP \fImanager_data\fP 1i -When the -.PN SmsNewClientProc -callback is invoked, this pointer to manager data will be passed. -.IP \fIhost_based_auth_proc\fP 1i -Host based authentication callback. -.IP \fIerror_length\fP 1i -Length of the error_string_ret argument passed in. -.IP \fIerror_string_ret\fP 1i -Returns a null-terminated error message, if any. -The error_string_ret points to user supplied memory. -No more than error_length bytes are used. -.LP -.eM -After the -.PN SmsInitialize -function is called, the session manager should call the -.PN IceListenForConnections -function to listen for new connections. Afterwards, each time a -client connects, the session manager should call -.PN IceAcceptConnection . -.LP -See section 9, ``Authentication of Clients,'' -for more details on authentication (including host based authentication). -Also see the \fIInter-Client Exchange Library\fP\^ standard -for further details on listening for and accepting ICE connections. -.LP -Each time a new client connects to the session manager, the -.PN SmsNewClientProc -callback is invoked. The session manager obtains a new opaque connection -object that it should use for all future interaction with the client. At -this time, the session manager must also register a set of callbacks to -respond to the different messages that the client might send. -.sM -.FD 0 -typedef Status (*SmsNewClientProc)(); - -Status NewClientProc\^(\^\fIsms_conn\fP, \fImanager_data\fP\^, \fImask_ret\fP\^, \fIcallbacks_ret\fP\^, \fIfailure_reason_ret\fP\^) -.br - SmsConn \fIsms_conn\fP\^; -.br - SmPointer \fImanager_data\fP\^; -.br - unsigned long *\fImask_ret\fP\^; -.br - SmsCallbacks *\fIcallbacks_ret\fP\^; -.br - char **\fIfailure_reason_ret\fP\^; -.FN -.IP \fIsms_conn\fP 1i -A new opaque connection object. -.IP \fImanager_data\fP 1i -Manager data specified when the callback was registered. -.IP \fImask_ret\fP 1i -On return, indicates which callbacks were set by the session manager. -.IP \fIcallbacks_ret\fP 1i -On return, contains the callbacks registered by the session manager. -.IP \fIfailure_reason_ret\fP 1i -Failure reason returned. -.LP -.eM -If a failure occurs, the -.PN SmsNewClientProc -should return a zero status as well as allocate and return a failure -reason string in failure_reason_ret. -SMlib will be responsible for freeing this memory. -.LP -The session manager must register a set of callbacks to respond to client -events. The mask_ret argument specifies which callbacks are set. -All of the callbacks specified in this version of SMlib are mandatory. The -mask_ret argument is necessary in order to maintain backwards -compatibility in future versions of the library. -.LP -The following values may be ORed together to obtain a mask value: -.LP -.Ds 0 -.PN SmsRegisterClientProcMask -.PN SmsInteractRequestProcMask -.PN SmsInteractDoneProcMask -.PN SmsSaveYourselfRequestProcMask -.PN SmsSaveYourselfP2RequestProcMask -.PN SmsSaveYourselfDoneProcMask -.PN SmsCloseConnectionProcMask -.PN SmsSetPropertiesProcMask -.PN SmsDeletePropertiesProcMask -.PN SmsGetPropertiesProcMask -.De -.LP -For each callback, the session manager can register a pointer to manager -data specific to that callback. This pointer will be passed to the callback -when it is invoked by SMlib. -.sM -.LP -.Ds 0 -.TA .5i 1i 1.5i -.ta .5i 1i 1.5i -typedef struct { - struct { - SmsRegisterClientProc callback; - SmPointer manager_data; - } register_client; - - struct { - SmsInteractRequestProc callback; - SmPointer manager_data; - } interact_request; - - struct { - SmsInteractDoneProc callback; - SmPointer manager_data; - } interact_done; - - struct { - SmsSaveYourselfRequestProc callback; - SmPointer manager_data; - } save_yourself_request; - - struct { - SmsSaveYourselfPhase2RequestProc callback; - SmPointer manager_data; - } save_yourself_phase2_request; - - struct { - SmsSaveYourselfDoneProc callback; - SmPointer manager_data; - } save_yourself_done; - - struct { - SmsCloseConnectionProc callback; - SmPointer manager_data; - } close_connection; - - struct { - SmsSetPropertiesProc callback; - SmPointer manager_data; - } set_properties; - - struct { - SmsDeletePropertiesProc callback; - SmPointer manager_data; - } delete_properties; - - struct { - SmsGetPropertiesProc callback; - SmPointer manager_data; - } get_properties; - -} SmsCallbacks; -.De -.LP -.eM -.NH 3 -The Register Client Callback -.XS -\*(SN The Register Client Callback -.XE -.LP -The Register Client callback is the first callback that will be -invoked after the client connects to the session manager. Its type is -.PN SmsRegisterClientProc . -.sM -.FD 0 -typedef Status (*SmsRegisterClientProc(); - -Status RegisterClientProc\^(\^\fIsms_conn\fP, \fImanager_data\fP\^, \fIprevious_id\fP\^) -.br - SmsConn \fIsms_conn\fP\^; -.br - SmPointer \fImanager_data\fP\^; -.br - char *\fIprevious_id\fP\^; -.FN -.IP \fIsms_conn\fP 1i -The session management connection object. -.IP \fImanager_data\fP 1i -Manager data specified when the callback was registered. -.IP \fIprevious_id\fP 1i -The client ID from the previous session. -.LP -.eM -Before any further interaction takes place with the client, -the client must be registered with the session manager. -.LP -If the client is being restarted from a previous session, -previous_id will contain a null-terminated string representing -the client ID from the previous session. Call -.PN free -on the previous_id pointer when it is no longer needed. -If the client is first joining the session, previous_id will be NULL. -.LP -If previous_id is invalid, the session manager should not register -the client at this time. This callback should return a status of zero, -which will cause an error message to be sent to the client. -The client should re-register with previous_id set to NULL. -.LP -Otherwise, the session manager should register the client with a -unique client ID by calling the -.PN SmsRegisterClientReply -function (to be discussed shortly), and the -.PN SmsRegisterClientProc -callback should return a status of one. -.NH 3 -The Interact Request Callback -.XS -\*(SN The Interact Request Callback -.XE -.LP -The Interact Request callback is of type -.PN SmsInteractRequestProc . -.sM -.FD 0 -typedef void (*SmsInteractRequestProc)(); - -void InteractRequestProc\^(\^\fIsms_conn\fP, \fImanager_data\fP\^, \fIdialog_type\fP\^) -.br - SmsConn \fIsms_conn\fP\^; -.br - SmPointer \fImanager_data\fP\^; -.br - int \fIdialog_type\fP\^; -.FN -.IP \fIsms_conn\fP 1i -The session management connection object. -.IP \fImanager_data\fP 1i -Manager data specified when the callback was registered. -.IP \fIdialog_type\fP 1i -The type of dialog the client wishes to present to the user. -.LP -.eM -When a client receives a ``Save Yourself'' message with an -interact_style of -.PN SmInteractStyleErrors -or -.PN SmInteractStyleAny , -the client may choose to interact with the user. -Because only one client can interact with the user at a time, the client -must request to interact with the user. The session manager should keep -a queue of all clients wishing to interact. It should send an ``Interact'' -message to one client at a time and wait for an ``Interact Done'' message -before continuing with the next client. -.LP -The dialog_type argument specifies either -.PN SmDialogError , -indicating that the client wants to start an error dialog, -or -.PN SmDialogNormal , -meaning that the client wishes to start a nonerror dialog. -.LP -If a shutdown is in progress, the user may have the option of cancelling -the shutdown. If the shutdown is cancelled (specified in the ``Interact -Done'' message), the session manager should send a -``Shutdown Cancelled'' message to each client that requested to interact. -.NH 3 -The Interact Done Callback -.XS -\*(SN The Interact Done Callback -.XE -.LP -When the client is done interacting with the user, the -.PN SmsInteractDoneProc -callback will be invoked. -.sM -.FD 0 -typedef void (*SmsInteractDoneProc)(); - -void InteractDoneProc\^(\^\fIsms_conn\fP, \fImanager_data\fP\^, \fIcancel_shutdown\fP\^) -.br - SmsConn \fIsms_conn\fP\^; -.br - SmPointer \fImanager_data\fP\^; -.br - Bool \fIcancel_shutdown\fP\^; -.FN -.IP \fIsms_conn\fP 1i -The session management connection object. -.IP \fImanager_data\fP 1i -Manager data specified when the callback was registered. -.IP \fIcancel_shutdown\fP 1i -Specifies if the user requests that the entire shutdown be cancelled. -.LP -.eM -Note that the shutdown can be cancelled only if the corresponding -``Save Yourself'' specified -.PN True -for shutdown and -.PN SmInteractStyleErrors -or -.PN SmInteractStyleAny -for the interact_style. -.NH 3 -The Save Yourself Request Callback -.XS -\*(SN The Save Yourself Request Callback -.XE -.LP -The Save Yourself Request callback is of type -.PN SmsSaveYourselfRequestProc . -.sM -.FD 0 -typedef void (*SmsSaveYourselfRequestProc)(); - -void SaveYourselfRequestProc\^(\^\fIsms_conn\fP, \fImanager_data\fP\^, \fIsave_type\fP\^, \fIshutdown\fP\^, \fIinteract_style\fP\^, \fIfast\fP\^, \fIglobal\fP\^) -.br - SmsConn \fIsms_conn\fP\^; -.br - SmPointer \fImanager_data\fP\^; -.br - int \fIsave_type\fP\^; -.br - Bool \fIshutdown\fP\^; -.br - int \fIinteract_style\fP\^; -.br - Bool \fIfast\fP\^; -.br - Bool \fIglobal\fP\^; -.FN -.IP \fIsms_conn\fP 1i -The session management connection object. -.IP \fImanager_data\fP 1i -Manager data specified when the callback was registered. -.IP \fIsave_type\fP 1i -Specifies the type of information that should be saved. -.IP \fIshutdown\fP 1i -Specifies if a shutdown is taking place. -.IP \fIinteract_style\fP 1i -The type of interaction allowed with the user. -.IP \fIfast\fP 1i -If -.PN True , -the client should save its state as quickly as possible. -.IP \fIglobal\fP 1i -Controls who gets the ``Save Yourself.'' -.LP -.eM -The Save Yourself Request prompts the session manager to -initiate a checkpoint or shutdown. -For information on the save_type, shutdown, interact_style, and fast arguments, -see section 6.3, ``Sending a Save Yourself Message.'' -.LP -If global is set to -.PN True , -then the resulting ``Save Yourself'' should be -sent to all applications. If global is set to -.PN False , -then the ``Save Yourself'' should only be sent to the client -that requested it. -.NH 3 -The Save Yourself Phase 2 Request Callback -.XS -\*(SN The Save Yourself Phase 2 Request Callback -.XE -.LP -The Save Yourself Phase 2 Request callback is of type -.PN SmsSaveYourselfPhase2RequestProc . -.sM -.FD 0 -typedef void (*SmsSaveYourselfPhase2RequestProc)(); - -void SmsSaveYourselfPhase2RequestProc\^(\^\fIsms_conn\fP, \fImanager_data\fP\^) -.br - SmsConn \fIsms_conn\fP\^; -.br - SmPointer \fImanager_data\fP\^; -.FN -.IP \fIsms_conn\fP 1i -The session management connection object. -.IP \fImanager_data\fP 1i -Manager data specified when the callback was registered. -.LP -.eM -This request is sent by clients that manage other clients (for example, -window managers, workspace managers, and so on). -Such managers must make sure that all of the clients that are being managed -are in an idle state so that their state can be saved. -.NH 3 -The Save Yourself Done Callback -.XS -\*(SN The Save Yourself Done Callback -.XE -.LP -When the client is done saving its state in response to a -``Save Yourself'' message, the -.PN SmsSaveYourselfDoneProc -will be invoked. -.sM -.FD 0 -typedef void (*SmsSaveYourselfDoneProc)(); - -void SaveYourselfDoneProc\^(\^\fIsms_conn\fP, \fImanager_data\fP\^, \fIsuccess\fP\^) -.br - SmsConn \fIsms_conn\fP\^; -.br - SmPointer \fImanager_data\fP\^; -.br - Bool \fIsuccess\fP\^; -.FN -.IP \fIsms_conn\fP 1i -The session management connection object. -.IP \fImanager_data\fP 1i -Manager data specified when the callback was registered. -.IP \fIsuccess\fP 1i -If -.PN True , -the Save Yourself operation was completed successfully. -.LP -.eM -Before the ``Save Yourself Done'' was sent, the client must have -set each required property at least once since it registered with the -session manager. -.NH 3 -The Connection Closed Callback -.XS -\*(SN The Connection Closed Callback -.XE -.LP -If the client properly terminates (that is, it calls -.PN SmcCloseConnection ), -the -.PN SmsCloseConnectionProc -callback is invoked. -.sM -.FD 0 -typedef void (*SmsCloseConnectionProc)(); - -void CloseConnectionProc\^(\^\fIsms_conn\fP, \fImanager_data\fP\^, \fIcount\fP\^, \fIreason_msgs\fP\^) -.br - SmsConn \fIsms_conn\fP\^; -.br - SmPointer \fImanager_data\fP\^; -.br - int \fIcount\fP\^; -.br - char **\fIreason_msgs\fP\^; -.FN -.IP \fIsms_conn\fP 1i -The session management connection object. -.IP \fImanager_data\fP 1i -Manager data specified when the callback was registered. -.IP \fIcount\fP 1i -The number of reason messages. -.IP \fIreason_msgs\fP 1i -The reasons for closing the connection. -.LP -.eM -The reason_msgs argument will most likely be NULL -and the count argument zero (0) if resignation is expected by the user. -Otherwise, it contains a list -of null-terminated Compound Text strings representing the reason for -termination. The session manager should display these reason messages -to the user. -.LP -Call -.PN SmFreeReasons -to free the reason messages. -For further information, see section 8, ``Freeing Data.'' -.NH 3 -The Set Properties Callback -.XS -\*(SN The Set Properties Callback -.XE -.LP -When the client sets session management properties, the -.PN SmsSetPropertiesProc -callback will be invoked. -.sM -.FD 0 -typedef void (*SmsSetPropertiesProc)(); - -void SetPropertiesProc\^(\^\fIsms_conn\fP, \fImanager_data\fP\^, \fInum_props\fP\^, \fIprops\fP\^) -.br - SmsConn \fIsms_conn\fP\^; -.br - SmPointer \fImanager_data\fP\^; -.br - int \fInum_props\fP\^; -.br - SmProp **\fIprops\fP\^; -.FN -.IP \fIsmc_conn\fP 1i -The session management connection object. -.IP \fImanager_data\fP 1i -Manager data specified when the callback was registered. -.IP \fInum_props\fP 1i -The number of properties. -.IP \fIprops\fP 1i -The list of properties to set. -.LP -.eM -The properties are specified as an array of property pointers. -For a description of session management properties and the -.PN SmProp -structure, see section 7, ``Session Management Properties.'' -.LP -Previously set property values may be over-written. Some properties -have predefined semantics. -The session manager is required to store -nonpredefined properties. -.LP -To free each property, use -.PN SmFreeProperty . -For further information, see section 8, ``Freeing Data.'' -You should free the actual array of pointers with a call to -.PN free . -.NH 3 -The Delete Properties Callback -.XS -\*(SN The Delete Properties Callback -.XE -.LP -When the client deletes session management properties, the -.PN SmsDeletePropertiesProc -callback will be invoked. -.sM -.FD 0 -typedef void (*SmsDeletePropertiesProc)(); - -void DeletePropertiesProc\^(\^\fIsms_conn\fP, \fImanager_data\fP\^, \fInum_props\fP\^, \fIprop_names\fP\^) -.br - SmsConn \fIsms_conn\fP\^; -.br - SmPointer \fImanager_data\fP\^; -.br - int \fInum_props\fP\^; -.br - char **\fIprop_names\fP\^; -.FN -.IP \fIsmc_conn\fP 1i -The session management connection object. -.IP \fImanager_data\fP 1i -Manager data specified when the callback was registered. -.IP \fInum_props\fP 1i -The number of properties. -.IP \fIprop_names\fP 1i -The list of properties to delete. -.LP -.eM -The properties are specified as an array of strings. -For a description of session management properties and the -.PN SmProp -structure, see section 7, ``Session Management Properties.'' -.NH 3 -The Get Properties Callback -.XS -\*(SN The Get Properties Callback -.XE -.LP -The -.PN SmsGetPropertiesProc -callback is invoked when the client wants to retrieve properties it set. -.sM -.FD 0 -typedef void (*SmsGetPropertiesProc)(); - -void GetPropertiesProc\^(\^\fIsms_conn\fP, \fImanager_data\fP\^) -.br - SmsConn \fIsms_conn\fP\^; -.br - SmPointer \fImanager_data\fP\^; -.FN -.IP \fIsmc_conn\fP 1i -The session management connection object. -.IP \fImanager_data\fP 1i -Manager data specified when the callback was registered. -.LP -.eM -The session manager should respond by calling -.PN SmsReturnProperties . -All of the properties set for this client should be returned. -.NH 2 -Registering the Client -.XS -\*(SN Registering the Client -.XE -.LP -To register a client (in response to a -.PN SmsRegisterClientProc -callback), use -.PN SmsRegisterClientReply . -.sM -.FD 0 -Status SmsRegisterClientReply\^(\^\fIsms_conn\fP, \fIclient_id\fP\^) -.br - SmsConn \fIsms_conn\fP\^; -.br - char *\fIclient_id\fP\^; -.FN -.IP \fIsms_conn\fP 1i -The session management connection object. -.IP \fIclient_id\fP 1i -A null-terminated string representing a unique client ID. -.LP -.eM -The return value of -.PN SmsRegisterClientReply -is zero for failure and a positive value for success. Failure will -occur if SMlib can not allocate memory to hold a copy of the client ID -for it's own internal needs. -.LP -If a non-NULL previous_id was specified when the client registered -itself, client_id should be identical to previous_id. -.LP -Otherwise, client_id should be a unique ID freshly generated by -the session manager. In addition, the session manager should send -a ``Save Yourself'' message with type = Local, shutdown = False, -interact-style = None, and fast = False immediately after registering the -client. -.LP -Note that once a client ID has been assigned to the client, the client keeps -this ID indefinitely. If the client is terminated and restarted, it -will be reassigned the same ID. It is desirable to be able to pass -client IDs around from machine to machine, from user to user, and -from session manager to session manager, while retaining the -identity of the client. This, combined with the indefinite -persistence of client IDs, means that client IDs need to be globally -unique. -.LP -You should call the -.PN SmsGenerateClientID -function to generate a globally unique client ID. -.sM -.FD 0 -char *SmsGenerateClientID\^(\^\fIsms_conn\fP\^) -.br - SmsConn \fIsms_conn\fP\^; -.FN -.IP \fIsms_conn\fP 1i -The session management connection object. -.LP -.eM -NULL will be returned if the ID could not be generated. Otherwise, the return -value of the function is the client ID. It should be freed with a call to -.PN free -when no longer needed. -.NH 2 -Sending a Save Yourself Message -.XS -\*(SN Sending a Save Yourself Message -.XE -.LP -To send a ``Save Yourself'' to a client, use -.PN SmsSaveYourself . -.sM -.FD 0 -void SmsSaveYourself\^(\^\fIsms_conn\fP, \fIsave_type\fP\^, \fIshutdown\fP\^, \fIinteract_style\fP\^, \fIfast\fP\^) -.br - SmsConn \fIsms_conn\fP\^; -.br - int \fIsave_type\fP\^; -.br - Bool \fIshutdown\fP\^; -.br - int \fIinteract_style\fP\^; -.br - Bool \fIfast\fP\^; -.FN -.ne 7 -.IP \fIsms_conn\fP 1i -The session management connection object. -.IP \fIsave_type\fP 1i -Specifies the type of information that should be saved. -.IP \fIshutdown\fP 1i -Specifies if a shutdown is taking place. -.IP \fIinteract_style\fP 1i -The type of interaction allowed with the user. -.IP \fIfast\fP 1i -If -.PN True , -the client should save its state as quickly as possible. -.LP -.eM -The session manager sends a ``Save Yourself'' message to a client -either to checkpoint it or just before -termination so that it can save its state. -The client responds with zero or more ``Set Properties'' messages -to update the properties indicating how to restart the client. -When all the properties have been set, the client sends a -``Save Yourself Done'' message. -.LP -If interact_style is -.PN SmInteractStyleNone , -the client must not interact with the -user while saving state. -If interact_style is -.PN SmInteractStyleErrors , -the client may interact with the user only if an error condition arises. If -interact_style is -.PN SmInteractStyleAny , -then the client may interact with the user for any purpose. -The client must send an ``Interact Request'' message -and wait for an ``Interact'' message from the session manager -before it can interact with the user. When the client is done -interacting with the user, it should send an ``Interact Done'' message. -The ``Interact Request'' message can be sent any time after a -``Save Yourself'' and before a ``Save Yourself Done.'' -.LP -If save_type is -.PN SmSaveLocal , -the client must update the properties to reflect its current state. -Specifically, it should save enough information to restore -the state as seen by the user of this client. It should not affect the -state as seen by other users. If save_type is -.PN SmSaveGlobal -the user wants the client to commit all of its data to permanent, -globally accessible storage. If save_type is -.PN SmSaveBoth , -the client should do both of these (it should first commit the data to -permanent storage before updating its properties). -.LP -The shutdown argument specifies whether the session is being -shut down. The interaction is different depending on whether or not -shutdown is set. If not shutting down, then the client can save and -resume normal operation. If shutting down, the client must save and -then must prevent interaction until it receives either a ``Die'' -or a ``Shutdown Cancelled,'' because anything the user does after -the save will be lost. -.LP -The fast argument specifies that the client should save its state -as quickly as possible. For example, if the session manager knows that -power is about to fail, it should set fast to -.PN True . -.NH 2 -Sending a Save Yourself Phase 2 Message -.XS -\*(SN Sending a Save Yourself Phase 2 Message -.XE -.LP -In order to send a ``Save Yourself Phase 2'' message to a client, use -.PN SmsSaveYourselfPhase2 . -.sM -.FD 0 -void SmsSaveYourselfPhase2\^(\^\fIsms_conn\fP\^) -.br - SmsConn \fIsms_conn\fP\^; -.FN -.IP \fIsms_conn\fP 1i -The session management connection object. -.LP -.eM -The session manager sends this message to a client that has previously sent a -``Save Yourself Phase 2 Request'' message. This message informs the -client that all other clients are in a fixed state and this client can save -state that is associated with other clients. -.NH 2 -Sending an Interact Message -.XS -\*(SN Sending an Interact Message -.XE -.LP -To send an ``Interact'' message to a client, use -.PN SmsInteract . -.sM -.FD 0 -void SmsInteract\^(\^\fIsms_conn\fP\^) -.br - SmsConn \fIsms_conn\fP\^; -.FN -.IP \fIsms_conn\fP 1i -The session management connection object. -.LP -.eM -The ``Interact'' message grants the client the privilege of interacting -with the user. When the client is done interacting with the user, it must -send an ``Interact Done'' message to the session manager. -.NH 2 -Sending a Save Complete Message -.XS -\*(SN Sending a Save Complete Message -.XE -.LP -To send a ``Save Complete'' message to a client, use -.PN SmsSaveComplete . -.sM -.FD 0 -void SmsSaveComplete\^(\^\fIsms_conn\fP\^) -.br - SmsConn \fIsms_conn\fP\^; -.FN -.IP \fIsms_conn\fP 1i -The session management connection object. -.LP -.eM -The session manager sends this message when it is done with a checkpoint. -The client is then free to change its state. -.NH 2 -Sending a Die Message -.XS -\*(SN Sending a Die Message -.XE -.LP -To send a ``Die'' message to a client, use -.PN SmsDie . -.sM -.FD 0 -void SmsDie\^(\^\fIsms_conn\fP\^) -.br - SmsConn \fIsms_conn\fP\^; -.FN -.IP \fIsms_conn\fP 1i -The session management connection object. -.LP -.eM -Before the session manager terminates, it should wait for a -``Connection Closed'' message from each client that it sent -a ``Die'' message to, timing out appropriately. -.NH 2 -Cancelling a Shutdown -.XS -\*(SN Cancelling a Shutdown -.XE -.LP -To cancel a shutdown, use -.PN SmsShutdownCancelled . -.sM -.FD 0 -void SmsShutdownCancelled\^(\^\fIsms_conn\fP\^) -.br - SmsConn \fIsms_conn\fP\^; -.FN -.IP \fIsms_conn\fP 1i -The session management connection object. -.LP -.eM -The client can now continue as if the shutdown had never happened. -If the client has not sent a ``Save Yourself Done'' message yet, it can -either abort the save and send a ``Save Yourself Done'' -with the success argument set to -.PN False , -or it can continue with the save and send a ``Save Yourself Done'' -with the success argument set to reflect the outcome of the save. -.NH 2 -Returning Properties -.XS -\*(SN Returning Properties -.XE -.LP -In response to a ``Get Properties'' message, the session manager should call -.PN SmsReturnProperties . -.sM -.FD 0 -void SmsReturnProperties\^(\^\fIsms_conn\fP\^, \fInum_props\fP\^, \fIprops\fP\^) -.br - SmsConn \fIsms_conn\fP\^; -.br - int \fInum_props\fP\^; -.br - SmProp **\fIprops\fP\^; -.FN -.IP \fIsms_conn\fP 1i -The session management connection object. -.IP \fInum_props\fP 1i -The number of properties. -.IP \fIprops\fP 1i -The list of properties to return to the client. -.LP -.eM -The properties are returned as an array of property pointers. -For a description of session management properties and the -.PN SmProp -structure, see section 7, ``Session Management Properties.'' -.NH 2 -Pinging a Client -.XS -\*(SN Pinging a Client -.XE -.LP -To check that a client is still alive, you should use the -.PN IcePing -function provided by the ICE library. -To do so, the ICE -connection must be obtained using the -.PN SmsGetIceConnection -(see section 6.12, ``Using Sms Informational Functions''). -.LP -.sM -.FD 0 -void IcePing\^(\^\fIice_conn\fP, \fIping_reply_proc\fP\^, \fIclient_data\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - IcePingReplyProc \fIping_reply_proc\fP\^; -.br - IcePointer \fIclient_data\fP\^; -.FN -.IP \fIice_conn\fP 1i -A valid ICE connection object. -.IP \fIping_reply_proc\fP 1i -The callback to invoke when the Ping reply arrives. -.IP \fIclient_data\fP 1i -This pointer will be passed to the -.PN IcePingReplyProc -callback. -.LP -.eM -When the Ping reply is ready (if ever), the -.PN IcePingReplyProc -callback will be invoked. A session manager should have some sort -of timeout period, after which it assumes the client has unexpectedly died. -.LP -.sM -.FD 0 -typedef void (*IcePingReplyProc)(); - -void PingReplyProc\^(\^\fIice_conn\fP, \fIclient_data\fP\^) -.br - IceConn \fIice_conn\fP\^; -.br - IcePointer \fIclient_data\fP\^; -.FN -.IP \fIice_conn\fP 1i -The ICE connection object. -.IP \fIclient_data\fP 1i -The client data specified in the call to -.PN IcePing . -.LP -.eM -.NH 2 -Cleaning Up After a Client Disconnects -.XS -\*(SN Cleaning Up After a Client Disconnects -.XE -.LP -When the session manager receives a ``Connection Closed'' message or -otherwise detects that the client aborted the connection, it should -call the -.PN SmsCleanUp -function in order to free up the connection object. -.sM -.FD 0 -void SmsCleanUp\^(\^\fIsms_conn\fP\^) -.br - SmsConn \fIsms_conn\fP\^; -.FN -.IP \fIsms_conn\fP 1i -The session management connection object. -.LP -.eM -.NH 2 -Using Sms Informational Functions -.XS -\*(SN Using Sms Informational Functions -.XE -.LP -.sM -.FD 0 -int SmsProtocolVersion\^(\^\fIsms_conn\fP\^) -.br - SmsConn \fIsms_conn\fP\^; -.FN -.LP -.eM -.PN SmsProtocolVersion -returns the major version of the session management protocol -associated with this session. -.sp -.LP -.sM -.FD 0 -int SmsProtocolRevision\^(\^\fIsms_conn\fP\^) -.br - SmsConn \fIsms_conn\fP\^; -.FN -.LP -.eM -.PN SmsProtocolRevision -returns the minor version of the session management protocol -associated with this session. -.sp -.LP -.sM -.FD 0 -char *SmsClientID\^(\^\fIsms_conn\fP\^) -.br - SmsConn \fIsms_conn\fP\^; -.FN -.LP -.eM -.PN SmsClientID -returns a null-terminated string for the client ID associated with -this connection. -You should call -.PN free -on this pointer when the client ID is no longer needed. -.sp -.LP -To obtain the host name of a client, use -.PN SmsClientHostName . -This host name will be needed to restart the client. -.sM -.FD 0 -char *SmsClientHostName\^(\^\fIsms_conn\fP\^) -.br - SmsConn \fIsms_conn\fP\^; -.FN -.eM -The string returned is of the form \fIprotocol\fP\^/\^\fIhostname\fP\^, -where \fIprotocol\fP\^ is one of {tcp, decnet, local}. -You should call -.PN free -on the string returned when it is no longer needed. -.sp -.LP -.sM -.FD 0 -IceConn SmsGetIceConnection\^(\^\fIsms_conn\fP\^) -.br - SmsConn \fIsms_conn\fP\^; -.FN -.eM -.PN SmsGetIceConnection -returns the ICE connection object associated with this session management -connection object. The ICE connection object can be used to get some -additional information about the connection. Some of the more useful -functions which can be used on the IceConn are -.PN IceConnectionNumber , -and -.PN IceLastSequenceNumber . -For further information, -see the \fIInter-Client Exchange Library\fP\^ standard. -.NH 2 -Error Handling -.XS -\*(SN Error Handling -.XE -.LP -If the session manager receives an unexpected protocol error from a client, -an error handler is invoked by SMlib. A default error handler exists which -simply prints the error message (it does not exit). The session manager can -change this error handler by calling -.PN SmsSetErrorHandler . -.sM -.FD 0 -SmsErrorHandler SmsSetErrorHandler\^(\^\fIhandler\fP\^) -.br - SmsErrorHandler \fIhandler\fP\^; -.FN -.IP \fIhandler\fP 1i -The error handler. -You should pass NULL to restore the default handler. -.LP -.eM -.PN SmsSetErrorHandler -returns the previous error handler. -The -.PN SmsErrorHandler -has the following type: -.sM -.FD 0 -typedef void (*SmsErrorHandler)(); - -void ErrorHandler\^(\^\fIsms_conn\fP, \fIswap\fP\^, \fIoffending_minor_opcode\fP\^, \fIoffending_sequence_num\fP\^, \fIerror_class\fP\^, \fIseverity\fP\^, \fIvalues\fP\^) -.br - SmsConn \fIsms_conn\fP\^; -.br - Bool \fIswap\fP\^; -.br - int \fIoffending_minor_opcode\fP\^; -.br - unsigned long \fIoffending_sequence_num\fP\^; -.br - int \fIerror_class\fP\^; -.br - int \fIseverity\fP\^; -.br - IcePointer \fIvalues\fP\^; -.FN -.IP \fIsms_conn\fP 1i -The session management connection object. -.IP \fIswap\fP 1i -A flag which indicates if the specified values need byte swapping. -.IP \fIoffending_minor_opcode\fP 1i -The minor opcode of the offending message. -.IP \fIoffending_sequence_num\fP 1i -The sequence number of the offending message. -.IP \fIerror_class\fP 1i -The error class of the offending message. -.IP \fIseverity\fP 1i -.PN IceCanContinue , -.PN IceFatalToProtocol , -or -.PN IceFatalToConnection . -.IP \fIvalues\fP 1i -Any additional error values specific to the minor opcode and class. -.LP -.eM -Note that this error handler is invoked for protocol related errors. -To install an error handler to be invoked when an IO error occurs, use -.PN IceSetIOErrorHandler . -For further information, -see the \fIInter-Client Exchange Library\fP\^ standard. -.NH 1 -Session Management Properties -.XS -\*(SN Session Management Properties -.XE -.LP -Each property is defined by the -.PN SmProc -structure: -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { - char *name; /* name of property */ - char *type; /* type of property */ - int num_vals; /* number of values */ - SmPropValue *vals; /* the list of values */ -} SmProp; - -typedef struct { - int length; /* the length of the value */ - SmPointer value; /* the value */ -} SmPropValue; -.De -.LP -The X Session Management Protocol defines a list of predefined properties, -several of which are required to be set by the client. The following table -specifies the predefined properties and indicates which ones are required. -Each property has a type associated with it. -.LP -A type of SmCARD8 indicates that there is a single 1-byte value. -A type of SmARRAY8 indicates that there is a single array of bytes. -A type of SmLISTofARRAY8 indicates that there is a list of array of bytes. -.LP -.TS H -l l l c . -_ -.sp 6p -.B -Name Type POSIX Type Required -.R -.sp 6p -_ -.sp 6p -.TH -SmCloneCommand OS-specific SmLISTofARRAY8 Yes -SmCurrentDirectory OS-specific SmARRAY8 No -SmDiscardCommand OS-specific SmLISTofARRAY8 No* -SmEnvironment OS-specific SmLISTofARRAY8 No -SmProcessID OS-specific SmARRAY8 No -SmProgram OS-specific SmARRAY8 Yes -SmRestartCommand OS-specific SmLISTofARRAY8 Yes -SmResignCommand OS-specific SmLISTofARRAY8 No -SmRestartStyleHint SmCARD8 SmCARD8 No -SmShutdownCommand OS-specific SmLISTofARRAY8 No -SmUserID SmARRAY8 SmARRAY8 Yes -.sp 6p -_ -.TE -.LP -* Required if any state is stored in an external repository -(for example, state file). -.IP \(bu 5 -SmCloneCommand -.IP -This is like the SmRestartCommand, -except it restarts a copy of the -application. The only difference is that the application does not -supply its client ID at register time. On POSIX systems, this should -be of type SmLISTofARRAY8. -.IP \(bu 5 -SmCurrentDirectory -.IP -On POSIX-based systems, this specifies the value of the current directory that -needs to be set up prior to starting the SmProgram and should of type SmARRAY8. -.IP \(bu 5 -SmDiscardCommand -.IP -The discard command contains a command that when delivered to the host that -the client is running on (determined from the connection), will -cause it to discard any information about the current state. If this command -is not specified, the Session Manager will assume that all of the client's -state is encoded in the SmRestartCommand. -On POSIX systems, the type should be SmLISTofARRAY8. -.IP \(bu 5 -SmEnvironment -.IP -On POSIX based systems, this will be of type SmLISTofARRAY8, -where the ARRAY8s alternate between environment variable name and environment -variable value. -.IP \(bu 5 -SmProcessID -.IP -This specifies an OS-specific identifier for the process. On POSIX -systems, this should contain the return value of -.PN getpid -turned into a Latin-1 (decimal) string. -.IP \(bu 5 -SmProgram -.IP -This is the name of the program that is running. -On POSIX systems, this should be first parameter passed to -.PN execve -and should be of type SmARRAY8. -.IP \(bu 5 -SmRestartCommand -.IP -The restart command contains a command that, when delivered to the -host that the client is running on (determined from the connection), -will cause the client to restart in -its current state. On POSIX-based systems, this is of type SmLISTofARRAY8, -and each of the elements in the array represents an element in the -.PN argv -array. -This restart command should ensure that the client restarts with the specified -client-ID. -.IP \(bu 5 -SmResignCommand -.IP -A client that sets the SmRestartStyleHint to SmRestartAnway -uses this property to specify a command -that undoes the effect of the client and removes -any saved state. -As an example, consider a user that runs -.PN xmodmap , -which registers with the Session Manager, sets SmRestartStyleHint to -SmRestartAnyway, and then terminates. To allow the Session Manager (at the -user's request) to undo this, -.PN xmodmap -would register a SmResignCommand that undoes the effects of the -.PN xmodmap . -.IP \(bu 5 -SmRestartStyleHint -.IP -If the RestartStyleHint property is present, it will contain the -style of restarting the client prefers. If this style is not specified, -SmRestartIfRunning is assumed. -The possible values are as follows: -.TS H -l n. -_ -.sp 6p -.B -Name Value -.sp 6p -_ -.sp 6p -.TH -.R -SmRestartIfRunning 0 -SmRestartAnyway 1 -SmRestartImmediately 2 -SmRestartNever 3 -.sp 6p -_ -.TE -.IP -The SmRestartIfRunning style is used in the usual case. The client should -be restarted in the next session if it was running at the end of the -current session. -.IP -The SmRestartAnyway style is used to tell the Session Manager -that the application should be restarted in the next session -even if it exits before the current session is terminated. -It should be noted that this is only -a hint and the Session Manager will follow the policies specified -by its users in determining what applications to restart. -.IP -A client that uses SmRestartAnyway should also set the -SmResignCommand and SmShutdownCommand properties to commands -that undo the state of the client after it exits. -.IP -The SmRestartImmediately style is like SmRestartAnyway, -but, in addition, the client is meant to run continuously. -If the client exits, -the Session Manager should try to restart it in the current session. -.IP -SmRestartNever style specifies that the client -does not wish to be restarted in the next session. -.IP \(bu 5 -SmShutdownCommand -.IP -This command is executed at shutdown time to clean up after a client that -is no longer running but retained its state by setting SmRestartStyleHint -to SmRestartAnyway. -The client must not remove any saved state as the client is still part of -the session. -As an example, consider a client that turns on a camera at start up time. -This client then exits. -At session shutdown, the user wants the camera turned off. -This client would set the SmRestartStyleHint to SmRestartAnyway -and would register a SmShutdownCommand that would turn off the camera. -.IP \(bu 5 -SmUserID -.IP -Specifies the user ID. On POSIX-based systems, this -will contain the user's name (the pw_name member of struct -.PN passwd ). -.NH 1 -Freeing Data -.XS -\*(SN Freeing Data -.XE -.LP -To free an individual property, use -.PN SmFreeProperty . -.sM -.FD 0 -void SmFreeProperty\^(\^\fIprop\fP\^) -.br - SmProp *\fIprop\fP\^; -.FN -.IP \fIprop\fP 1i -The property to free. -.LP -.eM -.LP -To free the reason strings from the -.PN SmsCloseConnectionProc -callback, use -.PN SmFreeReasons . -.sM -.FD 0 -void SmFreeReasons\^(\^\fIcount\fP, \fIreasons\fP\^) -.br - int \fIcount\fP\^; -.br - char **\fIreasons\fP\^; -.FN -.IP \fIcount\fP 1i -The number of reason strings. -.IP \fIreasons\fP 1i -The list of reason strings to free. -.LP -.eM -.NH 1 -Authentication of Clients -.XS -\*(SN Authentication of Clients -.XE -.LP -As stated earlier, the session management protocol is layered on top -of ICE. Authentication occurs at two levels in the ICE protocol: -.IP \(bu 5 -The first is when an ICE connection is opened. -.IP \(bu 5 -The second is when a Protocol Setup occurs on an ICE connection. -.LP -The authentication methods that are available are implementation-dependent -(that is., dependent on the ICElib and SMlib implementations in use). -For further information, -see the \fIInter-Client Exchange Library\fP\^ standard. -.NH 1 -Working in a Multi-Threaded Environment -.XS -\*(SN Working in a Multi-Threaded Environment -.XE -.LP -To declare that multiple threads in an application will be using SMlib -(or any other library layered on top of ICElib), you should call -.PN IceInitThreads . -For further information, -see the \fIInter-Client Exchange Library\fP\^ standard. -.NH 1 -Acknowledgements -.XS -\*(SN Acknowledgements -.XE -.LP -Thanks to the following people for their participation in the -X Session Management design: Jordan Brown, Ellis Cohen, -Donna Converse, Stephen Gildea, Vania Joloboff, Stuart Marks, Bob Scheifler, -Ralph Swick, and Mike Wexler. -.LP -.EH '''' -.OH '''' -.YZ 3 diff --git a/doc/xorg-docs/specs/SM/xsmp.ms b/doc/xorg-docs/specs/SM/xsmp.ms deleted file mode 100644 index de73625f0..000000000 --- a/doc/xorg-docs/specs/SM/xsmp.ms +++ /dev/null @@ -1,1621 +0,0 @@ -.\" Use tbl, -ms, and macros.t -.\" $Xorg: xsmp.ms,v 1.3 2000/08/17 19:42:19 cpqbld Exp $ -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.ps 10 -.nr PS 10 -\& -.TL -\s+2\fBX Session Management Protocol\fP\s-2 -.sp -X.Org Standard -.sp -X Version 11, Release 6.8 -.AU -Mike Wexler -.AI -Kubota Pacific Computer, Inc. -.AB -.LP -This document specifies a protocol that facilitates the management of groups -of client applications by a session manager. The session manager can cause -clients to save their state, to shut down, and to be restarted into a -previously saved state. This protocol is layered on top of the X.Org -ICE protocol. -.AE -.LP -.bp -\& -.sp 8 -.LP -.DS C -X Window System is a trademark of The Open Group. -.sp -Copyright \(co 1992, 1993, 1994, 2002 The Open Group. -.DE -.sp 3 -.LP -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -.LP -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -.af PN i -.EF ''\\\\n(PN'' -.OF ''\\\\n(PN'' -.bp 1 -.af PN 1 -.EH '\fBX Session Management Protocol\fP''\fBX11, Release 6.8\fP' -.OH '\fBX Session Management Protocol\fP''\fBX11, Release 6.8\fP' -.EF ''\fB\\\\n(PN\fP'' -.OF ''\fB\\\\n(PN\fP'' -.nH 1 "Acknowledgements" -.LP -First I would like to thank the entire ICCCM and Intrinsics working groups for -the comments and suggestions. I would like to make special thanks to the -following people (in alphabetical order), Jordan Brown, Ellis Cohen, Donna -Converse, Vania Joloboff, Stuart Marks, Ralph Mor and Bob Scheifler. -.nH 1 "Definitions and Goals" -.LP -The purpose of the X Session Management Protocol (XSMP) is to provide a -uniform mechanism for users to save and restore their sessions. A -\fIsession\fP is a group of clients, each of which has a particular state. -The session is controlled by a network service called the \fIsession -manager\fP\^. The session manager issues commands to its clients on behalf -of the user. These commands may cause clients to save their state or to -terminate. It is expected that the client will save its state in such a -way that the client can be restarted at a later time and resume its -operation as if it had never been terminated. A client's state might -include information about the file currently being edited, the current -position of the insertion point within the file, or the start of an -uncommitted transaction. -The means by which clients are -restarted is unspecified by this protocol. -.LP -For purposes of this protocol, a \fIclient\fP of the session manager is -defined as a connection to the session manager. A client is typically, -though not necessarily, a process running an application program connected -to an X Window System display. However, a client may be connected to more -than one X display or not be connected to any X displays at all. -.LP -This protocol is layered on top of the X Consortium's ICE protocol and relies on -the ICE protocol to handle connection management and authentication. -.LP -.nH 1 "Overview of the Protocol" -.LP -Clients use XSMP to register themselves with the session manager (SM). When -a client starts up, it should connect to the SM. The client should remain -connected for as long as it runs. A client may resign from the session by -issuing the proper protocol messages before disconnecting. Termination of -the connection without notice will be taken as an indication that the client -died unexpectedly. -.LP -Clients are expected to save their state in such a way as to allow multiple -instantiations of themselves to be managed independently. A unique value -called a \fIclient-ID\fP is provided by the protocol for the purpose of -disambiguating multiple instantiations of clients. Clients may use this ID, -for example, as part of a filename in which to store the state for a -particular instantiation. The client-ID should be saved as part of the -command used to restart this client (the \fIRestartCommand\fP\^) so that the -client will retain the same ID after it is restarted. Certain small pieces -of state might also be stored in the RestartCommand. For example, an X11 client -might place a `\-twoWindow' option in its RestartCommand to indicate that it -should start up in two window mode when it is restarted. -.LP -The client finds the network address of the SM in a system-dependent way. -On POSIX systems an environment variable called SESSION_MANAGER will contain -a list of network IDs. Each id will contain the transport name followed by a -slash and the (transport-specific) -address. A TCP/IP address would look like this: -.ID - \fCtcp/\fP\fIhostname\fP\^\fC:\fP\^\fIportnumber\fP -.DE -where the hostname is a fully qualified domain name. -A Unix Domain address looks like this: -.ID - \fClocal/\fP\fIhostname\fP\^\fC:\fP\^\fIpath\fP -.DE -A DECnet address would look like this: -.ID - \fCdecnet/\fP\fInodename\fP\^\fC::\fP\^\fIobjname\fP -.DE -If multiple network IDs are specified, they should be separated by commas. -.NT Rationale -There was much discussion over whether the XSMP protocol should use X as -the transport protocol or whether it should use its own independent -transport. It was decided that it would use an independent protocol for -several reasons. First, the Session Manager should be able to -manage programs that -do not maintain an X connection. Second, the X protocol is not appropriate to -use as a general-purpose transport protocol. Third, a session might -span multiple displays. -.LP -The protocol is connection based, because there is no other way for the SM -to determine reliably when clients terminate. -.LP -It should be noted that this protocol introduces another single point of -failure into the system. Although it is possible for clients to continue -running after the SM has exited, this will probably not be the case in -normal practice. Normally the program that starts the SM will consider the -session to be terminated when the SM exits (either normally or abnormally). -.LP -To get around this would require some sort of -rendezvous server that would also introduce a single point of failure. In the -absence of a generally available rendezvous server, XSMP is kept simple in -the hopes of making simple reliable SMs. -.NE -.LP -Some clients may wish to manage the programs they start. For example, a -mail program could start a text editor for editing the text of a mail -message. A client that does this is a session manager itself; -it should supply the clients it starts with the appropriate connection -information (i.e., the SESSION_MANAGER environment variable) that specifies -a connection to itself instead of to the top level session manager. -.LP -Each client has associated with it a list of properties. -A property set by one client is not visible to any other client. -These properties are used for the client to inform the SM of the client's -current state. -When a client initially connects to the SM, there are no properties set. -.nH 1 "Data Types" -.LP -XSMP messages contain several types of data. Both the SM and the client -always send messages in their native byte order. Thus, both sides may need -to byte-swap the messages received. The need to do byte-swapping is -determined at run-time by the ICE protocol. -.LP -If an invalid value is specified for a field of any of the enumerated types, a -.PN BadValue -error message must be sent by the receiver of the message to the sender of the -message. -.br -.ne 6 -.TS H -l lw(4.5i). -_ -.sp 6p -.B -Type Name Description -.R -.sp 6p -_ -.sp 6p -.TH -BOOL T{ -.PN False -or -.PN True -T} -INTERACT_STYLE T{ -.PN None , -.PN Errors , -or -.PN Any -T} -DIALOG_TYPE T{ -.PN Error -or -.PN Normal -T} -SAVE_TYPE T{ -.PN Global , -.PN Local , -or -.PN Both -T} -CARD8 a one-byte unsigned integer -CARD16 a two-byte unsigned integer -CARD32 a four-byte unsigned integer -ARRAY8 a sequence of CARD8s -LISTofARRAY8 a sequence of ARRAY8s -PROPERTY a property name (an ARRAY8), a type name, and a value of that type -LISTofPROPERTY T{ -a counted collection of \%PROPERTYs. -T} -.sp 6p -_ -.TE -.nH 1 "Protocol Setup and Message Format" -.LP -To start the XSMP protocol, the client sends the server an ICE -.PN ProtocolSetup -message. -All XSMP messages are in the standard ICE message format. The message's major -opcode is assigned to XSMP by ICE at run-time. The different parties -(client and SM) may be assigned different major opcodes for XSMP. Once -assigned, all XSMP messages issued by this party will use the same major -opcode. The message's minor opcode specifies which protocol message this -message contains. -.nH 1 "Client Identification String" -.LP -A client ID is a string of XPCS characters encoded in ISO Latin 1 (ISO -8859-1). No null characters are allowed in this string. The client ID -string is used in the -.PN Register\%Client -and -.PN Register\%ClientReply -messages. -.LP -Client IDs consist of the pieces described below. The ID is -formed by concatenating the pieces in sequence, without -separator characters. All pieces are padded on the left -with '0' characters -so as to fill the specified length. -Decimal numbers are -encoded using the characters `0' through `9', and -hexadecimal numbers using the characters `0' through `9' -and `A' through `F'. -.IP \(bu 4 -Version. This is currently the character `1'. -.IP \(bu 4 -Address type and address. The address type will be one of -.DS -.ta 0.5i -`1' a 4-byte IPv4 address encoded as 8 hexadecimal digits -`2' a 6-byte DECNET address encoded as 12 hexadecimal digits -`6' a 16-byte IPv6 address encoded as 32 hexadecimal digits -.DE -.IP -The address is the one of the network addresses of the machine where the -session manager (not the client) is running. For example, the IP address -198.112.45.11 would be encoded as the string \*QC6702D0B\*U. -.IP \(bu 4 -Time stamp. A 13-digit decimal number specifying the number of -milliseconds since 00:00:00 UTC, January 1, 1970. -.IP \(bu 4 -Process-ID type and process-ID. The process-ID type will be one of -.DS -.ta 0.5i -`1' a POSIX process-ID encoded as a 10-digit decimal number. -.DE -.IP -The process-ID is the process-ID of the session manager, not of a client. -.IP \(bu 4 -Sequence number. This is a four-digit decimal number. It is incremented -every time the session manager creates an ID. After reaching \*Q9999\*U it -wraps to \*Q0000\*U. -.NT "Rationale" -Once a client ID has been assigned to the client, the client keeps -this ID indefinitely. If the client is terminated and restarted, it -will be reassigned the same ID. It is desirable to be able to pass -client IDs around from machine to machine, from user to user, and -from session manager to session manager, while retaining the -identity of the client. This, combined with the indefinite -persistence of client IDs, means that client IDs need to be globally -unique. The construction specified above will ensure that any -client ID created by any user, session manager, and machine will be -different from any other. -.NE -.nH 1 "Protocol" -.LP -The protocol consists of a sequence of messages as described below. Each -message type is specified by an ICE minor opcode. A given message type is -sent either from a client to the session manager or from the session manager -to a client; the appropriate direction is listed with each message's -description. For each message type, the set of -valid responses and possible error -messages are listed. The ICE severity is given in parentheses following -each error class. -.LP -.sM -.PN RegisterClient -[Client \(-> SM] -.RS -.LP -\fIprevious-ID\fP\^: ARRAY8 -.LP -Valid Responses: -.PN RegisterClientReply -.LP -Possible Errors: -.PN BadValue -.Pn ( CanContinue ) -.RE -.eM -.LP -The client must send this message to the SM to register the client's existence. -If a client is being restarted from a previous -session, the previous-ID field must contain the client ID from the -previous session. -For new clients, previous-ID should be of zero length. -.LP -If previous-ID is not valid, the SM will send a -.PN BadValue -error message to the client. -At this point the SM reverts to the register state and waits for another -.PN RegisterClient . -The client should then send a -.PN RegisterClient -with a null previous-ID field. -.LP -.sM -.PN RegisterClientReply -[Client \(<- SM] -.RS -.LP -\fIclient-ID\fP\^: ARRAY8 -.RE -.eM -.LP -The client-ID specifies a unique identification for this client. -If the client had specified an ID in the previous-ID field of the -.PN RegisterClient -message, client-ID will be identical to the previously specified ID. If -previous-ID was null, client-ID will be a unique ID freshly generated by the -SM. The client-ID format is specified in section 6. -.LP -If the client didn't supply a previous-ID field to the -.PN Register\%Client -message, the SM must send a -.PN SaveYourself -message with type = Local, shutdown = False, interact-style = None, -and fast = False immediately after the -.PN RegisterClientReply . -The client should respond to this like any other -.PN Save\%Yourself -message. -.LP -.sM -.PN SaveYourself -[Client \(<- SM] -.RS -.LP -\fItype\fP\^: SAVE_TYPE -.br -\fIshutdown\fP\^: BOOL -.br -\fIinteract-style\fP\^: INTERACT_STYLE -.br -\fIfast\fP\^: BOOL -.LP -Valid Responses: -.PN SetProperties , -.PN DeleteProperties , -.PN GetProperties , -.PN SaveYourselfDone , -.PN SaveYourselfPhase2Request , -.PN InteractRequest -.RE -.eM -.LP -The SM sends this message to a client to ask it to save -its state. The client writes a state file, if necessary, -and, if necessary, uses -.PN SetProperties -to inform the SM of -how to restart it and how to discard the saved state. During -this process it can, if allowed by interact-style, request -permission to interact with the user by sending an -.PN InteractRequest -message. -After the state has been saved, or -if it cannot be successfully saved, and the properties -are appropriately set, the client sends a -.PN SaveYourselfDone -message. -If the client wants to save additional information after all the -other clients have finished changing their own state, the client -should send -.PN SaveYourselfPhase2Request -instead of -.PN SaveYourselfDone . -The client must then -freeze interaction with the user and wait until it -receives a -.PN SaveComplete , -.PN Die , -or a -.PN ShutdownCancelled -message. -.LP -If interact-style is -.PN None , -the client must not interact with the -user while saving state. If the interact-style is -.PN Errors , -the client -may interact with the user only if an error condition arises. If -interact-style is -.PN Any , -then the client may interact with the user for -any purpose. -This is done by sending an -.PN Interact\%Request -message. The SM will send an -.PN Interact -message to -each client that sent an -.PN Interact\%Request . -The client must postpone all -interaction until it gets the -.PN Interact -message. When the client is done -interacting it should send the SM an -.PN Interact\%Done -message. The -.PN Interact\%Request -message can be sent any time after a -.PN Save\%Yourself -and before a -.PN Save\%Yourself\%Done . -.LP -Unusual circumstances may dictate multiple interactions. -The client may initiate as many -.PN Interact\%Request -\- -.PN Interact -\- -.PN InteractDone -sequences as it needs before it sends -.PN SaveYourselfDone . -.LP -When a client receives -.PN Save\%Yourself -and has not yet responded -.PN Save\%Yourself\%Done -to a previous -.PN Save\%Yourself , -it must send a -.PN Save\%Yourself\%Done -and may then begin responding as appropriate -to the newly received -.PN Save\%Yourself . -.LP -The type field specifies the type of information that should be saved: -.PN Global , -.PN Local , -or -.PN Both . -The -.PN Local -type indicates that the application must update the -properties to reflect its current state, send a -.PN Save\%Yourself\%Done -and continue. Specifically it should save enough information to restore -the state as seen by the user of this client. It should not affect the -state as seen by other users. -The -.PN Global -type indicates that the user wants the client to -commit all of its data to permanent, globally-accessible -storage. -.PN Both -indicates that the client should do both of these. If -.PN Both -is specified, the client should first commit the data to permanent storage -before updating its SM properties. -.NT Examples -If a word processor was sent a -.PN SaveYourself -with a type of -.PN Local , -it could create a temporary file that included the -current contents of the file, the location of the cursor, and -other aspects of the current editing session. -It would then update its -.PN Restart\%Command -property with enough information to find the temporary file, -and its -.PN Discard\%Command -with enough information to remove it. -.LP -If a word processor was sent a -.PN SaveYourself -with a type of -.PN Global , -it would simply save the currently edited file. -.LP -If a word processor was sent a -.PN SaveYourself -with a type of -.PN Both , -it would first save the currently edited file. It would then create a -temporary file with information such as the current position of the cursor -and what file is being edited. -It would then update its -.PN Restart\%Command -property with enough information to find the temporary file, -and its -.PN Discard\%Command -with enough information to remove it. -.LP -Once the SM has send -.PN SaveYourself -to a client, it can't send another -.PN SaveYourself -to that client until the client either -responds with a -.PN SaveYourselfDone -or the SM sends a -.PN ShutdownCancelled . -.NE -.NT "Advice to Implementors" -If the client stores local any state in a file or similar -\*Qexternal\*U storage, it must create a distinct -copy in response to each -.PN SaveYourself -message. -It \fImust not\fP simply refer to a previous copy, because -the SM may discard that previous saved state using a -.PN DiscardCommand -without knowing that it is needed for the new checkpoint. -.NE -.LP -The shutdown field specifies whether the system is being shut down. -.NT Rationale -The interaction -may be different depending on whether or not shutdown is set. -.NE -The client must save and then must prevent interaction -until it receives a -.PN SaveComplete , -.PN Die , -or a -.PN Shutdown\%Cancelled , -because anything the user does after the save will be lost. -.LP -The fast field specifies whether or not the client should save its state as quickly as -possible. For example, if the SM knows that power is about to fail, it -should set the fast field to -.PN True . -.LP -.sM -.PN SaveYourselfPhase2 -[Client \(<- SM] -.RS -.LP -.LP -Valid Responses: -.PN SetProperties , -.PN DeleteProperties , -.PN GetProperties , -.PN SaveYourselfDone , -.PN InteractRequest -.RE -.eM -.LP -The SM sends this message to a client that has previously sent a -.PN SaveYourselfPhase2Request -message. -This message informs the client that all other clients are in a fixed -state and this client can save state that is associated with other clients. -.NT "Rationale" -Clients that manager other clients (window managers, workspace managers, etc) -need to know when all clients they are managing are idle, so that the manager -can save state related to each of the clients without being concerned with -that state changing. -.NE -The client writes a state file, if necessary, and, if necessary, uses -.PN SetProperties -to inform the SM of -how to restart it and how to discard the saved state. During -this process it can request -permission to interact with the user by sending an -.PN InteractRequest -message. -This should only be done if an error occurs that requires user interaction -to resolve. -After the state has been saved, or -if it cannot be successfully saved, and the properties -are appropriately set, the client sends a -.PN SaveYourselfDone -message. -.LP -.LP -.sM -.PN SaveYourselfRequest -[Client \(-> SM] -.RS -.LP -\fItype\fP\^: SAVE_TYPE -.br -\fIshutdown\fP\^: BOOL -.br -\fIinteract-style\fP\^: INTERACT_STYLE -.br -\fIfast\fP\^: BOOL -.br -\fIglobal\fP\^: BOOL -.LP -Valid Responses: -.PN SaveYourself -.RE -.eM -.LP -An application sends this to the SM to request a checkpoint. -When the SM receives this request it may generate a -.PN SaveYourself -message in response and it may leave the fields intact. -.NT Example -A vendor of a UPS (Uninterruptible Power Supply) might include an -SM client that would monitor the status of the UPS and generate -a fast shutdown if the power is about to be lost. -.NE -.LP -If global is set to -.PN True , -then the resulting -.PN SaveYourself -should be -sent to all applications. If global is set to -.PN False , -then the resulting -.PN SaveYourself -should be sent to the application that sent the -.PN Save\%Yourself\%Request . -.LP -.sM -.PN InteractRequest -[Client \(-> SM] -.RS -.LP -\fIdialog-type\fP\^: DIALOG_TYPE -.LP -Valid Responses: -.PN Interact , -.PN ShutdownCancelled -.LP -Possible Errors: -.PN BadState -.Pn ( CanContinue ) -.RE -.eM -.LP -During a checkpoint or session-save operation, -only one client at a time might be granted the privilege of interacting with -the user. The -.PN InteractRequest -message causes the SM to emit an -.PN Interact -message at some later time if the shutdown is not cancelled -by another client first. -.LP -The dialog-type field specifies either -.PN Errors , -indicating that the -client wants to start an error dialog or -.PN Normal , -meaning the client -wishes to start a non-error dialog. -.LP -.sM -.PN Interact -[Client \(<- SM] -.RS -.LP -Valid Responses: -.PN InteractDone -.LP -.RE -.eM -.LP -This message grants the client the privilege of interacting with the -user. When the client is done interacting with the user it must -send an -.PN InteractDone -message to the SM unless a shutdown cancel is received. -.NT "Advice to Implementors" -If a client receives a ShutdownCancelled after receiving an -.PN Interact -message, but before sending a -.PN InteractDone , -the client should abort the interaction and send a -.PN SaveYourselfDone . -.NE -.LP -.sM -.PN InteractDone -[Client \(-> SM] -.RS -.LP -\fIcancel-shutdown\fP\^: BOOL -.br -.LP -Valid Responses: -.PN ShutdownCancelled -.LP -.RE -.eM -.LP -This message is used by a client to notify the SM that it is done interacting. -.LP -Setting the cancel-shutdown field to -.PN True -indicates that -the user has requested that the entire shutdown be cancelled. -Cancel-shutdown may only be -.PN True -if the corresponding -.PN SaveYourself -message specified -.PN True -for the shutdown field and -.PN Any -or -.PN Errors -for the interact-style field. Otherwise, cancel-shutdown must be -.PN False . -.LP -.sM -.PN SaveYourselfDone -[Client \(-> SM] -.RS -.LP -\fIsuccess\fP\^: BOOL -.LP -Valid Responses: -.PN SaveComplete , -.PN Die , -.PN ShutdownCancelled -.LP -.RE -.eM -.LP -This message is sent by a client to indicate that all of the properties -representing its state have been updated. -After sending -.PN SaveYourselfDone -the client must -wait for a -.PN SaveComplete , -.PN ShutdownCancelled , -or -.PN Die -message before changing its state. -If the -.PN SaveYourself -operation was successful, then the client -should set the success field to -.PN True ; -otherwise the client should set -it to -.PN False . -.NT Example -If a client tries to save its state and runs out of disk space, -it should return -.PN False -in the success -field of the -.PN SaveYourselfDone -message. -.NE -.LP -.sM -.PN SaveYourselfPhase2Request -[Client \(-> SM] -.RS -.LP -Valid Responses: -.PN ShutdownCancelled , -.PN SaveYourselfPhase2 -.LP -.RE -.eM -.LP -This message is sent by a client to indicate that it needs to be informed -when all the other clients are quiescent, so it can continue its state. -.LP -.sM -.PN Die -[Client \(<- SM] -.RS -.LP -Valid Responses: -.PN ConnectionClosed -.RE -.eM -.LP -When the SM wants a client to die it sends a -.PN Die -message. Before the client dies it responds -by sending a -.PN ConnectionClosed -message and may then close -its connection to the SM at any time. -.LP -.sM -.PN SaveComplete -[Client \(<- SM] -.RS -.LP -Valid Responses: -.RE -.eM -.LP -When the SM is done with a checkpoint, it will send each of the clients a -.PN SaveComplete -message. -The client is then free to change its state. -.LP -.sM -.PN ShutdownCancelled -[Client \(<- SM] -.RS -.RE -.eM -.LP -The shutdown currently in process has been aborted. The client can now -continue as if the shutdown had never happened. -If the client has not sent -.PN SaveYourselfDone -yet, the client can either -abort the save and send -.PN SaveYourselfDone -with the success field -set to -.PN False , -or it can continue with the save and send a -.PN SaveYourselfDone -with the success field set to reflect the outcome -of the save. -.LP -.sM -.PN ConnectionClosed -[Client \(-> SM] -.RS -.LP -\fIreason\fP\^: LISTofARRAY8 -.RE -.eM -.LP -Specifies that the client has decided to terminate. -It should be immediately followed by closing the connection. -.LP -The reason field specifies why the client is resigning from the session. It -is encoded as an array of Compound Text strings. If the resignation is -expected by the user, there will typically be zero ARRAY8s here. But if the -client encountered an unexpected fatal error, the error message (which might -otherwise be printed on stderr on a POSIX system) should be forwarded to the -SM here, one ARRAY8 per line of the message. It is the responsibility of -the SM to display this reason to the user. -.LP -After sending this message, the client must not send any additional XSMP -messages to the SM. -.NT "Advice to Implementors" -If additional messages are received, they should be discarded. -.NE -.NT Rationale -The reason for sending the -.PN ConnectionClosed -message before -actually closing the connections is that some transport protocols will -not provide immediate notification of connection closure. -.NE -.LP -.sM -.PN SetProperties -[Client \(-> SM] -.RS -.LP -\fIproperties\fP: LISTofPROPERTY -.RE -.eM -.LP -Sets the specified properties to the specified values. -Existing properties not specified in the -.PN Set\%Properties -message are unaffected. -Some properties have predefined semantics. -See section 11, \*QPredefined Properties.\*U -.LP -The protocol specification recommends that property names used -for properties not defined by the standard should begin with an underscore. -To prevent conflicts among organizations, -additional prefixes should be chosen -(for example, _KPC_FAST_SAVE_OPTION). -The organizational prefixes should be registered with the X Registry. -The XSMP reserves all property names not beginning with an underscore for -future use. -.LP -.sM -.PN DeleteProperties -[Client \(-> SM] -.RS -.LP -.br -\fIproperty-names\fP: LISTofARRAY8 -.RE -.eM -.LP -Removes the named properties. -.LP -.sM -.PN GetProperties -[Client \(-> SM] -.RS -.LP -Valid Responses: -.PN GetPropertiesReply -.RE -.eM -.LP -Requests that the SM respond with the -values of all the properties for this client. -.LP -.sM -.PN GetPropertiesReply -[Client \(<- SM] -.RS -.LP -\fIvalues\fP\^: LISTofPROPERTY -.RE -.eM -.LP -This message is sent in reply to a -.PN GetProperties -message and includes -the values of all the properties. -.nH 1 "Errors" -.LP -When the receiver of a message detects an error condition, -the receiver sends -an ICE error message to the sender. -There are only two types of errors that are used by the XSMP: -.PN BadValue -and -.PN BadState . -These are both defined in the ICE protocol. -.LP -Any message received out-of-sequence -will generate a -.PN BadState -error message. -.nH 1 "State Diagrams" -.LP -These state diagrams are designed to cover all actions of both -the client and the SM. -.nH 2 "Client State Diagram" -.LP -.nf -.DS L 0 -\fIstart:\fP - ICE protocol setup complete \(-> \fCregister\fP -.DE -.sp -.DS L 0 -\fIregister:\fP - send \fBRegisterClient\fP \(-> \fCcollect-id\fP -.DE -.sp -.DS L 0 -\fIcollect-id:\fP - receive \fBRegisterClientReply\fP \(-> \fCidle\fP -.DE -.sp -.DS L 0 -\fIshutdown-cancelled:\fP - send \fBSaveYourselfDone\fP \(-> \fCidle\fP -.DE -.sp -.DS L 0 -\fIidle:\fP [Undoes any freeze of interaction with user.] - receive \fBDie\fP \(-> \fCdie\fP - receive \fBSaveYourself\fP \(-> \fCfreeze-interaction\fP - send \fBGetProperties\fP \(-> \fCidle\fP - receive \fBGetPropertiesReply\fP \(-> \fCidle\fP - send \fBSetProperties\fP \(-> \fCidle\fP - send \fBDeleteProperties\fP \(-> \fCidle\fP - send \fBConnectionClosed\fP \(-> \fCconnection-closed\fP - send \fBSaveYourselfRequest\fP \(-> \fCidle\fP -.DE -.sp -.DS L 0 -\fIdie:\fP - send \fBConnectionClosed\fP \(-> \fCconnection-closed\fP -.DE -.sp -.DS L 0 -\fIfreeze-interaction:\fP - freeze interaction with user \(-> \fCsave-yourself\fP -.DE -.sp -.DS L 0 -\fIsave-yourself:\fP - receive \fBShutdownCancelled\fP \(-> \fCshutdown-cancelled\fP - send \fBSetProperties\fP \(-> \fCsave-yourself\fP - send \fBDeleteProperties\fP \(-> \fCsave-yourself\fP - send \fBGetProperties\fP \(-> \fCsave-yourself\fP - receive \fBGetPropertiesReply\fP \(-> \fCsave-yourself\fP - send \fBInteractRequest\fP \(-> \fCinteract-request\fP - send \fBSaveYourselfPhase2Request\fP -> waiting-for-phase2 - if shutdown mode: - send \fBSaveYourselfDone\fP \(-> \fCsave-yourself-done\fP - otherwise: - send \fBSaveYourselfDone\fP \(-> \fCidle\fP -.DE -.sp -.DS L 0 -\fIwaiting-for-phase2:\fP - receive \fBShutdownCancelled\fP \(-> \fCshutdown-cancelled\fP - receive \fBSaveYourselfPhase2\fP \(-> \fCphase2\fP -.DE -.sp -.DS L 0 -\fIphase2:\fP - receive \fBShutdownCancelled\fP \(-> \fCshutdown-cancelled\fP - send \fBSetProperties\fP \(-> \fCsave-yourself\fP - send \fBDeleteProperties\fP \(-> \fCsave-yourself\fP - send \fBGetProperties\fP \(-> \fCsave-yourself\fP - receive \fBGetPropertiesReply\fP \(-> \fCsave-yourself\fP - send \fBInteractRequest\fP \(-> \fCinteract-request\fP (errors only) - if shutdown mode: - send \fBSaveYourselfDone\fP \(-> \fCsave-yourself-done\fP - otherwise: - send \fBSaveYourselfDone\fP \(-> \fCidle\fP -.DE -.sp -.DS L 0 -\fIinteract-request:\fP - receive \fBInteract\fP \(-> \fCinteract\fP - receive \fBShutdownCancelled\fP \(-> \fCshutdown-cancelled\fP -.DE -.sp -.DS L 0 -\fIinteract:\fP - send \fBInteractDone\fP \(-> \fCsave-yourself\fP - receive \fBShutdownCancelled\fP \(-> \fCshutdown-cancelled\fP -.DE -.sp -.DS L 0 -\fIsave-yourself-done:\fP (changing state is forbidden) - receive \fBSaveComplete\fP \(-> \fCidle\fP - receive \fBDie\fP \(-> \fCdie\fP - receive \fBShutdownCancelled\fP \(-> \fCidle\fP -.DE -.sp -.DS L 0 -\fIconnection-closed:\fP - client stops participating in session -.DE -.ne 1i -.nH 2 "Session Manager State Diagram" -.LP -.nf -.DS L 0 -\fIstart:\fP - receive \fBProtocolSetup\fP \(-> \fCprotocol-setup\fP -.DE -.sp -.DS L 0 -\fIprotocol-setup:\fP - send \fBProtocolSetupReply\fP \(-> \fCregister\fP -.DE -.sp -.DS L 0 -\fIregister:\fP - receive \fBRegisterClient\fP \(-> \fCacknowledge-register\fP -.DE -.sp -.DS L 0 -\fIacknowledge-register:\fP - send \fBRegisterClientReply\fP \(-> \fCidle\fP -.DE -.sp -.DS L 0 -\fIidle:\fP - receive \fBSetProperties\fP \(-> \fCidle\fP - receive \fBDeleteProperties\fP \(-> \fCidle\fP - receive \fBConnectionClosed\fP \(-> \fCstart\fP - receive \fBGetProperties\fP \(-> \fCget-properties\fP - receive \fBSaveYourselfRequest\fP \(-> \fCsave-yourself\fP - send \fBSaveYourself\fP \(-> \fCsaving-yourself\fP -.DE -.sp -.DS L 0 -\fIsave-yourself:\fP - send \fBSaveYourself\fP \(-> \fCsaving-yourself\fP -.DE -.sp -.DS L 0 -\fIget-properties:\fP - send \fBGetPropertiesReply\fP \(-> \fCidle\fP -.DE -.sp -.DS L 0 -\fIsaving-get-properties:\fP - send \fBGetPropertiesReply\fP \(-> \fCsaving-yourself\fP -.DE -.sp -.DS L 0 -\fIsaving-yourself:\fP - receive \fBInteractRequest\fP \(-> \fCsaving-yourself\fP - send \fBInteract\fP \(-> \fCsaving-yourself\fP - send \fBShutdownCancelled\fP -> \fCidle\fP - receive \fBInteractDone\fP \(-> \fCsaving-yourself\fP - receive \fBSetProperties\fP \(-> \fCsaving-yourself\fP - receive \fBDeleteProperties\fP \(-> \fCsaving-yourself\fP - receive \fBGetProperties\fP \(-> \fCsaving-get-properties\fP - receive \fBSaveYourselfPhase2Request\fP \(-> \fCstart-phase2\fP - receive \fBSaveYourselfDone\fP \(-> \fCsave-yourself-done\fP -.DE -.sp -.DS L 0 -\fIstart-phase2:\fP - If all clients have sent either \fBSaveYourselfPhase2Request\fP or \fBSaveYourselfDone\fP: - send \fBSaveYourselfPhase2\fP \(-> \fCphase2\fP - else - \(-> \fCsaving-yourself\fP -.DE -.sp -.DS L 0 -\fIphase2:\fP - receive \fBInteractRequest\fP \(-> \fCsaving-yourself\fP - send \fBInteract\fP \(-> \fCsaving-yourself\fP - send \fBShutdownCancelled\fP -> \fCidle\fP - receive \fBInteractDone\fP \(-> \fCsaving-yourself\fP - receive \fBSetProperties\fP \(-> \fCsaving-yourself\fP - receive \fBDeleteProperties\fP \(-> \fCsaving-yourself\fP - receive \fBGetProperties\fP \(-> \fCsaving-get-properties\fP - receive \fBSaveYourselfDone\fP \(-> \fCsave-yourself-done\fP -.DE -.sp -.DS L 0 -\fIsave-yourself-done:\fP - If all clients are saved: - If shutting down: - send \fBDie\fP \(-> \fCdie\fP - otherwise - send \fBSaveComplete\fP \(-> \fCidle\fP -.sp - If some clients are not saved: - \(-> \fCsaving-yourself\fP -.DE -.sp -.DS L 0 -\fIdie:\fP - SM stops accepting connections -.DE -.nH 1 "Protocol Encoding" -.nH 2 "Types" -.LP -.nf -.ta .2i .5i 2.0i -BOOL - 0 False - 1 True -.sp -INTERACT_STYLE - 0 None - 1 Errors - 2 Any -.sp -DIALOG_TYPE - 0 Error - 1 Normal -.sp -SAVE_TYPE - 0 Global - 1 Local - 2 Both -.sp -.ne .75i -ARRAY8 - 4 CARD32 length - n LISTofCARD8 the array - p p = pad (4 + n, 8) -.sp -LISTofARRAY8 - 4 CARD32 count - 4 unused - a ARRAY8 first array - b ARRAY8 second array - \&. - \&. - \&. - q ARRAY8 last array -.sp -PROPERTY - a ARRAY8 name - b ARRAY8 type (XPCS encoded in Latin-1, case sensitive) - c LISTofARRAY8 values -.sp -LISTofPROPERTY - 4 CARD32 count - 4 unused - a PROPERTY first property - b PROPERTY second property - \&. - \&. - \&. - q PROPERTY last property -.nH 2 "Messages" -.LP -XSMP is a sub-protocol of ICE. The major opcode is assigned at run-time -by ICE and is represented here by `?'. -.LP -To start the XSMP protocol, the client sends the server an ICE -.PN ProtocolSetup -message. -The protocol-name field should be specified as \*QXSMP\*U, the major -version of the protocol is 1, the minor version is 0. -These values may change if the protocol is revised. The minor version -number will be incremented if the change is compatible, otherwise the major -version number will be incremented. -.LP -In -.PN ProtocolReply -message sent by the session manager, -the XSMP protocol defines the vendor parameter as product identification -of the session manager, and defines the release parameter as -the software release identification of the session manager. -The session manager should supply this information in the -ICE -.PN ProtocolReply -message. -.LP -.nf -.ta .2i .5i 2.0i -.ne 3 -.PN RegisterClient - 1 ? XSMP - 1 1 opcode - 2 unused - 4 a/8 length of remaining data in 8-byte units - a ARRAY8 previous-ID -.ne 6 -.sp -.PN RegisterClientReply - 1 ? XSMP - 1 2 opcode - 2 unused - 4 a/8 length of remaining data in 8-byte units - a ARRAY8 client-ID -.ne 4 -.sp -.PN SaveYourself - 1 ? XSMP - 1 3 opcode - 2 unused - 4 1 length of remaining data in 8-byte units - 1 SAVE_TYPE type - 1 BOOL shutdown - 1 INTERACT_STYLE interact-style - 1 BOOL fast - 4 unused -.ne 4 -.sp -.PN SaveYourselfRequest - 1 ? XSMP - 1 4 opcode - 2 unused - 4 1 length of remaining data in 8-byte units - 1 SAVE_TYPE type - 1 BOOL shutdown - 1 INTERACT_STYLE interact-style - 1 BOOL fast - 1 BOOL global - 3 unused -.ne 4 -.sp -.PN InteractRequest - 1 ? XSMP - 1 5 opcode - 1 DIALOG_TYPE dialog type - 1 unused - 4 0 length of remaining data in 8-byte units -.ne 4 -.sp -.PN Interact - 1 ? XSMP - 1 6 opcode - 2 unused - 4 0 length of remaining data in 8-byte units -.ne 4 -.sp -.PN InteractDone - 1 ? XSMP - 1 7 opcode - 1 BOOL cancel-shutdown - 1 unused - 4 0 length of remaining data in 8-byte units -.ne 6 -.sp -.PN SaveYourselfDone - 1 ? XSMP - 1 8 opcode - 1 BOOL success - 1 unused - 4 0 length of remaining data in 8-byte units -.ne 4 -.sp -.PN Die - 1 ? XSMP - 1 9 opcode - 2 unused - 4 0 length of remaining data in 8-byte units -.ne 4 -.sp -.PN ShutdownCancelled - 1 ? XSMP - 1 10 opcode - 2 unused - 4 0 length of remaining data in 8-byte units -.ne 4 -.sp -.PN ConnectionClosed - 1 ? XSMP - 1 11 opcode - 2 unused - 4 a/8 length of remaining data in 8-byte units - a LISTofARRAY8 reason -.ne 4 -.sp -.PN SetProperties - 1 ? XSMP - 1 12 opcode - 2 unused - 4 a/8 length of remaining data in 8-byte units - a LISTofPROPERTY properties -.ne 4 -.sp -.PN DeleteProperties - 1 ? XSMP - 1 13 opcode - 2 unused - 4 a/8 length of remaining data in 8-byte units - a LISTofARRAY8 properties -.ne 4 -.sp -.PN GetProperties - 1 ? XSMP - 1 14 opcode - 2 unused - 4 0 length of remaining data in 8-byte units -.ne 4 -.sp -.PN GetPropertiesReply - 1 ? XSMP - 1 15 opcode - 2 unused - 4 a/8 length of remaining data in 8-byte units - a LISTofPROPERTY properties -.ne 4 -.sp -.PN SaveYourselfPhase2Request - 1 ? XSMP - 1 16 opcode - 2 unused - 4 0 length of remaining data in 8-byte units -.ne 4 -.sp -.PN SaveYourselfPhase2 - 1 ? XSMP - 1 17 opcode - 2 unused - 4 0 length of remaining data in 8-byte units - -.sp -.PN SaveComplete - 1 ? XSMP - 1 18 opcode - 2 unused - 4 0 length of remaining data in 8-byte units - -.nH 1 "Predefined Properties" -.LP -All property values are stored in a LISTofARRAY8. If the type of the -property is CARD8, the value is stored as a LISTofARRAY8 with one ARRAY8 -that is one byte long. That single byte contains the CARD8. If the type of -the property is ARRAY8, the value is stored in the first element of a single -element LISTofARRAY8. -.LP -The required properties must be set each time a client -connects with the SM. The properties must be set after -the client sends -.PN RegisterClient -and before the client sends -.PN SaveYourselfDone . -Otherwise, the behavior of -the session manager is not defined. -.LP -Clients may set, get, and delete nonstandard properties. -The lifetime of stored properties does not extend into -subsequent sessions. -.br -.ne 6 -.TS H -l l l c . -_ -.sp 6p -.B -Name Type Posix Type Required? -.R -.sp 6p -_ -.sp 6p -.TH -CloneCommand OS-specific LISTofARRAY8 Yes -CurrentDirectory OS-specific ARRAY8 No -DiscardCommand OS-specific LISTofARRAY8 No* -Environment OS-specific LISTofARRAY8 No -ProcessID OS-specific ARRAY8 No -Program OS-specific ARRAY8 Yes -RestartCommand OS-specific LISTofARRAY8 Yes -ResignCommand OS-specific LISTofARRAY8 No -RestartStyleHint CARD8 CARD8 No -ShutdownCommand OS-specific LISTofARRAY8 No -UserID ARRAY8 ARRAY8 Yes -.sp 6p -_ -.TE -.LP -* Required if any state is stored in an external repository (e.g., state file). -.IP CloneCommand 3 -This is like the -.PN RestartCommand -except it restarts a copy of the -application. The only difference is that the application doesn't -supply its client id at register time. On POSIX systems the type -should be a LISTofARRAY8. -.IP CurrentDirectory 3 -On POSIX-based systems specifies the value of the current directory that -needs to be set up prior to starting the program and should be of type -ARRAY8. -.IP DiscardCommand 3 -The discard command contains a command that when delivered to the host that -the client is running on (determined from the connection), will -cause it to discard any information about the current state. If this command -is not specified, the SM will assume that all of the client's state is encoded -in the -.PN Restart\%Command . -On POSIX systems the type should be LISTofARRAY8. -.IP Environment 3 -On POSIX based systems, this will be of type LISTofARRAY8 where -the ARRAY8s alternate between environment variable name and environment -variable value. -.IP ProcessID 3 -This specifies an OS-specific identifier for the process. On POSIX -systems this should of type ARRAY8 and contain the return value -of getpid() turned into a Latin-1 (decimal) string. -.IP Program 3 -The name of the program that is running. On POSIX systems this -should be the -first parameter passed to execve and should be of type ARRAY8. -.IP RestartCommand 3 -The restart command contains a command that when delivered to the -host that the client is running on (determined from the connection), -will cause the client to restart in -its current state. On POSIX-based systems this is of type LISTofARRAY8 -and each of the elements in the array represents an element in -the argv array. -This restart command should ensure that the client restarts with the specified -client-ID. -.IP ResignCommand 3 -A client that sets the -.PN RestartStyleHint -to -.PN RestartAnyway -uses this property to specify a command -that undoes the effect of the client and removes -any saved state. -.NT Example -A user runs xmodmap. xmodmap registers with the SM, sets -.PN Restart\%Style\%Hint -to -.PN Restart\%Anyway , -and then terminates. In order to allow the SM (at the -user's request) to undo this, xmodmap would register a -.PN Resign\%Command -that undoes the effects of the xmodmap. -.NE -.IP RestartStyleHint 3 -.RS -.LP -If the RestartStyleHint property is present, it will contain the -style of restarting the client prefers. If this flag isn't specified, -.PN RestartIfRunning -is assumed. -The possible values are as follows: -.br -.ne 6 -.TS H -l n. -_ -.sp 6p -.B -Name Value -.R -.sp 6p -_ -.sp 6p -.TH -RestartIfRunning 0 -RestartAnyway 1 -RestartImmediately 2 -RestartNever 3 -.sp 6p -_ -.TE -.LP -The -.PN RestartIfRunning -style is used in the usual case. The client should -be restarted in the next session if it is connected to the -session manager at the end of the current session. -.LP -The -.PN RestartAnyway -style is used to tell the SM that the application -should be restarted in the next session even if it exits before the -current session is terminated. -It should be noted that this is only a hint and the SM -will follow the policies specified by its users in determining what applications -to restart. -.LP -.NT Rationale -This can be specified by a client which supports (as MS-Windows clients -do) a means for the user to indicate while exiting that -restarting is desired. It can also be used for clients that -spawn other clients and then go away, but which want to be -restarted. -.NE -.LP -A client that uses -.PN RestartAnyway -should also set the -.PN ResignCommand -and -.PN ShutdownCommand -properties to commands that undo the state of the client -after it exits. -.LP -The -.PN RestartImmediately -style is like -.PN RestartAnyway , -but in addition, the -client is meant to run continuously. If the client exits, the -SM should try to restart it in the current session. -.NT "Advice to Implementors" -It would be wise to sanity-check the frequency which which -.PN RestartImmediately -clients are restarted, to avoid a sick -client being restarted continuously. -.NE -The -.PN RestartNever -style specifies that the client -does not wish to be restarted in the next session. -.NT "Advice To Implementors" -This should be used rarely, if at all. It will cause the client -to be silently left out of sessions when they are restarted and -will probably be confusing to users. -.NE -.RE -.IP ShutdownCommand -This command is executed at shutdown time to clean up after a client that -is no longer running but retained its state by setting -.PN RestartStyleHint -to -.PN RestartAnyway . -The command must not remove any saved state as the client is still part of -the session. -.NT Example -A client is run at start up time that turns on a camera. This client then -exits. At session shutdown, the user wants the camera turned off. This client -would set the -.PN Restart\%Style\%Hint -to -.PN Restart\%Anyway -and would register a -.PN Shutdown\%Command -that would turn off the camera. -.NE -.IP UserID 3 -Specifies the user's ID. On POSIX-based systems this -will contain the the user's name (the pw_name field of struct passwd). -.\" Finish up. -.YZ 3 diff --git a/doc/xorg-docs/specs/X11/AppA b/doc/xorg-docs/specs/X11/AppA deleted file mode 100644 index 26a1ba32f..000000000 --- a/doc/xorg-docs/specs/X11/AppA +++ /dev/null @@ -1,604 +0,0 @@ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by -.\" Digital Equipment Corporation -.\" -.\" Portions Copyright \(co 1990, 1991 by -.\" Tektronix, Inc. -.\" -.\" Permission to use, copy, modify and distribute this documentation for -.\" any purpose and without fee is hereby granted, provided that the above -.\" copyright notice appears in all copies and that both that copyright notice -.\" and this permission notice appear in all copies, and that the names of -.\" Digital and Tektronix not be used in in advertising or publicity pertaining -.\" to this documentation without specific, written prior permission. -.\" Digital and Tektronix makes no representations about the suitability -.\" of this documentation for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBAppendix A\fP\s-1 - -\s+1\fBXlib Functions and Protocol Requests\fP\s-1 -.sp 2 -.na -.LP -.XS -Appendix A: Xlib Functions and Protocol Requests -.XE -This appendix provides two tables that relate to Xlib functions -and the X protocol. -The following table lists each Xlib function (in alphabetical order) -and the corresponding protocol request that it generates. -.LP -.TS H -lw(2.5i) lw(2.5i). -_ -.sp 6p -.B -Xlib Function Protocol Request -.sp 6p -_ -.sp 6p -.TH -.R -XActivateScreenSaver ForceScreenSaver -XAddHost ChangeHosts -XAddHosts ChangeHosts -XAddToSaveSet ChangeSaveSet -XAllocColor AllocColor -XAllocColorCells AllocColorCells -XAllocColorPlanes AllocColorPlanes -XAllocNamedColor AllocNamedColor -XAllowEvents AllowEvents -XAutoRepeatOff ChangeKeyboardControl -XAutoRepeatOn ChangeKeyboardControl -XBell Bell -XChangeActivePointerGrab ChangeActivePointerGrab -XChangeGC ChangeGC -XChangeKeyboardControl ChangeKeyboardControl -XChangeKeyboardMapping ChangeKeyboardMapping -XChangePointerControl ChangePointerControl -XChangeProperty ChangeProperty -XChangeSaveSet ChangeSaveSet -XChangeWindowAttributes ChangeWindowAttributes -XCirculateSubwindows CirculateWindow -XCirculateSubwindowsDown CirculateWindow -XCirculateSubwindowsUp CirculateWindow -XClearArea ClearArea -XClearWindow ClearArea -XConfigureWindow ConfigureWindow -XConvertSelection ConvertSelection -XCopyArea CopyArea -XCopyColormapAndFree CopyColormapAndFree -XCopyGC CopyGC -XCopyPlane CopyPlane -XCreateBitmapFromData CreateGC - CreatePixmap - FreeGC - PutImage -XCreateColormap CreateColormap -XCreateFontCursor CreateGlyphCursor -XCreateGC CreateGC -XCreateGlyphCursor CreateGlyphCursor -XCreatePixmap CreatePixmap -XCreatePixmapCursor CreateCursor -XCreatePixmapFromData CreateGC - CreatePixmap - FreeGC - PutImage -XCreateSimpleWindow CreateWindow -XCreateWindow CreateWindow -XDefineCursor ChangeWindowAttributes -XDeleteProperty DeleteProperty -XDestroySubwindows DestroySubwindows -XDestroyWindow DestroyWindow -XDisableAccessControl SetAccessControl -XDrawArc PolyArc -XDrawArcs PolyArc -XDrawImageString ImageText8 -XDrawImageString16 ImageText16 -XDrawLine PolySegment -XDrawLines PolyLine -XDrawPoint PolyPoint -XDrawPoints PolyPoint -XDrawRectangle PolyRectangle -XDrawRectangles PolyRectangle -XDrawSegments PolySegment -XDrawString PolyText8 -XDrawString16 PolyText16 -XDrawText PolyText8 -XDrawText16 PolyText16 -XEnableAccessControl SetAccessControl -XFetchBytes GetProperty -XFetchName GetProperty -XFillArc PolyFillArc -XFillArcs PolyFillArc -XFillPolygon FillPoly -XFillRectangle PolyFillRectangle -XFillRectangles PolyFillRectangle -XForceScreenSaver ForceScreenSaver -XFreeColormap FreeColormap -XFreeColors FreeColors -XFreeCursor FreeCursor -XFreeFont CloseFont -XFreeGC FreeGC -XFreePixmap FreePixmap -XGetAtomName GetAtomName -XGetClassHint GetProperty -XGetFontPath GetFontPath -XGetGeometry GetGeometry -XGetIconName GetProperty -XGetIconSizes GetProperty -XGetImage GetImage -XGetInputFocus GetInputFocus -XGetKeyboardControl GetKeyboardControl -XGetKeyboardMapping GetKeyboardMapping -XGetModifierMapping GetModifierMapping -XGetMotionEvents GetMotionEvents -XGetNormalHints GetProperty -XGetPointerControl GetPointerControl -XGetPointerMapping GetPointerMapping -XGetRGBColormaps GetProperty -XGetScreenSaver GetScreenSaver -XGetSelectionOwner GetSelectionOwner -XGetSizeHints GetProperty -XGetTextProperty GetProperty -XGetTransientForHint GetProperty -XGetWMClientMachine GetProperty -XGetWMColormapWindows GetProperty - InternAtom -XGetWMHints GetProperty -XGetWMIconName GetProperty -XGetWMName GetProperty -XGetWMNormalHints GetProperty -XGetWMProtocols GetProperty - InternAtom -XGetWMSizeHints GetProperty -XGetWindowAttributes GetWindowAttributes - GetGeometry -XGetWindowProperty GetProperty -XGetZoomHints GetProperty -XGrabButton GrabButton -XGrabKey GrabKey -XGrabKeyboard GrabKeyboard -XGrabPointer GrabPointer -XGrabServer GrabServer -XIconifyWindow InternAtom - SendEvent -XInitExtension QueryExtension -XInstallColormap InstallColormap -XInternAtom InternAtom -XKillClient KillClient -XListExtensions ListExtensions -XListFonts ListFonts -XListFontsWithInfo ListFontsWithInfo -XListHosts ListHosts -XListInstalledColormaps ListInstalledColormaps -XListProperties ListProperties -XLoadFont OpenFont -XLoadQueryFont OpenFont - QueryFont -XLookupColor LookupColor -XLowerWindow ConfigureWindow -XMapRaised ConfigureWindow - MapWindow -XMapSubwindows MapSubwindows -XMapWindow MapWindow -XMoveResizeWindow ConfigureWindow -XMoveWindow ConfigureWindow -XNoOp NoOperation -XOpenDisplay CreateGC -XParseColor LookupColor -XPutImage PutImage -XQueryBestCursor QueryBestSize -XQueryBestSize QueryBestSize -XQueryBestStipple QueryBestSize -XQueryBestTile QueryBestSize -XQueryColor QueryColors -XQueryColors QueryColors -XQueryExtension QueryExtension -XQueryFont QueryFont -XQueryKeymap QueryKeymap -XQueryPointer QueryPointer -XQueryTextExtents QueryTextExtents -XQueryTextExtents16 QueryTextExtents -XQueryTree QueryTree -XRaiseWindow ConfigureWindow -XReadBitmapFile CreateGC - CreatePixmap - FreeGC - PutImage -XRecolorCursor RecolorCursor -XReconfigureWMWindow ConfigureWindow - SendEvent -XRemoveFromSaveSet ChangeSaveSet -XRemoveHost ChangeHosts -XRemoveHosts ChangeHosts -XReparentWindow ReparentWindow -XResetScreenSaver ForceScreenSaver -XResizeWindow ConfigureWindow -XRestackWindows ConfigureWindow -XRotateBuffers RotateProperties -XRotateWindowProperties RotateProperties -XSelectInput ChangeWindowAttributes -XSendEvent SendEvent -XSetAccessControl SetAccessControl -XSetArcMode ChangeGC -XSetBackground ChangeGC -XSetClassHint ChangeProperty -XSetClipMask ChangeGC -XSetClipOrigin ChangeGC -XSetClipRectangles SetClipRectangles -XSetCloseDownMode SetCloseDownMode -XSetCommand ChangeProperty -XSetDashes SetDashes -XSetFillRule ChangeGC -XSetFillStyle ChangeGC -XSetFont ChangeGC -XSetFontPath SetFontPath -XSetForeground ChangeGC -XSetFunction ChangeGC -XSetGraphicsExposures ChangeGC -XSetIconName ChangeProperty -XSetIconSizes ChangeProperty -XSetInputFocus SetInputFocus -XSetLineAttributes ChangeGC -XSetModifierMapping SetModifierMapping -XSetNormalHints ChangeProperty -XSetPlaneMask ChangeGC -XSetPointerMapping SetPointerMapping -XSetRGBColormaps ChangeProperty -XSetScreenSaver SetScreenSaver -XSetSelectionOwner SetSelectionOwner -XSetSizeHints ChangeProperty -XSetStandardProperties ChangeProperty -XSetState ChangeGC -XSetStipple ChangeGC -XSetSubwindowMode ChangeGC -XSetTextProperty ChangeProperty -XSetTile ChangeGC -XSetTransientForHint ChangeProperty -XSetTSOrigin ChangeGC -XSetWMClientMachine ChangeProperty -XSetWMColormapWindows ChangeProperty - InternAtom -XSetWMHints ChangeProperty -XSetWMIconName ChangeProperty -XSetWMName ChangeProperty -XSetWMNormalHints ChangeProperty -XSetWMProperties ChangeProperty -XSetWMProtocols ChangeProperty - InternAtom -XSetWMSizeHints ChangeProperty -XSetWindowBackground ChangeWindowAttributes -XSetWindowBackgroundPixmap ChangeWindowAttributes -XSetWindowBorder ChangeWindowAttributes -XSetWindowBorderPixmap ChangeWindowAttributes -XSetWindowBorderWidth ConfigureWindow -XSetWindowColormap ChangeWindowAttributes -XSetZoomHints ChangeProperty -XStoreBuffer ChangeProperty -XStoreBytes ChangeProperty -XStoreColor StoreColors -XStoreColors StoreColors -XStoreName ChangeProperty -XStoreNamedColor StoreNamedColor -XSync GetInputFocus -XSynchronize GetInputFocus -XTranslateCoordinates TranslateCoordinates -XUndefineCursor ChangeWindowAttributes -XUngrabButton UngrabButton -XUngrabKey UngrabKey -XUngrabKeyboard UngrabKeyboard -XUngrabPointer UngrabPointer -XUngrabServer UngrabServer -XUninstallColormap UninstallColormap -XUnloadFont CloseFont -XUnmapSubwindows UnmapSubwindows -XUnmapWindow UnmapWindow -XWarpPointer WarpPointer -XWithdrawWindow SendEvent - UnmapWindow -.TE -.bp -.LP -The following table lists each X protocol request (in alphabetical -order) and the Xlib functions that reference it. -.TS H -lw(2.5i) lw(2.5i). -_ -.sp 6p -.B -Protocol Request Xlib Function -.sp 6p -_ -.sp 6p -.TH -.R -AllocColor XAllocColor -AllocColorCells XAllocColorCells -AllocColorPlanes XAllocColorPlanes -AllocNamedColor XAllocNamedColor -AllowEvents XAllowEvents -Bell XBell -ChangeActivePointerGrab XChangeActivePointerGrab -ChangeGC XChangeGC - XSetArcMode - XSetBackground - XSetClipMask - XSetClipOrigin - XSetFillRule - XSetFillStyle - XSetFont - XSetForeground - XSetFunction - XSetGraphicsExposures - XSetLineAttributes - XSetPlaneMask - XSetState - XSetStipple - XSetSubwindowMode - XSetTile - XSetTSOrigin -ChangeHosts XAddHost - XAddHosts - XRemoveHost - XRemoveHosts -ChangeKeyboardControl XAutoRepeatOff - XAutoRepeatOn - XChangeKeyboardControl -ChangeKeyboardMapping XChangeKeyboardMapping -ChangePointerControl XChangePointerControl -ChangeProperty XChangeProperty - XSetClassHint - XSetCommand - XSetIconName - XSetIconSizes - XSetNormalHints - XSetRGBColormaps - XSetSizeHints - XSetStandardProperties - XSetTextProperty - XSetTransientForHint - XSetWMClientMachine - XSetWMColormapWindows - XSetWMHints - XSetWMIconName - XSetWMName - XSetWMNormalHints - XSetWMProperties - XSetWMProtocols - XSetWMSizeHints - XSetZoomHints - XStoreBuffer - XStoreBytes - XStoreName -ChangeSaveSet XAddToSaveSet - XChangeSaveSet - XRemoveFromSaveSet -ChangeWindowAttributes XChangeWindowAttributes - XDefineCursor - XSelectInput - XSetWindowBackground - XSetWindowBackgroundPixmap - XSetWindowBorder - XSetWindowBorderPixmap - XSetWindowColormap - XUndefineCursor -CirculateWindow XCirculateSubwindowsDown - XCirculateSubwindowsUp - XCirculateSubwindows -ClearArea XClearArea - XClearWindow -CloseFont XFreeFont - XUnloadFont -ConfigureWindow XConfigureWindow - XLowerWindow - XMapRaised - XMoveResizeWindow - XMoveWindow - XRaiseWindow - XReconfigureWMWindow - XResizeWindow - XRestackWindows - XSetWindowBorderWidth -ConvertSelection XConvertSelection -CopyArea XCopyArea -CopyColormapAndFree XCopyColormapAndFree -CopyGC XCopyGC -CopyPlane XCopyPlane -CreateColormap XCreateColormap -CreateCursor XCreatePixmapCursor -CreateGC XCreateGC - XCreateBitmapFromData - XCreatePixmapFromData - XOpenDisplay - XReadBitmapFile -CreateGlyphCursor XCreateFontCursor - XCreateGlyphCursor -CreatePixmap XCreatePixmap - XCreateBitmapFromData - XCreatePixmapFromData - XReadBitmapFile -CreateWindow XCreateSimpleWindow - XCreateWindow -DeleteProperty XDeleteProperty -DestroySubwindows XDestroySubwindows -DestroyWindow XDestroyWindow -FillPoly XFillPolygon -ForceScreenSaver XActivateScreenSaver - XForceScreenSaver - XResetScreenSaver -FreeColormap XFreeColormap -FreeColors XFreeColors -FreeCursor XFreeCursor -FreeGC XFreeGC - XCreateBitmapFromData - XCreatePixmapFromData - XReadBitmapFile -FreePixmap XFreePixmap -GetAtomName XGetAtomName -GetFontPath XGetFontPath -GetGeometry XGetGeometry - XGetWindowAttributes -GetImage XGetImage -GetInputFocus XGetInputFocus - XSync - XSynchronize -GetKeyboardControl XGetKeyboardControl -GetKeyboardMapping XGetKeyboardMapping -GetModifierMapping XGetModifierMapping -GetMotionEvents XGetMotionEvents -GetPointerControl XGetPointerControl -GetPointerMapping XGetPointerMapping -GetProperty XFetchBytes - XFetchName - XGetClassHint - XGetIconName - XGetIconSizes - XGetNormalHints - XGetRGBColormaps - XGetSizeHints - XGetTextProperty - XGetTransientForHint - XGetWMClientMachine - XGetWMColormapWindows - XGetWMHints - XGetWMIconName - XGetWMName - XGetWMNormalHints - XGetWMProtocols - XGetWMSizeHints - XGetWindowProperty - XGetZoomHints -GetSelectionOwner XGetSelectionOwner -GetWindowAttributes XGetWindowAttributes -GrabButton XGrabButton -GrabKey XGrabKey -GrabKeyboard XGrabKeyboard -GrabPointer XGrabPointer -GrabServer XGrabServer -ImageText8 XDrawImageString -ImageText16 XDrawImageString16 -InstallColormap XInstallColormap -InternAtom XGetWMColormapWindows - XGetWMProtocols - XIconifyWindow - XInternAtom - XSetWMColormapWindows - XSetWMProtocols -KillClient XKillClient -ListExtensions XListExtensions -ListFonts XListFonts -ListFontsWithInfo XListFontsWithInfo -ListHosts XListHosts -ListInstalledColormaps XListInstalledColormaps -ListProperties XListProperties -LookupColor XLookupColor - XParseColor -MapSubwindows XMapSubwindows -MapWindow XMapRaised - XMapWindow -NoOperation XNoOp -OpenFont XLoadFont - XLoadQueryFont -PolyArc XDrawArc - XDrawArcs -PolyFillArc XFillArc - XFillArcs -PolyFillRectangle XFillRectangle - XFillRectangles -PolyLine XDrawLines -PolyPoint XDrawPoint - XDrawPoints -PolyRectangle XDrawRectangle - XDrawRectangles -PolySegment XDrawLine - XDrawSegments -PolyText8 XDrawString - XDrawText -PolyText16 XDrawString16 - XDrawText16 -PutImage XPutImage - XCreateBitmapFromData - XCreatePixmapFromData - XReadBitmapFile -QueryBestSize XQueryBestCursor - XQueryBestSize - XQueryBestStipple - XQueryBestTile -QueryColors XQueryColor - XQueryColors -QueryExtension XInitExtension - XQueryExtension -QueryFont XLoadQueryFont - XQueryFont -QueryKeymap XQueryKeymap -QueryPointer XQueryPointer -QueryTextExtents XQueryTextExtents - XQueryTextExtents16 -QueryTree XQueryTree -RecolorCursor XRecolorCursor -ReparentWindow XReparentWindow -RotateProperties XRotateBuffers - XRotateWindowProperties -SendEvent XIconifyWindow - XReconfigureWMWindow - XSendEvent - XWithdrawWindow -SetAccessControl XDisableAccessControl - XEnableAccessControl - XSetAccessControl -SetClipRectangles XSetClipRectangles -SetCloseDownMode XSetCloseDownMode -SetDashes XSetDashes -SetFontPath XSetFontPath -SetInputFocus XSetInputFocus -SetModifierMapping XSetModifierMapping -SetPointerMapping XSetPointerMapping -SetScreenSaver XGetScreenSaver - XSetScreenSaver -SetSelectionOwner XSetSelectionOwner -StoreColors XStoreColor - XStoreColors -StoreNamedColor XStoreNamedColor -TranslateCoordinates XTranslateCoordinates -UngrabButton XUngrabButton -UngrabKey XUngrabKey -UngrabKeyboard XUngrabKeyboard -UngrabPointer XUngrabPointer -UngrabServer XUngrabServer -UninstallColormap XUninstallColormap -UnmapSubwindows XUnmapSubWindows -UnmapWindow XUnmapWindow - XWithdrawWindow -WarpPointer XWarpPointer -.TE -.bp diff --git a/doc/xorg-docs/specs/X11/AppB b/doc/xorg-docs/specs/X11/AppB deleted file mode 100644 index 2e57ede86..000000000 --- a/doc/xorg-docs/specs/X11/AppB +++ /dev/null @@ -1,101 +0,0 @@ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by -.\" Digital Equipment Corporation -.\" -.\" Portions Copyright \(co 1990, 1991 by -.\" Tektronix, Inc. -.\" -.\" Permission to use, copy, modify and distribute this documentation for -.\" any purpose and without fee is hereby granted, provided that the above -.\" copyright notice appears in all copies and that both that copyright notice -.\" and this permission notice appear in all copies, and that the names of -.\" Digital and Tektronix not be used in in advertising or publicity pertaining -.\" to this documentation without specific, written prior permission. -.\" Digital and Tektronix makes no representations about the suitability -.\" of this documentation for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBAppendix B\fP\s-1 - -\s+1\fBX Font Cursors\fP\s-1 -.sp 2 -.na -.LP -.XS -Appendix B: X Font Cursors -.XE -The following are the available cursors that can be used with -.PN XCreateFontCursor . -.LP -.Ds 0 -.TA 3i -.ta 3i -#define XC_X_cursor 0 #define XC_ll_angle 76 -#define XC_arrow 2 #define XC_lr_angle 78 -#define XC_based_arrow_down 4 #define XC_man 80 -#define XC_based_arrow_up 6 #define XC_middlebutton 82 -#define XC_boat 8 #define XC_mouse 84 -#define XC_bogosity 10 #define XC_pencil 86 -#define XC_bottom_left_corner 12 #define XC_pirate 88 -#define XC_bottom_right_corner 14 #define XC_plus 90 -#define XC_bottom_side 16 #define XC_question_arrow 92 -#define XC_bottom_tee 18 #define XC_right_ptr 94 -#define XC_box_spiral 20 #define XC_right_side 96 -#define XC_center_ptr 22 #define XC_right_tee 98 -#define XC_circle 24 #define XC_rightbutton 100 -#define XC_clock 26 #define XC_rtl_logo 102 -#define XC_coffee_mug 28 #define XC_sailboat 104 -#define XC_cross 30 #define XC_sb_down_arrow 106 -#define XC_cross_reverse 32 #define XC_sb_h_double_arrow 108 -#define XC_crosshair 34 #define XC_sb_left_arrow 110 -#define XC_diamond_cross 36 #define XC_sb_right_arrow 112 -#define XC_dot 38 #define XC_sb_up_arrow 114 -#define XC_dot_box_mask 40 #define XC_sb_v_double_arrow 116 -#define XC_double_arrow 42 #define XC_shuttle 118 -#define XC_draft_large 44 #define XC_sizing 120 -#define XC_draft_small 46 #define XC_spider 122 -#define XC_draped_box 48 #define XC_spraycan 124 -#define XC_exchange 50 #define XC_star 126 -#define XC_fleur 52 #define XC_target 128 -#define XC_gobbler 54 #define XC_tcross 130 -#define XC_gumby 56 #define XC_top_left_arrow 132 -#define XC_hand1 58 #define XC_top_left_corner 134 -#define XC_hand2 60 #define XC_top_right_corner 136 -#define XC_heart 62 #define XC_top_side 138 -#define XC_icon 64 #define XC_top_tee 140 -#define XC_iron_cross 66 #define XC_trek 142 -#define XC_left_ptr 68 #define XC_ul_angle 144 -#define XC_left_side 70 #define XC_umbrella 146 -#define XC_left_tee 72 #define XC_ur_angle 148 -#define XC_leftbutton 74 #define XC_watch 150 - #define XC_xterm 152 -.De -.bp diff --git a/doc/xorg-docs/specs/X11/AppC b/doc/xorg-docs/specs/X11/AppC deleted file mode 100644 index 43261ba83..000000000 --- a/doc/xorg-docs/specs/X11/AppC +++ /dev/null @@ -1,2230 +0,0 @@ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by -.\" Digital Equipment Corporation -.\" -.\" Portions Copyright \(co 1990, 1991 by -.\" Tektronix, Inc. -.\" -.\" Permission to use, copy, modify and distribute this documentation for -.\" any purpose and without fee is hereby granted, provided that the above -.\" copyright notice appears in all copies and that both that copyright notice -.\" and this permission notice appear in all copies, and that the names of -.\" Digital and Tektronix not be used in in advertising or publicity pertaining -.\" to this documentation without specific, written prior permission. -.\" Digital and Tektronix makes no representations about the suitability -.\" of this documentation for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBAppendix C\fP\s-1 - -\s+1\fBExtensions\fP\s-1 -.sp 2 -.na -.LP -.XS -Appendix C: Extensions -.XE -Because X can evolve by extensions to the core protocol, -it is important that extensions not be perceived as second-class citizens. -At some point, -your favorite extensions may be adopted as additional parts of the -X Standard. -.LP -Therefore, there should be little to distinguish the use of an extension from -that of the core protocol. -To avoid having to initialize extensions explicitly in application programs, -it is also important that extensions perform lazy evaluations, -automatically initializing themselves when called for the first time. -.LP -This appendix describes techniques for writing extensions to Xlib that will -run at essentially the same performance as the core protocol requests. -.NT -It is expected that a given extension to X consists of multiple -requests. -Defining 10 new features as 10 separate extensions is a bad practice. -Rather, they should be packaged into a single extension -and should use minor opcodes to distinguish the requests. -.NE -.LP -The symbols and macros used for writing stubs to Xlib are listed in -.hN X11/Xlibint.h . -.SH -Basic Protocol Support Routines -.LP -The basic protocol requests for extensions are -.PN XQueryExtension -and -.PN XListExtensions . -.IN "XQueryExtension" "" "@DEF@" -.sM -.FD 0 -Bool XQueryExtension(\^\fIdisplay\fP, \fIname\fP, \fImajor_opcode_return\fP, \ -\fIfirst_event_return\fP, \fIfirst_error_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - char *\fIname;\fP\^ -.br - int *\fImajor_opcode_return\fP\^; -.br - int *\fIfirst_event_return\fP\^; -.br - int *\fIfirst_error_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIname\fP 1i -Specifies the extension name. -.IP \fImajor_opcode_return\fP 1i -Returns the major opcode. -.IP \fIfirst_event_return\fP 1i -Returns the first event code, if any. -.IP \fIfirst_error_return\fP 1i -Returns the first error code, if any. -.LP -.eM -The -.PN XQueryExtension -function determines if the named extension is present. -If the extension is not present, -.PN XQueryExtension -returns -.PN False ; -otherwise, it returns -.PN True . -If the extension is present, -.PN XQueryExtension -returns the major opcode for the extension to major_opcode_return; -otherwise, -it returns zero. -Any minor opcode and the request formats are specific to the -extension. -If the extension involves additional event types, -.PN XQueryExtension -returns the base event type code to first_event_return; -otherwise, -it returns zero. -The format of the events is specific to the extension. -If the extension involves additional error codes, -.PN XQueryExtension -returns the base error code to first_error_return; -otherwise, -it returns zero. -The format of additional data in the errors is specific to the extension. -.LP -If the extension name is not in the Host Portable Character Encoding -the result is implementation-dependent. -Uppercase and lowercase matter; -the strings ``thing'', ``Thing'', and ``thinG'' -are all considered different names. -.IN "XListExtensions" "" "@DEF@" -.sM -.FD 0 -char **XListExtensions(\^\fIdisplay\fP, \fInextensions_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int *\fInextensions_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fInextensions_return\fP 1i -Returns the number of extensions listed. -.LP -.eM -The -.PN XListExtensions -function returns a list of all extensions supported by the server. -If the data returned by the server is in the Latin Portable Character Encoding, -then the returned strings are in the Host Portable Character Encoding. -Otherwise, the result is implementation-dependent. -.IN "XFreeExtensionList" "" "@DEF@" -.sM -.FD 0 -XFreeExtensionList(\^\fIlist\fP\^) -.br - char **\fIlist\fP\^; -.FN -.IP \fIlist\fP 1i -Specifies the list of extension names. -.LP -.eM -The -.PN XFreeExtensionList -function frees the memory allocated by -.PN XListExtensions . -.SH -Hooking into Xlib -.LP -These functions allow you to hook into the library. -They are not normally used by application programmers but are used -by people who need to extend the core X protocol and -the X library interface. -The functions, which generate protocol requests for X, are typically -called stubs. -.LP -In extensions, stubs first should check to see if they have initialized -themselves on a connection. -If they have not, they then should call -.PN XInitExtension -to attempt to initialize themselves on the connection. -.LP -If the extension needs to be informed of GC/font allocation or -deallocation or if the extension defines new event types, -the functions described here allow the extension to be -called when these events occur. -.LP -The -.PN XExtCodes -structure returns the information from -.PN XInitExtension -and is defined in -.hN X11/Xlib.h : -.LP -.IN "XExtCodes" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct _XExtCodes { /* public to extension, cannot be changed */ - int extension; /* extension number */ - int major_opcode; /* major op-code assigned by server */ - int first_event; /* first event number for the extension */ - int first_error; /* first error number for the extension */ -} XExtCodes; -.De -.LP -.eM -.IN "XInitExtension" "" "@DEF@" -.sM -.FD 0 -XExtCodes *XInitExtension(\^\fIdisplay\fP, \fIname\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - char *\fIname\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIname\fP 1i -Specifies the extension name. -.LP -.eM -The -.PN XInitExtension -function determines if the named extension exists. -Then, it allocates storage for maintaining the -information about the extension on the connection, -chains this onto the extension list for the connection, -and returns the information the stub implementor will need to access -the extension. -If the extension does not exist, -.PN XInitExtension -returns NULL. -.LP -If the extension name is not in the Host Portable Character Encoding, -the result is implementation-dependent. -Uppercase and lowercase matter; -the strings ``thing'', ``Thing'', and ``thinG'' -are all considered different names. -.LP -The extension number in the -.PN XExtCodes -structure is -needed in the other calls that follow. -This extension number is unique only to a single connection. -.LP -.IN "XAddExtension" "" "@DEF@" -.sM -.FD 0 -XExtCodes *XAddExtension\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -For local Xlib extensions, the -.PN XAddExtension -function allocates the -.PN XExtCodes -structure, bumps the extension number count, -and chains the extension onto the extension list. -(This permits extensions to Xlib without requiring server extensions.) -.SH -Hooks into the Library -.LP -These functions allow you to define procedures that are to be -called when various circumstances occur. -The procedures include the creation of a new GC for a connection, -the copying of a GC, the freeing of a GC, the creating and freeing of fonts, -the conversion of events defined by extensions to and from wire -format, and the handling of errors. -.LP -All of these functions return the previous procedure defined for this -extension. -.IN "XESetCloseDisplay" "" "@DEF@" -.sM -.FD 0 -int (*XESetCloseDisplay(\^\fIdisplay\fP, \fIextension\fP, \fIproc\fP\^))(\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIextension\fP\^; -.br - int (\^*\fIproc\fP\^)(\^); -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIextension\fP 1i -Specifies the extension number. -.IP \fIproc\fP 1i -Specifies the procedure to call when the display is closed. -.LP -.eM -The -.PN XESetCloseDisplay -function defines a procedure to be called whenever -.PN XCloseDisplay -is called. -It returns any previously defined procedure, usually NULL. -.LP -When -.PN XCloseDisplay -is called, -your procedure is called -with these arguments: -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -.R -(*\fIproc\fP\^)(\^\fIdisplay\fP, \fIcodes\fP\^) - Display *\fIdisplay\fP\^; - XExtCodes *\fIcodes\fP\^; -.De -.LP -.eM -.IN "XESetCreateGC" "" "@DEF@" -.sM -.FD 0 -int (*XESetCreateGC(\^\fIdisplay\fP, \fIextension\fP, \fIproc\fP\^))(\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIextension\fP\^; -.br - int (\^*\fIproc\fP\^)(\^); -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIextension\fP 1i -Specifies the extension number. -.IP \fIproc\fP 1i -Specifies the procedure to call when a GC is closed. -.LP -.eM -The -.PN XESetCreateGC -function defines a procedure to be called whenever -a new GC is created. -It returns any previously defined procedure, usually NULL. -.LP -When a GC is created, -your procedure is called with these arguments: -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -.R -(*\fIproc\fP\^)(\^\fIdisplay\fP, \fIgc\fP, \fIcodes\fP\^) - Display *\fIdisplay\fP\^; - GC \fIgc\fP\^; - XExtCodes *\fIcodes\fP\^; -.De -.LP -.eM -.IN "XESetCopyGC" "" "@DEF@" -.sM -.FD 0 -int (*XESetCopyGC(\^\fIdisplay\fP, \fIextension\fP, \fIproc\fP\^))(\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIextension\fP\^; -.br - int (\^*\fIproc\fP\^)(\^); -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIextension\fP 1i -Specifies the extension number. -.IP \fIproc\fP 1i -Specifies the procedure to call when GC components are copied. -.LP -.eM -The -.PN XESetCopyGC -function defines a procedure to be called whenever -a GC is copied. -It returns any previously defined procedure, usually NULL. -.LP -When a GC is copied, -your procedure is called with these arguments: -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -.R -(*\fIproc\fP\^)(\^\fIdisplay\fP, \fIgc\fP, \fIcodes\fP\^) - Display *\fIdisplay\fP\^; - GC \fIgc\fP\^; - XExtCodes *\fIcodes\fP\^; -.De -.LP -.eM -.IN "XESetFreeGC" "" "@DEF@" -.sM -.FD 0 -int (*XESetFreeGC(\^\fIdisplay\fP, \fIextension\fP, \fIproc)\fP\^)(\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIextension\fP\^; -.br - int (\^*\fIproc\fP\^)(\^); -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIextension\fP 1i -Specifies the extension number. -.IP \fIproc\fP 1i -Specifies the procedure to call when a GC is freed. -.LP -.eM -The -.PN XESetFreeGC -function defines a procedure to be called whenever -a GC is freed. -It returns any previously defined procedure, usually NULL. -.LP -When a GC is freed, -your procedure is called with these arguments: -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -.R -(*\fIproc\fP\^)(\^\fIdisplay\fP, \fIgc\fP, \fIcodes\fP\^) - Display *\fIdisplay\fP\^; - GC \fIgc\fP\^; - XExtCodes *\fIcodes\fP\^; -.De -.LP -.eM -.IN "XESetCreateFont" "" "@DEF@" -.sM -.FD 0 -int (*XESetCreateFont(\^\fIdisplay\fP, \fIextension\fP, \fIproc\fP))(\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIextension\fP\^; -.br - int (\^*\fIproc\fP\^)(\^); -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIextension\fP 1i -Specifies the extension number. -.IP \fIproc\fP 1i -Specifies the procedure to call when a font is created. -.LP -.eM -The -.PN XESetCreateFont -function defines a procedure to be called whenever -.PN XLoadQueryFont -and -.PN XQueryFont -are called. -It returns any previously defined procedure, usually NULL. -.LP -When -.PN XLoadQueryFont -or -.PN XQueryFont -is called, -your procedure is called with these arguments: -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -.R -(*\fIproc\fP\^)(\^\fIdisplay\fP, \fIfs\fP, \fIcodes\fP\^) - Display *\fIdisplay\fP\^; - XFontStruct *\fIfs\fP\^; - XExtCodes *\fIcodes\fP\^; -.De -.LP -.eM -.IN "XESetFreeFont" "" "@DEF@" -.sM -.FD 0 -int (*XESetFreeFont(\^\fIdisplay\fP, \fIextension\fP, \fIproc\fP\^))(\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIextension\fP\^; -.br - int (\^*\fIproc\fP)(\^); -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIextension\fP 1i -Specifies the extension number. -.IP \fIproc\fP 1i -Specifies the procedure to call when a font is freed. -.LP -.eM -The -.PN XESetFreeFont -function defines a procedure to be called whenever -.PN XFreeFont -is called. -It returns any previously defined procedure, usually NULL. -.LP -When -.PN XFreeFont -is called, your procedure is called with these arguments: -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -.R -(*\fIproc\fP\^)(\^\fIdisplay\fP, \fIfs\fP, \fIcodes\fP\^) - Display *\fIdisplay\fP\^; - XFontStruct *\fIfs\fP\^; - XExtCodes *\fIcodes\fP\^; -.De -.LP -.eM -The -.PN XESetWireToEvent -and -.PN XESetEventToWire -functions allow you to define new events to the library. -An -.PN XEvent -structure always has a type code (type -.PN int ) -as the first component. -This uniquely identifies what kind of event it is. -The second component is always the serial number (type -.PN unsigned -.PN long ) -of the last request processed by the server. -The third component is always a Boolean (type -.PN Bool ) -indicating whether the event came from a -.PN SendEvent -protocol request. -The fourth component is always a pointer to the display -the event was read from. -The fifth component is always a resource ID of one kind or another, -usually a window, carefully selected to be useful to toolkit dispatchers. -The fifth component should always exist, even if -the event does not have a natural destination; -if there is no value -from the protocol to put in this component, initialize it to zero. -.NT -There is an implementation limit such that your host event -structure size cannot be bigger than the size of the -.PN XEvent -union of structures. -There also is no way to guarantee that more than 24 elements or 96 characters -in the structure will be fully portable between machines. -.NE -.IN "XESetWireToEvent" "" "@DEF@" -.sM -.FD 0 -int (*XESetWireToEvent(\^\fIdisplay\fP, \fIevent_number\fP, \fIproc\fP\^))(\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIevent_number\fP\^; -.br - Status (\^*\fIproc\fP\^)(\^); -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIevent_number\fP 1i -Specifies the event code. -.IP \fIproc\fP 1i -Specifies the procedure to call when converting an event. -.LP -.eM -The -.PN XESetWireToEvent -function defines a procedure to be called when an event -needs to be converted from wire format -.Pn ( xEvent ) -to host format -.Pn ( XEvent ). -The event number defines which protocol event number to install a -conversion procedure for. -.PN XESetWireToEvent -returns any previously defined procedure. -.NT -You can replace a core event conversion function with one -of your own, although this is not encouraged. -It would, however, allow you to intercept a core event -and modify it before being placed in the queue or otherwise examined. -.NE -When Xlib needs to convert an event from wire format to host -format, your procedure is called with these arguments: -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -.R -Status (*\fIproc\fP\^)(\^\fIdisplay\fP, \fIre\fP, \fIevent\fP\^) - Display *\fIdisplay\fP\^; - XEvent *\fIre\fP\^; - xEvent *\fIevent\fP\^; -.De -.LP -.eM -Your procedure must return status to indicate if the conversion succeeded. -The re argument is a pointer to where the host format event should be stored, -and the event argument is the 32-byte wire event structure. -In the -.PN XEvent -structure you are creating, -you must fill in the five required members of the event structure. -You should fill in the type member with the type specified for the -.PN xEvent -structure. -You should copy all other members from the -.PN xEvent -structure (wire format) to the -.PN XEvent -structure (host format). -Your conversion procedure should return -.PN True -if the event should be placed in the queue or -.PN False -if it should not be placed in the queue. -.LP -To initialize the serial number component of the event, call -.PN _XSetLastRequestRead -with the event and use the return value. -.LP -.IN "_XSetLastRequestRead" "" "@DEF@" -.sM -.FD 0 -unsigned long _XSetLastRequestRead(\^\fIdisplay\fP, \fIrep\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - xGenericReply *\fIrep\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIrep\fP 1i -Specifies the wire event structure. -.LP -.eM -The -.PN _XSetLastRequestRead -function computes and returns a complete serial number from the partial -serial number in the event. -.sp -.LP -.IN "XESetEventToWire" "" "@DEF@" -.sM -.FD 0 -Status (*XESetEventToWire(\^\fIdisplay\fP, \fIevent_number\fP, \fIproc\fP\^))(\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIevent_number\fP\^; -.br - int (\^*\fIproc\fP\^)(\^); -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIevent_number\fP 1i -Specifies the event code. -.IP \fIproc\fP 1i -Specifies the procedure to call when converting an event. -.LP -.eM -The -.PN XESetEventToWire -function defines a procedure to be called when an event -needs to be converted from host format -.Pn ( XEvent ) -to wire format -.Pn ( xEvent ) -form. -The event number defines which protocol event number to install a -conversion procedure for. -.PN XESetEventToWire -returns any previously defined procedure. -It returns zero if the conversion fails or nonzero otherwise. -.NT -You can replace a core event conversion function with one -of your own, although this is not encouraged. -It would, however, allow you to intercept a core event -and modify it before being sent to another client. -.NE -When Xlib needs to convert an event from host format to wire format, -your procedure is called with these arguments: -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -.R -(*\fIproc\fP\^)(\^\fIdisplay\fP, \fIre\fP, \fIevent\fP\^) - Display *\fIdisplay\fP\^; - XEvent *\fIre\fP\^; - xEvent *\fIevent\fP\^; -.De -.LP -.eM -The re argument is a pointer to the host format event, -and the event argument is a pointer to where the 32-byte wire event -structure should be stored. -You should fill in the type with the type from the -.PN XEvent -structure. -All other members then should be copied from the host format to the -.PN xEvent -structure. -.IN "XESetWireToError" "" "@DEF@" -.sM -.FD 0 -Bool (*XESetWireToError(\^\fIdisplay\fP, \fIerror_number\fP, \fIproc\fP\^)(\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIerror_number\fP\^; -.br - Bool (\^*\fIproc\fP\^)(\^); -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIerror_number\fP 1i -Specifies the error code. -.IP \fIproc\fP 1i -Specifies the procedure to call when an error is received. -.LP -.eM -The -.PN XESetWireToError -function defines a procedure to be called when an extension -error needs to be converted from wire format to host format. -The error number defines which protocol error code to install -the conversion procedure for. -.PN XESetWireToError -returns any previously defined procedure. -.LP -Use this function for extension errors that contain additional error values -beyond those in a core X error, when multiple wire errors must be combined -into a single Xlib error, or when it is necessary to intercept an -X error before it is otherwise examined. -.LP -When Xlib needs to convert an error from wire format to host format, -the procedure is called with these arguments: -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -.R -Bool (*\fIproc\fP\^)(\^\fIdisplay\fP, \fIhe\fP, \fIwe\fP\^) - Display *\fIdisplay\fP\^; - XErrorEvent *\fIhe\fP\^; - xError *\fIwe\fP\^; -.De -.LP -.eM -The he argument is a pointer to where the host format error should be stored. -The structure pointed at by he is guaranteed to be as large as an -.PN XEvent -structure and so can be cast to a type larger than an -.PN XErrorEvent -to store additional values. -If the error is to be completely ignored by Xlib -(for example, several protocol error structures will be combined into -one Xlib error), -then the function should return -.PN False ; -otherwise, it should return -.PN True . -.IN "XESetError" "" "@DEF@" -.sM -.FD 0 -int (*XESetError(\^\fIdisplay\fP, \fIextension\fP, \fIproc\fP\^))(\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIextension\fP\^; -.br - int (\^*\fIproc\fP\^)(\^); -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIextension\fP 1i -Specifies the extension number. -.IP \fIproc\fP 1i -Specifies the procedure to call when an error is received. -.LP -.eM -Inside Xlib, there are times that you may want to suppress the -calling of the external error handling when an error occurs. -This allows status to be returned on a call at the cost of the call -being synchronous (though most such functions are query operations, in any -case, and are typically programmed to be synchronous). -.LP -When Xlib detects a protocol error in -.PN _XReply , -it calls your procedure with these arguments: -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -.R -int (*\fIproc\fP\^)(\fIdisplay\fP, \fIerr\fP, \fIcodes\fP, \fIret_code\fP\^) - Display *\fIdisplay\fP\^; - xError *\fIerr\fP\^; - XExtCodes *\fIcodes\fP\^; - int *\fIret_code\fP\^; -.De -.LP -.eM -The err argument is a pointer to the 32-byte wire format error. -The codes argument is a pointer to the extension codes structure. -The ret_code argument is the return code you may want -.PN _XReply -returned to. -.LP -If your procedure returns a zero value, -the error is not suppressed, and -the client's error handler is called. -(For further information, see section 11.8.2.) -If your procedure returns nonzero, -the error is suppressed, and -.PN _XReply -returns the value of ret_code. -.IN "XESetErrorString" "" "@DEF@" -.sM -.FD 0 -char *(*XESetErrorString(\^\fIdisplay\fP, \fIextension\fP, \fIproc\fP\^))(\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIextension\fP\^; -.br - char *(\^*\fIproc\fP\^)(\^); -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIextension\fP 1i -Specifies the extension number. -.IP \fIproc\fP 1i -Specifies the procedure to call to obtain an error string. -.LP -.eM -The -.PN XGetErrorText -function returns a string to the user for an error. -.PN XESetErrorString -allows you to define a procedure to be called that -should return a pointer to the error message. -The following is an example. -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -.R -(*\fIproc\fP\^)(\^\fIdisplay\fP, \fIcode\fP, \fIcodes\fP, \fIbuffer\fP, \fInbytes\fP\^) - Display *\fIdisplay\fP\^; - int \fIcode\fP\^; - XExtCodes *\fIcodes\fP\^; - char *\fIbuffer\fP\^; - int \fInbytes\fP\^; -.De -.LP -.eM -Your procedure is called with the error code for every error detected. -You should copy nbytes of a null-terminated string containing the -error message into buffer. -.IN "XESetPrintErrorValues" "" "@DEF@" -.sM -.FD 0 -void (*XESetPrintErrorValues(\^\fIdisplay\fP, \fIextension\fP, \fIproc\fP\^))(\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIextension\fP\^; -.br - void (\^*\fIproc\fP\^)(\^); -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIextension\fP 1i -Specifies the extension number. -.IP \fIproc\fP 1i -Specifies the procedure to call when an error is printed. -.LP -.eM -The -.PN XESetPrintErrorValues -function defines a procedure to be called when an extension -error is printed, to print the error values. -Use this function for extension errors that contain additional error values -beyond those in a core X error. -It returns any previously defined procedure. -.LP -When Xlib needs to print an error, -the procedure is called with these arguments: -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -.R -void (*\fIproc\fP\^)(\^\fIdisplay\fP, \fIev\fP, \fIfp\fP\^) - Display *\fIdisplay\fP\^; - XErrorEvent *\fIev\fP\^; - void *\fIfp\fP\^; -.De -.LP -.eM -The structure pointed at by ev is guaranteed to be as large as an -.PN XEvent -structure and so can be cast to a type larger than an -.PN XErrorEvent -to obtain additional values set by using -.PN XESetWireToError . -The underlying type of the fp argument is system dependent; -on a POSIX-compliant system, fp should be cast to type FILE*. -.IN "XESetFlushGC" "" "@DEF@" -.sM -.FD 0 -int (*XESetFlushGC(\^\fIdisplay\fP, \fIextension\fP, \fIproc\fP\^))(\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIextension\fP\^; -.br - int *(\^*\fIproc\fP\^)(\^); -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIextension\fP 1i -Specifies the extension number. -.IP \fIproc\fP 1i -Specifies the procedure to call when a GC is flushed. -.LP -.eM -The procedure set by the -.PN XESetFlushGC -function has the same interface as the procedure set by the -.PN XESetCopyGC -function, but is called when a GC cache needs to be updated in the server. -.IN "XESetBeforeFlush" "" "@DEF@" -.sM -.FD 0 -int (*XESetBeforeFlush(\^\fIdisplay\fP, \fIextension\fP, \fIproc\fP\^))(\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIextension\fP\^; -.br - int *(\^*\fIproc\fP\^)(\^); -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIextension\fP 1i -Specifies the extension number. -.IP \fIproc\fP 1i -Specifies the procedure to call when a buffer is flushed. -.LP -.eM -The -.PN XESetBeforeFlush -function defines a procedure to be called when data is about to be -sent to the server. When data is about to be sent, your procedure is -called one or more times with these arguments: -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -.R -void (*\fIproc\fP\^)(\^\fIdisplay\fP, \fIcodes\fP, \fIdata\fP, \fIlen\fP\^) - Display *\fIdisplay\fP\^; - XExtCodes *\fIcodes\fP\^; - char *\fIdata\fP\^; - long \fIlen\fP\^; -.De -.LP -.eM -The data argument specifies a portion of the outgoing data buffer, -and its length in bytes is specified by the len argument. -Your procedure must not alter the contents of the data and must not -do additional protocol requests to the same display. -.SH -Hooks onto Xlib Data Structures -.LP -Various Xlib data structures have provisions for extension procedures -to chain extension supplied data onto a list. -These structures are -.PN GC , -.PN Visual , -.PN Screen , -.PN ScreenFormat , -.PN Display , -and -.PN XFontStruct . -Because the list pointer is always the first member in the structure, -a single set of procedures can be used to manipulate the data -on these lists. -.LP -The following structure is used in the functions in this section -and is defined in -.hN X11/Xlib.h : -.LP -.IN "XExtData" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct _XExtData { - int number; /* number returned by XInitExtension */ - struct _XExtData *next; /* next item on list of data for structure */ - int (*free_private)(); /* if defined, called to free private */ - XPointer private_data; /* data private to this extension. */ -} XExtData; -.De -.LP -.eM -When any of the data structures listed above are freed, -the list is walked, and the structure's free procedure (if any) is called. -If free is NULL, -then the library frees both the data pointed to by the private_data member -and the structure itself. -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -union { Display *display; - GC gc; - Visual *visual; - Screen *screen; - ScreenFormat *pixmap_format; - XFontStruct *font } XEDataObject; -.De -.LP -.eM -.IN "XEHeadOfExtensionList" "" "@DEF@" -.sM -.FD 0 -XExtData **XEHeadOfExtensionList(\^\fIobject\fP\^) - XEDataObject \fIobject\fP\^; -.FN -.IP \fIobject\fP 1i -Specifies the object. -.LP -.eM -The -.PN XEHeadOfExtensionList -function returns a pointer to the list of extension structures attached -to the specified object. -In concert with -.PN XAddToExtensionList , -.PN XEHeadOfExtensionList -allows an extension to attach arbitrary data to any of the structures -of types contained in -.PN XEDataObject . -.LP -.IN "XAddToExtensionList" "" "@DEF@" -.sM -.FD 0 -XAddToExtensionList(\^\fIstructure\fP, \fIext_data\fP\^) -.br - XExtData **\fIstructure\fP\^; -.br - XExtData *\fIext_data\fP\^; -.FN -.IP \fIstructure\fP 1i -Specifies the extension list. -.IP \fIext_data\fP 1i -Specifies the extension data structure to add. -.LP -.eM -The structure argument is a pointer to one of the data structures -enumerated above. -You must initialize ext_data->number with the extension number -before calling this function. -.IN "XFindOnExtensionList" "" "@DEF@" -.sM -.FD 0 -XExtData *XFindOnExtensionList(\^\fIstructure\fP, \fInumber\fP\^) -.br - struct _XExtData **\fIstructure\fP\^; -.br - int \fInumber\fP\^; -.FN -.IP \fIstructure\fP 1i -Specifies the extension list. -.IP \fInumber\fP 1i -Specifies the extension number from -.PN XInitExtension . -.LP -.eM -The -.PN XFindOnExtensionList -function returns the first extension data structure -for the extension numbered number. -It is expected that an extension will add at most one extension -data structure to any single data structure's extension data list. -There is no way to find additional structures. -.LP -The -.PN XAllocID -macro, which allocates and returns a resource ID, is defined in -.hN X11/Xlib.h . -.IN "XAllocID" "" "@DEF@" -.sM -.FD 0 -XAllocID\^(\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -This macro is a call through the -.PN Display -structure to an internal resource ID allocator. -It returns a resource ID that you can use when creating new resources. -.LP -The -.PN XAllocIDs -macro allocates and returns an array of resource ID. -.IN "XAllocIDs" "" "@DEF@" -.sM -.FD 0 -XAllocIDs\^(\fIdisplay\fP, \fIids_return\fP, \fIcount\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XID *\fIids_return\fP\^; -.br - int \fIcount\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIids_return\fP 1i -Returns the resource IDs. -.IP \fIrep\fP 1i -Specifies the number of resource IDs requested. -.LP -.eM -This macro is a call through the -.PN Display -structure to an internal resource ID allocator. -It returns resource IDs to the array supplied by the caller. -To correctly handle automatic reuse of resource IDs, you must call -.PN XAllocIDs -when requesting multiple resource IDs. This call might generate -protocol requests. -.SH -GC Caching -.LP -GCs are cached by the library to allow merging of independent change -requests to the same GC into single protocol requests. -This is typically called a write-back cache. -Any extension procedure whose behavior depends on the contents of a GC -must flush the GC cache to make sure the server has up-to-date contents -in its GC. -.LP -The -.PN FlushGC -macro checks the dirty bits in the library's GC structure and calls -.PN _XFlushGCCache -if any elements have changed. -The -.PN FlushGC -macro is defined as follows: -.IN "FlushGC" "" "@DEF@" -.sM -.FD 0 -FlushGC\^(\^\fIdisplay\fP\^, \fIgc\fP\^) -.br - Display *\^\fIdisplay\fP\^; -.br - GC \fIgc\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIgc\fP 1i -Specifies the GC. -.LP -.eM -Note that if you extend the GC to add additional resource ID components, -you should ensure that the library stub sends the change request immediately. -This is because a client can free a resource immediately after -using it, so if you only stored the value in the cache without -forcing a protocol request, the resource might be destroyed before being -set into the GC. -You can use the -.PN _XFlushGCCache -procedure -to force the cache to be flushed. -The -.PN _XFlushGCCache -procedure -is defined as follows: -.IN "_XFlushGCCache" "" "@DEF@" -.sM -.FD 0 -_XFlushGCCache\^(\^\fIdisplay\fP\^, \fIgc\fP\^) -.br - Display *\^\fIdisplay\fP\^; -.br - GC \fIgc\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIgc\fP 1i -Specifies the GC. -.LP -.eM -.SH -Graphics Batching -.LP -If you extend X to add more poly graphics primitives, you may be able to -take advantage of facilities in the library to allow back-to-back -single calls to be transformed into poly requests. -This may dramatically improve performance of programs that are not -written using poly requests. -A pointer to an -.PN xReq , -called last_req in the display structure, is the last request being processed. -By checking that the last request -type, drawable, gc, and other options are the same as the new one -and that there is enough space left in the buffer, you may be able -to just extend the previous graphics request by extending the length -field of the request and appending the data to the buffer. -This can improve performance by five times or more in naive programs. -For example, here is the source for the -.PN XDrawPoint -stub. -(Writing extension stubs is discussed in the next section.) -.IP -.sM -.nf - -#include - -/* precompute the maximum size of batching request allowed */ - -static int size = sizeof(xPolyPointReq) + EPERBATCH * sizeof(xPoint); - -XDrawPoint(dpy, d, gc, x, y) - register Display *dpy; - Drawable d; - GC gc; - int x, y; /* INT16 */ -{ - xPoint *point; - LockDisplay(dpy); - FlushGC(dpy, gc); - { - register xPolyPointReq *req = (xPolyPointReq *) dpy->last_req; - /* if same as previous request, with same drawable, batch requests */ - if ( - (req->reqType == X_PolyPoint) - && (req->drawable == d) - && (req->gc == gc->gid) - && (req->coordMode == CoordModeOrigin) - && ((dpy->bufptr + sizeof (xPoint)) <= dpy->bufmax) - && (((char *)dpy->bufptr - (char *)req) < size) ) { - point = (xPoint *) dpy->bufptr; - req->length += sizeof (xPoint) >> 2; - dpy->bufptr += sizeof (xPoint); - } - - else { - GetReqExtra(PolyPoint, 4, req); /* 1 point = 4 bytes */ - req->drawable = d; - req->gc = gc->gid; - req->coordMode = CoordModeOrigin; - point = (xPoint *) (req + 1); - } - point->x = x; - point->y = y; - } - UnlockDisplay(dpy); - SyncHandle(); -} -.fi -.LP -.eM -To keep clients from generating very long requests that may monopolize the -server, -there is a symbol defined in -.hN X11/Xlibint.h -of EPERBATCH on the number of requests batched. -Most of the performance benefit occurs in the first few merged requests. -Note that -.PN FlushGC -is called \fIbefore\fP picking up the value of last_req, -because it may modify this field. -.SH -Writing Extension Stubs -.LP -All X requests always contain the length of the request, -expressed as a 16-bit quantity of 32 bits. -This means that a single request can be no more than 256K bytes in -length. -Some servers may not support single requests of such a length. -The value of dpy->max_request_size contains the maximum length as -defined by the server implementation. -For further information, -see ``X Window System Protocol.'' -.SH -Requests, Replies, and Xproto.h -.LP -The -.hN X11/Xproto.h -file contains three sets of definitions that -are of interest to the stub implementor: -request names, request structures, and reply structures. -.LP -You need to generate a file equivalent to -.hN X11/Xproto.h -for your extension and need to include it in your stub procedure. -Each stub procedure also must include -.hN X11/Xlibint.h . -.LP -The identifiers are deliberately chosen in such a way that, if the -request is called X_DoSomething, then its request structure is -xDoSomethingReq, and its reply is xDoSomethingReply. -The GetReq family of macros, defined in -.hN X11/Xlibint.h , -takes advantage of this naming scheme. -.LP -For each X request, -there is a definition in -.hN X11/Xproto.h -that looks similar to this: -.LP -.Ds -.R -#define X_DoSomething 42 -.De -In your extension header file, -this will be a minor opcode, -instead of a major opcode. -.SH -Request Format -.LP -Every request contains an 8-bit major opcode and a 16-bit length field -expressed in units of 4 bytes. -Every request consists of 4 bytes of header -(containing the major opcode, the length field, and a data byte) followed by -zero or more additional bytes of data. -The length field defines the total length of the request, including the header. -The length field in a request must equal the minimum length required to contain -the request. -If the specified length is smaller or larger than the required length, -the server should generate a -.PN BadLength -error. -Unused bytes in a request are not required to be zero. -Extensions should be designed in such a way that long protocol requests -can be split up into smaller requests, -if it is possible to exceed the maximum request size of the server. -The protocol guarantees the maximum request size to be no smaller than -4096 units (16384 bytes). -.LP -Major opcodes 128 through 255 are reserved for extensions. -Extensions are intended to contain multiple requests, -so extension requests typically have an additional minor opcode encoded -in the second data byte in the request header, -but the placement and interpretation of this minor opcode as well as all -other fields in extension requests are not defined by the core protocol. -Every request is implicitly assigned a sequence number (starting with one) -used in replies, errors, and events. -.LP -To help but not cure portability problems to certain machines, the -.PN B16 -and -.PN B32 -macros have been defined so that they can become bitfield specifications -on some machines. -For example, on a Cray, -these should be used for all 16-bit and 32-bit quantities, as discussed below. -.LP -Most protocol requests have a corresponding structure typedef in -.hN X11/Xproto.h , -which looks like: -.LP -.IN "xDoSomethingReq" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct _DoSomethingReq { - CARD8 reqType; /* X_DoSomething */ - CARD8 someDatum; /* used differently in different requests */ - CARD16 length B16; /* total # of bytes in request, divided by 4 */ - ... - /* request-specific data */ - ... -} xDoSomethingReq; -.De -.LP -.eM -If a core protocol request has a single 32-bit argument, -you need not declare a request structure in your extension header file. -Instead, such requests use the -.PN xResourceReq -structure in -.hN X11/Xproto.h . -This structure is used for any request whose single argument is a -.PN Window , -.PN Pixmap , -.PN Drawable , -.PN GContext , -.PN Font , -.PN Cursor , -.PN Colormap , -.PN Atom , -or -.PN VisualID . -.LP -.IN "xResourceReq" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct _ResourceReq { - CARD8 reqType; /* the request type, e.g. X_DoSomething */ - BYTE pad; /* not used */ - CARD16 length B16; /* 2 (= total # of bytes in request, divided by 4) */ - CARD32 id B32; /* the Window, Drawable, Font, GContext, etc. */ -} xResourceReq; -.De -.LP -.eM -If convenient, -you can do something similar in your extension header file. -.LP -In both of these structures, -the reqType field identifies the type of the request (for example, -X_MapWindow or X_CreatePixmap). -The length field tells how long the request is -in units of 4-byte longwords. -This length includes both the request structure itself and any -variable-length data, such as strings or lists, that follow the -request structure. -Request structures come in different sizes, -but all requests are padded to be multiples of four bytes long. -.LP -A few protocol requests take no arguments at all. -Instead, they use the -.PN xReq -structure in -.hN X11/Xproto.h , -which contains only a reqType and a length (and a pad byte). -.LP -If the protocol request requires a reply, -then -.hN X11/Xproto.h -also contains a reply structure typedef: -.LP -.IN "xDoSomethingReply" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct _DoSomethingReply { - BYTE type; /* always X_Reply */ - BYTE someDatum; /* used differently in different requests */ - CARD16 sequenceNumber B16; /* # of requests sent so far */ - CARD32 length B32; /* # of additional bytes, divided by 4 */ - ... - /* request-specific data */ - ... -} xDoSomethingReply; -.De -.LP -.eM -Most of these reply structures are 32 bytes long. -If there are not that many reply values, -then they contain a sufficient number of pad fields -to bring them up to 32 bytes. -The length field is the total number of bytes in the request minus 32, -divided by 4. -This length will be nonzero only if: -.IP \(bu 5 -The reply structure is followed by variable-length data, -such as a list or string. -.IP \(bu 5 -The reply structure is longer than 32 bytes. -.LP -Only -.PN GetWindowAttributes , -.PN QueryFont , -.PN QueryKeymap , -and -.PN GetKeyboardControl -have reply structures longer than 32 bytes in the core protocol. -.LP -A few protocol requests return replies that contain no data. -.hN X11/Xproto.h -does not define reply structures for these. -Instead, they use the -.PN xGenericReply -structure, which contains only a type, length, -and sequence number (and sufficient padding to make it 32 bytes long). -.SH -Starting to Write a Stub Procedure -.LP -An Xlib stub procedure should start like this: -.LP -.Ds -.R -#include " - -XDoSomething (arguments, ... ) -/* argument declarations */ -{ - -register XDoSomethingReq *req; -\^... -.De -If the protocol request has a reply, -then the variable declarations should include the reply structure for the request. -The following is an example: -.LP -.Ds -.R -xDoSomethingReply rep; -.De -.SH -Locking Data Structures -.LP -To lock the display structure for systems that -want to support multithreaded access to a single display connection, -each stub will need to lock its critical section. -Generally, this section is the point from just before the appropriate GetReq -call until all arguments to the call have been stored into the buffer. -The precise instructions needed for this locking depend upon the machine -architecture. -Two calls, which are generally implemented as macros, have been provided. -.IN "LockDisplay" "" "@DEF@" -.sM -.FD 0 -LockDisplay(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.LP -.IN "UnlockDisplay" "" "@DEF@" -.FD 0 -UnlockDisplay(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -.SH -Sending the Protocol Request and Arguments -.LP -After the variable declarations, -a stub procedure should call one of four macros defined in -.hN X11/Xlibint.h : -.PN GetReq , -.PN GetReqExtra , -.PN GetResReq , -or -.PN GetEmptyReq . -All of these macros take, as their first argument, -the name of the protocol request as declared in -.hN X11/Xproto.h -except with X_ removed. -Each one declares a -.PN Display -structure pointer, -called dpy, and a pointer to a request structure, called req, -which is of the appropriate type. -The macro then appends the request structure to the output buffer, -fills in its type and length field, and sets req to point to it. -.LP -If the protocol request has no arguments (for instance, X_GrabServer), -then use -.PN GetEmptyReq . -.LP -.Ds -.R -GetEmptyReq (DoSomething, req); -.De -If the protocol request has a single 32-bit argument (such as a -.PN Pixmap , -.PN Window , -.PN Drawable , -.PN Atom , -and so on), -then use -.PN GetResReq . -The second argument to the macro is the 32-bit object. -.PN X_MapWindow -is a good example. -.LP -.Ds -.R -GetResReq (DoSomething, rid, req); -.De -The rid argument is the -.PN Pixmap , -.PN Window , -or other resource ID. -.LP -If the protocol request takes any other argument list, -then call -.PN GetReq . -After the -.PN GetReq , -you need to set all the other fields in the request structure, -usually from arguments to the stub procedure. -.LP -.Ds -.R -GetReq (DoSomething, req); -/* fill in arguments here */ -req->arg1 = arg1; -req->arg2 = arg2; -\^... -.De -A few stub procedures (such as -.PN XCreateGC -and -.PN XCreatePixmap ) -return a resource ID to the caller but pass a resource ID as an argument -to the protocol request. -Such procedures use the macro -.PN XAllocID -to allocate a resource ID from the range of IDs -that were assigned to this client when it opened the connection. -.LP -.Ds -.R -rid = req->rid = XAllocID(); -\^... -return (rid); -.De -Finally, some stub procedures transmit a fixed amount of variable-length -data after the request. -Typically, these procedures (such as -.PN XMoveWindow -and -.PN XSetBackground ) -are special cases of more general functions like -.PN XMoveResizeWindow -and -.PN XChangeGC . -These procedures use -.PN GetReqExtra , -which is the same as -.PN GetReq -except that it takes an additional argument (the number of -extra bytes to allocate in the output buffer after the request structure). -This number should always be a multiple of four. -.SH -Variable Length Arguments -.LP -Some protocol requests take additional variable-length data that -follow the -.PN xDoSomethingReq -structure. -The format of this data varies from request to request. -Some requests require a sequence of 8-bit bytes, -others a sequence of 16-bit or 32-bit entities, -and still others a sequence of structures. -.LP -It is necessary to add the length of any variable-length data to the -length field of the request structure. -That length field is in units of 32-bit longwords. -If the data is a string or other sequence of 8-bit bytes, -then you must round the length up and shift it before adding: -.LP -.Ds -.R -req->length += (nbytes+3)>>2; -.De -To transmit variable-length data, use the -.PN Data -macros. -If the data fits into the output buffer, -then this macro copies it to the buffer. -If it does not fit, however, -the -.PN Data -macro calls -.PN _XSend , -which transmits first the contents of the buffer and then your data. -The -.PN Data -macros take three arguments: -the display, a pointer to the beginning of the data, -and the number of bytes to be sent. -.sM -.FD 0 -Data(\^\fIdisplay\fP, (char *) \fIdata\fP, \fInbytes\fP\^); -.sp -Data16(\^\fIdisplay\fP, (short *) \fIdata\fP, \fInbytes\fP\^); -.sp -Data32(\^\fIdisplay\fP, (long *) \fIdata\fP, \fInbytes\fP\^); -.FN -.LP -.eM -.PN Data , -.PN Data16 , -and -.PN Data32 -are macros that may use their last argument -more than once, so that argument should be a variable rather than -an expression such as ``nitems*sizeof(item)''. -You should do that kind of computation in a separate statement before calling -them. -Use the appropriate macro when sending byte, short, or long data. -.LP -If the protocol request requires a reply, -then call the procedure -.PN _XSend -instead of the -.PN Data -macro. -.PN _XSend -takes the same arguments, but because it sends your data immediately instead of -copying it into the output buffer (which would later be flushed -anyway by the following call on -.PN _XReply ), -it is faster. -.SH -Replies -.LP -If the protocol request has a reply, -then call -.PN _XReply -after you have finished dealing with -all the fixed-length and variable-length arguments. -.PN _XReply -flushes the output buffer and waits for an -.PN xReply -packet to arrive. -If any events arrive in the meantime, -.PN _XReply -places them in the queue for later use. -.IN "_XReply" "" "@DEF@" -.sM -.FD 0 -Status _XReply(\^\fIdisplay\fP, \fIrep\fP, \fIextra\fP, \fIdiscard\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - xReply *\fIrep\fP\^; -.br - int \fIextra\fP\^; -.br - Bool \fIdiscard\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIrep\fP 1i -Specifies the reply structure. -.IP \fIextra\fP 1i -Specifies the number of 32-bit words expected after the replay. -.IP \fIdiscard\fP 1i -Specifies if any data beyond that specified in the extra argument -should be discarded. -.LP -.eM -The -.PN _XReply -function waits for a reply packet and copies its contents into the -specified rep. -.PN _XReply -handles error and event packets that occur before the reply is received. -.PN _XReply -takes four arguments: -.IP \(bu 5 -A -.PN Display -* structure -.IP \(bu 5 -A pointer to a reply structure (which must be cast to an -.PN xReply -*) -.IP \(bu 5 -The number of additional 32-bit words (beyond -.Pn sizeof( xReply ) -= 32 bytes) -in the reply structure -.IP \(bu 5 -A Boolean that indicates whether -.PN _XReply -is to discard any additional bytes -beyond those it was told to read -.LP -Because most reply structures are 32 bytes long, -the third argument is usually 0. -The only core protocol exceptions are the replies to -.PN GetWindowAttributes , -.PN QueryFont , -.PN QueryKeymap , -and -.PN GetKeyboardControl , -which have longer replies. -.LP -The last argument should be -.PN False -if the reply structure is followed -by additional variable-length data (such as a list or string). -It should be -.PN True -if there is not any variable-length data. -.NT -This last argument is provided for upward-compatibility reasons -to allow a client to communicate properly with a hypothetical later -version of the server that sends more data than the client expected. -For example, some later version of -.PN GetWindowAttributes -might use a -larger, but compatible, -.PN xGetWindowAttributesReply -that contains additional attribute data at the end. -.NE -.PN _XReply -returns -.PN True -if it received a reply successfully or -.PN False -if it received any sort of error. -.LP -For a request with a reply that is not followed by variable-length -data, you write something like: -.LP -.Ds -.R -_XReply(display, (xReply *)&rep, 0, True); -*ret1 = rep.ret1; -*ret2 = rep.ret2; -*ret3 = rep.ret3; -\^... -UnlockDisplay(dpy); -SyncHandle(); -return (rep.ret4); -} -.De -If there is variable-length data after the reply, -change the -.PN True -to -.PN False , -and use the appropriate -.PN _XRead -function to read the variable-length data. -.LP -.sM -.FD 0 -_XRead(\^\fIdisplay\fP, \fIdata_return\fP, \fInbytes\fP\^) - Display *\fIdisplay\fP\^; - char *\fIdata_return\fP\^; - long \fInbytes\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdata_return\fP 1i -Specifies the buffer. -.IP \fInbytes\fP 1i -Specifies the number of bytes required. -.LP -.eM -The -.PN _XRead -function reads the specified number of bytes into data_return. -.LP -.sM -.FD 0 -_XRead16(\^\fIdisplay\fP, \fIdata_return\fP, \fInbytes\fP\^) - Display *\fIdisplay\fP\^; - short *\fIdata_return\fP\^; - long \fInbytes\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdata_return\fP 1i -Specifies the buffer. -.IP \fInbytes\fP 1i -Specifies the number of bytes required. -.LP -.eM -The -.PN _XRead16 -function reads the specified number of bytes, -unpacking them as 16-bit quantities, -into the specified array as shorts. -.LP -.sM -.FD 0 -_XRead32(\^\fIdisplay\fP, \fIdata_return\fP, \fInbytes\fP\^) - Display *\fIdisplay\fP\^; - long *\fIdata_return\fP\^; - long \fInbytes\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdata_return\fP 1i -Specifies the buffer. -.IP \fInbytes\fP 1i -Specifies the number of bytes required. -.LP -.eM -The -.PN _XRead32 -function reads the specified number of bytes, -unpacking them as 32-bit quantities, -into the specified array as longs. -.LP -.sM -.FD 0 -_XRead16Pad(\^\fIdisplay\fP, \fIdata_return\fP, \fInbytes\fP\^) - Display *\fIdisplay\fP\^; - short *\fIdata_return\fP\^; - long \fInbytes\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdata_return\fP 1i -Specifies the buffer. -.IP \fInbytes\fP 1i -Specifies the number of bytes required. -.LP -.eM -The -.PN _XRead16Pad -function reads the specified number of bytes, -unpacking them as 16-bit quantities, -into the specified array as shorts. -If the number of bytes is not a multiple of four, -.PN _XRead16Pad -reads and discards up to two additional pad bytes. -.LP -.sM -.FD 0 -_XReadPad(\^\fIdisplay\fP, \fIdata_return\fP, \fInbytes\fP\^) - Display *\fIdisplay\fP\^; - char *\fIdata_return\fP\^; - long \fInbytes\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdata_return\fP 1i -Specifies the buffer. -.IP \fInbytes\fP 1i -Specifies the number of bytes required. -.LP -.eM -The -.PN _XReadPad -function reads the specified number of bytes into data_return. -If the number of bytes is not a multiple of four, -.PN _XReadPad -reads and discards up to three additional pad bytes. -.LP -Each protocol request is a little different. -For further information, -see the Xlib sources for examples. -.SH -Synchronous Calling -.LP -Each procedure should have a call, just before returning to the user, -to a macro called -.PN SyncHandle . -If synchronous mode is enabled (see -.PN XSynchronize ), -the request is sent immediately. -The library, however, waits until any error the procedure could generate -at the server has been handled. -.SH -Allocating and Deallocating Memory -.LP -To support the possible reentry of these procedures, -you must observe several conventions when allocating and deallocating memory, -most often done when returning data to the user from the window -system of a size the caller could not know in advance -(for example, a list of fonts or a list of extensions). -The standard C library functions on many systems -are not protected against signals or other multithreaded uses. -The following analogies to standard I/O library functions -have been defined: -.TS -l l. -T{ -.PN Xmalloc () -T} T{ -Replaces -.PN malloc () -T} -T{ -.PN XFree () -T} T{ -Replaces -.PN free () -T} -T{ -.PN Xcalloc () -T} T{ -Replaces -.PN calloc () -T} -.TE -.LP -These should be used in place of any calls you would make to the normal -C library functions. -.LP -If you need a single scratch buffer inside a critical section -(for example, to pack and unpack data to and from the wire protocol), -the general memory allocators may be too expensive to use -(particularly in output functions, which are performance critical). -The following function returns a scratch buffer for use within a -critical section: -.IN "_XAllocScratch" "" "@DEF@" -.sM -.FD 0 -char *_XAllocScratch(\^\fIdisplay\fP, \fInbytes\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - unsigned long \fInbytes\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fInbytes\fP 1i -Specifies the number of bytes required. -.LP -.eM -This storage must only be used inside of a critical section of your -stub. The returned pointer cannot be assumed valid after any call -that might permit another thread to execute inside Xlib. For example, -the pointer cannot be assumed valid after any use of the -.PN GetReq -or -.PN Data -families of macros, -after any use of -.PN _XReply , -or after any use of the -.PN _XSend -or -.PN _XRead -families of functions. -.LP -.sp -The following function returns a scratch buffer for use across -critical sections: -.IN "_XAllocTemp" "" "@DEF@" -.sM -.FD 0 -char *_XAllocTemp(\^\fIdisplay\fP, \fInbytes\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - unsigned long \fInbytes\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fInbytes\fP 1i -Specifies the number of bytes required. -.LP -.eM -This storage can be used across calls that might permit another thread to -execute inside Xlib. The storage must be explicitly returned to Xlib. -The following function returns the storage: -.IN "_XFreeTemp" "" "@DEF@" -.sM -.FD 0 -void _XFreeTemp(\^\fIdisplay\fP, \fIbuf\fP, \fInbytes\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - char *\fIbuf\fP\^; -.br - unsigned long \fInbytes\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIbuf\fP 1i -Specifies the buffer to return. -.IP \fInbytes\fP 1i -Specifies the size of the buffer. -.LP -.eM -You must pass back the same pointer and size that were returned by -.PN _XAllocTemp . -.SH -Portability Considerations -.LP -Many machine architectures, -including many of the more recent RISC architectures, -do not correctly access data at unaligned locations; -their compilers pad out structures to preserve this characteristic. -Many other machines capable of unaligned references pad inside of structures -as well to preserve alignment, because accessing aligned data is -usually much faster. -Because the library and the server use structures to access data at -arbitrary points in a byte stream, -all data in request and reply packets \fImust\fP be naturally aligned; -that is, 16-bit data starts on 16-bit boundaries in the request -and 32-bit data on 32-bit boundaries. -All requests \fImust\fP be a multiple of 32 bits in length to preserve -the natural alignment in the data stream. -You must pad structures out to 32-bit boundaries. -Pad information does not have to be zeroed unless you want to -preserve such fields for future use in your protocol requests. -Floating point varies radically between machines and should be -avoided completely if at all possible. -.LP -This code may run on machines with 16-bit ints. -So, if any integer argument, variable, or return value either can take -only nonnegative values or is declared as a -.PN CARD16 -in the protocol, be sure to declare it as -.PN unsigned -.PN int -and not as -.PN int . -(This, of course, does not apply to Booleans or enumerations.) -.LP -Similarly, -if any integer argument or return value is declared -.PN CARD32 -in the protocol, -declare it as an -.PN unsigned -.PN long -and not as -.PN int -or -.PN long . -This also goes for any internal variables that may -take on values larger than the maximum 16-bit -.PN unsigned -.PN int . -.LP -The library currently assumes that a -.PN char -is 8 bits, a -.PN short -is 16 bits, an -.PN int -is 16 or 32 bits, and a -.PN long -is 32 bits. -The -.PN PackData -macro is a half-hearted attempt to deal with the possibility of 32 bit shorts. -However, much more work is needed to make this work properly. -.SH -Deriving the Correct Extension Opcode -.LP -The remaining problem a writer of an extension stub procedure faces that -the core protocol does not face is to map from the call to the proper -major and minor opcodes. -While there are a number of strategies, -the simplest and fastest is outlined below. -.IP 1. 5 -Declare an array of pointers, _NFILE long (this is normally found -in -.hN stdio.h -and is the number of file descriptors supported on the system) -of type -.PN XExtCodes . -Make sure these are all initialized to NULL. -.IP 2. 5 -When your stub is entered, your initialization test is just to use -the display pointer passed in to access the file descriptor and an index -into the array. -If the entry is NULL, then this is the first time you -are entering the procedure for this display. -Call your initialization procedure and pass to it the display pointer. -.IP 3. 5 -Once in your initialization procedure, call -.PN XInitExtension ; -if it succeeds, store the pointer returned into this array. -Make sure to establish a close display handler to allow you to zero the entry. -Do whatever other initialization your extension requires. -(For example, install event handlers and so on.) -Your initialization procedure would normally return a pointer to the -.PN XExtCodes -structure for this extension, which is what would normally -be found in your array of pointers. -.IP 4. 5 -After returning from your initialization procedure, -the stub can now continue normally, because it has its major opcode safely -in its hand in the -.PN XExtCodes -structure. -.bp diff --git a/doc/xorg-docs/specs/X11/AppD b/doc/xorg-docs/specs/X11/AppD deleted file mode 100644 index f96e06175..000000000 --- a/doc/xorg-docs/specs/X11/AppD +++ /dev/null @@ -1,1183 +0,0 @@ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by -.\" Digital Equipment Corporation -.\" -.\" Portions Copyright \(co 1990, 1991 by -.\" Tektronix, Inc. -.\" -.\" Permission to use, copy, modify and distribute this documentation for -.\" any purpose and without fee is hereby granted, provided that the above -.\" copyright notice appears in all copies and that both that copyright notice -.\" and this permission notice appear in all copies, and that the names of -.\" Digital and Tektronix not be used in in advertising or publicity pertaining -.\" to this documentation without specific, written prior permission. -.\" Digital and Tektronix makes no representations about the suitability -.\" of this documentation for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBAppendix D\fP\s-1 - -\s+1\fBCompatibility Functions\fP\s-1 -.sp 2 -.na -.LP -.XS -Appendix D: Compatibility Functions -.XE -.LP -The X Version 11 and X Version 10 functions discussed in this appendix -are obsolete, have been superseded by newer X Version 11 functions, -and are maintained for compatibility reasons only. -.SH -X Version 11 Compatibility Functions -.LP -You can use the X Version 11 compatibility functions to: -.IP \(bu 5 -Set standard properties -.IP \(bu 5 -Set and get window sizing hints -.IP \(bu 5 -Set and get an -.PN XStandardColormap -structure -.IP \(bu 5 -Parse window geometry -.IP \(bu 5 -Get X environment defaults -.SH -Setting Standard Properties -.LP -To specify a minimum set of properties describing the simplest application, -use -.PN XSetStandardProperties . -This function has been superseded by -.PN XSetWMProperties -and sets all or portions of the -WM_NAME, WM_ICON_NAME, WM_HINTS, WM_COMMAND, -and WM_NORMAL_HINTS properties. -.IN "XSetStandardProperties" "" "@DEF@" -.sM -.FD 0 -XSetStandardProperties\^(\^\fIdisplay\fP, \fIw\fP, \fIwindow_name\fP, \fIicon_name\fP, \fIicon_pixmap\fP, \fIargv\fP, \fIargc\fP, \fIhints\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - char *\fIwindow_name\fP\^; -.br - char *\fIicon_name\fP\^; -.br - Pixmap \fIicon_pixmap\fP\^; -.br - char **\fIargv\fP\^; -.br - int \fIargc\fP\^; -.br - XSizeHints *\fIhints\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIwindow_name\fP 1i -Specifies the window name, -which should be a null-terminated string. -.IP \fIicon_name\fP 1i -Specifies the icon name, -which should be a null-terminated string. -.IP \fIicon_pixmap\fP 1i -Specifies the bitmap that is to be used for the icon or -.PN None . -.IP \fIargv\fP 1i -Specifies the application's argument list. -.IP \fIargc\fP 1i -Specifies the number of arguments. -.IP \fIhints\fP 1i -Specifies a pointer to the size hints for the window in its normal state. -.LP -.eM -The -.PN XSetStandardProperties -function provides a means by which simple applications set the -most essential properties with a single call. -.PN XSetStandardProperties -should be used to give a window manager some information about -your program's preferences. -It should not be used by applications that need -to communicate more information than is possible with -.PN XSetStandardProperties . -(Typically, argv is the argv array of your main program.) -If the strings are not in the Host Portable Character Encoding, -the result is implementation-dependent. -.LP -.PN XSetStandardProperties -can generate -.PN BadAlloc -and -.PN BadWindow -errors. -.SH -Setting and Getting Window Sizing Hints -.LP -Xlib provides functions that you can use to set or get window sizing hints. -The functions discussed in this section use the flags and the -.PN XSizeHints -structure, as defined in the -.hN X11/Xutil.h -header file and use the WM_NORMAL_HINTS property. -.LP -.sp -To set the size hints for a given window in its normal state, use -.PN XSetNormalHints . -This function has been superseded by -.PN XSetWMNormalHints . -.IN "XSetNormalHints" "" "@DEF@" -.sM -.FD 0 -XSetNormalHints\^(\^\fIdisplay\fP, \fIw\fP, \fIhints\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - XSizeHints *\fIhints\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIhints\fP 1i -Specifies a pointer to the size hints for the window in its normal state. -.LP -.eM -The -.PN XSetNormalHints -function sets the size hints structure for the specified window. -Applications use -.PN XSetNormalHints -to inform the window manager of the size -or position desirable for that window. -In addition, -an application that wants to move or resize itself should call -.PN XSetNormalHints -and specify its new desired location and size -as well as making direct Xlib calls to move or resize. -This is because window managers may ignore redirected -configure requests, but they pay attention to property changes. -.LP -To set size hints, -an application not only must assign values to the appropriate members -in the hints structure but also must set the flags member of the structure -to indicate which information is present and where it came from. -A call to -.PN XSetNormalHints -is meaningless, unless the flags member is set to indicate which members of -the structure have been assigned values. -.LP -.PN XSetNormalHints -can generate -.PN BadAlloc -and -.PN BadWindow -errors. -.LP -.sp -To return the size hints for a window in its normal state, use -.PN XGetNormalHints . -This function has been superseded by -.PN XGetWMNormalHints . -.IN "XGetNormalHints" "" "@DEF@" -.sM -.FD 0 -Status XGetNormalHints\^(\^\fIdisplay\fP, \fIw\fP, \fIhints_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - XSizeHints *\fIhints_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIhints_return\fP 1i -Returns the size hints for the window in its normal state. -.LP -.eM -The -.PN XGetNormalHints -function returns the size hints for a window in its normal state. -It returns a nonzero status if it succeeds or zero if -the application specified no normal size hints for this window. -.LP -.PN XGetNormalHints -can generate a -.PN BadWindow -error. -.LP -.sp -The next two functions set and read the WM_ZOOM_HINTS property. -.LP -To set the zoom hints for a window, use -.PN XSetZoomHints . -This function is no longer supported by the -\fIInter-Client Communication Conventions Manual\fP. -.IN "XSetZoomHints" "" "@DEF@" -.sM -.FD 0 -XSetZoomHints\^(\^\fIdisplay\fP, \fIw\fP, \fIzhints\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - XSizeHints *\fIzhints\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIzhints\fP 1i -Specifies a pointer to the zoom hints. -.LP -.eM -Many window managers think of windows in one of three states: -iconic, normal, or zoomed. -The -.PN XSetZoomHints -function provides the window manager with information for the window in the -zoomed state. -.LP -.PN XSetZoomHints -can generate -.PN BadAlloc -and -.PN BadWindow -errors. -.LP -.sp -To read the zoom hints for a window, use -.PN XGetZoomHints . -This function is no longer supported by the -\fIInter-Client Communication Conventions Manual\fP. -.IN "XGetZoomHints" "" "@DEF@" -.sM -.FD 0 -Status XGetZoomHints\^(\^\fIdisplay\fP, \fIw\fP, \fIzhints_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - XSizeHints *\fIzhints_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIzhints_return\fP 1i -Returns the zoom hints. -.LP -.eM -The -.PN XGetZoomHints -function returns the size hints for a window in its zoomed state. -It returns a nonzero status if it succeeds or zero if -the application specified no zoom size hints for this window. -.LP -.PN XGetZoomHints -can generate a -.PN BadWindow -error. -.LP -.sp -To set the value of any property of type WM_SIZE_HINTS, use -.PN XSetSizeHints . -This function has been superseded by -.PN XSetWMSizeHints . -.IN "XSetSizeHints" "" "@DEF@" -.sM -.FD 0 -XSetSizeHints\^(\^\fIdisplay\fP, \fIw\fP, \fIhints\fP, \fIproperty\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - XSizeHints *\fIhints\fP\^; -.br - Atom \fIproperty\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIhints\fP 1i -Specifies a pointer to the size hints. -.IP \fIproperty\fP 1i -Specifies the property name. -.LP -.eM -The -.PN XSetSizeHints -function sets the -.PN XSizeHints -structure for the named property and the specified window. -This is used by -.PN XSetNormalHints -and -.PN XSetZoomHints -and can be used to set the value of any property of type WM_SIZE_HINTS. -Thus, it may be useful if other properties of that type get defined. -.LP -.PN XSetSizeHints -can generate -.PN BadAlloc , -.PN BadAtom , -and -.PN BadWindow -errors. -.LP -.sp -To read the value of any property of type WM_SIZE_HINTS, use -.PN XGetSizeHints . -This function has been superseded by -.PN XGetWMSizeHints . -.IN "XGetSizeHints" "" "@DEF@" -.sM -.FD 0 -Status XGetSizeHints\^(\^\fIdisplay\fP, \fIw\fP, \fIhints_return\fP, \fIproperty\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - XSizeHints *\fIhints_return\fP\^; -.br - Atom \fIproperty\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIhints_return\fP 1i -Returns the size hints. -.IP \fIproperty\fP 1i -Specifies the property name. -.LP -.eM -The -.PN XGetSizeHints -function returns the -.PN XSizeHints -structure for the named property and the specified window. -This is used by -.PN XGetNormalHints -and -.PN XGetZoomHints . -It also can be used to retrieve the value of any property of type -WM_SIZE_HINTS. -Thus, it may be useful if other properties of that type get defined. -.PN XGetSizeHints -returns a nonzero status if a size hint was defined -or zero otherwise. -.LP -.PN XGetSizeHints -can generate -.PN BadAtom -and -.PN BadWindow -errors. -.SH -Getting and Setting an XStandardColormap Structure -.LP -To get the -.PN XStandardColormap -structure associated with one of the described atoms, use -.PN XGetStandardColormap . -This function has been superseded by -.PN XGetRGBColormap . -.IN "XGetStandardColormap" "" "@DEF@" -.sM -.FD 0 -Status XGetStandardColormap(\^\fIdisplay\fP, \fIw\fP, \fIcolormap_return\fP, \fIproperty\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - XStandardColormap *\fIcolormap_return\fP\^; -.br - Atom \fIproperty\fP\^; /* RGB_BEST_MAP, etc. */ -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIcolormap_return\fP 1i -Returns the colormap associated with the specified atom. -.IP \fIproperty\fP 1i -Specifies the property name. -.LP -.eM -The -.PN XGetStandardColormap -function returns the colormap definition associated with the atom supplied -as the property argument. -.PN XGetStandardColormap -returns a nonzero status if successful and zero otherwise. -For example, -to fetch the standard -.PN GrayScale -colormap for a display, -you use -.PN XGetStandardColormap -with the following syntax: -.LP -.sM -.Ds 0 -.TA .5i 1.5i -.ta .5i 1.5i -XGetStandardColormap(dpy, DefaultRootWindow(dpy), &cmap, XA_RGB_GRAY_MAP); -.De -.LP -.eM -See section 14.3 for the semantics of standard colormaps. -.LP -.PN XGetStandardColormap -can generate -.PN BadAtom -and -.PN BadWindow -errors. -.LP -.sp -To set a standard colormap, use -.PN XSetStandardColormap . -This function has been superseded by -.PN XSetRGBColormap . -.IN "XSetStandardColormap" "" "@DEF@" -.sM -.FD 0 -XSetStandardColormap(\^\fIdisplay\fP, \fIw\fP, \fIcolormap\fP, \fIproperty\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - XStandardColormap *\fIcolormap\fP\^; -.br - Atom \fIproperty\fP\^; /* RGB_BEST_MAP, etc. */ -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIcolormap\fP 1i -Specifies the colormap. -.IP \fIproperty\fP 1i -Specifies the property name. -.LP -.eM -The -.PN XSetStandardColormap -function usually is only used by window or session managers. -.LP -.PN XSetStandardColormap -can generate -.PN BadAlloc , -.PN BadAtom , -.PN BadDrawable , -and -.PN BadWindow -errors. -.SH -Parsing Window Geometry -.LP -To parse window geometry given a user-specified position -and a default position, use -.PN XGeometry . -This function has been superseded by -.PN XWMGeometry . -.IN "Window" "determining location" -.IN "XGeometry" "" "@DEF@" -.sM -.FD 0 -int XGeometry\^(\^\fIdisplay\fP, \fIscreen\fP, \fIposition\fP\^, \fIdefault_position\fP\^, \fIbwidth\fP\^, \fIfwidth\fP\^, \fIfheight\fP\^, \fIxadder\fP\^, -.br - \fIyadder\fP\^, \fIx_return\fP\^, \fIy_return\fP\^, \fIwidth_return\fP\^, \fIheight_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIscreen\fP\^; -.br - char *\fIposition\fP\^, *\fIdefault_position\fP\^; -.br - unsigned int \fIbwidth\fP\^; -.br - unsigned int \fIfwidth\fP\^, \fIfheight\fP\^; -.br - int \fIxadder\fP\^, \fIyadder\fP\^; -.br - int *\fIx_return\fP\^, *\fIy_return\fP\^; -.br - int *\fIwidth_return\fP\^, *\fIheight_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIscreen\fP 1i -Specifies the screen. -.IP \fIposition\fP 1i -.br -.ns -.IP \fIdefault_position\fP 1i -Specify the geometry specifications. -.IP \fIbwidth\fP 1i -Specifies the border width. -.IP \fIfheight\fP 1i -.br -.ns -.IP \fIfwidth\fP 1i -Specify the font height and width in pixels (increment size). -.IP \fIxadder\fP 1i -.br -.ns -.IP \fIyadder\fP 1i -Specify additional interior padding needed in the window. -.IP \fIx_return\fP 1i -.br -.ns -.IP \fIy_return\fP 1i -Return the x and y offsets. -.IP \fIwidth_return\fP 1i -.br -.ns -.IP \fIheight_return\fP 1i -Return the width and height determined. -.LP -.eM -You pass in the border width (bwidth), -size of the increments fwidth and fheight -(typically font width and height), -and any additional interior space (xadder and yadder) -to make it easy to compute the resulting size. -The -.PN XGeometry -function returns the position the window should be placed given a position and -a default position. -.PN XGeometry -determines the placement of -a window using a geometry specification as specified by -.PN XParseGeometry -and the additional information about the window. -Given a fully qualified default geometry specification and -an incomplete geometry specification, -.PN XParseGeometry -returns a bitmask value as defined above in the -.PN XParseGeometry -call, -by using the position argument. -.LP -The returned width and height will be the width and height specified -by default_position as overridden by any user-specified position. -They are not affected by fwidth, fheight, xadder, or yadder. -The x and y coordinates are computed by using the border width, -the screen width and height, padding as specified by xadder and yadder, -and the fheight and fwidth times the width and height from the -geometry specifications. -.SH -Getting the X Environment Defaults -.LP -The -.PN XGetDefault -function provides a primitive interface to the resource manager facilities -discussed in chapter 15. -It is only useful in very simple applications. -.LP -.sp -.IN "XGetDefault" "" "@DEF@" -.sM -.FD 0 -char *XGetDefault\^(\^\fIdisplay\fP, \fIprogram\fP\^, \fIoption\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - char *\fIprogram\fP\^; -.br - char *\fIoption\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIprogram\fP 1i -Specifies the program name for the Xlib defaults (usually argv[0] -of the main program). -.IP \fIoption\fP 1i -Specifies the option name. -.LP -.eM -The -.PN XGetDefault -function returns the value of the resource \fIprog\fP.\fIoption\fP, -where \fIprog\fP is the program argument with the directory prefix removed -and \fIoption\fP must be a single component. -Note that multilevel resources cannot be used with -.PN XGetDefault . -The class "Program.Name" is always used for the resource lookup. -If the specified option name does not exist for this program, -.PN XGetDefault -returns NULL. -The strings returned by -.PN XGetDefault -are owned by Xlib and should not be modified or freed by the client. -.LP -If a database has been set with -.PN XrmSetDatabase , -that database is used for the lookup. -Otherwise, a database is created -and is set in the display (as if by calling -.PN XrmSetDatabase ). -The database is created in the current locale. -To create a database, -.PN XGetDefault -uses resources from the RESOURCE_MANAGER property on the root -window of screen zero. -If no such property exists, -a resource file in the user's home directory is used. -On a POSIX-conformant system, -this file is -.PN "$HOME/.Xdefaults" . -.IN "Files" "$HOME/.Xdefaults" -After loading these defaults, -.PN XGetDefault -merges additional defaults specified by the XENVIRONMENT -environment variable. -If XENVIRONMENT is defined, -it contains a full path name for the additional resource file. -If XENVIRONMENT is not defined, -.PN XGetDefault -looks for -.PN "$HOME/.Xdefaults-\fIname\fP" , -where \fIname\fP specifies the name of the machine on which the application -is running. -.SH -X Version 10 Compatibility Functions -.LP -You can use the X Version 10 compatibility functions to: -.IP \(bu 5 -Draw and fill polygons and curves -.IP \(bu 5 -Associate user data with a value -.SH -Drawing and Filling Polygons and Curves -.LP -Xlib provides functions that you can use to draw or fill -arbitrary polygons or curves. -These functions are provided mainly for compatibility with X Version 10 -and have no server support. -That is, they call other Xlib functions, not the server directly. -Thus, if you just have straight lines to draw, using -.PN XDrawLines -.IN "XDrawLines" -or -.PN XDrawSegments -.IN "XDrawSegments" -is much faster. -.LP -The functions discussed here provide all the functionality of the -X Version 10 functions -.PN XDraw , -.IN "X10 compatibility" "XDraw" -.PN XDrawFilled , -.IN "X10 compatibility" "XDrawFilled" -.PN XDrawPatterned , -.IN "X10 compatibility" "XDrawPatterned" -.PN XDrawDashed , -.IN "X10 compatibility" "XDrawDashed" -and -.PN XDrawTiled . -.IN "X10 compatibility" "XDrawTiled" -They are as compatible as possible given X Version 11's new line-drawing -functions. -One thing to note, however, is that -.PN VertexDrawLastPoint -is no longer supported. -Also, the error status returned is the opposite of what it was under -X Version 10 (this is the X Version 11 standard error status). -.PN XAppendVertex -and -.PN XClearVertexFlag -from X Version 10 also are not supported. -.LP -Just how the graphics context you use is set up actually -determines whether you get dashes or not, and so on. -Lines are properly joined if they connect and include -the closing of a closed figure (see -.PN XDrawLines ). -The functions discussed here fail (return zero) only if they run out of memory -or are passed a -.PN Vertex -list that has a -.PN Vertex -with -.PN VertexStartClosed -set that is not followed by a -.PN Vertex -with -.PN VertexEndClosed -set. -.LP -.sp -To achieve the effects of the X Version 10 -.PN XDraw , -.IN "X10 compatibility" "XDraw" -.PN XDrawDashed , -.IN "X10 compatibility" "XDrawDashed" -and -.PN XDrawPatterned , -.IN "X10 compatibility" "XDrawPatterned" -use -.PN XDraw . -.IN "XDraw" "" "@DEF@" -.sM -.FD 0 -#include - -Status XDraw(\^\fIdisplay\fP, \fId\fP, \fIgc\fP, \fIvlist\fP, \fIvcount\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - GC \fIgc\fP\^; -.br - Vertex *\fIvlist\fP\^; -.br - int \fIvcount\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fId\fP 1i -Specifies the drawable. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIvlist\fP 1i -Specifies a pointer to the list of vertices that indicate what to draw. -.IP \fIvcount\fP 1i -Specifies how many vertices are in vlist. -.LP -.eM -The -.PN XDraw -function draws an arbitrary polygon or curve. -The figure drawn is defined by the specified list of vertices (vlist). -The points are connected by lines as specified in the flags in the -vertex structure. -.LP -Each Vertex, as defined in -.hN X11/X10.h , -is a structure with the following members: -.LP -.IN "Vertex" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 1.5i -.ta .5i 1.5i -typedef struct _Vertex { - short x,y; - unsigned short flags; -} Vertex; -.De -.LP -.eM -The x and y members are the coordinates of the vertex -that are relative to either the upper left inside corner of the drawable -(if -.PN VertexRelative -is zero) or the previous vertex (if -.PN VertexRelative -is one). -.LP -The flags, as defined in -.hN X11/X10.h , -are as follows: -.IN "VertexRelative" "" "@DEF@" -.IN "VertexDontDraw" "" "@DEF@" -.IN "VertexCurved" "" "@DEF@" -.IN "VertexStartClosed" "" "@DEF@" -.IN "VertexEndClosed" "" "@DEF@" -.sM -.TS -l l l. -T{ -.PN VertexRelative -T} T{ -0x0001 -T} T{ -/* else absolute */ -T} -T{ -.PN VertexDontDraw -T} T{ -0x0002 -T} T{ -/* else draw */ -T} -T{ -.PN VertexCurved -T} T{ -0x0004 -T} T{ -/* else straight */ -T} -T{ -.PN VertexStartClosed -T} T{ -0x0008 -T} T{ -/* else not */ -T} -T{ -.PN VertexEndClosed -T} T{ -0x0010 -T} T{ -/* else not */ -T} -.TE -.LP -.eM -.IP \(bu 5 -If -.PN VertexRelative -is not set, -the coordinates are absolute (that is, relative to the drawable's origin). -The first vertex must be an absolute vertex. -.IP \(bu 5 -If -.PN VertexDontDraw -is one, -no line or curve is drawn from the previous vertex to this one. -This is analogous to picking up the pen and moving to another place -before drawing another line. -.IP \(bu 5 -If -.PN VertexCurved -is one, -a spline algorithm is used to draw a smooth curve from the previous vertex -through this one to the next vertex. -Otherwise, a straight line is drawn from the previous vertex to this one. -It makes sense to set -.PN VertexCurved -to one only if a previous and next vertex are both defined -(either explicitly in the array or through the definition of a closed -curve). -.IP \(bu 5 -It is permissible for -.PN VertexDontDraw -bits and -.PN VertexCurved -bits both to be one. -This is useful if you want to define the previous point for the smooth curve -but do not want an actual curve drawing to start until this point. -.IP \(bu 5 -If -.PN VertexStartClosed -is one, -then this point marks the beginning of a closed curve. -This vertex must be followed later in the array by another vertex -whose effective coordinates are identical -and that has a -.PN VertexEndClosed -bit of one. -The points in between form a cycle to determine predecessor -and successor vertices for the spline algorithm. -.LP -This function uses these GC components: -function, plane-mask, line-width, line-style, cap-style, join-style, -fill-style, subwindow-mode, clip-x-origin, clip-y-origin, and -clip-mask. -It also uses these GC mode-dependent components: -foreground, background, tile, stipple, -tile-stipple-x-origin, tile-stipple-y-origin, dash-offset, and dash-list. -.LP -.sp -To achieve the effects of the X Version 10 -.PN XDrawTiled -.IN "X10 compatibility" "XDrawTiled" -and -.PN XDrawFilled , -.IN "X10 compatibility" "XDrawFilled" -use -.PN XDrawFilled . -.IN "XDrawFilled" "" "@DEF@" -.sM -.FD 0 -#include - -Status XDrawFilled(\^\fIdisplay\fP, \fId\fP, \fIgc\fP, \fIvlist\fP, \fIvcount\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - GC \fIgc\fP\^; -.br - Vertex *\fIvlist\fP\^; -.br - int \fIvcount\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fId\fP 1i -Specifies the drawable. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIvlist\fP 1i -Specifies a pointer to the list of vertices that indicate what to draw. -.IP \fIvcount\fP 1i -Specifies how many vertices are in vlist. -.LP -.eM -The -.PN XDrawFilled -function draws arbitrary polygons or curves and then fills them. -.LP -This function uses these GC components: -function, plane-mask, line-width, line-style, cap-style, join-style, -fill-style, subwindow-mode, clip-x-origin, clip-y-origin, and -clip-mask. -It also uses these GC mode-dependent components: -foreground, background, tile, stipple, -tile-stipple-x-origin, tile-stipple-y-origin, -dash-offset, dash-list, fill-style, and fill-rule. -.SH -Associating User Data with a Value -.LP -These functions have been superseded by the context management functions -(see section 16.10). -It is often necessary to associate arbitrary information with resource IDs. -Xlib provides the -.PN XAssocTable -functions that you can use to make such an association. -.IN "Hash Lookup" -.IN "Window" "IDs" -.IN "Resource IDs" -Application programs often need to be able to easily refer to -their own data structures when an event arrives. -The -.PN XAssocTable -system provides users of the X library with a method -for associating their own data structures with X resources -.Pn ( Pixmaps , -.PN Fonts , -.PN Windows , -and so on). -.LP -An -.PN XAssocTable -can be used to type X resources. -For example, the user -may want to have three or four types of windows, -each with different properties. -This can be accomplished by associating each X window ID -with a pointer to a window property data structure defined by the -user. -A generic type has been defined in the X library for resource IDs. -It is called an XID. -.LP -There are a few guidelines that should be observed when using an -.PN XAssocTable : -.IP \(bu 5 -All XIDs are relative to the specified display. -.IP \(bu 5 -Because of the hashing scheme used by the association mechanism, -the following rules for determining the size of a -.PN XAssocTable -should be followed. -Associations will be made and looked up more -efficiently if the table size (number of buckets in the hashing -system) is a power of two and if there are not more than 8 XIDs per -bucket. -.LP -.sp -To return a pointer to a new -.PN XAssocTable , -use -.PN XCreateAssocTable . -.IN "XCreateAssocTable" "" "@DEF@" -.sM -.FD 0 -XAssocTable *XCreateAssocTable\^(\^\fIsize\fP\^) -.br - int \fIsize\fP\^; -.FN -.IP \fIsize\fP 1i -Specifies the number of buckets in the hash system of -.PN XAssocTable . -.LP -.eM -The size argument specifies the number of buckets in the -hash system of -.PN XAssocTable . -For reasons of efficiency the number of buckets -should be a power of two. -Some size suggestions might be: use 32 buckets per 100 objects, -and a reasonable maximum number of objects per buckets is 8. -If an error allocating memory for the -.PN XAssocTable -occurs, -a NULL pointer is returned. -.LP -.sp -To create an entry in a given -.PN XAssocTable , -use -.PN XMakeAssoc . -.IN "XMakeAssoc" "" "@DEF@" -.sM -.FD 0 -XMakeAssoc\^(\^\fIdisplay\fP, \fItable\fP\^, \fIx_id\fP\^, \fIdata\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XAssocTable *\fItable\fP\^; -.br - XID \fIx_id\fP\^; -.br - char *\fIdata\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fItable\fP 1i -Specifies the assoc table. -.IP \fIx_id\fP 1i -Specifies the X resource ID. -.IP \fIdata\fP 1i -Specifies the data to be associated with the X resource ID. -.LP -.eM -The -.PN XMakeAssoc -function inserts data into an -.PN XAssocTable -keyed on an XID. -Data is inserted into the table only once. -Redundant inserts are ignored. -The queue in each association bucket is sorted from the lowest XID to -the highest XID. -.LP -.sp -To obtain data from a given -.PN XAssocTable , -use -.PN XLookUpAssoc . -.IN "XLookUpAssoc" "" "@DEF@" -.sM -.FD 0 -char *XLookUpAssoc\^(\^\fIdisplay\fP, \fItable\fP\^, \fIx_id\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XAssocTable *\fItable\fP\^; -.br - XID \fIx_id\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fItable\fP 1i -Specifies the assoc table. -.IP \fIx_id\fP 1i -Specifies the X resource ID. -.LP -.eM -The -.PN XLookUpAssoc -function retrieves the data stored in an -.PN XAssocTable -by its XID. -If an appropriately matching XID can be found in the table, -.PN XLookUpAssoc -returns the data associated with it. -If the x_id cannot be found in the table, -it returns NULL. -.LP -.sp -To delete an entry from a given -.PN XAssocTable , -use -.PN XDeleteAssoc . -.IN "XDeleteAssoc" "" "@DEF@" -.sM -.FD 0 -XDeleteAssoc\^(\^\fIdisplay\fP, \fItable\fP\^, \fIx_id\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XAssocTable *\fItable\fP\^; -.br - XID \fIx_id\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fItable\fP 1i -Specifies the assoc table. -.IP \fIx_id\fP 1i -Specifies the X resource ID. -.LP -.eM -The -.PN XDeleteAssoc -function deletes an association in an -.PN XAssocTable -keyed on its XID. -Redundant deletes (and deletes of nonexistent XIDs) are ignored. -Deleting associations in no way impairs the performance of an -.PN XAssocTable . -.LP -.sp -To free the memory associated with a given -.PN XAssocTable , -use -.PN XDestroyAssocTable . -.IN "XDestroyAssocTable" "" "@DEF@" -.sM -.FD 0 -XDestroyAssocTable\^(\^\fItable\fP\^) -.br - XAssocTable *\fItable\fP\^; -.FN -.IP \fItable\fP 1i -Specifies the assoc table. -.LP -.eM -.bp diff --git a/doc/xorg-docs/specs/X11/CH01 b/doc/xorg-docs/specs/X11/CH01 deleted file mode 100644 index 99f76e4d6..000000000 --- a/doc/xorg-docs/specs/X11/CH01 +++ /dev/null @@ -1,663 +0,0 @@ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by -.\" Digital Equipment Corporation -.\" -.\" Portions Copyright \(co 1990, 1991 by -.\" Tektronix, Inc. -.\" -.\" Permission to use, copy, modify and distribute this documentation for -.\" any purpose and without fee is hereby granted, provided that the above -.\" copyright notice appears in all copies and that both that copyright notice -.\" and this permission notice appear in all copies, and that the names of -.\" Digital and Tektronix not be used in in advertising or publicity pertaining -.\" to this documentation without specific, written prior permission. -.\" Digital and Tektronix makes no representations about the suitability -.\" of this documentation for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -.EH '\fBXlib \- C Library\fP''\fBX11, Release 6.8\fP' -.OH '\fBXlib \- C Library\fP''\fBX11, Release 6.8\fP' -.EF ''\fB % \fP'' -.OF ''\fB % \fP'' -.hw WM_NORMAL_HINTS -\& -.sp 1 -.ce 3 -\s+1\fBChapter 1\fP\s-1 - -\s+1\fBIntroduction to Xlib\fP\s-1 -.sp 2 -.if \n(GS .nr nh*hl 1 -.nr H1 1 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.na -.LP -.XS -Chapter 1: Introduction to Xlib -.XE -The X Window System is a network-transparent window system -that was designed at MIT. -X display servers run on computers with either monochrome or color -bitmap display hardware. -The server distributes user input to and accepts output requests from various -client programs located either on the same machine or elsewhere in -the network. -Xlib is a C subroutine library that application programs (clients) -use to interface with the window system by means of a stream connection. -Although a client usually runs on the same machine as the X server -it is talking to, this need not be the case. -.LP -\fIXlib \- C Language X Interface\fP is a reference guide to the low-level -C language interface to the X Window System protocol. -It is neither a tutorial nor a user's guide to programming the X Window System. -Rather, it provides a detailed description of each function in the library -as well as a discussion of the related background information. -\fIXlib \- C Language X Interface\fP assumes a basic understanding of a graphics -window system and of the C programming language. -Other higher-level abstractions -(for example, those provided by the toolkits for X) -are built on top of the Xlib library. -For further information about these higher-level libraries, -see the appropriate toolkit documentation. -The \fIX Window System Protocol\fP provides the definitive word on the -behavior of X. -Although additional information appears here, -the protocol document is the ruling document. -.LP -To provide an introduction to X programming, -this chapter discusses: -.IP \(bu 5 -Overview of the X Window System -.IP \(bu 5 -Errors -.IP \(bu 5 -Standard header files -.IP \(bu 5 -Generic values and types -.IP \(bu 5 -Naming and argument conventions within Xlib -.IP \(bu 5 -Programming considerations -.IP \(bu 5 -Character sets and encodings -.IP \(bu 5 -Formatting conventions -.NH 2 -Overview of the X Window System -.XS -\*(SN Overview of the X Window System -.XE -.LP -Some of the terms used in this book are unique to X, -and other terms that are common to other window systems -have different meanings in X. -You may find it helpful to refer to the glossary, -which is located at the end of the book. -.LP -The X Window System supports one or more screens containing -overlapping windows or subwindows. -A screen is a physical monitor and hardware -that can be color, grayscale, or monochrome. -There can be multiple screens for each display or workstation. -A single X server can provide display services for any number of screens. -A set of screens for a single user with one keyboard and one pointer -(usually a mouse) is called a display. -.LP -.IN "Screen" -All the windows in an X server are arranged in strict hierarchies. -At the top of each hierarchy is a root window, -which covers each of the display screens. -Each root window is partially or completely covered by child windows. -All windows, except for root windows, have parents. -There is usually at least one window for each application program. -.IN "Child window" -.IN "Parent Window" -Child windows may in turn have their own children. -In this way, -an application program can create an arbitrarily deep tree -on each screen. -X provides graphics, text, and raster operations for windows. -.LP -A child window can be larger than its parent. -That is, part or all of -the child window can extend beyond the boundaries of the parent, -but all output to a window is clipped by its parent. -.IN "Stacking order" -If several children of a window have overlapping locations, -one of the children is considered to be on top of or raised over the -others, thus obscuring them. -Output to areas covered by other windows is suppressed by the window -system unless the window has backing store. -If a window is obscured by a second window, -the second window obscures only those ancestors of the second window -that are also ancestors of the first window. -.LP -.IN "Window" "" "@DEF@" -A window has a border zero or more pixels in width, which can -be any pattern (pixmap) or solid color you like. -A window usually but not always has a background pattern, -which will be repainted by the window system when uncovered. -Child windows obscure their parents, -and graphic operations in the parent window usually -are clipped by the children. -.LP -Each window and pixmap has its own coordinate system. -The coordinate system has the X axis horizontal and the Y axis vertical -with the origin [0, 0] at the upper-left corner. -Coordinates are integral, -in terms of pixels, -and coincide with pixel centers. -For a window, -the origin is inside the border at the inside, upper-left corner. -.LP -X does not guarantee to preserve the contents of windows. -When part or all of a window is hidden and then brought back onto the screen, -its contents may be lost. -The server then sends the client program an -.PN Expose -event to notify it that part or all of the window needs to be repainted. -Programs must be prepared to regenerate the contents of windows on demand. -.LP -.IN "Pixmap" -.IN "Drawable" -.IN "Tile" -.IN "Bitmap" -X also provides off-screen storage of graphics objects, -called pixmaps. -Single plane (depth 1) pixmaps are sometimes referred to as bitmaps. -Pixmaps can be used in most graphics functions interchangeably with -windows and are used in various graphics operations to define patterns or tiles. -Windows and pixmaps together are referred to as drawables. -.LP -Most of the functions in Xlib just add requests to an output buffer. -These requests later execute asynchronously on the X server. -Functions that return values of information stored in -the server do not return (that is, they block) -until an explicit reply is received or an error occurs. -You can provide an error handler, -which will be called when the error is reported. -.LP -.IN "XSync" -If a client does not want a request to execute asynchronously, -it can follow the request with a call to -.PN XSync , -which blocks until all previously buffered -asynchronous events have been sent and acted on. -As an important side effect, -the output buffer in Xlib is always flushed by a call to any function -that returns a value from the server or waits for input. -.LP -.IN "Resource IDs" -.IN "Resource IDs" "Window" -.IN "Resource IDs" "Font" -.IN "Resource IDs" "Pixmap" -.IN "Resource IDs" "Cursor" -.IN "Resource IDs" "GContext" -Many Xlib functions will return an integer resource ID, -which allows you to refer to objects stored on the X server. -These can be of type -.PN Window , -.PN Font , -.PN Pixmap , -.PN Colormap , -.PN Cursor , -and -.PN GContext , -as defined in the file -.hN X11/X.h . -These resources are created by requests and are destroyed -(or freed) by requests or when connections are closed. -Most of these resources are potentially sharable between -applications, and in fact, windows are manipulated explicitly by -window manager programs. -Fonts and cursors are shared automatically across multiple screens. -Fonts are loaded and unloaded as needed and are shared by multiple clients. -Fonts are often cached in the server. -Xlib provides no support for sharing graphics contexts between applications. -.LP -.IN "Event" -Client programs are informed of events. -Events may either be side effects of a request (for example, restacking windows -generates -.PN Expose -events) or completely asynchronous (for example, from the keyboard). -A client program asks to be informed of events. -Because other applications can send events to your application, -programs must be prepared to handle (or ignore) events of all types. -.LP -Input events (for example, a key pressed or the pointer moved) -arrive asynchronously from the server and are queued until they are -requested by an explicit call (for example, -.PN XNextEvent -or -.PN XWindowEvent ). -In addition, some library -functions (for example, -.PN XRaiseWindow ) -generate -.PN Expose -and -.PN ConfigureRequest -events. -These events also arrive asynchronously, but the client may -.IN "XSync" -wish to explicitly wait for them by calling -.PN XSync -after calling a function that can cause the server to generate events. -.NH 2 -Errors -.XS -\*(SN Errors -.XE -.LP -Some functions return -.PN Status , -an integer error indication. -If the function fails, it returns a zero. -If the function returns a status of zero, -it has not updated the return arguments. -.IN "Status" -Because C does not provide multiple return values, -many functions must return their results by writing into client-passed storage. -.IN "Error" "handling" -By default, errors are handled either by a standard library function -or by one that you provide. -Functions that return pointers to strings return NULL pointers if -the string does not exist. -.LP -The X server reports protocol errors at the time that it detects them. -If more than one error could be generated for a given request, -the server can report any of them. -.LP -Because Xlib usually does not transmit requests to the server immediately -(that is, it buffers them), errors can be reported much later than they -actually occur. -For debugging purposes, however, -Xlib provides a mechanism for forcing synchronous behavior -(see section 11.8.1). -When synchronization is enabled, -errors are reported as they are generated. -.LP -When Xlib detects an error, -it calls an error handler, -which your program can provide. -If you do not provide an error handler, -the error is printed, and your program terminates. -.NH 2 -Standard Header Files -.XS -\*(SN Standard Header Files -.XE -.LP -The following include files are part of the Xlib standard: -.IP \(bu 5 -.hN X11/Xlib.h -.IP -This is the main header file for Xlib. -The majority of all Xlib symbols are declared by including this file. -This file also contains the preprocessor symbol -.PN XlibSpecificationRelease . -.IN "XlibSpecificationRelease" "" "@DEF@" -This symbol is defined to have the 6 in this release of the standard. -(Release 5 of Xlib was the first release to have this symbol.) -.IP \(bu 5 -.hN X11/X.h -.IP -This file declares types and constants for the X protocol that are -to be used by applications. -It is included automatically from -.hN X11/Xlib.h , -so application code should never need to reference this file directly. -.IP \(bu 5 -.hN X11/Xcms.h -.IP -This file contains symbols for much of the color management facilities -described in chapter 6. -All functions, types, and symbols with the prefix ``Xcms'', -plus the Color Conversion Contexts macros, are declared in this file. -.hN X11/Xlib.h -must be included before including this file. -.IP \(bu 5 -.hN X11/Xutil.h -.IP -This file declares various functions, types, and symbols used for -inter-client communication and application utility functions, -which are described in chapters 14 and 16. -.hN X11/Xlib.h -must be included before including this file. -.IP \(bu 5 -.hN X11/Xresource.h -.IP -This file declares all functions, types, and symbols for the -resource manager facilities, which are described in chapter 15. -.hN X11/Xlib.h -must be included before including this file. -.IP \(bu 5 -.hN X11/Xatom.h -.IP -This file declares all predefined atoms, -which are symbols with the prefix ``XA_''. -.IP \(bu 5 -.hN X11/cursorfont.h -.IP -This file declares the cursor symbols for the standard cursor font, -which are listed in appendix B. -All cursor symbols have the prefix ``XC_''. -.IP \(bu 5 -.hN X11/keysymdef.h -.IP -This file declares all standard KeySym values, -which are symbols with the prefix ``XK_''. -The KeySyms are arranged in groups, and a preprocessor symbol controls -inclusion of each group. The preprocessor symbol must be defined -prior to inclusion of the file to obtain the associated values. -The preprocessor symbols are XK_MISCELLANY, XK_XKB_KEYS, XK_3270, -XK_LATIN1, XK_LATIN2, -XK_LATIN3, XK_LATIN4, XK_KATAKANA, XK_ARABIC, XK_CYRILLIC, XK_GREEK, -XK_TECHNICAL, XK_SPECIAL, XK_PUBLISHING, XK_APL, XK_HEBREW, -XK_THAI, and XK_KOREAN. -.IP \(bu 5 -.hN X11/keysym.h -.IP -This file defines the preprocessor symbols -XK_MISCELLANY, XK_XKB_KEYS, XK_LATIN1, XK_LATIN2, XK_LATIN3, -XK_LATIN4, and XK_GREEK -and then includes -.hN X11/keysymdef.h . -.IP \(bu 5 -.hN X11/Xlibint.h -.IP -This file declares all the functions, types, and symbols used for -extensions, which are described in appendix C. -This file automatically includes -.hN X11/Xlib.h . -.IP \(bu 5 -.hN X11/Xproto.h -.IP -This file declares types and symbols for the basic X protocol, -for use in implementing extensions. -It is included automatically from -.hN X11/Xlibint.h , -so application and extension code should never need to -reference this file directly. -.IP \(bu 5 -.hN X11/Xprotostr.h -.IP -This file declares types and symbols for the basic X protocol, -for use in implementing extensions. -It is included automatically from -.hN X11/Xproto.h , -so application and extension code should never need to -reference this file directly. -.IP \(bu 5 -.hN X11/X10.h -.IP -This file declares all the functions, types, and symbols used for the -X10 compatibility functions, which are described in appendix D. -.NH 2 -Generic Values and Types -.XS -\*(SN Generic Values and Types -.XE -.LP -The following symbols are defined by Xlib and used throughout the manual: -.IN "Bool" "" "@DEF@" -.IN "True" "" "@DEF@" -.IN "False" "" "@DEF@" -.IP \(bu 5 -Xlib defines the type -.PN Bool -and the Boolean values -.PN True -and -.PN False . -.IN "None" "" "@DEF@" -.IP \(bu 5 -.PN None -is the universal null resource ID or atom. -.IN "XID" "" "@DEF@" -.IP \(bu 5 -The type -.PN XID -is used for generic resource IDs. -.IN "XPointer" "" "@DEF@" -.IP \(bu 5 -The type -.PN XPointer -is defined to be char\^* and is used as a generic opaque pointer to data. -.NH 2 -Naming and Argument Conventions within Xlib -.XS -\*(SN Naming and Argument Conventions within Xlib -.XE -.LP -Xlib follows a number of conventions for the naming and syntax of the functions. -Given that you remember what information the function requires, -these conventions are intended to make the syntax of the functions more -predictable. -.LP -The major naming conventions are: -.IP \(bu 5 -To differentiate the X symbols from the other symbols, -the library uses mixed case for external symbols. -It leaves lowercase for variables and all uppercase for user macros, -as per existing convention. -.IP \(bu 5 -All Xlib functions begin with a capital X. -.IP \(bu 5 -The beginnings of all function names and symbols are capitalized. -.IP \(bu 5 -All user-visible data structures begin with a capital X. -More generally, -anything that a user might dereference begins with a capital X. -.IP \(bu 5 -Macros and other symbols do not begin with a capital X. -To distinguish them from all user symbols, -each word in the macro is capitalized. -.IP \(bu 5 -All elements of or variables in a data structure are in lowercase. -Compound words, where needed, are constructed with underscores (\^_\^). -.IP \(bu 5 -The display argument, where used, is always first in the argument list. -.IP \(bu 5 -All resource objects, where used, occur at the beginning of the argument list -immediately after the display argument. -.IP \(bu 5 -When a graphics context is present together with -another type of resource (most commonly, a drawable), the -graphics context occurs in the argument list after the other -resource. -Drawables outrank all other resources. -.IP \(bu 5 -Source arguments always precede the destination arguments in the argument list. -.IP \(bu 5 -The x argument always precedes the y argument in the argument list. -.IP \(bu 5 -The width argument always precedes the height argument in the argument list. -.IP \(bu 5 -Where the x, y, width, and height arguments are used together, -the x and y arguments always precede the width and height arguments. -.IP \(bu 5 -Where a mask is accompanied with a structure, -the mask always precedes the pointer to the structure in the argument list. -.NH 2 -Programming Considerations -.XS -\*(SN Programming Considerations -.XE -.LP -The major programming considerations are: -.IP \(bu 5 -Coordinates and sizes in X are actually 16-bit quantities. -This decision was made to minimize the bandwidth required for a -given level of performance. -Coordinates usually are declared as an -.PN int -in the interface. -Values larger than 16 bits are truncated silently. -Sizes (width and height) are declared as unsigned quantities. -.IP \(bu 5 -Keyboards are the greatest variable between different -manufacturers' workstations. -If you want your program to be portable, -you should be particularly conservative here. -.IP \(bu 5 -Many display systems have limited amounts of off-screen memory. -If you can, you should minimize use of pixmaps and backing -store. -.IP \(bu 5 -The user should have control of his screen real estate. -Therefore, you should write your applications to react to window management -rather than presume control of the entire screen. -What you do inside of your top-level window, however, -is up to your application. -For further information, -see chapter 14 -and the \fIInter-Client Communication Conventions Manual\fP. -.NH 2 -Character Sets and Encodings -.XS -\*(SN Character Sets and Encodings -.XE -.LP -Some of the Xlib functions make reference to specific character sets -and character encodings. -The following are the most common: -.IP \(bu 5 -X Portable Character Set -.IP -A basic set of 97 characters, -which are assumed to exist in all locales supported by Xlib. -This set contains the following characters: -.IP -.Ds 0 -.EQ -delim DD -.EN -a..z A..Z 0..9 -!"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ -, , and -.EQ -delim %% -.EN -.De -.IP -This set is the left/lower half -of the graphic character set of ISO8859-1 plus space, tab, and newline. -It is also the set of graphic characters in 7-bit ASCII plus the same -three control characters. -The actual encoding of these characters on the host is system dependent. -.IP \(bu 5 -Host Portable Character Encoding -.IP -The encoding of the X Portable Character Set on the host. -The encoding itself is not defined by this standard, -but the encoding must be the same in all locales supported by Xlib on the host. -If a string is said to be in the Host Portable Character Encoding, -then it only contains characters from the X Portable Character Set, -in the host encoding. -.IP \(bu 5 -Latin-1 -.IP -The coded character set defined by the ISO8859-1 standard. -.IP \(bu 5 -Latin Portable Character Encoding -.IP -The encoding of the X Portable Character Set using the Latin-1 codepoints -plus ASCII control characters. -If a string is said to be in the Latin Portable Character Encoding, -then it only contains characters from the X Portable Character Set, -not all of Latin-1. -.IP \(bu 5 -STRING Encoding -.IP -Latin-1, plus tab and newline. -.IP \(bu 5 -POSIX Portable Filename Character Set -.IP -The set of 65 characters, -which can be used in naming files on a POSIX-compliant host, -that are correctly processed in all locales. -The set is: -.IP -.Ds 0 -a..z A..Z 0..9 ._- -.De -.NH 2 -Formatting Conventions -.XS -\*(SN Formatting Conventions -.XE -.LP -\fIXlib \- C Language X Interface\fP uses the following conventions: -.IP \(bu 5 -Global symbols are printed in -.PN this -.PN special -.PN font . -These can be either function names, -symbols defined in include files, or structure names. -When declared and defined, -function arguments are printed in \fIitalics\fP. -In the explanatory text that follows, -they usually are printed in regular type. -.IP \(bu 5 -Each function is introduced by a general discussion that -distinguishes it from other functions. -The function declaration itself follows, -and each argument is specifically explained. -Although ANSI C function prototype syntax is not used, -Xlib header files normally declare functions using function prototypes -in ANSI C environments. -General discussion of the function, if any is required, -follows the arguments. -Where applicable, -the last paragraph of the explanation lists the possible -Xlib error codes that the function can generate. -For a complete discussion of the Xlib error codes, -see section 11.8.2. -.IP \(bu 5 -To eliminate any ambiguity between those arguments that you pass and those that -a function returns to you, -the explanations for all arguments that you pass start with the word -\fIspecifies\fP or, in the case of multiple arguments, the word \fIspecify\^\fP. -The explanations for all arguments that are returned to you start with the -word \fIreturns\fP or, in the case of multiple arguments, the word \fIreturn\^\fP. -The explanations for all arguments that you can pass and are returned start -with the words \fIspecifies and returns\^\fP. -.IP \(bu 5 -Any pointer to a structure that is used to return a value is designated as -such by the \fI_return\fP suffix as part of its name. -All other pointers passed to these functions are -used for reading only. -A few arguments use pointers to structures that are used for -both input and output and are indicated by using the \fI_in_out\fP suffix. -.bp diff --git a/doc/xorg-docs/specs/X11/CH02 b/doc/xorg-docs/specs/X11/CH02 deleted file mode 100644 index 61554b898..000000000 --- a/doc/xorg-docs/specs/X11/CH02 +++ /dev/null @@ -1,2052 +0,0 @@ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996, 2000 The Open Group -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of The Open Group shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from The Open Group. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by -.\" Digital Equipment Corporation -.\" -.\" Portions Copyright \(co 1990, 1991 by -.\" Tektronix, Inc. -.\" -.\" Permission to use, copy, modify and distribute this documentation for -.\" any purpose and without fee is hereby granted, provided that the above -.\" copyright notice appears in all copies and that both that copyright notice -.\" and this permission notice appear in all copies, and that the names of -.\" Digital and Tektronix not be used in in advertising or publicity pertaining -.\" to this documentation without specific, written prior permission. -.\" Digital and Tektronix makes no representations about the suitability -.\" of this documentation for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -.\" $XFree86$ -\& -.sp 1 -.ce 3 -\s+1\fBChapter 2\fP\s-1 - -\s+1\fBDisplay Functions\fP\s-1 -.sp 2 -.nr H1 2 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.na -.LP -.XS -Chapter 2: Display Functions -.XE -Before your program can use a display, you must establish a connection -to the X server. -Once you have established a connection, -you then can use the Xlib macros and functions discussed in this chapter -to return information about the display. -This chapter discusses how to: -.IP \(bu 5 -Open (connect to) the display -.IP \(bu 5 -Obtain information about the display, image formats, or screens -.IP \(bu 5 -Generate a -.PN NoOperation -protocol request -.IP \(bu 5 -Free client-created data -.IP \(bu 5 -Close (disconnect from) a display -.IP \(bu 5 -Use X Server connection close operations -.IP \(bu 5 -Use Xlib with threads -.IP \(bu 5 -Use internal connections -.NH 2 -Opening the Display -.XS -\*(SN Opening the Display -.XE -.LP -To open a connection to the X server that controls a display, use -.PN XOpenDisplay . -.IN "XOpenDisplay" "" "@DEF@" -.LP -.sM -.FD 0 -Display *XOpenDisplay\^(\^\fIdisplay_name\fP\^) -.br - char *\fIdisplay_name\fP\^; -.FN -.IP \fIdisplay_name\fP 1i -Specifies the hardware display name, which determines the display -and communications domain to be used. -On a POSIX-conformant system, if the display_name is NULL, -it defaults to the value of the DISPLAY environment variable. -.IN "Environment" "DISPLAY" -.LP -.eM -The encoding and interpretation of the display name are -implementation-dependent. -Strings in the Host Portable Character Encoding are supported; -support for other characters is implementation-dependent. -On POSIX-conformant systems, -the display name or DISPLAY environment variable can be a string in the format: -.LP -.sM -.Ds 0 -.TA 1i -.ta 1i - \fIprotocol\fP\^/\^\fIhostname\fP\^:\^\fInumber\fP\^.\^\fIscreen_number\fP -.De -.IP \fIprotocol\fP 1i -Specifies a protocol family or an alias for a protocol family. Supported -protocol families are implementation dependent. The protocol entry is -optional. If protocol is not specified, the / separating protocol and -hostname must also not be specified. -.IP \fIhostname\fP 1i -Specifies the name of the host machine on which the display is physically -attached. -You follow the hostname with either a single colon (:) or a double colon (::). -.IP \fInumber\fP 1i -Specifies the number of the display server on that host machine. -You may optionally follow this display number with a period (.). -A single CPU can have more than one display. -Multiple displays are usually numbered starting with zero. -.IN "Screen" -.IP \fIscreen_number\fP 1i -Specifies the screen to be used on that server. -Multiple screens can be controlled by a single X server. -The screen_number sets an internal variable that can be accessed by -using the -.PN DefaultScreen -macro or the -.PN XDefaultScreen -function if you are using languages other than C (see section 2.2.1). -.LP -.eM -For example, the following would specify screen 1 of display 0 on the -machine named ``dual-headed'': -.LP -.Ds -dual-headed:0.1 -.De -.LP -The -.PN XOpenDisplay -function returns a -.PN Display -structure that serves as the -connection to the X server and that contains all the information -about that X server. -.PN XOpenDisplay -connects your application to the X server through TCP -or DECnet communications protocols, -or through some local inter-process communication protocol. -.IN "Protocol" "TCP" -.IN "Protocol" "DECnet" -If the protocol is specified as "tcp", "inet", or "inet6", or -if no protocol is specified and the hostname is a host machine name and a single colon (:) -separates the hostname and display number, -.PN XOpenDisplay -connects using TCP streams. (If the protocol is specified as "inet", TCP over -IPv4 is used. If the protocol is specified as "inet6", TCP over IPv6 is used. -Otherwise, the implementation determines which IP version is used.) -If the hostname and protocol are both not specified, -Xlib uses whatever it believes is the fastest transport. -If the hostname is a host machine name and a double colon (::) -separates the hostname and display number, -.PN XOpenDisplay -connects using DECnet. -A single X server can support any or all of these transport mechanisms -simultaneously. -A particular Xlib implementation can support many more of these transport -mechanisms. -.LP -.IN "Display" -If successful, -.PN XOpenDisplay -returns a pointer to a -.PN Display -structure, -which is defined in -.hN X11/Xlib.h . -If -.PN XOpenDisplay -does not succeed, it returns NULL. -After a successful call to -.PN XOpenDisplay , -all of the screens in the display can be used by the client. -The screen number specified in the display_name argument is returned -by the -.PN DefaultScreen -macro (or the -.PN XDefaultScreen -function). -You can access elements of the -.PN Display -and -.PN Screen -structures only by using the information macros or functions. -For information about using macros and functions to obtain information from -the -.PN Display -structure, -see section 2.2.1. -.LP -X servers may implement various types of access control mechanisms -(see section 9.8). -.NH 2 -Obtaining Information about the Display, Image Formats, or Screens -.XS -\*(SN Obtaining Information about the Display, Image Formats, or Screens -.XE -.LP -The Xlib library provides a number of useful macros -and corresponding functions that return data from the -.PN Display -structure. -The macros are used for C programming, -and their corresponding function equivalents are for other language bindings. -This section discusses the: -.IP \(bu 5 -Display macros -.IP \(bu 5 -Image format functions and macros -.IP \(bu 5 -Screen information macros -.LP -.IN "Display" "data structure" -All other members of the -.PN Display -structure (that is, those for which no macros are defined) are private to Xlib -and must not be used. -Applications must never directly modify or inspect these private members of the -.PN Display -structure. -.NT Note -The -.PN XDisplayWidth , -.PN XDisplayHeight , -.PN XDisplayCells , -.PN XDisplayPlanes , -.PN XDisplayWidthMM , -and -.PN XDisplayHeightMM -functions in the next sections are misnamed. -These functions really should be named Screen\fIwhatever\fP -and XScreen\fIwhatever\fP, not Display\fIwhatever\fP or XDisplay\fIwhatever\fP. -Our apologies for the resulting confusion. -.NE -.NH 3 -Display Macros -.XS -\*(SN Display Macros -.XE -.LP -Applications should not directly modify any part of the -.PN Display -and -.PN Screen -structures. -The members should be considered read-only, -although they may change as the result of other operations on the display. -.LP -The following lists the C language macros, -their corresponding function equivalents that are for other language bindings, -and what data both can return. -.LP -.sp -.sM -.FD 0 -AllPlanes -.sp -unsigned long XAllPlanes(\^) -.FN -.LP -.eM -.IN "AllPlanes" "" "@DEF@" -.IN "XAllPlanes" "" "@DEF@" -Both return a value with all bits set to 1 suitable for use in a plane argument to -a procedure. -.LP -.sp -Both -.PN BlackPixel -and -.PN WhitePixel -can be used in implementing a monochrome application. -These pixel values are for permanently allocated entries in the default -colormap. -The actual RGB (red, green, and blue) values are settable on some screens -and, in any case, may not actually be black or white. -The names are intended to convey the expected relative intensity of the colors. -.sM -.FD 0 -BlackPixel\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^) -.sp -unsigned long XBlackPixel\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIscreen_number\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIscreen_number\fP 1i -Specifies the appropriate screen number on the host server. -.LP -.eM -.IN "BlackPixel" "" "@DEF@" -.IN "XBlackPixel" "" "@DEF@" -Both return the black pixel value for the specified screen. -.LP -.sp -.sM -.FD 0 -WhitePixel\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^) -.sp -unsigned long XWhitePixel\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIscreen_number\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIscreen_number\fP 1i -Specifies the appropriate screen number on the host server. -.LP -.eM -.IN "WhitePixel" "" "@DEF@" -.IN "XWhitePixel" "" "@DEF@" -Both return the white pixel value for the specified screen. -.LP -.sp -.sM -.FD 0 -ConnectionNumber\^(\^\fIdisplay\fP\^) -.sp -int XConnectionNumber\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -.IN "ConnectionNumber" "" "@DEF@" -.IN "XConnectionNumber" "" "@DEF@" -Both return a connection number for the specified display. -On a POSIX-conformant system, -this is the file descriptor of the connection. -.LP -.sp -.sM -.FD 0 -DefaultColormap\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^) -.sp -Colormap XDefaultColormap\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIscreen_number\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIscreen_number\fP 1i -Specifies the appropriate screen number on the host server. -.LP -.eM -.IN "DefaultColormap" "" "@DEF@" -.IN "XDefaultColormap" "" "@DEF@" -Both return the default colormap ID for allocation on the specified screen. -Most routine allocations of color should be made out of this colormap. -.LP -.sp -.sM -.FD 0 -DefaultDepth\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^) -.sp -int XDefaultDepth\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIscreen_number\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIscreen_number\fP 1i -Specifies the appropriate screen number on the host server. -.LP -.eM -.IN "DefaultDepth" "" "@DEF@" -.IN "XDefaultDepth" "" "@DEF@" -Both return the depth (number of planes) of the default root window for the -specified screen. -Other depths may also be supported on this screen (see -.PN XMatchVisualInfo ). -.LP -.sp -.IN "XListDepths" "" "@DEF@" -To determine the number of depths that are available on a given screen, use -.PN XListDepths . -.sM -.FD 0 -int *XListDepths\^(\^\fIdisplay\fP, \fIscreen_number\fP, \fIcount_return\fP\^) -.br - Display *\fIdisplay\fP; -.br - int \fIscreen_number\fP; -.br - int *\fIcount_return\fP; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIscreen_number\fP 1i -Specifies the appropriate screen number on the host server. -.ds Cn depths -.IP \fIcount_return\fP 1i -Returns the number of \*(Cn. -.LP -.eM -The -.PN XListDepths -function returns the array of depths -that are available on the specified screen. -If the specified screen_number is valid and sufficient memory for the array -can be allocated, -.PN XListDepths -sets count_return to the number of available depths. -Otherwise, it does not set count_return and returns NULL. -To release the memory allocated for the array of depths, use -.PN XFree . -.LP -.sp -.sM -.FD 0 -DefaultGC\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^) -.sp -GC XDefaultGC\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIscreen_number\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIscreen_number\fP 1i -Specifies the appropriate screen number on the host server. -.LP -.eM -.IN "DefaultGC" "" "@DEF@" -.IN "XDefaultGC" "" "@DEF@" -Both return the default graphics context for the root window of the -specified screen. -This GC is created for the convenience of simple applications -and contains the default GC components with the foreground and -background pixel values initialized to the black and white -pixels for the screen, respectively. -You can modify its contents freely because it is not used in any Xlib -function. -This GC should never be freed. -.LP -.sp -.sM -.FD 0 -DefaultRootWindow\^(\^\fIdisplay\fP\^) -.sp -Window XDefaultRootWindow\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -.IN "DefaultRootWindow" "" "@DEF@" -.IN "XDefaultRootWindow" "" "@DEF@" -Both return the root window for the default screen. -.LP -.sp -.sM -.FD 0 -DefaultScreenOfDisplay\^(\^\fIdisplay\fP\^) -.sp -Screen *XDefaultScreenOfDisplay\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -.IN "DefaultScreenOfDisplay" "" "@DEF@" -.IN "XDefaultScreenOfDisplay" "" "@DEF@" -Both return a pointer to the default screen. -.LP -.sp -.sM -.FD 0 -ScreenOfDisplay\^(\^\fIdisplay\fP, \fIscreen_number\fP\^) -.sp -Screen *XScreenOfDisplay\^(\^\fIdisplay\fP, \fIscreen_number\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIscreen_number\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIscreen_number\fP 1i -Specifies the appropriate screen number on the host server. -.LP -.eM -.IN "ScreenOfDisplay" "" "@DEF@" -.IN "XScreenOfDisplay" "" "@DEF@" -Both return a pointer to the indicated screen. -.LP -.sp -.sM -.FD 0 -DefaultScreen\^(\^\fIdisplay\fP\^) -.sp -int XDefaultScreen\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -.IN "DefaultScreen" "" "@DEF@" -.IN "XDefaultScreen" "" "@DEF@" -Both return the default screen number referenced by the -.PN XOpenDisplay -function. -This macro or function should be used to retrieve the screen number -in applications that will use only a single screen. -.LP -.sp -.sM -.FD 0 -DefaultVisual\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^) -.sp -Visual *XDefaultVisual\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIscreen_number\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIscreen_number\fP 1i -Specifies the appropriate screen number on the host server. -.LP -.eM -.IN "DefaultVisual" "" "@DEF@" -.IN "XDefaultVisual" "" "@DEF@" -Both return the default visual type for the specified screen. -For further information about visual types, -see section 3.1. -.LP -.sp -.sM -.FD 0 -DisplayCells\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^) -.sp -int XDisplayCells\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIscreen_number\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIscreen_number\fP 1i -Specifies the appropriate screen number on the host server. -.LP -.eM -.IN "DisplayCells" "" "@DEF@" -.IN "XDisplayCells" "" "@DEF@" -Both return the number of entries in the default colormap. -.LP -.sp -.sM -.FD 0 -DisplayPlanes\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^) -.sp -int XDisplayPlanes\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIscreen_number\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIscreen_number\fP 1i -Specifies the appropriate screen number on the host server. -.LP -.eM -.IN "DisplayPlanes" "" "@DEF@" -.IN "XDisplayPlanes" "" "@DEF@" -Both return the depth of the root window of the specified screen. -For an explanation of depth, -see the glossary. -.LP -.sp -.sM -.FD 0 -DisplayString\^(\^\fIdisplay\fP\^) -.sp -char *XDisplayString\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -.IN "DisplayString" "" "@DEF@" -.IN "XDisplayString" "" "@DEF@" -Both return the string that was passed to -.PN XOpenDisplay -when the current display was opened. -On POSIX-conformant systems, -if the passed string was NULL, these return the value of -the DISPLAY environment variable when the current display was opened. -.IN "POSIX System Call" "fork" -These are useful to applications that invoke the -.PN fork -system call and want to open a new connection to the same display from the -child process as well as for printing error messages. -.LP -.sp -.sM -.FD 0 -long XExtendedMaxRequestSize(\^\fIdisplay\fP\^) - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -.IN "XExtendedMaxRequestSize" "" "@DEF@" -The -.PN XExtendedMaxRequestSize -function returns zero if the specified display does not support an -extended-length protocol encoding; otherwise, -it returns the maximum request size (in 4-byte units) supported -by the server using the extended-length encoding. -The Xlib functions -.PN XDrawLines , -.PN XDrawArcs , -.PN XFillPolygon , -.PN XChangeProperty , -.PN XSetClipRectangles , -and -.PN XSetRegion -will use the extended-length encoding as necessary, if supported -by the server. Use of the extended-length encoding in other Xlib -functions (for example, -.PN XDrawPoints , -.PN XDrawRectangles , -.PN XDrawSegments , -.PN XFillArcs , -.PN XFillRectangles , -.PN XPutImage ) -is permitted but not required; an Xlib implementation may choose to -split the data across multiple smaller requests instead. -.LP -.sp -.sM -.FD 0 -long XMaxRequestSize(\^\fIdisplay\fP\^) - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -.IN "XMaxRequestSize" "" "@DEF@" -The -.PN XMaxRequestSize -function returns the maximum request size (in 4-byte units) supported -by the server without using an extended-length protocol encoding. -Single protocol requests to the server can be no larger than this size -unless an extended-length protocol encoding is supported by the server. -The protocol guarantees the size to be no smaller than 4096 units -(16384 bytes). -Xlib automatically breaks data up into multiple protocol requests -as necessary for the following functions: -.PN XDrawPoints , -.PN XDrawRectangles , -.PN XDrawSegments , -.PN XFillArcs , -.PN XFillRectangles , -and -.PN XPutImage . -.LP -.sp -.sM -.FD 0 -LastKnownRequestProcessed\^(\^\fIdisplay\fP\^) -.sp -unsigned long XLastKnownRequestProcessed\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -.IN "LastKnownRequestProcessed" "" "@DEF@" -.IN "XLastKnownRequestProcessed" "" "@DEF@" -Both extract the full serial number of the last request known by Xlib -to have been processed by the X server. -Xlib automatically sets this number when replies, events, and errors -are received. -.LP -.sp -.sM -.FD 0 -NextRequest\^(\^\fIdisplay\fP\^) -.sp -unsigned long XNextRequest\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -.IN "NextRequest" "" "@DEF@" -.IN "XNextRequest" "" "@DEF@" -Both extract the full serial number that is to be used for the next -request. -Serial numbers are maintained separately for each display connection. -.LP -.sp -.sM -.FD 0 -ProtocolVersion\^(\^\fIdisplay\fP\^) -.sp -int XProtocolVersion\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -.IN "ProtocolVersion" "" "@DEF@" -.IN "XProtocolVersion" "" "@DEF@" -Both return the major version number (11) of the X protocol associated with -the connected display. -.LP -.sp -.sM -.FD 0 -ProtocolRevision\^(\^\fIdisplay\fP\^) -.sp -int XProtocolRevision\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -.IN "ProtocolRevision" "" "@DEF@" -.IN "XProtocolRevision" "" "@DEF@" -Both return the minor protocol revision number of the X server. -.LP -.sp -.sM -.FD 0 -QLength\^(\^\fIdisplay\fP\^) -.sp -int XQLength\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -.IN "QLength" "" "@DEF@" -.IN "XQLength" "" "@DEF@" -Both return the length of the event queue for the connected display. -Note that there may be more events that have not been read into -the queue yet (see -.PN XEventsQueued ). -.LP -.sp -.sM -.FD 0 -RootWindow\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^) -.sp -Window XRootWindow\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIscreen_number\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIscreen_number\fP 1i -Specifies the appropriate screen number on the host server. -.LP -.eM -.IN "Window" "RootWindow" -.IN "RootWindow" "" "@DEF@" -.IN "Window" "XRootWindow" -.IN "XRootWindow" "" "@DEF@" -Both return the root window. -These are useful with functions that need a drawable of a particular screen -and for creating top-level windows. -.LP -.sp -.sM -.FD 0 -ScreenCount\^(\^\fIdisplay\fP\^) -.sp -int XScreenCount\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -.IN "ScreenCount" "" "@DEF@" -.IN "XScreenCount" "" "@DEF@" -Both return the number of available screens. -.LP -.sp -.sM -.FD 0 -ServerVendor\^(\^\fIdisplay\fP\^) -.sp -char *XServerVendor\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -.IN "ServerVendor" "" "@DEF@" -.IN "XServerVendor" "" "@DEF@" -Both return a pointer to a null-terminated string that provides -some identification of the owner of the X server implementation. -If the data returned by the server is in the Latin Portable Character Encoding, -then the string is in the Host Portable Character Encoding. -Otherwise, the contents of the string are implementation-dependent. -.LP -.sp -.sM -.FD 0 -VendorRelease\^(\^\fIdisplay\fP\^) -.sp -int XVendorRelease\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -.IN "VendorRelease" "" "@DEF@" -.IN "XVendorRelease" "" "@DEF@" -Both return a number related to a vendor's release of the X server. -.NH 3 -Image Format Functions and Macros -.XS -\*(SN Image Format Functions and Macros -.XE -.LP -Applications are required to present data to the X server -in a format that the server demands. -To help simplify applications, -most of the work required to convert the data is provided by Xlib -(see sections 8.7 and 16.8). -.LP -The -.PN XPixmapFormatValues -structure provides an interface to the pixmap format information -that is returned at the time of a connection setup. -It contains: -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int depth; - int bits_per_pixel; - int scanline_pad; -} XPixmapFormatValues; -.De -.LP -.eM -.sp -To obtain the pixmap format information for a given display, use -.PN XListPixmapFormats . -.IN "XListPixmapFormats" "" "@DEF@" -.sM -.FD 0 -XPixmapFormatValues *XListPixmapFormats\^(\^\fIdisplay\fP, \fIcount_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int *\fIcount_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Cn pixmap formats that are supported by the display -.IP \fIcount_return\fP 1i -Returns the number of \*(Cn. -.LP -.eM -The -.PN XListPixmapFormats -function returns an array of -.PN XPixmapFormatValues -structures that describe the types of Z format images supported -by the specified display. -If insufficient memory is available, -.PN XListPixmapFormats -returns NULL. -To free the allocated storage for the -.PN XPixmapFormatValues -structures, use -.PN XFree . -.LP -The following lists the C language macros, -their corresponding function equivalents that are for other language bindings, -and what data they both return for the specified server and screen. -These are often used by toolkits as well as by simple applications. -.LP -.sp -.sM -.FD 0 -ImageByteOrder\^(\^\fIdisplay\fP\^) -.sp -int XImageByteOrder\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -.IN "ImageByteOrder" "" "@DEF@" -.IN "XImageByteOrder" "" "@DEF@" -Both specify the required byte order for images for each scanline unit in -XY format (bitmap) or for each pixel value in -Z format. -The macro or function can return either -.PN LSBFirst -or -.PN MSBFirst . -.LP -.sp -.sM -.FD 0 -BitmapUnit\^(\^\fIdisplay\fP\^) -.sp -int XBitmapUnit\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -.IN "BitmapUnit" "" "@DEF@" -.IN "XBitmapUnit" "" "@DEF@" -Both return the size of a bitmap's scanline unit in bits. -The scanline is calculated in multiples of this value. -.LP -.sp -.sM -.FD 0 -BitmapBitOrder\^(\^\fIdisplay\fP\^) -.sp -int XBitmapBitOrder\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -.IN "BitmapBitOrder" "" "@DEF@" -.IN "XBitmapBitOrder" "" "@DEF@" -Within each bitmap unit, the left-most bit in the bitmap as displayed -on the screen is either the least significant or most significant bit in the -unit. -This macro or function can return -.PN LSBFirst -or -.PN MSBFirst . -.LP -.sp -.sM -.FD 0 -BitmapPad\^(\^\fIdisplay\fP\^) -.sp -int XBitmapPad\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -.IN "BitmapPad" "" "@DEF@" -.IN "XBitmapPad" "" "@DEF@" -Each scanline must be padded to a multiple of bits returned -by this macro or function. -.LP -.sp -.sM -.FD 0 -DisplayHeight\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^) -.sp -int XDisplayHeight\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIscreen_number\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIscreen_number\fP 1i -Specifies the appropriate screen number on the host server. -.LP -.eM -.IN "DisplayHeight" "" "@DEF@" -.IN "XDisplayHeight" "" "@DEF@" -Both return an integer that describes the height of the screen -in pixels. -.LP -.sp -.sM -.FD 0 -DisplayHeightMM\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^) -.sp -int XDisplayHeightMM\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIscreen_number\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIscreen_number\fP 1i -Specifies the appropriate screen number on the host server. -.LP -.eM -.IN "DisplayHeightMM" "" "@DEF@" -.IN "XDisplayHeightMM" "" "@DEF@" -Both return the height of the specified screen in millimeters. -.LP -.sp -.sM -.FD 0 -DisplayWidth\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^) -.sp -int XDisplayWidth\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIscreen_number\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIscreen_number\fP 1i -Specifies the appropriate screen number on the host server. -.LP -.eM -.IN "DisplayWidth" "" "@DEF@" -.IN "XDisplayWidth" "" "@DEF@" -Both return the width of the screen in pixels. -.LP -.sp -.sM -.FD 0 -DisplayWidthMM\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^) -.sp -int XDisplayWidthMM\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIscreen_number\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIscreen_number\fP 1i -Specifies the appropriate screen number on the host server. -.LP -.eM -.IN "DisplayWidthMM" "" "@DEF@" -.IN "XDisplayWidthMM" "" "@DEF@" -Both return the width of the specified screen in millimeters. -.NH 3 -Screen Information Macros -.XS -\*(SN Screen Information Macros -.XE -.LP -The following lists the C language macros, -their corresponding function equivalents that are for other language bindings, -and what data they both can return. -These macros or functions all take a pointer to the appropriate screen -structure. -.LP -.sp -.sM -.FD 0 -BlackPixelOfScreen\^(\^\fIscreen\fP\^) -.sp -unsigned long XBlackPixelOfScreen\^(\^\fIscreen\fP\^) -.br - Screen *\fIscreen\fP\^; -.FN -.IP \fIscreen\fP 1i -Specifies the appropriate -.PN Screen -structure. -.LP -.eM -.IN "BlackPixelOfScreen" "" "@DEF@" -.IN "XBlackPixelOfScreen" "" "@DEF@" -Both return the black pixel value of the specified screen. -.LP -.sp -.sM -.FD 0 -WhitePixelOfScreen\^(\^\fIscreen\fP\^) -.sp -unsigned long XWhitePixelOfScreen\^(\^\fIscreen\fP\^) -.br - Screen *\fIscreen\fP\^; -.FN -.IP \fIscreen\fP 1i -Specifies the appropriate -.PN Screen -structure. -.LP -.eM -.IN "WhitePixelOfScreen" "" "@DEF@" -.IN "XWhitePixelOfScreen" "" "@DEF@" -Both return the white pixel value of the specified screen. -.LP -.sp -.sM -.FD 0 -CellsOfScreen\^(\^\fIscreen\fP\^) -.sp -int XCellsOfScreen\^(\^\fIscreen\fP\^) -.br - Screen *\fIscreen\fP\^; -.FN -.IP \fIscreen\fP 1i -Specifies the appropriate -.PN Screen -structure. -.LP -.eM -.IN "CellsOfScreen" "" "@DEF@" -.IN "XCellsOfScreen" "" "@DEF@" -Both return the number of colormap cells in the default colormap -of the specified screen. -.LP -.sp -.sM -.FD 0 -DefaultColormapOfScreen\^(\^\fIscreen\fP\^) -.sp -Colormap XDefaultColormapOfScreen\^(\^\fIscreen\fP\^) -.br - Screen *\fIscreen\fP\^; -.FN -.IP \fIscreen\fP 1i -Specifies the appropriate -.PN Screen -structure. -.LP -.eM -.IN "DefaultColormapOfScreen" "" "@DEF@" -.IN "XDefaultColormapOfScreen" "" "@DEF@" -Both return the default colormap of the specified screen. -.LP -.sp -.sM -.FD 0 -DefaultDepthOfScreen\^(\^\fIscreen\fP\^) -.sp -int XDefaultDepthOfScreen\^(\^\fIscreen\fP\^) -.br - Screen *\fIscreen\fP\^; -.FN -.IP \fIscreen\fP 1i -Specifies the appropriate -.PN Screen -structure. -.LP -.eM -.IN "DefaultDepthOfScreen" "" "@DEF@" -.IN "XDefaultDepthOfScreen" "" "@DEF@" -Both return the depth of the root window. -.LP -.sp -.sM -.FD 0 -DefaultGCOfScreen\^(\^\fIscreen\fP\^) -.sp -GC XDefaultGCOfScreen\^(\^\fIscreen\fP\^) -.br - Screen *\fIscreen\fP\^; -.FN -.IP \fIscreen\fP 1i -Specifies the appropriate -.PN Screen -structure. -.LP -.eM -.IN "DefaultGCOfScreen" "" "@DEF@" -.IN "XDefaultGCOfScreen" "" "@DEF@" -Both return a default graphics context (GC) of the specified screen, -which has the same depth as the root window of the screen. -The GC must never be freed. -.LP -.sp -.sM -.FD 0 -DefaultVisualOfScreen\^(\^\fIscreen\fP\^) -.sp -Visual *XDefaultVisualOfScreen\^(\^\fIscreen\fP\^) -.br - Screen *\fIscreen\fP\^; -.FN -.IP \fIscreen\fP 1i -Specifies the appropriate -.PN Screen -structure. -.LP -.eM -.IN "DefaultVisualOfScreen" "" "@DEF@" -.IN "XDefaultVisualOfScreen" "" "@DEF@" -Both return the default visual of the specified screen. -For information on visual types, -see section 3.1. -.LP -.sp -.sM -.FD 0 -DoesBackingStore\^(\^\fIscreen\fP\^) -.sp -int XDoesBackingStore\^(\^\fIscreen\fP\^) -.br - Screen *\fIscreen\fP\^; -.FN -.IP \fIscreen\fP 1i -Specifies the appropriate -.PN Screen -structure. -.LP -.eM -.IN "DoesBackingStore" "" "@DEF@" -.IN "XDoesBackingStore" "" "@DEF@" -Both return a value indicating whether the screen supports backing -stores. -The value returned can be one of -.PN WhenMapped , -.PN NotUseful , -or -.PN Always -(see section 3.2.4). -.LP -.sp -.sM -.FD 0 -DoesSaveUnders\^(\^\fIscreen\fP\^) -.sp -Bool XDoesSaveUnders\^(\^\fIscreen\fP\^) -.br - Screen *\fIscreen\fP\^; -.FN -.IP \fIscreen\fP 1i -Specifies the appropriate -.PN Screen -structure. -.LP -.eM -.IN "DoesSaveUnders" "" "@DEF@" -.IN "XDoesSaveUnders" "" "@DEF@" -Both return a Boolean value indicating whether the -screen supports save unders. -If -.PN True , -the screen supports save unders. -If -.PN False , -the screen does not support save unders (see section 3.2.5). -.LP -.sp -.sM -.FD 0 -DisplayOfScreen\^(\^\fIscreen\fP\^) -.sp -Display *XDisplayOfScreen\^(\^\fIscreen\fP\^) -.br - Screen *\fIscreen\fP\^; -.FN -.IP \fIscreen\fP 1i -Specifies the appropriate -.PN Screen -structure. -.LP -.eM -.IN "DisplayOfScreen" "" "@DEF@" -.IN "XDisplayOfScreen" "" "@DEF@" -Both return the display of the specified screen. -.LP -.sp -.sM -.IN "XScreenNumberOfScreen" "" "@DEF@" -.FD 0 -int XScreenNumberOfScreen\^(\^\fIscreen\fP\^) -.br - Screen *\fIscreen\fP\^; -.FN -.IP \fIscreen\fP 1i -Specifies the appropriate -.PN Screen -structure. -.LP -.eM -The -.PN XScreenNumberOfScreen -function returns the screen index number of the specified screen. -.LP -.sp -.sM -.FD 0 -EventMaskOfScreen\^(\^\fIscreen\fP\^) -.sp -long XEventMaskOfScreen\^(\^\fIscreen\fP\^) -.br - Screen *\fIscreen\fP\^; -.FN -.IP \fIscreen\fP 1i -Specifies the appropriate -.PN Screen -structure. -.LP -.eM -.IN "EventMaskOfScreen" "" "@DEF@" -.IN "XEventMaskOfScreen" "" "@DEF@" -Both return the event mask of the root window for the specified screen -at connection setup time. -.LP -.sp -.sM -.FD 0 -WidthOfScreen\^(\^\fIscreen\fP\^) -.sp -int XWidthOfScreen\^(\^\fIscreen\fP\^) -.br - Screen *\fIscreen\fP\^; -.FN -.IP \fIscreen\fP 1i -Specifies the appropriate -.PN Screen -structure. -.LP -.eM -.IN "WidthOfScreen" "" "@DEF@" -.IN "XWidthOfScreen" "" "@DEF@" -Both return the width of the specified screen in pixels. -.LP -.sp -.sM -.FD 0 -HeightOfScreen\^(\^\fIscreen\fP\^) -.sp -int XHeightOfScreen\^(\^\fIscreen\fP\^) -.br - Screen *\fIscreen\fP\^; -.FN -.IP \fIscreen\fP 1i -Specifies the appropriate -.PN Screen -structure. -.LP -.eM -.IN "HeightOfScreen" "" "@DEF@" -.IN "XHeightOfScreen" "" "@DEF@" -Both return the height of the specified screen in pixels. -.LP -.sp -.sM -.FD 0 -WidthMMOfScreen\^(\^\fIscreen\fP\^) -.sp -int XWidthMMOfScreen\^(\^\fIscreen\fP\^) -.br - Screen *\fIscreen\fP\^; -.FN -.IP \fIscreen\fP 1i -Specifies the appropriate -.PN Screen -structure. -.LP -.eM -.IN "WidthMMOfScreen" "" "@DEF@" -.IN "XWidthMMOfScreen" "" "@DEF@" -Both return the width of the specified screen in millimeters. -.LP -.sp -.sM -.FD 0 -HeightMMOfScreen\^(\^\fIscreen\fP\^) -.sp -int XHeightMMOfScreen\^(\^\fIscreen\fP\^) -.br - Screen *\fIscreen\fP\^; -.FN -.IP \fIscreen\fP 1i -Specifies the appropriate -.PN Screen -structure. -.LP -.eM -.IN "HeightMMOfScreen" "" "@DEF@" -.IN "XHeightMMOfScreen" "" "@DEF@" -Both return the height of the specified screen in millimeters. -.LP -.sp -.sM -.FD 0 -MaxCmapsOfScreen\^(\^\fIscreen\fP\^) -.sp -int XMaxCmapsOfScreen\^(\^\fIscreen\fP\^) -.br - Screen *\fIscreen\fP\^; -.FN -.IP \fIscreen\fP 1i -Specifies the appropriate -.PN Screen -structure. -.LP -.eM -.IN "MaxCmapsOfScreen" "" "@DEF@" -.IN "XMaxCmapsOfScreen" "" "@DEF@" -Both return the maximum number of installed colormaps supported -by the specified screen (see section 9.3). -.LP -.sp -.sM -.FD 0 -MinCmapsOfScreen\^(\^\fIscreen\fP\^) -.sp -int XMinCmapsOfScreen\^(\^\fIscreen\fP\^) -.br - Screen *\fIscreen\fP\^; -.FN -.IP \fIscreen\fP 1i -Specifies the appropriate -.PN Screen -structure. -.LP -.eM -.IN "MinCmapsOfScreen" "" "@DEF@" -.IN "XMinCmapsOfScreen" "" "@DEF@" -Both return the minimum number of installed colormaps supported -by the specified screen (see section 9.3). -.LP -.sp -.sM -.FD 0 -PlanesOfScreen\^(\^\fIscreen\fP\^) -.sp -int XPlanesOfScreen\^(\^\fIscreen\fP\^) -.br - Screen *\fIscreen\fP\^; -.FN -.IP \fIscreen\fP 1i -Specifies the appropriate -.PN Screen -structure. -.LP -.eM -.IN "PlanesOfScreen" "" "@DEF@" -.IN "XPlanesOfScreen" "" "@DEF@" -Both return the depth of the root window. -.LP -.sp -.sM -.FD 0 -RootWindowOfScreen\^(\^\fIscreen\fP\^) -.sp -Window XRootWindowOfScreen\^(\^\fIscreen\fP\^) -.br - Screen *\fIscreen\fP\^; -.FN -.IP \fIscreen\fP 1i -Specifies the appropriate -.PN Screen -structure. -.LP -.eM -.IN "RootWindowOfScreen" "" "@DEF@" -.IN "XRootWindowOfScreen" "" "@DEF@" -Both return the root window of the specified screen. -.NH 2 -Generating a NoOperation Protocol Request -.XS -\*(SN Generating a NoOperation Protocol Request -.XE -.LP -To execute a -.PN NoOperation -protocol request, use -.PN XNoOp . -.IN "XNoOp" "" "@DEF@" -.sM -.FD 0 -XNoOp\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -The -.PN XNoOp -function sends a -.PN NoOperation -protocol request to the X server, -thereby exercising the connection. -.NH 2 -Freeing Client-Created Data -.XS -\*(SN Freeing Client-Created Data -.XE -.LP -To free in-memory data that was created by an Xlib function, use -.PN XFree . -.IN "XFree" "" "@DEF@" -.sM -.FD 0 -XFree\^(\^\fIdata\fP\^) -.br - void *\fIdata\fP\^; -.FN -.IP \fIdata\fP 1i -Specifies the data that is to be freed. -.LP -.eM -The -.PN XFree -function is a general-purpose Xlib routine that frees the specified data. -You must use it to free any objects that were allocated by Xlib, -unless an alternate function is explicitly specified for the object. -A NULL pointer cannot be passed to this function. -.NH 2 -Closing the Display -.XS -\*(SN Closing the Display -.XE -.LP -To close a display or disconnect from the X server, use -.PN XCloseDisplay . -.IN "XCloseDisplay" "" "@DEF@" -.LP -.sM -.FD 0 -XCloseDisplay\^(\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -The -.PN XCloseDisplay -function closes the connection to the X server for the display specified in the -.PN Display -structure and destroys all windows, resource IDs -.Pn ( Window , -.PN Font , -.PN Pixmap , -.PN Colormap , -.PN Cursor , -and -.PN GContext ), -or other resources that the client has created -on this display, unless the close-down mode of the resource has been changed -(see -.PN XSetCloseDownMode ). -Therefore, these windows, resource IDs, and other resources should never be -referenced again or an error will be generated. -Before exiting, you should call -.PN XCloseDisplay -explicitly so that any pending errors are reported as -.PN XCloseDisplay -performs a final -.PN XSync -operation. -.IN "Resource IDs" -.IN "XCloseDisplay" -.LP -.PN XCloseDisplay -can generate a -.PN BadGC -error. -.sp -.LP -Xlib provides a function to permit the resources owned by a client -to survive after the client's connection is closed. -To change a client's close-down mode, use -.PN XSetCloseDownMode . -.IN "XSetCloseDownMode" "" "@DEF@" -.sM -.FD 0 -XSetCloseDownMode\^(\^\fIdisplay\fP, \fIclose_mode\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIclose_mode\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIclose_mode\fP 1i -Specifies the client close-down mode. -You can pass -.PN DestroyAll , -.PN RetainPermanent , -or -.PN RetainTemporary . -.LP -.eM -The -.PN XSetCloseDownMode -defines what will happen to the client's resources at connection close. -A connection starts in -.PN DestroyAll -mode. -For information on what happens to the client's resources when the -close_mode argument is -.PN RetainPermanent -or -.PN RetainTemporary , -see section 2.6. -.LP -.PN XSetCloseDownMode -can generate a -.PN BadValue -error. -.NH 2 -Using X Server Connection Close Operations -.XS -\*(SN Using X Server Connection Close Operations -.XE -.LP -When the X server's connection to a client is closed -either by an explicit call to -.PN XCloseDisplay -or by a process that exits, the X server performs the following -automatic operations: -.IP \(bu 5 -It disowns all selections owned by the client -(see -.PN XSetSelectionOwner ). -.IP \(bu 5 -It performs an -.PN XUngrabPointer -and -.PN XUngrabKeyboard -if the client has actively grabbed the pointer -or the keyboard. -.IP \(bu 5 -It performs an -.PN XUngrabServer -if the client has grabbed the server. -.IP \(bu 5 -It releases all passive grabs made by the client. -.IP \(bu 5 -It marks all resources (including colormap entries) allocated -by the client either as permanent or temporary, -depending on whether the close-down mode is -.PN RetainPermanent -or -.PN RetainTemporary . -However, this does not prevent other client applications from explicitly -destroying the resources (see -.PN XSetCloseDownMode ). -.LP -When the close-down mode is -.PN DestroyAll , -the X server destroys all of a client's resources as follows: -.IP \(bu 5 -It examines each window in the client's save-set to determine if it is an inferior -(subwindow) of a window created by the client. -(The save-set is a list of other clients' windows -that are referred to as save-set windows.) -If so, the X server reparents the save-set window to the closest ancestor so -that the save-set window is not an inferior of a window created by the client. -The reparenting leaves unchanged the absolute coordinates (with respect to -the root window) of the upper-left outer corner of the save-set -window. -.IP \(bu 5 -It performs a -.PN MapWindow -request on the save-set window if the save-set window is unmapped. -The X server does this even if the save-set window was not an inferior of -a window created by the client. -.IP \(bu 5 -It destroys all windows created by the client. -.IP \(bu 5 -It performs the appropriate free request on each nonwindow resource created by -the client in the server (for example, -.PN Font , -.PN Pixmap , -.PN Cursor , -.PN Colormap , -and -.PN GContext ). -.IP \(bu 5 -It frees all colors and colormap entries allocated by a client application. -.LP -Additional processing occurs when the last connection to the X server closes. -An X server goes through a cycle of having no connections and having some -connections. -When the last connection to the X server closes as a result of a connection -closing with the close_mode of -.PN DestroyAll , -the X server does the following: -.IP \(bu 5 -It resets its state as if it had just been -started. -The X server begins by destroying all lingering resources from -clients that have terminated in -.PN RetainPermanent -or -.PN RetainTemporary -mode. -.IP \(bu 5 -It deletes all but the predefined atom identifiers. -.IP \(bu 5 -It deletes all properties on all root windows (see section 4.3). -.IP \(bu 5 -It resets all device maps and attributes -(for example, key click, bell volume, and acceleration) -as well as the access control list. -.IP \(bu 5 -It restores the standard root tiles and cursors. -.IP \(bu 5 -It restores the default font path. -.IP \(bu 5 -It restores the input focus to state -.PN PointerRoot . -.LP -However, the X server does not reset if you close a connection with a close-down -mode set to -.PN RetainPermanent -or -.PN RetainTemporary . -.NH 2 -Using Xlib with Threads -.XS -\*(SN Using Xlib with Threads -.XE -.LP -On systems that have threads, support may be provided to permit -multiple threads to use Xlib concurrently. -.LP -.sp -To initialize support for concurrent threads, use -.PN XInitThreads . -.IN "XInitThreads" "" "@DEF@" -.sM -.FD 0 -Status XInitThreads\^(\|); -.FN -.LP -.eM -The -.PN XInitThreads -function initializes Xlib support for concurrent threads. -This function must be the first Xlib function a -multi-threaded program calls, and it must complete -before any other Xlib call is made. -This function returns a nonzero status if initialization was -successful; otherwise, it returns zero. -On systems that do not support threads, this function always returns zero. -.LP -It is only necessary to call this function if multiple threads -might use Xlib concurrently. If all calls to Xlib functions -are protected by some other access mechanism (for example, -a mutual exclusion lock in a toolkit or through explicit client -programming), Xlib thread initialization is not required. -It is recommended that single-threaded programs not call this function. - -.LP -.sp -To lock a display across several Xlib calls, use -.PN XLockDisplay . -.IN "XLockDisplay" "" "@DEF@" -.sM -.FD 0 -void XLockDisplay\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -The -.PN XLockDisplay -function locks out all other threads from using the specified display. -Other threads attempting to use the display will block until -the display is unlocked by this thread. -Nested calls to -.PN XLockDisplay -work correctly; the display will not actually be unlocked until -.PN XUnlockDisplay -has been called the same number of times as -.PN XLockDisplay . -This function has no effect unless Xlib was successfully initialized -for threads using -.PN XInitThreads . -.LP -.sp -To unlock a display, use -.PN XUnlockDisplay . -.IN "XUnlockDisplay" "" "@DEF@" -.sM -.FD 0 -void XUnlockDisplay\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -The -.PN XUnlockDisplay -function allows other threads to use the specified display again. -Any threads that have blocked on the display are allowed to continue. -Nested locking works correctly; if -.PN XLockDisplay -has been called multiple times by a thread, then -.PN XUnlockDisplay -must be called an equal number of times before the display is -actually unlocked. -This function has no effect unless Xlib was successfully initialized -for threads using -.PN XInitThreads . -.NH 2 -Using Internal Connections -.XS -\*(SN Using Internal Connections -.XE -.LP -In addition to the connection to the X server, an Xlib implementation -may require connections to other kinds of servers (for example, to -input method servers as described in chapter 13). Toolkits and clients -that use multiple displays, or that use displays in combination with -other inputs, need to obtain these additional connections to correctly -block until input is available and need to process that input -when it is available. Simple clients that use a single display and -block for input in an Xlib event function do not need to use these -facilities. -.LP -To track internal connections for a display, use -.PN XAddConnectionWatch . -.LP -.IN "XWatchProc" "" "@DEF@" -.IN "XAddConnectionWatch" "" "@DEF@" -.sM -.FD 0 -typedef void (*XConnectionWatchProc)\^(\^\fIdisplay\fP, \fIclient_data\fP, \fIfd\fP, \fIopening\fP, \fIwatch_data\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XPointer \fIclient_data\fP\^; -.br - int \fIfd\fP\^; -.br - Bool \fIopening\fP\^; -.br - XPointer *\fIwatch_data\fP\^; -.sp -Status XAddConnectionWatch\^(\^\fIdisplay\fP, \fIprocedure\fP\^, \fIclient_data\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XWatchProc \fIprocedure\fP\^; -.br - XPointer \fIclient_data\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIprocedure\fP 1i -Specifies the procedure to be called. -.IP \fIclient_data\fP 1i -Specifies the additional client data. -.LP -.eM -The -.PN XAddConnectionWatch -function registers a procedure to be called each time Xlib opens or closes an -internal connection for the specified display. The procedure is passed the -display, the specified client_data, the file descriptor for the connection, -a Boolean indicating whether the connection is being opened or closed, and a -pointer to a location for private watch data. If opening is -.PN True , -the procedure can store a pointer to private data in the location pointed -to by watch_data; -when the procedure is later called for this same connection and opening is -.PN False , -the location pointed to by watch_data will hold this same private data pointer. -.LP -This function can be called at any time after a display is opened. -If internal connections already exist, the registered procedure will -immediately be called for each of them, before -.PN XAddConnectionWatch -returns. -.PN XAddConnectionWatch -returns a nonzero status if the procedure is successfully registered; -otherwise, it returns zero. -.LP -The registered procedure should not call any Xlib functions. -If the procedure directly or indirectly causes the state of internal -connections or watch procedures to change, the result is not defined. -If Xlib has been initialized for threads, the procedure is called with -the display locked and the result of a call by the procedure to any -Xlib function that locks the display is not defined unless the executing -thread has externally locked the display using -.PN XLockDisplay . -.LP -.sp -To stop tracking internal connections for a display, use -.PN XRemoveConnectionWatch . -.IN "XRemoveConnectionWatch" "" "@DEF@" -.sM -.FD 0 -Status XRemoveConnectionWatch\^(\^\fIdisplay\fP, \fIprocedure\fP\^, \fIclient_data\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XWatchProc \fIprocedure\fP\^; -.br - XPointer \fIclient_data\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIprocedure\fP 1i -Specifies the procedure to be called. -.IP \fIclient_data\fP 1i -Specifies the additional client data. -.LP -.eM -The -.PN XRemoveConnectionWatch -function removes a previously registered connection watch procedure. -The client_data must match the client_data used when the procedure -was initially registered. - -.LP -.sp -To process input on an internal connection, use -.PN XProcessInternalConnection . -.IN "XProcessInternalConnection" "" "@DEF@" -.sM -.FD 0 -void XProcessInternalConnection\^(\^\fIdisplay\fP, \fIfd\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIfd\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIfd\fP 1i -Specifies the file descriptor. -.LP -.eM -The -.PN XProcessInternalConnection -function processes input available on an internal connection. -This function should be called for an internal connection only -after an operating system facility (for example, -.PN select -or -.PN poll ) -has indicated that input is available; otherwise, -the effect is not defined. -.LP -.sp -To obtain all of the current internal connections for a display, use -.PN XInternalConnectionNumbers . -.IN "XInternalConnectionNumbers" "" "@DEF@" -.sM -.FD 0 -Status XInternalConnectionNumbers\^(\^\fIdisplay\fP, \fIfd_return\fP\^, \fIcount_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int **\fIfd_return\fP\^; -.br - int *\fIcount_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIfd_return\fP 1i -Returns the file descriptors. -.ds Cn file descriptors -.IP \fIcount_return\fP 1i -Returns the number of \*(Cn. -.LP -.eM -The -.PN XInternalConnectionNumbers -function returns a list of the file descriptors for all internal -connections currently open for the specified display. -When the allocated list is no longer needed, -free it by using -.PN XFree . -This functions returns a nonzero status if the list is successfully allocated; -otherwise, it returns zero. -.LP -.bp diff --git a/doc/xorg-docs/specs/X11/CH03 b/doc/xorg-docs/specs/X11/CH03 deleted file mode 100644 index f7eb2d4c0..000000000 --- a/doc/xorg-docs/specs/X11/CH03 +++ /dev/null @@ -1,3121 +0,0 @@ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by -.\" Digital Equipment Corporation -.\" -.\" Portions Copyright \(co 1990, 1991 by -.\" Tektronix, Inc. -.\" -.\" Permission to use, copy, modify and distribute this documentation for -.\" any purpose and without fee is hereby granted, provided that the above -.\" copyright notice appears in all copies and that both that copyright notice -.\" and this permission notice appear in all copies, and that the names of -.\" Digital and Tektronix not be used in in advertising or publicity pertaining -.\" to this documentation without specific, written prior permission. -.\" Digital and Tektronix makes no representations about the suitability -.\" of this documentation for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBChapter 3\fP\s-1 - -\s+1\fBWindow Functions\fP\s-1 -.sp 2 -.nr H1 3 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.na -.LP -.XS -Chapter 3: Window Functions -.XE -In the X Window System, -a window is a rectangular area on the screen that lets you -view graphic output. -Client applications -can display overlapping and nested windows on one or more -screens that are driven by X servers on one or more machines. -Clients who want to create windows must first -connect their program to the X server -by calling -.PN XOpenDisplay . -This chapter begins with a discussion of -visual types and window attributes. -The chapter continues with a discussion of the Xlib functions you can use to: -.IP \(bu 5 -Create windows -.IP \(bu 5 -Destroy windows -.IP \(bu 5 -Map windows -.IP \(bu 5 -Unmap windows -.IP \(bu 5 -Configure windows -.IP \(bu 5 -Change window stacking order -.IP \(bu 5 -Change window attributes -.LP -This chapter also identifies the window actions that may generate events. -.LP -Note that it is vital that your application conform to the -established conventions for communicating with window managers -for it to work well with the various window managers in use (see section 14.1). -Toolkits generally adhere to these conventions for you, -relieving you of the burden. -Toolkits also often supersede many functions in this chapter -with versions of their own. -For more information, -refer to the documentation for the toolkit that you are using. -.NH 2 -Visual Types -.XS -\*(SN Visual Types -.XE -.LP -.IN "Visual Type" "" "@DEF@" -On some display hardware, -it may be possible to deal with color resources in more than one way. -For example, you may be able to deal with a screen of either 12-bit depth -with arbitrary mapping of pixel to color (pseudo-color) or 24-bit depth -with 8 bits of the pixel dedicated to each of red, green, and blue. -These different ways of dealing with the visual aspects of the screen -are called visuals. -For each screen of the display, there may be a list of valid visual types -supported at different depths of the screen. -Because default windows and visual types are defined for each screen, -most simple applications need not deal with this complexity. -Xlib provides macros and functions that return the default root window, -the default depth of the default root window, and the default visual type -(see sections 2.2.1 and 16.7). -.LP -Xlib uses an opaque -.PN Visual -.IN "Visual" "" "@DEF@" -structure that contains information about the possible color mapping. -The visual utility functions (see section 16.7) use an -.PN XVisualInfo -structure to return this information to an application. -The members of this structure pertinent to this discussion are class, red_mask, -green_mask, blue_mask, bits_per_rgb, and colormap_size. -The class member specifies one of the possible visual classes of the screen -and can be -.IN "Visual Classes" "StaticGray" -.IN "Visual Classes" "StaticColor" -.IN "Visual Classes" "TrueColor" -.IN "Visual Classes" "StaticColor" -.IN "Visual Classes" "GrayScale" -.IN "Visual Classes" "PseudoColor" -.PN StaticGray , -.PN StaticColor , -.PN TrueColor , -.PN GrayScale , -.PN PseudoColor , -or -.PN DirectColor . -.LP -The following concepts may serve to make the explanation of -visual types clearer. -The screen can be color or grayscale, -can have a colormap that is writable or read-only, -and can also have a colormap whose indices are decomposed into separate -RGB pieces, provided one is not on a grayscale screen. -This leads to the following diagram: -.LP -.DS -.TS -center; - c c s c s - c c c c c -| c | c | c | c | c |. - Color Gray-scale - R/O R/W R/O R/W -_ -Undecomposed Static Pseudo Static Gray -Colormap Color Color Gray Scale -_ -.T& -| c | c | c |. -Decomposed True Direct -Colormap Color Color -_ _ _ -.TE -.DE -.LP -Conceptually, -as each pixel is read out of video memory for display on the screen, -it goes through a look-up stage by indexing into a colormap. -Colormaps can be manipulated arbitrarily on some hardware, -in limited ways on other hardware, and not at all on other hardware. -The visual types affect the colormap and -the RGB values in the following ways: -.LP -.IP \(bu 5 -For -.PN PseudoColor , -a pixel value indexes a colormap to produce -independent RGB values, and the RGB values can be changed dynamically. -.IP \(bu 5 -.PN GrayScale -is treated the same way as -.PN PseudoColor -except that the primary that drives the screen is undefined. -Thus, the client should always store the -same value for red, green, and blue in the colormaps. -.IP \(bu 5 -For -.PN DirectColor , -a pixel value is decomposed into separate RGB subfields, and each -subfield separately indexes the colormap for the corresponding value. -The RGB values can be changed dynamically. -.IP \(bu 5 -.PN TrueColor -is treated the same way as -.PN DirectColor -except that the colormap has predefined, read-only RGB values. -These RGB values are server dependent but provide linear or near-linear -ramps in each primary. -.IP \(bu 5 -.PN StaticColor -is treated the same way as -.PN PseudoColor -except that the colormap has predefined, -read-only, server-dependent RGB values. -.IP \(bu 5 -.PN StaticGray -is treated the same way as -.PN StaticColor -except that the RGB values are equal for any single pixel -value, thus resulting in shades of gray. -.PN StaticGray -with a two-entry -colormap can be thought of as monochrome. -.LP -The red_mask, green_mask, and blue_mask members are only defined for -.PN DirectColor -and -.PN TrueColor . -Each has one contiguous set of bits with no -intersections. -The bits_per_rgb member specifies the log base 2 of the -number of distinct color values (individually) of red, green, and blue. -Actual RGB values are unsigned 16-bit numbers. -The colormap_size member defines the number of available colormap entries -in a newly created colormap. -For -.PN DirectColor -and -.PN TrueColor , -this is the size of an individual pixel subfield. -.sp -.LP -To obtain the visual ID from a -.PN Visual , -use -.PN XVisualIDFromVisual . -.IN "XVisualIDFromVisual" "" "@DEF@" -.sM -.FD 0 -VisualID XVisualIDFromVisual\^(\^\fIvisual\fP\^) -.br - Visual *\^\fIvisual\fP\^; -.FN -.IP \fIvisual\fP 1i -Specifies the visual type. -.LP -.eM -The -.PN XVisualIDFromVisual -function returns the visual ID for the specified visual type. -.NH 2 -Window Attributes -.XS -\*(SN Window Attributes -.XE -.LP -.IN "Window" -.IN "Window" "attributes" -All -.PN InputOutput -windows have a border width of zero or more pixels, an optional background, -an event suppression mask (which suppresses propagation of events from -children), and a property list (see section 4.3). -The window border and background can be a solid color or a pattern, called -a tile. -All windows except the root have a parent and are clipped by their parent. -If a window is stacked on top of another window, it obscures that other -window for the purpose of input. -If a window has a background (almost all do), it obscures the other -window for purposes of output. -Attempts to output to the obscured area do nothing, -and no input events (for example, pointer motion) are generated for the -obscured area. -.LP -Windows also have associated property lists (see section 4.3). -.LP -Both -.PN InputOutput -and -.PN InputOnly -windows have the following common attributes, -which are the only attributes of an -.PN InputOnly -window: -.IP \(bu 5 -win-gravity -.IP \(bu 5 -event-mask -.IP \(bu 5 -do-not-propagate-mask -.IP \(bu 5 -override-redirect -.IP \(bu 5 -cursor -.LP -If you specify any other attributes for an -.PN InputOnly -window, -a -.PN BadMatch -error results. -.LP -.PN InputOnly -windows are used for controlling input events in situations where -.PN InputOutput -windows are unnecessary. -.PN InputOnly -windows are invisible; can only be used to control such things as -cursors, input event generation, and grabbing; -and cannot be used in any graphics requests. -Note that -.PN InputOnly -windows cannot have -.PN InputOutput -windows as inferiors. -.LP -Windows have borders of a programmable width and pattern -as well as a background pattern or tile. -.IN "Tile" "pixmaps" -Pixel values can be used for solid colors. -.IN "Resource IDs" "freeing" -.IN "Freeing" "resources" -The background and border pixmaps can be destroyed immediately after -creating the window if no further explicit references to them -are to be made. -.IN "Tile" "mode" -The pattern can either be relative to the parent -or absolute. -If -.PN ParentRelative , -the parent's background is used. -.LP -When windows are first created, -they are not visible (not mapped) on the screen. -Any output to a window that is not visible on the screen -and that does not have backing store will be discarded. -.IN "Window" "mapping" -An application may wish to create a window long before it is -mapped to the screen. -When a window is eventually mapped to the screen -(using -.PN XMapWindow ), -.IN "XMapWindow" -the X server generates an -.PN Expose -event for the window if backing store has not been maintained. -.LP -A window manager can override your choice of size, -border width, and position for a top-level window. -Your program must be prepared to use the actual size and position -of the top window. -It is not acceptable for a client application to resize itself -unless in direct response to a human command to do so. -Instead, either your program should use the space given to it, -or if the space is too small for any useful work, your program -might ask the user to resize the window. -The border of your top-level window is considered fair game -for window managers. -.LP -To set an attribute of a window, -set the appropriate member of the -.PN XSetWindowAttributes -structure and OR in the corresponding value bitmask in your subsequent calls to -.PN XCreateWindow -and -.PN XChangeWindowAttributes , -or use one of the other convenience functions that set the appropriate -attribute. -The symbols for the value mask bits and the -.PN XSetWindowAttributes -structure are: -.sM -.LP -/* Window attribute value mask bits */ -.TS -lw(.5i) lw(2.5i) lw(.8i). -T{ -#define -T} T{ -.PN CWBackPixmap -T} T{ -(1L<<0) -T} -T{ -#define -T} T{ -.PN CWBackPixel -T} T{ -(1L<<1) -T} -T{ -#define -T} T{ -.PN CWBorderPixmap -T} T{ -(1L<<2) -T} -T{ -#define -T} T{ -.PN CWBorderPixel -T} T{ -(1L<<3) -T} -T{ -#define -T} T{ -.PN CWBitGravity -T} T{ -(1L<<4) -T} -T{ -#define -T} T{ -.PN CWWinGravity -T} T{ -(1L<<5) -T} -T{ -#define -T} T{ -.PN CWBackingStore -T} T{ -(1L<<6) -T} -T{ -#define -T} T{ -.PN CWBackingPlanes -T} T{ -(1L<<7) -T} -T{ -#define -T} T{ -.PN CWBackingPixel -T} T{ -(1L<<8) -T} -T{ -#define -T} T{ -.PN CWOverrideRedirect -T} T{ -(1L<<9) -T} -T{ -#define -T} T{ -.PN CWSaveUnder -T} T{ -(1L<<10) -T} -T{ -#define -T} T{ -.PN CWEventMask -T} T{ -(1L<<11) -T} -T{ -#define -T} T{ -.PN CWDontPropagate -T} T{ -(1L<<12) -T} -T{ -#define -T} T{ -.PN CWColormap -T} T{ -(1L<<13) -T} -T{ -#define -T} T{ -.PN CWCursor -T} T{ -(1L<<14) -T} -.TE -.IN "XSetWindowAttributes" "" "@DEF@" -.Ds 0 -.TA .5i 3i -.ta .5i 3i -/* Values */ - -typedef struct { - Pixmap background_pixmap; /* background, None, or ParentRelative */ - unsigned long background_pixel; /* background pixel */ - Pixmap border_pixmap; /* border of the window or CopyFromParent */ - unsigned long border_pixel; /* border pixel value */ - int bit_gravity; /* one of bit gravity values */ - int win_gravity; /* one of the window gravity values */ - int backing_store; /* NotUseful, WhenMapped, Always */ - unsigned long backing_planes; /* planes to be preserved if possible */ - unsigned long backing_pixel; /* value to use in restoring planes */ - Bool save_under; /* should bits under be saved? (popups) */ - long event_mask; /* set of events that should be saved */ - long do_not_propagate_mask; /* set of events that should not propagate */ - Bool override_redirect; /* boolean value for override_redirect */ - Colormap colormap; /* color map to be associated with window */ - Cursor cursor; /* cursor to be displayed (or None) */ -} XSetWindowAttributes; -.De -.LP -.eM -The following lists the defaults for each window attribute and indicates -whether the attribute is applicable to -.PN InputOutput -and -.PN InputOnly -windows: -.TS H -l l l l -lw(1.4i) lw(1.3i) cw(.9i) cw(.8i). -_ -.sp 6p -T{ -.B Attribute -T} T{ -.B Default -T} T{ -.PN InputOutput -T} T{ -.PN InputOnly -T} -.sp 6p -_ -.sp 6p -.TH -.R -T{ -background-pixmap -T} T{ -.PN None -T} T{ -Yes -T} T{ -No -T} -background-pixel Undefined Yes No -T{ -border-pixmap -T} T{ -.PN CopyFromParent -T} T{ -Yes -T} T{ -No -T} -border-pixel Undefined Yes No -T{ -bit-gravity -T} T{ -.PN ForgetGravity -T} T{ -Yes -T} T{ -No -T} -T{ -win-gravity -T} T{ -.PN NorthWestGravity -T} T{ -Yes -T} T{ -Yes -T} -T{ -backing-store -T} T{ -.PN NotUseful -T} T{ -Yes -T} T{ -No -T} -backing-planes All ones Yes No -backing-pixel zero Yes No -T{ -save-under -T} T{ -.PN False -T} T{ -Yes -T} T{ -No -T} -event-mask empty set Yes Yes -do-not-propagate-mask empty set Yes Yes -T{ -override-redirect -T} T{ -.PN False -T} T{ -Yes -T} T{ -Yes -T} -T{ -colormap -T} T{ -.PN CopyFromParent -T} T{ -Yes -T} T{ -No -T} -T{ -cursor -T} T{ -.PN None -T} T{ -Yes -T} T{ -Yes -T} -_ -.TE -.NH 3 -Background Attribute -.XS -\*(SN Background Attribute -.XE -.LP -Only -.PN InputOutput -windows can have a background. -You can set the background of an -.PN InputOutput -window by using a pixel or a pixmap. -.LP -The background-pixmap attribute of a window specifies the pixmap to be used for -a window's background. -This pixmap can be of any size, although some sizes may be faster than others. -The background-pixel attribute of a window specifies a pixel value used to paint -a window's background in a single color. -.LP -You can set the background-pixmap to a pixmap, -.PN None -(default), or -.PN ParentRelative . -You can set the background-pixel of a window to any pixel value (no default). -If you specify a background-pixel, -it overrides either the default background-pixmap -or any value you may have set in the background-pixmap. -A pixmap of an undefined size that is filled with the background-pixel is used -for the background. -Range checking is not performed on the background pixel; -it simply is truncated to the appropriate number of bits. -.LP -If you set the background-pixmap, -it overrides the default. -The background-pixmap and the window must have the same depth, -or a -.PN BadMatch -error results. -If you set background-pixmap to -.PN None , -the window has no defined background. -If you set the background-pixmap to -.PN ParentRelative : -.IP \(bu 5 -The parent window's background-pixmap is used. -The child window, however, must have the same depth as -its parent, -or a -.PN BadMatch -error results. -.IP \(bu 5 -If the parent window has a background-pixmap of -.PN None , -the window also has a background-pixmap of -.PN None . -.IP \(bu 5 -A copy of the parent window's background-pixmap is not made. -The parent's background-pixmap is examined each time the child window's -background-pixmap is required. -.IP \(bu 5 -The background tile origin always aligns with the parent window's -background tile origin. -If the background-pixmap is not -.PN ParentRelative , -the background tile origin is the child window's origin. -.LP -Setting a new background, whether by setting background-pixmap or -background-pixel, overrides any previous background. -The background-pixmap can be freed immediately if no further explicit reference -is made to it (the X server will keep a copy to use when needed). -If you later draw into the pixmap used for the background, -what happens is undefined because the -X implementation is free to make a copy of the pixmap or -to use the same pixmap. -.LP -When no valid contents are available for regions of a window -and either the regions are visible or the server is maintaining backing store, -the server automatically tiles the regions with the window's background -unless the window has a background of -.PN None . -If the background is -.PN None , -the previous screen contents from other windows of the same depth as the window -are simply left in place as long as the contents come from the parent of the -window or an inferior of the parent. -Otherwise, the initial contents of the exposed regions are undefined. -.PN Expose -events are then generated for the regions, even if the background-pixmap -is -.PN None -(see section 10.9). -.NH 3 -Border Attribute -.XS -\*(SN Border Attribute -.XE -.LP -Only -.PN InputOutput -windows can have a border. -You can set the border of an -.PN InputOutput -window by using a pixel or a pixmap. -.LP -The border-pixmap attribute of a window specifies the pixmap to be used -for a window's border. -The border-pixel attribute of a window specifies a pixmap of undefined size -filled with that pixel be used for a window's border. -Range checking is not performed on the background pixel; -it simply is truncated to the appropriate number of bits. -The border tile origin is always the same as the background tile origin. -.LP -You can also set the border-pixmap to a pixmap of any size (some may be faster -than others) or to -.PN CopyFromParent -(default). -You can set the border-pixel to any pixel value (no default). -.LP -If you set a border-pixmap, -it overrides the default. -The border-pixmap and the window must have the same depth, -or a -.PN BadMatch -error results. -If you set the border-pixmap to -.PN CopyFromParent , -the parent window's border-pixmap is copied. -Subsequent changes to the parent window's border attribute do not affect -the child window. -However, the child window must have the same depth as the parent window, -or a -.PN BadMatch -error results. -.LP -The border-pixmap can be freed immediately if no further explicit reference -is made to it. -If you later draw into the pixmap used for the border, -what happens is undefined because the -X implementation is free either to make a copy of the pixmap or -to use the same pixmap. -If you specify a border-pixel, -it overrides either the default border-pixmap -or any value you may have set in the border-pixmap. -All pixels in the window's border will be set to the border-pixel. -Setting a new border, whether by setting border-pixel or by setting -border-pixmap, overrides any previous border. -.LP -Output to a window is always clipped to the inside of the window. -Therefore, graphics operations never affect the window border. -.NH 3 -Gravity Attributes -.XS -\*(SN Gravity Attributes -.XE -.LP -The bit gravity of a window defines which region of the window should be -retained when an -.PN InputOutput -window is resized. -The default value for the bit-gravity attribute is -.PN ForgetGravity . -The window gravity of a window allows you to define how the -.PN InputOutput -or -.PN InputOnly -window should be repositioned if its parent is resized. -The default value for the win-gravity attribute is -.PN NorthWestGravity . -.LP -If the inside width or height of a window is not changed -and if the window is moved or its border is changed, -then the contents of the window are not lost but move with the window. -Changing the inside width or height of the window causes its contents to be -moved or lost (depending on the bit-gravity of the window) and causes -children to be reconfigured (depending on their win-gravity). -For a -change of width and height, the (x, y) pairs are defined: -.LP -.TS -l l -l l. -_ -.sp 6p -.B -Gravity Direction Coordinates -.sp 6p -_ -.sp 6p -.R -T{ -.PN NorthWestGravity -T} T{ -(0, 0) -T} -T{ -.PN NorthGravity -T} T{ -(Width/2, 0) -T} -T{ -.PN NorthEastGravity -T} T{ -(Width, 0) -T} -T{ -.PN WestGravity -T} T{ -(0, Height/2) -T} -T{ -.PN CenterGravity -T} T{ -(Width/2, Height/2) -T} -T{ -.PN EastGravity -T} T{ -(Width, Height/2) -T} -T{ -.PN SouthWestGravity -T} T{ -(0, Height) -T} -T{ -.PN SouthGravity -T} T{ -(Width/2, Height) -T} -T{ -.PN SouthEastGravity -T} T{ -(Width, Height) -T} -.sp 6p -_ -.TE -.LP -When a window with one of these bit-gravity values is resized, -the corresponding pair -defines the change in position of each pixel in the window. -When a window with one of these win-gravities has its parent window resized, -the corresponding pair defines the change in position of the window -within the parent. -When a window is so repositioned, a -.PN GravityNotify -event is generated (see section 10.10.5). -.LP -A bit-gravity of -.PN StaticGravity -indicates that the contents or origin should not move relative to the -origin of the root window. -If the change in size of the window is coupled with a change in position (x, y), -then for bit-gravity the change in position of each pixel is (\-x, \-y), and for -win-gravity the change in position of a child when its parent is so resized is -(\-x, \-y). -Note that -.PN StaticGravity -still only takes effect when the width or height of the window is changed, -not when the window is moved. -.LP -A bit-gravity of -.PN ForgetGravity -indicates that the window's contents are always discarded after a size change, -even if a backing store or save under has been requested. -The window is tiled with its background -and zero or more -.PN Expose -events are generated. -If no background is defined, the existing screen contents are not -altered. -Some X servers may also ignore the specified bit-gravity and -always generate -.PN Expose -events. -.LP -The contents and borders of inferiors are not affected by their parent's -bit-gravity. -A server is permitted to ignore the specified bit-gravity and use -.PN Forget -instead. -.LP -A win-gravity of -.PN UnmapGravity -is like -.PN NorthWestGravity -(the window is not moved), -except the child is also -unmapped when the parent is resized, -and an -.PN UnmapNotify -event is -generated. -.NH 3 -Backing Store Attribute -.XS -\*(SN Backing Store Attribute -.XE -.LP -Some implementations of the X server may choose to maintain the contents of -.PN InputOutput -windows. -If the X server maintains the contents of a window, -the off-screen saved pixels -are known as backing store. -The backing store advises the X server on what to do -with the contents of a window. -The backing-store attribute can be set to -.PN NotUseful -(default), -.PN WhenMapped , -or -.PN Always . -.LP -A backing-store attribute of -.PN NotUseful -advises the X server that -maintaining contents is unnecessary, -although some X implementations may -still choose to maintain contents and, therefore, not generate -.PN Expose -events. -A backing-store attribute of -.PN WhenMapped -advises the X server that maintaining contents of -obscured regions when the window is mapped would be beneficial. -In this case, -the server may generate an -.PN Expose -event when the window is created. -A backing-store attribute of -.PN Always -advises the X server that maintaining contents even when -the window is unmapped would be beneficial. -Even if the window is larger than its parent, -this is a request to the X server to maintain complete contents, -not just the region within the parent window boundaries. -While the X server maintains the window's contents, -.PN Expose -events normally are not generated, -but the X server may stop maintaining -contents at any time. -.LP -When the contents of obscured regions of a window are being maintained, -regions obscured by noninferior windows are included in the destination -of graphics requests (and source, when the window is the source). -However, regions obscured by inferior windows are not included. -.NH 3 -Save Under Flag -.XS -\*(SN Save Under Flag -.XE -.IN "Save Unders" -.LP -Some server implementations may preserve contents of -.PN InputOutput -windows under other -.PN InputOutput -windows. -This is not the same as preserving the contents of a window for you. -You may get better visual -appeal if transient windows (for example, pop-up menus) request that the system -preserve the screen contents under them, -so the temporarily obscured applications do not have to repaint. -.LP -You can set the save-under flag to -.PN True -or -.PN False -(default). -If save-under is -.PN True , -the X server is advised that, when this window is mapped, -saving the contents of windows it obscures would be beneficial. -.NH 3 -Backing Planes and Backing Pixel Attributes -.XS -\*(SN Backing Planes and Backing Pixel Attributes -.XE -.LP -You can set backing planes to indicate (with bits set to 1) -which bit planes of an -.PN InputOutput -window hold dynamic data that must be preserved in backing store -and during save unders. -The default value for the backing-planes attribute is all bits set to 1. -You can set backing pixel to specify what bits to use in planes not -covered by backing planes. -The default value for the backing-pixel attribute is all bits set to 0. -The X server is free to save only the specified bit planes in the backing store -or the save under and is free to regenerate the remaining planes with -the specified pixel value. -Any extraneous bits in these values (that is, those bits beyond -the specified depth of the window) may be simply ignored. -If you request backing store or save unders, -you should use these members to minimize the amount of off-screen memory -required to store your window. -.NH 3 -Event Mask and Do Not Propagate Mask Attributes -.XS -\*(SN Event Mask and Do Not Propagate Mask Attributes -.XE -.LP -The event mask defines which events the client is interested in for this -.PN InputOutput -or -.PN InputOnly -window (or, for some event types, inferiors of this window). -The event mask is the bitwise inclusive OR of zero or more of the -valid event mask bits. -You can specify that no maskable events are reported by setting -.PN NoEventMask -(default). -.LP -The do-not-propagate-mask attribute -defines which events should not be propagated to -ancestor windows when no client has the event type selected in this -.PN InputOutput -or -.PN InputOnly -window. -The do-not-propagate-mask is the bitwise inclusive OR of zero or more -of the following masks: -.PN KeyPress , -.PN KeyRelease , -.PN ButtonPress , -.PN ButtonRelease , -.PN PointerMotion , -.PN Button1Motion , -.PN Button2Motion , -.PN Button3Motion , -.PN Button4Motion , -.PN Button5Motion , -and -.PN ButtonMotion . -You can specify that all events are propagated by setting -.PN NoEventMask -(default). -.NH 3 -Override Redirect Flag -.XS -\*(SN Override Redirect Flag -.XE -.LP -To control window placement or to add decoration, -a window manager often needs to intercept (redirect) any map or configure -request. -Pop-up windows, however, often need to be mapped without a window manager -getting in the way. -To control whether an -.PN InputOutput -or -.PN InputOnly -window is to ignore these structure control facilities, -use the override-redirect flag. -.LP -The override-redirect flag specifies whether map and configure requests -on this window should override a -.PN SubstructureRedirectMask -on the parent. -You can set the override-redirect flag to -.PN True -or -.PN False -(default). -Window managers use this information to avoid tampering with pop-up windows -(see also chapter 14). -.NH 3 -Colormap Attribute -.XS -\*(SN Colormap Attribute -.XE -.LP -The colormap attribute specifies which colormap best reflects the true -colors of the -.PN InputOutput -window. -The colormap must have the same visual type as the window, -or a -.PN BadMatch -error results. -X servers capable of supporting multiple -hardware colormaps can use this information, -and window managers can use it for calls to -.PN XInstallColormap . -You can set the colormap attribute to a colormap or to -.PN CopyFromParent -(default). -.LP -If you set the colormap to -.PN CopyFromParent , -the parent window's colormap is copied and used by its child. -However, the child window must have the same visual type as the parent, -or a -.PN BadMatch -error results. -The parent window must not have a colormap of -.PN None , -or a -.PN BadMatch -error results. -The colormap is copied by sharing the colormap object between the child -and parent, not by making a complete copy of the colormap contents. -Subsequent changes to the parent window's colormap attribute do -not affect the child window. -.NH 3 -Cursor Attribute -.XS -\*(SN Cursor Attribute -.XE -.LP -The cursor attribute specifies which cursor is to be used when the pointer is -in the -.PN InputOutput -or -.PN InputOnly -window. -You can set the cursor to a cursor or -.PN None -(default). -.LP -If you set the cursor to -.PN None , -the parent's cursor is used when the -pointer is in the -.PN InputOutput -or -.PN InputOnly -window, and any change in the parent's cursor will cause an -immediate change in the displayed cursor. -By calling -.PN XFreeCursor , -the cursor can be freed immediately as long as no further explicit reference -to it is made. -.NH 2 -Creating Windows -.XS -\*(SN Creating Windows -.XE -.LP -Xlib provides basic ways for creating windows, -and toolkits often supply higher-level functions specifically for -creating and placing top-level windows, -which are discussed in the appropriate toolkit documentation. -If you do not use a toolkit, however, -you must provide some standard information or hints for the window -manager by using the Xlib inter-client communication functions -(see chapter 14). -.LP -If you use Xlib to create your own top-level windows -(direct children of the root window), -you must observe the following rules so that all applications interact -reasonably across the different styles of window management: -.IP \(bu 5 -You must never fight with the window manager for the size or -placement of your top-level window. -.IP \(bu 5 -You must be able to deal with whatever size window you get, -even if this means that your application just prints a message -like ``Please make me bigger'' in its window. -.IP \(bu 5 -You should only attempt to resize or move top-level windows in -direct response to a user request. -If a request to change the size of a top-level window fails, -you must be prepared to live with what you get. -You are free to resize or move the children of top-level -windows as necessary. -(Toolkits often have facilities for automatic relayout.) -.IP \(bu 5 -If you do not use a toolkit that automatically sets standard window properties, -you should set these properties for top-level windows before mapping them. -.LP -For further information, -see chapter 14 and the \fIInter-Client Communication Conventions Manual\fP. -.LP -.PN XCreateWindow -is the more general function that allows you to set specific window attributes -when you create a window. -.PN XCreateSimpleWindow -creates a window that inherits its attributes from its parent window. -.LP -.IN "Window" "InputOnly" -The X server acts as if -.PN InputOnly -windows do not exist for -the purposes of graphics requests, exposure processing, and -.PN VisibilityNotify -events. -An -.PN InputOnly -window cannot be used as a -drawable (that is, as a source or destination for graphics requests). -.PN InputOnly -and -.PN InputOutput -windows act identically in other respects (properties, -grabs, input control, and so on). -Extension packages can define other classes of windows. -.LP -To create an unmapped window and set its window attributes, use -.PN XCreateWindow . -.IN "XCreateWindow" "" "@DEF@" -.sM -.FD 0 -Window XCreateWindow\^(\^\fIdisplay\fP, \fIparent\fP\^, \fIx\fP\^, \fIy\fP\^, \fIwidth\fP\^, \fIheight\fP\^, \fIborder_width\fP\^, \fIdepth\fP\^, -.br - \fIclass\fP\^, \fIvisual\fP\^, \fIvaluemask\fP\^, \fIattributes\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIparent\fP\^; -.br - int \fIx\fP\^, \fIy\fP\^; -.br - unsigned int \fIwidth\fP\^, \fIheight\fP\^; -.br - unsigned int \fIborder_width\fP\^; -.br - int \fIdepth\fP\^; -.br - unsigned int \fIclass\fP\^; -.br - Visual *\fIvisual\fP\^; -.br - unsigned long \fIvaluemask\fP\^; -.br - XSetWindowAttributes *\fIattributes\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIparent\fP 1i -Specifies the parent window. -.ds Xy , which are the top-left outside corner of the created window's \ -borders and are relative to the inside of the parent window's borders -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the x and y coordinates\*(Xy. -.ds Wh , which are the created window's inside dimensions \ -and do not include the created window's borders -.IP \fIwidth\fP 1i -.br -.ns -.IP \fIheight\fP 1i -Specify the width and height\*(Wh. -The dimensions must be nonzero, -or a -.PN BadValue -error results. -.IP \fIborder_width\fP 1i -Specifies the width of the created window's border in pixels. -.IP \fIdepth\fP 1i -Specifies the window's depth. -A depth of -.PN CopyFromParent -means the depth is taken from the parent. -.IP \fIclass\fP 1i -Specifies the created window's class. -You can pass -.PN InputOutput , -.PN InputOnly , -or -.PN CopyFromParent . -A class of -.PN CopyFromParent -means the class -is taken from the parent. -.IP \fIvisual\fP 1i -Specifies the visual type. -A visual of -.PN CopyFromParent -means the visual type is taken from the -parent. -.IP \fIvaluemask\fP 1i -Specifies which window attributes are defined in the attributes -argument. -This mask is the bitwise inclusive OR of the valid attribute mask bits. -If valuemask is zero, -the attributes are ignored and are not referenced. -.IP \fIattributes\fP 1i -Specifies the structure from which the values (as specified by the value mask) -are to be taken. -The value mask should have the appropriate bits -set to indicate which attributes have been set in the structure. -.LP -.eM -The -.PN XCreateWindow -function creates an unmapped subwindow for a specified parent window, -returns the window ID of the created window, -and causes the X server to generate a -.PN CreateNotify -event. -The created window is placed on top in the stacking order -with respect to siblings. -.LP -The coordinate system has the X axis horizontal and the Y axis vertical -with the origin [0, 0] at the upper-left corner. -Coordinates are integral, -in terms of pixels, -and coincide with pixel centers. -Each window and pixmap has its own coordinate system. -For a window, -the origin is inside the border at the inside, upper-left corner. -.LP -The border_width for an -.PN InputOnly -window must be zero, or a -.PN BadMatch -error results. -For class -.PN InputOutput , -the visual type and depth must be a combination supported for the screen, -or a -.PN BadMatch -error results. -The depth need not be the same as the parent, -but the parent must not be a window of class -.PN InputOnly , -or a -.PN BadMatch -error results. -For an -.PN InputOnly -window, -the depth must be zero, and the visual must be one supported by the screen. -If either condition is not met, -a -.PN BadMatch -error results. -The parent window, however, may have any depth and class. -If you specify any invalid window attribute for a window, a -.PN BadMatch -error results. -.LP -The created window is not yet displayed (mapped) on the user's display. -To display the window, call -.PN XMapWindow . -The new window initially uses the same cursor as -its parent. -A new cursor can be defined for the new window by calling -.PN XDefineCursor . -.IN "Cursor" "Initial State" -.IN "XDefineCursor" -The window will not be visible on the screen unless it and all of its -ancestors are mapped and it is not obscured by any of its ancestors. -.LP -.PN XCreateWindow -can generate -.PN BadAlloc , -.PN BadColor , -.PN BadCursor , -.PN BadMatch , -.PN BadPixmap , -.PN BadValue , -and -.PN BadWindow -errors. -.LP -.sp -To create an unmapped -.PN InputOutput -subwindow of a given parent window, use -.PN XCreateSimpleWindow . -.IN "XCreateSimpleWindow" "" "@DEF@" -.sM -.FD 0 -Window XCreateSimpleWindow\^(\^\fIdisplay\fP, \fIparent\fP\^, \fIx\fP\^, \fIy\fP\^, \fIwidth\fP\^, \fIheight\fP\^, \fIborder_width\fP\^, -.br - \fIborder\fP\^, \fIbackground\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIparent\fP\^; -.br - int \fIx\fP\^, \fIy\fP\^; -.br - unsigned int \fIwidth\fP\^, \fIheight\fP\^; -.br - unsigned int \fIborder_width\fP\^; -.br - unsigned long \fIborder\fP\^; -.br - unsigned long \fIbackground\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIparent\fP 1i -Specifies the parent window. -.ds Xy , which are the top-left outside corner of the new window's borders \ -and are relative to the inside of the parent window's borders -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the x and y coordinates\*(Xy. -.ds Wh , which are the created window's inside dimensions \ -and do not include the created window's borders -.IP \fIwidth\fP 1i -.br -.ns -.IP \fIheight\fP 1i -Specify the width and height\*(Wh. -The dimensions must be nonzero, -or a -.PN BadValue -error results. -.IP \fIborder_width\fP 1i -Specifies the width of the created window's border in pixels. -.IP \fIborder\fP 1i -Specifies the border pixel value of the window. -.IP \fIbackground\fP 1i -Specifies the background pixel value of the window. - -.LP -.eM -The -.PN XCreateSimpleWindow -function creates an unmapped -.PN InputOutput -subwindow for a specified parent window, returns the -window ID of the created window, and causes the X server to generate a -.PN CreateNotify -event. -The created window is placed on top in the stacking order with respect to -siblings. -Any part of the window that extends outside its parent window is clipped. -The border_width for an -.PN InputOnly -window must be zero, or a -.PN BadMatch -error results. -.PN XCreateSimpleWindow -inherits its depth, class, and visual from its parent. -All other window attributes, except background and border, -have their default values. -.LP -.PN XCreateSimpleWindow -can generate -.PN BadAlloc , -.PN BadMatch , -.PN BadValue , -and -.PN BadWindow -errors. -.NH 2 -Destroying Windows -.XS -\*(SN Destroying Windows -.XE -.LP -Xlib provides functions that you can use to destroy a window or destroy all -subwindows of a window. -.LP -.sp -To destroy a window and all of its subwindows, use -.PN XDestroyWindow . -.IN "XDestroyWindow" "" "@DEF@" -.sM -.FD 0 -XDestroyWindow\^(\^\fIdisplay\fP, \fIw\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.LP -.eM -The -.PN XDestroyWindow -function destroys the specified window as well as all of its subwindows and causes -the X server to generate a -.PN DestroyNotify -event for each window. -The window should never be referenced again. -If the window specified by the w argument is mapped, -it is unmapped automatically. -The ordering of the -.PN DestroyNotify -events is such that for any given window being destroyed, -.PN DestroyNotify -is generated on any inferiors of the window before being generated on -the window itself. -The ordering among siblings and across subhierarchies is not otherwise -constrained. -If the window you specified is a root window, no windows are destroyed. -Destroying a mapped window will generate -.PN Expose -events on other windows that were obscured by the window being destroyed. -.LP -.PN XDestroyWindow -can generate a -.PN BadWindow -error. -.LP -.sp -To destroy all subwindows of a specified window, use -.PN XDestroySubwindows . -.IN "XDestroySubwindows" "" "@DEF@" -.sM -.FD 0 -XDestroySubwindows\^(\^\fIdisplay\fP, \fIw\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.LP -.eM -The -.PN XDestroySubwindows -function destroys all inferior windows of the specified window, -in bottom-to-top stacking order. -It causes the X server to generate a -.PN DestroyNotify -event for each window. -If any mapped -subwindows were actually destroyed, -.PN XDestroySubwindows -causes the X server to generate -.PN Expose -events on the specified window. -This is much more efficient than deleting many windows -one at a time because much of the work need be performed only once for all -of the windows, rather than for each window. -The subwindows should never be referenced again. -.LP -.PN XDestroySubwindows -can generate a -.PN BadWindow -error. -.NH 2 -Mapping Windows -.XS -\*(SN Mapping Windows -.XE -.LP -A window is considered mapped if an -.PN XMapWindow -call has been made on it. -It may not be visible on the screen for one of the following reasons: -.IP \(bu 5 -It is obscured by another opaque window. -.IP \(bu 5 -One of its ancestors is not mapped. -.IP \(bu 5 -It is entirely clipped by an ancestor. -.LP -.PN Expose -events are generated for the window when part or all of -it becomes visible on the screen. -A client receives the -.PN Expose -events only if it has asked for them. -Windows retain their position in the stacking order when they are unmapped. -.LP -A window manager may want to control the placement of subwindows. -If -.PN SubstructureRedirectMask -has been selected by a window manager -on a parent window (usually a root window), -a map request initiated by other clients on a child window is not performed, -and the window manager is sent a -.PN MapRequest -event. -However, if the override-redirect flag on the child had been set to -.PN True -(usually only on pop-up menus), -the map request is performed. -.LP -A tiling window manager might decide to reposition and resize other clients' -windows and then decide to map the window to its final location. -A window manager that wants to provide decoration might -reparent the child into a frame first. -For further information, -see sections 3.2.8 and 10.10. -Only a single client at a time can select for -.PN SubstructureRedirectMask . -.LP -Similarly, a single client can select for -.PN ResizeRedirectMask -on a parent window. -Then, any attempt to resize the window by another client is suppressed, and -the client receives a -.PN ResizeRequest -event. -.LP -.sp -To map a given window, use -.PN XMapWindow . -.IN "XMapWindow" "" "@DEF@" -.sM -.FD 0 -XMapWindow\^(\^\fIdisplay\fP, \fIw\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.LP -.eM -The -.PN XMapWindow -function -maps the window and all of its -subwindows that have had map requests. -Mapping a window that has an unmapped ancestor does not display the -window but marks it as eligible for display when the ancestor becomes -mapped. -Such a window is called unviewable. -When all its ancestors are mapped, -the window becomes viewable -and will be visible on the screen if it is not obscured by another window. -This function has no effect if the window is already mapped. -.LP -If the override-redirect of the window is -.PN False -and if some other client has selected -.PN SubstructureRedirectMask -on the parent window, then the X server generates a -.PN MapRequest -event, and the -.PN XMapWindow -function does not map the window. -Otherwise, the window is mapped, and the X server generates a -.PN MapNotify -event. -.LP -If the window becomes viewable and no earlier contents for it are remembered, -the X server tiles the window with its background. -If the window's background is undefined, -the existing screen contents are not -altered, and the X server generates zero or more -.PN Expose -events. -If backing-store was maintained while the window was unmapped, no -.PN Expose -events -are generated. -If backing-store will now be maintained, -a full-window exposure is always generated. -Otherwise, only visible regions may be reported. -Similar tiling and exposure take place for any newly viewable inferiors. -.LP -.IN "XMapWindow" -If the window is an -.PN InputOutput -window, -.PN XMapWindow -generates -.PN Expose -events on each -.PN InputOutput -window that it causes to be displayed. -If the client maps and paints the window -and if the client begins processing events, -the window is painted twice. -To avoid this, -first ask for -.PN Expose -events and then map the window, -so the client processes input events as usual. -The event list will include -.PN Expose -for each -window that has appeared on the screen. -The client's normal response to -an -.PN Expose -event should be to repaint the window. -This method usually leads to simpler programs and to proper interaction -with window managers. -.LP -.PN XMapWindow -can generate a -.PN BadWindow -error. -.LP -.sp -To map and raise a window, use -.PN XMapRaised . -.IN "XMapRaised" "" "@DEF@" -.sM -.FD 0 -XMapRaised\^(\^\fIdisplay\fP, \fIw\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.LP -.eM -The -.PN XMapRaised -function -essentially is similar to -.PN XMapWindow -in that it maps the window and all of its -subwindows that have had map requests. -However, it also raises the specified window to the top of the stack. -For additional information, -see -.PN XMapWindow . -.LP -.PN XMapRaised -can generate multiple -.PN BadWindow -errors. -.LP -.sp -To map all subwindows for a specified window, use -.PN XMapSubwindows . -.IN "XMapSubwindows" "" "@DEF@" -.sM -.FD 0 -XMapSubwindows\^(\^\fIdisplay\fP, \fIw\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.LP -.eM -The -.PN XMapSubwindows -.IN "XMapSubwindows" -function maps all subwindows for a specified window in top-to-bottom stacking -order. -The X server generates -.PN Expose -events on each newly displayed window. -This may be much more efficient than mapping many windows -one at a time because the server needs to perform much of the work -only once, for all of the windows, rather than for each window. -.LP -.PN XMapSubwindows -can generate a -.PN BadWindow -error. -.NH 2 -Unmapping Windows -.XS -\*(SN Unmapping Windows -.XE -.LP -Xlib provides functions that you can use to unmap a window or all subwindows. -.LP -.sp -To unmap a window, use -.PN XUnmapWindow . -.IN "XUnmapWindow" "" "@DEF@" -.sM -.FD 0 -XUnmapWindow\^(\^\fIdisplay\fP, \fIw\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.LP -.eM -The -.PN XUnmapWindow -function unmaps the specified window and causes the X server to generate an -.PN UnmapNotify -.IN "UnmapNotify Event" -.IN "XUnmapWindow" -event. -If the specified window is already unmapped, -.PN XUnmapWindow -has no effect. -Normal exposure processing on formerly obscured windows is performed. -Any child window will no longer be visible until another map call is -made on the parent. -In other words, the subwindows are still mapped but are not visible -until the parent is mapped. -Unmapping a window will generate -.PN Expose -events on windows that were formerly obscured by it. -.LP -.PN XUnmapWindow -can generate a -.PN BadWindow -error. -.LP -.sp -To unmap all subwindows for a specified window, use -.PN XUnmapSubwindows . -.IN "XUnmapSubwindows" "" "@DEF@" -.sM -.FD 0 -XUnmapSubwindows\^(\^\fIdisplay\fP, \fIw\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.LP -.eM -The -.PN XUnmapSubwindows -function unmaps all subwindows for the specified window in bottom-to-top -stacking order. -It causes the X server to generate an -.PN UnmapNotify -event on each subwindow and -.PN Expose -events on formerly obscured windows. -.IN "UnmapNotify Event" -Using this function is much more efficient than unmapping multiple windows -one at a time because the server needs to perform much of the work -only once, for all of the windows, rather than for each window. -.LP -.PN XUnmapSubwindows -can generate a -.PN BadWindow -error. -.NH 2 -Configuring Windows -.XS -\*(SN Configuring Windows -.XE -.LP -.LP -Xlib provides functions that you can use to -move a window, resize a window, move and resize a window, or -change a window's border width. -To change one of these parameters, -set the appropriate member of the -.PN XWindowChanges -structure and OR in the corresponding value mask in subsequent calls to -.PN XConfigureWindow . -The symbols for the value mask bits and the -.PN XWindowChanges -structure are: -.sM -.LP -/* Configure window value mask bits */ -.TS -lw(.5i) lw(2.5i) lw(.8i). -T{ -#define -T} T{ -.PN CWX -T} T{ -(1<<0) -T} -T{ -#define -T} T{ -.PN CWY -T} T{ -(1<<1) -T} -T{ -#define -T} T{ -.PN CWWidth -T} T{ -(1<<2) -T} -T{ -#define -T} T{ -.PN CWHeight -T} T{ -(1<<3) -T} -T{ -#define -T} T{ -.PN CWBorderWidth -T} T{ -(1<<4) -T} -T{ -#define -T} T{ -.PN CWSibling -T} T{ -(1<<5) -T} -T{ -#define -T} T{ -.PN CWStackMode -T} T{ -(1<<6) -T} -.TE -.IN "XWindowChanges" "" "@DEF@" -.Ds 0 -.TA .5i 3i -.ta .5i 3i -/* Values */ - -typedef struct { - int x, y; - int width, height; - int border_width; - Window sibling; - int stack_mode; -} XWindowChanges; -.De -.LP -.eM -The x and y members are used to set the window's x and y coordinates, -which are relative to the parent's origin -and indicate the position of the upper-left outer corner of the window. -The width and height members are used to set the inside size of the window, -not including the border, and must be nonzero, or a -.PN BadValue -error results. -Attempts to configure a root window have no effect. -.LP -The border_width member is used to set the width of the border in pixels. -Note that setting just the border width leaves the outer-left corner of the window -in a fixed position but moves the absolute position of the window's origin. -If you attempt to set the border-width attribute of an -.PN InputOnly -window nonzero, a -.PN BadMatch -error results. -.LP -The sibling member is used to set the sibling window for stacking operations. -The stack_mode member is used to set how the window is to be restacked -and can be set to -.PN Above , -.PN Below , -.PN TopIf , -.PN BottomIf , -or -.PN Opposite . -.LP -If the override-redirect flag of the window is -.PN False -and if some other client has selected -.PN SubstructureRedirectMask -on the parent, the X server generates a -.PN ConfigureRequest -event, and no further processing is performed. -Otherwise, -if some other client has selected -.PN ResizeRedirectMask -on the window and the inside -width or height of the window is being changed, -a -.PN ResizeRequest -event is generated, and the current inside width and height are -used instead. -Note that the override-redirect flag of the window has no effect -on -.PN ResizeRedirectMask -and that -.PN SubstructureRedirectMask -on the parent has precedence over -.PN ResizeRedirectMask -on the window. -.LP -When the geometry of the window is changed as specified, -the window is restacked among siblings, and a -.PN ConfigureNotify -event is generated if the state of the window actually changes. -.PN GravityNotify -events are generated after -.PN ConfigureNotify -events. -If the inside width or height of the window has actually changed, -children of the window are affected as specified. -.LP -If a window's size actually changes, -the window's subwindows move according to their window gravity. -Depending on the window's bit gravity, -the contents of the window also may be moved (see section 3.2.3). -.LP -If regions of the window were obscured but now are not, -exposure processing is performed on these formerly obscured windows, -including the window itself and its inferiors. -As a result of increasing the width or height, -exposure processing is also performed on any new regions of the window -and any regions where window contents are lost. -.LP -The restack check (specifically, the computation for -.PN BottomIf , -.PN TopIf , -and -.PN Opposite ) -is performed with respect to the window's final size and position (as -controlled by the other arguments of the request), not its initial position. -If a sibling is specified without a stack_mode, -a -.PN BadMatch -error results. -.LP -If a sibling and a stack_mode are specified, -the window is restacked as follows: -.TS -lw(1i) lw(5i). -T{ -.PN Above -T} T{ -The window is placed just above the sibling. -T} -.sp 6p -T{ -.PN Below -T} T{ -The window is placed just below the sibling. -T} -.sp 6p -T{ -.PN TopIf -T} T{ -If the sibling occludes the window, the window is placed -at the top of the stack. -T} -.sp 6p -T{ -.PN BottomIf -T} T{ -If the window occludes the sibling, the window is -placed at the bottom of the stack. -T} -.sp 6p -T{ -.PN Opposite -T} T{ -If the sibling occludes the window, the window -is placed at the top of the stack. -If the window occludes the sibling, -the window is placed at the bottom of the stack. -T} -.TE -.LP -If a stack_mode is specified but no sibling is specified, -the window is restacked as follows: -.TS -lw(1i) lw(5i). -T{ -.PN Above -T} T{ -The window is placed at the top of the stack. -T} -.sp 6p -T{ -.PN Below -T} T{ -The window is placed at the bottom of the stack. -T} -.sp 6p -T{ -.PN TopIf -T} T{ -If any sibling occludes the window, the window is placed at -the top of the stack. -T} -.sp 6p -T{ -.PN BottomIf -T} T{ -If the window occludes any sibling, the window is placed at -the bottom of the stack. -T} -.sp 6p -T{ -.PN Opposite -T} T{ -If any sibling occludes the window, the window -is placed at the top of the stack. -If the window occludes any sibling, -the window is placed at the bottom of the stack. -T} -.TE -.LP -Attempts to configure a root window have no effect. -.LP -.sp -To configure a window's size, location, stacking, or border, use -.PN XConfigureWindow . -.IN "XConfigureWindow" "" "@DEF@" -.sM -.FD 0 -XConfigureWindow\^(\^\fIdisplay\fP, \fIw\fP\^, \fIvalue_mask\fP\^, \fIvalues\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - unsigned int \fIvalue_mask\fP\^; -.br - XWindowChanges *\fIvalues\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Wi to be reconfigured -.IP \fIw\fP 1i -Specifies the window \*(Wi. -.IP \fIvalue_mask\fP 1i -Specifies which values are to be set using information in -the values structure. -This mask is the bitwise inclusive OR of the valid configure window values bits. -.IP \fIvalues\fP 1i -Specifies the -.PN XWindowChanges -structure. -.LP -.eM -The -.PN XConfigureWindow -function uses the values specified in the -.PN XWindowChanges -structure to reconfigure a window's size, position, border, and stacking order. -Values not specified are taken from the existing geometry of the window. -.LP -If a sibling is specified without a stack_mode or if the window -is not actually a sibling, -a -.PN BadMatch -error results. -Note that the computations for -.PN BottomIf , -.PN TopIf , -and -.PN Opposite -are performed with respect to the window's final geometry (as controlled by the -other arguments passed to -.PN XConfigureWindow ), -not its initial geometry. -Any backing store contents of the window, its -inferiors, and other newly visible windows are either discarded or -changed to reflect the current screen contents -(depending on the implementation). -.LP -.PN XConfigureWindow -can generate -.PN BadMatch , -.PN BadValue , -and -.PN BadWindow -errors. -.LP -.sp -To move a window without changing its size, use -.PN XMoveWindow . -.IN "XMoveWindow" "" "@DEF@" -.sM -.FD 0 -XMoveWindow\^(\^\fIdisplay\fP, \fIw\fP\^, \fIx\fP\^, \fIy\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - int \fIx\fP\^, \fIy\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Wi to be moved -.IP \fIw\fP 1i -Specifies the window \*(Wi. -.ds Xy , which define the new location of the top-left pixel \ -of the window's border or the window itself if it has no border -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the x and y coordinates\*(Xy. -.LP -.eM -The -.PN XMoveWindow -function moves the specified window to the specified x and y coordinates, -but it does not change the window's size, raise the window, or -change the mapping state of the window. -Moving a mapped window may or may not lose the window's contents -depending on if the window is obscured by nonchildren -and if no backing store exists. -If the contents of the window are lost, -the X server generates -.PN Expose -events. -Moving a mapped window generates -.PN Expose -events on any formerly obscured windows. -.LP -If the override-redirect flag of the window is -.PN False -and some -other client has selected -.PN SubstructureRedirectMask -on the parent, the X server generates a -.PN ConfigureRequest -event, and no further processing is -performed. -Otherwise, the window is moved. -.LP -.PN XMoveWindow -can generate a -.PN BadWindow -error. -.LP -.sp -To change a window's size without changing the upper-left coordinate, use -.PN XResizeWindow . -.IN "XResizeWindow" "" "@DEF@" -.sM -.FD 0 -XResizeWindow\^(\^\fIdisplay\fP, \fIw\fP\^, \fIwidth\fP\^, \fIheight\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - unsigned int \fIwidth\fP\^, \fIheight\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.ds Wh , which are the interior dimensions of the window \ -after the call completes -.IP \fIwidth\fP 1i -.br -.ns -.IP \fIheight\fP 1i -Specify the width and height\*(Wh. -.LP -.eM -The -.PN XResizeWindow -function changes the inside dimensions of the specified window, not including -its borders. -This function does not change the window's upper-left coordinate or -the origin and does not restack the window. -Changing the size of a mapped window may lose its contents and generate -.PN Expose -events. -If a mapped window is made smaller, -changing its size generates -.PN Expose -events on windows that the mapped window formerly obscured. -.LP -If the override-redirect flag of the window is -.PN False -and some -other client has selected -.PN SubstructureRedirectMask -on the parent, the X server generates a -.PN ConfigureRequest -event, and no further processing is performed. -If either width or height is zero, -a -.PN BadValue -error results. -.LP -.PN XResizeWindow -can generate -.PN BadValue -and -.PN BadWindow -errors. -.LP -.sp -To change the size and location of a window, use -.PN XMoveResizeWindow . -.IN "XMoveResizeWindow" "" "@DEF@" -.sM -.FD 0 -XMoveResizeWindow\^(\^\fIdisplay\fP, \fIw\fP\^, \fIx\fP\^, \fIy\fP\^, \fIwidth\fP\^, \fIheight\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - int \fIx\fP\^, \fIy\fP\^; -.br - unsigned int \fIwidth\fP\^, \fIheight\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Wi to be reconfigured -.IP \fIw\fP 1i -Specifies the window \*(Wi. -.ds Xy , which define the new position of the window relative to its parent -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the x and y coordinates\*(Xy. -.ds Wh , which define the interior size of the window -.IP \fIwidth\fP 1i -.br -.ns -.IP \fIheight\fP 1i -Specify the width and height\*(Wh. -.LP -.eM -The -.PN XMoveResizeWindow -function changes the size and location of the specified window -without raising it. -Moving and resizing a mapped window may generate an -.PN Expose -event on the window. -Depending on the new size and location parameters, -moving and resizing a window may generate -.PN Expose -events on windows that the window formerly obscured. -.LP -If the override-redirect flag of the window is -.PN False -and some -other client has selected -.PN SubstructureRedirectMask -on the parent, the X server generates a -.PN ConfigureRequest -event, and no further processing is performed. -Otherwise, the window size and location are changed. -.LP -.PN XMoveResizeWindow -can generate -.PN BadValue -and -.PN BadWindow -errors. -.LP -.sp -To change the border width of a given window, use -.PN XSetWindowBorderWidth . -.IN "XSetWindowBorderWidth" "" "@DEF@" -.sM -.FD 0 -XSetWindowBorderWidth\^(\^\fIdisplay\fP, \fIw\fP, \fIwidth\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - unsigned int \fIwidth\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIwidth\fP 1i -Specifies the width of the window border. -.LP -.eM -The -.PN XSetWindowBorderWidth -function sets the specified window's border width to the specified width. -.LP -.PN XSetWindowBorderWidth -can generate a -.PN BadWindow -error. -.NH 2 -Changing Window Stacking Order -.XS -\*(SN Changing Window Stacking Order -.XE -.LP -.LP -Xlib provides functions that you can use to raise, lower, circulate, -or restack windows. -.LP -.sp -To raise a window so that no sibling window obscures it, use -.PN XRaiseWindow . -.IN "XRaiseWindow" "" "@DEF@" -.sM -.FD 0 -XRaiseWindow\^(\^\fIdisplay\fP, \fIw\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.LP -.eM -The -.PN XRaiseWindow -function -raises the specified window to the top of the stack so that no sibling window -obscures it. -If the windows are regarded as overlapping sheets of paper stacked -on a desk, -then raising a window is analogous to moving the sheet to the top of -the stack but leaving its x and y location on the desk constant. -Raising a mapped window may generate -.PN Expose -events for the window and any mapped subwindows that were formerly obscured. -.LP -If the override-redirect attribute of the window is -.PN False -and some -other client has selected -.PN SubstructureRedirectMask -on the parent, the X server generates a -.PN ConfigureRequest -event, and no processing is performed. -Otherwise, the window is raised. -.LP -.PN XRaiseWindow -can generate a -.PN BadWindow -error. -.LP -.sp -To lower a window so that it does not obscure any sibling windows, use -.PN XLowerWindow . -.IN "XLowerWindow" "" "@DEF@" -.sM -.FD 0 -XLowerWindow\^(\^\fIdisplay\fP, \fIw\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.LP -.eM -The -.PN XLowerWindow -function lowers the specified window to the bottom of the stack -so that it does not obscure any sibling -windows. -If the windows are regarded as overlapping sheets of paper -stacked on a desk, then lowering a window is analogous to moving the -sheet to the bottom of the stack but leaving its x and y location on -the desk constant. -Lowering a mapped window will generate -.PN Expose -events on any windows it formerly obscured. -.LP -If the override-redirect attribute of the window is -.PN False -and some -other client has selected -.PN SubstructureRedirectMask -on the parent, the X server generates a -.PN ConfigureRequest -event, and no processing is performed. -Otherwise, the window is lowered to the bottom of the -stack. -.LP -.PN XLowerWindow -can generate a -.PN BadWindow -error. -.LP -.sp -To circulate a subwindow up or down, use -.PN XCirculateSubwindows . -.IN "XCirculateSubwindows" "" "@DEF@" -.sM -.FD 0 -XCirculateSubwindows\^(\^\fIdisplay\fP, \fIw\fP\^, \fIdirection\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - int \fIdirection\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIdirection\fP 1i -Specifies the direction (up or down) that you want to circulate -the window. -You can pass -.PN RaiseLowest -or -.PN LowerHighest . -.LP -.eM -The -.PN XCirculateSubwindows -function circulates children of the specified window in the specified -direction. -If you specify -.PN RaiseLowest , -.PN XCirculateSubwindows -raises the lowest mapped child (if any) that is occluded -by another child to the top of the stack. -If you specify -.PN LowerHighest , -.PN XCirculateSubwindows -lowers the highest mapped child (if any) that occludes another child -to the bottom of the stack. -Exposure processing is then performed on formerly obscured windows. -If some other client has selected -.PN SubstructureRedirectMask -on the window, the X server generates a -.PN CirculateRequest -event, and no further processing is performed. -If a child is actually restacked, -the X server generates a -.PN CirculateNotify -event. -.LP -.PN XCirculateSubwindows -can generate -.PN BadValue -and -.PN BadWindow -errors. -.LP -.sp -To raise the lowest mapped child of a window that is partially or completely -occluded by another child, use -.PN XCirculateSubwindowsUp . -.IN "XCirculateSubwindowsUp" "" "@DEF@" -.sM -.FD 0 -XCirculateSubwindowsUp\^(\^\fIdisplay\fP, \fIw\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.LP -.eM -The -.PN XCirculateSubwindowsUp -function raises the lowest mapped child of the specified window that -is partially -or completely -occluded by another child. -Completely unobscured children are not affected. -This is a convenience function equivalent to -.PN XCirculateSubwindows -with -.PN RaiseLowest -specified. -.LP -.PN XCirculateSubwindowsUp -can generate a -.PN BadWindow -error. -.LP -.sp -To lower the highest mapped child of a window that partially or -completely occludes another child, use -.PN XCirculateSubwindowsDown . -.IN "XCirculateSubwindowsDown" "" "@DEF@" -.sM -.FD 0 -XCirculateSubwindowsDown\^(\^\fIdisplay\fP, \fIw\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.LP -.eM -The -.PN XCirculateSubwindowsDown -function lowers the highest mapped child of the specified window that partially -or completely occludes another child. -Completely unobscured children are not affected. -This is a convenience function equivalent to -.PN XCirculateSubwindows -with -.PN LowerHighest -specified. -.LP -.PN XCirculateSubwindowsDown -can generate a -.PN BadWindow -error. -.LP -.sp -To restack a set of windows from top to bottom, use -.PN XRestackWindows . -.IN "XRestackWindows" "" "@DEF@" -.sM -.FD 0 -XRestackWindows\^(\^\fIdisplay\fP, \fIwindows\fP\^, \^\fInwindows\fP\^); -.br - Display *\fIdisplay\fP\^; -.br - Window \fIwindows\fP\^[]; -.br - int \fInwindows\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIwindows\fP 1i -Specifies an array containing the windows to be restacked. -.IP \fInwindows\fP 1i -Specifies the number of windows to be restacked. -.LP -.eM -The -.PN XRestackWindows -function restacks the windows in the order specified, -from top to bottom. -The stacking order of the first window in the windows array is unaffected, -but the other windows in the array are stacked underneath the first window, -in the order of the array. -The stacking order of the other windows is not affected. -For each window in the window array that is not a child of the specified window, -a -.PN BadMatch -error results. -.LP -If the override-redirect attribute of a window is -.PN False -and some -other client has selected -.PN SubstructureRedirectMask -on the parent, the X server generates -.PN ConfigureRequest -events for each window whose override-redirect flag is not set, -and no further processing is performed. -Otherwise, the windows will be restacked in top-to-bottom order. -.LP -.PN XRestackWindows -can generate a -.PN BadWindow -error. -.NH 2 -Changing Window Attributes -.XS -\*(SN Changing Window Attributes -.XE -.LP -.LP -Xlib provides functions that you can use to set window attributes. -.PN XChangeWindowAttributes -is the more general function that allows you to set one or more window -attributes provided by the -.PN XSetWindowAttributes -structure. -The other functions described in this section allow you to set one specific -window attribute, such as a window's background. -.LP -.sp -To change one or more attributes for a given window, use -.PN XChangeWindowAttributes . -.IN "XChangeWindowAttributes" "" "@DEF@" -.sM -.FD 0 -XChangeWindowAttributes\^(\^\fIdisplay\fP, \fIw\fP\^, \fIvaluemask\fP\^, \fIattributes\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - unsigned long \fIvaluemask\fP\^; -.br - XSetWindowAttributes *\fIattributes\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIvaluemask\fP 1i -Specifies which window attributes are defined in the attributes -argument. -This mask is the bitwise inclusive OR of the valid attribute mask bits. -If valuemask is zero, -the attributes are ignored and are not referenced. -The values and restrictions are -the same as for -.PN XCreateWindow . -.IP -.IP \fIattributes\fP 1i -Specifies the structure from which the values (as specified by the value mask) -are to be taken. -The value mask should have the appropriate bits -set to indicate which attributes have been set in the structure -(see section 3.2). -.LP -.eM -Depending on the valuemask, -the -.PN XChangeWindowAttributes -function uses the window attributes in the -.PN XSetWindowAttributes -structure to change the specified window attributes. -Changing the background does not cause the window contents to be -changed. -To repaint the window and its background, use -.PN XClearWindow . -Setting the border or changing the background such that the -border tile origin changes causes the border to be repainted. -Changing the background of a root window to -.PN None -or -.PN ParentRelative -restores the default background pixmap. -Changing the border of a root window to -.PN CopyFromParent -restores the default border pixmap. -Changing the win-gravity does not affect the current position of the -window. -Changing the backing-store of an obscured window to -.PN WhenMapped -or -.PN Always , -or changing the backing-planes, backing-pixel, or -save-under of a mapped window may have no immediate effect. -Changing the colormap of a window (that is, defining a new map, not -changing the contents of the existing map) generates a -.PN ColormapNotify -event. -Changing the colormap of a visible window may have no -immediate effect on the screen because the map may not be installed -(see -.PN XInstallColormap ). -Changing the cursor of a root window to -.PN None -restores the default -cursor. -Whenever possible, you are encouraged to share colormaps. -.LP -Multiple clients can select input on the same window. -Their event masks are maintained separately. -When an event is generated, -it is reported to all interested clients. -However, only one client at a time can select for -.PN SubstructureRedirectMask , -.PN ResizeRedirectMask , -and -.PN ButtonPressMask . -If a client attempts to select any of these event masks -and some other client has already selected one, -a -.PN BadAccess -error results. -There is only one do-not-propagate-mask for a window, -not one per client. -.LP -.PN XChangeWindowAttributes -can generate -.PN BadAccess , -.PN BadColor , -.PN BadCursor , -.PN BadMatch , -.PN BadPixmap , -.PN BadValue , -and -.PN BadWindow -errors. -.LP -.sp -To set the background of a window to a given pixel, use -.PN XSetWindowBackground . -.IN "XSetWindowBackground" "" "@DEF@" -.sM -.FD 0 -XSetWindowBackground\^(\^\fIdisplay\fP, \fIw\fP\^, \fIbackground_pixel\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - unsigned long \fIbackground_pixel\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIbackground_pixel\fP 1i -Specifies the pixel that is to be used for the background. -.LP -.eM -The -.PN XSetWindowBackground -function sets the background of the window to the specified pixel value. -Changing the background does not cause the window contents to be changed. -.PN XSetWindowBackground -uses a pixmap of undefined size filled with the pixel value you passed. -If you try to change the background of an -.PN InputOnly -window, a -.PN BadMatch -error results. -.LP -.PN XSetWindowBackground -can generate -.PN BadMatch -and -.PN BadWindow -errors. -.LP -.sp -.LP -To set the background of a window to a given pixmap, use -.PN XSetWindowBackgroundPixmap . -.IN "Window" "background" -.IN "XSetWindowBackgroundPixmap" "" "@DEF@" -.sM -.FD 0 -XSetWindowBackgroundPixmap\^(\^\fIdisplay\fP, \fIw\fP\^, \fIbackground_pixmap\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - Pixmap \fIbackground_pixmap\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIbackground_pixmap\fP 1i -Specifies the background pixmap, -.PN ParentRelative , -or -.PN None . -.LP -.eM -.IN "Resource IDs" "freeing" -.IN "Freeing" "resources" -The -.PN XSetWindowBackgroundPixmap -function sets the background pixmap of the window to the specified pixmap. -The background pixmap can immediately be freed if no further explicit -references to it are to be made. -If -.PN ParentRelative -is specified, -the background pixmap of the window's parent is used, -or on the root window, the default background is restored. -If you try to change the background of an -.PN InputOnly -window, a -.PN BadMatch -error results. -If the background is set to -.PN None , -the window has no defined background. -.LP -.PN XSetWindowBackgroundPixmap -can generate -.PN BadMatch , -.PN BadPixmap , -and -.PN BadWindow -errors. -.NT Note -.PN XSetWindowBackground -and -.PN XSetWindowBackgroundPixmap -do not change the current contents of the window. -.NE -.LP -.sp -To change and repaint a window's border to a given pixel, use -.PN XSetWindowBorder . -.IN "XSetWindowBorder" "" "@DEF@" -.sM -.FD 0 -XSetWindowBorder\^(\^\fIdisplay\fP, \fIw\fP\^, \fIborder_pixel\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - unsigned long \fIborder_pixel\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIborder_pixel\fP 1i -Specifies the entry in the colormap. -.LP -.eM -The -.PN XSetWindowBorder -function sets the border of the window to the pixel value you specify. -If you attempt to perform this on an -.PN InputOnly -window, a -.PN BadMatch -error results. -.LP -.PN XSetWindowBorder -can generate -.PN BadMatch -and -.PN BadWindow -errors. -.LP -.sp -To change and repaint the border tile of a given window, use -.PN XSetWindowBorderPixmap . -.IN "XSetWindowBorderPixmap" "" "@DEF@" -.sM -.FD 0 -XSetWindowBorderPixmap\^(\^\fIdisplay\fP, \fIw\fP\^, \fIborder_pixmap\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - Pixmap \fIborder_pixmap\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIborder_pixmap\fP 1i -Specifies the border pixmap or -.PN CopyFromParent . -.LP -.eM -The -.PN XSetWindowBorderPixmap -function sets the border pixmap of the window to the pixmap you specify. -The border pixmap can be freed immediately if no further explicit -references to it are to be made. -If you specify -.PN CopyFromParent , -a copy of the parent window's border pixmap is used. -If you attempt to perform this on an -.PN InputOnly -window, a -.PN BadMatch -error results. -.IN "Resource IDs" "freeing" -.IN "Freeing" "resources" -.LP -.PN XSetWindowBorderPixmap -can generate -.PN BadMatch , -.PN BadPixmap , -and -.PN BadWindow -errors. -.LP -.sp -To set the colormap of a given window, use -.PN XSetWindowColormap . -.IN "XSetWindowColormap" "" "@DEF@" -.sM -.FD 0 -XSetWindowColormap\^(\^\fIdisplay\fP, \fIw\fP\^, \fIcolormap\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - Colormap \fIcolormap\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIcolormap\fP 1i -Specifies the colormap. -.LP -.eM -The -.PN XSetWindowColormap -function sets the specified colormap of the specified window. -The colormap must have the same visual type as the window, -or a -.PN BadMatch -error results. -.LP -.PN XSetWindowColormap -can generate -.PN BadColor , -.PN BadMatch , -and -.PN BadWindow -errors. -.LP -.sp -To define which cursor will be used in a window, use -.PN XDefineCursor . -.IN "Window" "defining the cursor" -.IN "XDefineCursor" "" "@DEF@" -.sM -.FD 0 -XDefineCursor\^(\^\fIdisplay\fP, \fIw\fP\^, \fIcursor\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - Cursor \fIcursor\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIcursor\fP 1i -Specifies the cursor that is to be displayed or -.PN None . -.LP -.eM -If a cursor is set, it will be used when the pointer is in the window. -If the cursor is -.PN None , -it is equivalent to -.PN XUndefineCursor . -.LP -.PN XDefineCursor -can generate -.PN BadCursor -and -.PN BadWindow -errors. -.LP -.sp -To undefine the cursor in a given window, use -.PN XUndefineCursor . -.IN "Window" "undefining the cursor" -.IN "XUndefineCursor" "" "@DEF@" -.sM -.FD 0 -XUndefineCursor\^(\^\fIdisplay\fP, \fIw\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.LP -.eM -The -.PN XUndefineCursor -function undoes the effect of a previous -.PN XDefineCursor -for this window. -When the pointer is in the window, -the parent's cursor will now be used. -On the root window, -the default cursor is restored. -.LP -.PN XUndefineCursor -can generate a -.PN BadWindow -error. -.bp diff --git a/doc/xorg-docs/specs/X11/CH04 b/doc/xorg-docs/specs/X11/CH04 deleted file mode 100644 index b964198c2..000000000 --- a/doc/xorg-docs/specs/X11/CH04 +++ /dev/null @@ -1,1595 +0,0 @@ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by -.\" Digital Equipment Corporation -.\" -.\" Portions Copyright \(co 1990, 1991 by -.\" Tektronix, Inc. -.\" -.\" Permission to use, copy, modify and distribute this documentation for -.\" any purpose and without fee is hereby granted, provided that the above -.\" copyright notice appears in all copies and that both that copyright notice -.\" and this permission notice appear in all copies, and that the names of -.\" Digital and Tektronix not be used in in advertising or publicity pertaining -.\" to this documentation without specific, written prior permission. -.\" Digital and Tektronix makes no representations about the suitability -.\" of this documentation for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBChapter 4\fP\s-1 - -\s+1\fBWindow Information Functions\fP\s-1 -.sp 2 -.nr H1 4 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.na -.LP -.XS -Chapter 4: Window Information Functions -.XE -After you connect the display to the X server and create a window, -you can use the Xlib window information functions to: -.IP \(bu 5 -Obtain information about a window -.IP \(bu 5 -Translate screen coordinates -.IP \(bu 5 -Manipulate property lists -.IP \(bu 5 -Obtain and change window properties -.IP \(bu 5 -Manipulate selections -.NH 2 -Obtaining Window Information -.XS -\*(SN Obtaining Window Information -.XE -.LP -Xlib provides functions that you can use to obtain information about -the window tree, the window's current attributes, -the window's current geometry, or the current pointer coordinates. -Because they are most frequently used by window managers, -these functions all return a status to indicate whether the window still -exists. -.LP -.sp -To obtain the parent, a list of children, and number of children for -a given window, use -.PN XQueryTree . -.IN "Child Window" -.IN "Parent Window" -.IN "XQueryTree" "" "@DEF@" -.sM -.FD 0 -Status XQueryTree\^(\^\fIdisplay\fP, \fIw\fP\^, \fIroot_return\fP\^, \fIparent_return\fP\^, \fIchildren_return\fP\^, \fInchildren_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - Window *\fIroot_return\fP\^; -.br - Window *\fIparent_return\fP\^; -.br - Window **\fIchildren_return\fP\^; -.br - unsigned int *\fInchildren_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Wi whose list of children, root, parent, and number of children \ -you want to obtain -.IP \fIw\fP 1i -Specifies the window \*(Wi. -.IP \fIroot_return\fP 1i -Returns the root window. -.IP \fIparent_return\fP 1i -Returns the parent window. -.IP \fIchildren_return\fP 1i -Returns the list of children. -.IP \fInchildren_return\fP 1i -Returns the number of children. -.LP -.eM -The -.PN XQueryTree -function returns the root ID, the parent window ID, -a pointer to the list of children windows -(NULL when there are no children), -and the number of children in the list for the specified window. -The children are listed in current stacking order, from bottom-most -(first) to top-most (last). -.PN XQueryTree -returns zero if it fails and nonzero if it succeeds. -To free a non-NULL children list when it is no longer needed, use -.PN XFree . -.LP -.PN XQueryTree -can generate a -.PN BadWindow -error. -.LP -.sp -To obtain the current attributes of a given window, use -.PN XGetWindowAttributes . -.IN "XGetWindowAttributes" "" "@DEF@" -.sM -.FD 0 -Status XGetWindowAttributes\^(\^\fIdisplay\fP, \fIw\fP\^, \fIwindow_attributes_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - XWindowAttributes *\fIwindow_attributes_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Wi whose current attributes you want to obtain -.IP \fIw\fP 1i -Specifies the window \*(Wi. -.IP \fIwindow_attributes_return\fP 1i -Returns the specified window's attributes in the -.PN XWindowAttributes -structure. -.LP -.eM -The -.PN XGetWindowAttributes -function returns the current attributes for the specified window to an -.PN XWindowAttributes -structure. -.LP -.IN "XWindowAttributes" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int x, y; /* location of window */ - int width, height; /* width and height of window */ - int border_width; /* border width of window */ - int depth; /* depth of window */ - Visual *visual; /* the associated visual structure */ - Window root; /* root of screen containing window */ - int class; /* InputOutput, InputOnly*/ - int bit_gravity; /* one of the bit gravity values */ - int win_gravity; /* one of the window gravity values */ - int backing_store; /* NotUseful, WhenMapped, Always */ - unsigned long backing_planes; /* planes to be preserved if possible */ - unsigned long backing_pixel; /* value to be used when restoring planes */ - Bool save_under; /* boolean, should bits under be saved? */ - Colormap colormap; /* color map to be associated with window */ - Bool map_installed; /* boolean, is color map currently installed*/ - int map_state; /* IsUnmapped, IsUnviewable, IsViewable */ - long all_event_masks; /* set of events all people have interest in*/ - long your_event_mask; /* my event mask */ - long do_not_propagate_mask; /* set of events that should not propagate */ - Bool override_redirect; /* boolean value for override-redirect */ - Screen *screen; /* back pointer to correct screen */ -} XWindowAttributes; -.De -.LP -.eM -The x and y members are set to the upper-left outer -corner relative to the parent window's origin. -The width and height members are set to the inside size of the window, -not including the border. -The border_width member is set to the window's border width in pixels. -The depth member is set to the depth of the window -(that is, bits per pixel for the object). -The visual member is a pointer to the screen's associated -.PN Visual -structure. -The root member is set to the root window of the screen containing the window. -The class member is set to the window's class and can be either -.PN InputOutput -or -.PN InputOnly . -.LP -The bit_gravity member is set to the window's bit gravity -and can be one of the following: -.LP -.TS -lw(1.5i) lw(1.5i). -T{ -.PN ForgetGravity -T} T{ -.PN EastGravity -T} -T{ -.PN NorthWestGravity -T} T{ -.PN SouthWestGravity -T} -T{ -.PN NorthGravity -T} T{ -.PN SouthGravity -T} -T{ -.PN NorthEastGravity -T} T{ -.PN SouthEastGravity -T} -T{ -.PN WestGravity -T} T{ -.PN StaticGravity -T} -.PN CenterGravity -.TE -.LP -The win_gravity member is set to the window's window gravity -and can be one of the following: -.LP -.TS -lw(1.5i) lw(1.5i). -T{ -.PN UnmapGravity -T} T{ -.PN EastGravity -T} -T{ -.PN NorthWestGravity -T} T{ -.PN SouthWestGravity -T} -T{ -.PN NorthGravity -T} T{ -.PN SouthGravity -T} -T{ -.PN NorthEastGravity -T} T{ -.PN SouthEastGravity -T} -T{ -.PN WestGravity -T} T{ -.PN StaticGravity -T} -.PN CenterGravity -.TE -.LP -For additional information on gravity, -see section 3.2.3. -.LP -The backing_store member is set to indicate how the X server should maintain -the contents of a window -and can be -.PN WhenMapped , -.PN Always , -or -.PN NotUseful . -The backing_planes member is set to indicate (with bits set to 1) which bit -planes of the window hold dynamic data that must be preserved in backing_stores -and during save_unders. -The backing_pixel member is set to indicate what values to use -for planes not set in backing_planes. -.LP -The save_under member is set to -.PN True -or -.PN False . -The colormap member is set to the colormap for the specified window and can be -a colormap ID or -.PN None . -The map_installed member is set to indicate whether the colormap is -currently installed and can be -.PN True -or -.PN False . -The map_state member is set to indicate the state of the window and can be -.PN IsUnmapped , -.PN IsUnviewable , -or -.PN IsViewable . -.PN IsUnviewable -is used if the window is mapped but some ancestor is unmapped. -.LP -The all_event_masks member is set to the bitwise inclusive OR of all event -masks selected on the window by all clients. -The your_event_mask member is set to the bitwise inclusive OR of all event -masks selected by the querying client. -The do_not_propagate_mask member is set to the bitwise inclusive OR of the -set of events that should not propagate. -.LP -The override_redirect member is set to indicate whether this window overrides -structure control facilities and can be -.PN True -or -.PN False . -Window manager clients should ignore the window if this member is -.PN True . -.LP -The screen member is set to a screen pointer that gives you a back pointer -to the correct screen. -This makes it easier to obtain the screen information without -having to loop over the root window fields to see which field matches. -.LP -.PN XGetWindowAttributes -can generate -.PN BadDrawable -and -.PN BadWindow -errors. -.LP -.sp -To obtain the current geometry of a given drawable, use -.PN XGetGeometry . -.IN "XGetGeometry" "" "@DEF@" -.sM -.FD 0 -Status XGetGeometry\^(\^\fIdisplay\fP, \fId\fP\^, \^\fIroot_return\fP\^, \fIx_return\fP\^, \fIy_return\fP\^, \fIwidth_return\fP\^, -.br - \fIheight_return\fP\^, \fIborder_width_return\fP\^, \fIdepth_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - Window *\fIroot_return\fP\^; -.br - int *\fIx_return\fP\^, *\fIy_return\fP\^; -.br - unsigned int *\fIwidth_return\fP\^, *\fIheight_return\fP\^; -.br - unsigned int *\fIborder_width_return\fP\^; -.br - unsigned int *\fIdepth_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Dr , which can be a window or a pixmap -.IP \fId\fP 1i -Specifies the drawable\*(Dr. -.IP \fIroot_return\fP 1i -Returns the root window. -.IP \fIx_return\fP 1i -.br -.ns -.IP \fIy_return\fP 1i -Return the x and y coordinates that define the location of the drawable. -For a window, -these coordinates specify the upper-left outer corner relative to -its parent's origin. -For pixmaps, these coordinates are always zero. -.IP \fIwidth_return\fP 1i -.br -.ns -.IP \fIheight_return\fP 1i -Return the drawable's dimensions (width and height). -For a window, -these dimensions specify the inside size, not including the border. -.IP \fIborder_width_return\fP 1i -Returns the border width in pixels. -If the drawable is a pixmap, it returns zero. -.IP \fIdepth_return\fP 1i -Returns the depth of the drawable (bits per pixel for the object). -.LP -.eM -The -.PN XGetGeometry -function returns the root window and the current geometry of the drawable. -The geometry of the drawable includes the x and y coordinates, width and height, -border width, and depth. -These are described in the argument list. -It is legal to pass to this function a window whose class is -.PN InputOnly . -.LP -.PN XGetGeometry -can generate a -.PN BadDrawable -error. -.NH 2 -Translating Screen Coordinates -.XS -\*(SN Translating Screen Coordinates -.XE -.LP -Applications sometimes -need to perform a coordinate transformation from the coordinate -space of one window to another window or need to determine which -window the pointing device is in. -.PN XTranslateCoordinates -and -.PN XQueryPointer -fulfill these needs (and avoid any race conditions) by -asking the X server to perform these operations. -.LP -.sp -To translate a coordinate in one window to the coordinate -space of another window, use -.PN XTranslateCoordinates . -.IN "XTranslateCoordinates" "" "@DEF@" -.sM -.FD 0 -Bool XTranslateCoordinates\^(\^\fIdisplay\fP, \fIsrc_w\fP\^, \fIdest_w\fP\^, \fIsrc_x\fP\^, \fIsrc_y\fP\^, \fIdest_x_return\fP\^, -.br - \fIdest_y_return\fP\^, \fIchild_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIsrc_w\fP\^, \fIdest_w\fP\^; -.br - int \fIsrc_x\fP\^, \fIsrc_y\fP\^; -.br - int *\fIdest_x_return\fP\^, *\fIdest_y_return\fP\^; -.br - Window *\fIchild_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIsrc_w\fP 1i -Specifies the source window. -.IP \fIdest_w\fP 1i -Specifies the destination window. -.IP \fIsrc_x\fP 1i -.br -.ns -.IP \fIsrc_y\fP 1i -Specify the x and y coordinates within the source window. -.IP \fIdest_x_return\fP 1i -.br -.ns -.IP \fIdest_y_return\fP 1i -Return the x and y coordinates within the destination window. -.IP \fIchild_return\fP 1i -Returns the child if the coordinates are contained in a mapped child of the -destination window. -.LP -.eM -If -.PN XTranslateCoordinates -returns -.PN True , -it takes the src_x and src_y coordinates relative -to the source window's origin and returns these coordinates to -dest_x_return and dest_y_return -relative to the destination window's origin. -If -.PN XTranslateCoordinates -returns -.PN False , -src_w and dest_w are on different screens, -and dest_x_return and dest_y_return are zero. -If the coordinates are contained in a mapped child of dest_w, -that child is returned to child_return. -Otherwise, child_return is set to -.PN None . -.LP -.PN XTranslateCoordinates -can generate a -.PN BadWindow -error. -.LP -.sp -To obtain the screen coordinates of the pointer -or to determine the pointer coordinates relative to a specified window, use -.PN XQueryPointer . -.IN "XQueryPointer" "" "@DEF@" -.sM -.FD 0 -Bool XQueryPointer\^(\^\fIdisplay\fP, \fIw\fP\^, \fIroot_return\fP\^, \fIchild_return\fP\^, \fIroot_x_return\fP\^, \fIroot_y_return\fP\^, -.br - \fIwin_x_return\fP\^, \fIwin_y_return\fP\^, \fImask_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - Window *\fIroot_return\fP\^, *\fIchild_return\fP\^; -.br - int *\fIroot_x_return\fP\^, *\fIroot_y_return\fP\^; -.br - int *\fIwin_x_return\fP\^, *\fIwin_y_return\fP\^; -.br - unsigned int *\fImask_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.ds Ro that the pointer is in -.IP \fIroot_return\fP 1i -Returns the root window \*(Ro. -.IP \fIchild_return\fP 1i -Returns the child window that the pointer is located in, if any. -.IP \fIroot_x_return\fP 1i -.br -.ns -.IP \fIroot_y_return\fP 1i -Return the pointer coordinates relative to the root window's origin. -.IP \fIwin_x_return\fP 1i -.br -.ns -.IP \fIwin_y_return\fP 1i -Return the pointer coordinates relative to the specified window. -.IP \fImask_return\fP 1i -Returns the current state of the modifier keys and pointer buttons. -.LP -.eM -The -.PN XQueryPointer -function returns the root window the pointer is logically on and the pointer -coordinates relative to the root window's origin. -If -.PN XQueryPointer -returns -.PN False , -the pointer is not on the same screen as the specified window, and -.PN XQueryPointer -returns -.PN None -to child_return and zero to win_x_return and win_y_return. -If -.PN XQueryPointer -returns -.PN True , -the pointer coordinates returned to win_x_return and win_y_return -are relative to the origin of the specified window. -In this case, -.PN XQueryPointer -returns the child that contains the pointer, if any, -or else -.PN None -to child_return. -.LP -.PN XQueryPointer -returns the current logical state of the keyboard buttons -and the modifier keys in mask_return. -It sets mask_return to the bitwise inclusive OR of one or more -of the button or modifier key bitmasks to match -the current state of the mouse buttons and the modifier keys. -.LP -Note that the logical state of a device (as seen through Xlib) -may lag the physical state if device event processing is frozen -(see section 12.1). -.LP -.PN XQueryPointer -can generate a -.PN BadWindow -error. -.NH 2 -Properties and Atoms -.XS -\*(SN Properties and Atoms -.XE -.LP -A property is a collection of named, typed data. -The window system has a set of predefined properties -.IN "Atom" "predefined" -(for example, the name of a window, size hints, and so on), and users can -define any other arbitrary information and associate it with windows. -Each property has a name, -which is an ISO Latin-1 string. -For each named property, -a unique identifier (atom) is associated with it. -A property also has a type, for example, string or integer. -These types are also indicated using atoms, so arbitrary new -types can be defined. -Data of only one type may be associated with a single -property name. -Clients can store and retrieve properties associated with windows. -For efficiency reasons, -an atom is used rather than a character string. -.PN XInternAtom -can be used to obtain the atom for property names. -.IN "Atom" -.LP -A property is also stored in one of several possible formats. -The X server can store the information as 8-bit quantities, 16-bit -quantities, or 32-bit quantities. -This permits the X server to present the data in the byte order that the -client expects. -.NT Note -If you define further properties of complex type, -you must encode and decode them yourself. -These functions must be carefully written if they are to be portable. -For further information about how to write a library extension, -see appendix C. -.NE -The type of a property is defined by an atom, which allows for -arbitrary extension in this type scheme. -.IN "Atom" -.LP -Certain property names are -predefined in the server for commonly used functions. -The atoms for these properties are defined in -.hN X11/Xatom.h . -To avoid name clashes with user symbols, the -.PN #define -name for each atom has the XA_ prefix. -For an explanation of the functions that let you get and set -much of the information stored in these predefined properties, -see chapter 14. -.LP -The core protocol imposes no semantics on these property names, -but semantics are specified in other X Consortium standards, -such as the \fIInter-Client Communication Conventions Manual\fP -and the \fIX Logical Font Description Conventions\fP. -.LP -You can use properties to communicate other information between -applications. -The functions described in this section let you define new properties -and get the unique atom IDs in your applications. -.LP -Although any particular atom can have some client interpretation -within each of the name spaces, -atoms occur in five distinct name spaces within the protocol: -.IP \(bu 5 -Selections -.IP \(bu 5 -Property names -.IP \(bu 5 -Property types -.IP \(bu 5 -Font properties -.IP \(bu 5 -Type of a -.PN ClientMessage -event (none are built into the X server) -.LP -.LP -The built-in selection property names are: -.LP -.Ds 0 -.TA .5i 1.5i 3i -.ta .5i 1.5i 3i -.R -PRIMARY -SECONDARY -.De -.LP -The built-in property names are: -.TS -lw(2i) lw(2i). -.sp 6p -CUT_BUFFER0 RESOURCE_MANAGER -CUT_BUFFER1 WM_CLASS -CUT_BUFFER2 WM_CLIENT_MACHINE -CUT_BUFFER3 WM_COLORMAP_WINDOWS -CUT_BUFFER4 WM_COMMAND -CUT_BUFFER5 WM_HINTS -CUT_BUFFER6 WM_ICON_NAME -CUT_BUFFER7 WM_ICON_SIZE -RGB_BEST_MAP WM_NAME -RGB_BLUE_MAP WM_NORMAL_HINTS -RGB_DEFAULT_MAP WM_PROTOCOLS -RGB_GRAY_MAP WM_STATE -RGB_GREEN_MAP WM_TRANSIENT_FOR -RGB_RED_MAP WM_ZOOM_HINTS -.sp 6p -.TE -.LP -The built-in property types are: -.LP -.TS -lw(2i) lw(2i). -.sp 6p -ARC POINT -ATOM RGB_COLOR_MAP -BITMAP RECTANGLE -CARDINAL STRING -COLORMAP VISUALID -CURSOR WINDOW -DRAWABLE WM_HINTS -FONT WM_SIZE_HINTS -INTEGER -PIXMAP -.sp 6p -.TE -.LP -The built-in font property names are: -.TS -lw(2i) lw(2i). -.sp 6p -MIN_SPACE STRIKEOUT_DESCENT -NORM_SPACE STRIKEOUT_ASCENT -MAX_SPACE ITALIC_ANGLE -END_SPACE X_HEIGHT -SUPERSCRIPT_X QUAD_WIDTH -SUPERSCRIPT_Y WEIGHT -SUBSCRIPT_X POINT_SIZE -SUBSCRIPT_Y RESOLUTION -UNDERLINE_POSITION COPYRIGHT -UNDERLINE_THICKNESS NOTICE -FONT_NAME FAMILY_NAME -FULL_NAME CAP_HEIGHT -.sp 6p -.TE -.LP -For further information about font properties, -see section 8.5. -.LP -.sp -To return an atom for a given name, use -.PN XInternAtom . -.IN "Atom" "interning" -.IN "XInternAtom" "" "@DEF@" -.sM -.FD 0 -Atom XInternAtom\^(\^\fIdisplay\fP, \fIatom_name\fP\^, \fIonly_if_exists\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - char *\fIatom_name\fP\^; -.br - Bool \fIonly_if_exists\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIatom_name\fP 1i -Specifies the name associated with the atom you want returned. -.IP \fIonly_if_exists\fP 1i -Specifies a Boolean value that indicates whether the atom must be created. -.LP -.eM -The -.PN XInternAtom -function returns the atom identifier associated with the specified atom_name -string. -If only_if_exists is -.PN False , -the atom is created if it does not exist. -Therefore, -.PN XInternAtom -can return -.PN None . -If the atom name is not in the Host Portable Character Encoding, -the result is implementation-dependent. -Uppercase and lowercase matter; -the strings ``thing'', ``Thing'', and ``thinG'' -all designate different atoms. -The atom will remain defined even after the client's connection closes. -It will become undefined only when the last connection to -the X server closes. -.LP -.PN XInternAtom -can generate -.PN BadAlloc -and -.PN BadValue -errors. -.LP -.sp -To return atoms for an array of names, use -.PN XInternAtoms . -.IN "Atom" "interning" -.IN "XInternAtoms" "" "@DEF@" -.sM -.FD 0 -Status XInternAtoms\^(\^\fIdisplay\fP, \fInames\fP\^, \fIcount\fP\^, \fIonly_if_exists\fP, \fIatoms_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - char **\fInames\fP\^; -.br - int \fIcount\fP\^; -.br - Bool \fIonly_if_exists\fP\^; -.br - Atom *\fIatoms_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fInames\fP 1i -Specifies the array of atom names. -.ds Cn atom names in the array -.IP \fIcount\fP 1i -Specifies the number of \*(Cn. -.IP \fIonly_if_exists\fP 1i -Specifies a Boolean value that indicates whether the atom must be created. -.IP \fIatoms_return\fP 1i -Returns the atoms. -.LP -.eM -The -.PN XInternAtoms -function returns the atom identifiers associated with the specified names. -The atoms are stored in the atoms_return array supplied by the caller. -Calling this function is equivalent to calling -.PN XInternAtom -for each of the names in turn with the specified value of only_if_exists, -but this function minimizes the number of round-trip protocol exchanges -between the client and the X server. -.LP -This function returns a nonzero status if atoms are returned for -all of the names; -otherwise, it returns zero. -.LP -.PN XInternAtoms -can generate -.PN BadAlloc -and -.PN BadValue -errors. -.LP -.sp -To return a name for a given atom identifier, use -.PN XGetAtomName . -.IN "Atom" "getting name" -.IN "XGetAtomName" "" "@DEF@" -.sM -.FD 0 -char *XGetAtomName\^(\^\fIdisplay\fP, \fIatom\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Atom \fIatom\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIatom\fP 1i -Specifies the atom for the property name you want returned. -.LP -.eM -The -.PN XGetAtomName -function returns the name associated with the specified atom. -If the data returned by the server is in the Latin Portable Character Encoding, -then the returned string is in the Host Portable Character Encoding. -Otherwise, the result is implementation-dependent. -To free the resulting string, -call -.PN XFree . -.LP -.PN XGetAtomName -can generate a -.PN BadAtom -error. -.LP -.sp -To return the names for an array of atom identifiers, use -.PN XGetAtomNames . -.IN "Atom" "getting name" -.IN "XGetAtomNames" "" "@DEF@" -.sM -.FD 0 -Status XGetAtomNames\^(\^\fIdisplay\fP, \fIatoms\fP, \fIcount\fP\^, \fInames_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Atom *\fIatoms\fP\^; -.br - int \fIcount\fP\^; -.br - char **\fInames_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIatoms\fP 1i -Specifies the array of atoms. -.ds Cn atoms in the array -.IP \fIcount\fP 1i -Specifies the number of \*(Cn. -.IP \fInames_return\fP 1i -Returns the atom names. -.LP -.eM -The -.PN XGetAtomNames -function returns the names associated with the specified atoms. -The names are stored in the names_return array supplied by the caller. -Calling this function is equivalent to calling -.PN XGetAtomName -for each of the atoms in turn, -but this function minimizes the number of round-trip protocol exchanges -between the client and the X server. -.LP -This function returns a nonzero status if names are returned for -all of the atoms; -otherwise, it returns zero. -.LP -.PN XGetAtomNames -can generate a -.PN BadAtom -error. -.NH 2 -Obtaining and Changing Window Properties -.XS -\*(SN Obtaining and Changing Window Properties -.XE -.LP -You can attach a property list to every window. -Each property has a name, a type, and a value (see section 4.3). -The value is an array of 8-bit, 16-bit, or 32-bit quantities, -whose interpretation is left to the clients. The type -.PN char -is used to represent 8-bit quantities, the type -.PN short -is used to represent 16-bit quantities, and the type -.PN long -is used to represent 32-bit quantities. -.LP -Xlib provides functions that you can use to obtain, -change, update, or interchange window properties. -In addition, Xlib provides other utility functions for inter-client -communication (see chapter 14). -.LP -.sp -To obtain the type, format, and value of a property of a given window, use -.PN XGetWindowProperty . -.IN "Property" "getting" -.LP -.IN "XGetWindowProperty" "" "@DEF@" -.sM -.FD 0 -int XGetWindowProperty\^(\^\fIdisplay\fP, \fIw\fP\^, \fIproperty\fP\^, \fIlong_offset\fP\^, \fIlong_length\fP\^, \fIdelete\fP\^, \fIreq_type\fP\^, -.br - \fIactual_type_return\fP\^, \fIactual_format_return\fP\^, \fInitems_return\fP\^, \fIbytes_after_return\fP\^, -.br - \fIprop_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - Atom \fIproperty\fP\^; -.br - long \fIlong_offset\fP\^, \fIlong_length\fP\^; -.br - Bool \fIdelete\fP\^; -.br - Atom \fIreq_type\fP\^; -.br - Atom *\fIactual_type_return\fP\^; -.br - int *\fIactual_format_return\fP\^; -.br - unsigned long *\fInitems_return\fP\^; -.br - unsigned long *\fIbytes_after_return\fP\^; -.br - unsigned char **\fIprop_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Wi whose property you want to obtain -.IP \fIw\fP 1i -Specifies the window \*(Wi. -.IP \fIproperty\fP 1i -Specifies the property name. -.IP \fIlong_offset\fP 1i -Specifies the offset in the specified property (in 32-bit quantities) -where the data is to be retrieved. -.IP \fIlong_length\fP 1i -Specifies the length in 32-bit multiples of the data to be retrieved. -.IP \fIdelete\fP 1i -Specifies a Boolean value that determines whether the property is deleted. -.IP \fIreq_type\fP 1i -Specifies the atom identifier associated with the property type or -.PN AnyPropertyType . -.IP \fIactual_type_return\fP 1i -Returns the atom identifier that defines the actual type of the property. -.IP \fIactual_format_return\fP 1i -Returns the actual format of the property. -.IP \fInitems_return\fP 1i -Returns the actual number of 8-bit, 16-bit, or 32-bit items -stored in the prop_return data. -.IP \fIbytes_after_return\fP 1i -Returns the number of bytes remaining to be read in the property if -a partial read was performed. -.IP \fIprop_return\fP 1i -Returns the data in the specified format. -.LP -.eM -The -.PN XGetWindowProperty -function returns the actual type of the property; the actual format of the property; -the number of 8-bit, 16-bit, or 32-bit items transferred; the number of bytes remaining -to be read in the property; and a pointer to the data actually returned. -.PN XGetWindowProperty -sets the return arguments as follows: -.IP \(bu 5 -If the specified property does not exist for the specified window, -.PN XGetWindowProperty -returns -.PN None -to actual_type_return and the value zero to -actual_format_return and bytes_after_return. -The nitems_return argument is empty. -In this case, the delete argument is ignored. -.IP \(bu 5 -If the specified property exists -but its type does not match the specified type, -.PN XGetWindowProperty -returns the actual property type to actual_type_return, -the actual property format (never zero) to actual_format_return, -and the property length in bytes -(even if the actual_format_return is 16 or 32) -to bytes_after_return. -It also ignores the delete argument. -The nitems_return argument is empty. -.IP \(bu 5 -If the specified property exists and either you assign -.PN AnyPropertyType -to the req_type argument or the specified type matches the actual property type, -.PN XGetWindowProperty -returns the actual property type to actual_type_return and the actual -property format (never zero) to actual_format_return. -It also returns a value to bytes_after_return and nitems_return, by -defining the following -values: -.IP -.nf - N = actual length of the stored property in bytes - (even if the format is 16 or 32) - I = 4 * long_offset - T = N - I - L = MINIMUM(T, 4 * long_length) - A = N - (I + L) -.fi -.IP -The returned value starts at byte index I in the property (indexing -from zero), and its length in bytes is L. -If the value for long_offset causes L to be negative, -a -.PN BadValue -error results. -The value of bytes_after_return is A, -giving the number of trailing unread bytes in the stored property. -.LP -If the returned format is 8, the returned data is represented as a -.PN char -array. -If the returned format is 16, the returned data is represented as a -.PN short -array and should be cast to that type to obtain the elements. -If the returned format is 32, the returned data is represented as a -.PN long -array and should be cast to that type to obtain the elements. -.LP -.PN XGetWindowProperty -always allocates one extra byte in prop_return -(even if the property is zero length) -and sets it to zero so that simple properties consisting of characters -do not have to be copied into yet another string before use. -.LP -If delete is -.PN True -and bytes_after_return is zero, -.PN XGetWindowProperty -deletes the property -from the window and generates a -.PN PropertyNotify -event on the window. -.LP -The function returns -.PN Success -if it executes successfully. -To free the resulting data, -use -.PN XFree . -.LP -.PN XGetWindowProperty -can generate -.PN BadAtom , -.PN BadValue , -and -.PN BadWindow -errors. -.LP -.sp -To obtain a given window's property list, use -.PN XListProperties . -.IN "Property" "listing" -.IN "XListProperties" "" "@DEF@" -.sM -.FD 0 -Atom *XListProperties\^(\^\fIdisplay\fP, \fIw\fP\^, \fInum_prop_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - int *\fInum_prop_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Wi whose property list you want to obtain -.IP \fIw\fP 1i -Specifies the window \*(Wi. -.IP \fInum_prop_return\fP 1i -Returns the length of the properties array. -.LP -.eM -The -.PN XListProperties -function returns a pointer to an array of atom properties that are defined for -the specified window or returns NULL if no properties were found. -To free the memory allocated by this function, use -.PN XFree . -.LP -.PN XListProperties -can generate a -.PN BadWindow -error. -.LP -.sp -To change a property of a given window, use -.PN XChangeProperty . -.IN "Property" "changing" -.IN "Property" "appending" -.IN "Property" "prepending" -.IN "Property" "replacing" -.IN "Property" "format" -.IN "Property" "type" -.IN "XChangeProperty" "" "@DEF@" -.sM -.FD 0 -XChangeProperty\^(\^\fIdisplay\fP, \fIw\fP\^, \fIproperty\fP\^, \fItype\fP\^, \fIformat\fP\^, \fImode\fP\^, \fIdata\fP\^, \fInelements\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - Atom \fIproperty\fP\^, \fItype\fP\^; -.br - int \fIformat\fP\^; -.br - int \fImode\fP\^; -.br - unsigned char *\fIdata\fP\^; -.br - int \fInelements\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Wi whose property you want to change -.IP \fIw\fP 1i -Specifies the window \*(Wi. -.IP \fIproperty\fP 1i -Specifies the property name. -.IP \fItype\fP 1i -Specifies the type of the property. -The X server does not interpret the type but simply -passes it back to an application that later calls -.PN XGetWindowProperty . -.IP \fIformat\fP 1i -Specifies whether the data should be viewed as a list -of 8-bit, 16-bit, or 32-bit quantities. -Possible values are 8, 16, and 32. -This information allows the X server to correctly perform -byte-swap operations as necessary. -If the format is 16-bit or 32-bit, -you must explicitly cast your data pointer to an (unsigned char *) in the call -to -.PN XChangeProperty . -.\" Changed name of this file to prop_mode.a on 1/13/87 -.IP \fImode\fP 1i -Specifies the mode of the operation. -You can pass -.PN PropModeReplace , -.PN PropModePrepend , -or -.PN PropModeAppend . -.IP \fIdata\fP 1i -Specifies the property data. -.IP \fInelements\fP 1i -Specifies the number of elements of the specified data format. -.LP -.eM -The -.PN XChangeProperty -function alters the property for the specified window and -causes the X server to generate a -.PN PropertyNotify -event on that window. -.PN XChangeProperty -performs the following: -.IP \(bu 5 -If mode is -.PN PropModeReplace , -.PN XChangeProperty -discards the previous property value and stores the new data. -.IP \(bu 5 -If mode is -.PN PropModePrepend -or -.PN PropModeAppend , -.PN XChangeProperty -inserts the specified data before the beginning of the existing data -or onto the end of the existing data, respectively. -The type and format must match the existing property value, -or a -.PN BadMatch -error results. -If the property is undefined, -it is treated as defined with the correct type and -format with zero-length data. -.LP -If the specified format is 8, the property data must be a -.PN char -array. -If the specified format is 16, the property data must be a -.PN short -array. -If the specified format is 32, the property data must be a -.PN long -array. -.LP -The lifetime of a property is not tied to the storing client. -Properties remain until explicitly deleted, until the window is destroyed, -or until the server resets. -For a discussion of what happens when the connection to the X server is closed, -see section 2.6. -The maximum size of a property is server dependent and can vary dynamically -depending on the amount of memory the server has available. -(If there is insufficient space, a -.PN BadAlloc -error results.) -.LP -.PN XChangeProperty -can generate -.PN BadAlloc , -.PN BadAtom , -.PN BadMatch , -.PN BadValue , -and -.PN BadWindow -errors. -.LP -.sp -To rotate a window's property list, use -.PN XRotateWindowProperties . -.LP -.IN "XRotateWindowProperties" "" "@DEF@" -.sM -.FD 0 -XRotateWindowProperties\^(\^\fIdisplay\fP, \fIw\fP, \fIproperties\fP, \fInum_prop\fP, \fInpositions\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - Atom \fIproperties\fP\^[]\^; -.br - int \fInum_prop\fP\^; -.br - int \fInpositions\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIproperties\fP 1i -Specifies the array of properties that are to be rotated. -.IP \fInum_prop\fP 1i -Specifies the length of the properties array. -.IP \fInpositions\fP 1i -Specifies the rotation amount. -.LP -.eM -The -.PN XRotateWindowProperties -function allows you to rotate properties on a window and causes -the X server to generate -.PN PropertyNotify -events. -If the property names in the properties array are viewed as being numbered -starting from zero and if there are num_prop property names in the list, -then the value associated with property name I becomes the value associated -with property name (I + npositions) mod N for all I from zero to N \- 1. -The effect is to rotate the states by npositions places around the virtual ring -of property names (right for positive npositions, -left for negative npositions). -If npositions mod N is nonzero, -the X server generates a -.PN PropertyNotify -event for each property in the order that they are listed in the array. -If an atom occurs more than once in the list or no property with that -name is defined for the window, -a -.PN BadMatch -error results. -If a -.PN BadAtom -or -.PN BadMatch -error results, -no properties are changed. -.LP -.PN XRotateWindowProperties -can generate -.PN BadAtom , -.PN BadMatch , -and -.PN BadWindow -errors. -.LP -.sp -To delete a property on a given window, use -.PN XDeleteProperty . -.IN "Property" "deleting" -.IN "XDeleteProperty" "" "@DEF@" -.sM -.FD 0 -XDeleteProperty\^(\^\fIdisplay\fP, \fIw\fP\^, \fIproperty\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - Atom \fIproperty\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Wi whose property you want to delete -.IP \fIw\fP 1i -Specifies the window \*(Wi. -.IP \fIproperty\fP 1i -Specifies the property name. -.LP -.eM -The -.PN XDeleteProperty -function deletes the specified property only if the -property was defined on the specified window -and causes the X server to generate a -.PN PropertyNotify -event on the window unless the property does not exist. -.LP -.PN XDeleteProperty -can generate -.PN BadAtom -and -.PN BadWindow -errors. -.NH 2 -Selections -.XS -\*(SN Selections -.XE -.LP -.IN "Selection" -Selections are one method used by applications to exchange data. -By using the property mechanism, -applications can exchange data of arbitrary types and can negotiate -the type of the data. -A selection can be thought of as an indirect property with a dynamic type. -That is, rather than having the property stored in the X server, -the property is maintained by some client (the owner). -A selection is global in nature (considered to belong to the user -but be maintained by clients) rather than being private to a particular -window subhierarchy or a particular set of clients. -.LP -Xlib provides functions that you can use to set, get, or request conversion -of selections. -This allows applications to implement the notion of current selection, -which requires that notification be sent to applications when they no -longer own the selection. -Applications that support selection often highlight the current selection -and so must be informed when another application has -acquired the selection so that they can unhighlight the selection. -.LP -When a client asks for the contents of -a selection, it specifies a selection target type. -This target type -can be used to control the transmitted representation of the contents. -For example, if the selection is ``the last thing the user clicked on'' -and that is currently an image, then the target type might specify -whether the contents of the image should be sent in XY format or Z format. -.LP -The target type can also be used to control the class of -contents transmitted, for example, -asking for the ``looks'' (fonts, line -spacing, indentation, and so forth) of a paragraph selection, not the -text of the paragraph. -The target type can also be used for other -purposes. -The protocol does not constrain the semantics. -.LP -.sp -To set the selection owner, use -.PN XSetSelectionOwner . -.IN "Selection" "setting the owner" -.IN "XSetSelectionOwner" "" "@DEF@" -.sM -.FD 0 -XSetSelectionOwner\^(\^\fIdisplay\fP, \fIselection\fP\^, \fIowner\fP\^, \fItime\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Atom \fIselection\fP\^; -.br - Window \fIowner\fP\^; -.br - Time \fItime\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIselection\fP 1i -Specifies the selection atom. -.IP \fIowner\fP 1i -Specifies the owner of the specified selection atom. -You can pass a window or -.PN None . -.IP \fItime\fP 1i -Specifies the time. -You can pass either a timestamp or -.PN CurrentTime . -.LP -.eM -The -.PN XSetSelectionOwner -function changes the owner and last-change time for the specified selection -and has no effect if the specified time is earlier than the current -last-change time of the specified selection -or is later than the current X server time. -Otherwise, the last-change time is set to the specified time, -with -.PN CurrentTime -replaced by the current server time. -If the owner window is specified as -.PN None , -then the owner of the selection becomes -.PN None -(that is, no owner). -Otherwise, the owner of the selection becomes the client executing -the request. -.LP -If the new owner (whether a client or -.PN None ) -is not -the same as the current owner of the selection and the current -owner is not -.PN None , -the current owner is sent a -.PN SelectionClear -event. -If the client that is the owner of a selection is later -terminated (that is, its connection is closed) -or if the owner window it has specified in the request is later -destroyed, -the owner of the selection automatically -reverts to -.PN None , -but the last-change time is not affected. -The selection atom is uninterpreted by the X server. -.PN XGetSelectionOwner -returns the owner window, which is reported in -.PN SelectionRequest -and -.PN SelectionClear -events. -Selections are global to the X server. -.LP -.PN XSetSelectionOwner -can generate -.PN BadAtom -and -.PN BadWindow -errors. -.LP -.sp -To return the selection owner, use -.PN XGetSelectionOwner . -.IN "Selection" "getting the owner" -.IN "XGetSelectionOwner" "" "@DEF@" -.sM -.FD 0 -Window XGetSelectionOwner\^(\^\fIdisplay\fP, \fIselection\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Atom \fIselection\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Se whose owner you want returned -.IP \fIselection\fP 1i -Specifies the selection atom \*(Se. -.LP -.eM -The -.PN XGetSelectionOwner -function -returns the window ID associated with the window that currently owns the -specified selection. -If no selection was specified, the function returns the constant -.PN None . -If -.PN None -is returned, -there is no owner for the selection. -.LP -.PN XGetSelectionOwner -can generate a -.PN BadAtom -error. -.LP -.sp -To request conversion of a selection, use -.PN XConvertSelection . -.IN "Selection" "converting" -.IN "XConvertSelection" "" "@DEF@" -.sM -.FD 0 -XConvertSelection\^(\^\fIdisplay\fP, \fIselection\fP\^, \fItarget\fP\^, \fIproperty\fP\^, \fIrequestor\fP\^, \fItime\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Atom \fIselection\fP\^, \fItarget\fP\^; -.br - Atom \fIproperty\fP\^; -.br - Window \fIrequestor\fP\^; -.br - Time \fItime\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIselection\fP 1i -Specifies the selection atom. -.IP \fItarget\fP 1i -Specifies the target atom. -.IP \fIproperty\fP 1i -Specifies the property name. -You also can pass -.PN None . -.IP \fIrequestor\fP 1i -Specifies the requestor. -.IP \fItime\fP 1i -Specifies the time. -You can pass either a timestamp or -.PN CurrentTime . -.LP -.eM -.PN XConvertSelection -requests that the specified selection be converted to the specified target -type: -.IP \(bu 5 -If the specified selection has an owner, the X server sends a -.PN SelectionRequest -event to that owner. -.IP \(bu 5 -If no owner for the specified -selection exists, the X server generates a -.PN SelectionNotify -event to the -requestor with property -.PN None . -.LP -The arguments are passed on unchanged in either of the events. -There are two predefined selection atoms: PRIMARY and SECONDARY. -.LP -.PN XConvertSelection -can generate -.PN BadAtom -and -.PN BadWindow -errors. -.bp diff --git a/doc/xorg-docs/specs/X11/CH05 b/doc/xorg-docs/specs/X11/CH05 deleted file mode 100644 index 6ea218378..000000000 --- a/doc/xorg-docs/specs/X11/CH05 +++ /dev/null @@ -1,518 +0,0 @@ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by -.\" Digital Equipment Corporation -.\" -.\" Portions Copyright \(co 1990, 1991 by -.\" Tektronix, Inc. -.\" -.\" Permission to use, copy, modify and distribute this documentation for -.\" any purpose and without fee is hereby granted, provided that the above -.\" copyright notice appears in all copies and that both that copyright notice -.\" and this permission notice appear in all copies, and that the names of -.\" Digital and Tektronix not be used in in advertising or publicity pertaining -.\" to this documentation without specific, written prior permission. -.\" Digital and Tektronix makes no representations about the suitability -.\" of this documentation for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBChapter 5\fP\s-1 - -\s+1\fBPixmap and Cursor Functions\fP\s-1 -.sp 2 -.nr H1 5 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.na -.LP -.XS -Chapter 5: Pixmap and Cursor Functions -.XE -Once you have connected to an X server, -you can use the Xlib functions to: -.IP \(bu 5 -Create and free pixmaps -.IP \(bu 5 -Create, recolor, and free cursors -.NH 2 -Creating and Freeing Pixmaps -.XS -\*(SN Creating and Freeing Pixmaps -.XE -.LP -Pixmaps can only be used on the screen on which they were created. -Pixmaps are off-screen resources that are used for various operations, -such as defining cursors as tiling patterns -or as the source for certain raster operations. -Most graphics requests can operate either on a window or on a pixmap. -A bitmap is a single bit-plane pixmap. -.LP -.sp -To create a pixmap of a given size, use -.PN XCreatePixmap . -.IN "XCreatePixmap" "" "@DEF@" -.sM -.FD 0 -Pixmap XCreatePixmap\^(\^\fIdisplay\fP, \fId\fP\^, \fIwidth\fP\^, \fIheight\fP\^, \fIdepth\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - unsigned int \fIwidth\fP\^, \fIheight\fP\^; -.br - unsigned int \fIdepth\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fId\fP 1i -Specifies which screen the pixmap is created on. -.ds Wh , which define the dimensions of the pixmap -.IP \fIwidth\fP 1i -.br -.ns -.IP \fIheight\fP 1i -Specify the width and height\*(Wh. -.IP \fIdepth\fP 1i -Specifies the depth of the pixmap. -.LP -.eM -The -.PN XCreatePixmap -function creates a pixmap of the width, height, and depth you specified -and returns a pixmap ID that identifies it. -It is valid to pass an -.PN InputOnly -window to the drawable argument. -The width and height arguments must be nonzero, -or a -.PN BadValue -error results. -The depth argument must be one of the depths supported by the screen -of the specified drawable, -or a -.PN BadValue -error results. -.LP -The server uses the specified drawable to determine on which screen -to create the pixmap. -The pixmap can be used only on this screen -and only with other drawables of the same depth (see -.PN XCopyPlane -for an exception to this rule). -The initial contents of the pixmap are undefined. -.LP -.PN XCreatePixmap -can generate -.PN BadAlloc , -.PN BadDrawable , -and -.PN BadValue -errors. -.LP -.sp -To free all storage associated with a specified pixmap, use -.PN XFreePixmap . -.IN "XFreePixmap" "" "@DEF@" -.sM -.FD 0 -XFreePixmap\^(\^\fIdisplay\fP, \fIpixmap\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Pixmap \fIpixmap\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIpixmap\fP 1i -Specifies the pixmap. -.LP -.eM -The -.PN XFreePixmap -function first deletes the association between the pixmap ID and the pixmap. -Then, the X server frees the pixmap storage when there are no references to it. -The pixmap should never be referenced again. -.LP -.PN XFreePixmap -can generate a -.PN BadPixmap -error. -.NH 2 -Creating, Recoloring, and Freeing Cursors -.XS -\*(SN Creating, Recoloring, and Freeing Cursors -.XE -.LP -Each window can have a different cursor defined for it. -Whenever the pointer is in a visible window, -it is set to the cursor defined for that window. -If no cursor was defined for that window, -the cursor is the one defined for the parent window. -.LP -From X's perspective, -a cursor consists of a cursor source, mask, colors, and a hotspot. -The mask pixmap determines the shape of the cursor and must be a depth -of one. -The source pixmap must have a depth of one, -and the colors determine the colors of the source. -The hotspot defines the point on the cursor that is reported -when a pointer event occurs. -There may be limitations imposed by the hardware on -cursors as to size and whether a mask is implemented. -.IN "XQueryBestCursor" -.PN XQueryBestCursor -can be used to find out what sizes are possible. -There is a standard font for creating cursors, but -Xlib provides functions that you can use to create cursors -from an arbitrary font or from bitmaps. -.LP -.sp -To create a cursor from the standard cursor font, use -.PN XCreateFontCursor . -.IN "XCreateFontCursor" "" "@DEF@" -.sM -.FD 0 -#include -.sp 6p -Cursor XCreateFontCursor\^(\^\fIdisplay\fP, \fIshape\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - unsigned int \fIshape\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIshape\fP 1i -Specifies the shape of the cursor. -.LP -.eM -X provides a set of standard cursor shapes in a special font named -cursor. -Applications are encouraged to use this interface for their cursors -because the font can be customized for the individual display type. -The shape argument specifies which glyph of the standard fonts -to use. -.LP -The hotspot comes from the information stored in the cursor font. -The initial colors of a cursor are a black foreground and a white -background (see -.PN XRecolorCursor ). -For further information about cursor shapes, -see appendix B. -.LP -.PN XCreateFontCursor -can generate -.PN BadAlloc -and -.PN BadValue -errors. -.LP -.sp -To create a cursor from font glyphs, use -.PN XCreateGlyphCursor . -.IN "XCreateGlyphCursor" "" "@DEF@" -.sM -.FD 0 -Cursor XCreateGlyphCursor\^(\^\fIdisplay\fP, \fIsource_font\fP\^, \fImask_font\fP\^, \fIsource_char\fP\^, \fImask_char\fP\^, -.br - \fIforeground_color\fP\^, \fIbackground_color\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Font \fIsource_font\fP\^, \fImask_font\fP\^; -.br - unsigned int \fIsource_char\fP\^, \fImask_char\fP\^; -.br - XColor *\fIforeground_color\fP\^; -.br - XColor *\fIbackground_color\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIsource_font\fP 1i -Specifies the font for the source glyph. -.IP \fImask_font\fP 1i -Specifies the font for the mask glyph or -.PN None . -.IP \fIsource_char\fP 1i -Specifies the character glyph for the source. -.IP \fImask_char\fP 1i -Specifies the glyph character for the mask. -.IP \fIforeground_color\fP 1i -Specifies the RGB values for the foreground of the source. -.IP \fIbackground_color\fP 1i -Specifies the RGB values for the background of the source. -.LP -.eM -The -.PN XCreateGlyphCursor -function is similar to -.PN XCreatePixmapCursor -except that the source and mask bitmaps are obtained from the specified -font glyphs. -The source_char must be a defined glyph in source_font, -or a -.PN BadValue -error results. -If mask_font is given, -mask_char must be a defined glyph in mask_font, -or a -.PN BadValue -error results. -The mask_font and character are optional. -The origins of the source_char and mask_char (if defined) glyphs are -positioned coincidently and define the hotspot. -The source_char and mask_char need not have the same bounding box metrics, -and there is no restriction on the placement of the hotspot relative to the bounding -boxes. -If no mask_char is given, all pixels of the source are displayed. -You can free the fonts immediately by calling -.PN XFreeFont -if no further explicit references to them are to be made. -.LP -For 2-byte matrix fonts, -the 16-bit value should be formed with the byte1 -member in the most significant byte and the byte2 member in the -least significant byte. -.LP -.PN XCreateGlyphCursor -can generate -.PN BadAlloc , -.PN BadFont , -and -.PN BadValue -errors. -.LP -.sp -To create a cursor from two bitmaps, -use -.PN XCreatePixmapCursor . -.IN "XCreatePixmapCursor" "" "@DEF@" -.sM -.FD 0 -Cursor XCreatePixmapCursor\^(\^\fIdisplay\fP, \fIsource\fP\^, \fImask\fP\^, \fIforeground_color\fP\^, \fIbackground_color\fP\^, \fIx\fP\^, \fIy\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Pixmap \fIsource\fP\^; -.br - Pixmap \fImask\fP\^; -.br - XColor *\fIforeground_color\fP\^; -.br - XColor *\fIbackground_color\fP\^; -.br - unsigned int \fIx\fP\^, \fIy\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIsource\fP 1i -Specifies the shape of the source cursor. -.\" *** JIM: NEED TO CHECK THIS. *** -.IP \fImask\fP 1i -Specifies the cursor's source bits to be displayed or -.PN None . -.IP \fIforeground_color\fP 1i -Specifies the RGB values for the foreground of the source. -.IP \fIbackground_color\fP 1i -Specifies the RGB values for the background of the source. -.ds Xy , which indicate the hotspot relative to the source's origin -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the x and y coordinates\*(Xy. -.LP -.eM -The -.PN XCreatePixmapCursor -function creates a cursor and returns the cursor ID associated with it. -The foreground and background RGB values must be specified using -foreground_color and background_color, -even if the X server only has a -.PN StaticGray -or -.PN GrayScale -screen. -The foreground color is used for the pixels set to 1 in the -source, and the background color is used for the pixels set to 0. -Both source and mask, if specified, must have depth one (or a -.PN BadMatch -error results) but can have any root. -The mask argument defines the shape of the cursor. -The pixels set to 1 in the mask define which source pixels are displayed, -and the pixels set to 0 define which pixels are ignored. -If no mask is given, -all pixels of the source are displayed. -The mask, if present, must be the same size as the pixmap defined by the -source argument, or a -.PN BadMatch -error results. -The hotspot must be a point within the source, -or a -.PN BadMatch -error results. -.LP -The components of the cursor can be transformed arbitrarily to meet -display limitations. -The pixmaps can be freed immediately if no further explicit references -to them are to be made. -Subsequent drawing in the source or mask pixmap has an undefined effect on the -cursor. -The X server might or might not make a copy of the pixmap. -.LP -.PN XCreatePixmapCursor -can generate -.PN BadAlloc -and -.PN BadPixmap -errors. -.LP -.sp -To determine useful cursor sizes, use -.PN XQueryBestCursor . -.IN "XQueryBestCursor" "" "@DEF@" -.sM -.FD 0 -Status XQueryBestCursor\^(\^\fIdisplay\fP, \fId\fP, \fIwidth\fP\^, \fIheight\fP\^, \fIwidth_return\fP\^, \fIheight_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - unsigned int \fIwidth\fP\^, \fIheight\fP\^; -.br - unsigned int *\fIwidth_return\fP\^, *\fIheight_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Dr , which indicates the screen -.IP \fId\fP 1i -Specifies the drawable\*(Dr. -.ds Wh \ of the cursor that you want the size information for -.IP \fIwidth\fP 1i -.br -.ns -.IP \fIheight\fP 1i -Specify the width and height\*(Wh. -.IP \fIwidth_return\fP 1i -.br -.ns -.IP \fIheight_return\fP 1i -Return the best width and height that is closest to the specified width -and height. -.LP -.eM -Some displays allow larger cursors than other displays. -The -.PN XQueryBestCursor -function provides a way to find out what size cursors are actually -possible on the display. -.IN "Cursor" "limitations" -It returns the largest size that can be displayed. -Applications should be prepared to use smaller cursors on displays that -cannot support large ones. -.LP -.PN XQueryBestCursor -can generate a -.PN BadDrawable -error. -.LP -.sp -To change the color of a given cursor, use -.PN XRecolorCursor . -.IN "XRecolorCursor" "" "@DEF@" -.sM -.FD 0 -XRecolorCursor\^(\^\fIdisplay\fP, \fIcursor\fP\^, \fIforeground_color\fP\^, \fIbackground_color\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Cursor \fIcursor\fP\^; -.br - XColor *\fIforeground_color\fP\^, *\fIbackground_color\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcursor\fP 1i -Specifies the cursor. -.IP \fIforeground_color\fP 1i -Specifies the RGB values for the foreground of the source. -.IP \fIbackground_color\fP 1i -Specifies the RGB values for the background of the source. -.LP -.eM -The -.PN XRecolorCursor -function changes the color of the specified cursor, and -if the cursor is being displayed on a screen, -the change is visible immediately. -The pixel members of the -.PN XColor -structures are ignored; only the RGB values are used. -.LP -.PN XRecolorCursor -can generate a -.PN BadCursor -error. -.LP -.sp -To free (destroy) a given cursor, use -.PN XFreeCursor . -.IN "XFreeCursor" "" "@DEF@" -.sM -.FD 0 -XFreeCursor\^(\^\fIdisplay\fP, \fIcursor\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Cursor \fIcursor\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcursor\fP 1i -Specifies the cursor. -.LP -.eM -The -.PN XFreeCursor -function deletes the association between the cursor resource ID -and the specified cursor. -The cursor storage is freed when no other resource references it. -The specified cursor ID should not be referred to again. -.LP -.PN XFreeCursor -can generate a -.PN BadCursor -error. -.bp diff --git a/doc/xorg-docs/specs/X11/CH06 b/doc/xorg-docs/specs/X11/CH06 deleted file mode 100644 index 44824d324..000000000 --- a/doc/xorg-docs/specs/X11/CH06 +++ /dev/null @@ -1,4773 +0,0 @@ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by -.\" Digital Equipment Corporation -.\" -.\" Portions Copyright \(co 1990, 1991 by -.\" Tektronix, Inc. -.\" -.\" Permission to use, copy, modify and distribute this documentation for -.\" any purpose and without fee is hereby granted, provided that the above -.\" copyright notice appears in all copies and that both that copyright notice -.\" and this permission notice appear in all copies, and that the names of -.\" Digital and Tektronix not be used in in advertising or publicity pertaining -.\" to this documentation without specific, written prior permission. -.\" Digital and Tektronix makes no representations about the suitability -.\" of this documentation for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBChapter 6\fP\s-1 - -\s+1\fBColor Management Functions\fP\s-1 -.sp 2 -.nr H1 6 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.na -.LP -.XS -Chapter 6: Color Management Functions -.XE -Each X window always has an associated colormap that -provides a level of indirection between pixel values and colors displayed -on the screen. -Xlib provides functions that you can use to manipulate a colormap. -The X protocol defines colors using values in the RGB color space. -The RGB color space is device dependent; -rendering an RGB value on differing output devices typically results -in different colors. -Xlib also provides a means for clients to specify color using -device-independent color spaces for consistent results across devices. -Xlib supports device-independent color spaces derivable from the CIE XYZ -color space. -This includes the CIE XYZ, xyY, L*u*v*, and L*a*b* color spaces as well as -the TekHVC color space. -.LP -This chapter discusses how to: -.IP \(bu 5 -Create, copy, and destroy a colormap -.IP \(bu 5 -Specify colors by name or value -.IP \(bu 5 -Allocate, modify, and free color cells -.IP \(bu 5 -Read entries in a colormap -.IP \(bu 5 -Convert between color spaces -.IP \(bu 5 -Control aspects of color conversion -.IP \(bu 5 -Query the color gamut of a screen -.IP \(bu 5 -Add new color spaces -.LP -All functions, types, and symbols in this chapter with the prefix ``Xcms'' -are defined in -.hN X11/Xcms.h . -The remaining functions and types are defined in -.hN X11/Xlib.h . -.LP -Functions in this chapter manipulate the representation of color on the -screen. -For each possible value that a pixel can take in a window, -there is a color cell in the colormap. -For example, -if a window is 4 bits deep, pixel values 0 through 15 are defined. -A colormap is a collection of color cells. -A color cell consists of a triple of red, green, and blue (RGB) values. -The hardware imposes limits on the number of significant -bits in these values. -As each pixel is read out of display memory, the pixel -is looked up in a colormap. -The RGB value of the cell determines what color is displayed on the screen. -On a grayscale display with a black-and-white monitor, -the values are combined to determine the brightness on the screen. -.LP -Typically, an application allocates color cells or sets of color cells -to obtain the desired colors. -The client can allocate read-only cells. -In which case, -the pixel values for these colors can be shared among multiple applications, -and the RGB value of the cell cannot be changed. -If the client allocates read/write cells, -they are exclusively owned by the client, -and the color associated with the pixel value can be changed at will. -Cells must be allocated (and, if read/write, initialized with an RGB value) -by a client to obtain desired colors. -The use of pixel value for an -unallocated cell results in an undefined color. -.LP -Because colormaps are associated with windows, X supports displays -with multiple colormaps and, indeed, different types of colormaps. -If there are insufficient colormap resources in the display, -some windows will display in their true colors, and others -will display with incorrect colors. -A window manager usually controls which windows are displayed -in their true colors if more than one colormap is required for -the color resources the applications are using. -At any time, there is a set of installed colormaps for a screen. -Windows using one of the installed colormaps display with true colors, and -windows using other colormaps generally display with incorrect colors. -You can control the set of installed colormaps by using -.PN XInstallColormap -and -.PN XUninstallColormap . -.LP -Colormaps are local to a particular screen. -Screens always have a default colormap, -and programs typically allocate cells out of this colormap. -Generally, you should not write applications that monopolize -color resources. -Although some hardware supports multiple colormaps installed at one time, -many of the hardware displays -built today support only a single installed colormap, so the primitives -are written to encourage sharing of colormap entries between applications. -.LP -The -.PN DefaultColormap -macro returns the default colormap. -The -.PN DefaultVisual -macro -returns the default visual type for the specified screen. -.IN "Color map" -Possible visual types are -.PN StaticGray , -.PN GrayScale , -.PN StaticColor , -.PN PseudoColor , -.PN TrueColor , -or -.PN DirectColor -(see section 3.1). -.NH 2 -Color Structures -.XS -\*(SN Color Structures -.XE -.LP -Functions that operate only on RGB color space values use an -.PN XColor -structure, which contains: -.LP -.IN "XColor" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { - unsigned long pixel; /* pixel value */ - unsigned short red, green, blue; /* rgb values */ - char flags; /* DoRed, DoGreen, DoBlue */ - char pad; -} XColor; -.De -.LP -.eM -The red, green, and blue values are always in the range 0 to 65535 -inclusive, independent of the number of bits actually used in the -display hardware. -The server scales these values down to the range used by the hardware. -Black is represented by (0,0,0), -and white is represented by (65535,65535,65535). -.IN "Color" -In some functions, -the flags member controls which of the red, green, and blue members is used -and can be the inclusive OR of zero or more of -.PN DoRed , -.PN DoGreen , -and -.PN DoBlue . -.LP -.sp -Functions that operate on all color space values use an -.PN XcmsColor -structure. -This structure contains a union of substructures, -each supporting color specification encoding for a particular color space. -Like the -.PN XColor -structure, the -.PN XcmsColor -structure contains pixel -and color specification information (the spec member in the -.PN XcmsColor -structure). -.IN "XcmsColor" "" "@DEF@" -.sM -.LP -.Ds 0 -.TA .5i 1i 2.5i -.ta .5i 1i 2.5i -typedef unsigned long XcmsColorFormat; /* Color Specification Format */ - -typedef struct { - union { - XcmsRGB RGB; - XcmsRGBi RGBi; - XcmsCIEXYZ CIEXYZ; - XcmsCIEuvY CIEuvY; - XcmsCIExyY CIExyY; - XcmsCIELab CIELab; - XcmsCIELuv CIELuv; - XcmsTekHVC TekHVC; - XcmsPad Pad; - } spec; - unsigned long pixel; - XcmsColorFormat format; -} XcmsColor; /* Xcms Color Structure */ -.De -.LP -.eM -Because the color specification can be encoded for the various color spaces, -encoding for the spec member is identified by the format member, -which is of type -.PN XcmsColorFormat . -The following macros define standard formats. -.sM -.TS -lw(.5i) lw(1.6i) lw(1.4i) lw(1.5i). -T{ -#define -T} T{ -.PN XcmsUndefinedFormat -T} T{ -0x00000000 -T} -T{ -#define -T} T{ -.PN XcmsCIEXYZFormat -T} T{ -0x00000001 -T} T{ -/* CIE XYZ */ -T} -T{ -#define -T} T{ -.PN XcmsCIEuvYFormat -T} T{ -0x00000002 -T} T{ -/* CIE u'v'Y */ -T} -T{ -#define -T} T{ -.PN XcmsCIExyYFormat -T} T{ -0x00000003 -T} T{ -/* CIE xyY */ -T} -T{ -#define -T} T{ -.PN XcmsCIELabFormat -T} T{ -0x00000004 -T} T{ -/* CIE L*a*b* */ -T} -T{ -#define -T} T{ -.PN XcmsCIELuvFormat -T} T{ -0x00000005 -T} T{ -/* CIE L*u*v* */ -T} -T{ -#define -T} T{ -.PN XcmsTekHVCFormat -T} T{ -0x00000006 -T} T{ -/* TekHVC */ -T} -T{ -#define -T} T{ -.PN XcmsRGBFormat -T} T{ -0x80000000 -T} T{ -/* RGB Device */ -T} -T{ -#define -T} T{ -.PN XcmsRGBiFormat -T} T{ -0x80000001 -T} T{ -/* RGB Intensity */ -T} -.TE -.LP -.eM -Formats for device-independent color spaces are -distinguishable from those for device-dependent spaces by the 32nd bit. -If this bit is set, -it indicates that the color specification is in a device-dependent form; -otherwise, it is in a device-independent form. -If the 31st bit is set, -this indicates that the color space has been added to Xlib at run time -(see section 6.12.4). -The format value for a color space added at run time may be different each -time the program is executed. -If references to such a color space must be made outside the client -(for example, storing a color specification in a file), -then reference should be made by color space string prefix -(see -.PN XcmsFormatOfPrefix -and -.PN XcmsPrefixOfFormat ). -.LP -Data types that describe the color specification encoding for the various -color spaces are defined as follows: -.sM -.IN "XcmsRGB" "" "@DEF@" -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef double XcmsFloat; - -typedef struct { - unsigned short red; /* 0x0000 to 0xffff */ - unsigned short green; /* 0x0000 to 0xffff */ - unsigned short blue; /* 0x0000 to 0xffff */ -} XcmsRGB; /* RGB Device */ -.De -.IN "XcmsRGBi" "" "@DEF@" -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { - XcmsFloat red; /* 0.0 to 1.0 */ - XcmsFloat green; /* 0.0 to 1.0 */ - XcmsFloat blue; /* 0.0 to 1.0 */ -} XcmsRGBi; /* RGB Intensity */ -.De -.IN "XcmsCIEXYZ" "" "@DEF@" -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { - XcmsFloat X; - XcmsFloat Y; /* 0.0 to 1.0 */ - XcmsFloat Z; -} XcmsCIEXYZ; /* CIE XYZ */ -.De -.IN "XcmsCIEuvY" "" "@DEF@" -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { - XcmsFloat u_prime; /* 0.0 to ~0.6 */ - XcmsFloat v_prime; /* 0.0 to ~0.6 */ - XcmsFloat Y; /* 0.0 to 1.0 */ -} XcmsCIEuvY; /* CIE u'v'Y */ -.De -.IN "XcmsCIExyY" "" "@DEF@" -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { - XcmsFloat x; /* 0.0 to ~.75 */ - XcmsFloat y; /* 0.0 to ~.85 */ - XcmsFloat Y; /* 0.0 to 1.0 */ -} XcmsCIExyY; /* CIE xyY */ -.De -.IN "XcmsCIELab" "" "@DEF@" -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { - XcmsFloat L_star; /* 0.0 to 100.0 */ - XcmsFloat a_star; - XcmsFloat b_star; -} XcmsCIELab; /* CIE L*a*b* */ -.De -.IN "XcmsCIELuv" "" "@DEF@" -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { - XcmsFloat L_star; /* 0.0 to 100.0 */ - XcmsFloat u_star; - XcmsFloat v_star; -} XcmsCIELuv; /* CIE L*u*v* */ -.De -.IN "XcmsTekHVC" "" "@DEF@" -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { - XcmsFloat H; /* 0.0 to 360.0 */ - XcmsFloat V; /* 0.0 to 100.0 */ - XcmsFloat C; /* 0.0 to 100.0 */ -} XcmsTekHVC; /* TekHVC */ -.De -.IN "XcmsPad" "" "@DEF@" -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { - XcmsFloat pad0; - XcmsFloat pad1; - XcmsFloat pad2; - XcmsFloat pad3; -} XcmsPad; /* four doubles */ -.De -.LP -.eM -The device-dependent formats provided allow color specification in: -.IP \(bu 5 -RGB Intensity -.Pn ( XcmsRGBi ) -.IP -Red, green, and blue linear intensity values, -floating-point values from 0.0 to 1.0, -where 1.0 indicates full intensity, 0.5 half intensity, and so on. -.IP \(bu 5 -RGB Device -.Pn ( XcmsRGB ) -.IP -Red, green, and blue values appropriate for the specified output device. -.PN XcmsRGB -values are of type unsigned short, -scaled from 0 to 65535 inclusive, -and are interchangeable with the red, green, and blue values in an -.PN XColor -structure. -.LP -It is important to note that RGB Intensity values are not gamma corrected -values. -In contrast, -RGB Device values generated as a result of converting color specifications -are always gamma corrected, and -RGB Device values acquired as a result of querying a colormap -or passed in by the client are assumed by Xlib to be gamma corrected. -The term \fIRGB value\fP in this manual always refers to an RGB Device value. -.NH 2 -Color Strings -.XS -\*(SN Color Strings -.XE -.LP -Xlib provides a mechanism for using string names for colors. -A color string may either contain an abstract color name -or a numerical color specification. -Color strings are case-insensitive. -.LP -Color strings are used in the following functions: -.IP \(bu 5 -.PN XAllocNamedColor -.IP \(bu 5 -.PN XcmsAllocNamedColor -.IP \(bu 5 -.PN XLookupColor -.IP \(bu 5 -.PN XcmsLookupColor -.IP \(bu 5 -.PN XParseColor -.IP \(bu 5 -.PN XStoreNamedColor -.LP -Xlib supports the use of abstract color names, for example, red or blue. -A value for this abstract name is obtained by searching one or more color -name databases. -Xlib first searches zero or more client-side databases; -the number, location, and content of these databases is -implementation-dependent and might depend on the current locale. -If the name is not found, Xlib then looks for the color in the -X server's database. -If the color name is not in the Host Portable Character Encoding, -the result is implementation-dependent. -.LP -A numerical color specification -consists of a color space name and a set of values in the following syntax: -.LP -.sM -.Ds 0 -\fI\fP:\fI/.../\fP -.De -.LP -.eM -The following are examples of valid color strings. -.LP -.Ds 0 -"CIEXYZ:0.3227/0.28133/0.2493" -"RGBi:1.0/0.0/0.0" -"rgb:00/ff/00" -"CIELuv:50.0/0.0/0.0" -.De -The syntax and semantics of numerical specifications are given -for each standard color space in the following sections. -.NH 3 -RGB Device String Specification -.XS -\*(SN RGB Device String Specification -.XE -.LP -An RGB Device specification is identified by -the prefix ``rgb:'' and conforms to the following syntax: -.LP -.\" Start marker code here -.Ds 0 -rgb:\fI//\fP - - \fI\fP, \fI\fP, \fI\fP := \fIh\fP | \fIhh\fP | \fIhhh\fP | \fIhhhh\fP - \fIh\fP := single hexadecimal digits (case insignificant) -.De -.\" End marker code here -.LP -Note that \fIh\fP indicates the value scaled in 4 bits, -\fIhh\fP the value scaled in 8 bits, -\fIhhh\fP the value scaled in 12 bits, -and \fIhhhh\fP the value scaled in 16 bits, respectively. -.LP -Typical examples are the strings ``rgb:ea/75/52'' and ``rgb:ccc/320/320'', -but mixed numbers of hexadecimal digit strings -(``rgb:ff/a5/0'' and ``rgb:ccc/32/0'') -are also allowed. -.LP -For backward compatibility, an older syntax for RGB Device is -supported, but its continued use is not encouraged. -The syntax is an initial sharp sign character followed by -a numeric specification, in one of the following formats: -.LP -.\" Start marker code here -.Ds 0 -.TA 2i -.ta 2i -#RGB (4 bits each) -#RRGGBB (8 bits each) -#RRRGGGBBB (12 bits each) -#RRRRGGGGBBBB (16 bits each) -.De -.\" End marker code here -.LP -The R, G, and B represent single hexadecimal digits. -When fewer than 16 bits each are specified, -they represent the most significant bits of the value -(unlike the ``rgb:'' syntax, in which values are scaled). -For example, the string ``#3a7'' is the same as ``#3000a0007000''. -.NH 3 -RGB Intensity String Specification -.XS -\*(SN RGB Intensity String Specification -.XE -.LP -An RGB intensity specification is identified -by the prefix ``rgbi:'' and conforms to the following syntax: -.LP -.\" Start marker code here -.Ds 0 -rgbi:\fI//\fP -.De -.\" End marker code here -.LP -Note that red, green, and blue are floating-point values -between 0.0 and 1.0, inclusive. -The input format for these values is an optional sign, -a string of numbers possibly containing a decimal point, -and an optional exponent field containing an E or e -followed by a possibly signed integer string. -.NH 3 -Device-Independent String Specifications -.XS -\*(SN Device-Independent String Specifications -.XE -.LP -The standard device-independent string specifications have -the following syntax: -.LP -.\" Start marker code here -.Ds 0 -CIEXYZ:\fI//\fP -CIEuvY:\fI//\fP -CIExyY:\fI//\fP -CIELab:\fI//\fP -CIELuv:\fI//\fP -TekHVC:\fI//\fP -.De -.\" End marker code here -.LP -All of the values (C, H, V, X, Y, Z, a, b, u, v, y, x) are -floating-point values. -The syntax for these values is an optional plus or minus sign, -a string of digits possibly containing a decimal point, -and an optional exponent field consisting of an ``E'' or ``e'' -followed by an optional plus or minus followed by a string of digits. -.NH 2 -Color Conversion Contexts and Gamut Mapping -.XS -\*(SN Color Conversion Contexts and Gamut Mapping -.XE -.LP -When Xlib converts device-independent color specifications -into device-dependent specifications and vice versa, -it uses knowledge about the color limitations of the screen hardware. -This information, typically called the device profile, -.IN "Device profile" -is available in a Color Conversion Context (CCC). -.IN "Color Conversion Context" -.IN "CCC" -.LP -Because a specified color may be outside the color gamut of the target screen -and the white point associated with the color specification may differ -from the white point inherent to the screen, -Xlib applies gamut mapping when it encounters certain conditions: -.IN "White point" -.IP \(bu 5 -Gamut compression occurs when conversion of device-independent -color specifications to device-dependent color specifications -results in a color out of the target screen's gamut. -.IP \(bu 5 -White adjustment occurs when the inherent white point of the screen -differs from the white point assumed by the client. -.LP -Gamut handling methods are stored as callbacks in the CCC, -which in turn are used by the color space conversion routines. -Client data is also stored in the CCC for each callback. -The CCC also contains the white point the client assumes to be -associated with color specifications (that is, the Client White Point). -.IN "Client White Point" -.IN "Gamut compression" -.IN "Gamut handling" -.IN "White point adjustment" -The client can specify the gamut handling callbacks and client data -as well as the Client White Point. -Xlib does not preclude the X client from performing other -forms of gamut handling (for example, gamut expansion); -however, Xlib does not provide direct support for gamut handling -other than white adjustment and gamut compression. -.LP -Associated with each colormap is an initial CCC transparently generated by -Xlib. -.IN "Color Conversion Context" "creation" -Therefore, -when you specify a colormap as an argument to an Xlib function, -you are indirectly specifying a CCC. -.IN "CCC" "of colormap" -.IN "Color Conversion Context" "of colormap" -There is a default CCC associated with each screen. -Newly created CCCs inherit attributes from the default CCC, -so the default CCC attributes can be modified to affect new CCCs. -.IN "CCC" "default" -.IN "Color Conversion Context" "default" -.LP -Xcms functions in which gamut mapping can occur return -.PN Status -and have specific status values defined for them, -as follows: -.IP \(bu 5 -.PN XcmsFailure -indicates that the function failed. -.IP \(bu 5 -.PN XcmsSuccess -indicates that the function succeeded. -In addition, -if the function performed any color conversion, -the colors did not need to be compressed. -.IP \(bu 5 -.PN XcmsSuccessWithCompression -indicates the function performed color conversion -and at least one of the colors needed to be compressed. -The gamut compression method is determined by the gamut compression -procedure in the CCC that is specified directly as a function argument -or in the CCC indirectly specified by means of the colormap argument. -.NH 2 -Creating, Copying, and Destroying Colormaps -.XS -\*(SN Creating, Copying, and Destroying Colormaps -.XE -.LP -To create a colormap for a screen, use -.PN XCreateColormap . -.IN "XCreateColormap" "" "@DEF@" -.sM -.FD 0 -Colormap XCreateColormap\^(\^\fIdisplay\fP, \fIw\fP\^, \fIvisual\fP\^, \fIalloc\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - Visual *\fIvisual\fP\^; -.br - int \fIalloc\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Wi on whose screen you want to create a colormap -.IP \fIw\fP 1i -Specifies the window \*(Wi. -.IP \fIvisual\fP 1i -Specifies a visual type supported on the screen. -If the visual type is not one supported by the screen, -a -.PN BadMatch -error results. -.IP \fIalloc\fP 1i -Specifies the colormap entries to be allocated. -You can pass -.PN AllocNone -or -.PN AllocAll . -.LP -.eM -The -.PN XCreateColormap -function creates a colormap of the specified visual type for the screen -on which the specified window resides and returns the colormap ID -associated with it. -Note that the specified window is only used to determine the screen. -.LP -The initial values of the colormap entries are undefined for the -visual classes -.PN GrayScale , -.PN PseudoColor , -and -.PN DirectColor . -For -.PN StaticGray , -.PN StaticColor , -and -.PN TrueColor , -the entries have defined values, -but those values are specific to the visual and are not defined by X. -For -.PN StaticGray , -.PN StaticColor , -and -.PN TrueColor , -alloc must be -.PN AllocNone , -or a -.PN BadMatch -error results. -For the other visual classes, -if alloc is -.PN AllocNone , -the colormap initially has no allocated entries, -and clients can allocate them. -For information about the visual types, -see section 3.1. -.LP -If alloc is -.PN AllocAll , -the entire colormap is allocated writable. -The initial values of all allocated entries are undefined. -For -.PN GrayScale -and -.PN PseudoColor , -the effect is as if an -.PN XAllocColorCells -call returned all pixel values from zero to N \- 1, -where N is the colormap entries value in the specified visual. -For -.PN DirectColor , -the effect is as if an -.PN XAllocColorPlanes -call returned a pixel value of zero and red_mask, green_mask, -and blue_mask values containing the same bits as the corresponding -masks in the specified visual. -However, in all cases, -none of these entries can be freed by using -.PN XFreeColors . -.LP -.PN XCreateColormap -can generate -.PN BadAlloc , -.PN BadMatch , -.PN BadValue , -and -.PN BadWindow -errors. -.LP -.sp -To create a new colormap when the allocation out of a previously -shared colormap has failed because of resource exhaustion, use -.PN XCopyColormapAndFree . -.IN "XCopyColormapAndFree" "" "@DEF@" -.sM -.FD 0 -Colormap XCopyColormapAndFree\^(\^\fIdisplay\fP, \fIcolormap\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Colormap \fIcolormap\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcolormap\fP 1i -Specifies the colormap. -.LP -.eM -The -.PN XCopyColormapAndFree -function creates a colormap of the same visual type and for the same screen -as the specified colormap and returns the new colormap ID. -It also moves all of the client's existing allocation from the specified -colormap to the new colormap with their color values intact -and their read-only or writable characteristics intact and frees those entries -in the specified colormap. -Color values in other entries in the new colormap are undefined. -If the specified colormap was created by the client with alloc set to -.PN AllocAll , -the new colormap is also created with -.PN AllocAll , -all color values for all entries are copied from the specified colormap, -and then all entries in the specified colormap are freed. -If the specified colormap was not created by the client with -.PN AllocAll , -the allocations to be moved are all those pixels and planes -that have been allocated by the client using -.PN XAllocColor , -.PN XAllocNamedColor , -.PN XAllocColorCells , -or -.PN XAllocColorPlanes -and that have not been freed since they were allocated. -.LP -.PN XCopyColormapAndFree -can generate -.PN BadAlloc -and -.PN BadColor -errors. -.LP -.sp -To destroy a colormap, use -.PN XFreeColormap . -.IN "XFreeColormap" "" "@DEF@" -.sM -.FD 0 -XFreeColormap\^(\^\fIdisplay\fP, \fIcolormap\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Colormap \fIcolormap\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Cm that you want to destroy -.IP \fIcolormap\fP 1i -Specifies the colormap \*(Cm. -.LP -.eM -The -.PN XFreeColormap -function deletes the association between the colormap resource ID -and the colormap and frees the colormap storage. -However, this function has no effect on the default colormap for a screen. -If the specified colormap is an installed map for a screen, -it is uninstalled (see -.PN XUninstallColormap ). -If the specified colormap is defined as the colormap for a window (by -.PN XCreateWindow , -.PN XSetWindowColormap , -or -.PN XChangeWindowAttributes ), -.PN XFreeColormap -changes the colormap associated with the window to -.PN None -and generates a -.PN ColormapNotify -event. -X does not define the colors displayed for a window with a colormap of -.PN None . -.LP -.PN XFreeColormap -can generate a -.PN BadColor -error. -.NH 2 -Mapping Color Names to Values -.XS -\*(SN Mapping Color Names to Values -.XE -.LP -.sp -To map a color name to an RGB value, use -.PN XLookupColor . -.IN "Color" "naming" -.IN "XLookupColor" "" "@DEF@" -.sM -.FD 0 -Status XLookupColor\^(\^\fIdisplay\fP, \fIcolormap\fP, \fIcolor_name\fP, \ -\fIexact_def_return\fP\^, \fIscreen_def_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Colormap \fIcolormap\fP\^; -.br - char *\fIcolor_name\fP\^; -.br - XColor *\fIexact_def_return\fP\^, *\fIscreen_def_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcolormap\fP 1i -Specifies the colormap. -.IP \fIcolor_name\fP 1i -Specifies the color name string (for example, red) whose color -definition structure you want returned. -.IP \fIexact_def_return\fP 1i -Returns the exact RGB values. -.IP \fIscreen_def_return\fP 1i -Returns the closest RGB values provided by the hardware. -.LP -.eM -The -.PN XLookupColor -function looks up the string name of a color with respect to the screen -associated with the specified colormap. -It returns both the exact color values and -the closest values provided by the screen -with respect to the visual type of the specified colormap. -If the color name is not in the Host Portable Character Encoding, -the result is implementation-dependent. -Use of uppercase or lowercase does not matter. -.PN XLookupColor -returns nonzero if the name is resolved; -otherwise, it returns zero. -.LP -.PN XLookupColor -can generate a -.PN BadColor -error. -.LP -.sp -To map a color name to the exact RGB value, use -.PN XParseColor . -.IN "Color" "naming" -.IN "XParseColor" "" "@DEF@" -.sM -.FD 0 -Status XParseColor\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \^\fIspec\fP\^, \fIexact_def_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Colormap \fIcolormap\fP\^; -.br - char *\fIspec\fP\^; -.br - XColor *\fIexact_def_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcolormap\fP 1i -Specifies the colormap. -.IP \fIspec\fP 1i -Specifies the color name string; -case is ignored. -.IP \fIexact_def_return\fP 1i -Returns the exact color value for later use and sets the -.PN DoRed , -.PN DoGreen , -and -.PN DoBlue -flags. -.LP -.eM -The -.PN XParseColor -function looks up the string name of a color with respect to the screen -associated with the specified colormap. -It returns the exact color value. -If the color name is not in the Host Portable Character Encoding, -the result is implementation-dependent. -Use of uppercase or lowercase does not matter. -.PN XParseColor -returns nonzero if the name is resolved; -otherwise, it returns zero. -.LP -.PN XParseColor -can generate a -.PN BadColor -error. -.LP -.sp -To map a color name to a value in an arbitrary color space, use -.PN XcmsLookupColor . -.IN "Color" "naming" -.IN "XcmsLookupColor" "" "@DEF@" -.sM -.FD 0 -Status XcmsLookupColor\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \fIcolor_string\fP\^, \fIcolor_exact_return\fP\^, \fIcolor_screen_return\fP\^, -.br - \fIresult_format\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Colormap \fIcolormap\fP\^; -.br - char *\fIcolor_string\fP\^; -.br - XcmsColor *\fIcolor_exact_return\fP\^, *\fIcolor_screen_return\fP\^; -.br - XcmsColorFormat \fIresult_format\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcolormap\fP 1i -Specifies the colormap. -.ds St -.IP \fIcolor_string\fP 1i -Specifies the color string\*(St. -.IP \fIcolor_exact_return\fP 1i -Returns the color specification parsed from the color string -or parsed from the corresponding string found in a color-name database. -.IP \fIcolor_screen_return\fP 1i -Returns the color that can be reproduced on the screen. -.IP \fIresult_format\fP 1i -Specifies the color format for the returned color -specifications (color_screen_return and color_exact_return arguments). -If the format is -.PN XcmsUndefinedFormat -and the color string contains a -numerical color specification, -the specification is returned in the format used in that numerical -color specification. -If the format is -.PN XcmsUndefinedFormat -and the color string contains a color name, -the specification is returned in the format used -to store the color in the database. -.LP -.eM -The -.PN XcmsLookupColor -function looks up the string name of a color with respect to the screen -associated with the specified colormap. -It returns both the exact color values and -the closest values provided by the screen -with respect to the visual type of the specified colormap. -The values are returned in the format specified by result_format. -If the color name is not in the Host Portable Character Encoding, -the result is implementation-dependent. -Use of uppercase or lowercase does not matter. -.PN XcmsLookupColor -returns -.PN XcmsSuccess -or -.PN XcmsSuccessWithCompression -if the name is resolved; otherwise, it returns -.PN XcmsFailure . -If -.PN XcmsSuccessWithCompression -is returned, the color specification returned in -color_screen_return is the result of gamut compression. -.NH 2 -Allocating and Freeing Color Cells -.XS -\*(SN Allocating and Freeing Color Cells -.XE -.LP -There are two ways of allocating color cells: -explicitly as read-only entries, one pixel value at a time, -or read/write, -where you can allocate a number of color cells and planes simultaneously. -.IN "Read-only colormap cells" -A read-only cell has its RGB value set by the server. -.IN "Read/write colormap cells" -Read/write cells do not have defined colors initially; -functions described in the next section must be used to store values into them. -Although it is possible for any client to store values into a read/write -cell allocated by another client, -read/write cells normally should be considered private to the client -that allocated them. -.LP -Read-only colormap cells are shared among clients. -The server counts each allocation and freeing of the cell by clients. -When the last client frees a shared cell, the cell is finally deallocated. -If a single client allocates the same read-only cell multiple -times, the server counts each such allocation, not just the first one. -.LP -.sp -To allocate a read-only color cell with an RGB value, use -.PN XAllocColor . -.IN "Allocation" "read-only colormap cells" -.IN "Read-only colormap cells" "allocating" -.IN "Color" "allocation" -.IN "XAllocColor" "" "@DEF@" -.sM -.FD 0 -Status XAllocColor\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \fIscreen_in_out\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Colormap \fIcolormap\fP\^; -.br - XColor *\fIscreen_in_out\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcolormap\fP 1i -Specifies the colormap. -.IP \fIscreen_in_out\fP 1i -Specifies and returns the values actually used in the colormap. -.LP -.eM -The -.PN XAllocColor -function allocates a read-only colormap entry corresponding to the closest -RGB value supported by the hardware. -.PN XAllocColor -returns the pixel value of the color closest to the specified -RGB elements supported by the hardware -and returns the RGB value actually used. -The corresponding colormap cell is read-only. -In addition, -.PN XAllocColor -returns nonzero if it succeeded or zero if it failed. -.IN "Color map" -.IN "Color" "allocation" -.IN "Allocation" "colormap" -.IN "read-only colormap cells" -Multiple clients that request the same effective RGB value can be assigned -the same read-only entry, thus allowing entries to be shared. -When the last client deallocates a shared cell, it is deallocated. -.PN XAllocColor -does not use or affect the flags in the -.PN XColor -structure. -.LP -.PN XAllocColor -can generate a -.PN BadColor -error. -.EQ -delim %% -.EN -.LP -.sp -To allocate a read-only color cell with a color in arbitrary format, use -.PN XcmsAllocColor . -.IN "Allocation" "read-only colormap cells" -.IN "Read-only colormap cells" "allocating" -.IN "Color" "allocation" -.IN "XcmsAllocColor" "" "@DEF@" -.sM -.FD 0 -Status XcmsAllocColor\^(\^\fIdisplay\fP\^, \fIcolormap\fP\^, \fIcolor_in_out\fP\^, \fIresult_format\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Colormap \fIcolormap\fP\^; -.br - XcmsColor *\fIcolor_in_out\fP\^; -.br - XcmsColorFormat \fIresult_format\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcolormap\fP 1i -Specifies the colormap. -.IP \fIcolor_in_out\fP 1i -Specifies the color to allocate and returns the pixel and color -that is actually used in the colormap. -.IP \fIresult_format\fP 1i -Specifies the color format for the returned color specification. -.LP -.eM -The -.PN XcmsAllocColor -function is similar to -.PN XAllocColor -except the color can be specified in any format. -The -.PN XcmsAllocColor -function ultimately calls -.PN XAllocColor -to allocate a read-only color cell (colormap entry) with the specified color. -.PN XcmsAllocColor -first converts the color specified -to an RGB value and then passes this to -.PN XAllocColor . -.PN XcmsAllocColor -returns the pixel value of the color cell and the color specification -actually allocated. -This returned color specification is the result of converting the RGB value -returned by -.PN XAllocColor -into the format specified with the result_format argument. -If there is no interest in a returned color specification, -unnecessary computation can be bypassed if result_format is set to -.PN XcmsRGBFormat . -The corresponding colormap cell is read-only. -If this routine returns -.PN XcmsFailure , -the color_in_out color specification is left unchanged. -.LP -.PN XcmsAllocColor -can generate a -.PN BadColor -error. -.LP -.sp -To allocate a read-only color cell using a color name and return the closest -color supported by the hardware in RGB format, use -.PN XAllocNamedColor . -.IN "Allocation" "read-only colormap cells" -.IN "Read-only colormap cells" "allocating" -.IN "Color" "naming" -.IN "Color" "allocation" -.IN "XAllocNamedColor" "" "@DEF@" -.sM -.FD 0 -Status XAllocNamedColor\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \ -\fIcolor_name\fP\^, \fIscreen_def_return\fP\^, \fIexact_def_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Colormap \fIcolormap\fP\^; -.br - char *\fIcolor_name\fP\^; -.br - XColor *\fIscreen_def_return\fP\^, *\fIexact_def_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcolormap\fP 1i -Specifies the colormap. -.IP \fIcolor_name\fP 1i -Specifies the color name string (for example, red) whose color -definition structure you want returned. -.IP \fIscreen_def_return\fP 1i -Returns the closest RGB values provided by the hardware. -.IP \fIexact_def_return\fP 1i -Returns the exact RGB values. -.LP -.eM -The -.PN XAllocNamedColor -function looks up the named color with respect to the screen that is -associated with the specified colormap. -It returns both the exact database definition and -the closest color supported by the screen. -The allocated color cell is read-only. -The pixel value is returned in screen_def_return. -If the color name is not in the Host Portable Character Encoding, -the result is implementation-dependent. -Use of uppercase or lowercase does not matter. -If screen_def_return and exact_def_return -point to the same structure, the pixel field will be set correctly, -but the color values are undefined. -.PN XAllocNamedColor -returns nonzero if a cell is allocated; -otherwise, it returns zero. -.LP -.PN XAllocNamedColor -can generate a -.PN BadColor -error. -.LP -.sp -To allocate a read-only color cell using a color name and return the closest -color supported by the hardware in an arbitrary format, use -.PN XcmsAllocNamedColor . -.IN "Allocation" "read-only colormap cells" -.IN "Read-only colormap cells" "allocating" -.IN "Color" "naming" -.IN "Color" "allocation" -.IN "XcmsAllocNamedColor" "" "@DEF@" -.sM -.FD 0 -Status XcmsAllocNamedColor\^(\^\fIdisplay\fP\^, \fIcolormap\fP\^, \fIcolor_string\fP\^, \fIcolor_screen_return\fP\^, \fIcolor_exact_return\fP\^, -.br - \fIresult_format\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Colormap \fIcolormap\fP\^; -.br - char *\fIcolor_string\fP\^; -.br - XcmsColor *\fIcolor_screen_return\fP\^; -.br - XcmsColor *\fIcolor_exact_return\fP\^; -.br - XcmsColorFormat \fIresult_format\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcolormap\fP 1i -Specifies the colormap. -.ds St \ whose color definition structure is to be returned -.IP \fIcolor_string\fP 1i -Specifies the color string\*(St. -.IP \fIcolor_screen_return\fP 1i -Returns the pixel value of the color cell and color specification -that actually is stored for that cell. -.IP \fIcolor_exact_return\fP 1i -Returns the color specification parsed from the color string -or parsed from the corresponding string found in a color-name database. -.IP \fIresult_format\fP 1i -Specifies the color format for the returned color -specifications (color_screen_return and color_exact_return arguments). -If the format is -.PN XcmsUndefinedFormat -and the color string contains a -numerical color specification, -the specification is returned in the format used in that numerical -color specification. -If the format is -.PN XcmsUndefinedFormat -and the color string contains a color name, -the specification is returned in the format used -to store the color in the database. -.LP -.eM -The -.PN XcmsAllocNamedColor -function is similar to -.PN XAllocNamedColor -except that the color returned can be in any format specified. -This function -ultimately calls -.PN XAllocColor -to allocate a read-only color cell with -the color specified by a color string. -The color string is parsed into an -.PN XcmsColor -structure (see -.PN XcmsLookupColor ), -converted -to an RGB value, and finally passed to -.PN XAllocColor . -If the color name is not in the Host Portable Character Encoding, -the result is implementation-dependent. -Use of uppercase or lowercase does not matter. -.LP -This function returns both the color specification as a result -of parsing (exact specification) and the actual color specification -stored (screen specification). -This screen specification is the result of converting the RGB value -returned by -.PN XAllocColor -into the format specified in result_format. -If there is no interest in a returned color specification, -unnecessary computation can be bypassed if result_format is set to -.PN XcmsRGBFormat . -If color_screen_return and color_exact_return -point to the same structure, the pixel field will be set correctly, -but the color values are undefined. -.LP -.PN XcmsAllocNamedColor -can generate a -.PN BadColor -error. -.LP -.sp -To allocate read/write color cell and color plane combinations for a -.PN PseudoColor -model, use -.PN XAllocColorCells . -.IN "Read/write colormap cells" "allocating" -.IN "Allocation" "read/write colormap cells" -.IN "Color" "allocation" -.IN "XAllocColorCells" "" "@DEF@" -.sM -.FD 0 -Status XAllocColorCells\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \fIcontig\fP\^, \ -\fIplane_masks_return\fP\^, \fInplanes\fP\^, -.br - \fIpixels_return\fP\^, \fInpixels\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Colormap \fIcolormap\fP\^; -.br - Bool \fIcontig\fP\^; -.br - unsigned long \fIplane_masks_return\fP[\^]\^; -.br - unsigned int \fInplanes\fP\^; -.br - unsigned long \fIpixels_return\fP[\^]\^; -.br - unsigned int \fInpixels\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcolormap\fP 1i -Specifies the colormap. -.IP \fIcontig\fP 1i -Specifies a Boolean value that indicates whether the planes must be contiguous. -.IP \fIplane_mask_return\fP 1i -Returns an array of plane masks. -.\" *** JIM: NEED MORE INFO FOR THIS. *** -.IP \fInplanes\fP 1i -Specifies the number of plane masks that are to be returned in the plane masks -array. -.IP \fIpixels_return\fP 1i -Returns an array of pixel values. -.IP \fInpixels\fP 1i -Specifies the number of pixel values that are to be returned in the -pixels_return array. -.LP -.eM -.EQ -delim %% -.EN -The -.PN XAllocColorCells -function allocates read/write color cells. -The number of colors must be positive and the number of planes nonnegative, -or a -.PN BadValue -error results. -If ncolors and nplanes are requested, -then ncolors pixels -and nplane plane masks are returned. -No mask will have any bits set to 1 in common with -any other mask or with any of the pixels. -By ORing together each pixel with zero or more masks, -ncolors * %2 sup nplanes% distinct pixels can be produced. -All of these are -allocated writable by the request. -For -.PN GrayScale -or -.PN PseudoColor , -each mask has exactly one bit set to 1. -For -.PN DirectColor , -each has exactly three bits set to 1. -If contig is -.PN True -and if all masks are ORed -together, a single contiguous set of bits set to 1 will be formed for -.PN GrayScale -or -.PN PseudoColor -and three contiguous sets of bits set to 1 (one within each -pixel subfield) for -.PN DirectColor . -The RGB values of the allocated -entries are undefined. -.PN XAllocColorCells -returns nonzero if it succeeded or zero if it failed. -.LP -.PN XAllocColorCells -can generate -.PN BadColor -and -.PN BadValue -errors. -.LP -.sp -To allocate read/write color resources for a -.PN DirectColor -model, use -.PN XAllocColorPlanes . -.IN "Read/write colormap planes" "allocating" -.IN "Allocation" "read/write colormap planes" -.IN "Color" "allocation" -.IN "XAllocColorPlanes" "" "@DEF@" -.sM -.FD 0 -Status XAllocColorPlanes\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \fIcontig\fP\^, \fIpixels_return\fP\^, \fIncolors\fP\^, \fInreds\fP\^, \fIngreens\fP\^, -.br - \fInblues\fP\^, \fIrmask_return\fP\^, \fIgmask_return\fP\^, \fIbmask_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Colormap \fIcolormap\fP\^; -.br - Bool \fIcontig\fP\^; -.br - unsigned long \fIpixels_return\fP[\^]\^; -.br - int \fIncolors\fP\^; -.br - int \fInreds\fP\^, \fIngreens\fP\^, \fInblues\fP\^; -.br - unsigned long *\fIrmask_return\fP\^, *\fIgmask_return\fP\^, *\fIbmask_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcolormap\fP 1i -Specifies the colormap. -.IP \fIcontig\fP 1i -Specifies a Boolean value that indicates whether the planes must be contiguous. -.IP \fIpixels_return\fP 1i -Returns an array of pixel values. -.PN XAllocColorPlanes -returns the pixel values in this array. -.IP \fIncolors\fP 1i -Specifies the number of pixel values that are to be returned in the -pixels_return array. -.IP \fInreds\fP 1i -.br -.ns -.IP \fIngreens\fP 1i -.br -.ns -.IP \fInblues\fP 1i -.br -.ns -Specify the number of red, green, and blue planes. -The value you pass must be nonnegative. -.IP \fIrmask_return\fP 1i -.br -.ns -.IP \fIgmask_return\fP 1i -.br -.ns -.IP \fIbmask_return\fP 1i -Return bit masks for the red, green, and blue planes. -.LP -.eM -.EQ -delim %% -.EN -The specified ncolors must be positive; -and nreds, ngreens, and nblues must be nonnegative, -or a -.PN BadValue -error results. -If ncolors colors, nreds reds, ngreens greens, and nblues blues are requested, -ncolors pixels are returned; and the masks have nreds, ngreens, and -nblues bits set to 1, respectively. -If contig is -.PN True , -each mask will have -a contiguous set of bits set to 1. -No mask will have any bits set to 1 in common with -any other mask or with any of the pixels. -For -.PN DirectColor , -each mask -will lie within the corresponding pixel subfield. -By ORing together -subsets of masks with each pixel value, -ncolors * %2 sup (nreds+ngreens+nblues)% distinct pixel values can be produced. -All of these are allocated by the request. -However, in the -colormap, there are only ncolors * %2 sup nreds% independent red entries, -ncolors * %2 sup ngreens% independent green entries, -and ncolors * %2 sup nblues% independent blue entries. -This is true even for -.PN PseudoColor . -When the colormap entry of a pixel -value is changed (using -.PN XStoreColors , -.PN XStoreColor , -or -.PN XStoreNamedColor ), -the pixel is decomposed according to the masks, -and the corresponding independent entries are updated. -.PN XAllocColorPlanes -returns nonzero if it succeeded or zero if it failed. -.LP -.PN XAllocColorPlanes -can generate -.PN BadColor -and -.PN BadValue -errors. -.LP -.sp -.IN "Freeing" "colors" -To free colormap cells, use -.PN XFreeColors . -.IN "XFreeColors" "" "@DEF@" -.IN "Color" "deallocation" -.sM -.FD 0 -XFreeColors\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \fIpixels\fP\^, \fInpixels\fP\^, \fIplanes\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Colormap \fIcolormap\fP\^; -.br - unsigned long \fIpixels\fP\^[\^]; -.br - int \fInpixels\fP\^; -.br - unsigned long \fIplanes\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcolormap\fP 1i -Specifies the colormap. -.ds Pi that map to the cells in the specified colormap -.IP \fIpixels\fP 1i -Specifies an array of pixel values \*(Pi. -.IP \fInpixels\fP 1i -Specifies the number of pixels. -.IP \fIplanes\fP 1i -Specifies the planes you want to free. -.LP -.eM -The -.PN XFreeColors -function frees the cells represented by pixels whose values are in the -pixels array. -The planes argument should not have any bits set to 1 in common with any of the -pixels. -The set of all pixels is produced by ORing together subsets of -the planes argument with the pixels. -The request frees all of these pixels that -were allocated by the client (using -.IN XAllocColor -.IN XAllocNamedColor -.IN XAllocColorCells -.IN XAllocColorPlanes -.PN XAllocColor , -.PN XAllocNamedColor , -.PN XAllocColorCells , -and -.PN XAllocColorPlanes ). -Note that freeing an -individual pixel obtained from -.PN XAllocColorPlanes -may not actually allow -it to be reused until all of its related pixels are also freed. -Similarly, -a read-only entry is not actually freed until it has been freed by all clients, -and if a client allocates the same read-only entry multiple times, -it must free the entry that many times before the entry is actually freed. -.LP -All specified pixels that are allocated by the client in the colormap are -freed, even if one or more pixels produce an error. -If a specified pixel is not a valid index into the colormap, a -.PN BadValue -error results. -If a specified pixel is not allocated by the -client (that is, is unallocated or is only allocated by another client) -or if the colormap was created with all entries writable (by passing -.PN AllocAll -to -.PN XCreateColormap ), -a -.PN BadAccess -error results. -If more than one pixel is in error, -the one that gets reported is arbitrary. -.LP -.PN XFreeColors -can generate -.PN BadAccess , -.PN BadColor , -and -.PN BadValue -errors. -.NH 2 -Modifying and Querying Colormap Cells -.XS -\*(SN Modifying and Querying Colormap Cells -.XE -.LP -.sp -To store an RGB value in a single colormap cell, use -.PN XStoreColor . -.IN "Color" "storing" -.IN "XStoreColor" "" "@DEF@" -.sM -.FD 0 -XStoreColor\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \fIcolor\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Colormap \fIcolormap\fP\^; -.br - XColor *\fIcolor\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcolormap\fP 1i -Specifies the colormap. -.IP \fIcolor\fP 1i -Specifies the pixel and RGB values. -.LP -.eM -The -.PN XStoreColor -function changes the colormap entry of the pixel value specified in the -pixel member of the -.PN XColor -structure. -You specified this value in the -pixel member of the -.PN XColor -structure. -This pixel value must be a read/write cell and a valid index into the colormap. -If a specified pixel is not a valid index into the colormap, -a -.PN BadValue -error results. -.PN XStoreColor -also changes the red, green, and/or blue color components. -You specify which color components are to be changed by setting -.PN DoRed , -.PN DoGreen , -and/or -.PN DoBlue -in the flags member of the -.PN XColor -structure. -If the colormap is an installed map for its screen, -the changes are visible immediately. -.LP -.PN XStoreColor -can generate -.PN BadAccess , -.PN BadColor , -and -.PN BadValue -errors. -.LP -.sp -To store multiple RGB values in multiple colormap cells, use -.PN XStoreColors . -.IN "Color" "storing" -.IN "XStoreColors" "" "@DEF@" -.sM -.FD 0 -XStoreColors\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \fIcolor\fP\^, \fIncolors\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Colormap \fIcolormap\fP\^; -.br - XColor \fIcolor\fP\^[\^]\^; -.br - int \fIncolors\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcolormap\fP 1i -Specifies the colormap. -.IP \fIcolor\fP 1i -Specifies an array of color definition structures to be stored. -.IP \fIncolors\fP 1i -.\"Specifies the number of color definition structures. -Specifies the number of -.PN XColor -structures in the color definition array. -.LP -.eM -The -.PN XStoreColors -function changes the colormap entries of the pixel values -specified in the pixel members of the -.PN XColor -structures. -You specify which color components are to be changed by setting -.PN DoRed , -.PN DoGreen , -and/or -.PN DoBlue -in the flags member of the -.PN XColor -structures. -If the colormap is an installed map for its screen, the -changes are visible immediately. -.PN XStoreColors -changes the specified pixels if they are allocated writable in the colormap -by any client, even if one or more pixels generates an error. -If a specified pixel is not a valid index into the colormap, a -.PN BadValue -error results. -If a specified pixel either is unallocated or is allocated read-only, a -.PN BadAccess -error results. -If more than one pixel is in error, -the one that gets reported is arbitrary. -.LP -.PN XStoreColors -can generate -.PN BadAccess , -.PN BadColor , -and -.PN BadValue -errors. -.LP -.sp -To store a color of arbitrary format in a single colormap cell, use -.PN XcmsStoreColor . -.IN "Color" "storing" -.IN "XcmsStoreColor" "" "@DEF@" -.sM -.FD 0 -Status XcmsStoreColor\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \fIcolor\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Colormap \fIcolormap\fP\^; -.br - XcmsColor *\fIcolor\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcolormap\fP 1i -Specifies the colormap. -.IP \fIcolor\fP 1i -Specifies the color cell and the color to store. -Values specified in this -.PN XcmsColor -structure remain unchanged on return. -.LP -.eM -The -.PN XcmsStoreColor -function converts the color specified in the -.PN XcmsColor -structure into RGB values. -It then uses this RGB specification in an -.PN XColor -structure, whose three flags -.Pn ( DoRed , -.PN DoGreen , -and -.PN DoBlue ) -are set, in a call to -.PN XStoreColor -to change the color cell specified by the pixel member of the -.PN XcmsColor -structure. -This pixel value must be a valid index for the specified colormap, -and the color cell specified by the pixel value must be a read/write cell. -If the pixel value is not a valid index, a -.PN BadValue -error results. -If the color cell is unallocated or is allocated read-only, a -.PN BadAccess -error results. -If the colormap is an installed map for its screen, -the changes are visible immediately. -.LP -Note that -.PN XStoreColor -has no return value; therefore, an -.PN XcmsSuccess -return value from this function indicates that the conversion -to RGB succeeded and the call to -.PN XStoreColor -was made. -To obtain the actual color stored, use -.PN XcmsQueryColor . -Because of the screen's hardware limitations or gamut compression, -the color stored in the colormap may not be identical -to the color specified. -.LP -.PN XcmsStoreColor -can generate -.PN BadAccess , -.PN BadColor , -and -.PN BadValue -errors. -.LP -.sp -To store multiple colors of arbitrary format in multiple colormap cells, use -.PN XcmsStoreColors . -.IN "Color" "storing" -.IN "XcmsStoreColors" "" "@DEF@" -.sM -.FD 0 -Status XcmsStoreColors\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \fIcolors\fP\^, \fIncolors\fP\^, \fIcompression_flags_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Colormap \fIcolormap\fP\^; -.br - XcmsColor \fIcolors\fP\^[\^]\^; -.br - int \fIncolors\fP\^; -.br - Bool \fIcompression_flags_return\fP\^[\^]\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcolormap\fP 1i -Specifies the colormap. -.IP \fIcolors\fP 1i -Specifies the color specification array of -.PN XcmsColor -structures, each specifying a color cell and the color to store in that -cell. -Values specified in the array remain unchanged upon return. -.IP \fIncolors\fP 1i -Specifies the number of -.PN XcmsColor -structures in the color-specification array. -.IP \fIcompression_flags_return\fP 1i -Returns an array of Boolean values indicating compression status. -If a non-NULL pointer is supplied, -each element of the array is set to -.PN True -if the corresponding color was compressed and -.PN False -otherwise. -Pass NULL if the compression status is not useful. -.LP -.eM -The -.PN XcmsStoreColors -function converts the colors specified in the array of -.PN XcmsColor -structures into RGB values and then uses these RGB specifications in -.PN XColor -structures, whose three flags -.Pn ( DoRed , -.PN DoGreen , -and -.PN DoBlue ) -are set, in a call to -.PN XStoreColors -to change the color cells specified by the pixel member of the corresponding -.PN XcmsColor -structure. -Each pixel value must be a valid index for the specified colormap, -and the color cell specified by each pixel value must be a read/write cell. -If a pixel value is not a valid index, a -.PN BadValue -error results. -If a color cell is unallocated or is allocated read-only, a -.PN BadAccess -error results. -If more than one pixel is in error, -the one that gets reported is arbitrary. -If the colormap is an installed map for its screen, -the changes are visible immediately. -.LP -Note that -.PN XStoreColors -has no return value; therefore, an -.PN XcmsSuccess -return value from this function indicates that conversions -to RGB succeeded and the call to -.PN XStoreColors -was made. -To obtain the actual colors stored, use -.PN XcmsQueryColors . -Because of the screen's hardware limitations or gamut compression, -the colors stored in the colormap may not be identical -to the colors specified. -.LP -.PN XcmsStoreColors -can generate -.PN BadAccess , -.PN BadColor , -and -.PN BadValue -errors. -.LP -.sp -To store a color specified by name in a single colormap cell, use -.PN XStoreNamedColor . -.IN "Color" "storing" -.IN "Color" "naming" -.IN "XStoreNamedColor" "" "@DEF@" -.sM -.FD 0 -XStoreNamedColor\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \fIcolor\fP\^, \fIpixel\fP\^, \fIflags\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Colormap \fIcolormap\fP\^; -.br - char *\^\fIcolor\fP\^; -.br - unsigned long \fIpixel\fP\^; -.br - int \fIflags\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcolormap\fP 1i -Specifies the colormap. -.IP \fIcolor\fP 1i -Specifies the color name string (for example, red). -.IP \fIpixel\fP 1i -Specifies the entry in the colormap. -.IP \fIflags\fP 1i -Specifies which red, green, and blue components are set. -.LP -.eM -The -.PN XStoreNamedColor -function looks up the named color with respect to the screen associated with -the colormap and stores the result in the specified colormap. -The pixel argument determines the entry in the colormap. -The flags argument determines which of the red, green, and blue components -are set. -You can set this member to the -bitwise inclusive OR of the bits -.PN DoRed , -.PN DoGreen , -and -.PN DoBlue . -If the color name is not in the Host Portable Character Encoding, -the result is implementation-dependent. -Use of uppercase or lowercase does not matter. -If the specified pixel is not a valid index into the colormap, a -.PN BadValue -error results. -If the specified pixel either is unallocated or is allocated read-only, a -.PN BadAccess -error results. -.LP -.PN XStoreNamedColor -can generate -.PN BadAccess , -.PN BadColor , -.PN BadName , -and -.PN BadValue -errors. -.LP -The -.PN XQueryColor -and -.PN XQueryColors -functions take pixel values in the pixel member of -.PN XColor -structures and store in the structures the RGB values for those -pixels from the specified colormap. -The values returned for an unallocated entry are undefined. -These functions also set the flags member in the -.PN XColor -structure to all three colors. -If a pixel is not a valid index into the specified colormap, a -.PN BadValue -error results. -If more than one pixel is in error, -the one that gets reported is arbitrary. -.LP -.sp -To query the RGB value of a single colormap cell, use -.PN XQueryColor . -.IN "Color" "querying" -.IN "XQueryColor" "" "@DEF@" -.sM -.FD 0 -XQueryColor\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \fIdef_in_out\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Colormap \fIcolormap\fP\^; -.br - XColor *\fIdef_in_out\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcolormap\fP 1i -Specifies the colormap. -.IP \fIdef_in_out\fP 1i -Specifies and returns the RGB values for the pixel specified in the structure. -.LP -.eM -The -.PN XQueryColor -function returns the current RGB value for the pixel in the -.PN XColor -structure and sets the -.PN DoRed , -.PN DoGreen , -and -.PN DoBlue -flags. -.LP -.PN XQueryColor -can generate -.PN BadColor -and -.PN BadValue -errors. -.LP -.sp -To query the RGB values of multiple colormap cells, use -.PN XQueryColors . -.IN "Color" "querying" -.IN "XQueryColors" "" "@DEF@" -.sM -.FD 0 -XQueryColors\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \fIdefs_in_out\fP\^, \fIncolors\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Colormap \fIcolormap\fP\^; -.br - XColor \fIdefs_in_out\fP[\^]\^; -.br - int \fIncolors\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcolormap\fP 1i -Specifies the colormap. -.IP \fIdefs_in_out\fP 1i -Specifies and returns an array of color definition structures for the pixel -specified in the structure. -.IP \fIncolors\fP 1i -.\"Specifies the number of color definition structures. -Specifies the number of -.PN XColor -structures in the color definition array. -.LP -.eM -The -.PN XQueryColors -function returns the RGB value for each pixel in each -.PN XColor -structure and sets the -.PN DoRed , -.PN DoGreen , -and -.PN DoBlue -flags in each structure. - -.LP -.PN XQueryColors -can generate -.PN BadColor -and -.PN BadValue -errors. -.sp -.LP -To query the color of a single colormap cell in an arbitrary format, use -.PN XcmsQueryColor . -.IN "Color" "querying" -.IN "XcmsQueryColor" "" "@DEF@" -.sM -.FD 0 -Status XcmsQueryColor\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \fIcolor_in_out\fP\^, \fIresult_format\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Colormap \fIcolormap\fP\^; -.br - XcmsColor *\fIcolor_in_out\fP\^; -.br - XcmsColorFormat \fIresult_format\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcolormap\fP 1i -Specifies the colormap. -.IP \fIcolor_in_out\fP 1i -Specifies the pixel member that indicates the color cell to query. -The color specification stored for the color cell is returned in this -.PN XcmsColor -structure. -.IP \fIresult_format\fP 1i -Specifies the color format for the returned color specification. -.LP -.eM -The -.PN XcmsQueryColor -function obtains the RGB value -for the pixel value in the pixel member of the specified -.PN XcmsColor -structure and then -converts the value to the target format as -specified by the result_format argument. -If the pixel is not a valid index in the specified colormap, a -.PN BadValue -error results. -.LP -.PN XcmsQueryColor -can generate -.PN BadColor -and -.PN BadValue -errors. -.sp -.LP -To query the color of multiple colormap cells in an arbitrary format, use -.PN XcmsQueryColors . -.IN "Color" "querying" -.IN "XcmsQueryColors" "" "@DEF@" -.sM -.FD 0 -Status XcmsQueryColors\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \fIcolors_in_out\fP\^, \fIncolors\fP\^, \fIresult_format\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Colormap \fIcolormap\fP\^; -.br - XcmsColor \fIcolors_in_out\fP\^[\^]\^; -.br - unsigned int \fIncolors\fP\^; -.br - XcmsColorFormat \fIresult_format\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcolormap\fP 1i -Specifies the colormap. -.IP \fIcolors_in_out\fP 1i -Specifies an array of -.PN XcmsColor -structures, each pixel member indicating the color cell to query. -The color specifications for the color cells are returned in these structures. -.IP \fIncolors\fP 1i -Specifies the number of -.PN XcmsColor -structures in the color-specification array. -.IP \fIresult_format\fP 1i -Specifies the color format for the returned color specification. -.LP -.eM -The -.PN XcmsQueryColors -function obtains the RGB values -for pixel values in the pixel members of -.PN XcmsColor -structures and then -converts the values to the target format as -specified by the result_format argument. -If a pixel is not a valid index into the specified colormap, a -.PN BadValue -error results. -If more than one pixel is in error, -the one that gets reported is arbitrary. -.LP -.PN XcmsQueryColors -can generate -.PN BadColor -and -.PN BadValue -errors. -.NH 2 -Color Conversion Context Functions -.XS -\*(SN Color Conversion Context Functions -.XE -.LP -This section describes functions to create, modify, -and query Color Conversion Contexts (CCCs). -.LP -Associated with each colormap is an initial CCC transparently generated by -Xlib. -.IN "Color Conversion Context" "creation" -Therefore, when you specify a colormap as an argument to a function, -you are indirectly specifying a CCC. -.IN "CCC" "of colormap" -.IN "Color Conversion Context" "of colormap" -The CCC attributes that can be modified by the X client are: -.IP \(bu 5 -Client White Point -.IP \(bu 5 -Gamut compression procedure and client data -.IP \(bu 5 -White point adjustment procedure and client data -.LP -The initial values for these attributes are implementation specific. -The CCC attributes for subsequently created CCCs can be defined -by changing the CCC attributes of the default CCC. -.IN "CCC" "default" -.IN "Color Conversion Context" "default" -There is a default CCC associated with each screen. -.NH 3 -Getting and Setting the Color Conversion Context of a Colormap -.XS -\*(SN Getting and Setting the Color Conversion Context of a Colormap -.XE -.LP -.sp -To obtain the CCC associated with a colormap, use -.PN XcmsCCCOfColormap . -.IN "XcmsCCCOfColormap" "" "@DEF@" -.IN "Colormap" "CCC of" -.IN "CCC" "of colormap" -.IN "Color Conversion Context" "of colormap" -.sM -.FD 0 -XcmsCCC XcmsCCCOfColormap\^(\^\fIdisplay\fP, \fIcolormap\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Colormap \fIcolormap\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcolormap\fP 1i -Specifies the colormap. -.LP -.eM -The -.PN XcmsCCCOfColormap -function returns the CCC associated with the specified colormap. -Once obtained, -the CCC attributes can be queried or modified. -Unless the CCC associated with the specified colormap is changed with -.PN XcmsSetCCCOfColormap , -this CCC is used when the specified colormap is used as an argument -to color functions. -.sp -.LP -To change the CCC associated with a colormap, use -.PN XcmsSetCCCOfColormap . -.IN "XcmsSetCCCOfColormap" "" "@DEF@" -.IN "Colormap" "CCC of" -.IN "CCC" "of colormap" -.IN "Color Conversion Context" "of colormap" -.sM -.FD 0 -XcmsCCC XcmsSetCCCOfColormap\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \fIccc\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Colormap \fIcolormap\fP\^; -.br - XcmsCCC \fIccc\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcolormap\fP 1i -Specifies the colormap. -.IP \fIccc\fP 1i -Specifies the CCC. -.LP -.eM -The -.PN XcmsSetCCCOfColormap -function changes the CCC associated with the specified colormap. -It returns the CCC previously associated with the colormap. -If they are not used again in the application, -CCCs should be freed by calling -.PN XcmsFreeCCC . -Several colormaps may share the same CCC without restriction; this -includes the CCCs generated by Xlib with each colormap. Xlib, however, -creates a new CCC with each new colormap. -.NH 3 -Obtaining the Default Color Conversion Context -.XS -\*(SN Obtaining the Default Color Conversion Context -.XE -.LP -You can change the default CCC attributes for subsequently created CCCs -by changing the CCC attributes of the default CCC. -.IN "CCC" "default" -.IN "Color Conversion Context" "default" -A default CCC is associated with each screen. -.sp -.LP -To obtain the default CCC for a screen, use -.PN XcmsDefaultCCC . -.IN "XcmsDefaultCCC" "" "@DEF@" -.IN "Color Conversion Context" "default" -.IN "CCC" "default" -.sM -.FD 0 -XcmsCCC XcmsDefaultCCC\^(\^\fIdisplay\fP, \fIscreen_number\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIscreen_number\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIscreen_number\fP 1i -Specifies the appropriate screen number on the host server. -.LP -.eM -The -.PN XcmsDefaultCCC -function returns the default CCC for the specified screen. -Its visual is the default visual of the screen. -Its initial gamut compression and white point -adjustment procedures as well as the associated client data are implementation -specific. -.NH 3 -Color Conversion Context Macros -.XS -\*(SN Color Conversion Context Macros -.XE -.LP -Applications should not directly modify any part of the -.PN XcmsCCC . -The following lists the C language macros, their corresponding function -equivalents for other language bindings, and what data they both -can return. -.sp -.LP -.IN "DisplayOfCCC" "" "@DEF@" -.IN "XcmsDisplayOfCCC" "" "@DEF@" -.sM -.FD 0 -DisplayOfCCC\^(\^\fIccc\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.sp -Display *XcmsDisplayOfCCC\^(\^\fIccc\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -.LP -.eM -Both return the display associated with the specified CCC. -.LP -.sp -.IN "VisualOfCCC" "" "@DEF@" -.IN "XcmsVisualOfCCC" "" "@DEF@" -.sM -.FD 0 -VisualOfCCC\^(\^\fIccc\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.sp -Visual *XcmsVisualOfCCC\^(\^\fIccc\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -.LP -.eM -Both return the visual associated with the specified CCC. -.sp -.LP -.IN "ScreenNumberOfCCC" "" "@DEF@" -.IN "XcmsScreenNumberOfCCC" "" "@DEF@" -.sM -.FD 0 -ScreenNumberOfCCC\^(\^\fIccc\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.sp -int XcmsScreenNumberOfCCC\^(\^\fIccc\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -.LP -.eM -Both return the number of the screen associated with the specified CCC. -.sp -.LP -.IN "ScreenWhitePointOfCCC" "" "@DEF@" -.IN "XcmsScreenWhitePointOfCCC" "" "@DEF@" -.sM -.FD 0 -ScreenWhitePointOfCCC\^(\^\fIccc\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.sp -XcmsColor *XcmsScreenWhitePointOfCCC\^(\^\fIccc\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -.LP -.eM -Both return the white point of the screen associated with the specified CCC. -.sp -.LP -.IN "ClientWhitePointOfCCC" "" "@DEF@" -.IN "XcmsClientWhitePointOfCCC" "" "@DEF@" -.sM -.FD 0 -ClientWhitePointOfCCC\^(\^\fIccc\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.sp -XcmsColor *XcmsClientWhitePointOfCCC\^(\^\fIccc\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -.LP -.eM -Both return the Client White Point of the specified CCC. -.NH 3 -Modifying Attributes of a Color Conversion Context -.XS -\*(SN Modifying Attributes of a Color Conversion Context -.XE -.LP -To set the Client White Point in the CCC, use -.PN XcmsSetWhitePoint . -.IN "XcmsSetWhitePoint" "" "@DEF@" -.IN "Client White Point" "of Color Conversion Context" -.sM -.FD 0 -Status XcmsSetWhitePoint\^(\^\fIccc\fP\^, \fIcolor\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.br - XcmsColor *\fIcolor\fP\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -.ds Co new Client White Point -.IP \fIcolor\fP 1i -Specifies the \*(Co. -.LP -.eM -The -.PN XcmsSetWhitePoint -function changes the Client White Point in the specified CCC. -Note that the pixel member is ignored -and that the color specification is left unchanged upon return. -The format for the new white point must be -.PN XcmsCIEXYZFormat , -.PN XcmsCIEuvYFormat , -.PN XcmsCIExyYFormat , -or -.PN XcmsUndefinedFormat . -If the color argument is NULL, this function sets the format component of the -Client White Point specification to -.PN XcmsUndefinedFormat , -indicating that the Client White Point is assumed to be the same as the -Screen White Point. -.LP -This function returns nonzero status -if the format for the new white point is valid; -otherwise, it returns zero. - -.sp -.LP -To set the gamut compression procedure and corresponding client data -in a specified CCC, use -.PN XcmsSetCompressionProc . -.IN "XcmsSetCompressionProc" "" "@DEF@" -.IN "Gamut compression" "setting in Color Conversion Context" -.IN "Gamut compression" "procedure" -.IN "Gamut compression" "client data" -.sM -.FD 0 -XcmsCompressionProc XcmsSetCompressionProc\^(\^\fIccc\fP\^, \fIcompression_proc\fP\^, \fIclient_data\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.br - XcmsCompressionProc \fIcompression_proc\fP\^; -.br - XPointer \fIclient_data\fP\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -.IP \fIcompression_proc\fP 1i -Specifies the gamut compression procedure that is to be applied -when a color lies outside the screen's color gamut. -If NULL is specified and a function using this CCC must convert -a color specification to a device-dependent format and encounters a color -that lies outside the screen's color gamut, -that function will return -.PN XcmsFailure . -.ds Cd the gamut compression procedure -.IP \fIclient_data\fP 1i -Specifies client data for \*(Cd or NULL. -.LP -.eM -The -.PN XcmsSetCompressionProc -function first sets the gamut compression procedure and client data -in the specified CCC with the newly specified procedure and client data -and then returns the old procedure. -.sp -.LP -To set the white point adjustment procedure and corresponding client data -in a specified CCC, use -.PN XcmsSetWhiteAdjustProc . -.IN "XcmsSetWhiteAdjustProc" "" "@DEF@" -.IN "White point adjustment" "setting in Color Conversion Context" -.IN "White point adjustment" "procedure" -.IN "White point adjustment" "client data" -.FD 0 -.sM -XcmsWhiteAdjustProc XcmsSetWhiteAdjustProc\^(\^\fIccc\fP\^, \fIwhite_adjust_proc\fP\^, \fIclient_data\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.br - XcmsWhiteAdjustProc \fIwhite_adjust_proc\fP\^; -.br - XPointer \fIclient_data\fP\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -.IP \fIwhite_adjust_proc\fP 1i -Specifies the white point adjustment procedure. -.ds Cd the white point adjustment procedure -.IP \fIclient_data\fP 1i -Specifies client data for \*(Cd or NULL. -.LP -.eM -The -.PN XcmsSetWhiteAdjustProc -function first sets the white point adjustment procedure and client data -in the specified CCC with the newly specified procedure and client data -and then returns the old procedure. -.NH 3 -Creating and Freeing a Color Conversion Context -.XS -\*(SN Creating and Freeing a Color Conversion Context -.XE -.LP -You can explicitly create a CCC within your application by calling -.PN XcmsCreateCCC . -These created CCCs can then be used by those functions that explicitly -call for a CCC argument. -Old CCCs that will not be used by the application should be freed using -.PN XcmsFreeCCC . -.sp -.LP -To create a CCC, use -.PN XcmsCreateCCC . -.IN "XcmsCreateCCC" "" "@DEF@" -.IN "Color Conversion Context" "creation" -.IN "CCC" "creation" -.sM -.FD 0 -XcmsCCC XcmsCreateCCC\^(\^\fIdisplay\fP, \fIscreen_number\fP\^, \fIvisual\fP\^, \fIclient_white_point\fP\^, \fIcompression_proc\fP\^, -.br - \fIcompression_client_data\fP\^, \fIwhite_adjust_proc\fP\^, \fIwhite_adjust_client_data\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIscreen_number\fP\^; -.br - Visual *\fIvisual\fP\^; -.br - XcmsColor *\fIclient_white_point\fP\^; -.br - XcmsCompressionProc \fIcompression_proc\fP\^; -.br - XPointer \fIcompression_client_data\fP\^; -.br - XcmsWhiteAdjustProc \fIwhite_adjust_proc\fP\^; -.br - XPointer \fIwhite_adjust_client_data\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIscreen_number\fP 1i -Specifies the appropriate screen number on the host server. -.IP \fIvisual\fP 1i -Specifies the visual type. -.IP \fIclient_white_point\fP 1i -Specifies the Client White Point. -If NULL is specified, -the Client White Point is to be assumed to be the same as the -Screen White Point. -Note that the pixel member is ignored. -.IP \fIcompression_proc\fP 1i -Specifies the gamut compression procedure that is to be applied -when a color lies outside the screen's color gamut. -If NULL is specified and a function using this CCC must convert -a color specification to a device-dependent format and encounters a color -that lies outside the screen's color gamut, -that function will return -.PN XcmsFailure . -.IP \fIcompression_client_data\fP 1i -Specifies client data for use by the gamut compression procedure or NULL. -.IP \fIwhite_adjust_proc\fP 1i -Specifies the white adjustment procedure that is to be applied -when the Client White Point differs from the Screen White Point. -NULL indicates that no white point adjustment is desired. -.IP \fIwhite_adjust_client_data\fP 1i -Specifies client data for use with the white point adjustment procedure or NULL. -.LP -.eM -The -.PN XcmsCreateCCC -function creates a CCC for the specified display, screen, and visual. -.LP -.sp -To free a CCC, use -.PN XcmsFreeCCC . -.IN "XcmsFreeCCC" "" "@DEF@" -.IN "Color Conversion Context" "freeing" -.IN "CCC" "freeing" -.sM -.FD 0 -void XcmsFreeCCC\^(\^\fIccc\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -.LP -.eM -The -.PN XcmsFreeCCC -function frees the memory used for the specified CCC. -Note that default CCCs and those currently associated with colormaps -are ignored. -.NH 2 -Converting between Color Spaces -.XS -\*(SN Converting between Color Spaces -.XE -.LP -.sp -To convert an array of color specifications in arbitrary color formats -to a single destination format, use -.PN XcmsConvertColors . -.IN "Color conversion" -.IN "Color" "conversion" -.IN "XcmsConvertColors" "" "@DEF@" -.sM -.FD 0 -Status XcmsConvertColors\^(\^\fIccc\fP\^, \fIcolors_in_out\fP\^, \fIncolors\fP\^, \fItarget_format\fP\^, \fIcompression_flags_return\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.br - XcmsColor \fIcolors_in_out\fP\^[\^]\^; -.br - unsigned int \fIncolors\fP\^; -.br - XcmsColorFormat \fItarget_format\fP\^; -.br - Bool \fIcompression_flags_return\fP\^[\^]\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -If conversion is between device-independent color spaces only -(for example, TekHVC to CIELuv), -the CCC is necessary only to specify the Client White Point. -.IP \fIcolors_in_out\fP 1i -Specifies an array of color specifications. -Pixel members are ignored and remain unchanged upon return. -.IP \fIncolors\fP 1i -Specifies the number of -.PN XcmsColor -structures in the color-specification array. -.IP \fItarget_format\fP 1i -Specifies the target color specification format. -.IP \fIcompression_flags_return\fP 1i -Returns an array of Boolean values indicating compression status. -If a non-NULL pointer is supplied, -each element of the array is set to -.PN True -if the corresponding color was compressed and -.PN False -otherwise. -Pass NULL if the compression status is not useful. -.LP -.eM -The -.PN XcmsConvertColors -function converts the color specifications in the specified array of -.PN XcmsColor -structures from their current format to a single target format, -using the specified CCC. -When the return value is -.PN XcmsFailure , -the contents of the color specification array are left unchanged. -.LP -The array may contain a mixture of color specification formats -(for example, 3 CIE XYZ, 2 CIE Luv, and so on). -When the array contains both device-independent and -device-dependent color specifications and the target_format argument specifies -a device-dependent format (for example, -.PN XcmsRGBiFormat , -.PN XcmsRGBFormat ), -all specifications are converted to CIE XYZ format and then to the target -device-dependent format. -.NH 2 -Callback Functions -.XS -\*(SN Callback Functions -.XE -.LP -This section describes the gamut compression and white point -adjustment callbacks. -.LP -The gamut compression procedure specified in the CCC -is called when an attempt to convert a color specification from -.PN XcmsCIEXYZ -to a device-dependent format (typically -.PN XcmsRGBi ) -results in a color that lies outside the screen's color gamut. -If the gamut compression procedure requires client data, this data is passed -via the gamut compression client data in the CCC. -.LP -During color specification conversion between device-independent -and device-dependent color spaces, -if a white point adjustment procedure is specified in the CCC, -it is triggered when the Client White Point and Screen White Point differ. -If required, the client data is obtained from the CCC. -.NH 3 -Prototype Gamut Compression Procedure -.XS -\*(SN Prototype Gamut Compression Procedure -.XE -.LP -The gamut compression callback interface must adhere to the -following: -.IN "XcmsCompressionProc" "" "@DEF@" -.sM -.FD 0 -typedef Status (*\^XcmsCompressionProc\^)\^(\^\fIccc\fP\^, \fIcolors_in_out\fP\^, \fIncolors\fP\^, \fIindex\fP\^, \fIcompression_flags_return\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.br - XcmsColor \fIcolors_in_out[]\fP\^; -.br - unsigned int \fIncolors\fP\^; -.br - unsigned int \fIindex\fP\^; -.br - Bool \fIcompression_flags_return[]\fP\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -.IP \fIcolors_in_out\fP 1i -Specifies an array of color specifications. -Pixel members should be ignored and must remain unchanged upon return. -.IP \fIncolors\fP 1i -Specifies the number of -.PN XcmsColor -structures in the color-specification array. -.IP \fIindex\fP 1i -Specifies the index into the array of -.PN XcmsColor -structures for the encountered color specification that lies outside the -screen's color gamut. -Valid values are 0 (for the first element) to ncolors \- 1. -.IP \fIcompression_flags_return\fP 1i -Returns an array of Boolean values for indicating compression status. -If a non-NULL pointer is supplied -and a color at a given index is compressed, then -.PN True -should be stored at the corresponding index in this array; -otherwise, the array should not be modified. -.LP -.eM -When implementing a gamut compression procedure, consider the following -rules and assumptions: -.IP \(bu 5 -The gamut compression procedure can attempt to compress one or multiple -specifications at a time. -.IP \(bu 5 -When called, elements 0 to index \- 1 in the color specification -array can be assumed to fall within the screen's color gamut. -In addition, these color specifications are already in some device-dependent -format (typically -.PN XcmsRGBi ). -If any modifications are made to these color specifications, -they must be in their initial device-dependent format upon return. -.IP \(bu 5 -When called, the element in the color specification array specified -by the index argument contains the color specification outside the -screen's color gamut encountered by the calling routine. -In addition, this color specification can be assumed to be in -.PN XcmsCIEXYZ . -Upon return, this color specification must be in -.PN XcmsCIEXYZ . -.IP \(bu 5 -When called, elements from index to ncolors \- 1 -in the color specification array may or may not fall within the -screen's color gamut. -In addition, these color specifications can be assumed to be in -.PN XcmsCIEXYZ . -If any modifications are made to these color specifications, -they must be in -.PN XcmsCIEXYZ -upon return. -.IP \(bu 5 -The color specifications passed to the gamut compression procedure -have already been adjusted to the Screen White Point. -This means that at this point the color specification's white point -is the Screen White Point. -.IP \(bu 5 -If the gamut compression procedure uses a device-independent color space not -initially accessible for use in the color management system, use -.PN XcmsAddColorSpace -to ensure that it is added. -.NH 3 -Supplied Gamut Compression Procedures -.XS -\*(SN Supplied Gamut Compression Procedures -.XE -.LP -The following equations are useful in describing gamut compression -functions: -.EQ -delim %% -.EN -.LP -.Ds 0 -%CIELab~Psychometric~Chroma ~=~ sqrt(a_star sup 2 ~+~ b_star sup 2 )% - -%CIELab~Psychometric~Hue ~=~ tan sup -1 left [ b_star over a_star right ]% - -%CIELuv~Psychometric~Chroma ~=~ sqrt(u_star sup 2 ~+~ v_star sup 2 )% - -%CIELuv~Psychometric~Hue ~=~ tan sup -1 left [ v_star over u_star right ]% -.De -.LP -The gamut compression callback procedures provided by Xlib are as follows: -.IP \(bu 5 -.PN XcmsCIELabClipL -.IP -This brings the encountered out-of-gamut color specification into the -screen's color gamut by reducing or increasing CIE metric lightness (L*) -in the CIE L*a*b* color space until the color is within the gamut. -If the Psychometric Chroma of the color specification -is beyond maximum for the Psychometric Hue Angle, -then while maintaining the same Psychometric Hue Angle, -the color will be clipped to the CIE L*a*b* coordinates of maximum -Psychometric Chroma. -See -.PN XcmsCIELabQueryMaxC . -No client data is necessary. -.IP \(bu 5 -.PN XcmsCIELabClipab -.IP -This brings the encountered out-of-gamut color specification into the -screen's color gamut by reducing Psychometric Chroma, -while maintaining Psychometric Hue Angle, -until the color is within the gamut. -No client data is necessary. -.IP \(bu 5 -.PN XcmsCIELabClipLab -.IP -This brings the encountered out-of-gamut color specification into the -screen's color gamut by replacing it with CIE L*a*b* coordinates -that fall within the color gamut while maintaining the original -Psychometric Hue -Angle and whose vector to the original coordinates is the shortest attainable. -No client data is necessary. -.IP \(bu 5 -.PN XcmsCIELuvClipL -.IP -This brings the encountered out-of-gamut color specification into the -screen's color gamut by reducing or increasing CIE metric lightness (L*) -in the CIE L*u*v* color space until the color is within the gamut. -If the Psychometric Chroma of the color specification -is beyond maximum for the Psychometric Hue Angle, -then, while maintaining the same Psychometric Hue Angle, -the color will be clipped to the CIE L*u*v* coordinates of maximum -Psychometric Chroma. -See -.PN XcmsCIELuvQueryMaxC . -No client data is necessary. -.IP \(bu 5 -.PN XcmsCIELuvClipuv -.IP -This brings the encountered out-of-gamut color specification into the -screen's color gamut by reducing -Psychometric Chroma, while maintaining Psychometric Hue Angle, -until the color is within the gamut. -No client data is necessary. -.IP \(bu 5 -.PN XcmsCIELuvClipLuv -.IP -This brings the encountered out-of-gamut color specification into the -screen's color gamut by replacing it with CIE L*u*v* coordinates -that fall within the color gamut while maintaining the original -Psychometric Hue -Angle and whose vector to the original coordinates is the shortest attainable. -No client data is necessary. -.IP \(bu 5 -.PN XcmsTekHVCClipV -.IP -This brings the encountered out-of-gamut color specification into the -screen's color gamut by reducing or increasing the Value dimension -in the TekHVC color space until the color is within the gamut. -If Chroma of the color specification is beyond maximum for the particular Hue, -then, while maintaining the same Hue, -the color will be clipped to the Value and Chroma coordinates -that represent maximum Chroma for that particular Hue. -No client data is necessary. -.IP \(bu 5 -.PN XcmsTekHVCClipC -.IP -This brings the encountered out-of-gamut color specification into the -screen's color gamut by reducing the Chroma dimension -in the TekHVC color space until the color is within the gamut. -No client data is necessary. -.IP \(bu 5 -.PN XcmsTekHVCClipVC -.IP -This brings the encountered out-of-gamut color specification into the -screen's color gamut by replacing it with TekHVC coordinates -that fall within the color gamut while maintaining the original Hue -and whose vector to the original coordinates is the shortest attainable. -No client data is necessary. -.NH 3 -Prototype White Point Adjustment Procedure -.XS -\*(SN Prototype White Point Adjustment Procedure -.XE -.LP -The white point adjustment procedure interface must adhere to the following: -.IN "XcmsWhiteAdjustProc" "" "@DEF@" -.sM -.FD 0 -typedef Status (*\^XcmsWhiteAdjustProc\^)\^(\^\fIccc\fP\^, \fIinitial_white_point\fP\^, \fItarget_white_point\fP\^, \fItarget_format\fP\^, -.br - \fIcolors_in_out\fP\^, \fIncolors\fP\^, \fIcompression_flags_return\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.br - XcmsColor *\fIinitial_white_point\fP\^; -.br - XcmsColor *\fItarget_white_point\fP\^; -.br - XcmsColorFormat \fItarget_format\fP\^; -.br - XcmsColor \fIcolors_in_out[]\fP\^; -.br - unsigned int \fIncolors\fP\^; -.br - Bool \fIcompression_flags_return[]\fP\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -.IP \fIinitial_white_point\fP 1i -Specifies the initial white point. -.IP \fItarget_white_point\fP 1i -Specifies the target white point. -.IP \fItarget_format\fP 1i -Specifies the target color specification format. -.IP \fIcolors_in_out\fP 1i -Specifies an array of color specifications. -Pixel members should be ignored and must remain unchanged upon return. -.IP \fIncolors\fP 1i -Specifies the number of -.PN XcmsColor -structures in the color-specification array. -.IP \fIcompression_flags_return\fP 1i -Returns an array of Boolean values for indicating compression status. -If a non-NULL pointer is supplied -and a color at a given index is compressed, then -.PN True -should be stored at the corresponding index in this array; -otherwise, the array should not be modified. -.LP -.eM -.NH 3 -Supplied White Point Adjustment Procedures -.XS -\*(SN Supplied White Point Adjustment Procedures -.XE -.LP -White point adjustment procedures provided by Xlib are as follows: -.IP \(bu 5 -.PN XcmsCIELabWhiteShiftColors -.IP -This uses the CIE L*a*b* color space for adjusting the chromatic character -of colors to compensate for the chromatic differences between the source -and destination white points. -This procedure simply converts the color specifications to -.PN XcmsCIELab -using the source white point and then converts to the target specification -format using the destination's white point. -No client data is necessary. -.IP \(bu 5 -.PN XcmsCIELuvWhiteShiftColors -.IP -This uses the CIE L*u*v* color space for adjusting the chromatic character -of colors to compensate for the chromatic differences between the source -and destination white points. -This procedure simply converts the color specifications to -.PN XcmsCIELuv -using the source white point and then converts to the target specification -format using the destination's white point. -No client data is necessary. -.IP \(bu 5 -.PN XcmsTekHVCWhiteShiftColors -.IP -This uses the TekHVC color space for adjusting the chromatic character -of colors to compensate for the chromatic differences between the source -and destination white points. -This procedure simply converts the color specifications to -.PN XcmsTekHVC -using the source white point and then converts to the target specification -format using the destination's white point. -An advantage of this procedure over those previously described -is an attempt to minimize hue shift. -No client data is necessary. -.LP -From an implementation point of view, -these white point adjustment procedures convert the color specifications -to a device-independent but white-point-dependent color space -(for example, CIE L*u*v*, CIE L*a*b*, TekHVC) using one white point -and then converting those specifications to the target color space -using another white point. -In other words, -the specification goes in the color space with one white point -but comes out with another white point, -resulting in a chromatic shift based on the chromatic displacement -between the initial white point and target white point. -The CIE color spaces that are assumed to be white-point-independent -are CIE u'v'Y, CIE XYZ, and CIE xyY. -When developing a custom white point adjustment procedure that uses a -device-independent color space not initially accessible for use in the -color management system, use -.PN XcmsAddColorSpace -to ensure that it is added. -.LP -As an example, -if the CCC specifies a white point adjustment procedure -and if the Client White Point and Screen White Point differ, the -.PN XcmsAllocColor -function will use the white point adjustment -procedure twice: -.IP \(bu 5 -Once to convert to -.PN XcmsRGB -.IP \(bu 5 -A second time to convert from -.PN XcmsRGB -.LP -For example, assume the specification is in -.PN XcmsCIEuvY -and the adjustment procedure is -.PN XcmsCIELuvWhiteShiftColors . -During conversion to -.PN XcmsRGB , -the call to -.PN XcmsAllocColor -results in the following series of color specification conversions: -.\" Do these need to be font coded? -.IP \(bu 5 -From -.PN XcmsCIEuvY -to -.PN XcmsCIELuv -using the Client White Point -.IP \(bu 5 -From -.PN XcmsCIELuv -to -.PN XcmsCIEuvY -using the Screen White Point -.IP \(bu 5 -From -.PN XcmsCIEuvY -to -.PN XcmsCIEXYZ -(CIE u'v'Y and XYZ are white-point-independent color spaces) -.IP \(bu 5 -From -.PN XcmsCIEXYZ -to -.PN XcmsRGBi -.IP \(bu 5 -From -.PN XcmsRGBi -to -.PN XcmsRGB -.LP -The resulting RGB specification is passed to -.PN XAllocColor , -and the RGB -specification returned by -.PN XAllocColor -is converted back to -.PN XcmsCIEuvY -by reversing the color conversion sequence. -.NH 2 -Gamut Querying Functions -.XS -\*(SN Gamut Querying Functions -.XE -.LP -This section describes the gamut querying functions that Xlib provides. -These functions allow the client to query the boundary -of the screen's color gamut in terms of the CIE L*a*b*, CIE L*u*v*, -and TekHVC color spaces. -.IN "Gamut querying" -Functions are also provided that allow you to query -the color specification of: -.IP \(bu 5 -White (full-intensity red, green, and blue) -.IP \(bu 5 -Red (full-intensity red while green and blue are zero) -.IP \(bu 5 -Green (full-intensity green while red and blue are zero) -.IP \(bu 5 -Blue (full-intensity blue while red and green are zero) -.IP \(bu 5 -Black (zero-intensity red, green, and blue) -.LP -The white point associated with color specifications passed to -and returned from these gamut querying -functions is assumed to be the Screen White Point. -.IN "Screen White Point" -This is a reasonable assumption, -because the client is trying to query the screen's color gamut. -.LP -The following naming convention is used for the Max and Min functions: -.LP -.Ds 0 -Xcms\fI\fPQueryMax\fI\fP - -Xcms\fI\fPQueryMin\fI\fP -.De -.LP -The consists of a letter or letters -that identify the dimensions of the color space -that are not fixed. -For example, -.PN XcmsTekHVCQueryMaxC -is given a fixed Hue and Value for which maximum Chroma is found. -.NH 3 -Red, Green, and Blue Queries -.XS -\*(SN Red, Green, and Blue Queries -.XE -.LP -To obtain the color specification for black -(zero-intensity red, green, and blue), use -.PN XcmsQueryBlack . -.IN "XcmsQueryBlack" "" "@DEF@" -.sM -.FD 0 -Status XcmsQueryBlack\^(\^\fIccc\fP\^, \fItarget_format\fP\^, \fIcolor_return\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.br - XcmsColorFormat \fItarget_format\fP\^; -.br - XcmsColor *\fIcolor_return\fP\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -The CCC's Client White Point and white point adjustment procedures -are ignored. -.IP \fItarget_format\fP 1i -Specifies the target color specification format. -.ds Cs zero-intensity red, green, and blue -.IP \fIcolor_return\fP 1i -Returns the color specification in the specified target format -for \*(Cs. -The white point associated with the returned -color specification is the Screen White Point. -The value returned in the pixel member is undefined. -.LP -.eM -The -.PN XcmsQueryBlack -function returns the color specification in the specified target format -for zero-intensity red, green, and blue. -.sp -.LP -To obtain the color specification for blue -(full-intensity blue while red and green are zero), use -.PN XcmsQueryBlue . -.IN "XcmsQueryBlue" "" "@DEF@" -.sM -.FD 0 -Status XcmsQueryBlue\^(\^\fIccc\fP\^, \fItarget_format\fP\^, \fIcolor_return\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.br - XcmsColorFormat \fItarget_format\fP\^; -.br - XcmsColor *\fIcolor_return\fP\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -The CCC's Client White Point and white point adjustment procedures -are ignored. -.IP \fItarget_format\fP 1i -Specifies the target color specification format. -.ds Cs full-intensity blue while red and green are zero -.IP \fIcolor_return\fP 1i -Returns the color specification in the specified target format -for \*(Cs. -The white point associated with the returned -color specification is the Screen White Point. -The value returned in the pixel member is undefined. -.LP -.eM -The -.PN XcmsQueryBlue -function returns the color specification in the specified target format -for full-intensity blue while red and green are zero. -.sp -.LP -To obtain the color specification for green -(full-intensity green while red and blue are zero), use -.PN XcmsQueryGreen . -.IN "XcmsQueryGreen" "" "@DEF@" -.sM -.FD 0 -Status XcmsQueryGreen\^(\^\fIccc\fP\^, \fItarget_format\fP\^, \fIcolor_return\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.br - XcmsColorFormat \fItarget_format\fP\^; -.br - XcmsColor *\fIcolor_return\fP\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -The CCC's Client White Point and white point adjustment procedures -are ignored. -.IP \fItarget_format\fP 1i -Specifies the target color specification format. -.ds Cs full-intensity green while red and blue are zero -.IP \fIcolor_return\fP 1i -Returns the color specification in the specified target format -for \*(Cs. -The white point associated with the returned -color specification is the Screen White Point. -The value returned in the pixel member is undefined. -.LP -.eM -The -.PN XcmsQueryGreen -function returns the color specification in the specified target format -for full-intensity green while red and blue are zero. -.sp -.LP -To obtain the color specification for red -(full-intensity red while green and blue are zero), use -.PN XcmsQueryRed . -.IN "XcmsQueryRed" "" "@DEF@" -.sM -.FD 0 -Status XcmsQueryRed\^(\^\fIccc\fP\^, \fItarget_format\fP\^, \fIcolor_return\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.br - XcmsColorFormat \fItarget_format\fP\^; -.br - XcmsColor *\fIcolor_return\fP\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -The CCC's Client White Point and white point adjustment procedures -are ignored. -.IP \fItarget_format\fP 1i -Specifies the target color specification format. -.ds Cs full-intensity red while green and blue are zero -.IP \fIcolor_return\fP 1i -Returns the color specification in the specified target format -for \*(Cs. -The white point associated with the returned -color specification is the Screen White Point. -The value returned in the pixel member is undefined. -.LP -.eM -The -.PN XcmsQueryRed -function returns the color specification in the specified target format -for full-intensity red while green and blue are zero. -.LP -.sp -To obtain the color specification for white -(full-intensity red, green, and blue), use -.PN XcmsQueryWhite . -.IN "XcmsQueryWhite" "" "@DEF@" -.sM -.FD 0 -Status XcmsQueryWhite\^(\^\fIccc\fP\^, \fItarget_format\fP\^, \fIcolor_return\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.br - XcmsColorFormat \fItarget_format\fP\^; -.br - XcmsColor *\fIcolor_return\fP\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -The CCC's Client White Point and white point adjustment procedures -are ignored. -.IP \fItarget_format\fP 1i -Specifies the target color specification format. -.ds Cs full-intensity red, green, and blue -.IP \fIcolor_return\fP 1i -Returns the color specification in the specified target format -for \*(Cs. -The white point associated with the returned -color specification is the Screen White Point. -The value returned in the pixel member is undefined. -.LP -.eM -The -.PN XcmsQueryWhite -function returns the color specification in the specified target format -for full-intensity red, green, and blue. -.NH 3 -CIELab Queries -.XS -\*(SN CIELab Queries -.XE -.LP -The following equations are useful in describing the CIELab query functions: -.EQ -delim %% -.EN -.LP -.IN "Psychometric Hue Angle" -.IN "CIE metric lightness" -.IN "Psychometric Chroma" -.IN "Psychometric Chroma" "maximum" -.Ds 0 -%CIELab~Psychometric~Chroma ~=~ sqrt(a_star sup 2 ~+~ b_star sup 2 )% - -%CIELab~Psychometric~Hue ~=~ tan sup -1 left [ b_star over a_star right ]% -.De -.sp -To obtain the CIE L*a*b* coordinates of maximum Psychometric Chroma -for a given Psychometric Hue Angle and CIE metric lightness (L*), use -.PN XcmsCIELabQueryMaxC . -.IN "XcmsCIELabQueryMaxC" "" "@DEF@" -.sM -.FD 0 -Status XcmsCIELabQueryMaxC\^(\^\fIccc\fP\^, \fIhue_angle\fP\^, \fIL_star\fP\^, \fIcolor_return\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.br - XcmsFloat \fIhue_angle\fP\^; -.br - XcmsFloat \fIL_star\fP\^; -.br - XcmsColor *\fIcolor_return\fP\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -The CCC's Client White Point and white point adjustment procedures -are ignored. -.ds Ha maximum chroma -.IP \fIhue_angle\fP 1i -Specifies the hue angle (in degrees) at which to find \*(Ha. -.ds Ls maximum chroma -.IP \fIL_star\fP 1i -Specifies the lightness (L*) at which to find \*(Ls. -.ds Lc maximum chroma -.ds lC hue angle and lightness -.IP \fIcolor_return\fP 1i -Returns the CIE L*a*b* coordinates of \*(Lc -displayable by the screen for the given \*(lC. -The white point associated with the returned -color specification is the Screen White Point. -The value returned in the pixel member is undefined. -.LP -.eM -The -.PN XcmsCIELabQueryMaxC -function, given a hue angle and lightness, -finds the point of maximum chroma displayable by the screen. -It returns this point in CIE L*a*b* coordinates. -.LP -.sp -To obtain the CIE L*a*b* coordinates of maximum CIE metric lightness (L*) -for a given Psychometric Hue Angle and Psychometric Chroma, use -.PN XcmsCIELabQueryMaxL . -.IN "Psychometric Hue Angle" -.IN "CIE metric lightness" -.IN "CIE metric lightness" "maximum" -.IN "XcmsCIELabQueryMaxL" "" "@DEF@" -.sM -.FD 0 -Status XcmsCIELabQueryMaxL\^(\^\fIccc\fP\^, \fIhue_angle\fP\^, \fIchroma\fP\^, \fIcolor_return\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.br - XcmsFloat \fIhue_angle\fP\^; -.br - XcmsFloat \fIchroma\fP\^; -.br - XcmsColor *\fIcolor_return\fP\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -The CCC's Client White Point and white point adjustment procedures -are ignored. -.ds Ha maximum lightness -.IP \fIhue_angle\fP 1i -Specifies the hue angle (in degrees) at which to find \*(Ha. -.ds Ch maximum lightness -.IP \fIchroma\fP 1i -Specifies the chroma at which to find \*(Ch. -.ds Lc maximum lightness -.ds lC hue angle and chroma -.IP \fIcolor_return\fP 1i -Returns the CIE L*a*b* coordinates of \*(Lc -displayable by the screen for the given \*(lC. -The white point associated with the returned -color specification is the Screen White Point. -The value returned in the pixel member is undefined. -.LP -.eM -The -.PN XcmsCIELabQueryMaxL -function, given a hue angle and chroma, -finds the point in CIE L*a*b* color space of maximum -lightness (L*) displayable by the screen. -It returns this point in CIE L*a*b* coordinates. -An -.PN XcmsFailure -return value usually indicates that the given chroma -is beyond maximum for the given hue angle. -.sp -.LP -To obtain the CIE L*a*b* coordinates of maximum Psychometric Chroma -for a given Psychometric Hue Angle, use -.PN XcmsCIELabQueryMaxLC . -.IN "Psychometric Hue Angle" -.IN "Psychometric Chroma" -.IN "CIE metric lightness" -.IN "Psychometric Chroma" "maximum" -.IN "CIE metric lightness" "maximum" -.IN "XcmsCIELabQueryMaxLC" "" "@DEF@" -.sM -.FD 0 -Status XcmsCIELabQueryMaxLC\^(\^\fIccc\fP\^, \fIhue_angle\fP\^, \fIcolor_return\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.br - XcmsFloat \fIhue_angle\fP\^; -.br - XcmsColor *\fIcolor_return\fP\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -The CCC's Client White Point and white point adjustment procedures -are ignored. -.ds Ha maximum chroma -.IP \fIhue_angle\fP 1i -Specifies the hue angle (in degrees) at which to find \*(Ha. -.ds Lc maximum chroma -.ds lC hue angle -.IP \fIcolor_return\fP 1i -Returns the CIE L*a*b* coordinates of \*(Lc -displayable by the screen for the given \*(lC. -The white point associated with the returned -color specification is the Screen White Point. -The value returned in the pixel member is undefined. -.LP -.eM -The -.PN XcmsCIELabQueryMaxLC -function, given a hue angle, -finds the point of maximum chroma displayable by the screen. -It returns this point in CIE L*a*b* coordinates. -.sp -.LP -To obtain the CIE L*a*b* coordinates of minimum CIE metric lightness (L*) -for a given Psychometric Hue Angle and Psychometric Chroma, use -.PN XcmsCIELabQueryMinL . -.IN "Psychometric Hue Angle" -.IN "CIE metric lightness" -.IN "CIE metric lightness" "minimum" -.IN "XcmsCIELabQueryMinL" "" "@DEF@" -.sM -.FD 0 -Status XcmsCIELabQueryMinL\^(\^\fIccc\fP\^, \fIhue_angle\fP\^, \fIchroma\fP\^, \fIcolor_return\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.br - XcmsFloat \fIhue_angle\fP\^; -.br - XcmsFloat \fIchroma\fP\^; -.br - XcmsColor *\fIcolor_return\fP\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -The CCC's Client White Point and white point adjustment procedures -are ignored. -.ds Ha minimum lightness -.IP \fIhue_angle\fP 1i -Specifies the hue angle (in degrees) at which to find \*(Ha. -.ds Ch minimum lightness -.IP \fIchroma\fP 1i -Specifies the chroma at which to find \*(Ch. -.ds Lc minimum lightness -.ds lC hue angle and chroma -.IP \fIcolor_return\fP 1i -Returns the CIE L*a*b* coordinates of \*(Lc -displayable by the screen for the given \*(lC. -The white point associated with the returned -color specification is the Screen White Point. -The value returned in the pixel member is undefined. -.LP -.eM -The -.PN XcmsCIELabQueryMinL -function, given a hue angle and chroma, -finds the point of minimum lightness (L*) displayable by the screen. -It returns this point in CIE L*a*b* coordinates. -An -.PN XcmsFailure -return value usually indicates that the given chroma -is beyond maximum for the given hue angle. -.NH 3 -CIELuv Queries -.XS -\*(SN CIELuv Queries -.XE -.LP -The following equations are useful in describing the CIELuv query functions: -.EQ -delim %% -.EN -.LP -.IN "Psychometric Hue Angle" -.IN "CIE metric lightness" -.IN "Psychometric Chroma" -.IN "Psychometric Chroma" "maximum" -.Ds 0 -%CIELuv~Psychometric~Chroma ~=~ sqrt(u_star sup 2 ~+~ v_star sup 2 )% - -%CIELuv~Psychometric~Hue ~=~ tan sup -1 left [ v_star over u_star right ]% -.De -.sp -.LP -To obtain the CIE L*u*v* coordinates of maximum Psychometric Chroma -for a given Psychometric Hue Angle and CIE metric lightness (L*), use -.PN XcmsCIELuvQueryMaxC . -.IN "XcmsCIELuvQueryMaxC" "" "@DEF@" -.sM -.FD 0 -Status XcmsCIELuvQueryMaxC\^(\^\fIccc\fP\^, \fIhue_angle\fP\^, \fIL_star\fP\^, \fIcolor_return\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.br - XcmsFloat \fIhue_angle\fP\^; -.br - XcmsFloat \fIL_star\fP\^; -.br - XcmsColor *\fIcolor_return\fP\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -The CCC's Client White Point and white point adjustment procedures -are ignored. -.ds Ha maximum chroma -.IP \fIhue_angle\fP 1i -Specifies the hue angle (in degrees) at which to find \*(Ha. -.ds Ls maximum chroma -.IP \fIL_star\fP 1i -Specifies the lightness (L*) at which to find \*(Ls. -.ds Lc maximum chroma -.ds lC hue angle and lightness -.IP \fIcolor_return\fP 1i -Returns the CIE L*u*v* coordinates of \*(Lc -displayable by the screen for the given \*(lC. -The white point associated with the returned -color specification is the Screen White Point. -The value returned in the pixel member is undefined. -.LP -.eM -The -.PN XcmsCIELuvQueryMaxC -function, given a hue angle and lightness, -finds the point of maximum chroma displayable by the screen. -It returns this point in CIE L*u*v* coordinates. -.sp -.LP -To obtain the CIE L*u*v* coordinates of maximum CIE metric lightness (L*) -for a given Psychometric Hue Angle and Psychometric Chroma, use -.PN XcmsCIELuvQueryMaxL . -.IN "Psychometric Hue Angle" -.IN "CIE metric lightness" -.IN "CIE metric lightness" "maximum" -.IN "XcmsCIELuvQueryMaxL" "" "@DEF@" -.sM -.FD 0 -Status XcmsCIELuvQueryMaxL\^(\^\fIccc\fP\^, \fIhue_angle\fP\^, \fIchroma\fP\^, \fIcolor_return\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.br - XcmsFloat \fIhue_angle\fP\^; -.br - XcmsFloat \fIchroma\fP\^; -.br - XcmsColor *\fIcolor_return\fP\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -The CCC's Client White Point and white point adjustment procedures -are ignored. -.ds Ha maximum lightness -.IP \fIhue_angle\fP 1i -Specifies the hue angle (in degrees) at which to find \*(Ha. -.ds Ls maximum lightness -.IP \fIL_star\fP 1i -Specifies the lightness (L*) at which to find \*(Ls. -.ds Lc maximum lightness -.ds lC hue angle and chroma -.IP \fIcolor_return\fP 1i -Returns the CIE L*u*v* coordinates of \*(Lc -displayable by the screen for the given \*(lC. -The white point associated with the returned -color specification is the Screen White Point. -The value returned in the pixel member is undefined. -.LP -.eM -The -.PN XcmsCIELuvQueryMaxL -function, given a hue angle and chroma, -finds the point in CIE L*u*v* color space of maximum -lightness (L*) displayable by the screen. -It returns this point in CIE L*u*v* coordinates. -An -.PN XcmsFailure -return value usually indicates that the given chroma -is beyond maximum for the given hue angle. -.sp -.LP -To obtain the CIE L*u*v* coordinates of maximum Psychometric Chroma -for a given Psychometric Hue Angle, use -.PN XcmsCIELuvQueryMaxLC . -.IN "Psychometric Hue Angle" -.IN "Psychometric Chroma" -.IN "CIE metric lightness" -.IN "Psychometric Chroma" "maximum" -.IN "CIE metric lightness" "maximum" -.IN "XcmsCIELuvQueryMaxLC" "" "@DEF@" -.sM -.FD 0 -Status XcmsCIELuvQueryMaxLC\^(\^\fIccc\fP\^, \fIhue_angle\fP\^, \fIcolor_return\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.br - XcmsFloat \fIhue_angle\fP\^; -.br - XcmsColor *\fIcolor_return\fP\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -The CCC's Client White Point and white point adjustment procedures -are ignored. -.ds Ha maximum chroma -.IP \fIhue_angle\fP 1i -Specifies the hue angle (in degrees) at which to find \*(Ha. -.ds Lc maximum chroma -.ds lC hue angle -.IP \fIcolor_return\fP 1i -Returns the CIE L*u*v* coordinates of \*(Lc -displayable by the screen for the given \*(lC. -The white point associated with the returned -color specification is the Screen White Point. -The value returned in the pixel member is undefined. -.LP -.eM -The -.PN XcmsCIELuvQueryMaxLC -function, given a hue angle, -finds the point of maximum chroma displayable by the screen. -It returns this point in CIE L*u*v* coordinates. -.sp -.LP -To obtain the CIE L*u*v* coordinates of minimum CIE metric lightness (L*) -for a given Psychometric Hue Angle and Psychometric Chroma, use -.PN XcmsCIELuvQueryMinL . -.IN "Psychometric Hue Angle" -.IN "CIE metric lightness" -.IN "CIE metric lightness" "minimum" -.IN "XcmsCIELuvQueryMinL" "" "@DEF@" -.sM -.FD 0 -Status XcmsCIELuvQueryMinL\^(\^\fIccc\fP\^, \fIhue_angle\fP\^, \fIchroma\fP\^, \fIcolor_return\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.br - XcmsFloat \fIhue_angle\fP\^; -.br - XcmsFloat \fIchroma\fP\^; -.br - XcmsColor *\fIcolor_return\fP\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -The CCC's Client White Point and white point adjustment procedures -are ignored. -.ds Ha minimum lightness -.IP \fIhue_angle\fP 1i -Specifies the hue angle (in degrees) at which to find \*(Ha. -.ds Ch minimum lightness -.IP \fIchroma\fP 1i -Specifies the chroma at which to find \*(Ch. -.ds Lc minimum lightness -.ds lC hue angle and chroma -.IP \fIcolor_return\fP 1i -Returns the CIE L*u*v* coordinates of \*(Lc -displayable by the screen for the given \*(lC. -The white point associated with the returned -color specification is the Screen White Point. -The value returned in the pixel member is undefined. -.LP -.eM -The -.PN XcmsCIELuvQueryMinL -function, given a hue angle and chroma, -finds the point of minimum lightness (L*) displayable by the screen. -It returns this point in CIE L*u*v* coordinates. -An -.PN XcmsFailure -return value usually indicates that the given chroma -is beyond maximum for the given hue angle. -.NH 3 -TekHVC Queries -.XS -\*(SN TekHVC Queries -.XE -.LP -To obtain the maximum Chroma for a given Hue and Value, use -.PN XcmsTekHVCQueryMaxC . -.IN "Chroma" -.IN "Chroma" "maximum" -.IN "XcmsTekHVCQueryMaxC" "" "@DEF@" -.sM -.FD 0 -Status XcmsTekHVCQueryMaxC\^(\^\fIccc\fP\^, \fIhue\fP\^, \fIvalue\fP\^, \fIcolor_return\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.br - XcmsFloat \fIhue\fP\^; -.br - XcmsFloat \fIvalue\fP\^; -.br - XcmsColor *\fIcolor_return\fP\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -The CCC's Client White Point and white point adjustment procedures -are ignored. -.ds Hu in which to find the maximum Chroma -.IP \fIhue\fP 1i -Specifies the Hue \*(Hu. -.ds Va maximum Chroma -.IP \fIvalue\fP 1i -Specifies the Value in which to find the \*(Va. -.ds Lc maximum Chroma along with the actual Hue and Value -.ds lC maximum Chroma -.IP \fIcolor_return\fP 1i -Returns the \*(Lc at which the \*(lC was found. -The white point associated with the returned -color specification is the Screen White Point. -The value returned in the pixel member is undefined. -.LP -.eM -The -.PN XcmsTekHVCQueryMaxC -function, given a Hue and Value, -determines the maximum Chroma in TekHVC color space -displayable by the screen. -It returns the maximum Chroma along with the actual Hue -and Value at which the maximum Chroma was found. -.sp -.LP -To obtain the maximum Value for a given Hue and Chroma, use -.PN XcmsTekHVCQueryMaxV . -.IN "Value" -.IN "Value" "maximum" -.IN "XcmsTekHVCQueryMaxV" "" "@DEF@" -.sM -.FD 0 -Status XcmsTekHVCQueryMaxV\^(\^\fIccc\fP\^, \fIhue\fP\^, \fIchroma\fP\^, \fIcolor_return\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.br - XcmsFloat \fIhue\fP\^; -.br - XcmsFloat \fIchroma\fP\^; -.br - XcmsColor *\fIcolor_return\fP\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -The CCC's Client White Point and white point adjustment procedures -are ignored. -.ds Hu in which to find the maximum Value -.IP \fIhue\fP 1i -Specifies the Hue \*(Hu. -.ds Ch maximum Value -.IP \fIchroma\fP 1i -Specifies the chroma at which to find \*(Ch. -.ds Lc maximum Value along with the Hue and Chroma -.ds lC maximum Value -.IP \fIcolor_return\fP 1i -Returns the \*(Lc at which the \*(lC was found. -The white point associated with the returned -color specification is the Screen White Point. -The value returned in the pixel member is undefined. -.LP -.eM -The -.PN XcmsTekHVCQueryMaxV -function, given a Hue and Chroma, -determines the maximum Value in TekHVC color space -displayable by the screen. -It returns the maximum Value and the actual Hue and Chroma -at which the maximum Value was found. -.sp -.LP -To obtain the maximum Chroma and Value at which it is reached -for a specified Hue, use -.PN XcmsTekHVCQueryMaxVC . -.IN "Chroma" -.IN "Value" -.IN "Chroma" "maximum" -.IN "Value" "maximum" -.IN "XcmsTekHVCQueryMaxVC" "" "@DEF@" -.sM -.FD 0 -Status XcmsTekHVCQueryMaxVC\^(\^\fIccc\fP\^, \fIhue\fP\^, \fIcolor_return\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.br - XcmsFloat \fIhue\fP\^; -.br - XcmsColor *\fIcolor_return\fP\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -The CCC's Client White Point and white point adjustment procedures -are ignored. -.ds Hu in which to find the maximum Chroma -.IP \fIhue\fP 1i -Specifies the Hue \*(Hu. -.ds Lc color specification in \ -XcmsTekHVC for the maximum Chroma, the Value at which \ -that maximum Chroma is reached, and the actual Hue -.ds lC maximum Chroma -.IP \fIcolor_return\fP 1i -Returns the \*(Lc at which the \*(lC was found. -The white point associated with the returned -color specification is the Screen White Point. -The value returned in the pixel member is undefined. -.LP -.eM -The -.PN XcmsTekHVCQueryMaxVC -function, given a Hue, -determines the maximum Chroma in TekHVC color space displayable by the screen -and the Value at which that maximum Chroma is reached. -It returns the maximum Chroma, -the Value at which that maximum Chroma is reached, -and the actual Hue for which the maximum Chroma was found. -.sp -.LP -To obtain a specified number of TekHVC specifications such that they -contain maximum Values for a specified Hue and the -Chroma at which the maximum Values are reached, use -.PN XcmsTekHVCQueryMaxVSamples . -.IN "Chroma" -.IN "Value" -.IN "Chroma" "maximum" -.IN "Value" "maximum" -.IN "XcmsTekHVCQueryMaxVSamples" "" "@DEF@" -.sM -.FD 0 -Status XcmsTekHVCQueryMaxVSamples\^(\^\fIccc\fP\^, \fIhue\fP\^, \fIcolors_return\fP\^, \fInsamples\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.br - XcmsFloat \fIhue\fP\^; -.br - XcmsColor \fIcolors_return[]\fP\^; -.br - unsigned int \fInsamples\fP\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -The CCC's Client White Point and white point adjustment procedures -are ignored. -.ds Hu for maximum Chroma/Value samples -.IP \fIhue\fP 1i -Specifies the Hue \*(Hu. -.IP \fInsamples\fP 1i -Specifies the number of samples. -.IP \fIcolors_return\fP 1i -Returns nsamples of color specifications in XcmsTekHVC -such that the Chroma is the maximum attainable for the Value and Hue. -The white point associated with the returned -color specification is the Screen White Point. -The value returned in the pixel member is undefined. -.LP -.eM -The -.PN XcmsTekHVCQueryMaxVSamples -returns nsamples of maximum Value, the Chroma at which that maximum Value -is reached, and the actual Hue for which the maximum Chroma was found. -These sample points may then be used to plot the maximum Value/Chroma -boundary of the screen's color gamut for the specified Hue in TekHVC color -space. -.sp -.LP -To obtain the minimum Value for a given Hue and Chroma, use -.PN XcmsTekHVCQueryMinV . -.IN "Value" -.IN "Value" "minimum" -.IN "XcmsTekHVCQueryMinV" "" "@DEF@" -.sM -.FD 0 -Status XcmsTekHVCQueryMinV\^(\^\fIccc\fP\^, \fIhue\fP\^, \fIchroma\fP\^, \fIcolor_return\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.br - XcmsFloat \fIhue\fP\^; -.br - XcmsFloat \fIchroma\fP\^; -.br - XcmsColor *\fIcolor_return\fP\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -The CCC's Client White Point and white point adjustment procedures -are ignored. -.ds Hu in which to find the minimum Value -.IP \fIhue\fP 1i -Specifies the Hue \*(Hu. -.ds Va minimum Value -.IP \fIvalue\fP 1i -Specifies the Value in which to find the \*(Va. -.ds Lc minimum Value and the actual Hue and Chroma -.ds lC minimum Value -.IP \fIcolor_return\fP 1i -Returns the \*(Lc at which the \*(lC was found. -The white point associated with the returned -color specification is the Screen White Point. -The value returned in the pixel member is undefined. -.LP -.eM -The -.PN XcmsTekHVCQueryMinV -function, given a Hue and Chroma, -determines the minimum Value in TekHVC color space displayable by the screen. -It returns the minimum Value and the actual Hue and Chroma at which -the minimum Value was found. -.NH 2 -Color Management Extensions -.XS -\*(SN Color Management Extensions -.XE -.LP -The Xlib color management facilities can be extended in two ways: -.IP \(bu 5 -Device-Independent Color Spaces -.IP -Device-independent color spaces that are derivable to CIE XYZ -space can be added using the -.PN XcmsAddColorSpace -function. -.IP \(bu 5 -Color Characterization Function Set -.IP -A Color Characterization Function Set consists of -device-dependent color spaces and their functions that -convert between these color spaces and the CIE XYZ -color space, bundled together for a specific class of output devices. -A function set can be added using the -.PN XcmsAddFunctionSet -function. -.NH 3 -Color Spaces -.XS -\*(SN Color Spaces -.XE -.LP -The CIE XYZ color space serves as the hub for all -conversions between device-independent and device-dependent color spaces. -Therefore, the knowledge to convert an -.PN XcmsColor -structure to and from CIE XYZ format is associated with each color space. -For example, conversion from CIE L*u*v* to RGB requires the knowledge -to convert from CIE L*u*v* to CIE XYZ and from CIE XYZ to RGB. -This knowledge is stored as an array of functions that, -when applied in series, will convert the -.PN XcmsColor -structure to or from CIE XYZ format. -This color specification conversion mechanism facilitates -the addition of color spaces. -.LP -Of course, when converting between only device-independent color spaces -or only device-dependent color spaces, -shortcuts are taken whenever possible. -For example, conversion from TekHVC to CIE L*u*v* is performed -by intermediate conversion to CIE u*v*Y and then to CIE L*u*v*, -thus bypassing conversion between CIE u*v*Y and CIE XYZ. -.NH 3 -Adding Device-Independent Color Spaces -.XS -\*(SN Adding Device-Independent Color Spaces -.XE -.LP -To add a device-independent color space, use -.PN XcmsAddColorSpace . -.IN "XcmsAddColorSpace" "" "@DEF@" -.sM -.FD 0 -Status XcmsAddColorSpace\^(\^\fIcolor_space\fP\^) -.br - XcmsColorSpace *\fIcolor_space\fP\^; -.FN -.IP \fIcolor_space\fP 1i -Specifies the device-independent color space to add. -.LP -.eM -The -.PN XcmsAddColorSpace -function makes a device-independent color space (actually an -.PN XcmsColorSpace -structure) accessible by the color management system. -Because format values for unregistered color spaces are assigned at run time, -they should be treated as private to the client. -If references to an unregistered color space must be made -outside the client (for example, storing color specifications -in a file using the unregistered color space), -then reference should be made by color space prefix -(see -.PN XcmsFormatOfPrefix -and -.PN XcmsPrefixOfFormat ). -.LP -If the -.PN XcmsColorSpace -structure is already accessible in the color management system, -.PN XcmsAddColorSpace -returns -.PN XcmsSuccess . -.LP -Note that added -.PN XcmsColorSpaces -must be retained for reference by Xlib. -.NH 3 -Querying Color Space Format and Prefix -.XS -\*(SN Querying Color Space Format and Prefix -.XE -.LP -To obtain the format associated with the color space -associated with a specified color string prefix, use -.PN XcmsFormatOfPrefix . -.IN "XcmsFormatOfPrefix" "" "@DEF@" -.sM -.FD 0 -XcmsColorFormat XcmsFormatOfPrefix\^(\^\fIprefix\fP\^) -.br - char *\fIprefix\fP\^; -.FN -.IP \fIprefix\fP 1i -Specifies the string that contains the color space prefix. -.LP -.eM -The -.PN XcmsFormatOfPrefix -function returns the format for the specified color space prefix -(for example, the string ``CIEXYZ''). -The prefix is case-insensitive. -If the color space is not accessible in the color management system, -.PN XcmsFormatOfPrefix -returns -.PN XcmsUndefinedFormat . -.LP -.sp -To obtain the color string prefix associated with the color space -specified by a color format, use -.PN XcmsPrefixOfFormat . -.IN "XcmsPrefixOfFormat" "" "@DEF@" -.sM -.FD 0 -char *XcmsPrefixOfFormat\^(\^\fIformat\fP\^) -.br - XcmsColorFormat \fIformat\fP\^; -.FN -.IP \fIformat\fP 1i -Specifies the color specification format. -.LP -.eM -The -.PN XcmsPrefixOfFormat -function returns the string prefix associated with the color specification -encoding specified by the format argument. -Otherwise, if no encoding is found, it returns NULL. -The returned string must be treated as read-only. -.NH 3 -Creating Additional Color Spaces -.XS -\*(SN Creating Additional Color Spaces -.XE -.LP -Color space specific information necessary -for color space conversion and color string parsing is stored in an -.PN XcmsColorSpace -structure. -Therefore, a new structure containing this information is required -for each additional color space. -In the case of device-independent color spaces, -a handle to this new structure (that is, by means of a global variable) -is usually made accessible to the client program for use with the -.PN XcmsAddColorSpace -function. -.LP -If a new -.PN XcmsColorSpace -structure specifies a color space not registered with the X Consortium, -they should be treated as private to the client -because format values for unregistered color spaces are assigned at run time. -If references to an unregistered color space must be made outside the -client (for example, storing color specifications in a file using the -unregistered color space), then reference should be made by color space prefix -(see -.PN XcmsFormatOfPrefix -and -.PN XcmsPrefixOfFormat ). -.sM -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef (*XcmsConversionProc)(); -typedef XcmsConversionProc *XcmsFuncListPtr; - /* A NULL terminated list of function pointers*/ - -typedef struct _XcmsColorSpace { - char *prefix; - XcmsColorFormat format; - XcmsParseStringProc parseString; - XcmsFuncListPtr to_CIEXYZ; - XcmsFuncListPtr from_CIEXYZ; - int inverse_flag; -} XcmsColorSpace; -.De -.LP -.eM -The prefix member specifies the prefix that indicates a color string -is in this color space's string format. -For example, the strings ``ciexyz'' or ``CIEXYZ'' for CIE XYZ, -and ``rgb'' or ``RGB'' for RGB. -The prefix is case insensitive. -The format member specifies the color specification format. -Formats for unregistered color spaces are assigned at run time. -The parseString member contains a pointer to the function -that can parse a color string into an -.PN XcmsColor -structure. -This function returns an integer (int): nonzero if it succeeded -and zero otherwise. -The to_CIEXYZ and from_CIEXYZ members contain pointers, -each to a NULL terminated list of function pointers. -When the list of functions is executed in series, -it will convert the color specified in an -.PN XcmsColor -structure from/to the current color space format to/from the CIE XYZ format. -Each function returns an integer (int): nonzero if it succeeded -and zero otherwise. -The white point to be associated with the colors is specified -explicitly, even though white points can be found in the CCC. -The inverse_flag member, if nonzero, specifies that for each function listed -in to_CIEXYZ, -its inverse function can be found in from_CIEXYZ such that: -.LP -.Ds 0 -Given: n = number of functions in each list - -for each i, such that 0 <= i < n - from_CIEXYZ[n - i - 1] is the inverse of to_CIEXYZ[i]. -.De -.LP -This allows Xlib to use the shortest conversion path, -thus bypassing CIE XYZ if possible (for example, TekHVC to CIE L*u*v*). -.NH 3 -Parse String Callback -.XS -\*(SN Parse String Callback -.XE -.LP -The callback in the -.PN XcmsColorSpace -structure for parsing a color string for the particular color space must -adhere to the following software interface specification: -.IN "XcmsParseStringProc" "" "@DEF@" -.sM -.FD 0 -typedef int (*XcmsParseStringProc)\^(\^\fIcolor_string\fP, \fIcolor_return\fP\^) -.br - char *\fIcolor_string\fP\^; -.br - XcmsColor *\fIcolor_return\fP\^; -.FN -.IP \fIcolor_string\fP 1i -Specifies the color string to parse. -.IP \fIcolor_return\fP 1i -Returns the color specification in the color space's format. -.LP -.eM -.NH 3 -Color Specification Conversion Callback -.XS -\*(SN Color Specification Conversion Callback -.XE -.LP -Callback functions in the -.PN XcmsColorSpace -structure for converting a color specification between device-independent -spaces must adhere to the -following software interface specification: -.sM -.FD 0 -Status ConversionProc\^(\^\fIccc\fP, \fIwhite_point\fP, \fIcolors_in_out\fP, \fIncolors\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.br - XcmsColor *\fIwhite_point\fP\^; -.br - XcmsColor *\fIcolors_in_out\fP\^; -.br - unsigned int \fIncolors\fP\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -.IP \fIwhite_point\fP 1i -Specifies the white point associated with color specifications. -The pixel member should be ignored, -and the entire structure remain unchanged upon return. -.IP \fIcolors_in_out\fP 1i -Specifies an array of color specifications. -Pixel members should be ignored and must remain unchanged upon return. -.IP \fIncolors\fP 1i -Specifies the number of -.PN XcmsColor -structures in the color-specification array. -.LP -.eM -.sp -Callback functions in the -.PN XcmsColorSpace -structure for converting a color specification to or from a device-dependent -space must adhere to the -following software interface specification: -.sM -.FD 0 -Status ConversionProc\^(\^\fIccc\fP, \fIcolors_in_out\fP, \fIncolors\fP, \fIcompression_flags_return\fP\^) -.br - XcmsCCC \fIccc\fP\^; -.br - XcmsColor *\fIcolors_in_out\fP\^; -.br - unsigned int \fIncolors\fP\^; -.br - Bool \fIcompression_flags_return\fP\^[\^]\^; -.FN -.IP \fIccc\fP 1i -Specifies the CCC. -.IP \fIcolors_in_out\fP 1i -Specifies an array of color specifications. -Pixel members should be ignored and must remain unchanged upon return. -.IP \fIncolors\fP 1i -Specifies the number of -.PN XcmsColor -structures in the color-specification array. -.IP \fIcompression_flags_return\fP 1i -Returns an array of Boolean values for indicating compression status. -If a non-NULL pointer is supplied -and a color at a given index is compressed, then -.PN True -should be stored at the corresponding index in this array; -otherwise, the array should not be modified. -.LP -.eM -Conversion functions are available globally for use by other color -spaces. -The conversion functions provided by Xlib are: -.TS H -lw(1.8i) lw(1.8i) lw(1.8i). -_ -.sp 6p -.B -Function Converts from Converts to -.sp 6p -_ -.sp 6p -.TH -.R -T{ -.PN XcmsCIELabToCIEXYZ -T} T{ -.PN XcmsCIELabFormat -T} T{ -.PN XcmsCIEXYZFormat -T} -T{ -.PN XcmsCIELuvToCIEuvY -T} T{ -.PN XcmsCIELuvFormat -T} T{ -.PN XcmsCIEuvYFormat -T} -T{ -.PN XcmsCIEXYZToCIELab -T} T{ -.PN XcmsCIEXYZFormat -T} T{ -.PN XcmsCIELabFormat -T} -T{ -.PN XcmsCIEXYZToCIEuvY -T} T{ -.PN XcmsCIEXYZFormat -T} T{ -.PN XcmsCIEuvYFormat -T} -T{ -.PN XcmsCIEXYZToCIExyY -T} T{ -.PN XcmsCIEXYZFormat -T} T{ -.PN XcmsCIExyYFormat -T} -T{ -.PN XcmsCIEXYZToRGBi -T} T{ -.PN XcmsCIEXYZFormat -T} T{ -.PN XcmsRGBiFormat -T} -T{ -.PN XcmsCIEuvYToCIELuv -T} T{ -.PN XcmsCIEuvYFormat -T} T{ -.PN XcmsCIELabFormat -T} -T{ -.PN XcmsCIEuvYToCIEXYZ -T} T{ -.PN XcmsCIEuvYFormat -T} T{ -.PN XcmsCIEXYZFormat -T} -T{ -.PN XcmsCIEuvYToTekHVC -T} T{ -.PN XcmsCIEuvYFormat -T} T{ -.PN XcmsTekHVCFormat -T} -T{ -.PN XcmsCIExyYToCIEXYZ -T} T{ -.PN XcmsCIExyYFormat -T} T{ -.PN XcmsCIEXYZFormat -T} -T{ -.PN XcmsRGBToRGBi -T} T{ -.PN XcmsRGBFormat -T} T{ -.PN XcmsRGBiFormat -T} -T{ -.PN XcmsRGBiToCIEXYZ -T} T{ -.PN XcmsRGBiFormat -T} T{ -.PN XcmsCIEXYZFormat -T} -T{ -.PN XcmsRGBiToRGB -T} T{ -.PN XcmsRGBiFormat -T} T{ -.PN XcmsRGBFormat -T} -T{ -.PN XcmsTekHVCToCIEuvY -T} T{ -.PN XcmsTekHVCFormat -T} T{ -.PN XcmsCIEuvYFormat -T} -.sp 6p -_ -.TE -.NH 3 -Function Sets -.XS -\*(SN Function Sets -.XE -.IN "Function set" -.IN "Function set" "LINEAR_RGB" -.LP -Functions to convert between device-dependent color spaces -and CIE XYZ may differ for different classes of output devices -(for example, color versus gray monitors). -Therefore, the notion of a Color Characterization Function Set -has been developed. -A function set consists of device-dependent color spaces -and the functions that convert color specifications -between these device-dependent color spaces and the CIE XYZ color space -appropriate for a particular class of output devices. -The function set also contains a function that reads -color characterization data off root window properties. -It is this characterization data that will differ between devices within -a class of output devices. -.IN "Device Color Characterization" -For details about how color characterization data is -stored in root window properties, -see the section on Device Color Characterization in the -\fIInter-Client Communication Conventions Manual\fP. -The LINEAR_RGB function set is provided by Xlib -and will support most color monitors. -Function sets may require data that differs -from those needed for the LINEAR_RGB function set. -In that case, -its corresponding data may be stored on different root window properties. -.NH 3 -Adding Function Sets -.XS -\*(SN Adding Function Sets -.XE -.LP -To add a function set, use -.PN XcmsAddFunctionSet . -.IN "XcmsAddFunctionSet" "" "@DEF@" -.sM -.FD 0 -Status XcmsAddFunctionSet\^(\^\fIfunction_set\fP\^) -.br - XcmsFunctionSet *\fIfunction_set\fP\^; -.FN -.IP \fIfunction_set\fP 1i -Specifies the function set to add. -.LP -.eM -The -.PN XcmsAddFunctionSet -function adds a function set to the color management system. -If the function set uses device-dependent -.PN XcmsColorSpace -structures not accessible in the color management system, -.PN XcmsAddFunctionSet -adds them. -If an added -.PN XcmsColorSpace -structure is for a device-dependent color space not registered -with the X Consortium, -they should be treated as private to the client -because format values for unregistered color spaces are assigned at run time. -If references to an unregistered color space must be made outside the -client (for example, storing color specifications in a file -using the unregistered color space), -then reference should be made by color space prefix -(see -.PN XcmsFormatOfPrefix -and -.PN XcmsPrefixOfFormat ). -.LP -Additional function sets should be added before any calls to other -Xlib routines are made. -If not, the -.PN XcmsPerScrnInfo -member of a previously created -.PN XcmsCCC -does not have the opportunity to initialize -with the added function set. -.NH 3 -Creating Additional Function Sets -.XS -\*(SN Creating Additional Function Sets -.XE -.LP -The creation of additional function sets should be -required only when an output device does not conform to existing -function sets or when additional device-dependent color spaces are necessary. -A function set consists primarily of a collection of device-dependent -.PN XcmsColorSpace -structures and a means to read and store a -screen's color characterization data. -This data is stored in an -.PN XcmsFunctionSet -structure. -A handle to this structure (that is, by means of global variable) -is usually made accessible to the client program for use with -.PN XcmsAddFunctionSet . -.LP -If a function set uses new device-dependent -.PN XcmsColorSpace -structures, -they will be transparently processed into the color management system. -Function sets can share an -.PN XcmsColorSpace -structure for a device-dependent color space. -In addition, multiple -.PN XcmsColorSpace -structures are allowed for a device-dependent color space; -however, a function set can reference only one of them. -These -.PN XcmsColorSpace -structures will differ in the functions to convert to and from CIE XYZ, -thus tailored for the specific function set. -.sM -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct _XcmsFunctionSet { - XcmsColorSpace **DDColorSpaces; - XcmsScreenInitProc screenInitProc; - XcmsScreenFreeProc screenFreeProc; -} XcmsFunctionSet; -.De -.LP -.eM -The DDColorSpaces member is a pointer to a NULL terminated list -of pointers to -.PN XcmsColorSpace -structures for the device-dependent color spaces that are supported -by the function set. -The screenInitProc member is set to the callback procedure (see the following -interface specification) that initializes the -.PN XcmsPerScrnInfo -structure for a particular screen. -.LP -The screen initialization callback must adhere to the following software -interface specification: -.IN "XcmsScreenInitProc" "" "@DEF@" -.sM -.FD 0 -typedef Status (*XcmsScreenInitProc)\^(\^\fIdisplay\fP, \fIscreen_number\fP, \fIscreen_info\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIscreen_number\fP\^; -.br - XcmsPerScrnInfo *\fIscreen_info\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIscreen_number\fP 1i -Specifies the appropriate screen number on the host server. -.IP \fIscreen_info\fP 1i -Specifies the -.PN XcmsPerScrnInfo -structure, which contains the per screen information. -.LP -.eM -The screen initialization callback in the -.PN XcmsFunctionSet -structure fetches the color characterization data (device profile) for -the specified screen, -typically off properties on the -screen's root window. -It then initializes the specified -.PN XcmsPerScrnInfo -structure. -.IN "Device profile" -.IN "Color Characterization Data" -If successful, the procedure fills in the -.PN XcmsPerScrnInfo -structure as follows: -.IP \(bu 5 -It sets the screenData member to the address -of the created device profile data structure -(contents known only by the function set). -.IP \(bu 5 -It next sets the screenWhitePoint member. -.IP \(bu 5 -It next sets the functionSet member to the address of the -.PN XcmsFunctionSet -structure. -.IP \(bu 5 -It then sets the state member to -.PN XcmsInitSuccess -and finally returns -.PN XcmsSuccess . -.LP -If unsuccessful, the procedure sets the state member to -.PN XcmsInitFailure -and returns -.PN XcmsFailure . -.LP -The -.PN XcmsPerScrnInfo -structure contains: -.sM -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct _XcmsPerScrnInfo { - XcmsColor screenWhitePoint; - XPointer functionSet; - XPointer screenData; - unsigned char state; - char pad[3]; -} XcmsPerScrnInfo; -.De -.LP -.eM -The screenWhitePoint member specifies the white point inherent to -the screen. -The functionSet member specifies the appropriate function set. -The screenData member specifies the device profile. -The state member is set to one of the following: -.IP \(bu 5 -.PN XcmsInitNone -indicates initialization has not been previously attempted. -.IP \(bu 5 -.PN XcmsInitFailure -indicates initialization has been previously attempted but failed. -.IP \(bu 5 -.PN XcmsInitSuccess -indicates initialization has been previously attempted and succeeded. -.LP -The screen free callback must adhere to the following software -interface specification: -.IN "XcmsScreenFreeProc" "" "@DEF@" -.sM -.FD 0 -typedef void (*XcmsScreenFreeProc)\^(\^\fIscreenData\fP\^) -.br - XPointer \fIscreenData\fP\^; -.FN -.IP \fIscreenData\fP 1i -Specifies the data to be freed. -.LP -.eM -This function is called to free the screenData stored in an -.PN XcmsPerScrnInfo -structure. -.bp diff --git a/doc/xorg-docs/specs/X11/CH07 b/doc/xorg-docs/specs/X11/CH07 deleted file mode 100644 index d6f672289..000000000 --- a/doc/xorg-docs/specs/X11/CH07 +++ /dev/null @@ -1,2357 +0,0 @@ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by -.\" Digital Equipment Corporation -.\" -.\" Portions Copyright \(co 1990, 1991 by -.\" Tektronix, Inc. -.\" -.\" Permission to use, copy, modify and distribute this documentation for -.\" any purpose and without fee is hereby granted, provided that the above -.\" copyright notice appears in all copies and that both that copyright notice -.\" and this permission notice appear in all copies, and that the names of -.\" Digital and Tektronix not be used in in advertising or publicity pertaining -.\" to this documentation without specific, written prior permission. -.\" Digital and Tektronix makes no representations about the suitability -.\" of this documentation for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBChapter 7\fP\s-1 - -\s+1\fBGraphics Context Functions\fP\s-1 -.sp 2 -.nr H1 7 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.na -.LP -.XS -Chapter 7: Graphics Context Functions -.XE -A number of resources are used when performing graphics operations in X. -Most information about performing graphics (for example, foreground -color, background color, line style, and so on) is stored in -resources called graphics contexts (GCs). -.IN "Graphics context" -Most graphics operations (see chapter 8) take a -GC as an argument. -Although in theory the X protocol permits sharing of GCs between applications, -it is expected that applications will use their own -GCs when performing operations. -Sharing of GCs is highly discouraged because the library may cache GC state. -.LP -Graphics operations can be performed to either windows or pixmaps, -which collectively are called drawables. -.IN "Root" -Each drawable exists on a single screen. -A GC is created for a specific screen and drawable depth -and can only be used with drawables of matching -screen and depth. -.LP -This chapter discusses how to: -.IP \(bu 5 -Manipulate graphics context/state -.IP \(bu 5 -Use graphics context convenience functions -.NH 2 -Manipulating Graphics Context/State -.XS -\*(SN Manipulating Graphics Context/State -.XE -.LP -Most attributes of graphics operations are stored in GCs. -These include line width, line style, plane mask, foreground, background, -tile, stipple, clipping region, end style, join style, and so on. -Graphics operations (for example, drawing lines) use these values -to determine the actual drawing operation. -Extensions to X may add additional components to GCs. -The contents of a GC are private to Xlib. -.LP -Xlib implements a write-back cache for all elements of a GC that are not -resource IDs to allow Xlib to implement the transparent coalescing of changes -to GCs. -For example, -a call to -.PN XSetForeground -of a GC followed by a call to -.PN XSetLineAttributes -results in only a single-change GC protocol request to the server. -GCs are neither expected nor encouraged to be shared between client -applications, so this write-back caching should present no problems. -Applications cannot share GCs without external synchronization. -Therefore, -sharing GCs between applications is highly discouraged. -.LP -To set an attribute of a GC, -set the appropriate member of the -.PN XGCValues -structure and OR in the corresponding value bitmask in your subsequent calls to -.PN XCreateGC . -The symbols for the value mask bits and the -.PN XGCValues -structure are: -.sM -.LP -/* GC attribute value mask bits */ -.TS -lw(.5i) lw(2.5i) lw(.75i). -#define\ - T{ -.PN GCFunction -T} T{ -(1L<<0) -T} -#define\ - T{ -.PN GCPlaneMask -T} T{ -(1L<<1) -T} -#define\ - T{ -.PN GCForeground -T} T{ -(1L<<2) -T} -#define\ - T{ -.PN GCBackground -T} T{ -(1L<<3) -T} -#define\ - T{ -.PN GCLineWidth -T} T{ -(1L<<4) -T} -#define\ - T{ -.PN GCLineStyle -T} T{ -(1L<<5) -T} -#define\ - T{ -.PN GCCapStyle -T} T{ -(1L<<6) -T} -#define\ - T{ -.PN GCJoinStyle -T} T{ -(1L<<7) -T} -#define\ - T{ -.PN GCFillStyle -T} T{ -(1L<<8) -T} -#define\ - T{ -.PN GCFillRule -T} T{ -(1L<<9) -T} -#define\ - T{ -.PN GCTile -T} T{ -(1L<<10) -T} -#define\ - T{ -.PN GCStipple -T} T{ -(1L<<11) -T} -#define\ - T{ -.PN GCTileStipXOrigin -T} T{ -(1L<<12) -T} -#define\ - T{ -.PN GCTileStipYOrigin -T} T{ -(1L<<13) -T} -#define\ - T{ -.PN GCFont -T} T{ -(1L<<14) -T} -#define\ - T{ -.PN GCSubwindowMode -T} T{ -(1L<<15) -T} -#define\ - T{ -.PN GCGraphicsExposures -T} T{ -(1L<<16) -T} -#define\ - T{ -.PN GCClipXOrigin -T} T{ -(1L<<17) -T} -#define\ - T{ -.PN GCClipYOrigin -T} T{ -(1L<<18) -T} -#define\ - T{ -.PN GCClipMask -T} T{ -(1L<<19) -T} -#define\ - T{ -.PN GCDashOffset -T} T{ -(1L<<20) -T} -#define\ - T{ -.PN GCDashList -T} T{ -(1L<<21) -T} -#define\ - T{ -.PN GCArcMode -T} T{ -(1L<<22) -T} -.TE -.IN "XGCValues" "" "@DEF@" -.Ds 0 -.TA .5i 3i -.ta .5i 3i -/* Values */ - -typedef struct { - int function; /* logical operation */ - unsigned long plane_mask; /* plane mask */ - unsigned long foreground; /* foreground pixel */ - unsigned long background; /* background pixel */ - int line_width; /* line width (in pixels) */ - int line_style; /* LineSolid, LineOnOffDash, LineDoubleDash */ - int cap_style; /* CapNotLast, CapButt, CapRound, CapProjecting */ - int join_style; /* JoinMiter, JoinRound, JoinBevel */ - int fill_style; /* FillSolid, FillTiled, FillStippled FillOpaqueStippled*/ - int fill_rule; /* EvenOddRule, WindingRule */ - int arc_mode; /* ArcChord, ArcPieSlice */ - Pixmap tile; /* tile pixmap for tiling operations */ - Pixmap stipple; /* stipple 1 plane pixmap for stippling */ - int ts_x_origin; /* offset for tile or stipple operations */ - int ts_y_origin; - Font font; /* default text font for text operations */ - int subwindow_mode; /* ClipByChildren, IncludeInferiors */ - Bool graphics_exposures; /* boolean, should exposures be generated */ - int clip_x_origin; /* origin for clipping */ - int clip_y_origin; - Pixmap clip_mask; /* bitmap clipping; other calls for rects */ - int dash_offset; /* patterned/dashed line information */ - char dashes; -} XGCValues; -.De -.LP -.eM -The default GC values are: -.TS H -l l. -_ -.sp 6p -.B -Component Default -.sp 6p -_ -.sp 6p -.TH -.R -T{ -function -T} T{ -.PN GXcopy -T} -plane_mask All ones -foreground 0 -background 1 -line_width 0 -T{ -line_style -T} T{ -.PN LineSolid -T} -T{ -cap_style -T} T{ -.PN CapButt -T} -T{ -join_style -T} T{ -.PN JoinMiter -T} -T{ -fill_style -T} T{ -.PN FillSolid -T} -T{ -fill_rule -T} T{ -.PN EvenOddRule -T} -T{ -arc_mode -T} T{ -.PN ArcPieSlice -T} -tile Pixmap of unspecified size filled with foreground pixel - (that is, client specified pixel if any, else 0) - (subsequent changes to foreground do not affect this pixmap) -stipple Pixmap of unspecified size filled with ones -ts_x_origin 0 -ts_y_origin 0 -font -T{ -subwindow_mode -T} T{ -.PN ClipByChildren -T} -T{ -graphics_exposures -T} T{ -.PN True -T} -clip_x_origin 0 -clip_y_origin 0 -T{ -clip_mask -T} T{ -.PN None -T} -dash_offset 0 -dashes 4 (that is, the list [4, 4]) -.sp 6p -_ -.TE -.LP -Note that foreground and background are not set to any values likely -to be useful in a window. -.LP -.IN "Display Functions" "" "@DEF@" -.IN "Source" "" "@DEF@" -.IN "Destination" "" "@DEF@" -The function attributes of a GC are used when you update a section of -a drawable (the destination) with bits from somewhere else (the source). -The function in a GC defines how the new destination bits are to be -computed from the source bits and the old destination bits. -.PN GXcopy -is typically the most useful because it will work on a color display, -but special applications may use other functions, -particularly in concert with particular planes of a color display. -The 16 GC functions, defined in -.hN X11/X.h , -are: -.\" are listed in Table 5-1 along with the -.\"the associated hexadecimal code -.\" and operation. -.\".CP T 1 -.\"Display Functions -.TS H -lw(1.5i) cw(.5i) lw(2i). -_ -.sp 6p -.B -Function Name Value Operation -.sp 6p -_ -.sp 6p -.TH -T{ -.PN GXclear -T} T{ -0x0 -T} T{ -0 -T} -T{ -.PN GXand -T} T{ -0x1 -T} T{ -src AND dst -T} -T{ -.PN GXandReverse -T} T{ -0x2 -T} T{ -src AND NOT dst -T} -T{ -.PN GXcopy -T} T{ -0x3 -T} T{ -src -T} -T{ -.PN GXandInverted -T} T{ -0x4 -T} T{ -(NOT src) AND dst -T} -T{ -.PN GXnoop -T} T{ -0x5 -T} T{ -dst -T} -T{ -.PN GXxor -T} T{ -0x6 -T} T{ -src XOR dst -T} -T{ -.PN GXor -T} T{ -0x7 -T} T{ -src OR dst -T} -T{ -.PN GXnor -T} T{ -0x8 -T} T{ -(NOT src) AND (NOT dst) -T} -T{ -.PN GXequiv -T} T{ -0x9 -T} T{ -(NOT src) XOR dst -T} -T{ -.PN GXinvert -T} T{ -0xa -T} T{ -NOT dst -T} -T{ -.PN GXorReverse -T} T{ -0xb -T} T{ -src OR (NOT dst) -T} -T{ -.PN GXcopyInverted -T} T{ -0xc -T} T{ -NOT src -T} -T{ -.PN GXorInverted -T} T{ -0xd -T} T{ -(NOT src) OR dst -T} -T{ -.PN GXnand -T} T{ -0xe -T} T{ -(NOT src) OR (NOT dst) -T} -T{ -.PN GXset -T} T{ -0xf -T} T{ -1 -T} -.sp 6p -_ -.TE -.LP -Many graphics operations depend on either pixel values or planes in a GC. -.IN "Pixel value" -The planes attribute is of type long, and it specifies which planes of the -destination are to be modified, one bit per plane. -.IN "Plane" "mask" -A monochrome display has only one plane and -will be the least significant bit of the word. -As planes are added to the display hardware, they will occupy more -significant bits in the plane mask. -.LP -In graphics operations, given a source and destination pixel, -the result is computed bitwise on corresponding bits of the pixels. -That is, a Boolean operation is performed in each bit plane. -The plane_mask restricts the operation to a subset of planes. -A macro constant -.PN AllPlanes -can be used to refer to all planes of the screen simultaneously. -The result is computed by the following: -.LP -.Ds -((src FUNC dst) AND plane-mask) OR (dst AND (NOT plane-mask)) -.De -.LP -Range checking is not performed on the values for foreground, -background, or plane_mask. -They are simply truncated to the appropriate -number of bits. -The line-width is measured in pixels and either can be greater than or equal to -one (wide line) or can be the special value zero (thin line). -.LP -Wide lines are drawn centered on the path described by the graphics request. -Unless otherwise specified by the join-style or cap-style, -the bounding box of a wide line with endpoints [x1, y1], [x2, y2] and -width w is a rectangle with vertices at the following real coordinates: -.LP -.Ds -.TA .5i 2.5i -.ta .5i 2.5i -[x1-(w*sn/2), y1+(w*cs/2)], [x1+(w*sn/2), y1-(w*cs/2)], -[x2-(w*sn/2), y2+(w*cs/2)], [x2+(w*sn/2), y2-(w*cs/2)] -.De -.LP -Here sn is the sine of the angle of the line, -and cs is the cosine of the angle of the line. -A pixel is part of the line and so is drawn -if the center of the pixel is fully inside the bounding box -(which is viewed as having infinitely thin edges). -If the center of the pixel is exactly on the bounding box, -it is part of the line if and only if the interior is immediately to its right -(x increasing direction). -Pixels with centers on a horizontal edge are a special case and are part of -the line if and only if the interior or the boundary is immediately below -(y increasing direction) and the interior or the boundary is immediately -to the right (x increasing direction). -.LP -Thin lines (zero line-width) are one-pixel-wide lines drawn using an -unspecified, device-dependent algorithm. -There are only two constraints on this algorithm. -.IP 1. 5 -If a line is drawn unclipped from [x1,y1] to [x2,y2] and -if another line is drawn unclipped from [x1+dx,y1+dy] to [x2+dx,y2+dy], -a point [x,y] is touched by drawing the first line -if and only if the point [x+dx,y+dy] is touched by drawing the second line. -.IP 2. 5 -The effective set of points comprising a line cannot be affected by clipping. -That is, a point is touched in a clipped line if and only if the point -lies inside the clipping region and the point would be touched -by the line when drawn unclipped. -.LP -A wide line drawn from [x1,y1] to [x2,y2] always draws the same pixels -as a wide line drawn from [x2,y2] to [x1,y1], not counting cap-style -and join-style. -It is recommended that this property be true for thin lines, -but this is not required. -A line-width of zero may differ from a line-width of one in which pixels are -drawn. -This permits the use of many manufacturers' line drawing hardware, -which may run many times faster than the more precisely specified -wide lines. -.LP -In general, -drawing a thin line will be faster than drawing a wide line of width one. -However, because of their different drawing algorithms, -thin lines may not mix well aesthetically with wide lines. -If it is desirable to obtain precise and uniform results across all displays, -a client should always use a line-width of one rather than a line-width of zero. -.LP -The line-style defines which sections of a line are drawn: -.TS -lw(1.3i) lw(4.5i). -T{ -.PN LineSolid -T} T{ -The full path of the line is drawn. -T} -.sp 6p -T{ -.PN LineDoubleDash -T} T{ -The full path of the line is drawn, -but the even dashes are filled differently -from the odd dashes (see fill-style) with -.PN CapButt -style used where even and odd dashes meet. -T} -.sp 6p -T{ -.PN LineOnOffDash -T} T{ -Only the even dashes are drawn, -and cap-style applies to -all internal ends of the individual dashes, -except -.PN CapNotLast -is treated as -.PN CapButt . -T} -.TE -.LP -The cap-style defines how the endpoints of a path are drawn: -.IN "Graphics context" "path" -.TS -lw(1.3i) lw(4.5i). -T{ -.PN CapNotLast -T} T{ -This is equivalent to -.PN CapButt -except that for a line-width of zero the final endpoint is not drawn. -T} -.sp 6p -T{ -.PN CapButt -T} T{ -The line is square at the endpoint (perpendicular to the slope of the line) -with no projection beyond. -T} -.sp 6p -T{ -.PN CapRound -T} T{ -The line has a circular arc with the diameter equal to the line-width, -centered on the endpoint. -(This is equivalent to -.PN CapButt -for line-width of zero). -T} -.sp 6p -T{ -.PN CapProjecting -T} T{ -The line is square at the end, but the path continues beyond the endpoint -for a distance equal to half the line-width. -(This is equivalent to -.PN CapButt -for line-width of zero). -T} -.TE -.LP -The join-style defines how corners are drawn for wide lines: -.TS -lw(1.3i) lw(4.5i). -T{ -.PN JoinMiter -T} T{ -The outer edges of two lines extend to meet at an angle. -However, if the angle is less than 11 degrees, -then a -.PN JoinBevel -join-style is used instead. -T} -.sp 6p -T{ -.PN JoinRound -T} T{ -The corner is a circular arc with the diameter equal to the line-width, -centered on the joinpoint. -T} -.sp 6p -T{ -.PN JoinBevel -T} T{ -The corner has -.PN CapButt -endpoint styles with the triangular notch filled. -T} -.TE -.LP -For a line with coincident endpoints (x1=x2, y1=y2), -when the cap-style is applied to both endpoints, -the semantics depends on the line-width and the cap-style: -.TS -lw(1.3i) lw(.5i) lw(4i). -T{ -.PN CapNotLast -T} T{ -thin -T} T{ -The results are device dependent, -but the desired effect is that nothing is drawn. -T} -.sp 6p -T{ -.PN CapButt -T} T{ -thin -T} T{ -The results are device dependent, -but the desired effect is that a single pixel is drawn. -T} -.sp 6p -T{ -.PN CapRound -T} T{ -thin -T} T{ -The results are the same as for -.PN CapButt /thin. -T} -.sp 6p -T{ -.PN CapProjecting -T} T{ -thin -T} T{ -The results are the same as for -.PN CapButt /thin. -T} -.sp 6p -T{ -.PN CapButt -T} T{ -wide -T} T{ -Nothing is drawn. -T} -.sp 6p -T{ -.PN CapRound -T} T{ -wide -T} T{ -The closed path is a circle, centered at the endpoint, and -with the diameter equal to the line-width. -T} -.sp 6p -T{ -.PN CapProjecting -T} T{ -wide -T} T{ -The closed path is a square, aligned with the coordinate axes, centered at the -endpoint, and with the sides equal to the line-width. -T} -.TE -.LP -For a line with coincident endpoints (x1=x2, y1=y2), -when the join-style is applied at one or both endpoints, -the effect is as if the line was removed from the overall path. -However, if the total path consists of or is reduced to a single point joined -with itself, the effect is the same as when the cap-style is applied at both -endpoints. -.LP -The tile/stipple represents an infinite two-dimensional plane, -with the tile/stipple replicated in all dimensions. -When that plane is superimposed on the drawable -for use in a graphics operation, the upper-left corner -of some instance of the tile/stipple is at the coordinates within -the drawable specified by the tile/stipple origin. -The tile/stipple and clip origins are interpreted relative to the -origin of whatever destination drawable is specified in a graphics -request. -The tile pixmap must have the same root and depth as the GC, -or a -.PN BadMatch -error results. -The stipple pixmap must have depth one and must have the same root as the -GC, or a -.PN BadMatch -error results. -For stipple operations where the fill-style is -.PN FillStippled -but not -.PN FillOpaqueStippled , -the stipple pattern is tiled in a -single plane and acts as an additional clip mask to be ANDed with the clip-mask. -Although some sizes may be faster to use than others, -any size pixmap can be used for tiling or stippling. -.LP -The fill-style defines the contents of the source for line, text, and -fill requests. -For all text and fill requests (for example, -.PN XDrawText , -.PN XDrawText16 , -.PN XFillRectangle , -.PN XFillPolygon , -and -.PN XFillArc ); -for line requests -with line-style -.PN LineSolid -(for example, -.PN XDrawLine , -.PN XDrawSegments , -.PN XDrawRectangle , -.PN XDrawArc ); -and for the even dashes for line requests with line-style -.PN LineOnOffDash -or -.PN LineDoubleDash , -the following apply: -.TS -lw(1.8i) lw(4i). -T{ -.PN FillSolid -T} T{ -Foreground -T} -.sp 6p -T{ -.PN FillTiled -T} T{ -Tile -T} -.sp 6p -T{ -.PN FillOpaqueStippled -T} T{ -A tile with the same width and height as stipple, -but with background everywhere stipple has a zero -and with foreground everywhere stipple has a one -T} -.sp 6p -T{ -.PN FillStippled -T} T{ -Foreground masked by stipple -T} -.TE -.LP -When drawing lines with line-style -.PN LineDoubleDash , -the odd dashes are controlled by the fill-style in the following manner: -.TS -lw(1.8i) lw(4i). -T{ -.PN FillSolid -T} T{ -Background -T} -.sp 6p -T{ -.PN FillTiled -T} T{ -Same as for even dashes -T} -.sp 6p -T{ -.PN FillOpaqueStippled -T} T{ -Same as for even dashes -T} -.sp 6p -T{ -.PN FillStippled -T} T{ -Background masked by stipple -T} -.TE -.LP -Storing a pixmap in a GC might or might not result in a copy -being made. -If the pixmap is later used as the destination for a graphics request, -the change might or might not be reflected in the GC. -If the pixmap is used simultaneously in a graphics request both as -a destination and as a tile or stipple, -the results are undefined. -.LP -For optimum performance, -you should draw as much as possible with the same GC -(without changing its components). -The costs of changing GC components relative to using different GCs -depend on the display hardware and the server implementation. -It is quite likely that some amount of GC information will be -cached in display hardware and that such hardware can only cache a small number -of GCs. -.LP -The dashes value is actually a simplified form of the -more general patterns that can be set with -.PN XSetDashes . -Specifying a -value of N is equivalent to specifying the two-element list [N, N] in -.PN XSetDashes . -The value must be nonzero, -or a -.PN BadValue -error results. -.LP -The clip-mask restricts writes to the destination drawable. -If the clip-mask is set to a pixmap, -it must have depth one and have the same root as the GC, -or a -.PN BadMatch -error results. -If clip-mask is set to -.PN None , -the pixels are always drawn regardless of the clip origin. -The clip-mask also can be set by calling the -.PN XSetClipRectangles -or -.PN XSetRegion -functions. -Only pixels where the clip-mask has a bit set to 1 are drawn. -Pixels are not drawn outside the area covered by the clip-mask -or where the clip-mask has a bit set to 0. -The clip-mask affects all graphics requests. -The clip-mask does not clip sources. -The clip-mask origin is interpreted relative to the origin of whatever -destination drawable is specified in a graphics request. -.LP -You can set the subwindow-mode to -.PN ClipByChildren -or -.PN IncludeInferiors . -For -.PN ClipByChildren , -both source and destination windows are -additionally clipped by all viewable -.PN InputOutput -children. -For -.PN IncludeInferiors , -neither source nor destination window is clipped by inferiors. -This will result in including subwindow contents in the source -and drawing through subwindow boundaries of the destination. -The use of -.PN IncludeInferiors -on a window of one depth with mapped -inferiors of differing depth is not illegal, but the semantics are -undefined by the core protocol. -.LP -The fill-rule defines what pixels are inside (drawn) for -paths given in -.PN XFillPolygon -requests and can be set to -.PN EvenOddRule -or -.PN WindingRule . -For -.PN EvenOddRule , -a point is inside if -an infinite ray with the point as origin crosses the path an odd number -of times. -For -.PN WindingRule , -a point is inside if an infinite ray with the -point as origin crosses an unequal number of clockwise and -counterclockwise directed path segments. -A clockwise directed path segment is one that crosses the ray from left to -right as observed from the point. -A counterclockwise segment is one that crosses the ray from right to left -as observed from the point. -The case where a directed line segment is coincident with the ray is -uninteresting because you can simply choose a different ray that is not -coincident with a segment. -.LP -For both -.PN EvenOddRule -and -.PN WindingRule , -a point is infinitely small, -and the path is an infinitely thin line. -A pixel is inside if the center point of the pixel is inside -and the center point is not on the boundary. -If the center point is on the boundary, -the pixel is inside if and only if the polygon interior is immediately to -its right (x increasing direction). -Pixels with centers on a horizontal edge are a special case -and are inside if and only if the polygon interior is immediately below -(y increasing direction). -.LP -The arc-mode controls filling in the -.PN XFillArcs -function and can be set to -.PN ArcPieSlice -or -.PN ArcChord . -For -.PN ArcPieSlice , -the arcs are pie-slice filled. -For -.PN ArcChord , -the arcs are chord filled. -.LP -The graphics-exposure flag controls -.PN GraphicsExpose -event generation -for -.PN XCopyArea -and -.PN XCopyPlane -requests (and any similar requests defined by extensions). -.LP -.sp -To create a new GC that is usable on a given screen with a -depth of drawable, use -.PN XCreateGC . -.IN "Graphics context" "initializing" -.IN "XCreateGC" "" "@DEF@" -.sM -.FD 0 -GC XCreateGC\^(\^\fIdisplay\fP, \fId\fP\^, \fIvaluemask\fP\^, \fIvalues\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - unsigned long \fIvaluemask\fP\^; -.br - XGCValues *\^\fIvalues\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fId\fP 1i -Specifies the drawable. -.ds Vm set using the information in the specified values structure -.IP \fIvaluemask\fP 1i -Specifies which components in the GC are to be \*(Vm. -This argument is the bitwise inclusive OR of zero or more of the valid -GC component mask bits. -.IP \fIvalues\fP 1i -Specifies any values as specified by the valuemask. -.LP -.eM -The -.PN XCreateGC -function creates a graphics context and returns a GC. -The GC can be used with any destination drawable having the same root -and depth as the specified drawable. -Use with other drawables results in a -.PN BadMatch -error. -.LP -.PN XCreateGC -can generate -.PN BadAlloc , -.PN BadDrawable , -.PN BadFont , -.PN BadMatch , -.PN BadPixmap , -and -.PN BadValue -errors. -.LP -.sp -To copy components from a source GC to a destination GC, use -.PN XCopyGC . -.IN "XCopyGC" "" "@DEF@" -.sM -.FD 0 -XCopyGC\^(\^\fIdisplay\fP, \fIsrc\fP\^, \fIvaluemask\fP\^, \fIdest\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - GC \fIsrc\fP\^, \fIdest\fP\^; -.br - unsigned long \fIvaluemask\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIsrc\fP 1i -Specifies the components of the source GC. -.ds Vm copied to the destination GC -.IP \fIvaluemask\fP 1i -Specifies which components in the GC are to be \*(Vm. -This argument is the bitwise inclusive OR of zero or more of the valid -GC component mask bits. -.IP \fIdest\fP 1i -Specifies the destination GC. -.LP -.eM -The -.PN XCopyGC -function copies the specified components from the source GC -to the destination GC. -The source and destination GCs must have the same root and depth, -or a -.PN BadMatch -error results. -The valuemask specifies which component to copy, as for -.PN XCreateGC . -.LP -.PN XCopyGC -can generate -.PN BadAlloc , -.PN BadGC , -and -.PN BadMatch -errors. -.LP -.sp -To change the components in a given GC, use -.PN XChangeGC . -.IN "XChangeGC" "" "@DEF@" -.sM -.FD 0 -XChangeGC\^(\^\fIdisplay\fP, \fIgc\fP\^, \fIvaluemask\fP\^, \fIvalues\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - GC \fIgc\fP\^; -.br - unsigned long \fIvaluemask\fP\^; -.br - XGCValues *\^\fIvalues\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIgc\fP 1i -Specifies the GC. -.ds Vm changed using information in the specified values structure -.IP \fIvaluemask\fP 1i -Specifies which components in the GC are to be \*(Vm. -This argument is the bitwise inclusive OR of zero or more of the valid -GC component mask bits. -.IP \fIvalues\fP 1i -Specifies any values as specified by the valuemask. -.LP -.eM -The -.PN XChangeGC -function changes the components specified by valuemask for -the specified GC. -The values argument contains the values to be set. -The values and restrictions are the same as for -.PN XCreateGC . -Changing the clip-mask overrides any previous -.PN XSetClipRectangles -request on the context. -Changing the dash-offset or dash-list -overrides any previous -.PN XSetDashes -request on the context. -The order in which components are verified and altered is server dependent. -If an error is generated, a subset of the components may have been altered. -.LP -.PN XChangeGC -can generate -.PN BadAlloc , -.PN BadFont , -.PN BadGC , -.PN BadMatch , -.PN BadPixmap , -and -.PN BadValue -errors. -.LP -.sp -To obtain components of a given GC, use -.PN XGetGCValues . -.IN "XGetGCValues" "" "@DEF@" -.sM -.FD 0 -Status XGetGCValues\^(\^\fIdisplay\fP, \fIgc\fP, \fIvaluemask\fP, \ -\fIvalues_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - GC \fIgc\fP\^; -.br - unsigned long \fIvaluemask\fP\^; -.br - XGCValues *\fIvalues_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIgc\fP 1i -Specifies the GC. -.ds Vm returned in the values_return argument -.IP \fIvaluemask\fP 1i -Specifies which components in the GC are to be \*(Vm. -This argument is the bitwise inclusive OR of zero or more of the valid -GC component mask bits. -.IP \fIvalues_return\fP 1i -Returns the GC values in the specified -.PN XGCValues -structure. -.LP -.eM -The -.PN XGetGCValues -function returns the components specified by valuemask for the specified GC. -If the valuemask contains a valid set of GC mask bits -.Pn ( GCFunction , -.PN GCPlaneMask , -.PN GCForeground , -.PN GCBackground , -.PN GCLineWidth , -.PN GCLineStyle , -.PN GCCapStyle , -.PN GCJoinStyle , -.PN GCFillStyle , -.PN GCFillRule , -.PN GCTile , -.PN GCStipple , -.PN GCTileStipXOrigin , -.PN GCTileStipYOrigin , -.PN GCFont , -.PN GCSubwindowMode , -.PN GCGraphicsExposures , -.PN GCClipXOrigin , -.PN GCCLipYOrigin , -.PN GCDashOffset , -or -.PN GCArcMode ) -and no error occurs, -.PN XGetGCValues -sets the requested components in values_return and returns a nonzero status. -Otherwise, it returns a zero status. -Note that the clip-mask and dash-list (represented by the -.PN GCClipMask -and -.PN GCDashList -bits, respectively, in the valuemask) -cannot be requested. -Also note that an invalid resource ID (with one or more of the three -most significant bits set to 1) will be returned for -.PN GCFont , -.PN GCTile , -and -.PN GCStipple -if the component has never been explicitly set by the client. -.LP -.sp -To free a given GC, use -.PN XFreeGC . -.IN "XFreeGC" "" "@DEF@" -.sM -.FD 0 -XFreeGC\^(\^\fIdisplay\fP, \fIgc\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - GC \fIgc\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIgc\fP 1i -Specifies the GC. -.LP -.eM -The -.PN XFreeGC -function destroys the specified GC as well as all the associated storage. -.LP -.PN XFreeGC -can generate a -.PN BadGC -error. -.LP -.sp -To obtain the -.PN GContext -resource ID for a given GC, use -.PN XGContextFromGC . -.IN "XGContextFromGC" "" "@DEF@" -.sM -.FD 0 -GContext XGContextFromGC\^(\^\fIgc\fP\^) -.br - GC \fIgc\fP\^; -.FN -.ds Gc for which you want the resource ID -.IP \fIgc\fP 1i -Specifies the GC \*(Gc. -.LP -.eM -.sp -Xlib usually defers sending changes to the components of a GC to the server -until a graphics function is actually called with that GC. -This permits batching of component changes into a single server request. -In some circumstances, however, it may be necessary for the client -to explicitly force sending the changes to the server. -An example might be when a protocol extension uses the GC indirectly, -in such a way that the extension interface cannot know what GC will be used. -To force sending GC component changes, use -.PN XFlushGC . -.IN "XFlushGC" "" "@DEF@" -.sM -.FD 0 -void XFlushGC\^(\^\fIdisplay\fP, \fIgc\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - GC \fIgc\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIgc\fP 1i -Specifies the GC. -.LP -.eM -.NH 2 -Using Graphics Context Convenience Routines -.XS -\*(SN Using Graphics Context Convenience Routines -.XE -.LP -This section discusses how to set the: -.IP \(bu 5 -Foreground, background, plane mask, or function components -.IP \(bu 5 -Line attributes and dashes components -.IP \(bu 5 -Fill style and fill rule components -.IP \(bu 5 -Fill tile and stipple components -.IP \(bu 5 -Font component -.IP \(bu 5 -Clip region component -.IP \(bu 5 -Arc mode, subwindow mode, and graphics exposure components -.NH 3 -Setting the Foreground, Background, Function, or Plane Mask -.XS -\*(SN Setting the Foreground, Background, Function, or Plane Mask -.XE -.LP -To set the foreground, background, plane mask, and function components -for a given GC, use -.PN XSetState . -.IN "XSetState" "" "@DEF@" -.sM -.FD 0 -XSetState\^(\^\fIdisplay\fP, \fIgc\fP\^, \fIforeground\fP\^, \fIbackground\fP\^, \fIfunction\fP\^, \fIplane_mask\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - GC \fIgc\fP\^; -.br - unsigned long \fIforeground\fP\^, \fIbackground\fP\^; -.br - int \fIfunction\fP\^; -.br - unsigned long \fIplane_mask\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIforeground\fP 1i -Specifies the foreground you want to set for the specified GC. -.IP \fIbackground\fP 1i -Specifies the background you want to set for the specified GC. -.IP \fIfunction\fP 1i -Specifies the function you want to set for the specified GC. -.IP \fIplane_mask\fP 1i -Specifies the plane mask. -.\" *** JIM: NEED MORE INFO FOR THIS. *** -.LP -.eM -.PN XSetState -can generate -.PN BadAlloc , -.PN BadGC , -and -.PN BadValue -errors. -.LP -.sp -To set the foreground of a given GC, use -.PN XSetForeground . -.IN "XSetForeground" "" "@DEF@" -.sM -.FD 0 -XSetForeground\^(\^\fIdisplay\fP, \fIgc\fP\^, \fIforeground\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - GC \fIgc\fP\^; -.br - unsigned long \fIforeground\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIforeground\fP 1i -Specifies the foreground you want to set for the specified GC. -.LP -.eM -.PN XSetForeground -can generate -.PN BadAlloc -and -.PN BadGC -errors. -.LP -.sp -To set the background of a given GC, use -.PN XSetBackground . -.IN "XSetBackground" "" "@DEF@" -.sM -.FD 0 -XSetBackground\^(\^\fIdisplay\fP, \fIgc\fP\^, \fIbackground\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - GC \fIgc\fP\^; -.br - unsigned long \fIbackground\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIbackground\fP 1i -Specifies the background you want to set for the specified GC. -.LP -.eM -.PN XSetBackground -can generate -.PN BadAlloc -and -.PN BadGC -errors. -.LP -.sp -To set the display function in a given GC, use -.PN XSetFunction . -.IN "XSetFunction" "" "@DEF@" -.sM -.FD 0 -XSetFunction\^(\^\fIdisplay\fP, \fIgc\fP\^, \fIfunction\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - GC \fIgc\fP\^; -.br - int \fIfunction\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIfunction\fP 1i -Specifies the function you want to set for the specified GC. -.LP -.eM -.PN XSetFunction -can generate -.PN BadAlloc , -.PN BadGC , -and -.PN BadValue -errors. -.LP -.sp -To set the plane mask of a given GC, use -.PN XSetPlaneMask . -.IN "XSetPlaneMask" "" "@DEF@" -.sM -.FD 0 -XSetPlaneMask\^(\^\fIdisplay\fP, \fIgc\fP\^, \fIplane_mask\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - GC \fIgc\fP\^; -.br - unsigned long \fIplane_mask\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIplane_mask\fP 1i -Specifies the plane mask. -.\" *** JIM: NEED MORE INFO FOR THIS. *** -.LP -.eM -.PN XSetPlaneMask -can generate -.PN BadAlloc -and -.PN BadGC -errors. -.NH 3 -Setting the Line Attributes and Dashes -.XS -\*(SN Setting the Line Attributes and Dashes -.XE -.LP -To set the line drawing components of a given GC, use -.PN XSetLineAttributes . -.IN "XSetLineAttributes" "" "@DEF@" -.sM -.FD 0 -XSetLineAttributes\^(\^\fIdisplay\fP, \fIgc\fP\^, \fIline_width\fP\^, \fIline_style\fP\^, \fIcap_style\fP\^, \fIjoin_style\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - GC \fIgc\fP\^; -.br - unsigned int \fIline_width\fP\^; -.br - int \fIline_style\fP\^; -.br - int \fIcap_style\fP\^; -.br - int \fIjoin_style\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIline_width\fP 1i -Specifies the line-width you want to set for the specified GC. -.IP \fIline_style\fP 1i -Specifies the line-style you want to set for the specified GC. -You can pass -.PN LineSolid , -.PN LineOnOffDash , -or -.PN LineDoubleDash . -.IP \fIcap_style\fP 1i -Specifies the line-style and cap-style you want to set for the specified GC. -You can pass -.PN CapNotLast , -.PN CapButt , -.PN CapRound , -or -.PN CapProjecting . -.IP \fIjoin_style\fP 1i -Specifies the line join-style you want to set for the specified GC. -You can pass -.PN JoinMiter , -.PN JoinRound , -or -.PN JoinBevel . -.LP -.eM -.PN XSetLineAttributes -can generate -.PN BadAlloc , -.PN BadGC , -and -.PN BadValue -errors. -.LP -.sp -To set the dash-offset and dash-list for dashed line styles of a given GC, use -.PN XSetDashes . -.IN "XSetDashes" "" "@DEF@" -.sM -.FD 0 -XSetDashes\^(\^\fIdisplay\fP, \fIgc\fP\^, \fIdash_offset\fP\^, \fIdash_list\fP\^, \fIn\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - GC \fIgc\fP\^; -.br - int \fIdash_offset\fP\^; -.br - char \fIdash_list\fP[]\^; -.br - int \fIn\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIdash_offset\fP 1i -Specifies the phase of the pattern for the dashed line-style you want to set -for the specified GC. -.IP \fIdash_list\fP 1i -Specifies the dash-list for the dashed line-style -you want to set for the specified GC. -.IP \fIn\fP 1i -Specifies the number of elements in dash_list. -.LP -.eM -The -.PN XSetDashes -function sets the dash-offset and dash-list attributes for dashed line styles -in the specified GC. -There must be at least one element in the specified dash_list, -or a -.PN BadValue -error results. -The initial and alternating elements (second, fourth, and so on) -of the dash_list are the even dashes, and -the others are the odd dashes. -Each element specifies a dash length in pixels. -All of the elements must be nonzero, -or a -.PN BadValue -error results. -Specifying an odd-length list is equivalent to specifying the same list -concatenated with itself to produce an even-length list. -.LP -The dash-offset defines the phase of the pattern, -specifying how many pixels into the dash-list the pattern -should actually begin in any single graphics request. -Dashing is continuous through path elements combined with a join-style -but is reset to the dash-offset between each sequence of joined lines. -.LP -The unit of measure for dashes is the same for the ordinary coordinate system. -Ideally, a dash length is measured along the slope of the line, but implementations -are only required to match this ideal for horizontal and vertical lines. -Failing the ideal semantics, it is suggested that the length be measured along the -major axis of the line. -The major axis is defined as the x axis for lines drawn at an angle of between -\-45 and +45 degrees or between 135 and 225 degrees from the x axis. -For all other lines, the major axis is the y axis. -.LP -.PN XSetDashes -can generate -.PN BadAlloc , -.PN BadGC , -and -.PN BadValue -errors. -.NH 3 -Setting the Fill Style and Fill Rule -.XS -\*(SN Setting the Fill Style and Fill Rule -.XE -.LP -To set the fill-style of a given GC, use -.PN XSetFillStyle . -.IN "XSetFillStyle" "" "@DEF@" -.sM -.FD 0 -XSetFillStyle\^(\^\fIdisplay\fP, \fIgc\fP\^, \fIfill_style\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - GC \fIgc\fP\^; -.br - int \fIfill_style\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIfill_style\fP 1i -Specifies the fill-style you want to set for the specified GC. -You can pass -.PN FillSolid , -.PN FillTiled , -.PN FillStippled , -or -.PN FillOpaqueStippled . -.LP -.eM -.PN XSetFillStyle -can generate -.PN BadAlloc , -.PN BadGC , -and -.PN BadValue -errors. -.LP -.sp -To set the fill-rule of a given GC, use -.PN XSetFillRule . -.IN "XSetFillRule" "" "@DEF@" -.sM -.FD 0 -XSetFillRule\^(\^\fIdisplay\fP, \fIgc\fP\^, \fIfill_rule\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - GC \fIgc\fP\^; -.br - int \fIfill_rule\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIfill_rule\fP 1i -Specifies the fill-rule you want to set for the specified GC. -You can pass -.PN EvenOddRule -or -.PN WindingRule . -.LP -.eM -.PN XSetFillRule -can generate -.PN BadAlloc , -.PN BadGC , -and -.PN BadValue -errors. -.NH 3 -Setting the Fill Tile and Stipple -.XS -\*(SN Setting the Fill Tile and Stipple -.XE -.LP -Some displays have hardware support for tiling or -stippling with patterns of specific sizes. -Tiling and stippling operations that restrict themselves to those specific -sizes run much faster than such operations with arbitrary size patterns. -Xlib provides functions that you can use to determine the best size, -tile, or stipple for the display -as well as to set the tile or stipple shape and the tile or stipple origin. -.LP -.sp -To obtain the best size of a tile, stipple, or cursor, use -.PN XQueryBestSize . -.IN "XQueryBestSize" "" "@DEF@" -.sM -.FD 0 -Status XQueryBestSize\^(\^\fIdisplay\fP, \fIclass\fP, \fIwhich_screen\fP, \fIwidth\fP, \fIheight\fP, \fIwidth_return\fP, \fIheight_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIclass\fP\^; -.br - Drawable \fIwhich_screen\fP\^; -.br - unsigned int \fIwidth\fP, \fIheight\fP\^; -.br - unsigned int *\fIwidth_return\fP, *\fIheight_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIclass\fP 1i -Specifies the class that you are interested in. -You can pass -.PN TileShape , -.PN CursorShape , -or -.PN StippleShape . -.IP \fIwhich_screen\fP 1i -Specifies any drawable on the screen. -.IP \fIwidth\fP 1i -.br -.ns -.IP \fIheight\fP 1i -Specify the width and height. -.IP \fIwidth_return\fP 1i -.br -.ns -.IP \fIheight_return\fP 1i -Return the width and height of the object best supported -by the display hardware. -.LP -.eM -The -.PN XQueryBestSize -function returns the best or closest size to the specified size. -For -.PN CursorShape , -this is the largest size that can be fully displayed on the screen specified by -which_screen. -For -.PN TileShape , -this is the size that can be tiled fastest. -For -.PN StippleShape , -this is the size that can be stippled fastest. -For -.PN CursorShape , -the drawable indicates the desired screen. -For -.PN TileShape -and -.PN StippleShape , -the drawable indicates the screen and possibly the window class and depth. -An -.PN InputOnly -window cannot be used as the drawable for -.PN TileShape -or -.PN StippleShape , -or a -.PN BadMatch -error results. -.LP -.PN XQueryBestSize -can generate -.PN BadDrawable , -.PN BadMatch , -and -.PN BadValue -errors. -.LP -.sp -To obtain the best fill tile shape, use -.PN XQueryBestTile . -.IN "XQueryBestTile" "" "@DEF@" -.sM -.FD 0 -Status XQueryBestTile\^(\^\fIdisplay\fP, \fIwhich_screen\fP, \fIwidth\fP, \fIheight\fP, \fIwidth_return\fP, \fIheight_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fIwhich_screen\fP\^; -.br - unsigned int \fIwidth\fP, \fIheight\fP\^; -.br - unsigned int *\fIwidth_return\fP, *\fIheight_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIwhich_screen\fP 1i -Specifies any drawable on the screen. -.IP \fIwidth\fP 1i -.br -.ns -.IP \fIheight\fP 1i -Specify the width and height. -.IP \fIwidth_return\fP 1i -.br -.ns -.IP \fIheight_return\fP 1i -Return the width and height of the object best supported -by the display hardware. -.LP -.eM -The -.PN XQueryBestTile -function returns the best or closest size, that is, the size that can be -tiled fastest on the screen specified by which_screen. -The drawable indicates the screen and possibly the window class and depth. -If an -.PN InputOnly -window is used as the drawable, a -.PN BadMatch -error results. -.LP -.PN XQueryBestTile -can generate -.PN BadDrawable -and -.PN BadMatch -errors. -.LP -.sp -To obtain the best stipple shape, use -.PN XQueryBestStipple . -.IN "XQueryBestStipple" "" "@DEF@" -.sM -.FD 0 -Status XQueryBestStipple\^(\^\fIdisplay\fP, \fIwhich_screen\fP, \fIwidth\fP, \fIheight\fP, \fIwidth_return\fP, \fIheight_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fIwhich_screen\fP\^; -.br - unsigned int \fIwidth\fP, \fIheight\fP\^; -.br - unsigned int *\fIwidth_return\fP, *\fIheight_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIwhich_screen\fP 1i -Specifies any drawable on the screen. -.IP \fIwidth\fP 1i -.br -.ns -.IP \fIheight\fP 1i -Specify the width and height. -.IP \fIwidth_return\fP 1i -.br -.ns -.IP \fIheight_return\fP 1i -Return the width and height of the object best supported -by the display hardware. -.LP -.eM -The -.PN XQueryBestStipple -function returns the best or closest size, that is, the size that can be -stippled fastest on the screen specified by which_screen. -The drawable indicates the screen and possibly the window class and depth. -If an -.PN InputOnly -window is used as the drawable, a -.PN BadMatch -error results. -.LP -.PN XQueryBestStipple -can generate -.PN BadDrawable -and -.PN BadMatch -errors. -.LP -.sp -To set the fill tile of a given GC, use -.PN XSetTile . -.IN "XSetTile" "" "@DEF@" -.sM -.FD 0 -XSetTile\^(\^\fIdisplay\fP, \fIgc\fP\^, \fItile\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - GC \fIgc\fP\^; -.br - Pixmap \fItile\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fItile\fP 1i -Specifies the fill tile you want to set for the specified GC. -.LP -.eM -The tile and GC must have the same depth, -or a -.PN BadMatch -error results. -.LP -.PN XSetTile -can generate -.PN BadAlloc , -.PN BadGC , -.PN BadMatch , -and -.PN BadPixmap -errors. -.LP -.sp -To set the stipple of a given GC, use -.PN XSetStipple . -.IN "XSetStipple" "" "@DEF@" -.sM -.FD 0 -XSetStipple\^(\^\fIdisplay\fP, \fIgc\fP\^, \fIstipple\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - GC \fIgc\fP\^; -.br - Pixmap \fIstipple\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIstipple\fP 1i -Specifies the stipple you want to set for the specified GC. -.LP -.eM -The stipple must have a depth of one, -or a -.PN BadMatch -error results. -.LP -.PN XSetStipple -can generate -.PN BadAlloc , -.PN BadGC , -.PN BadMatch , -and -.PN BadPixmap -errors. -.LP -.sp -To set the tile or stipple origin of a given GC, use -.PN XSetTSOrigin . -.IN "XSetTSOrigin" "" "@DEF@" -.sM -.FD 0 -XSetTSOrigin\^(\^\fIdisplay\fP, \fIgc\fP\^, \fIts_x_origin\fP\^, \fIts_y_origin\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - GC \fIgc\fP\^; -.br - int \fIts_x_origin\fP\^, \fIts_y_origin\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIts_x_origin\fP 1i -.br -.ns -.IP \fIts_y_origin\fP 1i -Specify the x and y coordinates of the tile and stipple origin. -.LP -.eM -When graphics requests call for tiling or stippling, -the parent's origin will be interpreted relative to whatever destination -drawable is specified in the graphics request. -.LP -.PN XSetTSOrigin -can generate -.PN BadAlloc -and -.PN BadGC -errors. -.NH 3 -Setting the Current Font -.XS -\*(SN Setting the Current Font -.XE -.LP -To set the current font of a given GC, use -.PN XSetFont . -.IN "XSetFont" "" "@DEF@" -.sM -.FD 0 -XSetFont\^(\^\fIdisplay\fP, \fIgc\fP\^, \fIfont\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - GC \fIgc\fP\^; -.br - Font \fIfont\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIfont\fP 1i -Specifies the font. -.LP -.eM -.PN XSetFont -can generate -.PN BadAlloc , -.PN BadFont , -and -.PN BadGC -errors. -.NH 3 -Setting the Clip Region -.XS -\*(SN Setting the Clip Region -.XE -.LP -Xlib provides functions that you can use to set the clip-origin -and the clip-mask or set the clip-mask to a list of rectangles. -.LP -.sp -To set the clip-origin of a given GC, use -.PN XSetClipOrigin . -.IN "XSetClipOrigin" "" "@DEF@" -.sM -.FD 0 -XSetClipOrigin\^(\^\fIdisplay\fP, \fIgc\fP\^, \fIclip_x_origin\fP\^, \fIclip_y_origin\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - GC \fIgc\fP\^; -.br - int \fIclip_x_origin\fP\^, \fIclip_y_origin\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIclip_x_origin\fP 1i -.br -.ns -.IP \fIclip_y_origin\fP 1i -Specify the x and y coordinates of the clip-mask origin. -.LP -.eM -The clip-mask origin is interpreted relative to the origin of whatever -destination drawable is specified in the graphics request. -.LP -.PN XSetClipOrigin -can generate -.PN BadAlloc -and -.PN BadGC -errors. -.LP -.sp -To set the clip-mask of a given GC to the specified pixmap, use -.PN XSetClipMask . -.IN "XSetClipMask" "" "@DEF@" -.sM -.FD 0 -XSetClipMask\^(\^\fIdisplay\fP, \fIgc\fP, \fIpixmap\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - GC \fIgc\fP\^; -.br - Pixmap \fIpixmap\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIpixmap\fP 1i -Specifies the pixmap or -.PN None . -.LP -.eM -If the clip-mask is set to -.PN None , -the pixels are always drawn (regardless of the clip-origin). -.LP -.PN XSetClipMask -can generate -.PN BadAlloc , -.PN BadGC , -.PN BadMatch , -and -.PN BadPixmap -errors. -.LP -.sp -To set the clip-mask of a given GC to the specified list of rectangles, use -.PN XSetClipRectangles . -.IN "XSetClipRectangles" "" "@DEF@" -.sM -.FD 0 -XSetClipRectangles\^(\^\fIdisplay\fP, \fIgc\fP\^, \fIclip_x_origin\fP\^, \fIclip_y_origin\fP\^, \fIrectangles\fP\^, \fIn\fP\^, \fIordering\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - GC \fIgc\fP\^; -.br - int \fIclip_x_origin\fP\^, \fIclip_y_origin\fP\^; -.br - XRectangle \fIrectangles\fP[]\^; -.br - int \fIn\fP\^; -.br - int \fIordering\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIclip_x_origin\fP 1i -.br -.ns -.IP \fIclip_y_origin\fP 1i -Specify the x and y coordinates of the clip-mask origin. -.IP \fIrectangles\fP 1i -Specifies an array of rectangles that define the clip-mask. -.IP \fIn\fP 1i -Specifies the number of rectangles. -.IP \fIordering\fP 1i -Specifies the ordering relations on the rectangles. -You can pass -.PN Unsorted , -.PN YSorted , -.PN YXSorted , -or -.PN YXBanded . -.LP -.eM -The -.PN XSetClipRectangles -function changes the clip-mask in the specified GC -to the specified list of rectangles and sets the clip origin. -The output is clipped to remain contained within the -rectangles. -The clip-origin is interpreted relative to the origin of -whatever destination drawable is specified in a graphics request. -The rectangle coordinates are interpreted relative to the clip-origin. -The rectangles should be nonintersecting, or the graphics results will be -undefined. -Note that the list of rectangles can be empty, -which effectively disables output. -This is the opposite of passing -.PN None -as the clip-mask in -.PN XCreateGC , -.PN XChangeGC , -and -.PN XSetClipMask . -.LP -If known by the client, ordering relations on the rectangles can be -specified with the ordering argument. -This may provide faster operation -by the server. -If an incorrect ordering is specified, the X server may generate a -.PN BadMatch -error, but it is not required to do so. -If no error is generated, the graphics -results are undefined. -.PN Unsorted -means the rectangles are in arbitrary order. -.PN YSorted -means that the rectangles are nondecreasing in their Y origin. -.PN YXSorted -additionally constrains -.PN YSorted -order in that all -rectangles with an equal Y origin are nondecreasing in their X -origin. -.PN YXBanded -additionally constrains -.PN YXSorted -by requiring that, -for every possible Y scanline, all rectangles that include that -scanline have an identical Y origins and Y extents. -.LP -.PN XSetClipRectangles -can generate -.PN BadAlloc , -.PN BadGC , -.PN BadMatch , -and -.PN BadValue -errors. -.LP -Xlib provides a set of basic functions for performing -region arithmetic. -For information about these functions, -see section 16.5. -.NH 3 -Setting the Arc Mode, Subwindow Mode, and Graphics Exposure -.XS -\*(SN Setting the Arc Mode, Subwindow Mode, and Graphics Exposure -.XE -.LP -To set the arc mode of a given GC, use -.PN XSetArcMode . -.IN "XSetArcMode" "" "@DEF@" -.sM -.FD 0 -XSetArcMode\^(\^\fIdisplay\fP, \fIgc\fP\^, \fIarc_mode\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - GC \fIgc\fP\^; -.br - int \fIarc_mode\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIarc_mode\fP 1i -Specifies the arc mode. -You can pass -.PN ArcChord -or -.PN ArcPieSlice . -.LP -.eM -.PN XSetArcMode -can generate -.PN BadAlloc , -.PN BadGC , -and -.PN BadValue -errors. -.LP -.sp -To set the subwindow mode of a given GC, use -.PN XSetSubwindowMode . -.IN "XSetSubwindowMode" "" "@DEF@" -.sM -.FD 0 -XSetSubwindowMode\^(\^\fIdisplay\fP, \fIgc\fP\^, \fIsubwindow_mode\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - GC \fIgc\fP\^; -.br - int \fIsubwindow_mode\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIsubwindow_mode\fP 1i -Specifies the subwindow mode. -You can pass -.PN ClipByChildren -or -.PN IncludeInferiors . -.LP -.eM -.PN XSetSubwindowMode -can generate -.PN BadAlloc , -.PN BadGC , -and -.PN BadValue -errors. -.LP -.sp -To set the graphics-exposures flag of a given GC, use -.PN XSetGraphicsExposures . -.IN "XSetGraphicsExposures" "" "@DEF@" -.sM -.FD 0 -XSetGraphicsExposures\^(\^\fIdisplay\fP, \fIgc\fP\^, \fIgraphics_exposures\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - GC \fIgc\fP\^; -.br - Bool \fIgraphics_exposures\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIgraphics_exposures\fP 1i -Specifies a Boolean value that indicates whether you want -.PN GraphicsExpose -and -.PN NoExpose -events to be reported when calling -.PN XCopyArea -and -.PN XCopyPlane -with this GC. -.LP -.eM -.PN XSetGraphicsExposures -can generate -.PN BadAlloc , -.PN BadGC , -and -.PN BadValue -errors. -.bp diff --git a/doc/xorg-docs/specs/X11/CH08 b/doc/xorg-docs/specs/X11/CH08 deleted file mode 100644 index 3d2161fb2..000000000 --- a/doc/xorg-docs/specs/X11/CH08 +++ /dev/null @@ -1,3468 +0,0 @@ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by -.\" Digital Equipment Corporation -.\" -.\" Portions Copyright \(co 1990, 1991 by -.\" Tektronix, Inc. -.\" -.\" Permission to use, copy, modify and distribute this documentation for -.\" any purpose and without fee is hereby granted, provided that the above -.\" copyright notice appears in all copies and that both that copyright notice -.\" and this permission notice appear in all copies, and that the names of -.\" Digital and Tektronix not be used in in advertising or publicity pertaining -.\" to this documentation without specific, written prior permission. -.\" Digital and Tektronix makes no representations about the suitability -.\" of this documentation for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBChapter 8\fP\s-1 - -\s+1\fBGraphics Functions\fP\s-1 -.sp 2 -.nr H1 8 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.na -.LP -.XS -Chapter 8: Graphics Functions -.XE -Once you have established a connection to a display, -you can use the Xlib graphics functions to: -.IP \(bu 5 -Clear and copy areas -.IP \(bu 5 -Draw points, lines, rectangles, and arcs -.IP \(bu 5 -Fill areas -.IP \(bu 5 -Manipulate fonts -.IP \(bu 5 -Draw text -.IP \(bu 5 -Transfer images between clients and the server -.LP -If the same drawable and GC is used for each call, -Xlib batches back-to-back calls to -.PN XDrawPoint , -.PN XDrawLine , -.PN XDrawRectangle , -.PN XFillArc , -and -.PN XFillRectangle . -Note that this reduces the total number of requests sent to the server. -.NH 2 -Clearing Areas -.XS -\*(SN Clearing Areas -.XE -.LP -Xlib provides functions that you can use to clear an area or the entire window. -Because pixmaps do not have defined backgrounds, -they cannot be filled by using the functions described in this section. -Instead, to accomplish an analogous operation on a pixmap, -you should use -.PN XFillRectangle , -which sets the pixmap to a known value. -.LP -.sp -To clear a rectangular area of a given window, use -.PN XClearArea . -.IN "Areas" "clearing" -.IN "Clearing" "areas" -.IN "XClearArea" "" "@DEF@" -.sM -.FD 0 -XClearArea\^(\^\fIdisplay\fP, \fIw\fP\^, \fIx\fP\^, \fIy\fP\^, \fIwidth\fP\^, \fIheight\fP\^, \fIexposures\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - int \fIx\fP\^, \fIy\fP\^; -.br - unsigned int \fIwidth\fP\^, \fIheight\fP\^; -.br - Bool \fIexposures\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.ds Xy , which are relative to the origin of the window \ -and specify the upper-left corner of the rectangle -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the x and y coordinates\*(Xy. -.ds Wh , which are the dimensions of the rectangle -.IP \fIwidth\fP 1i -.br -.ns -.IP \fIheight\fP 1i -Specify the width and height\*(Wh. -.IP \fIexposures\fP 1i -Specifies a Boolean value that indicates if -.PN Expose -events are to be generated. -.LP -.eM -The -.PN XClearArea -function paints a rectangular area in the specified window according to the -specified dimensions with the window's background pixel or pixmap. -The subwindow-mode effectively is -.PN ClipByChildren . -If width is zero, it -is replaced with the current width of the window minus x. -If height is -zero, it is replaced with the current height of the window minus y. -If the window has a defined background tile, -the rectangle clipped by any children is filled with this tile. -If the window has -background -.PN None , -the contents of the window are not changed. -In either -case, if exposures is -.PN True , -one or more -.PN Expose -events are generated for regions of the rectangle that are either visible or are -being retained in a backing store. -If you specify a window whose class is -.PN InputOnly , -a -.PN BadMatch -error results. -.LP -.PN XClearArea -can generate -.PN BadMatch , -.PN BadValue , -and -.PN BadWindow -errors. -.LP -.sp -To clear the entire area in a given window, use -.PN XClearWindow . -.IN "Window" "clearing" -.IN "Clearing" "windows" -.IN "XClearWindow" "" "@DEF@" -.sM -.FD 0 -XClearWindow\^(\^\fIdisplay\fP, \fIw\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.LP -.eM -The -.PN XClearWindow -function clears the entire area in the specified window and is -equivalent to -.PN XClearArea -(display, w, 0, 0, 0, 0, -.PN False ). -If the window has a defined background tile, the rectangle is tiled with a -plane-mask of all ones and -.PN GXcopy -function. -If the window has -background -.PN None , -the contents of the window are not changed. -If you specify a window whose class is -.PN InputOnly , -a -.PN BadMatch -error results. -.LP -.PN XClearWindow -can generate -.PN BadMatch -and -.PN BadWindow -errors. -.NH 2 -Copying Areas -.XS -\*(SN Copying Areas -.XE -.LP -Xlib provides functions that you can use to copy an area or a bit plane. -.LP -.sp -To copy an area between drawables of the same -root and depth, use -.PN XCopyArea . -.IN "Areas" "copying" -.IN "Copying" "areas" -.IN "XCopyArea" "" "@DEF@" -.sM -.FD 0 -XCopyArea\^(\^\fIdisplay\fP, \fIsrc\fP\^, \fIdest\fP\^, \fIgc\fP\^, \fIsrc_x\fP\^, \fIsrc_y\fP\^, \fIwidth\fP\^, \fIheight\fP\^, \fIdest_x\fP\^, \fIdest_y\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fIsrc\fP\^, \fIdest\fP\^; -.br - GC \fIgc\fP\^; -.br - int \fIsrc_x\fP\^, \fIsrc_y\fP\^; -.br - unsigned int \fIwidth\fP\^, \fIheight\fP\^; -.br - int \fIdest_x\fP\^, \fIdest_y\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIsrc\fP 1i -.br -.ns -.IP \fIdest\fP 1i -Specify the source and destination rectangles to be combined. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIsrc_x\fP 1i -.br -.ns -.IP \fIsrc_y\fP 1i -Specify the x and y coordinates, -which are relative to the origin of the source rectangle -and specify its upper-left corner. -.ds Wh , which are the dimensions of both the source \ -and destination rectangles -.IP \fIwidth\fP 1i -.br -.ns -.IP \fIheight\fP 1i -Specify the width and height\*(Wh. -.ds Dx , which are relative to the origin of the destination rectangle \ -and specify its upper-left corner -.IP \fIdest_x\fP 1i -.br -.ns -.IP \fIdest_y\fP 1i -Specify the x and y coordinates\*(Dx. -.LP -.eM -The -.PN XCopyArea -function combines the specified rectangle of src with the specified rectangle -of dest. -The drawables must have the same root and depth, -or a -.PN BadMatch -error results. -.LP -If regions of the source rectangle are obscured and have not been -retained in backing store -or if regions outside the boundaries of the source drawable are specified, -those regions are not copied. -Instead, the -following occurs on all corresponding destination regions that are either -visible or are retained in backing store. -If the destination is a window with a background other than -.PN None , -corresponding regions -of the destination are tiled with that background -(with plane-mask of all ones and -.PN GXcopy -function). -Regardless of tiling or whether the destination is a window or a pixmap, -if graphics-exposures is -.PN True , -then -.PN GraphicsExpose -events for all corresponding destination regions are generated. -If graphics-exposures is -.PN True -but no -.PN GraphicsExpose -events are generated, a -.PN NoExpose -event is generated. -Note that by default graphics-exposures is -.PN True -in new GCs. -.LP -This function uses these GC components: function, plane-mask, -subwindow-mode, graphics-exposures, clip-x-origin, -clip-y-origin, and clip-mask. -.LP -.PN XCopyArea -can generate -.PN BadDrawable , -.PN BadGC , -and -.PN BadMatch -errors. -.sp -.LP -To copy a single bit plane of a given drawable, use -.PN XCopyPlane . -.IN "Plane" "copying" -.IN "Copying" "planes" -.IN "XCopyPlane" "" "@DEF@" -.sM -.FD 0 -XCopyPlane\^(\^\fIdisplay\fP, \fIsrc\fP\^, \fIdest\fP\^, \fIgc\fP\^, \fIsrc_x\fP\^, \fIsrc_y\fP\^, \fIwidth\fP\^, \fIheight\fP\^, \fIdest_x\fP\^, \fIdest_y\fP\^, \fIplane\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fIsrc\fP\^, \fIdest\fP\^; -.br - GC \fIgc\fP\^; -.br - int \fIsrc_x\fP\^, \fIsrc_y\fP\^; -.br - unsigned int \fIwidth\fP\^, \fIheight\fP\^; -.br - int \fIdest_x\fP\^, \fIdest_y\fP\^; -.br - unsigned long \fIplane\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIsrc\fP 1i -.br -.ns -.IP \fIdest\fP 1i -Specify the source and destination rectangles to be combined. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIsrc_x\fP 1i -.br -.ns -.IP \fIsrc_y\fP 1i -Specify the x and y coordinates, -which are relative to the origin of the source rectangle -and specify its upper-left corner. -.ds Wh , which are the dimensions of both the source and destination rectangles -.IP \fIwidth\fP 1i -.br -.ns -.IP \fIheight\fP 1i -Specify the width and height\*(Wh. -.ds Dx , which are relative to the origin of the destination rectangle \ -and specify its upper-left corner -.IP \fIdest_x\fP 1i -.br -.ns -.IP \fIdest_y\fP 1i -Specify the x and y coordinates\*(Dx. -.IP \fIplane\fP 1i -Specifies the bit plane. -You must set exactly one bit to 1. -.LP -.eM -The -.PN XCopyPlane -function uses a single bit plane of the specified source rectangle -combined with the specified GC to modify the specified rectangle of dest. -The drawables must have the same root but need not have the same depth. -If the drawables do not have the same root, a -.PN BadMatch -error results. -If plane does not have exactly one bit set to 1 and the value of plane -is not less than %2 sup n%, where \fIn\fP is the depth of src, a -.PN BadValue -error results. -.LP -Effectively, -.PN XCopyPlane -forms a pixmap of the same depth as the rectangle of dest and with a -size specified by the source region. -It uses the foreground/background pixels in the GC (foreground -everywhere the bit plane in src contains a bit set to 1, -background everywhere the bit plane in src contains a bit set to 0) -and the equivalent of a -.PN CopyArea -protocol request is performed with all the same exposure semantics. -This can also be thought of as using the specified region of the source -bit plane as a stipple with a fill-style of -.PN FillOpaqueStippled -for filling a rectangular area of the destination. -.LP -This function uses these GC components: function, plane-mask, foreground, -background, subwindow-mode, graphics-exposures, clip-x-origin, clip-y-origin, -and clip-mask. -.LP -.PN XCopyPlane -can generate -.PN BadDrawable , -.PN BadGC , -.PN BadMatch , -and -.PN BadValue -errors. -.NH 2 -Drawing Points, Lines, Rectangles, and Arcs -.XS -\*(SN Drawing Points, Lines, Rectangles, and Arcs -.XE -.LP -Xlib provides functions that you can use to draw: -.IP \(bu 5 -A single point or multiple points -.IP \(bu 5 -A single line or multiple lines -.IP \(bu 5 -A single rectangle or multiple rectangles -.IP \(bu 5 -A single arc or multiple arcs -.LP -Some of the functions described in the following sections -use these structures: -.LP -.IN "XSegment" "" "@DEF@" -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - short x1, y1, x2, y2; -} XSegment; -.De -.LP -.eM -.IN "XPoint" "" "@DEF@" -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - short x, y; -} XPoint; -.De -.LP -.eM -.IN "XRectangle" "" "@DEF@" -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - short x, y; - unsigned short width, height; -} XRectangle; -.De -.LP -.eM -.IN "XArc" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - short x, y; - unsigned short width, height; - short angle1, angle2; /* Degrees * 64 */ -} XArc; -.De -.LP -.eM -All x and y members are signed integers. -The width and height members are 16-bit unsigned integers. -You should be careful not to generate coordinates and sizes -out of the 16-bit ranges, because the protocol only has 16-bit fields -for these values. -.NH 3 -Drawing Single and Multiple Points -.XS -\*(SN Drawing Single and Multiple Points -.XE -.LP -.IN "Points" "drawing" -.IN "Drawing" "points" -.IN "XDrawPoints" -.IN "XDrawPoint" -.LP -To draw a single point in a given drawable, use -.PN XDrawPoint . -.IN "XDrawPoint" "" "@DEF@" -.sM -.FD 0 -XDrawPoint\^(\^\fIdisplay\fP, \fId\fP\^, \fIgc\fP\^, \fIx\fP\^, \fIy\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - GC \fIgc\fP\^; -.br - int \fIx\fP\^, \fIy\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fId\fP 1i -Specifies the drawable. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the x and y coordinates where you want the point drawn. -.LP -.eM -.sp -To draw multiple points in a given drawable, use -.PN XDrawPoints . -.IN "XDrawPoints" "" "@DEF@" -.sM -.FD 0 -XDrawPoints\^(\^\fIdisplay\fP, \fId\fP\^, \fIgc\fP\^, \fIpoints\fP\^, \fInpoints\fP\^, \fImode\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - GC \fIgc\fP\^; -.br - XPoint *\fIpoints\fP\^; -.br - int \fInpoints\fP\^; -.br - int \fImode\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fId\fP 1i -Specifies the drawable. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIpoints\fP 1i -Specifies an array of points. -.IP \fInpoints\fP 1i -Specifies the number of points in the array. -.IP \fImode\fP 1i -Specifies the coordinate mode. -You can pass -.PN CoordModeOrigin -or -.PN CoordModePrevious . -.LP -.eM -The -.PN XDrawPoint -function uses the foreground pixel and function components of the -GC to draw a single point into the specified drawable; -.PN XDrawPoints -draws multiple points this way. -.PN CoordModeOrigin -treats all coordinates as relative to the origin, -and -.PN CoordModePrevious -treats all coordinates after the first as relative to the previous point. -.PN XDrawPoints -draws the points in the order listed in the array. -.LP -Both functions use these GC components: function, plane-mask, -foreground, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask. -.LP -.PN XDrawPoint -can generate -.PN BadDrawable , -.PN BadGC , -and -.PN BadMatch -errors. -.PN XDrawPoints -can generate -.PN BadDrawable , -.PN BadGC , -.PN BadMatch , -and -.PN BadValue -errors. -.NH 3 -Drawing Single and Multiple Lines -.XS -\*(SN Drawing Single and Multiple Lines -.XE -.LP -.IN "Lines" "drawing" -.IN "Drawing" "lines" -.IN "XDrawLine" -.IN "XDrawLines" -.IN "Polygons" "drawing" -.IN "Drawing" "polygons" -.IN "XDrawSegments" -.LP -To draw a single line between two points in a given drawable, use -.PN XDrawLine . -.IN "XDrawLine" "" "@DEF@" -.sM -.FD 0 -XDrawLine\^(\^\fIdisplay\fP, \fId\fP\^, \fIgc\fP\^, \fIx1\fP\^, \fIy1\fP\^, \fIx2\fP\^, \fIy2\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - GC \fIgc\fP\^; -.br - int \fIx1\fP\^, \fIy1\fP\^, \fIx2\fP\^, \fIy2\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fId\fP 1i -Specifies the drawable. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIx1\fP 1i -.br -.ns -.IP \fIy1\fP 1i -.br -.ns -.IP \fIx2\fP 1i -.br -.ns -.IP \fIy2\fP 1i -Specify the points (x1, y1) and (x2, y2) to be connected. -.LP -.eM -.sp -To draw multiple lines in a given drawable, use -.PN XDrawLines . -.IN "XDrawLines" "" "@DEF@" -.sM -.FD 0 -XDrawLines\^(\^\fIdisplay\fP, \fId\fP\^, \fIgc\fP\^, \fIpoints\fP\^, \fInpoints\fP\^, \fImode\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - GC \fIgc\fP\^; -.br - XPoint *\fIpoints\fP\^; -.br - int \fInpoints\fP\^; -.br - int \fImode\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fId\fP 1i -Specifies the drawable. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIpoints\fP 1i -Specifies an array of points. -.IP \fInpoints\fP 1i -Specifies the number of points in the array. -.IP \fImode\fP 1i -Specifies the coordinate mode. -You can pass -.PN CoordModeOrigin -or -.PN CoordModePrevious . -.LP -.eM -.sp -To draw multiple, unconnected lines in a given drawable, -use -.PN XDrawSegments . -.IN "XDrawSegments" "" "@DEF@" -.sM -.FD 0 -XDrawSegments\^(\^\fIdisplay\fP, \fId\fP\^, \fIgc\fP\^, \fIsegments\fP\^, \fInsegments\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - GC \fIgc\fP\^; -.br - XSegment *\fIsegments\fP\^; -.br - int \fInsegments\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fId\fP 1i -Specifies the drawable. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIsegments\fP 1i -Specifies an array of segments. -.IP \fInsegments\fP 1i -Specifies the number of segments in the array. -.LP -.eM -The -.PN XDrawLine -function uses the components of the specified GC to -draw a line between the specified set of points (x1, y1) and (x2, y2). -It does not perform joining at coincident endpoints. -For any given line, -.PN XDrawLine -does not draw a pixel more than once. -If lines intersect, the intersecting pixels are drawn multiple times. -.LP -The -.PN XDrawLines -function uses the components of the specified GC to draw -npoints\-1 lines between each pair of points (point[i], point[i+1]) -in the array of -.PN XPoint -structures. -It draws the lines in the order listed in the array. -The lines join correctly at all intermediate points, and if the first and last -points coincide, the first and last lines also join correctly. -For any given line, -.PN XDrawLines -does not draw a pixel more than once. -If thin (zero line-width) lines intersect, -the intersecting pixels are drawn multiple times. -If wide lines intersect, the intersecting pixels are drawn only once, as though -the entire -.PN PolyLine -protocol request were a single, filled shape. -.PN CoordModeOrigin -treats all coordinates as relative to the origin, -and -.PN CoordModePrevious -treats all coordinates after the first as relative to the previous point. -.LP -The -.PN XDrawSegments -function draws multiple, unconnected lines. -For each segment, -.PN XDrawSegments -draws a -line between (x1, y1) and (x2, y2). -It draws the lines in the order listed in the array of -.PN XSegment -structures and does not perform joining at coincident endpoints. -For any given line, -.PN XDrawSegments -does not draw a pixel more than once. -If lines intersect, the intersecting pixels are drawn multiple times. -.LP -All three functions use these GC components: -function, plane-mask, line-width, -line-style, cap-style, fill-style, subwindow-mode, -clip-x-origin, clip-y-origin, and clip-mask. -The -.PN XDrawLines -function also uses the join-style GC component. -All three functions also use these GC mode-dependent components: -foreground, background, tile, stipple, tile-stipple-x-origin, -tile-stipple-y-origin, dash-offset, and dash-list. -.LP -.PN XDrawLine , -.PN XDrawLines , -and -.PN XDrawSegments -can generate -.PN BadDrawable , -.PN BadGC , -and -.PN BadMatch -errors. -.PN XDrawLines -also can generate -.PN BadValue -errors. -.NH 3 -Drawing Single and Multiple Rectangles -.XS -\*(SN Drawing Single and Multiple Rectangles -.XE -.LP -.IN "Rectangles" "drawing" -.IN "Drawing" "rectangles" -.IN "XDrawRectangle" -.IN "XDrawRectangles" -.LP -To draw the outline of a single rectangle in a given drawable, use -.PN XDrawRectangle . -.IN "XDrawRectangle" "" "@DEF@" -.sM -.FD 0 -XDrawRectangle\^(\^\fIdisplay\fP, \fId\fP\^, \fIgc\fP\^, \fIx\fP\^, \fIy\fP\^, \fIwidth\fP\^, \fIheight\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - GC \fIgc\fP\^; -.br - int \fIx\fP\^, \fIy\fP\^; -.br - unsigned int \fIwidth\fP\^, \fIheight\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fId\fP 1i -Specifies the drawable. -.IP \fIgc\fP 1i -Specifies the GC. -.ds Xy , which specify the upper-left corner of the rectangle -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the x and y coordinates\*(Xy. -.ds Wh , which specify the dimensions of the rectangle -.IP \fIwidth\fP 1i -.br -.ns -.IP \fIheight\fP 1i -Specify the width and height\*(Wh. -.LP -.eM -.sp -To draw the outline of multiple rectangles -in a given drawable, use -.PN XDrawRectangles . -.IN "XDrawRectangles" "" "@DEF@" -.sM -.FD 0 -XDrawRectangles\^(\^\fIdisplay\fP, \fId\fP\^, \fIgc\fP\^, \fIrectangles\fP\^, \fInrectangles\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - GC \fIgc\fP\^; -.br - XRectangle \fIrectangles\fP\^[\^]\^; -.br - int \fInrectangles\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fId\fP 1i -Specifies the drawable. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIrectangles\fP 1i -Specifies an array of rectangles. -.IP \fInrectangles\fP 1i -Specifies the number of rectangles in the array. -.LP -.eM -The -.PN XDrawRectangle -and -.PN XDrawRectangles -functions draw the outlines of the specified rectangle or rectangles as -if a five-point -.PN PolyLine -protocol request were specified for each rectangle: -.IP -[x,y] [x+width,y] [x+width,y+height] [x,y+height] [x,y] -.LP -For the specified rectangle or rectangles, -these functions do not draw a pixel more than once. -.PN XDrawRectangles -draws the rectangles in the order listed in the array. -If rectangles intersect, -the intersecting pixels are drawn multiple times. -.LP -Both functions use these GC components: -function, plane-mask, line-width, -line-style, cap-style, join-style, fill-style, -subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask. -They also use these GC mode-dependent components: -foreground, background, tile, stipple, tile-stipple-x-origin, -tile-stipple-y-origin, dash-offset, and dash-list. -.LP -.PN XDrawRectangle -and -.PN XDrawRectangles -can generate -.PN BadDrawable , -.PN BadGC , -and -.PN BadMatch -errors. -.NH 3 -Drawing Single and Multiple Arcs -.XS -\*(SN Drawing Single and Multiple Arcs -.XE -.LP -.IN "Drawing" "arcs" -.IN "XDrawArc" -.IN "Arcs" "drawing" -.IN "XDrawArcs" -.LP -.sp -To draw a single arc in a given drawable, use -.PN XDrawArc . -.IN "XDrawArc" "" "@DEF@" -.sM -.FD 0 -XDrawArc\^(\^\fIdisplay\fP, \fId\fP\^, \fIgc\fP\^, \fIx\fP\^, \fIy\fP\^, \fIwidth\fP\^, \fIheight\fP\^, \fIangle1\fP\^, \fIangle2\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - GC \fIgc\fP\^; -.br - int \fIx\fP\^, \fIy\fP\^; -.br - unsigned int \fIwidth\fP\^, \fIheight\fP\^; -.br - int \fIangle1\fP\^, \fIangle2\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fId\fP 1i -Specifies the drawable. -.IP \fIgc\fP 1i -Specifies the GC. -.ds Xy , which are relative to the origin of the drawable \ -and specify the upper-left corner of the bounding rectangle -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the x and y coordinates\*(Xy. -.ds Wh , which are the major and minor axes of the arc -.IP \fIwidth\fP 1i -.br -.ns -.IP \fIheight\fP 1i -Specify the width and height\*(Wh. -.IP \fIangle1\fP 1i -Specifies the start of the arc relative to the three-o'clock position -from the center, in units of degrees * 64. -.IP \fIangle2\fP 1i -Specifies the path and extent of the arc relative to the start of the -arc, in units of degrees * 64. -.LP -.eM -.sp -To draw multiple arcs in a given drawable, use -.PN XDrawArcs . -.IN "XDrawArcs" "" "@DEF@" -.sM -.FD 0 -XDrawArcs\^(\^\fIdisplay\fP, \fId\fP\^, \fIgc\fP\^, \fIarcs\fP\^, \fInarcs\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - GC \fIgc\fP\^; -.br - XArc *\fIarcs\fP\^; -.br - int \fInarcs\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fId\fP 1i -Specifies the drawable. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIarcs\fP 1i -Specifies an array of arcs. -.IP \fInarcs\fP 1i -Specifies the number of arcs in the array. -.LP -.eM -.EQ -delim %% -.EN -.PN XDrawArc -draws a single circular or elliptical arc, and -.PN XDrawArcs -draws multiple circular or elliptical arcs. -Each arc is specified by a rectangle and two angles. -The center of the circle or ellipse is the center of the -rectangle, and the major and minor axes are specified by the width and height. -Positive angles indicate counterclockwise motion, -and negative angles indicate clockwise motion. -If the magnitude of angle2 is greater than 360 degrees, -.PN XDrawArc -or -.PN XDrawArcs -truncates it to 360 degrees. -.LP -For an arc specified as %[ ~x, ~y, ~width , ~height, ~angle1, ~angle2 ]%, -the origin of the major and minor axes is at -% [ x +^ {width over 2} , ~y +^ {height over 2} ]%, -and the infinitely thin path describing the entire circle or ellipse -intersects the horizontal axis at % [ x, ~y +^ {height over 2} ]% and -% [ x +^ width , ~y +^ { height over 2 }] % -and intersects the vertical axis at % [ x +^ { width over 2 } , ~y ]% and -% [ x +^ { width over 2 }, ~y +^ height ]%. -These coordinates can be fractional -and so are not truncated to discrete coordinates. -The path should be defined by the ideal mathematical path. -For a wide line with line-width lw, -the bounding outlines for filling are given -by the two infinitely thin paths consisting of all points whose perpendicular -distance from the path of the circle/ellipse is equal to lw/2 -(which may be a fractional value). -The cap-style and join-style are applied the same as for a line -corresponding to the tangent of the circle/ellipse at the endpoint. -.LP -For an arc specified as % [ ~x, ~y, ~width, ~height, ~angle1, ~angle2 ]%, -the angles must be specified -in the effectively skewed coordinate system of the ellipse (for a -circle, the angles and coordinate systems are identical). The -relationship between these angles and angles expressed in the normal -coordinate system of the screen (as measured with a protractor) is as -follows: -.LP -.Ds -% roman "skewed-angle" ~ = ~ atan left ( tan ( roman "normal-angle" ) - * width over height right ) +^ adjust% -.De -.LP -The skewed-angle and normal-angle are expressed in radians (rather -than in degrees scaled by 64) in the range % [ 0 , ~2 pi ]% and where atan -returns a value in the range % [ - pi over 2 , ~pi over 2 ] % -and adjust is: -.LP -.Ds -.TA 1i 2i -.ta 1i 2i -%0% for normal-angle in the range % [ 0 , ~pi over 2 ]% -%pi% for normal-angle in the range % [ pi over 2 , ~{3 pi} over 2 ]% -%2 pi% for normal-angle in the range % [ {3 pi} over 2 , ~2 pi ]% -.De -.LP -For any given arc, -.PN XDrawArc -and -.PN XDrawArcs -do not draw a pixel more than once. -If two arcs join correctly and if the line-width is greater than zero -and the arcs intersect, -.PN XDrawArc -and -.PN XDrawArcs -do not draw a pixel more than once. -Otherwise, -the intersecting pixels of intersecting arcs are drawn multiple times. -Specifying an arc with one endpoint and a clockwise extent draws the same pixels -as specifying the other endpoint and an equivalent counterclockwise extent, -except as it affects joins. -.LP -If the last point in one arc coincides with the first point in the following -arc, the two arcs will join correctly. -If the first point in the first arc coincides with the last point in the last -arc, the two arcs will join correctly. -By specifying one axis to be zero, a horizontal or vertical line can be -drawn. -Angles are computed based solely on the coordinate system and ignore the -aspect ratio. -.LP -Both functions use these GC components: -function, plane-mask, line-width, line-style, cap-style, join-style, -fill-style, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask. -They also use these GC mode-dependent components: -foreground, background, tile, stipple, tile-stipple-x-origin, -tile-stipple-y-origin, dash-offset, and dash-list. -.LP -.PN XDrawArc -and -.PN XDrawArcs -can generate -.PN BadDrawable , -.PN BadGC , -and -.PN BadMatch -errors. -.NH 2 -Filling Areas -.XS -\*(SN Filling Areas -.XE -.LP -Xlib provides functions that you can use to fill: -.IP \(bu 5 -A single rectangle or multiple rectangles -.IP \(bu 5 -A single polygon -.IP \(bu 5 -A single arc or multiple arcs -.NH 3 -Filling Single and Multiple Rectangles -.XS -\*(SN Filling Single and Multiple Rectangles -.XE -.LP -.IN "Filling" "rectangles" -.IN "XFillRectangle" -.IN "Rectangle" "filling" -.IN "XFillRectangles" -.LP -.sp -To fill a single rectangular area in a given drawable, use -.PN XFillRectangle . -.IN "XFillRectangle" "" "@DEF@" -.sM -.FD 0 -XFillRectangle\^(\^\fIdisplay\fP, \fId\fP\^, \fIgc\fP\^, \fIx\fP\^, \fIy\fP\^, \fIwidth\fP\^, \fIheight\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - GC \fIgc\fP\^; -.br - int \fIx\fP\^, \fIy\fP\^; -.br - unsigned int \fIwidth\fP\^, \fIheight\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fId\fP 1i -Specifies the drawable. -.IP \fIgc\fP 1i -Specifies the GC. -.ds Xy , which are relative to the origin of the drawable \ -and specify the upper-left corner of the rectangle -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the x and y coordinates\*(Xy. -.ds Wh , which are the dimensions of the rectangle to be filled -.IP \fIwidth\fP 1i -.br -.ns -.IP \fIheight\fP 1i -Specify the width and height\*(Wh. -.LP -.eM -.sp -To fill multiple rectangular areas in a given drawable, use -.PN XFillRectangles . -.IN "XFillRectangles" "" "@DEF@" -.sM -.FD 0 -XFillRectangles\^(\^\fIdisplay\fP, \fId\fP\^, \fIgc\fP\^, \fIrectangles\fP\^, \fInrectangles\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - GC \fIgc\fP\^; -.br - XRectangle *\fIrectangles\fP\^; -.br - int \fInrectangles\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fId\fP 1i -Specifies the drawable. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIrectangles\fP 1i -Specifies an array of rectangles. -.IP \fInrectangles\fP 1i -Specifies the number of rectangles in the array. -.LP -.eM -The -.PN XFillRectangle -and -.PN XFillRectangles -functions fill the specified rectangle or rectangles -as if a four-point -.PN FillPolygon -protocol request were specified for each rectangle: -.LP -.Ds -[x,y] [x+width,y] [x+width,y+height] [x,y+height] -.De -.LP -Each function uses the x and y coordinates, -width and height dimensions, and GC you specify. -.LP -.PN XFillRectangles -fills the rectangles in the order listed in the array. -For any given rectangle, -.PN XFillRectangle -and -.PN XFillRectangles -do not draw a pixel more than once. -If rectangles intersect, the intersecting pixels are -drawn multiple times. -.LP -Both functions use these GC components: -function, plane-mask, fill-style, subwindow-mode, -clip-x-origin, clip-y-origin, and clip-mask. -They also use these GC mode-dependent components: -foreground, background, tile, stipple, tile-stipple-x-origin, -and tile-stipple-y-origin. -.LP -.PN XFillRectangle -and -.PN XFillRectangles -can generate -.PN BadDrawable , -.PN BadGC , -and -.PN BadMatch -errors. -.NH 3 -Filling a Single Polygon -.XS -\*(SN Filling a Single Polygon -.XE -.LP -.sp -To fill a polygon area in a given drawable, use -.PN XFillPolygon . -.IN "Polygons" "filling" -.IN "Filling" "polygon" -.IN "XFillPolygon" "" "@DEF@" -.sM -.FD 0 -XFillPolygon\^(\^\fIdisplay\fP, \fId\fP\^, \fIgc\fP\^, \fIpoints\fP\^, \fInpoints\fP\^, \fIshape\fP\^, \fImode\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - GC \fIgc\fP\^; -.br - XPoint *\fIpoints\fP\^; -.br - int \fInpoints\fP\^; -.br - int \fIshape\fP\^; -.br - int \fImode\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fId\fP 1i -Specifies the drawable. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIpoints\fP 1i -Specifies an array of points. -.IP \fInpoints\fP 1i -Specifies the number of points in the array. -.IP \fIshape\fP 1i -Specifies a shape that helps the server to improve performance. -You can pass -.PN Complex , -.PN Convex , -or -.PN Nonconvex . -.IP \fImode\fP 1i -Specifies the coordinate mode. -You can pass -.PN CoordModeOrigin -or -.PN CoordModePrevious . -.LP -.eM -.PN XFillPolygon -fills the region closed by the specified path. -The path is closed -automatically if the last point in the list does not coincide with the -first point. -.PN XFillPolygon -does not draw a pixel of the region more than once. -.PN CoordModeOrigin -treats all coordinates as relative to the origin, -and -.PN CoordModePrevious -treats all coordinates after the first as relative to the previous point. -.LP -Depending on the specified shape, the following occurs: -.IP \(bu 5 -If shape is -.PN Complex , -the path may self-intersect. -Note that contiguous coincident points in the path are not treated -as self-intersection. -.IP \(bu 5 -If shape is -.PN Convex , -for every pair of points inside the polygon, -the line segment connecting them does not intersect the path. -If known by the client, -specifying -.PN Convex -can improve performance. -If you specify -.PN Convex -for a path that is not convex, -the graphics results are undefined. -.IP \(bu 5 -If shape is -.PN Nonconvex , -the path does not self-intersect, but the shape is not -wholly convex. -If known by the client, -specifying -.PN Nonconvex -instead of -.PN Complex -may improve performance. -If you specify -.PN Nonconvex -for a self-intersecting path, the graphics results are undefined. -.LP -The fill-rule of the GC controls the filling behavior of -self-intersecting polygons. -.LP -This function uses these GC components: -function, plane-mask, fill-style, fill-rule, subwindow-mode, clip-x-origin, -clip-y-origin, and clip-mask. -It also uses these GC mode-dependent components: -foreground, background, tile, stipple, tile-stipple-x-origin, -and tile-stipple-y-origin. -.LP -.PN XFillPolygon -can generate -.PN BadDrawable , -.PN BadGC , -.PN BadMatch , -and -.PN BadValue -errors. -.NH 3 -Filling Single and Multiple Arcs -.XS -\*(SN Filling Single and Multiple Arcs -.XE -.LP -.IN "XFillArc" -.IN "Arcs" "filling" -.IN "Filling" "arcs" -To fill a single arc in a given drawable, use -.PN XFillArc . -.IN "XFillArc" "" "@DEF@" -.sM -.FD 0 -XFillArc\^(\^\fIdisplay\fP, \fId\fP\^, \fIgc\fP\^, \fIx\fP\^, \fIy\fP\^, \fIwidth\fP\^, \fIheight\fP\^, \fIangle1\fP\^, \fIangle2\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - GC \fIgc\fP\^; -.br - int \fIx\fP\^, \fIy\fP\^; -.br - unsigned int \fIwidth\fP\^, \fIheight\fP\^; -.br - int \fIangle1\fP\^, \fIangle2\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fId\fP 1i -Specifies the drawable. -.IP \fIgc\fP 1i -Specifies the GC. -.ds Xy , which are relative to the origin of the drawable \ -and specify the upper-left corner of the bounding rectangle -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the x and y coordinates\*(Xy. -.ds Wh , which are the major and minor axes of the arc -.IP \fIwidth\fP 1i -.br -.ns -.IP \fIheight\fP 1i -Specify the width and height\*(Wh. -.IP \fIangle1\fP 1i -Specifies the start of the arc relative to the three-o'clock position -from the center, in units of degrees * 64. -.IP \fIangle2\fP 1i -Specifies the path and extent of the arc relative to the start of the -arc, in units of degrees * 64. -.LP -.eM -.sp -To fill multiple arcs in a given drawable, use -.PN XFillArcs . -.IN "XFillArcs" "" "@DEF@" -.sM -.FD 0 -XFillArcs\^(\^\fIdisplay\fP, \fId\fP\^, \fIgc\fP\^, \fIarcs\fP\^, \fInarcs\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - GC \fIgc\fP\^; -.br - XArc *\fIarcs\fP\^; -.br - int \fInarcs\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fId\fP 1i -Specifies the drawable. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIarcs\fP 1i -Specifies an array of arcs. -.IP \fInarcs\fP 1i -Specifies the number of arcs in the array. -.LP -.eM -For each arc, -.PN XFillArc -or -.PN XFillArcs -fills the region closed by the infinitely thin path -described by the specified arc and, depending on the -arc-mode specified in the GC, one or two line segments. -For -.PN ArcChord , -the single line segment joining the endpoints of the arc is used. -For -.PN ArcPieSlice , -the two line segments joining the endpoints of the arc with the center -point are used. -.PN XFillArcs -fills the arcs in the order listed in the array. -For any given arc, -.PN XFillArc -and -.PN XFillArcs -do not draw a pixel more than once. -If regions intersect, -the intersecting pixels are drawn multiple times. -.LP -Both functions use these GC components: -function, plane-mask, fill-style, arc-mode, subwindow-mode, clip-x-origin, -clip-y-origin, and clip-mask. -They also use these GC mode-dependent components: -foreground, background, tile, stipple, tile-stipple-x-origin, -and tile-stipple-y-origin. -.LP -.PN XFillArc -and -.PN XFillArcs -can generate -.PN BadDrawable , -.PN BadGC , -and -.PN BadMatch -errors. -.NH 2 -Font Metrics -.XS -\*(SN Font Metrics -.XE -.LP -.IN "Font" -A font is a graphical description of a set of characters that are used to -increase efficiency whenever a set of small, similar sized patterns are -repeatedly used. -.LP -This section discusses how to: -.IP \(bu 5 -Load and free fonts -.IP \(bu 5 -Obtain and free font names -.IP \(bu 5 -Compute character string sizes -.IP \(bu 5 -Compute logical extents -.IP \(bu 5 -Query character string sizes -.LP -The X server loads fonts whenever a program requests a new font. -The server can cache fonts for quick lookup. -Fonts are global across all screens in a server. -Several levels are possible when dealing with fonts. -Most applications simply use -.PN XLoadQueryFont -to load a font and query the font metrics. -.LP -Characters in fonts are regarded as masks. -Except for image text requests, -the only pixels modified are those in which bits are set to 1 in the character. -This means that it makes sense to draw text using stipples or tiles -(for example, many menus gray-out unusable entries). -.LP -.sM -The -.PN XFontStruct -structure contains all of the information for the font -and consists of the font-specific information as well as -a pointer to an array of -.PN XCharStruct -structures for the -characters contained in the font. -The -.PN XFontStruct , -.PN XFontProp , -and -.PN XCharStruct -structures contain: -.LP -.IN "XCharStruct" "" "@DEF@" -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - short lbearing; /* origin to left edge of raster */ - short rbearing; /* origin to right edge of raster */ - short width; /* advance to next char's origin */ - short ascent; /* baseline to top edge of raster */ - short descent; /* baseline to bottom edge of raster */ - unsigned short attributes; /* per char flags (not predefined) */ -} XCharStruct; -.De -.LP -.IN "XFontProp" "" "@DEF@" -.Ds 0 -.TA .5i 1i 3i -.ta .5i 1i 3i -typedef struct { - Atom name; - unsigned long card32; -} XFontProp; -.De -.LP -.IN "XChar2b" "" "@DEF@" -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { /* normal 16 bit characters are two bytes */ - unsigned char byte1; - unsigned char byte2; -} XChar2b; -.De -.LP -.IN "XFontStruct" "" "@DEF@" -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - XExtData *ext_data; /* hook for extension to hang data */ - Font fid; /* Font id for this font */ - unsigned direction; /* hint about the direction font is painted */ - unsigned min_char_or_byte2; /* first character */ - unsigned max_char_or_byte2; /* last character */ - unsigned min_byte1; /* first row that exists */ - unsigned max_byte1; /* last row that exists */ - Bool all_chars_exist; /* flag if all characters have nonzero size */ - unsigned default_char; /* char to print for undefined character */ - int n_properties; /* how many properties there are */ - XFontProp *properties; /* pointer to array of additional properties */ - XCharStruct min_bounds; /* minimum bounds over all existing char */ - XCharStruct max_bounds; /* maximum bounds over all existing char */ - XCharStruct *per_char; /* first_char to last_char information */ - int ascent; /* logical extent above baseline for spacing */ - int descent; /* logical descent below baseline for spacing */ -} XFontStruct; -.De -.LP -.eM -X supports single byte/character, two bytes/character matrix, -and 16-bit character text operations. -Note that any of these forms can be used with a font, but a -single byte/character text request can only specify a single byte -(that is, the first row of a 2-byte font). -You should view 2-byte fonts as a two-dimensional matrix of defined -characters: byte1 specifies the range of defined rows and -byte2 defines the range of defined columns of the font. -Single byte/character fonts have one row defined, and the byte2 range -specified in the structure defines a range of characters. -.LP -The bounding box of a character is defined by the -.PN XCharStruct -of that character. -When characters are absent from a font, -the default_char is used. -When fonts have all characters of the same size, -only the information in the -.PN XFontStruct -min and max bounds are used. -.LP -The members of the -.PN XFontStruct -have the following semantics: -.IP \(bu 5 -The direction member can be either -.PN FontLeftToRight -or -.PN FontRightToLeft . -It is just a hint as to whether most -.PN XCharStruct -elements -have a positive -.Pn ( FontLeftToRight ) -or a negative -.Pn ( FontRightToLeft ) -character width -metric. -The core protocol defines no support for vertical text. -.IP \(bu 5 -If the min_byte1 and max_byte1 members are both zero, min_char_or_byte2 -specifies the linear character index corresponding to the first element -of the per_char array, and max_char_or_byte2 specifies the linear character -index of the last element. -.IP -If either min_byte1 or max_byte1 are nonzero, both -min_char_or_byte2 and max_char_or_byte2 are less than 256, -and the 2-byte character index values corresponding to the -per_char array element N (counting from 0) are: -.IP -.nf - byte1 = N/D + min_byte1 -.br - byte2 = N\\D + min_char_or_byte2 -.IP -.fi -where: -.IP -.nf - D = max_char_or_byte2 \- min_char_or_byte2 + 1 - / = integer division - \\ = integer modulus -.fi -.IP \(bu 5 -If the per_char pointer is NULL, -all glyphs between the first and last character indexes -inclusive have the same information, -as given by both min_bounds and max_bounds. -.IP \(bu 5 -If all_chars_exist is -.PN True , -all characters in the per_char array have nonzero bounding boxes. -.IP \(bu 5 -The default_char member specifies the character that will be used when an -undefined or nonexistent character is printed. -The default_char is a 16-bit character (not a 2-byte character). -For a font using 2-byte matrix format, -the default_char has byte1 in the most-significant byte -and byte2 in the least significant byte. -If the default_char itself specifies an undefined or nonexistent character, -no printing is performed for an undefined or nonexistent character. -.IP \(bu 5 -The min_bounds and max_bounds members contain the most extreme values of -each individual -.PN XCharStruct -component over all elements of this array -(and ignore nonexistent characters). -The bounding box of the font (the smallest -rectangle enclosing the shape obtained by superimposing all of the -characters at the same origin [x,y]) has its upper-left coordinate at: -.Ds - [x + min_bounds.lbearing, y \- max_bounds.ascent] -.De -.IP -Its width is: -.Ds - max_bounds.rbearing \- min_bounds.lbearing -.De -.IP -Its height is: -.Ds - max_bounds.ascent + max_bounds.descent -.De -.IP \(bu 5 -The ascent member is the logical extent of the font above the baseline that is -used for determining line spacing. -Specific characters may extend beyond -this. -.IP \(bu 5 -The descent member is the logical extent of the font at or below the -baseline that is used for determining line spacing. -Specific characters may extend beyond this. -.IP \(bu 5 -If the baseline is at Y-coordinate y, -the logical extent of the font is inclusive between the Y-coordinate -values (y \- font.ascent) and (y + font.descent \- 1). -Typically, -the minimum interline spacing between rows of text is given -by ascent + descent. -.LP -For a character origin at [x,y], -the bounding box of a character (that is, -the smallest rectangle that encloses the character's shape) -described in terms of -.PN XCharStruct -components is a rectangle with its upper-left corner at: -.LP -.Ds -[x + lbearing, y \- ascent] -.De -.LP -Its width is: -.LP -.Ds -rbearing \- lbearing -.De -.LP -Its height is: -.LP -.Ds -ascent + descent -.De -.LP -The origin for the next character is defined to be: -.LP -.Ds -[x + width, y] -.De -.LP -The lbearing member defines the extent of the left edge of the character ink -from the origin. -The rbearing member defines the extent of the right edge of the character ink -from the origin. -The ascent member defines the extent of the top edge of the character ink -from the origin. -The descent member defines the extent of the bottom edge of the character ink -from the origin. -The width member defines the logical width of the character. -.LP -Note that the baseline (the y position of the character origin) -is logically viewed as being the scanline just below nondescending characters. -When descent is zero, -only pixels with Y-coordinates less than y are drawn, -and the origin is logically viewed as being coincident with the left edge of -a nonkerned character. -When lbearing is zero, -no pixels with X-coordinate less than x are drawn. -Any of the -.PN XCharStruct -metric members could be negative. -If the width is negative, -the next character will be placed to the left of the current origin. -.LP -The X protocol does not define the interpretation of the attributes member -in the -.PN XCharStruct -structure. -A nonexistent character is represented with all members of its -.PN XCharStruct -set to zero. -.LP -A font is not guaranteed to have any properties. -The interpretation of the property value (for example, long or unsigned long) -must be derived from \fIa priori\fP knowledge of the property. -A basic set of font properties is specified in the X Consortium standard -\fIX Logical Font Description Conventions\fP. -.NH 3 -Loading and Freeing Fonts -.XS -\*(SN Loading and Freeing Fonts -.XE -.LP -Xlib provides functions that you can use to load fonts, get font information, -unload fonts, and free font information. -.IN "Fonts" "getting information" -.IN "Fonts" "unloading" -.IN "Fonts" "freeing font information" -A few font functions use a -.PN GContext -resource ID or a font ID interchangeably. -.LP -.sp -To load a given font, use -.PN XLoadFont . -.IN "XLoadFont" "" "@DEF@" -.sM -.FD 0 -Font XLoadFont\^(\^\fIdisplay\fP, \fIname\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - char *\fIname\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIname\fP 1i -Specifies the name of the font, -which is a null-terminated string. -.LP -.eM -The -.PN XLoadFont -function loads the specified font and returns its associated font ID. -If the font name is not in the Host Portable Character Encoding, -the result is implementation-dependent. -Use of uppercase or lowercase does not matter. -When the characters ``?'' and ``*'' are used in a font name, a -pattern match is performed and any matching font is used. -In the pattern, -the ``?'' character will match any single character, -and the ``*'' character will match any number of characters. -A structured format for font names is specified in the X Consortium standard -\fIX Logical Font Description Conventions\fP. -If -.PN XLoadFont -was unsuccessful at loading the specified font, -a -.PN BadName -error results. -Fonts are not associated with a particular screen -and can be stored as a component -of any GC. -When the font is no longer needed, call -.PN XUnloadFont . -.LP -.PN XLoadFont -can generate -.PN BadAlloc -and -.PN BadName -errors. -.LP -.sp -To return information about an available font, use -.PN XQueryFont . -.IN "XQueryFont" "" "@DEF@" -.sM -.FD 0 -XFontStruct *XQueryFont\^(\^\fIdisplay\fP, \fIfont_ID\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XID \fIfont_ID\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIfont_ID\fP 1i -Specifies the font ID or the -.PN GContext -ID. -.LP -.eM -The -.PN XQueryFont -function returns a pointer to the -.PN XFontStruct -structure, which contains information associated with the font. -You can query a font or the font stored in a GC. -The font ID stored in the -.PN XFontStruct -structure will be the -.PN GContext -ID, and you need to be careful when using this ID in other functions -(see -.PN XGContextFromGC ). -If the font does not exist, -.PN XQueryFont -returns NULL. -To free this data, use -.PN XFreeFontInfo . -.LP -.sp -To perform a -.PN XLoadFont -and -.PN XQueryFont -in a single operation, use -.PN XLoadQueryFont . -.IN "XLoadQueryFont" "" "@DEF@" -.sM -.FD 0 -XFontStruct *XLoadQueryFont\^(\^\fIdisplay\fP, \fIname\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - char *\fIname\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIname\fP 1i -Specifies the name of the font, -which is a null-terminated string. -.LP -.eM -The -.PN XLoadQueryFont -function provides the most common way for accessing a font. -.PN XLoadQueryFont -both opens (loads) the specified font and returns a pointer to the -appropriate -.PN XFontStruct -structure. -If the font name is not in the Host Portable Character Encoding, -the result is implementation-dependent. -If the font does not exist, -.PN XLoadQueryFont -returns NULL. -.LP -.PN XLoadQueryFont -can generate a -.PN BadAlloc -error. -.LP -.sp -To unload the font and free the storage used by the font structure -that was allocated by -.PN XQueryFont -or -.PN XLoadQueryFont , -use -.PN XFreeFont . -.IN "XFreeFont" "" "@DEF@" -.sM -.FD 0 -XFreeFont\^(\^\fIdisplay\fP, \fIfont_struct\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XFontStruct *\fIfont_struct\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIfont_struct\fP 1i -Specifies the storage associated with the font. -.LP -.eM -The -.PN XFreeFont -function deletes the association between the font resource ID and the specified -font and frees the -.PN XFontStruct -structure. -The font itself will be freed when no other resource references it. -The data and the font should not be referenced again. -.LP -.PN XFreeFont -can generate a -.PN BadFont -error. -.LP -.sp -To return a given font property, use -.PN XGetFontProperty . -.IN "XGetFontProperty" "" "@DEF@" -.sM -.FD 0 -Bool XGetFontProperty\^(\^\fIfont_struct\fP\^, \^\fIatom\fP\^, \^\fIvalue_return\fP\^) -.br - XFontStruct *\fIfont_struct\fP\^; -.br - Atom \fIatom\fP\^; -.br - unsigned long *\fIvalue_return\fP\^; -.FN -.IP \fIfont_struct\fP 1i -Specifies the storage associated with the font. -.IP \fIatom\fP 1i -Specifies the atom for the property name you want returned. -.IP \fIvalue_return\fP 1i -Returns the value of the font property. -.LP -.eM -Given the atom for that property, -the -.PN XGetFontProperty -function returns the value of the specified font property. -.PN XGetFontProperty -also returns -.PN False -if the property was not defined or -.PN True -if it was defined. -A set of predefined atoms exists for font properties, -which can be found in -.hN X11/Xatom.h . -This set contains the standard properties associated with -a font. -Although it is not guaranteed, -it is likely that the predefined font properties will be present. -.LP -.sp -To unload a font that was loaded by -.PN XLoadFont , -use -.PN XUnloadFont . -.IN "XUnloadFont" "" "@DEF@" -.sM -.FD 0 -XUnloadFont\^(\^\fIdisplay\fP, \fIfont\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Font \fIfont\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIfont\fP 1i -Specifies the font. -.LP -.eM -The -.PN XUnloadFont -function deletes the association between the font resource ID and the specified font. -The font itself will be freed when no other resource references it. -The font should not be referenced again. -.LP -.PN XUnloadFont -can generate a -.PN BadFont -error. -.NH 3 -Obtaining and Freeing Font Names and Information -.XS -\*(SN Obtaining and Freeing Font Names and Information -.XE -.LP -You obtain font names and information by matching a wildcard specification -when querying a font type for a list of available sizes and so on. -.LP -.sp -To return a list of the available font names, use -.PN XListFonts . -.IN "XListFonts" "" "@DEF@" -.sM -.FD 0 -char **XListFonts\^(\^\fIdisplay\fP, \fIpattern\fP\^, \fImaxnames\fP, \fIactual_count_return\fP\^) -.br - Display *\^\fIdisplay\fP\^; -.br - char *\^\fIpattern\fP\^; -.br - int \fImaxnames\fP\^; -.br - int *\^\fIactual_count_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIpattern\fP 1i -Specifies the null-terminated pattern string that can contain wildcard -characters. -.IP \fImaxnames\fP 1i -Specifies the maximum number of names to be returned. -.IP \fIactual_count_return\fP 1i -Returns the actual number of font names. -.LP -.eM -The -.PN XListFonts -function returns an array of available font names -(as controlled by the font search path; see -.PN XSetFontPath ) -that match the string you passed to the pattern argument. -The pattern string can contain any characters, -but each asterisk (*) is a wildcard for any number of characters, -and each question mark (?) is a wildcard for a single character. -If the pattern string is not in the Host Portable Character Encoding, -the result is implementation-dependent. -Use of uppercase or lowercase does not matter. -Each returned string is null-terminated. -If the data returned by the server is in the Latin Portable Character Encoding, -then the returned strings are in the Host Portable Character Encoding. -Otherwise, the result is implementation-dependent. -If there are no matching font names, -.PN XListFonts -returns NULL. -The client should call -.PN XFreeFontNames -when finished with the result to free the memory. -.LP -.sp -To free a font name array, use -.PN XFreeFontNames . -.IN "XFreeFontNames" "" "@DEF@" -.sM -.FD 0 -XFreeFontNames\^(\^\fIlist\fP\^) -.br - char *\fIlist\fP\^[\^]\^; -.FN -.IP \fIlist\fP 1i -Specifies the array of strings you want to free. -.LP -.eM -The -.PN XFreeFontNames -function frees the array and strings returned by -.PN XListFonts -or -.PN XListFontsWithInfo . -.LP -.sp -To obtain the names and information about available fonts, use -.PN XListFontsWithInfo . -.IN "XListFontsWithInfo" "" "@DEF@" -.sM -.FD 0 -char **XListFontsWithInfo\^(\^\fIdisplay\fP, \fIpattern\fP, \fImaxnames\fP, \fIcount_return\fP, \fIinfo_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - char *\fIpattern\fP\^; -.br - int \fImaxnames\fP\^; -.br - int *\fIcount_return\fP\^; -.br - XFontStruct **\fIinfo_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIpattern\fP 1i -Specifies the null-terminated pattern string that can contain wildcard -characters. -.IP \fImaxnames\fP 1i -Specifies the maximum number of names to be returned. -.IP \fIcount_return\fP 1i -Returns the actual number of matched font names. -.IP \fIinfo_return\fP 1i -Returns the font information. -.LP -.eM -The -.PN XListFontsWithInfo -function returns a list of font names that match the specified pattern and their -associated font information. -The list of names is limited to size specified by maxnames. -The information returned for each font is identical to what -.PN XLoadQueryFont -would return except that the per-character metrics are not returned. -The pattern string can contain any characters, -but each asterisk (*) is a wildcard for any number of characters, -and each question mark (?) is a wildcard for a single character. -If the pattern string is not in the Host Portable Character Encoding, -the result is implementation-dependent. -Use of uppercase or lowercase does not matter. -Each returned string is null-terminated. -If the data returned by the server is in the Latin Portable Character Encoding, -then the returned strings are in the Host Portable Character Encoding. -Otherwise, the result is implementation-dependent. -If there are no matching font names, -.PN XListFontsWithInfo -returns NULL. -.LP -To free only the allocated name array, -the client should call -.PN XFreeFontNames . -To free both the name array and the font information array -or to free just the font information array, -the client should call -.PN XFreeFontInfo . -.LP -.sp -To free font structures and font names, use -.PN XFreeFontInfo . -.IN "XFreeFontInfo" "" "@DEF@" -.sM -.FD 0 -XFreeFontInfo(\^\fInames\fP, \fIfree_info\fP, \fIactual_count\fP\^) -.br - char **\fInames\fP\^; -.br - XFontStruct *\fIfree_info\fP; -.br - int \fIactual_count\fP\^; -.FN -.IP \fInames\fP 1i -Specifies the list of font names. - -.IP \fIfree_info\fP 1i -Specifies the font information. - -.IP \fIactual_count\fP 1i -Specifies the actual number of font names. - -.LP -.eM -The -.PN XFreeFontInfo -function frees a font structure or an array of font structures -and optionally an array of font names. -If NULL is passed for names, no font names are freed. -If a font structure for an open font (returned by -.PN XLoadQueryFont ) -is passed, the structure is freed, -but the font is not closed; use -.PN XUnloadFont -to close the font. -.NH 3 -Computing Character String Sizes -.XS -\*(SN Computing Character String Sizes -.XE -.LP -Xlib provides functions that you can use to compute the width, -the logical extents, -and the server information about 8-bit and 2-byte text strings. -.IN "XTextWidth" -.IN "XTextWidth16" -The width is computed by adding the character widths of all the characters. -It does not matter if the font is an 8-bit or 2-byte font. -These functions return the sum of the character metrics in pixels. -.LP -.sp -To determine the width of an 8-bit character string, use -.PN XTextWidth . -.IN "XTextWidth" "" "@DEF@" -.sM -.FD 0 -int XTextWidth\^(\^\fIfont_struct\fP\^, \fIstring\fP, \fIcount\fP\^) -.br - XFontStruct *\fIfont_struct\fP\^; -.br - char *\fIstring\fP\^; -.br - int \fIcount\fP\^; -.FN -.IP \fIfont_struct\fP 1i -Specifies the font used for the width computation. -.IP \fIstring\fP 1i -Specifies the character string. -.IP \fIcount\fP 1i -Specifies the character count in the specified string. -.LP -.eM -.sp -To determine the width of a 2-byte character string, use -.PN XTextWidth16 . -.IN "XTextWidth16" "" "@DEF@" -.sM -.FD 0 -int XTextWidth16\^(\^\fIfont_struct\fP\^, \fIstring\fP, \fIcount\fP\^) -.br - XFontStruct *\fIfont_struct\fP\^; -.br - XChar2b *\fIstring\fP\^; -.br - int \fIcount\fP\^; -.FN -.IP \fIfont_struct\fP 1i -Specifies the font used for the width computation. -.IP \fIstring\fP 1i -Specifies the character string. -.IP \fIcount\fP 1i -Specifies the character count in the specified string. -.LP -.eM -.NH 3 -Computing Logical Extents -.XS -\*(SN Computing Logical Extents -.XE -.LP -To compute the bounding box of an 8-bit character string in a given font, use -.PN XTextExtents . -.IN "XTextExtents" "" "@DEF@" -.sM -.FD 0 -XTextExtents\^(\^\fIfont_struct\fP\^, \fIstring\fP\^, \fInchars\fP\^, \ -\fIdirection_return\fP, \fIfont_ascent_return\fP, -.br - \fIfont_descent_return\fP, \fIoverall_return\fP\^) -.br - XFontStruct *\fIfont_struct\fP\^; -.br - char *\fIstring\fP\^; -.br - int \fInchars\fP\^; -.br - int *\fIdirection_return\fP\^; -.br - int *\fIfont_ascent_return\fP, *\fIfont_descent_return\fP\^; -.br - XCharStruct *\fIoverall_return\fP\^; - -.FN -.IP \fIfont_struct\fP 1i -Specifies the -.PN XFontStruct -structure. -.IP \fIstring\fP 1i -Specifies the character string. -.IP \fInchars\fP 1i -Specifies the number of characters in the character string. -.IP \fIdirection_return\fP 1i -Returns the value of the direction hint -.Pn ( FontLeftToRight -or -.PN FontRightToLeft ). -.IP \fIfont_ascent_return\fP 1i -Returns the font ascent. -.IP \fIfont_descent_return\fP 1i -Returns the font descent. -.IP \fIoverall_return\fP 1i -Returns the overall size in the specified -.PN XCharStruct -structure. -.LP -.eM -.sp -To compute the bounding box of a 2-byte character string in a given font, use -.PN XTextExtents16 . -.IN "XTextExtents16" "" "@DEF@" -.sM -.FD 0 -XTextExtents16\^(\^\fIfont_struct\fP\^, \fIstring\fP\^, \fInchars\fP\^, \ -\fIdirection_return\fP, \fIfont_ascent_return\fP, -.br - \fIfont_descent_return\fP, \fIoverall_return\fP\^) -.br - XFontStruct *\fIfont_struct\fP\^; -.br - XChar2b *\fIstring\fP\^; -.br - int \fInchars\fP\^; -.br - int *\fIdirection_return\fP\^; -.br - int *\fIfont_ascent_return\fP, *\fIfont_descent_return\fP\^; -.br - XCharStruct *\fIoverall_return\fP\^; - -.FN -.IP \fIfont_struct\fP 1i -Specifies the -.PN XFontStruct -structure. -.IP \fIstring\fP 1i -Specifies the character string. -.IP \fInchars\fP 1i -Specifies the number of characters in the character string. -.IP \fIdirection_return\fP 1i -Returns the value of the direction hint -.Pn ( FontLeftToRight -or -.PN FontRightToLeft ). -.IP \fIfont_ascent_return\fP 1i -Returns the font ascent. -.IP \fIfont_descent_return\fP 1i -Returns the font descent. -.IP \fIoverall_return\fP 1i -Returns the overall size in the specified -.PN XCharStruct -structure. -.LP -.eM -The -.PN XTextExtents -and -.PN XTextExtents16 -functions -perform the size computation locally and, thereby, -avoid the round-trip overhead of -.PN XQueryTextExtents -and -.PN XQueryTextExtents16 . -Both functions return an -.PN XCharStruct -structure, whose members are set to the values as follows. -.LP -The ascent member is set to the maximum of the ascent metrics of all -characters in the string. -The descent member is set to the maximum of the descent metrics. -The width member is set to the sum of the character-width metrics of all -characters in the string. -For each character in the string, -let W be the sum of the character-width metrics of all characters preceding -it in the string. -Let L be the left-side-bearing metric of the character plus W. -Let R be the right-side-bearing metric of the character plus W. -The lbearing member is set to the minimum L of all characters in the string. -The rbearing member is set to the maximum R. -.LP -For fonts defined with linear indexing rather than 2-byte matrix indexing, -each -.PN XChar2b -structure is interpreted as a 16-bit number with byte1 as the -most significant byte. -If the font has no defined default character, -undefined characters in the string are taken to have all zero metrics. -.NH 3 -Querying Character String Sizes -.XS -\*(SN Querying Character String Sizes -.XE -.LP -To query the server for the bounding box of an 8-bit character string in a -given font, use -.PN XQueryTextExtents . -.IN "XQueryTextExtents" "" "@DEF@" -.sM -.FD 0 -XQueryTextExtents\^(\^\fIdisplay\fP, \fIfont_ID\fP, \fIstring\fP, \ -\fInchars\fP, \fIdirection_return\fP, \fIfont_ascent_return\fP, -.br - \fIfont_descent_return\fP, \fIoverall_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XID \fIfont_ID\fP\^; -.br - char *\fIstring\fP\^; -.br - int \fInchars\fP\^; -.br - int *\fIdirection_return\fP\^; -.br - int *\fIfont_ascent_return\fP, *\fIfont_descent_return\fP\^; -.br - XCharStruct *\fIoverall_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIfont_ID\fP 1i -Specifies either the font ID or the -.PN GContext -ID that contains the font. -.IP \fIstring\fP 1i -Specifies the character string. -.IP \fInchars\fP 1i -Specifies the number of characters in the character string. -.IP \fIdirection_return\fP 1i -Returns the value of the direction hint -.Pn ( FontLeftToRight -or -.PN FontRightToLeft ). -.IP \fIfont_ascent_return\fP 1i -Returns the font ascent. -.IP \fIfont_descent_return\fP 1i -Returns the font descent. -.IP \fIoverall_return\fP 1i -Returns the overall size in the specified -.PN XCharStruct -structure. -.LP -.eM -.sp -To query the server for the bounding box of a 2-byte character string -in a given font, use -.PN XQueryTextExtents16 . -.IN "XQueryTextExtents16" "" "@DEF@" -.sM -.FD 0 -XQueryTextExtents16\^(\^\fIdisplay\fP, \fIfont_ID\fP, \fIstring\fP, \ -\fInchars\fP, \fIdirection_return\fP, \fIfont_ascent_return\fP, -.br - \fIfont_descent_return\fP, \fIoverall_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XID \fIfont_ID\fP\^; -.br - XChar2b *\fIstring\fP\^; -.br - int \fInchars\fP\^; -.br - int *\fIdirection_return\fP\^; -.br - int *\fIfont_ascent_return\fP, *\fIfont_descent_return\fP\^; -.br - XCharStruct *\fIoverall_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIfont_ID\fP 1i -Specifies either the font ID or the -.PN GContext -ID that contains the font. -.IP \fIstring\fP 1i -Specifies the character string. -.IP \fInchars\fP 1i -Specifies the number of characters in the character string. -.IP \fIdirection_return\fP 1i -Returns the value of the direction hint -.Pn ( FontLeftToRight -or -.PN FontRightToLeft ). -.IP \fIfont_ascent_return\fP 1i -Returns the font ascent. -.IP \fIfont_descent_return\fP 1i -Returns the font descent. -.IP \fIoverall_return\fP 1i -Returns the overall size in the specified -.PN XCharStruct -structure. -.LP -.eM -The -.PN XQueryTextExtents -and -.PN XQueryTextExtents16 -functions return the bounding box of the specified 8-bit and 16-bit -character string in the specified font or the font contained in the -specified GC. -These functions query the X server and, therefore, suffer the round-trip -overhead that is avoided by -.PN XTextExtents -and -.PN XTextExtents16 . -Both functions return a -.PN XCharStruct -structure, whose members are set to the values as follows. -.LP -The ascent member is set to the maximum of the ascent metrics -of all characters in the string. -The descent member is set to the maximum of the descent metrics. -The width member is set to the sum of the character-width metrics -of all characters in the string. -For each character in the string, -let W be the sum of the character-width metrics of all characters preceding -it in the string. -Let L be the left-side-bearing metric of the character plus W. -Let R be the right-side-bearing metric of the character plus W. -The lbearing member is set to the minimum L of all characters in the string. -The rbearing member is set to the maximum R. -.LP -For fonts defined with linear indexing rather than 2-byte matrix indexing, -each -.PN XChar2b -structure is interpreted as a 16-bit number with byte1 as the -most significant byte. -If the font has no defined default character, -undefined characters in the string are taken to have all zero metrics. -.LP -Characters with all zero metrics are ignored. -If the font has no defined default_char, -the undefined characters in the string are also ignored. -.LP -.PN XQueryTextExtents -and -.PN XQueryTextExtents16 -can generate -.PN BadFont -and -.PN BadGC -errors. -.NH 2 -Drawing Text -.XS -\*(SN Drawing Text -.XE -.LP -This section discusses how to draw: -.IP \(bu 5 -Complex text -.IP \(bu 5 -Text characters -.IP \(bu 5 -Image text characters -.LP -The fundamental text functions -.PN XDrawText -and -.PN XDrawText16 -use the following structures: -.LP -.IN "XTextItem" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - char *chars; /* pointer to string */ - int nchars; /* number of characters */ - int delta; /* delta between strings */ - Font font; /* Font to print it in, None don't change */ -} XTextItem; -.De -.LP -.IN "XTextItem16" "" "@DEF@" -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - XChar2b *chars; /* pointer to two-byte characters */ - int nchars; /* number of characters */ - int delta; /* delta between strings */ - Font font; /* font to print it in, None don't change */ -} XTextItem16; -.De -.LP -.eM -If the font member is not -.PN None , -the font is changed before printing and also is stored in the GC. -If an error was generated during text drawing, -the previous items may have been drawn. -The baseline of the characters are drawn starting at the x and y -coordinates that you pass in the text drawing functions. -.LP -For example, consider the background rectangle drawn by -.PN XDrawImageString . -If you want the upper-left corner of the background rectangle -to be at pixel coordinate (x,y), pass the (x,y + ascent) -as the baseline origin coordinates to the text functions. -The ascent is the font ascent, as given in the -.PN XFontStruct -structure. -If you want the lower-left corner of the background rectangle -to be at pixel coordinate (x,y), pass the (x,y \- descent + 1) -as the baseline origin coordinates to the text functions. -The descent is the font descent, as given in the -.PN XFontStruct -structure. -.NH 3 -Drawing Complex Text -.XS -\*(SN Drawing Complex Text -.XE -.LP -.IN "Text" "drawing" -.IN "Drawing" "text items" -.LP -To draw 8-bit characters in a given drawable, use -.PN XDrawText . -.IN "XDrawText" "" "@DEF@" -.sM -.FD 0 -XDrawText\^(\^\fIdisplay\fP, \fId\fP\^, \fIgc\fP\^, \fIx\fP\^, \fIy\fP\^, \fIitems\fP\^, \fInitems\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - GC \fIgc\fP\^; -.br - int \fIx\fP\^, \fIy\fP\^; -.br - XTextItem *\fIitems\fP\^; -.br - int \fInitems\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fId\fP 1i -Specifies the drawable. -.IP \fIgc\fP 1i -Specifies the GC. -.ds Xy , which are relative to the origin of the specified drawable \ -and define the origin of the first character -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the x and y coordinates\*(Xy. -.IP \fIitems\fP 1i -Specifies an array of text items. -.IP \fInitems\fP 1i -Specifies the number of text items in the array. -.LP -.eM -.sp -To draw 2-byte characters in a given drawable, use -.PN XDrawText16 . -.IN "XDrawText16" "" "@DEF@" -.sM -.FD 0 -XDrawText16\^(\^\fIdisplay\fP, \fId\fP\^, \fIgc\fP\^, \fIx\fP\^, \fIy\fP\^, \fIitems\fP\^, \fInitems\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - GC \fIgc\fP\^; -.br - int \fIx\fP\^, \fIy\fP\^; -.br - XTextItem16 *\fIitems\fP\^; -.br - int \fInitems\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fId\fP 1i -Specifies the drawable. -.IP \fIgc\fP 1i -Specifies the GC. -.ds Xy , which are relative to the origin of the specified drawable \ -and define the origin of the first character -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the x and y coordinates\*(Xy. -.IP \fIitems\fP 1i -Specifies an array of text items. -.IP \fInitems\fP 1i -Specifies the number of text items in the array. -.LP -.eM -The -.PN XDrawText16 -function is similar to -.PN XDrawText -except that it uses 2-byte or 16-bit characters. -Both functions allow complex spacing and font shifts between counted strings. -.LP -Each text item is processed in turn. -A font member other than -.PN None -in an item causes the font to be stored in the GC -and used for subsequent text. -A text element delta specifies an additional change -in the position along the x axis before the string is drawn. -The delta is always added to the character origin -and is not dependent on any characteristics of the font. -Each character image, as defined by the font in the GC, is treated as an -additional mask for a fill operation on the drawable. -The drawable is modified only where the font character has a bit set to 1. -If a text item generates a -.PN BadFont -error, the previous text items may have been drawn. -.LP -For fonts defined with linear indexing rather than 2-byte matrix indexing, -each -.PN XChar2b -structure is interpreted as a 16-bit number with byte1 as the -most significant byte. -.LP -Both functions use these GC components: -function, plane-mask, fill-style, font, subwindow-mode, -clip-x-origin, clip-y-origin, and clip-mask. -They also use these GC mode-dependent components: -foreground, background, tile, stipple, tile-stipple-x-origin, -and tile-stipple-y-origin. -.LP -.PN XDrawText -and -.PN XDrawText16 -can generate -.PN BadDrawable , -.PN BadFont , -.PN BadGC , -and -.PN BadMatch -errors. -.NH 3 -Drawing Text Characters -.XS -\*(SN Drawing Text Characters -.XE -.LP -.IN "Strings" "drawing" -.IN "Drawing" "strings" -To draw 8-bit characters in a given drawable, use -.PN XDrawString . -.IN "XDrawString" "" "@DEF@" -.sM -.FD 0 -XDrawString\^(\^\fIdisplay\fP, \fId\fP\^, \fIgc\fP\^, \fIx\fP\^, \fIy\fP\^, \fIstring\fP\^, \fIlength\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - GC \fIgc\fP\^; -.br - int \fIx\fP\^, \fIy\fP\^; -.br - char *\fIstring\fP\^; -.br - int \fIlength\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fId\fP 1i -Specifies the drawable. -.IP \fIgc\fP 1i -Specifies the GC. -.ds Xy , which are relative to the origin of the specified drawable \ -and define the origin of the first character -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the x and y coordinates\*(Xy. -.IP \fIstring\fP 1i -Specifies the character string. -.IP \fIlength\fP 1i -Specifies the number of characters in the string argument. -.LP -.eM -.sp -To draw 2-byte characters in a given drawable, use -.PN XDrawString16 . -.IN "XDrawString16" "" "@DEF@" -.sM -.FD 0 -XDrawString16\^(\^\fIdisplay\fP, \fId\fP\^, \fIgc\fP\^, \fIx\fP\^, \fIy\fP\^, \fIstring\fP\^, \fIlength\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - GC \fIgc\fP\^; -.br - int \fIx\fP\^, \fIy\fP\^; -.br - XChar2b *\fIstring\fP\^; -.br - int \fIlength\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fId\fP 1i -Specifies the drawable. -.IP \fIgc\fP 1i -Specifies the GC. -.ds Xy , which are relative to the origin of the specified drawable \ -and define the origin of the first character -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the x and y coordinates\*(Xy. -.IP \fIstring\fP 1i -Specifies the character string. -.IP \fIlength\fP 1i -Specifies the number of characters in the string argument. -.LP -.eM -Each character image, as defined by the font in the GC, is treated as an -additional mask for a fill operation on the drawable. -The drawable is modified only where the font character has a bit set to 1. -For fonts defined with 2-byte matrix indexing -and used with -.PN XDrawString16 , -each byte is used as a byte2 with a byte1 of zero. -.LP -Both functions use these GC components: -function, plane-mask, fill-style, font, subwindow-mode, clip-x-origin, -clip-y-origin, and clip-mask. -They also use these GC mode-dependent components: -foreground, background, tile, stipple, tile-stipple-x-origin, -and tile-stipple-y-origin. -.LP -.PN XDrawString -and -.PN XDrawString16 -can generate -.PN BadDrawable , -.PN BadGC , -and -.PN BadMatch -errors. -.NH 3 -Drawing Image Text Characters -.XS -\*(SN Drawing Image Text Characters -.XE -.LP -.IN "Image text" "drawing" -.IN "Drawing" "image text" -Some applications, in particular terminal emulators, need to -print image text in which both the foreground and background bits of -each character are painted. -This prevents annoying flicker on many displays. -.IN "XDrawImageString" -.IN "XDrawImageString16" -.LP -.sp -To draw 8-bit image text characters in a given drawable, use -.PN XDrawImageString . -.IN "XDrawImageString" "" "@DEF@" -.sM -.FD 0 -XDrawImageString\^(\^\fIdisplay\fP, \fId\fP\^, \fIgc\fP\^, \fIx\fP\^, \fIy\fP\^, \fIstring\fP\^, \fIlength\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - GC \fIgc\fP\^; -.br - int \fIx\fP\^, \fIy\fP\^; -.br - char *\fIstring\fP\^; -.br - int \fIlength\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fId\fP 1i -Specifies the drawable. -.IP \fIgc\fP 1i -Specifies the GC. -.ds Xy , which are relative to the origin of the specified drawable \ -and define the origin of the first character -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the x and y coordinates\*(Xy. -.IP \fIstring\fP 1i -Specifies the character string. -.IP \fIlength\fP 1i -Specifies the number of characters in the string argument. -.LP -.eM -.sp -To draw 2-byte image text characters in a given drawable, use -.PN XDrawImageString16 . -.IN "XDrawImageString16" "" "@DEF@" -.sM -.FD 0 -XDrawImageString16\^(\^\fIdisplay\fP, \fId\fP\^, \fIgc\fP\^, \fIx\fP\^, \fIy\fP\^, \fIstring\fP\^, \fIlength\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - GC \fIgc\fP\^; -.br - int \fIx\fP\^, \fIy\fP\^; -.br - XChar2b *\fIstring\fP\^; -.br - int \fIlength\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fId\fP 1i -Specifies the drawable. -.IP \fIgc\fP 1i -Specifies the GC. -.ds Xy , which are relative to the origin of the specified drawable \ -and define the origin of the first character -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the x and y coordinates\*(Xy. -.IP \fIstring\fP 1i -Specifies the character string. -.IP \fIlength\fP 1i -Specifies the number of characters in the string argument. -.LP -.eM -The -.PN XDrawImageString16 -function is similar to -.PN XDrawImageString -except that it uses 2-byte or 16-bit characters. -Both functions also use both the foreground and background pixels -of the GC in the destination. -.LP -The effect is first to fill a -destination rectangle with the background pixel defined in the GC and then -to paint the text with the foreground pixel. -The upper-left corner of the filled rectangle is at: -.LP -.Ds -[x, y \- font-ascent] -.De -.LP -The width is: -.LP -.Ds -overall-width -.De -.LP -The height is: -.LP -.Ds -font-ascent + font-descent -.De -.LP -The overall-width, font-ascent, and font-descent -are as would be returned by -.PN XQueryTextExtents -using gc and string. -The function and fill-style defined in the GC are ignored for these functions. -The effective function is -.PN GXcopy , -and the effective fill-style is -.PN FillSolid . -.LP -For fonts defined with 2-byte matrix indexing -and used with -.PN XDrawImageString , -each byte is used as a byte2 with a byte1 of zero. -.LP -Both functions use these GC components: -plane-mask, foreground, background, font, subwindow-mode, clip-x-origin, -clip-y-origin, and clip-mask. -.LP -.PN XDrawImageString -and -.PN XDrawImageString16 -can generate -.PN BadDrawable , -.PN BadGC , -and -.PN BadMatch -errors. -.LP -.NH 2 -Transferring Images between Client and Server -.XS -\*(SN Transferring Images between Client and Server -.XE -.LP -Xlib provides functions that you can use to transfer images between a client -and the server. -Because the server may require diverse data formats, -Xlib provides an image object that fully describes the data in memory -and that provides for basic operations on that data. -You should reference the data -through the image object rather than referencing the data directly. -However, some implementations of the Xlib library may efficiently deal with -frequently used data formats by replacing -functions in the procedure vector with special case functions. -Supported operations include destroying the image, getting a pixel, -storing a pixel, extracting a subimage of an image, and adding a constant -to an image (see section 16.8). -.LP -All the image manipulation functions discussed in this section make use of -the -.PN XImage -structure, -which describes an image as it exists in the client's memory. -.LP -.IN "XImage" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 1i 3i -.ta .5i 1i 3i -typedef struct _XImage { - int width, height; /* size of image */ - int xoffset; /* number of pixels offset in X direction */ - int format; /* XYBitmap, XYPixmap, ZPixmap */ - char *data; /* pointer to image data */ - int byte_order; /* data byte order, LSBFirst, MSBFirst */ - int bitmap_unit; /* quant. of scanline 8, 16, 32 */ - int bitmap_bit_order; /* LSBFirst, MSBFirst */ - int bitmap_pad; /* 8, 16, 32 either XY or ZPixmap */ - int depth; /* depth of image */ - int bytes_per_line; /* accelerator to next scanline */ - int bits_per_pixel; /* bits per pixel (ZPixmap) */ - unsigned long red_mask; /* bits in z arrangement */ - unsigned long green_mask; - unsigned long blue_mask; - XPointer obdata; /* hook for the object routines to hang on */ - struct funcs { /* image manipulation routines */ - struct _XImage *(*create_image)(); - int (*destroy_image)(); - unsigned long (*get_pixel)(); - int (*put_pixel)(); - struct _XImage *(*sub_image)(); - int (*add_pixel)(); - } f; -} XImage; -.De -.LP -.eM -.sp -To initialize the image manipulation routines of an image structure, use -.PN XInitImage . -.IN "XInitImage" "" "@DEF@" -.sM -.FD 0 -Status XInitImage\^(\^\fIimage\fP\^) -.br - XImage *\fIimage\fP\^; -.FN -.IP \fIximage\fP 1i -Specifies the image. -.LP -.eM -The -.PN XInitImage -function initializes the internal image manipulation routines of an -image structure, based on the values of the various structure members. -All fields other than the manipulation routines must already be initialized. -If the bytes_per_line member is zero, -.PN XInitImage -will assume the image data is contiguous in memory and set the -bytes_per_line member to an appropriate value based on the other -members; otherwise, the value of bytes_per_line is not changed. -All of the manipulation routines are initialized to functions -that other Xlib image manipulation functions need to operate on the -type of image specified by the rest of the structure. -.LP -This function must be called for any image constructed by the client -before passing it to any other Xlib function. -Image structures created or returned by Xlib do not need to be -initialized in this fashion. -.LP -This function returns a nonzero status if initialization of the -structure is successful. It returns zero if it detected some error -or inconsistency in the structure, in which case the image is not changed. -.LP -.sp -To combine an image with a rectangle of a drawable on the display, -use -.PN XPutImage . -.IN "XPutImage" "" "@DEF@" -.sM -.FD 0 -XPutImage\^(\^\fIdisplay\fP, \fId\fP\^, \fIgc\fP\^, \fIimage\fP\^, \fIsrc_x\fP, \fIsrc_y\fP, \fIdest_x\fP\^, \fIdest_y\fP\^, \fIwidth\fP\^, \fIheight\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - GC \fIgc\fP\^; -.br - XImage *\fIimage\fP\^; -.br - int \fIsrc_x\fP\^, \fIsrc_y\fP\^; -.br - int \fIdest_x\fP\^, \fIdest_y\fP\^; -.br - unsigned int \fIwidth\fP\^, \fIheight\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fId\fP 1i -Specifies the drawable. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIimage\fP 1i -Specifies the image you want combined with the rectangle. -.IP \fIsrc_x\fP 1i -Specifies the offset in X from the left edge of the image defined -by the -.PN XImage -structure. -.IP \fIsrc_y\fP 1i -Specifies the offset in Y from the top edge of the image defined -by the -.PN XImage -structure. -.ds Dx , which are relative to the origin of the drawable \ -and are the coordinates of the subimage -.IP \fIdest_x\fP 1i -.br -.ns -.IP \fIdest_y\fP 1i -Specify the x and y coordinates\*(Dx. -.ds Wh \ of the subimage, which define the dimensions of the rectangle -.IP \fIwidth\fP 1i -.br -.ns -.IP \fIheight\fP 1i -Specify the width and height\*(Wh. -.LP -.eM -The -.PN XPutImage -function -combines an image with a rectangle of the specified drawable. -The section of the image defined by the src_x, src_y, width, and height -arguments is drawn on the specified part of the drawable. -If -.PN XYBitmap -format is used, the depth of the image must be one, -or a -.PN BadMatch -error results. -The foreground pixel in the GC defines the source for the one bits in the image, -and the background pixel defines the source for the zero bits. -For -.PN XYPixmap -and -.PN ZPixmap , -the depth of the image must match the depth of the drawable, -or a -.PN BadMatch -error results. -.LP -If the characteristics of the image (for example, byte_order and bitmap_unit) -differ from what the server requires, -.PN XPutImage -automatically makes the appropriate -conversions. -.LP -This function uses these GC components: -function, plane-mask, subwindow-mode, clip-x-origin, clip-y-origin, -and clip-mask. -It also uses these GC mode-dependent components: -foreground and background. -.LP -.PN XPutImage -can generate -.PN BadDrawable , -.PN BadGC , -.PN BadMatch , -and -.PN BadValue -errors. -.LP -.sp -To return the contents of a rectangle in a given drawable on the display, -use -.PN XGetImage . -This function specifically supports rudimentary screen dumps. -.IN "XGetImage" "" "@DEF@" -.sM -.FD 0 -XImage *XGetImage\^(\^\fIdisplay\fP, \fId\fP\^, \fIx\fP\^, \fIy\fP\^, \fIwidth\fP\^, \fIheight\fP\^, \fIplane_mask\fP, \fIformat\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - int \fIx\fP\^, \fIy\fP\^; -.br - unsigned int \fIwidth\fP\^, \fIheight\fP\^; -.br - unsigned long \fIplane_mask\fP\^; -.br - int \fIformat\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fId\fP 1i -Specifies the drawable. -.ds Xy , which are relative to the origin of the drawable \ -and define the upper-left corner of the rectangle -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the x and y coordinates\*(Xy. -.ds Wh \ of the subimage, which define the dimensions of the rectangle -.IP \fIwidth\fP 1i -.br -.ns -.IP \fIheight\fP 1i -Specify the width and height\*(Wh. -.IP \fIplane_mask\fP 1i -Specifies the plane mask. -.\" *** JIM: NEED MORE INFO FOR THIS. *** -.IP \fIformat\fP 1i -Specifies the format for the image. -You can pass -.PN XYPixmap -or -.PN ZPixmap . -.LP -.eM -The -.PN XGetImage -function returns a pointer to an -.PN XImage -structure. -This structure provides you with the contents of the specified rectangle of -the drawable in the format you specify. -If the format argument is -.PN XYPixmap , -the image contains only the bit planes you passed to the plane_mask argument. -If the plane_mask argument only requests a subset of the planes of the -display, the depth of the returned image will be the number of planes -requested. -If the format argument is -.PN ZPixmap , -.PN XGetImage -returns as zero the bits in all planes not -specified in the plane_mask argument. -The function performs no range checking on the values in plane_mask and ignores -extraneous bits. -.LP -.PN XGetImage -returns the depth of the image to the depth member of the -.PN XImage -structure. -The depth of the image is as specified when the drawable was created, -except when getting a subset of the planes in -.PN XYPixmap -format, when the depth is given by the number of bits set to 1 in plane_mask. -.LP -If the drawable is a pixmap, -the given rectangle must be wholly contained within the pixmap, -or a -.PN BadMatch -error results. -If the drawable is a window, -the window must be viewable, -and it must be the case that if there were no inferiors or overlapping windows, -the specified rectangle of the window would be fully visible on the screen -and wholly contained within the outside edges of the window, -or a -.PN BadMatch -error results. -Note that the borders of the window can be included and read with -this request. -If the window has backing-store, the backing-store contents are -returned for regions of the window that are obscured by noninferior -windows. -If the window does not have backing-store, -the returned contents of such obscured regions are undefined. -The returned contents of visible regions of inferiors -of a different depth than the specified window's depth are also undefined. -The pointer cursor image is not included in the returned contents. -If a problem occurs, -.PN XGetImage -returns NULL. -.LP -.PN XGetImage -can generate -.PN BadDrawable , -.PN BadMatch , -and -.PN BadValue -errors. -.sp -.LP -To copy the contents of a rectangle on the display -to a location within a preexisting image structure, use -.PN XGetSubImage . -.IN "XGetSubImage" "" "@DEF@" -.sM -.FD 0 -XImage *XGetSubImage\^(\^\fIdisplay\fP, \fId\fP\^, \fIx\fP\^, \fIy\fP\^, \fIwidth\fP\^, \fIheight\fP\^, \fIplane_mask\fP, \fIformat\fP\^, \fIdest_image\fP\^, \fIdest_x\fP\^, -.br - \fIdest_y\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - int \fIx\fP\^, \fIy\fP\^; -.br - unsigned int \fIwidth\fP\^, \fIheight\fP\^; -.br - unsigned long \fIplane_mask\fP\^; -.br - int \fIformat\fP\^; -.br - XImage *\fIdest_image\fP\^; -.br - int \fIdest_x\fP\^, \fIdest_y\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fId\fP 1i -Specifies the drawable. -.ds Xy , which are relative to the origin of the drawable \ -and define the upper-left corner of the rectangle -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the x and y coordinates\*(Xy. -.ds Wh \ of the subimage, which define the dimensions of the rectangle -.IP \fIwidth\fP 1i -.br -.ns -.IP \fIheight\fP 1i -Specify the width and height\*(Wh. -.IP \fIplane_mask\fP 1i -Specifies the plane mask. -.\" *** JIM: NEED MORE INFO FOR THIS. *** -.IP \fIformat\fP 1i -Specifies the format for the image. -You can pass -.PN XYPixmap -or -.PN ZPixmap . -.IP \fIdest_image\fP 1i -Specifies the destination image. -.ds Dx , which are relative to the origin of the destination rectangle, \ -specify its upper-left corner, and determine where the subimage \ -is placed in the destination image -.IP \fIdest_x\fP 1i -.br -.ns -.IP \fIdest_y\fP 1i -Specify the x and y coordinates\*(Dx. -.LP -.eM -The -.PN XGetSubImage -function updates dest_image with the specified subimage in the same manner as -.PN XGetImage . -If the format argument is -.PN XYPixmap , -the image contains only the bit planes you passed to the plane_mask argument. -If the format argument is -.PN ZPixmap , -.PN XGetSubImage -returns as zero the bits in all planes not -specified in the plane_mask argument. -The function performs no range checking on the values in plane_mask and ignores -extraneous bits. -As a convenience, -.PN XGetSubImage -returns a pointer to the same -.PN XImage -structure specified by dest_image. -.LP -The depth of the destination -.PN XImage -structure must be the same as that of the drawable. -If the specified subimage does not fit at the specified location -on the destination image, the right and bottom edges are clipped. -If the drawable is a pixmap, -the given rectangle must be wholly contained within the pixmap, -or a -.PN BadMatch -error results. -If the drawable is a window, -the window must be viewable, -and it must be the case that if there were no inferiors or overlapping windows, -the specified rectangle of the window would be fully visible on the screen -and wholly contained within the outside edges of the window, -or a -.PN BadMatch -error results. -If the window has backing-store, -then the backing-store contents are returned for regions of the window -that are obscured by noninferior windows. -If the window does not have backing-store, -the returned contents of such obscured regions are undefined. -The returned contents of visible regions of inferiors -of a different depth than the specified window's depth are also undefined. -If a problem occurs, -.PN XGetSubImage -returns NULL. -.LP -.PN XGetSubImage -can generate -.PN BadDrawable , -.PN BadGC , -.PN BadMatch , -and -.PN BadValue -errors. -.bp diff --git a/doc/xorg-docs/specs/X11/CH09 b/doc/xorg-docs/specs/X11/CH09 deleted file mode 100644 index 2b79d3880..000000000 --- a/doc/xorg-docs/specs/X11/CH09 +++ /dev/null @@ -1,1290 +0,0 @@ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996, 2002 The Open Group -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of The Open Group shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from The Open Group. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by -.\" Digital Equipment Corporation -.\" -.\" Portions Copyright \(co 1990, 1991 by -.\" Tektronix, Inc. -.\" -.\" Permission to use, copy, modify and distribute this documentation for -.\" any purpose and without fee is hereby granted, provided that the above -.\" copyright notice appears in all copies and that both that copyright notice -.\" and this permission notice appear in all copies, and that the names of -.\" Digital and Tektronix not be used in in advertising or publicity pertaining -.\" to this documentation without specific, written prior permission. -.\" Digital and Tektronix makes no representations about the suitability -.\" of this documentation for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBChapter 9\fP\s-1 - -\s+1\fBWindow and Session Manager Functions\fP\s-1 -.sp 2 -.nr H1 9 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.na -.LP -.XS -Chapter 9: Window and Session Manager Functions -.XE -Although it is difficult to categorize functions as exclusively -for an application, a window manager, or a session manager, -the functions in this chapter are most often used by window managers -and session managers. -It is not expected that these functions will be used by most -application programs. -Xlib provides management functions to: -.IP \(bu 5 -Change the parent of a window -.IP \(bu 5 -Control the lifetime of a window -.IP \(bu 5 -Manage installed colormaps -.IP \(bu 5 -Set and retrieve the font search path -.IP \(bu 5 -Grab the server -.IP \(bu 5 -Kill a client -.IP \(bu 5 -Control the screen saver -.IP \(bu 5 -Control host access -.NH 2 -Changing the Parent of a Window -.XS -\*(SN Changing the Parent of a Window -.XE -.LP -To change a window's parent to another window on the same screen, use -.PN XReparentWindow . -There is no way to move a window between screens. -.IN "XReparentWindow" "" "@DEF@" -.sM -.FD 0 -XReparentWindow\^(\^\fIdisplay\fP, \fIw\fP\^, \fIparent\fP\^, \fIx\fP\^, \fIy\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - Window \fIparent\fP\^; -.br - int \fIx\fP\^, \fIy\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIparent\fP 1i -Specifies the parent window. -.ds Xy \ of the position in the new parent window -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the x and y coordinates\*(Xy. -.LP -.eM -If the specified window is mapped, -.PN XReparentWindow -automatically performs an -.PN UnmapWindow -request on it, removes it from its current position in the hierarchy, -and inserts it as the child of the specified parent. -The window is placed in the stacking order on top with respect to -sibling windows. -.LP -After reparenting the specified window, -.PN XReparentWindow -causes the X server to generate a -.PN ReparentNotify -event. -The override_redirect member returned in this event is -set to the window's corresponding attribute. -Window manager clients usually should ignore this window if this member -is set to -.PN True . -Finally, if the specified window was originally mapped, -the X server automatically performs a -.PN MapWindow -request on it. -.LP -The X server performs normal exposure processing on formerly obscured -windows. -The X server might not generate -.PN Expose -events for regions from the initial -.PN UnmapWindow -request that are immediately obscured by the final -.PN MapWindow -request. -A -.PN BadMatch -error results if: -.IP \(bu 5 -The new parent window is not on the same screen as -the old parent window. -.IP \(bu 5 -The new parent window is the specified window or an inferior of the -specified window. -.IP \(bu 5 -The new parent is -.PN InputOnly , -and the window is not. -.IP \(bu 5 -The specified window has a -.PN ParentRelative -background, and the new parent window is not the same depth as the -specified window. -.LP -.PN XReparentWindow -can generate -.PN BadMatch -and -.PN BadWindow -errors. -.NH 2 -Controlling the Lifetime of a Window -.XS -\*(SN Controlling the Lifetime of a Window -.XE -.LP -The save-set of a client is a list of other clients' windows that, -if they are inferiors of one of the client's windows at connection close, -should not be destroyed and should be remapped if they are unmapped. -For further information about close-connection processing, -see section 2.6. -To allow an application's window to survive when a window manager that -has reparented a window fails, -Xlib provides the save-set functions that you can -use to control the longevity of subwindows -that are normally destroyed when the parent is destroyed. -For example, a window manager that wants to add decoration -to a window by adding a frame might reparent an application's -window. -When the frame is destroyed, -the application's window should not be destroyed -but be returned to its previous place in the window hierarchy. -.LP -The X server automatically removes windows from the save-set -when they are destroyed. -.LP -.sp -To add or remove a window from the client's save-set, use -.PN XChangeSaveSet . -.IN "XChangeSaveSet" "" "@DEF@" -.sM -.FD 0 -XChangeSaveSet\^(\^\fIdisplay\fP, \fIw\fP\^, \fIchange_mode\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - int \fIchange_mode\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Wi that you want to add to or delete from the client's save-set -.IP \fIw\fP 1i -Specifies the window \*(Wi. -.IP \fIchange_mode\fP 1i -Specifies the mode. -You can pass -.PN SetModeInsert -or -.PN SetModeDelete . -.LP -.eM -Depending on the specified mode, -.PN XChangeSaveSet -either inserts or deletes the specified window from the client's save-set. -The specified window must have been created by some other client, -or a -.PN BadMatch -error results. -.LP -.PN XChangeSaveSet -can generate -.PN BadMatch , -.PN BadValue , -and -.PN BadWindow -errors. -.LP -.sp -To add a window to the client's save-set, use -.PN XAddToSaveSet . -.IN "XAddToSaveSet" "" "@DEF@" -.sM -.FD 0 -XAddToSaveSet\^(\^\fIdisplay\fP, \fIw\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Wi that you want to add to the client's save-set -.IP \fIw\fP 1i -Specifies the window \*(Wi. -.LP -.eM -The -.PN XAddToSaveSet -function adds the specified window to the client's save-set. -The specified window must have been created by some other client, -or a -.PN BadMatch -error results. -.LP -.PN XAddToSaveSet -can generate -.PN BadMatch -and -.PN BadWindow -errors. -.LP -.sp -To remove a window from the client's save-set, use -.PN XRemoveFromSaveSet . -.IN "XRemoveFromSaveSet" "" "@DEF@" -.sM -.FD 0 -XRemoveFromSaveSet\^(\^\fIdisplay\fP, \fIw\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Wi that you want to delete from the client's save-set -.IP \fIw\fP 1i -Specifies the window \*(Wi. -.LP -.eM -The -.PN XRemoveFromSaveSet -function removes the specified window from the client's save-set. -The specified window must have been created by some other client, -or a -.PN BadMatch -error results. -.LP -.PN XRemoveFromSaveSet -can generate -.PN BadMatch -and -.PN BadWindow -errors. -.NH 2 -Managing Installed Colormaps -.XS -\*(SN Managing Installed Colormaps -.XE -.LP -The X server maintains a list of installed colormaps. -Windows using these colormaps are guaranteed to display with -correct colors; windows using other colormaps may or may not display -with correct colors. -Xlib provides functions that you can use to install a colormap, -uninstall a colormap, and obtain a list of installed colormaps. -.LP -At any time, -there is a subset of the installed maps that is viewed as an ordered list -and is called the required list. -The length of the required list is at most M, -where M is the minimum number of installed colormaps specified for the screen -in the connection setup. -The required list is maintained as follows. -When a colormap is specified to -.PN XInstallColormap , -it is added to the head of the list; -the list is truncated at the tail, if necessary, to keep its length to -at most M. -When a colormap is specified to -.PN XUninstallColormap -and it is in the required list, -it is removed from the list. -A colormap is not added to the required list when it is implicitly installed -by the X server, -and the X server cannot implicitly uninstall a colormap that is in the -required list. -.LP -.sp -To install a colormap, use -.PN XInstallColormap . -.IN "XInstallColormap" "" "@DEF@" -.sM -.FD 0 -XInstallColormap\^(\^\fIdisplay\fP, \fIcolormap\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Colormap \fIcolormap\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcolormap\fP 1i -Specifies the colormap. -.LP -.eM -The -.PN XInstallColormap -function installs the specified colormap for its associated screen. -All windows associated with this colormap immediately display with -true colors. -You associated the windows with this colormap when you created them by calling -.PN XCreateWindow , -.PN XCreateSimpleWindow , -.PN XChangeWindowAttributes , -or -.PN XSetWindowColormap . -.LP -If the specified colormap is not already an installed colormap, -the X server generates a -.PN ColormapNotify -event on each window that has that colormap. -In addition, for every other colormap that is installed as -a result of a call to -.PN XInstallColormap , -the X server generates a -.PN ColormapNotify -event on each window that has that colormap. -.LP -.PN XInstallColormap -can generate a -.PN BadColor -error. -.LP -.sp -To uninstall a colormap, use -.PN XUninstallColormap . -.IN "XUninstallColormap" "" "@DEF@" -.sM -.FD 0 -XUninstallColormap\^(\^\fIdisplay\fP, \fIcolormap\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Colormap \fIcolormap\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcolormap\fP 1i -Specifies the colormap. -.LP -.eM -The -.PN XUninstallColormap -function removes the specified colormap from the required -list for its screen. -As a result, -the specified colormap might be uninstalled, -and the X server might implicitly install or uninstall additional colormaps. -Which colormaps get installed or uninstalled is server dependent -except that the required list must remain installed. -.LP -If the specified colormap becomes uninstalled, -the X server generates a -.PN ColormapNotify -event on each window that has that colormap. -In addition, for every other colormap that is installed or uninstalled as a -result of a call to -.PN XUninstallColormap , -the X server generates a -.PN ColormapNotify -event on each window that has that colormap. -.LP -.PN XUninstallColormap -can generate a -.PN BadColor -error. -.LP -.sp -To obtain a list of the currently installed colormaps for a given screen, use -.PN XListInstalledColormaps . -.IN "XListInstalledColormaps" "" "@DEF@" -.sM -.FD 0 -Colormap *XListInstalledColormaps\^(\^\fIdisplay\fP, \fIw\fP, \fInum_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - int *\fInum_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Wi that determines the screen -.IP \fIw\fP 1i -Specifies the window \*(Wi. -.IP \fInum_return\fP 1i -Returns the number of currently installed colormaps. -.LP -.eM -The -.PN XListInstalledColormaps -function returns a list of the currently installed colormaps for the screen -of the specified window. -The order of the colormaps in the list is not significant -and is no explicit indication of the required list. -When the allocated list is no longer needed, -free it by using -.PN XFree . -.LP -.PN XListInstalledColormaps -can generate a -.PN BadWindow -error. -.NH 2 -Setting and Retrieving the Font Search Path -.XS -\*(SN Setting and Retrieving the Font Search Path -.XE -.LP -The set of fonts available from a server depends on a font -search path. Xlib provides functions to set and retrieve the -search path for a server. -.LP -.sp -To set the font search path, use -.PN XSetFontPath . -.IN "XSetFontPath" "" "@DEF@" -.sM -.FD 0 -XSetFontPath\^(\^\fIdisplay\fP, \fIdirectories\fP\^, \fIndirs\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - char **\fIdirectories\fP\^; -.br - int \fIndirs\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdirectories\fP 1i -Specifies the directory path used to look for a font. -Setting the path to the empty list restores the default path defined -for the X server. -.IP \fIndirs\fP 1i -Specifies the number of directories in the path. -.LP -.eM -The -.PN XSetFontPath -function defines the directory search path for font lookup. -There is only one search path per X server, not one per client. -The encoding and interpretation of the strings are implementation-dependent, -but typically they specify directories or font servers to be searched -in the order listed. -An X server is permitted to cache font information internally; -for example, it might cache an entire font from a file and not -check on subsequent opens of that font to see if the underlying -font file has changed. -However, -when the font path is changed, -the X server is guaranteed to flush all cached information about fonts -for which there currently are no explicit resource IDs allocated. -The meaning of an error from this request is implementation-dependent. -.LP -.PN XSetFontPath -can generate a -.PN BadValue -error. -.LP -.sp -To get the current font search path, use -.PN XGetFontPath . -.IN "XGetFontPath" "" "@DEF@" -.sM -.FD 0 -char **XGetFontPath\^(\^\fIdisplay\fP, \fInpaths_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int *\fInpaths_return\fP\^; - -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fInpaths_return\fP 1i -Returns the number of strings in the font path array. -.LP -.eM -The -.PN XGetFontPath -function allocates and returns an array of strings containing the search path. -The contents of these strings are implementation-dependent -and are not intended to be interpreted by client applications. -When it is no longer needed, -the data in the font path should be freed by using -.PN XFreeFontPath . -.LP -.sp -To free data returned by -.PN XGetFontPath , -use -.PN XFreeFontPath . -.IN "XFreeFontPath" "" "@DEF@" -.sM -.FD 0 -XFreeFontPath\^(\^\fIlist\fP\^) -.br - char **\fIlist\fP\^; - -.FN -.IP \fIlist\fP 1i -Specifies the array of strings you want to free. -.LP -.eM -The -.PN XFreeFontPath -function -frees the data allocated by -.PN XGetFontPath . -.NH 2 -Grabbing the Server -.XS -\*(SN Grabbing the Server -.XE -.LP -Xlib provides functions that you can use to grab and ungrab the server. -These functions can be used to control processing of output on other -connections by the window system server. -While the server is grabbed, -no processing of requests or close downs on any other connection will occur. -A client closing its connection automatically ungrabs the server. -.IN "Menus" -.IN "Window" "managers" -Although grabbing the server is highly discouraged, it is sometimes necessary. -.LP -.sp -To grab the server, use -.PN XGrabServer . -.IN "Server" "grabbing" -.IN "Grabbing" "server" -.IN "XGrabServer" "" "@DEF@" -.sM -.FD 0 -XGrabServer\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -The -.PN XGrabServer -function disables processing of requests and close downs on all other -connections than the one this request arrived on. -You should not grab the X server any more than is absolutely necessary. -.LP -.sp -To ungrab the server, use -.PN XUngrabServer . -.IN "XUngrabServer" "" "@DEF@" -.sM -.FD 0 -XUngrabServer\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -The -.PN XUngrabServer -function restarts processing of requests and close downs on other connections. -You should avoid grabbing the X server as much as possible. -.NH 2 -Killing Clients -.XS -\*(SN Killing Clients -.XE -.LP -Xlib provides a function to cause the connection to -a client to be closed and its resources to be destroyed. -To destroy a client, use -.PN XKillClient . -.IN "XKillClient" "" "@DEF@" -.sM -.FD 0 -XKillClient\^(\^\fIdisplay\fP, \fIresource\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XID \fIresource\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIresource\fP 1i -Specifies any resource associated with the client that you want to destroy or -.PN AllTemporary . -.LP -.eM -The -.PN XKillClient -function -forces a close down of the client -that created the resource -if a valid resource is specified. -If the client has already terminated in -either -.PN RetainPermanent -or -.PN RetainTemporary -mode, all of the client's -resources are destroyed. -If -.PN AllTemporary -is specified, the resources of all clients that have terminated in -.PN RetainTemporary -are destroyed (see section 2.5). -This permits implementation of window manager facilities that aid debugging. -A client can set its close-down mode to -.PN RetainTemporary . -If the client then crashes, -its windows would not be destroyed. -The programmer can then inspect the application's window tree -and use the window manager to destroy the zombie windows. -.LP -.PN XKillClient -can generate a -.PN BadValue -error. -.NH 2 -Controlling the Screen Saver -.XS -\*(SN Controlling the Screen Saver -.XE -.LP -Xlib provides functions that you can use to set or reset the mode -of the screen saver, to force or activate the screen saver, -or to obtain the current screen saver values. -.LP -.sp -To set the screen saver mode, use -.PN XSetScreenSaver . -.IN "XSetScreenSaver" "" "@DEF@" -.sM -.FD 0 -XSetScreenSaver\^(\^\fIdisplay\fP, \fItimeout\fP\^, \fIinterval\fP\^, \fIprefer_blanking\fP\^, \fIallow_exposures\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fItimeout\fP\^, \fIinterval\fP\^; -.br - int \fIprefer_blanking\fP\^; -.br - int \fIallow_exposures\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fItimeout\fP 1i -Specifies the timeout, in seconds, until the screen saver turns on. -.IP \fIinterval\fP 1i -Specifies the interval, in seconds, between screen saver alterations. -.IP \fIprefer_blanking\fP 1i -Specifies how to enable screen blanking. -You can pass -.PN DontPreferBlanking , -.PN PreferBlanking , -or -.PN DefaultBlanking . -.IP \fIallow_exposures\fP 1i -Specifies the screen save control values. -You can pass -.PN DontAllowExposures , -.PN AllowExposures , -or -.PN DefaultExposures . -.LP -.eM -Timeout and interval are specified in seconds. -A timeout of 0 disables the screen saver -(but an activated screen saver is not deactivated), -and a timeout of \-1 restores the default. -Other negative values generate a -.PN BadValue -error. -If the timeout value is nonzero, -.PN XSetScreenSaver -enables the screen saver. -An interval of 0 disables the random-pattern motion. -If no input from devices (keyboard, mouse, and so on) is generated -for the specified number of timeout seconds once the screen saver is enabled, -the screen saver is activated. -.LP -For each screen, -if blanking is preferred and the hardware supports video blanking, -the screen simply goes blank. -Otherwise, if either exposures are allowed or the screen can be regenerated -without sending -.PN Expose -events to clients, -the screen is tiled with the root window background tile randomly -re-origined each interval seconds. -Otherwise, the screens' state do not change, -and the screen saver is not activated. -The screen saver is deactivated, -and all screen states are restored at the next -keyboard or pointer input or at the next call to -.PN XForceScreenSaver -with mode -.PN ScreenSaverReset . -.LP -If the server-dependent screen saver method supports periodic change, -the interval argument serves as a hint about how long the change period -should be, and zero hints that no periodic change should be made. -Examples of ways to change the screen include scrambling the colormap -periodically, moving an icon image around the screen periodically, or tiling -the screen with the root window background tile, randomly re-origined -periodically. -.LP -.PN XSetScreenSaver -can generate a -.PN BadValue -error. -.LP -.sp -To force the screen saver on or off, use -.PN XForceScreenSaver . -.IN "XForceScreenSaver" "" "@DEF@" -.sM -.FD 0 -XForceScreenSaver\^(\^\fIdisplay\fP\^, \fImode\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fImode\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fImode\fP 1i -Specifies the mode that is to be applied. -You can pass -.PN ScreenSaverActive -or -.PN ScreenSaverReset . -.LP -.eM -If the specified mode is -.PN ScreenSaverActive -and the screen saver currently is deactivated, -.PN XForceScreenSaver -activates the screen saver even if the screen saver had been disabled -with a timeout of zero. -If the specified mode is -.PN ScreenSaverReset -and the screen saver currently is enabled, -.PN XForceScreenSaver -deactivates the screen saver if it was activated, -and the activation timer is reset to its initial state -(as if device input had been received). -.LP -.PN XForceScreenSaver -can generate a -.PN BadValue -error. -.LP -.sp -To activate the screen saver, use -.PN XActivateScreenSaver . -.IN "XActivateScreenSaver" "" "@DEF@" -.sM -.FD 0 -XActivateScreenSaver\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -.sp -To reset the screen saver, use -.PN XResetScreenSaver . -.IN "XResetScreenSaver" "" "@DEF@" -.sM -.FD 0 -XResetScreenSaver\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -.sp -To get the current screen saver values, use -.PN XGetScreenSaver . -.IN "XGetScreenSaver" "" "@DEF@" -.sM -.FD 0 -XGetScreenSaver\^(\^\fIdisplay\fP, \fItimeout_return\fP\^, \fIinterval_return\fP\^, \fIprefer_blanking_return\fP\^, -.br - \fIallow_exposures_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int *\fItimeout_return\fP\^, *\fIinterval_return\fP\^; -.br - int *\fIprefer_blanking_return\fP\^; -.br - int *\fIallow_exposures_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fItimeout_return\fP 1i -Returns the timeout, in seconds, until the screen saver turns on. -.IP \fIinterval_return\fP 1i -Returns the interval between screen saver invocations. -.IP \fIprefer_blanking_return\fP 1i -Returns the current screen blanking preference -.Pn ( DontPreferBlanking , -.PN PreferBlanking , -or -.PN DefaultBlanking ). -.IP \fIallow_exposures_return\fP 1i -Returns the current screen save control value -.Pn ( DontAllowExposures , -.PN AllowExposures , -or -.PN DefaultExposures ). -.LP -.eM -.NH 2 -Controlling Host Access -.XS -\*(SN Controlling Host Access -.XE -.LP -This section discusses how to: -.IP \(bu 5 -Add, get, or remove hosts from the access control list -.IP \(bu 5 -Change, enable, or disable access -.LP -.IN "Access control list" -.IN "Authentication" -X does not provide any protection on a per-window basis. -If you find out the resource ID of a resource, you can manipulate it. -To provide some minimal level of protection, however, -connections are permitted only from machines you trust. -This is adequate on single-user workstations but obviously -breaks down on timesharing machines. -Although provisions exist in the X protocol for proper connection -authentication, the lack of a standard authentication server -leaves host-level access control as the only common mechanism. -.LP -.IN "Default Protection" -The initial set of hosts allowed to open connections typically consists of: -.IP \(bu 5 -The host the window system is running on. -.IP \(bu 5 -On POSIX-conformant systems, each host listed in the -.PN /etc/X?.hosts -file. -The ? indicates the number of the -display. -.IN "Files" "/etc/X?.hosts" -This file should consist of host names separated by newlines. -DECnet nodes must terminate in :: to distinguish them from Internet hosts. -.LP -If a host is not in the access control list when the access control -mechanism is enabled and if the host attempts to establish a connection, -the server refuses the connection. -To change the access list, -the client must reside on the same host as the server and/or must -have been granted permission in the initial authorization at connection -setup. -.LP -Servers also can implement other access control policies in addition to -or in place of this host access facility. -For further information about other access control implementations, -see ``X Window System Protocol.'' -.NH 3 -Adding, Getting, or Removing Hosts -.XS -\*(SN Adding, Getting, or Removing Hosts -.XE -.LP -Xlib provides functions that you can use to add, get, or remove hosts -from the access control list. -All the host access control functions use the -.PN XHostAddress -structure, which contains: -.LP -.IN "XHostAddress" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int family; /* for example FamilyInternet */ - int length; /* length of address, in bytes */ - char *address; /* pointer to where to find the address */ -} XHostAddress; -.De -.LP -.eM -The family member specifies which protocol address family to use -(for example, TCP/IP or DECnet) and can be -.PN FamilyInternet , -.PN FamilyInternet6 , -.PN FamilyServerInterpreted , -.PN FamilyDECnet , -or -.PN FamilyChaos . -The length member specifies the length of the address in bytes. -The address member specifies a pointer to the address. -.LP -For TCP/IP, the address should be in network byte order. -For IP version 4 addresses, the family should be FamilyInternet -and the length should be 4 bytes. For IP version 6 addresses, the -family should be FamilyInternet6 and the length should be 16 bytes. -.LP -For the DECnet family, -the server performs no automatic swapping on the address bytes. -A Phase IV address is 2 bytes long. -The first byte contains the least significant 8 bits of the node number. -The second byte contains the most significant 2 bits of the -node number in the least significant 2 bits of the byte -and the area in the most significant 6 bits of the byte. -.LP -For the ServerInterpreted family, the length is ignored and the address -member is a pointer to a -.PN XServerInterpretedAddress -structure, which contains: -.LP -.IN "XServerInterpretedAddress" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int typelength; /* length of type string, in bytes */ - int valuelength;/* length of value string, in bytes */ - char *type; /* pointer to where to find the type string */ - char *value; /* pointer to where to find the address */ -} XServerInterpretedAddress; -.De -.LP -.eM -The type and value members point to strings representing the type and value of -the server interpreted entry. These strings may not be NULL-terminated so care -should be used when accessing them. The typelength and valuelength members -specify the length in byte of the type and value strings. -.LP -.sp -To add a single host, use -.PN XAddHost . -.IN "XAddHost" "" "@DEF@" -.sM -.FD 0 -XAddHost\^(\^\fIdisplay\fP, \fIhost\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XHostAddress *\fIhost\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Ho added -.IP \fIhost\fP 1i -Specifies the host that is to be \*(Ho. -.LP -.eM -The -.PN XAddHost -function adds the specified host to the access control list for that display. -The server must be on the same host as the client issuing the command, or a -.PN BadAccess -error results. -.LP -.PN XAddHost -can generate -.PN BadAccess -and -.PN BadValue -errors. -.LP -.sp -To add multiple hosts at one time, use -.PN XAddHosts . -.IN "XAddHosts" "" "@DEF@" -.sM -.FD 0 -XAddHosts\^(\^\fIdisplay\fP, \fIhosts\fP, \fInum_hosts\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XHostAddress *\fIhosts\fP\^; -.br - int \fInum_hosts\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Ho added -.IP \fIhosts\fP 1i -Specifies each host that is to be \*(Ho. -.IP \fInum_hosts\fP 1i -Specifies the number of hosts. -.LP -.eM -The -.PN XAddHosts -function adds each specified host to the access control list for that display. -The server must be on the same host as the client issuing the command, or a -.PN BadAccess -error results. -.LP -.PN XAddHosts -can generate -.PN BadAccess -and -.PN BadValue -errors. -.LP -.sp -To obtain a host list, use -.PN XListHosts . -.IN "XListHosts" "" "@DEF@" -.sM -.FD 0 -XHostAddress *XListHosts\^(\^\fIdisplay\fP, \fInhosts_return\fP, \fIstate_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int *\fInhosts_return\fP\^; -.br - Bool *\fIstate_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fInhosts_return\fP 1i -Returns the number of hosts currently in the access control list. -.IP \fIstate_return\fP 1i -Returns the state of the access control. -.LP -.eM -The -.PN XListHosts -function returns the current access control list as well as whether the use -of the list at connection setup was enabled or disabled. -.PN XListHosts -allows a program to find out what machines can make connections. -It also returns a pointer to a list of host structures that -were allocated by the function. -When no longer needed, -this memory should be freed by calling -.PN XFree . -.LP -.sp -To remove a single host, use -.PN XRemoveHost . -.IN "XRemoveHost" "" "@DEF@" -.sM -.FD 0 -XRemoveHost\^(\^\fIdisplay\fP, \fIhost\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XHostAddress *\fIhost\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Ho removed -.IP \fIhost\fP 1i -Specifies the host that is to be \*(Ho. -.LP -.eM -The -.PN XRemoveHost -function removes the specified host from the access control list -for that display. -The server must be on the same host as the client process, or a -.PN BadAccess -error results. -If you remove your machine from the access list, -you can no longer connect to that server, -and this operation cannot be reversed unless you reset the server. -.LP -.PN XRemoveHost -can generate -.PN BadAccess -and -.PN BadValue -errors. -.LP -.sp -To remove multiple hosts at one time, use -.PN XRemoveHosts . -.IN "XRemoveHosts" "" "@DEF@" -.sM -.FD 0 -XRemoveHosts\^(\^\fIdisplay\fP, \fIhosts\fP, \fInum_hosts\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XHostAddress *\fIhosts\fP\^; -.br - int \fInum_hosts\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Ho removed -.IP \fIhosts\fP 1i -Specifies each host that is to be \*(Ho. -.IP \fInum_hosts\fP 1i -Specifies the number of hosts. -.LP -.eM -The -.PN XRemoveHosts -function removes each specified host from the access control list for that -display. -The X server must be on the same host as the client process, or a -.PN BadAccess -error results. -If you remove your machine from the access list, -you can no longer connect to that server, -and this operation cannot be reversed unless you reset the server. -.LP -.PN XRemoveHosts -can generate -.PN BadAccess -and -.PN BadValue -errors. -.NH 3 -Changing, Enabling, or Disabling Access Control -.XS -\*(SN Changing, Enabling, or Disabling Access Control -.XE -.LP -Xlib provides functions that you can use to enable, disable, -or change access control. -.LP -For these functions to execute successfully, -the client application must reside on the same host as the X server -and/or have been given permission in the initial authorization -at connection setup. -.LP -.sp -To change access control, use -.PN XSetAccessControl . -.IN "XSetAccessControl" "" "@DEF@" -.sM -.FD 0 -XSetAccessControl\^(\^\fIdisplay\fP, \fImode\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fImode\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fImode\fP 1i -Specifies the mode. -You can pass -.PN EnableAccess -or -.PN DisableAccess . -.LP -.eM -The -.PN XSetAccessControl -function either enables or disables the use of the access control list -at each connection setup. -.LP -.PN XSetAccessControl -can generate -.PN BadAccess -and -.PN BadValue -errors. -.LP -.sp -To enable access control, use -.PN XEnableAccessControl . -.IN "XEnableAccessControl" "" "@DEF@" -.sM -.FD 0 -XEnableAccessControl\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -The -.PN XEnableAccessControl -function enables the use of the access control list at each connection setup. -.LP -.PN XEnableAccessControl -can generate a -.PN BadAccess -error. -.LP -.sp -To disable access control, use -.PN XDisableAccessControl . -.IN "XDisableAccessControl" "" "@DEF@" -.sM -.FD 0 -XDisableAccessControl\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -The -.PN XDisableAccessControl -function disables the use of the access control list at each connection setup. -.LP -.PN XDisableAccessControl -can generate a -.PN BadAccess -error. -.bp diff --git a/doc/xorg-docs/specs/X11/CH10 b/doc/xorg-docs/specs/X11/CH10 deleted file mode 100644 index 76502fb9e..000000000 --- a/doc/xorg-docs/specs/X11/CH10 +++ /dev/null @@ -1,3886 +0,0 @@ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by -.\" Digital Equipment Corporation -.\" -.\" Portions Copyright \(co 1990, 1991 by -.\" Tektronix, Inc. -.\" -.\" Permission to use, copy, modify and distribute this documentation for -.\" any purpose and without fee is hereby granted, provided that the above -.\" copyright notice appears in all copies and that both that copyright notice -.\" and this permission notice appear in all copies, and that the names of -.\" Digital and Tektronix not be used in in advertising or publicity pertaining -.\" to this documentation without specific, written prior permission. -.\" Digital and Tektronix makes no representations about the suitability -.\" of this documentation for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBChapter 10\fP\s-1 - -\s+1\fBEvents\fP\s-1 -.sp 2 -.nr H1 10 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.na -.LP -.XS -Chapter 10: Events -.XE -A client application communicates with the X server through the connection you -establish with the -.PN XOpenDisplay -.IN "XOpenDisplay" -function. -A client application sends requests to the X server over this connection. -.IN "Requests" "" "@DEF@" -These requests are made by the Xlib functions that are -called in the client application. -Many Xlib functions cause the X server to generate events, -and the user's typing or moving the pointer can generate events asynchronously. -The X server returns events to the client on the same connection. -.LP -This chapter discusses the following topics associated with events: -.IP \(bu 5 -Event types -.IP \(bu 5 -Event structures -.IP \(bu 5 -Event masks -.IP \(bu 5 -Event processing -.LP -Functions for handling events are dealt with in the next chapter. -.NH 2 -Event Types -.XS -\*(SN Event Types -.XE -.LP -.IN "Event" "types" -An event is data generated asynchronously by the X server as a result of some -device activity or as side effects of a request sent by an Xlib function. -.IN "Event" -Device-related events propagate from the source window to ancestor windows -until some client application has selected that event type -or until the event is explicitly discarded. -The X server generally sends an event to a client application -only if the client has specifically asked to be informed of that event type, -typically by setting the event-mask attribute of the window. -The mask can also be set when you create a window -or by changing the window's -event-mask. -You can also mask out events that would propagate to ancestor windows -by manipulating the -do-not-propagate mask of the window's attributes. -However, -.PN MappingNotify -events are always sent to all clients. -.IN "Input Control" -.IN "Output Control" -.LP -An event type describes a specific event generated by the X server. -For each event type, -a corresponding constant name is defined in -.hN X11/X.h , -which is used when referring to an event type. -.IN "Event" "categories" -The following table lists the event category -and its associated event type or types. -The processing associated with these events is discussed in section 10.5. -.LP -.\".CP T 1 -.\"Event Categories and Event Types -.LP -.TS H -lw(2.25i) lw(3.5i). -_ -.sp 6p -.B -Event Category Event Type -.sp 6p -_ -.sp 6p -.TH -.R -T{ -Keyboard events -T} T{ -.PN KeyPress , -.PN KeyRelease -T} -.sp 6p -T{ -Pointer events -T} T{ -.PN ButtonPress , -.PN ButtonRelease , -.PN MotionNotify -T} -.sp 6p -T{ -Window crossing events -T} T{ -.PN EnterNotify , -.PN LeaveNotify -T} -.sp 6p -T{ -Input focus events -T} T{ -.PN FocusIn , -.PN FocusOut -T} -.sp 6p -T{ -Keymap state notification event -T} T{ -.PN KeymapNotify -T} -.sp 6p -T{ -Exposure events -T} T{ -.PN Expose , -.PN GraphicsExpose , -.PN NoExpose -T} -.sp 6p -T{ -Structure control events -T} T{ -.PN CirculateRequest , -.PN ConfigureRequest , -.PN MapRequest , -.PN ResizeRequest -T} -.sp 6p -T{ -Window state notification events -T} T{ -.PN CirculateNotify , -.PN ConfigureNotify , -.PN CreateNotify , -.PN DestroyNotify , -.PN GravityNotify , -.PN MapNotify , -.PN MappingNotify , -.PN ReparentNotify , -.PN UnmapNotify , -.br -.PN VisibilityNotify -T} -.sp 6p -T{ -Colormap state notification event -T} T{ -.PN ColormapNotify -T} -.sp 6p -T{ -Client communication events -T} T{ -.PN ClientMessage , -.PN PropertyNotify , -.PN SelectionClear , -.PN SelectionNotify , -.PN SelectionRequest -T} -.sp 6p -_ -.TE -.\".LP -.\"Table 8-1 lists the event types and the Xlib functions that could cause -.\"the X server to generate that event type. -.\"The event types are listed alphabetically. -.\"Note that the error event is not listed in this table. -.\"For a list of the constants associated with an error event, see the Handling -.\"Errors section in this chapter. -.\".LP -.\".so eventtable -.NH 2 -Event Structures -.XS -\*(SN Event Structures -.XE -.LP -For each event type, -a corresponding structure is declared in -.hN X11/Xlib.h . -All the event structures have the following common members: -.LP -.IN "XAnyEvent" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; -} XAnyEvent; -.De -.LP -.eM -The type member is set to the event type constant name that uniquely identifies -it. -For example, when the X server reports a -.PN GraphicsExpose -event to a client application, it sends an -.PN XGraphicsExposeEvent -structure with the type member set to -.PN GraphicsExpose . -The display member is set to a pointer to the display the event was read on. -The send_event member is set to -.PN True -if the event came from a -.PN SendEvent -protocol request. -The serial member is set from the serial number reported in the protocol -but expanded from the 16-bit least-significant bits to a full 32-bit value. -The window member is set to the window that is most useful to toolkit -dispatchers. -.LP -The X server can send events at any time in the input stream. -Xlib stores any events received while waiting for a reply in an event queue -for later use. -Xlib also provides functions that allow you to check events -in the event queue (see section 11.3). -.LP -In addition to the individual structures declared for each event type, the -.PN XEvent -structure is a union of the individual structures declared for each event type. -Depending on the type, -you should access members of each event by using the -.PN XEvent -union. -.LP -.IN "XEvent" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef union _XEvent { - int type; /* must not be changed */ - XAnyEvent xany; - XKeyEvent xkey; - XButtonEvent xbutton; - XMotionEvent xmotion; - XCrossingEvent xcrossing; - XFocusChangeEvent xfocus; - XExposeEvent xexpose; - XGraphicsExposeEvent xgraphicsexpose; - XNoExposeEvent xnoexpose; - XVisibilityEvent xvisibility; - XCreateWindowEvent xcreatewindow; - XDestroyWindowEvent xdestroywindow; - XUnmapEvent xunmap; - XMapEvent xmap; - XMapRequestEvent xmaprequest; - XReparentEvent xreparent; - XConfigureEvent xconfigure; - XGravityEvent xgravity; - XResizeRequestEvent xresizerequest; - XConfigureRequestEvent xconfigurerequest; - XCirculateEvent xcirculate; - XCirculateRequestEvent xcirculaterequest; - XPropertyEvent xproperty; - XSelectionClearEvent xselectionclear; - XSelectionRequestEvent xselectionrequest; - XSelectionEvent xselection; - XColormapEvent xcolormap; - XClientMessageEvent xclient; - XMappingEvent xmapping; - XErrorEvent xerror; - XKeymapEvent xkeymap; - long pad[24]; -} XEvent; -.De -.LP -.eM -An -.PN XEvent -structure's first entry always is the type member, -which is set to the event type. -The second member always is the serial number of the protocol request -that generated the event. -The third member always is send_event, -which is a -.PN Bool -that indicates if the event was sent by a different client. -The fourth member always is a display, -which is the display that the event was read from. -Except for keymap events, -the fifth member always is a window, -which has been carefully selected to be useful to toolkit dispatchers. -To avoid breaking toolkits, -the order of these first five entries is not to change. -Most events also contain a time member, -which is the time at which an event occurred. -In addition, a pointer to the generic event must be cast before it -is used to access any other information in the structure. -.NH 2 -Event Masks -.XS -\*(SN Event Masks -.XE -.LP -.IN "Event mask" "" "@DEF@" -Clients select event reporting of most events relative to a window. -To do this, pass an event mask to an Xlib event-handling -function that takes an event_mask argument. -The bits of the event mask are defined in -.hN X11/X.h . -Each bit in the event mask maps to an event mask name, -which describes the event or events you want the X server to -return to a client application. -.LP -Unless the client has specifically asked for them, -most events are not reported to clients when they are generated. -Unless the client suppresses them by setting graphics-exposures in the GC to -.PN False , -.PN GraphicsExpose -and -.PN NoExpose -are reported by default as a result of -.PN XCopyPlane -and -.PN XCopyArea . -.PN SelectionClear , -.PN SelectionRequest , -.PN SelectionNotify , -or -.PN ClientMessage -cannot be masked. -Selection-related events are only sent to clients cooperating -with selections (see section 4.5). -When the keyboard or pointer mapping is changed, -.PN MappingNotify -is always sent to clients. -.LP -.\"Table 8-2 -The following table -lists the event mask constants you can pass to -the event_mask argument and -the circumstances in which you would want to specify the -event mask: -.LP -.\" .CP T 2 -.\"Event Mask Definitions -.TS H -lw(2i) lw(3.5i). -_ -.sp 6p -.B -Event Mask Circumstances -.sp 6p -_ -.sp 6p -.TH -.R -T{ -.PN NoEventMask -T} T{ -No events wanted -T} -T{ -.PN KeyPressMask -T} T{ -Keyboard down events wanted -T} -T{ -.PN KeyReleaseMask -T} T{ -Keyboard up events wanted -T} -T{ -.PN ButtonPressMask -T} T{ -Pointer button down events wanted -T} -T{ -.PN ButtonReleaseMask -T} T{ -Pointer button up events wanted -T} -T{ -.PN EnterWindowMask -T} T{ -Pointer window entry events wanted -T} -T{ -.PN LeaveWindowMask -T} T{ -Pointer window leave events wanted -T} -T{ -.PN PointerMotionMask -T} T{ -Pointer motion events wanted -T} -T{ -.PN PointerMotionHintMask -T} T{ -Pointer motion hints wanted -T} -T{ -.PN Button1MotionMask -T} T{ -Pointer motion while button 1 down -T} -T{ -.PN Button2MotionMask -T} T{ -Pointer motion while button 2 down -T} -T{ -.PN Button3MotionMask -T} T{ -Pointer motion while button 3 down -T} -T{ -.PN Button4MotionMask -T} T{ -Pointer motion while button 4 down -T} -T{ -.PN Button5MotionMask -T} T{ -Pointer motion while button 5 down -T} -T{ -.PN ButtonMotionMask -T} T{ -Pointer motion while any button down -T} -T{ -.PN KeymapStateMask -T} T{ -Keyboard state wanted at window entry and focus in -T} -T{ -.PN ExposureMask -T} T{ -Any exposure wanted -T} -T{ -.PN VisibilityChangeMask -T} T{ -Any change in visibility wanted -T} -T{ -.PN StructureNotifyMask -T} T{ -Any change in window structure wanted -T} -T{ -.PN ResizeRedirectMask -T} T{ -Redirect resize of this window -T} -T{ -.PN SubstructureNotifyMask -T} T{ -Substructure notification wanted -T} -T{ -.PN SubstructureRedirectMask -T} T{ -Redirect structure requests on children -T} -T{ -.PN FocusChangeMask -T} T{ -Any change in input focus wanted -T} -T{ -.PN PropertyChangeMask -T} T{ -Any change in property wanted -T} -T{ -.PN ColormapChangeMask -T} T{ -Any change in colormap wanted -T} -T{ -.PN OwnerGrabButtonMask -T} T{ -Automatic grabs should activate with owner_events set to -.PN True -T} -.sp 6p -_ -.TE -.LP -.NH 2 -Event Processing Overview -.XS -\*(SN Event Processing Overview -.XE -.LP -The event reported to a client application during event processing -depends on which event masks you provide as the event-mask attribute -for a window. -For some event masks, there is a one-to-one correspondence between -the event mask constant and the event type constant. -For example, if you pass the event mask -.PN ButtonPressMask , -the X server sends back only -.PN ButtonPress -events. -.IN "CurrentTime" -Most events contain a time member, -which is the time at which an event occurred. -.LP -In other cases, one event mask constant can map to several event type constants. -For example, if you pass the event mask -.PN SubstructureNotifyMask , -the X server can send back -.PN CirculateNotify , -.PN ConfigureNotify , -.PN CreateNotify , -.PN DestroyNotify , -.PN GravityNotify , -.PN MapNotify , -.PN ReparentNotify , -or -.PN UnmapNotify -events. -.LP -In another case, -two event masks can map to one event type. -For example, -if you pass either -.PN PointerMotionMask -or -.PN ButtonMotionMask , -the X server sends back -a -.PN MotionNotify -event. -.LP -The following table -lists the event mask, -its associated event type or types, -and the structure name associated with the event type. -Some of these structures actually are typedefs to a generic structure -that is shared between two event types. -Note that N.A. appears in columns for which the information is not applicable. -.LP -.ps 9 -.nr PS 9 -.TS H -lw(1.5i) lw(1i) lw(1.5i) lw(1.5i). -_ -.sp 6p -.B -Event Mask Event Type Structure Generic Structure -.sp 6p -_ -.sp 6p -.TH -.R -ButtonMotionMask MotionNotify XPointerMovedEvent XMotionEvent -Button1MotionMask -Button2MotionMask -Button3MotionMask -Button4MotionMask -Button5MotionMask -.sp 6p -ButtonPressMask ButtonPress XButtonPressedEvent XButtonEvent -.sp 6p -ButtonReleaseMask ButtonRelease XButtonReleasedEvent XButtonEvent -.sp 6p -ColormapChangeMask ColormapNotify XColormapEvent -.sp 6p -EnterWindowMask EnterNotify XEnterWindowEvent XCrossingEvent -.sp 6p -LeaveWindowMask LeaveNotify XLeaveWindowEvent XCrossingEvent -.sp 6p -ExposureMask Expose XExposeEvent -GCGraphicsExposures in GC GraphicsExpose XGraphicsExposeEvent - NoExpose XNoExposeEvent -.sp 6p -FocusChangeMask FocusIn XFocusInEvent XFocusChangeEvent - FocusOut XFocusOutEvent XFocusChangeEvent -.sp 6p -KeymapStateMask KeymapNotify XKeymapEvent -.sp 6p -KeyPressMask KeyPress XKeyPressedEvent XKeyEvent -KeyReleaseMask KeyRelease XKeyReleasedEvent XKeyEvent -.sp 6p -OwnerGrabButtonMask N.A. N.A. -.sp 6p -PointerMotionMask MotionNotify XPointerMovedEvent XMotionEvent -PointerMotionHintMask N.A. N.A. -.sp 6p -PropertyChangeMask PropertyNotify XPropertyEvent -.sp 6p -ResizeRedirectMask ResizeRequest XResizeRequestEvent -.sp 6p -StructureNotifyMask CirculateNotify XCirculateEvent - ConfigureNotify XConfigureEvent - DestroyNotify XDestroyWindowEvent - GravityNotify XGravityEvent - MapNotify XMapEvent - ReparentNotify XReparentEvent - UnmapNotify XUnmapEvent -.sp 6p -SubstructureNotifyMask CirculateNotify XCirculateEvent - ConfigureNotify XConfigureEvent - CreateNotify XCreateWindowEvent - DestroyNotify XDestroyWindowEvent - GravityNotify XGravityEvent - MapNotify XMapEvent - ReparentNotify XReparentEvent - UnmapNotify XUnmapEvent -.sp 6p -SubstructureRedirectMask CirculateRequest XCirculateRequestEvent - ConfigureRequest XConfigureRequestEvent - MapRequest XMapRequestEvent -.sp 6p -N.A. ClientMessage XClientMessageEvent -.sp 6p -N.A. MappingNotify XMappingEvent -.sp 6p -N.A. SelectionClear XSelectionClearEvent -.sp 6p -N.A. SelectionNotify XSelectionEvent -.sp 6p -N.A. SelectionRequest XSelectionRequestEvent -.sp 6p -VisibilityChangeMask VisibilityNotify XVisibilityEvent -.sp 6p -_ -.TE -.ps 11 -.nr PS 11 -.LP -The sections that follow describe the processing that occurs -when you select the different event masks. -The sections are organized according to these processing categories: -.IP \(bu 5 -Keyboard and pointer events -.IP \(bu 5 -Window crossing events -.IP \(bu 5 -Input focus events -.IP \(bu 5 -Keymap state notification events -.IP \(bu 5 -Exposure events -.IP \(bu 5 -Window state notification events -.IP \(bu 5 -Structure control events -.IP \(bu 5 -Colormap state notification events -.IP \(bu 5 -Client communication events -.NH 2 -Keyboard and Pointer Events -.XS -\*(SN Keyboard and Pointer Events -.XE -.LP -This section discusses: -.IP \(bu 5 -Pointer button events -.IP \(bu 5 -Keyboard and pointer events -.NH 3 -Pointer Button Events -.XS -\*(SN Pointer Button Events -.XE -.LP -The following describes the event processing that occurs when a pointer button -press is processed with the pointer in some window w and -when no active pointer grab is in progress. -.LP -The X server searches the ancestors of w from the root down, -looking for a passive grab to activate. -If no matching passive grab on the button exists, -the X server automatically starts an active grab for the client receiving -the event and sets the last-pointer-grab time to the current server time. -The effect is essentially equivalent to an -.PN XGrabButton -with these client passed arguments: -.TS H -lw(1.5i) lw(3.5i). -_ -.sp 6p -.B -Argument Value -.sp 6p -_ -.sp 6p -.TH -.R -T{ -\fIw\fP -T} T{ -The event window -T} -T{ -\fIevent_mask\fP -T} T{ -The client's selected pointer events on the event window -T} -T{ -\fIpointer_mode\fP -T} T{ -.PN GrabModeAsync -T} -T{ -\fIkeyboard_mode\fP -T} T{ -.PN GrabModeAsync -T} -T{ -\fIowner_events\fP -T} T{ -.PN True , -if the client has selected -.PN OwnerGrabButtonMask -on the event window, -otherwise -.PN False -T} -T{ -\fIconfine_to\fP -T} T{ -.PN None -T} -T{ -\fIcursor\fP -T} T{ -.PN None -T} -.sp 6p -_ -.TE -.LP -The active grab is automatically terminated when -the logical state of the pointer has all buttons released. -Clients can modify the active grab by calling -.PN XUngrabPointer -and -.PN XChangeActivePointerGrab . -.NH 3 -Keyboard and Pointer Events -.XS -\*(SN Keyboard and Pointer Events -.XE -.LP -.IN "Events" "ButtonPress" -.IN "Events" "ButtonRelease" -.IN "Events" "KeyPress" -.IN "Events" "KeyRelease" -.IN "Events" "MotionNotify" -This section discusses the processing that occurs for the -keyboard events -.PN KeyPress -and -.PN KeyRelease -and the pointer events -.PN ButtonPress , -.PN ButtonRelease , -and -.PN MotionNotify . -For information about the keyboard event-handling utilities, -see chapter 11. -.LP -.IN "KeyPress" "" "@DEF@" -.IN "KeyRelease" "" "@DEF@" -The X server reports -.PN KeyPress -or -.PN KeyRelease -events to clients wanting information about keys that logically change state. -Note that these events are generated for all keys, -even those mapped to modifier bits. -.IN "ButtonPress" "" "@DEF@" -.IN "ButtonRelease" "" "@DEF@" -The X server reports -.PN ButtonPress -or -.PN ButtonRelease -events to clients wanting information about buttons that logically change state. -.LP -.IN "MotionNotify" "" "@DEF@" -The X server reports -.PN MotionNotify -events to clients wanting information about when the pointer logically moves. -The X server generates this event whenever the pointer is moved -and the pointer motion begins and ends in the window. -The granularity of -.PN MotionNotify -events is not guaranteed, -but a client that selects this event type is guaranteed -to receive at least one event when the pointer moves and then rests. -.LP -The generation of the logical changes lags the physical changes -if device event processing is frozen. -.LP -To receive -.PN KeyPress , -.PN KeyRelease , -.PN ButtonPress , -and -.PN ButtonRelease -events, set -.PN KeyPressMask , -.PN KeyReleaseMask , -.PN ButtonPressMask , -and -.PN ButtonReleaseMask -bits in the event-mask attribute of the window. -.LP -To receive -.PN MotionNotify -events, set one or more of the following event -masks bits in the event-mask attribute of the window. -.IP \(bu 5 -.PN Button1MotionMask \ \- -.PN Button5MotionMask -.IP -The client application receives -.PN MotionNotify -events only when one or more of the specified buttons is pressed. -.IP \(bu 5 -.PN ButtonMotionMask -.IP -The client application receives -.PN MotionNotify -events only when at least one button is pressed. -.IP \(bu 5 -.PN PointerMotionMask -.IP -The client application receives -.PN MotionNotify -events independent of the state of -the pointer buttons. -.IP \(bu 5 -.PN PointerMotionHintMask -.IP -If -.PN PointerMotionHintMask -is selected in combination with one or more of the above masks, -the X server is free to send only one -.PN MotionNotify -event (with the is_hint member of the -.PN XPointerMovedEvent -structure set to -.PN NotifyHint ) -to the client for the event window, -until either the key or button state changes, -the pointer leaves the event window, or the client calls -.PN XQueryPointer -or -.PN XGetMotionEvents . -The server still may send -.PN MotionNotify -events without is_hint set to -.PN NotifyHint . -.LP -The source of the event is the viewable window that the pointer is in. -The window used by the X server to report these events depends on -the window's position in the window hierarchy -and whether any intervening window prohibits the generation of these events. -Starting with the source window, -the X server searches up the window hierarchy until it locates the first -window specified by a client as having an interest in these events. -If one of the intervening windows has its do-not-propagate-mask -set to prohibit generation of the event type, -the events of those types will be suppressed. -Clients can modify the actual window used for reporting by performing -active grabs and, in the case of keyboard events, by using the focus window. -.LP -The structures for these event types contain: -.LP -.IN "XButtonEvent" "" "@DEF@" -.IN "XButtonPressedEvent" "" "@DEF@" -.IN "XButtonReleasedEvent" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* ButtonPress or ButtonRelease */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; /* ``event'' window it is reported relative to */ - Window root; /* root window that the event occurred on */ - Window subwindow; /* child window */ - Time time; /* milliseconds */ - int x, y; /* pointer x, y coordinates in event window */ - int x_root, y_root; /* coordinates relative to root */ - unsigned int state; /* key or button mask */ - unsigned int button; /* detail */ - Bool same_screen; /* same screen flag */ -} XButtonEvent; -typedef XButtonEvent XButtonPressedEvent; -typedef XButtonEvent XButtonReleasedEvent; -.De -.LP -.IN "XKeyEvent" "" "@DEF@" -.IN "XKeyPressedEvent" "" "@DEF@" -.IN "XKeyReleasedEvent" "" "@DEF@" -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* KeyPress or KeyRelease */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; /* ``event'' window it is reported relative to */ - Window root; /* root window that the event occurred on */ - Window subwindow; /* child window */ - Time time; /* milliseconds */ - int x, y; /* pointer x, y coordinates in event window */ - int x_root, y_root; /* coordinates relative to root */ - unsigned int state; /* key or button mask */ - unsigned int keycode; /* detail */ - Bool same_screen; /* same screen flag */ -} XKeyEvent; -typedef XKeyEvent XKeyPressedEvent; -typedef XKeyEvent XKeyReleasedEvent; -.De -.LP -.IN "XMotionEvent" "" "@DEF@" -.IN "XPointerMovedEvent" "" "@DEF@" -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* MotionNotify */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; /* ``event'' window reported relative to */ - Window root; /* root window that the event occurred on */ - Window subwindow; /* child window */ - Time time; /* milliseconds */ - int x, y; /* pointer x, y coordinates in event window */ - int x_root, y_root; /* coordinates relative to root */ - unsigned int state; /* key or button mask */ - char is_hint; /* detail */ - Bool same_screen; /* same screen flag */ -} XMotionEvent; -typedef XMotionEvent XPointerMovedEvent; -.De -.LP -.eM -These structures have the following common members: -window, root, subwindow, time, x, y, x_root, y_root, state, and same_screen. -The window member is set to the window on which the -event was generated and is referred to as the event window. -As long as the conditions previously discussed are met, -this is the window used by the X server to report the event. -The root member is set to the source window's root window. -The x_root and y_root members are set to the pointer's coordinates -relative to the root window's origin at the time of the event. -.LP -The same_screen member is set to indicate whether the event -window is on the same screen -as the root window and can be either -.PN True -or -.PN False . -If -.PN True , -the event and root windows are on the same screen. -If -.PN False , -the event and root windows are not on the same screen. -.LP -If the source window is an inferior of the event window, -the subwindow member of the structure is set to the child of the event window -that is the source window or the child of the event window that is -an ancestor of the source window. -Otherwise, the X server sets the subwindow member to -.PN None . -The time member is set to the time when the event was generated -and is expressed in milliseconds. -.LP -If the event window is on the same screen as the root window, -the x and y members -are set to the coordinates relative to the event window's origin. -Otherwise, these members are set to zero. -.LP -The state member is set to indicate the logical state of the pointer buttons -and modifier keys just prior to the event, -which is the bitwise inclusive OR of one or more of the -button or modifier key masks: -.PN Button1Mask , -.PN Button2Mask , -.PN Button3Mask , -.PN Button4Mask , -.PN Button5Mask , -.PN ShiftMask , -.PN LockMask , -.PN ControlMask , -.PN Mod1Mask , -.PN Mod2Mask , -.PN Mod3Mask , -.PN Mod4Mask , -and -.PN Mod5Mask . -.LP -Each of these structures also has a member that indicates the detail. -For the -.PN XKeyPressedEvent -and -.PN XKeyReleasedEvent -structures, this member is called a keycode. -It is set to a number that represents a physical key on the keyboard. -The keycode is an arbitrary representation for any key on the keyboard -(see sections 12.7 and 16.1). -.LP -For the -.PN XButtonPressedEvent -and -.PN XButtonReleasedEvent -structures, this member is called button. -It represents the pointer button that changed state and can be the -.PN Button1 , -.PN Button2 , -.PN Button3 , -.PN Button4 , -or -.PN Button5 -value. -For the -.PN XPointerMovedEvent -structure, this member is called is_hint. -It can be set to -.PN NotifyNormal -or -.PN NotifyHint . -.LP -Some of the symbols mentioned in this section have fixed values, as -follows: -.TS H -lw(2i) lw(3.5i). -_ -.sp 6p -.B -Symbol Value -.sp 6p -_ -.sp 6p -.TH -.R -T{ -.PN Button1MotionMask -T} T{ -(1L<<8) -T} -T{ -.PN Button2MotionMask -T} T{ -(1L<<9) -T} -T{ -.PN Button3MotionMask -T} T{ -(1L<<10) -T} -T{ -.PN Button4MotionMask -T} T{ -(1L<<11) -T} -T{ -.PN Button5MotionMask -T} T{ -(1L<<12) -T} -T{ -.PN Button1Mask -T} T{ -(1<<8) -T} -T{ -.PN Button2Mask -T} T{ -(1<<9) -T} -T{ -.PN Button3Mask -T} T{ -(1<<10) -T} -T{ -.PN Button4Mask -T} T{ -(1<<11) -T} -T{ -.PN Button5Mask -T} T{ -(1<<12) -T} -T{ -.PN ShiftMask -T} T{ -(1<<0) -T} -T{ -.PN LockMask -T} T{ -(1<<1) -T} -T{ -.PN ControlMask -T} T{ -(1<<2) -T} -T{ -.PN Mod1Mask -T} T{ -(1<<3) -T} -T{ -.PN Mod2Mask -T} T{ -(1<<4) -T} -T{ -.PN Mod3Mask -T} T{ -(1<<5) -T} -T{ -.PN Mod4Mask -T} T{ -(1<<6) -T} -T{ -.PN Mod5Mask -T} T{ -(1<<7) -T} -T{ -.PN Button1 -T} T{ -1 -T} -T{ -.PN Button2 -T} T{ -2 -T} -T{ -.PN Button3 -T} T{ -3 -T} -T{ -.PN Button4 -T} T{ -4 -T} -T{ -.PN Button5 -T} T{ -5 -T} -.sp 6p -_ -.TE -.NH 2 -Window Entry/Exit Events -.XS -\*(SN Window Entry/Exit Events -.XE -.LP -.IN "Events" "EnterNotify" -.IN "Events" "LeaveNotify" -This section describes the processing that -occurs for the window crossing events -.PN EnterNotify -and -.PN LeaveNotify . -.IN "EnterNotify" "" "@DEF@" -.IN "LeaveNotify" "" "@DEF@" -If a pointer motion or a window hierarchy change causes the -pointer to be in a different window than before, the X server reports -.PN EnterNotify -or -.PN LeaveNotify -events to clients who have selected for these events. -All -.PN EnterNotify -and -.PN LeaveNotify -events caused by a hierarchy change are -generated after any hierarchy event -.Pn ( UnmapNotify , -.PN MapNotify , -.PN ConfigureNotify , -.PN GravityNotify , -.PN CirculateNotify ) -caused by that change; -however, the X protocol does not constrain the ordering of -.PN EnterNotify -and -.PN LeaveNotify -events with respect to -.PN FocusOut , -.PN VisibilityNotify , -and -.PN Expose -events. -.LP -This contrasts with -.PN MotionNotify -events, which are also generated when the pointer moves -but only when the pointer motion begins and ends in a single window. -An -.PN EnterNotify -or -.PN LeaveNotify -event also can be generated when some client application calls -.PN XGrabPointer -and -.PN XUngrabPointer . -.LP -To receive -.PN EnterNotify -or -.PN LeaveNotify -events, set the -.PN EnterWindowMask -or -.PN LeaveWindowMask -bits of the event-mask attribute of the window. -.LP -The structure for these event types contains: -.LP -.IN "XCrossingEvent" "" "@DEF@" -.IN "XEnterWindowEvent" "" "@DEF@" -.IN "XLeaveWindowEvent" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* EnterNotify or LeaveNotify */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; /* ``event'' window reported relative to */ - Window root; /* root window that the event occurred on */ - Window subwindow; /* child window */ - Time time; /* milliseconds */ - int x, y; /* pointer x, y coordinates in event window */ - int x_root, y_root; /* coordinates relative to root */ - int mode; /* NotifyNormal, NotifyGrab, NotifyUngrab */ - int detail; - /* - * NotifyAncestor, NotifyVirtual, NotifyInferior, - * NotifyNonlinear,NotifyNonlinearVirtual - */ - Bool same_screen; /* same screen flag */ - Bool focus; /* boolean focus */ - unsigned int state; /* key or button mask */ -} XCrossingEvent; -typedef XCrossingEvent XEnterWindowEvent; -typedef XCrossingEvent XLeaveWindowEvent; -.De -.LP -.eM -The window member is set to the window on which the -.PN EnterNotify -or -.PN LeaveNotify -event was generated and is referred to as the event window. -This is the window used by the X server to report the event, -and is relative to the root -window on which the event occurred. -The root member is set to the root window of the screen -on which the event occurred. -.LP -For a -.PN LeaveNotify -event, -if a child of the event window contains the initial position of the pointer, -the subwindow component is set to that child. -Otherwise, the X server sets the subwindow member to -.PN None . -For an -.PN EnterNotify -event, if a child of the event window contains the final pointer position, -the subwindow component is set to that child or -.PN None . -.LP -The time member is set to the time when the event was generated -and is expressed in milliseconds. -The x and y members are set to the coordinates of the pointer position in -the event window. -This position is always the pointer's final position, -not its initial position. -If the event window is on the same -screen as the root window, x and y are the pointer coordinates -relative to the event window's origin. -Otherwise, x and y are set to zero. -The x_root and y_root members are set to the pointer's coordinates relative to the -root window's origin at the time of the event. -.LP -The same_screen member is set to indicate whether the event window is on the same screen -as the root window and can be either -.PN True -or -.PN False . -If -.PN True , -the event and root windows are on the same screen. -If -.PN False , -the event and root windows are not on the same screen. -.LP -The focus member is set to indicate whether the event window is the focus window or an -inferior of the focus window. -The X server can set this member to either -.PN True -or -.PN False . -If -.PN True , -the event window is the focus window or an inferior of the focus window. -If -.PN False , -the event window is not the focus window or an inferior of the focus window. -.LP -The state member is set to indicate the state of the pointer buttons and -modifier keys just prior to the -event. -The X server can set this member to the bitwise inclusive OR of one -or more of the button or modifier key masks: -.PN Button1Mask , -.PN Button2Mask , -.PN Button3Mask , -.PN Button4Mask , -.PN Button5Mask , -.PN ShiftMask , -.PN LockMask , -.PN ControlMask , -.PN Mod1Mask , -.PN Mod2Mask , -.PN Mod3Mask , -.PN Mod4Mask , -.PN Mod5Mask . -.LP -The mode member is set to indicate whether the events are normal events, -pseudo-motion events -when a grab activates, or pseudo-motion events when a grab deactivates. -The X server can set this member to -.PN NotifyNormal , -.PN NotifyGrab , -or -.PN NotifyUngrab . -.LP -The detail member is set to indicate the notify detail and can be -.PN NotifyAncestor , -.PN NotifyVirtual , -.PN NotifyInferior , -.PN NotifyNonlinear , -or -.PN NotifyNonlinearVirtual . -.NH 3 -Normal Entry/Exit Events -.XS -\*(SN Normal Entry/Exit Events -.XE -.LP -.PN EnterNotify -and -.PN LeaveNotify -events are generated when the pointer moves from -one window to another window. -Normal events are identified by -.PN XEnterWindowEvent -or -.PN XLeaveWindowEvent -structures whose mode member is set to -.PN NotifyNormal . -.IP \(bu 5 -When the pointer moves from window A to window B and A is an inferior of B, -the X server does the following: -.RS -.IP \- 5 -It generates a -.PN LeaveNotify -event on window A, with the detail member of the -.PN XLeaveWindowEvent -structure set to -.PN NotifyAncestor . -.IP \- 5 -It generates a -.PN LeaveNotify -event on each window between window A and window B, exclusive, -with the detail member of each -.PN XLeaveWindowEvent -structure set to -.PN NotifyVirtual . -.IP \- 5 -It generates an -.PN EnterNotify -event on window B, with the detail member of the -.PN XEnterWindowEvent -structure set to -.PN NotifyInferior . -.RE -.IP \(bu 5 -When the pointer moves from window A to window B and B is an inferior of A, -the X server does the following: -.RS -.IP \- 5 -It generates a -.PN LeaveNotify -event on window A, -with the detail member of the -.PN XLeaveWindowEvent -structure set to -.PN NotifyInferior . -.IP \- 5 -It generates an -.PN EnterNotify -event on each window between window A and window B, exclusive, with the -detail member of each -.PN XEnterWindowEvent -structure set to -.PN NotifyVirtual . -.IP \- 5 -It generates an -.PN EnterNotify -event on window B, with the detail member of the -.PN XEnterWindowEvent -structure set to -.PN NotifyAncestor . -.RE -.IP \(bu 5 -When the pointer moves from window A to window B -and window C is their least common ancestor, -the X server does the following: -.RS -.IP \- 5 -It generates a -.PN LeaveNotify -event on window A, -with the detail member of the -.PN XLeaveWindowEvent -structure set to -.PN NotifyNonlinear . -.IP \- 5 -It generates a -.PN LeaveNotify -event on each window between window A and window C, exclusive, -with the detail member of each -.PN XLeaveWindowEvent -structure set to -.PN NotifyNonlinearVirtual . -.IP \- 5 -It generates an -.PN EnterNotify -event on each window between window C and window B, exclusive, -with the detail member of each -.PN XEnterWindowEvent -structure set to -.PN NotifyNonlinearVirtual . -.IP \- 5 -It generates an -.PN EnterNotify -event on window B, with the detail member of the -.PN XEnterWindowEvent -structure set to -.PN NotifyNonlinear . -.RE -.IP \(bu 5 -When the pointer moves from window A to window B on different screens, -the X server does the following: -.RS -.IP \- 5 -It generates a -.PN LeaveNotify -event on window A, -with the detail member of the -.PN XLeaveWindowEvent -structure set to -.PN NotifyNonlinear . -.IP \- 5 -If window A is not a root window, -it generates a -.PN LeaveNotify -event on each window above window A up to and including its root, -with the detail member of each -.PN XLeaveWindowEvent -structure set to -.PN NotifyNonlinearVirtual . -.IP \- 5 -If window B is not a root window, -it generates an -.PN EnterNotify -event on each window from window B's root down to but not including -window B, with the detail member of each -.PN XEnterWindowEvent -structure set to -.PN NotifyNonlinearVirtual . -.IP \- 5 -It generates an -.PN EnterNotify -event on window B, with the detail member of the -.PN XEnterWindowEvent -structure set to -.PN NotifyNonlinear . -.RE -.\".SH 3 -.NH 3 -Grab and Ungrab Entry/Exit Events -.XS -\*(SN Grab and Ungrab Entry/Exit Events -.XE -.LP -Pseudo-motion mode -.PN EnterNotify -and -.PN LeaveNotify -events are generated when a pointer grab activates or deactivates. -Events in which the pointer grab activates -are identified by -.PN XEnterWindowEvent -or -.PN XLeaveWindowEvent -structures whose mode member is set to -.PN NotifyGrab . -Events in which the pointer grab deactivates -are identified by -.PN XEnterWindowEvent -or -.PN XLeaveWindowEvent -structures whose mode member is set to -.PN NotifyUngrab -(see -.PN XGrabPointer ). -.IP \(bu 5 -When a pointer grab activates after any initial warp into a confine_to -window and before generating any actual -.PN ButtonPress -event that activates the grab, -G is the grab_window for the grab, -and P is the window the pointer is in, -the X server does the following: -.RS -.IP \- 5 -It generates -.PN EnterNotify -and -.PN LeaveNotify -events (see section 10.6.1) -with the mode members of the -.PN XEnterWindowEvent -and -.PN XLeaveWindowEvent -structures set to -.PN NotifyGrab . -These events are generated -as if the pointer were to suddenly warp from -its current position in P to some position in G. -However, the pointer does not warp, and the X server uses the pointer position -as both the initial and final positions for the events. -.RE -.IP \(bu 5 -When a pointer grab deactivates after generating any actual -.PN ButtonRelease -event that deactivates the grab, -G is the grab_window for the grab, -and P is the window the pointer is in, -the X server does the following: -.RS -.IP \- 5 -It generates -.PN EnterNotify -and -.PN LeaveNotify -events (see section 10.6.1) -with the mode members of the -.PN XEnterWindowEvent -and -.PN XLeaveWindowEvent -structures set to -.PN NotifyUngrab . -These events are generated as if the pointer were to suddenly warp from -some position in G to its current position in P. -However, the pointer does not warp, and the X server uses the -current pointer position as both the -initial and final positions for the events. -.RE -.NH 2 -Input Focus Events -.XS -\*(SN Input Focus Events -.XE -.LP -.IN "Events" "FocusIn" -.IN "Events" "FocusOut" -This section describes the processing that occurs for the input focus events -.PN FocusIn -and -.PN FocusOut . -.IN "FocusIn" "" "@DEF@" -.IN "FocusOut" "" "@DEF@" -The X server can report -.PN FocusIn -or -.PN FocusOut -events to clients wanting information about when the input focus changes. -The keyboard is always attached to some window -(typically, the root window or a top-level window), -which is called the focus window. -The focus window and the position of the pointer determine the window that -receives keyboard input. -Clients may need to know when the input focus changes -to control highlighting of areas on the screen. -.LP -To receive -.PN FocusIn -or -.PN FocusOut -events, set the -.PN FocusChangeMask -bit in the event-mask attribute of the window. -.LP -The structure for these event types contains: -.LP -.IN "XFocusChangeEvent" "" "@DEF@" -.IN "XFocusInEvent" "" "@DEF@" -.IN "XFocusOutEvent" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* FocusIn or FocusOut */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; /* window of event */ - int mode; /* NotifyNormal, NotifyGrab, NotifyUngrab */ - int detail; - /* - * NotifyAncestor, NotifyVirtual, NotifyInferior, - * NotifyNonlinear,NotifyNonlinearVirtual, NotifyPointer, - * NotifyPointerRoot, NotifyDetailNone - */ -} XFocusChangeEvent; -typedef XFocusChangeEvent XFocusInEvent; -typedef XFocusChangeEvent XFocusOutEvent; -.De -.LP -.eM -The window member is set to the window on which the -.PN FocusIn -or -.PN FocusOut -event was generated. -This is the window used by the X server to report the event. -The mode member is set to indicate whether the focus events -are normal focus events, -focus events while grabbed, -focus events -when a grab activates, or focus events when a grab deactivates. -The X server can set the mode member to -.PN NotifyNormal , -.PN NotifyWhileGrabbed , -.PN NotifyGrab , -or -.PN NotifyUngrab . -.LP -All -.PN FocusOut -events caused by a window unmap are generated after any -.PN UnmapNotify -event; however, the X protocol does not constrain the ordering of -.PN FocusOut -events with respect to -generated -.PN EnterNotify , -.PN LeaveNotify , -.PN VisibilityNotify , -and -.PN Expose -events. -.LP -Depending on the event mode, -the detail member is set to indicate the notify detail and can be -.PN NotifyAncestor , -.PN NotifyVirtual , -.PN NotifyInferior , -.PN NotifyNonlinear , -.PN NotifyNonlinearVirtual , -.PN NotifyPointer , -.PN NotifyPointerRoot , -or -.PN NotifyDetailNone . -.NH 3 -Normal Focus Events and Focus Events While Grabbed -.XS -\*(SN Normal Focus Events and Focus Events While Grabbed -.XE -.LP -Normal focus events are identified by -.PN XFocusInEvent -or -.PN XFocusOutEvent -structures whose mode member is set to -.PN NotifyNormal . -Focus events while grabbed are identified by -.PN XFocusInEvent -or -.PN XFocusOutEvent -structures whose mode member is set to -.PN NotifyWhileGrabbed . -The X server processes normal focus and focus events while grabbed according to -the following: -.IP \(bu 5 -When the focus moves from window A to window B, A is an inferior of B, -and the pointer is in window P, -the X server does the following: -.RS -.IP \- 5 -It generates a -.PN FocusOut -event on window A, with the detail member of the -.PN XFocusOutEvent -structure set to -.PN NotifyAncestor . -.IP \- 5 -It generates a -.PN FocusOut -event on each window between window A and window B, exclusive, -with the detail member of each -.PN XFocusOutEvent -structure set to -.PN NotifyVirtual . -.IP \- 5 -It generates a -.PN FocusIn -event on window B, with the detail member of the -.PN XFocusOutEvent -structure set to -.PN NotifyInferior . -.IP \- 5 -If window P is an inferior of window B -but window P is not window A or an inferior or ancestor of window A, -it generates a -.PN FocusIn -event on each window below window B, down to and including window P, -with the detail member of each -.PN XFocusInEvent -structure set to -.PN NotifyPointer . -.RE -.IP \(bu 5 -When the focus moves from window A to window B, B is an inferior of A, -and the pointer is in window P, -the X server does the following: -.RS -.IP \- 5 -If window P is an inferior of window A -but P is not an inferior of window B or an ancestor of B, -it generates a -.PN FocusOut -event on each window from window P up to but not including window A, -with the detail member of each -.PN XFocusOutEvent -structure set to -.PN NotifyPointer . -.IP \- 5 -It generates a -.PN FocusOut -event on window A, -with the detail member of the -.PN XFocusOutEvent -structure set to -.PN NotifyInferior . -.IP \- 5 -It generates a -.PN FocusIn -event on each window between window A and window B, exclusive, with the -detail member of each -.PN XFocusInEvent -structure set to -.PN NotifyVirtual . -.IP \- 5 -It generates a -.PN FocusIn -event on window B, with the detail member of the -.PN XFocusInEvent -structure set to -.PN NotifyAncestor . -.RE -.IP \(bu 5 -When the focus moves from window A to window B, -window C is their least common ancestor, -and the pointer is in window P, -the X server does the following: -.RS -.IP \- 5 -If window P is an inferior of window A, -it generates a -.PN FocusOut -event on each window from window P up to but not including window A, -with the detail member of the -.PN XFocusOutEvent -structure set to -.PN NotifyPointer . -.IP \- 5 -It generates a -.PN FocusOut -event on window A, -with the detail member of the -.PN XFocusOutEvent -structure set to -.PN NotifyNonlinear . -.IP \- 5 -It generates a -.PN FocusOut -event on each window between window A and window C, exclusive, -with the detail member of each -.PN XFocusOutEvent -structure set to -.PN NotifyNonlinearVirtual . -.IP \- 5 -It generates a -.PN FocusIn -event on each window between C and B, exclusive, -with the detail member of each -.PN XFocusInEvent -structure set to -.PN NotifyNonlinearVirtual . -.IP \- 5 -It generates a -.PN FocusIn -event on window B, with the detail member of the -.PN XFocusInEvent -structure set to -.PN NotifyNonlinear . -.IP \- 5 -If window P is an inferior of window B, it generates a -.PN FocusIn -event on each window below window B down to and including window P, -with the detail member of the -.PN XFocusInEvent -structure set to -.PN NotifyPointer . -.RE -.IP \(bu 5 -When the focus moves from window A to window B on different screens -and the pointer is in window P, -the X server does the following: -.RS -.IP \- 5 -If window P is an inferior of window A, it generates a -.PN FocusOut -event on each window from window P up to but not including window A, -with the detail member of each -.PN XFocusOutEvent -structure set to -.PN NotifyPointer . -.IP \- 5 -It generates a -.PN FocusOut -event on window A, -with the detail member of the -.PN XFocusOutEvent -structure set to -.PN NotifyNonlinear . -.IP \- 5 -If window A is not a root window, -it generates a -.PN FocusOut -event on each window above window A up to and including its root, -with the detail member of each -.PN XFocusOutEvent -structure set to -.PN NotifyNonlinearVirtual . -.IP \- 5 -If window B is not a root window, -it generates a -.PN FocusIn -event on each window from window B's root down to but not including -window B, with the detail member of each -.PN XFocusInEvent -structure set to -.PN NotifyNonlinearVirtual . -.IP \- 5 -It generates a -.PN FocusIn -event on window B, with the detail member of each -.PN XFocusInEvent -structure set to -.PN NotifyNonlinear . -.IP \- 5 -If window P is an inferior of window B, it generates a -.PN FocusIn -event on each window below window B down to and including window P, -with the detail member of each -.PN XFocusInEvent -structure set to -.PN NotifyPointer . -.RE -.IP \(bu 5 -When the focus moves from window A to -.PN PointerRoot -(events sent to the window under the pointer) -or -.PN None -(discard), and the pointer is in window P, -the X server does the following: -.RS -.IP \- 5 -If window P is an inferior of window A, it generates a -.PN FocusOut -event on each window from window P up to but not including window A, -with the detail member of each -.PN XFocusOutEvent -structure set to -.PN NotifyPointer . -.IP \- 5 -It generates a -.PN FocusOut -event on window A, with the detail member of the -.PN XFocusOutEvent -structure set to -.PN NotifyNonlinear . -.IP \- 5 -If window A is not a root window, -it generates a -.PN FocusOut -event on each window above window A up to and including its root, -with the detail member of each -.PN XFocusOutEvent -structure set to -.PN NotifyNonlinearVirtual . -.IP \- 5 -It generates a -.PN FocusIn -event on the root window of all screens, with the detail member of each -.PN XFocusInEvent -structure set to -.PN NotifyPointerRoot -(or -.PN NotifyDetailNone ). -.IP \- 5 -If the new focus is -.PN PointerRoot , -it generates a -.PN FocusIn -event on each window from window P's root down to and including window P, -with the detail member of each -.PN XFocusInEvent -structure set to -.PN NotifyPointer . -.RE -.IP \(bu 5 -When the focus moves from -.PN PointerRoot -(events sent to the window under the pointer) -or -.PN None -to window A, and the pointer is in window P, -the X server does the following: -.RS -.IP \- 5 -If the old focus is -.PN PointerRoot , -it generates a -.PN FocusOut -event on each window from window P up to and including window P's root, -with the detail member of each -.PN XFocusOutEvent -structure set to -.PN NotifyPointer . -.IP \- 5 -It generates a -.PN FocusOut -event on all root windows, -with the detail member of each -.PN XFocusOutEvent -structure set to -.PN NotifyPointerRoot -(or -.PN NotifyDetailNone ). -.IP \- 5 -If window A is not a root window, -it generates a -.PN FocusIn -event on each window from window A's root down to but not including window A, -with the detail member of each -.PN XFocusInEvent -structure set to -.PN NotifyNonlinearVirtual . -.IP \- 5 -It generates a -.PN FocusIn -event on window A, -with the detail member of the -.PN XFocusInEvent -structure set to -.PN NotifyNonlinear . -.IP \- 5 -If window P is an inferior of window A, it generates a -.PN FocusIn -event on each window below window A down to and including window P, -with the detail member of each -.PN XFocusInEvent -structure set to -.PN NotifyPointer . -.RE -.IP \(bu 5 -When the focus moves from -.PN PointerRoot -(events sent to the window under the pointer) -to -.PN None -(or vice versa), and the pointer is in window P, -the X server does the following: -.RS -.IP \- 5 -If the old focus is -.PN PointerRoot , -it generates a -.PN FocusOut -event on each window from window P up to and including window P's root, -with the detail member of each -.PN XFocusOutEvent -structure set to -.PN NotifyPointer . -.IP \- 5 -It generates a -.PN FocusOut -event on all root windows, -with the detail member of each -.PN XFocusOutEvent -structure set to either -.PN NotifyPointerRoot -or -.PN NotifyDetailNone . -.IP \- 5 -It generates a -.PN FocusIn -event on all root windows, -with the detail member of each -.PN XFocusInEvent -structure set to -.PN NotifyDetailNone -or -.PN NotifyPointerRoot . -.IP \- 5 -If the new focus is -.PN PointerRoot , -it generates a -.PN FocusIn -event on each window from window P's root down to and including window P, -with the detail member of each -.PN XFocusInEvent -structure set to -.PN NotifyPointer . -.RE -.\".SH 3 -.NH 3 -Focus Events Generated by Grabs -.XS -\*(SN Focus Events Generated by Grabs -.XE -.LP -Focus events in which the keyboard grab activates -are identified by -.PN XFocusInEvent -or -.PN XFocusOutEvent -structures whose mode member is set to -.PN NotifyGrab . -Focus events in which the keyboard grab deactivates -are identified by -.PN XFocusInEvent -or -.PN XFocusOutEvent -structures whose mode member is set to -.PN NotifyUngrab -(see -.PN XGrabKeyboard ). -.IP \(bu 5 -When a keyboard grab activates before generating any actual -.PN KeyPress -event that activates the grab, -G is the grab_window, and F is the current focus, -the X server does the following: -.RS -.IP \- 5 -It generates -.PN FocusIn -and -.PN FocusOut -events, with the mode members of the -.PN XFocusInEvent -and -.PN XFocusOutEvent -structures set to -.PN NotifyGrab . -These events are generated -as if the focus were to change from -F to G. -.RE -.IP \(bu 5 -When a keyboard grab deactivates after generating any actual -.PN KeyRelease -event that deactivates the grab, -G is the grab_window, and F is the current focus, -the X server does the following: -.RS -.IP \- 5 -It generates -.PN FocusIn -and -.PN FocusOut -events, with the mode members of the -.PN XFocusInEvent -and -.PN XFocusOutEvent -structures set to -.PN NotifyUngrab . -These events are generated -as if the focus were to change from -G to F. -.RE -.NH 2 -Key Map State Notification Events -.XS -\*(SN Key Map State Notification Events -.XE -.LP -.IN "Events" "KeymapNotify" -.IN "KeymapNotify" "" "@DEF@" -The X server can report -.PN KeymapNotify -events to clients that want information about changes in their keyboard state. -.LP -To receive -.PN KeymapNotify -events, set the -.PN KeymapStateMask -bit in the event-mask attribute of the window. -The X server generates this event immediately after every -.PN EnterNotify -and -.PN FocusIn -event. -.LP -The structure for this event type contains: -.LP -.IN "XKeymapEvent" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -/* generated on EnterWindow and FocusIn when KeymapState selected */ -typedef struct { - int type; /* KeymapNotify */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; - char key_vector[32]; -} XKeymapEvent; -.De -.LP -.eM -The window member is not used but is present to aid some toolkits. -The key_vector member is set to the bit vector of the keyboard. -Each bit set to 1 indicates that the corresponding key -is currently pressed. -The vector is represented as 32 bytes. -Byte N (from 0) contains the bits for keys 8N to 8N + 7 -with the least significant bit in the byte representing key 8N. -.NH 2 -Exposure Events -.XS -\*(SN Exposure Events -.XE -.LP -The X protocol does not guarantee to preserve the contents of window -regions when -the windows are obscured or reconfigured. -Some implementations may preserve the contents of windows. -Other implementations are free to destroy the contents of windows -when exposed. -X expects client applications to assume the responsibility for -restoring the contents of an exposed window region. -(An exposed window region describes a formerly obscured window whose -region becomes visible.) -Therefore, the X server sends -.PN Expose -events describing the window and the region of the window that has been exposed. -A naive client application usually redraws the entire window. -A more sophisticated client application redraws only the exposed region. -.NH 3 -Expose Events -.XS -\*(SN Expose Events -.XE -.LP -.IN "Events" "Expose" -.IN "Expose" "" "@DEF@" -The X server can report -.PN Expose -events to clients wanting information about when the contents of window regions -have been lost. -The circumstances in which the X server generates -.PN Expose -events are not as definite as those for other events. -However, the X server never generates -.PN Expose -events on windows whose class you specified as -.PN InputOnly . -The X server can generate -.PN Expose -events when no valid contents are available for regions of a window -and either the regions are visible, -the regions are viewable and the server is (perhaps newly) maintaining -backing store on the window, -or the window is not viewable but the server is (perhaps newly) honoring the -window's backing-store attribute of -.PN Always -or -.PN WhenMapped . -The regions decompose into an (arbitrary) set of rectangles, -and an -.PN Expose -event is generated for each rectangle. -For any given window, -the X server guarantees to report contiguously -all of the regions exposed by some action that causes -.PN Expose -events, such as raising a window. -.LP -To receive -.PN Expose -events, set the -.PN ExposureMask -bit in the event-mask attribute of the window. -.LP -The structure for this event type contains: -.LP -.IN "XExposeEvent" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* Expose */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; - int x, y; - int width, height; - int count; /* if nonzero, at least this many more */ -} XExposeEvent; -.De -.LP -.eM -The window member is set to the exposed (damaged) window. -The x and y members are set to the coordinates relative to the window's origin -and indicate the upper-left corner of the rectangle. -The width and height members are set to the size (extent) of the rectangle. -The count member is set to the number of -.PN Expose -events that are to follow. -If count is zero, no more -.PN Expose -events follow for this window. -However, if count is nonzero, at least that number of -.PN Expose -events (and possibly more) follow for this window. -Simple applications that do not want to optimize redisplay by distinguishing -between subareas of its window can just ignore all -.PN Expose -events with nonzero counts and perform full redisplays -on events with zero counts. -.NH 3 -GraphicsExpose and NoExpose Events -.XS -\*(SN GraphicsExpose and NoExpose Events -.XE -.LP -.IN "Events" "GraphicsExpose" -.IN "Events" "NoExpose" -.IN "GraphicsExpose" "" "@DEF@" -The X server can report -.PN GraphicsExpose -events to clients wanting information about when a destination region could not -be computed during certain graphics requests: -.PN XCopyArea -or -.PN XCopyPlane . -The X server generates this event whenever a destination region could not be -computed because of an obscured or out-of-bounds source region. -In addition, the X server guarantees to report contiguously all of the regions exposed by -some graphics request -(for example, copying an area of a drawable to a destination -drawable). -.LP -.IN "NoExpose" "" "@DEF@" -The X server generates a -.PN NoExpose -event whenever a graphics request that might -produce a -.PN GraphicsExpose -event does not produce any. -In other words, the client is really asking for a -.PN GraphicsExpose -event but instead receives a -.PN NoExpose -event. -.LP -To receive -.PN GraphicsExpose -or -.PN NoExpose -events, you must first set the graphics-exposure -attribute of the graphics context to -.PN True . -You also can set the graphics-expose attribute when creating a graphics -context using -.PN XCreateGC -or by calling -.PN XSetGraphicsExposures . -.LP -The structures for these event types contain: -.LP -.IN "XGraphicsExposeEvent" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* GraphicsExpose */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Drawable drawable; - int x, y; - int width, height; - int count; /* if nonzero, at least this many more */ - int major_code; /* core is CopyArea or CopyPlane */ - int minor_code; /* not defined in the core */ -} XGraphicsExposeEvent; -.De -.LP -.IN "XNoExposeEvent" "" "@DEF@" -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* NoExpose */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Drawable drawable; - int major_code; /* core is CopyArea or CopyPlane */ - int minor_code; /* not defined in the core */ -} XNoExposeEvent; -.De -.LP -.eM -Both structures have these common members: drawable, major_code, and minor_code. -The drawable member is set to the drawable of the destination region on -which the graphics request was to be performed. -The major_code member is set to the graphics request initiated by the client -and can be either -.PN X_CopyArea -or -.PN X_CopyPlane . -If it is -.PN X_CopyArea , -a call to -.PN XCopyArea -initiated the request. -If it is -.PN X_CopyPlane , -a call to -.PN XCopyPlane -initiated the request. -These constants are defined in -.hN X11/Xproto.h . -The minor_code member, -like the major_code member, -indicates which graphics request was initiated by -the client. -However, the minor_code member is not defined by the core -X protocol and will be zero in these cases, -although it may be used by an extension. -.LP -The -.PN XGraphicsExposeEvent -structure has these additional members: x, y, width, height, and count. -The x and y members are set to the coordinates relative to the drawable's origin -and indicate the upper-left corner of the rectangle. -The width and height members are set to the size (extent) of the rectangle. -The count member is set to the number of -.PN GraphicsExpose -events to follow. -If count is zero, no more -.PN GraphicsExpose -events follow for this window. -However, if count is nonzero, at least that number of -.PN GraphicsExpose -events (and possibly more) are to follow for this window. -.NH 2 -Window State Change Events -.XS -\*(SN Window State Change Events -.XE -.LP -The following sections discuss: -.IP \(bu 5 -.PN CirculateNotify -events -.IP \(bu 5 -.PN ConfigureNotify -events -.IP \(bu 5 -.PN CreateNotify -events -.IP \(bu 5 -.PN DestroyNotify -events -.IP \(bu 5 -.PN GravityNotify -events -.IP \(bu 5 -.PN MapNotify -events -.IP \(bu 5 -.PN MappingNotify -events -.IP \(bu 5 -.PN ReparentNotify -events -.IP \(bu 5 -.PN UnmapNotify -events -.IP \(bu 5 -.PN VisibilityNotify -events -.\" .SH 3 -.NH 3 -CirculateNotify Events -.XS -\*(SN CirculateNotify Events -.XE -.LP -.IN "Events" "CirculateNotify" -.IN "CirculateNotify" "" "@DEF@" -The X server can report -.PN CirculateNotify -events to clients wanting information about when a window changes -its position in the stack. -The X server generates this event type whenever a window is actually restacked -as a result of a client application calling -.PN XCirculateSubwindows , -.PN XCirculateSubwindowsUp , -or -.PN XCirculateSubwindowsDown . -.LP -To receive -.PN CirculateNotify -events, set the -.PN StructureNotifyMask -bit in the event-mask attribute of the window -or the -.PN SubstructureNotifyMask -bit in the event-mask attribute of the parent window -(in which case, circulating any child generates an event). -.LP -The structure for this event type contains: -.LP -.IN "XCirculateEvent" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* CirculateNotify */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window event; - Window window; - int place; /* PlaceOnTop, PlaceOnBottom */ -} XCirculateEvent; -.De -.LP -.eM -The event member is set either to the restacked window or to its parent, -depending on whether -.PN StructureNotify -or -.PN SubstructureNotify -was selected. -The window member is set to the window that was restacked. -The place member is set to the window's position after the restack occurs and -is either -.PN PlaceOnTop -or -.PN PlaceOnBottom . -If it is -.PN PlaceOnTop , -the window is now on top of all siblings. -If it is -.PN PlaceOnBottom , -the window is now below all siblings. -.NH 3 -ConfigureNotify Events -.XS -\*(SN ConfigureNotify Events -.XE -.LP -.IN "Events" "ConfigureNotify" -.IN "ConfigureNotify" "" "@DEF@" -The X server can report -.PN ConfigureNotify -events to clients wanting information about actual changes to a window's -state, such as size, position, border, and stacking order. -The X server generates this event type whenever one of the following configure -window requests made by a client application actually completes: -.IP \(bu 5 -A window's size, position, border, and/or stacking order is reconfigured -by calling -.PN XConfigureWindow . -.IP \(bu 5 -The window's position in the stacking order is changed by calling -.PN XLowerWindow , -.PN XRaiseWindow , -or -.PN XRestackWindows . -.IP \(bu 5 -A window is moved by calling -.PN XMoveWindow . -.IP \(bu 5 -A window's size is changed by calling -.PN XResizeWindow . -.IP \(bu 5 -A window's size and location is changed by calling -.PN XMoveResizeWindow . -.IP \(bu 5 -A window is mapped and its position in the stacking order is changed -by calling -.PN XMapRaised . -.IP \(bu 5 -A window's border width is changed by calling -.PN XSetWindowBorderWidth . -.LP -To receive -.PN ConfigureNotify -events, set the -.PN StructureNotifyMask -bit in the event-mask attribute of the window or the -.PN SubstructureNotifyMask -bit in the event-mask attribute of the parent window -(in which case, configuring any child generates an event). -.LP -The structure for this event type contains: -.LP -.IN "XConfigureEvent" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* ConfigureNotify */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window event; - Window window; - int x, y; - int width, height; - int border_width; - Window above; - Bool override_redirect; -} XConfigureEvent; -.De -.LP -.eM -The event member is set either to the reconfigured window or to its parent, -depending on whether -.PN StructureNotify -or -.PN SubstructureNotify -was selected. -The window member is set to the window whose size, position, -border, and/or stacking -order was changed. -.LP -The x and y members are set to the coordinates relative to the parent window's -origin and indicate the position of the upper-left outside corner of the window. -The width and height members are set to the inside size of the window, -not including -the border. -The border_width member is set to the width of the window's border, in pixels. -.LP -The above member is set to the sibling window and is used -for stacking operations. -If the X server sets this member to -.PN None , -the window whose state was changed is on the bottom of the stack -with respect to sibling windows. -However, if this member is set to a sibling window, -the window whose state was changed is placed on top of this sibling window. -.LP -The override_redirect member is set to the override-redirect attribute of the -window. -Window manager clients normally should ignore this window if the -override_redirect member -is -.PN True . -.NH 3 -CreateNotify Events -.XS -\*(SN CreateNotify Events -.XE -.LP -.IN "Events" "CreateNotify" -.IN "CreateNotify" "" "@DEF@" -The X server can report -.PN CreateNotify -events to clients wanting information about creation of windows. -The X server generates this event whenever a client -application creates a window by calling -.PN XCreateWindow -or -.PN XCreateSimpleWindow . -.LP -To receive -.PN CreateNotify -events, set the -.PN SubstructureNotifyMask -bit in the event-mask attribute of the window. -Creating any children then generates an event. -.LP -The structure for the event type contains: -.LP -.IN "XCreateWindowEvent" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* CreateNotify */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window parent; /* parent of the window */ - Window window; /* window id of window created */ - int x, y; /* window location */ - int width, height; /* size of window */ - int border_width; /* border width */ - Bool override_redirect; /* creation should be overridden */ -} XCreateWindowEvent; -.De -.LP -.eM -The parent member is set to the created window's parent. -The window member specifies the created window. -The x and y members are set to the created window's coordinates relative -to the parent window's origin and indicate the position of the upper-left -outside corner of the created window. -The width and height members are set to the inside size of the created window -(not including the border) and are always nonzero. -The border_width member is set to the width of the created window's border, in pixels. -The override_redirect member is set to the override-redirect attribute of the -window. -Window manager clients normally should ignore this window -if the override_redirect member is -.PN True . -.NH 3 -DestroyNotify Events -.XS -\*(SN DestroyNotify Events -.XE -.LP -.IN "Events" "DestroyNotify" -.IN "DestroyNotify" "" "@DEF@" -The X server can report -.PN DestroyNotify -events to clients wanting information about which windows are destroyed. -The X server generates this event whenever a client application destroys a -window by calling -.PN XDestroyWindow -or -.PN XDestroySubwindows . -.LP -The ordering of the -.PN DestroyNotify -events is such that for any given window, -.PN DestroyNotify -is generated on all inferiors of the window -before being generated on the window itself. -The X protocol does not constrain the ordering among -siblings and across subhierarchies. -.LP -To receive -.PN DestroyNotify -events, set the -.PN StructureNotifyMask -bit in the event-mask attribute of the window or the -.PN SubstructureNotifyMask -bit in the event-mask attribute of the parent window -(in which case, destroying any child generates an event). -.LP -The structure for this event type contains: -.LP -.IN "XDestroyWindowEvent" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* DestroyNotify */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window event; - Window window; -} XDestroyWindowEvent; -.De -.LP -.eM -The event member is set either to the destroyed window or to its parent, -depending on whether -.PN StructureNotify -or -.PN SubstructureNotify -was selected. -The window member is set to the window that is destroyed. -.NH 3 -GravityNotify Events -.XS -\*(SN GravityNotify Events -.XE -.LP -.IN "Events" "GravityNotify" -.IN "GravityNotify" "" "@DEF@" -The X server can report -.PN GravityNotify -events to clients wanting information about when a window is moved because of a -change in the size of its parent. -The X server generates this event whenever a client -application actually moves a child window as a result of resizing its parent by calling -.PN XConfigureWindow , -.PN XMoveResizeWindow , -or -.PN XResizeWindow . -.LP -To receive -.PN GravityNotify -events, set the -.PN StructureNotifyMask -bit in the event-mask attribute of the window or the -.PN SubstructureNotifyMask -bit in the event-mask attribute of the parent window -(in which case, any child that is moved because its parent has been resized -generates an event). -.LP -The structure for this event type contains: -.LP -.IN "XGravityEvent" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* GravityNotify */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window event; - Window window; - int x, y; -} XGravityEvent; -.De -.LP -.eM -The event member is set either to the window that was moved or to its parent, -depending on whether -.PN StructureNotify -or -.PN SubstructureNotify -was selected. -The window member is set to the child window that was moved. -The x and y members are set to the coordinates relative to the -new parent window's origin -and indicate the position of the upper-left outside corner of the -window. -.NH 3 -MapNotify Events -.XS -\*(SN MapNotify Events -.XE -.LP -.IN "Events" "MapNotify" -.IN "MapNotify" "" "@DEF@" -The X server can report -.PN MapNotify -events to clients wanting information about which windows are mapped. -The X server generates this event type whenever a client application changes the -window's state from unmapped to mapped by calling -.PN XMapWindow , -.PN XMapRaised , -.PN XMapSubwindows , -.PN XReparentWindow , -or as a result of save-set processing. -.LP -To receive -.PN MapNotify -events, set the -.PN StructureNotifyMask -bit in the event-mask attribute of the window or the -.PN SubstructureNotifyMask -bit in the event-mask attribute of the parent window -(in which case, mapping any child generates an event). -.LP -The structure for this event type contains: -.LP -.IN "XMapEvent" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* MapNotify */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window event; - Window window; - Bool override_redirect; /* boolean, is override set... */ -} XMapEvent; -.De -.LP -.eM -The event member is set either to the window that was mapped or to its parent, -depending on whether -.PN StructureNotify -or -.PN SubstructureNotify -was selected. -The window member is set to the window that was mapped. -The override_redirect member is set to the override-redirect attribute -of the window. -Window manager clients normally should ignore this window -if the override-redirect attribute is -.PN True , -because these events usually are generated from pop-ups, -which override structure control. -.NH 3 -MappingNotify Events -.XS -\*(SN MappingNotify Events -.XE -.LP -.IN "Events" "MappingNotify" -.IN "MappingNotify" "" "@DEF@" -The X server reports -.PN MappingNotify -events to all clients. -There is no mechanism to express disinterest in this event. -The X server generates this event type whenever a client application -successfully calls: -.IP \(bu 5 -.PN XSetModifierMapping -to indicate which KeyCodes are to be used as modifiers -.IP \(bu 5 -.PN XChangeKeyboardMapping -to change the keyboard mapping -.IP \(bu 5 -.PN XSetPointerMapping -to set the pointer mapping -.LP -The structure for this event type contains: -.LP -.IN "XMappingEvent" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* MappingNotify */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; /* unused */ - int request; /* one of MappingModifier, MappingKeyboard, - MappingPointer */ - int first_keycode; /* first keycode */ - int count; /* defines range of change w. first_keycode*/ -} XMappingEvent; -.De -.LP -.eM -The request member is set to indicate the kind of mapping change that occurred -and can be -.PN MappingModifier , -.PN MappingKeyboard , -or -.PN MappingPointer . -If it is -.PN MappingModifier , -the modifier mapping was changed. -If it is -.PN MappingKeyboard , -the keyboard mapping was changed. -If it is -.PN MappingPointer , -the pointer button mapping was changed. -The first_keycode and count members are set only -if the request member was set to -.PN MappingKeyboard . -The number in first_keycode represents the first number in the range -of the altered mapping, -and count represents the number of keycodes altered. -.LP -To update the client application's knowledge of the keyboard, -you should call -.PN XRefreshKeyboardMapping . -.NH 3 -ReparentNotify Events -.XS -\*(SN ReparentNotify Events -.XE -.LP -.IN "Events" "ReparentNotify" -.IN "ReparentNotify" "" "@DEF@" -The X server can report -.PN ReparentNotify -events to clients wanting information about changing a window's parent. -The X server generates this event whenever a client -application calls -.PN XReparentWindow -and the window is actually reparented. -.LP -To receive -.PN ReparentNotify -events, set the -.PN StructureNotifyMask -bit in the event-mask attribute of the window or the -.PN SubstructureNotifyMask -bit in the event-mask attribute of either the old or the new parent window -(in which case, reparenting any child generates an event). -.LP -The structure for this event type contains: -.LP -.IN "XReparentEvent" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* ReparentNotify */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window event; - Window window; - Window parent; - int x, y; - Bool override_redirect; -} XReparentEvent; -.De -.LP -.eM -The event member is set either to the reparented window -or to the old or the new parent, depending on whether -.PN StructureNotify -or -.PN SubstructureNotify -was selected. -The window member is set to the window that was reparented. -The parent member is set to the new parent window. -The x and y members are set to the reparented window's coordinates relative -to the new parent window's -origin and define the upper-left outer corner of the reparented window. -The override_redirect member is set to the override-redirect attribute of the -window specified by the window member. -Window manager clients normally should ignore this window -if the override_redirect member is -.PN True . -.NH 3 -UnmapNotify Events -.XS -\*(SN UnmapNotify Events -.XE -.LP -.IN "Events" "UnmapNotify" -.IN "UnmapNotify" "" "@DEF@" -The X server can report -.PN UnmapNotify -events to clients wanting information about which windows are unmapped. -The X server generates this event type whenever a client application changes the -window's state from mapped to unmapped. -.LP -To receive -.PN UnmapNotify -events, set the -.PN StructureNotifyMask -bit in the event-mask attribute of the window or the -.PN SubstructureNotifyMask -bit in the event-mask attribute of the parent window -(in which case, unmapping any child window generates an event). -.LP -The structure for this event type contains: -.LP -.IN "XUnmapEvent" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* UnmapNotify */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window event; - Window window; - Bool from_configure; -} XUnmapEvent; -.De -.LP -.eM -The event member is set either to the unmapped window or to its parent, -depending on whether -.PN StructureNotify -or -.PN SubstructureNotify -was selected. -This is the window used by the X server to report the event. -The window member is set to the window that was unmapped. -The from_configure member is set to -.PN True -if the event was generated as a result of a resizing of the window's parent when -the window itself had a win_gravity of -.PN UnmapGravity . -.NH 3 -VisibilityNotify Events -.XS -\*(SN VisibilityNotify Events -.XE -.LP -.IN "Events" "VisibilityNotify" -.IN "VisibilityNotify" "" "@DEF@" -The X server can report -.PN VisibilityNotify -events to clients wanting any change in the visibility of the specified window. -A region of a window is visible if someone looking at the screen can -actually see it. -The X server generates this event whenever the visibility changes state. -However, this event is never generated for windows whose class is -.PN InputOnly . -.LP -All -.PN VisibilityNotify -events caused by a hierarchy change are generated -after any hierarchy event -.Pn ( UnmapNotify , -.PN MapNotify , -.PN ConfigureNotify , -.PN GravityNotify , -.PN CirculateNotify ) -caused by that change. Any -.PN VisibilityNotify -event on a given window is generated before any -.PN Expose -events on that window, but it is not required that all -.PN VisibilityNotify -events on all windows be generated before all -.PN Expose -events on all windows. -The X protocol does not constrain the ordering of -.PN VisibilityNotify -events with -respect to -.PN FocusOut , -.PN EnterNotify , -and -.PN LeaveNotify -events. -.LP -To receive -.PN VisibilityNotify -events, set the -.PN VisibilityChangeMask -bit in the event-mask attribute of the window. -.LP -The structure for this event type contains: -.LP -.IN "XVisibilityEvent" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* VisibilityNotify */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; - int state; -} XVisibilityEvent; -.De -.LP -.eM -The window member is set to the window whose visibility state changes. -The state member is set to the state of the window's visibility and can be -.PN VisibilityUnobscured , -.PN VisibilityPartiallyObscured , -or -.PN VisibilityFullyObscured . -The X server ignores all of a window's subwindows -when determining the visibility state of the window and processes -.PN VisibilityNotify -events according to the following: -.IP \(bu 5 -When the window changes state from partially obscured, fully obscured, -or not viewable to viewable and completely unobscured, -the X server generates the event with the state member of the -.PN XVisibilityEvent -structure set to -.PN VisibilityUnobscured . -.IP \(bu 5 -When the window changes state from viewable and completely unobscured or -not viewable to viewable and partially obscured, -the X server generates the event with the state member of the -.PN XVisibilityEvent -structure set to -.PN VisibilityPartiallyObscured . -.IP \(bu 5 -When the window changes state from viewable and completely unobscured, -viewable and partially obscured, or not viewable to viewable and -fully obscured, -the X server generates the event with the state member of the -.PN XVisibilityEvent -structure set to -.PN VisibilityFullyObscured . -.NH 2 -Structure Control Events -.XS -\*(SN Structure Control Events -.XE -.LP -This section discusses: -.IP \(bu 5 -.PN CirculateRequest -events -.IP \(bu 5 -.PN ConfigureRequest -events -.IP \(bu 5 -.PN MapRequest -events -.IP \(bu 5 -.PN ResizeRequest -events -.NH 3 -CirculateRequest Events -.XS -\*(SN CirculateRequest Events -.XE -.LP -.IN "Events" "CirculateRequest" -.IN "CirculateRequest" "" "@DEF@" -The X server can report -.PN CirculateRequest -events to clients wanting information about -when another client initiates a circulate window request -on a specified window. -The X server generates this event type whenever a client initiates a circulate -window request on a window and a subwindow actually needs to be restacked. -The client initiates a circulate window request on the window by calling -.PN XCirculateSubwindows , -.PN XCirculateSubwindowsUp , -or -.PN XCirculateSubwindowsDown . -.LP -To receive -.PN CirculateRequest -events, set the -.PN SubstructureRedirectMask -in the event-mask attribute of the window. -Then, in the future, -the circulate window request for the specified window is not executed, -and thus, any subwindow's position in the stack is not changed. -For example, suppose a client application calls -.PN XCirculateSubwindowsUp -to raise a subwindow to the top of the stack. -If you had selected -.PN SubstructureRedirectMask -on the window, the X server reports to you a -.PN CirculateRequest -event and does not raise the subwindow to the top of the stack. -.LP -The structure for this event type contains: -.LP -.IN "XCirculateRequestEvent" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* CirculateRequest */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window parent; - Window window; - int place; /* PlaceOnTop, PlaceOnBottom */ -} XCirculateRequestEvent; -.De -.LP -.eM -The parent member is set to the parent window. -The window member is set to the subwindow to be restacked. -The place member is set to what the new position in the stacking order should be -and is either -.PN PlaceOnTop -or -.PN PlaceOnBottom . -If it is -.PN PlaceOnTop , -the subwindow should be on top of all siblings. -If it is -.PN PlaceOnBottom , -the subwindow should be below all siblings. -.NH 3 -ConfigureRequest Events -.XS -\*(SN ConfigureRequest Events -.XE -.LP -.IN "Events" "ConfigureRequest" -.IN "ConfigureRequest" "" "@DEF@" -The X server can report -.PN ConfigureRequest -events to clients wanting information about when a different client initiates -a configure window request on any child of a specified window. -The configure window request attempts to -reconfigure a window's size, position, border, and stacking order. -The X server generates this event whenever a different client initiates -a configure window request on a window by calling -.PN XConfigureWindow , -.PN XLowerWindow , -.PN XRaiseWindow , -.PN XMapRaised , -.PN XMoveResizeWindow , -.PN XMoveWindow , -.PN XResizeWindow , -.PN XRestackWindows , -or -.PN XSetWindowBorderWidth . -.LP -To receive -.PN ConfigureRequest -events, set the -.PN SubstructureRedirectMask -bit in the event-mask attribute of the window. -.PN ConfigureRequest -events are generated when a -.PN ConfigureWindow -protocol request is issued on a child window by another client. -For example, suppose a client application calls -.PN XLowerWindow -to lower a window. -If you had selected -.PN SubstructureRedirectMask -on the parent window and if the override-redirect attribute -of the window is set to -.PN False , -the X server reports a -.PN ConfigureRequest -event to you and does not lower the specified window. -.LP -The structure for this event type contains: -.LP -.IN "XConfigureRequestEvent" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* ConfigureRequest */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window parent; - Window window; - int x, y; - int width, height; - int border_width; - Window above; - int detail; /* Above, Below, TopIf, BottomIf, Opposite */ - unsigned long value_mask; -} XConfigureRequestEvent; -.De -.LP -.eM -The parent member is set to the parent window. -The window member is set to the window whose size, position, border width, -and/or stacking order is to be reconfigured. -The value_mask member indicates which components were specified in the -.PN ConfigureWindow -protocol request. -The corresponding values are reported as given in the request. -The remaining values are filled in from the current geometry of the window, -except in the case of above (sibling) and detail (stack-mode), -which are reported as -.PN None -and -.PN Above , -respectively, if they are not given in the request. -.NH 3 -MapRequest Events -.XS -\*(SN MapRequest Events -.XE -.LP -.IN "Events" "MapRequest" -.IN "MapRequest" "" "@DEF@" -The X server can report -.PN MapRequest -events to clients wanting information about a different client's desire -to map windows. -A window is considered mapped when a map window request completes. -The X server generates this event whenever a different client initiates -a map window request on an unmapped window whose override_redirect member -is set to -.PN False . -Clients initiate map window requests by calling -.PN XMapWindow , -.PN XMapRaised , -or -.PN XMapSubwindows . -.LP -To receive -.PN MapRequest -events, set the -.PN SubstructureRedirectMask -bit in the event-mask attribute of the window. -This means another client's attempts to map a child window by calling one of -the map window request functions is intercepted, and you are sent a -.PN MapRequest -instead. -For example, suppose a client application calls -.PN XMapWindow -to map a window. -If you (usually a window manager) had selected -.PN SubstructureRedirectMask -on the parent window and if the override-redirect attribute -of the window is set to -.PN False , -the X server reports a -.PN MapRequest -event to you -and does not map the specified window. -Thus, this event gives your window manager client the ability -to control the placement of subwindows. -.LP -The structure for this event type contains: -.LP -.IN "XMapRequestEvent" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* MapRequest */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window parent; - Window window; -} XMapRequestEvent; -.De -.LP -.eM -The parent member is set to the parent window. -The window member is set to the window to be mapped. -.NH 3 -ResizeRequest Events -.XS -\*(SN ResizeRequest Events -.XE -.LP -.IN "Events" "ResizeRequest" -.IN "ResizeRequest" "" "@DEF@" -The X server can report -.PN ResizeRequest -events to clients wanting information about another client's attempts to change the -size of a window. -The X server generates this event whenever some other client attempts to change -the size of the specified window by calling -.PN XConfigureWindow , -.PN XResizeWindow , -or -.PN XMoveResizeWindow . -.LP -To receive -.PN ResizeRequest -events, set the -.PN ResizeRedirect -bit in the event-mask attribute of the window. -Any attempts to change the size by other clients are then redirected. -.LP -The structure for this event type contains: -.LP -.IN "XResizeRequestEvent" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* ResizeRequest */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; - int width, height; -} XResizeRequestEvent; -.De -.LP -.eM -The window member is set to the window whose size another -client attempted to change. -The width and height members are set to the inside size of the window, -excluding the border. -.NH 2 -Colormap State Change Events -.XS -\*(SN Colormap State Change Events -.XE -.LP -.IN "Events" "ColormapNotify" -.IN "ColormapNotify" "" "@DEF@" -The X server can report -.PN ColormapNotify -events to clients wanting information about when the colormap changes -and when a colormap is installed or uninstalled. -The X server generates this event type whenever a client application: -.IP \(bu 5 -Changes the colormap member of the -.PN XSetWindowAttributes -structure by -calling -.PN XChangeWindowAttributes , -.PN XFreeColormap , -or -.PN XSetWindowColormap -.IP \(bu 5 -Installs or uninstalls the colormap by calling -.PN XInstallColormap -or -.PN XUninstallColormap -.LP -To receive -.PN ColormapNotify -events, set the -.PN ColormapChangeMask -bit in the event-mask attribute of the window. -.LP -The structure for this event type contains: -.LP -.IN "XColormapEvent" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* ColormapNotify */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; - Colormap colormap; /* colormap or None */ - Bool new; - int state; /* ColormapInstalled, ColormapUninstalled */ -} XColormapEvent; -.De -.LP -.eM -The window member is set to the window whose associated -colormap is changed, installed, or uninstalled. -For a colormap that is changed, installed, or uninstalled, -the colormap member is set to the colormap associated with the window. -For a colormap that is changed by a call to -.PN XFreeColormap , -the colormap member is set to -.PN None . -The new member is set to indicate whether the colormap -for the specified window was changed or installed or uninstalled -and can be -.PN True -or -.PN False . -If it is -.PN True , -the colormap was changed. -If it is -.PN False , -the colormap was installed or uninstalled. -The state member is always set to indicate whether the colormap is installed or -uninstalled and can be -.PN ColormapInstalled -or -.PN ColormapUninstalled . -.NH 2 -Client Communication Events -.XS -\*(SN Client Communication Events -.XE -.LP -This section discusses: -.IP \(bu 5 -.PN ClientMessage -events -.IP \(bu 5 -.PN PropertyNotify -events -.IP \(bu 5 -.PN SelectionClear -events -.IP \(bu 5 -.PN SelectionNotify -events -.IP \(bu 5 -.PN SelectionRequest -events -.NH 3 -ClientMessage Events -.XS -\*(SN ClientMessage Events -.XE -.LP -.IN "Events" "ClientMessage" -.IN "ClientMessage" "" "@DEF@" -The X server generates -.PN ClientMessage -events only when a client calls the function -.PN XSendEvent . -.LP -The structure for this event type contains: -.LP -.IN "XClientMessageEvent" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 1i 3i -.ta .5i 1i 3i -typedef struct { - int type; /* ClientMessage */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; - Atom message_type; - int format; - union { - char b[20]; - short s[10]; - long l[5]; - } data; -} XClientMessageEvent; -.De -.LP -.eM -The message_type member is set to an atom that indicates how the data -should be interpreted by the receiving client. -The format member is set to 8, 16, or 32 and specifies whether the data -should be viewed as a list of bytes, shorts, or longs. -The data member is a union that contains the members b, s, and l. -The b, s, and l members represent data of twenty 8-bit values, -ten 16-bit values, and five 32-bit values. -Particular message types might not make use of all these values. -The X server places no interpretation on the values in the window, -message_type, or data members. -.NH 3 -PropertyNotify Events -.XS -\*(SN PropertyNotify Events -.XE -.LP -.IN "Events" "PropertyNotify" -.IN "PropertyNotify" "" "@DEF@" -The X server can report -.PN PropertyNotify -events to clients wanting information about property changes -for a specified window. -.LP -To receive -.PN PropertyNotify -events, set the -.PN PropertyChangeMask -bit in the event-mask attribute of the window. -.LP -The structure for this event type contains: -.LP -.IN "XPropertyEvent" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* PropertyNotify */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; - Atom atom; - Time time; - int state; /* PropertyNewValue or PropertyDelete */ -} XPropertyEvent; -.De -.LP -.eM -The window member is set to the window whose associated -property was changed. -The atom member is set to the property's atom and indicates which -property was changed or desired. -The time member is set to the server time when the property was changed. -The state member is set to indicate whether the property was changed -to a new value or deleted and can be -.PN PropertyNewValue -or -.PN PropertyDelete . -The state member is set to -.PN PropertyNewValue -when a property of the window is changed using -.PN XChangeProperty -or -.PN XRotateWindowProperties -(even when adding zero-length data using -.PN XChangeProperty ) -and when replacing all or part of a property with identical data using -.PN XChangeProperty -or -.PN XRotateWindowProperties . -The state member is set to -.PN PropertyDelete -when a property of the window is deleted using -.PN XDeleteProperty -or, if the delete argument is -.PN True , -.PN XGetWindowProperty . -.NH 3 -SelectionClear Events -.XS -\*(SN SelectionClear Events -.XE -.LP -.IN "Events" "SelectionClear" -.IN "SelectionClear" "" "@DEF@" -The X server reports -.PN SelectionClear -events to the client losing ownership of a selection. -The X server generates this event type when another client -asserts ownership of the selection by calling -.PN XSetSelectionOwner . -.LP -The structure for this event type contains: -.LP -.IN "XSelectionClearEvent" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* SelectionClear */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; - Atom selection; - Time time; -} XSelectionClearEvent; -.De -.LP -.eM -The selection member is set to the selection atom. -The time member is set to the last change time recorded for the -selection. -The window member is the window that was specified by the current owner -(the owner losing the selection) in its -.PN XSetSelectionOwner -call. -.NH 3 -SelectionRequest Events -.XS -\*(SN SelectionRequest Events -.XE -.LP -.IN "Events" "SelectionRequest" -.IN "SelectionRequest" "" "@DEF@" -The X server reports -.PN SelectionRequest -events to the owner of a selection. -The X server generates this event whenever a client -requests a selection conversion by calling -.PN XConvertSelection -for the owned selection. -.LP -The structure for this event type contains: -.LP -.IN "XSelectionRequestEvent" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* SelectionRequest */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window owner; - Window requestor; - Atom selection; - Atom target; - Atom property; - Time time; -} XSelectionRequestEvent; -.De -.LP -.eM -The owner member is set to the window -that was specified by the current owner in its -.PN XSetSelectionOwner -call. -The requestor member is set to the window requesting the selection. -The selection member is set to the atom that names the selection. -For example, PRIMARY is used to indicate the primary selection. -The target member is set to the atom that indicates the type -the selection is desired in. -The property member can be a property name or -.PN None . -The time member is set to the timestamp or -.PN CurrentTime -value from the -.PN ConvertSelection -request. -.LP -The owner should convert the selection based on the specified target type -and send a -.PN SelectionNotify -event back to the requestor. -A complete specification for using selections is given in the X Consortium -standard \fIInter-Client Communication Conventions Manual\fP. -.NH 3 -SelectionNotify Events -.XS -\*(SN SelectionNotify Events -.XE -.LP -.IN "Events" "SelectionNotify" -.IN "SelectionNotify" "" "@DEF@" -This event is generated by the X server in response to a -.PN ConvertSelection -protocol request when there is no owner for the selection. -When there is an owner, it should be generated by the owner -of the selection by using -.PN XSendEvent . -The owner of a selection should send this event to a requestor when a selection -has been converted and stored as a property -or when a selection conversion could -not be performed (which is indicated by setting the property member to -.PN None ). -.LP -If -.PN None -is specified as the property in the -.PN ConvertSelection -protocol request, the owner should choose a property name, -store the result as that property on the requestor window, -and then send a -.PN SelectionNotify -giving that actual property name. -.LP -The structure for this event type contains: -.LP -.IN "XSelectionEvent" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* SelectionNotify */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window requestor; - Atom selection; - Atom target; - Atom property; /* atom or None */ - Time time; -} XSelectionEvent; -.De -.LP -.eM -The requestor member is set to the window associated with -the requestor of the selection. -The selection member is set to the atom that indicates the selection. -For example, PRIMARY is used for the primary selection. -The target member is set to the atom that indicates the converted type. -For example, PIXMAP is used for a pixmap. -The property member is set to the atom that indicates which -property the result was stored on. -If the conversion failed, -the property member is set to -.PN None . -The time member is set to the time the conversion took place and -can be a timestamp or -.PN CurrentTime . -.bp diff --git a/doc/xorg-docs/specs/X11/CH11 b/doc/xorg-docs/specs/X11/CH11 deleted file mode 100644 index 09d845d35..000000000 --- a/doc/xorg-docs/specs/X11/CH11 +++ /dev/null @@ -1,1664 +0,0 @@ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by -.\" Digital Equipment Corporation -.\" -.\" Portions Copyright \(co 1990, 1991 by -.\" Tektronix, Inc. -.\" -.\" Permission to use, copy, modify and distribute this documentation for -.\" any purpose and without fee is hereby granted, provided that the above -.\" copyright notice appears in all copies and that both that copyright notice -.\" and this permission notice appear in all copies, and that the names of -.\" Digital and Tektronix not be used in in advertising or publicity pertaining -.\" to this documentation without specific, written prior permission. -.\" Digital and Tektronix makes no representations about the suitability -.\" of this documentation for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBChapter 11\fP\s-1 - -\s+1\fBEvent Handling Functions\fP\s-1 -.sp 2 -.nr H1 11 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.na -.LP -.XS -Chapter 11: Event Handling Functions -.XE -This chapter discusses the Xlib functions you can use to: -.IP \(bu 5 -Select events -.IP \(bu 5 -Handle the output buffer and the event queue -.IP \(bu 5 -Select events from the event queue -.IP \(bu 5 -Send and get events -.IP \(bu 5 -Handle protocol errors -.NT Note -Some toolkits use their own event-handling functions -and do not allow you to interchange these event-handling functions -with those in Xlib. -For further information, -see the documentation supplied with the toolkit. -.NE -.LP -Most applications simply are event loops: -they wait for an event, decide what to do with it, -execute some amount of code that results in changes to the display, -and then wait for the next event. -.NH 2 -Selecting Events -.XS -\*(SN Selecting Events -.XE -.LP -There are two ways to select the events you want reported to your client -application. -One way is to set the event_mask member of the -.PN XSetWindowAttributes -structure when you call -.PN XCreateWindow -and -.PN XChangeWindowAttributes . -Another way is to use -.PN XSelectInput . -.IN "XSelectInput" "" "@DEF@" -.sM -.FD 0 -XSelectInput\^(\^\fIdisplay\fP, \fIw\fP\^, \fIevent_mask\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - long \fIevent_mask\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Wi whose events you are interested in -.IP \fIw\fP 1i -Specifies the window \*(Wi. -.IP \fIevent_mask\fP 1i -Specifies the event mask. -.LP -.eM -The -.PN XSelectInput -function requests that the X server report the events associated with the -specified event mask. -Initially, X will not report any of these events. -Events are reported relative to a window. -If a window is not interested in a device event, it usually propagates to -the closest ancestor that is interested, -unless the do_not_propagate mask prohibits it. -.IN "Event" "propagation" -.LP -Setting the event-mask attribute of a window overrides any previous call -for the same window but not for other clients. -Multiple clients can select for the same events on the same window -with the following restrictions: -.IP \(bu 5 -Multiple clients can select events on the same window because their event masks -are disjoint. -When the X server generates an event, it reports it -to all interested clients. -.IP \(bu 5 -Only one client at a time can select -.PN CirculateRequest , -.PN ConfigureRequest , -or -.PN MapRequest -events, which are associated with -the event mask -.PN SubstructureRedirectMask . -.IP \(bu 5 -Only one client at a time can select -a -.PN ResizeRequest -event, which is associated with -the event mask -.PN ResizeRedirectMask . -.IP \(bu 5 -Only one client at a time can select a -.PN ButtonPress -event, which is associated with -the event mask -.PN ButtonPressMask . -.LP -The server reports the event to all interested clients. -.LP -.PN XSelectInput -can generate a -.PN BadWindow -error. -.NH 2 -Handling the Output Buffer -.XS -\*(SN Handling the Output Buffer -.XE -.LP -The output buffer is an area used by Xlib to store requests. -The functions described in this section flush the output buffer -if the function would block or not return an event. -That is, all requests residing in the output buffer that -have not yet been sent are transmitted to the X server. -These functions differ in the additional tasks they might perform. -.LP -.sp -To flush the output buffer, use -.PN XFlush . -.IN "XFlush" "" "@DEF@" -.sM -.FD 0 -XFlush\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -The -.PN XFlush -function -flushes the output buffer. -Most client applications need not use this function because the output -buffer is automatically flushed as needed by calls to -.PN XPending , -.PN XNextEvent , -and -.PN XWindowEvent . -.IN "XPending" -.IN "XNextEvent" -.IN "XWindowEvent" -Events generated by the server may be enqueued into the library's event queue. -.LP -.sp -To flush the output buffer and then wait until all requests have been processed, -use -.PN XSync . -.IN "XSync" "" "@DEF@" -.sM -.FD 0 -XSync\^(\^\fIdisplay\fP, \fIdiscard\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Bool \fIdiscard\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdiscard\fP 1i -Specifies a Boolean value that indicates whether -.PN XSync -discards all events on the event queue. -.LP -.eM -The -.PN XSync -function -flushes the output buffer and then waits until all requests have been received -and processed by the X server. -Any errors generated must be handled by the error handler. -For each protocol error received by Xlib, -.PN XSync -calls the client application's error handling routine (see section 11.8.2). -Any events generated by the server are enqueued into the library's -event queue. -.LP -Finally, if you passed -.PN False , -.PN XSync -does not discard the events in the queue. -If you passed -.PN True , -.PN XSync -discards all events in the queue, -including those events that were on the queue before -.PN XSync -was called. -Client applications seldom need to call -.PN XSync . -.NH 2 -Event Queue Management -.XS -\*(SN Event Queue Management -.XE -.LP -Xlib maintains an event queue. -However, the operating system also may be buffering data -in its network connection that is not yet read into the event queue. -.LP -.sp -To check the number of events in the event queue, use -.PN XEventsQueued . -.IN "XEventsQueued" "" "@DEF@" -.sM -.FD 0 -int XEventsQueued\^(\^\fIdisplay\fP, \fImode\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fImode\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fImode\fP 1i -Specifies the mode. -You can pass -.PN QueuedAlready , -.PN QueuedAfterFlush , -or -.PN QueuedAfterReading . -.LP -.eM -If mode is -.PN QueuedAlready , -.PN XEventsQueued -returns the number of events -already in the event queue (and never performs a system call). -If mode is -.PN QueuedAfterFlush , -.PN XEventsQueued -returns the number of events already in the queue if the number is nonzero. -If there are no events in the queue, -.PN XEventsQueued -flushes the output buffer, -attempts to read more events out of the application's connection, -and returns the number read. -If mode is -.PN QueuedAfterReading , -.PN XEventsQueued -returns the number of events already in the queue if the number is nonzero. -If there are no events in the queue, -.PN XEventsQueued -attempts to read more events out of the application's connection -without flushing the output buffer and returns the number read. -.LP -.PN XEventsQueued -always returns immediately without I/O if there are events already in the -queue. -.PN XEventsQueued -with mode -.PN QueuedAfterFlush -is identical in behavior to -.PN XPending . -.PN XEventsQueued -with mode -.PN QueuedAlready -is identical to the -.PN XQLength -function. -.LP -.sp -To return the number of events that are pending, use -.PN XPending . -.IN "XPending" "" "@DEF@" -.sM -.FD 0 -int XPending\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -The -.PN XPending -function returns the number of events that have been received from the -X server but have not been removed from the event queue. -.PN XPending -is identical to -.PN XEventsQueued -with the mode -.PN QueuedAfterFlush -specified. -.NH 2 -Manipulating the Event Queue -.XS -\*(SN Manipulating the Event Queue -.XE -.LP -Xlib provides functions that let you manipulate the event queue. -This section discusses how to: -.IP \(bu 5 -Obtain events, in order, and remove them from the queue -.IP \(bu 5 -Peek at events in the queue without removing them -.IP \(bu 5 -Obtain events that match the event mask or the arbitrary -predicate procedures that you provide -.NH 3 -Returning the Next Event -.XS -\*(SN Returning the Next Event -.XE -.LP -To get the next event and remove it from the queue, use -.PN XNextEvent . -.IN "XNextEvent" "" "@DEF@" -.sM -.FD 0 -XNextEvent\^(\^\fIdisplay\fP, \fIevent_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XEvent *\fIevent_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIevent_return\fP 1i -Returns the next event in the queue. -.LP -.eM -The -.PN XNextEvent -function copies the first event from the event queue into the specified -.PN XEvent -structure and then removes it from the queue. -If the event queue is empty, -.PN XNextEvent -flushes the output buffer and blocks until an event is received. -.LP -.sp -To peek at the event queue, use -.PN XPeekEvent . -.IN "XPeekEvent" "" "@DEF@" -.sM -.FD 0 -XPeekEvent\^(\^\fIdisplay\fP, \fIevent_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XEvent *\fIevent_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIevent_return\fP 1i -Returns a copy of the matched event's associated structure. -.LP -.eM -The -.PN XPeekEvent -function returns the first event from the event queue, -but it does not remove the event from the queue. -If the queue is empty, -.PN XPeekEvent -flushes the output buffer and blocks until an event is received. -It then copies the event into the client-supplied -.PN XEvent -structure without removing it from the event queue. -.NH 3 -Selecting Events Using a Predicate Procedure -.XS -\*(SN Selecting Events Using a Predicate Procedure -.XE -.LP -Each of the functions discussed in this section requires you to -pass a predicate procedure that determines if an event matches -what you want. -Your predicate procedure must decide if the event is useful -without calling any Xlib functions. -If the predicate directly or indirectly causes the state of the event queue -to change, the result is not defined. -If Xlib has been initialized for threads, the predicate is called with -the display locked and the result of a call by the predicate to any -Xlib function that locks the display is not defined unless the caller -has first called -.PN XLockDisplay . -.LP -The predicate procedure and its associated arguments are: -.sM -.FD 0 -Bool (\^*\fIpredicate\fP\^)\^(\^\fIdisplay\fP, \fIevent\fP, \fIarg\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XEvent *\fIevent\fP\^; -.br - XPointer \fIarg\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIevent\fP 1i -Specifies the -.PN XEvent -structure. -.IP \fIarg\fP 1i -Specifies the argument passed in from the -.PN XIfEvent , -.PN XCheckIfEvent , -or -.PN XPeekIfEvent -function. -.LP -.eM -The predicate procedure is called once for each -event in the queue until it finds a match. -After finding a match, the predicate procedure must return -.PN True . -If it did not find a match, it must return -.PN False . -.LP -.sp -To check the event queue for a matching event -and, if found, remove the event from the queue, use -.PN XIfEvent . -.IN "XIfEvent" "" "@DEF@" -.sM -.FD 0 -XIfEvent\^(\^\fIdisplay\fP, \fIevent_return\fP, \fIpredicate\fP, \fIarg\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XEvent *\fIevent_return\fP\^; -.br - Bool (\^*\fIpredicate\fP\^)\^(\^)\^; -.br - XPointer \fIarg\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIevent_return\fP 1i -Returns the matched event's associated structure. -.IP \fIpredicate\fP 1i -Specifies the procedure that is to be called to determine -if the next event in the queue matches what you want. -.IP \fIarg\fP 1i -Specifies the user-supplied argument that will be passed to the predicate procedure. -.LP -.eM -The -.PN XIfEvent -function completes only when the specified predicate -procedure returns -.PN True -for an event, -which indicates an event in the queue matches. -.PN XIfEvent -flushes the output buffer if it blocks waiting for additional events. -.PN XIfEvent -removes the matching event from the queue -and copies the structure into the client-supplied -.PN XEvent -structure. -.LP -.sp -To check the event queue for a matching event without blocking, use -.PN XCheckIfEvent . -.IN "XCheckIfEvent" "" "@DEF@" -.sM -.FD 0 -Bool XCheckIfEvent\^(\^\fIdisplay\fP, \fIevent_return\fP, \fIpredicate\fP, \fIarg\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XEvent *\fIevent_return\fP\^; -.br - Bool (\^*\fIpredicate\fP\^)\^(\^)\^; -.br - XPointer \fIarg\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIevent_return\fP 1i -Returns a copy of the matched event's associated structure. -.IP \fIpredicate\fP 1i -Specifies the procedure that is to be called to determine -if the next event in the queue matches what you want. -.IP \fIarg\fP 1i -Specifies the user-supplied argument that will be passed to the predicate procedure. -.LP -.eM -When the predicate procedure finds a match, -.PN XCheckIfEvent -copies the matched event into the client-supplied -.PN XEvent -structure and returns -.PN True . -(This event is removed from the queue.) -If the predicate procedure finds no match, -.PN XCheckIfEvent -returns -.PN False , -and the output buffer will have been flushed. -All earlier events stored in the queue are not discarded. -.LP -.sp -To check the event queue for a matching event -without removing the event from the queue, use -.PN XPeekIfEvent . -.IN "XPeekIfEvent" "" "@DEF@" -.sM -.FD 0 -XPeekIfEvent\^(\^\fIdisplay\fP, \fIevent_return\fP, \fIpredicate\fP, \fIarg\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XEvent *\fIevent_return\fP\^; -.br - Bool (\^*\fIpredicate\fP\^)\^(\^)\^; -.br - XPointer \fIarg\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIevent_return\fP 1i -Returns a copy of the matched event's associated structure. -.IP \fIpredicate\fP 1i -Specifies the procedure that is to be called to determine -if the next event in the queue matches what you want. -.IP \fIarg\fP 1i -Specifies the user-supplied argument that will be passed to the predicate procedure. -.LP -.eM -The -.PN XPeekIfEvent -function returns only when the specified predicate -procedure returns -.PN True -for an event. -After the predicate procedure finds a match, -.PN XPeekIfEvent -copies the matched event into the client-supplied -.PN XEvent -structure without removing the event from the queue. -.PN XPeekIfEvent -flushes the output buffer if it blocks waiting for additional events. -.NH 3 -Selecting Events Using a Window or Event Mask -.XS -\*(SN Selecting Events Using a Window or Event Mask -.XE -.LP -The functions discussed in this section let you select events by window -or event types, allowing you to process events out of order. -.LP -.sp -To remove the next event that matches both a window and an event mask, use -.PN XWindowEvent . -.IN "XWindowEvent" "" "@DEF@" -.sM -.FD 0 -XWindowEvent\^(\^\fIdisplay\fP, \fIw\fP\^, \fIevent_mask\fP\^, \fIevent_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - long \fIevent_mask\fP\^; -.br - XEvent *\fIevent_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Wi whose events you are interested in -.IP \fIw\fP 1i -Specifies the window \*(Wi. -.IP \fIevent_mask\fP 1i -Specifies the event mask. -.IP \fIevent_return\fP 1i -Returns the matched event's associated structure. -.LP -.eM -The -.PN XWindowEvent -function searches the event queue for an event that matches both the specified -window and event mask. -When it finds a match, -.PN XWindowEvent -removes that event from the queue and copies it into the specified -.PN XEvent -structure. -The other events stored in the queue are not discarded. -If a matching event is not in the queue, -.PN XWindowEvent -flushes the output buffer and blocks until one is received. -.LP -.sp -To remove the next event that matches both a window and an event mask (if any), -use -.PN XCheckWindowEvent . -.IN "XCheckWindowEvent" -This function is similar to -.PN XWindowEvent -except that it never blocks and it returns a -.PN Bool -indicating if the event was returned. -.IN "XCheckWindowEvent" "" "@DEF@" -.sM -.FD 0 -Bool XCheckWindowEvent\^(\^\fIdisplay\fP, \fIw\fP\^, \fIevent_mask\fP\^, \fIevent_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - long \fIevent_mask\fP\^; -.br - XEvent *\fIevent_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Wi whose events you are interested in -.IP \fIw\fP 1i -Specifies the window \*(Wi. -.IP \fIevent_mask\fP 1i -Specifies the event mask. -.IP \fIevent_return\fP 1i -Returns the matched event's associated structure. -.LP -.eM -The -.PN XCheckWindowEvent -function searches the event queue and then the events available -on the server connection for the first event that matches the specified window -and event mask. -If it finds a match, -.PN XCheckWindowEvent -removes that event, copies it into the specified -.PN XEvent -structure, and returns -.PN True . -The other events stored in the queue are not discarded. -If the event you requested is not available, -.PN XCheckWindowEvent -returns -.PN False , -and the output buffer will have been flushed. -.LP -.sp -To remove the next event that matches an event mask, use -.PN XMaskEvent . -.IN "XMaskEvent" "" "@DEF@" -.sM -.FD 0 -XMaskEvent\^(\^\fIdisplay\fP, \fIevent_mask\fP\^, \fIevent_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - long \fIevent_mask\fP\^; -.br - XEvent *\fIevent_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIevent_mask\fP 1i -Specifies the event mask. -.IP \fIevent_return\fP 1i -Returns the matched event's associated structure. -.LP -.eM -The -.PN XMaskEvent -function searches the event queue for the events associated with the -specified mask. -When it finds a match, -.PN XMaskEvent -removes that event and copies it into the specified -.PN XEvent -structure. -The other events stored in the queue are not discarded. -If the event you requested is not in the queue, -.PN XMaskEvent -flushes the output buffer and blocks until one is received. -.LP -.sp -To return and remove the next event that matches an event mask (if any), use -.PN XCheckMaskEvent . -This function is similar to -.PN XMaskEvent -except that it never blocks and it returns a -.PN Bool -indicating if the event was returned. -.IN "XCheckMaskEvent" "" "@DEF@" -.sM -.FD 0 -Bool XCheckMaskEvent\^(\^\fIdisplay\fP, \fIevent_mask\fP\^, \fIevent_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - long \fIevent_mask\fP\^; -.br - XEvent *\fIevent_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIevent_mask\fP 1i -Specifies the event mask. -.IP \fIevent_return\fP 1i -Returns the matched event's associated structure. -.LP -.eM -The -.PN XCheckMaskEvent -function searches the event queue and then any events available on the -server connection for the first event that matches the specified mask. -If it finds a match, -.PN XCheckMaskEvent -removes that event, copies it into the specified -.PN XEvent -structure, and returns -.PN True . -The other events stored in the queue are not discarded. -If the event you requested is not available, -.PN XCheckMaskEvent -returns -.PN False , -and the output buffer will have been flushed. -.LP -.sp -To return and remove the next event in the queue that matches an event type, use -.PN XCheckTypedEvent . -.IN "XCheckTypedEvent" "" "@DEF@" -.sM -.FD 0 -Bool XCheckTypedEvent\^(\^\fIdisplay\fP, \fIevent_type\fP\^, \fIevent_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIevent_type\fP\^; -.br - XEvent *\fIevent_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIevent_type\fP 1i -Specifies the event type to be compared. - -.IP \fIevent_return\fP 1i -Returns the matched event's associated structure. -.LP -.eM -The -.PN XCheckTypedEvent -function searches the event queue and then any events available -on the server connection for the first event that matches the specified type. -If it finds a match, -.PN XCheckTypedEvent -removes that event, copies it into the specified -.PN XEvent -structure, and returns -.PN True . -The other events in the queue are not discarded. -If the event is not available, -.PN XCheckTypedEvent -returns -.PN False , -and the output buffer will have been flushed. -.LP -.sp -To return and remove the next event in the queue that matches an event type -and a window, use -.PN XCheckTypedWindowEvent . -.IN "XCheckTypedWindowEvent" "" "@DEF@" -.sM -.FD 0 -Bool XCheckTypedWindowEvent\^(\^\fIdisplay\fP, \fIw\fP\^, \fIevent_type\fP\^, \fIevent_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - int \fIevent_type\fP\^; -.br - XEvent *\fIevent_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIevent_type\fP 1i -Specifies the event type to be compared. - -.IP \fIevent_return\fP 1i -Returns the matched event's associated structure. -.LP -.eM -The -.PN XCheckTypedWindowEvent -function searches the event queue and then any events available -on the server connection for the first event that matches the specified -type and window. -If it finds a match, -.PN XCheckTypedWindowEvent -removes the event from the queue, copies it into the specified -.PN XEvent -structure, and returns -.PN True . -The other events in the queue are not discarded. -If the event is not available, -.PN XCheckTypedWindowEvent -returns -.PN False , -and the output buffer will have been flushed. -.NH 2 -Putting an Event Back into the Queue -.XS -\*(SN Putting an Event Back into the Queue -.XE -.LP -To push an event back into the event queue, use -.PN XPutBackEvent . -.IN "XPutBackEvent" "" "@DEF@" -.sM -.FD 0 -XPutBackEvent\^(\^\fIdisplay\fP, \fIevent\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XEvent *\fIevent\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIevent\fP 1i -Specifies the event. -.LP -.eM -The -.PN XPutBackEvent -function pushes an event back onto the head of the display's event queue -by copying the event into the queue. -This can be useful if you read an event and then decide that you -would rather deal with it later. -There is no limit to the number of times in succession that you can call -.PN XPutBackEvent . -.NH 2 -Sending Events to Other Applications -.XS -\*(SN Sending Events to Other Applications -.XE -.LP -To send an event to a specified window, use -.PN XSendEvent . -.IN "XSendEvent" -This function is often used in selection processing. -For example, the owner of a selection should use -.PN XSendEvent -to send a -.PN SelectionNotify -event to a requestor when a selection has been converted -and stored as a property. -.IN "XSendEvent" "" "@DEF@" -.sM -.FD 0 -Status XSendEvent\^(\^\fIdisplay\fP, \fIw\fP\^, \fIpropagate\fP\^, \fIevent_mask\fP\^, \fIevent_send\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - Bool \fIpropagate\fP\^; -.br - long \fIevent_mask\fP\^; -.br - XEvent *\fIevent_send\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window the event is to be sent to, or -.PN PointerWindow , -or -.PN InputFocus . -.IP \fIpropagate\fP 1i -Specifies a Boolean value. -.IP \fIevent_mask\fP 1i -Specifies the event mask. -.IP \fIevent_send\fP 1i -Specifies the event that is to be sent. -.LP -.eM -The -.PN XSendEvent -function identifies the destination window, -determines which clients should receive the specified events, -and ignores any active grabs. -This function requires you to pass an event mask. -For a discussion of the valid event mask names, -see section 10.3. -This function uses the w argument to identify the destination window as follows: -.IP \(bu 5 -If w is -.PN PointerWindow , -the destination window is the window that contains the pointer. -.IP \(bu 5 -If w is -.PN InputFocus -and if the focus window contains the pointer, -the destination window is the window that contains the pointer; -otherwise, the destination window is the focus window. -.LP -To determine which clients should receive the specified events, -.PN XSendEvent -uses the propagate argument as follows: -.IP \(bu 5 -If event_mask is the empty set, -the event is sent to the client that created the destination window. -If that client no longer exists, -no event is sent. -.IP \(bu 5 -If propagate is -.PN False , -the event is sent to every client selecting on destination any of the event -types in the event_mask argument. -.IP \(bu 5 -If propagate is -.PN True -and no clients have selected on destination any of -the event types in event-mask, the destination is replaced with the -closest ancestor of destination for which some client has selected a -type in event-mask and for which no intervening window has that type in its -do-not-propagate-mask. -If no such window exists or if the window is -an ancestor of the focus window and -.PN InputFocus -was originally specified -as the destination, the event is not sent to any clients. -Otherwise, the event is reported to every client selecting on the final -destination any of the types specified in event_mask. -.LP -The event in the -.PN XEvent -structure must be one of the core events or one of the events -defined by an extension (or a -.PN BadValue -error results) so that the X server can correctly byte-swap -the contents as necessary. -The contents of the event are -otherwise unaltered and unchecked by the X server except to force send_event to -.PN True -in the forwarded event and to set the serial number in the event correctly; -therefore these fields -and the display field are ignored by -.PN XSendEvent . -.LP -.PN XSendEvent -returns zero if the conversion to wire protocol format failed -and returns nonzero otherwise. -.LP -.PN XSendEvent -can generate -.PN BadValue -and -.PN BadWindow -errors. -.NH 2 -Getting Pointer Motion History -.XS -\*(SN Getting Pointer Motion History -.XE -.LP -Some X server implementations will maintain a more complete -history of pointer motion than is reported by event notification. -The pointer position at each pointer hardware interrupt may be -stored in a buffer for later retrieval. -This buffer is called the motion history buffer. -For example, a few applications, such as paint programs, -want to have a precise history of where the pointer -traveled. -However, this historical information is highly excessive for most applications. -.LP -.sp -To determine the approximate maximum number of elements in the motion buffer, -use -.PN XDisplayMotionBufferSize . -.IN "XDisplayMotionBufferSize" "" "@DEF@" -.sM -.FD 0 -unsigned long XDisplayMotionBufferSize\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -The server may retain the recent history of the pointer motion -and do so to a finer granularity than is reported by -.PN MotionNotify -events. -The -.PN XGetMotionEvents -function makes this history available. -.LP -.sp -To get the motion history for a specified window and time, use -.PN XGetMotionEvents . -.IN "XGetMotionEvents" "" "@DEF@" -.sM -.FD 0 -XTimeCoord *XGetMotionEvents\^(\^\fIdisplay\fP, \fIw\fP\^, \fIstart\fP\^, \fIstop\fP\^, \fInevents_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - Time \fIstart\fP\^, \fIstop\fP\^; -.br - int *\fInevents_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIstart\fP 1i -.br -.ns -.IP \fIstop\fP 1i -Specify the time interval in which the events are returned from the motion -history buffer. -You can pass a timestamp or -.PN CurrentTime . -.IP \fInevents_return\fP 1i -Returns the number of events from the motion history buffer. -.LP -.eM -The -.PN XGetMotionEvents -function returns all events in the motion history buffer that fall between the -specified start and stop times, inclusive, and that have coordinates -that lie within the specified window (including its borders) at its present -placement. -If the server does not support motion history, -if the start time is later than the stop time, -or if the start time is in the future, -no events are returned; -.PN XGetMotionEvents -returns NULL. -If the stop time is in the future, it is equivalent to specifying -.PN CurrentTime . -The return type for this function is a structure defined as follows: -.LP -.IN "XTimeCoord" "" "@DEF@" -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - Time time; - short x, y; -} XTimeCoord; -.De -.LP -.eM -The time member is set to the time, in milliseconds. -The x and y members are set to the coordinates of the pointer and -are reported relative to the origin -of the specified window. -To free the data returned from this call, use -.PN XFree . -.LP -.PN XGetMotionEvents -can generate a -.PN BadWindow -error. -.NH 2 -Handling Protocol Errors -.XS -\*(SN Handling Protocol Errors -.XE -.LP -Xlib provides functions that you can use to enable or disable synchronization -and to use the default error handlers. -.NH 3 -Enabling or Disabling Synchronization -.XS -\*(SN Enabling or Disabling Synchronization -.XE -.LP -When debugging X applications, -it often is very convenient to require Xlib to behave synchronously -so that errors are reported as they occur. -The following function lets you disable or enable synchronous behavior. -Note that graphics may occur 30 or more times more slowly when -synchronization is enabled. -.IN "_Xdebug" -On POSIX-conformant systems, -there is also a global variable -.PN _Xdebug -that, if set to nonzero before starting a program under a debugger, will force -synchronous library behavior. -.LP -After completing their work, -all Xlib functions that generate protocol requests call what is known as -an after function. -.PN XSetAfterFunction -sets which function is to be called. -.IN "XSetAfterFunction" "" "@DEF@" -.sM -.FD 0 -int (*XSetAfterFunction\^(\^\fIdisplay\fP, \fIprocedure\fP\^))() -.br - Display *\fIdisplay\fP\^; -.br - int (\^*\^\fIprocedure\fP\^)\^(); -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIprocedure\fP 1i -Specifies the procedure to be called. -.LP -.eM -The specified procedure is called with only a display pointer. -.PN XSetAfterFunction -returns the previous after function. -.LP -To enable or disable synchronization, use -.PN XSynchronize . -.IN "Debugging" "synchronous mode" -.IN "XSynchronize" "" "@DEF@" -.sM -.FD 0 -int (*XSynchronize\^(\^\fIdisplay\fP, \fIonoff\fP\^)\^)() -.br - Display *\fIdisplay\fP\^; -.br - Bool \fIonoff\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIonoff\fP 1i -Specifies a Boolean value that indicates whether to enable -or disable synchronization. -.LP -.eM -The -.PN XSynchronize -function returns -the previous after function. -If onoff is -.PN True , -.PN XSynchronize -turns on synchronous behavior. -If onoff is -.PN False , -.PN XSynchronize -turns off synchronous behavior. -.NH 3 -Using the Default Error Handlers -.XS -\*(SN Using the Default Error Handlers -.XE -.LP -.IN "Debugging" "error handlers" -.IN "Error" "handlers" -There are two default error handlers in Xlib: -one to handle typically fatal conditions (for example, -the connection to a display server dying because a machine crashed) -and one to handle protocol errors from the X server. -These error handlers can be changed to user-supplied routines if you -prefer your own error handling and can be changed as often as you like. -If either function is passed a NULL pointer, it will -reinvoke the default handler. -The action of the default handlers is to print an explanatory -message and exit. -.LP -.sp -To set the error handler, use -.PN XSetErrorHandler . -.IN "XSetErrorHandler" "" "@DEF@" -.sM -.FD 0 -int (*XSetErrorHandler\^(\^\fIhandler\fP\^)\^)\^(\^) -.br - int (\^*\^\fIhandler\fP\^)\^(Display *, XErrorEvent *) -.FN -.IP \fIhandler\fP 1i -Specifies the program's supplied error handler. -.LP -.eM -Xlib generally calls the program's -supplied error handler whenever an error is received. -It is not called on -.PN BadName -errors from -.PN OpenFont , -.PN LookupColor , -or -.PN AllocNamedColor -protocol requests or on -.PN BadFont -errors from a -.PN QueryFont -protocol request. -These errors generally are reflected back to the program through the -procedural interface. -Because this condition is not assumed to be fatal, -it is acceptable for your error handler to return; -the returned value is ignored. -However, the error handler should not -call any functions (directly or indirectly) on the display -that will generate protocol requests or that will look for input events. -The previous error handler is returned. -.LP -The -.PN XErrorEvent -structure contains: -.IN "Debugging" "error event" -.LP -.IN "XErrorEvent" "" "@DEF" -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { - int type; - Display *display; /* Display the event was read from */ - unsigned long serial; /* serial number of failed request */ - unsigned char error_code; /* error code of failed request */ - unsigned char request_code; /* Major op-code of failed request */ - unsigned char minor_code; /* Minor op-code of failed request */ - XID resourceid; /* resource id */ -} XErrorEvent; -.De -.LP -.IN "Serial Number" -The serial member is the number of requests, starting from one, -sent over the network connection since it was opened. -It is the number that was the value of -.PN NextRequest -immediately before the failing call was made. -The request_code member is a protocol request -of the procedure that failed, as defined in -.hN X11/Xproto.h . -The following error codes can be returned by the functions described in this -chapter: -.br -.ne 13 -.IN "Debugging" "error numbers" -.IN "Error" "codes" -.\".CP T 3 -.\"Error Codes -.IN "BadAccess" "" "@DEF@" -.IN "BadAlloc" "" "@DEF@" -.IN "BadAtom" "" "@DEF@" -.IN "BadColor" "" "@DEF@" -.IN "BadCursor" "" "@DEF@" -.IN "BadDrawable" "" "@DEF@" -.IN "BadFont" "" "@DEF@" -.IN "BadGC" "" "@DEF@" -.IN "BadIDChoice" "" "@DEF@" -.TS H -l c -lw(1.75i) lw(4i). -_ -.sp 6p -.B -Error Code Description -.sp 6p -_ -.sp 6p -.TH -.R -T{ -.PN BadAccess -T} T{ -A client attempts to grab a key/button combination already grabbed -by another client. -.sp 3p -A client attempts to free a colormap entry that it had not already allocated -or to free an entry in a colormap that was created with all entries writable. -.sp 3p -A client attempts to store into a read-only or unallocated colormap entry. -.sp 3p -A client attempts to modify the access control list from other than the local -(or otherwise authorized) host. -.sp 3p -A client attempts to select an event type that another client -has already selected. -T} -.sp 3p -T{ -.PN BadAlloc -T} T{ -The server fails to allocate the requested resource. -Note that the explicit listing of -.PN BadAlloc -errors in requests only covers allocation errors at a very coarse level -and is not intended to (nor can it in practice hope to) cover all cases of -a server running out of allocation space in the middle of service. -The semantics when a server runs out of allocation space are left unspecified, -but a server may generate a -.PN BadAlloc -error on any request for this reason, -and clients should be prepared to receive such errors and handle or discard -them. -T} -.sp 3p -T{ -.PN BadAtom -T} T{ -A value for an atom argument does not name a defined atom. -T} -.sp 3p -T{ -.PN BadColor -T} T{ -A value for a colormap argument does not name a defined colormap. -T} -.sp 3p -T{ -.PN BadCursor -T} T{ -A value for a cursor argument does not name a defined cursor. -T} -.sp 3p -T{ -.PN BadDrawable -T} T{ -A value for a drawable argument does not name a defined window or pixmap. -T} -.sp 3p -T{ -.PN BadFont -T} T{ -A value for a font argument does not name a defined font (or, in some cases, -.PN GContext ). -T} -.sp 3p -T{ -.PN BadGC -T} T{ -A value for a -.PN GContext -argument does not name a defined -.PN GContext . -T} -.sp 3p -T{ -.PN BadIDChoice -T} T{ -The value chosen for a resource identifier either is not included in the -range assigned to the client or is already in use. -Under normal circumstances, -this cannot occur and should be considered a server or Xlib error. -T} -.sp 3p -T{ -.PN BadImplementation -T} T{ -The server does not implement some aspect of the request. -A server that generates this error for a core request is deficient. -As such, this error is not listed for any of the requests, -but clients should be prepared to receive such errors -and handle or discard them. -T} -.sp 3p -T{ -.PN BadLength -T} T{ -The length of a request is shorter or longer than that required to -contain the arguments. -This is an internal Xlib or server error. -.sp 3p -The length of a request exceeds the maximum length accepted by the server. -T} -.sp 3p -T{ -.PN BadMatch -T} T{ -In a graphics request, -the root and depth of the graphics context do not match those of the drawable. -.sp 3p -An -.PN InputOnly -window is used as a drawable. -.sp 3p -Some argument or pair of arguments has the correct type and range, -but it fails to match in some other way required by the request. -.sp 3p -An -.PN InputOnly -window lacks this attribute. -T} -.sp 3p -T{ -.PN BadName -T} T{ -A font or color of the specified name does not exist. -T} -.sp 3p -T{ -.PN BadPixmap -T} T{ -A value for a pixmap argument does not name a defined pixmap. -T} -.sp 3p -T{ -.PN BadRequest -T} T{ -The major or minor opcode does not specify a valid request. -This usually is an Xlib or server error. -T} -.sp 3p -T{ -.PN BadValue -T} T{ -Some numeric value falls outside of the range of values accepted -by the request. -Unless a specific range is specified for an argument, -the full range defined by the argument's type is accepted. -Any argument defined as a set of alternatives typically can generate -this error (due to the encoding). -T} -.sp 3p -T{ -.PN BadWindow -T} T{ -A value for a window argument does not name a defined window. -T} -.sp 6p -_ -.TE -.IN "BadImplementation" "" "@DEF@" -.IN "BadLength" "" "@DEF@" -.IN "BadMatch" "" "@DEF@" -.IN "BadName" "" "@DEF@" -.IN "BadPixmap" "" "@DEF@" -.IN "BadRequest" "" "@DEF@" -.IN "BadValue" "" "@DEF@" -.IN "BadWindow" "" "@DEF@" -.NT Note -The -.PN BadAtom , -.PN BadColor , -.PN BadCursor , -.PN BadDrawable , -.PN BadFont , -.PN BadGC , -.PN BadPixmap , -and -.PN BadWindow -errors are also used when the argument type is extended by a set of -fixed alternatives. -.NE -.sp -.LP -To obtain textual descriptions of the specified error code, use -.PN XGetErrorText . -.IN "XGetErrorText" "" "@DEF@" -.IN "Debugging" "error message strings" -.sM -.FD 0 -XGetErrorText\^(\^\fIdisplay\fP, \fIcode\fP, \fIbuffer_return\fP, \fIlength\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIcode\fP\^; -.br - char *\fIbuffer_return\fP\^; -.br - int \fIlength\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcode\fP 1i -Specifies the error code for which you want to obtain a description. -.IP \fIbuffer_return\fP 1i -Returns the error description. -.IP \fIlength\fP 1i -Specifies the size of the buffer. -.LP -.eM -The -.PN XGetErrorText -function copies a null-terminated string describing the specified error code -into the specified buffer. -The returned text is in the encoding of the current locale. -It is recommended that you use this function to obtain an error description -because extensions to Xlib may define their own error codes -and error strings. -.LP -.sp -To obtain error messages from the error database, use -.PN XGetErrorDatabaseText . -.IN "XGetErrorDatabaseText" "" "@DEF@" -.sM -.FD 0 -XGetErrorDatabaseText\^(\^\fIdisplay\fP, \fIname\fP, \fImessage\fP, \fIdefault_string\fP, \fIbuffer_return\fP, \fIlength\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - char *\fIname\fP, *\fImessage\fP\^; -.br - char *\fIdefault_string\fP\^; -.br - char *\fIbuffer_return\fP\^; -.br - int \fIlength\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIname\fP 1i -Specifies the name of the application. -.IP \fImessage\fP 1i -Specifies the type of the error message. -.IP \fIdefault_string\fP 1i -Specifies the default error message if none is found in the database. -.IP \fIbuffer_return\fP 1i -Returns the error description. -.IP \fIlength\fP 1i -Specifies the size of the buffer. -.LP -.eM -The -.PN XGetErrorDatabaseText -function returns a null-terminated message -(or the default message) from the error message -database. -Xlib uses this function internally to look up its error messages. -The text in the default_string argument is assumed -to be in the encoding of the current locale, -and the text stored in the buffer_return argument -is in the encoding of the current locale. -.LP -The name argument should generally be the name of your application. -The message argument should indicate which type of error message you want. -If the name and message are not in the Host Portable Character Encoding, -the result is implementation-dependent. -Xlib uses three predefined ``application names'' to report errors. -In these names, -uppercase and lowercase matter. -.IP XProtoError 1i -The protocol error number is used as a string for the message argument. -.IP XlibMessage 1i -These are the message strings that are used internally by the library. -.IP XRequest 1i -For a core protocol request, -the major request protocol number is used for the message argument. -For an extension request, -the extension name (as given by -.PN InitExtension ) -followed by a period (\.) and the minor request protocol number -is used for the message argument. -If no string is found in the error database, -the default_string is returned to the buffer argument. -.LP -.sp -To report an error to the user when the requested display does not exist, use -.PN XDisplayName . -.IN "XDisplayName" "" "@DEF@" -.sM -.FD 0 -char *XDisplayName\^(\^\fIstring\fP\^) -.br - char *\fIstring\fP\^; -.FN -.IP \fIstring\fP 1i -Specifies the character string. -.LP -.eM -The -.PN XDisplayName -function returns the name of the display that -.PN XOpenDisplay -would attempt to use. -If a NULL string is specified, -.PN XDisplayName -looks in the environment for the display and returns the display name that -.PN XOpenDisplay -would attempt to use. -This makes it easier to report to the user precisely which display the -program attempted to open when the initial connection attempt failed. -.LP -.sp -To handle fatal I/O errors, use -.PN XSetIOErrorHandler . -.IN "XSetIOErrorHandler" "" "@DEF@" -.sM -.FD 0 -int (*XSetIOErrorHandler\^(\^\fIhandler\fP\^)\^)\^(\^) -.br - int (\^*\^\fIhandler\fP\^)(Display *); -.FN -.IP \fIhandler\fP 1i -Specifies the program's supplied error handler. -.LP -.eM -The -.PN XSetIOErrorHandler -sets the fatal I/O error handler. -Xlib calls the program's supplied error handler if any sort of system call -error occurs (for example, the connection to the server was lost). -This is assumed to be a fatal condition, -and the called routine should not return. -If the I/O error handler does return, -the client process exits. -.LP -Note that the previous error handler is returned. -.bp diff --git a/doc/xorg-docs/specs/X11/CH12 b/doc/xorg-docs/specs/X11/CH12 deleted file mode 100644 index 08b9ba93a..000000000 --- a/doc/xorg-docs/specs/X11/CH12 +++ /dev/null @@ -1,2680 +0,0 @@ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by -.\" Digital Equipment Corporation -.\" -.\" Portions Copyright \(co 1990, 1991 by -.\" Tektronix, Inc. -.\" -.\" Permission to use, copy, modify and distribute this documentation for -.\" any purpose and without fee is hereby granted, provided that the above -.\" copyright notice appears in all copies and that both that copyright notice -.\" and this permission notice appear in all copies, and that the names of -.\" Digital and Tektronix not be used in in advertising or publicity pertaining -.\" to this documentation without specific, written prior permission. -.\" Digital and Tektronix makes no representations about the suitability -.\" of this documentation for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBChapter 12\fP\s-1 - -\s+1\fBInput Device Functions\fP\s-1 -.sp 2 -.nr H1 12 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.na -.LP -.XS -Chapter 12: Input Device Functions -.XE -You can use the Xlib input device functions to: -.IP \(bu 5 -Grab the pointer and individual buttons on the pointer -.IP \(bu 5 -Grab the keyboard and individual keys on the keyboard -.IP \(bu 5 -Resume event processing -.IP \(bu 5 -Move the pointer -.IP \(bu 5 -Set the input focus -.IP \(bu 5 -Manipulate the keyboard and pointer settings -.IP \(bu 5 -Manipulate the keyboard encoding -.NH 2 -Pointer Grabbing -.XS -\*(SN Pointer Grabbing -.XE -.LP -Xlib provides functions that you can use to control input from the pointer, -which usually is a mouse. -Usually, as soon as keyboard and mouse events occur, -the X server delivers them to the appropriate client, -which is determined by the window and input focus. -The X server provides sufficient control over event delivery to -allow window managers to support mouse ahead and various other -styles of user interface. -Many of these user interfaces depend on synchronous delivery of events. -The delivery of pointer and keyboard events can be controlled -independently. -.LP -When mouse buttons or keyboard keys are grabbed, events -will be sent to the grabbing client rather than the normal -client who would have received the event. -If the keyboard or pointer is in asynchronous mode, -further mouse and keyboard events will continue to be processed. -If the keyboard or pointer is in synchronous mode, no -further events are processed until the grabbing client -allows them (see -.PN XAllowEvents ). -The keyboard or pointer is considered frozen during this -interval. -The event that triggered the grab can also be replayed. -.LP -Note that the logical state of a device (as seen by client applications) -may lag the physical state if device event processing is frozen. -.LP -.IN "Active grab" "" "@DEF@" -There are two kinds of grabs: -active and passive. -An active grab occurs when a single client grabs the keyboard and/or pointer -explicitly (see -.PN XGrabPointer -and -.PN XGrabKeyboard ). -.IN "Passive grab" -A passive grab occurs when clients grab a particular keyboard key -or pointer button in a window, -and the grab will activate when the key or button is actually pressed. -Passive grabs are convenient for implementing reliable pop-up menus. -For example, you can guarantee that the pop-up is mapped -before the up pointer button event occurs by -grabbing a button requesting synchronous behavior. -The down event will trigger the grab and freeze further -processing of pointer events until you have the chance to -map the pop-up window. -You can then allow further event processing. -The up event will then be correctly processed relative to the -pop-up window. -.LP -For many operations, -there are functions that take a time argument. -The X server includes a timestamp in various events. -One special time, called -.IN "CurrentTime" "" "@DEF@" -.IN "Time" "" "@DEF@" -.PN CurrentTime , -represents the current server time. -The X server maintains the time when the input focus was last changed, -when the keyboard was last grabbed, -when the pointer was last grabbed, -or when a selection was last changed. -Your -application may be slow reacting to an event. -You often need some way to specify that your -request should not occur if another application has in the meanwhile -taken control of the keyboard, pointer, or selection. -By providing the timestamp from the event in the request, -you can arrange that the operation not take effect -if someone else has performed an operation in the meanwhile. -.LP -A timestamp is a time value, expressed in milliseconds. -It typically is the time since the last server reset. -Timestamp values wrap around (after about 49.7 days). -The server, given its current time is represented by timestamp T, -always interprets timestamps from clients by treating half of the timestamp -space as being later in time than T. -One timestamp value, named -.PN CurrentTime , -is never generated by the server. -This value is reserved for use in requests to represent the current server time. -.LP -For many functions in this section, -you pass pointer event mask bits. -The valid pointer event mask bits are: -.PN ButtonPressMask , -.PN ButtonReleaseMask , -.PN EnterWindowMask , -.PN LeaveWindowMask , -.PN PointerMotionMask , -.PN PointerMotionHintMask , -.PN Button1MotionMask , -.PN Button2MotionMask , -.PN Button3MotionMask , -.PN Button4MotionMask , -.PN Button5MotionMask , -.PN ButtonMotionMask , -and -.PN KeyMapStateMask . -For other functions in this section, -you pass keymask bits. -The valid keymask bits are: -.PN ShiftMask , -.PN LockMask , -.PN ControlMask , -.PN Mod1Mask , -.PN Mod2Mask , -.PN Mod3Mask , -.PN Mod4Mask , -and -.PN Mod5Mask . -.LP -.sp -To grab the pointer, use -.PN XGrabPointer . -.IN "Grabbing" "pointer" -.IN "Pointer" "grabbing" -.IN "XGrabPointer" "" "@DEF@" -.sM -.FD 0 -int XGrabPointer\^(\^\fIdisplay\fP, \fIgrab_window\fP\^, \fIowner_events\fP\^, \fIevent_mask\fP\^, \fIpointer_mode\fP\^, - \fIkeyboard_mode\fP\^, \fIconfine_to\fP\^, \fIcursor\fP\^, \fItime\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIgrab_window\fP\^; -.br - Bool \fIowner_events\fP\^; -.br - unsigned int \fIevent_mask\fP\^; -.br - int \fIpointer_mode\fP\^, \fIkeyboard_mode\fP\^; -.br - Window \fIconfine_to\fP\^; -.br - Cursor \fIcursor\fP\^; -.br - Time \fItime\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIgrab_window\fP 1i -Specifies the grab window. -.IP \fIowner_events\fP 1i -Specifies a Boolean value that indicates whether the pointer -events are to be reported as usual or reported with respect to the grab window -if selected by the event mask. -.IP \fIevent_mask\fP 1i -Specifies which pointer events are reported to the client. -The mask is the bitwise inclusive OR of the valid pointer event mask bits. -.IP \fIpointer_mode\fP 1i -Specifies further processing of pointer events. -You can pass -.PN GrabModeSync -or -.PN GrabModeAsync . -.IP \fIkeyboard_mode\fP 1i -Specifies further processing of keyboard events. -You can pass -.PN GrabModeSync -or -.PN GrabModeAsync . -.IP \fIconfine_to\fP 1i -Specifies the window to confine the pointer in or -.PN None . -.IP \fIcursor\fP 1i -Specifies the cursor that is to be displayed during the grab or -.PN None . -.IP \fItime\fP 1i -Specifies the time. -You can pass either a timestamp or -.PN CurrentTime . -.LP -.eM -The -.PN XGrabPointer -function actively grabs control of the pointer and returns -.PN GrabSuccess -if the grab was successful. -Further pointer events are reported only to the grabbing client. -.PN XGrabPointer -overrides any active pointer grab by this client. -If owner_events is -.PN False , -all generated pointer events -are reported with respect to grab_window and are reported only if -selected by event_mask. -If owner_events is -.PN True -and if a generated -pointer event would normally be reported to this client, -it is reported as usual. -Otherwise, the event is reported with respect to the -grab_window and is reported only if selected by event_mask. -For either value of owner_events, unreported events are discarded. -.LP -If the pointer_mode is -.PN GrabModeAsync , -pointer event processing continues as usual. -If the pointer is currently frozen by this client, -the processing of events for the pointer is resumed. -If the pointer_mode is -.PN GrabModeSync , -the state of the pointer, as seen by -client applications, -appears to freeze, and the X server generates no further pointer events -until the grabbing client calls -.PN XAllowEvents -or until the pointer grab is released. -Actual pointer changes are not lost while the pointer is frozen; -they are simply queued in the server for later processing. -.LP -If the keyboard_mode is -.PN GrabModeAsync , -keyboard event processing is unaffected by activation of the grab. -If the keyboard_mode is -.PN GrabModeSync , -the state of the keyboard, as seen by -client applications, -appears to freeze, and the X server generates no further keyboard events -until the grabbing client calls -.PN XAllowEvents -or until the pointer grab is released. -Actual keyboard changes are not lost while the pointer is frozen; -they are simply queued in the server for later processing. -.LP -If a cursor is specified, it is displayed regardless of what -window the pointer is in. -If -.PN None -is specified, -the normal cursor for that window is displayed -when the pointer is in grab_window or one of its subwindows; -otherwise, the cursor for grab_window is displayed. -.LP -If a confine_to window is specified, -the pointer is restricted to stay contained in that window. -The confine_to window need have no relationship to the grab_window. -If the pointer is not initially in the confine_to window, -it is warped automatically to the closest edge -just before the grab activates and enter/leave events are generated as usual. -If the confine_to window is subsequently reconfigured, -the pointer is warped automatically, as necessary, -to keep it contained in the window. -.LP -The time argument allows you to avoid certain circumstances that come up -if applications take a long time to respond or if there are long network -delays. -Consider a situation where you have two applications, both -of which normally grab the pointer when clicked on. -If both applications specify the timestamp from the event, -the second application may wake up faster and successfully grab the pointer -before the first application. -The first application then will get an indication that the other application -grabbed the pointer before its request was processed. -.LP -.PN XGrabPointer -generates -.PN EnterNotify -and -.PN LeaveNotify -events. -.LP -Either if grab_window or confine_to window is not viewable -or if the confine_to window lies completely outside the boundaries of the root -window, -.PN XGrabPointer -fails and returns -.PN GrabNotViewable . -If the pointer is actively grabbed by some other client, -it fails and returns -.PN AlreadyGrabbed . -If the pointer is frozen by an active grab of another client, -it fails and returns -.PN GrabFrozen . -If the specified time is earlier than the last-pointer-grab time or later -than the current X server time, it fails and returns -.PN GrabInvalidTime . -Otherwise, the last-pointer-grab time is set to the specified time -.Pn ( CurrentTime -is replaced by the current X server time). -.LP -.PN XGrabPointer -can generate -.PN BadCursor , -.PN BadValue , -and -.PN BadWindow -errors. -.LP -.sp -To ungrab the pointer, use -.PN XUngrabPointer . -.IN "Ungrabbing" "pointer" -.IN "Pointer" "ungrabbing" -.IN "XUngrabPointer" "" "@DEF@" -.sM -.FD 0 -XUngrabPointer\^(\^\fIdisplay\fP, \fItime\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Time \fItime\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fItime\fP 1i -Specifies the time. -You can pass either a timestamp or -.PN CurrentTime . -.LP -.eM -The -.PN XUngrabPointer -function releases the pointer and any queued events -if this client has actively grabbed the pointer from -.PN XGrabPointer , -.PN XGrabButton , -or from a normal button press. -.PN XUngrabPointer -does not release the pointer if the specified -time is earlier than the last-pointer-grab time or is later than the -current X server time. -It also generates -.PN EnterNotify -and -.PN LeaveNotify -events. -The X server performs an -.PN UngrabPointer -request automatically if the event window or confine_to window -for an active pointer grab becomes not viewable -or if window reconfiguration causes the confine_to window to lie completely -outside the boundaries of the root window. -.LP -.sp -To change an active pointer grab, use -.PN XChangeActivePointerGrab . -.IN "Pointer" "grabbing" -.IN "Changing" "pointer grab" -.IN "XChangeActivePointerGrab" "" "@DEF@" -.sM -.FD 0 -XChangeActivePointerGrab\^(\^\fIdisplay\fP, \fIevent_mask\fP\^, \fIcursor\fP\^, \fItime\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - unsigned int \fIevent_mask\fP\^; -.br - Cursor \fIcursor\fP\^; -.br - Time \fItime\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIevent_mask\fP 1i -Specifies which pointer events are reported to the client. -The mask is the bitwise inclusive OR of the valid pointer event mask bits. -.IP \fIcursor\fP 1i -Specifies the cursor that is to be displayed or -.PN None . -.IP \fItime\fP 1i -Specifies the time. -You can pass either a timestamp or -.PN CurrentTime . -.LP -.eM -The -.PN XChangeActivePointerGrab -function changes the specified dynamic parameters if the pointer is actively -grabbed by the client and if the specified time is no earlier than the -last-pointer-grab time and no later than the current X server time. -This function has no effect on the passive parameters of an -.PN XGrabButton . -The interpretation of event_mask and cursor is the same as described in -.PN XGrabPointer . -.LP -.PN XChangeActivePointerGrab -can generate -.PN BadCursor -and -.PN BadValue -errors. -.LP -.sp -To grab a pointer button, use -.PN XGrabButton . -.IN "Grabbing" "buttons" -.IN "Button" "grabbing" -.IN "XGrabButton" "" "@DEF@" -.sM -.FD 0 -XGrabButton\^(\^\fIdisplay\fP, \fIbutton\fP\^, \fImodifiers\fP\^, \fIgrab_window\fP\^, \fIowner_events\fP\^, \fIevent_mask\fP\^, -.br - \fIpointer_mode\fP\^, \fIkeyboard_mode\fP\^, \fIconfine_to\fP\^, \fIcursor\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - unsigned int \fIbutton\fP\^; -.br - unsigned int \fImodifiers\fP\^; -.br - Window \fIgrab_window\fP\^; -.br - Bool \fIowner_events\fP\^; -.br - unsigned int \fIevent_mask\fP\^; -.br - int \fIpointer_mode\fP\^, \fIkeyboard_mode\fP\^; -.br - Window \fIconfine_to\fP\^; -.br - Cursor \fIcursor\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Bu grabbed -.IP \fIbutton\fP 1i -Specifies the pointer button that is to be \*(Bu or -.PN AnyButton . -.IP \fImodifiers\fP 1i -Specifies the set of keymasks or -.PN AnyModifier . -The mask is the bitwise inclusive OR of the valid keymask bits. -.IP \fIgrab_window\fP 1i -Specifies the grab window. -.IP \fIowner_events\fP 1i -Specifies a Boolean value that indicates whether the pointer -events are to be reported as usual or reported with respect to the grab window -if selected by the event mask. -.IP \fIevent_mask\fP 1i -Specifies which pointer events are reported to the client. -The mask is the bitwise inclusive OR of the valid pointer event mask bits. -.IP \fIpointer_mode\fP 1i -Specifies further processing of pointer events. -You can pass -.PN GrabModeSync -or -.PN GrabModeAsync . -.IP \fIkeyboard_mode\fP 1i -Specifies further processing of keyboard events. -You can pass -.PN GrabModeSync -or -.PN GrabModeAsync . -.IP \fIconfine_to\fP 1i -Specifies the window to confine the pointer in or -.PN None . -.IP \fIcursor\fP 1i -Specifies the cursor that is to be displayed or -.PN None . -.LP -.eM -The -.PN XGrabButton -function establishes a passive grab. -In the future, -the pointer is actively grabbed (as for -.PN XGrabPointer ), -the last-pointer-grab time is set to the time at which the button was pressed -(as transmitted in the -.PN ButtonPress -event), and the -.PN ButtonPress -event is reported if all of the following conditions are true: -.IP \(bu 5 -The pointer is not grabbed, and the specified button is logically pressed -when the specified modifier keys are logically down, -and no other buttons or modifier keys are logically down. -.IP \(bu 5 -The grab_window contains the pointer. -.IP \(bu 5 -The confine_to window (if any) is viewable. -.IP \(bu 5 -A passive grab on the same button/key combination does not exist -on any ancestor of grab_window. -.LP -The interpretation of the remaining arguments is as for -.PN XGrabPointer . -The active grab is terminated automatically when the logical state of the -pointer has all buttons released -(independent of the state of the logical modifier keys). -.LP -Note that the logical state of a device (as seen by client applications) -may lag the physical state if device event processing is frozen. -.LP -This request overrides all previous grabs by the same client on the same -button/key combinations on the same window. -A modifiers of -.PN AnyModifier -is equivalent to issuing the grab request for all -possible modifier combinations (including the combination of no modifiers). -It is not required that all modifiers specified have currently assigned -KeyCodes. -A button of -.PN AnyButton -is equivalent to -issuing the request for all possible buttons. -Otherwise, it is not required that the specified button currently be assigned -to a physical button. -.LP -If some other client has already issued an -.PN XGrabButton -with the same button/key combination on the same window, a -.PN BadAccess -error results. -When using -.PN AnyModifier -or -.PN AnyButton , -the request fails completely, -and a -.PN BadAccess -error results (no grabs are -established) if there is a conflicting grab for any combination. -.PN XGrabButton -has no effect on an active grab. -.LP -.PN XGrabButton -can generate -.PN BadCursor , -.PN BadValue , -and -.PN BadWindow -errors. -.LP -.sp -To ungrab a pointer button, use -.PN XUngrabButton . -.IN "Ungrabbing" "buttons" -.IN "Button" "ungrabbing" -.IN "XUngrabButton" "" "@DEF@" -.sM -.FD 0 -XUngrabButton\^(\^\fIdisplay\fP, \fIbutton\fP\^, \fImodifiers\fP\^, \fIgrab_window\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - unsigned int \fIbutton\fP\^; -.br - unsigned int \fImodifiers\fP\^; -.br - Window \fIgrab_window\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Bu released -.IP \fIbutton\fP 1i -Specifies the pointer button that is to be \*(Bu or -.PN AnyButton . -.IP \fImodifiers\fP 1i -Specifies the set of keymasks or -.PN AnyModifier . -The mask is the bitwise inclusive OR of the valid keymask bits. -.IP \fIgrab_window\fP 1i -Specifies the grab window. -.LP -.eM -The -.PN XUngrabButton -function releases the passive button/key combination on the specified window if -it was grabbed by this client. -A modifiers of -.PN AnyModifier -is -equivalent to issuing -the ungrab request for all possible modifier combinations, including -the combination of no modifiers. -A button of -.PN AnyButton -is equivalent to issuing the -request for all possible buttons. -.PN XUngrabButton -has no effect on an active grab. -.LP -.PN XUngrabButton -can generate -.PN BadValue -and -.PN BadWindow -errors. -.NH 2 -Keyboard Grabbing -.XS -\*(SN Keyboard Grabbing -.XE -.LP -Xlib provides functions that you can use to grab or ungrab the keyboard -as well as allow events. -.LP -For many functions in this section, -you pass keymask bits. -The valid keymask bits are: -.PN ShiftMask , -.PN LockMask , -.PN ControlMask , -.PN Mod1Mask , -.PN Mod2Mask , -.PN Mod3Mask , -.PN Mod4Mask , -and -.PN Mod5Mask . -.LP -.sp -To grab the keyboard, use -.PN XGrabKeyboard . -.IN "Keyboard" "grabbing" -.IN "Grabbing" "keyboard" -.IN "XGrabKeyboard" "" "@DEF@" -.sM -.FD 0 -int XGrabKeyboard\^(\^\fIdisplay\fP, \fIgrab_window\fP\^, \fIowner_events\fP\^, \fIpointer_mode\fP\^, \fIkeyboard_mode\fP\^, \fItime\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIgrab_window\fP\^; -.br - Bool \fIowner_events\fP\^; -.br - int \fIpointer_mode\fP\^, \fIkeyboard_mode\fP\^; -.br - Time \fItime\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIgrab_window\fP 1i -Specifies the grab window. -.IP \fIowner_events\fP 1i -Specifies a Boolean value that indicates whether the keyboard events -are to be reported as usual. -.IP \fIpointer_mode\fP 1i -Specifies further processing of pointer events. -You can pass -.PN GrabModeSync -or -.PN GrabModeAsync . -.IP \fIkeyboard_mode\fP 1i -Specifies further processing of keyboard events. -You can pass -.PN GrabModeSync -or -.PN GrabModeAsync . -.IP \fItime\fP 1i -Specifies the time. -You can pass either a timestamp or -.PN CurrentTime . -.LP -.eM -The -.PN XGrabKeyboard -function actively grabs control of the keyboard and generates -.PN FocusIn -and -.PN FocusOut -events. -Further key events are reported only to the -grabbing client. -.PN XGrabKeyboard -overrides any active keyboard grab by this client. -If owner_events is -.PN False , -all generated key events are reported with -respect to grab_window. -If owner_events is -.PN True -and if a generated -key event would normally be reported to this client, it is reported -normally; otherwise, the event is reported with respect to the -grab_window. -Both -.PN KeyPress -and -.PN KeyRelease -events are always reported, -independent of any event selection made by the client. -.LP -If the keyboard_mode argument is -.PN GrabModeAsync , -keyboard event processing continues -as usual. -If the keyboard is currently frozen by this client, -then processing of keyboard events is resumed. -If the keyboard_mode argument is -.PN GrabModeSync , -the state of the keyboard (as seen by client applications) appears to freeze, -and the X server generates no further keyboard events until the -grabbing client issues a releasing -.PN XAllowEvents -call or until the keyboard grab is released. -Actual keyboard changes are not lost while the keyboard is frozen; -they are simply queued in the server for later processing. -.LP -If pointer_mode is -.PN GrabModeAsync , -pointer event processing is unaffected -by activation of the grab. -If pointer_mode is -.PN GrabModeSync , -the state of the pointer (as seen by client applications) appears to freeze, -and the X server generates no further pointer events -until the grabbing client issues a releasing -.PN XAllowEvents -call or until the keyboard grab is released. -Actual pointer changes are not lost while the pointer is frozen; -they are simply queued in the server for later processing. -.LP -If the keyboard is actively grabbed by some other client, -.PN XGrabKeyboard -fails and returns -.PN AlreadyGrabbed . -If grab_window is not viewable, -it fails and returns -.PN GrabNotViewable . -If the keyboard is frozen by an active grab of another client, -it fails and returns -.PN GrabFrozen . -If the specified time is earlier than the last-keyboard-grab time -or later than the current X server time, -it fails and returns -.PN GrabInvalidTime . -Otherwise, the last-keyboard-grab time is set to the specified time -.Pn ( CurrentTime -is replaced by the current X server time). -.LP -.PN XGrabKeyboard -can generate -.PN BadValue -and -.PN BadWindow -errors. -.LP -.sp -To ungrab the keyboard, use -.PN XUngrabKeyboard . -.IN "Keyboard" "ungrabbing" -.IN "Ungrabbing" "keyboard" -.IN "XUngrabKeyboard" "" "@DEF@" -.sM -.FD 0 -XUngrabKeyboard\^(\^\fIdisplay\fP, \fItime\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Time \fItime\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fItime\fP 1i -Specifies the time. -You can pass either a timestamp or -.PN CurrentTime . -.LP -.eM -The -.PN XUngrabKeyboard -function -releases the keyboard and any queued events if this client has it actively grabbed from -either -.PN XGrabKeyboard -or -.PN XGrabKey . -.PN XUngrabKeyboard -does not release the keyboard and any queued events -if the specified time is earlier than -the last-keyboard-grab time or is later than the current X server time. -It also generates -.PN FocusIn -and -.PN FocusOut -events. -The X server automatically performs an -.PN UngrabKeyboard -request if the event window for an -active keyboard grab becomes not viewable. -.LP -.sp -To passively grab a single key of the keyboard, use -.PN XGrabKey . -.IN "Key" "grabbing" -.IN "Grabbing" "keys" -.IN "XGrabKey" "" "@DEF@" -.sM -.FD 0 -XGrabKey\^(\^\fIdisplay\fP, \fIkeycode\fP\^, \fImodifiers\fP\^, \fIgrab_window\fP\^, \fIowner_events\fP\^, \fIpointer_mode\fP\^, -.br - \fIkeyboard_mode\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIkeycode\fP\^; -.br - unsigned int \fImodifiers\fP\^; -.br - Window \fIgrab_window\fP\^; -.br - Bool \fIowner_events\fP\^; -.br - int \fIpointer_mode\fP\^, \fIkeyboard_mode\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIkeycode\fP 1i -Specifies the KeyCode or -.PN AnyKey . -.IP \fImodifiers\fP 1i -Specifies the set of keymasks or -.PN AnyModifier . -The mask is the bitwise inclusive OR of the valid keymask bits. -.IP \fIgrab_window\fP 1i -Specifies the grab window. -.IP \fIowner_events\fP 1i -Specifies a Boolean value that indicates whether the keyboard events -are to be reported as usual. -.IP \fIpointer_mode\fP 1i -Specifies further processing of pointer events. -You can pass -.PN GrabModeSync -or -.PN GrabModeAsync . -.IP \fIkeyboard_mode\fP 1i -Specifies further processing of keyboard events. -You can pass -.PN GrabModeSync -or -.PN GrabModeAsync . -.LP -.eM -The -.PN XGrabKey -function establishes a passive grab on the keyboard. -In the future, -the keyboard is actively grabbed (as for -.PN XGrabKeyboard ), -the last-keyboard-grab time is set to the time at which the key was pressed -(as transmitted in the -.PN KeyPress -event), and the -.PN KeyPress -event is reported if all of the following conditions are true: -.IP \(bu 5 -The keyboard is not grabbed and the specified key -(which can itself be a modifier key) is logically pressed -when the specified modifier keys are logically down, -and no other modifier keys are logically down. -.IP \(bu 5 -Either the grab_window is an ancestor of (or is) the focus window, -or the grab_window is a descendant of the focus window and contains the pointer. -.IP \(bu 5 -A passive grab on the same key combination does not exist -on any ancestor of grab_window. -.LP -The interpretation of the remaining arguments is as for -.PN XGrabKeyboard . -The active grab is terminated automatically when the logical state of the -keyboard has the specified key released -(independent of the logical state of the modifier keys). -.LP -Note that the logical state of a device (as seen by client applications) -may lag the physical state if device event processing is frozen. -.LP -A modifiers argument of -.PN AnyModifier -is equivalent to issuing the request for all -possible modifier combinations (including the combination of no -modifiers). -It is not required that all modifiers specified have -currently assigned KeyCodes. -A keycode argument of -.PN AnyKey -is equivalent to issuing -the request for all possible KeyCodes. -Otherwise, the specified keycode must be in -the range specified by min_keycode and max_keycode in the connection -setup, -or a -.PN BadValue -error results. -.LP -If some other client has issued a -.PN XGrabKey -with the same key combination on the same window, a -.PN BadAccess -error results. -When using -.PN AnyModifier -or -.PN AnyKey , -the request fails completely, -and a -.PN BadAccess -error results (no grabs are established) -if there is a conflicting grab for any combination. -.LP -.PN XGrabKey -can generate -.PN BadAccess , -.PN BadValue , -and -.PN BadWindow -errors. -.LP -.sp -To ungrab a key, use -.PN XUngrabKey . -.IN "Key" "ungrabbing" -.IN "Ungrabbing" "keys" -.IN "XUngrabKey" "" "@DEF@" -.sM -.FD 0 -XUngrabKey\^(\^\fIdisplay\fP, \fIkeycode\fP\^, \fImodifiers\fP\^, \fIgrab_window\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIkeycode\fP\^; -.br - unsigned int \fImodifiers\fP\^; -.br - Window \fIgrab_window\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIkeycode\fP 1i -Specifies the KeyCode or -.PN AnyKey . -.IP \fImodifiers\fP 1i -Specifies the set of keymasks or -.PN AnyModifier . -The mask is the bitwise inclusive OR of the valid keymask bits. -.IP \fIgrab_window\fP 1i -Specifies the grab window. -.LP -.eM -The -.PN XUngrabKey -function releases the key combination on the specified window if it was grabbed -by this client. -It has no effect on an active grab. -A modifiers of -.PN AnyModifier -is equivalent to issuing -the request for all possible modifier combinations -(including the combination of no modifiers). -A keycode argument of -.PN AnyKey -is equivalent to issuing the request for all possible key codes. -.LP -.PN XUngrabKey -can generate -.PN BadValue -and -.PN BadWindow -errors. -.NH 2 -Resuming Event Processing -.XS -\*(SN Resuming Event Processing -.XE -.LP -The previous sections discussed grab mechanisms with which processing -of events by the server can be temporarily suspended. This section -describes the mechanism for resuming event processing. -.LP -.sp -To allow further events to be processed when the device has been frozen, use -.PN XAllowEvents . -.IN "XAllowEvents" "" "@DEF@" -.sM -.FD 0 -XAllowEvents\^(\^\fIdisplay\fP, \fIevent_mode\fP\^, \fItime\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIevent_mode\fP\^; -.br - Time \fItime\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIevent_mode\fP 1i -Specifies the event mode. -You can pass -.PN AsyncPointer , -.PN SyncPointer , -.PN AsyncKeyboard , -.PN SyncKeyboard , -.PN ReplayPointer , -.PN ReplayKeyboard , -.PN AsyncBoth , -or -.PN SyncBoth . -.IP \fItime\fP 1i -Specifies the time. -You can pass either a timestamp or -.PN CurrentTime . -.LP -.eM -The -.PN XAllowEvents -function releases some queued events if the client has caused a device -to freeze. -It has no effect if the specified time is earlier than the last-grab -time of the most recent active grab for the client or if the specified time -is later than the current X server time. -Depending on the event_mode argument, the following occurs: -.TS -lw(1.25i) lw(4.5i). -T{ -.PN AsyncPointer -T} T{ -If the pointer is frozen by the client, -pointer event processing continues as usual. -If the pointer is frozen twice by the client on behalf of two separate grabs, -.PN AsyncPointer -thaws for both. -.PN AsyncPointer -has no effect if the pointer is not frozen by the client, -but the pointer need not be grabbed by the client. -T} -.sp 6p -T{ -.PN SyncPointer -T} T{ -If the pointer is frozen and actively grabbed by the client, -pointer event processing continues as usual until the next -.PN ButtonPress -or -.PN ButtonRelease -event is reported to the client. -At this time, -the pointer again appears to freeze. -However, if the reported event causes the pointer grab to be released, -the pointer does not freeze. -.PN SyncPointer -has no effect if the pointer is not frozen by the client -or if the pointer is not grabbed by the client. -T} -.sp 6p -T{ -.PN ReplayPointer -T} T{ -If the pointer is actively grabbed by the client and is frozen as the result of -an event having been sent to the client (either from the activation of an -.PN XGrabButton -or from a previous -.PN XAllowEvents -with mode -.PN SyncPointer -but not from an -.PN XGrabPointer ), -the pointer grab is released and that event is completely reprocessed. -This time, however, the function ignores any passive grabs at or above -(toward the root of) the grab_window of the grab just released. -The request has no effect if the pointer is not grabbed by the client -or if the pointer is not frozen as the result of an event. -T} -.sp 6p -T{ -.PN AsyncKeyboard -T} T{ -If the keyboard is frozen by the client, -keyboard event processing continues as usual. -If the keyboard is frozen twice by the client on behalf of two separate grabs, -.PN AsyncKeyboard -thaws for both. -.PN AsyncKeyboard -has no effect if the keyboard is not frozen by the client, -but the keyboard need not be grabbed by the client. -T} -.sp 6p -T{ -.PN SyncKeyboard -T} T{ -If the keyboard is frozen and actively grabbed by the client, -keyboard event processing continues as usual until the next -.PN KeyPress -or -.PN KeyRelease -event is reported to the client. -At this time, -the keyboard again appears to freeze. -However, if the reported event causes the keyboard grab to be released, -the keyboard does not freeze. -.PN SyncKeyboard -has no effect if the keyboard is not frozen by the client -or if the keyboard is not grabbed by the client. -T} -.sp 6p -T{ -.PN ReplayKeyboard -T} T{ -If the keyboard is actively grabbed by the client and is frozen -as the result of an event having been sent to the client (either from the -activation of an -.PN XGrabKey -or from a previous -.PN XAllowEvents -with mode -.PN SyncKeyboard -but not from an -.PN XGrabKeyboard ), -the keyboard grab is released and that event is completely reprocessed. -This time, however, the function ignores any passive grabs at or above -(toward the root of) -the grab_window of the grab just released. -The request has no effect if the keyboard is not grabbed by the client -or if the keyboard is not frozen as the result of an event. -T} -.sp 6p -T{ -.PN SyncBoth -T} T{ -If both pointer and keyboard are frozen by the client, -event processing for both devices continues as usual until the next -.PN ButtonPress , -.PN ButtonRelease , -.PN KeyPress , -or -.PN KeyRelease -event is reported to the client for a grabbed device -(button event for the pointer, key event for the keyboard), -at which time the devices again appear to freeze. -However, if the reported event causes the grab to be released, -then the devices do not freeze (but if the other device is still -grabbed, then a subsequent event for it will still cause both devices -to freeze). -.PN SyncBoth -has no effect unless both pointer and keyboard -are frozen by the client. -If the pointer or keyboard is frozen twice -by the client on behalf of two separate grabs, -.PN SyncBoth -thaws for both (but a subsequent freeze for -.PN SyncBoth -will only freeze each device once). -T} -.sp 6p -T{ -.PN AsyncBoth -T} T{ -If the pointer and the keyboard are frozen by the -client, event processing for both devices continues as usual. -If a device is frozen twice by the client on behalf of two separate grabs, -.PN AsyncBoth -thaws for both. -.PN AsyncBoth -has no effect unless both -pointer and keyboard are frozen by the client. -T} -.TE -.LP -.PN AsyncPointer , -.PN SyncPointer , -and -.PN ReplayPointer -have no effect on the -processing of keyboard events. -.PN AsyncKeyboard , -.PN SyncKeyboard , -and -.PN ReplayKeyboard -have no effect on the -processing of pointer events. -It is possible for both a pointer grab and a keyboard grab (by the same -or different clients) to be active simultaneously. -If a device is frozen on behalf of either grab, -no event processing is performed for the device. -It is possible for a single device to be frozen because of both grabs. -In this case, -the freeze must be released on behalf of both grabs before events can -again be processed. -If a device is frozen twice by a single client, -then a single -.PN AllowEvents -releases both. -.LP -.PN XAllowEvents -can generate a -.PN BadValue -error. -.NH 2 -Moving the Pointer -.XS -\*(SN Moving the Pointer -.XE -.LP -Although movement of the pointer normally should be left to the -control of the end user, sometimes it is necessary to move the -pointer to a new position under program control. -.LP -.sp -To move the pointer to an arbitrary point in a window, use -.PN XWarpPointer . -.IN "XWarpPointer" "" "@DEF@" -.sM -.FD 0 -XWarpPointer\^(\^\fIdisplay\fP, \fIsrc_w\fP\^, \fIdest_w\fP\^, \fIsrc_x\fP\^, \fIsrc_y\fP\^, \fIsrc_width\fP\^, \fIsrc_height\fP\^, \fIdest_x\fP\^, -.br - \fIdest_y\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIsrc_w\fP\^, \fIdest_w\fP\^; -.br - int \fIsrc_x\fP\^, \fIsrc_y\fP\^; -.br - unsigned int \fIsrc_width\fP\^, \fIsrc_height\fP\^; -.br - int \fIdest_x\fP\^, \fIdest_y\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIsrc_w\fP 1i -Specifies the source window or -.PN None . -.IP \fIdest_w\fP 1i -Specifies the destination window or -.PN None . -.IP \fIsrc_x\fP 1i -.br -.ns -.IP \fIsrc_y\fP 1i -.br -.ns -.IP \fIsrc_width\fP 1i -.br -.ns -.IP \fIsrc_height\fP 1i -Specify a rectangle in the source window. -.IP \fIdest_x\fP 1i -.br -.ns -.IP \fIdest_y\fP 1i -Specify the x and y coordinates within the destination window. -.LP -.eM -If dest_w is -.PN None , -.PN XWarpPointer -moves the pointer by the offsets (dest_x, dest_y) relative to the current -position of the pointer. -If dest_w is a window, -.PN XWarpPointer -moves the pointer to the offsets (dest_x, dest_y) relative to the origin of -dest_w. -However, if src_w is a window, -the move only takes place if the window src_w contains the pointer -and if the specified rectangle of src_w contains the pointer. -.LP -The src_x and src_y coordinates are relative to the origin of src_w. -If src_height is zero, -it is replaced with the current height of src_w minus src_y. -If src_width is zero, -it is replaced with the current width of src_w minus src_x. -.LP -There is seldom any reason for calling this function. -The pointer should normally be left to the user. -If you do use this function, however, it generates events just as if the user -had instantaneously moved the pointer from one position to another. -Note that you cannot use -.PN XWarpPointer -to move the pointer outside the confine_to window of an active pointer grab. -An attempt to do so will only move the pointer as far as the closest edge of the -confine_to window. -.LP -.PN XWarpPointer -can generate a -.PN BadWindow -error. -.NH 2 -Controlling Input Focus -.XS -\*(SN Controlling Input Focus -.XE -.LP -Xlib provides functions that you can use to set and get the input focus. -The input focus is a shared resource, and cooperation among clients is -required for correct interaction. See the -\fIInter-Client Communication Conventions Manual\fP -for input focus policy. -.LP -.sp -To set the input focus, use -.PN XSetInputFocus . -.IN "XSetInputFocus" "" "@DEF@" -.sM -.FD 0 -XSetInputFocus\^(\^\fIdisplay\fP, \fIfocus\fP\^, \fIrevert_to\fP\^, \fItime\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIfocus\fP\^; -.br - int \fIrevert_to\fP\^; -.br - Time \fItime\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIfocus\fP 1i -Specifies the window, -.PN PointerRoot , -or -.PN None . -.IP \fIrevert_to\fP 1i -Specifies where the input focus reverts to if the window becomes not -viewable. -You can pass -.PN RevertToParent , -.PN RevertToPointerRoot , -or -.PN RevertToNone . -.IP \fItime\fP 1i -Specifies the time. -You can pass either a timestamp or -.PN CurrentTime . -.LP -.eM -The -.PN XSetInputFocus -function changes the input focus and the last-focus-change time. -It has no effect if the specified time is earlier than the current -last-focus-change time or is later than the current X server time. -Otherwise, the last-focus-change time is set to the specified time -.Pn ( CurrentTime -is replaced by the current X server time). -.PN XSetInputFocus -causes the X server to generate -.PN FocusIn -and -.PN FocusOut -events. -.LP -Depending on the focus argument, -the following occurs: -.IP \(bu 5 -If focus is -.PN None , -all keyboard events are discarded until a new focus window is set, -and the revert_to argument is ignored. -.IP \(bu 5 -If focus is a window, -it becomes the keyboard's focus window. -If a generated keyboard event would normally be reported to this window -or one of its inferiors, the event is reported as usual. -Otherwise, the event is reported relative to the focus window. -.IP \(bu 5 -If focus is -.PN PointerRoot , -the focus window is dynamically taken to be the root window of whatever screen -the pointer is on at each keyboard event. -In this case, the revert_to argument is ignored. -.LP -The specified focus window must be viewable at the time -.PN XSetInputFocus -is called, -or a -.PN BadMatch -error results. -If the focus window later becomes not viewable, -the X server -evaluates the revert_to argument to determine the new focus window as follows: -.IP \(bu 5 -If revert_to is -.PN RevertToParent , -the focus reverts to the parent (or the closest viewable ancestor), -and the new revert_to value is taken to be -.PN RevertToNone . -.IP \(bu 5 -If revert_to is -.PN RevertToPointerRoot -or -.PN RevertToNone , -the focus reverts to -.PN PointerRoot -or -.PN None , -respectively. -When the focus reverts, -the X server generates -.PN FocusIn -and -.PN FocusOut -events, but the last-focus-change time is not affected. -.LP -.PN XSetInputFocus -can generate -.PN BadMatch , -.PN BadValue , -and -.PN BadWindow -errors. -.LP -.sp -To obtain the current input focus, use -.PN XGetInputFocus . -.IN "XGetInputFocus" "" "@DEF@" -.sM -.FD 0 -XGetInputFocus\^(\^\fIdisplay\fP, \fIfocus_return\fP\^, \fIrevert_to_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window *\fIfocus_return\fP\^; -.br - int *\fIrevert_to_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIfocus_return\fP 1i -Returns the focus window, -.PN PointerRoot , -or -.PN None . -.IP \fIrevert_to_return\fP 1i -Returns the current focus state -.Pn ( RevertToParent , -.PN RevertToPointerRoot , -or -.PN RevertToNone ). -.LP -.eM -The -.PN XGetInputFocus -function returns the focus window and the current focus state. -.NH 2 -Manipulating the Keyboard and Pointer Settings -.XS -\*(SN Manipulating the Keyboard and Pointer Settings -.XE -.LP -Xlib provides functions that you can use to -change the keyboard control, obtain a list of the auto-repeat keys, -turn keyboard auto-repeat on or off, ring the bell, -set or obtain the pointer button or keyboard mapping, -and obtain a bit vector for the keyboard. -.LP -.IN "Keyboard" "bell volume" -.IN "Keyboard" "keyclick volume" -.IN "Keyboard" "bit vector" -.IN "Mouse" "programming" -This section discusses -the user-preference options of bell, key click, -pointer behavior, and so on. -The default values for many of these options are server dependent. -Not all implementations will actually be able to control all of these -parameters. -.LP -The -.PN XChangeKeyboardControl -function changes control of a keyboard and operates on a -.PN XKeyboardControl -structure: -.sM -.LP -/* Mask bits for ChangeKeyboardControl */ -.TS -lw(.5i) lw(2.5i) lw(.8i). -T{ -#define -T} T{ -.PN KBKeyClickPercent -T} T{ -(1L<<0) -T} -T{ -#define -T} T{ -.PN KBBellPercent -T} T{ -(1L<<1) -T} -T{ -#define -T} T{ -.PN KBBellPitch -T} T{ -(1L<<2) -T} -T{ -#define -T} T{ -.PN KBBellDuration -T} T{ -(1L<<3) -T} -T{ -#define -T} T{ -.PN KBLed -T} T{ -(1L<<4) -T} -T{ -#define -T} T{ -.PN KBLedMode -T} T{ -(1L<<5) -T} -T{ -#define -T} T{ -.PN KBKey -T} T{ -(1L<<6) -T} -T{ -#define -T} T{ -.PN KBAutoRepeatMode -T} T{ -(1L<<7) -T} -.TE -.IN "XKeyboardControl" "" "@DEF@" -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -/* Values */ - -typedef struct { - int key_click_percent; - int bell_percent; - int bell_pitch; - int bell_duration; - int led; - int led_mode; /* LedModeOn, LedModeOff */ - int key; - int auto_repeat_mode; /* AutoRepeatModeOff, AutoRepeatModeOn, - AutoRepeatModeDefault */ -} XKeyboardControl; -.De -.LP -.eM -The key_click_percent member sets the volume for key clicks between 0 (off) -and 100 (loud) inclusive, if possible. -A setting of \-1 restores the default. -Other negative values generate a -.PN BadValue -error. -.LP -The bell_percent sets the base volume for the bell between 0 (off) and 100 -(loud) inclusive, if possible. -A setting of \-1 restores the default. -Other negative values generate a -.PN BadValue -error. -The bell_pitch member sets the pitch (specified in Hz) of the bell, if possible. -A setting of \-1 restores the default. -Other negative values generate a -.PN BadValue -error. -The bell_duration member sets the duration of the -bell specified in milliseconds, if possible. -A setting of \-1 restores the default. -Other negative values generate a -.PN BadValue -error. -.LP -If both the led_mode and led members are specified, -the state of that LED is changed, if possible. -The led_mode member can be set to -.PN LedModeOn -or -.PN LedModeOff . -If only led_mode is specified, the state of -all LEDs are changed, if possible. -At most 32 LEDs numbered from one are supported. -No standard interpretation of LEDs is defined. -If led is specified without led_mode, a -.PN BadMatch -error results. -.LP -If both the auto_repeat_mode and key members are specified, -the auto_repeat_mode of that key is changed (according to -.PN AutoRepeatModeOn , -.PN AutoRepeatModeOff , -or -.PN AutoRepeatModeDefault ), -if possible. -If only auto_repeat_mode is -specified, the global auto_repeat_mode for the entire keyboard is -changed, if possible, and does not affect the per-key settings. -If a key is specified without an auto_repeat_mode, a -.PN BadMatch -error results. -Each key has an individual mode of whether or not it should auto-repeat -and a default setting for the mode. -In addition, -there is a global mode of whether auto-repeat should be enabled or not -and a default setting for that mode. -When global mode is -.PN AutoRepeatModeOn , -keys should obey their individual auto-repeat modes. -When global mode is -.PN AutoRepeatModeOff , -no keys should auto-repeat. -An auto-repeating key generates alternating -.PN KeyPress -and -.PN KeyRelease -events. -When a key is used as a modifier, -it is desirable for the key not to auto-repeat, -regardless of its auto-repeat setting. -.LP -A bell generator connected with the console but not directly on a -keyboard is treated as if it were part of the keyboard. -The order in which controls are verified and altered is server-dependent. -If an error is generated, a subset of the controls may have been altered. -.LP -.sp -.IN "XChangeKeyboardControl" "" "@DEF@" -.sM -.FD 0 -XChangeKeyboardControl\^(\^\fIdisplay\fP, \fIvalue_mask\fP\^, \fIvalues\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - unsigned long \fIvalue_mask\fP\^; -.br - XKeyboardControl *\fIvalues\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIvalue_mask\fP 1i -Specifies which controls to change. -This mask is the bitwise inclusive OR of the valid control mask bits. -.IP \fIvalues\fP 1i -Specifies one value for each bit set to 1 in the mask. -.LP -.eM -The -.PN XChangeKeyboardControl -function controls the keyboard characteristics defined by the -.PN XKeyboardControl -structure. -The value_mask argument specifies which values are to be changed. -.LP -.PN XChangeKeyboardControl -can generate -.PN BadMatch -and -.PN BadValue -errors. -.LP -.sp -To obtain the current control values for the keyboard, use -.PN XGetKeyboardControl . -.IN "XGetKeyboardControl" "" "@DEF@" -.sM -.FD 0 -XGetKeyboardControl\^(\^\fIdisplay\fP, \fIvalues_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XKeyboardState *\fIvalues_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIvalues_return\fP 1i -Returns the current keyboard controls in the specified -.PN XKeyboardState -structure. -.LP -.eM -The -.PN XGetKeyboardControl -function returns the current control values for the keyboard to the -.PN XKeyboardState -structure. -.LP -.IN "XGetKeyboardControl" -.IN "XKeyboardState" "" "@DEF@" -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - int key_click_percent; - int bell_percent; - unsigned int bell_pitch, bell_duration; - unsigned long led_mask; - int global_auto_repeat; - char auto_repeats[32]; -} XKeyboardState; -.De -.LP -.eM -For the LEDs, -the least significant bit of led_mask corresponds to LED one, -and each bit set to 1 in led_mask indicates an LED that is lit. -The global_auto_repeat member can be set to -.PN AutoRepeatModeOn -or -.PN AutoRepeatModeOff . -The auto_repeats member is a bit vector. -Each bit set to 1 indicates that auto-repeat is enabled -for the corresponding key. -The vector is represented as 32 bytes. -Byte N (from 0) contains the bits for keys 8N to 8N + 7 -with the least significant bit in the byte representing key 8N. -.LP -.sp -To turn on keyboard auto-repeat, use -.PN XAutoRepeatOn . -.IN "XAutoRepeatOn" "" "@DEF@" -.sM -.FD 0 -XAutoRepeatOn\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -The -.PN XAutoRepeatOn -function turns on auto-repeat for the keyboard on the specified display. -.LP -.sp -To turn off keyboard auto-repeat, use -.PN XAutoRepeatOff . -.IN "XAutoRepeatOff" "" "@DEF@" -.sM -.FD 0 -XAutoRepeatOff\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -The -.PN XAutoRepeatOff -function turns off auto-repeat for the keyboard on the specified display. -.LP -.sp -To ring the bell, use -.PN XBell . -.IN "XBell" "" "@DEF@" -.sM -.FD 0 -XBell\^(\^\fIdisplay\fP, \fIpercent\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIpercent\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIpercent\fP 1i -Specifies the volume for the bell, -which can range from \-100 to 100 inclusive. -.LP -.eM -The -.PN XBell -function rings the bell on the keyboard on the specified display, if possible. -The specified volume is relative to the base volume for the keyboard. -If the value for the percent argument is not in the range \-100 to 100 -inclusive, a -.PN BadValue -error results. -The volume at which the bell rings -when the percent argument is nonnegative is: -.IP -base \- [(base * percent) / 100] + percent -.LP -The volume at which the bell rings -when the percent argument is negative is: -.IP -base + [(base * percent) / 100] -.LP -To change the base volume of the bell, use -.PN XChangeKeyboardControl . -.LP -.PN XBell -can generate a -.PN BadValue -error. -.LP -.sp -To obtain a bit vector that describes the state of the keyboard, use -.PN XQueryKeymap . -.IN "XQueryKeymap" "" "@DEF@" -.sM -.FD 0 -XQueryKeymap\^(\^\fIdisplay\fP, \fIkeys_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - char \fIkeys_return\fP[32]\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIkeys_return\fP 1i -Returns an array of bytes that identifies which keys are pressed down. -Each bit represents one key of the keyboard. -.LP -.eM -The -.PN XQueryKeymap -function returns a bit vector for the logical state of the keyboard, -where each bit set to 1 indicates that the corresponding key is currently -pressed down. -The vector is represented as 32 bytes. -Byte N (from 0) contains the bits for keys 8N to 8N + 7 -with the least significant bit in the byte representing key 8N. -.LP -Note that the logical state of a device (as seen by client applications) -may lag the physical state if device event processing is frozen. -.LP -.sp -To set the mapping of the pointer buttons, use -.PN XSetPointerMapping . -.IN "XSetPointerMapping" "" "@DEF@" -.sM -.FD 0 -int XSetPointerMapping\^(\^\fIdisplay\fP, \fImap\fP, \fInmap\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - unsigned char \fImap\fP\^[]\^; -.br - int \fInmap\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fImap\fP 1i -Specifies the mapping list. -.IP \fInmap\fP 1i -Specifies the number of items in the mapping list. -.LP -.eM -The -.PN XSetPointerMapping -function sets the mapping of the pointer. -If it succeeds, the X server generates a -.PN MappingNotify -event, and -.PN XSetPointerMapping -returns -.PN MappingSuccess . -Element map[i] defines the logical button number for the physical button -i+1. -The length of the list must be the same as -.PN XGetPointerMapping -would return, -or a -.PN BadValue -error results. -A zero element disables a button, and elements are not restricted in -value by the number of physical buttons. -However, no two elements can have the same nonzero value, -or a -.PN BadValue -error results. -If any of the buttons to be altered are logically in the down state, -.PN XSetPointerMapping -returns -.PN MappingBusy , -and the mapping is not changed. -.LP -.PN XSetPointerMapping -can generate a -.PN BadValue -error. -.LP -.sp -To get the pointer mapping, use -.PN XGetPointerMapping . -.IN "XGetPointerMapping" "" "@DEF@" -.sM -.FD 0 -int XGetPointerMapping\^(\^\fIdisplay\fP, \fImap_return\fP, \fInmap\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - unsigned char \fImap_return\fP\^[]\^; -.br - int \fInmap\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fImap_return\fP 1i -Returns the mapping list. -.IP \fInmap\fP 1i -Specifies the number of items in the mapping list. -.LP -.eM -The -.PN XGetPointerMapping -function returns the current mapping of the pointer. -Pointer buttons are numbered starting from one. -.PN XGetPointerMapping -returns the number of physical buttons actually on the pointer. -The nominal mapping for a pointer is map[i]=i+1. -The nmap argument specifies the length of the array where the pointer -mapping is returned, and only the first nmap elements are returned -in map_return. -.LP -.sp -To control the pointer's interactive feel, use -.PN XChangePointerControl . -.IN "XChangePointerControl" "" "@DEF@" -.sM -.FD 0 -XChangePointerControl\^(\^\fIdisplay\fP, \fIdo_accel\fP\^, \fIdo_threshold\fP\^, \fIaccel_numerator\fP\^, -.br - \fIaccel_denominator\fP\^, \fIthreshold\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Bool \fIdo_accel\fP\^, \fIdo_threshold\fP\^; -.br - int \fIaccel_numerator\fP\^, \fIaccel_denominator\fP\^; -.br - int \fIthreshold\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdo_accel\fP 1i -Specifies a Boolean value that controls whether the values for -the accel_numerator or accel_denominator are used. -.IP \fIdo_threshold\fP 1i -Specifies a Boolean value that controls whether the value for the -threshold is used. -.IP \fIaccel_numerator\fP 1i -Specifies the numerator for the acceleration multiplier. -.IP \fIaccel_denominator\fP 1i -Specifies the denominator for the acceleration multiplier. -.IP \fIthreshold\fP 1i -Specifies the acceleration threshold. -.LP -.eM -The -.PN XChangePointerControl -function defines how the pointing device moves. -The acceleration, expressed as a fraction, is a -multiplier for movement. -For example, -specifying 3/1 means the pointer moves three times as fast as normal. -The fraction may be rounded arbitrarily by the X server. -Acceleration -only takes effect if the pointer moves more than threshold pixels at -once and only applies to the amount beyond the value in the threshold argument. -Setting a value to \-1 restores the default. -The values of the do_accel and do_threshold arguments must be -.PN True -for the pointer values to be set, -or the parameters are unchanged. -Negative values (other than \-1) generate a -.PN BadValue -error, as does a zero value -for the accel_denominator argument. -.LP -.PN XChangePointerControl -can generate a -.PN BadValue -error. -.LP -.sp -To get the current pointer parameters, use -.PN XGetPointerControl . -.IN "XGetPointerControl" "" "@DEF@" -.sM -.FD 0 -XGetPointerControl\^(\^\fIdisplay\fP, \fIaccel_numerator_return\fP\^, \fIaccel_denominator_return\fP\^, -.br - \fIthreshold_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int *\fIaccel_numerator_return\fP\^, *\fIaccel_denominator_return\fP\^; -.br - int *\fIthreshold_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIaccel_numerator_return\fP 1i -Returns the numerator for the acceleration multiplier. -.IP \fIaccel_denominator_return\fP 1i -Returns the denominator for the acceleration multiplier. -.IP \fIthreshold_return\fP 1i -Returns the acceleration threshold. -.LP -.eM -The -.PN XGetPointerControl -function returns the pointer's current acceleration multiplier -and acceleration threshold. -.NH 2 -Manipulating the Keyboard Encoding -.XS -\*(SN Manipulating the Keyboard Encoding -.XE -.LP -A KeyCode represents a physical (or logical) key. -KeyCodes lie in the inclusive range [8,255]. -A KeyCode value carries no intrinsic information, -although server implementors may attempt to encode geometry -(for example, matrix) information in some fashion so that it can -be interpreted in a server-dependent fashion. -The mapping between keys and KeyCodes cannot be changed. -.LP -A KeySym is an encoding of a symbol on the cap of a key. -The set of defined KeySyms includes the ISO Latin character sets (1\-4), -Katakana, Arabic, Cyrillic, Greek, Technical, -Special, Publishing, APL, Hebrew, Thai, Korean -and a miscellany of keys found -on keyboards (Return, Help, Tab, and so on). -To the extent possible, these sets are derived from international -standards. -In areas where no standards exist, -some of these sets are derived from Digital Equipment Corporation standards. -The list of defined symbols can be found in -.hN X11/keysymdef.h . -Unfortunately, some C preprocessors have -limits on the number of defined symbols. -If you must use KeySyms not -in the Latin 1\-4, Greek, and miscellaneous classes, -you may have to define a symbol for those sets. -Most applications usually only include -.hN X11/keysym.h , -which defines symbols for ISO Latin 1\-4, Greek, and miscellaneous. -.LP -A list of KeySyms is associated with each KeyCode. -The list is intended to convey the set of symbols on the corresponding key. -If the list (ignoring trailing -.PN NoSymbol -entries) is -a single KeySym ``\fIK\fP'', -then the list is treated as if it were the list -``\fIK\fP NoSymbol \fIK\fP NoSymbol''. -If the list (ignoring trailing -.PN NoSymbol -entries) is a pair of KeySyms ``\fIK1 K2\fP'', -then the list is treated as if it were the list ``\fIK1 K2 K1 K2\fP''. -If the list (ignoring trailing -.PN NoSymbol -entries) is a triple of KeySyms ``\fIK1 K2 K3\fP'', -then the list is treated as if it were the list ``\fIK1 K2 K3\fP NoSymbol''. -When an explicit ``void'' element is desired in the list, -the value -.PN VoidSymbol -can be used. -.LP -The first four elements of the list are split into two groups of KeySyms. -Group 1 contains the first and second KeySyms; -Group 2 contains the third and fourth KeySyms. -Within each group, -if the second element of the group is -.PN NoSymbol , -then the group should be treated as if the second element were -the same as the first element, -except when the first element is an alphabetic KeySym ``\fIK\fP'' -for which both lowercase and uppercase forms are defined. -In that case, -the group should be treated as if the first element were -the lowercase form of ``\fIK\fP'' and the second element were -the uppercase form of ``\fIK\fP''. -.LP -The standard rules for obtaining a KeySym from a -.PN KeyPress -event make use of only the Group 1 and Group 2 KeySyms; -no interpretation of other KeySyms in the list is given. -Which group to use is determined by the modifier state. -Switching between groups is controlled by the KeySym named MODE SWITCH, -by attaching that KeySym to some KeyCode and attaching -that KeyCode to any one of the modifiers -.PN Mod1 -through -.PN Mod5 . -This modifier is called the \fIgroup modifier\fP\^. -For any KeyCode, -Group 1 is used when the group modifier is off, -and Group 2 is used when the group modifier is on. -.LP -The -.PN Lock -modifier is interpreted as CapsLock when the KeySym named XK_Caps_Lock -is attached to some KeyCode and that KeyCode is attached to the -.PN Lock -modifier. The -.PN Lock -modifier is interpreted as ShiftLock when the KeySym named XK_Shift_Lock -is attached to some KeyCode and that KeyCode is attached to the -.PN Lock -modifier. If the -.PN Lock -modifier could be interpreted as both -CapsLock and ShiftLock, the CapsLock interpretation is used. -.LP -The operation of keypad keys is controlled by the KeySym named XK_Num_Lock, -by attaching that KeySym to some KeyCode and attaching that KeyCode to any -one of the modifiers -.PN Mod1 -through -.PN Mod5 . -This modifier is called the -\fInumlock modifier\fP\^. The standard KeySyms with the prefix ``XK_KP_'' -in their -name are called keypad KeySyms; these are KeySyms with numeric value in -the hexadecimal range 0xFF80 to 0xFFBD inclusive. In addition, -vendor-specific KeySyms in the hexadecimal range 0x11000000 to 0x1100FFFF -are also keypad KeySyms. -.LP -Within a group, the choice of KeySym is determined by applying the first -rule that is satisfied from the following list: -.IP \(bu 5 -The numlock modifier is on and the second KeySym is a keypad KeySym. In -this case, if the -.PN Shift -modifier is on, or if the -.PN Lock -modifier is on and -is interpreted as ShiftLock, then the first KeySym is used, otherwise the -second KeySym is used. -.IP \(bu 5 -The -.PN Shift -and -.PN Lock -modifiers are both off. In this case, the first -KeySym is used. -.IP \(bu 5 -The -.PN Shift -modifier is off, and the -.PN Lock -modifier is on and is -interpreted as CapsLock. In this case, the first KeySym is used, but if -that KeySym is lowercase alphabetic, then the corresponding uppercase -KeySym is used instead. -.IP \(bu 5 -The -.PN Shift -modifier is on, and the -.PN Lock -modifier is on and is interpreted -as CapsLock. In this case, the second KeySym is used, but if that KeySym -is lowercase alphabetic, then the corresponding uppercase KeySym is used -instead. -.IP \(bu 5 -The -.PN Shift -modifier is on, or the -.PN Lock -modifier is on and is interpreted -as ShiftLock, or both. In this case, the second KeySym is used. -.LP -No spatial geometry of the symbols on the key is defined by -their order in the KeySym list, -although a geometry might be defined on a -server-specific basis. -The X server does not use the mapping between KeyCodes and KeySyms. -Rather, it merely stores it for reading and writing by clients. -.sp -.LP -To obtain the legal KeyCodes for a display, use -.PN XDisplayKeycodes . -.IN "XDisplayKeycodes" "" "@DEF@" -.sM -.FD 0 -XDisplayKeycodes\^(\^\fIdisplay\fP\^, \fImin_keycodes_return\fP\^, \ -\fImax_keycodes_return\fP\^) -.br - Display *\^\fIdisplay\fP\^; -.br - int *\^\fImin_keycodes_return\fP\^, *\^\fImax_keycodes_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fImin_keycodes_return\fP 1i -Returns the minimum number of KeyCodes. -.IP \fImax_keycodes_return\fP 1i -Returns the maximum number of KeyCodes. -.LP -.eM -The -.PN XDisplayKeycodes -function returns the min-keycodes and max-keycodes supported by the -specified display. -The minimum number of KeyCodes returned is never less than 8, -and the maximum number of KeyCodes returned is never greater than 255. -Not all KeyCodes in this range are required to have corresponding keys. -.sp -.LP -To obtain the symbols for the specified KeyCodes, use -.PN XGetKeyboardMapping . -.IN "XGetKeyboardMapping" "" "@DEF@" -.sM -.FD 0 -KeySym *XGetKeyboardMapping(\^\fIdisplay\fP, \fIfirst_keycode\fP, \fIkeycode_count\fP, -.br - \fIkeysyms_per_keycode_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - KeyCode \fIfirst_keycode\fP\^; -.br - int \fIkeycode_count\fP\^; -.br - int *\fIkeysyms_per_keycode_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Kc returned -.IP \fIfirst_keycode\fP 1i -Specifies the first KeyCode that is to be \*(Kc. -.IP \fIkeycode_count\fP 1i -Specifies the number of KeyCodes that are to be returned. -.IP \fIkeysyms_per_keycode_return\fP 1i -Returns the number of KeySyms per KeyCode. -.LP -.eM -The -.PN XGetKeyboardMapping -function returns the symbols for the specified number of KeyCodes -starting with first_keycode. -The value specified in first_keycode must be greater than -or equal to min_keycode as returned by -.PN XDisplayKeycodes , -or a -.PN BadValue -error results. -In addition, the following expression must be less than or equal -to max_keycode as returned by -.PN XDisplayKeycodes : -.LP -.Ds -first_keycode + keycode_count \- 1 -.De -.LP -If this is not the case, a -.PN BadValue -error results. -The number of elements in the KeySyms list is: -.LP -.Ds -keycode_count * keysyms_per_keycode_return -.De -.LP -KeySym number N, counting from zero, for KeyCode K has the following index -in the list, counting from zero: -.Ds -(K \- first_code) * keysyms_per_code_return + N -.De -.LP -The X server arbitrarily chooses the keysyms_per_keycode_return value -to be large enough to report all requested symbols. -A special KeySym value of -.PN NoSymbol -is used to fill in unused elements for -individual KeyCodes. -To free the storage returned by -.PN XGetKeyboardMapping , -use -.PN XFree . -.LP -.PN XGetKeyboardMapping -can generate a -.PN BadValue -error. -.LP -.sp -To change the keyboard mapping, use -.PN XChangeKeyboardMapping . -.IN "XChangeKeyboardMapping" "" "@DEF@" -.sM -.FD 0 -XChangeKeyboardMapping(\^\fIdisplay\fP, \fIfirst_keycode\fP, \fIkeysyms_per_keycode\fP, \fIkeysyms\fP, \fInum_codes\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIfirst_keycode\fP\^; -.br - int \fIkeysyms_per_keycode\fP\^; -.br - KeySym *\fIkeysyms\fP\^; -.br - int \fInum_codes\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Kc changed -.IP \fIfirst_keycode\fP 1i -Specifies the first KeyCode that is to be \*(Kc. -.IP \fIkeysyms_per_keycode\fP 1i -Specifies the number of KeySyms per KeyCode. -.IP \fIkeysyms\fP 1i -Specifies an array of KeySyms. -.IP \fInum_codes\fP 1i -Specifies the number of KeyCodes that are to be changed. -.LP -.eM -The -.PN XChangeKeyboardMapping -function defines the symbols for the specified number of KeyCodes -starting with first_keycode. -The symbols for KeyCodes outside this range remain unchanged. -The number of elements in keysyms must be: -.LP -.Ds -num_codes * keysyms_per_keycode -.De -.LP -The specified first_keycode must be greater than or equal to min_keycode -returned by -.PN XDisplayKeycodes , -or a -.PN BadValue -error results. -In addition, the following expression must be less than or equal to -max_keycode as returned by -.PN XDisplayKeycodes , -or a -.PN BadValue -error results: -.LP -.Ds -first_keycode + num_codes \- 1 -.De -.LP -KeySym number N, counting from zero, for KeyCode K has the following index -in keysyms, counting from zero: -.LP -.Ds -(K \- first_keycode) * keysyms_per_keycode + N -.De -.LP -The specified keysyms_per_keycode can be chosen arbitrarily by the client -to be large enough to hold all desired symbols. -A special KeySym value of -.PN NoSymbol -should be used to fill in unused elements -for individual KeyCodes. -It is legal for -.PN NoSymbol -to appear in nontrailing positions -of the effective list for a KeyCode. -.PN XChangeKeyboardMapping -generates a -.PN MappingNotify -event. -.LP -There is no requirement that the X server interpret this mapping. -It is merely stored for reading and writing by clients. -.LP -.PN XChangeKeyboardMapping -can generate -.PN BadAlloc -and -.PN BadValue -errors. -.LP -The next six functions make use of the -.PN XModifierKeymap -data structure, which contains: -.LP -.IN "XModifierKeymap" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { - int max_keypermod; /* This server's max number of keys per modifier */ - KeyCode *modifiermap; /* An 8 by max_keypermod array of the modifiers */ -} XModifierKeymap; -.De -.LP -.eM -To create an -.PN XModifierKeymap -structure, use -.PN XNewModifiermap . -.IN "XNewModifiermap" "" "@DEF@" -.sM -.FD 0 -XModifierKeymap *XNewModifiermap(\^\fImax_keys_per_mod\fP\^) -.br - int \fImax_keys_per_mod\fP\^; -.FN -.IP \fImax_keys_per_mod\fP 1i -Specifies the number of KeyCode entries preallocated to the modifiers -in the map. -.LP -.eM -The -.PN XNewModifiermap -function returns a pointer to -.PN XModifierKeymap -structure for later use. -.LP -.sp -To add a new entry to an -.PN XModifierKeymap -structure, use -.PN XInsertModifiermapEntry . -.IN "XInsertModifiermapEntry" "" "@DEF@" -.sM -.FD 0 -XModifierKeymap *XInsertModifiermapEntry\^(\^\fImodmap\fP, \ -\fIkeycode_entry\fP, \fImodifier\fP\^) -.br - XModifierKeymap *\fImodmap\fP\^; -.br - KeyCode \fIkeycode_entry\fP\^; -.br - int \fImodifier\fP\^; -.FN -.IP \fImodmap\fP 1i -Specifies the -.PN XModifierKeymap -structure. -.IP \fIkeycode_entry\fP 1i -Specifies the KeyCode. -.IP \fImodifier\fP 1i -Specifies the modifier. -.LP -.eM -The -.PN XInsertModifiermapEntry -function adds the specified KeyCode to the set that controls the specified -modifier and returns the resulting -.PN XModifierKeymap -structure (expanded as needed). -.LP -.sp -To delete an entry from an -.PN XModifierKeymap -structure, use -.PN XDeleteModifiermapEntry . -.IN "XDeleteModifiermapEntry" "" "@DEF@" -.sM -.FD 0 -XModifierKeymap *XDeleteModifiermapEntry\^(\^\fImodmap\fP, \ -\fIkeycode_entry\fP, \fImodifier\fP\^) -.br - XModifierKeymap *\fImodmap\fP\^; -.br - KeyCode \fIkeycode_entry\fP\^; -.br - int \fImodifier\fP\^; -.FN -.IP \fImodmap\fP 1i -Specifies the -.PN XModifierKeymap -structure. -.IP \fIkeycode_entry\fP 1i -Specifies the KeyCode. -.IP \fImodifier\fP 1i -Specifies the modifier. -.LP -.eM -The -.PN XDeleteModifiermapEntry -function deletes the specified KeyCode from the set that controls the -specified modifier and returns a pointer to the resulting -.PN XModifierKeymap -structure. -.LP -.sp -To destroy an -.PN XModifierKeymap -structure, use -.PN XFreeModifiermap . -.IN "XFreeModifiermap" "" "@DEF@" -.sM -.FD 0 -XFreeModifiermap(\^\fImodmap\fP\^) -.br - XModifierKeymap *\fImodmap\fP; -.FN -.IP \fImodmap\fP 1i -Specifies the -.PN XModifierKeymap -structure. -.LP -.eM -The -.PN XFreeModifiermap -function frees the specified -.PN XModifierKeymap -structure. -.LP -.sp -To set the KeyCodes to be used as modifiers, use -.PN XSetModifierMapping . -.IN "XSetModifierMapping" "" "@DEF@" -.sM -.FD 0 -int XSetModifierMapping(\^\fIdisplay\fP, \fImodmap\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XModifierKeymap *\fImodmap\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fImodmap\fP 1i -Specifies the -.PN XModifierKeymap -structure. -.LP -.eM -The -.PN XSetModifierMapping -function specifies the KeyCodes of the keys (if any) that are to be used -as modifiers. -If it succeeds, -the X server generates a -.PN MappingNotify -event, and -.PN XSetModifierMapping -returns -.PN MappingSuccess . -X permits at most 8 modifier keys. -If more than 8 are specified in the -.PN XModifierKeymap -structure, a -.PN BadLength -error results. -.LP -The modifiermap member of the -.PN XModifierKeymap -structure contains 8 sets of max_keypermod KeyCodes, -one for each modifier in the order -.PN Shift , -.PN Lock , -.PN Control , -.PN Mod1 , -.PN Mod2 , -.PN Mod3 , -.PN Mod4 , -and -.PN Mod5 . -Only nonzero KeyCodes have meaning in each set, -and zero KeyCodes are ignored. -In addition, all of the nonzero KeyCodes must be in the range specified by -min_keycode and max_keycode in the -.PN Display -structure, -or a -.PN BadValue -error results. -.LP -An X server can impose restrictions on how modifiers can be changed, -for example, -if certain keys do not generate up transitions in hardware, -if auto-repeat cannot be disabled on certain keys, -or if multiple modifier keys are not supported. -If some such restriction is violated, -the status reply is -.PN MappingFailed , -and none of the modifiers are changed. -If the new KeyCodes specified for a modifier differ from those -currently defined and any (current or new) keys for that modifier are -in the logically down state, -.PN XSetModifierMapping -returns -.PN MappingBusy , -and none of the modifiers is changed. -.LP -.PN XSetModifierMapping -can generate -.PN BadAlloc -and -.PN BadValue -errors. -.LP -.sp -To obtain the KeyCodes used as modifiers, use -.PN XGetModifierMapping . -.IN "XGetModifierMapping" "" "@DEF@" -.sM -.FD 0 -XModifierKeymap *XGetModifierMapping(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; - -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -The -.PN XGetModifierMapping -function returns a pointer to a newly created -.PN XModifierKeymap -structure that contains the keys being used as modifiers. -The structure should be freed after use by calling -.PN XFreeModifiermap . -If only zero values appear in the set for any modifier, -that modifier is disabled. -.bp diff --git a/doc/xorg-docs/specs/X11/CH13 b/doc/xorg-docs/specs/X11/CH13 deleted file mode 100644 index 539743c5a..000000000 --- a/doc/xorg-docs/specs/X11/CH13 +++ /dev/null @@ -1,7673 +0,0 @@ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by -.\" Digital Equipment Corporation -.\" -.\" Portions Copyright \(co 1990, 1991 by -.\" Tektronix, Inc. -.\" -.\" Permission to use, copy, modify and distribute this documentation for -.\" any purpose and without fee is hereby granted, provided that the above -.\" copyright notice appears in all copies and that both that copyright notice -.\" and this permission notice appear in all copies, and that the names of -.\" Digital and Tektronix not be used in in advertising or publicity pertaining -.\" to this documentation without specific, written prior permission. -.\" Digital and Tektronix makes no representations about the suitability -.\" of this documentation for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBChapter 13\fP\s-1 - -\s+1\fBLocales and Internationalized Text Functions\fP\s-1 -.sp 2 -.nr H1 13 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.na -.LP -.XS -Chapter 13: Locales and Internationalized Text Functions -.XE -An internationalized application is one that is adaptable to the requirements -of different native languages, local customs, and character string encodings. -The process of adapting the operation to a particular native language, -local custom, or string encoding is called \fIlocalization\fP\^. -A goal of internationalization is to permit localization -without program source modifications or recompilation. -.LP -As one of the localization mechanisms, -Xlib provides an X Input Method -.Pn ( XIM ) -functional interface for internationalized text input -and an X Output Method -.Pn ( XOM ) -functional interface for internationalized text output. -.LP -Internationalization in X is based on the concept of a \fIlocale\fP. -A locale defines the localized behavior of a program at run time. -Locales affect Xlib in its: -.IP \(bu 5 -Encoding and processing of input method text -.IP \(bu 5 -Encoding of resource files and values -.IP \(bu 5 -Encoding and imaging of text strings -.IP \(bu 5 -Encoding and decoding for inter-client text communication -.LP -Characters from various languages are represented in a computer -using an encoding. -Different languages have different encodings, -and there are even different encodings for the same characters -in the same language. -.LP -This chapter defines support for localized text imaging and text input -and describes the locale mechanism that controls all locale-dependent -Xlib functions. -Sets of functions are provided for multibyte (char *) text as well as -wide character (wchar_t) text in the form supported -by the host C language environment. -The multibyte and wide character functions -are equivalent except for the form of the text argument. -.LP -The Xlib internationalization functions are not meant to provide -support for multilingual applications (mixing multiple languages -within a single piece of text), but they make it possible to -implement applications that work in limited fashion with more than -one language in independent contexts. -.LP -The remainder of this chapter discusses: -.IP \(bu 5 -X locale management -.IP \(bu 5 -Locale and modifier dependencies -.IP \(bu 5 -Variable argument lists -.IP \(bu 5 -Output methods -.IP \(bu 5 -Input methods -.IP \(bu 5 -String constants -.NH 2 -X Locale Management -.XS -\*(SN X Locale Management -.XE -.LP -X supports one or more of the locales defined by the host environment. -On implementations that conform to the ANSI C library, -the locale announcement method is -.PN setlocale . -This function configures the locale operation of both -the host C library and Xlib. -The operation of Xlib is governed by the LC_CTYPE category; -this is called the \fIcurrent locale\fP. -An implementation is permitted to provide implementation-dependent -mechanisms for announcing the locale in addition to -.PN setlocale . -.LP -On implementations that do not conform to the ANSI C library, -the locale announcement method is Xlib implementation-dependent. -.LP -The mechanism by which the semantic operation of Xlib is defined -for a specific locale is implementation-dependent. -.LP -.sp -X is not required to support all the locales supported by the host. -To determine if the current locale is supported by X, use -.PN XSupportsLocale . -.IN "XSupportsLocale" "" "@DEF@" -.sM -.FD 0 -Bool XSupportsLocale\^(\|) -.FN -.LP -.eM -The -.PN XSupportsLocale -function returns -.PN True -if Xlib functions are capable of operating under the current locale. -If it returns -.PN False , -Xlib locale-dependent functions for which the -.PN XLocaleNotSupported -return status is defined will return -.PN XLocaleNotSupported . -Other Xlib locale-dependent routines will operate in the ``C'' locale. -.LP -The client is responsible for selecting its locale and X modifiers. -Clients should provide a means for the user to override the clients' -locale selection at client invocation. -Most single-display X clients operate in a single locale -for both X and the host processing environment. -They will configure the locale by calling three functions: -the host locale configuration function, -.PN XSupportsLocale , -and -.PN XSetLocaleModifiers . -.LP -The semantics of certain categories of X internationalization capabilities -can be configured by setting modifiers. -Modifiers are named by implementation-dependent and locale-specific strings. -The only standard use for this capability at present -is selecting one of several styles of keyboard input method. -.LP -.sp -To configure Xlib locale modifiers for the current locale, use -.PN XSetLocaleModifiers . -.IN "XSetLocaleModifiers" "" "@DEF@" -.sM -.FD 0 -char *XSetLocaleModifiers\^(\^\fImodifier_list\fP\^) -.br - char *\fImodifier_list\fP\^; -.FN -.IP \fImodifier_list\fP 1i -Specifies the modifiers. -.LP -.eM -The -.PN XSetLocaleModifiers -function sets the X modifiers for the current locale setting. -The modifier_list argument is a null-terminated string of the form -``{@\^\fIcategory\fP\^=\^\fIvalue\fP\^}'', that is, -having zero or more concatenated ``@\^\fIcategory\fP\^=\^\fIvalue\fP\^'' -entries, where \fIcategory\fP is a category name -and \fIvalue\fP is the (possibly empty) setting for that category. -The values are encoded in the current locale. -Category names are restricted to the POSIX Portable Filename Character Set. -.LP -The local host X locale modifiers announcer (on POSIX-compliant systems, -the XMODIFIERS environment variable) is appended to the modifier_list to -provide default values on the local host. -If a given category appears more than once in the list, -the first setting in the list is used. -If a given category is not included in the full modifier list, -the category is set to an implementation-dependent default -for the current locale. -An empty value for a category explicitly specifies the -implementation-dependent default. -.LP -If the function is successful, it returns a pointer to a string. -The contents of the string are such that a subsequent call with that string -(in the same locale) will restore the modifiers to the same settings. -If modifier_list is a NULL pointer, -.PN XSetLocaleModifiers -also returns a pointer to such a string, -and the current locale modifiers are not changed. -.LP -If invalid values are given for one or more modifier categories supported by -the locale, a NULL pointer is returned, and none of the -current modifiers are changed. -.LP -At program startup, -the modifiers that are in effect are unspecified until -the first successful call to set them. Whenever the locale is changed, the -modifiers that are in effect become unspecified until the next successful call -to set them. -Clients should always call -.PN XSetLocaleModifiers -with a non-NULL modifier_list after setting the locale -before they call any locale-dependent Xlib routine. -.LP -The only standard modifier category currently defined is ``im'', -which identifies the desired input method. -The values for input method are not standardized. -A single locale may use multiple input methods, -switching input method under user control. -The modifier may specify the initial input method in effect -or an ordered list of input methods. -Multiple input methods may be specified in a single im value string -in an implementation-dependent manner. -.LP -The returned modifiers string is owned by Xlib and should not be modified or -freed by the client. -It may be freed by Xlib after the current locale or modifiers are changed. -Until freed, it will not be modified by Xlib. -.LP -The recommended procedure for clients initializing their locale and modifiers -is to obtain locale and modifier announcers separately from -one of the following prioritized sources: -.IP \(bu 5 -A command line option -.IP \(bu 5 -A resource -.IP \(bu 5 -The empty string ("\^") -.LP -The first of these that is defined should be used. -Note that when a locale command line option or locale resource is defined, -the effect should be to set all categories to the specified locale, -overriding any category-specific settings in the local host environment. -.NH 2 -Locale and Modifier Dependencies -.XS -\*(SN Locale and Modifier Dependencies -.XE -.LP -The internationalized Xlib functions operate in the current locale -configured by the host environment and X locale modifiers set by -.PN XSetLocaleModifiers -or in the locale and modifiers configured at the time -some object supplied to the function was created. -For each locale-dependent function, -the following table describes the locale (and modifiers) dependency: -.TS H -lw(1.25i) lw(2.5i) lw(2i). -_ -.sp 6p -.B -Locale from Affects the Function In -.sp 6p -_ -.sp 6p -.TH -.R - Locale Query/Configuration: -.sp 6p -T{ -.PN setlocale -T} T{ -.PN XSupportsLocale -T} T{ -Locale queried -T} - T{ -.PN XSetLocaleModifiers -T} T{ -Locale modified -T} -.sp - Resources: -.sp 6p -T{ -.PN setlocale -T} T{ -.PN XrmGetFileDatabase -T} T{ -Locale of -.PN XrmDatabase -T} - T{ -.PN XrmGetStringDatabase -T} -T{ -.PN XrmDatabase -T} T{ -.PN XrmPutFileDatabase -T} T{ -Locale of -.PN XrmDatabase -T} - T{ -.PN XrmLocaleOfDatabase -T} -.sp - Setting Standard Properties: -.sp 6p -T{ -.PN setlocale -T} T{ -.PN XmbSetWMProperties -T} T{ -Encoding of supplied/returned -T} - text (some WM_ property - text in environment locale) -.sp 6p -T{ -.PN setlocale -T} T{ -.PN XmbTextPropertyToTextList -T} T{ -Encoding of supplied/returned text -T} - T{ -.PN XwcTextPropertyToTextList -T} - T{ -.PN XmbTextListToTextProperty -T} - T{ -.PN XwcTextListToTextProperty -T} -.sp - Text Input: -.sp 6p -T{ -.PN setlocale -T} T{ -.PN XOpenIM -T} T{ -XIM input method selection -T} - T{ -.PN XRegisterIMInstantiateCallback -T} T{ -XIM selection -T} - T{ -.PN XUnregisterIMInstantiateCallback -T} T{ -XIM selection -T} -T{ -.PN XIM -T} T{ -.PN XCreateIC -T} T{ -XIC input method configuration -T} - T{ -.PN XLocaleOfIM , -and so on -T} T{ -Queried locale -T} -T{ -.PN XIC -T} T{ -.PN XmbLookupString -T} T{ -Keyboard layout -T} - T{ -.PN XwcLookupString -T} T{ -Encoding of returned text -T} -.sp - Text Drawing: -.sp 6p -T{ -.PN setlocale -T} T{ -.PN XOpenOM -T} T{ -XOM output method selection -T} - T{ -.PN XCreateFontSet -T} T{ -Charsets of fonts in -.PN XFontSet -T} -T{ -.PN XOM -T} T{ -.PN XCreateOC -T} T{ -XOC output method configuration -T} - T{ -.PN XLocaleOfOM , -and so on -T} T{ -Queried locale -T} -T{ -.PN XFontSet -T} T{ -.PN XmbDrawText , -T} T{ -Locale of supplied text -T} - T{ -.PN XwcDrawText , -and so on -T} T{ -Locale of supplied text -T} - T{ -.PN XExtentsOfFontSet , -and so on -T} T{ -Locale-dependent metrics -T} - T{ -.PN XmbTextExtents , -T} - T{ -.PN XwcTextExtents , -and so on -T} -.sp - Xlib Errors: -.sp 6p -T{ -.PN setlocale -T} T{ -.PN XGetErrorDatabaseText -T} T{ -Locale of error message -T} - T{ -.PN XGetErrorText -T} -.sp 6p -_ -.TE -.LP -Clients may assume that a locale-encoded text string returned -by an X function can be passed to a C library routine, or vice versa, -if the locale is the same at the two calls. -.LP -All text strings processed by internationalized Xlib functions are assumed -to begin in the initial state of the encoding of the locale, if the encoding -is state-dependent. -.LP -All Xlib functions behave as if they do not change the current locale -or X modifier setting. -(This means that if they do change locale or call -.PN XSetLocaleModifiers -with a non-NULL argument, they must save and restore the current state on -entry and exit.) -Also, Xlib functions on implementations that conform to the ANSI C library do -not alter the global state associated with the ANSI C functions -.PN mblen , -.PN mbtowc , -.PN wctomb , -and -.PN strtok . -.NH 2 -Variable Argument Lists -.XS -\*(SN Variable Argument Lists -.XE -.LP -Various functions in this chapter have arguments that conform -to the ANSI C variable argument list calling convention. -Each function denoted with an argument of the form ``...'' takes -a variable-length list of name and value pairs, -where each name is a string and each value is of type -.PN XPointer . -A name argument that is NULL identifies the end of the list. -.LP -A variable-length argument list may contain a nested list. -If the name -.PN XNVaNestedList -is specified in place of an argument name, -then the following value is interpreted as an -.PN XVaNestedList -value that specifies a list of values logically inserted into the -original list at the point of declaration. -A NULL identifies the end of a nested list. -.LP -.sp -To allocate a nested variable argument list dynamically, use -.PN XVaCreateNestedList . -.IN "XVaCreateNestedList" "" @DEF@" -.sM -.FD 0 -typedef void * XVaNestedList; - -XVaNestedList XVaCreateNestedList\^(\^\fIdummy\fP\^, ...) -.br - int \fIdummy\fP\^; -.FN -.IP \fIdummy\fP 1i -Specifies an unused argument (required by ANSI C). -.ds Al -.IP ... 1i -Specifies the variable length argument list\*(Al. -.LP -.eM -The -.PN XVaCreateNestedList -function allocates memory and copies its arguments into -a single list pointer, -which may be used as a value for arguments requiring a list value. -Any entries are copied as specified. -Data passed by reference is not copied; -the caller must ensure data remains valid for the lifetime -of the nested list. -The list should be freed using -.PN XFree -when it is no longer needed. -.NH 2 -Output Methods -.XS -\*(SN Output Methods -.XE -.LP -This section provides discussions of the following X Output Method -(XOM) topics: -.IP \(bu 5 -Output method overview -.IP \(bu 5 -Output method functions -.IP \(bu 5 -Output method values -.IP \(bu 5 -Output context functions -.IP \(bu 5 -Output context values -.IP \(bu 5 -Creating and freeing a font set -.IP \(bu 5 -Obtaining font set metrics -.IP \(bu 5 -Drawing text using font sets -.NH 3 -Output Method Overview -.XS -\*(SN Output Method Overview -.XE -.LP -Locale-dependent text may include one or more text components, each of -which may require different fonts and character set encodings. -In some languages, each component might have a different -drawing direction, and some components might contain -context-dependent characters that change shape based on -relationships with neighboring characters. -.LP -When drawing such locale-dependent text, some locale-specific -knowledge is required; -for example, what fonts are required to draw the text, -how the text can be separated into components, and which -fonts are selected to draw each component. -Further, when bidirectional text must be drawn, -the internal representation order of the text must be changed -into the visual representation order to be drawn. -.LP -An X Output Method provides a functional interface so that clients -do not have to deal directly with such locale-dependent details. -Output methods provide the following capabilities: -.IP \(bu 5 -Creating a set of fonts required to draw locale-dependent text. -.IP \(bu 5 -Drawing locale-dependent text with a font set without the caller -needing to be aware of locale dependencies. -.IP \(bu 5 -Obtaining the escapement and extents in pixels of locale-dependent text. -.IP \(bu 5 -Determining if bidirectional or context-dependent drawing is required -in a specific locale with a specific font set. -.LP -Two different abstractions are used in the representation of -the output method for clients. -.LP -The abstraction used to communicate with an output method -is an opaque data structure represented by the -.PN XOM -data type. -The abstraction for representing the state of a particular output thread -is called an \fIoutput context\fP. -The Xlib representation of an output context is an -.PN XOC , -which is compatible with -.PN XFontSet -in terms of its functional interface, but is -a broader, more generalized abstraction. -.NH 3 -Output Method Functions -.XS -\*(SN Output Method Functions -.XE -.LP -To open an output method, use -.PN XOpenOM . -.IN "XOpenOM" "" "@DEF@" -.sM -.FD 0 -XOM XOpenOM\^(\^\fIdisplay\fP\^, \fIdb\fP\^, \fIres_name\fP\^, \fIres_class\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XrmDatabase \fIdb\fP\^; -.br - char *\fIres_name\fP\^; -.br - char *\fIres_class\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdb\fP 1i -Specifies a pointer to the resource database. -.IP \fIres_name\fP 1i -Specifies the full resource name of the application. -.IP \fIres_class\fP 1i -Specifies the full class name of the application. -.LP -.eM -The -.PN XOpenOM -function opens an output method -matching the current locale and modifiers specification. -The current locale and modifiers are bound to the output method -when -.PN XOpenOM -is called. -The locale associated with an output method cannot be changed. -.LP -The specific output method to which this call will be routed -is identified on the basis of the current locale and modifiers. -.PN XOpenOM -will identify a default output method corresponding to the -current locale. -That default can be modified using -.PN XSetLocaleModifiers -to set the output method modifier. -.LP -The db argument is the resource database to be used by the output method -for looking up resources that are private to the output method. -It is not intended that this database be used to look -up values that can be set as OC values in an output context. -If db is NULL, -no database is passed to the output method. -.LP -The res_name and res_class arguments specify the resource name -and class of the application. -They are intended to be used as prefixes by the output method -when looking up resources that are common to all output contexts -that may be created for this output method. -The characters used for resource names and classes must be in the -X Portable Character Set. -The resources looked up are not fully specified -if res_name or res_class is NULL. -.LP -The res_name and res_class arguments are not assumed to exist beyond -the call to -.PN XOpenOM . -The specified resource database is assumed to exist for the lifetime -of the output method. -.LP -.PN XOpenOM -returns NULL if no output method could be opened. -.LP -.sp -To close an output method, use -.PN XCloseOM . -.IN "XCloseOM" "" "@DEF@" -.sM -.FD 0 -Status XCloseOM\^(\^\fIom\fP\^) -.br - XOM \fIom\fP\^; -.FN -.IP \fIom\fP 1i -Specifies the output method. -.LP -.eM -The -.PN XCloseOM -function closes the specified output method. -.LP -.sp -To set output method attributes, use -.PN XSetOMValues . -.IN "XSetOMValues" "" "@DEF@" -.sM -.FD 0 -char * XSetOMValues\^(\^\fIom\fP\^, ...) -.br - XOM \fIom\fP\^; -.FN -.IP \fIom\fP 1i -Specifies the output method. -.ds Al \ to set XOM values -.IP ... 1i -Specifies the variable-length argument list\*(Al. -.LP -.eM -The -.PN XSetOMValues -function presents a variable argument list programming interface -for setting properties or features of the specified output method. -This function returns NULL if it succeeds; -otherwise, -it returns the name of the first argument that could not be obtained. -.LP -No standard arguments are currently defined by Xlib. -.LP -.sp -To query an output method, use -.PN XGetOMValues . -.IN "XGetOMValues" "" "@DEF@" -.sM -.FD 0 -char * XGetOMValues\^(\^\fIom\fP\^, ...) -.br - XOM \fIom\fP\^; -.FN -.IP \fIom\fP 1i -Specifies the output method. -.ds Al \ to get XOM values -.IP ... 1i -Specifies the variable-length argument list\*(Al. -.LP -.eM -The -.PN XGetOMValues -function presents a variable argument list programming interface -for querying properties or features of the specified output method. -This function returns NULL if it succeeds; -otherwise, -it returns the name of the first argument that could not be obtained. -.LP -To obtain the display associated with an output method, use -.PN XDisplayOfOM . -.IN "XDisplayOfOM" "" "@DEF@" -.sM -.FD 0 -Display * XDisplayOfOM\^(\^\fIom\fP\^) -.br - XOM \fIom\fP\^; -.FN -.IP \fIom\fP 1i -Specifies the output method. -.LP -.eM -The -.PN XDisplayOfOM -function returns the display associated with the specified output method. -.LP -.sp -To get the locale associated with an output method, use -.PN XLocaleOfOM . -.IN "XLocaleOfOM" "" "@DEF@" -.sM -.FD 0 -char * XLocaleOfOM\^(\^\fIom\fP\^) -.br - XOM \fIom\fP\^; -.FN -.IP \fIom\fP 1i -Specifies the output method. -.LP -.eM -The -.PN XLocaleOfOM -returns the locale associated with the specified output method. -.NH 3 -X Output Method Values -.XS -\*(SN X Output Method Values -.XE -.LP -The following table describes how XOM values are interpreted by an -output method. -The first column lists the XOM values. The second column indicates -how each of the XOM values are treated by a particular output style. -.LP -.LP -The following key applies to this table. -.TS H -lw(1i) lw(4.75i). -_ -.sp 6p -.B -Key Explanation -.sp 6p -_ -.sp 6p -.TH -.R -G T{ -This value may be read using -.PN XGetOMValues . -T} -.sp 6p -_ -.TE -.LP -.TS H -lw(2.25i) c -lw(2.25i) c. -_ -.sp 6p -.B -XOM Value Key -.sp 6p -_ -.sp 6p -.TH -.R -T{ -.PN XNRequiredCharSet -T} T{ -G -T} -T{ -.PN XNQueryOrientation -T} T{ -G -T} -T{ -.PN XNDirectionalDependentDrawing -T} T{ -G -T} -T{ -.PN XNContextualDrawing -T} T{ -G -T} -.sp 6p -_ -.TE -.LP -.NH 4 -Required Char Set -.XS -\*(SN Required Char Set -.XE -.LP -The -.PN XNRequiredCharSet -argument returns the list of charsets that are required for loading the fonts -needed for the locale. -The value of the argument is a pointer to a structure of type -.PN XOMCharSetList . -.LP -The -.PN XOMCharSetList -structure is defined as follows: -.IN "XOMCharSetList" "" "@DEF@" -.sM -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { - int charset_count; - char **charset_list; -} XOMCharSetList; -.De -.LP -.eM -The charset_list member is a list of one or more null-terminated -charset names, and the charset_count member is the number of -charset names. -.LP -The required charset list is owned by Xlib and should not be modified or -freed by the client. -It will be freed by a call to -.PN XCloseOM -with the associated -.PN XOM . -Until freed, its contents will not be modified by Xlib. -.LP -.NH 4 -Query Orientation -.XS -\(*SN Query Orientation -.XE -.LP -The -.PN XNQueryOrientation -argument returns the global orientation of text when drawn. -Other than -.PN XOMOrientation_LTR_TTB , -the set of orientations supported is locale-dependent. -The value of the argument is a pointer to a structure of type -.PN XOMOrientation . -Clients are responsible for freeing the -.PN XOMOrientation -structure by using -.PN XFree ; -this also frees the contents of the structure. -.LP -.sM -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { - int num_orientation; - XOrientation *orientation; /* Input Text description */ -} XOMOrientation; - -typedef enum { - XOMOrientation_LTR_TTB, - XOMOrientation_RTL_TTB, - XOMOrientation_TTB_LTR, - XOMOrientation_TTB_RTL, - XOMOrientation_Context -} XOrientation; -.De -.LP -.eM -The possible value for XOrientation may be: -.IP \(bu 5 -.PN XOMOrientation_LTR_TTB -left-to-right, top-to-bottom global orientation -.IP \(bu 5 -.PN XOMOrientation_RTL_TTB -right-to-left, top-to-bottom global orientation -.IP \(bu 5 -.PN XOMOrientation_TTB_LTR -top-to-bottom, left-to-right global orientation -.IP \(bu 5 -.PN XOMOrientation_TTB_RTL -top-to-bottom, right-to-left global orientation -.IP \(bu 5 -.PN XOMOrientation_Context -contextual global orientation -.LP -.NH 4 -Directional Dependent Drawing -.XS -\*(SN Directional Dependent Drawing -.XE -.LP -The -.PN XNDirectionalDependentDrawing -argument indicates whether the text rendering functions -implement implicit handling of directional text. If this value -is -.PN True , -the output method has knowledge of directional -dependencies and reorders text as necessary when -rendering text. If this value is -.PN False , -the output method does not implement any directional text -handling, and all character directions are assumed to be left-to-right. -.LP -Regardless of the rendering order of characters, -the origins of all characters are on the primary draw direction side -of the drawing origin. -.LP -This OM value presents functionality identical to the -.PN XDirectionalDependentDrawing -function. -.NH 4 -Context Dependent Drawing -.XS -\*(SN Context Dependent Drawing -.XE -.LP -The -.PN XNContextualDrawing -argument indicates whether the text rendering functions -implement implicit context-dependent drawing. If this value is -.PN True , -the output method has knowledge of context dependencies and -performs character shape editing, combining glyphs to present -a single character as necessary. The actual shape editing is -dependent on the locale implementation and the font set used. -.LP -This OM value presents functionality identical to the -.PN XContextualDrawing -function. -.NH 3 -Output Context Functions -.XS -\*(SN Output Context Functions -.XE -.LP -An output context is an abstraction that contains both the data -required by an output method and the information required -to display that data. -There can be multiple output contexts for one output method. -The programming interfaces for creating, reading, or modifying -an output context use a variable argument list. -The name elements of the argument lists are referred to as XOC values. -It is intended that output methods be controlled by these XOC values. -As new XOC values are created, -they should be registered with the X Consortium. -An -.PN XOC -can be used anywhere an -.PN XFontSet -can be used, and vice versa; -.PN XFontSet -is retained for compatibility with previous releases. -The concepts of output methods and output contexts include broader, -more generalized abstraction than font set, -supporting complex and more intelligent text display, and dealing not only -with multiple fonts but also with context dependencies. -However, -.PN XFontSet -is widely used in several interfaces, so -.PN XOC -is defined as an upward compatible type of -.PN XFontSet . -.LP -.sp -To create an output context, use -.PN XCreateOC . -.IN "XCreateOC" "" "@DEF@" -.sM -.FD 0 -XOC XCreateOC\^(\^\fIom\fP\^, ...) -.br - XOM \fIom\fP\^; -.FN -.IP \fIom\fP 1i -Specifies the output method. -.ds Al \ to set XOC values -.IP ... 1i -Specifies the variable-length argument list\*(Al. -.LP -.eM -The -.PN XCreateOC -function creates an output context within the specified output method. -.LP -The base font names argument is mandatory at creation time, and -the output context will not be created unless it is provided. -All other output context values can be set later. -.LP -.PN XCreateOC -returns NULL if no output context could be created. -NULL can be returned for any of the following reasons: -.IP \(bu 5 -A required argument was not set. -.IP \(bu 5 -A read-only argument was set. -.IP \(bu 5 -An argument name is not recognized. -.IP \(bu 5 -The output method encountered an output method implementation-dependent error. -.LP -.PN XCreateOC -can generate a -.PN BadAtom -error. -.LP -.sp -To destroy an output context, use -.PN XDestroyOC . -.IN "XDestroyOC" "" "@DEF@" -.sM -.FD 0 -void XDestroyOC\^(\^\fIoc\fP\^) -.br - XOC \fIoc\fP\^; -.FN -.IP \fIoc\fP 1i -Specifies the output context. -.LP -.eM -The -.PN XDestroyOC -function destroys the specified output context. -.LP -.sp -To get the output method associated with an output context, use -.PN XOMOfOC . -.IN "XOMOfOC" "" "@DEF@" -.sM -.FD 0 -XOM XOMOfOC\^(\^\fIoc\fP\^) -.br - XOC \fIoc\fP\^; -.FN -.IP \fIoc\fP 1i -Specifies the output context. -.LP -.eM -The -.PN XOMOfOC -function returns the output method associated with the -specified output context. -.LP -.sp -Xlib provides two functions for setting and reading output context values, -respectively, -.PN XSetOCValues -and -.PN XGetOCValues . -Both functions have a variable-length argument list. -In that argument list, any XOC value's name must be denoted -with a character string using the X Portable Character Set. -.LP -.sp -To set XOC values, use -.PN XSetOCValues . -.IN "XSetOCValues" "" "@DEF@" -.sM -.FD 0 -char * XSetOCValues\^(\^\fIoc\fP\^, ...) -.br - XOC \fIoc\fP\^; -.FN -.IP \fIoc\fP 1i -Specifies the output context. -.ds Al \ to set XOC values -.IP ... 1i -Specifies the variable-length argument list\*(Al. -.LP -.eM -The -.PN XSetOCValues -function returns NULL if no error occurred; -otherwise, -it returns the name of the first argument that could not be set. -An argument might not be set for any of the following reasons: -.IP \(bu 5 -The argument is read-only. -.IP \(bu 5 -The argument name is not recognized. -.IP \(bu 5 -An implementation-dependent error occurs. -.LP -Each value to be set must be an appropriate datum, -matching the data type imposed by the semantics of the argument. -.LP -.PN XSetOCValues -can generate a -.PN BadAtom -error. -.LP -.sp -To obtain XOC values, use -.PN XGetOCValues . -.IN "XGetOCValues" "" "@DEF@" -.sM -.FD 0 -char * XGetOCValues\^(\^\fIoc\fP\^, ...) -.br - XOC \fIoc\fP\^; -.FN -.IP \fIoc\fP 1i -Specifies the output context. -.ds Al \ to get XOC values -.IP ... 1i -Specifies the variable-length argument list\*(Al. -.LP -.eM -The -.PN XGetOCValues -function returns NULL if no error occurred; otherwise, -it returns the name of the first argument that could not be obtained. -An argument might not be obtained for any of the following reasons: -.IP \(bu 5 -The argument name is not recognized. -.IP \(bu 5 -An implementation-dependent error occurs. -.LP -Each argument value -following a name must point to a location where the value is to be stored. -.NH 3 -Output Context Values -.XS -\*(SN Output Context Values -.XE -.LP -The following table describes how XOC values are interpreted -by an output method. -The first column lists the XOC values. -The second column indicates the alternative interfaces that function -identically and are provided for compatibility with previous releases. -The third column indicates how each of the XOC values is treated. -.LP -The following keys apply to this table. -.TS H -lw(1i) lw(4.75i). -_ -.sp 6p -.B -Key Explanation -.sp 6p -_ -.TH -.R -C T{ -This value must be set with -.PN XCreateOC . -T} -D T{ -This value may be set using -.PN XCreateOC . -If it is not set, -.br -a default is provided. -T} -G T{ -This value may be read using -.PN XGetOCValues . -T} -S T{ -This value must be set using -.PN XSetOCValues . -T} -.sp 6p -_ -.TE -.LP -.TS H -l c c -l c c. -_ -.sp 6p -.B -XOC Value Alternative Interface Key -.sp 6p -_ -.sp 6p -.TH -.R -T{ -BaseFontName -T} T{ -.PN XCreateFontSet -T} T{ -C-G -T} -T{ -MissingCharSet -T} T{ -.PN XCreateFontSet -T} T{ -G -T} -T{ -DefaultString -T} T{ -.PN XCreateFontSet -T} T{ -G -T} -T{ -Orientation -T} T{ -\- -T} T{ -D-S-G -T} -T{ -ResourceName -T} T{ -\- -T} T{ -S-G -T} -T{ -ResourceClass -T} T{ -\- -T} T{ -S-G -T} -T{ -FontInfo -T} T{ -.PN XFontsOfFontSet -T} T{ -G -T} -T{ -OMAutomatic -T} T{ -\- -T} T{ -G -T} -.sp 6p -_ -.TE -.LP -.NH 4 -Base Font Name -.XS -\*(SN Base Font Name -.XE -.LP -The -.PN XNBaseFontName -argument is a list of base font names that Xlib uses -to load the fonts needed for the locale. -The base font names are a comma-separated list. The string is null-terminated -and is assumed to be in the Host Portable Character Encoding; -otherwise, the result is implementation-dependent. -White space immediately on either side of a separating comma is ignored. -.LP -Use of XLFD font names permits Xlib to obtain the fonts needed for a -variety of locales from a single locale-independent base font name. -The single base font name should name a family of fonts whose members -are encoded in the various charsets needed by the locales of interest. -.LP -An XLFD base font name can explicitly name a charset needed for the locale. -This allows the user to specify an exact font for use with a charset required -by a locale, fully controlling the font selection. -.LP -If a base font name is not an XLFD name, -Xlib will attempt to obtain an XLFD name from the font properties -for the font. -If Xlib is successful, the -.PN XGetOCValues -function will return this XLFD name instead of the client-supplied name. -.LP -This argument must be set at creation time -and cannot be changed. -If no fonts exist for any of the required charsets, -or if the locale definition in Xlib requires that a font exist -for a particular charset and a font is not found for that charset, -.PN XCreateOC -returns NULL. -.LP -When querying for the -.PN XNBaseFontName -XOC value, -.PN XGetOCValues -returns a null-terminated string identifying the base font names that -Xlib used to load the fonts needed for the locale. -This string is owned by Xlib and should not be modified or freed by -the client. -The string will be freed by a call to -.PN XDestroyOC -with the associated -.PN XOC . -Until freed, the string contents will not be modified by Xlib. -.NH 4 -Missing CharSet -.XS -\*(SN Missing CharSet -.XE -.LP -The -.PN XNMissingCharSet -argument returns the list of required charsets that are missing from the -font set. -The value of the argument is a pointer to a structure of type -.PN XOMCharSetList . -.LP -If fonts exist for all of the charsets required by the current locale, -charset_list is set to NULL and charset_count is set to zero. -If no fonts exist for one or more of the required charsets, -charset_list is set to a list of one or more null-terminated charset names -for which no fonts exist, and charset_count is set to the number of -missing charsets. -The charsets are from the list of the required charsets for -the encoding of the locale and do not include any charsets to which Xlib -may be able to remap a required charset. -.LP -The missing charset list is owned by Xlib and should not be modified or -freed by the client. -It will be freed by a call to -.PN XDestroyOC -with the associated -.PN XOC . -Until freed, its contents will not be modified by Xlib. -.NH 4 -Default String -.XS -\*(SN Default String -.XE -.LP -When a drawing or measuring function is called with an -.PN XOC -that has missing charsets, some characters in the locale will not be -drawable. -The -.PN XNDefaultString -argument returns a pointer to a string that represents the glyphs -that are drawn with this -.PN XOC -when the charsets of the available fonts do not include all glyphs -required to draw a character. -The string does not necessarily consist of valid characters -in the current locale and is not necessarily drawn with -the fonts loaded for the font set, -but the client can draw or measure the default glyphs -by including this string in a string being drawn or measured with the -.PN XOC . -.LP -If the -.PN XNDefaultString -argument returned the empty string ("\^"), -no glyphs are drawn and the escapement is zero. -The returned string is null-terminated. -It is owned by Xlib and should not be modified or freed by the client. -It will be freed by a call to -.PN XDestroyOC -with the associated -.PN XOC . -Until freed, its contents will not be modified by Xlib. -.NH 4 -Orientation -.XS -\*(SN Orientation -.XE -.LP -The -.PN XNOrientation -argument specifies the current orientation of text when drawn. The value of -this argument is one of the values returned by the -.PN XGetOMValues -function with the -.PN XNQueryOrientation -argument specified in the -.PN XOrientation -list. -The value of the argument is of type -.PN XOrientation . -When -.PN XNOrientation -is queried, the value specifies the current orientation. -When -.PN XNOrientation -is set, a value is used to set the current orientation. -.LP -When -.PN XOMOrientation_Context -is set, the text orientation of the -text is determined according to an implementation-defined method -(for example, ISO 6429 control sequences), and the initial text orientation for -locale-dependent Xlib functions is assumed to -be -.PN XOMOrientation_LTR_TTB . -.LP -The -.PN XNOrientation -value does not change the prime drawing direction -for Xlib drawing functions. -.NH 4 -Resource Name and Class -.XS -\*(SN Resource Name and Class -.XE -.LP -The -.PN XNResourceName -and -.PN XNResourceClass -arguments are strings that specify the full name and class -used by the client to obtain resources for the display of the output context. -These values should be used as prefixes for name and class -when looking up resources that may vary according to the output context. -If these values are not set, -the resources will not be fully specified. -.LP -It is not intended that values that can be set as XOM values be -set as resources. -.LP -When querying for the -.PN XNResourceName -or -.PN XNResourceClass -XOC value, -.PN XGetOCValues -returns a null-terminated string. -This string is owned by Xlib and should not be modified or freed by -the client. -The string will be freed by a call to -.PN XDestroyOC -with the associated -.PN XOC -or when the associated value is changed via -.PN XSetOCValues . -Until freed, the string contents will not be modified by Xlib. -.NH 4 -Font Info -.XS -\*(SN Font Info -.XE -.LP -The -.PN XNFontInfo -argument specifies a list of one or more -.PN XFontStruct -structures -and font names for the fonts used for drawing by the given output context. -The value of the argument is a pointer to a structure of type -.PN XOMFontInfo . -.LP -.sM -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { - int num_font; - XFontStruct **font_struct_list; - char **font_name_list; -} XOMFontInfo; -.De -.LP -.eM -A list of pointers to the -.PN XFontStruct -structures is returned to font_struct_list. -A list of pointers to null-terminated, fully-specified font name strings -in the locale of the output context is returned to font_name_list. -The font_name_list order corresponds to the font_struct_list order. -The number of -.PN XFontStruct -structures and font names is returned to num_font. -.LP -Because it is not guaranteed that a given character will be imaged using a -single font glyph, -there is no provision for mapping a character or default string -to the font properties, font ID, or direction hint for the font -for the character. -The client may access the -.PN XFontStruct -list to obtain these values for all the fonts currently in use. -.LP -Xlib does not guarantee that fonts are loaded from the server -at the creation of an -.PN XOC . -Xlib may choose to cache font data, loading it only as needed to draw text -or compute text dimensions. -Therefore, existence of the per_char metrics in the -.PN XFontStruct -structures in the -.PN XFontStructSet -is undefined. -Also, note that all properties in the -.PN XFontStruct -structures are in the STRING encoding. -.LP -The client must not free the -.PN XOMFontInfo -struct itself; it will be freed when the -.PN XOC -is closed. -.NH 4 -OM Automatic -.XS -\*(SN OM Automatic -.XE -.LP -The -.PN XNOMAutomatic -argument returns whether the associated output context was created by -.PN XCreateFontSet -or not. Because the -.PN XFreeFontSet -function not only destroys the output context but also closes the implicit -output method associated with it, -.PN XFreeFontSet -should be used with any output context created by -.PN XCreateFontSet . -However, it is possible that a client does not know how the output context -was created. -Before a client destroys the output context, -it can query whether -.PN XNOMAutomatic -is set to determine whether -.PN XFreeFontSet -or -.PN XDestroyOC -should be used to destroy the output context. -.NH 3 -Creating and Freeing a Font Set -.XS -\*(SN Creating and Freeing a Font Set -.XE -.LP -Xlib international text drawing is done using a set of one or more fonts, -as needed for the locale of the text. -Fonts are loaded according to a list of base font names -supplied by the client and the charsets required by the locale. -The -.PN XFontSet -is an opaque type representing the state of a particular output thread -and is equivalent to the type -.PN XOC . -.LP -.sp -The -.PN XCreateFontSet -function is a convenience function for creating an output context using -only default values. The returned -.PN XFontSet -has an implicitly created -.PN XOM . -This -.PN XOM -has an OM value -.PN XNOMAutomatic -automatically set to -.PN True -so that the output context self indicates whether it was created by -.PN XCreateOC -or -.PN XCreateFontSet . -.IN "XCreateFontSet" "" "@DEF@" -.sM -.FD 0 -XFontSet XCreateFontSet\^(\^\fIdisplay\fP\^, \fIbase_font_name_list\fP\^, \fImissing_charset_list_return\fP\^, -.br - \fImissing_charset_count_return\fP\^, \fIdef_string_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - char *\fIbase_font_name_list\fP\^; -.br - char ***\fImissing_charset_list_return\fP\^; -.br - int *\fImissing_charset_count_return\fP\^; -.br - char **\fIdef_string_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIbase_font_name_list\fP 1i -Specifies the base font names. -.IP \fImissing_charset_list_return\fP 1i -Returns the missing charsets. -.IP \fImissing_charset_count_return\fP 1i -Returns the number of missing charsets. -.IP \fIdef_string_return\fP 1i -Returns the string drawn for missing charsets. -.LP -.eM -The -.PN XCreateFontSet -function creates a font set for the specified display. -The font set is bound to the current locale when -.PN XCreateFontSet -is called. -The font set may be used in subsequent calls to obtain font -and character information and to image text in the locale of the font set. -.LP -The base_font_name_list argument is a list of base font names -that Xlib uses to load the fonts needed for the locale. -The base font names are a comma-separated list. -The string is null-terminated -and is assumed to be in the Host Portable Character Encoding; -otherwise, the result is implementation-dependent. -White space immediately on either side of a separating comma is ignored. -.LP -Use of XLFD font names permits Xlib to obtain the fonts needed for a -variety of locales from a single locale-independent base font name. -The single base font name should name a family of fonts whose members -are encoded in the various charsets needed by the locales of interest. -.LP -An XLFD base font name can explicitly name a charset needed for the locale. -This allows the user to specify an exact font for use with a charset required -by a locale, fully controlling the font selection. -.LP -If a base font name is not an XLFD name, -Xlib will attempt to obtain an XLFD name from the font properties -for the font. -If this action is successful in obtaining an XLFD name, the -.PN XBaseFontNameListOfFontSet -function will return this XLFD name instead of the client-supplied name. -.LP -Xlib uses the following algorithm to select the fonts -that will be used to display text with the -.PN XFontSet . -.LP -For each font charset required by the locale, -the base font name list is searched for the first appearance of one -of the following cases that names a set of fonts that exist at the server: -.IP \(bu 5 -The first XLFD-conforming base font name that specifies the required -charset or a superset of the required charset in its -.PN CharSetRegistry -and -.PN CharSetEncoding -fields. -The implementation may use a base font name whose specified charset -is a superset of the required charset, for example, -an ISO8859-1 font for an ASCII charset. -.IP \(bu 5 -The first set of one or more XLFD-conforming base font names -that specify one or more charsets that can be remapped to support the -required charset. -The Xlib implementation may recognize various mappings -from a required charset to one or more other charsets -and use the fonts for those charsets. -For example, JIS Roman is ASCII with tilde and backslash replaced -by yen and overbar; -Xlib may load an ISO8859-1 font to support this character set -if a JIS Roman font is not available. -.IP \(bu 5 -The first XLFD-conforming font name or the first non-XLFD font name -for which an XLFD font name can be obtained, combined with the -required charset (replacing the -.PN CharSetRegistry -and -.PN CharSetEncoding -fields in the XLFD font name). -As in case 1, -the implementation may use a charset that is a superset -of the required charset. -.IP \(bu 5 -The first font name that can be mapped in some implementation-dependent -manner to one or more fonts that support imaging text in the charset. -.LP -For example, assume that a locale required the charsets: -.LP -.Ds 0 -ISO8859-1 -JISX0208.1983 -JISX0201.1976 -GB2312-1980.0 -.De -.LP -The user could supply a base_font_name_list that explicitly specifies the -charsets, ensuring that specific fonts are used if they exist. -For example: -.LP -.Ds 0 -"-JIS-Fixed-Medium-R-Normal--26-180-100-100-C-240-JISX0208.1983-0,\\ --JIS-Fixed-Medium-R-Normal--26-180-100-100-C-120-JISX0201.1976-0,\\ --GB-Fixed-Medium-R-Normal--26-180-100-100-C-240-GB2312-1980.0,\\ --Adobe-Courier-Bold-R-Normal--25-180-75-75-M-150-ISO8859-1" -.De -.LP -Alternatively, the user could supply a base_font_name_list -that omits the charsets, -letting Xlib select font charsets required for the locale. -For example: -.LP -.Ds 0 -"-JIS-Fixed-Medium-R-Normal--26-180-100-100-C-240,\\ --JIS-Fixed-Medium-R-Normal--26-180-100-100-C-120,\\ --GB-Fixed-Medium-R-Normal--26-180-100-100-C-240,\\ --Adobe-Courier-Bold-R-Normal--25-180-100-100-M-150" -.De -.LP -Alternatively, the user could simply supply a single base font name -that allows Xlib to select from all available fonts -that meet certain minimum XLFD property requirements. -For example: -.LP -.Ds 0 -"-*-*-*-R-Normal--*-180-100-100-*-*" -.De -.LP -If -.PN XCreateFontSet -is unable to create the font set, -either because there is insufficient memory or because the current locale -is not supported, -.PN XCreateFontSet -returns NULL, missing_charset_list_return is set to NULL, -and missing_charset_count_return -is set to zero. -If fonts exist for all of the charsets required by the current locale, -.PN XCreateFontSet -returns a valid -.PN XFontSet , -missing_charset_list_return is set to NULL, -and missing_charset_count_return is set to zero. -.LP -If no font exists for one or more of the required charsets, -.PN XCreateFontSet -sets missing_charset_list_return to a -list of one or more null-terminated charset names for which no font exists -and sets missing_charset_count_return to the number of missing fonts. -The charsets are from the list of the required charsets for -the encoding of the locale and do not include any charsets to which Xlib -may be able to remap a required charset. -.LP -If no font exists for any of the required charsets -or if the locale definition in Xlib requires that a font exist -for a particular charset and a font is not found for that charset, -.PN XCreateFontSet -returns NULL. -Otherwise, -.PN XCreateFontSet -returns a valid -.PN XFontSet -to font_set. -.LP -When an Xmb/wc drawing or measuring function is called with an -.PN XFontSet -that has missing charsets, some characters in the locale will not be -drawable. -If def_string_return is non-NULL, -.PN XCreateFontSet -returns a pointer to a string that represents the glyphs -that are drawn with this -.PN XFontSet -when the charsets of the available fonts do not include all font glyphs -required to draw a codepoint. -The string does not necessarily consist of valid characters -in the current locale and is not necessarily drawn with -the fonts loaded for the font set, -but the client can draw and measure the default glyphs -by including this string in a string being drawn or measured with the -.PN XFontSet . -.LP -If the string returned to def_string_return is the empty string ("\^"), -no glyphs are drawn, and the escapement is zero. -The returned string is null-terminated. -It is owned by Xlib and should not be modified or freed by the client. -It will be freed by a call to -.PN XFreeFontSet -with the associated -.PN XFontSet . -Until freed, its contents will not be modified by Xlib. -.LP -The client is responsible for constructing an error message from the -missing charset and default string information and may choose to continue -operation in the case that some fonts did not exist. -.LP -The returned -.PN XFontSet -and missing charset list should be freed with -.PN XFreeFontSet -and -.PN XFreeStringList , -respectively. -The client-supplied base_font_name_list may be freed -by the client after calling -.PN XCreateFontSet . -.LP -.sp -To obtain a list of -.PN XFontStruct -structures and full font names given an -.PN XFontSet , -use -.PN XFontsOfFontSet . -.IN "XFontsOfFontSet" "" "@DEF@" -.sM -.FD 0 -int XFontsOfFontSet\^(\^\fIfont_set\fP\^, \fIfont_struct_list_return\fP\^, \fIfont_name_list_return\fP\^) -.br - XFontSet \fIfont_set\fP\^; -.br - XFontStruct ***\fIfont_struct_list_return\fP\^; -.br - char ***\fIfont_name_list_return\fP\^; -.FN -.IP \fIfont_set\fP 1i -Specifies the font set. -.IP \fIfont_struct_list_return\fP 1i -Returns the list of font structs. -.IP \fIfont_name_list_return\fP 1i -Returns the list of font names. -.LP -.eM -The -.PN XFontsOfFontSet -function returns a list of one or more -.PN XFontStructs -and font names for the fonts used by the Xmb and Xwc layers -for the given font set. -A list of pointers to the -.PN XFontStruct -structures is returned to font_struct_list_return. -A list of pointers to null-terminated, fully specified font name strings -in the locale of the font set is returned to font_name_list_return. -The font_name_list order corresponds to the font_struct_list order. -The number of -.PN XFontStruct -structures and font names is returned as the value of the function. -.LP -Because it is not guaranteed that a given character will be imaged using a -single font glyph, -there is no provision for mapping a character or default string -to the font properties, font ID, or direction hint for the font -for the character. -The client may access the -.PN XFontStruct -list to obtain these values for all the fonts currently in use. -.LP -Xlib does not guarantee that fonts are loaded from the server -at the creation of an -.PN XFontSet . -Xlib may choose to cache font data, loading it only as needed to draw text -or compute text dimensions. -Therefore, existence of the per_char metrics in the -.PN XFontStruct -structures in the -.PN XFontStructSet -is undefined. -Also, note that all properties in the -.PN XFontStruct -structures are in the STRING encoding. -.LP -The -.PN XFontStruct -and font name lists are owned by Xlib -and should not be modified or freed by the client. -They will be freed by a call to -.PN XFreeFontSet -with the associated -.PN XFontSet . -Until freed, their contents will not be modified by Xlib. -.LP -.sp -To obtain the base font name list and the selected font name list given an -.PN XFontSet , -use -.PN XBaseFontNameListOfFontSet . -.IN "XBaseFontNameListOfFontSet" "" "@DEF@" -.sM -.FD 0 -char *XBaseFontNameListOfFontSet\^(\^\fIfont_set\fP\^) -.br - XFontSet \fIfont_set\fP\^; -.FN -.IP \fIfont_set\fP 1i -Specifies the font set. -.LP -.eM -The -.PN XBaseFontNameListOfFontSet -function returns the original base font name list supplied -by the client when the -.PN XFontSet -was created. -A null-terminated string containing a list of -comma-separated font names is returned -as the value of the function. -White space may appear immediately on either side of separating commas. -.LP -If -.PN XCreateFontSet -obtained an XLFD name from the font properties for the font specified -by a non-XLFD base name, the -.PN XBaseFontNameListOfFontSet -function will return the XLFD name instead of the non-XLFD base name. -.LP -The base font name list is owned by Xlib and should not be modified or -freed by the client. -It will be freed by a call to -.PN XFreeFontSet -with the associated -.PN XFontSet . -Until freed, its contents will not be modified by Xlib. -.LP -.sp -To obtain the locale name given an -.PN XFontSet , -use -.PN XLocaleOfFontSet . -.IN "XLocaleOfFontSet" "" "@DEF@" -.sM -.FD 0 -char *XLocaleOfFontSet\^(\^\fIfont_set\fP\^) -.br - XFontSet \fIfont_set\fP\^; -.FN -.IP \fIfont_set\fP 1i -Specifies the font set. -.LP -.eM -The -.PN XLocaleOfFontSet -function -returns the name of the locale bound to the specified -.PN XFontSet , -as a null-terminated string. -.LP -The returned locale name string is owned by Xlib -and should not be modified or freed by the client. -It may be freed by a call to -.PN XFreeFontSet -with the associated -.PN XFontSet . -Until freed, it will not be modified by Xlib. -.LP -.sp -The -.PN XFreeFontSet -function is a convenience function for freeing an output context. -.PN XFreeFontSet -also frees its associated -.PN XOM -if the output context was created by -.PN XCreateFontSet . -.IN "XFreeFontSet" "" "@DEF@" -.sM -.FD 0 -void XFreeFontSet\^(\^\fIdisplay\fP\^, \fIfont_set\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XFontSet \fIfont_set\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIfont_set\fP 1i -Specifies the font set. -.LP -.eM -The -.PN XFreeFontSet -function frees the specified font set. -The associated base font name list, font name list, -.PN XFontStruct -list, and -.PN XFontSetExtents , -if any, are freed. -.NH 3 -Obtaining Font Set Metrics -.XS -\*(SN Obtaining Font Set Metrics -.XE -.LP -Metrics for the internationalized text drawing functions -are defined in terms of a primary draw direction, -which is the default direction in which the character origin advances -for each succeeding character in the string. -The Xlib interface is currently defined to support only a left-to-right -primary draw direction. -The drawing origin is the position passed to the drawing function -when the text is drawn. -The baseline is a line drawn through the drawing origin parallel -to the primary draw direction. -Character ink is the pixels painted in the foreground color -and does not include interline or intercharacter spacing -or image text background pixels. -.LP -The drawing functions are allowed to implement implicit text -directionality control, reversing the order in which characters are -rendered along the primary draw direction in response to locale-specific -lexical analysis of the string. -.LP -Regardless of the character rendering order, -the origins of all characters are on the primary draw direction side -of the drawing origin. -The screen location of a particular character image may be determined with -.PN XmbTextPerCharExtents -or -.PN XwcTextPerCharExtents . -.LP -The drawing functions are allowed to implement context-dependent -rendering, where the glyphs drawn for a string are not simply a -concatenation of the glyphs that represent each individual character. -A string of two characters drawn with -.PN XmbDrawString -may render differently than if the two characters -were drawn with separate calls to -.PN XmbDrawString . -If the client appends or inserts a character -in a previously drawn string, -the client may need to redraw some adjacent characters -to obtain proper rendering. -.LP -.sp -To find out about direction-dependent rendering, use -.PN XDirectionalDependentDrawing . -.IN "XDirectionalDependentDrawing" "" "@DEF@" -.sM -.FD 0 -Bool XDirectionalDependentDrawing\^(\^\fIfont_set\fP\^) -.br - XFontSet \fIfont_set\fP\^; -.FN -.IP \fIfont_set\fP 1i -Specifies the font set. -.LP -.eM -The -.PN XDirectionalDependentDrawing -function returns -.PN True -if the drawing functions implement implicit text directionality; -otherwise, it returns -.PN False . -.LP -.sp -To find out about context-dependent rendering, use -.PN XContextualDrawing . -.IN "XContextualDrawing" "" "@DEF@" -.sM -.FD 0 -Bool XContextualDrawing\^(\^\fIfont_set\fP\^) -.br - XFontSet \fIfont_set\fP\^; -.FN -.IP \fIfont_set\fP 1i -Specifies the font set. -.LP -.eM -The -.PN XContextualDrawing -function returns -.PN True -if text drawn with the font set might include context-dependent drawing; -otherwise, it returns -.PN False . -.LP -.sp -To find out about context-dependent or direction-dependent rendering, use -.PN XContextDependentDrawing . -.IN "XContextDependentDrawing" "" "@DEF@" -.sM -.FD 0 -Bool XContextDependentDrawing\^(\^\fIfont_set\fP\^) -.br - XFontSet \fIfont_set\fP\^; -.FN -.IP \fIfont_set\fP 1i -Specifies the font set. -.LP -.eM -The -.PN XContextDependentDrawing -function returns -.PN True -if the drawing functions implement implicit text directionality or -if text drawn with the font_set might include context-dependent drawing; -otherwise, it returns -.PN False . -.LP -The drawing functions do not interpret newline, tab, or other control -characters. -The behavior when nonprinting characters other than space are drawn -is implementation-dependent. -It is the client's responsibility to interpret control characters -in a text stream. -.LP -The maximum character extents for the fonts that are used by the text -drawing layers can be accessed by the -.PN XFontSetExtents -structure: -.IN "XFontSetExtents" "" "@DEF@" -.LP -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - XRectangle max_ink_extent; /* over all drawable characters */ - XRectangle max_logical_extent; /* over all drawable characters */ -} XFontSetExtents; -.De -.LP -The -.PN XRectangle -structures used to return font set metrics are the usual Xlib screen-oriented -rectangles -with x, y giving the upper left corner, and width and height always positive. -.LP -The max_ink_extent member gives the maximum extent, over all drawable characters, of -the rectangles that bound the character glyph image drawn in the -foreground color, relative to a constant origin. -See -.PN XmbTextExtents -and -.PN XwcTextExtents -for detailed semantics. -.LP -The max_logical_extent member gives the maximum extent, -over all drawable characters, of the rectangles -that specify minimum spacing to other graphical features, -relative to a constant origin. -Other graphical features drawn by the client, for example, -a border surrounding the text, should not intersect this rectangle. -The max_logical_extent member should be used to compute minimum -interline spacing and the minimum area that must be allowed -in a text field to draw a given number of arbitrary characters. -.LP -Due to context-dependent rendering, -appending a given character to a string may change -the string's extent by an amount other than that character's -individual extent. -.LP -The rectangles for a given character in a string can be obtained from -.PN XmbPerCharExtents -or -.PN XwcPerCharExtents . -.LP -.sp -To obtain the maximum extents structure given an -.PN XFontSet , -use -.PN XExtentsOfFontSet . -.IN "XExtentsOfFontSet" "" "@DEF@" -.sM -.FD 0 -XFontSetExtents *XExtentsOfFontSet\^(\^\fIfont_set\fP\^) -.br - XFontSet \fIfont_set\fP\^; -.FN -.IP \fIfont_set\fP 1i -Specifies the font set. -.LP -.eM -The -.PN XExtentsOfFontSet -function returns an -.PN XFontSetExtents -structure for the fonts used by the Xmb and Xwc layers -for the given font set. -.LP -The -.PN XFontSetExtents -structure is owned by Xlib and should not be modified -or freed by the client. -It will be freed by a call to -.PN XFreeFontSet -with the associated -.PN XFontSet . -Until freed, its contents will not be modified by Xlib. -.LP -.sp -To obtain the escapement in pixels of the specified text as a value, -use -.PN XmbTextEscapement -or -.PN XwcTextEscapement . -.IN "XmbTextEscapement" "" "@DEF@" -.IN "XwcTextEscapement" "" "@DEF@" -.sM -.FD 0 -int XmbTextEscapement\^(\^\fIfont_set\fP\^, \fIstring\fP\^, \fInum_bytes\fP\^) -.br - XFontSet \fIfont_set\fP\^; -.br - char *\fIstring\fP\^; -.br - int \fInum_bytes\fP\^; -.FN -.FD 0 -int XwcTextEscapement\^(\^\fIfont_set\fP\^, \fIstring\fP\^, \fInum_wchars\fP\^) -.br - XFontSet \fIfont_set\fP\^; -.br - wchar_t *\fIstring\fP\^; -.br - int \fInum_wchars\fP\^; -.FN -.IP \fIfont_set\fP 1i -Specifies the font set. -.IP \fIstring\fP 1i -Specifies the character string. -.IP \fInum_bytes\fP 1i -Specifies the number of bytes in the string argument. -.IP \fInum_wchars\fP 1i -Specifies the number of characters in the string argument. -.LP -.eM -The -.PN XmbTextEscapement -and -.PN XwcTextEscapement -functions return the escapement in pixels of the specified string as a value, -using the fonts loaded for the specified font set. -The escapement is the distance in pixels in the primary draw -direction from the drawing origin to the origin of the next character to -be drawn, assuming that the rendering of the next character is not -dependent on the supplied string. -.LP -Regardless of the character rendering order, -the escapement is always positive. -.LP -.sp -To obtain the overall_ink_return and overall_logical_return arguments, -the overall bounding box of the string's image, and a logical bounding box, -use -.PN XmbTextExtents - or -.PN XwcTextExtents . -.IN "XmbTextExtents" "" "@DEF@" -.IN "XwcTextExtents" "" "@DEF@" -.sM -.FD 0 -int XmbTextExtents\^(\^\fIfont_set\fP\^, \fIstring\fP\^, \fInum_bytes\fP\^, \fIoverall_ink_return\fP\^, \fIoverall_logical_return\fP\^) -.br - XFontSet \fIfont_set\fP\^; -.br - char *\fIstring\fP\^; -.br - int \fInum_bytes\fP\^; -.br - XRectangle *\fIoverall_ink_return\fP\^; -.br - XRectangle *\fIoverall_logical_return\fP\^; -.FN -.FD 0 -int XwcTextExtents\^(\^\fIfont_set\fP\^, \fIstring\fP\^, \fInum_wchars\fP\^, -\fIoverall_ink_return\fP\^, \fIoverall_logical_return\fP\^) -.br - XFontSet \fIfont_set\fP\^; -.br - wchar_t *\fIstring\fP\^; -.br - int \fInum_wchars\fP\^; -.br - XRectangle *\fIoverall_ink_return\fP\^; -.br - XRectangle *\fIoverall_logical_return\fP\^; -.FN -.IP \fIfont_set\fP 1i -Specifies the font set. -.IP \fIstring\fP 1i -Specifies the character string. -.IP \fInum_bytes\fP 1i -Specifies the number of bytes in the string argument. -.IP \fInum_wchars\fP 1i -Specifies the number of characters in the string argument. -.ds Ov dimensions -.IP \fIoverall_ink_return\fP 1i -Returns the overall ink \*(Ov. -.IP \fIoverall_logical_return\fP 1i -Returns the overall logical \*(Ov. -.LP -.eM -The -.PN XmbTextExtents -and -.PN XwcTextExtents -functions set the components of the specified overall_ink_return and -overall_logical_return -arguments to the overall bounding box of the string's image -and a logical bounding box for spacing purposes, respectively. -They return the value returned by -.PN XmbTextEscapement -or -.PN XwcTextEscapement . -These metrics are relative to the drawing origin of the string, -using the fonts loaded for the specified font set. -.LP -If the overall_ink_return argument is non-NULL, -it is set to the bounding box of the string's character ink. -The overall_ink_return for a nondescending, horizontally drawn -Latin character is conventionally entirely above the baseline; -that is, overall_ink_return.height <= \-overall_ink_return.y. -The overall_ink_return for a nonkerned character -is entirely at, and to the right of, the origin; -that is, overall_ink_return.x >= 0. -A character consisting of a single pixel at the origin would set -overall_ink_return fields y = 0, x = 0, width = 1, and height = 1. -.LP -If the overall_logical_return argument is non-NULL, -it is set to the bounding box that provides minimum spacing -to other graphical features for the string. -Other graphical features, for example, a border surrounding the text, -should not intersect this rectangle. -.LP -When the -.PN XFontSet -has missing charsets, -metrics for each unavailable character are taken -from the default string returned by -.PN XCreateFontSet -so that the metrics represent the text as it will actually be drawn. -The behavior for an invalid codepoint is undefined. -.LP -To determine the effective drawing origin for a character in a drawn string, -the client should call -.PN XmbTextPerCharExtents -on the entire string, then on the character, -and subtract the x values of the returned -rectangles for the character. -This is useful to redraw portions of a line of text -or to justify words, but for context-dependent rendering, -the client should not assume that it can redraw the character by itself -and get the same rendering. -.LP -.sp -To obtain per-character information for a text string, -use -.PN XmbTextPerCharExtents -or -.PN XwcTextPerCharExtents . -.IN "XmbTextPerCharExtents" "" "@DEF@" -.IN "XwcTextPerCharExtents" "" "@DEF@" -.sM -.FD 0 -Status XmbTextPerCharExtents\^(\^\fIfont_set\fP\^, \fIstring\fP\^, \fInum_bytes\fP\^, \fIink_array_return\fP\^, -.br - \fIlogical_array_return\fP\^, \fIarray_size\fP\^, \fInum_chars_return\fP\^, \fIoverall_ink_return\fP\^, \fIoverall_logical_return\fP\^) -.br - XFontSet \fIfont_set\fP\^; -.br - char *\fIstring\fP\^; -.br - int \fInum_bytes\fP\^; -.br - XRectangle *\fIink_array_return\fP\^; -.br - XRectangle *\fIlogical_array_return\fP\^; -.br - int \fIarray_size\fP\^; -.br - int *\fInum_chars_return\fP\^; -.br - XRectangle *\fIoverall_ink_return\fP\^; -.br - XRectangle *\fIoverall_logical_return\fP\^; -.FN -.FD 0 -Status XwcTextPerCharExtents\^(\^\fIfont_set\fP\^, \fIstring\fP\^, \fInum_wchars\fP\^, \fIink_array_return\fP\^, -.br - \fIlogical_array_return\fP\^, \fIarray_size\fP\^, \fInum_chars_return\fP\^, \fIoverall_ink_return\fP\^, \fIoverall_ink_return\fP\^) -.br - XFontSet \fIfont_set\fP\^; -.br - wchar_t *\fIstring\fP\^; -.br - int \fInum_wchars\fP\^; -.br - XRectangle *\fIink_array_return\fP\^; -.br - XRectangle *\fIlogical_array_return\fP; -.br - int \fIarray_size\fP\^; -.br - int *\fInum_chars_return\fP\^; -.br - XRectangle *\fIoverall_ink_return\fP\^; -.br - XRectangle *\fIoverall_logical_return\fP\^; -.FN -.IP \fIfont_set\fP 1i -Specifies the font set. -.IP \fIstring\fP 1i -Specifies the character string. -.IP \fInum_bytes\fP 1i -Specifies the number of bytes in the string argument. -.IP \fInum_wchars\fP 1i -Specifies the number of characters in the string argument. -.IP \fIink_array_return\fP 1i -Returns the ink dimensions for each character. -.IP \fIlogical_array_return\fP 1i -Returns the logical dimensions for each character. -.IP \fIarray_size\fP 1i -Specifies the size of ink_array_return and logical_array_return. -The caller must pass in arrays of this size. -.IP \fInum_chars_return\fP 1i -Returns the number of characters in the string argument. -.ds Ov extents of the entire string -.IP \fIoverall_ink_return\fP 1i -Returns the overall ink \*(Ov. -.IP \fIoverall_logical_return\fP 1i -Returns the overall logical \*(Ov. -.LP -.eM -The -.PN XmbTextPerCharExtents -and -.PN XwcTextPerCharExtents -functions return the text dimensions of each character of the specified text, -using the fonts loaded for the specified font set. -Each successive element of ink_array_return and logical_array_return -is set to the successive character's drawn metrics, -relative to the drawing origin of the string and one -rectangle -for each character in the supplied text string. -The number of elements of ink_array_return and logical_array_return -that have been set is returned to num_chars_return. -.LP -Each element of ink_array_return is set to the bounding box -of the corresponding character's drawn foreground color. -Each element of logical_array_return is set to the bounding box -that provides minimum spacing to other graphical features -for the corresponding character. -Other graphical features should not intersect any of the -logical_array_return rectangles. -.LP -Note that an -.PN XRectangle -represents the effective drawing dimensions of the character, -regardless of the number of font glyphs that are used to draw -the character or the direction in which the character is drawn. -If multiple characters map to a single character glyph, -the dimensions of all the -.PN XRectangles -of those characters are the same. -.LP -When the -.PN XFontSet -has missing charsets, metrics for each unavailable -character are taken from the default string returned by -.PN XCreateFontSet -so that the metrics represent the text as it will actually be drawn. -The behavior for an invalid codepoint is undefined. -.LP -If the array_size is too small for the number of characters in the -supplied text, the functions return zero -and num_chars_return is set to the number of rectangles required. -Otherwise, the functions return a nonzero value. -.LP -If the overall_ink_return or overall_logical_return argument is non-NULL, -.PN XmbTextPerCharExtents -and -.PN XwcTextPerCharExtents -return the maximum extent of the string's metrics to overall_ink_return -or overall_logical_return, as returned by -.PN XmbTextExtents -or -.PN XwcTextExtents . -.NH 3 -Drawing Text Using Font Sets -.XS -\*(SN Drawing Text Using Font Sets -.XE -.LP -The functions defined in this section -draw text at a specified location in a drawable. -They are similar to the functions -.PN XDrawText , -.PN XDrawString , -and -.PN XDrawImageString -except that they work with font sets instead of single fonts -and interpret the text based on the locale of the font set -instead of treating the bytes of the string as direct font indexes. -See section 8.6 for details of the use of Graphics Contexts (GCs) -and possible protocol errors. -If a -.PN BadFont -error is generated, -characters prior to the offending character may have been drawn. -.LP -The text is drawn using the fonts loaded for the specified font set; -the font in the GC is ignored and may be modified by the functions. -No validation that all fonts conform to some width rule is performed. -.LP -The text functions -.PN XmbDrawText -and -.PN XwcDrawText -use the following structures: -.LP -.IN "XmbTextItem" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { - char *chars; /* pointer to string */ - int nchars; /* number of bytes */ - int delta; /* pixel delta between strings */ - XFontSet font_set; /* fonts, None means don't change */ -} XmbTextItem; -.De -.LP -.IN "XwcTextItem" "" "@DEF@" -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { - wchar_t *chars; /* pointer to wide char string */ - int nchars; /* number of wide characters */ - int delta; /* pixel delta between strings */ - XFontSet font_set; /* fonts, None means don't change */ -} XwcTextItem; -.De -.LP -.eM -.sp -To draw text using multiple font sets in a given drawable, use -.PN XmbDrawText -or -.PN XwcDrawText . -.IN "XmbDrawText" "" "@DEF@" -.IN "XwcDrawText" "" "@DEF@" -.sM -.FD 0 -void XmbDrawText\^(\^\fIdisplay\fP\^, \fId\fP\^, \fIgc\fP\^, \fIx\fP\^, \fIy\fP\^, \fIitems\fP\^, \fInitems\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - GC \fIgc\fP\^; -.br - int \fIx\fP\^, \fIy\fP\^; -.br - XmbTextItem *\fIitems\fP\^; -.br - int \fInitems\fP\^; -.FN -.FD 0 -void XwcDrawText\^(\^\fIdisplay\fP\^, \fId\fP\^, \fIgc\fP\^, \fIx\fP\^, \fIy\fP\^, \fIitems\fP\^, \fInitems\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - GC \fIgc\fP\^; -.br - int \fIx\fP\^, \fIy\fP\^; -.br - XwcTextItem *\fIitems\fP\^; -.br - int \fInitems\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fId\fP 1i -Specifies the drawable. -.IP \fIgc\fP 1i -Specifies the GC. -.ds Xy -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the x and y coordinates\*(Xy. -.IP \fIitems\fP 1i -Specifies an array of text items. -.IP \fInitems\fP 1i -Specifies the number of text items in the array. -.LP -.eM -The -.PN XmbDrawText -and -.PN XwcDrawText -functions allow complex spacing and font set shifts between text strings. -Each text item is processed in turn, with the origin of a text -element advanced in the primary draw direction by the escapement of the -previous text item. -A text item delta specifies an additional escapement of the text item -drawing origin in the primary draw direction. -A font_set member other than -.PN None -in an item causes the font set to be used for this and subsequent text items -in the text_items list. -Leading text items with a font_set member set to -.PN None -will not be drawn. -.LP -.PN XmbDrawText -and -.PN XwcDrawText -do not perform any context-dependent rendering between text segments. -Clients may compute the drawing metrics by passing each text segment to -.PN XmbTextExtents -and -.PN XwcTextExtents -or -.PN XmbTextPerCharExtents -and -.PN XwcTextPerCharExtents . -When the -.PN XFontSet -has missing charsets, each unavailable character is drawn -with the default string returned by -.PN XCreateFontSet . -The behavior for an invalid codepoint is undefined. -.LP -.sp -To draw text using a single font set in a given drawable, use -.PN XmbDrawString -or -.PN XwcDrawString . -.IN "XmbDrawString" "" "@DEF@" -.IN "XwcDrawString" "" "@DEF@" -.sM -.FD 0 -void XmbDrawString\^(\^\fIdisplay\fP\^, \fId\fP\^, \fIfont_set\fP\^, \fIgc\fP\^, \fIx\fP\^, \fIy\fP\^, \fIstring\fP\^, \fInum_bytes\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - XFontSet \fIfont_set\fP\^; -.br - GC \fIgc\fP\^; -.br - int \fIx\fP\^, \fIy\fP\^; -.br - char *\fIstring\fP\^; -.br - int \fInum_bytes\fP\^; -.FN -.FD 0 -void XwcDrawString\^(\^\fIdisplay\fP\^, \fId\fP\^, \fIfont_set\fP\^, \fIgc\fP\^, \fIx\fP\^, \fIy\fP\^, \fIstring\fP\^, \fInum_wchars\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - XFontSet \fIfont_set\fP\^; -.br - GC \fIgc\fP\^; -.br - int \fIx\fP\^, \fIy\fP\^; -.br - wchar_t *\fIstring\fP\^; -.br - int \fInum_wchars\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fId\fP 1i -Specifies the drawable. -.IP \fIfont_set\fP 1i -Specifies the font set. -.IP \fIgc\fP 1i -Specifies the GC. -.ds Xy -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the x and y coordinates\*(Xy. -.IP \fIstring\fP 1i -Specifies the character string. -.IP \fInum_bytes\fP 1i -Specifies the number of bytes in the string argument. -.IP \fInum_wchars\fP 1i -Specifies the number of characters in the string argument. -.LP -.eM -The -.PN XmbDrawString -and -.PN XwcDrawString -functions draw the specified text with the foreground pixel. -When the -.PN XFontSet -has missing charsets, each unavailable character is drawn -with the default string returned by -.PN XCreateFontSet . -The behavior for an invalid codepoint is undefined. -.LP -.sp -To draw image text using a single font set in a given drawable, use -.PN XmbDrawImageString -or -.PN XwcDrawImageString . -.IN "XmbDrawImageString" "" "@DEF@" -.IN "XwcDrawImageString" "" "@DEF@" -.sM -.FD 0 -void XmbDrawImageString\^(\^\fIdisplay\fP\^, \fId\fP\^, \fIfont_set\fP\^, \fIgc\fP\^, \fIx\fP\^, \fIy\fP\^, \fIstring\fP\^, \fInum_bytes\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - XFontSet \fIfont_set\fP\^; -.br - GC \fIgc\fP\^; -.br - int \fIx\fP\^, \fIy\fP\^; -.br - char *\fIstring\fP\^; -.br - int \fInum_bytes\fP\^; -.FN -.FD 0 -void XwcDrawImageString\^(\^\fIdisplay\fP\^, \fId\fP\^, \fIfont_set\fP\^, \fIgc\fP\^, \fIx\fP\^, \fIy\fP\^, \fIstring\fP\^, \fInum_wchars\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - XFontSet \fIfont_set\fP\^; -.br - GC \fIgc\fP\^; -.br - int \fIx\fP\^, \fIy\fP\^; -.br - wchar_t *\fIstring\fP\^; -.br - int \fInum_wchars\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fId\fP 1i -Specifies the drawable. -.IP \fIfont_set\fP 1i -Specifies the font set. -.IP \fIgc\fP 1i -Specifies the GC. -.ds Xy -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the x and y coordinates\*(Xy. -.IP \fIstring\fP 1i -Specifies the character string. -.IP \fInum_bytes\fP 1i -Specifies the number of bytes in the string argument. -.IP \fInum_wchars\fP 1i -Specifies the number of characters in the string argument. -.LP -.eM -The -.PN XmbDrawImageString -and -.PN XwcDrawImageString -functions fill a destination rectangle with the background pixel defined -in the GC and then paint the text with the foreground pixel. -The filled rectangle is the rectangle returned to overall_logical_return by -.PN XmbTextExtents -or -.PN XwcTextExtents -for the same text and -.PN XFontSet . -.LP -When the -.PN XFontSet -has missing charsets, each unavailable character is drawn -with the default string returned by -.PN XCreateFontSet . -The behavior for an invalid codepoint is undefined. -.NH 2 -Input Methods -.XS -\*(SN Input Methods -.XE -.LP -This section provides discussions of the following X Input Method -(XIM) topics: -.IP \(bu 5 -Input method overview -.IP \(bu 5 -Input method management -.IP \(bu 5 -Input method functions -.IP \(bu 5 -Input method values -.IP \(bu 5 -Input context functions -.IP \(bu 5 -Input context values -.IP \(bu 5 -Input method callback semantics -.IP \(bu 5 -Event filtering -.IP \(bu 5 -Getting keyboard input -.IP \(bu 5 -Input method conventions -.NH 3 -Input Method Overview -.XS -\*(SN Input Method Overview -.XE -.LP -This section provides definitions for terms and concepts used -for internationalized text input and a brief overview of the -intended use of the mechanisms provided by Xlib. -.LP -A large number of languages in the world use alphabets -consisting of a small set of symbols (letters) to form words. -To enter text into a computer in an alphabetic language, -a user usually has a keyboard on which there exist key symbols corresponding -to the alphabet. -Sometimes, a few characters of an alphabetic language are missing -on the keyboard. -Many computer users who speak a Latin-alphabet-based language -only have an English-based keyboard. -They need to hit a combination of keystrokes -to enter a character that does not exist directly on the keyboard. -A number of algorithms have been developed for entering such characters. -These are known as European input methods, compose input methods, -or dead-key input methods. -.LP -Japanese is an example of a language with a phonetic symbol set, -where each symbol represents a specific sound. -There are two phonetic symbol sets in Japanese: Katakana and Hiragana. -In general, -Katakana is used for words that are of foreign origin, -and Hiragana is used for writing native Japanese words. -Collectively, the two systems are called Kana. -Each set consists of 48 characters. -.LP -Korean also has a phonetic symbol set, called Hangul. -Each of the 24 basic phonetic symbols (14 consonants and 10 vowels) -represents a specific sound. -A syllable is composed of two or three parts: -the initial consonants, the vowels, and the optional last consonants. -With Hangul, -syllables can be treated as the basic units on which text processing is done. -For example, -a delete operation may work on a phonetic symbol or a syllable. -Korean code sets include several thousands of these syllables. -A user types the phonetic symbols that make up the syllables of the words -to be entered. -The display may change as each phonetic symbol is entered. -For example, -when the second phonetic symbol of a syllable is entered, -the first phonetic symbol may change its shape and size. -Likewise, when the third phonetic symbol is entered, -the first two phonetic symbols may change their shape and size. -.LP -Not all languages rely solely on alphabetic or phonetic systems. -Some languages, including Japanese and Korean, employ an -ideographic writing system. -In an ideographic system, rather than taking a small set of -symbols and combining them in different ways to create words, -each word consists of one unique symbol (or, occasionally, several symbols). -The number of symbols can be very large: -approximately 50,000 have been identified in Hanzi, -the Chinese ideographic system. -.LP -Two major aspects of ideographic systems impact their use with computers. -First, the standard computer character sets in Japan, China, and Korea -include roughly 8,000 characters, -while sets in Taiwan have between 15,000 and 30,000 characters. -This makes it necessary to use more than one byte to represent a character. -Second, it obviously is impractical to have a keyboard that includes -all of a given language's ideographic symbols. -Therefore, a mechanism is required for entering characters -so that a keyboard with a reasonable number of keys can be used. -Those input methods are usually based on phonetics, -but there also exist methods based on the graphical properties of -characters. -.LP -In Japan, both Kana and the ideographic system Kanji are used. -In Korea, Hangul and sometimes the ideographic system Hanja are used. -Now consider entering ideographs in Japan, Korea, China, and Taiwan. -.LP -In Japan, either Kana or English characters are typed and then a region -is selected (sometimes automatically) for conversion to Kanji. -Several Kanji characters may have the same phonetic representation. -If that is the case with the string entered, -a menu of characters is presented and -the user must choose the appropriate one. -If no choice is necessary or a preference has been established, -the input method does the substitution directly. -When Latin characters are converted to Kana or Kanji, -it is called a romaji conversion. -.LP -In Korea, it is usually acceptable to keep Korean text in Hangul form, -but some people may choose to write Hanja-originated words in Hanja -rather than in Hangul. -To change Hangul to Hanja, -the user selects a region for conversion -and then follows the same basic method as that described for Japanese. -.LP -Probably because there are well-accepted phonetic writing systems -for Japanese and Korean, -computer input methods in these countries for entering ideographs -are fairly standard. -Keyboard keys have both English characters and phonetic symbols -engraved on them, and the user can switch between the two sets. -.LP -The situation is different for Chinese. -While there is a phonetic system called Pinyin promoted by authorities, -there is no consensus for entering Chinese text. -Some vendors use a phonetic decomposition (Pinyin or another), -others use ideographic decomposition of Chinese words, -with various implementations and keyboard layouts. -There are about 16 known methods, none of which is a clear standard. -.LP -Also, there are actually two ideographic sets used: -Traditional Chinese (the original written Chinese) -and Simplified Chinese. -Several years ago, -the People's Republic of China launched a campaign to simplify -some ideographic characters and eliminate redundancies altogether. -Under the plan, -characters would be streamlined every five years. -Characters have been revised several times now, -resulting in the smaller, simpler set that makes up Simplified Chinese. -.NH 4 -Input Method Architecture -.XS -\*(SN Input Method Architecture -.XE -.LP -As shown in the previous section, -there are many different input methods in use today, -each varying with language, culture, and history. -A common feature of many input methods is that the user may type -multiple keystrokes to compose a single character (or set -of characters). -The process of composing characters from keystrokes is called -\fIpreediting\fP. -It may require complex algorithms and large dictionaries -involving substantial computer resources. -.LP -Input methods may require one or more areas in which to show the -feedback of the actual keystrokes, to propose disambiguation to the -user, to list dictionaries, and so on. -The input method areas of concern are as follows: -.IP \(bu 5 -The \fIstatus\fP area is a logical extension of the -LEDs that exist on the physical keyboard. -It is a window that is intended to present the internal state -of the input method that is critical to the user. -The status area may consist of text data and bitmaps or some combination. -.IP \(bu 5 -The \fIpreedit\fP area displays the -intermediate text for those languages that are composing prior to -the client handling the data. -.IP \(bu 5 -The \fIauxiliary\fP area is used for pop-up menus and customizing -dialogs that may be required for an input method. -There may be multiple auxiliary areas for an input method. -Auxiliary areas are managed by the input method independent of the client. -Auxiliary areas are assumed to be separate dialogs, -which are maintained by the input method. -.LP -There are various user interaction styles used for preediting. -The ones supported by Xlib are as follows: -.IP \(bu 5 -For \fIon-the-spot\fP input methods, -preediting data will be displayed directly in the application window. -Application data is moved to allow preedit data to appear -at the point of insertion. -.IP \(bu 5 -\fIOver-the-spot\fP preediting means that the data is displayed in -a preedit window that is placed over the point of insertion. -.IP \(bu 5 -\fIOff-the-spot\fP preediting means that the preedit window is -inside the application window but not at the point of insertion. -Often, this type of window is placed at the bottom of the application window. -.IP \(bu 5 -\fIRoot-window\fP preediting refers to input methods that use a preedit -window that is the child of -.PN RootWindow . -.LP -It would require a lot of computing resources if portable applications -had to include input methods for all the languages in the world. -To avoid this, -a goal of the Xlib design is to allow an application -to communicate with an input method placed in a separate process. -Such a process is called an \fIinput server\fP. -The server to which the application should connect is dependent on -the environment when the application is started up, -that is, the user language and the actual encoding to be used for it. -The input method connection is said to be \fIlocale-dependent\fP. -It is also user-dependent. -For a given language, the user can choose, to some extent, -the user interface style of input method (if choice is possible among -several). -.LP -Using an input server implies communication overhead, -but applications can be migrated without relinking. -Input methods can be implemented either as a -stub communicating to an input server or as a local library. -.LP -An input method may be based on a \fIfront-end\fP or a \fIback-end\fP -architecture. -In a front-end architecture, -there are two separate connections to the X server: -keystrokes go directly from the X server to the input method on -one connection and other events to the regular client connection. -The input method is then acting as a filter and sends composed strings -to the client. -A front-end architecture requires synchronization between the -two connections to avoid lost key events or locking issues. -.LP -In a back-end architecture, -a single X server connection is used. -A dispatching mechanism must decide on this channel to delegate appropriate -keystrokes to the input method. -For instance, -it may retain a Help keystroke for its own purpose. -In the case where the input method is a separate process (that is, a server), -there must be a special communication protocol between the back-end client -and the input server. -.LP -A front-end architecture introduces synchronization issues -and a filtering mechanism for noncharacter keystrokes -(Function keys, Help, and so on). -A back-end architecture sometimes implies more communication overhead -and more process switching. -If all three processes (X server, input server, client) -are running on a single workstation, -there are two process switches for each keystroke in a back-end -architecture, -but there is only one in a front-end architecture. -.LP -The abstraction used by a client to communicate with an input method -is an opaque data structure represented by the -.PN XIM -data type. -This data structure is returned by the -.PN XOpenIM -function, which opens an input method on a given display. -Subsequent operations on this data structure encapsulate all communication -between client and input method. -There is no need for an X client to use any networking library -or natural language package to use an input method. -.LP -A single input server may be used for one or more languages, -supporting one or more encoding schemes. -But the strings returned from an input method will always be encoded -in the (single) locale associated with the -.PN XIM -object. -.NH 4 -Input Contexts -.XS -\*(SN Input Contexts -.XE -.LP -Xlib provides the ability to manage a multi-threaded state for text input. -A client may be using multiple windows, -each window with multiple text entry areas, -and the user possibly switching among them at any time. -The abstraction for representing the state of a particular input thread -is called an \fIinput context\fP. -The Xlib representation of an input context is an -.PN XIC . -.LP -An input context is the abstraction retaining the state, properties, -and semantics of communication between a client and an input method. -An input context is a combination of an input method, a locale -specifying the encoding of the character strings to be returned, -a client window, internal state information, -and various layout or appearance characteristics. -The input context concept somewhat matches for input the graphics context -abstraction defined for graphics output. -.LP -One input context belongs to exactly one input method. -Different input contexts may be associated with the same input method, -possibly with the same client window. -An -.PN XIC -is created with the -.PN XCreateIC -function, providing an -.PN XIM -argument and affiliating the input context to the input method -for its lifetime. -When an input method is closed with -.PN XCloseIM , -all of its affiliated input contexts should not be used any more -(and should preferably be destroyed before closing the input method). -.LP -Considering the example of a client window with multiple text entry areas, -the application programmer could, for example, choose to implement as follows: -.IP \(bu 5 -As many input contexts are created as text entry areas, and the client -will get the input accumulated on each context each time it looks up -in that context. -.IP \(bu 5 -A single context is created for a top-level window in the application. -If such a window contains several text entry areas, -each time the user moves to another text entry area, -the client has to indicate changes in the context. -.LP -A range of choices can be made by application designers to use -either a single or multiple input contexts, -according to the needs of their application. -.NH 4 -Getting Keyboard Input -.XS -\*(SN Getting Keyboard Input -.XE -.LP -To obtain characters from an input method, -a client must call the function -.PN XmbLookupString -or -.PN XwcLookupString -with an input context created from that input method. -Both a locale and display are bound to an input method when it is opened, -and an input context inherits this locale and display. -Any strings returned by -.PN XmbLookupString -or -.PN XwcLookupString -will be encoded in that locale. -.NH 4 -Focus Management -.XS -\*(SN Focus Management -.XE -.LP -For each text entry area in which the -.PN XmbLookupString -or -.PN XwcLookupString -functions are used, -there will be an associated input context. -.LP -When the application focus moves to a text entry area, -the application must set the input context focus to the -input context associated with that area. -The input context focus is set by calling -.PN XSetICFocus -with the appropriate input context. -.LP -Also, when the application focus moves out of a text entry area, the -application should unset the focus for the associated input context -by calling -.PN XUnsetICFocus . -As an optimization, if -.PN XSetICFocus -is called successively on two different input contexts, -setting the focus on the second -will automatically unset the focus on the first. -.LP -To set and unset the input context focus correctly, -it is necessary to track application-level focus changes. -Such focus changes do not necessarily correspond to X server focus changes. -.LP -If a single input context -is being used to do input for -multiple text entry areas, it will also be necessary -to set the focus window of the -input context whenever the focus window changes -(see section 13.5.6.3). -.NH 4 -Geometry Management -.XS -\*(SN Geometry Management -.XE -.LP -In most input method architectures -(on-the-spot being the notable exception), -the input method will perform the display of its own data. -To provide better visual locality, -it is often desirable to have the input method areas embedded within a client. -To do this, -the client may need to allocate space for an input method. -Xlib provides support that allows the size and position of input method -areas to be provided by a client. -The input method areas that are supported for geometry management -are the status area and the preedit area. -.LP -The fundamental concept on which geometry management for input method windows -is based is the proper division of responsibilities between the -client (or toolkit) and the input method. -The division of responsibilities is as follows: -.IP \(bu 5 -The client is responsible for the geometry of the input method window. -.IP \(bu 5 -The input method is responsible for the contents of the input method window. -.LP -An input method is able to suggest a size to the client, -but it cannot suggest a placement. -Also the input method can only suggest a size. -It does not determine the size, -and it must accept the size it is given. -.LP -Before a client provides geometry management for an input method, -it must determine if geometry management is needed. -The input method indicates the need for geometry management -by setting -.PN XIMPreeditArea -or -.PN XIMStatusArea -in its -.PN XIMStyles -value returned by -.PN XGetIMValues . -When a client has decided that it will provide geometry management -for an input method, -it indicates that decision by setting the -.PN XNInputStyle -value in the -.PN XIC . -.LP -After a client has established with the input method -that it will do geometry management, -the client must negotiate the geometry with the input method. -The geometry is negotiated by the following steps: -.IP \(bu 5 -The client suggests an area to the input method by setting the -.PN XNAreaNeeded -value for that area. -If the client has no constraints for the input method, -it either will not suggest an area or will set the width and height to zero. -Otherwise, it will set one of the values. -.IP \(bu 5 -The client will get the XIC value -.PN XNAreaNeeded . -The input method will return its suggested size in this value. -The input method should pay attention to any constraints suggested -by the client. -.IP \(bu 5 -The client sets the XIC value -.PN XNArea -to inform the input method of the geometry of its window. -The client should try to honor the geometry requested by the input method. -The input method must accept this geometry. -.LP -Clients doing geometry management must be aware that setting other -XIC values may affect the geometry desired by an input method. -For example, -.PN XNFontSet -and -.PN XNLineSpacing -may change the geometry desired by the input method. -.LP -The table of XIC values (see section 13.5.6) -indicates the values that can cause the desired geometry to change -when they are set. -It is the responsibility of the client to renegotiate the geometry -of the input method window when it is needed. -.LP -In addition, -a geometry management callback is provided -by which an input method can initiate a geometry change. -.NH 4 -Event Filtering -.XS -\*(SN Event Filtering -.XE -.LP -A filtering mechanism is provided to allow input methods -to capture X events transparently to clients. -It is expected that toolkits (or clients) using -.PN XmbLookupString -or -.PN XwcLookupString -will call this filter at some point in the event processing mechanism -to make sure that events needed by an input method can be filtered -by that input method. -.LP -If there were no filter, -a client could receive and discard events that are necessary -for the proper functioning of an input method. -The following provides a few examples of such events: -.IP \(bu 5 -Expose events on preedit window in local mode. -.IP \(bu 5 -Events may be used by an input method to communicate with an input server. -Such input server protocol-related events have to be intercepted -if one does not want to disturb client code. -.IP \(bu 5 -Key events can be sent to a filter before they are bound -to translations such as those the X Toolkit Intrinsics library provides. -.LP -Clients are expected to get the XIC value -.PN XNFilterEvents -and augment the event mask for the client window with that event mask. -This mask may be zero. -.NH 4 -Callbacks -.XS -\*(SN Callbacks -.XE -.LP -When an on-the-spot input method is implemented, -only the client can insert or delete preedit data in place -and possibly scroll existing text. -This means that the echo of the keystrokes has to be achieved -by the client itself, tightly coupled with the input method logic. -.LP -When the user enters a keystroke, -the client calls -.PN XmbLookupString -or -.PN XwcLookupString . -At this point, in the on-the-spot case, -the echo of the keystroke in the preedit has not yet been done. -Before returning to the client logic that handles the input characters, -the look-up function -must call the echoing logic to insert the new keystroke. -If the keystrokes entered so far make up a character, -the keystrokes entered need to be deleted, -and the composed character will be returned. -Hence, what happens is that, while being called by client code, -the input method logic has to call back to the client before it returns. -The client code, that is, a callback procedure, -is called from the input method logic. -.LP -There are a number of cases where the input method logic has to -call back the client. -Each of those cases is associated with a well-defined callback action. -It is possible for the client to specify, for each input context, -what callback is to be called for each action. -.LP -There are also callbacks provided for feedback of status information -and a callback to initiate a geometry request for an input method. -.NH 4 -Visible Position Feedback Masks -.XS -\*(SN Visible Position Feedback Masks -.XE -.LP -In the on-the-spot input style, there is a problem when -attempting to draw preedit strings that are longer than the -available space. Once the display area is exceeded, it is not -clear how best to display the preedit string. -The visible position feedback masks of -.PN XIMText -help resolve this problem by allowing the input method to specify hints that -indicate the essential portions of the preedit string. -For example, such hints can help developers implement -scrolling of a long preedit string within a short preedit display area. -.NH 4 -Preedit String Management -.XS -\*(SN Preedit String Management -.XE -.LP -As highlighted before, the input method architecture provides -preediting, which supports a type of preprocessor input composition. -In this case, composition consists of interpreting a sequence -of key events and returning a committed string via -.PN XmbLookupString -or -.PN XwcLookupString . -This provides the basics for input methods. -.LP -In addition to preediting based on key events, a general framework -is provided to give a client that desires it more advanced preediting based -on the text within the client. This framework is called -\fIstring conversion\fP and is provided using XIC values. -The fundamental concept of string conversion -is to allow the input method to manipulate the client's -text independent of any user preediting operation. -.LP -The need for string conversion is based on -language needs and input method capabilities. -The following are some examples of string conversion: -.IP \(bu 5 -Transliteration conversion provides language-specific conversions -within the input method. -In the case of Korean input, users wish to convert a Hangul string -into a Hanja string while in preediting, after preediting, -or in other situations (for example, on a selected string). -The conversion is triggered when the user -presses a Hangul-to-Hanja key sequence (which may be input method specific). -Sometimes the user may want to invoke the conversion after finishing -preediting or on a user-selected string. -Thus, the string to be converted is in an application buffer, not in -the preedit area of the input method. The string conversion services -allow the client to request this transliteration conversion from the -input method. -There are many other transliteration conversions defined for -various languages, for example, Kana-to-Kanji conversion in Japanese. -.sp -The key to remember is that transliteration conversions are triggered -at the request of the user and returned to the client -immediately without affecting the preedit area of the input method. -.IP \(bu 5 -Reconversion of a previously committed string or -a selected string is supported by many input methods as a -convenience to the user. -For example, a user tends to mistype the commit key while -preediting. In that case, some input methods provide a special -key sequence to request a ``reconvert'' operation on the -committed string, similiar to the undo facility provided by most -text editors. -Another example is where the user is proofreading a document -that has some misconversions from preediting and wants to correct -the misconverted text. Such reconversion is again triggered -by the user invoking some special action, but reconversions should -not affect the state of the preedit area. -.IP \(bu 5 -Context-sensitive conversion is required for some languages -and input methods that need to retrieve text that surrounds the -current spot location (cursor position) of the client's buffer. -Such text is needed when the preediting operation depends on -some surrounding characters (usually preceding the spot location). -For example, -in Thai language input, certain character sequences may be invalid and -the input method may want to check whether characters constitute a -valid word. Input methods that do such context-dependent -checking need to retrieve the characters surrounding the current -cursor position to obtain complete words. -.sp -Unlike other conversions, this conversion is not explicitly -requested by the user. -Input methods that provide such context-sensitive conversion -continuously need to request context from the client, and any change -in the context of the spot location may affect such conversions. -The client's context would be needed if the user moves the cursor -and starts editing again. -.sp -For this reason, an input method supporting this type of conversion -should take notice of when the client calls -.PN XmbResetIC -or -.PN XwcResetIC , -which is usually an indication of a context change. -.LP -Context-sensitive conversions just need a copy of the client's text, -while other conversions replace the client's text with new text -to achieve the reconversion or transliteration. Yet in all -cases the result of a conversion, either immediately or via preediting, -is returned by the -.PN XmbLookupString -and -.PN XwcLookupString -functions. -.LP -String conversion support is dependent on the availability of the -.PN XNStringConversion -or -.PN XNStringConversionCallback -XIC values. -Because the input method may not support string conversions, -clients have to query the availability of string conversion -operations by checking the supported XIC values list by calling -.PN XGetIMValues -with the -.PN XNQueryICValuesList -IM value. -.LP -The difference between these two values is whether the -conversion is invoked by the client or the input method. -The -.PN XNStringConversion -XIC value is used by clients to request -a string conversion from the input method. The client -is responsible for determining which events are used -to trigger the string conversion and whether the string to be -converted should be copied or deleted. The type of conversion -is determined by the input method; the client can only -pass the string to be converted. The client is guaranteed that -no -.PN XNStringConversionCallback -will be issued when this value is set; thus, the client need -only set one of these values. -.LP -The -.PN XNStringConversionCallback -XIC value is used by the client to notify the input method that -it will accept requests from the input method for string conversion. -If this value is set, -it is the input method's responsibility to determine which -events are used to trigger the string conversion. -When such events occur, the input method issues a call to the -client-supplied procedure to retrieve the string to be converted. The client's -callback procedure is notified whether to copy or delete the string and -is provided with hints as to the amount of text needed. -The -.PN XIMStringConversionCallbackStruct -specifies which text should be passed back to the input method. -.LP -Finally, the input method may call the client's -.PN XNStringConversionCallback -procedure multiple times if the string returned from the callback is -not sufficient to perform a successful conversion. The arguments -to the client's procedure allow the input method to define a -position (in character units) relative to the client's cursor position -and the size of the text needed. By varying the position and size of -the desired text in subsequent callbacks, the input method can retrieve -additional text. -.LP -.NH 3 -Input Method Management -.XS -\*(SN Input Method Management -.XE -.LP -The interface to input methods might appear to be simply creating -an input method -.Pn ( XOpenIM ) -and freeing an input method -.Pn ( XCloseIM ). -However, input methods may -require complex communication with input method servers (IM servers), -for example: -.IP \(bu 5 -If the X server, IM server, and X clients are started asynchronously, -some clients may attempt to connect to the IM server before it is -fully operational, and fail. -Therefore, some mechanism is needed to allow clients to detect when an IM -server has started. -.LP -It is up to clients to decide what should be done when an IM server is -not available (for example, wait, or use some other IM server). -.LP -.IP \(bu 5 -Some input methods may allow the underlying IM server to be switched. -Such customization may be desired without restarting the entire client. -.LP -To support management of input methods in these cases, the following -functions are provided: -.TS -lw(2.4i) lw(3.3i). -T{ -.PN XRegisterIMInstantiateCallback -T} T{ -This function allows clients to register a callback procedure -to be called when Xlib detects that an IM server is up and available. -T} -T{ -.PN XOpenIM -T} T{ -A client calls this function as a result of the callback procedure -being called. -T} -T{ -.PN XSetIMValue , -.PN XSetICValue -T} T{ -These functions use the XIM and XIC values, -.PN XNDestroyCallback , -to allow a client -to register a callback procedure to be called when Xlib detects that -an IM server that was associated with an opened -input method is no longer available. -.sp 4p -In addition, this function can be used to switch IM servers for those input -methods that support such functionality. The IM value for switching IM -servers is implementation-dependent; see the description below about -switching IM servers. -T} -T{ -.PN XUnregisterIMInstantiateCallback -T} T{ -This function removes a callback procedure registered by the client. -T} -.TE -.LP -Input methods that support switching of IM servers may exhibit some -side-effects: -.IP \(bu 5 -The input method will ensure that any new IM server supports any of the -input styles being used by input contexts already associated with the -input method. -However, the list of supported input styles may be different. -.LP -.IP \(bu 5 -Geometry management requests on previously created input contexts -may be initiated by the new IM server. -.LP -.NH 4 -Hot Keys -.XS -\*(SN Hot Keys -.XE -.LP -Some clients need to guarantee which keys can be used to escape from the -input method, regardless of the input method state; -for example, the client-specific Help key or the keys to move the -input focus. -The HotKey mechanism allows clients -to specify a set of keys for this purpose. However, the input -method might not allow clients to specify hot keys. -Therefore, clients have to query support of hot keys by checking the -supported XIC values list by calling -.PN XGetIMValues -with the -.PN XNQueryICValuesList -IM value. -When the hot keys specified conflict with the key bindings of the -input method, hot keys take precedence over the key bindings of the input -method. -.LP -.NH 4 -Preedit State Operation -.XS -\*(SN Preedit State Operation -.XE -.LP -An input method may have several internal states, depending on its -implementation and the locale. However, one state that is -independent of locale and implementation is whether the input method -is currently performing a preediting operation. -Xlib provides the ability for an application to manage the preedit state -programmatically. Two methods are provided for -retrieving the preedit state of an input context. -One method is to query the state by calling -.PN XGetICValues -with the -.PN XNPreeditState -XIC value. -Another method is to receive notification whenever -the preedit state is changed. To receive such notification, -an application needs to register a callback by calling -.PN XSetICValues -with the -.PN XNPreeditStateNotifyCallback -XIC value. -In order to change the preedit state programmatically, an application -needs to call -.PN XSetICValues -with -.PN XNPreeditState. -.LP -Availability of the preedit state is input method dependent. The input -method may not provide the ability to set the state or to -retrieve the state programmatically. Therefore, clients have to -query availability of preedit state operations by checking the -supported XIC values list by calling -.PN XGetIMValues -with the -.PN XNQueryICValuesList -IM value. -.NH 3 -Input Method Functions -.XS -\*(SN Input Method Functions -.XE -.LP -To open a connection, use -.PN XOpenIM . -.IN "XOpenIM" "" "@DEF@" -.sM -.FD 0 -XIM XOpenIM\^(\^\fIdisplay\fP\^, \fIdb\fP\^, \fIres_name\fP\^, \fIres_class\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XrmDatabase \fIdb\fP\^; -.br - char *\fIres_name\fP\^; -.br - char *\fIres_class\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdb\fP 1i -Specifies a pointer to the resource database. -.IP \fIres_name\fP 1i -Specifies the full resource name of the application. -.IP \fIres_class\fP 1i -Specifies the full class name of the application. -.LP -.eM -The -.PN XOpenIM -function opens an input method, -matching the current locale and modifiers specification. -Current locale and modifiers are bound to the input method at opening time. -The locale associated with an input method cannot be changed dynamically. -This implies that the strings returned by -.PN XmbLookupString -or -.PN XwcLookupString , -for any input context affiliated with a given input method, -will be encoded in the locale current at the time the input method is opened. -.LP -The specific input method to which this call will be routed -is identified on the basis of the current locale. -.PN XOpenIM -will identify a default input method corresponding to the -current locale. -That default can be modified using -.PN XSetLocaleModifiers -for the input method modifier. -.LP -The db argument is the resource database to be used by the input method -for looking up resources that are private to the input method. -It is not intended that this database be used to look -up values that can be set as IC values in an input context. -If db is NULL, -no database is passed to the input method. -.LP -The res_name and res_class arguments specify the resource name -and class of the application. -They are intended to be used as prefixes by the input method -when looking up resources that are common to all input contexts -that may be created for this input method. -The characters used for resource names and classes must be in the -X Portable Character Set. -The resources looked up are not fully specified -if res_name or res_class is NULL. -.LP -The res_name and res_class arguments are not assumed to exist beyond -the call to -.PN XOpenIM . -The specified resource database is assumed to exist for the lifetime -of the input method. -.LP -.PN XOpenIM -returns NULL if no input method could be opened. -.LP -.sp -To close a connection, use -.PN XCloseIM . -.IN "XCloseIM" "" "@DEF@" -.sM -.FD 0 -Status XCloseIM\^(\^\fIim\fP\^) -.br - XIM \fIim\fP\^; -.FN -.IP \fIim\fP 1i -Specifies the input method. -.LP -.eM -The -.PN XCloseIM -function closes the specified input method. -.LP -.sp -To set input method attributes, use -.PN XSetIMValues . -.IN "XSetIMValues" "" "@DEF@" -.sM -.FD 0 -char * XSetIMValues\^(\^\fIim\fP\^, ...) -.br - XIM \fIim\fP\^; -.FN -.IP \fIim\fP 1i -Specifies the input method. -.ds Al \ to set XIM values -.IP ... 1i -Specifies the variable-length argument list\*(Al. -.LP -.eM -The -.PN XSetIMValues -function presents a variable argument list programming interface -for setting attributes of the specified input method. -It returns NULL if it succeeds; -otherwise, -it returns the name of the first argument that could not be set. -Xlib does not attempt to set arguments from the supplied list that -follow the failed argument; -all arguments in the list preceding the failed argument have been set -correctly. -.LP -.sp -To query an input method, use -.PN XGetIMValues . -.IN "XGetIMValues" "" "@DEF@" -.sM -.FD 0 -char * XGetIMValues\^(\^\fIim\fP\^, ...) -.br - XIM \fIim\fP\^; -.FN -.IP \fIim\fP 1i -Specifies the input method. -.ds Al \ to get XIM values -.IP ... 1i -Specifies the variable length argument list\*(Al. -.LP -.eM -The -.PN XGetIMValues -function presents a variable argument list programming interface -for querying properties or features of the specified input method. -This function returns NULL if it succeeds; -otherwise, -it returns the name of the first argument that could not be obtained. -.LP -Each XIM value argument (following a name) must point to -a location where the XIM value is to be stored. -That is, if the XIM value is of type T, -the argument must be of type T*. -If T itself is a pointer type, -then -.PN XGetIMValues -allocates memory to store the actual data, -and the client is responsible for freeing this data by calling -.PN XFree -with the returned pointer. -.LP -.sp -To obtain the display associated with an input method, use -.PN XDisplayOfIM . -.IN "XDisplayOfIM" "" "@DEF@" -.sM -.FD 0 -Display * XDisplayOfIM\^(\^\fIim\fP\^) -.br - XIM \fIim\fP\^; -.FN -.IP \fIim\fP 1i -Specifies the input method. -.LP -.eM -The -.PN XDisplayOfIM -function returns the display associated with the specified input method. -.LP -.sp -To get the locale associated with an input method, use -.PN XLocaleOfIM . -.IN "XLocaleOfIM" "" "@DEF@" -.sM -.FD 0 -char * XLocaleOfIM\^(\^\fIim\fP\^) -.br - XIM \fIim\fP\^; -.FN -.IP \fIim\fP 1i -Specifies the input method. -.LP -.eM -The -.PN XLocaleOfIM -function returns the locale associated with the specified input method. -.LP -.sp -To register an input method instantiate callback, use -.PN XRegisterIMInstantiateCallback . -.IN "XRegisterIMInstantiateCallback" "" "@DEF@" -.sM -.FD 0 -Bool XRegisterIMInstantiateCallback\^(\^\fIdisplay\fP\^, \fIdb\fP\^, \fIres_name\fP\^, \fIres_class\fP\^, \fIcallback\fP\^, \fIclient_data\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XrmDatabase \fIdb\fP\^; -.br - char *\fIres_name\fP\^; -.br - char *\fIres_class\fP\^; -.br - XIMProc \fIcallback\fP\^; -.br - XPointer *\fIclient_data\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdb\fP 1i -Specifies a pointer to the resource database. -.IP \fIres_name\fP 1i -Specifies the full resource name of the application. -.IP \fIres_class\fP 1i -Specifies the full class name of the application. -.IP \fIcallback\fP 1i -Specifies a pointer to the input method instantiate callback. -.IP \fIclient_data\fP 1i -Specifies the additional client data. -.LP -.eM -The -.PN XRegisterIMInstantiateCallback -function registers a callback to be invoked whenever a new input method -becomes available for the specified display that matches the current -locale and modifiers. -.LP -The function returns -.PN True - if it succeeds; otherwise, it returns -.PN False . -.LP -The generic prototype is as follows: -.IN "IMInstantiateCallback" "" "@DEF@" -.sM -.FD 0 -void IMInstantiateCallback\^(\^\fIdisplay\fP\^, \fIclient_data\fP\^, \fIcall_data\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XPointer \fIclient_data\fP\^; -.br - XPointer \fIcall_data\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIclient_data\fP 1i -Specifies the additional client data. -.IP \fIcall_data\fP 1i -Not used for this callback and always passed as NULL. -.LP -.eM -To unregister an input method instantiation callback, use -.PN XUnregisterIMInstantiateCallback . -.IN "XUnregisterIMInstantiateCallback" "" "@DEF@" -.sM -.FD 0 -Bool XUnregisterIMInstantiateCallback\^(\^\fIdisplay\fP\^, \fIdb\fP\^, \fIres_name\fP\^, \fIres_class\fP\^, \fIcallback\fP\^, \fIclient_data\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XrmDatabase \fIdb\fP\^; -.br - char *\fIres_name\fP\^; -.br - char *\fIres_class\fP\^; -.br - XIMProc \fIcallback\fP\^; -.br - XPointer *\fIclient_data\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdb\fP 1i -Specifies a pointer to the resource database. -.IP \fIres_name\fP 1i -Specifies the full resource name of the application. -.IP \fIres_class\fP 1i -Specifies the full class name of the application. -.IP \fIcallback\fP 1i -Specifies a pointer to the input method instantiate callback. -.IP \fIclient_data\fP 1i -Specifies the additional client data. -.LP -.eM -The -.PN XUnregisterIMInstantiateCallback -function removes an input method instantiation callback previously -registered. -The function returns -.PN True -if it succeeds; otherwise, it returns -.PN False . -.NH 3 -Input Method Values -.XS -\*(SN Input Method Values -.XE -.LP -The following table describes how XIM values are interpreted -by an input method. -The first column lists the XIM values. -The second column indicates how each of the XIM values -are treated by that input style. -.LP -.LP -The following keys apply to this table. -.TS H -lw(1i) lw(4.75i). -_ -.sp 6p -.B -Key Explanation -.sp 6p -_ -.TH -.R -D T{ -This value may be set using -.PN XSetIMValues . -If it is not set, -.br -a default is provided. -T} -S T{ -This value may be set using -.PN XSetIMValues . -T} -G T{ -This value may be read using -.PN XGetIMValues . -T} -.sp 6p -_ -.TE -.LP -.TS H -lw(2.25i) c -lw(2.25i) c. -_ -.sp 6p -.B -XIM Value Key -.sp 6p -_ -.sp 6p -.TH -.R -T{ -.PN XNQueryInputStyle -T} T{ -G -T} -T{ -.PN XNResourceName -T} T{ -D-S-G -T} -T{ -.PN XNResourceClass -T} T{ -D-S-G -T} -T{ -.PN XNDestroyCallback -T} T{ -D-S-G -T} -T{ -.PN XNQueryIMValuesList -T} T{ -G -T} -T{ -.PN XNQueryICValuesList -T} T{ -G -T} -T{ -.PN XNVisiblePosition -T} T{ -G -T} -T{ -.PN XNR6PreeditCallbackBehavior -T} T{ -D-S-G -T} -.sp 6p -_ -.TE -.LP -.PN XNR6PreeditCallbackBehavior -is obsolete and its use is not recommended (see section 13.5.4.6). -.LP -.NH 4 -Query Input Style -.XS -\*(SN Query Input Style -.XE -.LP -A client should always query the input method to determine which input -styles are supported. -The client should then find an input style it is capable of supporting. -.LP -If the client cannot find an input style that it can support, -it should negotiate with the user the continuation of the program -(exit, choose another input method, and so on). -.LP -The argument value must be a pointer to a location -where the returned value will be stored. -The returned value is a pointer to a structure of type -.PN XIMStyles . -Clients are responsible for freeing the -.PN XIMStyles -structure. -To do so, use -.PN XFree . -.LP -The -.PN XIMStyles -structure is defined as follows: -.LP -.IN "XIMStyle" "" "@DEF@" -.IN "XIMPreeditArea" "" "@DEF@" -.IN "XIMPreeditCallbacks" "" "@DEF@" -.IN "XIMPreeditPosition" "" "@DEF@" -.IN "XIMPreeditNothing" "" "@DEF@" -.IN "XIMPreeditNone" "" "@DEF@" -.IN "XIMStatusArea" "" "@DEF@" -.IN "XIMStatusCallbacks" "" "@DEF@" -.IN "XIMStatusNothing" "" "@DEF@" -.IN "XIMStatusNone" "" "@DEF@" -.IN "XIMStyles" "" "@DEF@" -.sM -.Ds 0 -typedef unsigned long XIMStyle; -.De -.TS -lw(.5i) lw(2i) lw(2.5i). -T{ -#define -T} T{ -.PN XIMPreeditArea -T} T{ -0x0001L -T} -T{ -#define -T} T{ -.PN XIMPreeditCallbacks -T} T{ -0x0002L -T} -T{ -#define -T} T{ -.PN XIMPreeditPosition -T} T{ -0x0004L -T} -T{ -#define -T} T{ -.PN XIMPreeditNothing -T} T{ -0x0008L -T} -T{ -#define -T} T{ -.PN XIMPreeditNone -T} T{ -0x0010L -T} -.sp -T{ -#define -T} T{ -.PN XIMStatusArea -T} T{ -0x0100L -T} -T{ -#define -T} T{ -.PN XIMStatusCallbacks -T} T{ -0x0200L -T} -T{ -#define -T} T{ -.PN XIMStatusNothing -T} T{ -0x0400L -T} -T{ -#define -T} T{ -.PN XIMStatusNone -T} T{ -0x0800L -T} -.TE -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { - unsigned short count_styles; - XIMStyle * supported_styles; -} XIMStyles; -.De -.LP -.eM -An -.PN XIMStyles -structure contains the number of input styles supported -in its count_styles field. -This is also the size of the supported_styles array. -.LP -The supported styles is a list of bitmask combinations, -which indicate the combination of styles for each of the areas supported. -These areas are described later. -Each element in the list should select one of the bitmask values for -each area. -The list describes the complete set of combinations supported. -Only these combinations are supported by the input method. -.LP -The preedit category defines what type of support is provided -by the input method for preedit information. -.IN "XIMPreeditArea" "" "@DEF@" -.IN "XIMPreeditPosition" "" "@DEF@" -.IN "XIMPreeditCallbacks" "" "@DEF@" -.IN "XIMPreeditNothing" "" "@DEF@" -.IN "XIMPreeditNone" "" "@DEF@" -.TS -lw(1.5i) lw(4.25i). -T{ -.PN XIMPreeditArea -T} T{ -If chosen, -the input method would require the client to provide some area values -for it to do its preediting. -Refer to XIC values -.PN XNArea -and -.PN XNAreaNeeded . -T} -T{ -.PN XIMPreeditPosition -T} T{ -If chosen, -the input method would require the client to provide positional values. -Refer to XIC values -.PN XNSpotLocation -and -.PN XNFocusWindow . -T} -T{ -.PN XIMPreeditCallbacks -T} T{ -If chosen, -the input method would require the client to define the set of preedit callbacks. -Refer to XIC values -.PN XNPreeditStartCallback , -.PN XNPreeditDoneCallback , -.PN XNPreeditDrawCallback , -and -.PN XNPreeditCaretCallback . -T} -T{ -.PN XIMPreeditNothing -T} T{ -If chosen, the input method can function without any preedit values. -T} -T{ -.PN XIMPreeditNone -T} T{ -The input method does not provide any preedit feedback. -Any preedit value is ignored. -This style is mutually exclusive with the other preedit styles. -T} -.TE -.LP -The status category defines what type of support is provided -by the input method for status information. -.IN "XIMStatusArea" "" "@DEF@" -.IN "XIMStatusCallbacks" "" "@DEF@" -.IN "XIMStatusNothing" "" "@DEF@" -.IN "XIMStatusNone" "" "@DEF@" -.TS -lw(1.5i) lw(4.25i). -T{ -.PN XIMStatusArea -T} T{ -The input method requires the client to provide -some area values for it to do its status feedback. -See -.PN XNArea -and -.PN XNAreaNeeded . -T} -T{ -.PN XIMStatusCallbacks -T} T{ -The input method requires the client to define the set of status callbacks, -.PN XNStatusStartCallback , -.PN XNStatusDoneCallback , -and -.PN XNStatusDrawCallback . -T} -T{ -.PN XIMStatusNothing -T} T{ -The input method can function without any status values. -T} -T{ -.PN XIMStatusNone -T} T{ -The input method does not provide any status feedback. -If chosen, any status value is ignored. -This style is mutually exclusive with the other status styles. -T} -.TE -.NH 4 -Resource Name and Class -.XS -\*(SN Resource Name and Class -.XE -.LP -The -.PN XNResourceName -and -.PN XNResourceClass -arguments are strings that specify the full name and class -used by the input method. -These values should be used as prefixes for the name and class -when looking up resources that may vary according to the input method. -If these values are not set, -the resources will not be fully specified. -.LP -It is not intended that values that can be set as XIM values be -set as resources. -.LP -.NH 4 -Destroy Callback -.XS -\*(SN Destroy Callback -.XE -.LP -The -.PN XNDestroyCallback -argument is a pointer to a structure of type -.PN XIMCallback . -.PN XNDestroyCallback -is triggered when an input method stops its service for any reason. -After the callback is invoked, the input method is closed and the -associated input context(s) are destroyed by Xlib. -Therefore, the client should not call -.PN XCloseIM -or -.PN XDestroyIC . -.LP -The generic prototype of this callback function is as follows: -.IN "DestroyCallback" "" "@DEF@" -.sM -.FD 0 -void DestroyCallback\^(\^\fIim\fP\^, \fIclient_data\fP\^, \fIcall_data\fP\^) -.br - XIM \fIim\fP\^; -.br - XPointer \fIclient_data\fP\^; -.br - XPointer \fIcall_data\fP\^; -.FN -.IP \fIim\fP 1i -Specifies the input method. -.IP \fIclient_data\fP 1i -Specifies the additional client data. -.IP \fIcall_data\fP 1i -Not used for this callback and always passed as NULL. -.LP -.eM -A DestroyCallback is always called with a NULL call_data argument. -.LP -.NH 4 -Query IM/IC Values List -.XS -\*(SN Query IM/IC Values List -.XE -.LP -.PN XNQueryIMValuesList -and -.PN XNQueryICValuesList -are used to query about XIM and XIC values supported by the input method. -.LP -The argument value must be a pointer to a location where the returned -value will be stored. The returned value is a pointer to a structure -of type -.PN XIMValuesList . -Clients are responsible for freeing the -.PN XIMValuesList -structure. -To do so, use -.PN XFree . -.LP -The -.PN XIMValuesList -structure is defined as follows: -.sM -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { - unsigned short count_values; - char **supported_values; -} XIMValuesList; -.De -.LP -.eM -.NH 4 -Visible Position -.XS -\*(SN Visible Position -.XE -.LP -The -.PN XNVisiblePosition -argument indicates whether the visible position masks of -.PN XIMFeedback -in -.PN XIMText -are available. -.LP -The argument value must be a pointer to a location where the returned -value will be stored. The returned value is of type -.PN Bool . -If the returned value is -.PN True , -the input method uses the visible position masks of -.PN XIMFeedback -in -.PN XIMText ; -otherwise, the input method does not use the masks. -.LP -Because this XIM value is optional, a client should call -.PN XGetIMValues -with argument -.PN XNQueryIMValues -before using this argument. -If the -.PN XNVisiblePosition -does not exist in the IM values list returned from -.PN XNQueryIMValues , -the visible position masks of -.PN XIMFeedback -in -.PN XIMText -are not used to indicate the visible position. -.LP -.NH 4 -Preedit Callback Behavior -.XS -\*(SN Preedit Callback Behavior -.XE -.LP -The -.PN XNR6PreeditCallbackBehavior -argument originally included in the X11R6 specification has been -deprecated.\(dg -.\" If XNR6PreeditCallbackBehavior is not deprecated, then its type -.\" should be changed from *Bool to Bool. -.FS \(dg -During formulation of the X11R6 specification, the behavior of -the R6 PreeditDrawCallbacks was going to differ significantly from -that of the R5 callbacks. -Late changes to the specification converged the R5 and R6 behaviors, -eliminating the need for -.PN XNR6PreeditCallbackBehavior . -Unfortunately, this argument was not removed from the R6 specification -before it was published. -.FE -.LP -The -.PN XNR6PreeditCallbackBehavior -argument indicates whether the behavior of preedit callbacks regarding -.PN XIMPreeditDrawCallbackStruct -values follows Release 5 or Release 6 semantics. -.LP -The value is of type -.PN Bool . -When querying for -.PN XNR6PreeditCallbackBehavior , -if the returned value is -.PN True , -the input method uses the Release 6 behavior; -otherwise, it uses the Release 5 behavior. -The default value is -.PN False . -In order to use Release 6 semantics, the value of -.PN XNR6PreeditCallbackBehavior -must be set to -.PN True . -.LP -Because this XIM value is optional, a client should call -.PN XGetIMValues -with argument -.PN XNQueryIMValues -before using this argument. -If the -.PN XNR6PreeditCallbackBehavior -does not exist in the IM values list returned from -.PN XNQueryIMValues , -the PreeditCallback behavior is Release 5 semantics. -.LP -.NH 3 -Input Context Functions -.XS -\*(SN Input Context Functions -.XE -.LP -An input context is an abstraction that is used to contain both the data -required (if any) by an input method and the information required -to display that data. -There may be multiple input contexts for one input method. -The programming interfaces for creating, reading, or modifying -an input context use a variable argument list. -The name elements of the argument lists are referred to as XIC values. -It is intended that input methods be controlled by these XIC values. -As new XIC values are created, -they should be registered with the X Consortium. -.LP -.sp -To create an input context, use -.PN XCreateIC . -.IN "XCreateIC" "" "@DEF@" -.sM -.FD 0 -XIC XCreateIC\^(\^\fIim\fP\^, ...) -.br - XIM \fIim\fP\^; -.FN -.IP \fIim\fP 1i -Specifies the input method. -.ds Al \ to set XIC values -.IP ... 1i -Specifies the variable length argument list\*(Al. -.LP -.eM -The -.PN XCreateIC -function creates a context within the specified input method. -.LP -Some of the arguments are mandatory at creation time, and -the input context will not be created if those arguments are not provided. -The mandatory arguments are the input style and the set of text callbacks -(if the input style selected requires callbacks). -All other input context values can be set later. -.LP -.PN XCreateIC -returns a NULL value if no input context could be created. -A NULL value could be returned for any of the following reasons: -.IP \(bu 5 -A required argument was not set. -.IP \(bu 5 -A read-only argument was set (for example, -.PN XNFilterEvents ). -.IP \(bu 5 -The argument name is not recognized. -.IP \(bu 5 -The input method encountered an input method implementation-dependent error. -.LP -.PN XCreateIC -can generate -.PN BadAtom , -.PN BadColor , -.PN BadPixmap , -and -.PN BadWindow -errors. -.LP -.sp -To destroy an input context, use -.PN XDestroyIC . -.IN "XDestroyIC" "" "@DEF@" -.sM -.FD 0 -void XDestroyIC\^(\^\fIic\fP\^) -.br - XIC \fIic\fP\^; -.FN -.IP \fIic\fP 1i -Specifies the input context. -.LP -.eM -.PN XDestroyIC -destroys the specified input context. -.LP -.sp -To communicate to and synchronize with input method -for any changes in keyboard focus from the client side, -use -.PN XSetICFocus -and -.PN XUnsetICFocus . -.IN "XSetICFocus" "" "@DEF@" -.sM -.FD 0 -void XSetICFocus\^(\^\fIic\fP\^) -.br - XIC \fIic\fP\^; -.FN -.IP \fIic\fP 1i -Specifies the input context. -.LP -.eM -The -.PN XSetICFocus -function allows a client to notify an input method that the focus window -attached to the specified input context has received keyboard focus. -The input method should take action to provide appropriate feedback. -Complete feedback specification is a matter of user interface policy. -.LP -Calling -.PN XSetICFocus -does not affect the focus window value. -.LP -.sp -.IN "XUnsetICFocus" "" "@DEF@" -.sM -.FD 0 -void XUnsetICFocus\^(\^\fIic\fP\^) -.br - XIC \fIic\fP\^; -.FN -.IP \fIic\fP 1i -Specifies the input context. -.LP -.eM -The -.PN XUnsetICFocus -function allows a client to notify an input method that the specified input context -has lost the keyboard focus and that no more input is expected on the focus window -attached to that input context. -The input method should take action to provide appropriate feedback. -Complete feedback specification is a matter of user interface policy. -.LP -Calling -.PN XUnsetICFocus -does not affect the focus window value; -the client may still receive -events from the input method that are directed to the focus window. -.LP -.sp -To reset the state of an input context to its initial state, use -.PN XmbResetIC -or -.PN XwcResetIC . -.IN "XmbResetIC" "" "@DEF@" -.IN "XwcResetIC" "" "@DE@" -.sM -.FD 0 -char * XmbResetIC\^(\^\fIic\fP\^) -.br - XIC \fIic\fP\^; -.FN -.FD 0 -wchar_t * XwcResetIC\^(\^\fIic\fP\^) -.br - XIC \fIic\fP\^; -.FN -.IP \fIic\fP 1i -Specifies the input context. -.LP -.eM -When -.PN XNResetState -is set to -.PN XIMInitialState , -.PN XmbResetIC -and -.PN XwcResetIC -reset an input context to its initial state; -when -.PN XNResetState -is set to -.PN XIMPreserveState , -the current input context state is preserved. -In both cases, any input pending on that context is deleted. -The input method is required to clear the preedit area, if any, -and update the status accordingly. -Calling -.PN XmbResetIC -or -.PN XwcResetIC -does not change the focus. -.LP -The return value of -.PN XmbResetIC -is its current preedit string as a multibyte string. -If there is any preedit text drawn or visible to the user, -then these procedures must return a non-NULL string. -If there is no visible preedit text, -then it is input method implementation-dependent -whether these procedures return a non-NULL string or NULL. -.LP -The client should free the returned string by calling -.PN XFree . -.LP -.sp -To get the input method associated with an input context, use -.PN XIMOfIC . -.IN "XIMOfIC" "" "@DEF@" -.sM -.FD 0 -XIM XIMOfIC\^(\^\fIic\fP\^) -.br - XIC \fIic\fP\^; -.FN -.IP \fIic\fP 1i -Specifies the input context. -.LP -.eM -The -.PN XIMOfIC -function returns the input method associated with the specified input context. -.LP -.sp -Xlib provides two functions for setting and reading XIC values, respectively, -.PN XSetICValues -and -.PN XGetICValues . -Both functions have a variable-length argument list. -In that argument list, any XIC value's name must be denoted -with a character string using the X Portable Character Set. -.LP -.sp -To set XIC values, use -.PN XSetICValues . -.IN "XSetICValues" "" "@DEF@" -.sM -.FD 0 -char * XSetICValues\^(\^\fIic\fP\^, ...) -.br - XIC \fIic\fP\^; -.FN -.IP \fIic\fP 1i -Specifies the input context. -.ds Al \ to set XIC values -.IP ... 1i -Specifies the variable length argument list\*(Al. -.LP -.eM -The -.PN XSetICValues -function returns NULL if no error occurred; -otherwise, -it returns the name of the first argument that could not be set. -An argument might not be set for any of the following reasons: -.IP \(bu 5 -The argument is read-only (for example, -.PN XNFilterEvents ). -.IP \(bu 5 -The argument name is not recognized. -.IP \(bu 5 -An implementation-dependent error occurs. -.LP -Each value to be set must be an appropriate datum, -matching the data type imposed by the semantics of the argument. -.LP -.PN XSetICValues -can generate -.PN BadAtom , -.PN BadColor , -.PN BadCursor , -.PN BadPixmap , -and -.PN BadWindow -errors. -.LP -.sp -To obtain XIC values, use -.PN XGetICValues . -.IN "XGetICValues" "" "@DEF@" -.sM -.FD 0 -char * XGetICValues\^(\^\fIic\fP\^, ...) -.br - XIC \fIic\fP\^; -.FN -.IP \fIic\fP 1i -Specifies the input context. -.ds Al \ to get XIC values -.IP ... 1i -Specifies the variable length argument list\*(Al. -.LP -.eM -The -.PN XGetICValues -function returns NULL if no error occurred; otherwise, -it returns the name of the first argument that could not be obtained. -An argument could not be obtained for any of the following reasons: -.IP \(bu 5 -The argument name is not recognized. -.IP \(bu 5 -The input method encountered an implementation-dependent error. -.LP -Each IC attribute value argument (following a name) must point to -a location where the IC value is to be stored. -That is, if the IC value is of type T, -the argument must be of type T*. -If T itself is a pointer type, -then -.PN XGetICValues -allocates memory to store the actual data, -and the client is responsible for freeing this data by calling -.PN XFree -with the returned pointer. -The exception to this rule is for an IC value of type -.PN XVaNestedList -(for preedit and status attributes). -In this case, the argument must also be of type -.PN XVaNestedList . -Then, the rule of changing type T to T* and freeing the allocated data -applies to each element of the nested list. -.NH 3 -Input Context Values -.XS -\*(SN Input Context Values -.XE -.LP -The following tables describe how XIC values are interpreted -by an input method depending on the input style chosen by the -user. -.LP -The first column lists the XIC values. -The second column indicates which values are involved in affecting, -negotiating, and setting the geometry of the input method windows. -The subentries under the third column indicate the different -input styles that are supported. -Each of these columns indicates how each of the XIC values -are treated by that input style. -.LP -The following keys apply to these tables. -.TS H -lw(1i) lw(4.75i). -_ -.sp 6p -.B -Key Explanation -.sp 6p -_ -.TH -.R -C T{ -This value must be set with -.PN XCreateIC . -T} -D T{ -This value may be set using -.PN XCreateIC . -If it is not set, -a default is provided. -T} -G T{ -This value may be read using -.PN XGetICValues . -T} -GN T{ -This value may cause geometry negotiation when its value is set by means of -.PN XCreateIC -or -.PN XSetICValues . -T} -GR T{ -This value will be the response of the input method when any -GN value is changed. -T} -GS T{ -This value will cause the geometry of the input method window to be set. -T} -O T{ -This value must be set once and only once. -It need not be set at create time. -T} -S T{ -This value may be set with -.PN XSetICValues . -T} -Ignored T{ -This value is ignored by the input method for the given input style. -T} -.sp 6p -_ -.TE -.LP -.TS H -c c c s s s s -l c c c c c c -c c c c c c c -l c c c c c c. -_ -.sp 6p -.B - Input Style -XIC Value Geometry Preedit Preedit Preedit Preedit Preedit - Management Callback Position Area Nothing None -.sp 6p -_ -.sp 6p -.TH -.R -Input Style C-G C-G C-G C-G C-G -Client Window O-G O-G O-G O-G Ignored -Focus Window GN D-S-G D-S-G D-S-G D-S-G Ignored -Resource Name Ignored D-S-G D-S-G D-S-G Ignored -Resource Class Ignored D-S-G D-S-G D-S-G Ignored -Geometry Callback Ignored Ignored D-S-G Ignored Ignored -Filter Events G G G G Ignored -Destroy Callback D-S-G D-S-G D-S-G D-S-G D-S-G -String Conversion Callback S-G S-G S-G S-G S-G -String Conversion D-S-G D-S-G D-S-G D-S-G D-S-G -Reset State D-S-G D-S-G D-S-G D-S-G Ignored -HotKey S-G S-G S-G S-G Ignored -HotKeyState D-S-G D-S-G D-S-G D-S-G Ignored -.sp 6p -\fBPreedit\fP -Area GS Ignored D-S-G D-S-G Ignored Ignored -Area Needed GN-GR Ignored Ignored S-G Ignored Ignored -Spot Location Ignored D-S-G Ignored Ignored Ignored -Colormap Ignored D-S-G D-S-G D-S-G Ignored -Foreground Ignored D-S-G D-S-G D-S-G Ignored -Background Ignored D-S-G D-S-G D-S-G Ignored -Background Pixmap Ignored D-S-G D-S-G D-S-G Ignored -Font Set GN Ignored D-S-G D-S-G D-S-G Ignored -Line Spacing GN Ignored D-S-G D-S-G D-S-G Ignored -Cursor Ignored D-S-G D-S-G D-S-G Ignored -Preedit State D-S-G D-S-G D-S-G D-S-G Ignored -Preedit State Notify Callback S-G S-G S-G S-G Ignored -Preedit Callbacks C-S-G Ignored Ignored Ignored Ignored -.sp 6p -_ -.TE -.LP -.TS H -c c c s s s -l c c c c c -c c c c c c -l c c c c c. -_ -.sp 6p -.B - Input Style -XIC Value Geometry Status Status Status Status - Management Callback Area Nothing None -.sp 6p -_ -.sp 6p -.TH -.R -Input Style C-G C-G C-G C-G -Client Window O-G O-G O-G Ignored -Focus Window GN D-S-G D-S-G D-S-G Ignored -Resource Name Ignored D-S-G D-S-G Ignored -Resource Class Ignored D-S-G D-S-G Ignored -Geometry Callback Ignored D-S-G Ignored Ignored -Filter Events G G G G -.sp 6p -\fBStatus\fP -Area GS Ignored D-S-G Ignored Ignored -Area Needed GN-GR Ignored S-G Ignored Ignored -Colormap Ignored D-S-G D-S-G Ignored -Foreground Ignored D-S-G D-S-G Ignored -Background Ignored D-S-G D-S-G Ignored -Background Pixmap Ignored D-S-G D-S-G Ignored -Font Set GN Ignored D-S-G D-S-G Ignored -Line Spacing GN Ignored D-S-G D-S-G Ignored -Cursor Ignored D-S-G D-S-G Ignored -Status Callbacks C-S-G Ignored Ignored Ignored -.sp 6p -_ -.TE -.NH 4 -Input Style -.XS -\*(SN Input Style -.XE -.LP -The -.PN XNInputStyle -argument specifies the input style to be used. -The value of this argument must be one of the values returned by the -.PN XGetIMValues -function with the -.PN XNQueryInputStyle -argument specified in the supported_styles list. -.LP -Note that this argument must be set at creation time -and cannot be changed. -.NH 4 -Client Window -.XS -\*(SN Client Window -.XE -.LP -.IN "XNClientWindow" "" "@DEF@" -The -.PN XNClientWindow -argument specifies to the input method the client window in -which the input method -can display data or create subwindows. -Geometry values for input method areas are given with respect to the client -window. -Dynamic change of client window is not supported. -This argument may be set only once and -should be set before any input is done using this input context. -If it is not set, -the input method may not operate correctly. -.LP -If an attempt is made to set this value a second time with -.PN XSetICValues , -the string -.PN XNClientWindow -will be returned by -.PN XSetICValues , -and the client window will not be changed. -.LP -If the client window is not a valid window ID on the display -attached to the input method, -a -.PN BadWindow -error can be generated when this value is used by the input method. -.NH 4 -Focus Window -.XS -\*(SN Focus Window -.XE -.LP -.IN "XNFocusWindow" "" "@DEF@" -The -.PN XNFocusWindow -argument specifies the focus window. -The primary purpose of the -.PN XNFocusWindow -is to identify the window that will receive the key event when input -is composed. -In addition, the input method may possibly affect the focus window -as follows: -.IP \(bu 5 -Select events on it -.IP \(bu 5 -Send events to it -.IP \(bu 5 -Modify its properties -.IP \(bu 5 -Grab the keyboard within that window -.LP -The associated value must be of type -.PN Window . -If the focus window is not a valid window ID on the display -attached to the input method, -a -.PN BadWindow -error can be generated when this value is used by the input method. -.LP -When this XIC value is left unspecified, -the input method will use the client window as the default focus window. -.NH 4 -Resource Name and Class -.XS -\*(SN Resource Name and Class -.XE -.LP -.IN "XNResourceName" "" "@DEF@" -.IN "XNResourceClass" "" "@DEF@" -The -.PN XNResourceName -and -.PN XNResourceClass -arguments are strings that specify the full name and class -used by the client to obtain resources for the client window. -These values should be used as prefixes for name and class -when looking up resources that may vary according to the input context. -If these values are not set, -the resources will not be fully specified. -.LP -It is not intended that values that can be set as XIC values be -set as resources. -.NH 4 -Geometry Callback -.XS -\*(SN Geometry Callback -.XE -.LP -.IN "XNGeometryCallback" "" "@DEF@" -The -.PN XNGeometryCallback -argument is a structure of type -.PN XIMCallback -(see section 13.5.6.13.12). -.LP -The -.PN XNGeometryCallback -argument specifies the geometry callback that a client can set. -This callback is not required for correct operation of either -an input method or a client. -It can be set for a client whose user interface policy permits -an input method to request the dynamic change of that input -method's window. -An input method that does dynamic change will need to filter any -events that it uses to initiate the change. -.NH 4 -Filter Events -.XS -\*(SN Filter Events -.XE -.LP -.IN "XNFilterEvents" "" "@DEF@" -The -.PN XNFilterEvents -argument returns the event mask that an input method needs -to have selected for. -The client is expected to augment its own event mask -for the client window with this one. -.LP -This argument is read-only, is set by the input method at create time, -and is never changed. -.LP -The type of this argument is -.PN unsigned -.PN long . -Setting this value will cause an error. -.NH 4 -Destroy Callback -.XS -\*(SN Destroy Callback -.XE -.LP -The -.PN XNDestroyCallback -argument is a pointer to a structure of type -.PN XIMCallback -(see section 13.5.6.13.12). This callback is triggered when the input method -stops its service for any reason; for example, when a connection to an IM -server is broken. After the destroy callback is called, -the input context is destroyed and the input method is closed. -Therefore, the client should not call -.PN XDestroyIC -and -.PN XCloseIM . -.LP -.NH 4 -String Conversion Callback -.XS -\*(SN String Conversion Callback -.XE -.LP -The -.PN XNStringConversionCallback -argument is a structure of type -.PN XIMCallback -(see section 13.5.6.13.12). -.LP -The -.PN XNStringConversionCallback -argument specifies a string conversion callback. This callback -is not required for correct operation of -either the input method or the client. It can be set by a client -to support string conversions that may be requested -by the input method. An input method that does string conversions -will filter any events that it uses to initiate the conversion. -.LP -Because this XIC value is optional, a client should call -.PN XGetIMValues -with argument -.PN XNQueryICValuesList -before using this argument. -.LP -.NH 4 -String Conversion -.XS -\*(SN String Conversion -.XE -.LP -The -.PN XNStringConversion -argument is a structure of type -.PN XIMStringConversionText . -.LP -The -.PN XNStringConversion -argument specifies the string to be converted by an input method. -This argument is not required for correct operation of either -the input method or the client. -.LP -String conversion facilitates the manipulation of text independent -of preediting. -It is essential for some input methods and clients to manipulate -text by performing context-sensitive conversion, -reconversion, or transliteration conversion on it. -.LP -Because this XIC value is optional, a client should call -.PN XGetIMValues -with argument -.PN XNQueryICValuesList -before using this argument. -.LP -The -.PN XIMStringConversionText -structure is defined as follows: -.LP -.sM -.Ds 0 - -typedef struct _XIMStringConversionText { - unsigned short length; - XIMStringConversionFeedback *feedback; - Bool encoding_is_wchar; - union { - char *mbs; - wchar_t *wcs; - } string; -} XIMStringConversionText; - -typedef unsigned long XIMStringConversionFeedback; -.De -.LP -.eM -The feedback member is reserved for future use. The text to be -converted is defined by the string and length members. The length -is indicated in characters. To prevent the library from freeing memory -pointed to by an uninitialized pointer, the client should set the feedback -element to NULL. -.LP -.NH 4 -Reset State -.XS -\*(SN Reset State -.XE -.LP -The -.PN XNResetState -argument specifies the state the input context will return to after calling -.PN XmbResetIC -or -.PN XwcResetIC . -.LP -The XIC state may be set to its initial state, as specified by the -.PN XNPreeditState -value when -.PN XCreateIC -was called, or it may be set to preserve the current state. -.LP -The valid masks for -.PN XIMResetState -are as follows: -.LP -.IN "XIMInitialState" "" "@DEF@" -.IN "XINPreserveState" "" "@DEF@" -.sM -.LP -.Ds 0 -typedef unsigned long XIMResetState; -.De -.TS -lw(.5i) lw(2i) lw(2i). -T{ -#define -T} T{ -.PN XIMInitialState -T} T{ -(1L) -T} -T{ -#define -T} T{ -.PN XIMPreserveState -T} T{ -(1L<<1) -T} -.TE -.LP -.eM -If -.PN XIMInitialState -is set, then -.PN XmbResetIC -and -.PN XwcResetIC -will return to the initial -.PN XNPreeditState -state of the XIC. -.LP -If -.PN XIMPreserveState -is set, then -.PN XmbResetIC -and -.PN XwcResetIC -will preserve the current state of the XIC. -.LP -If -.PN XNResetState -is left unspecified, the default is -.PN XIMInitialState . -.LP -.PN XIMResetState -values other than those specified above will default to -.PN XIMInitialState . -.LP -Because this XIC value is optional, a client should call -.PN XGetIMValues -with argument -.PN XNQueryICValuesList -before using this argument. -.LP -.NH 4 -Hot Keys -.XS -\*(SN Hot Keys -.XE -.LP -The -.PN XNHotKey -argument specifies the hot key list to the XIC. -The hot key list is a pointer to the structure of type -.PN XIMHotKeyTriggers , -which specifies the key events that must be received -without any interruption of the input method. -For the hot key list set with this argument to be utilized, the client -must also set -.PN XNHotKeyState -to -.PN XIMHotKeyStateON . -.LP -Because this XIC value is optional, a client should call -.PN XGetIMValues -with argument -.PN XNQueryICValuesList -before using this functionality. -.LP -The value of the argument is a pointer to a structure of type -.PN XIMHotKeyTriggers . -.LP -If an event for a key in the hot key list is found, then the process will -receive the event and it will be processed inside the client. -.LP -.sM -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { - KeySym keysym; - unsigned int modifier; - unsigned int modifier_mask; -} XIMHotKeyTrigger; - -typedef struct { - int num_hot_key; - XIMHotKeyTrigger *key; -} XIMHotKeyTriggers; -.De -.LP -.eM -.LP -The combination of modifier and modifier_mask are used to represent one of -three states for each modifier: -either the modifier must be on, or the modifier must be off, or the modifier -is a ``don't care'' \- it may be on or off. -When a modifier_mask bit is set to 0, the state of the associated modifier -is ignored when evaluating whether the key is hot or not. -.TS H -lw(1i) lw(1i) lw(3i). -_ -.sp 6p -.B -Modifier Bit Mask Bit Meaning -.sp 6p -_ -.sp 6p -.TH -.R -T{ -0 -T} T{ -1 -T} T{ -The modifier must be off. -T} -T{ -1 -T} T{ -1 -T} T{ -The modifier must be on. -T} -T{ -n/a -T} T{ -0 -T} T{ -Do not care if the modifier is on or off. -T} -.sp 6p -_ -.TE -.NH 4 -Hot Key State -.XS -\*(SN Hot Key State -.XE -.LP -The -.PN XNHotKeyState -argument specifies the hot key state of the input method. -This is usually used to switch the input method between hot key -operation and normal input processing. -.LP -The value of the argument is a pointer to a structure of type -XIMHotKeyState . -.LP -.sM -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef unsigned long XIMHotKeyState; -.De -.TS -lw(.5i) lw(3i) lw(2i). -T{ -#define -T} T{ -.PN XIMHotKeyStateON -T} T{ -(0x0001L) -T} -T{ -#define -T} T{ -.PN XIMHotKeyStateOFF -T} T{ -(0x0002L) -T} -.TE -.LP -.eM -.LP -If not specified, the default is -.PN XIMHotKeyStateOFF . -.LP -.NH 4 -Preedit and Status Attributes -.XS -\*(SN Preedit and Status Attributes -.XE -.LP -.IN "XNPreeditAttributes" "" "@DEF@" -.IN "XNStatusAttributes" "" "@DEF@" -The -.PN XNPreeditAttributes -and -.PN XNStatusAttributes -arguments specify to an input method the attributes to be used for the -preedit and status areas, -if any. -Those attributes are passed to -.PN XSetICValues -or -.PN XGetICValues -as a nested variable-length list. -The names to be used in these lists are described in the following sections. -.NH 5 -Area -.XS -\*(SN Area -.XE -.LP -.IN "XNArea" "" "@DEF@" -The value of the -.PN XNArea -argument must be a pointer to a structure of type -.PN XRectangle. -The interpretation of the -.PN XNArea -argument is dependent on the input method style that has been set. -.LP -If the input method style is -.PN XIMPreeditPosition , -.PN XNArea -specifies the clipping region within which preediting will take place. -If the focus window has been set, -the coordinates are assumed to be relative to the focus window. -Otherwise, the coordinates are assumed to be relative to the client window. -If neither has been set, -the results are undefined. -.LP -If -.PN XNArea -is not specified, is set to NULL, or is invalid, -the input method will default the clipping region -to the geometry of the -.PN XNFocusWindow . -If the area specified is NULL or invalid, -the results are undefined. -.LP -If the input style is -.PN XIMPreeditArea -or -.PN XIMStatusArea , -.PN XNArea -specifies the geometry provided by the client to the input method. -The input method may use this area to display its data, -either preedit or status depending on the area designated. -The input method may create a window as a child of the client window -with dimensions that fit the -.PN XNArea . -The coordinates are relative to the client window. -If the client window has not been set yet, -the input method should save these values -and apply them when the client window is set. -If -.PN XNArea -is not specified, is set to NULL, or is invalid, -the results are undefined. -.NH 5 -Area Needed -.XS -\*(SN Area Needed -.XE -.LP -.IN "XNAreaNeeded" "" "@DEF@" -When set, the -.PN XNAreaNeeded -argument specifies the geometry suggested by the client for this area -(preedit or status). -The value associated with the argument must be a pointer to a -structure of type -.PN XRectangle . -Note that the x, y values are not used -and that nonzero values for width or height are the constraints -that the client wishes the input method to respect. -.LP -When read, the -.PN XNAreaNeeded -argument specifies the preferred geometry desired by the input method -for the area. -.LP -This argument is only valid if the input style is -.PN XIMPreeditArea -or -.PN XIMStatusArea . -It is used for geometry negotiation between the client and the input method -and has no other effect on the input method -(see section 13.5.1.5). -.NH 5 -Spot Location -.XS -\*(SN Spot Location -.XE -.LP -.IN "XNSpotLocation" "" "@DEF@" -The -.PN XNSpotLocation -argument specifies to the input method the coordinates of the spot -to be used by an input method executing with -.PN XNInputStyle -set to -.PN XIMPreeditPosition . -When specified to any input method other than -.PN XIMPreeditPosition , -this XIC value is ignored. -.LP -The x coordinate specifies the position where the next character -would be inserted. -The y coordinate is the position of the baseline used -by the current text line in the focus window. -The x and y coordinates are relative to the focus window, if it has been set; -otherwise, they are relative to the client window. -If neither the focus window nor the client window has been set, -the results are undefined. -.LP -The value of the argument is a pointer to a structure of type -.PN XPoint . -.NH 5 -Colormap -.XS -\*(SN Colormap -.XE -.LP -Two different arguments can be used to indicate what colormap the input method -should use to allocate colors, a colormap ID, or a standard colormap name. -.LP -.IN "XNColormap" "" "@DEF@" -The -.PN XNColormap -argument is used to specify a colormap ID. -The argument value is of type -.PN Colormap . -An invalid argument may generate a -.PN BadColor -error when it is used by the input method. -.LP -.IN "XNStdColormap" "" "@DEF@" -The -.PN XNStdColormap -argument is used to indicate the name of the standard colormap -in which the input method should allocate colors. -The argument value is an -.PN Atom -that should be a valid atom for calling -.PN XGetRGBColormaps . -An invalid argument may generate a -.PN BadAtom -error when it is used by the input method. -.LP -If the colormap is left unspecified, -the client window colormap becomes the default. -.NH 5 -Foreground and Background -.XS -\*(SN Foreground and Background -.XE -.LP -.IN "XNForeground" "" "@DEF@" -.IN "XNBackground" "" "@DEF@" -The -.PN XNForeground -and -.PN XNBackground -arguments specify the foreground and background pixel, respectively. -The argument value is of type -.PN unsigned -.PN long . -It must be a valid pixel in the input method colormap. -.LP -If these values are left unspecified, -the default is determined by the input method. -.NH 5 -Background Pixmap -.XS -\*(SN Background Pixmap -.XE -.LP -The -.PN XNBackgroundPixmap -argument specifies a background pixmap to be used as the background of the -window. -The value must be of type -.PN Pixmap . -An invalid argument may generate a -.PN BadPixmap -error when it is used by the input method. -.LP -If this value is left unspecified, -the default is determined by the input method. -.NH 5 -Font Set -.XS -\*(SN Font Set -.XE -.LP -.IN "XNFontSet" "" "@DEF@" -The -.PN XNFontSet -argument specifies to the input method what font set is to be used. -The argument value is of type -.PN XFontSet . -.LP -If this value is left unspecified, -the default is determined by the input method. -.NH 5 -Line Spacing -.XS -\*(SN Line Spacing -.XE -.LP -The -.PN XNLineSpace -argument specifies to the input method what line spacing is to be used -in the preedit window if more than one line is to be used. -This argument is of type -.PN int . -.LP -If this value is left unspecified, -the default is determined by the input method. -.NH 5 -Cursor -.XS -\*(SN Cursor -.XE -.LP -.IN "XNCursor" "" "DEF@" -The -.PN XNCursor -argument specifies to the input method what cursor is to be used -in the specified window. -This argument is of type -.PN Cursor . -.LP -An invalid argument may generate a -.PN BadCursor -error when it is used by the input method. -If this value is left unspecified, -the default is determined by the input method. -.NH 5 -Preedit State -.XS -\*(SN Preedit State -.XE -.LP -The -.PN XNPreeditState -argument specifies the state of input preediting for the input method. -Input preediting can be on or off. -.LP -The valid mask names for -.PN XNPreeditState -are as follows: -.LP -.IN "XIMPreeditUnknown" "" "@DEV@" -.IN "XIMPreeditEnable" "" "@DEF@" -.IN "XIMPreeditDisable" "" "@DEV@" -.sM -.LP -.Ds 0 -typedef unsigned long XIMPreeditState; -.De -.TS -lw(.5i) lw(2i) lw(2i). -T{ -#define -T} T{ -.PN XIMPreeditUnknown -T} T{ -0L -T} -T{ -#define -T} T{ -.PN XIMPreeditEnable -T} T{ -1L -T} -T{ -#define -T} T{ -.PN XIMPreeditDisable -T} T{ -(1L<<1) -T} -.TE -.LP -.eM -If a value of -.PN XIMPreeditEnable -is set, then input preediting is turned on by the input method. -.LP -If a value of -.PN XIMPreeditDisable -is set, then input preediting is turned off by the input method. -.LP -If -.PN XNPreeditState -is left unspecified, then the state will be implementation-dependent. -.LP -When -.PN XNResetState -is set to -.PN XIMInitialState , -the -.PN XNPreeditState -value specified at the creation time will be reflected as the initial state for -.PN XmbResetIC -and -.PN XwcResetIC . -.LP -Because this XIC value is optional, a client should call -.PN XGetIMValues -with argument -.PN XNQueryICValuesList -before using this argument. -.NH 5 -Preedit State Notify Callback -.XS -\*(SN Preedit State Notify Callback -.XE -.LP -The preedit state notify callback is triggered by the input method -when the preediting state has changed. -The value of the -.PN XNPreeditStateNotifyCallback -argument is a pointer to a structure of type -.PN XIMCallback . -The generic prototype is as follows: -.IN "PreeditStateNotifyCallback" "" "@DEF@" -.sM -.FD 0 -void PreeditStateNotifyCallback\^(\^\fIic\fP\^, \fIclient_data\fP\^, \fIcall_data\fP\^) -.br - XIC \fIic\fP\^; -.br - XPointer \fIclient_data\fP\^; -.br - XIMPreeditStateNotifyCallbackStruct *\fIcall_data\fP\^; -.FN -.IP \fIic\fP 1i -Specifies the input context. -.IP \fIclient_data\fP 1i -Specifies the additional client data. -.IP \fIcall_data\fP 1i -Specifies the current preedit state. -.LP -.eM -The -.PN XIMPreeditStateNotifyCallbackStruct -structure is defined as follows: -.LP -.IN "XIMPreeditStateNotifyCallbackStruct" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct _XIMPreeditStateNotifyCallbackStruct { - XIMPreeditState state; -} XIMPreeditStateNotifyCallbackStruct; -.De -.LP -.eM -.LP -Because this XIC value is optional, a client should call -.PN XGetIMValues -with argument -.PN XNQueryICValuesList -before using this argument. -.NH 5 -Preedit and Status Callbacks -.XS -\*(SN Preedit and Status Callbacks -.XE -.LP -A client that wants to support the input style -.PN XIMPreeditCallbacks -must provide a set of preedit callbacks to the input method. -The set of preedit callbacks is as follows: -.IN "XNPreeditStartCallback" "" "@DEF@" -.IN "XNPreeditDoneCallback" "" "@DEF@" -.IN "XNPreeditDrawCallback" "" "@DEF@" -.IN "XNPreeditCaretCallback" "" "@DEF@" -.TS -lw(1.75i) lw(4i). -T{ -.PN XNPreeditStartCallback -T} T{ -This is called when the input method starts preedit. -T} -T{ -.PN XNPreeditDoneCallback -T} T{ -This is called when the input method stops preedit. -T} -T{ -.PN XNPreeditDrawCallback -T} T{ -This is called when a number of preedit keystrokes should be echoed. -T} -T{ -.PN XNPreeditCaretCallback -T} T{ -This is called to move the text insertion point within the preedit string. -T} -.TE -.LP -A client that wants to support the input style -.PN XIMStatusCallbacks -must provide a set of status callbacks to the input method. -The set of status callbacks is as follows: -.IN "XNStatusStartCallback" "" "@DEF@" -.IN "XNStatusDoneCallback" "" "@DEF@" -.IN "XNStatusDrawCallback" "" "@DEF@" -.TS -lw(1.75i) lw(4i). -T{ -.PN XNStatusStartCallback -T} T{ -This is called when the input method initializes the status area. -T} -T{ -.PN XNStatusDoneCallback -T} T{ -This is called when the input method no longer needs the status area. -T} -T{ -.PN XNStatusDrawCallback -T} T{ -This is called when updating of the status area is required. -T} -.TE -.LP -The value of any status or preedit argument is a pointer -to a structure of type -.PN XIMCallback . -.IN "XIMProc" "" "@DEF@" -.IN "XIMCallback" "" "@DEF@" -.sM -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef void (*XIMProc)(); - -typedef struct { - XPointer client_data; - XIMProc callback; -} XIMCallback; -.De -.LP -.eM -Each callback has some particular semantics and will carry the data -that expresses the environment necessary to the client -into a specific data structure. -This paragraph only describes the arguments to be used to set -the callback. -.LP -Setting any of these values while doing preedit -may cause unexpected results. -.NH 3 -Input Method Callback Semantics -.XS -\*(SN Input Method Callback Semantics -.XE -.LP -XIM callbacks are procedures defined by clients or text drawing packages -that are to be called from the input method when selected events occur. -Most clients will use a text editing package or a toolkit -and, hence, will not need to define such callbacks. -This section defines the callback semantics, when they are triggered, -and what their arguments are. -This information is mostly useful for X toolkit implementors. -.LP -Callbacks are mostly provided so that clients (or text editing -packages) can implement on-the-spot preediting in their own window. -In that case, -the input method needs to communicate and synchronize with the client. -The input method needs to communicate changes in the preedit window -when it is under control of the client. -Those callbacks allow the client to initialize the preedit area, -display a new preedit string, -move the text insertion point during preedit, -terminate preedit, or update the status area. -.LP -All callback procedures follow the generic prototype: -.IN "CallbackPrototype" "" "@DEF@" -.sM -.FD 0 -void CallbackPrototype\^(\^\fIic\fP\^, \fIclient_data\fP\^, \fIcall_data\fP\^) -.br - XIC \fIic\fP\^; -.br - XPointer \fIclient_data\fP\^; -.br - SomeType \fIcall_data\fP\^; -.FN -.IP \fIic\fP 1i -Specifies the input context. -.IP \fIclient_data\fP 1i -Specifies the additional client data. -.IP \fIcall_data\fP 1i -Specifies data specific to the callback. -.LP -.eM -The call_data argument is a structure that expresses the arguments needed -to achieve the semantics; -that is, -it is a specific data structure appropriate to the callback. -In cases where no data is needed in the callback, -this call_data argument is NULL. -The client_data argument is a closure that has been initially specified -by the client when specifying the callback and passed back. -It may serve, for example, to inherit application context in the callback. -.LP -The following paragraphs describe the programming semantics -and specific data structure associated with the different reasons. -.NH 4 -Geometry Callback -.XS -\*(SN Geometry Callback -.XE -.LP -The geometry callback is triggered by the input method -to indicate that it wants the client to negotiate geometry. -The generic prototype is as follows: -.IN "GeometryCallback" "" "@DEF@" -.sM -.FD 0 -void GeometryCallback\^(\^\fIic\fP\^, \fIclient_data\fP\^, \fIcall_data\fP\^) -.br - XIC \fIic\fP\^; -.br - XPointer \fIclient_data\fP\^; -.br - XPointer \fIcall_data\fP\^; -.FN -.IP \fIic\fP 1i -Specifies the input context. -.IP \fIclient_data\fP 1i -Specifies the additional client data. -.IP \fIcall_data\fP 1i -Not used for this callback and always passed as NULL. -.LP -.eM -The callback is called with a NULL call_data argument. -.NH 4 -Destroy Callback -.XS -\*(SN Destroy Callback -.XE -.LP -The destroy callback is triggered by the input method -when it stops service for any reason. -After the callback is invoked, the input context will be freed by Xlib. -The generic prototype is as follows: -.IN "DestroyCallback" "" "@DEF@" -.sM -.FD 0 -void DestroyCallback\^(\^\fIic\fP\^, \fIclient_data\fP\^, \fIcall_data\fP\^) -.br - XIC \fIic\fP\^; -.br - XPointer \fIclient_data\fP\^; -.br - XPointer \fIcall_data\fP\^; -.FN -.IP \fIic\fP 1i -Specifies the input context. -.IP \fIclient_data\fP 1i -Specifies the additional client data. -.IP \fIcall_data\fP 1i -Not used for this callback and always passed as NULL. -.LP -.eM -The callback is called with a NULL call_data argument. -.NH 4 -String Conversion Callback -.XS -\*(SN String Conversion Callback -.XE -.LP -The string conversion callback is triggered by the input method -to request the client to return the string to be converted. The -returned string may be either a multibyte or wide character string, -with an encoding matching the locale bound to the input context. -The callback prototype is as follows: -.IN "StringConversionCallback" "" "@DEF@" -.sM -.FD 0 -void StringConversionCallback\^(\^\fIic\fP\^, \fIclient_data\fP\^, \fIcall_data\fP\^) -.br - XIC \fIic\fP\^; -.br - XPointer \fIclient_data\fP\^; -.br - XIMStringConversionCallbackStruct *\fIcall_data\fP\^; -.FN -.IP \fIic\fP 1i -Specifies the input method. -.IP \fIclient_data\fP 1i -Specifies the additional client data. -.IP \fIcall_data\fP 1i -Specifies the amount of the string to be converted. -.LP -.eM -The callback is passed an -.PN XIMStringConversionCallbackStruct -structure in the call_data argument. -The text member is an -.PN XIMStringConversionText -structure (see section 13.5.6.9) to be filled in by the client -and describes the text to be sent to the input method. -The data pointed to by the -string and feedback elements of the -.PN XIMStringConversionText -structure will be freed using -.PN XFree -by the input method -after the callback returns. So the client should not point to -internal buffers that are critical to the client. -Similarly, because the feedback element is currently reserved for future -use, the client should set feedback to NULL to prevent the library from -freeing memory at some random location due to an uninitialized pointer. -.LP -The -.PN XIMStringConversionCallbackStruct -structure is defined as follows: -.LP -.IN "XIMStringConversionCallbackStruct" "" "@DEF@" -.sM -.LP -.Ds 0 -typedef struct _XIMStringConversionCallbackStruct { - XIMStringConversionPosition position; - XIMCaretDirection direction; - short factor; - XIMStringConversionOperation operation; - XIMStringConversionText *text; -} XIMStringConversionCallbackStruct; - -typedef short XIMStringConversionPosition; - -typedef unsigned short XIMStringConversionOperation; - -.De -.LP -.TS -lw(.5i) lw(3i) lw(2i). -T{ -#define -T} T{ -.PN XIMStringConversionSubstitution -T} T{ -(0x0001) -T} -T{ -#define -T} T{ -.PN XIMStringConversionRetrieval -T} T{ -(0x0002) -T} -.TE -.LP -.eM -.PN XIMStringConversionPosition -specifies the starting position of the string to be returned -in the -.PN XIMStringConversionText -structure. The value identifies a position, in units of characters, -relative to the client's cursor position in the client's buffer. -.LP -The ending position of the text buffer is determined by -the direction and factor members. Specifically, it is the character position -relative to the starting point as defined by the -.PN XIMCaretDirection . -The factor member of -.PN XIMStringConversionCallbackStruct -specifies the number of -.PN XIMCaretDirection -positions to be applied. For example, if the direction specifies -.PN XIMLineEnd -and factor is 1, then all characters from the starting position to -the end of the current display line are returned. If the direction -specifies -.PN XIMForwardChar -or -.PN XIMBackwardChar , -then the factor specifies a relative position, indicated in characters, -from the starting position. -.LP -.PN XIMStringConversionOperation -specifies whether the string to be converted should be -deleted (substitution) or copied (retrieval) from the client's -buffer. When the -.PN XIMStringConversionOperation -is -.PN XIMStringConversionSubstitution , -the client must delete the string to be converted from its own buffer. -When the -.PN XIMStringConversionOperation -is -.PN XIMStringConversionRetrieval , -the client must not delete the string to be converted from its buffer. -The substitute operation is typically used for reconversion and -transliteration conversion, -while the retrieval operation is typically used for context-sensitive -conversion. -.NH 4 -Preedit State Callbacks -.XS -\*(SN Preedit State Callbacks -.XE -.LP -When the input method turns preediting on or off, a -.PN PreeditStartCallback -or -.PN PreeditDoneCallback -callback is triggered to let the toolkit do the setup -or the cleanup for the preedit region. -.IN "PreeditStartCallback" "" "@DEF@" -.sM -.FD 0 -int PreeditStartCallback\^(\^\fIic\fP\^, \fIclient_data\fP\^, \fIcall_data\fP\^) -.br - XIC \fIic\fP\^; -.br - XPointer \fIclient_data\fP\^; -.br - XPointer \fIcall_data\fP\^; -.FN -.IP \fIic\fP 1i -Specifies the input context. -.IP \fIclient_data\fP 1i -Specifies the additional client data. -.IP \fIcall_data\fP 1i -Not used for this callback and always passed as NULL. -.LP -.eM -When preedit starts on the specified input context, -the callback is called with a NULL call_data argument. -.PN PreeditStartCallback -will return the maximum size of the preedit string. -A positive number indicates the maximum number of bytes allowed -in the preedit string, -and a value of \-1 indicates there is no limit. -.IN "PreeditDoneCallback" "" "@DEF@" -.sM -.FD 0 -void PreeditDoneCallback\^(\^\fIic\fP\^, \fIclient_data\fP\^, \fIcall_data\fP\^) -.br - XIC \fIic\fP\^; -.br - XPointer \fIclient_data\fP\^; -.br - XPointer \fIcall_data\fP\^; -.FN -.IP \fIic\fP 1i -Specifies the input context. -.IP \fIclient_data\fP 1i -Specifies the additional client data. -.IP \fIcall_data\fP 1i -Not used for this callback and always passed as NULL. -.LP -.eM -When preedit stops on the specified input context, -the callback is called with a NULL call_data argument. -The client can release the data allocated by -.PN PreeditStartCallback . -.LP -.PN PreeditStartCallback -should initialize appropriate data needed for -displaying preedit information and for handling further -.PN PreeditDrawCallback -calls. -Once -.PN PreeditStartCallback -is called, it will not be called again before -.PN PreeditDoneCallback -has been called. -.NH 4 -Preedit Draw Callback -.XS -\*(SN Preedit Draw Callback -.XE -.LP -This callback is triggered to draw and insert, delete or replace, -preedit text in the preedit region. -The preedit text may include unconverted input text such as Japanese Kana, -converted text such as Japanese Kanji characters, or characters of both kinds. -That string is either a multibyte or wide character string, -whose encoding matches the locale bound to the input context. -The callback prototype -is as follows: -.IN "PreeditDrawCallback" "" "@DEF@" -.sM -.FD 0 -void PreeditDrawCallback\^(\^\fIic\fP\^, \fIclient_data\fP\^, \fIcall_data\fP\^) -.br - XIC \fIic\fP\^; -.br - XPointer \fIclient_data\fP\^; -.br - XIMPreeditDrawCallbackStruct *\fIcall_data\fP\^; -.FN -.IP \fIic\fP 1i -Specifies the input context. -.IP \fIclient_data\fP 1i -Specifies the additional client data. -.IP \fIcall_data\fP 1i -Specifies the preedit drawing information. -.LP -.eM -The callback is passed an -.PN XIMPreeditDrawCallbackStruct -structure in the call_data argument. -The text member of this structure contains the text to be drawn. -After the string has been drawn, -the caret should be moved to the specified location. -.LP -The -.PN XIMPreeditDrawCallbackStruct -structure is defined as follows: -.LP -.IN "XIMPreeditDrawCallbackStruct" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct _XIMPreeditDrawCallbackStruct { - int caret; /* Cursor offset within preedit string */ - int chg_first; /* Starting change position */ - int chg_length; /* Length of the change in character count */ - XIMText *text; -} XIMPreeditDrawCallbackStruct; -.De -.LP -.eM -The client must keep updating a buffer of the preedit text -and the callback arguments referring to indexes in that buffer. -The call_data fields have specific meanings according to the operation, -as follows: -.IP \(bu 5 -To indicate text deletion, -the call_data member specifies a NULL text field. -The text to be deleted is then the current text in the buffer -from position chg_first (starting at zero) on a character length -of chg_length. -.IP \(bu 5 -When text is non-NULL, -it indicates insertion or replacement of text in the buffer. -.IP -The chg_length member -identifies the number of characters in the current preedit buffer -that are affected by this call. -A positive chg_length indicates that chg_length number of characters, starting -at chg_first, must be deleted or must be replaced by text, whose length is -specified in the -.PN XIMText -structure. -.IP -A chg_length value of zero indicates that text must be inserted -right at the position specified by chg_first. -A value of zero for chg_first specifies the first character in the buffer. -.IP -chg_length and chg_first combine to identify the modification required to -the preedit buffer; beginning at chg_first, replace chg_length number of -characters with the text in the supplied -.PN XIMText -structure. For example, suppose the preedit buffer contains the string "ABCDE". -.IP -.DS I -.ft C -Text: A B C D E - ^ ^ ^ ^ ^ ^ -CharPos: 0 1 2 3 4 5 -.sp -.ft P -.DE -The CharPos in the diagram shows the location of the character position -relative to the character. -.IP -If the value of chg_first is 1 and the value of chg_length is 3, this -says to replace 3 characters beginning at character position 1 with the -string in the -.PN XIMText -structure. -Hence, BCD would be replaced by the value in the structure. -.IP -Though chg_length and chg_first are both signed integers they will -never have a negative value. -.IP \(bu 5 -The caret member -identifies the character position before which the cursor should -be placed \- after modification to the preedit buffer has been completed. -For example, if caret is zero, the cursor is at -the beginning of the buffer. If the caret is one, the cursor is between -the first and second character. -.LP -.IN "XIMText" "" @DEF@" -.sM -.Ds -.TA .5i 1.5i 3i -typedef struct _XIMText { - unsigned short length; - XIMFeedback * feedback; - Bool encoding_is_wchar; - union { - char * multi_byte; - wchar_t * wide_char; - } string; -} XIMText; -.De -.LP -.eM -The text string passed is actually a structure specifying as follows: -.IP \(bu 5 -The length member is the text length in characters. -.IP \(bu 5 -The encoding_is_wchar member is a value that indicates -if the text string is encoded in wide character or multibyte format. -The text string may be passed either as multibyte or as wide character; -the input method controls in which form data is passed. -The client's -callback routine must be able to handle data passed in either form. -.IP \(bu 5 -The string member is the text string. -.IP \(bu 5 -The feedback member indicates rendering type for each character in the -string member. -If string is NULL (indicating that only highlighting of the existing -preedit buffer should be updated), feedback points to length highlight -elements that should be applied to the existing preedit buffer, beginning -at chg_first. -.LP -The feedback member expresses the types of rendering feedback -the callback should apply when drawing text. -Rendering of the text to be drawn is specified either in generic ways -(for example, primary, secondary) or in specific ways (reverse, underline). -When generic indications are given, -the client is free to choose the rendering style. -It is necessary, however, that primary and secondary be mapped -to two distinct rendering styles. -.LP -If an input method wants to control display of the preedit string, an -input method can indicate the visibility hints using feedbacks in -a specific way. -The -.PN XIMVisibleToForward , -.PN XIMVisibleToBackward , -and -.PN XIMVisibleCenter -masks are exclusively used for these visibility hints. -The -.PN XIMVisibleToForward -mask -indicates that the preedit text is preferably displayed in the -primary draw direction from the -caret position in the preedit area forward. -The -.PN XIMVisibleToBackward -mask -indicates that the preedit text is preferably displayed from -the caret position in the preedit area backward, relative to the primary -draw direction. -The -.PN XIMVisibleCenter -mask -indicates that the preedit text is preferably displayed with -the caret position in the preedit area centered. -.LP -The insertion point of the preedit string could exist outside of -the visible area when visibility hints are used. -Only one of the -masks -is valid for the entire preedit string, and only one character -can hold one of these feedbacks for a given input context at one time. -This feedback may be OR'ed together with another highlight (such as -.PN XIMReverse ). -Only the most recently set feedback is valid, and any previous -feedback is automatically canceled. This is a hint to the client, and -the client is free to choose how to display the preedit string. -.LP -The feedback member also specifies how rendering of the text argument -should be performed. -If the feedback is NULL, -the callback should apply the same feedback as is used for the surrounding -characters in the preedit buffer; if chg_first is at a highlight boundary, -the client can choose which of the two highlights to use. -If feedback is not NULL, feedback specifies an array defining the -rendering for each -character of the string, and the length of the array is thus length. -.LP -If an input method wants to indicate that it is only updating the feedback of -the preedit text without changing the content of it, -the -.PN XIMText -structure will contain a NULL value for the string field, -the number of characters affected (relative to chg_first) -will be in the length field, -and the feedback field will point to an array of -.PN XIMFeedback . -.LP -Each element in the feedback array is a bitmask represented by a value of type -.PN XIMFeedback . -The valid mask names are as follows: -.LP -.IN "XIMReverse" "" "@DEF@" -.IN "XIMUnderline" "" "@DEF@" -.IN "XIMHighlight" "" "@DEF@" -.IN "XIMPrimary" "" "@DEF@" -.IN "XIMSecondary" "" "@DEF@" -.IN "XIMTertiary" "" "@DEF@" -.IN "XIMVisibleToForward" "" "@DEF@" -.IN "XIMVisibleToBackward" "" "@DEF@" -.IN "XIMVisibleCenter" "" "@DEF@" -.sM -.LP -.Ds 0 -typedef unsigned long XIMFeedback; -.De -.TS -lw(.5i) lw(2i) lw(2i). -T{ -#define -T} T{ -.PN XIMReverse -T} T{ -1L -T} -T{ -#define -T} T{ -.PN XIMUnderline -T} T{ -(1L<<1) -T} -T{ -#define -T} T{ -.PN XIMHighlight -T} T{ -(1L<<2) -T} -T{ -#define -T} T{ -.PN XIMPrimary -T} T{ -(1L<<5)\(dg -T} -T{ -#define -T} T{ -.PN XIMSecondary -T} T{ -(1L<<6)\(dg -T} -T{ -#define -T} T{ -.PN XIMTertiary -T} T{ -(1L<<7)\(dg -T} -T{ -#define -T} T{ -.PN XIMVisibleToForward -T} T{ -(1L<<8) -T} -T{ -#define -T} T{ -.PN XIMVisibleToBackward -T} T{ -(1L<<9) -T} -T{ -#define -T} T{ -.PN XIMVisibleCenter -T} T{ -(1L<<10) -T} -.TE -.LP -.eM -.LP -Characters drawn with the -.PN XIMReverse -highlight should be drawn by swapping the foreground and background colors -used to draw normal, unhighlighted characters. -Characters drawn with the -.PN XIMUnderline -highlight should be underlined. -Characters drawn with the -.PN XIMHighlight , -.PN XIMPrimary , -.PN XIMSecondary , -and -.PN XIMTertiary -highlights should be drawn in some unique manner that must be different -from -.PN XIMReverse -and -.PN XIMUnderline . -.FS \(dg -The values for -.PN XIMPrimary , -.PN XIMSecondary , -and -.PN XIMTertiary -were incorrectly defined in the R5 specification. -The X Consortium's X11R5 -implementation correctly implemented the values for these highlights. -The value of these highlights has been corrected in this specification -to agree with the values in the Consortium's X11R5 and X11R6 implementations. -.FE -.NH 4 -Preedit Caret Callback -.XS -\*(SN Preedit Caret Callback -.XE -.LP -An input method may have its own navigation keys to allow the user -to move the text insertion point in the preedit area -(for example, to move backward or forward). -Consequently, input method needs to indicate to the client that it -should move the text insertion point. -It then calls the PreeditCaretCallback. -.IN "PreeditCaretCallback" "" "@DEF@" -.sM -.FD 0 -void PreeditCaretCallback\^(\^\fIic\fP\^, \fIclient_data\fP\^, \fIcall_data\fP\^) -.br - XIC \fIic\fP\^; -.br - XPointer \fIclient_data\fP\^; -.br - XIMPreeditCaretCallbackStruct *\fIcall_data\fP\^; -.FN -.IP \fIic\fP 1i -Specifies the input context. -.IP \fIclient_data\fP 1i -Specifies the additional client data. -.IP \fIcall_data\fP 1i -Specifies the preedit caret information. -.LP -.eM -The input method will trigger PreeditCaretCallback -to move the text insertion point during preedit. -The call_data argument contains a pointer to an -.PN XIMPreeditCaretCallbackStruct -structure, -which indicates where the caret should be moved. -The callback must move the insertion point to its new location -and return, in field position, the new offset value from the initial position. -.LP -The -.PN XIMPreeditCaretCallbackStruct -structure is defined as follows: -.IN "XIMPreeditCaretCallbackStruct" "" "@DEF@" -.LP -.sM -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct _XIMPreeditCaretCallbackStruct { - int position; /* Caret offset within preedit string */ - XIMCaretDirection direction; /* Caret moves direction */ - XIMCaretStyle style; /* Feedback of the caret */ -} XIMPreeditCaretCallbackStruct; -.De -.LP -.eM -The -.PN XIMCaretStyle -structure is defined as follows: -.LP -.IN "XIMCaretStyle" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef enum { - XIMIsInvisible, /* Disable caret feedback */ - XIMIsPrimary, /* UI defined caret feedback */ - XIMIsSecondary, /* UI defined caret feedback */ -} XIMCaretStyle; -.De -.LP -.eM -The -.PN XIMCaretDirection -structure is defined as follows: -.IN "XIMCaretDirection" "" "@DEF@" -.LP -.sM -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef enum { - XIMForwardChar, XIMBackwardChar, - XIMForwardWord, XIMBackwardWord, - XIMCaretUp, XIMCaretDown, - XIMNextLine, XIMPreviousLine, - XIMLineStart, XIMLineEnd, - XIMAbsolutePosition, - XIMDontChange, - } XIMCaretDirection; -.De -.LP -.eM -These values are defined as follows: -.IN "XIMForwardChar" "" "@DEF@" -.IN "XIMBackwardChar" "" "@DEF@" -.IN "XIMForwardWord" "" "@DEF@" -.IN "XIMBackwardWord" "" "@DEF@" -.IN "XIMCaretUp" "" "@DEF@" -.IN "XIMCaretDown" "" "@DEF@" -.TS -lw(1.5i) lw(4.25i). -T{ -.PN XIMForwardChar -T} T{ -Move the caret forward one character position. -T} -T{ -.PN XIMBackwardChar -T} T{ -Move the caret backward one character position. -T} -T{ -.PN XIMForwardWord -T} T{ -Move the caret forward one word. -T} -T{ -.PN XIMBackwardWord -T} T{ -Move the caret backward one word. -T} -T{ -.PN XIMCaretUp -T} T{ -Move the caret up one line keeping the current horizontal offset. -T} -T{ -.PN XIMCaretDown -T} T{ -Move the caret down one line keeping the current horizontal offset. -T} -T{ -.PN XIMPreviousLine -T} T{ -Move the caret to the beginning of the previous line. -T} -T{ -.PN XIMNextLine -T} T{ -Move the caret to the beginning of the next line. -T} -T{ -.PN XIMLineStart -T} T{ -Move the caret to the beginning of the current display line -that contains the caret. -T} -T{ -.PN XIMLineEnd -T} T{ -Move the caret to the end of the current display line -that contains the caret. -T} -T{ -.PN XIMAbsolutePosition -T} T{ -The callback must move to the location specified by the position field -of the callback data, indicated in characters, starting from the beginning -of the preedit text. -Hence, a value of zero means move back to the beginning of the preedit text. -T} -T{ -.PN XIMDontChange -T} T{ -The caret position does not change. -T} -.TE -.IN "XIMNextLine" "" "@DEF@" -.IN "XIMPreviousLine" "" "@DEF@" -.IN "XIMLineStart" "" "@DEF@" -.IN "XIMLineEnd" "" "@DEF@" -.IN "XIMAbsolutePosition" "" "@DEF@" -.IN "XIMDontChange" "" "@DEF@" -.NH 4 -Status Callbacks -.XS -\*(SN Status Callbacks -.XE -.LP -An input method may communicate changes in the status of an input context -(for example, created, destroyed, or focus changes) with three status -callbacks: StatusStartCallback, StatusDoneCallback, and StatusDrawCallback. -.LP -.sp -When the input context is created or gains focus, -the input method calls the StatusStartCallback callback. -.IN "StatusStartCallback" "" "@DEF@" -.sM -.FD 0 -void StatusStartCallback\^(\^\fIic\fP\^, \fIclient_data\fP\^, \fIcall_data\fP\^) -.br - XIC \fIic\fP\^; -.br - XPointer \fIclient_data\fP\^; -.br - XPointer \fIcall_data\fP\^; -.FN -.IP \fIic\fP 1i -Specifies the input context. -.IP \fIclient_data\fP 1i -Specifies the additional client data. -.IP \fIcall_data\fP 1i -Not used for this callback and always passed as NULL. -.LP -.eM -The callback should initialize appropriate data for displaying status -and for responding to StatusDrawCallback calls. -Once StatusStartCallback is called, -it will not be called again before StatusDoneCallback has been called. -.LP -.sp -When an input context -is destroyed or when it loses focus, the input method calls StatusDoneCallback. -.IN "StatusDoneCallback" "" "@DEF@" -.sM -.FD 0 -void StatusDoneCallback\^(\^\fIic\fP\^, \fIclient_data\fP\^, \fIcall_data\fP\^) -.br - XIC \fIic\fP\^; -.br - XPointer \fIclient_data\fP\^; -.br - XPointer \fIcall_data\fP\^; -.FN -.IP \fIic\fP 1i -Specifies the input context. -.IP \fIclient_data\fP 1i -Specifies the additional client data. -.IP \fIcall_data\fP 1i -Not used for this callback and always passed as NULL. -.LP -.eM -The callback may release any data allocated on -.PN StatusStart . -.LP -.sp -When an input context status has to be updated, the input method calls -StatusDrawCallback. -.IN "StatusDrawCallback" "" "@DEF@" -.sM -.FD 0 -void StatusDrawCallback\^(\^\fIic\fP\^, \fIclient_data\fP\^, \fIcall_data\fP\^) -.br - XIC \fIic\fP\^; -.br - XPointer \fIclient_data\fP\^; -.br - XIMStatusDrawCallbackStruct *\fIcall_data\fP\^; -.FN -.IP \fIic\fP 1i -Specifies the input context. -.IP \fIclient_data\fP 1i -Specifies the additional client data. -.IP \fIcall_data\fP 1i -Specifies the status drawing information. -.LP -.eM -The callback should update the status area by either drawing a string -or imaging a bitmap in the status area. -.LP -The -.PN XIMStatusDataType -and -.PN XIMStatusDrawCallbackStruct -structures are defined as follows: -.IN "XIMStatusDataType" "" "@DEF@" -.IN "XIMStatusDrawCallbackStruct" "" "@DEF@" -.LP -.sM -.Ds 0 -.TA .5i 1i 3i -.ta .5i 1i 3i -typedef enum { - XIMTextType, - XIMBitmapType, -} XIMStatusDataType; - -typedef struct _XIMStatusDrawCallbackStruct { - XIMStatusDataType type; - union { - XIMText *text; - Pixmap bitmap; - } data; -} XIMStatusDrawCallbackStruct; -.De -.LP -.eM -.LP -The feedback styles -.PN XIMVisibleToForward , -.PN XIMVisibleToBackward , -and -.PN XIMVisibleToCenter -are not relevant and will not appear in the -.PN XIMFeedback -element of the -.PN XIMText -structure. -.LP -.NH 3 -Event Filtering -.XS -\*(SN Event Filtering -.XE -.LP -Xlib provides the ability for an input method -to register a filter internal to Xlib. -This filter is called by a client (or toolkit) by calling -.PN XFilterEvent -after calling -.PN XNextEvent . -Any client that uses the -.PN XIM -interface should call -.PN XFilterEvent -to allow input methods to process their events without knowledge -of the client's dispatching mechanism. -A client's user interface policy may determine the priority -of event filters with respect to other event-handling mechanisms -(for example, modal grabs). -.LP -Clients may not know how many filters there are, if any, -and what they do. -They may only know if an event has been filtered on return of -.PN XFilterEvent . -Clients should discard filtered events. -.sp -.LP -To filter an event, use -.PN XFilterEvent . -.IN "XFilterEvent" "" "@DEF@" -.sM -.FD 0 -Bool XFilterEvent\^(\^\fIevent\fP\^, \fIw\fP\^) -.br - XEvent *\fIevent\fP\^; -.br - Window \fIw\fP\^; -.FN -.ds Ev event to filter -.IP \fIevent\fP 1i -Specifies the \*(Ev. -.ds Wi for which the filter is to be applied -.IP \fIw\fP 1i -Specifies the window \*(Wi. -.LP -.eM -If the window argument is -.PN None , -.PN XFilterEvent -applies the filter to the window specified in the -.PN XEvent -structure. -The window argument is provided so that layers above Xlib -that do event redirection can indicate to which window an event -has been redirected. -.LP -If -.PN XFilterEvent -returns -.PN True , -then some input method has filtered the event, -and the client should discard the event. -If -.PN XFilterEvent -returns -.PN False , -then the client should continue processing the event. -.LP -If a grab has occurred in the client and -.PN XFilterEvent -returns -.PN True , -the client should ungrab the keyboard. -.NH 3 -Getting Keyboard Input -.XS -\*(SN Getting Keyboard Input -.XE -.LP -To get composed input from an input method, -use -.PN XmbLookupString -or -.PN XwcLookupString . -.IN "XmbLookupString" "" "@DEF@" -.IN "XwcLookupString" "" "@DEF@" -.sM -.FD 0 -int XmbLookupString\^(\^\fIic\fP\^, \fIevent\fP\^, \fIbuffer_return\fP\^, \fIbytes_buffer\fP\^, \fIkeysym_return\fP\^, \fIstatus_return\fP\^) -.br - XIC \fIic\fP\^; -.br - XKeyPressedEvent *\fIevent\fP; -.br - char *\fIbuffer_return\fP\^; -.br - int \fIbytes_buffer\fP\^; -.br - KeySym *\fIkeysym_return\fP\^; -.br - Status *\fIstatus_return\fP\^; -.FN -.FD 0 -int XwcLookupString\^(\^\fIic\fP\^, \fIevent\fP\^, \fIbuffer_return\fP\^, \fIbytes_buffer\fP\^, \fIkeysym_return\fP\^, \fIstatus_return\fP\^) -.br - XIC \fIic\fP\^; -.br - XKeyPressedEvent *\fIevent\fP\^; -.br - wchar_t *\fIbuffer_return\fP\^; -.br - int \fIwchars_buffer\fP\^; -.br - KeySym *\fIkeysym_return\fP\^; -.br - Status *\fIstatus_return\fP\^; -.FN -.IP \fIic\fP 1i -Specifies the input context. -.ds Ev key event to be used -.IP \fIevent\fP 1i -Specifies the \*(Ev. -.IP \fIbuffer_return\fP 1i -Returns a multibyte string or wide character string (if any) -from the input method. -.IP \fIbytes_buffer\fP 1i -.br -.ns -.IP \fIwchars_buffer\fP 1i -Specifies space available in the return buffer. -.IP \fIkeysym_return\fP 1i -Returns the KeySym computed from the event if this argument is not NULL. -.IP \fIstatus_return\fP 1i -Returns a value indicating what kind of data is returned. -.LP -.eM -The -.PN XmbLookupString -and -.PN XwcLookupString -functions return the string from the input method specified -in the buffer_return argument. -If no string is returned, -the buffer_return argument is unchanged. -.LP -The KeySym into which the KeyCode from the event was mapped is returned -in the keysym_return argument if it is non-NULL and the status_return -argument indicates that a KeySym was returned. -If both a string and a KeySym are returned, -the KeySym value does not necessarily correspond to the string returned. -.LP -.PN XmbLookupString -returns the length of the string in bytes, and -.PN XwcLookupString -returns the length of the string in characters. -Both -.PN XmbLookupString -and -.PN XwcLookupString -return text in the encoding of the locale bound to the input method -of the specified input context. -.LP -Each string returned by -.PN XmbLookupString -and -.PN XwcLookupString -begins in the initial state of the encoding of the locale -(if the encoding of the locale is state-dependent). -.NT -To insure proper input processing, -it is essential that the client pass only -.PN KeyPress -events to -.PN XmbLookupString -and -.PN XwcLookupString . -Their behavior when a client passes a -.PN KeyRelease -event is undefined. -.NE -.LP -Clients should check the status_return argument before -using the other returned values. -These two functions both return a value to status_return -that indicates what has been returned in the other arguments. -The possible values returned are: -.TS -lw(1.5i) lw(4.3i). -T{ -.PN XBufferOverflow -T} T{ -The input string to be returned is too large for the supplied buffer_return. -The required size -.Pn ( XmbLookupString -in bytes; -.PN XwcLookupString -in characters) is returned as the value of the function, -and the contents of buffer_return and keysym_return are not modified. -The client should recall the function with the same event -and a buffer of adequate size to obtain the string. -T} -T{ -.PN XLookupNone -T} T{ -No consistent input has been composed so far. -The contents of buffer_return and keysym_return are not modified, -and the function returns zero. -T} -T{ -.PN XLookupChars -T} T{ -Some input characters have been composed. -They are placed in the buffer_return argument, -and the string length is returned as the value of the function. -The string is encoded in the locale bound to the input context. -The content of the keysym_return argument is not modified. -T} -T{ -.PN XLookupKeySym -T} T{ -A KeySym has been returned instead of a string -and is returned in keysym_return. -The content of the buffer_return argument is not modified, -and the function returns zero. -T} -T{ -.PN XLookupBoth -T} T{ -Both a KeySym and a string are returned; -.PN XLookupChars -and -.PN XLookupKeySym -occur simultaneously. -T} -.TE -.LP -It does not make any difference if the input context passed as an argument to -.PN XmbLookupString -and -.PN XwcLookupString -is the one currently in possession of the focus or not. -Input may have been composed within an input context before it lost the focus, -and that input may be returned on subsequent calls to -.PN XmbLookupString -or -.PN XwcLookupString -even though it does not have any more keyboard focus. -.NH 3 -Input Method Conventions -.XS -\*(SN Input Method Conventions -.XE -.LP -The input method architecture is transparent to the client. -However, clients should respect a number of conventions in order -to work properly. -Clients must also be aware of possible effects of synchronization -between input method and library in the case of a remote input server. -.NH 4 -Client Conventions -.XS -\*(SN Client Conventions -.XE -.LP -A well-behaved client (or toolkit) should first query the input method style. -If the client cannot satisfy the requirements of the supported styles -(in terms of geometry management or callbacks), -it should negotiate with the user continuation of the program -or raise an exception or error of some sort. -.NH 4 -Synchronization Conventions -.XS -\*(SN Synchronization Conventions -.XE -.LP -A -.PN KeyPress -event with a KeyCode of zero is used exclusively as a -signal that an input method has composed input that can be returned by -.PN XmbLookupString -or -.PN XwcLookupString . -No other use is made of a -.PN KeyPress -event with KeyCode of zero. -.LP -Such an event may be generated by either a front-end -or a back-end input method in an implementation-dependent manner. -Some possible ways to generate this event include: -.IP \(bu 5 -A synthetic event sent by an input method server -.IP \(bu 5 -An artificial event created by a input method filter and pushed -onto a client's event queue -.IP \(bu 5 -A -.PN KeyPress -event whose KeyCode value is modified by an input method filter -.LP -When callback support is specified by the client, -input methods will not take action unless they explicitly -called back the client and obtained no response -(the callback is not specified or returned invalid data). -.NH 2 -String Constants -.XS -\*(SN String Constants -.XE -.LP -The following symbols for string constants are defined in -.hN X11/Xlib.h . -Although they are shown here with particular macro definitions, -they may be implemented as macros, as global symbols, or as a -mixture of the two. The string pointer value itself -is not significant; clients must not assume that inequality of two -values implies inequality of the actual string data. -.IN "XNVaNestedList" "" "@DEF@" -.IN "XNSeparatorofNestedList "" "@DEF@" -.IN "XNQueryInputStyle" "" "@DEF@" -.IN "XNClientWindow" "" "@DEF@" -.IN "XNInputStyle" "" "@DEF@" -.IN "XNFocusWindow" "" "@DEF@" -.IN "XNResourceName" "" "@DEF@" -.IN "XNResourceClass" "" "@DEF@" -.IN "XNGeometryCallback" "" "@DEF@" -.IN "XNDestroyCallback" "" "@DEF@" -.IN "XNFilterEvents" "" "@DEF@" -.IN "XNPreeditStartCallback" "" "@DEF@" -.IN "XNPreeditDoneCallback" "" "@DEF@" -.IN "XNPreeditDrawCallback" "" "@DEF@" -.IN "XNPreeditCaretCallback" "" "@DEF@" -.IN "XNPreeditStateNotifyCallback" "" "@DEF@" -.IN "XNPreeditAttributes" "" "@DEF@" -.IN "XNStatusStartCallback" "" "@DEF@" -.IN "XNStatusDoneCallback" "" "@DEF@" -.IN "XNStatusDrawCallback" "" "@DEF@" -.IN "XNStatusAttributes" "" "@DEF@" -.IN "XNArea" "" "@DEF@" -.IN "XNAreaNeeded" "" "@DEF@" -.IN "XNSpotLocation" "" "@DEF@" -.IN "XNColormap" "" "@DEF@" -.IN "XNStdColormap" "" "@DEF@" -.IN "XNForeground" "" "@DEF@" -.IN "XNBackground" "" "@DEF@" -.IN "XNBackgroundPixmap" "" "@DEF@" -.IN "XNFontSet" "" "@DEF@" -.IN "XNLineSpace" "" "@DEF@" -.IN "XNCursor" "" "@DEF@" -.TS -lw(.5i) lw(2.75i) lw(2.5i). -T{ -#define -T} T{ -.PN XNVaNestedList -T} T{ -"XNVaNestedList" -T} -T{ -#define -T} T{ -.PN XNSeparatorofNestedList -T} T{ -"separatorofNestedList" -T} -T{ -#define -T} T{ -.PN XNQueryInputStyle -T} T{ -"queryInputStyle" -T} -T{ -#define -T} T{ -.PN XNClientWindow -T} T{ -"clientWindow" -T} -T{ -#define -T} T{ -.PN XNInputStyle -T} T{ -"inputStyle" -T} -T{ -#define -T} T{ -.PN XNFocusWindow -T} T{ -"focusWindow" -T} -T{ -#define -T} T{ -.PN XNResourceName -T} T{ -"resourceName" -T} -T{ -#define -T} T{ -.PN XNResourceClass -T} T{ -"resourceClass" -T} -T{ -#define -T} T{ -.PN XNGeometryCallback -T} T{ -"geometryCallback" -T} -T{ -#define -T} T{ -.PN XNDestroyCallback -T} T{ -"destroyCallback" -T} -T{ -#define -T} T{ -.PN XNFilterEvents -T} T{ -"filterEvents" -T} -T{ -#define -T} T{ -.PN XNPreeditStartCallback -T} T{ -"preeditStartCallback" -T} -T{ -#define -T} T{ -.PN XNPreeditDoneCallback -T} T{ -"preeditDoneCallback" -T} -T{ -#define -T} T{ -.PN XNPreeditDrawCallback -T} T{ -"preeditDrawCallback" -T} -T{ -#define -T} T{ -.PN XNPreeditCaretCallback -T} T{ -"preeditCaretCallback" -T} -T{ -#define -T} T{ -.PN XNPreeditStateNotifyCallback -T} T{ -"preeditStateNotifyCallback" -T} -T{ -#define -T} T{ -.PN XNPreeditAttributes -T} T{ -"preeditAttributes" -T} -.TE -.sp -1 -.TS -lw(.5i) lw(2.75i) lw(2.5i). -T{ -#define -T} T{ -.PN XNStatusStartCallback -T} T{ -"statusStartCallback" -T} -T{ -#define -T} T{ -.PN XNStatusDoneCallback -T} T{ -"statusDoneCallback" -T} -T{ -#define -T} T{ -.PN XNStatusDrawCallback -T} T{ -"statusDrawCallback" -T} -T{ -#define -T} T{ -.PN XNStatusAttributes -T} T{ -"statusAttributes" -T} -T{ -#define -T} T{ -.PN XNArea -T} T{ -"area" -T} -T{ -#define -T} T{ -.PN XNAreaNeeded -T} T{ -"areaNeeded" -T} -T{ -#define -T} T{ -.PN XNSpotLocation -T} T{ -"spotLocation" -T} -T{ -#define -T} T{ -.PN XNColormap -T} T{ -"colorMap" -T} -T{ -#define -T} T{ -.PN XNStdColormap -T} T{ -"stdColorMap" -T} -T{ -#define -T} T{ -.PN XNForeground -T} T{ -"foreground" -T} -T{ -#define -T} T{ -.PN XNBackground -T} T{ -"background" -T} -T{ -#define -T} T{ -.PN XNBackgroundPixmap -T} T{ -"backgroundPixmap" -T} -T{ -#define -T} T{ -.PN XNFontSet -T} T{ -"fontSet" -T} -T{ -#define -T} T{ -.PN XNLineSpace -T} T{ -"lineSpace" -T} -T{ -#define -T} T{ -.PN XNCursor -T} T{ -"cursor" -T} -.TE -.sp -1 -.TS -lw(.5i) lw(2.75i) lw(2.5i). -T{ -#define -T} T{ -.PN XNQueryIMValuesList -T} T{ -"queryIMValuesList" -T} -T{ -#define -T} T{ -.PN XNQueryICValuesList -T} T{ -"queryICValuesList" -T} -T{ -#define -T} T{ -.PN XNStringConversionCallback -T} T{ -"stringConversionCallback" -T} -T{ -#define -T} T{ -.PN XNStringConversion -T} T{ -"stringConversion" -T} -T{ -#define -T} T{ -.PN XNResetState -T} T{ -"resetState" -T} -T{ -#define -T} T{ -.PN XNHotKey -T} T{ -"hotkey" -T} -T{ -#define -T} T{ -.PN XNHotKeyState -T} T{ -"hotkeyState" -T} -T{ -#define -T} T{ -.PN XNPreeditState -T} T{ -"preeditState" -T} -T{ -#define -T} T{ -.PN XNVisiblePosition -T} T{ -"visiblePosition" -T} -T{ -#define -T} T{ -.PN XNR6PreeditCallbackBehavior -T} T{ -"r6PreeditCallback" -T} -.TE -.sp -1 -.IN "XNQueryIMValuesList" "" "@DEF@" -.IN "XNQueryICValuesList" "" "@DEF@" -.IN "XNStringConversionCallback" "" "@DEF@" -.IN "XNStringConversion" "" "@DEF@" -.IN "XNResetState" "" "@DEF@" -.IN "XNHotKey" "" "@DEF@" -.IN "XNHotKeyState" "" "@DEF@" -.IN "XNPreeditState" "" "@DEF@" -.IN "XNVisiblePosition" "" "@DEF@" -.IN "XNR6PreeditCallbackBehavior" "" "@DEF@" -.TS -lw(.5i) lw(2.75i) lw(2.5i). -T{ -#define -T} T{ -.PN XNRequiredCharSet -T} T{ -"requiredCharSet" -T} -T{ -#define -T} T{ -.PN XNQueryOrientation -T} T{ -"queryOrientation" -T} -T{ -#define -T} T{ -.PN XNDirectionalDependentDrawing -T} T{ -"directionalDependentDrawing" -T} -T{ -#define -T} T{ -.PN XNContextualDrawing -T} T{ -"contextualDrawing" -T} -T{ -#define -T} T{ -.PN XNBaseFontName -T} T{ -"baseFontName" -T} -T{ -#define -T} T{ -.PN XNMissingCharSet -T} T{ -"missingCharSet" -T} -T{ -#define -T} T{ -.PN XNDefaultString -T} T{ -"defaultString" -T} -T{ -#define -T} T{ -.PN XNOrientation -T} T{ -"orientation" -T} -T{ -#define -T} T{ -.PN XNFontInfo -T} T{ -"fontInfo" -T} -T{ -#define -T} T{ -.PN XNOMAutomatic -T} T{ -"omAutomatic" -T} -.TE -.IN "XNRequiredCharSet" "" "@DEF@" -.IN "XNQueryOrientation" "" "@DEF@" -.IN "XNDirectionalDependentDrawing" "" "@DEF@" -.IN "XNContextualDrawing" "" "@DEF@" -.IN "XNBaseFontName" "" "@DEF@" -.IN "XNMissingCharSet" "" "@DEF@" -.IN "XNDefaultString" "" "@DEF@" -.IN "XNOrientation" "" "@DEF@" -.IN "XNFontInfo" "" "@DEF@" -.IN "XNOMAutomatic" "" "@DEF@" -.bp diff --git a/doc/xorg-docs/specs/X11/CH14 b/doc/xorg-docs/specs/X11/CH14 deleted file mode 100644 index 34c09da8b..000000000 --- a/doc/xorg-docs/specs/X11/CH14 +++ /dev/null @@ -1,3590 +0,0 @@ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by -.\" Digital Equipment Corporation -.\" -.\" Portions Copyright \(co 1990, 1991 by -.\" Tektronix, Inc. -.\" -.\" Permission to use, copy, modify and distribute this documentation for -.\" any purpose and without fee is hereby granted, provided that the above -.\" copyright notice appears in all copies and that both that copyright notice -.\" and this permission notice appear in all copies, and that the names of -.\" Digital and Tektronix not be used in in advertising or publicity pertaining -.\" to this documentation without specific, written prior permission. -.\" Digital and Tektronix makes no representations about the suitability -.\" of this documentation for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBChapter 14\fP\s-1 - -\s+1\fBInter-Client Communication Functions\fP\s-1 -.sp 2 -.nr H1 14 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.na -.LP -.XS -Chapter 14: Inter-Client Communication Functions -.XE -The \fIInter-Client Communication Conventions Manual\fP, -hereafter referred to as the ICCCM, details the -X Consortium approved conventions that govern inter-client communications. -These conventions ensure peer-to-peer client cooperation in the use -of selections, cut buffers, and shared resources as well as client cooperation -with window and session managers. -For further information, -see the \fIInter-Client Communication Conventions Manual\fP. -.LP -Xlib provides a number of standard properties and programming interfaces -that are ICCCM compliant. -The predefined atoms for some of these properties are defined in the -.hN X11/Xatom.h -header file, where -to avoid name conflicts with user symbols their -.PN #define -name has an XA_ prefix. -For further information about atoms and properties, -see section 4.3. -.LP -Xlib's selection and cut buffer mechanisms provide the primary programming -interfaces by which peer client applications communicate with each other -(see sections 4.5 and 16.6). -The functions discussed in this chapter provide -the primary programming interfaces by which client applications communicate -with their window and session managers as well as share standard colormaps. -.LP -The standard properties that are of special interest for communicating -with window and session managers are: -.IN "Atom" "predefined" -.TS H -lw(2i) lw(1.1i) lw(.4i) lw(2.25i) -lw(2i) lw(1.1i) cw(.4i) lw(2.25i). -_ -.sp 6p -.B -Name Type Format Description -.sp 6p -_ -.TH -.R -T{ -\s-1WM_CLASS\s+1 -T} T{ -\s-1STRING\s+1 -T} T{ -8 -T} T{ -Set by application programs to allow window and session -managers to obtain the application's resources from the resource database. -T} -.sp 6p -T{ -\s-1WM_CLIENT_MACHINE\s+1 -T} T{ -\s-1TEXT\s+1 -T} T{ -T} T{ -The string name of the machine on which the client application is running. -T} -.sp 6p -T{ -\s-1WM_COLORMAP_WINDOWS\s+1 -T} T{ -\s-1WINDOW\s+1 -T} T{ -32 -T} T{ -The list of window IDs that may need a different colormap -from that of their top-level window. -T} -.sp 6p -T{ -\s-1WM_COMMAND\s+1 -T} T{ -\s-1TEXT\s+1 -T} T{ -T} T{ -The command and arguments, null-separated, used to invoke the -application. -T} -.sp 6p -T{ -\s-1WM_HINTS\s+1 -T} T{ -\s-1WM_HINTS\s+1 -T} T{ -32 -T} T{ -Additional hints set by the client for use by the window manager. -The C type of this property is -.PN XWMHints . -T} -.sp 6p -T{ -\s-1WM_ICON_NAME\s+1 -T} T{ -\s-1TEXT\s+1 -T} T{ -T} T{ -The name to be used in an icon. -T} -.sp 6p -T{ -\s-1WM_ICON_SIZE\s+1 -T} T{ -\s-1WM_ICON_SIZE\s+1 -T} T{ -32 -T} T{ -The window manager may set this property on the root window to -specify the icon sizes it supports. -The C type of this property is -.PN XIconSize . -T} -.sp 6p -T{ -\s-1WM_NAME\s+1 -T} T{ -\s-1TEXT\s+1 -T} T{ -T} T{ -The name of the application. -T} -.sp 6p -T{ -\s-1WM_NORMAL_HINTS\s+1 -T} T{ -\s-1WM_SIZE_HINTS\s+1 -T} T{ -32 -T} T{ -Size hints for a window in its normal state. -The C type of this property is -.PN XSizeHints . -T} -.sp 6p -T{ -\s-1WM_PROTOCOLS\s+1 -T} T{ -\s-1ATOM\s+1 -T} T{ -32 -T} T{ -List of atoms that identify the communications protocols between the -client and window manager in which the client is willing to participate. -T} -.sp 6p -T{ -\s-1WM_STATE\s+1 -T} T{ -\s-1WM_STATE\s+1 -T} T{ -32 -T} T{ -Intended for communication between window and session managers only. -T} -.sp 6p -T{ -\s-1WM_TRANSIENT_FOR\s+1 -T} T{ -\s-1WINDOW\s+1 -T} T{ -32 -T} T{ -Set by application programs to indicate to the window manager that a transient -top-level window, such as a dialog box. -T} -.sp 6p -_ -.TE -.LP -The remainder of this chapter discusses: -.IP \(bu 5 -Client to window manager communication -.IP \(bu 5 -Client to session manager communication -.IP \(bu 5 -Standard colormaps -.NH 2 -Client to Window Manager Communication -.XS -\*(SN Client to Window Manager Communication -.XE -.LP -This section discusses how to: -.IP \(bu 5 -Manipulate top-level windows -.IP \(bu 5 -Convert string lists -.IP \(bu 5 -Set and read text properties -.IP \(bu 5 -Set and read the WM_NAME property -.IP \(bu 5 -Set and read the WM_ICON_NAME property -.IP \(bu 5 -Set and read the WM_HINTS property -.IP \(bu 5 -Set and read the WM_NORMAL_HINTS property -.IP \(bu 5 -Set and read the WM_CLASS property -.IP \(bu 5 -Set and read the WM_TRANSIENT_FOR property -.IP \(bu 5 -Set and read the WM_PROTOCOLS property -.IP \(bu 5 -Set and read the WM_COLORMAP_WINDOWS property -.IP \(bu 5 -Set and read the WM_ICON_SIZE property -.IP \(bu 5 -Use window manager convenience functions -.NH 3 -Manipulating Top-Level Windows -.XS -\*(SN Manipulating Top-Level Windows -.XE -.LP -Xlib provides functions that you can use to change the visibility or size -of top-level windows (that is, those that were created as children -of the root window). -Note that the subwindows that you create are ignored by window managers. -Therefore, -you should use the basic window functions described in chapter 3 -to manipulate your application's subwindows. -.LP -To request that a top-level window be iconified, use -.PN XIconifyWindow . -.IN "XIconifyWindow" "" "@DEF@" -.sM -.FD 0 -Status XIconifyWindow\^(\^\fIdisplay\fP, \fIw\fP, \fIscreen_number\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP; -.br - int \fIscreen_number\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIscreen_number\fP 1i -Specifies the appropriate screen number on the host server. -.LP -.eM -The -.PN XIconifyWindow -function sends a WM_CHANGE_STATE -.PN ClientMessage -event with a format of 32 and a first data element of -.PN IconicState -(as described in section 4.1.4 of the -\fIInter-Client Communication Conventions Manual\fP) -and a window of w -to the root window of the specified screen -with an event mask set to -.PN SubstructureNotifyMask | -.PN SubstructureRedirectMask . -Window managers may elect to receive this message and -if the window is in its normal state, -may treat it as a request to change the window's state from normal to iconic. -If the WM_CHANGE_STATE property cannot be interned, -.PN XIconifyWindow -does not send a message and returns a zero status. -It returns a nonzero status if the client message is sent successfully; -otherwise, it returns a zero status. -.sp -.LP -To request that a top-level window be withdrawn, use -.PN XWithdrawWindow . -.IN "XWithdrawWindow" "" "@DEF@" -.sM -.FD 0 -Status XWithdrawWindow\^(\^\fIdisplay\fP, \fIw\fP, \fIscreen_number\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - int \fIscreen_number\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIscreen_number\fP 1i -Specifies the appropriate screen number on the host server. -.LP -.eM -The -.PN XWithdrawWindow -function unmaps the specified window -and sends a synthetic -.PN UnmapNotify -event to the root window of the specified screen. -Window managers may elect to receive this message -and may treat it as a request to change the window's state to withdrawn. -When a window is in the withdrawn state, -neither its normal nor its iconic representations is visible. -It returns a nonzero status if the -.PN UnmapNotify -event is successfully sent; -otherwise, it returns a zero status. -.LP -.PN XWithdrawWindow -can generate a -.PN BadWindow -error. -.sp -.LP -To request that a top-level window be reconfigured, use -.PN XReconfigureWMWindow . -.IN "XReconfigureWMWindow" "" "@DEF@" -.sM -.FD 0 -Status XReconfigureWMWindow\^(\^\fIdisplay\fP, \fIw\fP, \fIscreen_number\fP, \ -\fIvalue_mask\fP, \fIvalues\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - int \fIscreen_number\fP\^; -.br - unsigned int \fIvalue_mask\fP\^; -.br - XWindowChanges *\fIvalues\fP; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIscreen_number\fP 1i -Specifies the appropriate screen number on the host server. -.IP \fIvalue_mask\fP 1i -Specifies which values are to be set using information in -the values structure. -This mask is the bitwise inclusive OR of the valid configure window values bits. -.IP \fIvalues\fP 1i -Specifies the -.PN XWindowChanges -structure. -.LP -.eM -The -.PN XReconfigureWMWindow -function issues a -.PN ConfigureWindow -request on the specified top-level window. -If the stacking mode is changed and the request fails with a -.PN BadMatch -error, -the error is trapped by Xlib and a synthetic -.PN ConfigureRequestEvent -containing the same configuration parameters is sent to the root -of the specified window. -Window managers may elect to receive this event -and treat it as a request to reconfigure the indicated window. -It returns a nonzero status if the request or event is successfully sent; -otherwise, it returns a zero status. -.LP -.PN XReconfigureWMWindow -can generate -.PN BadValue -and -.PN BadWindow -errors. -.NH 3 -Converting String Lists -.XS -\*(SN Converting String Lists -.XE -.LP -Many of the text properties allow a variety of types and formats. -Because the data stored in these properties are not -simple null-terminated strings, an -.PN XTextProperty -structure is used to describe the encoding, type, and length of the text -as well as its value. -The -.PN XTextProperty -structure contains: -.IN "XTextProperty" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { - unsigned char *value; /* property data */ - Atom encoding; /* type of property */ - int format; /* 8, 16, or 32 */ - unsigned long nitems; /* number of items in value */ -} XTextProperty; -.De -.LP -.eM -Xlib provides functions to convert localized text to or from encodings -that support the inter-client communication conventions for text. -In addition, functions are provided for converting between lists of pointers -to character strings and text properties in the STRING encoding. -.LP -The functions for localized text return a signed integer error status -that encodes -.PN Success -as zero, specific error conditions as negative numbers, and partial conversion -as a count of unconvertible characters. -.LP -.IN "XICCEncodingStyle" "" "@DEF@" -.sM -.TS -lw(.5i) lw(2i) lw(2.5i). -T{ -#define -T} T{ -.PN XNoMemory -T} T{ -\-1 -T} -T{ -#define -T} T{ -.PN XLocaleNotSupported -T} T{ -\-2 -T} -T{ -#define -T} T{ -.PN XConverterNotFound -T} T{ -\-3 -T} -.TE -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef enum { - XStringStyle, /* STRING */ - XCompoundTextStyle, /* COMPOUND_TEXT */ - XTextStyle, /* text in owner's encoding (current locale) */ - XStdICCTextStyle /* STRING, else COMPOUND_TEXT */ -} XICCEncodingStyle; -.De -.LP -.eM -.sp -.LP -To convert a list of text strings to an -.PN XTextProperty -structure, use -.PN XmbTextListToTextProperty -or -.PN XwcTextListToTextProperty . -.IN "XmbTextListToTextProperty" "" "@DEF@" -.IN "XwcTextListToTextProperty" "" "@DEF@" -.sM -.FD 0 -int XmbTextListToTextProperty\^(\^\fIdisplay\fP\^, \fIlist\fP\^, \fIcount\fP\^, \fIstyle\fP\^, \fItext_prop_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - char **\fIlist\fP\^; -.br - int \fIcount\fP\^; -.br - XICCEncodingStyle \fIstyle\fP\^; -.br - XTextProperty *\fItext_prop_return\fP\^; -.FN -.FD 0 -int XwcTextListToTextProperty\^(\^\fIdisplay\fP\^, \fIlist\fP\^, \fIcount\fP\^, \fIstyle\fP\^, \fItext_prop_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - wchar_t **\fIlist\fP\^; -.br - int \fIcount\fP\^; -.br - XICCEncodingStyle \fIstyle\fP\^; -.br - XTextProperty *\fItext_prop_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIlist\fP 1i -Specifies a list of null-terminated character strings. -.IP \fIcount\fP 1i -Specifies the number of strings specified. -.IP \fIstyle\fP 1i -Specifies the manner in which the property is encoded. -.IP \fItext_prop_return\fP 1i -Returns the -.PN XTextProperty -structure. -.LP -.eM -The -.PN XmbTextListToTextProperty -and -.PN XwcTextListToTextProperty -functions set the specified -.PN XTextProperty -value to a set of null-separated elements representing the concatenation -of the specified list of null-terminated text strings. -A final terminating null is stored at the end of the value field -of text_prop_return but is not included in the nitems member. -.LP -The functions set the encoding field of text_prop_return to an -.PN Atom -for the specified display -naming the encoding determined by the specified style -and convert the specified text list to this encoding for storage in -the text_prop_return value field. -If the style -.PN XStringStyle -or -.PN XCompoundTextStyle -is specified, -this encoding is ``STRING'' or ``COMPOUND_TEXT'', respectively. -If the style -.PN XTextStyle -is specified, -this encoding is the encoding of the current locale. -If the style -.PN XStdICCTextStyle -is specified, -this encoding is ``STRING'' if the text is fully convertible to STRING, -else ``COMPOUND_TEXT''. -.LP -If insufficient memory is available for the new value string, -the functions return -.PN XNoMemory . -If the current locale is not supported, -the functions return -.PN XLocaleNotSupported . -In both of these error cases, -the functions do not set text_prop_return. -.LP -To determine if the functions are guaranteed not to return -.PN XLocaleNotSupported , -use -.PN XSupportsLocale . -.LP -If the supplied text is not fully convertible to the specified encoding, -the functions return the number of unconvertible characters. -Each unconvertible character is converted to an implementation-defined and -encoding-specific default string. -Otherwise, the functions return -.PN Success . -Note that full convertibility to all styles except -.PN XStringStyle -is guaranteed. -.LP -To free the storage for the value field, use -.PN XFree . -.sp -.LP -To obtain a list of text strings from an -.PN XTextProperty -structure, use -.PN XmbTextPropertyToTextList -or -.PN XwcTextPropertyToTextList . -.IN "XmbTextPropertyToTextList" "" "@DEF@" -.IN "XwcTextPropertyToTextList" "" "@DEF@" -.sM -.FD 0 -int XmbTextPropertyToTextList\^(\^\fIdisplay\fP\^, \fItext_prop\fP\^, \fIlist_return\fP\^, \fIcount_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XTextProperty *\fItext_prop\fP\^; -.br - char ***\fIlist_return\fP\^; -.br - int *\fIcount_return\fP\^; -.FN -.FD 0 -int XwcTextPropertyToTextList\^(\^\fIdisplay\fP\^, \fItext_prop\fP\^, \fIlist_return\fP\^, \fIcount_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XTextProperty *\fItext_prop\fP\^; -.br - wchar_t ***\fIlist_return\fP\^; -.br - int *\fIcount_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fItext_prop\fP 1i -Specifies the -.PN XTextProperty -structure to be used. -.IP \fIlist_return\fP 1i -Returns a list of null-terminated character strings. -.ds Cn strings -.IP \fIcount_return\fP 1i -Returns the number of \*(Cn. -.LP -.eM -The -.PN XmbTextPropertyToTextList -and -.PN XwcTextPropertyToTextList -functions return a list of text strings in the current locale representing the -null-separated elements of the specified -.PN XTextProperty -structure. -The data in text_prop must be format 8. -.LP -Multiple elements of the property (for example, the strings in a disjoint -text selection) are separated by a null byte. -The contents of the property are not required to be null-terminated; -any terminating null should not be included in text_prop.nitems. -.LP -If insufficient memory is available for the list and its elements, -.PN XmbTextPropertyToTextList -and -.PN XwcTextPropertyToTextList -return -.PN XNoMemory . -If the current locale is not supported, -the functions return -.PN XLocaleNotSupported . -Otherwise, if the encoding field of text_prop is not convertible -to the encoding of the current locale, -the functions return -.PN XConverterNotFound . -For supported locales, -existence of a converter from COMPOUND_TEXT, STRING -or the encoding of the current locale is guaranteed if -.PN XSupportsLocale -returns -.PN True -for the current locale (but the actual text -may contain unconvertible characters). -Conversion of other encodings is implementation-dependent. -In all of these error cases, -the functions do not set any return values. -.LP -Otherwise, -.PN XmbTextPropertyToTextList -and -.PN XwcTextPropertyToTextList -return the list of null-terminated text strings to list_return -and the number of text strings to count_return. -.LP -If the value field of text_prop is not fully convertible to the encoding of -the current locale, -the functions return the number of unconvertible characters. -Each unconvertible character is converted to a string in the -current locale that is specific to the current locale. -To obtain the value of this string, -use -.PN XDefaultString . -Otherwise, -.PN XmbTextPropertyToTextList -and -.PN XwcTextPropertyToTextList -return -.PN Success . -.LP -To free the storage for the list and its contents returned by -.PN XmbTextPropertyToTextList , -use -.PN XFreeStringList . -To free the storage for the list and its contents returned by -.PN XwcTextPropertyToTextList , -use -.PN XwcFreeStringList . -.sp -.LP -To free the in-memory data associated with the specified -wide character string list, use -.PN XwcFreeStringList . -.IN "XwcFreeStringList" "" "@DEF@" -.sM -.FD 0 -void XwcFreeStringList\^(\^\fIlist\fP\^) -.br - wchar_t **\fIlist\fP\^; -.FN -.IP \fIlist\fP 1i -Specifies the list of strings to be freed. -.LP -.eM -The -.PN XwcFreeStringList -function frees memory allocated by -.PN XwcTextPropertyToTextList . -.sp -.LP -To obtain the default string for text conversion in the current locale, -use -.PN XDefaultString . -.IN "XDefaultString" "" "@DEF@" -.sM -.FD 0 -char *XDefaultString\^(\|) -.FN -.LP -.eM -The -.PN XDefaultString -function returns the default string used by Xlib for text conversion -(for example, in -.PN XmbTextPropertyToTextList ). -The default string is the string in the current locale that is output -when an unconvertible character is found during text conversion. -If the string returned by -.PN XDefaultString -is the empty string ("\^"), -no character is output in the converted text. -.PN XDefaultString -does not return NULL. -.LP -The string returned by -.PN XDefaultString -is independent of the default string for text drawing; -see -.PN XCreateFontSet -to obtain the default string for an -.PN XFontSet . -.LP -The behavior when an invalid codepoint is supplied to any Xlib function is -undefined. -.LP -The returned string is null-terminated. -It is owned by Xlib and should not be modified or freed by the client. -It may be freed after the current locale is changed. -Until freed, it will not be modified by Xlib. -.sp -.LP -To set the specified list of strings in the STRING encoding to a -.PN XTextProperty -structure, use -.PN XStringListToTextProperty . -.IN "XStringListToTextProperty" "" "@DEF@" -.sM -.FD 0 -Status XStringListToTextProperty\^(\^\fIlist\fP, \fIcount\fP, \ -\fItext_prop_return\fP\^) -.br - char **\fIlist\fP\^; -.br - int \fIcount\fP\^; -.br - XTextProperty *\fItext_prop_return\fP\^; -.FN -.IP \fIlist\fP 1i -Specifies a list of null-terminated character strings. -.ds Cn strings -.IP \fIcount\fP 1i -Specifies the number of \*(Cn. -.IP \fItext_prop_return\fP 1i -Returns the -.PN XTextProperty -structure. -.LP -.eM -The -.PN XStringListToTextProperty -function sets the specified -.PN XTextProperty -to be of type STRING (format 8) with a value representing the -concatenation of the specified list of null-separated character strings. -An extra null byte (which is not included in the nitems member) -is stored at the end of the value field of text_prop_return. -The strings are assumed (without verification) to be in the STRING encoding. -If insufficient memory is available for the new value string, -.PN XStringListToTextProperty -does not set any fields in the -.PN XTextProperty -structure and returns a zero status. -Otherwise, it returns a nonzero status. -To free the storage for the value field, use -.PN XFree . -.sp -.LP -To obtain a list of strings from a specified -.PN XTextProperty -structure in the STRING encoding, use -.PN XTextPropertyToStringList . -.IN "XTextPropertyToStringList" "" "@DEF@" -.sM -.FD 0 -Status XTextPropertyToStringList\^(\^\fItext_prop\fP, \fIlist_return\fP, \ -\fIcount_return\fP\^) -.br - XTextProperty *\fItext_prop\fP\^; -.br - char ***\fIlist_return\fP\^; -.br - int *\fIcount_return\fP\^; -.FN -.IP \fItext_prop\fP 1i -Specifies the -.PN XTextProperty -structure to be used. -.IP \fIlist_return\fP 1i -Returns a list of null-terminated character strings. -.ds Cn strings -.IP \fIcount_return\fP 1i -Returns the number of \*(Cn. -.LP -.eM -The -.PN XTextPropertyToStringList -function returns a list of strings representing the null-separated elements -of the specified -.PN XTextProperty -structure. -The data in text_prop must be of type STRING and format 8. -Multiple elements of the property -(for example, the strings in a disjoint text selection) -are separated by NULL (encoding 0). -The contents of the property are not null-terminated. -If insufficient memory is available for the list and its elements, -.PN XTextPropertyToStringList -sets no return values and returns a zero status. -Otherwise, it returns a nonzero status. -To free the storage for the list and its contents, use -.PN XFreeStringList . -.sp -.LP -To free the in-memory data associated with the specified string list, use -.PN XFreeStringList . -.IN "XFreeStringList" "" "@DEF@" -.sM -.FD 0 -void XFreeStringList\^(\^\fIlist\fP\^) -.br - char **\fIlist\fP\^; -.FN -.IP \fIlist\fP 1i -Specifies the list of strings to be freed. -.LP -.eM -The -.PN XFreeStringList -function releases memory allocated by -.PN XmbTextPropertyToTextList -and -.PN XTextPropertyToStringList -and the missing charset list allocated by -.PN XCreateFontSet . -.NH 3 -Setting and Reading Text Properties -.XS -\*(SN Setting and Reading Text Properties -.XE -.LP -Xlib provides two functions that you can use to set and read -the text properties for a given window. -You can use these functions to set and read those properties of type TEXT -(WM_NAME, WM_ICON_NAME, WM_COMMAND, and WM_CLIENT_MACHINE). -In addition, -Xlib provides separate convenience functions that you can use to set each -of these properties. -For further information about these convenience functions, -see sections 14.1.4, 14.1.5, 14.2.1, and 14.2.2, respectively. -.sp -.LP -To set one of a window's text properties, use -.PN XSetTextProperty . -.IN "XSetTextProperty" "" "@DEF@" -.sM -.FD 0 -void XSetTextProperty\^(\^\fIdisplay\fP, \fIw\fP, \fItext_prop\fP, \ -\fIproperty\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - XTextProperty *\fItext_prop\fP\^; -.br - Atom \fIproperty\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fItext_prop\fP 1i -Specifies the -.PN XTextProperty -structure to be used. -.IP \fIproperty\fP 1i -Specifies the property name. -.LP -.eM -The -.PN XSetTextProperty -function replaces the existing specified property for the named window -with the data, type, format, and number of items determined -by the value field, the encoding field, the format field, -and the nitems field, respectively, of the specified -.PN XTextProperty -structure. -If the property does not already exist, -.PN XSetTextProperty -sets it for the specified window. -.LP -.PN XSetTextProperty -can generate -.PN BadAlloc , -.PN BadAtom , -.PN BadValue , -and -.PN BadWindow -errors. -.sp -.LP -To read one of a window's text properties, use -.PN XGetTextProperty . -.IN "XGetTextProperty" "" "@DEF@" -.sM -.FD 0 -Status XGetTextProperty\^(\^\fIdisplay\fP, \fIw\fP, \fItext_prop_return\fP, \ -\fIproperty\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - XTextProperty *\fItext_prop_return\fP\^; -.br - Atom \fIproperty\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fItext_prop_return\fP 1i -Returns the -.PN XTextProperty -structure. -.IP \fIproperty\fP 1i -Specifies the property name. -.LP -.eM -The -.PN XGetTextProperty -function reads the specified property from the window -and stores the data in the returned -.PN XTextProperty -structure. -It stores the data in the value field, -the type of the data in the encoding field, -the format of the data in the format field, -and the number of items of data in the nitems field. -An extra byte containing null (which is not included in the nitems member) -is stored at the end of the value field of text_prop_return. -The particular interpretation of the property's encoding -and data as text is left to the calling application. -If the specified property does not exist on the window, -.PN XGetTextProperty -sets the value field to NULL, -the encoding field to -.PN None , -the format field to zero, -and the nitems field to zero. -.LP -If it was able to read and store the data in the -.PN XTextProperty -structure, -.PN XGetTextProperty -returns a nonzero status; -otherwise, it returns a zero status. -.LP -.PN XGetTextProperty -can generate -.PN BadAtom -and -.PN BadWindow -errors. -.NH 3 -Setting and Reading the WM_NAME Property -.XS -\*(SN Setting and Reading the WM_NAME Property -.XE -.LP -Xlib provides convenience functions that you can use to set and read -the WM_NAME property for a given window. -.sp -.LP -To set a window's WM_NAME property with the supplied convenience function, use -.PN XSetWMName . -.IN "XSetWMName" "" "@DEF@" -.sM -.FD 0 -void XSetWMName\^(\^\fIdisplay\fP, \fIw\fP, \fItext_prop\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - XTextProperty *\fItext_prop\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fItext_prop\fP 1i -Specifies the -.PN XTextProperty -structure to be used. -.LP -.eM -The -.PN XSetWMName -convenience function calls -.PN XSetTextProperty -to set the WM_NAME property. -.sp -.LP -To read a window's WM_NAME property with the supplied convenience function, use -.PN XGetWMName . -.IN "XGetWMName" "" "@DEF@" -.sM -.FD 0 -Status XGetWMName\^(\^\fIdisplay\fP, \fIw\fP, \fItext_prop_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - XTextProperty *\fItext_prop_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fItext_prop_return\fP 1i -Returns the -.PN XTextProperty -structure. -.LP -.eM -The -.PN XGetWMName -convenience function calls -.PN XGetTextProperty -to obtain the WM_NAME property. -It returns a nonzero status on success; -otherwise, it returns a zero status. -.LP -The following two functions have been superseded by -.PN XSetWMName -and -.PN XGetWMName , -respectively. -You can use these additional convenience functions -for window names that are encoded as STRING properties. -.sp -.LP -To assign a name to a window, use -.PN XStoreName . -.IN "Window" "name" -.IN "XStoreName" "" "@DEF@" -.sM -.FD 0 -XStoreName\^(\^\fIdisplay\fP, \fIw\fP\^, \fIwindow_name\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - char *\fIwindow_name\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIwindow_name\fP 1i -Specifies the window name, -which should be a null-terminated string. -.LP -.eM -The -.PN XStoreName -function assigns the name passed to window_name to the specified window. -A window manager can display the window name in some prominent -place, such as the title bar, to allow users to identify windows easily. -Some window managers may display a window's name in the window's icon, -although they are encouraged to use the window's icon name -if one is provided by the application. -If the string is not in the Host Portable Character Encoding, -the result is implementation-dependent. -.LP -.PN XStoreName -can generate -.PN BadAlloc -and -.PN BadWindow -errors. -.LP -.sp -To get the name of a window, use -.PN XFetchName . -.IN "XFetchName" "" "@DEF@" -.sM -.FD 0 -Status XFetchName\^(\^\fIdisplay\fP, \fIw\fP\^, \fIwindow_name_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - char **\fIwindow_name_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIwindow_name_return\fP 1i -Returns the window name, which is a null-terminated string. -.LP -.eM -The -.PN XFetchName -function returns the name of the specified window. -If it succeeds, -it returns a nonzero status; -otherwise, no name has been set for the window, -and it returns zero. -If the WM_NAME property has not been set for this window, -.PN XFetchName -sets window_name_return to NULL. -If the data returned by the server is in the Latin Portable Character Encoding, -then the returned string is in the Host Portable Character Encoding. -Otherwise, the result is implementation-dependent. -When finished with it, a client must free -the window name string using -.PN XFree . -.LP -.PN XFetchName -can generate a -.PN BadWindow -error. -.NH 3 -Setting and Reading the WM_ICON_NAME Property -.XS -\*(SN Setting and Reading the WM_ICON_NAME Property -.XE -.LP -Xlib provides convenience functions that you can use to set and read -the WM_ICON_NAME property for a given window. -.LP -.sp -To set a window's WM_ICON_NAME property, -use -.PN XSetWMIconName . -.IN "XSetWMIconName" "" "@DEF@" -.sM -.FD 0 -void XSetWMIconName\^(\^\fIdisplay\fP, \fIw\fP, \fItext_prop\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - XTextProperty *\fItext_prop\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fItext_prop\fP 1i -Specifies the -.PN XTextProperty -structure to be used. -.LP -.eM -The -.PN XSetWMIconName -convenience function calls -.PN XSetTextProperty -to set the WM_ICON_NAME property. -.sp -.LP -To read a window's WM_ICON_NAME property, -use -.PN XGetWMIconName . -.IN "XGetWMIconName" "" "@DEF@" -.sM -.FD 0 -Status XGetWMIconName\^(\^\fIdisplay\fP, \fIw\fP, \fItext_prop_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - XTextProperty *\fItext_prop_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fItext_prop_return\fP 1i -Returns the -.PN XTextProperty -structure. -.LP -.eM -The -.PN XGetWMIconName -convenience function calls -.PN XGetTextProperty -to obtain the WM_ICON_NAME property. -It returns a nonzero status on success; -otherwise, it returns a zero status. -.LP -The next two functions have been superseded by -.PN XSetWMIconName -and -.PN XGetWMIconName , -respectively. -You can use these additional convenience functions -for window names that are encoded as STRING properties. -.sp -.LP -.sp -To set the name to be displayed in a window's icon, use -.PN XSetIconName . -.IN "Window" "icon name" -.IN "XSetIconName" "" "@DEF@" -.sM -.FD 0 -XSetIconName\^(\^\fIdisplay\fP, \fIw\fP\^, \fIicon_name\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - char *\fIicon_name\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIicon_name\fP 1i -Specifies the icon name, -which should be a null-terminated string. -.LP -.eM -If the string is not in the Host Portable Character Encoding, -the result is implementation-dependent. -.PN XSetIconName -can generate -.PN BadAlloc -and -.PN BadWindow -errors. -.LP -.sp -To get the name a window wants displayed in its icon, use -.PN XGetIconName . -.IN "XGetIconName" "" "@DEF@" -.sM -.FD 0 -Status XGetIconName\^(\^\fIdisplay\fP, \fIw\fP\^, \fIicon_name_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - char **\fIicon_name_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIicon_name_return\fP 1i -Returns the window's icon name, -which is a null-terminated string. -.LP -.eM -The -.PN XGetIconName -function returns the name to be displayed in the specified window's icon. -If it succeeds, it returns a nonzero status; otherwise, -if no icon name has been set for the window, -it returns zero. -If you never assigned a name to the window, -.PN XGetIconName -sets icon_name_return to NULL. -If the data returned by the server is in the Latin Portable Character Encoding, -then the returned string is in the Host Portable Character Encoding. -Otherwise, the result is implementation-dependent. -When finished with it, a client must free -the icon name string using -.PN XFree . -.LP -.PN XGetIconName -can generate a -.PN BadWindow -error. -.NH 3 -Setting and Reading the WM_HINTS Property -.XS -\*(SN Setting and Reading the WM_HINTS Property -.XE -.LP -Xlib provides functions that you can use to set and read -the WM_HINTS property for a given window. -These functions use the flags and the -.PN XWMHints -structure, as defined in the -.hN X11/Xutil.h -header file. -.sp -.LP -To allocate an -.PN XWMHints -structure, use -.PN XAllocWMHints . -.IN "XAllocWMHints" "" "@DEF@" -.sM -.FD 0 -XWMHints *XAllocWMHints\^(\|) -.FN -.LP -.eM -The -.PN XAllocWMHints -function allocates and returns a pointer to an -.PN XWMHints -structure. -Note that all fields in the -.PN XWMHints -structure are initially set to zero. -If insufficient memory is available, -.PN XAllocWMHints -returns NULL. -To free the memory allocated to this structure, -use -.PN XFree . -.LP -The -.PN XWMHints -structure contains: -.LP -.sM -/* Window manager hints mask bits */ -.TS -lw(.5i) lw(2.5i) lw(2.5i). -T{ -#define -T} T{ -.PN InputHint -T} T{ -(1L << 0) -T} -T{ -#define -T} T{ -.PN StateHint -T} T{ -(1L << 1) -T} -T{ -#define -T} T{ -.PN IconPixmapHint -T} T{ -(1L << 2) -T} -T{ -#define -T} T{ -.PN IconWindowHint -T} T{ -(1L << 3) -T} -T{ -#define -T} T{ -.PN IconPositionHint -T} T{ -(1L << 4) -T} -T{ -#define -T} T{ -.PN IconMaskHint -T} T{ -(1L << 5) -T} -T{ -#define -T} T{ -.PN WindowGroupHint -T} T{ -(1L << 6) -T} -T{ -#define -T} T{ -.PN UrgencyHint -T} T{ -(1L << 8) -T} -T{ -#define -T} T{ -.PN AllHints -T} T{ -(InputHint|StateHint|IconPixmapHint| -.br -IconWindowHint|IconPositionHint| -.br -IconMaskHint|WindowGroupHint) -T} -.TE -.IN "XWMHints" "" "@DEF@" -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -/* Values */ - -typedef struct { - long flags; /* marks which fields in this structure are defined */ - Bool input; /* does this application rely on the window manager to - get keyboard input? */ - int initial_state; /* see below */ - Pixmap icon_pixmap; /* pixmap to be used as icon */ - Window icon_window; /* window to be used as icon */ - int icon_x, icon_y; /* initial position of icon */ - Pixmap icon_mask; /* pixmap to be used as mask for icon_pixmap */ - XID window_group; /* id of related window group */ - /* this structure may be extended in the future */ -} XWMHints; -.De -.LP -.eM -The input member is used to communicate to the window manager the input focus -model used by the application. -Applications that expect input but never explicitly set focus to any -of their subwindows (that is, use the push model of focus management), -such as X Version 10 style applications that use real-estate -driven focus, should set this member to -.PN True . -Similarly, applications -that set input focus to their subwindows only when it is given to their -top-level window by a window manager should also set this member to -.PN True . -Applications that manage their own input focus by explicitly setting -focus to one of their subwindows whenever they want keyboard input -(that is, use the pull model of focus management) should set this member to -.PN False . -Applications that never expect any keyboard input also should set this member -to -.PN False . -.LP -Pull model window managers should make it possible for push model -applications to get input by setting input focus to the top-level windows of -applications whose input member is -.PN True . -Push model window managers should -make sure that pull model applications do not break them -by resetting input focus to -.PN PointerRoot -when it is appropriate (for example, whenever an application whose -input member is -.PN False -sets input focus to one of its subwindows). -.LP -The definitions for the initial_state flag are: -.TS -lw(.5i) lw(2i) lw(.2i) lw(2.8i). -T{ -#define -T} T{ -.PN WithdrawnState -T} T{ -0 -T} T{ -T} -T{ -#define -T} T{ -.PN NormalState -T} T{ -1 -T} T{ -/* most applications start this way */ -T} -T{ -#define -T} T{ -.PN IconicState -T} T{ -3 -T} T{ -/* application wants to start as an icon */ -T} -.TE -The icon_mask specifies which pixels of the icon_pixmap should be used as the -icon. -This allows for nonrectangular icons. -Both icon_pixmap and icon_mask must be bitmaps. -The icon_window lets an application provide a window for use as an icon -for window managers that support such use. -The window_group lets you specify that this window belongs to a group -of other windows. -For example, if a single application manipulates multiple -top-level windows, this allows you to provide enough -information that a window manager can iconify all of the windows -rather than just the one window. -.LP -The -.PN UrgencyHint -flag, if set in the flags field, indicates that the client deems the window -contents to be urgent, requiring the timely response of the user. The -window manager will make some effort to draw the user's attention to this -window while this flag is set. The client must provide some means by which the -user can cause the urgency flag to be cleared (either mitigating -the condition that made the window urgent or merely shutting off the alarm) -or the window to be withdrawn. -.LP -.sp -To set a window's WM_HINTS property, use -.PN XSetWMHints . -.IN "XSetWMHints" "" "@DEF@" -.sM -.FD 0 -XSetWMHints\^(\^\fIdisplay\fP, \fIw\fP, \fIwmhints\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - XWMHints *\fIwmhints\fP\^; - -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIwmhints\fP 1i -Specifies the -.PN XWMHints -structure to be used. -.LP -.eM -The -.PN XSetWMHints -function sets the window manager hints that include icon information and location, -the initial state of the window, and whether the application relies on the -window manager to get keyboard input. -.LP -.PN XSetWMHints -can generate -.PN BadAlloc -and -.PN BadWindow -errors. -.LP -.sp -To read a window's WM_HINTS property, use -.PN XGetWMHints . -.IN "XGetWMHints" "" "@DEF@" -.sM -.FD 0 -XWMHints *XGetWMHints\^(\^\fIdisplay\fP, \fIw\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.LP -.eM -The -.PN XGetWMHints -function reads the window manager hints and -returns NULL if no WM_HINTS property was set on the window -or returns a pointer to an -.PN XWMHints -structure if it succeeds. -When finished with the data, -free the space used for it by calling -.PN XFree . -.LP -.PN XGetWMHints -can generate a -.PN BadWindow -error. -.NH 3 -Setting and Reading the WM_NORMAL_HINTS Property -.XS -\*(SN Setting and Reading the WM_NORMAL_HINTS Property -.XE -.LP -Xlib provides functions that you can use to set or read -the WM_NORMAL_HINTS property for a given window. -The functions use the flags and the -.PN XSizeHints -structure, as defined in the -.hN X11/Xutil.h -header file. -.LP -The size of the -.PN XSizeHints -structure may grow in future releases, as new components are -added to support new ICCCM features. -Passing statically allocated instances of this structure into -Xlib may result in memory corruption when running against a -future release of the library. -As such, it is recommended that only dynamically allocated -instances of the structure be used. -.sp -.LP -To allocate an -.PN XSizeHints -structure, use -.PN XAllocSizeHints . -.IN "XAllocSizeHints" "" "@DEF@" -.sM -.FD 0 -XSizeHints *XAllocSizeHints\^(\|) -.FN -.LP -.eM -The -.PN XAllocSizeHints -function allocates and returns a pointer to an -.PN XSizeHints -structure. -Note that all fields in the -.PN XSizeHints -structure are initially set to zero. -If insufficient memory is available, -.PN XAllocSizeHints -returns NULL. -To free the memory allocated to this structure, -use -.PN XFree . -.LP -The -.PN XSizeHints -structure contains: -.LP -.sM -/* Size hints mask bits */ -.TS -lw(.5i) lw(1.1i) lw(1.5i) lw(3.1i). -T{ -#define -T} T{ -.PN USPosition -T} T{ -(1L << 0) -T} T{ -/* user specified x, y */ -T} -T{ -#define -T} T{ -.PN USSize -T} T{ -(1L << 1) -T} T{ -/* user specified width, height */ -T} -T{ -#define -T} T{ -.PN PPosition -T} T{ -(1L << 2) -T} T{ -/* program specified position */ -T} -T{ -#define -T} T{ -.PN PSize -T} T{ -(1L << 3) -T} T{ -/* program specified size */ -T} -T{ -#define -T} T{ -.PN PMinSize -T} T{ -(1L << 4) -T} T{ -/* program specified minimum size */ -T} -T{ -#define -T} T{ -.PN PMaxSize -T} T{ -(1L << 5) -T} T{ -/* program specified maximum size */ -T} -T{ -#define -T} T{ -.PN PResizeInc -T} T{ -(1L << 6) -T} T{ -/* program specified resize increments */ -T} -T{ -#define -T} T{ -.PN PAspect -T} T{ -(1L << 7) -T} T{ -/* program specified min and max aspect ratios */ -T} -T{ -#define -T} T{ -.PN PBaseSize -T} T{ -(1L << 8) -T} -T{ -#define -T} T{ -.PN PWinGravity -T} T{ -(1L << 9) -T} -T{ -#define -T} T{ -.PN PAllHints -T} T{ -(PPosition|PSize| -.br -PMinSize|PMaxSize| -.br -PResizeInc|PAspect) -T} T{ -T} -.TE -.IN "XSizeHints" "" "@DEF@" -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -/* Values */ - -typedef struct { - long flags; /* marks which fields in this structure are defined */ - int x, y; /* Obsolete */ - int width, height; /* Obsolete */ - int min_width, min_height; - int max_width, max_height; - int width_inc, height_inc; - struct { - int x; /* numerator */ - int y; /* denominator */ - } min_aspect, max_aspect; - int base_width, base_height; - int win_gravity; - /* this structure may be extended in the future */ -} XSizeHints; -.De -.LP -.eM -The x, y, width, and height members are now obsolete -and are left solely for compatibility reasons. -The min_width and min_height members specify the -minimum window size that still allows the application to be useful. -The max_width and max_height members specify the maximum window size. -The width_inc and height_inc members define an arithmetic progression of -sizes (minimum to maximum) into which the window prefers to be resized. -The min_aspect and max_aspect members are expressed -as ratios of x and y, -and they allow an application to specify the range of aspect -ratios it prefers. -The base_width and base_height members define the desired size of the window. -The window manager will interpret the position of the window -and its border width to position the point of the outer rectangle -of the overall window specified by the win_gravity member. -The outer rectangle of the window includes any borders or decorations -supplied by the window manager. -In other words, -if the window manager decides to place the window where the client asked, -the position on the parent window's border named by the win_gravity -will be placed where the client window would have been placed -in the absence of a window manager. -.LP -Note that use of the -.PN PAllHints -macro is highly discouraged. -.sp -.LP -To set a window's WM_NORMAL_HINTS property, use -.PN XSetWMNormalHints . -.IN "XSetWMNormalHints" "" "@DEF@" -.sM -.FD 0 -void XSetWMNormalHints\^(\^\fIdisplay\fP, \fIw\fP, \fIhints\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - XSizeHints *\fIhints\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIhints\fP 1i -Specifies the size hints for the window in its normal state. -.LP -.eM -The -.PN XSetWMNormalHints -function replaces the size hints for the WM_NORMAL_HINTS property -on the specified window. -If the property does not already exist, -.PN XSetWMNormalHints -sets the size hints for the WM_NORMAL_HINTS property on the specified window. -The property is stored with a type of WM_SIZE_HINTS and a format of 32. -.LP -.PN XSetWMNormalHints -can generate -.PN BadAlloc -and -.PN BadWindow -errors. -.sp -.LP -To read a window's WM_NORMAL_HINTS property, use -.PN XGetWMNormalHints . -.IN "XGetWMNormalHints" "" "@DEF@" -.sM -.FD 0 -Status XGetWMNormalHints\^(\^\fIdisplay\fP, \fIw\fP, \fIhints_return\fP, \ -\fIsupplied_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - XSizeHints *\fIhints_return\fP\^; -.br - long *\fIsupplied_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIhints_return\fP 1i -Returns the size hints for the window in its normal state. -.IP \fIsupplied_return\fP 1i -Returns the hints that were supplied by the user. -.LP -.eM -The -.PN XGetWMNormalHints -function returns the size hints stored in the WM_NORMAL_HINTS property -on the specified window. -If the property is of type WM_SIZE_HINTS, is of format 32, -and is long enough to contain either an old (pre-ICCCM) -or new size hints structure, -.PN XGetWMNormalHints -sets the various fields of the -.PN XSizeHints -structure, sets the supplied_return argument to the list of fields -that were supplied by the user (whether or not they contained defined values), -and returns a nonzero status. -Otherwise, it returns a zero status. -.LP -If -.PN XGetWMNormalHints -returns successfully and a pre-ICCCM size hints property is read, -the supplied_return argument will contain the following bits: -.LP -.Ds -(USPosition|USSize|PPosition|PSize|PMinSize| - PMaxSize|PResizeInc|PAspect) -.De -.LP -If the property is large enough to contain the base size -and window gravity fields as well, -the supplied_return argument will also contain the following bits: -.LP -.Ds -PBaseSize|PWinGravity -.De -.LP -.PN XGetWMNormalHints -can generate a -.PN BadWindow -error. -.sp -.LP -To set a window's WM_SIZE_HINTS property, use -.PN XSetWMSizeHints . -.IN "XSetWMSizeHints" "" "@DEF@" -.sM -.FD 0 -void XSetWMSizeHints\^(\^\fIdisplay\fP, \fIw\fP, \fIhints\fP, \fIproperty\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - XSizeHints *\fIhints\fP\^; -.br - Atom \fIproperty\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIhints\fP 1i -Specifies the -.PN XSizeHints -structure to be used. -.IP \fIproperty\fP 1i -Specifies the property name. -.LP -.eM -The -.PN XSetWMSizeHints -function replaces the size hints for the specified property -on the named window. -If the specified property does not already exist, -.PN XSetWMSizeHints -sets the size hints for the specified property -on the named window. -The property is stored with a type of WM_SIZE_HINTS and a format of 32. -To set a window's normal size hints, -you can use the -.PN XSetWMNormalHints -function. -.LP -.PN XSetWMSizeHints -can generate -.PN BadAlloc , -.PN BadAtom , -and -.PN BadWindow -errors. -.sp -.LP -To read a window's WM_SIZE_HINTS property, use -.PN XGetWMSizeHints . -.IN "XGetWMSizeHints" "" "@DEF@" -.sM -.FD 0 -Status XGetWMSizeHints\^(\^\fIdisplay\fP, \fIw\fP, \fIhints_return\fP, \ -\fIsupplied_return\fP, \fIproperty\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - XSizeHints *\fIhints_return\fP\^; -.br - long *\fIsupplied_return\fP\^; -.br - Atom \fIproperty\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIhints_return\fP 1i -Returns the -.PN XSizeHints -structure. -.IP \fIsupplied_return\fP 1i -Returns the hints that were supplied by the user. -.IP \fIproperty\fP 1i -Specifies the property name. -.LP -.eM -The -.PN XGetWMSizeHints -function returns the size hints stored in the specified property -on the named window. -If the property is of type WM_SIZE_HINTS, is of format 32, -and is long enough to contain either an old (pre-ICCCM) -or new size hints structure, -.PN XGetWMSizeHints -sets the various fields of the -.PN XSizeHints -structure, sets the supplied_return argument to the -list of fields that were supplied by the user -(whether or not they contained defined values), -and returns a nonzero status. -Otherwise, it returns a zero status. -To get a window's normal size hints, -you can use the -.PN XGetWMNormalHints -function. -.LP -If -.PN XGetWMSizeHints -returns successfully and a pre-ICCCM size hints property is read, -the supplied_return argument will contain the following bits: -.LP -.Ds -(USPosition|USSize|PPosition|PSize|PMinSize| - PMaxSize|PResizeInc|PAspect) -.De -.LP -If the property is large enough to contain the base size -and window gravity fields as well, -the supplied_return argument will also contain the following bits: -.LP -.Ds -PBaseSize|PWinGravity -.De -.LP -.PN XGetWMSizeHints -can generate -.PN BadAtom -and -.PN BadWindow -errors. -.NH 3 -Setting and Reading the WM_CLASS Property -.XS -\*(SN Setting and Reading the WM_CLASS Property -.XE -.LP -Xlib provides functions that you can use to set and get -the WM_CLASS property for a given window. -These functions use the -.PN XClassHint -structure, which is defined in the -.hN X11/Xutil.h -header file. -.sp -.LP -To allocate an -.PN XClassHint -structure, use -.PN XAllocClassHint . -.IN "XAllocClassHint" "" "@DEF@" -.sM -.FD 0 -XClassHint *XAllocClassHint\^(\|) -.FN -.LP -.eM -The -.PN XAllocClassHint -function allocates and returns a pointer to an -.PN XClassHint -structure. -Note that the pointer fields in the -.PN XClassHint -structure are initially set to NULL. -If insufficient memory is available, -.PN XAllocClassHint -returns NULL. -To free the memory allocated to this structure, -use -.PN XFree . -.LP -The -.PN XClassHint -contains: -.LP -.sM -.IN "XClassHint" "" "@DEF@" -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - char *res_name; - char *res_class; -} XClassHint; -.De -.LP -.eM -The res_name member contains the application name, -and the res_class member contains the application class. -Note that the name set in this property may differ from the name set as WM_NAME. -That is, WM_NAME specifies what should be displayed in the title bar and, -therefore, can contain temporal information (for example, the name of -a file currently in an editor's buffer). -On the other hand, -the name specified as part of WM_CLASS is the formal name of the application -that should be used when retrieving the application's resources from the -resource database. -.LP -.sp -To set a window's WM_CLASS property, use -.PN XSetClassHint . -.IN "XSetClassHint" "" "@DEF@" -.sM -.FD 0 -XSetClassHint\^(\^\fIdisplay\fP, \fIw\fP, \fIclass_hints\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - XClassHint *\fIclass_hints\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIclass_hints\fP 1i -Specifies the -.PN XClassHint -structure that is to be used. -.LP -.eM -The -.PN XSetClassHint -function sets the class hint for the specified window. -If the strings are not in the Host Portable Character Encoding, -the result is implementation-dependent. -.LP -.PN XSetClassHint -can generate -.PN BadAlloc -and -.PN BadWindow -errors. -.LP -.sp -To read a window's WM_CLASS property, use -.PN XGetClassHint . -.IN "XGetClassHint" "" "@DEF@" -.sM -.FD 0 -Status XGetClassHint\^(\^\fIdisplay\fP, \fIw\fP, \fIclass_hints_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP; -.br - XClassHint *\fIclass_hints_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIclass_hints_return\fP 1i -Returns the -.PN XClassHint -structure. -.LP -.eM -The -.PN XGetClassHint -function returns the class hint of the specified window to the members -of the supplied structure. -If the data returned by the server is in the Latin Portable Character Encoding, -then the returned strings are in the Host Portable Character Encoding. -Otherwise, the result is implementation-dependent. -It returns a nonzero status on success; -otherwise, it returns a zero status. -To free res_name and res_class when finished with the strings, -use -.PN XFree -on each individually. -.LP -.PN XGetClassHint -can generate a -.PN BadWindow -error. -.NH 3 -Setting and Reading the WM_TRANSIENT_FOR Property -.XS -\*(SN Setting and Reading the WM_TRANSIENT_FOR Property -.XE -.LP -Xlib provides functions that you can use to set and read -the WM_TRANSIENT_FOR property for a given window. -.LP -.sp -To set a window's WM_TRANSIENT_FOR property, use -.PN XSetTransientForHint . -.IN "XSetTransientForHint" "" "@DEF@" -.sM -.FD 0 -XSetTransientForHint\^(\^\fIdisplay\fP, \fIw\fP, \fIprop_window\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - Window \fIprop_window\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIprop_window\fP 1i -Specifies the window that the WM_TRANSIENT_FOR property is to be set to. -.LP -.eM -The -.PN XSetTransientForHint -function sets the WM_TRANSIENT_FOR property of the specified window to the -specified prop_window. -.LP -.PN XSetTransientForHint -can generate -.PN BadAlloc -and -.PN BadWindow -errors. -.LP -.sp -To read a window's WM_TRANSIENT_FOR property, use -.PN XGetTransientForHint . -.IN "XGetTransientForHint" "" "@DEF@" -.sM -.FD 0 -Status XGetTransientForHint\^(\^\fIdisplay\fP, \fIw\fP, \fIprop_window_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - Window *\fIprop_window_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIprop_window_return\fP 1i -Returns the WM_TRANSIENT_FOR property of the specified window. -.LP -.eM -The -.PN XGetTransientForHint -function returns the WM_TRANSIENT_FOR property for the specified window. -It returns a nonzero status on success; -otherwise, it returns a zero status. -.LP -.PN XGetTransientForHint -can generate a -.PN BadWindow -error. -.NH 3 -Setting and Reading the WM_PROTOCOLS Property -.XS -\*(SN Setting and Reading the WM_PROTOCOLS Property -.XE -.LP -Xlib provides functions that you can use to set and read -the WM_PROTOCOLS property for a given window. -.LP -.sp -To set a window's WM_PROTOCOLS property, use -.PN XSetWMProtocols . -.IN "XSetWMProtocols" "" "@DEF@" -.sM -.FD 0 -Status XSetWMProtocols\^(\^\fIdisplay\fP, \fIw\fP, \fIprotocols\fP, \ -\fIcount\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - Atom *\fIprotocols\fP\^; -.br - int \fIcount\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIprotocols\fP 1i -Specifies the list of protocols. -.ds Cn protocols in the list -.IP \fIcount\fP 1i -Specifies the number of \*(Cn. -.LP -.eM -The -.PN XSetWMProtocols -function replaces the WM_PROTOCOLS property on the specified window -with the list of atoms specified by the protocols argument. -If the property does not already exist, -.PN XSetWMProtocols -sets the WM_PROTOCOLS property on the specified window -to the list of atoms specified by the protocols argument. -The property is stored with a type of ATOM and a format of 32. -If it cannot intern the WM_PROTOCOLS atom, -.PN XSetWMProtocols -returns a zero status. -Otherwise, it returns a nonzero status. -.LP -.PN XSetWMProtocols -can generate -.PN BadAlloc -and -.PN BadWindow -errors. -.sp -.LP -To read a window's WM_PROTOCOLS property, use -.PN XGetWMProtocols . -.IN "XGetWMProtocols" "" "@DEF@" -.sM -.FD 0 -Status XGetWMProtocols\^(\^\fIdisplay\fP, \fIw\fP, \fIprotocols_return\fP, \ -\fIcount_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - Atom **\fIprotocols_return\fP\^; -.br - int *\fIcount_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIprotocols_return\fP 1i -Returns the list of protocols. -.ds Cn protocols in the list -.IP \fIcount_return\fP 1i -Returns the number of \*(Cn. -.LP -.eM -The -.PN XGetWMProtocols -function returns the list of atoms stored in the WM_PROTOCOLS property -on the specified window. -These atoms describe window manager protocols in which the owner -of this window is willing to participate. -If the property exists, is of type ATOM, is of format 32, -and the atom WM_PROTOCOLS can be interned, -.PN XGetWMProtocols -sets the protocols_return argument to a list of atoms, -sets the count_return argument to the number of elements in the list, -and returns a nonzero status. -Otherwise, it sets neither of the return arguments -and returns a zero status. -To release the list of atoms, use -.PN XFree . -.LP -.PN XGetWMProtocols -can generate a -.PN BadWindow -error. -.NH 3 -Setting and Reading the WM_COLORMAP_WINDOWS Property -.XS -\*(SN Setting and Reading the WM_COLORMAP_WINDOWS Property -.XE -.LP -Xlib provides functions that you can use to set and read -the WM_COLORMAP_WINDOWS property for a given window. -.sp -.LP -To set a window's WM_COLORMAP_WINDOWS property, use -.PN XSetWMColormapWindows . -.IN "XSetWMColormapWindows" "" "@DEF@" -.sM -.FD 0 -Status XSetWMColormapWindows\^(\^\fIdisplay\fP, \fIw\fP, \ -\fIcolormap_windows\fP, \fIcount\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - Window *\fIcolormap_windows\fP\^; -.br - int \fIcount\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIcolormap_windows\fP 1i -Specifies the list of windows. -.ds Cn windows in the list -.IP \fIcount\fP 1i -Specifies the number of \*(Cn. -.LP -.eM -The -.PN XSetWMColormapWindows -function replaces the WM_COLORMAP_WINDOWS property on the specified -window with the list of windows specified by the colormap_windows argument. -If the property does not already exist, -.PN XSetWMColormapWindows -sets the WM_COLORMAP_WINDOWS property on the specified -window to the list of windows specified by the colormap_windows argument. -The property is stored with a type of WINDOW and a format of 32. -If it cannot intern the WM_COLORMAP_WINDOWS atom, -.PN XSetWMColormapWindows -returns a zero status. -Otherwise, it returns a nonzero status. -.LP -.PN XSetWMColormapWindows -can generate -.PN BadAlloc -and -.PN BadWindow -errors. -.sp -.LP -To read a window's WM_COLORMAP_WINDOWS property, use -.PN XGetWMColormapWindows . -.IN "XGetWMColormapWindows" "" "@DEF@" -.sM -.FD 0 -Status XGetWMColormapWindows\^(\^\fIdisplay\fP, \fIw\fP, \ -\fIcolormap_windows_return\fP, \fIcount_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - Window **\fIcolormap_windows_return\fP\^; -.br - int *\fIcount_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIcolormap_windows_return\fP 1i -Returns the list of windows. -.ds Cn windows in the list -.IP \fIcount_return\fP 1i -Returns the number of \*(Cn. -.LP -.eM -The -.PN XGetWMColormapWindows -function returns the list of window identifiers stored -in the WM_COLORMAP_WINDOWS property on the specified window. -These identifiers indicate the colormaps that the window manager -may need to install for this window. -If the property exists, is of type WINDOW, is of format 32, -and the atom WM_COLORMAP_WINDOWS can be interned, -.PN XGetWMColormapWindows -sets the windows_return argument to a list of window identifiers, -sets the count_return argument to the number of elements in the list, -and returns a nonzero status. -Otherwise, it sets neither of the return arguments -and returns a zero status. -To release the list of window identifiers, use -.PN XFree . -.LP -.PN XGetWMColormapWindows -can generate a -.PN BadWindow -error. -.NH 3 -Setting and Reading the WM_ICON_SIZE Property -.XS -\*(SN Setting and Reading the WM_ICON_SIZE Property -.XE -.LP -Xlib provides functions that you can use to set and read -the WM_ICON_SIZE property for a given window. -These functions use the -.PN XIconSize -.IN "XIconSize" -structure, which is defined in the -.hN X11/Xutil.h -header file. -.sp -.LP -To allocate an -.PN XIconSize -structure, use -.PN XAllocIconSize . -.IN "XAllocIconSize" "" "@DEF@" -.sM -.FD 0 -XIconSize *XAllocIconSize\^(\|) -.FN -.LP -.eM -The -.PN XAllocIconSize -function allocates and returns a pointer to an -.PN XIconSize -structure. -Note that all fields in the -.PN XIconSize -structure are initially set to zero. -If insufficient memory is available, -.PN XAllocIconSize -returns NULL. -To free the memory allocated to this structure, -use -.PN XFree . -.LP -The -.PN XIconSize -structure contains: -.LP -.sM -.IN "XIconSize" "" "@DEF@" -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { - int min_width, min_height; - int max_width, max_height; - int width_inc, height_inc; -} XIconSize; -.De -.LP -.eM -The width_inc and height_inc members define an arithmetic progression of -sizes (minimum to maximum) that represent the supported icon sizes. -.LP -.sp -To set a window's WM_ICON_SIZE property, use -.PN XSetIconSizes . -.IN "XSetIconSizes" "" "@DEF@" -.sM -.FD 0 -XSetIconSizes\^(\^\fIdisplay\fP, \fIw\fP, \fIsize_list\fP, \fIcount\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - XIconSize *\fIsize_list\fP\^; -.br - int \fIcount\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIsize_list\fP 1i -Specifies the size list. -.IP \fIcount\fP 1i -Specifies the number of items in the size list. -.LP -.eM -The -.PN XSetIconSizes -function is used only by window managers to set the supported icon sizes. -.LP -.PN XSetIconSizes -can generate -.PN BadAlloc -and -.PN BadWindow -errors. -.LP -.sp -To read a window's WM_ICON_SIZE property, use -.PN XGetIconSizes . -.IN "XGetIconSizes" "" "@DEF@" -.sM -.FD 0 -Status XGetIconSizes\^(\^\fIdisplay\fP, \fIw\fP, \fIsize_list_return\fP, \fIcount_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - XIconSize **\fIsize_list_return\fP\^; -.br - int *\fIcount_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIsize_list_return\fP 1i -Returns the size list. -.IP \fIcount_return\fP 1i -Returns the number of items in the size list. -.LP -.eM -The -.PN XGetIconSizes -function returns zero if a window manager has not set icon sizes; -otherwise, it returns nonzero. -.PN XGetIconSizes -should be called by an application that -wants to find out what icon sizes would be most appreciated by the -window manager under which the application is running. -The application -should then use -.PN XSetWMHints -to supply the window manager with an icon pixmap or window in one of the -supported sizes. -To free the data allocated in size_list_return, use -.PN XFree . -.LP -.PN XGetIconSizes -can generate a -.PN BadWindow -error. -.NH 3 -Using Window Manager Convenience Functions -.XS -\*(SN Using Window Manager Convenience Functions -.XE -.LP -The -.PN XmbSetWMProperties -function stores the standard set of window manager properties, -with text properties in standard encodings -for internationalized text communication. -The standard window manager properties for a given window are -WM_NAME, WM_ICON_NAME, WM_HINTS, WM_NORMAL_HINTS, WM_CLASS, -WM_COMMAND, WM_CLIENT_MACHINE, and WM_LOCALE_NAME. -.IN "XmbSetWMProperties" "" "@DEF@" -.sM -.FD 0 -void XmbSetWMProperties\^(\^\fIdisplay\fP\^, \fIw\fP\^, \fIwindow_name\fP\^, \fIicon_name\fP\^, \fIargv\fP\^, \fIargc\fP\^, -.br - \fInormal_hints\fP\^, \fIwm_hints\fP\^, \fIclass_hints\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - char *\fIwindow_name\fP\^; -.br - char *\fIicon_name\fP\^; -.br - char *\fIargv\fP\^[]; -.br - int \fIargc\fP\^; -.br - XSizeHints *\fInormal_hints\fP\^; -.br - XWMHints *\fIwm_hints\fP\^; -.br - XClassHint *\fIclass_hints\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIwindow_name\fP 1i -Specifies the window name, -which should be a null-terminated string. -.IP \fIicon_name\fP 1i -Specifies the icon name, -which should be a null-terminated string. -.IP \fIargv\fP 1i -Specifies the application's argument list. -.IP \fIargc\fP 1i -Specifies the number of arguments. -.IP \fIhints\fP 1i -Specifies the size hints for the window in its normal state. -.IP \fIwm_hints\fP 1i -Specifies the -.PN XWMHints -structure to be used. -.IP \fIclass_hints\fP 1i -Specifies the -.PN XClassHint -structure to be used. -.LP -.eM -The -.PN XmbSetWMProperties -convenience function provides a simple programming interface -for setting those essential window properties that are used -for communicating with other clients -(particularly window and session managers). -.LP -If the window_name argument is non-NULL, -.PN XmbSetWMProperties -sets the WM_NAME property. -If the icon_name argument is non-NULL, -.PN XmbSetWMProperties -sets the WM_ICON_NAME property. -The window_name and icon_name arguments are null-terminated strings -in the encoding of the current locale. -If the arguments can be fully converted to the STRING encoding, -the properties are created with type ``STRING''; -otherwise, the arguments are converted to Compound Text, -and the properties are created with type ``COMPOUND_TEXT''. -.LP -If the normal_hints argument is non-NULL, -.PN XmbSetWMProperties -calls -.PN XSetWMNormalHints , -which sets the WM_NORMAL_HINTS property (see section 14.1.7). -If the wm_hints argument is non-NULL, -.PN XmbSetWMProperties -calls -.PN XSetWMHints , -which sets the WM_HINTS property (see section 14.1.6). -.LP -If the argv argument is non-NULL, -.PN XmbSetWMProperties -sets the WM_COMMAND property from argv and argc. -An argc of zero indicates a zero-length command. -.LP -The hostname of the machine is stored using -.PN XSetWMClientMachine -(see section 14.2.2). -.LP -If the class_hints argument is non-NULL, -.PN XmbSetWMProperties -sets the WM_CLASS property. -If the res_name member in the -.PN XClassHint -structure is set to the NULL pointer and the RESOURCE_NAME -environment variable is set, -the value of the environment variable is substituted for res_name. -If the res_name member is NULL, -the environment variable is not set, and argv and argv[0] are set, -then the value of argv[0], stripped of any directory prefixes, -is substituted for res_name. -.LP -It is assumed that the supplied class_hints.res_name and argv, -the RESOURCE_NAME environment variable, and the hostname of the machine -are in the encoding of the locale announced for the LC_CTYPE category -(on POSIX-compliant systems, the LC_CTYPE, else LANG environment variable). -The corresponding WM_CLASS, WM_COMMAND, and WM_CLIENT_MACHINE properties -are typed according to the local host locale announcer. -No encoding conversion is performed prior to storage in the properties. -.LP -For clients that need to process the property text in a locale, -.PN XmbSetWMProperties -sets the WM_LOCALE_NAME property to be the name of the current locale. -The name is assumed to be in the Host Portable Character Encoding -and is converted to STRING for storage in the property. -.LP -.PN XmbSetWMProperties -can generate -.PN BadAlloc -and -.PN BadWindow -errors. -.sp -.LP -To set a window's standard window manager properties -with strings in client-specified encodings, use -.PN XSetWMProperties . -The standard window manager properties for a given window are -WM_NAME, WM_ICON_NAME, WM_HINTS, WM_NORMAL_HINTS, WM_CLASS, -WM_COMMAND, and WM_CLIENT_MACHINE. -.IN "XSetWMProperties" "" "@DEF@" -.sM -.FD 0 -void XSetWMProperties\^(\^\fIdisplay\fP, \fIw\fP, \fIwindow_name\fP, \ -\fIicon_name\fP, \fIargv\fP, \fIargc\fP, \fInormal_hints\fP, \fIwm_hints\fP, \ -\fIclass_hints\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - XTextProperty *\fIwindow_name\fP\^; -.br - XTextProperty *\fIicon_name\fP\^; -.br - char **\fIargv\fP\^; -.br - int \fIargc\fP\^; -.br - XSizeHints *\fInormal_hints\fP\^; -.br - XWMHints *\fIwm_hints\fP\^; -.br - XClassHint *\fIclass_hints\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIwindow_name\fP 1i -Specifies the window name, -which should be a null-terminated string. -.IP \fIicon_name\fP 1i -Specifies the icon name, -which should be a null-terminated string. -.IP \fIargv\fP 1i -Specifies the application's argument list. -.IP \fIargc\fP 1i -Specifies the number of arguments. -.IP \fInormal_hints\fP 1i -Specifies the size hints for the window in its normal state. -.IP \fIwm_hints\fP 1i -Specifies the -.PN XWMHints -structure to be used. -.IP \fIclass_hints\fP 1i -Specifies the -.PN XClassHint -structure to be used. -.LP -.eM -The -.PN XSetWMProperties -convenience function provides a single programming interface -for setting those essential window properties that are used -for communicating with other clients (particularly window and session -managers). -.LP -If the window_name argument is non-NULL, -.PN XSetWMProperties -calls -.PN XSetWMName , -which, in turn, sets the WM_NAME property (see section 14.1.4). -If the icon_name argument is non-NULL, -.PN XSetWMProperties -calls -.PN XSetWMIconName , -which sets the WM_ICON_NAME property (see section 14.1.5). -If the argv argument is non-NULL, -.PN XSetWMProperties -calls -.PN XSetCommand , -which sets the WM_COMMAND property (see section 14.2.1). -Note that an argc of zero is allowed to indicate a zero-length command. -Note also that the hostname of this machine is stored using -.PN XSetWMClientMachine -(see section 14.2.2). -.LP -If the normal_hints argument is non-NULL, -.PN XSetWMProperties -calls -.PN XSetWMNormalHints , -which sets the WM_NORMAL_HINTS property (see section 14.1.7). -If the wm_hints argument is non-NULL, -.PN XSetWMProperties -calls -.PN XSetWMHints , -which sets the WM_HINTS property (see section 14.1.6). -.LP -If the class_hints argument is non-NULL, -.PN XSetWMProperties -calls -.PN XSetClassHint , -which sets the WM_CLASS property (see section 14.1.8). -If the res_name member in the -.PN XClassHint -structure is set to the NULL pointer and the RESOURCE_NAME environment -variable is set, -then the value of the environment variable is substituted for res_name. -If the res_name member is NULL, -the environment variable is not set, -and argv and argv[0] are set, -then the value of argv[0], stripped of -any directory prefixes, is substituted for res_name. -.LP -.PN XSetWMProperties -can generate -.PN BadAlloc -and -.PN BadWindow -errors. -.NH 2 -Client to Session Manager Communication -.XS -\*(SN Client to Session Manager Communication -.XE -.LP -This section discusses how to: -.IP \(bu 5 -Set and read the WM_COMMAND property -.IP \(bu 5 -Set and read the WM_CLIENT_MACHINE property -.NH 3 -Setting and Reading the WM_COMMAND Property -.XS -\*(SN Setting and Reading the WM_COMMAND Property -.XE -.LP -Xlib provides functions that you can use to set and read -the WM_COMMAND property for a given window. -.sp -.LP -To set a window's WM_COMMAND property, use -.PN XSetCommand . -.IN "XSetCommand" "" "@DEF@" -.sM -.FD 0 -XSetCommand\^(\^\fIdisplay\fP, \fIw\fP, \fIargv\fP, \fIargc\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - char **\fIargv\fP\^; -.br - int \fIargc\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIargv\fP 1i -Specifies the application's argument list. -.IP \fIargc\fP 1i -Specifies the number of arguments. -.LP -.eM -The -.PN XSetCommand -function sets the command and arguments used to invoke the -application. -(Typically, argv is the argv array of your main program.) -If the strings are not in the Host Portable Character Encoding, -the result is implementation-dependent. -.LP -.PN XSetCommand -can generate -.PN BadAlloc -and -.PN BadWindow -errors. -.sp -.LP -To read a window's WM_COMMAND property, use -.PN XGetCommand . -.IN "XGetCommand" "" "@DEF@" -.sM -.FD 0 -Status XGetCommand\^(\^\fIdisplay\fP, \fIw\fP, \fIargv_return\fP, \ -\fIargc_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - char ***\fIargv_return\fP\^; -.br - int *\fIargc_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIargv_return\fP 1i -Returns the application's argument list. -.IP \fIargc_return\fP 1i -Returns the number of arguments returned. -.LP -.eM -The -.PN XGetCommand -function reads the WM_COMMAND property from the specified window -and returns a string list. -If the WM_COMMAND property exists, -it is of type STRING and format 8. -If sufficient memory can be allocated to contain the string list, -.PN XGetCommand -fills in the argv_return and argc_return arguments -and returns a nonzero status. -Otherwise, it returns a zero status. -If the data returned by the server is in the Latin Portable Character Encoding, -then the returned strings are in the Host Portable Character Encoding. -Otherwise, the result is implementation-dependent. -To free the memory allocated to the string list, use -.PN XFreeStringList . -.NH 3 -Setting and Reading the WM_CLIENT_MACHINE Property -.XS -\*(SN Setting and Reading the WM_CLIENT_MACHINE Property -.XE -.LP -Xlib provides functions that you can use to set and read -the WM_CLIENT_MACHINE property for a given window. -.sp -.LP -To set a window's WM_CLIENT_MACHINE property, use -.PN XSetWMClientMachine . -.IN "XSetWMClientMachine" "" "@DEF@" -.sM -.FD 0 -void XSetWMClientMachine\^(\^\fIdisplay\fP, \fIw\fP, \fItext_prop\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - XTextProperty *\fItext_prop\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fItext_prop\fP 1i -Specifies the -.PN XTextProperty -structure to be used. -.LP -.eM -The -.PN XSetWMClientMachine -convenience function calls -.PN XSetTextProperty -to set the WM_CLIENT_MACHINE property. -.sp -.LP -To read a window's WM_CLIENT_MACHINE property, use -.PN XGetWMClientMachine . -.IN "XGetWMClientMachine" "" "@DEF@" -.sM -.FD 0 -Status XGetWMClientMachine\^(\^\fIdisplay\fP, \fIw\fP, \fItext_prop_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - XTextProperty *\fItext_prop_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fItext_prop_return\fP 1i -Returns the -.PN XTextProperty -structure. -.LP -.eM -The -.PN XGetWMClientMachine -convenience function performs an -.PN XGetTextProperty -on the WM_CLIENT_MACHINE property. -It returns a nonzero status on success; -otherwise, it returns a zero status. -.NH 2 -Standard Colormaps -.XS -\*(SN Standard Colormaps -.XE -.LP -Applications with color palettes, smooth-shaded drawings, or digitized -images demand large numbers of colors. -In addition, these applications often require an efficient mapping -from color triples to pixel values that display the appropriate colors. -.LP -As an example, consider a three-dimensional display program that wants -to draw a smoothly shaded sphere. -At each pixel in the image of the sphere, -the program computes the intensity and color of light -reflected back to the viewer. -The result of each computation is a triple of red, green, and blue (RGB) -coefficients in the range 0.0 to 1.0. -To draw the sphere, the program needs a colormap that provides a -large range of uniformly distributed colors. -The colormap should be arranged so that the program can -convert its RGB triples into pixel values very quickly, -because drawing the entire sphere requires many such -conversions. -.LP -On many current workstations, -the display is limited to 256 or fewer colors. -Applications must allocate colors carefully, -not only to make sure they cover the entire range they need -but also to make use of as many of the available colors as possible. -On a typical X display, -many applications are active at once. -Most workstations have only one hardware look-up table for colors, -so only one application colormap can be installed at a given time. -The application using the installed colormap is displayed correctly, -and the other applications go technicolor and are -displayed with false colors. -.LP -As another example, consider a user who is running an -image processing program to display earth-resources data. -The image processing program needs a colormap set up with 8 reds, -8 greens, and 4 blues, for a total of 256 colors. -Because some colors are already in use in the default colormap, -the image processing program allocates and installs a new colormap. -.LP -The user decides to alter some of the colors in the image -by invoking a color palette program to mix and choose colors. -The color palette program also needs a -colormap with eight reds, eight greens, and four blues, so just like -the image processing program, it must allocate and -install a new colormap. -.LP -Because only one colormap can be installed at a time, -the color palette may be displayed incorrectly -whenever the image processing program is active. -Conversely, whenever the palette program is active, -the image may be displayed incorrectly. -The user can never match or compare colors in the palette and image. -Contention for colormap resources can be reduced if applications -with similar color needs share colormaps. -.LP -The image processing program and the color palette program -could share the same colormap if there existed a convention that described -how the colormap was set up. -Whenever either program was active, -both would be displayed correctly. -.LP -The standard colormap properties define a set of commonly used -colormaps. -Applications that share these colormaps and conventions display -true colors more often and provide a better interface to the user. -.LP -Standard colormaps allow applications to share commonly used color -resources. -This allows many applications to be displayed in true colors -simultaneously, even when each application needs an entirely filled -colormap. -.LP -Several standard colormaps are described in this section. -Usually, a window manager creates these colormaps. -Applications should use the standard colormaps if they already exist. -.sp -.LP -To allocate an -.PN XStandardColormap -structure, use -.PN XAllocStandardColormap . -.IN "XAllocStandardColormap" "" "@DEF@" -.sM -.FD 0 -XStandardColormap *XAllocStandardColormap\^(\|) -.FN -.LP -.eM -The -.PN XAllocStandardColormap -function allocates and returns a pointer to an -.PN XStandardColormap -structure. -Note that all fields in the -.PN XStandardColormap -structure are initially set to zero. -If insufficient memory is available, -.PN XAllocStandardColormap -returns NULL. -To free the memory allocated to this structure, -use -.PN XFree . -.LP -The -.PN XStandardColormap -structure contains: -.LP -.sM -/* Hints */ -.TS -lw(.5i) lw(2i) lw(1i). -T{ -#define -T} T{ -.PN ReleaseByFreeingColormap -T} T{ -( (XID) 1L) -T} -.TE -/* Values */ -.IN "XStandardColormap" "" "@DEF@" -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { - Colormap colormap; - unsigned long red_max; - unsigned long red_mult; - unsigned long green_max; - unsigned long green_mult; - unsigned long blue_max; - unsigned long blue_mult; - unsigned long base_pixel; - VisualID visualid; - XID killid; -} XStandardColormap; -.De -.LP -.eM -The colormap member is the colormap created by the -.PN XCreateColormap -function. -The red_max, green_max, and blue_max members give the maximum -red, green, and blue values, respectively. -Each color coefficient ranges from zero to its max, inclusive. -For example, -a common colormap allocation is 3/3/2 (3 planes for red, 3 -planes for green, and 2 planes for blue). -This colormap would have red_max = 7, green_max = 7, -and blue_max = 3. -An alternate allocation that uses only 216 colors is red_max = 5, -green_max = 5, and blue_max = 5. -.LP -The red_mult, green_mult, and blue_mult members give the -scale factors used to compose a full pixel value. -(See the discussion of the base_pixel members for further information.) -For a 3/3/2 allocation, red_mult might be 32, -green_mult might be 4, and blue_mult might be 1. -For a 6-colors-each allocation, red_mult might be 36, -green_mult might be 6, and blue_mult might be 1. -.LP -The base_pixel member gives the base pixel value used to -compose a full pixel value. -Usually, the base_pixel is obtained from a call to the -.PN XAllocColorPlanes -function. -Given integer red, green, and blue coefficients in their appropriate -ranges, one then can compute a corresponding pixel value by -using the following expression: -.LP -.Ds -.TA .5i 1.5i -.ta .5i 1.5i -(r * red_mult + g * green_mult + b * blue_mult + base_pixel) & 0xFFFFFFFF -.De -.LP -For -.PN GrayScale -colormaps, -only the colormap, red_max, red_mult, -and base_pixel members are defined. -The other members are ignored. -To compute a -.PN GrayScale -pixel value, use the following expression: -.LP -.Ds -.TA .5i 1.5i -.ta .5i 1.5i -(gray * red_mult + base_pixel) & 0xFFFFFFFF -.De -.LP -Negative multipliers can be represented by converting the 2's -complement representation of the multiplier into an unsigned long and -storing the result in the appropriate _mult field. -The step of masking by 0xFFFFFFFF effectively converts the resulting -positive multiplier into a negative one. -The masking step will take place automatically on many machine architectures, -depending on the size of the integer type used to do the computation. -.LP -The visualid member gives the ID number of the visual from which the -colormap was created. -The killid member gives a resource ID that indicates whether -the cells held by this standard colormap are to be released -by freeing the colormap ID or by calling the -.PN XKillClient -function on the indicated resource. -(Note that this method is necessary for allocating out of an existing colormap.) -.LP -The properties containing the -.PN XStandardColormap -information have -the type RGB_COLOR_MAP. -.LP -The remainder of this section discusses standard colormap properties and atoms -as well as how to manipulate standard colormaps. -.NH 3 -Standard Colormap Properties and Atoms -.XS -\*(SN Standard Colormap Properties and Atoms -.XE -.LP -.IN "Standard Colormaps" -.IN "Colormaps" "standard" -Several standard colormaps are available. -Each standard colormap is defined by a property, -and each such property is identified by an atom. -The following list names the atoms and describes the colormap -associated with each one. -The -.hN X11/Xatom.h -header file contains the definitions for each of the following atoms, -which are prefixed with XA_. -.IP RGB_DEFAULT_MAP 5 -This atom names a property. -The value of the property is an array of -.PN XStandardColormap -structures. -Each entry in the array describes an RGB subset of the default color -map for the Visual specified by visual_id. -.IP -Some applications only need a few RGB colors and -may be able to allocate them from the system default colormap. -This is the ideal situation because the fewer colormaps that are -active in the system the more applications are displayed -with correct colors at all times. -.IP -A typical allocation for the RGB_DEFAULT_MAP on 8-plane displays -is 6 reds, 6 greens, and 6 blues. -This gives 216 uniformly distributed colors -(6 intensities of 36 different hues) and still leaves 40 elements -of a 256-element colormap available for special-purpose colors -for text, borders, and so on. -.IP RGB_BEST_MAP 5 -.br -This atom names a property. -The value of the property is an -.PN XStandardColormap . -.IP -The property defines the best RGB colormap available on -the screen. -(Of course, this is a subjective evaluation.) -Many image processing and three-dimensional applications need to -use all available colormap cells and to distribute as many -perceptually distinct colors as possible over those cells. -This implies that there may be more green values available than -red, as well as more green or red than blue. -.IP -For an 8-plane -.PN PseudoColor -visual, -RGB_BEST_MAP is likely to be a 3/3/2 allocation. -For a 24-plane -.PN DirectColor -visual, -RGB_BEST_MAP is normally an 8/8/8 allocation. -.IP RGB_RED_MAP 5 -.br -.ns -.IP RGB_GREEN_MAP 5 -.br -.ns -.IP RGB_BLUE_MAP 5 -These atoms name properties. -The value of each property is an -.PN XStandardColormap . -.IP -The properties define all-red, all-green, and all-blue -colormaps, respectively. -These maps are used by applications that want to make color-separated -images. -For example, a user might generate a full-color image -on an 8-plane display both by rendering an image three times -(once with high color resolution in red, once with green, -and once with blue) and by multiply exposing a single frame in a camera. -.IP RGB_GRAY_MAP 5 -This atom names a property. -The value of the property is an -.PN XStandardColormap . -.IP -The property describes the best -.PN GrayScale -colormap available on the screen. -As previously mentioned, -only the colormap, red_max, red_mult, and base_pixel members of the -.PN XStandardColormap -structure are used for -.PN GrayScale -colormaps. -.NH 3 -Setting and Obtaining Standard Colormaps -.XS -\*(SN Setting and Obtaining Standard Colormaps -.XE -.LP -Xlib provides functions that you can use to set and obtain an -.PN XStandardColormap -structure. -.sp -.LP -To set an -.PN XStandardColormap -structure, use -.PN XSetRGBColormaps . -.IN "XSetRGBColormaps" "" "@DEF@" -.sM -.FD 0 -void XSetRGBColormaps\^(\^\fIdisplay\fP, \fIw\fP, \fIstd_colormap\fP, \ -\fIcount\fP, \fIproperty\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - XStandardColormap *\fIstd_colormap\fP\^; -.br - int \fIcount\fP\^; -.br - Atom \fIproperty\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIstd_colormap\fP 1i -Specifies the -.PN XStandardColormap -structure to be used. -.ds Cn colormaps -.IP \fIcount\fP 1i -Specifies the number of \*(Cn. -.IP \fIproperty\fP 1i -Specifies the property name. -.LP -.eM -The -.PN XSetRGBColormaps -function replaces the RGB colormap definition in the specified property -on the named window. -If the property does not already exist, -.PN XSetRGBColormaps -sets the RGB colormap definition in the specified property -on the named window. -The property is stored with a type of RGB_COLOR_MAP and a format of 32. -Note that it is the caller's responsibility to honor the ICCCM -restriction that only RGB_DEFAULT_MAP contain more than one definition. -.LP -The -.PN XSetRGBColormaps -function usually is only used by window or session managers. -To create a standard colormap, -follow this procedure: -.IP 1. 5 -Open a new connection to the same server. -.IP 2. 5 -Grab the server. -.IP 3. 5 -See if the property is on the property list of the root window for the screen. -.IP 4. 5 -If the desired property is not present: -.RS -.IP \(bu 5 -Create a colormap (unless you are using the default colormap of the screen). -.IP \(bu 5 -Determine the color characteristics of the visual. -.IP \(bu 5 -Allocate cells in the colormap (or create it with -.PN AllocAll ). -.IP \(bu 5 -Call -.PN XStoreColors -to store appropriate color values in the colormap. -.IP \(bu 5 -Fill in the descriptive members in the -.PN XStandardColormap -structure. -.IP \(bu 5 -Attach the property to the root window. -.IP \(bu 5 -Use -.PN XSetCloseDownMode -to make the resource permanent. -.RE -.IP 5. 5 -Ungrab the server. -.LP -.PN XSetRGBColormaps -can generate -.PN BadAlloc , -.PN BadAtom , -and -.PN BadWindow -errors. -.sp -.LP -To obtain the -.PN XStandardColormap -structure associated with the specified property, use -.PN XGetRGBColormaps . -.IN "XGetRGBColormaps" "" "@DEF@" -.sM -.FD 0 -Status XGetRGBColormaps\^(\^\fIdisplay\fP, \fIw\fP, \fIstd_colormap_return\fP, \ -\fIcount_return\fP, \fIproperty\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - XStandardColormap **\fIstd_colormap_return\fP\^; -.br - int *\fIcount_return\fP\^; -.br - Atom \fIproperty\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIstd_colormap_return\fP 1i -Returns the -.PN XStandardColormap -structure. -.ds Cn colormaps -.IP \fIcount_return\fP 1i -Returns the number of \*(Cn. -.IP \fIproperty\fP 1i -Specifies the property name. -.LP -.eM -The -.PN XGetRGBColormaps -function returns the RGB colormap definitions stored -in the specified property on the named window. -If the property exists, is of type RGB_COLOR_MAP, is of format 32, -and is long enough to contain a colormap definition, -.PN XGetRGBColormaps -allocates and fills in space for the returned colormaps -and returns a nonzero status. -If the visualid is not present, -.PN XGetRGBColormaps -assumes the default visual for the screen on which the window is located; -if the killid is not present, -.PN None -is assumed, which indicates that the resources cannot be released. -Otherwise, -none of the fields are set, and -.PN XGetRGBColormaps -returns a zero status. -Note that it is the caller's responsibility to honor the ICCCM -restriction that only RGB_DEFAULT_MAP contain more than one definition. -.LP -.PN XGetRGBColormaps -can generate -.PN BadAtom -and -.PN BadWindow -errors. -.bp diff --git a/doc/xorg-docs/specs/X11/CH15 b/doc/xorg-docs/specs/X11/CH15 deleted file mode 100644 index a10df0a53..000000000 --- a/doc/xorg-docs/specs/X11/CH15 +++ /dev/null @@ -1,1628 +0,0 @@ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by -.\" Digital Equipment Corporation -.\" -.\" Portions Copyright \(co 1990, 1991 by -.\" Tektronix, Inc. -.\" -.\" Permission to use, copy, modify and distribute this documentation for -.\" any purpose and without fee is hereby granted, provided that the above -.\" copyright notice appears in all copies and that both that copyright notice -.\" and this permission notice appear in all copies, and that the names of -.\" Digital and Tektronix not be used in in advertising or publicity pertaining -.\" to this documentation without specific, written prior permission. -.\" Digital and Tektronix makes no representations about the suitability -.\" of this documentation for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBChapter 15\fP\s-1 - -\s+1\fBResource Manager Functions\fP\s-1 -.sp 2 -.nr H1 15 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.na -.LP -.XS -Chapter 15: Resource Manager Functions -.XE -A program often needs a variety of options in the X environment -(for example, fonts, colors, icons, and cursors). -Specifying all of these options on the command line is awkward -because users may want to customize many aspects of the program -and need a convenient way to establish these customizations as -the default settings. -The resource manager is provided for this purpose. -Resource specifications are usually stored in human-readable files -and in server properties. -.LP -The resource manager is a database manager with a twist. -In most database systems, -you perform a query using an imprecise specification, -and you get back a set of records. -The resource manager, however, allows you to specify a large -set of values with an imprecise specification, to query the database -with a precise specification, and to get back only a single value. -This should be used by applications that need to know what the -user prefers for colors, fonts, and other resources. -It is this use as a database for dealing with X resources that -inspired the name ``Resource Manager,'' -although the resource manager can be and is used in other ways. -.LP -For example, -a user of your application may want to specify -that all windows should have a blue background -but that all mail-reading windows should have a red background. -With well-engineered and coordinated applications, -a user can define this information using only two lines of specifications. -.LP -As an example of how the resource manager works, -consider a mail-reading application called xmh. -Assume that it is designed so that it uses a -complex window hierarchy all the way down to individual command buttons, -which may be actual small subwindows in some toolkits. -These are often called objects or widgets. -In such toolkit systems, -each user interface object can be composed of other objects -and can be assigned a name and a class. -Fully qualified names or classes can have arbitrary numbers of component names, -but a fully qualified name always has the same number of component names as a -fully qualified class. -This generally reflects the structure of the application as composed -of these objects, starting with the application itself. -.LP -For example, the xmh mail program has a name ``xmh'' and is one -of a class of ``Mail'' programs. -By convention, the first character of class components is capitalized, -and the first letter of name components is in lowercase. -Each name and class finally has an attribute -(for example, ``foreground'' or ``font''). -If each window is properly assigned a name and class, -it is easy for the user to specify attributes of any portion -of the application. -.LP -At the top level, -the application might consist of a paned window (that is, a window divided -into several sections) named ``toc''. -One pane of the paned window is a button box window named ``buttons'' -and is filled with command buttons. -One of these command buttons is used to incorporate -new mail and has the name ``incorporate''. -This window has a fully qualified name, ``xmh.toc.buttons.incorporate'', -and a fully qualified class, ``Xmh.Paned.Box.Command''. -Its fully qualified name is the name of its parent, ``xmh.toc.buttons'', -followed by its name, ``incorporate''. -Its class is the class of its parent, ``Xmh.Paned.Box'', -followed by its particular class, ``Command''. -The fully qualified name of a resource is -the attribute's name appended to the object's fully qualified -name, and the fully qualified class is its class appended to the object's -class. -.LP -The incorporate button might need the following resources: -Title string, -Font, -Foreground color for its inactive state, -Background color for its inactive state, -Foreground color for its active state, and -Background color for its active state. -Each resource is considered -to be an attribute of the button and, as such, has a name and a class. -For example, the foreground color for the button in -its active state might be named ``activeForeground'', -and its class might be ``Foreground''. -.LP -When an application looks up a resource (for example, a color), -it passes the complete name and complete class of the resource -to a look-up routine. -The resource manager compares this complete specification -against the incomplete specifications of entries in the resource -database, finds the best match, and returns the corresponding -value for that entry. -.LP -The definitions for the resource manager are contained in -.hN X11/Xresource.h . -.NH 2 -Resource File Syntax -.XS -\*(SN Resource File Syntax -.XE -.LP -The syntax of a resource file is a sequence of resource lines -terminated by newline characters or the end of the file. -The syntax of an individual resource line is: -.LP -.\" Start marker code here -.Ds 0 -.TA 1.5i 1.75i -.ta 1.5i 1.75i -ResourceLine = Comment | IncludeFile | ResourceSpec | -Comment = "!" {} -IncludeFile = "#" WhiteSpace "include" WhiteSpace FileName WhiteSpace -FileName = -ResourceSpec = WhiteSpace ResourceName WhiteSpace ":" WhiteSpace Value -ResourceName = [Binding] {Component Binding} ComponentName -Binding = "\&." | "*" -WhiteSpace = { | } -Component = "?" | ComponentName -ComponentName = NameChar {NameChar} -NameChar = "a"\-"z" | "A"\-"Z" | "0"\-"9" | "_" | "-" -Value = {} -.De -.\" End marker code here -.LP -Elements separated by vertical bar (|) are alternatives. -Curly braces ({\&.\&.\&.}) indicate zero or more repetitions -of the enclosed elements. -Square brackets ([\&.\&.\&.]) indicate that the enclosed element is optional. -Quotes ("\&.\&.\&.") are used around literal characters. -.LP -IncludeFile lines are interpreted by replacing the line with the -contents of the specified file. -The word ``include'' must be in lowercase. -The file name is interpreted relative to the directory of the file in -which the line occurs (for example, if the file name contains no -directory or contains a relative directory specification). -.LP -If a ResourceName contains a contiguous sequence of two or more Binding -characters, the sequence will be replaced with a single ``\&.'' character -if the sequence contains only ``\&.'' characters; -otherwise, the sequence will be replaced with a single ``*'' character. -.LP -A resource database never contains more than one entry for a given -ResourceName. If a resource file contains multiple lines with the -same ResourceName, the last line in the file is used. -.LP -Any white space characters before or after the name or colon in a ResourceSpec -are ignored. -To allow a Value to begin with white space, -the two-character sequence ``\^\\\^\fIspace\fP'' (backslash followed by space) -is recognized and replaced by a space character, -and the two-character sequence ``\^\\\^\fItab\fP'' -(backslash followed by horizontal tab) -is recognized and replaced by a horizontal tab character. -To allow a Value to contain embedded newline characters, -the two-character sequence ``\^\\\^n'' is recognized and replaced by a -newline character. -To allow a Value to be broken across multiple lines in a text file, -the two-character sequence ``\^\\\^\fInewline\fP'' -(backslash followed by newline) is -recognized and removed from the value. -To allow a Value to contain arbitrary character codes, -the four-character sequence ``\^\\\^\fInnn\fP'', -where each \fIn\fP is a digit character in the range of ``0''\^\-``7'', -is recognized and replaced with a single byte that contains -the octal value specified by the sequence. -Finally, the two-character sequence ``\^\\\\'' is recognized -and replaced with a single backslash. -.LP -As an example of these sequences, -the following resource line contains a value consisting of four -characters: a backslash, a null, a ``z'', and a newline: -.Ds -magic.values: \\\\\\\^000\^\\ -z\\\^n -.De -.NH 2 -Resource Manager Matching Rules -.XS -\*(SN Resource Manager Matching Rules -.XE -.LP -The algorithm for determining which resource database entry -matches a given query is the heart of the resource manager. -All queries must fully specify the name and class of the desired resource -(use of the characters ``*'' and ``?'' is not permitted). -The library supports up to 100 components in a full name or class. -Resources are stored in the database with only partially specified -names and classes, using pattern matching constructs. -An asterisk (*) is a loose binding and is used to represent any number -of intervening components, including none. -A period (.) is a tight binding and is used to separate immediately -adjacent components. -A question mark (?) is used to match any single component name or class. -A database entry cannot end in a loose binding; -the final component (which cannot be the character ``?'') must be specified. -The lookup algorithm searches the database for the entry that most -closely matches (is most specific for) the full name and class being queried. -When more than one database entry matches the full name and class, -precedence rules are used to select just one. -.LP -The full name and class are scanned from left to right (from highest -level in the hierarchy to lowest), one component at a time. -At each level, the corresponding component and/or binding of each -matching entry is determined, and these matching components and -bindings are compared according to precedence rules. -Each of the rules is applied at each level before moving to the next level, -until a rule selects a single entry over all others. -The rules, in order of precedence, are: -.IP 1. 5 -An entry that contains a matching component (whether name, class, -or the character ``?'') -takes precedence over entries that elide the level (that is, entries -that match the level in a loose binding). -.IP 2. 5 -An entry with a matching name takes precedence over both -entries with a matching class and entries that match using the character ``?''. -An entry with a matching class takes precedence over -entries that match using the character ``?''. -.IP 3. 5 -An entry preceded by a tight binding takes precedence over entries -preceded by a loose binding. -.LP -To illustrate these rules, -consider the following resource database entries: -.Ds -.TA 2.5i 3.5i -.ta 2.5i 3.5i -xmh*Paned*activeForeground: red \fI(entry A)\fP -*incorporate.Foreground: blue \fI(entry B)\fP -xmh.toc*Command*activeForeground: green \fI(entry C)\fP -xmh.toc*?.Foreground: white \fI(entry D)\fP -xmh.toc*Command.activeForeground: black \fI(entry E)\fP -.De -.LP -Consider a query for the resource: -.LP -.Ds -.TA 3.5i -.ta 3.5i -xmh.toc.messagefunctions.incorporate.activeForeground \fI(name)\fP -Xmh.Paned.Box.Command.Foreground \fI(class)\fP -.De -.LP -At the first level (xmh, Xmh), rule 1 eliminates entry B. -At the second level (toc, Paned), rule 2 eliminates entry A. -At the third level (messagefunctions, Box), no entries are eliminated. -At the fourth level (incorporate, Command), rule 2 eliminates entry D. -At the fifth level (activeForeground, Foreground), rule 3 eliminates entry C. -.NH 2 -Quarks -.XS -\*(SN Quarks -.XE -.LP -Most uses of the resource manager involve defining names, -classes, and representation types as string constants. -However, always referring to strings in the resource manager can be slow, -because it is so heavily used in some toolkits. -To solve this problem, -a shorthand for a string is used in place of the string -in many of the resource manager functions. -Simple comparisons can be performed rather than string comparisons. -The shorthand name for a string is called a quark and is the -type -.PN XrmQuark . -On some occasions, -you may want to allocate a quark that has no string equivalent. -.LP -A quark is to a string what an atom is to a string in the server, -but its use is entirely local to your application. -.LP -.sp -To allocate a new quark, use -.PN XrmUniqueQuark . -.IN "XrmUniqueQuark" "" "@DEF@" -.sM -.FD 0 -XrmQuark XrmUniqueQuark\^(\|) -.FN -.LP -.eM -The -.PN XrmUniqueQuark -function allocates a quark that is guaranteed not to represent any string that -is known to the resource manager. -.LP -.sp -Each name, class, and representation type is typedef'd as an -.PN XrmQuark . -.LP -.sM -.Ds 0 -typedef int XrmQuark, *XrmQuarkList; -typedef XrmQuark XrmName; -typedef XrmQuark XrmClass; -typedef XrmQuark XrmRepresentation; -#define NULLQUARK ((XrmQuark) 0) -.De -.LP -.eM -Lists are represented as null-terminated arrays of quarks. -The size of the array must be large enough for the number of components used. -.LP -.sM -.Ds 0 -typedef XrmQuarkList XrmNameList; -typedef XrmQuarkList XrmClassList; -.De -.LP -.eM -.sp -To convert a string to a quark, use -.PN XrmStringToQuark -or -.PN XrmPermStringToQuark . -.IN "XrmStringToQuark" "" "@DEF@" -.IN "XrmPermStringToQuark" "" "@DEF@" -.sM -.FD 0 -#define XrmStringToName(string) XrmStringToQuark(string) -#define XrmStringToClass(string) XrmStringToQuark(string) -#define XrmStringToRepresentation(string) XrmStringToQuark(string) -.sp -XrmQuark XrmStringToQuark\^(\^\fIstring\fP\^) -.br - char *\fIstring\fP\^; -.sp -XrmQuark XrmPermStringToQuark\^(\^\fIstring\fP\^) -.br - char *\fIstring\fP\^; -.FN -.ds Ql -.IP \fIstring\fP 1i -Specifies the string for which a quark\*(Ql is to be allocated. -.LP -.eM -These functions can be used to convert from string to quark representation. -If the string is not in the Host Portable Character Encoding, -the conversion is implementation-dependent. -The string argument to -.PN XrmStringToQuark -need not be permanently allocated storage. -.PN XrmPermStringToQuark -is just like -.PN XrmStringToQuark , -except that Xlib is permitted to assume the string argument is permanently -allocated, -and, hence, that it can be used as the value to be returned by -.PN XrmQuarkToString . -.LP -For any given quark, if -.PN XrmStringToQuark -returns a non-NULL value, -all future calls will return the same value (identical address). -.LP -.sp -To convert a quark to a string, use -.PN XrmQuarkToString . -.IN "XrmQuarkToString" "" "@DEF@" -.sM -.FD 0 -#define XrmNameToString(name) XrmQuarkToString(name) -#define XrmClassToString(class) XrmQuarkToString(class) -#define XrmRepresentationToString(type) XrmQuarkToString(type) -.sp -char *XrmQuarkToString\^(\^\fIquark\fP\^) -.br - XrmQuark \fIquark\fP\^; -.FN -.IP \fIquark\fP 1i -Specifies the quark for which the equivalent string is desired. -.LP -.eM -These functions can be used to convert from quark representation to string. -The string pointed to by the return value must not be modified or freed. -The returned string is byte-for-byte equal to the original -string passed to one of the string-to-quark routines. -If no string exists for that quark, -.PN XrmQuarkToString -returns NULL. -For any given quark, if -.PN XrmQuarkToString -returns a non-NULL value, -all future calls will return the same value (identical address). -.LP -.sp -To convert a string with one or more components to a quark list, use -.PN XrmStringToQuarkList . -.IN "XrmStringToQuarkList" "" "@DEF@" -.sM -.FD 0 -#define XrmStringToNameList(str, name) XrmStringToQuarkList((str), (name)) -#define XrmStringToClassList(str, class) XrmStringToQuarkList((str), (class)) -.sp -void XrmStringToQuarkList\^(\^\fIstring\fP, \fIquarks_return\fP\^) -.br - char *\fIstring\fP\^; -.br - XrmQuarkList \fIquarks_return\fP\^; -.FN -.ds Ql \ list -.IP \fIstring\fP 1i -Specifies the string for which a quark\*(Ql is to be allocated. -.IP \fIquarks_return\fP 1i -Returns the list of quarks. -The caller must allocate sufficient space for the quarks list before calling -.PN XrmStringToQuarkList . -.LP -.eM -The -.PN XrmStringToQuarkList -function converts the null-terminated string (generally a fully qualified name) -to a list of quarks. -Note that the string must be in the valid ResourceName format -(see section 15.1). -If the string is not in the Host Portable Character Encoding, -the conversion is implementation-dependent. -.LP -A binding list is a list of type -.PN XrmBindingList -and indicates if components of name or class lists are bound tightly or loosely -(that is, if wildcarding of intermediate components is specified). -.LP -.Ds 0 -typedef enum {XrmBindTightly, XrmBindLoosely} XrmBinding, *XrmBindingList; -.De -.LP -.PN XrmBindTightly -indicates that a period separates the components, and -.PN XrmBindLoosely -indicates that an asterisk separates the components. -.LP -.sp -To convert a string with one or more components to a binding list -and a quark list, use -.PN XrmStringToBindingQuarkList . -.IN "XrmStringToBindingQuarkList" "" "@DEF@" -.sM -.FD 0 -XrmStringToBindingQuarkList\^(\^\fIstring\fP, \fIbindings_return\fP, \ -\fIquarks_return\fP\^) -.br - char *\fIstring\fP\^; -.br - XrmBindingList \fIbindings_return\fP\^; -.br - XrmQuarkList \fIquarks_return\fP\^; -.FN -.ds Ql \ list -.IP \fIstring\fP 1i -Specifies the string for which a quark\*(Ql is to be allocated. -.IP \fIbindings_return\fP 1i -Returns the binding list. -The caller must allocate sufficient space for the binding list before calling -.PN XrmStringToBindingQuarkList . -.IP \fIquarks_return\fP 1i -Returns the list of quarks. -The caller must allocate sufficient space for the quarks list before calling -.PN XrmStringToBindingQuarkList . -.LP -.eM -Component names in the list are separated by a period or -an asterisk character. -The string must be in the format of a valid ResourceName (see section 15.1). -If the string does not start with a period or an asterisk, -a tight binding is assumed. -For example, the string ``*a.b*c'' becomes: -.LP -.Ds 0 -.TA .75i 1.5i 2.25i -.ta .75i 1.5i 2.25i -quarks: a b c -bindings: loose tight loose -.De -.NH 2 -Creating and Storing Databases -.XS -\*(SN Creating and Storing Databases -.XE -.LP -.IN "XrmDatabase" "" "@DEF@" -A resource database is an opaque type, -.PN XrmDatabase . -Each database value is stored in an -.PN XrmValue -structure. -This structure consists of a size, an address, and a representation type. -The size is specified in bytes. -The representation type is a way for you to store data tagged by some -application-defined type (for example, the strings ``font'' or ``color''). -It has nothing to do with the C data type or with its class. -The -.PN XrmValue -structure is defined as: -.LP -.IN "XrmValue" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - unsigned int size; - XPointer addr; -} XrmValue, *XrmValuePtr; -.De -.LP -.eM -.sp -To initialize the resource manager, use -.PN XrmInitialize . -.IN "XrmInitialize" "" "@DEF@" -.sM -.FD 0 -void XrmInitialize\^(\|); -.FN -.LP -.eM -To retrieve a database from disk, use -.PN XrmGetFileDatabase . -.IN "XrmGetFileDatabase" "" "@DEF@" -.sM -.FD 0 -XrmDatabase XrmGetFileDatabase\^(\^\fIfilename\fP\^) -.br - char *\fIfilename\fP\^; -.FN -.IP \fIfilename\fP 1i -Specifies the resource database file name. -.LP -.eM -The -.PN XrmGetFileDatabase -function opens the specified file, -creates a new resource database, and loads it with the specifications -read in from the specified file. -The specified file should contain a sequence of entries in valid ResourceLine -format (see section 15.1); the database that results from reading a file -with incorrect syntax is implementation-dependent. -The file is parsed in the current locale, -and the database is created in the current locale. -If it cannot open the specified file, -.PN XrmGetFileDatabase -returns NULL. -.LP -.sp -To store a copy of a database to disk, use -.PN XrmPutFileDatabase . -.IN "XrmPutFileDatabase" "" "@DEF@" -.sM -.FD 0 -void XrmPutFileDatabase\^(\^\fIdatabase\fP, \fIstored_db\fP\^) -.br - XrmDatabase \fIdatabase\fP\^; -.br - char *\fIstored_db\fP\^; -.FN -.IP \fIdatabase\fP 1i -Specifies the database that is to be used. -.IP \fIstored_db\fP 1i -Specifies the file name for the stored database. -.LP -.eM -The -.PN XrmPutFileDatabase -function stores a copy of the specified database in the specified file. -Text is written to the file as a sequence of entries in valid -ResourceLine format (see section 15.1). -The file is written in the locale of the database. -Entries containing resource names that are not in the Host Portable Character -Encoding or containing values that are not in the encoding of the database -locale, are written in an implementation-dependent manner. -The order in which entries are written is implementation-dependent. -Entries with representation types other than ``String'' are ignored. -.LP -.sp -To obtain a pointer to the screen-independent resources of a display, use -.PN XResourceManagerString . -.IN "XResourceManagerString" "" "@DEF@" -.sM -.FD 0 -char *XResourceManagerString\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -The -.PN XResourceManagerString -function returns the RESOURCE_MANAGER property from the server's root -window of screen zero, which was returned when the connection was opened using -.PN XOpenDisplay . -The property is converted from type STRING to the current locale. -The conversion is identical to that produced by -.PN XmbTextPropertyToTextList -for a single element STRING property. -The returned string is owned by Xlib and should not be freed by the client. -The property value must be in a format that is acceptable to -.PN XrmGetStringDatabase . -If no property exists, NULL is returned. -.LP -.sp -To obtain a pointer to the screen-specific resources of a screen, use -.PN XScreenResourceString . -.IN "XScreenResourceString" "" "@DEF@" -.sM -.FD 0 -char *XScreenResourceString\^(\^\fIscreen\fP\^) -.br - Screen *\fIscreen\fP\^; -.FN -.IP \fIscreen\fP 1i -Specifies the screen. -.LP -.eM -The -.PN XScreenResourceString -function returns the SCREEN_RESOURCES property from the root window of the -specified screen. -The property is converted from type STRING to the current locale. -The conversion is identical to that produced by -.PN XmbTextPropertyToTextList -for a single element STRING property. -The property value must be in a format that is acceptable to -.PN XrmGetStringDatabase . -If no property exists, NULL is returned. -The caller is responsible for freeing the returned string by using -.PN XFree . -.LP -.sp -To create a database from a string, use -.PN XrmGetStringDatabase . -.IN "XrmGetStringDatabase" "" "@DEF@" -.sM -.FD 0 -XrmDatabase XrmGetStringDatabase\^(\^\fIdata\fP\^) -.br - char *\fIdata\fP\^; -.FN -.IP \fIdata\fP 1i -Specifies the database contents using a string. -.LP -.eM -The -.PN XrmGetStringDatabase -function creates a new database and stores the resources specified -in the specified null-terminated string. -.PN XrmGetStringDatabase -is similar to -.PN XrmGetFileDatabase -except that it reads the information out of a string instead of out of a file. -The string should contain a sequence of entries in valid ResourceLine -format (see section 15.1) terminated by a null character; -the database that results from using a string -with incorrect syntax is implementation-dependent. -The string is parsed in the current locale, -and the database is created in the current locale. -.LP -.sp -To obtain the locale name of a database, use -.PN XrmLocaleOfDatabase . -.IN "XrmLocaleOfDatabase" "" "@DEF@" -.sM -.FD 0 -char *XrmLocaleOfDatabase\^(\^\fIdatabase\fP\^) -.br - XrmDatabase \fIdatabase\fP\^; -.FN -.IP \fIdatabase\fP 1i -Specifies the resource database. -.LP -.eM -The -.PN XrmLocaleOfDatabase -function returns the name of the locale bound to the specified -database, as a null-terminated string. -The returned locale name string is owned by Xlib and should not be -modified or freed by the client. -Xlib is not permitted to free the string until the database is destroyed. -Until the string is freed, -it will not be modified by Xlib. -.LP -.sp -To destroy a resource database and free its allocated memory, use -.PN XrmDestroyDatabase . -.IN "XrmDestroyDatabase" "" "@DEF@" -.sM -.FD 0 -void XrmDestroyDatabase\^(\^\fIdatabase\fP\^) -.br - XrmDatabase \fIdatabase\fP\^; -.FN -.IP \fIdatabase\fP 1i -Specifies the resource database. -.LP -.eM -If database is NULL, -.PN XrmDestroyDatabase -returns immediately. -.LP -.sp -To associate a resource database with a display, use -.PN XrmSetDatabase . -.IN "XrmSetDatabase" "" "@DEF@" -.sM -.FD 0 -void XrmSetDatabase\^(\^\fIdisplay\fP\^, \fIdatabase\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XrmDatabase \fIdatabase\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdatabase\fP 1i -Specifies the resource database. -.LP -.eM -The -.PN XrmSetDatabase -function associates the specified resource database (or NULL) -with the specified display. -The database previously associated with the display (if any) is not destroyed. -A client or toolkit may find this function convenient for retaining a database -once it is constructed. -.LP -.sp -To get the resource database associated with a display, use -.PN XrmGetDatabase . -.IN "XrmGetDatabase" "" "@DEF@" -.sM -.FD 0 -XrmDatabase XrmGetDatabase\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -The -.PN XrmGetDatabase -function returns the database associated with the specified display. -It returns NULL if a database has not yet been set. -.NH 2 -Merging Resource Databases -.XS -\*(SN Merging Resource Databases -.XE -.LP -To merge the contents of a resource file into a database, use -.PN XrmCombineFileDatabase . -.IN "XrmCombineFileDatabase" "" "@DEF@" -.sM -.FD 0 -Status XrmCombineFileDatabase(\^\fIfilename\fP, \fItarget_db\fP, \fIoverride\fP\^) -.br - char *\fIfilename\fP; -.br - XrmDatabase *\fItarget_db\fP\^; -.br - Bool \fIoverride\fP; -.FN -.IP \fIfilename\fP 1i -Specifies the resource database file name. -.IP \fItarget_db\fP 1i -Specifies the resource database into which the source -database is to be merged. -.IP \fIoverride\fP 1i -Specifies whether source entries override target ones. -.LP -.eM -The -.PN XrmCombineFileDatabase -function merges the contents of a resource file into a database. -If the same specifier is used for an entry in both the file and -the database, -the entry in the file will replace the entry in the database -if override is -.PN True ; -otherwise, the entry in the file is discarded. -The file is parsed in the current locale. -If the file cannot be read, -a zero status is returned; -otherwise, a nonzero status is returned. -If target_db contains NULL, -.PN XrmCombineFileDatabase -creates and returns a new database to it. -Otherwise, the database pointed to by target_db is not destroyed by the merge. -The database entries are merged without changing values or types, -regardless of the locale of the database. -The locale of the target database is not modified. -.LP -.sp -To merge the contents of one database into another database, use -.PN XrmCombineDatabase . -.IN "XrmCombineDatabase" "" "@DEF@" -.sM -.FD 0 -void XrmCombineDatabase(\^\fIsource_db\fP, \fItarget_db\fP, \fIoverride\fP\^) -.br - XrmDatabase \fIsource_db\fP, *\fItarget_db\fP\^; -.br - Bool \fIoverride\fP; -.FN -.IP \fIsource_db\fP 1i -Specifies the resource database that is to be merged into the target database. -.IP \fItarget_db\fP 1i -Specifies the resource database into which the source -database is to be merged. -.IP \fIoverride\fP 1i -Specifies whether source entries override target ones. -.LP -.eM -The -.PN XrmCombineDatabase -function merges the contents of one database into another. -If the same specifier is used for an entry in both databases, -the entry in the source_db will replace the entry in the target_db -if override is -.PN True ; -otherwise, the entry in source_db is discarded. -If target_db contains NULL, -.PN XrmCombineDatabase -simply stores source_db in it. -Otherwise, source_db is destroyed by the merge, but the database pointed -to by target_db is not destroyed. -The database entries are merged without changing values or types, -regardless of the locales of the databases. -The locale of the target database is not modified. -.LP -.sp -To merge the contents of one database into another database with override -semantics, use -.PN XrmMergeDatabases . -.IN "XrmMergeDatabases" "" "@DEF@" -.sM -.FD 0 -void XrmMergeDatabases(\^\fIsource_db\fP, \fItarget_db\fP\^) -.br - XrmDatabase \fIsource_db\fP, *\fItarget_db\fP\^; -.FN -.IP \fIsource_db\fP 1i -Specifies the resource database that is to be merged into the target database. -.IP \fItarget_db\fP 1i -Specifies the resource database into which the source -database is to be merged. -.LP -.eM -Calling the -.PN XrmMergeDatabases -function is equivalent to calling the -.PN XrmCombineDatabase -function with an override argument of -.PN True . -.NH 2 -Looking Up Resources -.XS -\*(SN Looking Up Resources -.XE -.LP -To retrieve a resource from a resource database, use -.PN XrmGetResource , -.PN XrmQGetResource , -or -.PN XrmQGetSearchResource . -.LP -.sp -.IN "XrmGetResource" "" "@DEF@" -.sM -.FD 0 -Bool XrmGetResource\^(\^\fIdatabase\fP, \fIstr_name\fP, \fIstr_class\fP, \ -\fIstr_type_return\fP, \fIvalue_return\fP\^) -.br - XrmDatabase \fIdatabase\fP\^; -.br - char *\fIstr_name\fP\^; -.br - char *\fIstr_class\fP\^; -.br - char **\fIstr_type_return\fP\^; -.br - XrmValue *\fIvalue_return\fP\^; -.FN -.IP \fIdatabase\fP 1i -Specifies the database that is to be used. -.IP \fIstr_name\fP 1i -Specifies the fully qualified name of the value being retrieved (as a string). -.IP \fIstr_class\fP 1i -Specifies the fully qualified class of the value being retrieved (as a string). -.IP \fIstr_type_return\fP 1i -Returns the representation type of the destination (as a string). -.IP \fIvalue_return\fP 1i -Returns the value in the database. -.LP -.eM -.sp -.IN "XrmQGetResource" "" "@DEF@" -.sM -.FD 0 -Bool XrmQGetResource\^(\^\fIdatabase\fP, \fIquark_name\fP, \fIquark_class\fP, \ -\fIquark_type_return\fP, \fIvalue_return\fP\^) -.br - XrmDatabase \fIdatabase\fP\^; -.br - XrmNameList \fIquark_name\fP\^; -.br - XrmClassList \fIquark_class\fP\^; -.br - XrmRepresentation *\fIquark_type_return\fP\^; -.br - XrmValue *\fIvalue_return\fP\^; -.FN -.IP \fIdatabase\fP 1i -Specifies the database that is to be used. -.IP \fIquark_name\fP 1i -Specifies the fully qualified name of the value being retrieved (as a quark). -.IP \fIquark_class\fP 1i -Specifies the fully qualified class of the value being retrieved (as a quark). -.IP \fIquark_type_return\fP 1i -Returns the representation type of the destination (as a quark). -.IP \fIvalue_return\fP 1i -Returns the value in the database. -.LP -.eM -The -.PN XrmGetResource -and -.PN XrmQGetResource -functions retrieve a resource from the specified database. -Both take a fully qualified name/class pair, a destination -resource representation, and the address of a value -(size/address pair). -The value and returned type point into database memory; -therefore, you must not modify the data. -.LP -The database only frees or overwrites entries on -.PN XrmPutResource , -.PN XrmQPutResource , -or -.PN XrmMergeDatabases . -A client that is not storing new values into the database or -is not merging the database should be safe using the address passed -back at any time until it exits. -If a resource was found, both -.PN XrmGetResource -and -.PN XrmQGetResource -return -.PN True ; -otherwise, they return -.PN False . -.LP -.sp -.EQ -delim %% -.EN -Most applications and toolkits do not make random probes -into a resource database to fetch resources. -The X toolkit access pattern for a resource database is quite stylized. -A series of from 1 to 20 probes is made with only the -last name/class differing in each probe. -The -.PN XrmGetResource -function is at worst a %2 sup n% algorithm, -where \fIn\fP is the length of the name/class list. -This can be improved upon by the application programmer by prefetching a list -of database levels that might match the first part of a name/class list. -.LP -.sp -To obtain a list of database levels, use -.PN XrmQGetSearchList . -.IN "XrmQGetSearchList" "" "@DEF@" -.sM -.FD 0 -typedef XrmHashTable *XrmSearchList; -.sp -Bool XrmQGetSearchList\^(\^\fIdatabase\fP, \fInames\fP, \fIclasses\fP, \ -\fIlist_return\fP, \fIlist_length\fP\^) -.br - XrmDatabase \fIdatabase\fP\^; -.br - XrmNameList \fInames\fP\^; -.br - XrmClassList \fIclasses\fP\^; -.br - XrmSearchList \fIlist_return\fP\^; -.br - int \fIlist_length\fP\^; -.FN -.IP \fIdatabase\fP 1i -Specifies the database that is to be used. -.IP \fInames\fP 1i -Specifies a list of resource names. -.IP \fIclasses\fP 1i -Specifies a list of resource classes. -.IP \fIlist_return\fP 1i -Returns a search list for further use. -The caller must allocate sufficient space for the list before calling -.PN XrmQGetSearchList . -.IP \fIlist_length\fP 1i -Specifies the number of entries (not the byte size) allocated for list_return. -.LP -.eM -The -.PN XrmQGetSearchList -function takes a list of names and classes -and returns a list of database levels where a match might occur. -The returned list is in best-to-worst order and -uses the same algorithm as -.PN XrmGetResource -for determining precedence. -If list_return was large enough for the search list, -.PN XrmQGetSearchList -returns -.PN True ; -otherwise, it returns -.PN False . -.LP -The size of the search list that the caller must allocate is -dependent upon the number of levels and wildcards in the resource specifiers -that are stored in the database. -The worst case length is %3 sup n%, -where \fIn\fP is the number of name or class components in names or classes. -.LP -When using -.PN XrmQGetSearchList -followed by multiple probes for resources with a common name and class prefix, -only the common prefix should be specified in the name and class list to -.PN XrmQGetSearchList . -.LP -.sp -To search resource database levels for a given resource, use -.PN XrmQGetSearchResource . -.IN "XrmQGetSearchResource" "" "@DEF@" -.sM -.FD 0 -Bool XrmQGetSearchResource\^(\^\fIlist\fP, \fIname\fP, \fIclass\fP, \ -\fItype_return\fP, \fIvalue_return\fP\^) -.br - XrmSearchList \fIlist\fP\^; -.br - XrmName \fIname\fP\^; -.br - XrmClass \fIclass\fP\^; -.br - XrmRepresentation *\fItype_return\fP\^; -.br - XrmValue *\fIvalue_return\fP\^; -.FN -.IP \fIlist\fP 1i -Specifies the search list returned by -.PN XrmQGetSearchList . -.IP \fIname\fP 1i -Specifies the resource name. -.IP \fIclass\fP 1i -Specifies the resource class. -.IP \fItype_return\fP 1i -Returns data representation type. -.IP \fIvalue_return\fP 1i -Returns the value in the database. -.LP -.eM -The -.PN XrmQGetSearchResource -function searches the specified database levels for the resource -that is fully identified by the specified name and class. -The search stops with the first match. -.PN XrmQGetSearchResource -returns -.PN True -if the resource was found; -otherwise, it returns -.PN False . -.LP -A call to -.PN XrmQGetSearchList -with a name and class list containing all but the last component -of a resource name followed by a call to -.PN XrmQGetSearchResource -with the last component name and class returns the same database entry as -.PN XrmGetResource -and -.PN XrmQGetResource -with the fully qualified name and class. -.NH 2 -Storing into a Resource Database -.XS -\*(SN Storing into a Resource Database -.XE -.LP -To store resources into the database, use -.PN XrmPutResource -or -.PN XrmQPutResource . -Both functions take a partial resource specification, a -representation type, and a value. -This value is copied into the specified database. -.LP -.sp -.IN "XrmPutResource" "" "@DEF@" -.sM -.FD 0 -void XrmPutResource\^(\^\fIdatabase\fP, \fIspecifier\fP, \fItype\fP, \fIvalue\fP\^) -.br - XrmDatabase *\fIdatabase\fP\^; -.br - char *\fIspecifier\fP\^; -.br - char *\fItype\fP\^; -.br - XrmValue *\fIvalue\fP\^; -.FN -.IP \fIdatabase\fP 1i -Specifies the resource database. -.IP \fIspecifier\fP 1i -Specifies a complete or partial specification of the resource. -.IP \fItype\fP 1i -Specifies the type of the resource. -.IP \fIvalue\fP 1i -Specifies the value of the resource, which is specified as a string. -.LP -.eM -If database contains NULL, -.PN XrmPutResource -creates a new database and returns a pointer to it. -.PN XrmPutResource -is a convenience function that calls -.PN XrmStringToBindingQuarkList -followed by: -.LP -.Ds -XrmQPutResource(database, bindings, quarks, XrmStringToQuark(type), value) -.De -If the specifier and type are not in the Host Portable Character Encoding, -the result is implementation-dependent. -The value is stored in the database without modification. -.LP -.sp -.IN "XrmQPutResource" "" "@DEF@" -.sM -.FD 0 -void XrmQPutResource\^(\^\fIdatabase\fP, \fIbindings\fP, \fIquarks\fP, \ -\fItype\fP, \fIvalue\fP\^) -.br - XrmDatabase *\fIdatabase\fP\^; -.br - XrmBindingList \fIbindings\fP\^; -.br - XrmQuarkList \fIquarks\fP\^; -.br - XrmRepresentation \fItype\fP\^; -.br - XrmValue *\fIvalue\fP\^; -.FN -.IP \fIdatabase\fP 1i -Specifies the resource database. -.IP \fIbindings\fP 1i -Specifies a list of bindings. -.IP \fIquarks\fP 1i -Specifies the complete or partial name or the class list of the resource. -.IP \fItype\fP 1i -Specifies the type of the resource. -.IP \fIvalue\fP 1i -Specifies the value of the resource, which is specified as a string. -.LP -.eM -If database contains NULL, -.PN XrmQPutResource -creates a new database and returns a pointer to it. -If a resource entry with the identical bindings and quarks already -exists in the database, the previous type and value are replaced by the new -specified type and value. -The value is stored in the database without modification. -.LP -.sp -To add a resource that is specified as a string, use -.PN XrmPutStringResource . -.IN "XrmPutStringResource" "" "@DEF@" -.sM -.FD 0 -void XrmPutStringResource\^(\^\fIdatabase\fP, \fIspecifier\fP, \fIvalue\fP\^) -.br - XrmDatabase *\fIdatabase\fP\^; -.br - char *\fIspecifier\fP\^; -.br - char *\fIvalue\fP\^; -.FN -.IP \fIdatabase\fP 1i -Specifies the resource database. -.IP \fIspecifier\fP 1i -Specifies a complete or partial specification of the resource. -.IP \fIvalue\fP 1i -Specifies the value of the resource, which is specified as a string. -.LP -.eM -If database contains NULL, -.PN XrmPutStringResource -creates a new database and returns a pointer to it. -.PN XrmPutStringResource -adds a resource with the specified value to the specified database. -.PN XrmPutStringResource -is a convenience function that first calls -.PN XrmStringToBindingQuarkList -on the specifier and then calls -.PN XrmQPutResource , -using a ``String'' representation type. -If the specifier is not in the Host Portable Character Encoding, -the result is implementation-dependent. -The value is stored in the database without modification. -.LP -.sp -To add a string resource using quarks as a specification, use -.PN XrmQPutStringResource . -.IN "XrmQPutStringResource" "" "@DEF@" -.sM -.FD 0 -void XrmQPutStringResource\^(\^\fIdatabase\fP, \fIbindings\fP, \fIquarks\fP, \ -\fIvalue\fP\^) -.br - XrmDatabase *\fIdatabase\fP\^; -.br - XrmBindingList \fIbindings\fP\^; -.br - XrmQuarkList \fIquarks\fP\^; -.br - char *\fIvalue\fP\^; -.FN -.IP \fIdatabase\fP 1i -Specifies the resource database. -.IP \fIbindings\fP 1i -Specifies a list of bindings. -.IP \fIquarks\fP 1i -Specifies the complete or partial name or the class list of the resource. -.IP \fIvalue\fP 1i -Specifies the value of the resource, which is specified as a string. -.LP -.eM -If database contains NULL, -.PN XrmQPutStringResource -creates a new database and returns a pointer to it. -.PN XrmQPutStringResource -is a convenience routine that constructs an -.PN XrmValue -for the value string (by calling -.PN strlen -to compute the size) and -then calls -.PN XrmQPutResource , -using a ``String'' representation type. -The value is stored in the database without modification. -.LP -.sp -To add a single resource entry that is specified as a string that contains -both a name and a value, use -.PN XrmPutLineResource . -.IN "XrmPutLineResource" "" "@DEF@" -.sM -.FD 0 -void XrmPutLineResource\^(\^\fIdatabase\fP, \fIline\fP\^) -.br - XrmDatabase *\fIdatabase\fP\^; -.br - char *\fIline\fP\^; -.FN -.IP \fIdatabase\fP 1i -Specifies the resource database. -.IP \fIline\fP 1i -Specifies the resource name and value pair as a single string. -.LP -.eM -If database contains NULL, -.PN XrmPutLineResource -creates a new database and returns a pointer to it. -.PN XrmPutLineResource -adds a single resource entry to the specified database. -The line should be in valid ResourceLine format (see section 15.1) -terminated by a newline or null character; -the database that results from using a string -with incorrect syntax is implementation-dependent. -The string is parsed in the locale of the database. -If the -.PN ResourceName -is not in the Host Portable Character Encoding, -the result is implementation-dependent. -Note that comment lines are not stored. -.NH 2 -Enumerating Database Entries -.XS -\*(SN Enumerating Database Entries -.XE -.LP -To enumerate the entries of a database, use -.PN XrmEnumerateDatabase . -.IN "XrmEnumerateDatabase" "" "@DEF@" -.sM -.TS -lw(.5i) lw(2i) lw(2.5i). -T{ -#define -T} T{ -.PN XrmEnumAllLevels -T} T{ -0 -T} -T{ -#define -T} T{ -.PN XrmEnumOneLevel -T} T{ -1 -T} -.TE -.FD 0 -Bool XrmEnumerateDatabase\^(\^\fIdatabase\fP, \fIname_prefix\fP, \fIclass_prefix\fP, \fImode\fP, \fIproc\fP, \fIarg\fP\^) -.br - XrmDatabase \fIdatabase\fP\^; -.br - XrmNameList \fIname_prefix\fP\^; -.br - XrmClassList \fIclass_prefix\fP\^; -.br - int \fImode\fP\^; -.br - Bool (\^*\fIproc\fP\^)\^(\^)\^; -.br - XPointer \fIarg\fP\^; -.FN -.IP \fIdatabase\fP 1i -Specifies the resource database. -.IP \fIname_prefix\fP 1i -Specifies the resource name prefix. -.IP \fIclass_prefix\fP 1i -Specifies the resource class prefix. -.IP \fImode\fP 1i -Specifies the number of levels to enumerate. -.IP \fIproc\fP 1i -Specifies the procedure that is to be called for each matching entry. -.IP \fIarg\fP 1i -Specifies the user-supplied argument that will be passed to the procedure. -.LP -.eM -The -.PN XrmEnumerateDatabase -function calls the specified procedure for each resource in the database -that would match some completion of the given name/class resource prefix. -The order in which resources are found is implementation-dependent. -If mode is -.PN XrmEnumOneLevel , -a resource must match the given name/class prefix with -just a single name and class appended. If mode is -.PN XrmEnumAllLevels , -the resource must match the given name/class prefix with one or more names and -classes appended. -If the procedure returns -.PN True , -the enumeration terminates and the function returns -.PN True . -If the procedure always returns -.PN False , -all matching resources are enumerated and the function returns -.PN False . -.LP -The procedure is called with the following arguments: -.LP -.\" Start marker code here -.Ds 0 -.TA .5i 3i -.ta .5i 3i -(*\fIproc\fP\^)(\^\fIdatabase\fP, \fIbindings\fP, \fIquarks\fP, \fItype\fP, \fIvalue\fP, \fIarg\fP\^) - XrmDatabase *\fIdatabase\fP\^; - XrmBindingList \fIbindings\fP\^; - XrmQuarkList \fIquarks\fP\^; - XrmRepresentation *\fItype\fP\^; - XrmValue *\fIvalue\fP\^; - XPointer \fIarg\fP\^; -.De -.\" End marker code here -.LP -The bindings and quarks lists are terminated by -.PN NULLQUARK . -Note that pointers -to the database and type are passed, but these values should not be modified. -.LP -The procedure must not modify the database. -If Xlib has been initialized for threads, the procedure is called with -the database locked and the result of a call by the procedure to any -Xlib function using the same database is not defined. -.NH 2 -Parsing Command Line Options -.XS -\*(SN Parsing Command Line Options -.XE -.LP -The -.PN XrmParseCommand -function can be used to parse the command line arguments to a program -and modify a resource database with selected entries from the command line. -.LP -.IN "XrmOptionKind" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef enum { - XrmoptionNoArg, /* Value is specified in XrmOptionDescRec.value */ - XrmoptionIsArg, /* Value is the option string itself */ - XrmoptionStickyArg, /* Value is characters immediately following option */ - XrmoptionSepArg, /* Value is next argument in argv */ - XrmoptionResArg, /* Resource and value in next argument in argv */ - XrmoptionSkipArg, /* Ignore this option and the next argument in argv */ - XrmoptionSkipLine, /* Ignore this option and the rest of argv */ - XrmoptionSkipNArgs /* Ignore this option and the next - \ \ \ XrmOptionDescRec.value arguments in argv */ -} XrmOptionKind; -.De -.LP -.eM -Note that -.PN XrmoptionSkipArg -is equivalent to -.PN XrmoptionSkipNArgs -with the -.PN XrmOptionDescRec.value -field containing the value one. -Note also that the value zero for -.PN XrmoptionSkipNArgs -indicates that only the option itself is to be skipped. -.LP -.IN "XrmOptionDescRec" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { - char *option; /* Option specification string in argv */ - char *specifier; /* Binding and resource name (sans application name) */ - XrmOptionKind argKind; /* Which style of option it is */ - XPointer value; /* Value to provide if XrmoptionNoArg or - \ \ \ XrmoptionSkipNArgs */ -} XrmOptionDescRec, *XrmOptionDescList; -.De -.LP -.eM -.sp -To load a resource database from a C command line, use -.PN XrmParseCommand . -.IN "XrmParseCommand" "" "@DEF@" -.sM -.FD 0 -void XrmParseCommand\^(\^\fIdatabase\fP\^, \^\fItable\fP\^, \^\fItable_count\fP\^, \ -\^\fIname\fP\^, \^\fIargc_in_out\fP\^, \^\fIargv_in_out\fP\^) -.br - XrmDatabase *\fIdatabase\fP\^; -.br - XrmOptionDescList \fItable\fP\^; -.br - int \fItable_count\fP\^; -.br - char *\fIname\fP\^; -.br - int *\fIargc_in_out\fP\^; -.br - char **\fIargv_in_out\fP\^; -.FN -.IP \fIdatabase\fP 1i -Specifies the resource database. -.IP \fItable\fP 1i -Specifies the table of command line arguments to be parsed. -.IP \fItable_count\fP 1i -Specifies the number of entries in the table. -.IP \fIname\fP 1i -Specifies the application name. -.IP \fIargc_in_out\fP 1i -Specifies the number of arguments and returns the number of remaining arguments. -.IP \fIargv_in_out\fP 1i -Specifies the command line arguments -and returns the remaining arguments. -.LP -.eM -The -.PN XrmParseCommand -function parses an (argc, argv) pair according to the specified option table, -loads recognized options into the specified database with type ``String,'' -and modifies the (argc, argv) pair to remove all recognized options. -If database contains NULL, -.PN XrmParseCommand -creates a new database and returns a pointer to it. -Otherwise, entries are added to the database specified. -If a database is created, it is created in the current locale. -.LP -The specified table is used to parse the command line. -Recognized options in the table are removed from argv, -and entries are added to the specified resource database -in the order they occur in argv. -The table entries contain information on the option string, -the option name, the style of option, -and a value to provide if the option kind is -.PN XrmoptionNoArg . -The option names are compared byte-for-byte to arguments in argv, -independent of any locale. -The resource values given in the table are stored in the resource database -without modification. -All resource database entries are created -using a ``String'' representation type. -The argc argument specifies the number of arguments in argv -and is set on return to the remaining number of arguments that were not parsed. -The name argument should be the name of your application -for use in building the database entry. -The name argument is prefixed to the resourceName in the option table -before storing a database entry. -The name argument is treated as a single component, even if it -has embedded periods. -No separating (binding) character is inserted, -so the table must contain either a period (.) or an asterisk (*) -as the first character in each resourceName entry. -To specify a more completely qualified resource name, -the resourceName entry can contain multiple components. -If the name argument and the resourceNames are not in the -Host Portable Character Encoding, -the result is implementation-dependent. -.LP -The following provides a sample option table: -.LP -.Ds 0 -.TA 1.25i 3.25i 4.75i -.ta 1.25i 3.25i 4.75i -static XrmOptionDescRec opTable[] = { -{"\-background", "*background", XrmoptionSepArg, (XPointer) NULL}, -{"\-bd", "*borderColor", XrmoptionSepArg, (XPointer) NULL}, -{"\-bg", "*background", XrmoptionSepArg, (XPointer) NULL}, -{"\-borderwidth", "*TopLevelShell.borderWidth", XrmoptionSepArg, (XPointer) NULL}, -{"\-bordercolor", "*borderColor", XrmoptionSepArg, (XPointer) NULL}, -{"\-bw", "*TopLevelShell.borderWidth", XrmoptionSepArg, (XPointer) NULL}, -{"\-display", ".display", XrmoptionSepArg, (XPointer) NULL}, -{"\-fg", "*foreground", XrmoptionSepArg, (XPointer) NULL}, -{"\-fn", "*font", XrmoptionSepArg, (XPointer) NULL}, -{"\-font", "*font", XrmoptionSepArg, (XPointer) NULL}, -{"\-foreground", "*foreground", XrmoptionSepArg, (XPointer) NULL}, -{"\-geometry", ".TopLevelShell.geometry", XrmoptionSepArg, (XPointer) NULL}, -{"\-iconic", ".TopLevelShell.iconic", XrmoptionNoArg, (XPointer) "on"}, -{"\-name", ".name", XrmoptionSepArg, (XPointer) NULL}, -{"\-reverse", "*reverseVideo", XrmoptionNoArg, (XPointer) "on"}, -{"\-rv", "*reverseVideo", XrmoptionNoArg, (XPointer) "on"}, -{"\-synchronous", "*synchronous", XrmoptionNoArg, (XPointer) "on"}, -{"\-title", ".TopLevelShell.title", XrmoptionSepArg, (XPointer) NULL}, -{"\-xrm", NULL, XrmoptionResArg, (XPointer) NULL}, -}; -.De -.LP -In this table, if the \-background (or \-bg) option is used to set -background colors, the stored resource specifier matches all -resources of attribute background. -If the \-borderwidth option is used, -the stored resource specifier applies only to border width -attributes of class TopLevelShell (that is, outer-most windows, including -pop-up windows). -If the \-title option is used to set a window name, -only the topmost application windows receive the resource. -.LP -When parsing the command line, -any unique unambiguous abbreviation for an option name in the table is -considered a match for the option. -Note that uppercase and lowercase matter. -.bp diff --git a/doc/xorg-docs/specs/X11/CH16 b/doc/xorg-docs/specs/X11/CH16 deleted file mode 100644 index 3a21a2290..000000000 --- a/doc/xorg-docs/specs/X11/CH16 +++ /dev/null @@ -1,2364 +0,0 @@ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by -.\" Digital Equipment Corporation -.\" -.\" Portions Copyright \(co 1990, 1991 by -.\" Tektronix, Inc. -.\" -.\" Permission to use, copy, modify and distribute this documentation for -.\" any purpose and without fee is hereby granted, provided that the above -.\" copyright notice appears in all copies and that both that copyright notice -.\" and this permission notice appear in all copies, and that the names of -.\" Digital and Tektronix not be used in in advertising or publicity pertaining -.\" to this documentation without specific, written prior permission. -.\" Digital and Tektronix makes no representations about the suitability -.\" of this documentation for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBChapter 16\fP\s-1 - -\s+1\fBApplication Utility Functions\fP\s-1 -.sp 2 -.nr H1 16 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.na -.LP -.XS -Chapter 16: Application Utility Functions -.XE -Once you have initialized the X system, -you can use the Xlib utility functions to: -.IP \(bu 5 -Use keyboard utility functions -.IP \(bu 5 -Use Latin-1 keyboard event functions -.IP \(bu 5 -Allocate permanent storage -.IP \(bu 5 -Parse the window geometry -.IP \(bu 5 -Manipulate regions -.IP \(bu 5 -Use cut buffers -.IP \(bu 5 -Determine the appropriate visual type -.IP \(bu 5 -Manipulate images -.IP \(bu 5 -Manipulate bitmaps -.IP \(bu 5 -Use the context manager -.LP -As a group, -the functions discussed in this chapter provide the functionality that -is frequently needed and that spans toolkits. -Many of these functions do not generate actual protocol requests to the server. -.NH 2 -Using Keyboard Utility Functions -.XS -\*(SN Using Keyboard Utility Functions -.XE -.LP -This section discusses mapping between KeyCodes and KeySyms, -classifying KeySyms, and mapping between KeySyms and string names. -The first three functions in this section operate on a cached copy of the -server keyboard mapping. -The first four KeySyms for each KeyCode -are modified according to the rules given in section 12.7. -To obtain the untransformed KeySyms defined for a key, -use the functions described in section 12.7. -.LP -.sp -To obtain a KeySym for the KeyCode of an event, use -.PN XLookupKeysym . -.IN "XLookupKeysym" "" "@DEF@" -.sM -.FD 0 -KeySym XLookupKeysym(\^\fIkey_event\fP, \fIindex\fP\^) -.br - XKeyEvent *\fIkey_event\fP\^; -.br - int \fIindex\fP\^; -.FN -.IP \fIkey_event\fP 1i -Specifies the -.PN KeyPress -or -.PN KeyRelease -event. -.IP \fIindex\fP 1i -Specifies the index into the KeySyms list for the event's KeyCode. -.LP -.eM -The -.PN XLookupKeysym -function uses a given keyboard event and the index you specified to return -the KeySym from the list that corresponds to the KeyCode member in the -.PN XKeyPressedEvent -or -.PN XKeyReleasedEvent -structure. -If no KeySym is defined for the KeyCode of the event, -.PN XLookupKeysym -returns -.PN NoSymbol . -.LP -.sp -To obtain a KeySym for a specific KeyCode, use -.PN XKeycodeToKeysym . -.IN "XKeycodeToKeysym" "" "@DEF@" -.sM -.FD 0 -KeySym XKeycodeToKeysym\^(\^\fIdisplay\fP, \fIkeycode\fP, \fIindex\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - KeyCode \fIkeycode\fP\^; -.br - int \fIindex\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIkeycode\fP 1i -Specifies the KeyCode. -.IP \fIindex\fP 1i -Specifies the element of KeyCode vector. -.LP -.eM -The -.PN XKeycodeToKeysym -function uses internal Xlib tables -and returns the KeySym defined for the specified KeyCode and -the element of the KeyCode vector. -If no symbol is defined, -.PN XKeycodeToKeysym -returns -.PN NoSymbol . -.LP -.sp -To obtain a KeyCode for a key having a specific KeySym, use -.PN XKeysymToKeycode . -.IN "XKeysymToKeycode" "" "@DEF@" -.sM -.FD 0 -KeyCode XKeysymToKeycode\^(\^\fIdisplay\fP, \fIkeysym\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - KeySym \fIkeysym\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIkeysym\fP 1i -Specifies the KeySym that is to be searched for. -.LP -.eM -If the specified KeySym is not defined for any KeyCode, -.PN XKeysymToKeycode -returns zero. -.LP -.sp -The mapping between KeyCodes and KeySyms is cached internal to Xlib. -When this information is changed at the server, an Xlib function must -be called to refresh the cache. -To refresh the stored modifier and keymap information, use -.PN XRefreshKeyboardMapping . -.IN "XRefreshKeyboardMapping" "" "@DEF@" -.sM -.FD 0 -XRefreshKeyboardMapping(\^\fIevent_map\fP\^) -.br - XMappingEvent *\fIevent_map\fP\^; -.FN -.IP \fIevent_map\fP 1i -Specifies the mapping event that is to be used. -.LP -.eM -The -.PN XRefreshKeyboardMapping -function refreshes the stored modifier and keymap information. -You usually call this function when a -.PN MappingNotify -event with a request member of -.PN MappingKeyboard -or -.PN MappingModifier -occurs. -The result is to update Xlib's knowledge of the keyboard. -.LP -.sp -To obtain the uppercase and lowercase forms of a KeySym, use -.PN XConvertCase . -.IN "XConvertCase" "" "@DEF@" -.sM -.FD 0 -void XConvertCase(\^\fIkeysym\fP, \fIlower_return\fP, \fIupper_return\fP\^) -.br - KeySym \fIkeysym\fP\^; -.br - KeySym *\fIlower_return\fP\^; -.br - KeySym *\fIupper_return\fP\^; -.FN -.ds Fn converted -.IP \fIkeysym\fP 1i -Specifies the KeySym that is to be \*(Fn. -.IP \fIlower_return\fP 1i -Returns the lowercase form of keysym, or keysym. -.IP \fIupper_return\fP 1i -Returns the uppercase form of keysym, or keysym. -.LP -.eM -The -.PN XConvertCase -function returns the uppercase and lowercase forms of the specified Keysym, -if the KeySym is subject to case conversion; -otherwise, the specified KeySym is returned to both lower_return and -upper_return. -Support for conversion of other than Latin and Cyrillic KeySyms is -implementation-dependent. -.LP -.sp -KeySyms have string names as well as numeric codes. -To convert the name of the KeySym to the KeySym code, use -.PN XStringToKeysym . -.IN "XStringToKeysym" "" "@DEF@" -.sM -.FD 0 -KeySym XStringToKeysym\^(\^\fIstring\fP\^) -.br - char *\fIstring\fP\^; -.FN -.IP \fIstring\fP 1i -Specifies the name of the KeySym that is to be converted. -.LP -.eM -Standard KeySym names are obtained from -.hN X11/keysymdef.h -by removing the XK_ prefix from each name. -KeySyms that are not part of the Xlib standard also may be obtained -with this function. -The set of KeySyms that are available in this manner -and the mechanisms by which Xlib obtains them is implementation-dependent. -.LP -If the KeySym name is not in the Host Portable Character Encoding, -the result is implementation-dependent. -If the specified string does not match a valid KeySym, -.PN XStringToKeysym -returns -.PN NoSymbol . -.LP -.sp -To convert a KeySym code to the name of the KeySym, use -.PN XKeysymToString . -.IN "XKeysymToString" "" "@DEF@" -.sM -.FD 0 -char *XKeysymToString\^(\^\fIkeysym\fP\^) -.br - KeySym \fIkeysym\fP\^; -.FN -.ds Fn converted -.IP \fIkeysym\fP 1i -Specifies the KeySym that is to be \*(Fn. -.LP -.eM -The returned string is in a static area and must not be modified. -The returned string is in the Host Portable Character Encoding. -If the specified KeySym is not defined, -.PN XKeysymToString -returns a NULL. -.NH 3 -KeySym Classification Macros -.XS -\*(SN KeySym Classification Macros -.XE -.LP -You may want to test if a KeySym is, for example, -on the keypad or on one of the function keys. -You can use KeySym macros to perform the following tests. -.LP -.sp -.sM -.FD 0 -IsCursorKey\^(\^\fIkeysym\fP\^) -.FN -.ds Fn tested -.IP \fIkeysym\fP 1i -Specifies the KeySym that is to be \*(Fn. -.LP -.eM -.IN "IsCursorKey" "" "@DEF@" -Returns -.PN True -if the specified KeySym is a cursor key. -.LP -.sp -.sM -.FD 0 -IsFunctionKey\^(\^\fIkeysym\fP\^) -.FN -.ds Fn tested -.IP \fIkeysym\fP 1i -Specifies the KeySym that is to be \*(Fn. -.LP -.eM -.IN "IsFunctionKey" "" "@DEF@" -Returns -.PN True -if the specified KeySym is a function key. -.LP -.sp -.sM -.FD 0 -IsKeypadKey\^(\^\fIkeysym\fP\^) -.FN -.ds Fn tested -.IP \fIkeysym\fP 1i -Specifies the KeySym that is to be \*(Fn. -.LP -.eM -.IN "IsKeypadKey" "" "@DEF@" -Returns -.PN True -if the specified KeySym is a standard keypad key. -.LP -.sp -.sM -.FD 0 -IsPrivateKeypadKey\^(\^\fIkeysym\fP\^) -.FN -.ds Fn tested -.IP \fIkeysym\fP 1i -Specifies the KeySym that is to be \*(Fn. -.LP -.eM -.IN "IsPrivateKeypadKey" "" "@DEF@" -Returns -.PN True -if the specified KeySym is a vendor-private keypad key. -.LP -.sp -.sM -.FD 0 -IsMiscFunctionKey\^(\^\fIkeysym\fP\^) -.FN -.ds Fn tested -.IP \fIkeysym\fP 1i -Specifies the KeySym that is to be \*(Fn. -.LP -.eM -.IN "IsMiscFunctionKey" "" "@DEF@" -Returns -.PN True -if the specified KeySym is a miscellaneous function key. -.LP -.sp -.sM -.FD 0 -IsModifierKey\^(\^\fIkeysym\fP\^) -.FN -.ds Fn tested -.IP \fIkeysym\fP 1i -Specifies the KeySym that is to be \*(Fn. -.LP -.eM -.IN "IsModifierKey" "" "@DEF@" -Returns -.PN True -if the specified KeySym is a modifier key. -.LP -.sp -.sM -.FD 0 -IsPFKey\^(\^\fIkeysym\fP\^) -.FN -.ds Fn tested -.IP \fIkeysym\fP 1i -Specifies the KeySym that is to be \*(Fn. -.LP -.eM -.IN "IsPFKey" "" "@DEF@" -Returns -.PN True -if the specified KeySym is a PF key. -.NH 2 -Using Latin-1 Keyboard Event Functions -.XS -\*(SN Using Latin-1 Keyboard Event Functions -.XE -.LP -Chapter 13 describes internationalized text input facilities, -but sometimes it is expedient to write an application that -only deals with Latin-1 characters and ASCII controls, -so Xlib provides a simple function for that purpose. -.PN XLookupString -handles the standard modifier semantics described in section 12.7. -This function does not use any of the input method facilities -described in chapter 13 and does not depend on the current locale. -.LP -.sp -To map a key event to an ISO Latin-1 string, use -.PN XLookupString . -.IN "XLookupString" "" "@DEF@" -.sM -.FD 0 -int XLookupString(\^\fIevent_struct\fP, \fIbuffer_return\fP,\ - \fIbytes_buffer\fP, \fIkeysym_return\fP, \fIstatus_in_out\fP\^) -.br - XKeyEvent *\fIevent_struct\fP\^; -.br - char *\fIbuffer_return\fP\^; -.br - int \fIbytes_buffer\fP\^; -.br - KeySym *\fIkeysym_return\fP\^; -.br - XComposeStatus *\fIstatus_in_out\fP\^; -.FN -.IP \fIevent_struct\fP 1i -Specifies the key event structure to be used. -You can pass -.PN XKeyPressedEvent -or -.PN XKeyReleasedEvent . -.IP \fIbuffer_return\fP 1i -Returns the translated characters. -.IP \fIbytes_buffer\fP 1i -Specifies the length of the buffer. -No more than bytes_buffer of translation are returned. -.IP \fIkeysym_return\fP 1i -Returns the KeySym computed from the event if this argument is not NULL. -.IP \fIstatus_in_out\fP 1i -Specifies or returns the -.PN XComposeStatus -structure or NULL. -.LP -.eM -The -.PN XLookupString -function translates a key event to a KeySym and a string. -The KeySym is obtained by using the standard interpretation of the -.PN Shift , -.PN Lock , -group, and numlock modifiers as defined in the X Protocol specification. -If the KeySym has been rebound (see -.PN XRebindKeysym ), -the bound string will be stored in the buffer. -Otherwise, the KeySym is mapped, if possible, to an ISO Latin-1 character -or (if the Control modifier is on) to an ASCII control character, -and that character is stored in the buffer. -.PN XLookupString -returns the number of characters that are stored in the buffer. -.LP -If present (non-NULL), -the -.PN XComposeStatus -structure records the state, -which is private to Xlib, -that needs preservation across calls to -.PN XLookupString -to implement compose processing. -The creation of -.PN XComposeStatus -structures is implementation-dependent; -a portable program must pass NULL for this argument. -.LP -.PN XLookupString -depends on the cached keyboard information mentioned in the -previous section, so it is necessary to use -.PN XRefreshKeyboardMapping -to keep this information up-to-date. -.LP -.sp -To rebind the meaning of a KeySym for -.PN XLookupString , -use -.PN XRebindKeysym . -.IN "XRebindKeysym" "" "@DEF@" -.sM -.FD 0 -XRebindKeysym(\^\fIdisplay\fP, \fIkeysym\fP, \fIlist\fP, \fImod_count\fP, \fIstring\fP, \fInum_bytes\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - KeySym \fIkeysym\fP\^; -.br - KeySym \fIlist\fP\^[\^]\^; -.br - int \fImod_count\fP\^; -.br - unsigned char *\fIstring\fP\^; -.br - int \fInum_bytes\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Fn rebound -.IP \fIkeysym\fP 1i -Specifies the KeySym that is to be \*(Fn. -.IP \fIlist\fP 1i -Specifies the KeySyms to be used as modifiers. -.IP \fImod_count\fP 1i -Specifies the number of modifiers in the modifier list. -.IP \fIstring\fP 1i -Specifies the string that is copied and will be returned by -.PN XLookupString . -.IP \fInum_bytes\fP 1i -Specifies the number of bytes in the string argument. -.LP -.eM -The -.PN XRebindKeysym -function can be used to rebind the meaning of a KeySym for the client. -It does not redefine any key in the X server but merely -provides an easy way for long strings to be attached to keys. -.PN XLookupString -returns this string when the appropriate set of -modifier keys are pressed and when the KeySym would have been used for -the translation. -No text conversions are performed; -the client is responsible for supplying appropriately encoded strings. -Note that you can rebind a KeySym that may not exist. -.NH 2 -Allocating Permanent Storage -.XS -\*(SN Allocating Permanent Storage -.XE -.LP -To allocate some memory you will never give back, use -.PN Xpermalloc . -.IN "Xpermalloc" "" "@DEF@" -.sM -.FD 0 -char *Xpermalloc\^(\^\fIsize\fP\^) -.br - unsigned int \fIsize\fP\^; -.FN -.LP -.eM -The -.PN Xpermalloc -function allocates storage that can never be freed for the life of the -program. The memory is allocated with alignment for the C type double. -This function may provide some performance and space savings over -the standard operating system memory allocator. -.NH 2 -Parsing the Window Geometry -.XS -\*(SN Parsing the Window Geometry -.XE -.LP -To parse standard window geometry strings, use -.PN XParseGeometry . -.IN "Window" "determining location" -.IN "XParseGeometry" "" "@DEF@" -.LP -.sM -.FD 0 -int XParseGeometry\^(\^\fIparsestring\fP\^, \fIx_return\fP\^, \fIy_return\fP\^, \fIwidth_return\fP\^, \fIheight_return\fP\^) -.br - char *\fIparsestring\fP\^; -.br - int *\fIx_return\fP\^, *\fIy_return\fP\^; -.br - unsigned int *\fIwidth_return\fP\^, *\fIheight_return\fP\^; -.FN -.IP \fIparsestring\fP 1i -Specifies the string you want to parse. -.IP \fIx_return\fP 1i -.br -.ns -.IP \fIy_return\fP 1i -Return the x and y offsets. -.IP \fIwidth_return\fP 1i -.br -.ns -.IP \fIheight_return\fP 1i -Return the width and height determined. -.LP -.eM -By convention, -X applications use a standard string to indicate window size and placement. -.PN XParseGeometry -makes it easier to conform to this standard because it allows you -to parse the standard window geometry. -Specifically, this function lets you parse strings of the form: -.LP -.\" Start marker code here -.Ds -[=][<\fIwidth\fP>{xX}<\fIheight\fP>][{+-}<\fIxoffset\fP>{+-}<\fIyoffset\fP>] -.De -.\" End marker code here -.LP -The fields map into the arguments associated with this function. -(Items enclosed in <\^> are integers, items in [\^] are optional, and -items enclosed in {\^} indicate ``choose one of.'' -Note that the brackets should not appear in the actual string.) -If the string is not in the Host Portable Character Encoding, -the result is implementation-dependent. -.LP -The -.PN XParseGeometry -function returns a bitmask that indicates which of the four values (width, -height, xoffset, and yoffset) were actually found in the string -and whether the x and y values are negative. -By convention, \-0 is not equal to +0, because the user needs to -be able to say ``position the window relative to the right or bottom edge.'' -For each value found, the corresponding argument is updated. -For each value not found, the argument is left unchanged. -The bits are represented by -.PN XValue , -.PN YValue , -.PN WidthValue , -.PN HeightValue , -.PN XNegative , -or -.PN YNegative -and are defined in -.hN X11/Xutil.h . -They will be set whenever one of the values is defined -or one of the signs is set. -.LP -If the function returns either the -.PN XValue -or -.PN YValue -flag, -you should place the window at the requested position. -.sp -.LP -To construct a window's geometry information, use -.PN XWMGeometry . -.IN "XWMGeometry" "" "@DEF@" -.sM -.FD 0 -int XWMGeometry\^(\^\fIdisplay\fP, \fIscreen\fP, \fIuser_geom\fP, \ -\fIdef_geom\fP, \fIbwidth\fP, \fIhints\fP, \fIx_return\fP, \fIy_return\fP, -.br - \fIwidth_return\fP, \fIheight_return\fP, \fIgravity_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIscreen\fP\^; -.br - char *\fIuser_geom\fP\^; -.br - char *\fIdef_geom\fP\^; -.br - unsigned int \fIbwidth\fP\^; -.br - XSizeHints *\fIhints\fP\^; -.br - int *\fIx_return\fP, *\fIy_return\fP\^; -.br - int *\fIwidth_return\fP\^; -.br - int *\fIheight_return\fP\^; -.br - int *\fIgravity_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIscreen\fP 1i -Specifies the screen. -.IP \fIuser_geom\fP 1i -Specifies the user-specified geometry or NULL. -.IP \fIdef_geom\fP 1i -Specifies the application's default geometry or NULL. -.IP \fIbwidth\fP 1i -Specifies the border width. -.IP \fIhints\fP 1i -Specifies the size hints for the window in its normal state. -.IP \fIx_return\fP 1i -.br -.ns -.IP \fIy_return\fP 1i -Return the x and y offsets. -.IP \fIwidth_return\fP 1i -.br -.ns -.IP \fIheight_return\fP 1i -Return the width and height determined. -.IP \fIgravity_return\fP 1i -Returns the window gravity. -.LP -.eM -The -.PN XWMGeometry -function combines any geometry information (given in the format used by -.PN XParseGeometry ) -specified by the user and by the calling program with size hints -(usually the ones to be stored in WM_NORMAL_HINTS) and returns the position, -size, and gravity -.Pn ( NorthWestGravity , -.PN NorthEastGravity , -.PN SouthEastGravity , -or -.PN SouthWestGravity ) -that describe the window. -If the base size is not set in the -.PN XSizeHints -structure, -the minimum size is used if set. -Otherwise, a base size of zero is assumed. -If no minimum size is set in the hints structure, -the base size is used. -A mask (in the form returned by -.PN XParseGeometry ) -that describes which values came from the user specification -and whether or not the position coordinates are relative -to the right and bottom edges is returned. -Note that these coordinates will have already been accounted for -in the x_return and y_return values. -.LP -Note that invalid geometry specifications can cause a width or height -of zero to be returned. -The caller may pass the address of the hints win_gravity field -as gravity_return to update the hints directly. -.NH 2 -Manipulating Regions -.XS -\*(SN Manipulating Regions -.XE -.LP -Regions are arbitrary sets of pixel locations. -Xlib provides functions for manipulating regions. -The opaque type -.PN Region -is defined in -.hN X11/Xutil.h . -Xlib provides functions that you can use to manipulate regions. -This section discusses how to: -.IP \(bu 5 -Create, copy, or destroy regions -.IP \(bu 5 -Move or shrink regions -.IP \(bu 5 -Compute with regions -.IP \(bu 5 -Determine if regions are empty or equal -.IP \(bu 5 -Locate a point or rectangle in a region -.NH 3 -Creating, Copying, or Destroying Regions -.XS -\*(SN Creating, Copying, or Destroying Regions -.XE -.LP -To create a new empty region, use -.PN XCreateRegion . -.IN "XCreateRegion" "" "@DEF@" -.sM -.FD 0 -Region XCreateRegion\^() -.FN -.LP -.eM -.sp -To generate a region from a polygon, use -.PN XPolygonRegion . -.IN "XPolygonRegion" "" "@DEF@" -.sM -.FD 0 -Region XPolygonRegion\^(\^\fIpoints\fP\^, \fIn\fP\^, \fIfill_rule\fP\^) -.br - XPoint \fIpoints[]\fP\^; -.br - int \fIn\fP\^; -.br - int \fIfill_rule\fP\^; -.FN -.IP \fIpoints\fP 1i -Specifies an array of points. -.IP \fIn\fP 1i -Specifies the number of points in the polygon. -.IP \fIfill_rule\fP 1i -Specifies the fill-rule you want to set for the specified GC. -You can pass -.PN EvenOddRule -or -.PN WindingRule . -.LP -.eM -The -.PN XPolygonRegion -function returns a region for the polygon defined by the points array. -For an explanation of fill_rule, -see -.PN XCreateGC . -.LP -.sp -To set the clip-mask of a GC to a region, use -.PN XSetRegion . -.IN "XSetRegion" "" "@DEF@" -.sM -.FD 0 -XSetRegion\^(\^\fIdisplay\fP, \fIgc\fP\^, \fIr\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - GC \fIgc\fP\^; -.br - Region \fIr\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIgc\fP 1i -Specifies the GC. -.IP \fIr\fP 1i -Specifies the region. -.LP -.eM -The -.PN XSetRegion -function sets the clip-mask in the GC to the specified region. -The region is specified relative to the drawable's origin. -The resulting GC clip origin is implementation-dependent. -Once it is set in the GC, -the region can be destroyed. -.LP -.sp -To deallocate the storage associated with a specified region, use -.PN XDestroyRegion . -.IN "XDestroyRegion" "" "@DEF@" -.sM -.FD 0 -XDestroyRegion\^(\^\fIr\fP\^) -.br - Region \fIr\fP\^; -.FN -.IP \fIr\fP 1i -Specifies the region. -.LP -.eM -.NH 3 -Moving or Shrinking Regions -.XS -\*(SN Moving or Shrinking Regions -.XE -.LP -To move a region by a specified amount, use -.PN XOffsetRegion . -.IN "XOffsetRegion" "" "@DEF@" -.sM -.FD 0 -XOffsetRegion\^(\^\fIr\fP\^, \fIdx\fP\^, \fIdy\fP\^) -.br - Region \fIr\fP\^; -.br - int \fIdx\fP\^, \fIdy\fP\^; -.FN -.IP \fIr\fP 1i -Specifies the region. -.ds Dy move -.IP \fIdx\fP 1i -.br -.ns -.IP \fIdy\fP 1i -Specify the x and y coordinates, -which define the amount you want to \*(Dy the specified region. -.LP -.eM -.sp -To reduce a region by a specified amount, use -.PN XShrinkRegion . -.IN "XShrinkRegion" "" "@DEF@" -.sM -.FD 0 -XShrinkRegion\^(\^\fIr\fP\^, \fIdx\fP\^, \fIdy\fP\^) -.br - Region \fIr\fP\^; -.br - int \fIdx\fP\^, \fIdy\fP\^; -.FN -.IP \fIr\fP 1i -Specifies the region. -.ds Dy shrink -.IP \fIdx\fP 1i -.br -.ns -.IP \fIdy\fP 1i -Specify the x and y coordinates, -which define the amount you want to \*(Dy the specified region. -.LP -.eM -Positive values shrink the size of the region, -and negative values expand the region. -.NH 3 -Computing with Regions -.XS -\*(SN Computing with Regions -.XE -.LP -.sp -To generate the smallest rectangle enclosing a region, use -.PN XClipBox . -.IN "XClipBox" "" "@DEF@" -.sM -.FD 0 -XClipBox\^(\^\fIr\fP\^, \fIrect_return\fP\^) -.br - Region \fIr\fP\^; -.br - XRectangle *\fIrect_return\fP\^; -.FN -.IP \fIr\fP 1i -Specifies the region. -.IP \fIrect_return\fP 1i -Returns the smallest enclosing rectangle. -.LP -.eM -The -.PN XClipBox -function returns the smallest rectangle enclosing the specified region. -.sp -.LP -To compute the intersection of two regions, use -.PN XIntersectRegion . -.IN "XIntersectRegion" "" "@DEF@" -.sM -.FD 0 -XIntersectRegion\^(\^\fIsra\fP\^, \fIsrb\fP\^, \fIdr_return\fP\^) -.br - Region \fIsra\fP\^, \fIsrb\fP\^, \fIdr_return\fP\^; -.FN -.IP \fIsra\fP 1i -.br -.ns -.IP \fIsrb\fP 1i -Specify the two regions with which you want to perform the computation. -.IP \fIdr_return\fP 1i -Returns the result of the computation. -.LP -.eM -.sp -To compute the union of two regions, use -.PN XUnionRegion . -.IN "XUnionRegion" "" "@DEF@" -.sM -.FD 0 -XUnionRegion\^(\^\fIsra\fP\^, \fIsrb\fP\^, \fIdr_return\fP\^) -.br - Region \fIsra\fP\^, \fIsrb\fP\^, \fIdr_return\fP\^; -.FN -.IP \fIsra\fP 1i -.br -.ns -.IP \fIsrb\fP 1i -Specify the two regions with which you want to perform the computation. -.IP \fIdr_return\fP 1i -Returns the result of the computation. -.LP -.eM -.sp -To create a union of a source region and a rectangle, use -.PN XUnionRectWithRegion . -.IN "XUnionRectWithRegion" "" "@DEF@" -.sM -.FD 0 -XUnionRectWithRegion\^(\^\fIrectangle\fP, \fIsrc_region\fP, \ -\fIdest_region_return\fP\^) -.br - XRectangle *\fIrectangle\fP\^; -.br - Region \fIsrc_region\fP\^; -.br - Region \fIdest_region_return\fP\^; -.FN -.IP \fIrectangle\fP 1i -Specifies the rectangle. -.IP \fIsrc_region\fP 1i -Specifies the source region to be used. -.IP \fIdest_region_return\fP 1i -Returns the destination region. -.LP -.eM -The -.PN XUnionRectWithRegion -function updates the destination region from a union of the specified rectangle -and the specified source region. -.LP -.sp -To subtract two regions, use -.PN XSubtractRegion . -.IN "XSubtractRegion" "" "@DEF@" -.sM -.FD 0 -XSubtractRegion\^(\^\fIsra\fP\^, \fIsrb\fP\^, \fIdr_return\fP\^) -.br - Region \fIsra\fP\^, \fIsrb\fP\^, \fIdr_return\fP\^; -.FN -.IP \fIsra\fP 1i -.br -.ns -.IP \fIsrb\fP 1i -Specify the two regions with which you want to perform the computation. -.IP \fIdr_return\fP 1i -Returns the result of the computation. -.LP -.eM -The -.PN XSubtractRegion -function subtracts srb from sra and stores the results in dr_return. -.LP -.sp -To calculate the difference between the union and intersection -of two regions, use -.PN XXorRegion . -.IN "XXorRegion" "" "@DEF@" -.sM -.FD 0 -XXorRegion\^(\^\fIsra\fP\^, \fIsrb\fP\^, \fIdr_return\fP\^) -.br - Region \fIsra\fP\^, \fIsrb\fP\^, \fIdr_return\fP\^; -.FN -.IP \fIsra\fP 1i -.br -.ns -.IP \fIsrb\fP 1i -Specify the two regions with which you want to perform the computation. -.IP \fIdr_return\fP 1i -Returns the result of the computation. -.LP -.eM -.NH 3 -Determining if Regions Are Empty or Equal -.XS -\*(SN Determining if Regions Are Empty or Equal -.XE -.LP -To determine if the specified region is empty, use -.PN XEmptyRegion . -.IN "XEmptyRegion" "" "@DEF@" -.sM -.FD 0 -Bool XEmptyRegion\^(\^\fIr\fP\^) -.br - Region \fIr\fP\^; -.FN -.IP \fIr\fP 1i -Specifies the region. -.LP -.eM -The -.PN XEmptyRegion -function returns -.PN True -if the region is empty. -.LP -.sp -To determine if two regions have the same offset, size, and shape, use -.PN XEqualRegion . -.IN "XEqualRegion" "" "@DEF@" -.sM -.FD 0 -Bool XEqualRegion\^(\^\fIr1\fP\^, \fIr2\fP\^) -.br - Region \fIr1\fP\^, \fIr2\fP\^; -.FN -.IP \fIr1\fP 1i -.br -.ns -.IP \fIr2\fP 1i -Specify the two regions. -.LP -.eM -The -.PN XEqualRegion -function returns -.PN True -if the two regions have the same offset, size, and shape. -.NH 3 -Locating a Point or a Rectangle in a Region -.XS -\*(SN Locating a Point or a Rectangle in a Region -.XE -.LP -To determine if a specified point resides in a specified region, use -.PN XPointInRegion . -.IN "XPointInRegion" "" "@DEF@" -.sM -.FD 0 -Bool XPointInRegion\^(\^\fIr\fP\^, \fIx\fP\^, \fIy\fP\^) -.br - Region \fIr\fP\^; -.br - int \fIx\fP\^, \fIy\fP\^; -.FN -.IP \fIr\fP 1i -Specifies the region. -.ds Xy , which define the point -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the x and y coordinates\*(Xy. -.LP -.eM -The -.PN XPointInRegion -function returns -.PN True -if the point (x, y) is contained in the region r. -.LP -.sp -To determine if a specified rectangle is inside a region, use -.PN XRectInRegion . -.IN "XRectInRegion" "" "@DEF@" -.sM -.FD 0 -int XRectInRegion\^(\^\fIr\fP\^, \fIx\fP\^, \fIy\fP\^, \fIwidth\fP\^, \fIheight\fP\^) -.br - Region \fIr\fP\^; -.br - int \fIx\fP\^, \fIy\fP\^; -.br - unsigned int \fIwidth\fP\^, \fIheight\fP\^; -.FN -.IP \fIr\fP 1i -Specifies the region. -.ds Xy , which define the coordinates of the upper-left corner of the rectangle -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the x and y coordinates\*(Xy. -.ds Wh , which define the rectangle -.IP \fIwidth\fP 1i -.br -.ns -.IP \fIheight\fP 1i -Specify the width and height\*(Wh. -.LP -.eM -The -.PN XRectInRegion -function returns -.PN RectangleIn -if the rectangle is entirely in the specified region, -.PN RectangleOut -if the rectangle is entirely out of the specified region, -and -.PN RectanglePart -if the rectangle is partially in the specified region. -.NH 2 -Using Cut Buffers -.XS -\*(SN Using Cut Buffers -.XE -.LP -.IN "Cut Buffers" -Xlib provides functions to manipulate cut buffers, -a very simple form of cut-and-paste inter-client communication. -Selections are a much more powerful and useful mechanism for -interchanging data between clients (see section 4.5) -and generally should be used instead of cut buffers. -.LP -Cut buffers are implemented as properties on the first root window -of the display. -The buffers can only contain text, in the STRING encoding. -The text encoding is not changed by Xlib when fetching or storing. -Eight buffers are provided -and can be accessed as a ring or as explicit buffers (numbered 0 through 7). -.LP -.sp -To store data in cut buffer 0, use -.PN XStoreBytes . -.IN "XStoreBytes" "" "@DEF@" -.sM -.FD 0 -XStoreBytes\^(\^\fIdisplay\fP, \fIbytes\fP\^, \fInbytes\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - char *\fIbytes\fP\^; -.br - int \^\fInbytes\fP\^; -.br -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIbytes\fP 1i -Specifies the bytes, which are not necessarily ASCII or null-terminated. -.IP \fInbytes\fP 1i -Specifies the number of bytes to be stored. -.LP -.eM -The data can have embedded null characters -and need not be null-terminated. -The cut buffer's contents can be retrieved later by -any client calling -.PN XFetchBytes . -.LP -.PN XStoreBytes -can generate a -.PN BadAlloc -error. -.LP -.sp -To store data in a specified cut buffer, use -.PN XStoreBuffer . -.IN "XStoreBuffer" "" "@DEF@" -.sM -.FD 0 -XStoreBuffer\^(\^\fIdisplay\fP, \fIbytes\fP\^, \fInbytes\fP\^, \fIbuffer\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - char *\fIbytes\fP\^; -.br - int \^\fInbytes\fP\^; -.br - int \fIbuffer\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIbytes\fP 1i -Specifies the bytes, which are not necessarily ASCII or null-terminated. -.IP \fInbytes\fP 1i -Specifies the number of bytes to be stored. -.ds Fn in which you want to store the bytes -.IP \fIbuffer\fP 1i -Specifies the buffer \*(Fn. -.LP -.eM -If an invalid buffer is specified, the call has no effect. -The data can have embedded null characters -and need not be null-terminated. -.LP -.PN XStoreBuffer -can generate a -.PN BadAlloc -error. -.LP -.sp -To return data from cut buffer 0, use -.PN XFetchBytes . -.IN "XFetchBytes" "" "@DEF@" -.sM -.FD 0 -char *XFetchBytes\^(\^\fIdisplay\fP, \fInbytes_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int *\fInbytes_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fInbytes_return\fP 1i -Returns the number of bytes in the buffer. -.LP -.eM -The -.PN XFetchBytes -function -returns the number of bytes in the nbytes_return argument, -if the buffer contains data. -Otherwise, the function -returns NULL and sets nbytes to 0. -The appropriate amount of storage is allocated and the pointer returned. -The client must free this storage when finished with it by calling -.PN XFree . -.LP -.sp -To return data from a specified cut buffer, use -.PN XFetchBuffer . -.IN "XFetchBuffer" "" "@DEF@" -.sM -.FD 0 -char *XFetchBuffer\^(\^\fIdisplay\fP, \fInbytes_return\fP\^, \fIbuffer\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int *\fInbytes_return\fP\^; -.br - int \fIbuffer\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fInbytes_return\fP 1i -Returns the number of bytes in the buffer. -.ds Fn from which you want the stored data returned -.IP \fIbuffer\fP 1i -Specifies the buffer \*(Fn. -.LP -.eM -The -.PN XFetchBuffer -function returns zero to the nbytes_return argument -if there is no data in the buffer or if an invalid -buffer is specified. -.LP -.sp -To rotate the cut buffers, use -.PN XRotateBuffers . -.IN "XRotateBuffers" "" "@DEF@" -.sM -.FD 0 -XRotateBuffers\^(\^\fIdisplay\fP, \fIrotate\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIrotate\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIrotate\fP 1i -Specifies how much to rotate the cut buffers. -.LP -.eM -The -.PN XRotateBuffers -function rotates the cut -buffers, such that buffer 0 becomes buffer n, -buffer 1 becomes n + 1 mod 8, and so on. -This cut buffer numbering is global to the display. -Note that -.PN XRotateBuffers -generates -.PN BadMatch -errors if any of the eight buffers have not been created. -.NH 2 -Determining the Appropriate Visual Type -.XS -\*(SN Determining the Appropriate Visual Type -.XE -.LP -A single display can support multiple screens. -Each screen can have several different visual types supported -at different depths. -You can use the functions described in this section to determine -which visual to use for your application. -.LP -The functions in this section use the visual information masks and the -.PN XVisualInfo -structure, -which is defined in -.hN X11/Xutil.h -and contains: -.sM -.LP -/* Visual information mask bits */ -.TS -lw(.5i) lw(2.5i) lw(.8i). -T{ -#define -T} T{ -.PN VisualNoMask -T} T{ -0x0 -T} -T{ -#define -T} T{ -.PN VisualIDMask -T} T{ -0x1 -T} -T{ -#define -T} T{ -.PN VisualScreenMask -T} T{ -0x2 -T} -T{ -#define -T} T{ -.PN VisualDepthMask -T} T{ -0x4 -T} -T{ -#define -T} T{ -.PN VisualClassMask -T} T{ -0x8 -T} -T{ -#define -T} T{ -.PN VisualRedMaskMask -T} T{ -0x10 -T} -T{ -#define -T} T{ -.PN VisualGreenMaskMask -T} T{ -0x20 -T} -T{ -#define -T} T{ -.PN VisualBlueMaskMask -T} T{ -0x40 -T} -T{ -#define -T} T{ -.PN VisualColormapSizeMask -T} T{ -0x80 -T} -T{ -#define -T} T{ -.PN VisualBitsPerRGBMask -T} T{ -0x100 -T} -T{ -#define -T} T{ -.PN VisualAllMask -T} T{ -0x1FF -T} -.TE -.IN "XVisualInfo" "" "@DEF@" -.Ds 0 -.TA .5i 3i -.ta .5i 3i -/* Values */ - -typedef struct { - Visual *visual; - VisualID visualid; - int screen; - unsigned int depth; - int class; - unsigned long red_mask; - unsigned long green_mask; - unsigned long blue_mask; - int colormap_size; - int bits_per_rgb; -} XVisualInfo; -.De -.LP -.eM -To obtain a list of visual information structures that match a specified -template, use -.PN XGetVisualInfo . -.IN "XGetVisualInfo" "" "@DEF@" -.sM -.FD 0 -XVisualInfo *XGetVisualInfo\^(\^\fIdisplay\fP, \fIvinfo_mask\fP, \fIvinfo_template\fP, \fInitems_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - long \fIvinfo_mask\fP\^; -.br - XVisualInfo *\fIvinfo_template\fP\^; -.br - int *\fInitems_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIvinfo_mask\fP 1i -Specifies the visual mask value. -.IP \fIvinfo_template\fP 1i -Specifies the visual attributes that are to be used in matching the visual -structures. -.IP \fInitems_return\fP 1i -Returns the number of matching visual structures. -.LP -.eM -The -.PN XGetVisualInfo -function returns a list of visual structures that have attributes -equal to the attributes specified by vinfo_template. -If no visual structures match the template using the specified vinfo_mask, -.PN XGetVisualInfo -returns a NULL. -To free the data returned by this function, use -.PN XFree . -.LP -.sp -To obtain the visual information that matches the specified depth and -class of the screen, use -.PN XMatchVisualInfo . -.IN "XMatchVisualInfo" "" "@DEF@" -.sM -.FD 0 -Status XMatchVisualInfo\^(\^\fIdisplay\fP, \fIscreen\fP, \fIdepth\fP, \fIclass\fP, \fIvinfo_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIscreen\fP\^; -.br - int \fIdepth\fP\^; -.br - int \fIclass\fP\^; -.br - XVisualInfo *\fIvinfo_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIscreen\fP 1i -Specifies the screen. -.IP \fIdepth\fP 1i -Specifies the depth of the screen. -.IP \fIclass\fP 1i -Specifies the class of the screen. -.IP \fIvinfo_return\fP 1i -Returns the matched visual information. -.LP -.eM -The -.PN XMatchVisualInfo -function returns the visual information for a visual that matches the specified -depth and class for a screen. -Because multiple visuals that match the specified depth and class can exist, -the exact visual chosen is undefined. -If a visual is found, -.PN XMatchVisualInfo -returns nonzero and the information on the visual to vinfo_return. -Otherwise, when a visual is not found, -.PN XMatchVisualInfo -returns zero. -.NH 2 -Manipulating Images -.XS -\*(SN Manipulating Images -.XE -.LP -Xlib provides several functions that perform basic operations on images. -All operations on images are defined using an -.PN XImage -structure, -as defined in -.hN X11/Xlib.h . -Because the number of different types of image formats can be very large, -this hides details of image storage properly from applications. -.LP -This section describes the functions for generic operations on images. -Manufacturers can provide very fast implementations of these for the -formats frequently encountered on their hardware. -These functions are neither sufficient nor desirable to use for general image -processing. -Rather, they are here to provide minimal functions on screen format -images. -The basic operations for getting and putting images are -.PN XGetImage -and -.PN XPutImage . -.LP -Note that no functions have been defined, as yet, to read and write images -to and from disk files. -.LP -The -.PN XImage -structure describes an image as it exists in the client's memory. -The user can request that some of the members such as height, width, -and xoffset be changed when the image is sent to the server. -Note that bytes_per_line in concert with offset can be used to -extract a subset of the image. -Other members (for example, byte order, bitmap_unit, and so forth) -are characteristics of both the image and the server. -If these members -differ between the image and the server, -.PN XPutImage -makes the appropriate conversions. -The first byte of the first line of -plane n must be located at the address (data + (n * height * bytes_per_line)). -For a description of the -.PN XImage -structure, -see section 8.7. -.LP -.sp -To allocate an -.PN XImage -structure and initialize it with image format values from a display, use -.PN XCreateImage . -.IN "XCreateImage" "" "@DEF@" -.sM -.FD 0 -XImage *XCreateImage\^(\^\fIdisplay\fP, \fIvisual\fP, \fIdepth\fP, \fIformat\fP, \fIoffset\fP, \fIdata\fP, \fIwidth\fP, \fIheight\fP\^, \fIbitmap_pad\fP, -.br - \fIbytes_per_line\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Visual *\fIvisual\fP\^; -.br - unsigned int \fIdepth\fP\^; -.br - int \fIformat\fP\^; -.br - int \fIoffset\fP\^; -.br - char *\fIdata\fP\^; -.br - unsigned int \fIwidth\fP\^; -.br - unsigned int \fIheight\fP\^; -.br - int \fIbitmap_pad\fP\^; -.br - int \fIbytes_per_line\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIvisual\fP 1i -Specifies the -.PN Visual -structure. -.IP \fIdepth\fP 1i -Specifies the depth of the image. -.IP \fIformat\fP 1i -Specifies the format for the image. -You can pass -.PN XYBitmap , -.PN XYPixmap , -or -.PN ZPixmap . -.IP \fIoffset\fP 1i -Specifies the number of pixels to ignore at the beginning of the scanline. -.IP \fIdata\fP 1i -Specifies the image data. -.IP \fIwidth\fP 1i -Specifies the width of the image, in pixels. -.IP \fIheight\fP 1i -Specifies the height of the image, in pixels. -.IP \fIbitmap_pad\fP 1i -Specifies the quantum of a scanline (8, 16, or 32). -In other words, the start of one scanline is separated in client memory from -the start of the next scanline by an integer multiple of this many bits. -.IP \fIbytes_per_line\fP 1i -Specifies the number of bytes in the client image between -the start of one scanline and the start of the next. -.LP -.eM -The -.PN XCreateImage -function allocates the memory needed for an -.PN XImage -structure for the -specified display but does not allocate space for the image itself. -Rather, it initializes the structure byte-order, bit-order, and bitmap-unit -values from the display and returns a pointer to the -.PN XImage -structure. -The red, green, and blue mask values are defined for Z format images only -and are derived from the -.PN Visual -structure passed in. -Other values also are passed in. -The offset permits the rapid displaying of the image without requiring each -scanline to be shifted into position. -If you pass a zero value in bytes_per_line, -Xlib assumes that the scanlines are contiguous -in memory and calculates the value of bytes_per_line itself. -.LP -Note that when the image is created using -.PN XCreateImage , -.PN XGetImage , -or -.PN XSubImage , -the destroy procedure that the -.PN XDestroyImage -function calls frees both the image structure -and the data pointed to by the image structure. -.LP -The basic functions used to get a pixel, set a pixel, create a subimage, -and add a constant value to an image are defined in the image object. -The functions in this section are really macro invocations of the functions -in the image object and are defined in -.hN X11/Xutil.h . -.LP -.sp -To obtain a pixel value in an image, use -.PN XGetPixel . -.IN "XGetPixel" "" "@DEF@" -.sM -.FD 0 -unsigned long XGetPixel\^(\^\fIximage\fP, \fIx\fP, \fIy\fP\^) -.br - XImage *\fIximage\fP\^; -.br - int \fIx\fP\^; -.br - int \fIy\fP\^; -.FN -.IP \fIximage\fP 1i -Specifies the image. -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the x and y coordinates. -.LP -.eM -The -.PN XGetPixel -function returns the specified pixel from the named image. -The pixel value is returned in normalized format (that is, -the least significant byte of the long is the least significant byte -of the pixel). -The image must contain the x and y coordinates. -.LP -.sp -To set a pixel value in an image, use -.PN XPutPixel . -.IN "XPutPixel" "" "@DEF@" -.sM -.FD 0 -XPutPixel\^(\^\fIximage\fP, \fIx\fP, \fIy\fP, \fIpixel\fP\^) -.br - XImage *\fIximage\fP\^; -.br - int \fIx\fP\^; -.br - int \fIy\fP\^; -.br - unsigned long \fIpixel\fP\^; -.FN -.IP \fIximage\fP 1i -Specifies the image. -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the x and y coordinates. -.IP \fIpixel\fP 1i -Specifies the new pixel value. -.LP -.eM -The -.PN XPutPixel -function overwrites the pixel in the named image with the specified pixel value. -The input pixel value must be in normalized format -(that is, the least significant byte of the long is the least significant -byte of the pixel). -The image must contain the x and y coordinates. -.LP -.sp -To create a subimage, use -.PN XSubImage . -.IN "XSubImage" "" "@DEF@" -.sM -.FD 0 -XImage *XSubImage\^(\^\fIximage\fP, \fIx\fP, \fIy\fP, \fIsubimage_width\fP, \fIsubimage_height\fP\^) -.br - XImage *\fIximage\fP\^; -.br - int \fIx\fP\^; -.br - int \fIy\fP\^; -.br - unsigned int \fIsubimage_width\fP\^; -.br - unsigned int \fIsubimage_height\fP\^; -.FN -.IP \fIximage\fP 1i -Specifies the image. -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the x and y coordinates. -.IP \fIsubimage_width\fP 1i -Specifies the width of the new subimage, in pixels. -.IP \fIsubimage_height\fP 1i -Specifies the height of the new subimage, in pixels. -.LP -.eM -The -.PN XSubImage -function creates a new image that is a subsection of an existing one. -It allocates the memory necessary for the new -.PN XImage -structure -and returns a pointer to the new image. -The data is copied from the source image, -and the image must contain the rectangle defined by x, y, subimage_width, -and subimage_height. -.LP -.sp -To increment each pixel in an image by a constant value, use -.PN XAddPixel . -.IN "XAddPixel" "" "@DEF@" -.sM -.FD 0 -XAddPixel\^(\^\fIximage\fP, \fIvalue\fP\^) -.br - XImage *\fIximage\fP\^; -.br - long \fIvalue\fP\^; -.FN -.IP \fIximage\fP 1i -Specifies the image. -.IP \fIvalue\fP 1i -Specifies the constant value that is to be added. -.LP -.eM -The -.PN XAddPixel -function adds a constant value to every pixel in an image. -It is useful when you have a base pixel value from allocating -color resources and need to manipulate the image to that form. -.LP -.sp -To deallocate the memory allocated in a previous call to -.PN XCreateImage , -use -.PN XDestroyImage . -.IN "XDestroyImage" "" "@DEF@" -.sM -.FD 0 -XDestroyImage\^(\^\fIximage\fP\^) -.br - XImage *\^\fIximage\fP\^; -.FN -.IP \fIximage\fP 1i -Specifies the image. -.LP -.eM -The -.PN XDestroyImage -function deallocates the memory associated with the -.PN XImage -structure. -.LP -Note that when the image is created using -.PN XCreateImage , -.PN XGetImage , -or -.PN XSubImage , -the destroy procedure that this macro calls -frees both the image structure and the data pointed to by the image structure. -.NH 2 -Manipulating Bitmaps -.XS -\*(SN Manipulating Bitmaps -.XE -.LP -Xlib provides functions that you can use to read a bitmap from a file, -save a bitmap to a file, or create a bitmap. -This section describes those functions that transfer bitmaps to and -from the client's file system, thus allowing their reuse in a later -connection (for example, from an entirely different client or to a -different display or server). -.LP -The X version 11 bitmap file format is: -.LP -.sM -.Ds 0 -#define \fIname\fP_width \fIwidth\fP -#define \fIname\fP_height \fIheight\fP -#define \fIname\fP_x_hot \fIx\fP -#define \fIname\fP_y_hot \fIy\fP -static unsigned char \fIname\fP_bits[] = { 0x\fINN\fP,... } -.De -.LP -.eM -The lines for the variables ending with _x_hot and _y_hot suffixes are optional -because they are present only if a hotspot has been defined for this bitmap. -The lines for the other variables are required. -The word ``unsigned'' is optional; -that is, the type of the _bits array can be ``char'' or ``unsigned char''. -The _bits array must be large enough to contain the size bitmap. -The bitmap unit is 8. -.LP -.sp -To read a bitmap from a file and store it in a pixmap, use -.PN XReadBitmapFile . -.IN "XReadBitmapFile" "" "@DEF@" -.sM -.FD 0 -int XReadBitmapFile(\^\fIdisplay\fP, \fId\fP, \fIfilename\fP, \fIwidth_return\fP, \fIheight_return\fP, \fIbitmap_return\fP, \fIx_hot_return\fP, -.br - \fIy_hot_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - char *\fIfilename\fP\^; -.br - unsigned int *\fIwidth_return\fP, *\fIheight_return\fP\^; -.br - Pixmap *\fIbitmap_return\fP\^; -.br - int *\fIx_hot_return\fP, *\fIy_hot_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Dr \ that indicates the screen -.IP \fId\fP 1i -Specifies the drawable\*(Dr. -.IP \fIfilename\fP 1i -Specifies the file name to use. -The format of the file name is operating-system dependent. -.IP \fIwidth_return\fP 1i -.br -.ns -.IP \fIheight_return\fP 1i -Return the width and height values of the read in bitmap file. -.IP \fIbitmap_return\fP 1i -Returns the bitmap that is created. -.IP \fIx_hot_return\fP 1i -.br -.ns -.IP \fIy_hot_return\fP 1i -Return the hotspot coordinates. -.LP -.eM -The -.PN XReadBitmapFile -function reads in a file containing a bitmap. -The file is parsed in the encoding of the current locale. -The ability to read other than the standard format -is implementation-dependent. -If the file cannot be opened, -.PN XReadBitmapFile -returns -.PN BitmapOpenFailed . -If the file can be opened but does not contain valid bitmap data, -it returns -.PN BitmapFileInvalid . -If insufficient working storage is allocated, -it returns -.PN BitmapNoMemory . -If the file is readable and valid, -it returns -.PN BitmapSuccess . -.LP -.PN XReadBitmapFile -returns the bitmap's height and width, as read -from the file, to width_return and height_return. -It then creates a pixmap of the appropriate size, -reads the bitmap data from the file into the pixmap, -and assigns the pixmap to the caller's variable bitmap. -The caller must free the bitmap using -.PN XFreePixmap -when finished. -If \fIname\fP_x_hot and \fIname\fP_y_hot exist, -.PN XReadBitmapFile -returns them to x_hot_return and y_hot_return; -otherwise, it returns \-1,\-1. -.LP -.PN XReadBitmapFile -can generate -.PN BadAlloc , -.PN BadDrawable , -and -.PN BadGC -errors. -.LP -.sp -To read a bitmap from a file and return it as data, use -.PN XReadBitmapFileData . -.IN "XReadBitmapFileData" "" "@DEF@" -.sM -.FD 0 -int XReadBitmapFileData(\^\fIfilename\fP, \fIwidth_return\fP, \fIheight_return\fP, \fIdata_return\fP, \fIx_hot_return\fP, \fIy_hot_return\fP\^) -.br - char *\fIfilename\fP\^; -.br - unsigned int *\fIwidth_return\fP, *\fIheight_return\fP\^; -.br - unsigned char *\fIdata_return\fP\^; -.br - int *\fIx_hot_return\fP, *\fIy_hot_return\fP\^; -.FN -.IP \fIfilename\fP 1i -Specifies the file name to use. -The format of the file name is operating-system dependent. -.IP \fIwidth_return\fP 1i -.br -.ns -.IP \fIheight_return\fP 1i -Return the width and height values of the read in bitmap file. -.IP \fIdata_return\fP 1i -Returns the bitmap data. -.IP \fIx_hot_return\fP 1i -.br -.ns -.IP \fIy_hot_return\fP 1i -Return the hotspot coordinates. -.LP -.eM -The -.PN XReadBitmapFileData -function reads in a file containing a bitmap, in the same manner as -.PN XReadBitmapFile , -but returns the data directly rather than creating a pixmap in the server. -The bitmap data is returned in data_return; the client must free this -storage when finished with it by calling -.PN XFree . -The status and other return values are the same as for -.PN XReadBitmapFile . -.LP -.sp -To write out a bitmap from a pixmap to a file, use -.PN XWriteBitmapFile . -.IN "XWriteBitmapFile" "" "@DEF@" -.sM -.FD 0 -int XWriteBitmapFile(\^\fIdisplay\fP, \fIfilename\fP, \fIbitmap\fP, \fIwidth\fP, \fIheight\fP, \fIx_hot\fP, \fIy_hot\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - char *\fIfilename\fP\^; -.br - Pixmap \fIbitmap\fP\^; -.br - unsigned int \fIwidth\fP, \fIheight\fP\^; -.br - int \fIx_hot\fP, \fIy_hot\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIfilename\fP 1i -Specifies the file name to use. -The format of the file name is operating-system dependent. -.IP \fIbitmap\fP 1i -Specifies the bitmap. -.IP \fIwidth\fP 1i -.br -.ns -.IP \fIheight\fP 1i -Specify the width and height. -.IP \fIx_hot\fP 1i -.br -.ns -.IP \fIy_hot\fP 1i -Specify where to place the hotspot coordinates (or \-1,\-1 if none are present) -in the file. -.LP -.eM -The -.PN XWriteBitmapFile -function writes a bitmap out to a file in the X Version 11 format. -The name used in the output file is derived from the file name -by deleting the directory prefix. -The file is written in the encoding of the current locale. -If the file cannot be opened for writing, -it returns -.PN BitmapOpenFailed . -If insufficient memory is allocated, -.PN XWriteBitmapFile -returns -.PN BitmapNoMemory ; -otherwise, on no error, -it returns -.PN BitmapSuccess . -If x_hot and y_hot are not \-1, \-1, -.PN XWriteBitmapFile -writes them out as the hotspot coordinates for the bitmap. -.LP -.PN XWriteBitmapFile -can generate -.PN BadDrawable -and -.PN BadMatch -errors. -.LP -.sp -To create a pixmap and then store bitmap-format data into it, use -.PN XCreatePixmapFromBitmapData . -.IN "XCreatePixmapFromBitmapData" "" "@DEF@" -.sM -.FD 0 -Pixmap XCreatePixmapFromBitmapData\^(\^\fIdisplay\fP, \fId\fP, \fIdata\fP, \fIwidth\fP, \fIheight\fP, \fIfg\fP, \fIbg\fP, \fIdepth\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - char *\fIdata\fP\^; -.br - unsigned int \fIwidth\fP, \fIheight\fP\^; -.br - unsigned long \fIfg\fP, \fIbg\fP\^; -.br - unsigned int \fIdepth\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Dr \ that indicates the screen -.IP \fId\fP 1i -Specifies the drawable\*(Dr. -.IP \fIdata\fP 1i -Specifies the data in bitmap format. -.IP \fIwidth\fP 1i -.br -.ns -.IP \fIheight\fP 1i -Specify the width and height. -.IP \fIfg\fP 1i -.br -.ns -.IP \fIbg\fP 1i -Specify the foreground and background pixel values to use. -.IP \fIdepth\fP 1i -Specifies the depth of the pixmap. -.LP -.eM -The -.PN XCreatePixmapFromBitmapData -function creates a pixmap of the given depth and then does a bitmap-format -.PN XPutImage -of the data into it. -The depth must be supported by the screen of the specified drawable, -or a -.PN BadMatch -error results. -.LP -.PN XCreatePixmapFromBitmapData -can generate -.PN BadAlloc , -.PN BadDrawable , -.PN BadGC , -and -.PN BadValue -errors. -.LP -.sp -To include a bitmap written out by -.PN XWriteBitmapFile -.IN "XWriteBitmapFile" -in a program directly, as opposed to reading it in every time at run time, use -.PN XCreateBitmapFromData . -.IN "XCreateBitmapFromData" "" "@DEF@" -.sM -.FD 0 -Pixmap XCreateBitmapFromData(\^\fIdisplay\fP, \fId\fP, \fIdata\fP, \fIwidth\fP, \fIheight\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Drawable \fId\fP\^; -.br - char *\fIdata\fP\^; -.br - unsigned int \fIwidth\fP, \fIheight\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Dr \ that indicates the screen -.IP \fId\fP 1i -Specifies the drawable\*(Dr. -.IP \fIdata\fP 1i -Specifies the location of the bitmap data. -.IP \fIwidth\fP 1i -.br -.ns -.IP \fIheight\fP 1i -Specify the width and height. -.LP -.eM -The -.PN XCreateBitmapFromData -function allows you to include in your C program (using -.PN #include ) -a bitmap file that was written out by -.PN XWriteBitmapFile -(X version 11 format only) without reading in the bitmap file. -The following example creates a gray bitmap: -.LP -.Ds 0 -#include "gray.bitmap" -.sp 6p -Pixmap bitmap; -bitmap = XCreateBitmapFromData(display, window, gray_bits, gray_width, gray_height); -.De -.LP -If insufficient working storage was allocated, -.PN XCreateBitmapFromData -returns -.PN None . -It is your responsibility to free the -bitmap using -.PN XFreePixmap -when finished. -.LP -.PN XCreateBitmapFromData -can generate -.PN BadAlloc -and -.PN BadGC -errors. -.NH 2 -Using the Context Manager -.XS -\*(SN Using the Context Manager -.XE -.LP -The context manager provides a way of associating data with an X resource ID -(mostly typically a window) in your program. -Note that this is local to your program; -the data is not stored in the server on a property list. -Any amount of data in any number of pieces can be associated with a -resource ID, -and each piece of data has a type associated with it. -The context manager requires knowledge of the resource ID -and type to store or retrieve data. -.LP -Essentially, the context manager can be viewed as a two-dimensional, -sparse array: one dimension is subscripted by the X resource ID -and the other by a context type field. -Each entry in the array contains a pointer to the data. -Xlib provides context management functions with which you can -save data values, get data values, delete entries, and create a unique -context type. -The symbols used are in -.hN X11/Xutil.h . -.LP -.sp -To save a data value that corresponds to a resource ID and context type, use -.PN XSaveContext . -.IN "XSaveContext" "" "@DEF@" -.sM -.FD 0 -int XSaveContext(\^\fIdisplay\fP, \fIrid\fP, \fIcontext\fP, \fIdata\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XID \fIrid\fP\^; -.br - XContext \fIcontext\fP\^; -.br - XPointer \fIdata\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIrid\fP 1i -Specifies the resource ID with which the data is associated. -.IP \fIcontext\fP 1i -Specifies the context type to which the data belongs. -.IP \fIdata\fP 1i -Specifies the data to be associated with the window and type. -.LP -.eM -If an entry with the specified resource ID and type already exists, -.PN XSaveContext -overrides it with the specified context. -The -.PN XSaveContext -function returns a nonzero error code if an error has occurred -and zero otherwise. -Possible errors are -.PN XCNOMEM -(out of memory). -.LP -.sp -To get the data associated with a resource ID and type, use -.PN XFindContext . -.IN "XFindContext" "" "@DEF@" -.sM -.FD 0 -int XFindContext(\^\fIdisplay\fP, \fIrid\fP, \fIcontext\fP, \fIdata_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XID \fIrid\fP\^; -.br - XContext \fIcontext\fP\^; -.br - XPointer *\fIdata_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIrid\fP 1i -Specifies the resource ID with which the data is associated. -.IP \fIcontext\fP 1i -Specifies the context type to which the data belongs. -.IP \fIdata_return\fP 1i -Returns the data. -.LP -.eM -Because it is a return value, -the data is a pointer. -The -.PN XFindContext -function returns a nonzero error code if an error has occurred -and zero otherwise. -Possible errors are -.PN XCNOENT -(context-not-found). -.LP -.sp -To delete an entry for a given resource ID and type, use -.PN XDeleteContext . -.IN "XDeleteContext" "" "@DEF@" -.sM -.FD 0 -int XDeleteContext(\^\fIdisplay\fP, \fIrid\fP, \fIcontext\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XID \fIrid\fP; -.br - XContext \fIcontext\fP; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIrid\fP 1i -Specifies the resource ID with which the data is associated. -.IP \fIcontext\fP 1i -Specifies the context type to which the data belongs. -.LP -.eM -The -.PN XDeleteContext -function deletes the entry for the given resource ID -and type from the data structure. -This function returns the same error codes that -.PN XFindContext -returns if called with the same arguments. -.PN XDeleteContext -does not free the data whose address was saved. -.LP -.sp -To create a unique context type that may be used in subsequent calls to -.PN XSaveContext -and -.PN XFindContext , -use -.PN XUniqueContext . -.IN "XUniqueContext" "" "@DEF@" -.sM -.FD 0 -XContext XUniqueContext(\^) -.FN -.LP -.eM -.bp diff --git a/doc/xorg-docs/specs/X11/abstract.t b/doc/xorg-docs/specs/X11/abstract.t deleted file mode 100644 index 7c19c0a1e..000000000 --- a/doc/xorg-docs/specs/X11/abstract.t +++ /dev/null @@ -1,104 +0,0 @@ -.\" $XFree86: xc/doc/specs/X11/abstract.t,v 1.2 2003/07/09 15:27:26 tsi Exp $ -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.ps 11 -.nr PS 11 -\& -.sp 5 -.ce 6 -\s+2\fBXlib \- C Language X Interface\fP\s-2 - -\s+1\fBX Window System Standard\fP\s-1 - -\s+1\fBX Version 11, Release 6.8\fP\s-1 -.sp 6 -.ce 4 -\s-1James Gettys -.sp 6p -Cambridge Research Laboratory -Digital Equipment Corporation -.sp 2 -.ce 4 -Robert W. Scheifler -.sp 6p -Laboratory for Computer Science -Massachusetts Institute of Technology -.sp 3 -.ce 1 -\fIwith contributions from\fP -.sp 3 -.ce 11 -Chuck Adams, Tektronix, Inc. -.sp 1 -Vania Joloboff, Open Software Foundation -.sp 1 -Hideki Hiura, Sun Microsystems, Inc. -.sp 1 -Bill McMahon, Hewlett-Packard Company -.sp 1 -Ron Newman, Massachusetts Institute of Technology -.sp 1 -Al Tabayoyon, Tektronix, Inc. -.sp 1 -Glenn Widener, Tektronix, Inc. -.sp 1 -Shigeru Yamada, Fujitsu OSSI -.bp -\& -.ps 9 -.nr PS 9 -.sp 8 -.LP -The X Window System is a trademark of The Open Group. -.LP -TekHVC is a trademark of Tektronix, Inc. -.sp 2 -.LP -Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996, 2002 -The Open Group -.LP -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: -.LP -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. -.LP -Except as contained in this notice, the name of The Open Group shall -not be used in advertising or otherwise to promote the sale, use or -other dealings in this Software without prior written authorization -from The Open Group. -.sp 3 -.LP -Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by -Digital Equipment Corporation -.LP -Portions Copyright \(co 1990, 1991 by -Tektronix, Inc. -.LP -Permission to use, copy, modify and distribute this documentation for -any purpose and without fee is hereby granted, provided that the above -copyright notice appears in all copies and that both that copyright notice and -this permission notice appear in all copies, and that the names of -Digital and Tektronix not be used in in advertising or publicity -pertaining to this documentation without specific, written prior permission. -Digital and Tektronix makes no representations about the suitability -of this documentation for any purpose. -It is provided ``as is'' without express or implied warranty. -.ps 11 -.nr PS 11 -.bp diff --git a/doc/xorg-docs/specs/X11/credits.t b/doc/xorg-docs/specs/X11/credits.t deleted file mode 100644 index 5d9909d7c..000000000 --- a/doc/xorg-docs/specs/X11/credits.t +++ /dev/null @@ -1,216 +0,0 @@ -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.XS ii -Table of Contents -.XE -.XS iii -Acknowledgments -.XE -\& -.sp 1 -.ce 3 -\s+1\fBAcknowledgments\fP\s-1 -.sp 2 -.na -.LP -The design and implementation of the first 10 versions of X -were primarily the work of three individuals: Robert Scheifler of the -MIT Laboratory for Computer Science and Jim Gettys of Digital -Equipment Corporation and Ron Newman of MIT, both at MIT -Project Athena. -X version 11, however, is the result of the efforts of -dozens of individuals at almost as many locations and organizations. -At the risk of offending some of the players by exclusion, -we would like to acknowledge some of the people who deserve special credit -and recognition for their work on Xlib. -Our apologies to anyone inadvertently overlooked. -.SH -Release 1 -.LP -Our thanks does to Ron Newman (MIT Project Athena), -who contributed substantially to the -design and implementation of the Version 11 Xlib interface. -.LP -Our thanks also goes to Ralph Swick (Project Athena and Digital) who kept -it all together for us during the early releases. -He handled literally thousands of requests from people everywhere -and saved the sanity of at least one of us. -His calm good cheer was a foundation on which we could build. -.LP -Our thanks also goes to Todd Brunhoff (Tektronix) who was ``loaned'' -to Project Athena at exactly the right moment to provide very capable -and much-needed assistance during the alpha and beta releases. -He was responsible for the successful integration of sources -from multiple sites; -we would not have had a release without him. -.LP -Our thanks also goes to Al Mento and Al Wojtas of Digital's ULTRIX -Documentation Group. -With good humor and cheer, -they took a rough draft and made it an infinitely better and more useful -document. -The work they have done will help many everywhere. -We also would like to thank Hal Murray (Digital SRC) and -Peter George (Digital VMS) who contributed much -by proofreading the early drafts of this document. -.LP -Our thanks also goes to Jeff Dike (Digital UEG), Tom Benson, -Jackie Granfield, and Vince Orgovan (Digital VMS) who helped with the -library utilities implementation; -to Hania Gajewska (Digital UEG-WSL) who, -along with Ellis Cohen (CMU and Siemens), -was instrumental in the semantic design of the window manager properties; -and to Dave Rosenthal (Sun Microsystems) who also contributed to the protocol -and provided the sample generic color frame buffer device-dependent code. -.LP -The alpha and beta test participants deserve special recognition and thanks -as well. -It is significant -that the bug reports (and many fixes) during alpha and beta test came almost -exclusively from just a few of the alpha testers, mostly hardware vendors -working on product implementations of X. -The continued public -contribution of vendors and universities is certainly to the benefit -of the entire X community. -.LP -Our special thanks must go to Sam Fuller, Vice-President of Corporate -Research at Digital, who has remained committed to the widest public -availability of X and who made it possible to greatly supplement MIT's -resources with the Digital staff in order to make version 11 a reality. -Many of the people mentioned here are part of the Western -Software Laboratory (Digital UEG-WSL) of the ULTRIX Engineering group -and work for Smokey Wallace, who has been vital to the project's success. -Others not mentioned here worked on the toolkit and are acknowledged -in the X Toolkit documentation. -.LP -Of course, -we must particularly thank Paul Asente, formerly of Stanford University -and now of Digital UEG-WSL, who wrote W, the predecessor to X, -and Brian Reid, formerly of Stanford University and now of Digital WRL, -who had much to do with W's design. -.LP -Finally, our thanks goes to MIT, Digital Equipment Corporation, -and IBM for providing the environment where it could happen. -.SH -Release 4 -.LP -Our thanks go to Jim Fulton (MIT X Consortium) for designing and -specifying the new Xlib functions for Inter-Client Communication -Conventions (ICCCM) support. -.LP -We also thank Al Mento of Digital for his continued effort in -maintaining this document and Jim Fulton and Donna Converse (MIT X Consortium) -for their much-appreciated efforts in reviewing the changes. -.SH -Release 5 -.LP -The principal authors of the Input Method facilities are -Vania Joloboff (Open Software Foundation) and Bill McMahon (Hewlett-Packard). -The principal author of the rest of the internationalization facilities -is Glenn Widener (Tektronix). Our thanks to them for keeping their -sense of humor through a long and sometimes difficult design process. -Although the words and much of the design are due to them, many others -have contributed substantially to the design and implementation. -Tom McFarland (HP) and Frank Rojas (IBM) deserve particular recognition -for their contributions. Other contributors were: -Tim Anderson (Motorola), Alka Badshah (OSF), Gabe Beged-Dov (HP), -Chih-Chung Ko (III), Vera Cheng (III), Michael Collins (Digital), -Walt Daniels (IBM), Noritoshi Demizu (OMRON), Keisuke Fukui (Fujitsu), -Hitoshoi Fukumoto (Nihon Sun), Tim Greenwood (Digital), John Harvey (IBM), -Hideki Hiura (Sun), Fred Horman (AT&T), Norikazu Kaiya (Fujitsu), -Yuji Kamata (IBM), -Yutaka Kataoka (Waseda University), Ranee Khubchandani (Sun), Akira Kon (NEC), -Hiroshi Kuribayashi (OMRON), Teruhiko Kurosaka (Sun), Seiji Kuwari (OMRON), -Sandra Martin (OSF), Narita Masahiko (Fujitsu), Masato Morisaki (NTT), -Nelson Ng (Sun), -Takashi Nishimura (NTT America), Makato Nishino (IBM), -Akira Ohsone (Nihon Sun), Chris Peterson (MIT), Sam Shteingart (AT&T), -Manish Sheth (AT&T), Muneiyoshi Suzuki (NTT), Cori Mehring (Digital), -Shoji Sugiyama (IBM), and Eiji Tosa (IBM). -.LP -We are deeply indebted to Tatsuya Kato (NTT), -Hiroshi Kuribayashi (OMRON), Seiji Kuwari (OMRON), Muneiyoshi Suzuki (NTT), -and Li Yuhong (OMRON) for producing one of the first complete -sample implementation of the internationalization facilities, and -Hiromu Inukai (Nihon Sun), Takashi Fujiwara (Fujitsu), Hideki Hiura (Sun), -Yasuhiro Kawai (Oki Technosystems Laboratory), Kazunori Nishihara (Fuji Xerox), -Masaki Takeuchi (Sony), Katsuhisa Yano (Toshiba), -Makoto Wakamatsu (Sony Corporation) for producing the another complete -sample implementation of the internationalization facilities. -.LP -The principal authors (design and implementation) of the Xcms color -management facilities are Al Tabayoyon (Tektronix) -and Chuck Adams (Tektronix). -Joann Taylor (Tektronix), Bob Toole (Tektronix), -and Keith Packard (MIT X Consortium) also -contributed significantly to the design. Others who contributed are: -Harold Boll (Kodak), Ken Bronstein (HP), Nancy Cam (SGI), -Donna Converse (MIT X Consortium), Elias Israel (ISC), Deron Johnson (Sun), -Jim King (Adobe), Ricardo Motta (HP), Chuck Peek (IBM), -Wil Plouffe (IBM), Dave Sternlicht (MIT X Consortium), Kumar Talluri (AT&T), -and Richard Verberg (IBM). -.LP -We also once again thank Al Mento of Digital for his work in formatting -and reformatting text for this manual, and for producing man pages. -Thanks also to Clive Feather (IXI) for proof-reading and finding a -number of small errors. -.SH -Release 6 -.LP -Stephen Gildea (X Consortium) authored the threads support. -Ovais Ashraf (Sun) and Greg Olsen (Sun) contributed substantially -by testing the facilities and reporting bugs in a timely fashion. -.LP -The principal authors of the internationalization facilities, including -Input and Output Methods, are Hideki Hiura (SunSoft) and -Shigeru Yamada (Fujitsu OSSI). -Although the words and much of the design are due to them, many others -have contributed substantially to the design and implementation. -They are: Takashi Fujiwara (Fujitsu), Yoshio Horiuchi (IBM), -Makoto Inada (Digital), Hiromu Inukai (Nihon SunSoft), -Song JaeKyung (KAIST), Franky Ling (Digital), Tom McFarland (HP), -Hiroyuki Miyamoto (Digital), Masahiko Narita (Fujitsu), -Frank Rojas (IBM), Hidetoshi Tajima (HP), Masaki Takeuchi (Sony), -Makoto Wakamatsu (Sony), Masaki Wakao (IBM), Katsuhisa Yano(Toshiba) and -Jinsoo Yoon (KAIST). -.LP -The principal producers of the sample implementation of the -internationalization facilities are: -Jeffrey Bloomfield (Fujitsu OSSI), Takashi Fujiwara (Fujitsu), -Hideki Hiura (SunSoft), Yoshio Horiuchi (IBM), -Makoto Inada (Digital), Hiromu Inukai (Nihon SunSoft), -Song JaeKyung (KAIST), Riki Kawaguchi (Fujitsu), -Franky Ling (Digital), Hiroyuki Miyamoto (Digital), -Hidetoshi Tajima (HP), Toshimitsu Terazono (Fujitsu), -Makoto Wakamatsu (Sony), Masaki Wakao (IBM), -Shigeru Yamada (Fujitsu OSSI) and Katsuhisa Yano (Toshiba). -.LP -The coordinators of the integration, testing, and release of this -implementation of the internationalization facilities are -Nobuyuki Tanaka (Sony) and Makoto Wakamatsu (Sony). -.LP -Others who have contributed to the architectural design or -testing of the sample implementation of the -internationalization facilities are: -Hector Chan (Digital), Michael Kung (IBM), Joseph Kwok (Digital), -Hiroyuki Machida (Sony), Nelson Ng (SunSoft), Frank Rojas (IBM), -Yoshiyuki Segawa (Fujitsu OSSI), Makiko Shimamura (Fujitsu), -Shoji Sugiyama (IBM), Lining Sun (SGI), Masaki Takeuchi (Sony), -Jinsoo Yoon (KAIST) and Akiyasu Zen (HP). -.sp 2 -.LP -.Ds 0 -.TA 1.5i 3i -.ta 1.5i 3i -.R -Jim Gettys -Cambridge Research Laboratory -Digital Equipment Corporation - -Robert W. Scheifler -Laboratory for Computer Science -Massachusetts Institute of Technology -.DE -.bp 1 diff --git a/doc/xorg-docs/specs/X11/glossary b/doc/xorg-docs/specs/X11/glossary deleted file mode 100644 index a130928a6..000000000 --- a/doc/xorg-docs/specs/X11/glossary +++ /dev/null @@ -1,1484 +0,0 @@ -\& -.sp 1 -.ce 1 -\s+1\fBGlossary\fP\s-1 -.sp 2 -.na -.LP -.XS -Glossary -.XE -.KS -\fBAccess control list\fP -.IN "Access control list" "" "@DEF@" -.IP -X maintains a list of hosts from which client programs can be run. -By default, -only programs on the local host and hosts specified in an initial list read -by the server can use the display. -This access control list can be changed by clients on the local host. -Some server implementations can also implement other authorization mechanisms -in addition to or in place of this mechanism. -The action of this mechanism can be conditional based on the authorization -protocol name and data received by the server at connection setup. -.KE -.LP -.KS -\fBActive grab\fP -.IN "Active grab" "" "@DEF@" -.IP -A grab is active when the pointer or keyboard is actually owned by the -single grabbing client. -.KE -.LP -.KS -\fBAncestors\fP -.IN "Ancestors" "" "@DEF@" -.IP -If W is an inferior of A, then A is an ancestor of W. -.KE -.LP -.KS -\fBAtom\fP -.IN "Atom" "" "@DEF@" -.IP -An atom is a unique ID corresponding to a string name. -Atoms are used to identify properties, types, and selections. -.KE -.LP -.KS -\fBBackground\fP -.IN "Background" "" "@DEF@" -.IP -An -.PN InputOutput -window can have a background, which is defined as a pixmap. -When regions of the window have their contents lost -or invalidated, -the server automatically tiles those regions with the background. -.KE -.LP -.KS -\fBBacking store\fP -.IN "Backing store" "" "@DEF@" -.IP -When a server maintains the contents of a window, -the pixels saved off-screen are known as a backing store. -.KE -.LP -.KS -\fBBase font name\fP -.IN "Base font name" "" "@DEF@" -.IP -A font name used to select a family of fonts whose members may be encoded -in various charsets. -The -.PN CharSetRegistry -and -.PN CharSetEncoding -fields of an XLFD name identify the charset of the font. -A base font name may be a full XLFD name, with all fourteen '-' delimiters, -or an abbreviated XLFD name containing only the first 12 fields of an XLFD name, -up to but not including -.PN CharSetRegistry , -with or without the thirteenth '-', or a non-XLFD name. -Any XLFD fields may contain wild cards. -.IP -When creating an -.PN XFontSet , -Xlib accepts from the client a list of one or more base font names -which select one or more font families. -They are combined with charset names obtained from the encoding of the locale -to load the fonts required to render text. -.KE -.LP -.KS -\fBBit gravity\fP -.IN "Bit" "gravity" "@DEF@" -.IP -When a window is resized, -the contents of the window are not necessarily discarded. -It is possible to request that the server relocate the previous contents -to some region of the window (though no guarantees are made). -This attraction of window contents for some location of -a window is known as bit gravity. -.KE -.LP -.KS -\fBBit plane\fP -.IN "Bit" "plane" "@DEF@" -.IP -When a pixmap or window is thought of as a stack of bitmaps, -each bitmap is called a bit plane or plane. -.KE -.LP -.KS -\fBBitmap\fP -.IN "Bitmap" "" "@DEF@" -.IP -A bitmap is a pixmap of depth one. -.KE -.LP -.KS -\fBBorder\fP -.IN "Border" "" "@DEF@" -.IP -An -.PN InputOutput -window can have a border of equal thickness on all four sides of the window. -The contents of the border are defined by a pixmap, -and the server automatically maintains the contents of the border. -Exposure events are never generated for border regions. -.KE -.LP -.KS -\fBButton grabbing\fP -.IN "Button" "grabbing" "@DEF@" -.IP -Buttons on the pointer can be passively grabbed by a client. -When the button is pressed, -the pointer is then actively grabbed by the client. -.KE -.LP -.KS -\fBByte order\fP -.IN "Byte" "order" "@DEF@" -.IP -For image (pixmap/bitmap) data, -the server defines the byte order, -and clients with different native byte ordering must swap bytes as -necessary. -For all other parts of the protocol, -the client defines the byte order, -and the server swaps bytes as necessary. -.KE -.LP -.KS -\fBCharacter\fP -.IN "Character" "" "@DEF@" -.IP -A member of a set of elements used for the organization, -control, or representation of text (ISO2022, as adapted by XPG3). -Note that in ISO2022 terms, a character is not bound to a coded value -until it is identified as part of a coded character set. -.KE -.LP -.KS -\fBCharacter glyph\fP -.IN "Character glyph" "" "@DEF@" -.IP -The abstract graphical symbol for a character. -Character glyphs may or may not map one-to-one to font glyphs, -and may be context-dependent, varying with the adjacent characters. -Multiple characters may map to a single character glyph. -.KE -.LP -.KS -\fBCharacter set\fP -.IN "Character set" "" "@DEF@" -.IP -A collection of characters. -.KE -.LP -.KS -\fBCharset\fP -.IN "Charset" "" "@DEF@" -.IP -An encoding with a uniform, state-independent mapping from characters -to codepoints. -A coded character set. -.IP -For display in X, -there can be a direct mapping from a charset to one font, -if the width of all characters in the charset is either one or two bytes. -A text string encoded in an encoding such as Shift-JIS cannot be passed -directly to the X server, because the text imaging requests accept only -single-width charsets (either 8 or 16 bits). -Charsets which meet these restrictions can serve as ``font charsets''. -Font charsets strictly speaking map font indices to font glyphs, -not characters to character glyphs. -.IP -Note that a single font charset is sometimes used as the encoding of a locale, -for example, ISO8859-1. -.KE -.LP -.KS -\fBChildren\fP -.IN "Children" "" "@DEF@" -.IP -The children of a window are its first-level subwindows. -.KE -.LP -.KS -\fBClass\fP -.IN "Class" "" "@DEF@" -.IP -Windows can be of different classes or types. -See the entries for -.PN InputOnly -and -.PN InputOutput -windows for further information about valid window types. -.KE -.LP -.KS -\fBClient\fP -.IN "Client" "" "@DEF@" -.IP -An application program connects to the window system server by some -interprocess communication (IPC) path, such as a TCP connection or a -shared memory buffer. -This program is referred to as a client of the window system server. -More precisely, -the client is the IPC path itself. -A program with multiple paths open to the server is viewed as -multiple clients by the protocol. -Resource lifetimes are controlled by -connection lifetimes, not by program lifetimes. -.KE -.LP -.KS -\fBClipping region\fP -.IN "Clipping region" "" "@DEF@" -.IP -In a graphics context, -a bitmap or list of rectangles can be specified -to restrict output to a particular region of the window. -The image defined by the bitmap or rectangles is called a clipping region. -.KE -.LP -.KS -\fBCoded character\fP -.IN "Coded character" "" "@DEF@" -.IP -A character bound to a codepoint. -.KE -.LP -.KS -\fBCoded character set\fP -.IN "Coded character set" "" "@DEF@" -.IP -A set of unambiguous rules that establishes a character set -and the one-to-one relationship between each character of the set -and its bit representation. -(ISO2022, as adapted by XPG3) -A definition of a one-to-one mapping of a set of characters to a set of -codepoints. -.KE -.LP -.KS -\fBCodepoint\fP -.IN "Codepoint" "" "@DEF@" -.IP -The coded representation of a single character in a coded character set. -.KE -.LP -.KS -\fBColormap\fP -.IN "Colormap" "" "@DEF@" -.IP -A colormap consists of a set of entries defining color values. -The colormap associated with a window is used to display the contents of -the window; each pixel value indexes the colormap to produce an RGB value -that drives the guns of a monitor. -Depending on hardware limitations, -one or more colormaps can be installed at one time so -that windows associated with those maps display with true colors. -.KE -.LP -.KS -\fBConnection\fP -.IN "Connection" "" "@DEF@" -.IP -The IPC path between the server and client program is known as a connection. -A client program typically (but not necessarily) has one -connection to the server over which requests and events are sent. -.KE -.LP -.KS -\fBContainment\fP -.IN "Containment" "" "@DEF@" -.IP -A window contains the pointer if the window is viewable and the -hotspot of the cursor is within a visible region of the window or a -visible region of one of its inferiors. -The border of the window is included as part of the window for containment. -The pointer is in a window if the window contains the pointer -but no inferior contains the pointer. -.KE -.LP -.KS -\fBCoordinate system\fP -.IN "Coordinate system" "" "@DEF@" -.IP -The coordinate system has X horizontal and Y vertical, -with the origin [0, 0] at the upper left. -Coordinates are integral and coincide with pixel centers. -Each window and pixmap has its own coordinate system. -For a window, -the origin is inside the border at the inside upper-left corner. -.KE -.LP -.KS -\fBCursor\fP -.IN "Cursor" "" "@DEF@" -.IP -A cursor is the visible shape of the pointer on a screen. -It consists of a hotspot, a source bitmap, a shape bitmap, -and a pair of colors. -The cursor defined for a window controls the visible -appearance when the pointer is in that window. -.KE -.LP -.KS -\fBDepth\fP -.IN "Depth" "" "@DEF@" -.IP -The depth of a window or pixmap is the number of bits per pixel it has. -The depth of a graphics context is the depth of the drawables it can be -used in conjunction with graphics output. -.KE -.LP -.KS -\fBDevice\fP -.IN "Device" "" "@DEF@" -.IP -Keyboards, mice, tablets, track-balls, button boxes, and so on are all -collectively known as input devices. -Pointers can have one or more buttons -(the most common number is three). -The core protocol only deals with two devices: the keyboard -and the pointer. -.KE -.LP -.KS -\fBDirectColor\fP -.IN "DirectColor" "" "@DEF@" -.IP -.PN DirectColor -is a class of colormap in which a pixel value is decomposed into three -separate subfields for indexing. -The first subfield indexes an array to produce red intensity values. -The second subfield indexes a second array to produce blue intensity values. -The third subfield indexes a third array to produce green intensity values. -The RGB (red, green, and blue) values in the colormap entry can be -changed dynamically. -.KE -.LP -.KS -\fBDisplay\fP -.IN "Display" "" "@DEF@" -.IP -A server, together with its screens and input devices, is called a display. -The Xlib -.PN Display -.IN "Display" "structure" -structure contains all information about the particular display and its screens -as well as the state that Xlib needs to communicate with the display over a -particular connection. -.KE -.LP -.KS -\fBDrawable\fP -.IN "Drawable" "" "@DEF@" -.IP -Both windows and pixmaps can be used as sources and destinations -in graphics operations. -These windows and pixmaps are collectively known as drawables. -However, an -.PN InputOnly -window cannot be used as a source or destination in a -graphics operation. -.KE -.LP -.KS -\fBEncoding\fP -.IN "Encoding" "" "@DEF@" -.IP -A set of unambiguous rules that establishes a character set -and a relationship between the characters and their representations. -The character set does not have to be fixed to a finite pre-defined set of -characters. -The representations do not have to be of uniform length. -Examples are an ISO2022 graphic set, a state-independent -or state-dependent combination of graphic sets, possibly including control -sets, and the X Compound Text encoding. -.IP -In X, encodings are identified by a string -which appears as: the -.PN CharSetRegistry -and -.PN CharSetEncoding -components of an XLFD -name; the name of a charset of the locale for which a font could not be -found; or an atom which identifies the encoding of a text property or -which names an encoding for a text selection target type. -Encoding names should be composed of characters from the X Portable -Character Set. -.KE -.LP -.KS -\fBEscapement\fP -.IN "Escapement" "" "@DEF@" -.IP -The escapement of a string is the distance in pixels in the -primary draw direction from the drawing origin to the origin of the next -character (that is, the one following the given string) to be drawn. -.KE -.LP -.KS -\fBEvent\fP -.IN "Event" "" "@DEF@" -.IP -Clients are informed of information asynchronously by means of events. -These events can be either asynchronously generated from devices or -generated as side effects of client requests. -Events are grouped into types. -The server never sends an event to a client unless the -client has specifically asked to be informed of that type of event. -However, clients can force events to be sent to other clients. -Events are typically reported relative to a window. -.KE -.LP -.KS -\fBEvent mask\fP -.IN "Event" "mask" "@DEF@" -.IP -Events are requested relative to a window. -The set of event types a client requests relative to a window is described -by using an event mask. -.KE -.LP -.KS -\fBEvent propagation\fP -.IN "Event" "propagation" "@DEF@" -.IP -Device-related events propagate from the source window to ancestor -windows until some client has expressed interest in handling that type -of event or until the event is discarded explicitly. -.KE -.LP -.KS -\fBEvent source\fP -.IN "Event" "source" "@DEF@" -.IP -The deepest viewable window that the pointer is in is called -the source of a device-related event. -.KE -.LP -.KS -\fBEvent synchronization\fP -.IN "Event" "synchronization" "@DEF@" -.IP -There are certain race conditions possible when demultiplexing device -events to clients (in particular, deciding where pointer and keyboard -events should be sent when in the middle of window management -operations). -The event synchronization mechanism allows synchronous processing of -device events. -.KE -.LP -.KS -\fBExposure event\fP -.IN "Event" "Exposure" "@DEF@" -.IP -Servers do not guarantee to preserve the contents of windows when -windows are obscured or reconfigured. -Exposure events are sent to clients to inform them when contents of regions -of windows have been lost. -.KE -.LP -.KS -\fBExtension\fP -.IN "Extension" "" "@DEF@" -.IP -Named extensions to the core protocol can be defined to extend the system. -Extensions to output requests, resources, and event types are all possible -and expected. -.KE -.LP -.KS -\fBFont\fP -.IN "Font" "" "@DEF@" -.IP -A font is an array of glyphs (typically characters). -The protocol does no translation or interpretation of character sets. -The client simply indicates values used to index the glyph array. -A font contains additional metric information to determine interglyph -and interline spacing. -.KE -.LP -.KS -\fBFont glyph\fP -.IN "Font glyph" "" "@DEF@" -.IP -The abstract graphical symbol for an index into a font. -.KE -.LP -.KS -\fBFrozen events\fP -.IN "Frozen events" "" "@DEF@" -.IP -Clients can freeze event processing during keyboard and pointer grabs. -.KE -.LP -.KS -\fBGC\fP -.IN "GC" "" "@DEF@" -.IP -GC is an abbreviation for graphics context. -See \fBGraphics context\fP. -.KE -.LP -.KS -\fBGlyph\fP -.IN "Glyph" "" "@DEF@" -.IP -An identified abstract graphical symbol independent of any actual image. -(ISO/IEC/DIS 9541-1) -An abstract visual representation of a graphic character, -not bound to a codepoint. -.KE -.LP -.KS -\fBGlyph image\fP -.IN "Glyph image" "" "@DEF@" -.IP -An image of a glyph, as obtained from a glyph representation displayed -on a presentation surface. -(ISO/IEC/DIS 9541-1) -.KE -.LP -.KS -\fBGrab\fP -.IN "Grab" "" "@DEF@" -.IP -Keyboard keys, the keyboard, pointer buttons, the pointer, -and the server can be grabbed for exclusive use by a client. -In general, -these facilities are not intended to be used by normal applications -but are intended for various input and window managers to implement various -styles of user interfaces. -.KE -.LP -.KS -\fBGraphics context\fP -.IN "Graphics context" "" "@DEF@" -.IP -Various information for graphics output is stored in a graphics -context (GC), such as foreground pixel, background -pixel, line width, clipping region, and so on. -A graphics context can only -be used with drawables that have the same root and the same depth as -the graphics context. -.KE -.LP -.KS -\fBGravity\fP -.IN "Gravity" "" "@DEF@" -.IP -The contents of windows and windows themselves have a gravity, -which determines how the contents move when a window is resized. -See \fBBit gravity\fP and \fBWindow gravity\fP. -.KE -.LP -.KS -\fBGrayScale\fP -.IN "GrayScale" "" "@DEF@" -.IP -.PN GrayScale -can be viewed as a degenerate case of -.PN PseudoColor , -in which the red, green, and blue values in any given colormap entry -are equal and thus, produce shades of gray. -The gray values can be changed dynamically. -.KE -.LP -.KS -\fBHost Portable Character Encoding\fP -.IN "Host Portable Character Encoding" "" "@DEF@" -.IP -The encoding of the X Portable Character Set on the host. -The encoding itself is not defined by this standard, -but the encoding must be the same in all locales supported by Xlib on the host. -If a string is said to be in the Host Portable Character Encoding, -then it only contains characters from the X Portable Character Set, -in the host encoding. -.KE -.LP -.KS -\fBHotspot\fP -.IN "Hotspot" "" "@DEF@" -.IP -A cursor has an associated hotspot, which defines the point in the -cursor corresponding to the coordinates reported for the pointer. -.KE -.LP -.KS -\fBIdentifier\fP -.IN "Identifier" "" "@DEF@" -.IP -An identifier is a unique value associated with a resource -that clients use to name that resource. -The identifier can be used over any connection to name the resource. -.KE -.LP -.KS -\fBInferiors\fP -.IN "Inferiors" "" "@DEF@" -.IP -The inferiors of a window are all of the subwindows nested below it: -the children, the children's children, and so on. -.KE -.LP -.KS -\fBInput focus\fP -.IN "Input" "focus" "@DEF@" -.IP -The input focus is usually a window defining the scope for processing -of keyboard input. -If a generated keyboard event usually would be reported to this window -or one of its inferiors, -the event is reported as usual. -Otherwise, the event is reported with respect to the focus window. -The input focus also can be set such that all keyboard events are discarded -and such that the focus window is dynamically taken to be the root window -of whatever screen the pointer is on at each keyboard event. -.KE -.LP -.KS -\fBInput manager\fP -.IN "Input" "manager" "@DEF@" -.IP -Control over keyboard input is typically provided by an input manager -client, which usually is part of a window manager. -.KE -.LP -.KS -\fBInputOnly window\fP -.IN "Window" "InputOnly" "@DEF@" -.IP -An -.PN InputOnly -window is a window that cannot be used for graphics requests. -.PN InputOnly -windows are invisible and are used to control such things as cursors, -input event generation, and grabbing. -.PN InputOnly -windows cannot have -.PN InputOutput -windows as inferiors. -.KE -.LP -.KS -\fBInputOutput window\fP -.IN "Window" "InputOutput" "@DEF@" -.IP -An -.PN InputOutput -window is the normal kind of window that is used for both input and output. -.PN InputOutput -windows can have both -.PN InputOutput -and -.PN InputOnly -windows as inferiors. -.KE -.LP -.KS -\fBInternationalization\fP -.IN "Internationalization" "" "@DEF@" -.IP -The process of making software adaptable to the requirements -of different native languages, local customs, and character string encodings. -Making a computer program adaptable to different locales -without program source modifications or recompilation. -.KE -.LP -.KS -\fBISO2022\fP -.IN "ISO2022" "" "@DEF@" -.IP -ISO standard for code extension techniques for 7-bit and 8-bit coded -character sets. -.KE -.LP -.KS -\fBKey grabbing\fP -.IN "Key" "grabbing" "@DEF@" -.IP -Keys on the keyboard can be passively grabbed by a client. -When the key is pressed, -the keyboard is then actively grabbed by the client. -.KE -.LP -.KS -\fBKeyboard grabbing\fP -.IN "Keyboard" "grabbing" "@DEF@" -.IP -A client can actively grab control of the keyboard, and key events -will be sent to that client rather than the client the events would -normally have been sent to. -.KE -.LP -.KS -\fBKeysym\fP -.IN "Keysym" "" "@DEF@" -.IP -An encoding of a symbol on a keycap on a keyboard. -.KE -.LP -.KS -\fBLatin-1\fP -.IN "Latin-1" "" "@DEF@" -.IP -The coded character set defined by the ISO8859-1 standard. -.KE -.LP -.KS -\fBLatin Portable Character Encoding\fP -.IN "Latin Portable Character Encoding" "" "@DEF@" -.IP -The encoding of the X Portable Character Set using the Latin-1 codepoints -plus ASCII control characters. -If a string is said to be in the Latin Portable Character Encoding, -then it only contains characters from the X Portable Character Set, -not all of Latin-1. -.KE -.LP -.KS -\fBLocale\fP -.IN "Locale" "" "@DEF@" -.IP -The international environment of a computer program defining the ``localized'' -behavior of that program at run-time. -This information can be established from one or more sets of localization data. -ANSI C defines locale-specific processing by C system library calls. -See ANSI C and the X/Open Portability Guide specifications for more details. -In this specification, on implementations that conform to the ANSI C library, -the ``current locale'' is the current setting of the LC_CTYPE -.PN setlocale -category. -Associated with each locale is a text encoding. When text is processed -in the context of a locale, the text must be in the encoding of the locale. -The current locale affects Xlib in its: -.RS -.IP \(bu 5 -Encoding and processing of input method text -.IP \(bu 5 -Encoding of resource files and values -.IP \(bu 5 -Encoding and imaging of text strings -.IP \(bu 5 -Encoding and decoding for inter-client text communication -.RE -.KE -.LP -.KS -\fBLocale name\fP -.IN "Locale name" "" "@DEF@" -.IP -The identifier used to select the desired locale for the host C library -and X library functions. -On ANSI C library compliant systems, -the locale argument to the -.PN setlocale -function. -.KE -.LP -.KS -\fBLocalization\fP -.IN "Localization" "" "@DEF@" -.IP -The process of establishing information within a computer system specific -to the operation of particular native languages, local customs -and coded character sets. -(XPG3) -.KE -.LP -.KS -\fBMapped\fP -.IN "Mapped window" "" "@DEF@" -.IP -A window is said to be mapped if a map call has been performed on it. -Unmapped windows and their inferiors are never viewable or visible. -.KE -.LP -.KS -\fBModifier keys\fP -.IN "Modifier keys" "" "@DEF@" -.IP -Shift, Control, Meta, Super, Hyper, Alt, Compose, Apple, CapsLock, -ShiftLock, and similar keys are called modifier keys. -.KE -.LP -.KS -\fBMonochrome\fP -.IN "Monochrome" "" "@DEF@" -.IP -Monochrome is a special case of -.PN StaticGray -in which there are only two colormap entries. -.KE -.LP -.KS -\fBMultibyte\fP -.IN "Multibyte" "" "@DEF@" -.IP -A character whose codepoint is stored in more than one byte; -any encoding which can contain multibyte characters; -text in a multibyte encoding. -The ``char *'' null-terminated string datatype in ANSI C. -Note that references in this document to multibyte strings -imply only that the strings \fImay\fP contain multibyte characters. -.KE -.LP -.KS -\fBObscure\fP -.IN "Obscure" "" "@DEF@" -.IP -A window is obscured if some other window obscures it. -A window can be partially obscured and so still have visible regions. -Window A obscures window B if both are viewable -.PN InputOutput -windows, if A is higher in the global stacking order, -and if the rectangle defined by the outside -edges of A intersects the rectangle defined by the outside edges of B. -Note the distinction between obscures and occludes. -Also note that window borders are included in the calculation. -.KE -.LP -.KS -\fBOcclude\fP -.IN "Occlude" "" "@DEF@" -.IP -A window is occluded if some other window occludes it. -Window A occludes window B if both are mapped, -if A is higher in the global stacking order, -and if the rectangle defined by the outside edges of A intersects the rectangle defined -by the outside edges of B. -Note the distinction between occludes and obscures. -Also note that window borders are included in the calculation -and that -.PN InputOnly -windows never obscure other windows but can occlude other windows. -.KE -.LP -.KS -\fBPadding\fP -.IN "Padding" "" "@DEF@" -.IP -Some padding bytes are inserted in the data stream to maintain -alignment of the protocol requests on natural boundaries. -This increases ease of portability to some machine architectures. -.KE -.LP -.KS -\fBParent window\fP -.IN "Window" "parent" "@DEF@" -.IP -If C is a child of P, then P is the parent of C. -.KE -.LP -.KS -\fBPassive grab\fP -.IN "Passive grab" "" "@DEF@" -.IP -Grabbing a key or button is a passive grab. -The grab activates when the key or button is actually pressed. -.KE -.LP -.KS -\fBPixel value\fP -.IN "Pixel value" "" "@DEF@" -.IP -A pixel is an N-bit value, -where N is the number of bit planes used in a particular window or pixmap -(that is, is the depth of the window or pixmap). -A pixel in a window indexes a colormap to derive an actual color to be -displayed. -.KE -.LP -.KS -\fBPixmap\fP -.IN "Pixmap" "" "@DEF@" -.EQ -delim %% -.EN -.IP -A pixmap is a three-dimensional array of bits. -A pixmap is normally thought of as a two-dimensional array of pixels, -where each pixel can be a value from 0 to %2 sup N %\-1, -and where N is the depth (z axis) of the pixmap. -A pixmap can also be thought of as a stack of N bitmaps. -A pixmap can only be used on the screen that it was created in. -.KE -.LP -.KS -\fBPlane\fP -.IN "Plane" "" "@DEF@" -.IP -When a pixmap or window is thought of as a stack of bitmaps, each -bitmap is called a plane or bit plane. -.KE -.LP -.KS -\fBPlane mask\fP -.IN "Plane" "mask" "@DEF@" -.IP -Graphics operations can be restricted to only affect a subset of bit -planes of a destination. -A plane mask is a bit mask describing which planes are to be modified. -The plane mask is stored in a graphics context. -.KE -.LP -.KS -\fBPointer\fP -.IN "Pointer" "" "@DEF@" -.IP -The pointer is the pointing device currently attached to the cursor -and tracked on the screens. -.KE -.LP -.KS -\fBPointer grabbing\fP -.IN "Pointer" "grabbing" "@DEF@" -.IP -A client can actively grab control of the pointer. -Then button and motion events will be sent to that client -rather than the client the events would normally have been sent to. -.KE -.LP -.KS -\fBPointing device\fP -.IN "Pointing device" "" "@DEF@" -.IP -A pointing device is typically a mouse, tablet, or some other -device with effective dimensional motion. -The core protocol defines only one visible cursor, -which tracks whatever pointing device is attached as the pointer. -.KE -.LP -.KS -\fBPOSIX\fP -.IN "POSIX" "" "@DEF@" -.IP -Portable Operating System Interface, ISO/IEC 9945-1 (IEEE Std 1003.1). -.KE -.LP -.KS -\fBPOSIX Portable Filename Character Set\fP -.IN "POSIX Portable Filename Character Set" "" "@DEF@" -.IP -The set of 65 characters which can be used in naming files on a POSIX-compliant -host that are correctly processed in all locales. -The set is: -.IP -.Ds 0 -a..z A..Z 0..9 ._- -.De -.KE -.LP -.KS -\fBProperty\fP -.IN "Property" "" "@DEF@" -.IP -Windows can have associated properties that consist of a name, a type, -a data format, and some data. -The protocol places no interpretation on properties. -They are intended as a general-purpose naming mechanism for clients. -For example, clients might use properties to share information such as resize -hints, program names, and icon formats with a window manager. -.KE -.LP -.KS -\fBProperty list\fP -.IN "Property list" "" "@DEF@" -.IP -The property list of a window is the list of properties that have -been defined for the window. -.KE -.LP -.KS -\fBPseudoColor\fP -.IN "PseudoColor" "" "@DEF@" -.IP -.PN PseudoColor -is a class of colormap in which a pixel value indexes the colormap entry to -produce an independent RGB value; -that is, the colormap is viewed as an array of triples (RGB values). -The RGB values can be changed dynamically. -.KE -.LP -.KS -\fBRectangle\fP -.IN "Rectangle" "" "@DEF@" -.IP -A rectangle specified by [x,y,w,h] has an infinitely thin -outline path with corners at [x,y], [x+w,y], [x+w,y+h], and [x, y+h]. -When a rectangle is filled, -the lower-right edges are not drawn. -For example, -if w=h=0, -nothing would be drawn. -For w=h=1, -a single pixel would be drawn. -.KE -.LP -.KS -\fBRedirecting control\fP -.IN "Redirecting control" "" "@DEF@" -.IP -Window managers (or client programs) may enforce window layout -policy in various ways. -When a client attempts to change the size or position of a window, -the operation may be redirected to a specified client -rather than the operation actually being performed. -.KE -.LP -.KS -\fBReply\fP -.IN "Reply" "" "@DEF@" -.IP -Information requested by a client program using the X protocol -is sent back to the client with a reply. -Both events and replies are multiplexed on the same connection. -Most requests do not generate replies, -but some requests generate multiple replies. -.KE -.LP -.KS -\fBRequest\fP -.IN "Request" "" "@DEF@" -.IP -A command to the server is called a request. -It is a single block of data sent over a connection. -.KE -.LP -.KS -\fBResource\fP -.IN "Resource" "" "@DEF@" -.IP -Windows, pixmaps, cursors, fonts, graphics contexts, and colormaps are -known as resources. -They all have unique identifiers associated with them for naming purposes. -The lifetime of a resource usually is bounded by the lifetime of the -connection over which the resource was created. -.KE -.LP -.KS -\fBRGB values\fP -.IN "RGB values" "" "@DEF@" -.IP -RGB values are the red, green, and blue intensity values that are used -to define a color. -These values are always represented as 16-bit, unsigned numbers, with 0 -the minimum intensity and 65535 the maximum intensity. -The X server scales these values to match the display hardware. -.KE -.LP -.KS -\fBRoot\fP -.IN "Root" "" "@DEF@" -.IP -The root of a pixmap or graphics context is the same as the root -of whatever drawable was used when the pixmap or GC was created. -The root of a window is the root window under which the window was created. -.KE -.LP -.KS -\fBRoot window\fP -.IN "Window" "root" "@DEF@" -.IP -Each screen has a root window covering it. -The root window cannot be reconfigured or unmapped, -but otherwise it acts as a full-fledged window. -A root window has no parent. -.KE -.LP -.KS -\fBSave set\fP -.IN "Save set" "" "@DEF@" -.IP -The save set of a client is a list of other clients' windows that, -if they are inferiors of one of the client's windows at connection -close, should not be destroyed and that should be remapped -if currently unmapped. -Save sets are typically used by window managers to avoid -lost windows if the manager should terminate abnormally. -.KE -.LP -.KS -\fBScanline\fP -.IN "Scanline" "" "@DEF@" -.IP -A scanline is a list of pixel or bit values viewed as a horizontal -row (all values having the same y coordinate) of an image, with the -values ordered by increasing the x coordinate. -.KE -.LP -.KS -\fBScanline order\fP -.IN "Scanline" "order" "@DEF@" -.IP -An image represented in scanline order contains scanlines ordered by -increasing the y coordinate. -.KE -.LP -.KS -\fBScreen\fP -.IN "Screen" "" "@DEF@" -.IP -A server can provide several independent screens, -which typically have physically independent monitors. -This would be the expected configuration when there is only a single keyboard -and pointer shared among the screens. -A -.PN Screen -.IN "Screen" "structure" -structure contains the information about that screen -and is linked to the -.PN Display -.IN "Display" "structure" -structure. -.KE -.LP -.KS -\fBSelection\fP -.IN "Selection" "" "@DEF@" -.IP -A selection can be thought of as an indirect property with dynamic -type. -That is, rather than having the property stored in the X server, -it is maintained by some client (the owner). -A selection is global and is thought of as belonging to the user -and being maintained by clients, -rather than being private to a particular window subhierarchy -or a particular set of clients. -When a client asks for the contents of -a selection, it specifies a selection target type, -which can be used to control the transmitted representation of the contents. -For example, if the selection is ``the last thing the user clicked on,'' -and that is currently an image, then the target type might specify -whether the contents of the image should be sent in XY format or -Z format. -.IP -The target type can also be used to control the class of -contents transmitted; for example, -asking for the ``looks'' (fonts, line -spacing, indentation, and so forth) of a paragraph selection, rather than the -text of the paragraph. -The target type can also be used for other -purposes. -The protocol does not constrain the semantics. -.KE -.LP -.KS -\fBServer\fP -.IN "Server" "" "@DEF@" -.IP -The server, which is also referred to as the X server, -provides the basic windowing mechanism. -It handles IPC connections from clients, -multiplexes graphics requests onto the screens, -and demultiplexes input back to the appropriate clients. -.KE -.LP -.KS -\fBServer grabbing\fP -.IN "Server" "grabbing" "@DEF@" -.IP -The server can be grabbed by a single client for exclusive use. -This prevents processing of any requests from other client connections until -the grab is completed. -This is typically only a transient state for such things as rubber-banding, -pop-up menus, or executing requests indivisibly. -.KE -.LP -.KS -\fBShift sequence\fP -.IN "Shift sequence" "" "@DEF@" -.IP -ISO2022 defines control characters and escape sequences -which temporarily (single shift) or permanently (locking shift) cause a -different character set to be in effect (``invoking'' a character set). -.KE -.LP -.KS -\fBSibling\fP -.IN "Sibling" "" "@DEF@" -.IP -Children of the same parent window are known as sibling windows. -.KE -.LP -.KS -\fBStacking order\fP -.IN "Stacking order" "" "@DEF@" -.IP -Sibling windows, similar to sheets of paper on a desk, -can stack on top of each other. -Windows above both obscure and occlude lower windows. -The relationship between sibling windows is known as the stacking order. -.KE -.LP -.KS -\fBState-dependent encoding\fP -.IN "State-dependent encoding" "" "@DEF@" -.IP -An encoding in which an invocation of a charset can apply to multiple -characters in sequence. -A state-dependent encoding begins in an ``initial state'' -and enters other ``shift states'' when specific ``shift sequences'' -are encountered in the byte sequence. -In ISO2022 terms, -this means use of locking shifts, not single shifts. -.KE -.LP -.KS -\fBState-independent encoding\fP -.IN "State-independent encoding" "" "@DEF@" -.IP -Any encoding in which the invocations of the charsets are fixed, -or span only a single character. -In ISO2022 terms, -this means use of at most single shifts, not locking shifts. -.KE -.LP -.KS -\fBStaticColor\fP -.IN "StaticColor" "" "@DEF@" -.IP -.PN StaticColor -can be viewed as a degenerate case of -.PN PseudoColor -in which the RGB values are predefined and read-only. -.KE -.LP -.KS -\fBStaticGray\fP -.IN "StaticGray" "" "@DEF@" -.IP -.PN StaticGray -can be viewed as a degenerate case of -.PN GrayScale -in which the gray values are predefined and read-only. -The values are typically linear or near-linear increasing ramps. -.KE -.LP -.KS -\fBStatus\fP -.IN "Status" "" "@DEF@" -.IP -Many Xlib functions return a success status. -If the function does not succeed, -however, its arguments are not disturbed. -.KE -.LP -.KS -\fBStipple\fP -.IN "Stipple" "" "@DEF@" -.IP -A stipple pattern is a bitmap that is used to tile a region to serve -as an additional clip mask for a fill operation with the foreground -color. -.KE -.KS -.LP -.KS -\fBSTRING encoding\fP -.IN "STRING encoding" "" "@DEF@" -.IP -Latin-1, plus tab and newline. -.KE -.LP -\fBString Equivalence\fP -.IN "String Equivalence" "" "@DEF@" -.IP -Two ISO Latin-1 STRING8 values are considered equal if they are the same -length and if corresponding bytes are either equal or are equivalent as -follows: decimal values 65 to 90 inclusive (characters ``A'' to ``Z'') are -pairwise equivalent to decimal values 97 to 122 inclusive -(characters ``a'' to ``z''), decimal values 192 to 214 inclusive -(characters ``A grave'' to ``O diaeresis'') are pairwise equivalent to decimal -values 224 to 246 inclusive (characters ``a grave'' to ``o diaeresis''), -and decimal values 216 to 222 inclusive (characters ``O oblique'' to ``THORN'') -are pairwise equivalent to decimal values 246 to 254 inclusive -(characters ``o oblique'' to ``thorn''). -.KE -.LP -.KS -\fBTile\fP -.IN "Tile" "" "@DEF@" -.IP -A pixmap can be replicated in two dimensions to tile a region. -The pixmap itself is also known as a tile. -.KE -.LP -.KS -\fBTimestamp\fP -.IN "Timestamp" "" "@DEF@" -.IP -A timestamp is a time value expressed in milliseconds. -It is typically the time since the last server reset. -Timestamp values wrap around (after about 49.7 days). -The server, given its current time is represented by timestamp T, -always interprets timestamps from clients by treating half -of the timestamp space as being earlier in time than T -and half of the timestamp space as being later in time than T. -One timestamp value, represented by the constant -.PN CurrentTime , -is never generated by the server. -This value is reserved for use in requests to represent the current server time. -.KE -.LP -.KS -\fBTrueColor\fP -.IN "TrueColor" "" "@DEF@" -.IP -.PN TrueColor -can be viewed as a degenerate case of -.PN DirectColor -in which the subfields in the pixel value directly encode the corresponding RGB -values. -That is, the colormap has predefined read-only RGB values. -The values are typically linear or near-linear increasing ramps. -.KE -.LP -.KS -\fBType\fP -.IN "Type" "" "@DEF@" -.IP -A type is an arbitrary atom used to identify the interpretation of property -data. -Types are completely uninterpreted by the server. -They are solely for the benefit of clients. -X predefines type atoms for many frequently used types, -and clients also can define new types. -.KE -.LP -.KS -\fBViewable\fP -.IN "Viewable" "" "@DEF@" -.IP -A window is viewable if it and all of its ancestors are mapped. -This does not imply that any portion of the window is actually visible. -Graphics requests can be performed on a window when it is not -viewable, but output will not be retained unless the server is maintaining -backing store. -.KE -.LP -.KS -\fBVisible\fP -.IN "Visible" "" "@DEF@" -.IP -A region of a window is visible if someone looking at the screen can -actually see it; that is, the window is viewable and the region is not occluded -by any other window. -.KE -.LP -.KS -\fBWhitespace\fP -.IN "Whitespace" "" "@DEF@" -.IP -Any spacing character. -On implementations that conform to the ANSI C library, -whitespace is any character for which -.PN isspace -returns true. -.KE -.LP -.KS -\fBWindow gravity\fP -.IN "Window" "gravity" "@DEF@" -.IP -When windows are resized, -subwindows may be repositioned automatically relative to some position in the -window. -This attraction of a subwindow to some part of its parent is known -as window gravity. -.KE -.LP -.KS -\fBWindow manager\fP -.IN "Window" "manager" "@DEF@" -.IP -Manipulation of windows on the screen and much of the user interface -(policy) is typically provided by a window manager client. -.KE -.LP -.KS -\fBX Portable Character Set\fP -.IN "X Portable Character Set" "" "@DEF@" -.IP -A basic set of 97 characters which are assumed to exist in all -locales supported by Xlib. This set contains the following characters: -.IP -.Ds 0 -.EQ -delim DD -.EN -a..z A..Z 0..9 -!"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ -, , and -.EQ -delim %% -.EN -.De -.IP -This is the left/lower half (also called the G0 set) -of the graphic character set of ISO8859-1 plus , , and . -It is also the set of graphic characters in 7-bit ASCII plus the same -three control characters. -The actual encoding of these characters on the host is system dependent; -see the Host Portable Character Encoding. -.KE -.LP -.KS -\fBXLFD\fP -.IN "XLFD" "" "@DEF@" -.IP -The X Logical Font Description Conventions that define a standard syntax -for structured font names. -.KE -.LP -.KS -\fBXY format\fP -.IN "XY format" "" "@DEF@" -.IP -The data for a pixmap is said to be in XY format if it is organized as -a set of bitmaps representing individual bit planes with the planes -appearing from most-significant to least-significant bit order. -.KE -.LP -.KS -\fBZ format\fP -.IN "Z format" "" "@DEF@" -.IP -The data for a pixmap is said to be in Z format if it is organized as -a set of pixel values in scanline order. -.KE -.LP -\fBReferences\fP -.LP -ANSI Programming Language - C: ANSI X3.159-1989, December 14, 1989. -.LP -Draft Proposed Multibyte Extension of ANSI C, Draft 1.1, November 30, -1989, SC22/C WG/SWG IPSJ/ITSCJ Japan. -.LP -ISO2022: Information processing - ISO 7-bit and 8-bit coded character -sets - Code extension techniques. -.LP -ISO8859-1: Information processing - 8-bit single-byte coded graphic -character sets - Part 1: Latin alphabet No. 1. -.LP -POSIX: Information Technology - Portable Operating System Interface (POSIX) - -Part 1: System Application Program Interface (API) [C Language], -ISO/IEC 9945-1. -.LP -Text of ISO/IEC/DIS 9541-1, Information Processing - Font Information -Interchange - Part 1: Architecture. -.LP -X/Open Portability Guide, Issue 3, December 1988 (XPG3), X/Open Company, -Ltd, Prentice-Hall, Inc. 1989. ISBN 0-13-685835-8. -(See especially Volume 3: XSI Supplementary Definitions.) -.bp diff --git a/doc/xorg-docs/specs/X11/indexmacros.t b/doc/xorg-docs/specs/X11/indexmacros.t deleted file mode 100644 index 4c10b492b..000000000 --- a/doc/xorg-docs/specs/X11/indexmacros.t +++ /dev/null @@ -1,3 +0,0 @@ -.eh '\fBXlib \- C Library\fP''\fBX11, Release 6.8\fP' -.oh '\fBXlib \- C Library\fP''\fBX11, Release 6.8\fP' -.so index.pageno diff --git a/doc/xorg-docs/specs/X11/postproc b/doc/xorg-docs/specs/X11/postproc deleted file mode 100644 index 0f45a5a00..000000000 --- a/doc/xorg-docs/specs/X11/postproc +++ /dev/null @@ -1,17 +0,0 @@ -.\" -.\" print Table of Contents -.if e \& \" Force blank page to begin TOC on an odd (right-hand) page. -.EH '''' -.OH '''' -.bp -\& \" Want old footings if blank page was forced. -.EF '''' -.OF '''' -.XS -Index -.XE -.EQ -delim $$ -.EN -.tm .pn \n% -.PX diff --git a/doc/xorg-docs/specs/XDMCP/xdmcp.ms b/doc/xorg-docs/specs/XDMCP/xdmcp.ms deleted file mode 100644 index a237beb21..000000000 --- a/doc/xorg-docs/specs/XDMCP/xdmcp.ms +++ /dev/null @@ -1,2177 +0,0 @@ -.\" Use eqn, tbl, and -ms -.\" $Xorg: xdmcp.ms,v 1.3 2000/08/17 19:42:20 cpqbld Exp $ -.\" $XdotOrg: xc/doc/specs/XDMCP/xdmcp.ms,v 1.2 2004/04/23 18:42:16 eich Exp $ -.\" $Xorg: xdmcp.ms,v 1.3 2000/08/17 19:42:20 cpqbld Exp $ -.EQ -delim @@ -define oc % "\\fR{\\fP" % -define cc % "\\fR}\\fP" % -.EN -.de PT -.. -.de BT -.. -.ps 11 -.nr PS 11 -\& -.sp 8 -.ce 7 -\s+2\fBX Display Manager Control Protocol\fP\s-2 - -\s+1\fBVersion 1.1 - -X.Org Standard - -X Version 11, Release 6.8\fP\s-1 -.sp 4 -.ce 5 -\s-1Keith Packard - -X Consortium -Laboratory for Computer Science -Massachusetts Institute of Technology\s+1 -.bp -.br -\& -.sp 15 -Copyright \(co 1989, 2004 The Open Group -.sp 3 -.LP -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -.LP -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -.LP -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. -.LP -.sp 3 -\fIX Window System\fP is a trademark of The Open Group. -.de PT -.ie o .tl 'XDMCP''X Display Manager Control Protocol ' -.el .tl 'X Display Manager Control Protocol ''XDMCP' -.. -.bp 1 -.de BT -.tl ''\fB % \fP'' -.. -.NH 1 -Purpose and Goals -.XS -\*(SN Purpose and Goals -.XE -.LP -The purpose of the X Display Manager Control Protocol (XDMCP) -is to provide a uniform mechanism for an autonomous -display to request login service from a remote host. -By autonomous, we mean -the display consists of hardware and processes that are independent of any -particular host where login service is desired. (For example, the server -cannot simply be started by a -.PN fork/exec -sequence on the host.) -An X terminal (screen, keyboard, mouse, processor, network interface) -is a prime example of an autonomous display. -.LP -From the point of view of the end user, it is very important to make -autonomous displays as easy to use as traditional hardwired character -terminals. Specifically, you can typically just power on a hardwired -terminal and be greeted with a login prompt. The same should be possible -with autonomous displays. However, in a network environment with multiple -hosts, the end user may want to choose which host(s) to connect to. In an -environment with many displays and many hosts, a site administrator may want -to associate particular collections of hosts with particular displays. We -would like to support the following options: -.IP \(bu 5 -The display has a single, fixed host to which it should connect. It should be -possible to power on the display and receive a login prompt, without user -intervention. -.IP \(bu 5 -Any one of several hosts on a network or subnetwork may be acceptable -for accepting login from the display. -(For example, the user's file systems can be mounted onto -any such host, providing comparable environments.) It should be possible -for the display to broadcast to find such hosts and to have the display -either automatically choose a host or present the possible hosts to the -user for selection. -.IP \(bu 5 -The display has a fixed set of hosts that it can connect to. It should be -possible for the display to have that set stored in RAM, but it should also be -possible for a site administrator to be able to maintain host sets for a -large number of displays using a centralized facility, without having to -interact (physically or electronically) with each individual display. -Particular hosts should be allowed to refuse login service, based on -whatever local criteria are desired. -.LP -The control protocol should be designed in such a way that it can be used over -a reasonable variety of communication transport layers. In fact, it is quite -desirable if every major network protocol family that supports the standard X -protocol is also capable of supporting XDMCP, because the end result of XDMCP -negotiation will be standard X protocol connections to the display. -However, because the number of displays per host may be large, -a connection-based protocol appears less desirable -than a connection-less protocol. For this reason the protocol is designed -to use datagram services with the display responsible for sequencing and -retransmission. -.LP -To keep the burden on displays at a minimum (because display cost is not -a factor that can be ignored), it is desirable that displays not be required -to maintain permanent state (across power cycles) for the purposes -of the control protocol, -and it is desirable to keep required state at a minimum while the -display is powered on. -.LP -Security is an important consideration and must be an integral part of the -design. The important security goals in the context of XDMCP are: -.IP \(bu 5 -It should be possible for the display to verify that it is communicating -with a legitimate host login service. Because the user will present -credentials (for example, password) to this service, -it is important to avoid spoof attacks. -.IP \(bu 5 -It should be possible for the display and the login service to negotiate the -authorization mechanism to be used for the standard X protocol. -.IP \(bu 5 -It should be possible to provide the same level of security in verifying the -login service as is provided by the negotiated authorization mechanism. -.IP \(bu 5 -Because there are no firm standards yet in the area of security, -XDMCP must be flexible enough to accomodate a variety of security mechanisms. -.NH 1 -Overview of the Protocol -.XS -\*(SN Overview of the Protocol -.XE -.LP -XDMCP is designed to provide authenticated access to display management -services for remote displays. A new network server, called a \fIDisplay -Manager\fP, will use XDMCP to communicate with displays to negotiate the -startup of X sessions. The protocol allows the display to authenticate the -manager. It also allows most of the configuration information to be -centralized with the manager and to ease the burden of system administration -in a large network of displays. -The essential goal is to provide plug-and-play -services similar to those provided in the familiar mainframe/terminal world. -.LP -Displays may be turned off by the user at any time. Any existing session -running on a display that has been turned off must be identifiable. This -is made possible by requiring a three-way handshake to start a session. If -the handshake succeeds, any existing session is terminated immediately and a -new session started. There is the problem (at least with TCP) that -connections may not be closed when the display is turned off. In most -environments, the manager should reduce this problem by periodically XSync'ing -on its own connection, perhaps every five to ten minutes, and terminating the -session if its own connection ever closes. -.LP -Displays should not be required to retain permanent state for purposes of -the control protocol. One solution to packets received out of sequence -would be to use monotonically increasing message identifiers in each message -to allow both sides to ignore messages that arrive out-of-sequence. For -this to work, displays would at a minimum have to increment a stable crash -count each time they are powered on and use that number as part of a -larger sequence number. But if displays cannot retain permanent state this -cannot work. Instead, the manager assumes the responsibility for permanent -state by generating unique numbers that identify a particular session and -the protocol simply ignores packets that correspond to an invalid session. -.LP -The Manager must not be responsible for packet reception. To prevent the -Manager from becoming stuck because of a hostile display, no portion of the -protocol requires the Manager to retransmit a packet. Part of this means -that any valid packet that the Manager does receive must be -acknowledged in some way to prevent the display from continuously resending -packets. The display can keep the protocol running as it will always know -when the Manager has received (at least one copy of) a packet. On the -Manager side, this means that any packet may be received more than once (if -the response was lost) and duplicates must be ignored. -.NH 1 -Data Types -.XS -\*(SN Data Types -.XE -.LP -XDMCP packets contain several types of data. Integer values are always -stored most significant byte first in the packet (``Big Endian'' order). -As XDMCP will not be used to transport large quantities of data, this -restriction will not substantially hamper the efficiency of any -implementation. Also, no padding of any sort will occur within the packets. -.TS H -lw(1.25i) lw(.75i) lw(3.5i). -_ -.sp 6p -.B -Type Name Length (Bytes) Description -.sp 6p -_ -.sp 6p -.R -.TH -CARD8 1 A single byte unsigned integer -CARD16 2 Two byte unsigned integer -CARD32 4 Four byte unsigned integer -ARRAY8 n+2 This is actually a CARD16 followed by - a collection of CARD8. The value of the CARD16 - field (n) specifies the number of CARD8 values to - follow -ARRAY16 2*m+1 This is a CARD8 (m) which specifies the - number of CARD16 values to follow -ARRAY32 4*l+1 This is a CARD8 (l) which specifies the - number of CARD32 values to follow -ARRAYofARRAY8 ? This is a CARD8 which specifies the - number of ARRAY8 values to follow. -.sp 6p -_ -.TE -.NH 1 -Packet Format -.XS -\*(SN Packet Format -.XE -.LP -All XDMCP packets have the following information: -.TS -lw(1.25i) lw(.75i) lw(3.5i). -_ -.sp 6p -.B -Length (Bytes) Field Type Description -.sp 6p -_ -.R -2 CARD16 version number -2 CARD16 opcode packet header -2 CARD16 n = length of remaining data in bytes - -n ??? packet-specific data -.sp 6p -_ -.TE -.LP -The fields are as follows: -.IP \(bu 5 -Version number -.IP -This specifies the version of XDMCP that generated this packet in -case changes in this protocol are required. Displays and -managers may choose to support older versions for compatibility. -This field will initially be one (1). -.IP \(bu 5 -Opcode -.IP -This specifies what step of the protocol this packet represents and should -contain one of the following values (encoding provided in section below): -.PN BroadcastQuery , -.PN Query , -.PN IndirectQuery , -.PN ForwardQuery , -.PN Willing , -.PN Unwilling , -.PN Request , -.PN Accept , -.PN Decline , -.PN Manage , -.PN Refuse , -.PN Failed , -.PN KeepAlive , -or -.PN Alive . -.IP \(bu 5 -Length of data in bytes -.IP -This specifies the length of the information following the first 6 bytes. -Each packet-type has a different format and will need to be separately -length-checked against this value. Because every data item has either an -explicit or implicit length, this can be easily accomplished. -Packets that have too little or too much data should be ignored. -.LP -Packets should be checked to make sure that they satisfy the following -conditions: -.IP 1. 5 -They must contain valid opcodes. -.IP 2. 5 -The length of the remaining data should correspond to the sum of the -lengths of the individual remaining data items. -.IP 3. 5 -The opcode should be expected (a finite state diagram is given -in a later section). -.IP 4. 5 -If the packet is of type -.PN Manage -or -.PN Refuse , -the Session ID should match the value sent in the preceding -.PN Accept -packet. -.NH 1 -Protocol -.XS -\*(SN Protocol -.XE -.LP -Each of the opcodes is described below. Because a given packet type is only -ever sent one way, each packet description below indicates the direction. -Most of the packets have additional information included beyond the -description above. The additional information is appended to the packet -header in the order described without padding, and the length field is -computed accordingly. -.LP -.PN Query -.br -.PN BroadcastQuery -.br -.PN IndirectQuery -.RS -Display \(-> Manager -.br -Additional Fields: -.RS -\fIAuthentication Names\fP: ARRAYofARRAY8 -.RS -Specifies a list of authentication names that the display supports. -The manager will choose one of these and return it in the -.PN Willing -packet. -.RE -.RE -Semantics: -.RS -A -.PN Query -packet is sent from the display to a specific host to ask if -that host is willing to provide management services to this display. The -host should respond with -.PN Willing -if it is willing to service the display or -.PN Unwilling -if it is not. -.LP -A -.PN BroadcastQuery -packet is similar to the -.PN Query -packet except that it is intended to be received by all hosts on the network -(or subnetwork). However, unlike -.PN Query -requests, hosts that are not willing to service the display -should simply ignore -.PN BroadcastQuery -requests. -.LP -An -.PN IndirectQuery -packet is sent to a well known manager that forwards -the request to a larger collection of secondary managers using -.PN ForwardQuery -packets. -In this way, the collection of managers that respond can be grouped -on other than network boundaries; the use of a central manager reduces -system administrative overhead. -The primary manager may also send a -.PN Willing -packet in response to this packet. -.LP -Each packet type has slightly different semantics: -.IP \(bu 5 -The -.PN Query -packet is destined only for a single host. -If the display is instructed to -.PN Query -multiple managers, it will send multiple -.PN Query -packets. The -.PN Query -packet also demands a response from the manager, either -.PN Willing -or -.PN Unwilling . -.IP \(bu 5 -The -.PN BroadcastQuery -packet is sent to many hosts. -Each manager that receives this packet will not respond with an -.PN Unwilling -packet. -.IP \(bu 5 -The -.PN IndirectQuery -packet is sent to only one manager with the request -that the request be forwarded to a larger list of managers using -.PN ForwardQuery -packets. This list is expected to be maintained at one -central site to reduce administrative overhead. -The function of this packet type is similar to -.PN BroadcastQuery except that -.PN BroadcastQuery -is not forwarded. -.RE -Valid Responses: -.RS -.PN Willing , -.PN Unwilling -.RE -Problems/Solutions: -.RS -Problem: -.RS -Not all managers receive the query packet. -.RE -.RS -Indication: -.RS -None if -.PN BroadcastQuery -or -.PN IndirectQuery -was sent, else failure to receive -.PN Willing . -.RE -Solution: -.RS -Repeatedly send the packet while waiting for user to choose a manager. -.RE -.RE -.RE -Timeout/Retransmission policy: -.RS -An exponential backoff algorithm should be used here to reduce network load -for long-standing idle displays. Start at 2 seconds, back off by factors of -2 to 32 seconds, and discontinue retransmit after 126 seconds. The display -should reset the timeout when user-input is detected. In this way, the -display will wakeup when touched by the user. -.RE -.RE -.LP -.PN ForwardQuery -.RS -Primary Manager \(-> Secondary Manager -.br -Additional Fields: -.RS -\fIClient Address\fP: ARRAY8 -.RS -Specifies the network address of the client display. -.RE -\fIClient Port\fP: ARRAY8 -.RS -Specifies an identification of the client task on the client display. -.RE -\fIAuthentication Names\fP: ARRAYofARRAY8 -.RS -Is a duplicate of Authentication Names array that was received -in the -.PN IndirectQuery -packet. -.RE -.RE -Semantics: -.RS -When primary manager receives a -.PN IndirectQuery -packet, it is responsible for sending -.PN ForwardQuery -packets to an appropriate list of -managers that can provide service to the display using the same network -type as the one the original -.PN IndirectQuery -packet was received from. -The Client Address and Client Port fields must contain an -address that the secondary manager can use to reach the display also using -this same network. Each secondary manager sends a -.PN Willing -packet to the display if it is willing to provide service. -.LP -.PN ForwardQuery -packets are similar to -.PN BroadcastQuery -packets in that managers that are not willing to service -particular displays should not send a -.PN Unwilling -packet. -.RE -Valid Responses: -.RS -.PN Willing -.RE -Problems/Solutions: -.RS -Identical to -.PN BroadcastQuery -.RE -Timeout/Retransmission policy: -.RS -Like all packets sent from a manager, this packet should never be -retransmitted. -.RE -.RE -.LP -.PN Willing -.RS -Manager \(-> Display -.br -Additional Fields: -.RS -\fIAuthentication Name\fP: ARRAY8 -.RS -Specifies the authentication method, selected from the list offered in the -.PN Query , -.PN BroadcastQuery , -or -.PN IndirectQuery -packet that the manger expects the display to use in the subsequent -.PN Request -packet. -This choice should remain as constant as feasible so that displays that -send multiple -.PN Query -packets can use the Authentication Name from any -.PN Willing -packet that arrives. -.LP -The display is free to ignore managers that request an insufficient level -of authentication. -.RE -\fIHostname\fP: ARRAY8 -.RS -Is a human readable string describing the host from which the packet was sent. -The protocol specifies no interpretation of the data in this field. -.RE -\fIStatus\fP: ARRAY8 -.RS -Is a human readable string describing the status of the host. This could -include load average/number of users connected or other information. The -protocol specifies no interpretation of the data in this field. -.RE -.RE -Semantics: -.RS -A -.PN Willing -packet is sent by managers that may service connections from -this display. It is sent in response to either a -.PN Query , -.PN BroadcastQuery , -or -.PN ForwardQuery -but does not imply a commitment to provide service -(for example, it may later decide that it has accepted enough -connections already). -.RE -Problems/Solutions: -.RS -Problem: -.RS -.PN Willing -not received by the display. -.br -Indication: -.RS -None if -.PN BroadcastQuery -or -.PN IndirectQuery -was sent, else failure to receive -.PN Willing . -.RE -Solution: -.RS -The display should continue to send the query until a response is received. -.RE -.RE -.RE -Timeout/Retransmission policy: -.RS -Like all packets sent from the manager to the display, this packet should -never be retransmitted. -.RE -.RE -.LP -.PN Unwilling -.RS -Manager \(-> Display -.br -Additional Fields: -.RS -The Hostname and Status fields as in the -.PN Willing -packet. -The Status field should indicate to the user a reason -for the refusal of service. -.RE -Semantics: -.RS -An -.PN Unwilling -packet is sent by managers in response to direct -.PN Query -requests (as opposed to -.PN BroadcastQuery -or -.PN IndirectQuery -requests) if the manager will not accept requests for management. -This is typically sent by managers that wish to only service -particular displays or that handle a limited number of displays at once. -.RE -Problems/Solutions: -.RS -Problem: -.RS -.PN Unwilling -not received by the display. -.br -Indication: -.RS -Display fails to receive -.PN Unwilling . -.RE -Solution: -.RS -The display should continue to send -.PN Query -messages until a response is received. -.RE -.RE -.RE -Timeout/Retransmission policy: -.RS -Like all packets sent from the manager to the display, this packet should -never be retransmitted. -.RE -.RE -.LP -.PN Request -.br -.RS -Display \(-> Manager -.br -Additional Fields: -.RS -\fIDisplay Number\fP: CARD16 -.RS -Specifies the index of this particular server for the host -on which the display is resident. -This value will be zero for most autonomous displays. -.RE -\fIConnection Types\fP: ARRAY16 -.RS -Specifies an array indicating the stream services accepted by the display. -If the high-order byte in a particular entry is zero, the low-order byte -corresponds to an X-protocol host family type. -.RE -\fIConnection Addresses\fP: ARRAYofARRAY8 -.RS -For each connection type in the previous array, the corresponding entry in -this array indicates the network address of the display device. -.RE -\fIAuthentication Name\fP: ARRAY8 -.br -\fIAuthentication Data\fP: ARRAY8 -.RS -Specifies the authentication protocol that the display expects -the manager to validate itself with. The Authentication Data is -expected to contain data that the manager will interpret, modify -and use to authenticate itself. -.RE -\fIAuthorization Names\fP: ARRAYofARRAY8 -.RS -Specifies which types of authorization the display supports. The -manager may decide to reject displays with which it cannot perform -authorization. -.RE -\fIManufacturer Display ID\fP: ARRAY8 -.RS -Can be used by the manager to determine how to decrypt the -Authentication Data field in this packet. See the section below on -Manufacturer Display ID Format. -.RE -.RE -Semantics: -.RS -A -.PN Request -packet is sent by a display to a specific host to request a -session ID in preparation for a establishing a connection. If the manager -is willing to service a connection to this display, it should return an -.PN Accept -packet with a valid session ID and should be ready for a subsequent -.PN Manage -request. Otherwise, it should return a -.PN Decline -packet. -.RE -Valid Responses: -.RS -.PN Accept , -.PN Decline -.RE -Problems/Solutions: -.RS -Problem: -.RS -Request not received by manager. -.br -Indication: -.RS -Display timeout waiting for response. -.RE -Solution: -.RS -Display resends -.PN Request -message. -.RE -.RE -Problem: -.RS -Message received out of order by manager. -.br -Indication: -.RS -None. -.RE -Solution: -.RS -Each time a -.PN Request -is sent, the manager sends the Session ID -associated with the next session in the -.PN Accept . -If that next session is not yet started, -the manager will simply resend with the same Session ID. -If the session is in progress, the manager will reply -with a new Session ID; in which case, the -.PN Accept -will be discarded by the display. -.RE -.RE -.RE -Timeout/Retransmission policy: -.RS -Timeout after 2 seconds, exponential backoff to 32 seconds. -After no more than 126 seconds, give up and report an error to the user. -.RE -.RE -.LP -.PN Accept -.RS -Manager \(-> Display -.br -Additional Fields: -.RS -\fISession ID\fP: CARD32 -.RS -Identifies the session that can be started by the manager. -.RE -\fIAuthentication Name\fP: ARRAY8 -.br -\fIAuthentication Data\fP: ARRAY8 -.RS -Is the data sent back to the display to authenticate the manager. -If the Authentication Data is not the value expected by the display, it -should terminate the protocol at this point and display an error to the user. -.RE -\fIAuthorization Name\fP: ARRAY8 -.br -\fIAuthorization Data\fP: ARRAY8 -.RS -Is the data sent to the display to indicate the type of authorization the -manager will be using in the first call to -.PN XOpenDisplay -after the -.PN Manage -packet is received. -.RE -.RE -Semantics: -.RS -An -.PN Accept -packet is sent by a manager in response to a -.PN Request -packet if the manager is willing to establish a connection for the display. -The Session ID is used to identify this connection from any preceding -ones and will be used by the display in its subsequent -.PN Manage -packet. -The Session ID is a 32-bit number that is incremented each time an -.PN Accept -packet is sent as it must be unique over a reasonably long period of time. -.LP -If the authentication information is invalid, a -.PN Decline -packet will be returned with an appropriate -.PN Status -message. -.RE -Problems/Solutions: -.RS -Problem: -.RS -.PN Accept -or -.PN Decline -not received by display. -.br -Indication: -.RS -Display timeout waiting for response to -.PN Request . -.RE -Solution: -.RS -Display resends -.PN Request -message. -.RE -.RE -Problem: -.RS -Message received out of order by display. -.br -Indication: -.RS -Display receives -.PN Accept -after -.PN Manage -has been sent. -.RE -Solution: -.RS -Display discards -.PN Accept -messages after it has sent a -.PN Manage -message. -.RE -.RE -.RE -Timeout/Retransmission policy: -.RS -Like all packets sent from the manager to the display, this packet should -never be retransmitted. -.RE -.RE -.LP -.PN Decline -.RS -Manager \(-> Display -.br -Additional Fields: -.RS -\fIStatus\fP: ARRAY8 -.RS -Is a human readable string indicating the reason for refusal of -service. -.RE -\fIAuthentication Name\fP: -ARRAY8 -.br -\fIAuthentication Data\fP: -ARRAY8 -.RS -Is the data sent back to the display to authenticate the manager. If the -Authentication Data is not the value expected by the display, it -should terminate the protocol at this point and display an error to the user. -.RE -.RE -Semantics: -.RS -A -.PN Decline -packet is sent by a manager in response to a -.PN Request -packet if the manager is unwilling to establish a connection for the -display. -This is allowed even if the manager had responded -.PN Willing -to a previous query. -.RE -Problems/Solutions: -.RS -Same as for -.PN Accept . -.RE -Timeout/Retransmission policy: -.RS -Like all packets sent from a manager to a display, this packet should never -be retransmitted. -.RE -.RE -.LP -.PN Manage -.RS -Display \(-> Manager -.br -Additional Fields: -.RS -\fISession ID\fP: CARD32 -.RS -Should contain the nonzero session ID returned in the -.PN Accept -packet. -.RE -\fIDisplay Number\fP: CARD16 -.RS -Must match the value sent in the previous -.PN Request -packet. -.RE -\fIDisplay Class\fP: ARRAY8 -.RS -Specifies the class of the display. -See the Display Class Format section, -which discusses the format of this field. -.RE -.RE -Semantics: -.RS -A -.PN Manage -packet is sent by a display to ask the manager to begin a -session on the display. If the Session ID is correct the manager -should open a connection; otherwise, it should respond with a -.PN Refuse -or -.PN Failed -packet, unless the Session ID matches a currently -running session or a session that has not yet successfully opened the -display but has not given up the attempt. In this latter case, the -.PN Manage -packet should be ignored. -This will work as stream connections give positive success indication -to both halves of the stream, and positive failure indication -to the connection initiator (which will eventually generate a -.PN Failed -packet). -.RE -Valid Responses: -.RS -X connection with correct auth info, -.PN Refuse , -.PN Failed . -.RE -Problems/Solutions: -.RS -Problem: -.RS -.PN Manage -not received by manager. -.br -Indication: -.RS -Display timeout waiting for response. -.RE -Solution: -.RS -Display resends -.PN Manage -message. -.RE -.RE -Problem: -.RS -.PN Manage -received out of order by manager. -.br -Indication: -.RS -Session already in progress with matching Session ID. -.RE -Solution: -.RS -.PN Manage -packet ignored. -.RE -Indication: -.RS -Session ID does not match next Session ID. -.RE -Solution: -.RS -.PN Refuse -message is sent. -.RE -.RE -Problem: -.RS -Display cannot be opened on selected stream. -.br -Indication: -.RS -Display connection setup fails. -.RE -Solution: -.RS -.PN Failed -message is sent including a human readable reason. -.RE -.RE -Problem: -.RS -Display open does not succeed before a second manage packet is received -because of a timeout occuring in the display. -.br -Indication: -.RS -.PN Manage -packet received with Session ID matching the session -attempting to connect to the display. -.RE -Solution: -.RS -.PN Manage -packet is ignored. As the stream connection will either -succeed, which will result in an active session, or the stream will -eventually give up hope of connecting and send a -.PN Failed -packet; no response to this -.PN Manage -packet is necessary. -.RE -.RE -.RE -Timeout/Retransmission policy: -.RS -Timeout after 2 seconds, exponential backoff to 32 seconds. After no more -than 126 seconds, give up and report an error to the user. -.RE -.RE -.LP -.PN Refuse -.RS -Manager \(-> Display -.br -Additional Fields: -.RS -\fISession ID\fP: CARD32 -.RS -Should be set to the Session ID received in the -.PN Manage -packet. -.RE -.RE -Semantics: -.RS -A -.PN Refuse -packet is sent by a manager when the Session ID received in the -.PN Manage -packet does not match the current Session ID. -The display should assume that it received an old -.PN Accept -packet and should resend its -.PN Request -packet. -.RE -Problems/Solutions: -.RS -Problem: -.RS -Error message is lost. -.br -Indication: -.RS -Display times out waiting for -new connection, -.PN Refuse -or -.PN Failed . -.RE -Solution: -.RS -Display resends -.PN Manage -message. -.RE -.RE -.RE -Timeout/Retransmission policy: -.RS -Like all packets sent from a manager to a display, this packet should never be -retransmitted. -.RE -.RE -.LP -.PN Failed -.RS -Manager \(-> Display -.br -Additional Fields: -.RS -\fISession ID\fP: CARD32 -.RS -Should be set to the Session ID received in the -.PN Manage -packet. -.RE -\fIStatus\fP: ARRAY8 -.RS -Is a human readable string indicating the reason for failure. -.RE -.RE -Semantics: -.RS -A -.PN Failed -packet is sent by a manager when it has problems establishing -the initial X connection in response to the -.PN Manage -packet. -.RE -Problems/Solutions -.RS -Same as for -.PN Refuse . -.RE -.RE -.LP -.PN KeepAlive -.RS -Display \(-> Manager -.br -Additional Fields: -.RS -\fIDisplay Number\fP: CARD16 -.RS -Set to the display index for the display host. -.RE -.RE -.RS -\fISession ID\fP: CARD32 -.RS -Should be set to the Session ID received in the -.PN Manage -packet during the negotiation for the current session. -.RE -.RE -Sematics: -.RS -A -.PN KeepAlive -packet can be sent at any time during the session by a -display to discover if the manager is running. -The manager should respond with -.PN Alive -whenever it receives this type of packet. -.LP -This allows the display to discover when the manager host -is no longer running. -A display is not required to send -.PN KeepAlive -packets and, upon lack of receipt of -.PN Alive -packets, is not required to perform any specific action. -.LP -The expected use of this packet is to terminate an active session when the -manager host or network link fails. The display should keep track of the -time since any packet has been received from the manager host and use -.PN KeepAlive -packets when a substantial time has elapsed since the -most recent packet. -.RE -Valid Responses: -.RS -.PN Alive -.RE -Problems/Solutions: -.RS -Problem: -.RS -Manager does not receive the packet or display does not receive the response. -.RE -.RS -Indication: -.RS -No -.PN Alive -packet is returned. -.RE -Solution: -.RS -Retransmit the packet with an exponential backoff; start at 2 seconds and -assume the host is not up after no less than 30 seconds. -.RE -.RE -.RE -.RE -.LP -.PN Alive -.RS -Manager \(-> Display -.br -Additional Fields: -.RS -\fISession Running\fP: CARD8 -.RS -Indicates that the session identified by Session ID is -currently active. The value is zero if no session is active -or one if a session -is active. -.RE -\fISession ID\fP: CARD32 -.RS -Specifies the ID of the currently running session; if any. -When no session is active this field should be zero. -.RE -.RE -Semantics: -.RS -An -.PN Alive -packet is sent in response to a -.PN KeepAlive -request. -If a session is currently active on the display, the manager includes the -Session ID in the packet. The display can use this information to -determine the status of the manager. -.RE -.RE -.NH 1 -Session Termination -.XS -\*(SN Session Termination -.XE -.LP -When the session is over, the initial connection with the display (the one -that acknowledges the -.PN Manage -packet) will be closed by the manager. -If only a single session was active on the display, -all other connections should be closed by the display -and the display should be reset. If multiple sessions -are active simultaneously and the display can identify which connections -belong to the terminated sesssion, those connections should be closed. -Otherwise, all connections should be closed and the display reset only when -all sessions have been terminated (that is, all initial connections closed). -.LP -The session may also be terminated at any time by the display if the -managing host no longer responds to -.PN KeepAlive -packets. -The exact time-outs for sending -.PN KeepAlive -packets is not specified in this protocol as the trade off -should not be fixed between loading an otherwise idle system with spurious -.PN KeepAlive -packets and not noticing that the manager host is down for a long time. -.NH 1 -State Diagrams -.XS -\*(SN State Diagrams -.XE -.LP -The following state diagrams are designed to cover all actions of both -the display and the manager. Any packet that is received out-of-sequence -will be ignored. -.LP -Display: -.RS -.sp -.LP -\fIstart\fP: -.RS -User-requested connect to one host \(-> \fIquery\fP -.br -User-requested connect to some host \(-> \fIbroadcast\fP -.br -User-requested connect to site host-list \(-> \fIindirect\fP -.RE -.sp -.LP -\fIquery\fP: -.RS -Send -.PN Query -packet -.br -\(-> \fIcollect-query\fP -.RE -.sp -.LP -\fIcollect-query\fP: -.RS -Receive -.PN Willing -\(-> \fIstart-connection\fP -.br -Receive -.PN Unwilling -\(-> \fIstop-connection\fP -.br -Timeout \(-> \fIquery\fP -.RE -.sp -.LP -\fIbroadcast\fP: -.RS -Send -.PN BroadcastQuery -packet -.br -\(-> \fIcollect-broadcast-query\fP -.RE -.sp -.LP -\fIcollect-broadcast-query\fP: -.RS -Receive -.PN Willing -\(-> \fIupdate-broadcast-willing\fP -.br -User-requested connect to one host \(-> \fIstart-connection\fP -.br -Timeout \(-> \fIbroadcast\fP -.RE -.sp -.LP -\fIupdate-broadcast-willing\fP: -.RS -Add new host to the host list presented to the user -.br -\(-> \fIcollect-broadcast-query\fP -.RE -.sp -.LP -\fIindirect\fP: -.RS -Send -.PN IndirectQuery -packet -.br -\(-> \fIcollect-indirect-query\fP -.RE -.sp -.LP -\fIcollect-indirect-query\fP: -.RS -Receive -.PN Willing -\(-> \fIupdate-indirect-willing\fP -.br -User-requested connect to one host \(-> \fIstart-connection\fP -.br -Timeout \(-> \fIindirect\fP -.RE -.sp -.LP -\fIupdate-indirect-willing\fP: -.RS -Add new host to the host list presented to the user -.br -\(-> \fIcollect-indirect-query\fP -.RE -.sp -.LP -\fIstart-connection\fP: -.RS -Send -.PN Request -packet -.br -\(-> \fIawait-request-response\fP -.RE -.sp -.LP -\fIawait-request-response\fP: -.RS -Receive -.PN Accept -\(-> \fImanage\fP -.br -Receive -.PN Decline -\(-> \fIstop-connection\fP -.br -Timeout \(-> \fIstart-connection\fP -.RE -.sp -.LP -\fImanage\fP: -.RS -Save Session ID -.br -Send -.PN Manage -packet with Session ID -.br -\(-> \fIawait-manage-response\fP -.RE -.sp -.LP -\fIawait-manage-response\fP: -.RS -Receive -.PN XOpenDisplay : -\(-> \fIrun-session\fP -.br -Receive -.PN Refuse -with matching Session ID \(-> \fIstart-connection\fP -.br -Receive -.PN Failed -with matching Session ID \(-> \fIstop-connection\fP -.br -Timeout \(-> \fImanage\fP -.RE -.sp -.LP -\fIstop-connection\fP: -.RS -Display cause of termination to user -.br -\(-> \fIstart\fP -.RE -.sp -.LP -\fIrun-session\fP: -.RS -Decide to send -.PN KeepAlive -packet \(-> \fIkeep-alive\fP -.br -Await close of first display connection -.br -\(-> \fIreset-display\fP -.RE -.sp -.LP -\fIkeep-alive\fP: -.RS -Send -.PN KeepAlive -packet with current Session ID -.br -\(-> \fIawait-alive\fP -.RE -.sp -.LP -\fIawait-alive\fP: -.RS -Receive -.PN Alive -with matching Session ID \(-> \fIrun-session\fP -.br -Receive -.PN Alive -with nonmatching Session ID -or FALSE Session Running \(-> \fIreset-display\fP -.br -Final timeout without receiving -.PN Alive -packet \(-> \fIreset-display\fP -.br -Timeout \(-> \fIkeep-alive\fP -.RE -.sp -.LP -\fIreset-display\fP: -.RS -(if possible) \(-> close all display connections associated with this session -.br -Last session \(-> close all display connections -.br -\(-> \fIstart\fP -.RE -.RE -.LP -Manager: -.RS -.sp -.LP -\fIidle\fP: -.RS -Receive -.PN Query -\(-> \fIquery-respond\fP -.br -Receive -.PN BroadcastQuery -\(-> \fIbroadcast-respond\fP -.br -Receive -.PN IndirectQuery -\(-> \fIindirect-respond\fP -.br -Receive -.PN ForwardQuery -\(-> \fIforward-respond\fP -.br -Receive -.PN Request -\(-> \fIrequest-respond\fP -.br -Receive -.PN Manage -\(-> \fImanage\fP -.br -An active session terminates \(-> \fIfinish-session\fP -.br -Receive -.PN KeepAlive -\(-> \fIsend-alive\fP -.br -\(-> \fIidle\fP -.RE -.sp -.LP -\fIquery-respond\fP: -.RS -If willing to manage \(-> \fIsend-willing\fP -.br -\(-> \fIsend-unwilling\fP -.RE -.sp -.LP -\fIbroadcast-respond\fP: -.RS -If willing to manage \(-> \fIsend-willing\fP -.br -\(-> \fIidle\fP -.RE -.sp -.LP -\fIindirect-respond\fP: -.RS -Send -.PN ForwardQuery -packets to all managers on redirect list -.br -If willing to manage \(-> \fIsend-willing\fP -.br -\(-> \fIidle\fP -.RE -.sp -.LP -\fIforward-respond\fP: -.RS -Decode destination address, if willing to manage \(-> \fIsend-willing\fP -.br -\(-> \fIidle\fP -.RE -.sp -.LP -\fIsend-willing\fP: -.RS -Send -.PN Willing -packet -.br -\(-> \fIidle\fP -.RE -.sp -.LP -\fIsend-unwilling\fP: -.RS -Send -.PN Unwilling -packet -.br -\(-> \fIidle\fP -.RE -.sp -.LP -\fIrequest-respond\fP: -.RS -If manager is willing to allow a session on display \(-> \fIaccept-session\fP -.br -\(-> \fIdecline-session\fP -.RE -.sp -.LP -\fIaccept-session\fP: -.RS -Generate Session ID and save Session ID, display address, and -display number somewhere -.br -Send -.PN Accept -packet -.br -\(-> \fIidle\fP -.RE -.sp -.LP -\fIdecline-session\fP: -.RS -Send -.PN Decline -packet -.br -\(-> \fIidle\fP -.RE -.sp -.LP -\fImanage\fP: -.RS -If Session ID matches saved Session ID \(-> \fIrun-session\fP -.br -If Session ID matches Session ID of session in process of -starting up, or currently active session \(-> \fIidle\fP -.br -\(-> \fIrefuse\fP -.RE -.sp -.LP -\fIrefuse\fP: -.RS -Send -.PN Refuse -packet -.br -\(-> -\fIidle\fP -.RE -.sp -.LP -\fIrun-session\fP: -.RS -Terminate any session in progress -.br -.PN XOpenDisplay -.br -Open display succeeds \(-> -\fIstart-session\fP -.br -\(-> -\fIfailed\fP -.RE -.sp -.LP -\fIfailed\fP: -.RS -Send -.PN Failed -packet -.br -\(-> \fIidle\fP -.RE -.sp -.LP -\fIstart-session\fP: -.RS -Start a new session -.br -\(-> \fIidle\fP -.RE -.sp -.LP -\fIfinish-session\fP: -.RS -.PN XCloseDisplay -.br -\(-> \fIidle\fP -.RE -.sp -.LP -\fIsend-alive\fP: -.RS -Send -.PN Alive -packet containing current status -.br -\(-> \fIidle\fP -.RE -.RE -.NH 1 -Protocol Encoding -.XS -\*(SN Protocol Encoding -.XE -.LP -When XDMCP is implemented on top of the Internet User Datagram Protocol (UDP), -port number 177 is to be used. When using UDP over IPv4, Broadcast Query -packets are sent via UDP broadcast. When using UDP over IPv6, Broadcast Query -packets are sent via multicast, either to an address in the IANA registered -XDMCP multicast address range of FF0\fIX\fP:0:0:0:0:0:0:12B -(where the \fIX\fP is replaced by a valid scope id) or to a locally assigned -multicast address. The version number in all packets will be 1. -Packet opcodes are 16-bit integers. -.RS -.TS -l l. -_ -.sp 6p -.B -Packet Name Encoding -.sp 6p -_ -.sp 6p -.R -T{ -.PN BroadcastQuery -T} T{ -1 -T} -T{ -.PN Query -T} T{ -2 -T} -T{ -.PN IndirectQuery -T} T{ -3 -T} -T{ -.PN ForwardQuery -T} T{ -4 -T} -T{ -.PN Willing -T} T{ -5 -T} -T{ -.PN Unwilling -T} T{ -6 -T} -T{ -.PN Request -T} T{ -7 -T} -T{ -.PN Accept -T} T{ -8 -T} -T{ -.PN Decline -T} T{ -9 -T} -T{ -.PN Manage -T} T{ -10 -T} -T{ -.PN Refuse -T} T{ -11 -T} -T{ -.PN Failed -T} T{ -12 -T} -T{ -.PN KeepAlive -T} T{ -13\(dg -T} -T{ -.PN Alive -T} T{ -14\(dg -T} -.sp 6p -_ -.TE -.RE -.FS \(dg -A previous version of this document incorrectly reversed the opcodes of -.PN Alive -and -.PN KeepAlive . -.FE -.LP -Per packet information follows: -.LP -.Ds 0 -.TA .2i .75i 1.75i 2.5i -.ta .2i .75i 1.75i 2.5i -.PN Query -.PN BroadcastQuery -.PN IndirectQuery -.sp 3p - 2 CARD16 version number (always 1) - 2 CARD16 opcode (always Query, BroadcastQuery or IndirectQuery) - 2 CARD16 length - 1 CARD8 number of Authentication Names sent (m) - 2 CARD16 length of first Authentication Name (m\d\s-21\s+2\u) - m\d\s-21\s+2\u CARD8 first Authentication Name - \&... Other Authentication Names -.De -Note that these three packets are identical except for the opcode field. -.LP -.Ds 0 -.TA .2i .75i 1.75i 2.5i -.ta .2i .75i 1.75i 2.5i -.PN ForwardQuery -.sp 3p - 2 CARD16 version number (always 1) - 2 CARD16 opcode (always ForwardQuery) - 2 CARD16 length - 2 CARD16 length of Client Address (m) - m CARD8 Client Address - 2 CARD16 length of Client Port (n) - n CARD8 Client Port - 1 CARD8 number of Authentication Names sent (o) - 2 CARD16 length of first Authentication Name (o\d\s-21\s+2\u) - o\d\s-21\s+2\u CARD8 first Authentication Name - \&... Other Authentication Names -.De -.LP -.Ds 0 -.TA .2i .75i 1.75i 2.5i -.ta .2i .75i 1.75i 2.5i -.PN Willing -.sp 3p - 2 CARD16 version number (always 1) - 2 CARD16 opcode (always Willing) - 2 CARD16 length (6 + m + n + o) - 2 CARD16 Length of Authentication Name (m) - m CARD8 Authentication Name - 2 CARD16 Hostname length (n) - n CARD8 Hostname - 2 CARD16 Status length (o) - o CARD8 Status -.De -.LP -.Ds 0 -.TA .2i .75i 1.75i 2.5i -.ta .2i .75i 1.75i 2.5i -.PN Unwilling -.sp 3p - 2 CARD16 version number (always 1) - 2 CARD16 opcode (always Unwilling) - 2 CARD16 length (4 + m + n) - 2 CARD16 Hostname length (m) - m CARD8 Hostname - 2 CARD16 Status length (n) - n CARD8 Status -.De -.LP -.Ds 0 -.TA .2i .75i 1.75i 2.5i -.ta .2i .75i 1.75i 2.5i -.PN Request -.sp 3p - 2 CARD16 version number (always 1) - 2 CARD16 opcode (always Request) - 2 CARD16 length - 2 CARD16 Display Number - 1 CARD8 Count of Connection Types (m) - 2 \(mu m CARD16 Connection Types - 1 CARD8 Count of Connection Addresses (n) - 2 CARD16 Length of first Connection Address (n\s-2\d1\u\s+2) - n\s-2\d1\u\s+2 CARD8 First Connection Address - \&... Other connection addresses - 2 CARD16 Length of Authentication Name (o) - o CARD8 Authentication Name - 2 CARD16 Length of Authentication Data (p) - p CARD8 Authentication Data - 1 CARD8 Count of Authorization Names (q) - 2 CARD16 Length of first Authorization Name (q\s-2\d1\u\s+2) - q\s-2\d1\u\s+2 CARD8 First Authorization Name - \&... Other authorization names - 2 CARD16 Length of Manufacturer Display ID (r) - r CARD8 Manufacturer Display ID -.De -.LP -.Ds 0 -.TA .2i .75i 1.75i 2.5i -.ta .2i .75i 1.75i 2.5i -.PN Accept -.sp 3p - 2 CARD16 version number (always 1) - 2 CARD16 opcode (always Accept) - 2 CARD16 length (12 + n + m + o + p) - 4 CARD32 Session ID - 2 CARD16 Length of Authentication Name (n) - n CARD8 Authentication Name - 2 CARD16 Length of Authentication Data (m) - m CARD8 Authentication Data - 2 CARD16 Length of Authorization Name (o) - o CARD8 Authorization Name - 2 CARD16 Length of Authorization Data (p) - p CARD8 Authorization Data -.De -.LP -.Ds 0 -.TA .2i .75i 1.75i 2.5i -.ta .2i .75i 1.75i 2.5i -.PN Decline -.sp 3p - 2 CARD16 version number (always 1) - 2 CARD16 opcode (always Decline) - 2 CARD16 length (6 + m + n + o) - 2 CARD16 Length of Status (m) - m CARD8 Status - 2 CARD16 Length of Authentication Name (n) - n CARD8 Authentication Name - 2 CARD16 Length of Authentication Data (o) - o CARD8 Authentication Data -.De -.LP -.Ds 0 -.TA .2i .75i 1.75i 2.5i -.ta .2i .75i 1.75i 2.5i -.PN Manage -.sp 3p - 2 CARD16 version number (always 1) - 2 CARD16 opcode (always Manage) - 2 CARD16 length (8 + m) - 4 CARD32 Session ID - 2 CARD16 Display Number - 2 CARD16 Length of Display Class (m) - m CARD8 Display Class -.De -.LP -.Ds 0 -.TA .2i .75i 1.75i 2.5i -.ta .2i .75i 1.75i 2.5i -.PN Refuse -.sp 3p - 2 CARD16 version number (always 1) - 2 CARD16 opcode (always Refuse) - 2 CARD16 length (4) - 4 CARD32 Session ID -.De -.LP -.Ds 0 -.TA .2i .75i 1.75i 2.5i -.ta .2i .75i 1.75i 2.5i -.PN Failed -.sp 3p - 2 CARD16 version number (always 1) - 2 CARD16 opcode (always Failed) - 2 CARD16 length (6 + m) - 4 CARD32 Session ID - 2 CARD16 Length of Status (m) - m CARD8 Status -.De -.LP -.Ds 0 -.TA .2i .75i 1.75i 2.5i -.ta .2i .75i 1.75i 2.5i -.PN KeepAlive -.sp 3p - 2 CARD16 version number (always 1) - 2 CARD16 opcode (always KeepAlive) - 2 CARD16 length (6) - 2 CARD16 Display Number - 4 CARD32 Session ID -.De -.LP -.Ds 0 -.TA .2i .75i 1.75i 2.5i -.ta .2i .75i 1.75i 2.5i -.PN Alive -.sp 3p - 2 CARD16 version number (always 1) - 2 CARD16 opcode (always Alive) - 2 CARD16 length (5) - 1 CARD8 Session Running (0: not running 1: running) - 4 CARD32 Session ID (0: not running) -.De -.NH 1 -Display Class Format -.XS -\*(SN Display Class Format -.XE -.LP -The Display Class field of the -.PN Manage -packet is used by the display manager to collect common sorts of -displays into manageable groups. This field is a string encoded of -ISO-LATIN-1 characters in the following format: -.LP -.Ds -\fIManufacturerID\fP\^-\^\fIModelNumber\fP -.De -.LP -Both elements of this string must exclude characters of the set { \fB-\fP, -\&\fB.\fP, \fB:\fP, \fB*\fP, \fB?\fP, \fI\fP }. -The ManufacturerID is a string that should be registered -with the X Consortium. -The ModelNumber is designed to identify characteristics of the display -within the manufacturer's product line. -This string should be documented in the users manual for the -particular device and should probably not be specifiable by the -display user to avoid unexpected configuration errors. -.NH 1 -Manufacturer Display ID Format -.XS -\*(SN Manufacturer Display ID Format -.XE -.LP -To authenticate the manager, the display and manager will share a private -key. -The manager, then, must be able to discover which key to use for a -particular device. -The Manufacturer Display ID field of the -.PN Request -packet is intended for this purpose. Typically, the manager host will -contain a map between this number and the key. This field is intended to be -unique per display, possibly the ethernet address of the display in the form: -.LP -.Ds --Ethernet-8:0:2b:a:f:d2 -.De -.LP -It can also be a string of the form: -.LP -.Ds -\fIManufacturerID\fP\^-\^\fIModelNumber\fP\^-\^\fISerialNumber\fP -.De -.LP -The ManufacturerID, ModelNumber and SerialNumber are encoded using -ISO-LATIN-1 characters, excluding { \fB-\fP, -\&\fB.\fP, \fB*\fP, \fB?\fP, \fI\fP } -.LP -When the display is shipped to a customer, it should include both the -Manufacturer Display ID and the private key in the documentation set. -This information should not be modifiable by the display user. -.NH 1 -Authentication -.XS -\*(SN Authentication -.XE -.LP -In an environment where authentication is not needed, XDMCP can disable -authentication by having the display send empty Authentication Name -and Authentication Data fields in the -.PN Request -packet. -In this case, the manager will not attempt to authenticate itself. -Other authentication protocols may be developed, depending on local needs. -.LP -In an unsecure environment, the display must be able to verify that the -source of the various packets is a trusted manager. These packets will -contain authentication information. As an example of such a system, the -following discussion describes the "XDM-AUTHENTICATION-1" authentication -system. This system uses a 56-bit shared private key, and 64 bits of -authentication data. An associated example X authorization protocol -"XDM-AUTHORIZATION-1" will also be discussed. The 56-bit key is represented -as a 64-bit number in network order (big endian). This means that the first -octet in the representation will be zero. When incrementing a 64-bit value, -the 8 octets of data will be interpreted in network order (big endian). -That is, the last octet will be incremented, subsequent carries propogate -towards the first octet. -.IP \(bu 5 -Assumptions -.RS -.IP 1. 5 -The display and manager share a private key. This key could be programmed -into the display by the manufacturer and shipped with the unit. It must not -be available from the display itself, but should allow the value to be -modified in some way. The system administrator would be responsible for -managing a database of terminal keys. -.IP 2. 5 -The display can generate random authentication numbers. -.RE -.LP -Some definitions first: -.EQ -oc D cc sup kappa mark = "encryption of plain text " D " by key " kappa -.EN C -.EQ -oc DELTA cc * sup kappa lineup = "decryption of crypto text " DELTA " with key " kappa -.EN C -.EQ -{ tau } lineup = "private key shared by display and manager" -.EN C -.EQ -rho lineup = "64 bit random number generated by display" -.EN C -.EQ -alpha lineup = "authentication data in XDMCP packets" -.EN C -.EQ -sigma lineup = "per-session private key, generated by manager" -.EN C -.EQ -beta lineup = "authorization data" -.EN -.LP -Encryption will use the Data Encryption Standard (DES, FIPS 46-3); blocks -shorter than 64 bits will be zero-filled -on the right to 64 bits. Blocks longer than 64 bits will use block chaining: -.EQ -oc { D } cc sup kappa lineup = oc { D sub 1 } cc sup kappa " " -oc { D sub 2 } " " xor " " oc { D sub 1 } cc sup kappa cc sup kappa -.EN -.LP -The display generates the first authentication data in the -.PN Request -packet: -.EQ -alpha sub roman Request mark = oc rho cc sup tau -.EN -.LP -For the -.PN Accept -packet, the manager decrypts the initial message and returns -@alpha sub roman Accept@: -.EQ -rho lineup = oc alpha sub roman Request cc * sup tau -.EN C -.EQ -alpha sub roman Accept lineup = oc rho + 1 cc sup tau -.EN -.LP -The -.PN Accept -packet also contains the authorization intended for use by -the X server. A description of authorization type ``XDM-AUTHORIZATION-1'' -follows. -.LP -The -.PN Accept -packet contains the authorization name -``XDM-AUTHORIZATION-1''. The authorization data is the string: -.EQ -beta sub Accept mark = oc sigma cc sup tau -.EN -.LP -To create authorization information for connection setup with the X server -using the XDM-AUTHORIZATION-1 authorization protocol, the client computes the -following: -.EQ -N mark = "X client identifier" -.EN C -.EQ -T lineup = "Current time in seconds on client host (32 bits)" -.EN -.EQ C -beta lineup = oc rho N T cc sup sigma -.EN -.LP -For TCP connections @N@ is 48 bits long and contains the 32-bit IPv4 address of -the client host followed by the 16-bit port number of the client socket. -Formats for other connections must be registered. -The resulting value, @beta@, is 192 bits of authorization data that is sent -in the connection setup to the server. The server receives the packet, -decrypts the contents. To accept the connection, the following must hold: -.IP \(bu 5 -@rho@ must match the value generated for the most recent XDMCP negotiation. -.IP \(bu 5 -@T@ must be within 1200 seconds of the internally stored time. If no time -been received before, the current time is set to @T@. -.IP \(bu 5 -No packet containing the same pair (@N@, @T@) can have been received -in the last 1200 seconds (20 minutes). -.bp -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.TC diff --git a/doc/xorg-docs/specs/XIM/xim.ms b/doc/xorg-docs/specs/XIM/xim.ms deleted file mode 100644 index bbae17f16..000000000 --- a/doc/xorg-docs/specs/XIM/xim.ms +++ /dev/null @@ -1,4277 +0,0 @@ -.\" $Xorg: xim.ms,v 1.3 2000/08/17 19:42:21 cpqbld Exp $ -.\" To print this out, type tbl macros.t ThisFile | troff -ms -.\" $XFree86: xc/doc/specs/XIM/xim.ms,v 1.2 2000/12/14 17:48:58 dawes Exp $ -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.ps 11 -.nr PS 11 -\& -.sp 8 -.TL -\s+3\fBThe Input Method Protocol\fP\s-3 -.sp -\fBVersion 1.0\fP -.sp -\fBX Consortium Standard\fP -.sp -\fBX Version 11, Release 6.8\fP -.sp 3 -.AU -Masahiko Narita -.AI -FUJITSU Limited. -.AU -Hideki Hiura -.AI -SunSoft, Inc. -.sp 3 -.AB -.LP -This specifies a protocol between IM library and IM (Input Method) -Server for internationalized text input, which is independent from -any specific language, any specific input method and the transport layer -used in communication between the IM library and the IM Server, and uses -a client-server model. -This protocol allows user to use his/her favorite input method for all -applications within the stand-alone distributed environment. -.AE -.ce 0 -.br -\& -.LP -.ps 11 -.nr PS 11 -.bp -\& -.ps 9 -.nr PS 9 -.sp 8 -.LP -.DS C -X Window System is a trademark of X Consortium, Inc. -.sp -Copyright \(co 1993, 1994 by X Consortium, Inc. -.DE -.sp 2 -.LP -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: -.LP -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. -.LP -Except as contained in this notice, the name of the X Consortium shall -not be used in advertising or otherwise to promote the sale, use or -other dealings in this Software without prior written authorization -from the X Consortium. -.sp 3 -.DS C -Copyright \(co 1993, 1994 by FUJITSU LIMITED -.sp -Copyright \(co 1993, 1994 by Sun Microsystems, Inc. -.DE -.sp 2 -.LP -Permission to use, copy, modify, and distribute this documentation -for any purpose and without fee is hereby granted, provided -that the above copyright notice and this permission -notice appear in all copies. -Fujitsu and Sun Microsystems make no representations -about the suitability for any purpose of the information in this document. -This documentation is provided as is without express or implied warranty. -.ps 11 -.nr PS 11 -.bp 1 -.EH '\fBX Input Method Protocol\fP''\fBX11, Release 6.8\fP' -.OH '\fBX Input Method Protocol\fP''\fBX11, Release 6.8\fP' -.EF ''\fB % \fP'' -.OF ''\fB % \fP'' -.NH 1 -Introduction -.XS -\*(SN Introduction -.XE -.NH 2 -Scope -.XS -\*(SN Scope -.XE -.LP -The internationalization in the -X Window System -Version 11, Release 5 (X11R5) provides a common API which application -developers can use to create portable internationalized programs and to -adapt them to the requirements of different native languages, local customs, -and character string encodings (this is called ``localization''). -As one of its internationalization mechanisms X11R5 has defined a functional -interface for internationalized text input, called XIM (X Input Method). -.LP -When a client-server model is used with an IM (Input Method) implementation, -a protocol must be established between the client and the server. -However, the protocol used to interface Input Method Servers (IM Servers) -with the Input Method libraries (IM libraries) to which applications are -linked was not addressed in X11R5. -This led application developers to depend on vendor-specific input methods, -decreased the user's choice of available input methods, and made it more -difficult for developers to create portable applications. This paper describes -the Input Method Protocol developed for X11R6 to resolve the above problems -and to address the requirements of existing and future input methods. -.LP -The Input Method Protocol is independent from the transport layer used in -communication between the IM library and the IM Server. -Thus, the input method protocol can be built on any inter-process -communication mechanism, such as TCP/IP or the X protocol. -.LP -In addition, the protocol provides for future extensions such as differing -input model types. -.LP -.NH 2 -Background -.XS -\*(SN Background -.XE -.LP -Text input is much more simple for some languages than -others. English, for instance, uses an alphabet of a manageable size, -and input consists of pressing the corresponding key on a keyboard, -perhaps in combination with a shift key for capital letters or special -characters. -.LP -Some languages have larger alphabets, or modifiers such as accents, -which require the addition of special key combinations in order to enter -text. These input methods may require ``dead-keys'' or ``compose-keys'' -which, when followed by different combinations of key strokes, -generate different characters. -.LP -Text input for ideographic languages is much less simple. In these -languages, characters represent actual objects rather than phonetic -sounds used in pronouncing a word, and the number of characters -in these languages may continue to grow. In Japanese, for instance, most -text input methods involve entering characters in a phonetic alphabet, -after which the input method searches a dictionary for possible -ideographic equivalents (of which there may be many). The input method then -presents the candidate characters for the user to choose from. -.LP -In Japanese, either Kana (phonetic symbols) or Roman letters are -typed and then a region is selected for conversion to Kanji. Several -Kanji characters may have the same phonetic representation. If that -is the case with the string entered, a menu of characters is presented -and the user must choose the appropriate one. If no choice is necessary -or a preference has been established, the input method does the -substitution directly. -.LP -These complicated input methods must present state information (Status Area), -text entry and edit space (Preedit Area), and menu/choice presentations -(Auxiliary Area). Much of the protocol between the IM library and the IM -Server involves managing these IM areas. -Because of the size and complexity of these input methods, and because -of how widely they vary from one language or locale to another, they are -usually implemented as separate processes which can serve many client -processes on the same computer or network. -.LP -.NH 2 -Input Method Styles -.XS -\*(SN Input Method Styles -.XE -.LP -X11 internationalization support includes the following four types of -input method: -.RS -.IP "- on-the-spot:" 20 -The client application is directed by the IM Server to display all -pre-edit data at the site of text insertion. The client registers -callbacks invoked by the input method during pre-editing. -.IP "- off-the-spot:" 20 -The client application provides display windows for the pre-edit data -to the input method which displays into them directly. -.IP "- over-the-spot:" 20 -The input method displays pre-edit data in a window which it brings up -directly over the text insertion position. -.IP "- root-window:" 20 -The input method displays all pre-edit data in a separate area of the -screen in a window specific to the input method. -.RE -.LP -Client applications must choose from the available input methods -supported by the IM Server and provide the display areas and callbacks -required by the input method. -.LP -.NH 1 -Architecture -.XS -\*(SN Architecture -.XE -.NH 2 -Implementation Model -.XS -\*(SN Implementation Model -.XE -.LP -Within the X Window System environment, the following two typical -architectural models can be used as an input method's implementation -model. -.RS -.IP "- Client/Server model:" 20 -A separate process, the IM Server, processes input and handles preediting, -converting, and committing. The IM library within the application, acting -as client to the IM Server, simply receives the committed string from the -IM Server. -.IP "- Library model:" 20 -All input is handled by the IM library within the application. The -event process is closed within the IM library and a separate IM Server -process may not be required. -.RE -.LP -Most languages which need complex preediting, such as Asian languages, -are implemented using the Client/Server IM model. Other languages -which need only dead key or compose key processing, such as European -languages, are implemented using the Library model. -.LP -In this paper, we discuss mainly the Client/Server IM model and the -protocol used in communication between the IM library (client) and the IM -Server. -.LP -.NH 2 -Structure of IM -.XS -\*(SN Structure of IM -.XE -.LP -When the client connects or disconnects to the IM Server, an open or close -operation occurs between the client and the IM Server. -.LP -The IM can be specified at the time of XOpenIM() by setting the locale -of the client and a locale modifier. Since the IM remembers -the locale at the time of creation XOpenIM() can be called -multiple times (with the -setting for the locale and the locale modifier changed) to support -multiple languages. -.LP -In addition, the supported IM type can be obtained using XGetIMValues(). -.LP -The client usually holds multiple input (text) fields. Xlib provides a -value type called the ``Input Context'' (IC) to manage each individual -input field. An IC can be created by specifying XIM using XCreateIC(), -and it can be destroyed using XDestroyIC(). -.LP -The IC can specify the type of IM which is supported by XIM for each -input field, so each input field can handle a different type of IM. -.LP -Most importantly information such as the committed string sent from -the IM Server to the client, is exchanged based on each IC. -.LP -Since each IC corresponds to an input field, the focused input field -should be announced to the IM Server using XSetICFocus(). (XUnsetICFocus() -can also be used to change the focus.) -.LP -.NH 2 -Event Handling Model -.XS -\*(SN Event Handling Model -.XE -.LP -Existing input methods support either the FrontEnd method, the BackEnd method, -or both. This protocol specifically supports the BackEnd method as -the default method, but also supports the FrontEnd method as an optional -IM Server extension. -.LP -The difference between the FrontEnd and BackEnd methods is in how -events are delivered to the IM Server. (Fig. 1) -.LP -.NH 3 -BackEnd Method -.XS -\*(SN BackEnd Method -.XE -.LP -In the BackEnd method, client window input events are always delivered -to the IM library, which then passes them to the IM Server. Events are -handled serially in the order delivered, and therefore there is no -synchronization problem between the IM library and the IM Server. -.LP -Using this method, the IM library forwards all KeyPress and KeyRelease -events to the IM Server (as required by the Event Flow Control model -described in section 2.4. ``Event Flow Control''), and synchronizes -with the IM Server (as described in section 4.16. ``Filtering Events''). -.LP -.NH 3 -FrontEnd Method -.XS -\*(SN FrontEnd Method -.XE -.LP -In the FrontEnd method, client window input events are delivered by the -X server directly to both the IM Server and the IM library. Therefore this -method provides much better interactive performance while preediting -(particularly in cases such as when the IM Server is running locally on -the user's workstation and the client application is running on another -workstation over a relatively slow network). -.LP -However, the FrontEnd model may have synchronization problems between -the key events handled in the IM Server and other events handled in the -client, and these problems could possibly cause the loss or duplication -of key events. For this reason, the BackEnd method is the core method -supported, and the FrontEnd method is made available as an extension for -performance purposes. (Refer to Appendix A for more information.) -.LP -.LP -.bp -\^... 0.05 6.513 4.737 10.45 -\^... 0.000i 3.937i 4.687i 0.000i -.nr 00 \n(.u -.nf -.PS 3.937i 4.687i -.br -.ps -.ps 10 -\h'3.687i'\v'3.437i'\v'-.13m'\L'-0.500i\(br'\v'.13m' -.sp -1 -\h'3.712i'\v'3.037i'\D'l-0.025i -0.100i' -.sp -1 -\h'3.687i'\v'2.937i'\D'l-0.025i 0.100i' -.sp -1 -\h'2.187i'\v'1.938i'\v'-.13m'\L'-0.750i\(br'\v'.13m' -.sp -1 -\h'2.187i'\v'1.188i'\l'0.750i' -.sp -1 -\h'2.937i'\v'1.188i'\v'-.13m'\L'1.250i\(br'\v'.13m' -.sp -1 -\h'2.912i'\v'2.338i'\D'l0.025i 0.100i' -.sp -1 -\h'2.937i'\v'2.438i'\D'l0.025i -0.100i' -.sp -1 -\h'2.187i'\v'3.437i'\v'-.13m'\L'-1.499i\(br'\v'.13m' -.sp -1 -\h'2.212i'\v'2.038i'\D'l-0.025i -0.100i' -.sp -1 -\h'2.187i'\v'1.938i'\D'l-0.025i 0.100i' -.sp -1 -\h'1.938i'\v'3.437i'\l'1.999i' -.sp -1 -\h'3.937i'\v'3.437i'\v'-.13m'\L'0.500i\(br'\v'.13m' -.sp -1 -\h'3.937i'\v'3.937i'\l'-1.999i' -.sp -1 -\h'1.938i'\v'3.937i'\v'-.13m'\L'-0.500i\(br'\v'.13m' -.sp -1 -\h'2.562i'\v'2.438i'\l'2.125i' -.sp -1 -\h'4.687i'\v'2.438i'\v'-.13m'\L'0.499i\(br'\v'.13m' -.sp -1 -\h'4.687i'\v'2.937i'\l'-2.125i' -.sp -1 -\h'2.562i'\v'2.937i'\v'-.13m'\L'-0.499i\(br'\v'.13m' -.sp -1 -\h'2.562i'\v'1.438i'\l'1.313i' -.sp -1 -\h'3.875i'\v'1.438i'\v'-.13m'\L'0.437i\(br'\v'.13m' -.sp -1 -\h'3.875i'\v'1.875i'\l'-1.313i' -.sp -1 -\h'2.562i'\v'1.875i'\v'-.13m'\L'-0.437i\(br'\v'.13m' -.sp -1 -\h'1.938i'\v'0.438i'\l'1.999i' -.sp -1 -\h'3.937i'\v'0.438i'\v'-.13m'\L'1.500i\(br'\v'.13m' -.sp -1 -\h'3.937i'\v'1.938i'\l'-1.999i' -.sp -1 -\h'1.938i'\v'1.938i'\v'-.13m'\L'-1.500i\(br'\v'.13m' -.sp -1 -\D'l0.000i 0.000i' -.sp -1 -.ps -.ps 12 -\h'3.812i'\v'3.217i'\h'-0.0m'\v'0.2m'FrontEnd Method (Extension) -.sp -1 -\h'0.813i'\v'3.217i'\h'-0.0m'\v'0.2m'BackEnd Method (Core) -.sp -1 -\h'2.562i'\v'3.779i'\h'-0.0m'\v'0.2m'X Server -.sp -1 -\h'3.062i'\v'2.779i'\h'-0.0m'\v'0.2m'IM Server -.sp -1 -\h'3.062i'\v'1.717i'\h'-0.0m'\v'0.2m'Library -.sp -1 -\h'2.187i'\v'0.904i'\h'-0.0m'\v'0.2m'Application -.sp -1 -.ps -.ft -.sp 1+3.937i -.PE -.if \n(00 .fi -.ce -.sp -Fig.1 The Flow of Events -.LP -.NH 2 -Event Flow Control -.XS -\*(SN Event Flow Control -.XE -.LP -This protocol supports two event flow models for communication between the -IM library and the IM Server (Static and Dynamic). -.LP -Static Event Flow requires that input events always be sent to the IM -Server from the client. -.LP -Dynamic Event Flow, however, requires only that those input events which -need to be processed (converted) be sent to the IM Server from the client. -.LP -For instance, in the case of inputing a combination of ASCII characters -and Chinese characters, ASCII characters do not need to be processed in -the IM Server, so their key events do not have to be sent to the IM -Server. On the other hand, key events necessary for composing Chinese -characters must be sent to the IM Server. -.LP -Thus, by adopting the Dynamic Event Flow, the number of requests among the -X Server, the client, and the IM Server is significantly reduced, and the -number of context switches is also reduced, resulting in improved performance. -The IM Server can send -.PN XIM_REGISTER_TRIGGERKEYS -message in order to switch the event flow in the Dynamic Event Flow. -.LP -The protocol for this process is described in section 4.5. ``Event Flow -Control''. -.LP -.NH 1 -Default Preconnection Convention -.XS -\*(SN Default Preconnection Convention -.XE -.LP -IM Servers are strongly encouraged to register their symbolic -names as the ATOM names into the IM Server directory property, -.PN XIM_SERVERS, -on the root window of the screen_number 0. -This property can contain a list of ATOMs, and the each ATOM represents -each possible IM Server. -IM Server names are restricted to POSIX Portable Filename Character Set. -To discover if the IM Server is active, see if there is an owner for -the selection with that atom name. To learn the address of that IM Server, -convert the selection target -.PN TRANSPORT, -which will return a string form of the transport address(es). -To learn the supported locales of that IM Server, convert the selection target -.PN LOCALES, -which will return a set of names of the supported locales in the syntax -X/Open defines. -.LP -The basic semantics to determine the IM Server if there are -multiple ATOMs are found in -.PN XIM_SERVERS -property, is first fit if the IM Server name is not given as -a X modifier's category -.PN im. -.LP -The address information retrievable from the -.PN TRANSPORT -target is a transport-specific name. -The preregistered formats for transport-specific names are listed in Appendix B. -Additional transport-specific names may be registered with X Consortium. -.LP -For environments that lack X connections, or for IM Servers which -do not use the X Window System, the preconnection convention with IM Server -may be given outside the X Window system (e.g. using a Name Service). -.LP -.NH 1 -Protocol -.XS -\*(SN Protocol -.XE -.LP -The protocol described below uses the bi-directional -synchronous/asynchronous request/reply/error model and is specified -using the same conventions outlined in Section 2 of the core X Window -System protocol [1]: -.LP -.NH 2 -Basic Requests Packet Format -.XS -\*(SN Basic Requests Packet Format -.XE -.LP -This section describes the requests that may be exchanged between the client -and the IM Server. -.LP -The basic request packet header format is as follows. -.RS -.DS - major-opcode: CARD8 - minor-opcode: CARD8 - length: CARD16 -.DE -.RE -The MAJOR-OPCODE specifies which core request or extension package this -packet represents. If the MAJOR-OPCODE corresponds to a core request, -the MINOR-OPCODE contains 8 bits of request-specific data. -(If the MINOR-OPCODE is not used, it is 0.) -Otherwise, the MAJOR-OPCODE and the MINOR-OPCODE are specified by -.PN XIM_QUERY_EXTENSION -message. (Refer to 4.7. Query the supported extension protocol list.) -The LENGTH field specifies the number of 4 bytes elements following the -header. If no additional data is followed by the header, the LENGTH field -will be 0. -.LP -.NH 2 -Data Types -.XS -\*(SN Data Types -.XE -.LP -The following data types are used in the core X IM Server protocol: -.LP -.nf -.ta .2i .5i 2.0i -BITMASK16 - CARD16 -.sp -BITMASK32 - CARD32 -.sp -PADDING FORMAT - Where N is some expression, and Pad(N) is the number of bytes needed to round N up to a - multiple of four. - Pad(N) = (4 - (N mod 4)) mod 4 -.sp -LPCE - 1 A character from the4 X Portable Character Set in Latin Portable - Character Encoding -.bp -STRING - 2 n length of string in bytes - n LISTofLPCE string - p unused, p=Pad(2+n) -.sp -STR - 1 n length of name in bytes - n STRING8 name -.sp -XIMATTR - 2 CARD16 attribute ID (*1) - 2 CARD16 type of the value (*2) - 2 n length of im-attribute - n STRING8 im-attribute - p unused, p = Pad(2+n) -.sp -The im-attribute argument specifies XIM values such as XNQueryInputStyle. -.sp -XICATTR - 2 CARD16 attribute ID (*1) - 2 CARD16 type of the value (*2) - 2 n length of ic-attribute - n STRING8 ic-attribute - p unused, p = Pad(2+n) -.LP -.IP (*1) -XIMATTR and XICATTR are used during the setup stage and XIMATTRIBUTE and -XICATTRIBUTE are used after each attribute ID has been recognized by -the IM Server and the IM library. -.sp -.IP (*2) -The value types are defined as follows: -.TS H -tab(:); -l l l s s -l l l l l -l l l l l -l l l l l -l l l l l -l l l l l -l l l l l -l l l l l -l l l l l -l l l l l -l l l l l -l l l l l -l l l l l -l l l l l -l l l l l -l l l l l -l l l l l -l l l l l -l l l l l -l l l l l -l l l l l -l l l l l -l l l s s -l l l s s -l l l s s -l l l s s -l l l s s -l l l l l. -_ -.sp 6p -.B -values:data:format -.sp 6p -_ -.sp 6p -.TH -.R -#0:Separator of NestedList:----- (*3) -#1:byte data:CARD8 -#2:word data:CARD16 -#3:long data:CARD32 -#4:char data:STRING8 -#5:Window:CARD32 -#10:XIMStyles:2:n:number of XIMStyle list -::2::unused -::n:CARD32:XIMStyle list -#11:XRectangle:2:INT16:X -::2:INT16:Y -::2:CARD16:width -::2:CARD16:height -#12:XPoint:2:INT16:X -::2:INT16:Y -#13:XFontSet:2:n:length of Base font name -::n:STRING8:Base font name list -::p::unused, p = Pad(2+n) -#15:XIMHotKeyTriggers:4:n:T{ -number of XIMTRIGGERKEY list (*4) -T} -::n:XIMTRIGGERKEY:XIMHotkeyTrigger list -#16:XIMHotKeyState::XIMHOTKEYSTATE:T{ -HotKey processing state -T} -#17:XIMStringConversion:XIMSTRCONVTEXT -#18:XIMPreeditState:XIMPREEDITSTATE -#19:XIMResetState:XIMRESETSTATE -#x7fff:NestedList:----- -.sp 6p -_ -.TE -.LP -.IP (*3) -The IC value for the separator of NestedList is defined as follows, -.br - #define XNSeparatorofNestedList ``separatorofNestedList'' -.br -, which is registered in X Consortium and cannot be used for any -other purpose. -.sp -.IP (*4) -LISTofFOO -.RS -A Type name of the form LISTof FOO means a counted list of elements of -type FOO. -The size of the length field may vary (it is not necessarily the same -size as a FOO), and in some cases, it may be implicit. -.RE -.sp -.LP -.nf -.ta .2i .5i 2.0i -XIMTRIGGERKEY - 4 CARD32 keysym - 4 CARD32 modifier - 4 CARD32 modifier mask -.sp -ENCODINGINFO - 2 n length of encoding info - n STRING8 encoding info - p unused, p=Pad(2+n) -.sp -EXT - 1 CARD8 extension major-opcode - 1 CARD8 extension minor-opcode - 2 n length of extension name - n STRING8 extension name - p unused, p = Pad(n) -.sp -XIMATTRIBUTE - 2 CARD16 attribute ID - 2 n value length - n value - p unused, p = Pad(n) -.sp -XICATTRIBUTE - 2 CARD16 attribute ID - 2 n value length - n value - p unused, p = Pad(n) -.sp -.bp -.ta .2i .5i 3.0i -XIMSTRCONVTEXT - 2 CARD16 XIMStringConversionFeedback - #x0000001 XIMStringConversionLeftEdge - #x0000002 XIMStringConversionRightEdge - #x0000004 XIMStringConversionTopEdge - #x0000008 XIMStringConversionBottomEdge - #x0000010 XIMStringConversionConvealed - #x0000020 XIMStringConversionWrapped - 2 n byte length of the retrieved string - n STRING8 retrieved string - p unused, p = Pad(n) - 2 m byte length of feedback array - 2 unused - m LISTofXIMSTRCONVFEEDBACK feedback array(*1) -.IP (*1) -This field is reserved for future use. -.sp -.LP -.nf -.ta .2i .5i 2.0i -XIMFEEDBACK - 4 CARD32 XIMFeedback - #x000001 XIMReverse - #x000002 XIMUnderline - #x000004 XIMHighlight - #x000008 XIMPrimary - #x000010 XIMSecondary - #x000020 XIMTertiary - #x000040 XIMVisibleToForward - #x000080 XIMVisibleToBackward - #x000100 XIMVisibleCenter -.sp -XIMHOTKEYSTATE - 4 CARD32 XIMHotKeyState - #x0000001 XIMHotKeyStateON - #x0000002 XIMHotKeyStateOFF -.sp -XIMPREEDITSTATE - 4 CARD32 XIMPreeditState - #x0000001 XIMPreeditEnable - #x0000002 XIMPreeditDisable -.sp -XIMRESETSTATE - 4 CARD32 XIMResetState - #x0000001 XIMInitialState - #x0000002 XIMPreserveState -.LP -.NH 2 -Error Notification -.XS -\*(SN Error Notification -.XE -.LP -Both the IM Server and the IM library return -.PN XIM_ERROR -messages instead of the corresponding reply messages if any errors occur -during data processing. -.LP -At most one error is generated per request. If more than one error condition -is encountered in processing a request, the choice of which error is returned -is implementation-dependent. -.LP -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_ERROR (IM Server \(<-\(-> IM library) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -:2:BITMASK16:flag (*1) -::#0000:Both Input-Method-ID and Input-Context-ID are invalid -::#0001:Input-Method-ID is valid -::#0002:Input-Context-ID is valid -:2:CARD16:Error Code -::#1:BadAlloc -::#2:BadStyle -::#3:BadClientWindow -::#4:BadFocusWindow -::#5:BadArea -::#6:BadSpotLocation -::#7:BadColormap -::#8:BadAtom -::#9:BadPixel -::#10:BadPixmap -::#11:BadName -::#12:BadCursor -::#13:BadProtocol -::#14:BadForeground -::#15:BadBackground -::#16:LocaleNotSupported -::#999:BadSomething (*2) -:2:n:byte length of error detail. -:2:CARD16:type of error detail (*3) -:n:STRING8:error detail (*4) -:p::unused, p = Pad(n) -.TE -.LP -.IP (*1) -Before an IM is created, both Input-Method-ID and -Input-Context-ID are invalid. -Before an IC is created, only Input-Method-ID is valid. -After that, both of Input-Method-ID and Input-Context-ID are valid. -.IP (*2) -Unspecific error, for example ``language engine died'' -.IP (*3) -This field is reserved for future use. -.IP (*4) -Vendor defined detail error message -.RE -.LP -.NH 2 -Connection Establishment -.XS -\*(SN Connection Establishment -.XE -.LP -.PN XIM_CONNECT -message requests to establish a connection over a mutually-understood virtual -stream. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_CONNECT (IM library \(-> IM Server) -.sp 6p -:1::byte order -::#x42 MSB first -::#x6c LSB first -:1::unused -:2:CARD16:client-major-protocol-version (*1) -:2:CARD16:client-minor-protocol-version (*1) -:2:CARD16:number of client-auth-protocol-names -:n:LISTofSTRING:client-auth-protocol-names -.TE -.LP -.IP (*1) -Specify the version of IM Protocol that the client supports. -.RE -.sp -.LP -A client must send -.PN XIM_CONNECT -message as the first message on the connection. -The list specifies the names of authentication protocols the sending -IM Server is willing to perform. -(If the client need not authenticate, the list may be omited.) -.LP -.PN XIM_AUTH_REQUIRED -message is used to send the authentication protocol name and protocol-specific -data. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_AUTH_REQUIRED (IM library \(<-\(-> IM Server) -.sp 6p -:1:CARD8:auth-protocol-index -:3::unused -:2:n:length of authentication data -:2::unused -:n::data -:p::unused, p = Pad(n) -.TE -.RE -.LP -The auth-protocol is specified by an index into the list of names -given in the -.PN XIM_CONNECT -or -.PN XIM_AUTH_SETUP -message. Any protocol-specific data that might be required is also sent. -.LP -The IM library sends -.PN XIM_AUTH_REPLY -message as the reply to -.PN XIM_AUTH_REQUIRED -message, if the IM Server is authenticated. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_AUTH_REPLY (IM library \(-> IM Server) -.sp 6p -:2:n:length of authentication data -:2::unused -:2:n:length of authentication data -:2::unused -:n::data -:p::unused, p = Pad(n) -.TE -.RE -.LP -The auth data is specific to the authentication protocol in use. -.LP -.PN XIM_AUTH_NEXT -message requests to send more auth data. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_AUTH_NEXT (IM library \(<-\(-> IM Server) -.sp 6p -:2:n:length of authentication data -:2::unused -:n::data -:p::unused, p = Pad(n) -.TE -.RE -.LP -The auth data is specific to the authentication protocol in use. -.LP -The IM Server sends -.PN XIM_AUTH_SETUP -message to authenticate the client. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_AUTH_SETUP (IM Server \(-> IM library) -.sp 6p -:2:CARD16:number of client-auth-protocol-names -:2::unused -:n:LISTofSTRING:server-auth-protocol-names -.TE -.RE -.LP -The list specifies the names of authentication protocols the -client is willing to perform. -.LP -.PN XIM_AUTH_NG -message requests to give up the connection. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_AUTH_NG (IM library \(<-\(-> IM Server) -.TE -.RE -.LP -The IM Server sends -.PN XIM_CONNECT_REPLY -message as the reply to -.PN XIM_CONNECT -or -.PN XIM_AUTH_REQUIRED -message. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_CONNECT_REPLY (IM Server \(-> IM library) -.sp 6p -:2:CARD16:server-major-protocol-version (*1) -:2:CARD16:server-minor-protocol-version (*1) -.TE -.LP -.IP (*1) -Specify the version of IM Protocol that the IM Server supports. -This document specifies major version one, minor version zero. -.RE -.sp -.LP -Here are the state diagrams for the client and the IM Server. -.sp -.B -State transitions for the client -.R -.RS -.LP -\fIinit_status\fP: -.RS -Use authorization function \(-> \fIclient_ask\fP -.br -Not use authorization function \(-> \fIclient_no_check\fP -.RE -.sp -.LP -\fIstart\fP: -.RS -Send -.PN XIM_CONNECT -.RS -If \fIclient_ask\fP \(-> \fIclient_wait1\fP -.br -If \fIclient_no_check\fP, client-auth-protocol-names may be omited \(-> \fIclient_wait2\fP -.RE -.RE -.sp -.LP -\fIclient_wait1\fP: -.RS -Receive -.PN XIM_AUTH_REQUIRED -\(-> \fIclient_check\fP -.br -Receive \(-> \fIclient_NG\fP -.RE -.sp -.LP -\fIclient_check\fP: -.RS -If no more auth needed, send -.PN XIM_AUTH_REPLY -\(-> \fIclient_wait2\fP -.br -If good auth data, send -.PN XIM_AUTH_NEXT -\(-> \fIclient_wait1\fP -.br -If bad auth data, send -.PN XIM_AUTH_NG -\(-> give up on this protocol -.RE -.sp -.LP -\fIclient_wait2\fP: -.RS -Receive -.PN XIM_CONNECT_REPLY -\(-> connect -.br -Receive -.PN XIM_AUTH_SETUP -\(-> \fIclient_more\fP -.br -Receive -.PN XIM_AUTH_NEXT -\(-> \fIclient_more\fP -.br -Receive -.PN XIM_AUTH_NG -\(-> give up on this protocol -.br -Receive \(-> \fIclient_NG\fP -.RE -.sp -.LP -\fIclient_more\fP: -.RS -Send -.PN XIM_AUTH_REQUIRED -\(-> \fIclient_wait2\fP -.RE -.sp -.LP -\fIclient_NG\fP: -.RS -Send -.PN XIM_AUTH_NG -\(-> give up on this protocol -.RE -.RE -.sp -.LP -.B -State transitions for the IM Server -.R -.RS -.LP -\fIinit-status\fP: -.RS -Use authorization function \(-> \fIserver_ask\fP -.br -Not use authorization function \(-> \fIserver_no_check\fP -.RE -.sp -.LP -\fIstart\fP: -.RS -Receive -.PN XIM_CONNECT -\(-> \fIstart2\fP -.br -Receive \(-> \fIserver_NG\fP -.RE -.sp -.LP -\fIstart2\fP: -.RS -If \fIclient_ask\fP, send -.PN XIM_AUTH_REQUIRED -\(-> \fIserver_wait1\fP -.br -If \fIclient_no_check\fP and \fIserver_ask\fP, send -.PN XIM_AUTH_SETUP -\(-> \fIserver_wait2\fP -.br -If \fIclient_no_check\fP and \fIserver_no_check\fP, send -.PN XIM_CONNECT_REPLY -\(-> connect -.RE -.sp -.LP -\fIserver_wait1\fP: -.RS -Receive -.PN XIM_AUTH_REPLY -\(-> \fIserver2\fP -.br -Receive -.PN XIM_AUTH_NEXT -\(-> \fIserver_more\fP -.br -Receive \(-> \fIserver_NG\fP -.RE -.sp -.LP -\fIserver_more\fP -.RS -Send -.PN XIM_AUTH_REQUIRED -\(-> \fIserver_wait1\fP -.RE -.sp -.LP -\fIserver2\fP -.RS -If \fIserver_ask\fP, send -.PN XIM_AUTH_SETUP -\(-> \fIserver_wait2\fP -.br -If \fIserver_no_check\fP, send -.PN XIM_CONNECT_REPLY -\(-> connect -.RE -.sp -.LP -\fIserver_wait2\fP -.RS -Receive -.PN XIM_AUTH_REQUIRED -\(-> \fIserver_check\fP -.br -Receive \(-> \fIserver_NG\fP -.RE -.sp -.LP -\fIserver_check\fP -.RS -If no more auth data, send -.PN XIM_CONNECT_REPLY -\(-> connect -.br -If bad auth data, send -.PN XIM_AUTH_NG -\(-> give up on this protocol -.br -If good auth data, send -.PN XIM_AUTH_NEXT -\(-> \fIserver_wait2\fP -.RE -.sp -.LP -\fIserver_NG\fP -.RS -Send -.PN XIM_AUTH_NG -\(-> give up on this protocol -.RE -.RE -.sp -.LP -.PN XIM_DISCONNECT -message requests to shutdown the connection over a mutually-understood -virtual stream. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_DISCONNECT (IM library \(-> IM Server) -.TE -.RE -.LP -.PN XIM_DISCONNECT -is a synchronous request. The IM library should wait until it receives -either an -.PN XIM_DISCONNECT_REPLY -packet or an -.PN XIM_ERROR -packet. -.LP -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_DISCONNECT_REPLY (IM Server \(-> IM library) -.TE -.RE -.LP -.PN XIM_OPEN -requests to establish a logical connection between the IM library and the IM -Server. -.LP -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_OPEN (IM library \(-> IM Server) -.sp 6p -:n:STR:locale name -:p::unused, p = Pad(n) -.TE -.RE -.LP -.PN XIM_OPEN -is a synchronous request. The IM library should wait until receiving -either an -.PN XIM_OPEN_REPLY -packet or an -.PN XIM_ERROR -packet. -.LP -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_OPEN_REPLY (IM Server \(-> IM library) -.sp 6p -:2:CARD16:input-method-ID -:2:n:byte length of IM attributes supported -:n:LISTofXIMATTR:IM attributes supported -:2:m:byte length of IC attributes supported -:2:CARD16:unused -:m:LISTofXICATTR: IC attributes supported -.TE -.RE -.LP -.PN XIM_OPEN_REPLY -message returns all supported IM and IC attributes in LISTofXIMATTR and -LISTofXICATTR. These IM and IC attribute IDs are used to reduce the amount -of data which must be transferred via the network. In addition, this -indicates to the IM library what kinds of IM/IC attributes can be used -in this session, and what types of data will be exchanged. This allows -the IM Server provider and application writer to support IM system -enhancements with new IM/IC attributes, without modifying Xlib. -The IC value for the separator of NestedList must be included in the -LISTofXICATTR. -.LP -.PN XIM_CLOSE -message requests to shutdown the logical connection between the IM library -and the IM Server. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_CLOSE (IM library \(-> IM Server) -.sp 6p -:2:CARD16:input-method-ID -:2::unused -.TE -.RE -.LP -.PN XIM_CLOSE -is a synchronous request. The IM library should wait until receiving -either an -.PN XIM_CLOSE_REPLY -packet or an -.PN XIM_ERROR -packet. -.LP -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_CLOSE_REPLY (IM Server \(-> IM library) -.sp 6p -:2:CARD16:input-method-ID -:2::unused -.TE -.RE -.LP -.NH 2 -Event Flow Control -.XS -\*(SN Event Flow Control -.XE -.LP -An IM Server must send -.PN XIM_SET_EVENT_MASK -message to the IM library in order for events to be forwarded to the IM -Server, since the IM library initially doesn't forward any events to the -IM Server. In the protocol, the IM Server will specify masks of X events -to be forwarded and which need to be synchronized by the IM library. -.LP -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_SET_EVENT_MASK (IM Server \(-> IM library) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -:4:EVENTMASK:forward-event-mask (*1) -:4:EVENTMASK:synchronous-event-mask (*2) -.TE -.LP -.IP (*1) -Specify all the events to be forwarded to the IM Server by the IM library. -.IP (*2) -Specify the events to be forwarded with synchronous flag on by the IM library. -.RE -.sp -.LP -.PN XIM_SET_EVENT_MASK -is an asynchronous request. The event masks are valid immediately after -they are set until changed by another -.PN XIM_SET_EVENT_MASK -message. If input-context-ID is set to zero, the default value of the -input-method-ID will be changed to the event masks specified in the request. -That value will be used for the IC's which have no individual values. -.LP -Using the Dynamic Event Flow model, an IM Server sends -.PN XIM_REGISTER_TRIGGERKEYS -message to the IM library before sending -.PN XIM_OPEN_REPLY -message. -Or the IM library may suppose that the IM Server uses the Static Event Flow -model. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_REGISTER_TRIGGERKEYS (IM Server \(-> IM library) -.sp 6p -:2:CARD16:input-method-ID -:2::unused -:4:n:byte length of on-keys -:n:LISTofXIMTRIGGERKEY:on-keys list -:4:m:byte length of off-keys -:m:LISTofXIMTRIGGERKEY:off-keys list -.TE -.RE -.LP -.PN XIM_REGISTER_TRIGGERKEYS -is an asynchronous request. -The IM Server notifys the IM library of on-keys and off-keys lists with -this message. -.LP -The IM library notifys the IM Server with -.PN XIM_TRIGGER_NOTIFY -message that a key event matching either on-keys or off-keys has been occurred. -.LP -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_TRIGGER_NOTIFY (IM library \(-> IM Server) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -:4:CARD32:flag -::#0:on-keys list -::#1:off-keys list -:4:CARD32:index of keys list -:4:EVENTMASK:client-select-event-mask (*1) -.TE -.LP -.IP (*1) -Specify the events currently selected by the IM library with XSelectInput. -.RE -.sp -.LP -.PN XIM_TRIGGER_NOTIFY -is a synchronous request. The IM library should wait until receiving -either an -.PN XIM_TRIGGER_NOTIFY_REPLY -packet or an -.PN XIM_ERROR -packet. -.LP -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_TRIGGER_NOTIFY_REPLY (IM Server \(-> IM library) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -.TE -.RE -.LP -.NH 2 -Encoding Negotiation -.XS -\*(SN Encoding Negotiation -.XE -.LP -.PN XIM_ENCODING_NEGOTIATION -message requests to decide which encoding to be sent across the wire. -When the negotiation fails, the fallback default encoding is Portable -Character Encoding. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_ENCODING_NEGOTIATION (IM library \(-> IM Server).sp 6p -:2:CARD16:input-method-ID -:2:n:byte length of encodings listed by name -:n:LISTofSTR:list of encodings supported in the IM library. -:p::unused, p = Pad(n) -:2:m:byte length of encodings listed by detailed data -:2::unused -:m:LISTofENCODINGINFO:list of encordings supported in the IM library -.TE -.RE -.LP -The IM Server must choose one encoding from the list sent by the IM library. -If index of the encording determined is -1 to indicate that the negotiation -is failed, the fallback default encoding is used. -The message must be issued after sending -.PN XIM_OPEN -message via XOpenIM(). -The name of encoding may be registered with X Consortium. -.LP -.PN XIM_ENCODING_NEGOTIATION -is a synchronous request. The IM library should wait until receiving -either an -.PN XIM_ENCODING_NEGOTIATION_REPLY -packet or an -.PN XIM_ERROR -packet. -.LP -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_ENCODING_NEGOTIATION_REPLY (IM Server \(-> IM library) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:category of the encoding determined. -::#0:name -::#1:detailed data -:2:INT16:index of the encoding determinated. -:2::unused -.TE -.RE -.LP -.NH 2 -Query the supported extension protocol list -.XS -\*(SN Query the supported extension protocol list -.XE -.LP -.PN XIM_QUERY_EXTENSION -message requests to query the IM extensions supported by the IM Server to -which the client is being connected. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_QUERY_EXTENSION (IM library \(-> IM Server) -.sp 6p -:2:CARD16:input-method-ID -:2:n:T{ -byte length of extensions supported by the IM library -T} -:n:LISTofSTR:extensions supported by the IM library -:p::unused, p = Pad(n) -.TE -.RE -.LP -An example of a supported extension is FrontEnd. -The message must be issued after sending -.PN XIM_OPEN -message via XOpenIM(). -.LP -If n is 0, the IM library queries the IM Server for all extensions. -.LP -If n is not 0, the IM library queries whether the IM Server supports the -contents specified in the list. -.LP -If a client uses an extension request without previously having issued a -.PN XIM_QUERY_EXTENSION -message for that extension, the IM Server responds with a -.PN BadProtocol -error. If the IM Server encounters a request with an unknown MAJOR-OPCODE -or MINOR-OPCODE, it responds with a -.PN BadProtocol -error. -.LP -.PN XIM_QUERY_EXTENSION -is a synchronous request. The IM library should wait until receiving -either an -.PN XIM_QUERY_EXTENSION_REPLY -packet or an -.PN XIM_ERROR -packet. -.LP -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_QUERY_EXTENSION_REPLY (IM Server \(-> IM library) -.sp 6p -:2:CARD16:input-method-ID -:2:n:T{ -byte length of extensions supported by both the IM library and the IM Server -T} -:n:LISTofEXT:T{ -list of extensions supported by both the IM library and the IM Server -T} -.TE -.RE -.LP -.PN XIM_QUERY_EXTENSION_REPLY -message returns the list of extensions supported by both the IM library and -the IM Server. If the list passed in -.PN XIM_QUERY_EXTENSION -message is NULL, the IM Server returns the full list of extensions supported -by the IM Server. If the list is not NULL, the IM Server returns the -extensions in the list that are supported by the IM Server. -.LP -A zero-length string is not a valid extension name. The IM library should -disregard any zero-length strings that are returned in the extension list. -The IM library does not use the requests which are not supported by the IM -Server. -.LP -.NH 2 -Setting IM Values -.XS -\*(SN Setting IM Values -.XE -.LP -.PN XIM_SET_IM_VALUES -requests to set attributes to the IM. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_SET_IM_VALUES (IM library \(-> IM Server) -.sp 6p -:2:CARD16:input-method-ID -:2:n:byte length of im-attribute -:n:LISTofXIMATTRIBUTE:im-attributes -.TE -.RE -.LP -The im-attributes in -.PN XIM_SET_IM_VALUES -message are specified as a LISTofXIMATTRIBUTE, specifying the attributes -to be set. Attributes other than the ones returned by -.PN XIM_OPEN_REPLY -message should not be specified. -.LP -.PN XIM_SET_IM_VALUES -is a synchronous request. The IM library should wait until receiving -either an -.PN XIM_SET_IM_VALUES_REPLY -packet or an -.PN XIM_ERROR -packet, because it must receive the error attribute if -.PN XIM_ERROR -message is returned. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_SET_IM_VALUES_REPLY (IM Server \(-> IM library) -.sp 6p -:2:CARD16:input-method-ID -:2::unused -.TE -.RE -.LP -.PN XIM_SET_IM_VALUES_REPLY -message returns the input-method-ID to distinguish replies from multiple IMs. -.LP -.NH 2 -Getting IM Values -.XS -\*(SN getting IM Values -.XE -.LP -.PN XIM_GET_IM_VALUES -requests to query IM values supported by the IM Server currently being -connected. -.LP -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_GET_IM_VALUES (IM library \(-> IM Server) -.sp 6p -:2:CARD16:input-method-ID -:2:n:byte length of im-attribute-id -:n:LISTofCARD16:im-attribute-id -:p::unused, p=Pad(n) -.TE -.RE -.LP -.PN XIM_GET_IM_VALUES -is a synchronous request. The IM library should wait until it receives -either an -.PN XIM_GET_IM_VALUES_REPLY -packet or an -.PN XIM_ERROR -packet. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_GET_IM_VALUES_REPLY (IM Server \(-> IM library) -.sp 6p -:2:CARD16:input-method-ID -:2:n:byte length of im-attributes returned -:n:LISTofXIMATTRIBUTE:im-attributes returned -.TE -.RE -.LP -The IM Server returns IM values with -.PN XIM_GET_IM_VALUES_REPLY -message. The order of the returned im-attribute values corresponds directly -to that of the list passed with the -.PN XIM_GET_IM_VALUES -message. -.LP -.NH 2 -Creating an IC -.XS -\*(SN Creating an IC -.XE -.LP -.PN XIM_CREATE_IC -message requests to create an IC. -.LP -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_CREATE_IC (IM library \(-> IM Server) -.sp 6p -:2:CARD16:input-method-ID -:2:n:byte length of ic-attributes -:n:LISTofXICATTRIBUTE:ic-attributes -.TE -.RE -.LP -The input-context-id is specified by the IM Server to identify the client -(IC). (It is not specified by the client in -.PN XIM_CREATE_IC -message.), and it should not be set to zero. -.LP -.PN XIM_CREATE_IC -is a synchronous request which returns the input-context-ID. -The IM library should wait until it receives either an -.PN XIM_CREATE_IC_REPLY -packet or an -.PN XIM_ERROR -packet. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_CREATE_IC_REPLY (IM Server \(-> IM library) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -.TE -.RE -.LP -.NH 2 -Destroying the IC -.XS -\*(SN Destroying the IC -.XE -.LP -.PN XIM_DESTROY_IC -message requests to destroy the IC. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_DESTROY_IC (IM library \(-> IM Server) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -.TE -.RE -.LP -.PN XIM_DESTROY_IC -is a synchronous request. The IM library should not free its resources -until it receives an -.PN XIM_DESTROY_IC_REPLY -message because -.PN XIM_DESTROY_IC -message may result in Callback packets such as -.PN XIM_PREEDIT_DRAW -and -.PN XIM_PREEDIT_DONE. -.LP -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_DESTROY_IC_REPLY (IM Server \(-> IM library) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -.TE -.RE -.LP -.NH 2 -Setting IC Values -.XS -\*(SN Setting IC Values -.XE -.LP -.PN XIM_SET_IC_VALUES -messages requests to set attributes to the IC. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_SET_IC_VALUES (IM library \(-> IM Server) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -:2:n:byte length of ic-attributes -:2::unused -:n:LISTofXICATTRIBUTE:ic-attributes -.TE -.RE -.LP -The ic-attributes in -.PN XIM_SET_IC_VALUES -message are specified as a LISTofXICATTRIBUTE, specifying the attributes -to be set. Attributes other than the ones returned by -.PN XIM_OPEN_REPLY -message should not be specified. -.LP -.PN XIM_SET_IC_VALUES -is a synchronous request. The IM library should wait until receiving -either an -.PN XIM_SET_IC_VALUES_REPLY -packet or an -.PN XIM_ERROR -packet, because it must receive the error attribute if -.PN XIM_ERROR -message is returned. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_SET_IC_VALUES_REPLY (IM Server \(-> IM library) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -.TE -.RE -.LP -.NH 2 -Getting IC Values -.XS -\*(SN Getting IC Values -.XE -.LP -.PN XIM_GET_IC_VALUES -message requests to query IC values supported by the IM Server currently -being connected. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_GET_IC_VALUES (IM library \(-> IM Server) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -:2:n:byte length of ic-attribute-id -:n:LISTofCARD16:ic-attribute-id -:p::unused, p=Pad(2+n) -.TE -.RE -.LP -In LISTofCARD16, the appearance of the ic-attribute-id for the separator -of NestedList shows the end of the heading nested list. -.LP -.PN XIM_GET_IC_VALUES -is a synchronous request and returns each attribute with its values to -show the correspondence. The IM library should wait until receiving -either an -.PN XIM_GET_IC_VALUES_REPLY -packet or an -.PN XIM_ERROR -packet. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_GET_IC_VALUES_REPLY (IM Server \(-> IM library) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -:2:n:byte length of ic-attribute -:2::unused -:n:LISTofXICATTRIBUTE:ic-attribute -.TE -.RE -.LP -.NH 2 -Setting IC Focus -.XS -\*(SN Setting IC Focus -.XE -.LP -.PN XIM_SET_IC_FOCUS -message requests to set the focus to the IC. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_SET_IC_FOCUS (IM library \(-> IM Server) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -.TE -.RE -.LP -.PN XIM_SET_IC_FOCUS -is an asynchronous request. -.LP -.NH 2 -Unsetting IC Focus -.XS -\*(SN Unsetting IC Focus -.XE -.LP -.PN XIM_UNSET_IC_FOCUS -message requests to unset the focus to the focused IC. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_UNSET_IC_FOCUS (IM library \(-> IM Server) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -.TE -.RE -.LP -.PN XIM_UNSET_IC_FOCUS -is an asynchronous request. -.LP -.NH 2 -Filtering Events -.XS -\*(SN Filtering Events -.XE -.LP -Event filtering is mainly provided for BackEnd method to allow input method -to capture X events transparently to clients. -.LP -X Events are forwarded by -.PN XIM_FORWARD_EVENT -message. -This message can be operated both synchronously and asynchronously. -If the requester sets the synchronous flag, the receiver must send -.PN XIM_SYNC_REPLY -message back to the requester when all the data processing is done. -.sp -.B -Protocol flow of BackEnd model -.R -.LP -.LP -With BackEnd method, the protocol flow can be classified into two -methods in terms of synchronization, depending on the synchronous-eventmask -of -.PN XIM_SET_EVENT_MASK -message. One can be called on-demand-synchronous method and another -can be called as full-synchronous method. -.LP -In on-demand-synchronous method, the IM library always receives -.PN XIM_FORWARD_EVENT -or -.PN XIM_COMMIT -message as a synchronous request. Also, the IM Server needs to synchronously -process the correspondent reply from the IM library and the following -.PN XIM_FORWARD_EVENT -message sent from the IM library when any of the event causes the IM Server -to send -.PN XIM_FORWARD_EVENT -or -.PN XIM_COMMIT -message to the IM library, so that the input service is consistent. If the -IM library gets the control back from the application after receiving the -synchronous request, the IM library replies for the synchronous request before -processing any of the events. In this time, the IM Server blocks -.PN XIM_FORWARD_EVENT -message which is sent by the IM library, and handles it after receiving the -reply. However, the IM Server handles the other protocols at any time. -.LP -In full-synchronous method, the IM library always sends -.PN XIM_FORWARD_EVENT -message to the IM Server as a synchronous request. Therefore, the reply to it -from the IM Server will be put between the -.PN XIM_FORWARD_EVENT -message and its -.PN XIM_SYNC_REPLY -message. -In case of sending -.PN XIM_FORWARD_EVENT -or -.PN XIM_COMMIT -message, the IM Server should set the synchronous flag off. Because the -synchronization can be done by the following -.PN XIM_SYNC_REPLY -message. -.sp -.LP -.B -Sample Protocol flow chart 1 -.R -.LP -Following chart shows one of the simplest protocol flow which only -deals with keyevents for preediting operation. -.LP -.\"====================== event flow figure start ===================== -\^... 0.425 6.888 6.3 10.296 -\^... 0.000i 3.408i 5.875i 0.000i -.nr 00 \n(.u -.nf -.PS 3.408i 5.875i -.br -.ps 11 -\h'3.125i'\v'0.496i'\D'l1.625i 0.250i' -.sp -1 -\h'4.647i'\v'0.756i'\D'l0.103i -0.010i' -.sp -1 -\h'4.655i'\v'0.706i'\D'l0.095i 0.040i' -.sp -1 -\h'3.125i'\v'1.221i'\D'l1.687i 0.188i' -.sp -1 -\h'4.710i'\v'1.423i'\D'l0.102i -0.014i' -.sp -1 -\h'4.715i'\v'1.373i'\D'l0.097i 0.036i' -.sp -1 -\h'4.750i'\v'0.971i'\D'l-1.625i 0.438i' -.sp -1 -\h'3.215i'\v'1.359i'\D'l-0.090i 0.050i' -.sp -1 -\h'3.228i'\v'1.407i'\D'l-0.103i 0.002i' -.sp -1 -\h'2.000i'\v'0.409i'\D'l1.000i 0.062i' -.sp -1 -\h'2.899i'\v'0.490i'\D'l0.101i -0.019i' -.sp -1 -\h'2.902i'\v'0.440i'\D'l0.098i 0.031i' -.sp -1 -\h'2.000i'\v'1.034i'\D'l1.000i 0.125i' -.sp -1 -\h'2.898i'\v'1.171i'\D'l0.102i -0.012i' -.sp -1 -\h'2.904i'\v'1.122i'\D'l0.096i 0.037i' -.sp -1 -\h'3.000i'\v'1.409i'\D'l-1.000i 0.062i' -.sp -1 -\h'2.098i'\v'1.440i'\D'l-0.098i 0.031i' -.sp -1 -\h'2.101i'\v'1.490i'\D'l-0.101i -0.019i' -.sp -1 -\h'1.125i'\v'1.846i'\l'-0.500i' -.sp -1 -\h'0.725i'\v'1.821i'\D'l-0.100i 0.025i' -.sp -1 -\h'0.725i'\v'1.871i'\D'l-0.100i -0.025i' -.sp -1 -\h'0.688i'\v'0.159i'\l'0.437i' -.sp -1 -\h'1.025i'\v'0.184i'\D'l0.100i -0.025i' -.sp -1 -\h'1.025i'\v'0.134i'\D'l0.100i 0.025i' -.sp -1 -\h'0.688i'\v'0.846i'\l'0.437i' -.sp -1 -\h'1.025i'\v'0.871i'\D'l0.100i -0.025i' -.sp -1 -\h'1.025i'\v'0.821i'\D'l0.100i 0.025i' -.sp -1 -\h'5.562i'\v'1.409i'\l'0.313i' -.sp -1 -\h'5.875i'\v'1.409i'\v'-.13m'\L'1.937i\(br'\v'.13m' -.sp -1 -\h'5.875i'\v'3.346i'\D'l-0.250i 0.000i' -.sp -1 -\h'5.725i'\v'3.321i'\D'l-0.100i 0.025i' -.sp -1 -\h'5.725i'\v'3.371i'\D'l-0.100i -0.025i' -.sp -1 -\h'2.062i'\v'2.096i'\l'0.875i' -.sp -1 -\h'2.837i'\v'2.121i'\D'l0.100i -0.025i' -.sp -1 -\h'2.837i'\v'2.071i'\D'l0.100i 0.025i' -.sp -1 -\h'3.000i'\v'0.034i'\v'-.13m'\L'3.374i\(br'\v'.13m' -.sp -1 -\h'4.875i'\v'0.034i'\v'-.13m'\L'3.374i\(br'\v'.13m' -.sp -1 -\h'2.013i'\v'2.871i'\D'l0.937i 0.250i' -.sp -1 -\h'2.847i'\v'3.119i'\D'l0.103i 0.002i' -.sp -1 -\h'2.860i'\v'3.071i'\D'l0.090i 0.050i' -.sp -1 -\h'3.062i'\v'3.134i'\D'l1.688i 0.187i' -.sp -1 -\h'4.648i'\v'3.335i'\D'l0.102i -0.014i' -.sp -1 -\h'4.653i'\v'3.285i'\D'l0.097i 0.036i' -.sp -1 -\h'3.062i'\v'2.533i'\D'l1.750i 0.213i' -.sp -1 -\h'4.710i'\v'2.759i'\D'l0.102i -0.013i' -.sp -1 -\h'4.716i'\v'2.709i'\D'l0.096i 0.037i' -.sp -1 -\h'3.062i'\v'2.096i'\l'1.750i' -.sp -1 -\h'4.712i'\v'2.121i'\D'l0.100i -0.025i' -.sp -1 -\h'4.712i'\v'2.071i'\D'l0.100i 0.025i' -.sp -1 -\h'4.812i'\v'2.284i'\l'-1.750i' -.sp -1 -\h'3.162i'\v'2.259i'\D'l-0.100i 0.025i' -.sp -1 -\h'3.162i'\v'2.309i'\D'l-0.100i -0.025i' -.sp -1 -\h'1.250i'\v'0.193i'\h'-0.0m'\v'0.2m'\s10\fRXNextEvent\fP -.sp -1 -\h'1.250i'\v'0.381i'\h'-0.0m'\v'0.2m'\s10\fRXFilterEvent\fP -.sp -1 -\h'1.250i'\v'0.881i'\h'-0.0m'\v'0.2m'\s10\fRXNextEvent\fP -.sp -1 -\h'1.250i'\v'1.068i'\h'-0.0m'\v'0.2m'\s10\fRXFilterEvent\fP -.sp -1 -\h'1.250i'\v'1.506i'\h'-0.0m'\v'0.2m'\s10\fRXNextEvent\fP -.sp -1 -\h'1.250i'\v'1.881i'\h'-0.0m'\v'0.2m'\s10\fRXmbLookupString\fP -.sp -1 -\h'4.875i'\h'-0.0m'\v'0.2m'\s12\fRIM Server\fP -.sp -1 -\h'2.437i'\h'-0.0m'\v'0.2m'\s12\fRIM library\fP -.sp -1 -\h'1.250i'\v'1.693i'\h'-0.0m'\v'0.2m'\s10\fRXFilterEvent (returns False) \fP -.sp -1 -\v'2.168i'\h'-0.0m'\v'0.2m'\s10\fRthe focus\fP -.sp -1 -\h'1.250i'\h'-0.0m'\v'0.2m'\s12\fRXlib API\fP -.sp -1 -\v'2.006i'\h'-0.0m'\v'0.2m'\s10\fRApplication moves\fP -.sp -1 -\h'3.187i'\v'0.443i'\h'-0.0m'\v'0.2m'\s10\fRXIM_FORWARD_EVENT\fP -.sp -1 -\h'3.187i'\v'0.881i'\h'-0.0m'\v'0.2m'\s10\fRXIM_FORWARD_EVENT\fP -.sp -1 -\h'3.187i'\v'1.631i'\h'-0.0m'\v'0.2m'\s10\fRXIM_FORWARD_EVENT\fP -.sp -1 -\h'3.187i'\v'1.006i'\h'-0.0m'\v'0.2m'\s10\fRor XIM_COMMIT\fP -.sp -1 -\h'5.000i'\v'0.881i'\h'-0.0m'\v'0.2m'\s10\fRsynchronous \fP -.sp -1 -\h'5.000i'\v'1.006i'\h'-0.0m'\v'0.2m'\s10\fRrequest\fP -.sp -1 -\h'0.062i'\v'0.193i'\h'-0.0m'\v'0.2m'\s10\fRKey event\fP -.sp -1 -\h'0.062i'\v'0.881i'\h'-0.0m'\v'0.2m'\s10\fRKey event\fP -.sp -1 -\h'3.187i'\v'1.131i'\h'-0.0m'\v'0.2m'\s10\fR(synchronous) \fP -.sp -1 -\h'5.000i'\v'1.443i'\h'-0.0m'\v'0.2m'\s10\fRPending\fP -.sp -1 -\h'5.000i'\v'2.381i'\h'-0.0m'\v'0.2m'\s10\fRprocessed\fP -.sp -1 -\h'5.000i'\v'2.506i'\h'-0.0m'\v'0.2m'\s10\fR(The focused\fP -.sp -1 -\h'5.000i'\v'2.631i'\h'-0.0m'\v'0.2m'\s10\fRIC is changed) \fP -.sp -1 -\h'5.000i'\v'2.881i'\h'-0.0m'\v'0.2m'\s10\fRprocessed\fP -.sp -1 -\h'1.250i'\v'2.131i'\h'-0.0m'\v'0.2m'\s10\fRXSetICFocus\fP -.sp -1 -\h'3.125i'\v'2.881i'\h'-0.0m'\v'0.2m'\s10\fRXIM_SYNC_REPLY as a reply\fP -.sp -1 -\h'3.125i'\v'3.043i'\h'-0.0m'\v'0.2m'\s10\fRof the XIM_FORWARD_EVENT\fP -.sp -1 -\h'1.250i'\v'2.881i'\h'-0.0m'\v'0.2m'\s10\fRXNextEvent\fP -.sp -1 -\h'3.312i'\v'2.506i'\h'-0.0m'\v'0.2m'\s10\fRXIM_SET_IC_FOCUS\fP -.sp -1 -\h'3.312i'\v'2.006i'\h'-0.0m'\v'0.2m'\s10\fRXIM_SYNC\fP -.sp -1 -\h'3.312i'\v'2.193i'\h'-0.0m'\v'0.2m'\s10\fRXIM_SYNC_REPLY\fP -.sp -1 -\h'5.000i'\v'3.381i'\h'-0.0m'\v'0.2m'\s10\fRprocessed\fP -.sp -1 -.sp 1+3.408i -.PE -.if \n(00 .fi - -.\"====================== event flow figure end ======================= -.ce -.sp -Fig.2 Sample Protocol Flow -.sp -.LP -.B -Sample Protocol flow chart 2 -.R -.LP -Following chart shows one of the complex protocol flow, which deals -with multiple focus windows and button press event as well as keyevent, -and the focus is moved by the application triggered by both of keyevent -and button press event. -.LP -.bp -.\"====================== event2 flow figure start ===================== -\^... 0.425 5.575 6.3 10.296 -\^... 0.000i 4.721i 5.875i 0.000i -.nr 00 \n(.u -.nf -.PS 4.721i 5.875i -.br -.ps 11 -\h'3.125i'\v'0.496i'\D'l1.625i 0.163i' -.sp -1 -\h'4.648i'\v'0.674i'\D'l0.102i -0.015i' -.sp -1 -\h'4.653i'\v'0.624i'\D'l0.097i 0.035i' -.sp -1 -\h'2.000i'\v'0.409i'\D'l1.000i 0.062i' -.sp -1 -\h'2.899i'\v'0.490i'\D'l0.101i -0.019i' -.sp -1 -\h'2.902i'\v'0.440i'\D'l0.098i 0.031i' -.sp -1 -\h'0.688i'\v'0.159i'\l'0.437i' -.sp -1 -\h'1.025i'\v'0.184i'\D'l0.100i -0.025i' -.sp -1 -\h'1.025i'\v'0.134i'\D'l0.100i 0.025i' -.sp -1 -\h'1.250i'\v'0.193i'\h'-0.0m'\v'0.2m'\s10\fRXNextEvent\fP -.sp -1 -\h'1.250i'\v'0.381i'\h'-0.0m'\v'0.2m'\s10\fRXFilterEvent\fP -.sp -1 -\h'3.187i'\v'0.443i'\h'-0.0m'\v'0.2m'\s10\fRXIM_FORWARD_EVENT\fP -.sp -1 -\h'0.062i'\v'0.193i'\h'-0.0m'\v'0.2m'\s10\fRKey event\fP -.sp -1 -\h'3.125i'\v'1.221i'\D'l1.687i 0.125i' -.sp -1 -\h'4.710i'\v'1.364i'\D'l0.102i -0.018i' -.sp -1 -\h'4.714i'\v'1.314i'\D'l0.098i 0.032i' -.sp -1 -\h'4.750i'\v'0.971i'\D'l-1.625i 0.750i' -.sp -1 -\h'3.205i'\v'1.656i'\D'l-0.080i 0.065i' -.sp -1 -\h'3.226i'\v'1.702i'\D'l-0.101i 0.019i' -.sp -1 -\h'2.000i'\v'1.034i'\D'l1.000i 0.125i' -.sp -1 -\h'2.898i'\v'1.171i'\D'l0.102i -0.012i' -.sp -1 -\h'2.904i'\v'1.122i'\D'l0.096i 0.037i' -.sp -1 -\h'0.688i'\v'0.846i'\l'0.437i' -.sp -1 -\h'1.025i'\v'0.871i'\D'l0.100i -0.025i' -.sp -1 -\h'1.025i'\v'0.821i'\D'l0.100i 0.025i' -.sp -1 -\h'3.000i'\v'0.034i'\v'-.13m'\L'4.687i\(br'\v'.13m' -.sp -1 -\h'0.750i'\v'1.346i'\l'0.313i' -.sp -1 -\h'0.963i'\v'1.371i'\D'l0.100i -0.025i' -.sp -1 -\h'0.963i'\v'1.321i'\D'l0.100i 0.025i' -.sp -1 -\h'3.125i'\v'1.509i'\D'l1.687i 0.125i' -.sp -1 -\h'4.710i'\v'1.652i'\D'l0.102i -0.018i' -.sp -1 -\h'4.714i'\v'1.602i'\D'l0.098i 0.032i' -.sp -1 -\h'4.812i'\v'1.721i'\D'l-1.687i 0.188i' -.sp -1 -\h'3.222i'\v'1.873i'\D'l-0.097i 0.036i' -.sp -1 -\h'3.227i'\v'1.923i'\D'l-0.102i -0.014i' -.sp -1 -\h'2.937i'\v'1.971i'\D'l-0.937i 0.188i' -.sp -1 -\h'2.093i'\v'2.115i'\D'l-0.093i 0.044i' -.sp -1 -\h'2.103i'\v'2.164i'\D'l-0.103i -0.005i' -.sp -1 -\h'1.125i'\v'2.533i'\l'-0.500i' -.sp -1 -\h'0.725i'\v'2.508i'\D'l-0.100i 0.025i' -.sp -1 -\h'0.725i'\v'2.558i'\D'l-0.100i -0.025i' -.sp -1 -\h'5.562i'\v'1.346i'\l'0.313i' -.sp -1 -\h'5.875i'\v'1.346i'\v'-.13m'\L'2.687i\(br'\v'.13m' -.sp -1 -\h'5.875i'\v'4.033i'\D'l-0.250i 0.000i' -.sp -1 -\h'5.725i'\v'4.008i'\D'l-0.100i 0.025i' -.sp -1 -\h'5.725i'\v'4.058i'\D'l-0.100i -0.025i' -.sp -1 -\h'2.013i'\v'3.559i'\D'l0.937i 0.250i' -.sp -1 -\h'2.847i'\v'3.807i'\D'l0.103i 0.002i' -.sp -1 -\h'2.860i'\v'3.759i'\D'l0.090i 0.050i' -.sp -1 -\h'3.062i'\v'3.821i'\D'l1.688i 0.188i' -.sp -1 -\h'4.648i'\v'4.023i'\D'l0.102i -0.014i' -.sp -1 -\h'4.653i'\v'3.973i'\D'l0.097i 0.036i' -.sp -1 -\h'2.000i'\v'1.358i'\D'l1.000i 0.126i' -.sp -1 -\h'2.898i'\v'1.496i'\D'l0.102i -0.012i' -.sp -1 -\h'2.904i'\v'1.447i'\D'l0.096i 0.037i' -.sp -1 -\h'3.062i'\v'2.159i'\D'l-0.250i 0.000i' -.sp -1 -\h'2.812i'\v'2.159i'\v'-.13m'\L'1.812i\(br'\v'.13m' -.sp -1 -\h'2.812i'\v'3.971i'\D'l0.125i 0.125i' -.sp -1 -\h'2.849i'\v'4.043i'\D'l0.088i 0.053i' -.sp -1 -\h'2.884i'\v'4.008i'\D'l0.053i 0.088i' -.sp -1 -\h'2.062i'\v'2.783i'\l'0.875i' -.sp -1 -\h'2.837i'\v'2.808i'\D'l0.100i -0.025i' -.sp -1 -\h'2.837i'\v'2.758i'\D'l0.100i 0.025i' -.sp -1 -\h'2.062i'\v'3.783i'\D'l0.813i 0.438i' -.sp -1 -\h'2.775i'\v'4.196i'\D'l0.100i 0.025i' -.sp -1 -\h'2.799i'\v'4.152i'\D'l0.076i 0.069i' -.sp -1 -\h'0.625i'\v'3.533i'\l'0.438i' -.sp -1 -\h'0.963i'\v'3.558i'\D'l0.100i -0.025i' -.sp -1 -\h'0.963i'\v'3.508i'\D'l0.100i 0.025i' -.sp -1 -\h'3.062i'\v'4.346i'\D'l1.625i 0.163i' -.sp -1 -\h'4.585i'\v'4.524i'\D'l0.102i -0.015i' -.sp -1 -\h'4.590i'\v'4.474i'\D'l0.097i 0.035i' -.sp -1 -\h'4.875i'\v'0.034i'\v'-.13m'\L'4.687i\(br'\v'.13m' -.sp -1 -\h'3.062i'\v'4.146i'\D'l1.688i 0.187i' -.sp -1 -\h'4.648i'\v'4.347i'\D'l0.102i -0.014i' -.sp -1 -\h'4.653i'\v'4.297i'\D'l0.097i 0.036i' -.sp -1 -\h'3.062i'\v'2.871i'\D'l1.750i 0.212i' -.sp -1 -\h'4.710i'\v'3.096i'\D'l0.102i -0.013i' -.sp -1 -\h'4.716i'\v'3.046i'\D'l0.096i 0.037i' -.sp -1 -\h'1.250i'\v'0.881i'\h'-0.0m'\v'0.2m'\s10\fRXNextEvent\fP -.sp -1 -\h'1.250i'\v'1.068i'\h'-0.0m'\v'0.2m'\s10\fRXFilterEvent\fP -.sp -1 -\h'4.875i'\h'-0.0m'\v'0.2m'\s12\fRIM Server\fP -.sp -1 -\h'2.437i'\h'-0.0m'\v'0.2m'\s12\fRIM library\fP -.sp -1 -\h'1.250i'\h'-0.0m'\v'0.2m'\s12\fRXlib API\fP -.sp -1 -\h'3.187i'\v'0.881i'\h'-0.0m'\v'0.2m'\s10\fRXIM_FORWARD_EVENT\fP -.sp -1 -\h'5.000i'\v'0.881i'\h'-0.0m'\v'0.2m'\s10\fRsynchronous \fP -.sp -1 -\h'5.000i'\v'1.006i'\h'-0.0m'\v'0.2m'\s10\fRrequest\fP -.sp -1 -\h'0.062i'\v'0.881i'\h'-0.0m'\v'0.2m'\s10\fRKey event\fP -.sp -1 -\h'3.187i'\v'1.131i'\h'-0.0m'\v'0.2m'\s10\fR(synchronous) \fP -.sp -1 -\h'0.062i'\v'1.256i'\h'-0.0m'\v'0.2m'\s10\fRButton press causes\fP -.sp -1 -\h'0.062i'\v'1.381i'\h'-0.0m'\v'0.2m'\s10\fRfocus change\fP -.sp -1 -\h'1.250i'\v'1.381i'\h'-0.0m'\v'0.2m'\s10\fRXSetICFocus\fP -.sp -1 -\h'3.250i'\v'1.006i'\h'-0.0m'\v'0.2m'\s10\fRor XIM_COMMIT\fP -.sp -1 -\h'3.187i'\v'1.443i'\h'-0.0m'\v'0.2m'\s10\fRXIM_FORWARD_EVENT\fP -.sp -1 -\h'3.687i'\v'1.693i'\h'-0.0m'\v'0.2m'\s10\fRXIM_SYNC\fP -.sp -1 -\h'3.375i'\v'2.006i'\h'-0.0m'\v'0.2m'\s10\fRXIM_SYNC_REPLY\fP -.sp -1 -\h'1.250i'\v'2.193i'\h'-0.0m'\v'0.2m'\s10\fRXNextEvent\fP -.sp -1 -\h'1.250i'\v'2.568i'\h'-0.0m'\v'0.2m'\s10\fRXmbLookupString\fP -.sp -1 -\h'1.250i'\v'2.381i'\h'-0.0m'\v'0.2m'\s10\fRXFilterEvent (returns False) \fP -.sp -1 -\v'2.856i'\h'-0.0m'\v'0.2m'\s10\fRthe focus\fP -.sp -1 -\v'2.693i'\h'-0.0m'\v'0.2m'\s10\fRApplication moves\fP -.sp -1 -\h'5.000i'\v'3.068i'\h'-0.0m'\v'0.2m'\s10\fRprocessed\fP -.sp -1 -\h'5.000i'\v'3.193i'\h'-0.0m'\v'0.2m'\s10\fR(The focused\fP -.sp -1 -\h'5.000i'\v'3.318i'\h'-0.0m'\v'0.2m'\s10\fRIC is changed) \fP -.sp -1 -\h'5.000i'\v'3.568i'\h'-0.0m'\v'0.2m'\s10\fRprocessed\fP -.sp -1 -\h'3.125i'\v'3.568i'\h'-0.0m'\v'0.2m'\s10\fRXIM_SYNC_REPLY as a reply\fP -.sp -1 -\h'3.125i'\v'3.731i'\h'-0.0m'\v'0.2m'\s10\fRof the XIM_FORWARD_EVENT\fP -.sp -1 -\h'1.250i'\v'3.568i'\h'-0.0m'\v'0.2m'\s10\fRXNextEvent\fP -.sp -1 -\h'5.000i'\v'4.068i'\h'-0.0m'\v'0.2m'\s10\fRprocessed\fP -.sp -1 -\h'5.000i'\v'1.381i'\h'-0.0m'\v'0.2m'\s10\fRPending\fP -.sp -1 -\h'5.000i'\v'4.256i'\h'-0.0m'\v'0.2m'\s10\fRprocessed\fP -.sp -1 -\h'1.250i'\v'2.818i'\h'-0.0m'\v'0.2m'\s10\fRXSetICFocus\fP -.sp -1 -\h'3.125i'\v'2.443i'\h'-0.0m'\v'0.2m'\s10\fRis started by XIM_COMMIT\fP -.sp -1 -\h'3.125i'\v'2.193i'\h'-0.0m'\v'0.2m'\s10\fRXIM_SET_IC_FOCUS is\fP -.sp -1 -\h'3.125i'\v'2.318i'\h'-0.0m'\v'0.2m'\s10\fRpend because another sync cycle\fP -.sp -1 -\h'2.062i'\v'1.693i'\h'-0.0m'\v'0.2m'\s10\fRsync cycle is done\fP -.sp -1 -\h'2.062i'\v'1.568i'\h'-0.0m'\v'0.2m'\s10\fRPending until\fP -.sp -1 -\v'3.568i'\h'-0.0m'\v'0.2m'\s10\fRKey event\fP -.sp -1 -\h'1.250i'\v'3.756i'\h'-0.0m'\v'0.2m'\s10\fRXFilterEvent\fP -.sp -1 -\h'3.125i'\v'4.631i'\h'-0.0m'\v'0.2m'\s10\fRXIM_FORWARD_EVENT\fP -.sp -1 -\h'3.375i'\v'4.131i'\h'-0.0m'\v'0.2m'\s10\fRXIM_SET_IC_FOCUS\fP -.sp -1 -\h'3.250i'\v'2.818i'\h'-0.0m'\v'0.2m'\s10\fRXIM_SET_IC_FOCUS\fP -.sp -1 -.sp 1+4.721i -.PE -.if \n(00 .fi - -.\"====================== event2 flow figure end ======================= -.ce -.sp -Fig.3 Sample Protocol Flow chart -.LP -.LP -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_FORWARD_EVENT (IM library \(<-\(-> IM Server) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -:2:BITMASK16:flag -::#0001:synchronous -::#0002:request filtering (*1) -::#0004:request lookupstring (*2) -:2:CARD16:serial number -::XEVENT:X event -.TE -.LP -.IP (*1) -Indicate the receiver should filter events and possible preedit may be invoked. -.IP (*2) -Indicate the receiver should only do lookup string. The IM Server is expected -to just do a conversion of the key event to the best candidate. This bit may -affect the state of the preedit state (e.g. compose of dead key sequences). -.RE -.LP -XEVENT format is same as the X Protocol event format(xEvent). -As the value of xEvent's sequenceNumber is the bottom of 16 bit of XEvent's -xany.serial, the top of 16 bit is sent by serial number(INT16). -.LP -.PN XIM_FORWARD_EVENT -message is used for forwarding the events from the IM library to the IM Server -in order for IM to be able to filter the event. On the other hand, this -message is also used for forwarding the events from the IM Server to the IM -library if the event forwarded from the IM library is not filtered. -The IM Server, which receives -.PN XIM_FORWARD_EVENT -message without synchronous bit, should set synchronous bit. -If both ``request event filtering'' and ``request lookupstring'' flag are -set, then both filtering and lookup should be done for the same event. -.LP -.NH 2 -Synchronizing with the IM Server -.XS -\*(SN Synchronizing with the IM Server -.XE -.LP -.PN XIM_SYNC -message requests to synchronize the IM library and the IM Server. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_SYNC (IM library \(<-\(-> IM Server) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -.TE -.RE -.LP -This synchronization can be started either on the IM library side or on the -IM Server side. The side which receives -.PN XIM_SYNC -message should process all XIM requests before replying. The input-context-ID -is necessary to distinguish the IC with which the IM library and the IM -Server are synchronized. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_SYNC_REPLY (IM Server \(<-\(-> IM library) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -.TE -.RE -.LP -The side which receives -.PN XIM_FORWARD_EVENT, -.PN XIM_COMMIT -or any other message with synchronous bit, should process all XIM request -before replying, and send -.PN XIM_SYNC_REPLY -message as the reply to the previous message. -.LP -.NH 2 -Sending a committed string -.XS -\*(SN Sending a committed string -.XE -.LP -When the IM Server commits a string, the IM Server sends either the committed -string or list of KeySym, or both, by -.PN XIM_COMMIT -message. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_COMMIT (IM Server \(-> IM library) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -:2:BITMASK16:flag -::#0001:synchronous -::#0002:XLookupChars -::#0004:XLookupKeySym -::#0006: XLookupBoth = XLookupChars | XLookupKeySym -.TE -.LP -If flag is XLookupKeySym, the arguments continue as follows: -.TS -tab(:); -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -:2::unused -:4:KEYSYM:KeySym -.TE -.LP -If flag is XLookupChars, the arguments continue as follows: -.TS -tab(:); -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -:2:m:byte length of committed string -:m:LISTofBYTE:committed string -:p::unused, p = Pad(m) -.TE -.LP -If flag is XLookupBoth, the arguments continue as follows: -.TS -tab(:); -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -:2::unused -:4:KEYSYM:KeySym -:2:n:byte length of committed string -:n:LISTofBYTE:committed string -:p::unused, p = Pad(2+n) -.TE -.RE -.LP -The IM Server which receives -.PN XIM_COMMIT -message without synchronous bit should set synchronous bit. -.LP -.NH 2 -Reset IC -.XS -\*(SN Reset IC -.XE -.LP -.PN XIM_RESET_IC -message requests to reset the status of IC in the IM Server. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_RESET_IC (IM library \(-> IM Server) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -.TE -.RE -.LP -.PN XIM_RESET_IC -is a synchronous request. The IM library should wait until receiving either an -.PN XIM_RESET_IC_REPLY -packet or an -.PN XIM_ERROR -packet. -.LP -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_RESET_IC_REPLY (IM Server \(-> IM library) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -:2:n:byte length of preedit string -:n:LISTofBYTE:preedit string -:p::unused, p = Pad(2+n) -.TE -.RE -.LP -.PN XIM_RESET_IC_REPLY -message returns the input-context-ID to distinguish replies from multiple ICs. -.LP -.\"============================== Callbacks =============================== -.NH 2 -Callbacks -.XS -\*(SN Callbacks -.XE -.LP -If XIMStyle has XIMPreeditArea or XIMStatusArea set, XIMGeometryCallback -may be used, and if XIMPreeditCallback and/or XIMStatusCallback are set, -corresponding callbacks may be used. -.LP -Any callback request may be sent from an IM Server to an IM client -asynchronously in response to any request previously sent by the IM client -to the IM Server. -.LP -When an IM Server needs to send a callback request synchronously with -the request previously sent by an IM client, the IM Server sends it -before replying to the previous request. -.LP -.NH 3 -Negotiating geometry -.XS -\*(SN Negotiating geometry -.XE -.LP -The IM Server sends -.PN XIM_GEOMETRY -message to start geometry negotiation, if XIMStyle has XIMPreeditArea or -XIMStatusArea set. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_GEOMETRY (IM Server \(-> IM library) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -.TE -.RE -.LP -There is always a single Focus Window, even if some input fields have only -one IC. -.LP -.NH 3 -Converting a string -.XS -\*(SN Converting a string -.XE -.LP -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_STR_CONVERSION (IM Server \(-> IM library) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -:2:CARD16:XIMStringConversionPosition -:2::unused -:4:CARD32:XIMCaretDirection -::#0:XIMForwardChar -::#1:XIMBackwardChar -::#2:XIMForwardWord -::#3:XIMBackwardWord -::#4:XIMCaretUp -::#5:XIMCaretDown -::#6:XIMNextLine -::#7:XIMCPreviousLine -::#8:XIMLineStart -::#9:XIMLineEnd -::#10:XIMAbsolutePosition -::#11:XIMDontChange -:2:CARD16:factor -:2:CARD16:XIMStringConversionOperation -::#0001:XIMStringConversionSubstitution -::#0002:XIMStringConversionRetrieval -:2:INT16:T{ -byte length to multiply the XIMStringConversionType -T} -.TE -.RE -.sp -.LP -.PN XIM_STR_CONVERSION -message may be used to start the string conversion from the IM -Server. -.LP -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_STR_CONVERSION_REPLY (IM library \(-> IM Server) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -:4:CARD32:XIMStringConversionFeedback -::XIMSTRCONVTEXT:XIMStringConversionText -.sp -.TE -.RE -.LP -.PN XIM_STR_CONVERSION_REPLY -message returns the string to be converted and the feedback information array. -.LP -.NH 3 -Preedit Callbacks -.XS -\*(SN Preedit Callbacks -.XE -.LP -The IM Server sends -.PN XIM_PREEDIT_START -message to call the XIMPreeditStartCallback function. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_PREEDIT_START (IM Server \(-> IM library) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -.TE -.RE -.LP -The reply to this message must be sent synchronously. The reply forwards -the return value from the callback function to the IM Server. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_PREEDIT_START_REPLY (IM library \(-> IM Server) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -:4:INT32:return value -.TE -.RE -.LP -.PN XIM_PREEDIT_START_REPLY -message returns the input-context-ID to distinguish replies from multiple -IC's. The return value contains the return value of the function -XIMPreeditStartCallback. -.LP -The IM Server sends -.PN XIM_PREEDIT_DRAW -message to call the XIMPreeditDrawCallback function. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_PREEDIT_DRAW (IM Server \(-> IM library) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -:4:INT32:caret -:4:INT32:chg_first -:4:INT32:chg_length -:4:BITMASK32:status -::#x0000001:no string -::#x0000002:no feedback -:2:n:length of preedit string -:n:STRING8:preedit string -:p::unused, p = Pad(2+n) -:2:m:byte length of feedback array -:2::unused -:m:LISTofXIMFEEDBACK:feedback array -.TE -.RE -.LP -The fields ``caret'', ``chg_first'' and ``chg_length'' correspond to the -fields of XIMPreeditDrawCallbackStruct. -When the ``no string'' bit of the status field is set, the text field of -XIMPreeditDrawCallbackStruct is NULL. -When the ``no feedback'' bit of the status field is set, the text feedback -field of XIMPreeditDrawCallbackStruct is NULL. -When the above bits are not set, ``preedit string'' contains the preedit -string to be displayed, and the feedback array contains feedback information. -.LP -The IM Server sends -.PN XIM_PREEDIT_CARET -message to call the PreeditCaretCallback function. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_PREEDIT_CARET (IM Server \(-> IM library) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -:4:INT32:position -:4:CARD32:direction -::#0:XIMForwardChar -::#1:XIMBackwardChar -::#2:XIMForwardWord -::#3:XIMBackwardWord -::#4:XIMCaretUp -::#5:XIMCaretDown -::#6:XIMNextLine -::#7:XIMCPreviousLine -::#8:XIMLineStart -::#9:XIMLineEnd -::#10:XIMAbsolutePosition -::#11:XIMDontChange -:4:CARD32:style -::#0:XIMInvisible -::#1:XIMCPrimary -::#2:XIMSecondary -.TE -.RE -.LP -Each entry corresponds to a field of XIMPreeditCaretCallbackStruct. -Since this callback sets the caret position, its reply must be sent -synchronously. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_PREEDIT_CARET_REPLY (IM library \(-> IM Server) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -:4:CARD32:position -.TE -.RE -.LP -The position is the value returned by the callback function after it -has been called. -.LP -The IM Server sends -.PN XIM_PREEDIT_DONE -message to call the XIMPreeditDoneCallback function. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_PREEDIT_DONE (IM Server \(-> IM library) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -.TE -.RE -.LP -.NH 3 -Preedit state notify -.XS -\*(SN Preedit state notify -.XE -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_PREEDITSTATE (IM Server \(-> IM Library) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -:4:BITMASK32:XIMPreeditState -::#x0000000:XIMPreeditUnknown -::#x0000001:XIMPreeditEnable -::#x0000002:XIMPreeditDisable -.TE -.sp -.TE -.RE -.LP -.PN XIM_PREEDITSTATE -message is used to call the XIMPreeditStateNotifyCallback function. -.LP -.NH 3 -Status Callbacks -.XS -\*(SN Status Callbacks -.XE -.LP -The IM Server sends -.PN XIM_STATUS_START -message to call the XIMStatusStartCallback function. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_STATUS_START (IM Server \(-> IM library) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -.TE -.RE -.LP -The IM Server sends -.PN XIM_STATUS_DRAW -message to call the XIMStatusDrawCallback function. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_STATUS_DRAW (IM Server \(-> IM library) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -:4:CARD32:type -::#0:XIMTextType -::#1:XIMBitmapType -.TE -.LP -If type is XIMTextType, the arguments continue as follows. -.TS -tab(:); -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -:4:BITMASK32:status -::#x0000001:no string -::#x0000002:no feedback -:2:n:length of status string -:n:STRING8:status string -:p::unused, p = Pad(2+n) -:2:m:byte length of feedback array -:2::unused -:m:LISTofXIMFEEDBACK:feedback array -.TE -.LP -If type is XIMBitmapType, the arguments continue as follows. -.TS -tab(:); -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -:4:PIXMAP:pixmap data -.TE -.RE -.LP -The field ``type'' corresponds to the field in XIMStatusDrawCallbackStruct. -.LP -The IM Server sends -.PN XIM_STATUS_DONE -message to call the XIMStatusDoneCallback function. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_STATUS_DONE (IM Server \(-> IM library) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -.TE -.RE -.LP -.bp -.NH 1 -Acknowledgements -.XS -\*(SN Acknowledgements -.XE -.LP -This document represents the culmination of several years of debate and -experiments done under the auspices of the MIT X Consortium i18n working -group. Although this was a group effort, the author remains responsible -for any errors or omissions. -.LP -We would like to thank to all members of this group. -And we would like to make special thanks to the following people -(in alphabetical order) for their participation in the IM Protocol -design, -Hector Chan, Takashi Fujiwara, Yoshio Horiuchi, Makoto Inada, -Hiromu Inukai, Mickael Kung, Seiji Kuwari, Franky Ling, Hiroyuki Machida, -Hiroyuki Miyamoto, Frank Rojas, Bob Scheifler, Makiko Shimamura, -Shoji Sugiyama, Hidetoshi Tajima, Masaki Takeuchi, Makoto Wakamatsu, -Masaki Wakao, Nobuyuki Tanaka, Shigeru Yamada, Katsuhisa Yano, Jinsoo Yoon. -.LP -.NH 1 -References -.XS -\*(SN References -.XE -.LP -All of the following documents are X Consortium standards available from MIT: -.LP -[1] Scheifler, Robert W., \fI``X Window System Protocol Version 11''\fP -.LP -[2] Scheifler, Robert W. etc., \fI``Xlib \- C Language X Interface''\fP -.LP -.bp -.XS -Appendix A \- Common Extensions -.XE -.ce 10 -.sp 5 -\s+2\fBAppendix A\fP\s-2 -.sp -\s+1\fBCommon Extensions\fP\s-1 -.ce 0 -.sp -.LP -Extension opcodes and packet names (e.g. -.PN XIM_EXT_SET_EVENT_MASK -) for additional extensions may be registered with X Consortium. -The following is a commonly well-known extended packet. -.LP -.LP -.IP \fB(1) -Extension to manipulate the event handling\fP -.LP -.PN XIM_EXT_SET_EVENT_MASK -message specifies the set of event masks that the IM library should manipulate. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_EXT_SET_EVENT_MASK (IM Server \(-> IM library) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -:4:EVENTMASK:filter-event-mask (*1) -:4:EVENTMASK:intercept-event-mask (*2) -:4:EVENTMASK:select-event-mask (*3) -:4:EVENTMASK:forward-event-mask (*4) -:4:EVENTMASK:synchronous-event-mask (*5) -.TE -.IP (*1) -Specify the events to be neglected by the IM library via XFilterEvent. -.IP (*2) -Specify the events to be deselected by the IM library with XSelectInput. -.IP (*3) -Specify the events to be selected by the IM library with XSelectInput. -.IP (*4) -Specify all the events to be forwarded to the IM Server by the IM library. -.IP (*5) -Specify the events to be forwarded with synchronous flag on by the IM library. -.RE -.LP -The IM library must reply -.PN XIM_SYNC_REPLY -message to the IM Server. This request is valid after the ic is created. -.LP -.sp -.IP \fB(2) -Extension for improvement of performance\fR -.LP -The following requests may be used for improvement of performance. -.LP -.PN XIM_EXT_FORWARD_KEYEVENT -message may be used instead of -.PN XIM_FORWARD_EVENT -message. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_EXT_FORWARD_KEYEVENT (IM Server \(<-\(-> IM library) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -:2:BITMASK16:flag -::#0001:synchronous -:2:CARD16:sequence number -:1:BYTE:xEvent.u.u.type -:1:BYTE:keycode -:2:CARD16:state -:4:CARD32:time -:4:CARD32:window -.TE -.RE -.LP -.bp -.PN XIM_EXT_MOVE -message may be used to change the spot location instead of -.PN -XIM_SET_IC_VALUES -message. -It is effective only if the client specified XIMPreeditPosition. -.RS -.TS -tab(:); -lfB s s s -lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). -XIM_EXT_MOVE (IM library \(-> IM Server) -.sp 6p -:2:CARD16:input-method-ID -:2:CARD16:input-context-ID -:2:INT16:X -:2:INT16:Y -.TE -.RE -.LP -.PN XIM_EXT_MOVE -message is a asynchronous request. -.LP -.bp -.XS -Appendix B \- The list of transport specific IM Server names registered -.XE -.ce 10 -.sp 5 -\s+2\fBAppendix B\fP\s-2 -.sp -\s+1\fBThe list of transport specific IM Server address format registered\fP\s-1 -.ce 0 -.sp -.LP -The following format represents the ATOM contained in -.PN XIM_SERVERS -property and the string returned from the request converting -selection target LOCALES and TRANSPORT. -.DS - ``{@\^\fIcategory\fP\^=[\^\fIvalue\fP,...]}...'' -.DE -.LP -The following categories are currently registered. -.RS -.TS -tab(;); -l l. -\fBserver\fP;: IM Server name (used for XIM_SERVERS) -\fBlocale\fP;: XPG4 locale name (LOCALES) -\fBtransport\fP;: transport-specific name (TRANSPORT) -.TE -.RE -.LP -The preregistered formats for transport-specific names are as follows: -.RS -.LP -\fBTCP/IP Names\fP -.LP -.RS -The following syntax should be used for system internal domain names: -.DS -<\fIlocal name\fP> ::= ``local/''<\fIhostname\fP>``:''<\fIpathname\fP> -.DE -.LP -Where <\fIpathname\fP> is a path name of socket address. -.LP -IM Server's name should be set to <\fIpathname\fP> to run multiple IM Server -at the same time -.LP -The following syntax should be used for Internet domain names: -.DS -<\fITCP name\fP> ::= ``tcp/''<\fIhostname\fP>``:''<\fIipportnumber\fP> -.DE -where <\fIhostname\fP> is either symbolic (such as expo.lcs.mit.edu) or -numeric decimal (such as 18.30.0.212). The <\fIipportnumber\fP> is the -port on which the IM Server is listening for connections. -For example: -.DS -tcp/expo.lcs.mit.edu:8012 -tcp/18.30.0.212:7890 -.DE -.RE -.LP -\fBDECnet Names\fP -.LP -.RS -The following syntax should be used for DECnet names: -.DS -<\fIDECnet name\fP> ::= ``decnet/''<\fInodename\fP>``::IMSERVER$''<\fIobjname\fP> -.DE -where <\fInodename\fP> is either symbolic (such as SRVNOD) or the numeric -decimal form of the DECnet address (such as 44.70). The <\fIobjname\fP> -is normal, case-insensitive DECnet object name. For example: -.DS -DECNET/SRVNOD::IMSERVER$DEFAULT -decnet/44.70::IMSERVER$other -.DE -.RE -.LP -\fBX Names\fP -.LP -.RS -The following syntax should be used for X names: -.DS -<\fIX name\fP> ::= ``X/'' -.DE -.RE -.RE -.LP -If a given category has multiple values, the value is evaluated in order of -setting. -.bp -.XS -Appendix C \- Protocol number -.XE -.ce 10 -.sp 5 -\s+2\fBAppendix C\fP\s-2 -.sp -\s+1\fBProtocol number\fP\s-1 -.ce 0 -.sp -.LP -\fBMajor Protocol number\fP -.TS -center, tab(:); -lw(9c) l. -XIM_CONNECT:#001 -XIM_CONNECT_REPLY:#002 -XIM_DISCONNECT:#003 -XIM_DISCONNECT_REPLY:#004 - -XIM_AUTH_REQUIRED:#010 -XIM_AUTH_REPLY:#011 -XIM_AUTH_NEXT:#012 -XIM_AUTH_SETUP:#013 -XIM_AUTH_NG:#014 - -XIM_ERROR:#020 - -XIM_OPEN:#030 -XIM_OPEN_REPLY:#031 -XIM_CLOSE:#032 -XIM_CLOSE_REPLY:#033 -XIM_REGISTER_TRIGGERKEYS:#034 -XIM_TRIGGER_NOTIFY:#035 -XIM_TRIGGER_NOTIFY_REPLY:#036 -XIM_SET_EVENT_MASK:#037 -XIM_ENCODING_NEGOTIATION:#038 -XIM_ENCODING_NEGOTIATION_REPLY:#039 -XIM_QUERY_EXTENSION:#040 -XIM_QUERY_EXTENSION_REPLY:#041 -XIM_SET_IM_VALUES:#042 -XIM_SET_IM_VALUES_REPLY:#043 -XIM_GET_IM_VALUES:#044 -XIM_GET_IM_VALUES_REPLY:#045 - -XIM_CREATE_IC:#050 -XIM_CREATE_IC_REPLY:#051 -XIM_DESTROY_IC:#052 -XIM_DESTROY_IC_REPLY:#053 -XIM_SET_IC_VALUES:#054 -XIM_SET_IC_VALUES_REPLY:#055 -XIM_GET_IC_VALUES:#056 -XIM_GET_IC_VALUES_REPLY:#057 -XIM_SET_IC_FOCUS:#058 -XIM_UNSET_IC_FOCUS:#059 -XIM_FORWARD_EVENT:#060 -XIM_SYNC:#061 -XIM_SYNC_REPLY:#062 -XIM_COMMIT:#063 -XIM_RESET_IC:#064 -XIM_RESET_IC_REPLY:#065 - -XIM_GEOMETRY:#070 -XIM_STR_CONVERSION:#071 -XIM_STR_CONVERSION_REPLY:#072 -XIM_PREEDIT_START:#073 -XIM_PREEDIT_START_REPLY:#074 -XIM_PREEDIT_DRAW:#075 -XIM_PREEDIT_CARET:#076 -XIM_PREEDIT_CARET_REPLY:#077 -XIM_PREEDIT_DONE:#078 -XIM_STATUS_START:#079 -XIM_STATUS_DRAW:#080 -XIM_STATUS_DONE:#081 -XIM_PREEDITSTATE:#082 -.TE -.sp -(*) The IM Server's extension protocol number should be more than #128. -.bp -.XS -Appendix D \- Implementation Tips -.XE -.ce 10 -.sp 5 -\s+2\fBAppendix D\fP\s-2 -.sp -\s+1\fBImplementation Tips\fP\s-1 -.ce 0 -.sp -.LP -.B -.IP \fB(1) -FrontEnd Method\fP -.LP -FrontEnd method is recognized as a performance acceleration by the -trade off of the variety of the reliability. -.LP -In order to use the FrontEnd method, the IM library must query the IM -Server to see if the FrontEnd extension is available. The query is -made by using the -.PN XIM_QUERY_EXTENSION -message. The IM Server may send -.PN XIM_EXT_SET_EVENT_MASK -message with intercept-event-mask, forward-event-mask, and -synchronous-event-mask values set after replying -.PN XIM_QUERY_EXTENSION_REPLY -message. -.LP -FrontEnd method can be implemented in a couple of ways depending on -how the IM Server utilize -.PN XIM_EXT_SET_EVENT_MASK -message. -.LP -One approach is to update both of the input mask and the filter-event-mask -depending on the preeidting state. The sample protocol sequence using the -static event flow is as follows: -.LP -.\"=================================================================== -.sp -\^... 1.675 6.888 6.237 10.296 -\^... 0.000i 3.408i 4.562i 0.000i -.nr 00 \n(.u -.nf -.PS 3.408i 4.562i -.br -.ps 11 -\h'3.750i'\v'0.034i'\v'-.13m'\L'3.374i\(br'\v'.13m' -.sp -1 -\h'3.912i'\v'1.384i'\D'l-0.100i 0.025i' -.sp -1 -\h'3.912i'\v'1.434i'\D'l-0.100i -0.025i' -.sp -1 -\h'3.812i'\v'1.409i'\l'0.750i' -.sp -1 -\h'3.750i'\h'-0.0m'\v'0.2m'\s12\fRIM Server\fP -.sp -1 -\h'3.812i'\v'0.818i'\h'-0.0m'\v'0.2m'\s10\fRevent mask is changed\fP -.sp -1 -\h'3.812i'\v'1.006i'\h'-0.0m'\v'0.2m'\s10\fRto select the event\fP -.sp -1 -\h'3.875i'\v'2.381i'\h'-0.0m'\v'0.2m'\s10\fRevent mask is changed\fP -.sp -1 -\h'3.875i'\v'2.568i'\h'-0.0m'\v'0.2m'\s10\fRto deselect the event\fP -.sp -1 -\h'3.875i'\v'1.631i'\h'-0.0m'\v'0.2m'\s10\fRX events directly come\fP -.sp -1 -\h'3.875i'\v'1.756i'\h'-0.0m'\v'0.2m'\s10\fRto the IM Server.\fP -.sp -1 -\h'3.875i'\v'2.006i'\h'-0.0m'\v'0.2m'\s10\fRwhen preediting is turning off\fP -.sp -1 -\h'0.625i'\v'0.284i'\l'0.875i' -.sp -1 -\h'1.400i'\v'0.309i'\D'l0.100i -0.025i' -.sp -1 -\h'1.400i'\v'0.259i'\D'l0.100i 0.025i' -.sp -1 -\h'1.750i'\v'0.346i'\l'1.687i' -.sp -1 -\h'3.337i'\v'0.371i'\D'l0.100i -0.025i' -.sp -1 -\h'3.337i'\v'0.321i'\D'l0.100i 0.025i' -.sp -1 -\h'1.850i'\v'2.134i'\D'l-0.100i 0.025i' -.sp -1 -\h'1.850i'\v'2.184i'\D'l-0.100i -0.025i' -.sp -1 -\h'1.750i'\v'2.159i'\l'1.687i' -.sp -1 -\h'1.562i'\v'0.034i'\v'-.13m'\L'3.374i\(br'\v'.13m' -.sp -1 -\h'1.850i'\v'0.446i'\D'l-0.100i 0.025i' -.sp -1 -\h'1.850i'\v'0.496i'\D'l-0.100i -0.025i' -.sp -1 -\h'1.750i'\v'0.471i'\l'1.687i' -.sp -1 -\h'1.687i'\v'0.631i'\h'-0.0m'\v'0.2m'\s10\fRXIM_EXT_SET_EVENT_MASK\fP -.sp -1 -\h'1.875i'\v'0.818i'\h'-0.0m'\v'0.2m'\s10\fRintercept-event-mask is set\fP -.sp -1 -\h'1.687i'\v'2.318i'\h'-0.0m'\v'0.2m'\s10\fRXIM_EXT_SET_EVENT_MASK\fP -.sp -1 -\h'1.875i'\v'2.443i'\h'-0.0m'\v'0.2m'\s10\fRselect-event-mask is set\fP -.sp -1 -\h'0.937i'\h'-0.0m'\v'0.2m'\s12\fRIM library\fP -.sp -1 -\v'0.193i'\h'-0.0m'\v'0.2m'\s10\fRKeys in the on-key-list\fP -.sp -1 -\h'0.250i'\v'2.318i'\h'-0.0m'\v'0.2m'\s10\fRevent mask is changed\fP -.sp -1 -\h'0.250i'\v'2.506i'\h'-0.0m'\v'0.2m'\s10\fRto select the event\fP -.sp -1 -\h'0.250i'\v'1.006i'\h'-0.0m'\v'0.2m'\s10\fRto deselect the event\fP -.sp -1 -\h'0.250i'\v'0.818i'\h'-0.0m'\v'0.2m'\s10\fRevent mask is changed\fP -.sp -1 -\h'1.812i'\v'0.256i'\h'-0.0m'\v'0.2m'\s10\fRXIM_FORWARD_EVENT\fP -.sp -1 -.sp 1+3.408i -.PE -.if \n(00 .fi -.sp -.\"=================================================================== -.LP -To pursuit a maximum performance regardless of the preediting mode, -the IM Server may use the dynamic event flow with the following -sample protocol sequence. -.bp -.LP -.\"=================================================================== -\^... 1.675 6.888 6.237 10.296 -\^... 0.000i 3.408i 4.562i 0.000i -.nr 00 \n(.u -.nf -.PS 3.408i 4.562i -.br -.ps 11 -\h'3.750i'\v'0.034i'\v'-.13m'\L'3.374i\(br'\v'.13m' -.sp -1 -\h'3.912i'\v'1.384i'\D'l-0.100i 0.025i' -.sp -1 -\h'3.912i'\v'1.434i'\D'l-0.100i -0.025i' -.sp -1 -\h'3.812i'\v'1.409i'\l'0.750i' -.sp -1 -\h'3.750i'\h'-0.0m'\v'0.2m'\s12\fRIM Server\fP -.sp -1 -\h'3.812i'\v'0.818i'\h'-0.0m'\v'0.2m'\s10\fRevent mask is changed\fP -.sp -1 -\h'3.812i'\v'1.006i'\h'-0.0m'\v'0.2m'\s10\fRto select the event\fP -.sp -1 -\h'3.875i'\v'2.381i'\h'-0.0m'\v'0.2m'\s10\fRevent mask is changed\fP -.sp -1 -\h'3.875i'\v'2.568i'\h'-0.0m'\v'0.2m'\s10\fRto deselect the event\fP -.sp -1 -\h'3.875i'\v'1.631i'\h'-0.0m'\v'0.2m'\s10\fRX events directly come\fP -.sp -1 -\h'3.875i'\v'1.756i'\h'-0.0m'\v'0.2m'\s10\fRto the IM Server.\fP -.sp -1 -\h'3.875i'\v'2.006i'\h'-0.0m'\v'0.2m'\s10\fRwhen preediting is turning off\fP -.sp -1 -\h'0.625i'\v'0.284i'\l'0.875i' -.sp -1 -\h'1.400i'\v'0.309i'\D'l0.100i -0.025i' -.sp -1 -\h'1.400i'\v'0.259i'\D'l0.100i 0.025i' -.sp -1 -\h'1.750i'\v'0.346i'\l'1.687i' -.sp -1 -\h'3.337i'\v'0.371i'\D'l0.100i -0.025i' -.sp -1 -\h'3.337i'\v'0.321i'\D'l0.100i 0.025i' -.sp -1 -\h'1.850i'\v'1.196i'\D'l-0.100i 0.025i' -.sp -1 -\h'1.850i'\v'1.246i'\D'l-0.100i -0.025i' -.sp -1 -\h'1.750i'\v'1.221i'\l'1.687i' -.sp -1 -\h'1.850i'\v'2.134i'\D'l-0.100i 0.025i' -.sp -1 -\h'1.850i'\v'2.184i'\D'l-0.100i -0.025i' -.sp -1 -\h'1.750i'\v'2.159i'\l'1.687i' -.sp -1 -\h'1.562i'\v'0.034i'\v'-.13m'\L'3.374i\(br'\v'.13m' -.sp -1 -\h'1.850i'\v'0.446i'\D'l-0.100i 0.025i' -.sp -1 -\h'1.850i'\v'0.496i'\D'l-0.100i -0.025i' -.sp -1 -\h'1.750i'\v'0.471i'\l'1.687i' -.sp -1 -\h'1.812i'\v'0.256i'\h'-0.0m'\v'0.2m'\s10\fRXIM_TRIGGER_NOTIFY\fP -.sp -1 -\h'1.687i'\v'1.068i'\h'-0.0m'\v'0.2m'\s10\fRXIM_TRIGGER_NOTIFY_REPLY\fP -.sp -1 -\h'1.687i'\v'0.631i'\h'-0.0m'\v'0.2m'\s10\fRXIM_EXT_SET_EVENT_MASK\fP -.sp -1 -\h'1.875i'\v'0.818i'\h'-0.0m'\v'0.2m'\s10\fRintercept-event-mask is set\fP -.sp -1 -\h'1.687i'\v'2.318i'\h'-0.0m'\v'0.2m'\s10\fRXIM_EXT_SET_EVENT_MASK\fP -.sp -1 -\h'1.875i'\v'2.443i'\h'-0.0m'\v'0.2m'\s10\fRselect-event-mask is set\fP -.sp -1 -\h'0.937i'\h'-0.0m'\v'0.2m'\s12\fRIM library\fP -.sp -1 -\v'0.193i'\h'-0.0m'\v'0.2m'\s10\fRKeys in the on-key-list\fP -.sp -1 -\h'0.250i'\v'2.318i'\h'-0.0m'\v'0.2m'\s10\fRevent mask is changed\fP -.sp -1 -\h'0.250i'\v'2.506i'\h'-0.0m'\v'0.2m'\s10\fRto select the event\fP -.sp -1 -\h'0.250i'\v'1.006i'\h'-0.0m'\v'0.2m'\s10\fRto deselect the event\fP -.sp -1 -\h'0.250i'\v'0.818i'\h'-0.0m'\v'0.2m'\s10\fRevent mask is changed\fP -.sp -1 -.sp 1+3.408i -.PE -.if \n(00 .fi -.\"=================================================================== -.LP -This method can reduce the XIM protocol traffic dramatically -by updating intercept-event-mask and select-event-mask accordingly. -The tradeoff of this performance improvement is that the key -events may be lost or disordered in some particular situation, such as -when the user types the keyboard in following sequence really fast: -.sp 6p -.RS -``some strings''``another string'' -.RE -.sp 6p -Since this method requires the input mask updates to the both the IM Server -and Xlib when turning on and off the preediting, and there is a time lag -till the requests take effect when two client issues the input mask updates -simultaneously. -.LP -Another approach of the FrontEnd method is to update the filter-event-mask -depending on the preediting state and not to update the input mask. -The IM Server must register both of the preediting on key list and off key -list by -.PN XIM_REGISTER_TRIGGERKEYS -message. -In this method, Both the IM Server and the IM client select the same -events on the same client's window, so that the events are delivered -to both of the IM Server and the client. The preediting on and off -states are expressed by whether the key events are filtered or not. -The sample protocol sequence are as follows: -.LP -.bp -<> -.LP -.\"==================================================================== -.sp -\^... 1.488 7.325 6.487 10.358 -\^... 0.000i 3.033i 4.999i 0.000i -.nr 00 \n(.u -.nf -.PS 3.033i 4.999i -.br -.ps 11 -\h'4.099i'\v'0.383i'\D'l-0.100i 0.025i' -.sp -1 -\h'4.099i'\v'0.433i'\D'l-0.100i -0.025i' -.sp -1 -\h'3.999i'\v'0.408i'\l'1.000i' -.sp -1 -\h'4.099i'\v'1.696i'\D'l-0.100i 0.025i' -.sp -1 -\h'4.099i'\v'1.746i'\D'l-0.100i -0.025i' -.sp -1 -\h'3.999i'\v'1.721i'\l'1.000i' -.sp -1 -\h'3.937i'\v'0.096i'\v'-.13m'\L'2.937i\(br'\v'.13m' -.sp -1 -\h'3.937i'\v'0.062i'\h'-0.0m'\v'0.2m'\s12\fRIM Server\fP -.sp -1 -\h'4.062i'\v'0.755i'\h'-0.0m'\v'0.2m'\s10\fRthe specified events\fP -.sp -1 -\h'4.062i'\v'0.943i'\h'-0.0m'\v'0.2m'\s10\fRare being processed\fP -.sp -1 -\h'4.062i'\v'2.255i'\h'-0.0m'\v'0.2m'\s10\fRthe specified events\fP -.sp -1 -\h'4.062i'\v'2.443i'\h'-0.0m'\v'0.2m'\s10\fRare being discarded\fP -.sp -1 -\h'4.249i'\v'1.568i'\h'-0.0m'\v'0.2m'\s10\fRKeys in the off-key-list\fP -.sp -1 -\h'4.187i'\v'0.318i'\h'-0.0m'\v'0.2m'\s10\fRKeys in the on-key-list\fP -.sp -1 -\h'0.812i'\v'0.346i'\l'0.875i' -.sp -1 -\h'1.587i'\v'0.371i'\D'l0.100i -0.025i' -.sp -1 -\h'1.587i'\v'0.321i'\D'l0.100i 0.025i' -.sp -1 -\h'1.937i'\v'0.408i'\l'1.687i' -.sp -1 -\h'3.524i'\v'0.433i'\D'l0.100i -0.025i' -.sp -1 -\h'3.524i'\v'0.383i'\D'l0.100i 0.025i' -.sp -1 -\h'1.749i'\v'0.096i'\v'-.13m'\L'2.937i\(br'\v'.13m' -.sp -1 -\h'2.037i'\v'0.508i'\D'l-0.100i 0.025i' -.sp -1 -\h'2.037i'\v'0.558i'\D'l-0.100i -0.025i' -.sp -1 -\h'1.937i'\v'0.533i'\l'1.687i' -.sp -1 -\h'0.812i'\v'1.721i'\l'0.875i' -.sp -1 -\h'1.587i'\v'1.746i'\D'l0.100i -0.025i' -.sp -1 -\h'1.587i'\v'1.696i'\D'l0.100i 0.025i' -.sp -1 -\h'2.099i'\v'1.758i'\D'l-0.100i 0.025i' -.sp -1 -\h'2.099i'\v'1.808i'\D'l-0.100i -0.025i' -.sp -1 -\h'1.999i'\v'1.783i'\l'1.688i' -.sp -1 -\h'1.874i'\v'0.693i'\h'-0.0m'\v'0.2m'\s10\fRXIM_EXT_SET_EVENT_MASK\fP -.sp -1 -\v'0.255i'\h'-0.0m'\v'0.2m'\s10\fRKeys in the on-key-list\fP -.sp -1 -\h'2.062i'\v'0.880i'\h'-0.0m'\v'0.2m'\s10\fRfilter-event-mask is set\fP -.sp -1 -\h'0.624i'\v'0.755i'\h'-0.0m'\v'0.2m'\s10\fRthe specified events\fP -.sp -1 -\h'0.624i'\v'0.943i'\h'-0.0m'\v'0.2m'\s10\fRare being filtered\fP -.sp -1 -\h'1.937i'\v'1.943i'\h'-0.0m'\v'0.2m'\s10\fRXIM_EXT_SET_EVENT_MASK\fP -.sp -1 -\h'2.124i'\v'2.068i'\h'-0.0m'\v'0.2m'\s10\fRfilter-event-mask is set\fP -.sp -1 -\h'0.062i'\v'1.568i'\h'-0.0m'\v'0.2m'\s10\fRKeys in the off-key-list\fP -.sp -1 -\h'1.062i'\h'-0.0m'\v'0.2m'\s12\fRIM library\fP -.sp -1 -\h'0.624i'\v'2.255i'\h'-0.0m'\v'0.2m'\s10\fRthe specified events\fP -.sp -1 -\h'0.624i'\v'2.443i'\h'-0.0m'\v'0.2m'\s10\fRare being processed\fP -.sp -1 -\h'1.999i'\v'0.318i'\h'-0.0m'\v'0.2m'\s10\fRXIM_FORWARD_EVENT\fP -.sp -1 -.sp 1+3.033i -.PE -.if \n(00 .fi -.\"==================================================================== -.LP -<> -.LP -.\"==================================================================== -\^... 1.488 7.325 6.487 10.358 -\^... 0.000i 3.033i 4.999i 0.000i -.nr 00 \n(.u -.nf -.PS 3.033i 4.999i -.br -.ps 11 -\h'4.099i'\v'0.383i'\D'l-0.100i 0.025i' -.sp -1 -\h'4.099i'\v'0.433i'\D'l-0.100i -0.025i' -.sp -1 -\h'3.999i'\v'0.408i'\l'1.000i' -.sp -1 -\h'4.099i'\v'1.696i'\D'l-0.100i 0.025i' -.sp -1 -\h'4.099i'\v'1.746i'\D'l-0.100i -0.025i' -.sp -1 -\h'3.999i'\v'1.721i'\l'1.000i' -.sp -1 -\h'3.937i'\v'0.096i'\v'-.13m'\L'2.937i\(br'\v'.13m' -.sp -1 -\h'3.937i'\v'0.062i'\h'-0.0m'\v'0.2m'\s12\fRIM Server\fP -.sp -1 -\h'4.062i'\v'0.755i'\h'-0.0m'\v'0.2m'\s10\fRthe specified events\fP -.sp -1 -\h'4.062i'\v'0.943i'\h'-0.0m'\v'0.2m'\s10\fRare being processed\fP -.sp -1 -\h'4.062i'\v'2.255i'\h'-0.0m'\v'0.2m'\s10\fRthe specified events\fP -.sp -1 -\h'4.062i'\v'2.443i'\h'-0.0m'\v'0.2m'\s10\fRare being discarded\fP -.sp -1 -\h'4.249i'\v'1.568i'\h'-0.0m'\v'0.2m'\s10\fRKeys in the off-key-list\fP -.sp -1 -\h'4.187i'\v'0.318i'\h'-0.0m'\v'0.2m'\s10\fRKeys in the on-key-list\fP -.sp -1 -\h'0.812i'\v'0.346i'\l'0.875i' -.sp -1 -\h'1.587i'\v'0.371i'\D'l0.100i -0.025i' -.sp -1 -\h'1.587i'\v'0.321i'\D'l0.100i 0.025i' -.sp -1 -\h'1.937i'\v'0.408i'\l'1.687i' -.sp -1 -\h'3.524i'\v'0.433i'\D'l0.100i -0.025i' -.sp -1 -\h'3.524i'\v'0.383i'\D'l0.100i 0.025i' -.sp -1 -\h'2.037i'\v'1.258i'\D'l-0.100i 0.025i' -.sp -1 -\h'2.037i'\v'1.308i'\D'l-0.100i -0.025i' -.sp -1 -\h'1.937i'\v'1.283i'\l'1.687i' -.sp -1 -\h'1.749i'\v'0.096i'\v'-.13m'\L'2.937i\(br'\v'.13m' -.sp -1 -\h'2.037i'\v'0.508i'\D'l-0.100i 0.025i' -.sp -1 -\h'2.037i'\v'0.558i'\D'l-0.100i -0.025i' -.sp -1 -\h'1.937i'\v'0.533i'\l'1.687i' -.sp -1 -\h'0.812i'\v'1.721i'\l'0.875i' -.sp -1 -\h'1.587i'\v'1.746i'\D'l0.100i -0.025i' -.sp -1 -\h'1.587i'\v'1.696i'\D'l0.100i 0.025i' -.sp -1 -\h'2.099i'\v'1.758i'\D'l-0.100i 0.025i' -.sp -1 -\h'2.099i'\v'1.808i'\D'l-0.100i -0.025i' -.sp -1 -\h'1.999i'\v'1.783i'\l'1.688i' -.sp -1 -\h'1.999i'\v'0.318i'\h'-0.0m'\v'0.2m'\s10\fRXIM_TRIGGER_NOTIFY\fP -.sp -1 -\h'1.874i'\v'1.130i'\h'-0.0m'\v'0.2m'\s10\fRXIM_TRIGGER_NOTIFY_REPLY\fP -.sp -1 -\h'1.874i'\v'0.693i'\h'-0.0m'\v'0.2m'\s10\fRXIM_EXT_SET_EVENT_MASK\fP -.sp -1 -\v'0.255i'\h'-0.0m'\v'0.2m'\s10\fRKeys in the on-key-list\fP -.sp -1 -\h'2.062i'\v'0.880i'\h'-0.0m'\v'0.2m'\s10\fRfilter-event-mask is set\fP -.sp -1 -\h'0.624i'\v'0.755i'\h'-0.0m'\v'0.2m'\s10\fRthe specified events\fP -.sp -1 -\h'0.624i'\v'0.943i'\h'-0.0m'\v'0.2m'\s10\fRare being filtered\fP -.sp -1 -\h'1.937i'\v'1.943i'\h'-0.0m'\v'0.2m'\s10\fRXIM_EXT_SET_EVENT_MASK\fP -.sp -1 -\h'2.124i'\v'2.068i'\h'-0.0m'\v'0.2m'\s10\fRfilter-event-mask is set\fP -.sp -1 -\h'0.062i'\v'1.568i'\h'-0.0m'\v'0.2m'\s10\fRKeys in the off-key-list\fP -.sp -1 -\h'1.062i'\h'-0.0m'\v'0.2m'\s12\fRIM library\fP -.sp -1 -\h'0.624i'\v'2.255i'\h'-0.0m'\v'0.2m'\s10\fRthe specified events\fP -.sp -1 -\h'0.624i'\v'2.443i'\h'-0.0m'\v'0.2m'\s10\fRare being processed\fP -.sp -1 -.sp 1+3.033i -.PE -.if \n(00 .fi - -.\"==================================================================== -.LP -This method does not have the problem of the time lag when going across -the preediting on and off mode, however, the amount of the performance -acceleration is not as good as the method described above. -.LP -In general, the FrontEnd method requires some synchronization to some -of the X protocols, such as the ChangeWindowAttribute protocol for the -event mask change or the GrabKey protocol, since it relies on the X's -principal event dispatching mechanism. Any X protocol bindings do not -consider the synchronization might cause some mis-synchronization -between the IM clients and the IM Server. -.LP -.bp -.IP \fB(2) -Transport Layer\fP -.LP -The Xlib XIM implementation is layered into three functions, a protocol -layer, an interface layer and a transport layer. The purpose of this -layering is to make the protocol independent of transport implementation. -Each function of these layers are: -.RS 3 -.IP "\fIThe protocol layer\fP" -.br -implements overall function of XIM and calls the interface layer -functions when it needs to communicate to IM Server. -.IP "\fIThe interface layer\fP" -.br -separates the implementation of the transport layer from the protocol -layer, in other words, it provides implementation independent hook for -the transport layer functions. -.IP "\fIThe transport layer\fP" -.br -handles actual data communication with IM Server. It is done by a set -of several functions named transporters. -.RE -.LP -The interface layer and the transport layer make various communication -channels usable such as X Protocol, TCP/IP, DECnet or STREAM. -The following is a sample implementation for the transporter using -the X connection. -Refer to "xtrans" for the transporter using Socket Transport. -.LP -At the beginning of the X Transport connection for the XIM transport -mechanism, two different windows must be created either in an Xlib XIM -or in an IM Server, with which the Xlib and the IM Server exchange the -XIM transports by using the ClientMessage events and Window Properties. -In the following, the window created by the Xlib is referred as the -"client communication window", and on the other hand, the window created -by the IM Server is referred as the "IMS communication window". -.LP -.B -Connection -.LP -.RS -In order to establish a connection, a communication window is created. -A ClientMessage in the following event's format is sent to the owner -window of XIM_SERVER selection, which the IM Server has created. -.LP -Refer to "The Input Method Protocol" for the XIM_SERVER atom. -.LP -.ce -Table D-1; The ClientMessage sent to the IMS window. -.TS H -tab(:); -l s|l -l l|l. -_ -.sp 6p -.B -Structure Member:Contents -.sp 6p -_ -.sp 6p -.TH -.R -int:type:ClientMessage -u_long:serial:Set by the X Window System -Bool:send_event:Set by the X Window System -Display:*display:The display to which connects -Window:window:IMS Window ID -Atom:message_type:XInternAtom(display, ``_XIM_XCONNECT'', False) -int:format:32 -long:data.l[0]:client communication window ID -long:data.l[1]:client-major-transport-version (*1) -long:data.l[2]:client-major-transport-version (*1) -.sp 6p -_ -.TE -.LP -In order to establish the connection (to notify the IM Server communication -window), the IM Server sends a ClientMessage in the following event's -format to the client communication window. -.LP -.bp -.ce -Table D-2; The ClientMessage sent by IM Server. -.TS H -tab(:); -l s | l -l l | l. -_ -.sp 6p -.B -Structure Member:Contents -.sp 6p -_ -.sp 6p -.TH -.R -int:type:ClientMessage -u_long:serial:Set by the X Window System -Bool:send_event:Set by the X Window System -Display:*display:The display to which connects -Window:window:client communication window ID -Atom:message_type:XInternAtom(display, ``_XIM_XCONNECT'', False) -int:format:32 -long:data.l[0]:IMS communication window ID -long:data.l[1]:server-major-transport-version (*1) -long:data.l[2]:server-minor-transport-version (*1) -long:data.l[3]:dividing size between ClientMessage and Property (*2) -.sp 6p -_ -.TE -.LP -.IP (*1) -major/minor-transport-version -.RS -The read/write method is decided by the combination of -major/minor-transport-version, as follows: -.LP -.ce -Table D-3; The read/write method and the major/minor-transport-version -.TS -center, tab(:); -| c s | l | -| c | c | l |. -_ -.sp 6p -.B -Transport-version:read/write -.sp 6p -_ -.sp 6p -major:minor: -.sp 6p -_ -.sp 6p -.R -0:0:only-CM & Property-with-CM -:1:only-CM & multi-CM -:2:only-CM & multi-CM & Property-with-CM -.sp 6p -_ -.sp 6p -1:0:PropertyNotify -.sp 6p -_ -.sp 6p -2:0:only-CM & PropertyNotify -:1:only-CM & multi-CM & PropertyNotify -.sp 6p -_ -.TE -.LP -.RS -.TS -center, tab(;); -l n l. -only-CM;:;data is sent via a ClientMessage -multi-CM;:;data is sent via multiple ClientMessages -Property-with-CM;:;T{ -data is written in Property, and its Atom is send via ClientMessage -T} -PropertyNotify;:;T{ -data is written in Property, and its Atom is send via PropertyNotify -T} -.TE -.RE -.LP -The method to decide major/minor-transport-version is as follows: -.LP -.IP (1) -The client sends 0 as major/minor-transport-version to the IM Server. -The client must support all methods in Table D-3. -The client may send another number as major/minor-transport-version to -use other method than the above in the future. -.IP (2) -The IM Server sends its major/minor-transport-version number to -the client. The client sends data using the method specified by the -IM Server. -.IP (3) -If major/minor-transport-version number is not available, it is regarded -as 0. -.RE -.LP -.IP (*2) -dividing size between ClientMessage and Property -.RS -If data is sent via both of multi-CM and Property, specify the dividing -size between ClientMessage and Property. The data, which is smaller than -this size, is sent via multi-CM (or only-CM), and the data, which is -lager than this size, is sent via Property. -.RE -.RE -.LP -.sp -.LP -.B -read/write -.LP -.RS -The data is transferred via either ClientMessage or Window Property in -the X Window System. -.LP -.B -Format for the data from the Client to the IM Server -.LP -.RS -.B -ClientMessage -.LP -If data is sent via ClientMessage event, the format is as follows: -.LP -.ce -Table D-4; The ClientMessage event's format (first or middle) -.TS -tab(;); -l s | l -l l | l. -_ -.sp 6p -.B -Structure Member;Contents -.sp 6p -_ -.sp 6p -.R -int;type;ClientMessage -u_long;serial;Set by the X Window System -Bool;send_event;Set by the X Window System -Display;*display;The display to which connects -Window;window;IMS communication window ID -Atom;message_type;XInternAtom(display, ``_XIM_MOREDATA'', False) -int;format;8 -char;data.b[20];(read/write DATA : 20 byte) -.sp 6p -_ -.TE -.LP -.ce -Table D-5; The ClientMessage event's format (only or last) -.TS H -tab(;); -l s | l -l l | l. -_ -.sp 6p -.B -Structure Member;Contents -.sp 6p -_ -.sp 6p -.TH -.R -int;type;ClientMessage -u_long;serial;Set by the X Window System -Bool;send_event;Set by the X Window System -Display;*display;The display to which connects -Window;window;IMS communication window ID -Atom;message_type;XInternAtom(display, ``_XIM_PROTOCOL'', False) -int;format;8 -char;data.b[20];(read/write DATA : MAX 20 byte) (*1) -.sp 6p -_ -.TE -.IP (*1) -If the data is smaller than 20 byte, all data other than available data -must be 0. -.RE -.LP -.RS -.B -Property -.LP -In the case of large data, data will be sent via the Window Property -for the efficiency. There are the following two methods to notify -Property, and transport-version is decided which method is used. -.LP -.IP (1) -The XChangeProperty function is used to store data in the client -communication window, and Atom of the stored data is notified to the -IM Server via ClientMessage event. -.IP (2) -The XChangeProperty function is used to store data in the client -communication window, and Atom of the stored data is notified to the -IM Server via PropertyNotify event. -.LP -The arguments of the XChangeProperty are as follows: -.LP -.bp -.ce -Table D-6; The XChangeProperty event's format -.TS H -tab(:); -l s | l -l l | l. -_ -.sp 6p -.B -Argument:Contents -.sp 6p -_ -.sp 6p -.TH -.R -Display:*display:The display to which connects -Window:window:IMS communication window ID -Atom:property:read/write property Atom (*1) -Atom:type:XA_STRING -int:format:8 -int:mode:PropModeAppend -u_char:*data:read/write DATA -int:nelements:length of DATA -.sp 6p -_ -.TE -.LP -.IP (*1) -The read/write property ATOM allocates the following strings by -\fBXInternAtom\fP. -.RS -``_clientXXX'' -.RE -.LP -The client changes the property with the mode of PropModeAppend and -the IM Server will read it with the delete mode i.e. (delete = True). -.LP -If Atom is notified via ClientMessage event, the format of the ClientMessage -is as follows: -.LP -.ce -Table D-7; The ClientMessage event's format to send Atom of property -.TS H -tab(:); -l s | l -l l | l. -_ -.sp 6p -.B -Structure Member:Contents -.sp 6p -_ -.sp 6p -.TH -.R -int:type:ClientMessage -u_long:serial:Set by the X Window System -Bool:send_event:Set by the X Window System -Display:*display:The display to which connects -Window:window:IMS communication window ID -Atom:message_type:XInternAtom(display, ``_XIM_PROTOCOL'', False) -int:format:32 -long:data.l[0]:length of read/write property Atom -long:data.l[1]:read/write property Atom -.sp 6p -_ -.TE -.RE -.LP -.B -Format for the data from the IM Server to the Client -.LP -.RS -.B -ClientMessage -.LP -The format of the ClientMessage is as follows: -.LP -.ce -Table D-8; The ClientMessage event's format (first or middle) -.TS H -tab(;); -l s | l -l l | l. -_ -.sp 6p -.B -Structure Member;Contents -.sp 6p -_ -.sp 6p -.TH -.R -int;type;ClientMessage -u_long;serial;Set by the X Window System -Bool;send_event ;Set by the X Window System -Display;*display;The display to which connects -Window;window;client communication window ID -Atom;message_type;XInternAtom(display, ``_XIM_MOREDATA'', False) -int;format;8 -char;data.b[20];(read/write DATA : 20 byte) -.sp 6p -_ -.TE -.LP -.bp -.ce -Table D-9; The ClientMessage event's format (only or last) -.TS -tab(;); -l s | l -l l | l. -_ -.sp 6p -.B -Structure Member;Contents -.sp 6p -_ -.sp 6p -.R -int;type;ClientMessage -u_long;serial;Set by the X Window System -Bool;send_event ;Set by the X Window System -Display;*display;The display to which connects -Window;window;client communication window ID -Atom;message_type;XInternAtom(display, ``_XIM_PROTOCOL'', False) -int;format;8 -char;data.b[20];(read/write DATA : MAX 20 byte) (*1) -.sp 6p -_ -.TE -.LP -.IP (*1) -If the data size is smaller than 20 bytes, all data other than available -data must be 0. -.LP -.B -Property -.LP -In the case of large data, data will be sent via the Window Property -for the efficiency. There are the following two methods to notify -Property, and transport-version is decided which method is used. -.LP -.IP (1) -The XChangeProperty function is used to store data in the IMS -communication window, and Atom of the property is sent via the -ClientMessage event. -.IP (2) -The XChangeProperty function is used to store data in the IMS -communication window, and Atom of the property is sent via -PropertyNotify event. -.LP -The arguments of the XChangeProperty are as follows: -.LP -.ce -Table D-10; The XChangeProperty event's format -.TS H -tab(:); -l s | l -l l | l. -_ -.sp 6p -.B -Argument:Contents -.sp 6p -_ -.sp 6p -.TH -.R -Display:*display:The display which to connects -Window:window:client communication window ID -Atom:property:read/write property Atom (*1) -Atom:type:XA_STRING -int:format:8 -int:mode:PropModeAppend -u_char:*data:read/write DATA -int:nelements:length of DATA -.sp 6p -_ -.TE -.LP -.IP (*1) -The read/write property ATOM allocates some strings, which are not -allocated by the client, by \fBXInternAtom\fP. -.LP -The IM Server changes the property with the mode of PropModeAppend and -the client reads it with the delete mode, i.e. (delete = True). -.LP -If Atom is notified via ClientMessage event, the format of the ClientMessage -is as follows: -.LP -.bp -.ce -Table D-11; The ClientMessage event's format to send Atom of property -.TS H -tab(:); -l s | l -l l | l. -_ -.sp 6p -.B -Structure Member:Contents -.sp 6p -_ -.sp 6p -.TH -.R -int:type:ClientMessage -u_long:serial:Set by the X Window System -Bool:send_event:Set by the X Window System -Display:*display:The display to which connects -Window:window:client communication window ID -Atom:message_type:XInternAtom(display, ``_XIM_PROTOCOL'', False) -int:format:32 -long:data.l[0]:length of read/write property ATOM -long:data.l[1]:read/write property ATOM -.sp 6p -_ -.TE -.RE -.RE -.LP -.B -Closing Connection -.RS -.LP -If the client disconnect with the IM Server, shutdown function should -free the communication window properties and etc.. -.RE -.LP -.bp -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.TC - diff --git a/doc/xorg-docs/specs/XKB/Proto/XKBproto.book b/doc/xorg-docs/specs/XKB/Proto/XKBproto.book deleted file mode 100644 index 264920c3293f447fa15bb988e5e51db2b2435e74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24576 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 diff --git a/doc/xorg-docs/specs/XKB/Proto/dflttrns.fm5 b/doc/xorg-docs/specs/XKB/Proto/dflttrns.fm5 deleted file mode 100644 index 9290d91c1536c844083efa9f85bc1f4ea6c39059..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136192 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 z%0A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 diff --git a/doc/xorg-docs/specs/XKB/Proto/title.fm5 b/doc/xorg-docs/specs/XKB/Proto/title.fm5 deleted file mode 100644 index 3cba83bddab1abd5f2d4c39a67d614acdb04db9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23552 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 Y?<}7CX07nUHJ9D8DSqLPIV&pu2Zz%quK)l5 diff --git a/doc/xorg-docs/specs/XKB/Proto/types.fm5 b/doc/xorg-docs/specs/XKB/Proto/types.fm5 deleted file mode 100644 index 662ec29d777b1eb2478ceb0a6ecb937af9096edf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49152 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

IHByP2k!a8af#e9R>oMfIFW=ZWbemmxe%9% zo_F|zLk+e0lInhHzZFjzSiwe_hcw}_?<{m~j#sCER%QASJN#B^6^63h`P9o3uipiQ zMXxOQc|X@kV1QRX?7tXiMtTa1g5S5u$_VyI;?tnv za5y}l{&D-VGP0F>G0ws-LG6!H%k7iqH)Ulx z%#O&v{Vp67&jsMfPfKa0*f|4%{N)LjEtN*rjFDIA0t9 z>?@lWMkBiuB90eCKHN{mI}5Cz)LWPmALcB+hfB1LS%{8w$q)Q7JqX=axFYkRMbzbv zPuIcst97-pD|WPSzi^|gi-E&l4%&ntM8EEghs9q%CY8gyPtvm_2V zXpLp%+7so*jJn>b6_fEHXB!fnA-RodLllU-rAe(axqn);4wsd*;Fm%Qt-dgNRsFfs zi%-Uef3~`1Y!bv7`iv}<6@QZE|b81sOPiQ2X`T_DDe*@#!aI4GGji0rnaB2uddKj(cpjULjI6jZDs-QY zVCdO&chbVe68mNDru;^7% z3r?YE78c!H@Nxd%ox?}uto}7%6>D!{oLWA>CoB9NM@BV$Jwo2w@x9H+>! zApBJOEN-5ONu==#n$8+a>7AZ|cNFJasxp|kqG|0On^me_TJh=nGlJIA~;Gw=sX4Yk))O(O4vI6PKwSpcynAVBIGh<$AUf?f_yp6+aVp-_z`KZ5oEK*M*h_?2Ej4^~SsSu{T z;o*zocRToQqf4!&K0qqD2|EkhKoQijGX7NsrE!On$*Xzc$R!IR1!6RHnt1Wp&1exNghyt`K3rKReU1>Vay%__&9 zzkJ5w+RZ=m-Zp%0Jnm-lCT!Jm==epqSRD^uCM!!oYc;(2O!Rxd_p#xDc#PhjkHHse zs;A5;8(U%qkK-xruwk12<$YI3=jQflxca}w) z71Mu6(l)ZQHHL^4{w0AzOriU8Ps+lBAFwMyh!JgeJB>RYbuqYUXFY6)zHQm5M|&2Q#LPLJguf1L8JCB5O5>RBH5jrGszsoY3! z&nHD6)-BJ8QIAz27PaJf8%7!v1#5L-;z`0)#zvb~tJYf*;u^n}C(BUd0{PGE=K>G- zo4a%ZA371MZuOO$$=94MhCU7m9G)16HZZ@3S%@R8FOOgmZ1nNWJ}%(lUcnn=e@%8g zVRjQSgQC@QNSOw$e)TtEw~`l3k~?4y$7l-eZ{}Q@-)?z4$LBH1NoOTXfU?%W|D<^q7{k5_zama-T?H;gD^W2;^@v!^o>Q|vQNjEm?=EAQB8S;3!d}eCaSAE_haK2O!tVK` z+J_Q->dvTCE>~Hep^GQ1CNP5QdN(tZIz!&#Ldf|U23ZLk4n)XDtG{yK_V;|+AB6l* z7J}~;IPYYlDaxk!oI$QV5eEi%H_9krnszy z;o#6g93cOw4AT1=D^{9I%r8M4rE~TT!bCE&)C5ha2rZs~b#GpaoQ9qfJLDgxSX06? z_VD1!>Wx{rjYu6BVIm(KD)mRTdi_9z^S!o6tl!CT$kt;S_7``aNv#Po5S+ga&IAK- zTt#}da!P$!X-uehWpTjYqshiwVnpfcZ~-avwlv37T*#o@b|}TWF_t3Yxq@1vm$hh0 zyx56gM%|l*4UV6XbIZtu*(eI-n5@K46F60_v zB0`>V^?3(}BG*0|RU3`EBp2CoKG6hRw#0&fAaxRp{h13vc5zweCS-}4#p)|e_4 zy7L7wN3Il(%Ski|fX%)V)Rc~3v)QUxJ?f}erXp^b%|}hB`yIGN!bLsgxJfq~EuHqT zw4KtCjV?Tp1C0q*&NhRaIU_E_(qT70Iw*C4R!8^teAXYtKGQCWP~~umdn5g^CV=C5 zNR+o*KOwfVDlCkTJ{wdy`gY{pSu?RpQS->&;2ll=&dzm z%xSzv#sHajV}(M5?_0b1ij8ZBHg4arq5sPg-;h3u7@=@#sx%8ZpGGVEPTZrB!0RBq zQlxa%8-$iTOI@*phK9^R<8dUfi)w8il*4Cjg?@}VnXd17G$b|5#1=$;1v{4UV_O4y^sOd;KcBD!gibuYH@pC-6P==0^Mz z|7Bu_uXQUEI~=#~EF4$tGnIKh_blXrm%#T_>Kyx|`OVnj90<6`zx^(}Nsq2YlsjO*%uap|$4I1puG2jGFd zBE8>IZJADH|wYooJn^5 z|6&hdLl%3jmg3vAq`iN55!xiTZ4ECAe3%b*xpdOqK zSqvaEl8&S(|1-{hdJ%B%g#4c?UOYyzUVJv22VGAtw~?C=D_dh0sQ=g znwI(>fXMo$!nQ0uM1>NPQX0J^=HhDu(OPUDQV*pd8H%7HNUFF^Mw-3+C5zgqbfQ-H zby-~C100BZ?qI%IfZ93Ly2g}YTCB8H1R|J_*&v8FrDS@nez)I1$0}5bIO+NDpUntxKaj-*dCluIE{V~PCxHYp?j4mVNGAhL&^9+0 zNgOIZ64n%_caaBYV_ukVc}IPw1%6XqZI`ti1Exeyfz@?*wX;?oiKb0p2qP2M%)-Ti z(i6s(MM73r@MO1qSwi*oEIh<+BXiD|U|}yV6sNa>18!QX6-tpNhpYoKx*aNm|%50hI?lujq7D7?_yf6?YxDXBR90z6x zU>*T2uEg+LXC}7m$IF7FhB4SjvfF)l23QslvNJlqhAtM13pMII%2*d?auS_OScA<0 zwMP#^^(=+8%;|wY5kGR_VY&>lY_P1kS;tH8X!wvG0iGD1!Pf^-5+YT~kb!aBJDq`v zoXnnyI_8e2B_=YiwMV#6=n+%VNtW%ay~RRjL-EbK2YMz%G);lTCG+DbAr{nl2%^f!aA- z2<%Ne&(@Yc-ai6+h%=3kW3BDB$%>fh%LvE!z2~H!jr=1Q!apr^Kc3GH9jZIej(IOh zJ$okV?MpnL8u8h+wW;wEYCNl>dSuvO?^UVi&+?C;e)zOP_Y?U1rpoM8sjQ!c{Cn>i zPHNw3J-_jP20wpMq5Fx2ZCf|&-Mrz-4V!)MQ%)^*Z_oeugScmB+YmSbd6%00;a$+y(~o4!EJg`s-YCs^s{H z7UEDHhRU%qa(~)Ju8nHm_Z(P7&Iz@T8@1L!{s4z+sSRz&`M@c+c-X1UGvfv<^4QI1_Nk9zY^v0ZoM6!MgFSbltk>-&*G)~kWu}z zymQuYG2TBf@}1H_HSfj?eUwn;o`&9ZiI4YN==opkdhk@bMSH;UBom_1qQuotq!_)c zSVDIjkxvAr6IwHOi379P^IPcCU#l}ALKNyf##9-BAJtOLMWWL5b9;V6|kLx2Xk8ojG#?@lGe&pHZ<)nlogR zmE1EOSRI4~{jj?f3oujF+_bDTz=4eJX;I;3eDy_u3dxO;I-*f-i1=GP#7W zcY7_l1e`hT`Hg)(+!^ki|0MgD^Lr!yjsG&agl}}`bS|Nr83Fm>KIF_)ODAtuoJ2GIdD39 zG@L7#Hs*_Vo5q0t zz)xDTXYdZ_f{M?7fxly1{ikCW%b}99px4UobF3ba{78?-51`EjHlj5h&RCjc=Wb%7 zSgBzD_ScSGEr%X@Ssqe2zv!wYf{;9)RZP%BsgbbusLkH)d5&G{4bi)*YeJ2hvGnX8 zbSU@=I))KH2L-1(K1k??5v)>)(7RG1(MoNFcZyT*+d#f#vqj*8JVbE znCix(1DO6`p4^pkj_avugxE#(y|HMJXKDE|-JG=(c&{C&pHP@1X&I3N=-+LdbZdwCY^9-2Z?z%kke4o;U-Qat zEij*lY__)}>%1wqmY2_BzonL;g|6?9}h_dH9U| zm`JVjcJG}IydvNo8Lz5yYy?M%co4@H^6!1dsRyowUH;E-7J5OU`$>gO8+Ki>w&+8Z zpbyN~oO#Xn2Ww>|c1J&xOrXW)NYK{av4y{6vmIb=S{Cm=9XK5!;8am7u8&HBG^MOh z>spnJyQ{yV_k}#1Y_TJHLnMacB!aEhz29VEAr{`D6)n}H)OK36oSmj)k}?(uc?Pni zV}Kz4xC=C)pUeyEv@=N%h)!Yx&cO34yX6sUR&ENGqx+cVs7&RSIPi+3 zBXaQ<5U>6(M+YXQ6Lg}c4a#Jf7zeD4W9f2Fa%#EDA^K~5IZ}ICZH}><@qjcQbDBCs zQ_(Cb<0P7HU2cU_+g%P9i2OeyJ6EaYRy(!a(8gAomAY^~YF`K4xJSlD zf9G~N62wDm+_;C&BDdAvw#`?Y-FS!3qHecGkE`{E6Hy@`Q#+klr-RQQtinz)S0k$9 z9D}oc3rU-=;Vi0?-{CvBORCkjtzb-L;;=#7JLa6L*KsPAj=6fsn{t+ThT*5ImBG(KC|Ha>SIoxrZ-$F{=nX$ zPrsXBH%s?!uS~E zY&o5H2AIGQ_X!YF{Lt~mYvE~<3)s8^IZHGGECe|mc#+OLZC|I`+tQ&2xFhMrPHz0V z51L5*((%E|Vc@Tx7*V@`QxO$batzFL`QZ!tKoACLJyQu^!uIG%Q$z^KrQ(@De-<_8 z$=SVf*bP0sU9E|akE2gSR~I3+Yt+M~usbN3VI#yXiGN&PdJbe{g<2O6m!7zuhg=iE z^)+JJYQ2Fl?nnNC<754qe++l9?VD@O#8@Y&X=9$<@MzuG0Cvfy4A~iR*m4JMNBCzV zCzY7=w#Xw6@|kKq%uY)17LuMjb8w{gqWDU?ZaG!&f-LMJ{0a+_Rh@9v;M=$CGyz;P zd5N#ZJv>pr938gf4D6*@m{SAl8j81c)VV->0+4;1*=E^dj`rxnGJIjvJ}qA)8z{+F zbmfra9CBb5LE|Ini#Lj~Hi?+n$I(8F`H<`9(MN5^`LL^k3V1p^W{bV#2?l1C@ zxAm$H?B1{kbwiVC()d0tD3~o|x1>9P5id7sA^o5(Yo||yHMpap_eH^F-a!Y44&ZPk z4Akz}B?2dD_qD~V#X2WNuYyRc?BE$zhDfQsVTw-5|8p}i2O5-3BF9C{^%(33!hG3T#(Im&6%viYzn?~aqdGm{L;m03yw@9s zBL91_Ky%YLE=afS=u9iRRPvhhVJA81U#HcEjz2MUMEQS*1GfWkX(#u`wWBDM)m1N2 zG0s{6T-$-u7S=BEvL>6~Y73^lzJR#0lm_zeeaL}dB>d)-I#~{*5BQLO?;FndweWO* zRi&wx6&BrAxU@1YhZI3nV~FFEaXX|*RH6Hi z3&=|yQRfw_%_-c%5-pRabzNp)ZMI-(C(ZE$$ku8%EcwI4S zt{uc!+E7ui(UsZHSm@jcUF%k0^ItwCjHfvHoO1X$e>LtB+0bgg&3rWk{9#TbCJP7% zC`ZsDf)E))N4a%Q-lrTs9(k()sjV=+NTgi@Lp?ooyzV;1p(~K*bVg>TP@*l4NN(84 z7xjjb|LQ69p3%JGE-W>#RDl9t!rD#Q&D>?a`4!~P| zB(HWPuf=HucqP??)iPV!;#=+w#(+6gn>TO<#CZvRac;uN3ls@!?Wh{UoBg0S5~#*e zg-*RQk56qo7V>9uQkK9RPcB`V_>_TF=vo91HU7!$KmJ?yNiA`41wEY__J#23@ap+z z*}wQ3vZ#j8O9=nOf0_NqZ+3T@xcDUd&cbP>5VK~U&;2FhizVnOHb-1+eK|Wyc(pp} zDeO_{pLAT@8$JOBbwK>Rl)%FPp^i(6Q4%dA`DgwK20_&jl0|e@Q8`^gGe`N7MVhGa z(yG~72fhK_p4xi^+(FzQ`i#^_iS@scuHN#C5OXZQNPy6Qh^d^TA*!`Nh<%n}qBidD z4WB4>kp66TeipqG8mfnAk2+^2)KeX}9e_KCCRdY)3Xt13`6<|`D@!#t%LI9=+8Vkg z!LS5*|3>uM62*#V^ouvL(XG6LJR&MhB=FN32jYoMdc3EbsHmcYLyu{PVxO=S~kZZhVs(0w*~>($it&RFHJ7qI%( zX2^2u`DNfI`AsvBmGG1W+b+F$0b>X}C9CbDFV^#jKmKFS(^~i>91Z?QN!S~qK+%IVFMd;oJXh1m3p<44=RUe`KuxSmm~HAzo6%A?uEKuFCF#uKqi1fiS6>d7 zAxAf))+BVxF06*gTL~vhhuP9CW?b&Pk%c%J^p*S0g00w2B1`5C^Yu8)3r?(o{>UagqdYok)uMBlfd;vIDn+aFOeTdS@~BB)!cWDh)VO z4cky%ET&;A2PKFJAB;oDR<2E&D#z{N%`jqzyr(;O6p069;wo*eGS&1}F^B+RkwgZx z?VHuT=f%olUqZ+trRWk0oBsF%KDq&U&v4-NhRdaA!uSw|BUTx$JqOJZr-MmY1a2}#k^R9K^cMv}Qo`sl|V+yw-0V;DMtw;Y`VV}5n1l1blUHAOQ z>PFsyEIyFIgWR^WPl3YN<*^qD$Rfhi-bMXj zk~Yvn{bV3HT^y?syUdjE^aAI7@2{LOdcy&ny{V{c?E0p)^c>5JnL+o9;;v52OxV^b z5Ugf$_ARO7K9=`h;lS)5Oq`#(M%a^#jG5V}2r5Au6JY}vUo^x~k?{Rts@LX}_eKY1 zkuWD`luy(N7k#SlalY>jpNu`LX*Df5v$P#ZDuuNyiN;M1y3!>)7u#0%HtHM!7-(N}oCQ z$n(DDz%Ls3Bdmi)G6?+;Cy=IP%N4`(ux;kNesV*Cdyzq!`I8z;vZ8yFg75vzfm;jD zMc${T9#dF!M`1mT7fl14RGs%JboUi}?6D{Is5e~U52CkXX&9Noyf3*KzUKI~#;MPK zrH^btHnfRkT>@IOv#S*`gll1ju&rl)g}wF!Zjo?NTj}&R9Pp_4Am{pS>l#(QQ?D{+D0Gu8Q5pPyUl?A4XSRoKt`mD-dbh%FVMOs~|ApuH-m_iyqr zWk3<&|pYsB>{3QpWE*2)Afc=@sC0N z(b-RX2AMSz?6lpceGo0t;>hXwLeMZH3fA0DYOER2PR``^I(T#d56W3%9UGfX%pfl% zbmNd(zT0ra^PKjm!bZC3m99V0og`w^tc|u9B*W)wSv;_=`;uxir0d{Wqn?=cFi?UB zM4>{^e80waw#NS$Lw|r;>@cR-3Utw41w}aaDylc+X0vc{uPMT`_%Nf^X0GwEnP1aI z$7vIRfQN4;vul`(t+0TUUC};7Aki9;zTrgLH#Z_=e3(11`2$%G$p19<0C0Z5j3O{% zl45CGn6X!toqa|luBEM(K-V?P4*zxH%w0NX0v@ewS6f|W0*qLyNCf6W$XKmJExPJ1 ziZfi9{MNU+Pj1O?;aS;H1%Xhpu{+#7|7`iE`5$XBkYm`0Kk;8CzxD0zE|cFn*}k(7 zIjIWzk))r`y##l)ErI+i#jX(U59>bqhhX3+|MrV;w|btZF6=UY_or&nYvFmwv5uc$q}Hcm|MQ`QcdG5l8xKJjo(PU^Hpd*m6~k^0;Ax`Q&j$%)^5|k}JCY~) zj3jswy0~~B%d1i6d{S?C0rGHTYCrIH?&=+lV9X?H(t|c7_^$Zh@3~QyP z9QYl8KZyGYuak~Rj;wHrMOkM@Fb`Ty0>vRmD)4s&=il@hZy+uXfw`an$>$REKKm#k z8dEoB;bZT0H(i!0JQdi6mJ$PGQcQrT{f!!mZ) zwZmXD^_N+guqFr13{yIy)ehMExJ*di)(mPu7|&^VWTN?&(bYd>a5)P3M@Mk_5m-f` zx9l!BD$i&(W5nS1o=8&9vjkhpVVvthFEWAPRX>z1_j3NZuUT zq#mcEi#hf5XPkFx;f3%^XK{vd(Vf!Ie22cF6uFE-_p*YIX36T?&hx$D(`|D z`zq$JxJVIjp;UvwwkMn3ezTXe;Cr(?k|H9LG`*z`ydvpan^os?GPqK29K9R$NdaE3 zH-Q~<5R~6xl5IMe4xmq6>VBl&5S7EYN$ooF3fBpzrstp&kY-b~6A}o|Kw)6FXhymV z5JkEE4O^I~kJj6nsk@Ro2p{?9op4}Nca+O%a&X9nh!^y!e=ZU|Ijpd=K?sToOgXYU z0Y9~hb392J05{EhYaRLtJjl{M?sSm6CFhJqV&cqUU~?Y?Tu?N`$K`$q-5)BORwuo! zS-9|8P}jqwxKrrb1;NC0W*HC3tya3TtSmXwh)ro%hkPHSmuAx@}Ltm^R5Gr+a0z2Qa3kyLPxBH9Et(EpRXmaW{$itO9~ zsV1^qXQ`nTMwIu`HWu*VqwS-BIGf34f1do5sI9alOVhRf7OjehlI?27Ol)X55KWAD zX?qH|;2qKDq+HwAM1eU77=H?S6L!KT5*&BRDyc+6YJX$WOWV$i{G(%4RnEfH>&m(v zVg$vrmrsyxV)17tC836;lx=1BEhJiV8VyglY9hy`F``zN)LWxf&$X2uTyOLlxI&*{ z5RE_py4MZB@egP}492(Z%~1qIMaaY;r3t$`@^2kdFPQ=GsyB4eg1T3uG7gm^@eNw)sX*-86W_(ao)}SOYl;l&bjy? z5KXYDAux&+ACe5n3C#!7XW<;GmZ!%xhmgbgSX1ByO== zm?u`Khy|o%TsyiTw45+C@epVT$w`5)_0K~53-X`MNgYA$))Ik}I_ZRW=Hb6@$@Onzk>Ii9NlOO8 zYt-{`FQ4s+eVu44*HK(*~>@7UrZK0b?+GL5JeepTA)wRpBjfXPOKYZqh#z%~(=sAZU>*2Ca|~@d?C7KDD79)NjHNXIs>z_SK!_2PImONT#?{|AwyhR! z!2Uo}ZANYZhel4e2|kEAB^`p!UMopWkR)GdSo$@1+18+S;5B~2vdD%({%>(?VL7}6 zBlv1H%u2ESxe>mNZ;jH@aShgy2_t07r=dLks=CdwjpguCQ*Z&*|2j6i z9Bu-fd5@AO8s15c%`S(VaYi(Hq&(p*b!>Av+~Tjk{dV<`c>;NWCpmVxH{9wU!we@A zI?5{B^jPXTPp%tQ%eq#Nf;qgE4h}`&z*>M}x@V)|zK6#s%yVpV#;%3i{8g|GPb{4J zve-YklaAzq#T}DzS%6XYrb6|H6c5_+{2~05**6zo3U3Mv;nh#YFx8pZIGRbj- z=$MstV5WH#ge^|=2i|NJ7WBkk__E9EW6K?17TbV29j*f?S{|dhVU-vkNga~Lk--yU zqAIQ@krpjdmV!JtO@}-NAJBV#7B2E<41*BD9f~XH(c_W_vLv_+w|IACVWOYawQ+t#Ge(LB z+N`xj%1&G6ObHQ$v|5($w#`g$8|(Dm=fEt2UynBPD%j2%&~G9Gw^~LXk{vzo>rrn$_WUM8k4I#F1PUZ{}9I-BwHkmgc^T9^#1sixY4 zJUnkipbH0Ji0d#4njh|;!Il%eBcfoEK`~Zk1N0D&CHH1~th|Ho6CIb_h zv65Lj(M(9dz*TV0oN)aR&mbfO`U&S`Rk+WkcOYr_^r7<}W<(6gPMJv?aOPH^I$88%RK3EQ&yJp1r;SAg^XUyJk zyU70z=&!7ulYl$TJXn0NFcLUOXleP-Yp$o8^j48gTC{x6jXAJ72n#lKx4zQ`W9i`} zGiqguo4vGmX-XQVP1-}#@21%%DpYPV2Ie`6o({|4mlbIhpG8pA1gYFKZaTb7m} zG|`%(t=>$nv>%%tcnk`K=dhw7X{9Uo#6>%JS%tky=-h#)4y;JktgPG2`QrTCTFyoC*h2a9xO1$<;?CzDIgQ>`k+yjM0?<@Gzn34QsasuD&UeJ;g0EPD_=dkvKd*&~* zZ}a!;K)d_p^b>vG>t1Mb0t@Ur3nQftwe&N|9YjB@CGyN!_DS=bbt-3Bjc&gS_o$mZ zg?o|o&spkOPLJDixJP;pUCanF-qzugWV0#4ayn_EIgU9<4(w26&dgJOw)UhBl&j4@u9J7FQ}fpwR}d$%Cxt*EPlD3YyNAsI$$IdaInAKrI{ttv$6pyQT~5nu?R0^@h#T?r%)d2)36! zZ%rysu-{(|9ruhB9Gm%xN8zRi(o(|KVqTNeuX+Cv!x)EDNb`ex4tP6`|2VcCy-V*$ z-PVNkOKFR_vqaJyo0Nm+n%Ge&GiG>cpd3wQgSZOLGVF8U6#?%k;OIE}K02%pq@tplqFScBn{ z)v$g`vTps!0?sLwa82gQfHYGF-sGD{1K?vc8ttGNGF=sp)Ym@hcb^@bC= zMq~*5X7k#K9&gzpGk!K)3b}!(&AkFT(@va4^3glwn-07V!edPloi6Q(ao+M$nn6ix zeg*ZB+Q;X%x4ni!s}^T(CN7n*ty5KO#=w+*>>bxE_y)X~98tHn*Y? zNIBPO>SRS3*?g&N)Ti#s5#q%JZjtkb{BJAG;4XVOX*?b`D?Lw;jnVr;HeCV_54(zz zNMg>yIcO*prPpjgVykYfkz4G*sfCmND(K+e!s4ZcZL&QnKB>+!Ll}_PiJ;R9-7C=E z>PYSk=iT10E;%vj3rW)I*)uVbaD?zK-R(9dMdHwl_l$6t&J=h+*VE+Ab>MUmPFELV z_J>;VL#J2Ri5x@TYj78J0{>wplFE7>g3(*w`m@fRxz$;?ejfEnNYi0{l76r|M;b)3 zVb0jvw5XSe+$qkIL>#K&mQR$f17cDxqgh$-g124CU7m%DH5n5ah({nCzRqNYBl4fXsnVeJMfBJTkL=I>y)yAit!yyLeiS85bDVbAmli^kjP3ooRafe{nhf} zXmxCKS!J+{MBA(R@*F+pUcu5wuHTK-dc*4x2b9$T>NTnny;c9nR1EO7TK99~n-;ciZS2+C$W**Hx z5~wXdnOOV#-KVs~+ISARdh-)r8(up>9#pig!E7 z5Z1LYCM9D%49htBr4#2hpXb0T0@mQ+NQJ_WOn{{}H3umFuSmt~hp<;)wtLx&vb;7o zt8p_Mr`K>oFSV6TmmYr08&h%nVZfMtlyUo{dRHoLpM6wu`@K$FTn=vleg{>*vzIM1 zbE6p=BYYokt(Qhq{q}pqBeI`8;;gZuU3Q7}(i&Yjr+cL>g5G}yG8lxqjSQf^>-PBv z+`*B4btd$^!xnR`zWR+5r`N(~N7_L04LshIsne>L_T z9-W>kc}tvlw;cXCYA+u7e)SnnztGMbZso5)ZuHYRpCTPRPIa7Y@uK zVBUx`e!i}a!3M97e)vg0)LM8{diq}mgg|{bT!r9NXHmE!C<1vHi&FJ&b^7F$!{_;{ zr=mwGJ9+QUR4=^eV@)o3#5uHkaW8D*lilPWLu_(&B0DnO%$hhQd{kX?I!Eo+%KN+n zuNdCs52Ci@p~%hmot}NQ@CE3n4%=(isSqqpuM)Pd8q#A>j$e=^~Qd9E?Vsbw~Z}?X@Up%X(V;(Y#kzpe4Flq)7JJ=$_F4i=d zW>y%5?tU9X%6g9KB=#8-T#CSjKK|B+&898rI4)QEYioju)8d|6| z(hXudz^ZZ43BEKPK3C#?PCrvO{5P=usOcDrt1&oQ(^RoYEEF|oMr@J<-;s>Wb4Ze) zrn7`? zJ*sQiK}K64sXKh)1MZXIfD!%Qod?j9KG_p1hp1{pM7KH42U7rLU|1_7e#n}qOc%%3 zo`f!C!m9G%g>Hk$O_#d5KILQoJ@UX6#r?dZt`}|B+Y{fW>P3MwGD9{Khhd@caKG1Y z96kS1Mb{FO_>kdFF=+ChkHbqc06u2!#aK$1U+MSqmf|80*Kq45ebMrBS4)1a~hEuj724 zdQ}!Sa_TdJtFu$hgc3i~?l{j$F)AQb;m!27=SwOPY0H^-^V#CDWLZ3yrC@h&Td36QgGD-T060#VxTm;#tVQ`3d)id*`P* zBtRc2$bTkw){po7uzQJ#wHMnF7H(2%$87fb+)?<)OR)aP#@Z*%?|JzB-_QkYDwyYI zOP;*sf^e^TA$r~qnP+;{haGzLhA)Fs>QeQ~bnej91apnBda`iNg0>QsH7h!EU4fRg z-L2vl8<~Z)58#|3JpF%m@F)@w;JA_|DCr>$<;$!%R5Nz1q%E_}8-cG_dx+{{^*v{t z-tZrgpBq)XF`ts83Xl^=Ga??>%mSxDADppMJ+h_Xhl^l^9rz}lomLRPNc|y;18VH|?`Qp! zB>t1Voh@?j^!obDB*Igc^*khO(jB2P2mK-c-h2msku+$|s*BuaEe{dU+PKk*kG_40 zF0FiDFp3={Cn#iSVh1(2Hsehl!&s-z}x9OQwv|= z5BB{~z1aEy-GkN#Kq)24GG%6QiK%tGWhrSDsko9qCiiOelTWgLv+tP92|LcoQ)r1O zz(ia3f%UwJRQ~8@_zj0u5h7vjr8f1V6HeGbRU1vSwM2VgX?i!L@=3Sg4C2ewd5qQd zpfV$8P_bBa(C|ezv*g|6y_D-oNIs;4JoB?PepvJG9!YTMC)Un4^7n%q%b4qt`4 z6erasDSt#95=&Y;vefo6JI*R@*k8j*pn#q}XOFmbUF`pr!&f6N$g8V}?=oE2b35Bae<5nPJwIbf@-`MY>x4!M3yR` zcPxrkD~NZKI*1Oy97J!U{aO1#y+v{vdqK@o3f(HY8S?M_TO0W39;5e#97@7hOL~kN!y`aU2hCVbwk1}n46jj-YTL~1fKSyq z;{7NC|485W)z}tuD~WY4X++H8aWZaw37TxWGB5hhTpMR08vjtviGzYN0x9hMIs^MC zaz7K0Df^`3^GUfD(MUrB_2tku`N`1C=rR0_a^pjwx<(wQ>r-WngKYgCRdTru4$OD# zp%_aYqg%{kY8grNEZ@tNl5&R#enS(@^1)_fGqudhbWUPVJmI+_`5d{)vs>7^eTx`> ze#W1LamI!OLHiYIj@>$^-tcwEJ5Q==yfzu5nHFjIT2SDX{cybE1EaOdb(_w&zyjrubznSZSGf|N57mj zoRzI`R?SyWcHS!zPNk87v&wz`%n15SUB-tZl=w%3?=n3QXc03STiYir7F9s_%!Zm+Noz&sM|RQ1*nkmRQV zF*58booNYRaX7JBj?Ok`f8ZoZshI0s(51nr@v#;jGT`+_r3m>K^>t_N#DjcY*Mla< zgZnae@C5b_Q=moNQkotek58>|2G+J4|HtNC@Np+NPW>Q@2jss-ub-e124@sXyC`?7 z(=LTLr1~d|meNXRg6HpA$btR`KhNS&Z_uBN`{8S{$Vl*mF$hm*JS@_rLu$QN;?s6Q z&!|6U;fJrsSx4TK06}!RT7zb;JIg<WAKM(bz=R0GS!*}_EkpHbiap*)@NTN3D z&&R3JR9G$<`R(?`68g*J2<%C2adN=5@ZHEVFH_q#nLWuu5ZJ&w^KMewpXAs<_v85;QEjxa;5lD9t=onZ2fXQ2?0lDuC41(2tYlhxI9NPq4KN^op;^(kkvs6Osl@~iqz@)cUZlV?ua3!AzK^i6R z&MXeqx;nxd*7#Z5!zZ1MUrs{vN+%&R!fi)EC2Giq?ky;3Dh_}PB`FrKa%UyliW>5y zmqn4hfVk-@E0>8jHoRG37_F;!O!W_1b;WlcXLny$zID?Z?xMC*ys~fn6l*@IC6HBpZw<3AMUp zJ3Fq)JsU36r!d{D1oYM~oH2U~KayPe@H*3FkvJvTf+0l38VSNlLQ#!6<&A@AtPgj} zWKA`8yq%`J;|{D2!a^Lf2dtv$jv5A{8 zr%IEfraw8a5k+XPm4H6*kY&CYFSpa2)-bu#voLXPb(dxDEI%U+=w$yZ+H*(2S6j}ixYTJOo(7(3AQV_J2si6rkJyB5G#&c z-GNmEtYfJ4JO?&UpiQ{l8M7ISStrC)J zbWoIyCPF0yjB@t46d?{c&8ZvcAPm^h?FNEj@MON$15Nv51JQPS-D7+T`MiM@11rvx zM1~~l)Z?9+f+FEye$ba-5Z&R0N09}r-TQk`sJ?otQ{!6;Kj^O-si4o?;=J^&u)XHC z)N!7p3O?JygDX$PPLbN=yw@9k2=O<1hYmr%(r`effn~&S==69G)-9DnlB}DABV56H6AK8mBoQ}fzAaLf zEWBpFn%3v!1*I6Y&c*FuWtUBr(e@q5Z?2CXNPn_kcL7O%2pY#39Q`6badLO)3E0Ts zawICLDLmz*?FbN`#MwG)gyhqwScnpE%FMYAtf2s#>g%K?GE1jh8~lIb-UUvs;g}2@uQd&a8IO?1PzIJ&-Xn7Jg!5 zTYd-MykFQ!oW#CyoY>fo-*Fy(JI?R(ck}qJlP__u?Kp|AW6=HotGmzXbIzGC2&dPt$ zf!RTr@c-{6t-`O1M6d;vql3i8RlQQeSBq?lg;RBGBnW&!jGnLV+YY=k z;ej`9Vu#~3)XLyJ9vr0=1aMHo8-{0%FyfTsKj|NX6)Atx4B{)M zZ2N2_Tj@rnfarxddIfq)_=oiGtN;I?*Z7lG*e8~uJ?i8p+y5)hW_8^F{jY6~V_W>$ zWBK2Hovo-hcnWu-=vR;Wtb?aU_7jjjN7VI&o+YsuwstZo%GtC*Y}XY~lkTsb{z}S@P$hX`6QB+X;)Yf5wJ!|VFBpc)7oIl(9{Ro>K`0fWxzUiLs8|hH|ao* zZH7)EFNp=5WIr<+#cegRe}Z$;hPuz5WA_HuoNn{@sYBXmep086ENo*cul7CPvEi%P zPf0Dq=XqbXcR|cf|Fqb@H>b~eO_Y>lsmqBpFxxJkE&Fk=6tmGkgT1rnKZyd4ngtktuaE*2|vJYcK|Pp-UjO`eah07{PYmU-Qb2j#A2g z4l!*XRh7l);54CaR?~BdREld0rHXZLuFqAtM=-JzI{=sd$o)dOkb7qq)8^dIE4F+4 zm^OV|lBh|L(sF6^{|p7ZYsuE<5rD;eFW>GwU&?;LA6jVrOk=PJ^Oqc$9fXPdYHO!=%_m~g+{H*c z;M?o}2fW{LV3!FS@oZzW6Yw1vvmhR==8}HsI*3z-MRsyLQE(LM0-8N0dG_*8L6F)j z(R99P+h@nK*o4? z8tsDsAeEc6&Ic_~3N0ZdA9uD{p9NG$mVlJqn=qpOZz%MP7yQEqyw622GL4+)KMsHX zC57|eUC^2YEgYC)PUnRcxq@Hy{@!`6RCu+>ThSro^WbqJPmS~_-TlZJ4;@Zuz_<=5 zj&M`x0+6OEBt=Kf`@RFOOn9)fOW4yW&3MX9MIWH`s4-}B2?7cy&19B3_Gq<$+!4^q zMVH0uP}Z`fW<0bxsU=oPh}|(FBvMoeWm(m>qn@V7GtBHmz{nxP9Mfecdt@UaGVAn)o zEki8|)i#KfU2P0$pQWgvN$8#6f3-ac8@>Q7@i2h3(Ex<)1UmcT21aZcYKlfB=|dCE zI*wo2#vw5A`)FmDzkvVMJr3+LaSs092*D`@Op}j>essd8TR*;tcBzJ7U(Y-JHgXw% zZM~^_3q2E3dudn`L80gF0%FS5Yn`^G+!CChSJXYj;=R)3V&LdaT$ezVUwNX?GTOcN zQ{jV@KQ)1qvZ3>aH*r2$(}Vo~b_Zq$VPYIeprhV5P}~d;M6C8HRu;7=;S-8TICYFC zgRy?Hy#JBB_#S0h_!I~a!e0GS67Ipex|i-Ty`0DsqQ_F6f|SsXIu?}$veAQ-wZ`D+ zB{{`VEXBinUd;Ea-*I4;Ial!iicr+p#sfb1Uwz7HTgr9#L#UBbyPd^d5$(b;VhjJ- z-0`Q>mmJs~gpD;p0Tk%I2-Sq;2$^XvbV!fE$Q5CDJ_77$4cY8;#9s2AK|CX8(nZ|! z_3b2V@c*LHVIq+@jWr+|>7@ z6UiDEb?Bcp(ec7u;-!n?!n*fz3HU>Z&wD@wFE>x)U?lNhPRY{Xg>_Z=q20scpM53y&3f2J1@#A|q&J++Gn z;n9P=2y_k+ujoy8Vy`fITV2KUG%ER&YCyj!0#Y@@c&-f(Atu{NC6wh z0AS*3I`hjS`@Oj&Jn;WLQn^d-&oA&*k)2pk+;14I59fFk^`ds|vg`B0T^0%Y$6bbT zSVK4)yJyj|5XO2Q7QH|(8J(};*2H@VPJLe__#gKeMlj1ci{2kPFgpmdUISi{gN=KErnwhYEAy2i?mL=kO=4fcm4Uh(wh;k3mwWsO zQ=?c7T(*w95hQM#B>QM-c=u@m)fz0V|J!e6xqf$2D5Wa)kBO>fKw3ca`(Qwy35 z03a7)KSWMc=TDgb0F6kc}7^U2cP!r-O>MqjADQje7mYfzmakOcof^e>5 z3Cc4)PNE6Q{ewv1W!{lXn;KrXLBtJyC+c@Z^$8leF66pZ)omMRQJk{Sd%iu5x}$dF zwn}SQYtMAZ*p$lC)P<`ZK~0b7ysMh)_BZ4@f6DqL$O&@%K-HX&F+cA+r%-NF0<^AA8pwFj*|=E(9@O9m>H(rxlRCvcuJI^}d?#*< z#eD$L7|Iv} z1lo_(mu0n0ft<<_P~*oUsOHt`6v~u zB8boQ_rJvQzwISkRc}H~eS6Q|OTz<=BTWt2UATBvOmiGc)bVd&xhZ;uZ; zV>v)&!Uk=fqmBD(;Ez~~@CS7*&OU4$S0mR0dE(o8_?n>MXM*U;I<#&GUCKwDvFO4e z)h5U1Rn48}Z&+yll(dd}ejRyR%`HbQo2lnb>l04wL23EFBVHUapqe(^IXki|R?36R zwWwx9iPna6)SLse12DNp^;p%E)5$@E;!s?j$Wt`}niE46EyWS57({g2i?1F|!iNES zUu$+6Tgoc)OSD1Oh6U}P=`cQ(3w}iT4lZ=-sMudg>E2k!9 zDVOz6Aa{AfB_P>i?Yfb)BMR04bW|2MWq}T^fFt&_JV06VKONW|fIU=0-H^q|&4NBX z8@NL;CA5tUM=Z6z60TMRe$>A@@XLgc`|<|bqYCQ1_#Rm=3G!Fx2_uoy>vH<2=2k+t zEuyyCbExZFuXq)$hDM=lrRf1B;+`%}-bBv*@jJ z&Y7w>(d9j>&$ITOS9a?}ryQ|JUO{Lt${)zFTYPdXOR>#>OEcI&Y zPV2N9G$~hxgeQ~C%HJ9X<<3IHTzU^WW9YybhPqI@Bc$%+_9I8CR23rTh0c6h&Bf{` z#isWP2VNQQ9;eAf~QtlGr z{|eh{f2F<|m*R^#NU{sLUSE8fax+BcdA}(WAP%L48B=kIM(ecqVFzxRaG?k0!+WwZ zSPPBk^I&oimiK2)jnvY)u;&`HN-nhJ`MvIcESl!gZscHl-x`hTj&|^wLvC0>=Ga}&It^|%h} z_S;zGWq&Ok*K}(?+uu9-;&^-T|D_z)P9(E5aj*n6D0~J^O8E}+sgIW8&%qA5h|iU4 z2XW)Oi?V9%pkOU?aP-pnGoaSXqGy=MTbZAYmIe>PN?6}LdnMwk^ebVreLu*jY_>zV z=d5VkXKUG7_Zs_&@5l>K;F-kvx^A)h2SLHuY*Ois-?BD)E`1N$>rQ?O=kc)T)N;0R zUbNYkTmI+wOaH33J6lsv;5^>O2`m>pSQ|yw3HJO2(Rn=mYgkq??fP!;fBbBn{0E=q zN}R3tjA1{Ovvs{nvYGg^@iX+?Wrztn62)<`ThWC=N44=R=>#o!u56hD5#5kGl=)(| z8H0^IXm^~|kg(P8vdPZw&GEBx!Uq5EgMuDOG;^CrRHDQrvLud&O`q{cqjU3$k)t!n z^N;)Y0kgZMy7aYs13vV?yB!}_HCOW2PRy&kmFHH36(f+A z6jfZ-9;4PHUXLBlq%<%l%LJ)Oz@4m=_o;Qo*g?Bp~nfb+iY=(VLD)T;&mPv~_#o+mtq7o6fTxDUtf@G_Hd z=hlfbyhSoG-)e16>XDige(eA1?;O}2fPEZuko%M(nEIF!k`6^D#4DmBGe{IX1S7hm z#u_$%6U2riY^wrI7uEM7_#3x!?vOJV(t)15*%DDKs7CVrg5Sg)F`o+KZyLFq{I!UC z94IXRWI>Au?tAI!CHdWLolmRYt+0Fd(poJ7pC?i_zq_#Z2RnFcCve|{ls_3aD~{W_IuF} zgNw{wbfJA_8Tx}PO|;LfKKT*sMTkRF=h&9!eFbVgx3Wv^Ov;H#T+wRcAjP%BP({ru3@d~5)t6_JQ%qD2Rx(^h zhWV)hM_vk?MpfONgfoqzBsv<76lwQBGA4hC7?V`uB%L{GKjo0XTOX6N#Mh*%CgCwY zaSY=$b8`WPKM7QJtM~6yK!)+fnc`lVnCu1Y)|9$030s1=2K8*KwI=F`87~8;8%21X z7OI)=s3WTdzrz!Yz+Cf!!5nw|4_ir-xQCbf!-{L{{t!~J-XCgJwcz9(^yjAhA?%w| zTeRaRQc;{0)dz~)^$^^613I2$d<{iKNMN!=QJ{v6Iu%)^Zy?q}uoL|Mr~|))@UdQ% z=wt_8Lo4uf#s{Z^6Z>eWr*)$=0?|+5Or5-K3$|3;dthH}ub||2-(0edc2O zz_P0l+*V7r&pgWes1P@-RJbFVCus9rh_EbibMU)fzxRUde)SfoM)rk?bE;v)Ks2K| zjS=aFMv3HQncQpQ45gtK&Az5EMig4&x^4+kbjmRmR(`YSEkN#$CDB>(@r zGp-Jd>p1v-pEO*9v6*W$wcbQFV|+oV>kCSfLT{jWCot8NMZzCA9b!Dzeq48sr>SyP zyd@6IGI0T7K}E+Xf!c}7=hu_~s|@?Lb)v6L^Tufdx9jPVrCagI1P*l7&k@la%UVJ97knb?YFx} z%xP%PK4pJdH?U^)K=Cdql0o#iqZSPFi`eqppqc2bq4-s3g=>=Vu?`Pv?+!}YV5Og1 z?^Hqb%-YQ%qSJ^BwF>Utlo-cx)KQs8qm+aMM2<`1JVxit#u=+T7p;V-WbH@Q3I6xC zIIKI|K4tL+=cBtFK zFe=C^JYML{Lx-5Bat!_-7E!WWO9FEi4MwB3l0M_}W*on4HHZ6fVBg(N^I3Y)Cj;hb zb25NW)KtX3ZuZq#mSb$<2R9&}sW86x%9DQ|+JdDV?#jVk3`g1w6pE&Muog1LpezS@ zKm2M?^7(dEUNJTFFU^JM($1G zTeR;P|tvxhJ6G>oeEk)2#=je7G8v`T~SYu*&U%}wDd*mT^UF2rl2c0+=wY+o4;&wV|MF|$tH`T+3q7yKQf|nX zYpuCDdztYRlZuLJ7eDi ze(v$ir6<1`u4^OrR^0XQq*`4#_j~PqH*&~g-8Q$P5^d&M=lN0&)dj(C_u2uU!f)do z*9dz@Hh|-~u~p#YGzXpq`f(fPxMK0R&Z| zGqb~iRVFOx|L5pz3>gpnJDHkuR#VF1P9xCNC8PtMkLihtKg5|cJtCQ=dsf5ea!;t? zq>asfw6(jqKSVm_lG1ozm3hQH(_z2h|2vcYJ}-ZW!49CXHi3C1?2Z2jE=k!NIFG?T zV_w;*>{RzP_7mT$$X$njsJ*@Mqu^3wZ(L%Z;Ta3~KhYjFh~KYzW{UXnEZfq&)34PL z@;|=p-PF4~JEh+0DXf)#ofY$Ibr5gJyI9|)-BL31u|0eC=(Pw{Hjs)ra@S|)Fg~lb z2EvwsBW#;7pVwCQx%^sn5px`GgT#?@7>6pjgzJ6xEC#kB>QBS>HaudqH)}4K(-Z~; zCvC;Z2cfM-B&ffx;9u)~`{W;oyk5$oPId0_pSeAC%|OxnrwA_WDZqtK^1s5K>Uk6F zscO-zZ!$Oce+QSP=oB%MsIO*T*?P9#eXae(_Z+Am{GXsZ-D35RgOZ`s%j`4DYDyul zCec2#pLTIK;e-~nd4hC$7Q(=#W)r{by{q@WY+ar3R9_Jvz1}hWd-2g-vW{K&y94pF zrQ8P)GnbEQq=m#9X-<)mL5ejHNZQ!um?nrF>(t@m)bXM327qbdmI)W1Z%XR5Apo9t zupYm5I*CP>f(-{b_t#buz6s{^Ca8DKSsTFkJgcpsnM!p|5_)IdWVK{Zu} z9p7~|huX`alZ{wU-Q(i1N1!tHg)WF12Wzsq`RWZ$TzfV52mT4bstN9+sV5asrx*Mb zdZS(3htWfN5?Yq)5$GygSOWD6j!(R_d{E{z^0Uwx>-!Old0WU29fSq`zbmCPik>)* z%Mj^qIhC$>YZM(LdV;Ghc7p%ahaEq78SsuG_TU^FBEv@zgzDDwZR9@eug!fxT~X+H zBBm>Dn>|S97?tK7vvS^92<|BO2;N40`KYc`DTjK{sKI~t8R&{(_)S7noJQ7<0J1ms z#&tl{l8@k(2@m_u`Rz{h5X;z!xF9QkO1Y2V4)7_}?o2Bj3p6;$UT=jH`?rkGfzH<@ zb*)H;E38-rX0_*9z*P+$QlF>3fCvDu=*0hZus_r#O`VZBx?AXAgS|z|12V;8V|rE$ zcXYhJ>0Rl>0!qJ#)x0h_&Z+wTsYu5;4C{KfS*_E<-(Tc!au6Ykjdz3Nr;z^Ui|Khc zW)DT(F`Fgo4nOH*4H@37ck8GVFUEPJmcaFG$G3OyUaf;IGCpFm=#4mbyNqvaPy6wO z-7P*oxHjRJxi+MatsLL-K{+Q1wpu+dqzrP)dLMaG^Uht+rQ9FEUo@|3@Z*vRKQ!A&*~_aC!@BvMDx+c-Y#t@Qd}Fa#w6cFetyYry}o_YMa} zDTjK!kQrw*KQlLYmLcpVo!5Y~_HzU?WD!ViI%b)*i}XY9mmS#42pcxwI0tSz#6F_^ z^)MOX{KHAU7DmOw`HUzg@;Sln_;*q+?kgIUG%M(Z=TA_q+22Bo;Y54_sO|JV;K1zw z+@s+Cv1l2jlPKmQaywEcnodvxig5(dIxu!X*ZpC9&orrm#wR$sKFz|j;D7I<4%{;5 zi}RkX;+{CfdJ2gDvx~^fZCOi?q5zYqqPUP2$L*1-F+bo}n%;%X9{~P%*62psqxe`br(C; zxfX|HZ!P#;jK7mt!e;%?;PR9$fVjZ=yltO-Ap1b~I{S(5;D7b-Vm9kff)^WG;Bx!S zvOhxXM%otG4F5up*v7O4crM2O`QrP61SU*T0(kB60wBsClt>*qheCRQ} zVSJ0>4Qh(R78-B%J9CV9=6IW#_qrW@w~_lx|o6rHt^kw9x_&QiOz+2cLtoYR$Z-#{v7<&4+H@`2WY7w3&9!(+q6 z*5)ejtmS^GJi&Ku;9}$he8BJq=aE-Kq6K4a=>i<0m@XC?dxMYLP`tl!Y_C%8Tj0|#sY_{{ zCeB0LF~gkp{>8DeI`|xF$!|*9fT1lNnbEo*DT{*G7)FTdZ%F>M2H{Wg{?j=VmA-Rd zQFkT#cI@gij}c8^3GjIK*5#Zt3OvNR?oPs+;BD~Qm^IcPY`?IGmL`>mQuJp-FV<@JrFXoxWoe(;5X5p?Jv5YE= zqc>!(an8z0xxYp|mzh)8gRwZ3L2cMl|6&|&!U#UCy}LKF(ScnC?4x`4zQFb_@*Lr7 zpE>!r&_TbevhV@RYxOh172V^#p9)r85Y}yY265N0g_G^iKKblfJqz;}isha z=blj>?ilHIeBV>c-|w?(XHQ|pIjq0DYs=VhqjBftQk*6IcD?CSk*lq zToJ5x;6o$FxkIwOz;D(pd=F-*@`_Kz;NQOjwKBl}9jn%^UOHR%dY}FTVR~I3U*^C( z8LS4(RY9Kvvx0NH8&d6or?Yx;U$QVWFb-7)=UMKYiz|AeUw5lv%+#7Jyw*`$50o|Z zMCkIp2p7^0k7?HNgXK{?6>bKRiF`Vj@Z$ho{mGc2GU94)m#c+ zE7$2YI8ThNYo7}GFvr!wOPo2v9&EHy?FFw-J!R(jtOEZl5B%@Wacaf&{v7Pj<%JdJ znsvQ}0fLPqOJ$u1Ken!YUhopY?+g0l@IfzJSGT>uA04sqJ@UT?ST6kgSKNU7-x;jy z(CVdgv$9U;BfhSEnV=sqQB}l&`7IpyT$O4s>pEd+`B|K0-=H$!K^JCm#d^8F<>u$T zuH4aQW{a?Q-CD6Xv)`Gj%1iwk?M952S1&91f7iL6S8oQVee{3Kc;D9CigLJ1f-ALc zzU*B4-8nd?)A@qbp2^vBxoXcdlF#og{Vt!+0Is?czlV4D z_H_nVcaL}fPWJ~Kcq2+Z^;D`oo;j=M2ci?~$U{{}%v0Hfe_dM&bd#0k!+JS`8 zrJqoDjs2&0^yCk{58d32dsvK|?0Zo#sONYAW~N`~2u%6=)lWZ@JrL{#<@KKPF8Ky{ zpPy39d3nt-rCxQ@N%b;(A7)SXbp>m>rB-qPPmF#oLmg(E`z70VpFD|pXUM0}w_+dQ z8hRl=n{TrRkOUKzP4-kLd{X>>$>?aNdfqSk7`1v4_UW-!eJS^W*WmM8%=ke{0!dtcKH1_O@HiH=6%eaw;!OUY_K-lh~|CnvvMw- zXb;$HrO&sgaJMwLCWSiy>&v9t3+}N0FM>NObMU*ovJK)6`P zLoNg7I*jq%hIi7ay!w^}*LJ^(e@1g$wo~SqY=7a&XHfqd@gqt|Qy$mt(=w>{b97|dFnUAwJ)9bEB*-h{~S85pw^Gq8}<1kxSQvx-w4~3 z*#`W77IFkyOAiPwu213r>|k9A|GI`aY1eHp_y_+kg8z{J(SWZkGzw4k04MTF;{R7= ze!d)Xws6b(Qd#dUDcU_JxDK>C6I>74rEI$%v`cw&N2)!}z*MH^+3}<5I=RSp&D%l>euM^yDOX033xFLl*=_1u$a3?>J7TlNSdyUiZx9lu& z7rv6X`!#=LbW~Z~4I13tlfvD3!Fu3sHh3v;Hw)aoRDv|f|HO&gp7IP8!NTu}JO0jg zGVfz9?v@8H1@6{o=N#OjAzq30fW2ODF_yyJieSSjaObvvuDF{!CGLJbhPyQechf1{ z^#(TrcXPo_z#X*U;3kbbGe@^Q<%Pu^zbEeaPF%=5j=8uCf}4Q58?z54aJMAc9gB2L`)=u2hhTH*J^9e-y#na42~ciCVga5tQ7I=I7r zidUjNU=J%s)Agiqw=&q2!ku)HYJXa~>kIjx9b}t=JKY!gIWEtCQ_FKLua~kF$A=^W z(IxJ-kM-q(GH}-nZUOH2@14-$H13k^i93FGQ40V0;Fj)YP!2W+gYqx>=+OM1Y;XDA zeh(^={`h%Ws^3De8U5apZK2;=u&(S^4?NlaWyds6*zegd`{U=T={M4!E(~r>t%+XO zWc$;u3DyDpuLp&{TU-;+oqi?P@eG%N+f(1g z!4}ZYd~kcjADtKn_&?p=lke7oPO~uXgJxP{BQf^9N915kD&RlnwEA$u^Ie13)s_}?qyrw^hJXz9*eOTqSbb44G?_A=LCGoEfgSB}kjWe;+$ zfTv$c8vHGhUFXvWbYyyqEtG-ju4=7b8k1ujue|y$5AN))V75D=`JSu$Cr?|shxU*r zn*~oR0RJZZ7Om}zgB{&7!JWa&qCUEGAH-|Cy$20j>?isDedc$*lXkeTT!r^n;63X9 zir{7Fe@C#>=^qV_sdW3ki_{X}-t^<`*8Ryl)>_tZ7y6IkwQp6h6Ey#_U{};X_rdN; zoAygc^Y(l1Rp=l6$>&Ua}2}aTHNU%H6ubywReJ1Kh`o-_k@6V@fbCtxFX6pYw73a`$ID{Xy`5 z$KZAAmYP2L;m4r;9l;z7?g7jXb^rIaFx~b76Z6qNsclQh|CBXxm|ypapN_#bYnFD; z$hdDn4b(WyHNm}r`Qh$AbYO~)C)HkH!Yij?ZkLTbJ{)qQTHD^FfmYr7q`8}?TCSS=Mw5+Uf;!udH%p31phBtcl}cEyTIIynB_Rkq2NBi z{8;zX4$M&iO}CHFbH@_!e|kMv7W_frd&v;yY5J%lMk5aMnqUktKhgb32PQ#km~Q*{ zdcJH4#hTGrH?nA{FemG>w{37V_Q^Y7=&p=Oa(>}hQBTK;l${TAX=2_IZy=IMFPgO@} z@p)b!OaSIzbpNIQ8A9Ug8ORImV~({Kn4=^9XT@hcx&-_Wjd*hc<|T$duMr~B9VT*S z`fdoSsW>@-X_~9-q3ogV>+C1K(-#O^fc856_r8iP;Vt&}zV$&(`{IJC{f>5U_a7$P zqgK-gRS)C^P;6V8cdnWr@;^TGR(hM+L+b6G%6`MN@m>Eo;taooJjG|#oi@&pXUcMD zu5$z8IaR#G`!qE;)*-y`9R(jX7rh14X72)2hz8{4{DVIPKmWLe(iPH;vqKK8ep7h zA|k@XO4O=_;AN->cD>VIDfdH(3%zexf|3!w(58B;2{6UUbW~1L)-(!)a577omppx7 zjKwy`P;62fW;Q!8%Le8al!(FgQ7D3MsepjmM{Xk`Zv*bUWpFntKcN;TBdE>EHbQ(d z_l)+0=jx^0tC5p5qAqJ67ZJ??ff1CIQ=_`>7VCO0oVaCldg`7hDdBi3+o?~vp>B2G+Vea5tC*7d9BT@GgW5C_v`=4VPLR3M9 z!Nv>_*KDVGJt{(wWOnd>q6R47ga7-_oZk_m*HZDjzWzgEp?6w&pV(K-HgX1%3Uxjf zaFdvcokx@dV!YiucmBga3jP=0!0?#M-3(4shn=>i+_V1BF62hoG5wT#kkDqk!b#T` z)ngG{>_LE=d$k%|Ws>+=CB|O;sBewJ#;SuJLEWs=vKqVSFBWj$#6LMXex=+=9baz8 zuVse_Y`t6C+X)$;hG28M@Sr0%6T+d50p3BWZ>|D-TSQaB#y6-RIk3xw4gS9#1BXn< zrHCS(9N3^YvziDzOUN!R#XsOK!RQ{IQsMuTxr8|tmeJ!qhB3~VicZhffiODqm6sV{ecn84!}HKo>U`A253X)4=%Q^aZgL^XL83@G4EZGfc0RtsOt1t4UZWq zK0MxdfPg!1!F5 zQ#heZN}aaT3Q}!YbV)j`RI5=H8C!TFE_bDFoT+q&AT`_(n1G%854BepldCrxwf)E& zGUJ|@nnjUoEdUQSabGn+jaMcPKq6uYxXG87XXBo;{fj3mbpFKKo`i>d#y!mL(N#oZ z2@Ez>fylFw$2v_y(ljE{5~Q;-EtcRxCVFWNsSyob2YSF4)<968*VVKly$Jm|eSs&|{I=9l;wsZtOY^~pOV*IQ5v-}OvKkf`yI4n8OFn;Wsq8jKBZL^0a zFy{Fw+|9q#9`!pm6L#IiY5t`_4d0rw;tr$r63EDy~+CPVOR5kx1 z)RCH3_sF`W&=HTEdkY{rc;#zsBC?i_0Tno(%X0E1652=SvrU+aJPyF?J{J z{*#o#aa<}ZWjU!}>BLp6Lwu|d>vA(;1+^>ZS~6hN_Om@maPfR)riRQ$r~wjMJ-@q> z8F1is5N>|8+FRk}he(q^prCGl zd0EzK5kAO>&dQuO{3E`d?|`4#=lov1@Voxd{0>zb0q(=?sD_d+b)>lg?^sO&mn&7n-GUid>@3%*z^vV?N~R+dnf>dAQQh9XHBWZVKJ&U61Jv7(p8pVLuM z_CfjNXC8NRNiO_%$n#EBz;l{QVZ?=yAW!kpuUH!>Y0KRhOtrJ+XhG>$_DJ?f_YL+F z-`N*pZ4jxAN2WI8DOd8+z3m2NH}v#7)m>cY zNY~V{&U$mHG>{9~Dju0#;G**~F)-vTa)ouhYGibx^f<5I=6y|axq@7BHo$QdYsD?F z`6757fOiz}z;}yG9RnF7yIa&-QiM<{fSAN&Vf;y!K+`5)>KP%1{;L z@&t6r*_oAOy&R7o1*9d%P4i0VhIVaas z`Un62EbE9r?C50z5A}BbOX`R>H>%e=x|_fT&knV(sijetD5IsnB-WIAr=u^~z9y3E zqHQ$oTZ(K5R0aXzA^C2$s2gxyaFeoh53xVr9H+l&FyAkPfOP|fN=0~p#{RE<#nGh% zHu(Q%T@U?t9lc6mB44pR%ona6`p2C81KXXy0X{C)Ll4TSRD2)E(r23MR&sbgF zhuHIqnzVB4ls*urFKThtoM2t%xc?)vvO|6qwGH>^MY)uv{4#9fzN!&6jh-gscJ$RE zq3^{ldamWFQ<^y>6A{9;?gc>7mfh02l~r^^%wgkg;10bAcA2mzrWCT8PE~=K0vZYq z6i(a$*5y23%AbvVsr{%UA1kZ?GrB$WQ-jf}npNYWlbCYMT0n_7M@@;qf!{&+W7Ddp z8BTJNpsw?l@iILiJ z6^qq!fJ42|^Q#3vJO|3eeZn^f52W;nA_^4D>+Kq`FArrO>RxX@@x6%i!SPgW2Hm1> zI5=SRhzIO5%K#hvpU^up58^(N9%-}8wlwe1Bh+^(aY#J;uJ?6kZ_7TU-sPz(Pxh9a zz5VPRXYa&c%djU?CkXX|Jnpx{{&1#r!O}556>Wh30|$Nw;iJw4#bhE&v-o)^+uni3SJ*)t=6bLIy!0zX4BTbI$vXlV6B%x%^6h2!7wYt!xrnXN4l+ zX)O&LFI(CXmnb7)s<&cO!EPaSBfJke@XCY-pY{&xj0rom9vN*76OZ9fk!J=T%&Mxhx4bVna7xPuP)lpS`oB?^{2R_VIyesG>-<;MB?p;$f1iZkck};+y5!3H zeqtQQF}VMVy5!iEyk{NQWv&5a-CnWo<5f@64*>zNe} zywdWmfHxi03DWA7!%)~N-9zqn+rjC%I#Y~bZrnvsw^O#gDhFh^NY8GzOgDvzU$A{5DnDAe| ztU9YN)L59CW6gcN&po(+OOWZiHx3v%1>sKy5(a0kuMn4&G=tl}Q9l4H-RnS(thH|m z=jd!v?wN;@7nN2+PO^KZNe7qqUvZbzWzGpS-6fCE z**W2roLUQ|{B=_6colVZ_?V0$E;Xy&wI9|;t4F&}e!&}b>M1Pa^CMI0rAb@NwYmEp zo7?Tw8s4qCccWV~LB>>1*C=dfcN;2d!Lv9qMg39iMeh!`E&}@lqg`!mPyI-E$ZmSD z#TT3+&S2I(ZaoC{1OC69Hqjny6S))8SklJPXS@SWU4l~ndO80KeLSbMjoS5jY9k5v z>v@MAcxAvlinIQ#_Sd)_l8py^_}Sm+v@hj1LY7z6y(6G#`k=z|Ia4$>A<9Yk&pBRc zV%~dC1QR+QV8YM7l(Kv+^tSgGeDFx-sz}~vO8HHqS5)n|!o`bkGi`JztzbzNGDop9 zXLuYxxCsU#1Qvw^PAWU|>oPBOV0REU{OS97glVOk_$d0}j^*`@q&EmOcBWlCp>1UC zM~(Q{IVjKu3soM9BN`6W%$5}Vn%X1UX+r-b%&6G+ske8la#D;q<)0CAoZ0QbD|5c6 z(XbT~&2CU~G#=v+b6%(?C|tM8xsX^^CEOfvHrQ9p92mVQlzol-EmB|A)OWrdTx8A$ zbuZ+d)TtmU2gwA%+kR_(=J04C?5~>N4EZ)AXIn0jYfi+GR_ufe9bs+^&5~oF@DdGM z?x{+7*<=K~aQ_h7i;01LAlDdihx$l->*61>5rC-ZnO+%I^ zbf3)YPJT}HK=07HjBU(!(Pco)VxsYj-e2wgVD{zeJ)WwtJzp2dTG_p?k-tr3@lEEe z^TiGU)aET-BN{;6Kazx;ak^vxyDb*~RLyVkH_X)32-hb?m5b9s`keE(-6hlqov1bE z-ZNRv-wv9aQ`dv9OwTgN^(=8^q>fX{x=n{g_{V=7(bn>Q{{(ykGWKD3>@6B7@}p{G zXGB}!@us*Nu;0&5scjCdMz-#+g`6KM^!!$P9dhIBEP}UYiuSa^Uioo%!C#nG6{oM# zO2lT)Pn=PWD(4FFxQH-8J82m@ZpP7tyOkqcl?fC4f1&l!>Kj?DjSL6TAg<-8saK6g ze*98?JMItO(Dq&qXIwZ@XsI_l{`qBm4ivoWRJzTTu5J?@`t&0VZ$OH@=&Do}n^xsP zp-J`Lm~S4iaCWgT3Cq!WBYp!Xy$;w*V<+JN#C!W7e{Xxu^k1^!;sPg$ z3p57QwD?rar;jn9-dOuFm^)5i=rMq%zZCQFV+@eh?Z_ z+++1yheNoA>wVN#4}ISo8~JH{SKTGJf&pDoc5R&Nwg#o`fj(ey6GL(^}d{y-4 zpQ(P@-NM~cAx!9}8m8!{*FZo0P{Bu7Ugl-k53OEM%Gc!n4dYh~)xJm)h`2LaM}2y( zQJa?g{VHP6iFT?>Vl!qj!8E$+UgkarUI*dLA5nY6FoZc8@jHx7XqHk3-`I&&?ZuA{ zP*}OVrd#yg8a!xpIGkeW7yVJtC6YSaYfpY%^`NFVstuTi_Ki9m za&2J?Y|U@ym%ShA{aE&4^>dzjrPW0*5_*qleo}aG-txTN9~ebLlSV$vt#8g}xynzU z`-g3?d2o^HwFZJ`PQ8CvlL`81{ETAKKVEC7x~VHaCa|M!ZRUpEhMa@OFlED49{40~ z&4d=YSjFhrIYp+N2QF~`PQSLm7LCJnJghhPGxNBk#<}w*kGrSgqbY~?^g*#i;N%rn zH`d0C2x5xhQ`$$k!+MhwOHs{FLH9W-_dH4my03&?M8(yJg7$_{h(6YUcH`cw`MQ4s z`2*v?SZtVB*SKl)uqKOWX`~GK;&#zY(M1O|S=?8%BeeS(`3L+Bq;q3O@M;ZXNa|rg zjZPs9cfHRy8=|YH3<~W3haH`T^?}KU!<`u)+Vg_Z>kPt{$Uny^EX}Bu&n4?=( z^9|80H@cHF#zZ*CwgyGI<99i+y4C!&*b+_JLBmN@U{M@{B2w(|eWchK{*Ccw!h#L0 z3^P=H9{;<}I2!pGe=XK$RiWp@F+1Z{xk*{-;%-A|9;(K*3c8V4_GjG?PjzlkUv^-Y0rMy%+j$(7^rQW(v?spf=<3z{ zoUC2xGM&B9)fE!I8Oqk$3@$3ha$d`PoBwol?o$3i*s1evbH8HqfHeaC_qrTic^RJt zslGm8#*)? z?8au}=9RGB^WLQ~9T%_=qmioXJFN+UF}|@OYc%d-_^_0ZHtpCm_}{xKrn|E5J(B+v z+y@*;{!46ZW_de_{>V;?$E|pGI&jK>a}@l)QuuN#HcgTm z&epuD)4r5{*dM}uV?R@UH$UM$7{P?T3z%3R(RX=m#vc}Z?9G{rBcCns^$Or?GP-Zh ztckFTK1GLu2lqjx*{tA*CA_&jHe~ z5=jWS4Q68gmV-111Q~Ed$A0R}j61N)fPDh|Uy>&<@JgMV8K^K;PkCry?dk!4d{^d> z^K5B3PW%pr%jEz-7CS_sC(FtM4ABgh+#9?mo7Xl#CVOrJB#&syo15PlrWjUoAIjIH<^ z3`gp)d?j@6+k$3F_eQIHsH*0hi#AI$LO9d}Ud>*_Kg2)5@zB=E~{A?;>NDnHyRNMP2Zwdd_s z>(fMk?{@S<3*(xu5%@g1y6E}PeVcy86(WwBM29k5^=pp4X#2WauhZcJ?x})?{Z>a6MpK9$Ok`i?^U@P4Oa_Q>AmQ1?QfXoLf1^5$}&(-(iQWV)1g~GU2e-_gh z(cki`)fPhoqGj5d$Csb|$G>KtH zk$j8xu~-i4~n!!B&X!X*3MvEK2M_v8&7ION;2bFBvr2E-iA? zv^WobNo?f3~SM zqlMfq0)YDJF3l2z!7%{Q<~}>e(jZih#;h!S11L-G&h0p4Z&SV8nOl5eWo+pTfeJ8@ zxLa`*f`y2lXi7j1TWR3~XAuWu9y8P+z2k87T4zihd5j5nn9VHOp`ls!s8IkwAY&dR z>O^ItW1;~^7edH~fwMXkByQb08&2dlR~wpHxVv=XzM%*&9K+GBy1JVRoY`~?fuLrI zRA|8c<h_5jg1ehYmh6(g?cVXh1c49-07>7e+)cy^%T-Klmme^6 zY7*4=Fp>QWsB3`q3{7F!S|;n>yB)Y4fO`~s*Z%FJTP5Z4N`#_J%RRKn`zN5df&zR= za=lE}J_FDg6)|r{MUK3u9SL+o{CL0Sz%LX2ksa#n$VA;Y;2-y%cG@)ZZ}iuWG}YQd z&&L<@ZB>fpI#TL{^6${1wGfOWRCQI|`-;<7DgP$Og}kb0v5l2pyuQ)STD1@2(9tf+Kq!*sZSKj|{;C2A+QN)e!MrW?r5)Nb3?hMR@8B&qRT~Yp!lxt=r{y#1T zs9n=&Vo&hC>%c0@91kep$m{A2ekL;-#Y2|zPssg*S5OO$Vi3C+Ym=HYbXo9!=3FPn zaT%Wny!DX|N@oHTFZ8GP@WP6#9lw~Pk_=Hk15C_9So5N|z z5rtXRnB>^)91hl-lw576fk|a{IPsMl)?=rFWe(%@miJs>f&Vl693POt+FwiG%O&%A zPE%@!#>@kweQ_LC7lZYjrqmYJq0v<#tgWP5tXGLKsuNZxbO_!`4yuIUfAh+~)8W+C zx;>ar`ATq4PCcxQm3<`pNcYY5X}&Ywt659>K6Hz|JAwt{D+x2PmLZ!PwrtW@(n9`p z4`L8e5nMkT{!3rUYHTFJ|MuJLBkH~Il{{fSua5gl@^2O&>S8gscCR%XLmMQ)6&2a; zsl>#-;(?f-qzrgRXNu|q$SuTmJN;2m5BQ)txmw2R;QjfxAa|#!rVBx}06A=wYDnJ- zeQRyBQ7u~RxG8+2?bhfg-1Ur%lI_9xWO03Vts*&j4Ydx~vSaAr7;yHum(mc9aV(~5IhM8RXjmJJ4I}OOF>Q&2S!sP2DJD~55^rwnE4=U#W7nv)YRc5e0<(#i9tKH zwEx(;|EOwAHtO01Z`TAfV?g%|f=fb5(s`{h@?d|R?^TaEFw3N8d_Et_i|C#7^UXC; zFay{1pw7U1oVKO>TP2sMLf$jFNs9SW%8^7wTivJas;1d5uYTQu+d;Vad@nDxH(a?m z`)O_u*$(Jx)mzAA!6wUxB9;T&Y6FYt?mSRaA9P@r2@^`-CddOO&FHKaaYUJp3<7XQ z&TJyEI}nGXlnGS8#0S{Fs5-(LF0d31*3{>nzDxPHAx^$#b1Q8OR6_nyy3i1qK^YgZ z*+93V&O(I1)`X{t9stTTL#pDLHI6Cubq8Jt;o**jdoe=05ZWfB+|+rgBBO9dF(VeL z{A#+Y&cflK{aW-?TKlCwL-j54e8R{6cMi;DfO!-?h5HJ@=P9ca>0u2NSB+pb)%P5jGEeN~sPh#c8|wGe_Jg7y z!c6qzEt;pWvnx`c2uPXMHqZozi8C-BZV5Pe2gtA**{Ff@j03MMc%4=IG(6k0I2y1n zd=vsmx}>xd3d#H5$-C%q$HTQr41Hj=KjSTTV3zW4_lHoM>HudS3LsI25$uWm_jDrB z8pcud&@74z#(R>EM7CfGts?dW?_y^R9UKGbcXveYSkp~Yl{uzCtUF~i&>4jNcs%v7 z`%sy%@^4k$VC(71Je>L!?`FrR-^jni-*99=Z41vubu17|x|;YF%U8R%VIS0IA#GxU z#DQ4BmAugEaV6z8$M;{&zf*F)wzspdaMB)2nK*4|kn9));@uzBfW$fRyZjT#Z=V)j zsLhbEwDI^Lch@_krH9-~L=SaVylH0)WsG5{QBwt`XHzav%p{|Va3}Yp&Ur>7|89Rn zeO7HXaYZapo51_7+I(BoqafQf&B=5$#Ap{z?Bt3x3Sl zy2epLt=Uamh_spKv#w&9dVlPUp^Py+jQT*`oQ#AXHM}o5znAjwm0bS^QCGU&s5BcW zB1Tyh3WYYqaP^zW+qQ^MK~F=v8lK3LNNgPRzU_>ogX3VHXIz?$L?r_j$-$QEtg+?J z9;~Bp8M}66QjvoKaIn@1HxO#pMKvhPgoXN-=gz=EJOQnVtPkk|{?91qY^ss}Zy?ck zs%@lHmp%}0$kIp&S{FiR(^Sl1Oun=-XFF$B)%?%niFc_NSiT?+{0E^NE#-d!aff-; zh|!_Lmnr#jec|LueKK>ea}HO{|FZa(hFyBG@`NKk6LG?`G5_k! ztXtnM|116p)Sb~aW9=ScQK5IXxGXu{8YUJm3{yO43n| zBYP}+tb5o#&G-C4r4|_>DRIf>d-V({*E{DZUe;6Ds_%+Y2KGWOF7T- zKfmk!bnln5$JBrG6!dTW*!vay%crPYSpA}r|5bnOL``ie^n7|T-*j0He>X17&(F^6 z;7O(^S?;&S=qUuXf?rhyr~gv^*Zd*G3ocsI(l}F0Z}T(O-^7Kqo@yKe=qOOiG`qq=>WW=$kQK}fr=uhHNyB~DJzXxs-bbEO%8ztT{YbkzT8>sRM$Fi%Y=*g z)#b@T=BQI}yQ8m_^1m*;ae3T#E&1~a9KdrmtL}32uw{G}I?~Ql`K^l(7B-$U?2y@I zgHCo?_yf6-Zd_G$beayrK_0=5BpfHkvrTT9wQY4xPw^o%X;2~Wfgb?He^NaNxn^@a z1rBm0cPHUYu-38`64|p0mr(_ACaS3QEfTtgY{Q9I*!1CJv*F)rK>J$V5Xkj zq%Fk^`-^E@RiXb7Rq74S{wV!|4pO+%59xmO-{{LmOK{h~Ca@=I?ig!`xB~yb%h@Bh z8oIfZe%eW_vBawyR76}O`Bv|X_8jC}eb65Q|G#kgR=mLEGX=j`&fIYF!y(_5@*nkw z3c=4d{&c>Uxix}`_*1|H|4aPobr{xXalJ_X*RUG$O33W(!Qqt5M!pJS9L+2H%Iqt< zH`-5pXCxWUG;hP7_&-tG<<8)Uk=gWN$!i(>^8?vY2-hKx-R?GOA9@pi^*(rFABNs7CGA2 z$26Ksin~!oyD~r9M3m}O!LLssH#fQ`pg;dK@?=NU{$VI~e+T-S6or-TMTkyUX6kbb zsDA+c61DQ_@gWgA4!G7V1LJ1q;Wz8oRZLK~1s)){i4WK53n;cw5)KBkIO~ub!` z24Gi3wln0)M)lG=IQG8n={s;Rc0Og!d};E@$2KEG-fKBNzP>x#;9|{Bg^M*Ddha^* zPmV4vV+UWRaj|CX%y2P{nnh8aXX!7PYJ-b4XNn8&EGJ%VtI)-yx&r&sibvx6lBG<` zpWK|l|6cawKScY+O4J~O;9Ec~OWNC-EJfsiXzbMpB%w*%Vu27QbRc&5Ag3?wpsnez z1S9g5OC0)g1xp>Y>?4P3)4SXmOPOOS&Z^5}wU~^^i4|Vr>D;V$gY#@DH;#Le`qdQu zl8C1P4J|ao`j^xq45J8}YLyhreXDv+jF(RiQ*ea>oqNWGCrriQLwn}SV|X$iu!x+b2u>Mrj>F$ubh#=LqTJ3o z+8ZFWGP9#E4%f1jd)VLb+j&*&GKq|gt%Fw`%_}r3%p5zPBSy_iq6KkwwTXZ7U9mp^~MC zKrhgD$H-P3JvO!jx}41{9owb8f2>o+Fm}_k&KPzEFUJ^;1`j)9fFB4wCEH`%XMz9i z7`%?$>r^H&hT_VPf;TE^sf1yTH4ZlVyOFe|0>|HQGut$Zs+;#3qeW|J&D-(u4jJ3_ zr+@5>ZCCIx#`f~y70%dT@8FKhWP8ESu3?O24y_J8Ifc+=_2Jrv62awcZ z=FL^-B2y;(9db)46C(I~gI59mqrq_pK4cZ>BH3QxkB%7l8`b?Q|5z;l_}o7QytmZ3 znETFKBXK|(ME)lH_`2U690&YY1&=xKL6dFTC*XT}{vS=u|I_{k@c)ar?#=y6(MHyg zaN}!!Pw*Jv9uHpaz}?9Yl`)YGg~>$780;agZ8^>Vm||Asui z_&%^Ncn#pcI(V%EA9r!X50q>#@IzkPBy^LW`{xjcj9gF6>(Qc*Ov#!PetZwOFL*8B zzb1H{1An)`Cylu6We+&kY39GlNm6Lx$b zxIcJ3V81SSLmYOS_5%BJ8<>B z0D6eE7r3DeC=36m^@1--O)tiS?$&Y82-%3pg0z5jmVV>1U_5vn<9I{xMrRz~#J%+C z_VM|bz4r6}Gk*it;~W#&H6{o0OS$d>J1!3;a!m!2Sz=!##bB z6F{U4rT^E-*O?M(e8tzj7CZsCZwlU=fSYbFa5J0CoNp0$>2?20(E1U%qjd{{O%bj& z+l-c7)|_LAulZ!~W{ly9;4RJ=z8TNYXKFCmVoU#+lfj^BH((u&(&U>~!3&n-)Oxc{eMe??%Q6U|$;f3E+v@ZZPRzaE?b?6(GQb6^v+ z=nAp+aolfa-7Mv0%87Y@RrrlMpIjT0SbM^cul)nT+W`MW@OB42_rW&`t+?$q{4X24 zZ<~aNxg*(@(XJulwdq5B8um?!Uh1 zx)XMM-5bF>0Q>FOTO&JA;`xP6-1hNx-@K#;`+pktHw3mH?f#qxUy1Xh>ENBI^P@NG zmipi9quEEhH@V+nuG9w;=Rvwf-%Ri>bAI$r`^++&0nOlEPkeUHn=%id{1?>&`d=i+ zA;N?1C;O=S1y4zPev!y=D7?Wxj{SBVw!d|tIu14am32mjZXM$Oq4#L z+TjYz6!zn^r!`-kMxHpbdf?}erMB=q3B^GU>-^Umyqxo>cM1<3PNWd6 zFK!w*m>dVu)dK_TiXjjQfS;Hj@H^FdV6zMVcYrn;`A_(3gSV-5g`UqB?i{ztZ+9RZ z*`8g|v4qbiSBmr6C1nB%!2`IF2y1Ys(_bn7N&hjN0gjK%;#SBi52g4-#hin!;s^S@ zp^}W@ON0_XM!z3w=B(BptYT|noIX|KGNbCkX-PJo4ICD)S*NE7~mKSD@ri9_4Uq~T{RE82Xnb4JRXz!7VIz_nC=i5m8?b}Sf{Sx3t}7Xk+uoS zN7s+y-nr;JubPK#1OC50-M5*g?inA(c`hnt4kU;kaqcWd;VaxFw>9)xRr9b{Fz-Fs zC(4Ml$1RyC5Wt}tJn8P{W@SipvSWy`wHJ4wE=_?UGf|$NZD<=B+?p}<2TqJ&DgQbD z1biel?n`khkT5IWV9LWc$@C^T5~(d&fg+f~6)`d>{k zf8HMg|2J{|W@St?efXW{tZ;M(7Y#z!4B|Ly5H_fS!CV967cGha+on~-9u?uf%yA%h zVUPIMhL74MJbpXD3oM3?Jq6wS|6)r7o ztW<}Ed^9y+^u)L26L6``OPMJSa){u6@2cb&Q2*_L{WuIKb>Ms_tYWaOa`+BbSV2@3 zyFbP1B!;w`r{m#>xL=y(_Sv;Pzs-!}*H$Vd%nE2P@^j1esXTXYTFAlSoDhKB3IODANdFgrO;2 zU$!PG-s0d!Q#-2Fv24> z)GBJ#eA$6n2F&BAgL8|;9(Uro+5{7<^eN|Q(8w*=Kw=G#?>K#z@?Z8(%rD5DC20Z$ zAm|L#U^Sf9Tm_oG9)_r(?A2nz-F9R96B|JUc|UaEb^z`W&P6K+8|6 zx|RGAnxP>e{Mi-ioWD(=j%X8v)H;Iu?w$1w#c$iitYWWYdS++mNXRGmR1Z2At6!3EmhJm=ac(1 zE>n`z?nCt|Dj4-y8KE+_IIubh>+k_}KPX3=@_MC>9?}*Ap;90zOh@doIY+5sfmI>| z>t2f||0T0C2^V=ZEGlXF3XplF25vc;tISNGUon=MrmDAB9hG^ik-2$3n$IBfGGj@& zxR+(0r8Cw^(j%~VC80YQw}MownhP@$8;N+$CIyFC*#@k7+99@!J2H(V%;rILzn%tG z1#5PyX)uO_nX_|7a9|mkWdtH!z?Jl%VhmnHCN&Gg^3*u@7c)naaB)s?7ZQNQ0+?Kw z(G-c>erBaErRc(r-3)FBC$UOr+v;Dn_|VHs1YvzU!T*rr@=Ex8W`lR9d_IgBM(qmy z%DyW5s_wG=#P=rdS3(XK{5P%-N4Myk3*KXVKJV7w;1XZ`N1}bEiTU?b0ZWx^OY^=2 zUbf|y|M^|-*LuH|eUEA4(MJW|KK;KtfC6m97S zI9qLXZLSP$Et_U-s0b5Y8FP4cyOLl!14i!xxH zz`c~6!c5eP{C@ma7_9K=9zXAMP|xJu!*1=rwe)^#E-rfFBz zXFvhSEv8PdCLG^LnXo{IYw&{%CynJrfcl8Fj_zP;H~pdgMYRWn0%C-@hEfbzW6VJ$1y`|(D^Wn0;xQ3CCj5|WQ#%Z$h#N=P zhmkLc1$xqf*8zAR0sr5AH)i+aEQEzZv8N*rOG*F0XV?1%C>;FJG9>9nh!dzQZz{D1aNo=q2T7$S%ZbD~od15_5N(mT8F|T_ehe?sQ4zr@_b|hm68l5{ZLx$$Q1*Wu$1K@^5PFy@vRv6Bh zpYjG1Fo*KrRC@)NR=7nI6I4#utaFxwb~`rJIv^jg{?StiiLD`OO4s@DZfpbZ4yXLb zjHH`r`dw@W;aNlkM57aQ4_V^fk$`a&w$$D2@hH0WJcF-=;wk;5=Jz4g-p4G=*o6|} zz)-Kz;=$YFz$;S*Ah&)gu_JT^k6g8mx(bo}FBN{`51|&={t>j1*mzcaVg+`)cFdqo z$O9v;Pbm*1NI3*-bai;}7UsN%9Qb9zNAC9~HvK=meG7bCMfLyO?KU(wDNShZB_$iW zK!7$)L(_(bw1GahrKJzBB&ED;H`z@Snq)&Z>4S=(77#3ol!p&gUOuP~)Zb6|slOj! zd8mj8BKiXq0Ywl25fPQ2rT_0aGjs3Uxtl)t=zl+-bi2EA=ggcr=ggUN&YZ*Xch<_hIE3(l_FCAXaw6RYgJ$eH-#6Mf)csz{d1_ArS+fA2 zaYKVNO;6c7*=`F77_Y0KfkovXykRWNr1p_+cOEg|Cka0IpKS4DtdLutvYSYST91ge z3NGJ;w%Vx8aGB0r5@=V=3GhG1@7Au1uqRa({)UF6<)-SCGr)IG)VsfW@A73P8D zyR;e{?pQgy4BK3io`IaP@)M@h)CcTPl%^n<3~z+ff*Rt$J>RT_d^#P0>e&IDp2!|Y zghW?&pdut(!!F0LK!<+x9#c9^q&~Ymaj;=)TSntT3`iZ_?;O;msIu`?L%*~3ny zUbS0mx0Wx|pXhyL5PtW!M>&HHc{i#v*k|-Jm5A~vHrwqJSE1H%RUg&MJs5xBeEy?{ z=-%eRTmvna+D%{J%=LWjR&k3X;KMafU}%SXLO&1Itf}rbx3%hQ-siA;;rJR!+d*;u zxUB6BfdZIqqO^vC6Qs0u&O(RhH%^2E2fX&wifT3pm=Fy#!7`n5J@&`xk5gx%Z)zz z>i*=;s(VVjCsp;h6-%H6fVAr^B^8G+sZw`msAz&Bs!TecG5Tw$d)>XX54NH9h!a+W zFQ$WNg5axn5l$eSFB>p31QYsso1_zYHzydX+?67Z6zLib=0^iSss!hMjJq^_b$`aa z%?rf2L0kb9t1{vWjHmY;SwPMUQV&9J%BCQ)KsXN>cU*FHZ}9%my6>?CYRe^e{VmQf zje9S-y1$^WgT>sq|9@X%3qU{XK*;EKsNeZr$KggCz?-l)Y!>g0_p9cp94djS6*MU+ zNNS$JvaX#>t*u_yJ2Q$YRXR~jYWfOx}Pb&Ol-2FwpQCR3mRrU6-y zNE-Fy8|vOdP9E6((L)Jxz;=r?^QhxNC%JuzG6<(dM+4F+866OsJb&2p(2$s9+PlmE1-F=(YqW2u`y1-q{9F{& z**iMoe^J~(bjUdC70ST>iRH#PGBl22oj9K24rp)M&*%Y|R8TYPpfgYmjvAELV++-8z)soqJSoJ3(0WGJHVYJOYu zR_&$YR!1;3(pQt1Mzt-!ukIi2EXdANQdK`sE!;GSjJP<2EP%TV1_c!Lcx)aeBqW>0 zypiDoS$Df&3C6K-kiLVyXKE0`DHr^2xRp`?q8%ImpAt*|;cK|F(fQPJ{O@P&v6=%_@6}tyYkI_9~HC>;4a>xKe^Bs!hYD(4t-Z0fQ;ZDpk zM+)P$9N*m1JhQZ+9GeMcxS*MJ^%Sr-$cf<;$|DsEuwr_xG6b)Pdz5ngD7IH8RvW)J z)cqgx|2bS}EE}vBBbwK%pTkxuqK$m+d|>8m#mKF#mL6DATcmOz;N(9@RKa$AobCai zC|r*zNie~Gt5nD>O$57JJUl|4&ROf%uuR0$fyFxX&x12h;Di>11>JD9)c6CdPpO%b z2NE+-2Gc!4lr9uHNnmal8}KqTH{f^%QG@iO@DYcWJA@g`Rxt%t3>M;Aqo0O4*p2Wx z*Nz8A8wxOk5%i!UwH`EWg}QZguciSgZ4p4p>Pl&Vu{5yLfWL1xU?&;&t;ku-bukU& zjM71x(+jCeIyrDD-V7W-{m91n58oJmV`6tlF%X$B^q zg7ciwXG7{B_fphCp!%6cK&i&BNs7U#M*sLO4mHke2J8&Mo|zWM8QN`$GmM^JD12p9 zSYnKk`=Kv25xIS`A|IS(sKAJEmMPWCyFS!xj^uyHrD|}WEiK;FnI@M{)EoI6aw!k_ z916m!Lrn*)eLT~2=Z8VJI1VHlja&`6l#d(%>%{5r_DrKrOM2}==-r&kxT_~|ym6+? zr4Hu%%~Yp*Kh88@Fv+X{L%Fr(p@wr*rW2=PU)OTAAyw;c-&!ZAUYk@{N-Zojm;E`| z1e4+&uMB69#F+-nBw)4<_lSPp`I)y!2HA%nl0JdZi=J}uH4YM6^%C+?VsFvZPb6~o z7*f?@grG#nD@Uaydi0ziPd2(a3ri`&_UB-;a8p@6ae+0K?Ona1S87EjUs@`odBBN9 zV281KdyTa2OMJk9pP}_YjDR0t+Yli5UcD^6bj167OfQ8FirkqJ&44o zBnf7IlNj8Gvta}+;ry*L(()|iFR>b1T1`O#MInqbUosr6!$RXgzK|Y{KHvXC;=YZ| zI4#0nZPsJS5PamReIMv*4>3X3VR7G}lCw?*pS$9GP_?GzKJ3u55LbOzs_K_1bs;;A z8`)gCCB0mprBdDpQf{C4fbm>ID#iRC)MDrR#4O!HFKSd5WF-)uyiNJs^uGMSIx5x3 zx||W6tPbNVM*1-poSy~VcGY7|0_GNcK9?%;V2si=NZKK6))8GXtmuLx3o_gX#aK8B z64gG~h!XKibVB{4V-))Tqy@7TGNW7Ti(&09i6V4Q)8zDgLGR>sjSR@x8A3!Enygk` z#TN|N8N%^`f|wRjXw^XE)xiKFol%M>rd>=-eAnnBmwFR5I=Y2>Mo(||Fl8Zf#SbID z|CMoCPH{o}^C1E^tOK0qQg69ihSH*PflN}%O|oh6yGWbAxm$2fFUOj+aDyK4hWUH_ zf$kRQX7u|^{(XpqZV01(0>-$Bf1ky__c{kgey?@6be_V$x2oS$k>4k|Ti`3B{*UF~ zmpe0z-y2f(ZY%bX?shB`2?JUJ98UI1t#F`Fu6!aPT4Q?Dcrw_<={IFJK(A?se6JzR z0yf6>zUZm@*ydKGr$b&|VhWwXQyxPZREfd^(yBpL-_ZBG47LMq@0@DE+=|*A=NN;P zOo=lxLyRA_q_>oNR>!U2fE6VCC-$JZVsK^Pf9FgCW`=MK8|5*&vK@1W5vj*WilqF5 z=73!M+0D*+GtMw|sN2@LLge`5r)ZtniOzpi{R;^N^|auXmSYV@h%v(eE~A>lh$Z<5 z-#<|y9^|!$F=eRWY&7m%CJ8p?g!4Jp2AG<`al)el)$w`~AUBp|Vgh6;k=?aGN<^P& zX-XqT=)-0_q8dX5S$Sc%C?IYQ{2!^6(U6+VdA+)5pWuOlh$8;LQb^)ZB2tbiDh87$ zeHhOLp_K6jqICxUJD)M)5i$fjOZi__1w$zX1Nj!4db5kTknkQ^Q!4Gwf(`ckly?cX z9wcon!ILz1&8JexOY#k@DxraaEfX~KpY>;9RT+9bF6y1{8t{{V-@2h6Ie7C3ZIcEj z>Cz9ZCeWp*>|9|GVT;n8IN zqV#66$MB1C@u%Z?oj){pj;I{ECE%V%SZ=YWcaYdkAu)%`B_wb7BCL%vDGZQX+%)JRuNxpL zScfkoSgDty1d4a;;&_mug1|m-odfw^(rQG5Tys z9qwL=+#0#|z)pmO(~&FjHl`pQSgkSq;Y$Aquhz3*wU2RS1M8fJ4cHk4`$$?V+d!md zg-L;1$;VxEp1tmqfseH>bp*@R6@gu-#jp!S9xi1KVxvR}ueS5*b=Lg7U_M4%vn$S4V$1rt)rtKDui-$Z%7<)-8BZRqj3Ll zP%IB^H6^aQ6QP@gj0hHxt~StYL<(W@2(aZ`-l>dTq;Fq=MZ}x7D?fKY;;nP#E+K<$Jq|64hEB3oct#yz= z5*$8lsiVM#z(SKoeWBSHzs6xM)#%QG_iRp>g9ov>)0aYlS2KuNY-0L^TenG^X7t&R zn&w{GStqigE-{KA91KJ0f|FOMJjhc;R0)BUP{%d=udEo&#Y1q1hQ;wQFRZOpV0z*D zzz`)h3*!GsUY-={9t_oqwSjIi)6gyAeUwr#0;i75NTA}&A&w%)ZCa?Ny11CFa|%z8=%H=%-{f-2&5P#gA^6}|=m)qg!IyhN{VGrpg2Bbq1Hy;&JOxaPt-iEE zfbG=WsUtagl7x4xZI~a)V#~h~(i(^1N3eTx|%~vGz9=&|XJn zIB3YghMgbwwGxIw{CFNG6SK}7%3+0^$ ze%brtgulsegxCc=Fx?+(k7veKZOBjf`vm05Oq}Mx*e#q~zZhrOSl8BcyDb;hi36yV zLHE=O%+i^g-@$Ny^yyUw-1mE5L>@}`Bn-I7#XLL`YtL}qEgEhD;zu~`Jr>+`ZcBe& zG-ATYAV{f1R;RnMez3zZ$3YUyST5Wu&LZVpu0s4T@R7jZcQ9|2MgaJ@$orDgWrKLc zU2idF?DlwOY?Zs!`&`u%LX5e@fw&S5^8Ju*73f!$f53VU3a6r9JO@~0>6(teYVHyL zG=9MQa(QRX3pKy@LU_PGWRu+<&x}R2Z?TI3JsSL4Or?ST1W%}WMM_|-v&1k-Fkp4Pl4uV8-2K{0m_(Xc2t*L?gz?j7k3 zSo4-Sb7oAffbER?nGJYRxR-c40QV0yFB@cH$PD93*U?txp~ zI|ha&+?i7=kfVzG>EHdP1@}YVR{{6cn%4}txOau!m*AT18E&w)mpb5oUfU?#OMz$N zE#P_9)Cy>z+|Om;>F9hv?0pSz|5Wq30awON5L~l8!v!Bo8otaS`f$MiQMi}6cR*e+ z+}5cT#Q)UK=TTcW3U{mbb-?{|%^L<>;2HA9ZXbnvxq`dOf_r%g_t+5bf1zd&!94(-Fb#wCKNt_`;;b4&t(?Y-qw}3~xZASJ6=RM&Hh{TR@oot7 zBi^?F6Ozt=+0HdeXpCn2D9kg*klcyQbWyf2o2QD4HWTfF~}vbg+2 z{LZh5fC<@Sw~&C*?Z$hy>FKfc+K9!-t^k*!Tngo zGTKWnjkTw|*O1YQ9pL|QQ(BhInFFDUdxA3++?O%x5bjlg*y-Kr{g(lEE5VJmx8Np9!%ZLu z?kX{5MPWGDs>x@wE{}8x6r(Exk;C1a*E;b4Vz94{jO$|%HWF$T%I zv?gYI9z#dFT9d0Bk~_|n7HbSimJ4!Cu;Dab&N!xiqHA(BAa;7tXKc8!_7>a(@xOE2 zu@>C1oPW2)UK3el5K47WkJnlpuHhm!VlL6O`Gog9;xF&N%X@f5@XxLp{6FGbvptV* z)-C0|OsgLg#Q!lFQeEZ_;(K4M4OG7cob{*3t3zwUeMZ;j8bI&#zUTdqF$Ofm%WltO zm^h@z;E>FTkKq8U%{Wm;`tH;U!ZX8+uFG~n>-7E`>k`fz4I4iiYtJypT&iIvNM1OQ z7g3rV$Lo?_Lc!>;otSAnvYqgLvX7xiaus-WT6e$gd;|Zl#2>#Jul4Tcb-2f^(ckT2 zSsrVTXGrICy{cCrm&%y`2?yiUA8vIgdQxw=+wi$IHQ{}!l~hY~xpqO)LKG`dPa=(R zWYnGVQ1`vgy9ao=+y9_3jso`W-dKC3`>JsqAZTth4w@5qFkXP$PI(hY6)PZ_Olw|4wZ}7j?on{L<_ztJCQqcR=OJ#TPaM7gm&_5l$`vh9{kV7C z07s+f1Y$6aiy8w*f}X>+dz7qWjwp};q}&^rPN^!OUoYrGADp8?)=(6ajd+^5^lbG3 zVq%!*SW3oXa|O{H(ZR1#OFTO7PkQ%b-uHPA*z=CHXMA6Bh{E^wQTC_#T!(HFWZ>#0 zYnJG$Bb*~iib0Ndqj8*zbqMkQDenP{<9_c!V;nnZ0b=cW996IAaX7?x^k?FKZFRiB56>^$AP(f*+X2}T4LJ_ZWl@^D z(fc9h{R8hu#=Pa($!^d1-qo(=eJ#t2_*$RhwmH{`T8rkE!<^3~SMd(pj%XZFn)|Hx zBaGvR-b2PX?&ozU+mzWpy6)FHkc+52a#sZZYpWN_x+jw6V9G33fd7f+xUVS9ea?Fb zuz%$J#DEQYubvlc&#>J=jRVNJHsSORSg@CX_vdLjhtqhG&LoMuMS{*SkpKFu_IdBe z;4|+pN-^c zr`%WhOGm)M3zkkt`JPU+MC17*-&xM?^)K$IfYSJvl{NAmXwa-=%<@D@_7 zQz&%pbreg+zn}*=J#dSKQu76uS7C$^2kp2$7*B@AgRz~RMcLW@K?q(9gF?{|EQt^o znaTzi5|t^AgB}rF1=WSF0R`iN2WSHoK8ZxK&TK&>YjcJ8=G;EPvi_ohlhO zqVXp0VVs@5?fnvGr)z;v;Ja*&5Oe0l+Jl#gzf17N&E8Ky6AyWh7&L+IOSETsuylo{ z39f%Nrg~9?CeqbQxd!2pCFFq$1yho$sz!*p_nC-1`I8=MYK^@xYIF>^{ensy^MFL;Z z_&Mft>MJT2Zu1@m?4Np%MPa*xvGx}11o40Ttah5Y7r|Qgd8R!RmrTHoU+^9S+(*5i zMd9v#Bi5d2Z^sTrd)JL2{vQMTw>jr@^?RWQ3`g~!An6BW1z`cTWpJXl=#HMlee!*# zyX_X;;d$_XNxB;-G94}1{j5cIU-W*4xj*JTZp?iH?1br9d&c?PJ~j7eng8Sa(Mq=s z{O?)&k=%?bnTBW#QJVXb_c+GzGwwScLC&A<2^{69|aWsMa>MW#O*N0eT_?EM_$e%yP)7&q-> zOJnUBcg1Es?gY_b9Cz)&-A`fboUy5;i)@|mF#W~X>~`-7!2P-R3j^+Yvc<*PGrpFr z(QwDm(PYf>s0}?`-2om&4P1fPsIh#-`z7|ehik9IUUwz-I^;|%gCzlDvD-uc z5#LDniGwdWMx1@`!J_pNZEO6h_rK+^3*u?ACG)G2=;pn#_AR^r4|UY2)mYU~zY+C} z4e+bJ#fWeuK>UP!jg9InshMs&Xt;Xb$hv+~Cj!N|Q&bsxM3UNp|Eo!5K#V-!)TKLk z>375-JH8y~8{7_n4wC)or0kTDLp1F8QnVdt&L?LdyT>U_KHrL=tOlZa#}|XP8G?;I zYZx|VkcJCi$<7Ms0<;IwdXxMJ>EmnOlc0}ZcuyJhu@rgmE{wHj`lvob@+nZ!%ol&QvJ*b?9?W= zZORPcsxv!WEzHvm82eo8GT6mS1_#7-PX;OSH!`W2>gL=&^9U=tOnYx0Oz9aoZ4Ecu+eh#wv1> zKO#`ju_^QBQoF{lh>7ga1zYru^bctB9%L`k2aT2JBOL3uyk{`hUwgkX#`;y9K|UO7 z&v;9#{WUQqLGr=@|3~TL{Vcn9kH}B0fPCfkHt`SeppXCXegnAAc+VPeVR_p9Y^*)w zXvgguM`OU(A_4w4;igj;K{vq~Sn{6tbrSYP8&_x#`A_Z7Sh8mR$nbDsV4kdWz|s}* zt3)@~BJWm|&i>PT7UTYn_na~AJoFK%znJYAUyz|}k4Q`v;Q#oZn)(3tsi)X3jeQDq z7NIbvFX}T&U*Gng!x*0Ro;St-T37UCwrAX-tr`Qdv`Fk)YT@o;-YfS`Uuc)wRFb~H z&rB}_J4#=7dd~y?bKY;QvBujoz7j|4u_kDJ<8t7VkiHNzg84DMn0Ti-ipIOV-vaLQ z-tP>!_`XDYNnc85PE6(VS|W9!g`*F;ZM|J$vZR-i@<6E}7Ej_ifF++0=nQ5;4mg$S zChW{aV_!r4&?t@lm-jo2{kPr=#@L61fF5tRXPoJ?R-#c5|2wOq`qSFfD{T8vIxmkM zWtjTpAil*kMq`N5*mt}aFoxfGzcmyoF!`_V_lni4YD8d1$yoY zGg?4pY?m&vPT%uh1l-?)$6q6wqt`C7=)~JIj<6d_K5S&WblhJ5C)lMIY5miZ1w>u{ zv}gx2A`J*HE3W^)y_aHf{m>I3SJkWbqqQFmeNgme3Ynk4|FB)rU)2BJ_&?qs zq(9tyNp-*um&QBo_KEY5zoQB=4`|aZ)jNqNPxC*0=ili+Ui(q;fJ6GLe0dRnQu5$$ zBDdB%;!Lt&k&WwouGBcv+czvzVpA;%Sok9sTwqb*8^$=`(qsK}dkR-;WPEXPq`yBq zgz8kR+ELAR8s#|rC54#3jNpM@+GT>fZcH&8lz!H*BWRMQ>7Rp|jEtq~_8OQ_~v>0QlcoVZcukd{Fl}aERcREi`S;Cq#8P z)A4YGac`E z*n9<<>#l7kIAnd;(3_)szu~N#-A-rF=%-;aYRy1T=z`ppaoQ|*&0hO}O1`g52}W_F zzIR~FdQ|+Sq@w{?{vo?5`hyDEl|iIfKJdSDkpVjc*jq4%Ljc>PfUvfP>s({BZBDhw1xinHnVybLlYS_>>UGCP2}lMHlsf(uXviYrBcj1Yqr z(pC~MTfzTbm~!k21fPMz3vUt#PFj4$$_&w#zffSfN^Z_HN**y3E9+RcjPTf;CRy=S z3-)$=UNh?2tV15eA$jQ;Ys1%4f*9Q}=^@9uQc*Y+^hz9+ALyden;_?08kg&x?-+11 zG-uf6QKSlHYQ~PH+frCS*|-7Z<_~e!F!5lw_26%c)d*DGTo_3sEdw1t`P2w>tCVSG zi61!F!EuBoT|~+NL`Li;RJp*tLf`K)>QZxY=6$V8jd}o$Mqj80P}eWcGVj^S8l0u>*<#lS z)efm&VbdC4+7sp3W5q{t?I5sgP9j?^3$yI&oSYt;j?Q)%^P(HxJH8VcNifw z$mmwgqdtI<3vKeRkl%UOmLa@)U`nhy3e?e6udFOor|A(9AxJf^Qi#LjKwBs|9w@tL zbe7pP_&<>`U}gZb753l-200Q@LrhSDP}+Cn65o`-beRRW%{HReM|LQeILqieH~H7N zXHyg#N0SjD3CSY6peGY|^2<;P(e28B%JdV)65OyfNfp3BBna?~h7vdRaeFDgR@&Ph7qGceoEp<01|< zU!*rRY5vzg)NT_G!q$d!1HYPB$0eOSxnoD7FI8}7=7*6#(z`D;Z+IBDi%Gly+lYuK zal(G5xbIC`L5ivIucln$|H;_r0)3@&yW0wV`mA;cp4DIga@&PICJ+Rcnw)(>g?Lb; za{HmecHc0P$c1V1koyGpUpD5UP~crE98IFhfR`kA8RV9gkmUMvb(M5BN979`0|hmAs{zXb+aI)vha)iTBv>)~Cf;q#aT%6(V+IF4-)L@u1Q!a7 z0nwbTDXAI@TzrLnJGwbmpiG=$z-7E5Z^yah=mk7Xutb08pCig-`XCx2X_kFRRYcDW z7fwv~^9F~Fr!PN@Wf?AvboEfBPPmtw(zutg)`kiGe;+2xY2Qgwp$;AQ4$}OTt#W=dG8555=&U&{`fZp!b>cjt`XC9H zCLLBUk<$y=l_^IE$IZowIsgov0!ZQlAt;9lY>-63+LsA&p#d|4HQfS!T&SXjjAet^ z1qLHjACPWo!gU4e`5F9|x&XC(^WrSNE);TEP#FVSq;#@#s)A0?V#$Riv;ifQpC?ct zxR0^{)bk7BB?%rruOf{DqYus`T#S#g!JD9rr$T0k;f++ep0G_IsCSD->5Ri-B9D5` zsO4wDN;lz-8FVgIaVQps@Z3%1rFd(De%;$8)vbJYHxe^2nG-nt%*Cbxd>W!at{|79 zN8Xt`4VW1dA(wK8cAP;;zCmA9BZkMgpI!63 zWtJ}HPE4^GcRl{sfR!OwgCk7{$zcvS=u&|ojbY8#fiw>2gcIRl{DTGYs?le| zB-|;7@8+zP`E}T@Ie#G(9fR_cqLxNcbkNf48mhRuIgA4=FtG&>w@>YOfbnl-y==je{G)>%Vp zgnjfZn{?kL=b*MRCH><~=cPo8A!+X{eonH9;Y1(?u#<`Wv!GiT(7 zt!MOLViN_j)Etp(YoT#Zv0)PK&ko4@p+try$(~r5$%ZzZy-NxyoI;|2YU`{tU}gv= z&i|7QaW0oKN;tW6&RJ*FENe&&vrX+hlA)xqkhP;U9T`2xB0$x)pyh3B6LpFmivxPi z5X}6Lm=Wqqal)gLC|qAOz(1c)FE;9$HB?vd*w5Yj*h_}3?rqQ%7*>|w_84`yi1Q{Dq9&g~~>&6llNHC<9V+H6TiCDK&wNtU8wE^Uxf zm@9>kj(){1=S~A=l3?PjdQLa&ZJkg>;x%-M`0+Qq5$dYm6m)B4FGR%!TyT+g5pW1J zpcDBGM!9^h47;y$pAB)td&Rp!rsZ>1` z2L$I)8y@DkTA_zV%jn^gBwIJ=Xc@o;me>SKvz^UyHTY>sCe-X`?no$=9V&w@=GO+i z4CAz09D!mRD6EF0cWMr-O~XP*Vw{%*Y%<*IykR`smwFVr_j*Nr%6l+1FFX_kUEt#V ziEek|fR4EVt>sdWxh=?f(=?B$7G)!*BMuVL7&=yJ3Up4WrHtu8sDZ#Xj27v{#Ez4U zJ|0Kj^+8cNYbMCLrEb~6Owq+zY;wmOqs`CV7Rbtqc})4V&Mr2dL<{0^G!6HqP_rBH zQj=5O4^#6v(Inkh#?}^{0c2NVQOAi!-@kBM;4}6+XbxQd!yHLsHO`kBM#Diz^4?3b zgqEO$qDGZmDd>V|g_`WkD~KPI1W-O~!Hq zh`hIBQmKL}Hr(Q_d0fUIJVM%>!zYV+NCHUJ3yN67Yb^FPxJY z!w9<3>yVb#1^jE-N$&MtiP=feIG@uG)LvD4Rr&e)6TRm;Q5z^dik;;9-mA(^@``?@ z61Nz^lZ){gf7%}f|I#C(YEmP0?ST%z0_CmO!a>myfeksiT-* z0CNUJGZT&?7V_uFbyL>E);cLyk+ft4rwpB(FYsDGMi$c1oKc|9tw74u9LRFb`p(>% zUIl{nLDVay@8Pgg-#5F(NdEMO>eY}L*`P+awml;c0NVywGRWhfRN+BSwp>xC=5QyH zb0UT|g2uBVgK-9HL~yf1qLXafq^l{92u+%gxTHI&e$w4=e9P}Ci|>n+@k+rA&E4!z zz%FM(lp~JhNly~oCd7$IZHkZk;lS;g=>gC=qR!n}LLmns(2A=cBWe(@G!Gr;$M+d? z&(IhUr?j-#i(KZza7XlZTPPmps38p=$`RRVlp!EgO!X-c$3EbS?~d=3>1-&n0z)`^$#u)K^@_p& z;z8rw$j>hs5XX$0hmv76<{{?6bxhko(JZi&MwVFBJOF3v{71s3*UMBjaU1gx2<<5tz!` z>e^1?v#gpZWh^4a3lFejl&7hSSB>)(_YWDdG(O&dBqbDf$Se6u(l7WKu7$yDXD`n4 zR3a7tz=z^(<2=PMaQ;6n4#S9;EDgnI5Q77w1MXQa3TTDlfd7}o;UGEJn$F>Yq6C6Z zozMwM=aoeQumB*=uh*f;8d#L%twGEr?bMiOE21&fVK{~golC1c6PkWX&45GKaO9F! zd+KHNdgn0XoFvyYFWws;r;0$AJq;I-$4pgrj}2C;tF+|l4KS@i*#xAl(`@L-3_3J4Lw@J$;ROXJ6Ct71Z7KM!->X>B}>Rnks4KJZfdAQ z(){wyVna7)xR4WTMuAH^+!(7|y;2N@Q?%knvrXR=Bx-vf}- z#gPKiB5>(3dpMmPCj>ORjA$y|D`rvc^M~O>_@H!MMkHh#oU)ApECpz`JDi{GZ0I;H z=&PZ6f(!l^aambFF8S7=U6R@XZ*6hB5z1K1$>B?hCyjL2sN`&DXuwL*xw>O!w9nqW zm|MEf-kj{vSnd+N(h~O$JD)Xbhw)fp_dGM~7s3*9kZNqN3D!#yGRr9HSO($fLmhL8 zF3OE9S)Y^u4*c)zF#P5W5A_PpvEk9xuQlpHIhQ>FlSgg3Ev6(3J0c6@3C|lhP9lOl>e>7@VFC)G{OzC@w7k?7vMaAH(uteE0 zWc}Ih>CQVi>u5c#;gGD`mPw2A+o2E9_Ch)ZqmGl=vuPN*@j5E|NV-;WbAM+6Wh?of z1>=LXF1RgCons1-Hx(3x+XV*t_IdM{Eo^@rHXt%GrV|wg{3OBe8WtBQZ2$|#bt9$A z6(s{8;GAM z7Lna&_`ftpAl6IK7qlHLkXC*WjX`kx^VtDXkJKp9HZjwJ*;@6SI5!M(#L&aapDK*8 zr5Pna;$e)c2m+X#Ffgh*{q?%U$u>;z|9OF$jmK5QBdDv;MK+Y2KAgcs6HE!zsYISU zm}m^hsj~Syh|`>sSZ2cfh2w1!>yEBUoPWf5Pub2l{Sb{Q&F@8^rmxTAohTEHa`jP4tQ_NDyt`$b zWs|Zfux)^mA(e3XUo!eprt!oP9ft<+bM*z-MXJqsOO9CNAWj{qhyr>8svZW`A|ME= zKRcr%W%MR6;k=)^Ui@{{_HR zPOP%~w_*e}6uDSHk4{m>)TE+1O=~O8z69&kj#>lO5Okh8u_6u&qV&EfolZ>pesiGU?K2Blu^83Izjabr+2HYgzwt^>mItHi^ zJ&VB-CT*ig2qZ^;0pYbIW)kPoa1_xeYP@6`OSd#U}n z_!0JI=ned8GWX^LU|LlMv;)>P?)dNe>UCAzvbXiX_1Y&#tuVS(?GmY9m+P6V?bq zU74-XU0LXw(o?5_rXzld4B%`5ZJZmC+1dt;;i`h8^6o^iyIV(Kr7VQ}q_lC4t88|2 zYs6Vt|A2q1&q91dPUPFckfSQ>!FUncIjU1iDN}S1(^vo%(86e44tRwJE`XgR*zl)* zXo?OrgE0|05yj;Vti$2)aUAXFd3i3CY98tc>BK);J=|IcK^OnBq?V|hQsk`aW@nYu z69rX`(KyLqTwBWr#8SgLD7V?unA#0>EYut^>k#FPCS0WI=~d-?QH55Bj~Fl-s?TQM zM^^`&rAki9Lu8#hJvv2MS}t(NQ9UQnf)t>Ls4dc!snb@HW^`eG2!V?#8ef`!h6?>@ zfECvnu#*hC331mHYMVwXq?Xy?;gR}RqMr_s@cL=yA<1d0EZ99b54vG)$K-Q-KQ+WB z<~p1f%V^A6Mb=@N?Ddh05cqJ29Jp45bYB~1z|K4@SG|QH+$Tv3WC{${tfBrghyz!w zQ}G9ilwg#K*4SW?QgQdJRT#1O+-v+PZ>)W6e~;PL@jYV8ArMCbt*K zY-=Vq;mf>|gJ__ZrU7DFB5+SFz;BY^;*M)4H4ZcbL_YHMNi3^8F|%$4p50l8Hd>n@ z#?@Z%01l!Ql*qJu6MwPc;#_(Lw&0R5q|2F2H8eDRxh>ej6Z7F9qe(3c_FPuMU~MSkaw}?Z81NbnI@WD%&oaLls8MWF za`wiRR~8XiW`q9r!Z_f6=NJQilHjAJ0_tF>Lv+YEp-`n2rAq~TzeJG>Z3u7!$k~M! zqo^G?5RfXsCygE)WN-`Dn&2Z2aU>wf;C29qNYmURB&-%$eyfR&Rx>glUgP`tAGJMAmuF9Y03Qd5I7IZ=P5 z2$g!l-Mm%Sc(#K7H&{Ll1%Qji1~W7kgWPhIUB@)YVmoqs>&~DBd+TsPe1IG8ZT5R0#eK$rW(Jsv zw@7ssb9FAV#&i+(*Y%;`S6X4o*`J})oihU)j> z{%#lFG1amEbhUo~c`1>|w+p-8$Ut~`O>Z5tC>)!b2v_EjA-e(5K&&*8JO+z#eHX3g zBmr+b{26C~1Y>7m=10U8l?LD6J2V8vt;m-z#A(yaBN4L(fgaT{i?h&t!i zxy{&})%`D8Me7hR)g8U@2ONW|W&<#(5?r$T1*nJJ`dJ(HKr`Y!ImU*nAS>NLsvY#a zUQyGl&B8^~2=BnLgAU;a2d%X8stphP-xE8N_>=M;nFQ=!5~La&(RZ$T0rU*qgKp1nK%6k+hMbtzuq@iqJ51^H>R9{1h=O{Z+ zp{6mLl;UR4vIN!h2=Q~O3yX-DNS^+PhTrUh{}T(1_^iI_(>V`Vfg~YvRHkZ9iCI4* zU64@>YC2yx5A2>K1E9n9^{r8Ac@rpks5q=XHc=3a{)sx6>Vp3hD?7qFM!D*9VUH=k zYkTM#BNi-I|51)PI}LIsqyTU@ne^_~JV#>=Er}rsV@H;}ARTIOp5rDh1%9~T|3qI$ zc&8{=zs+r1(<@fW&@MuXfr7Aa;wBy6m4-`x9jk|-#gDuYcu*f{*e1H!h#||>Uxhq2 zn?=sHSKeJ`VmSl|Y^(Sv{#}zA!QpL@Wj1t#mO5->^q6+tVUp?g#AQZ&S+4$LZd-RD zZu`BP3MQIss$u~G(25fHz-B-NL<1VAlwX$3@Imj5n9Wc(<@egFYp*WvH@^bUioRIv zvTV`#1Me@&X84AFrgEkbv!=#uhL@7fkow}PKe{o!(@|);+DY^sa8Y};cnCH_vf9vV zI`g3B!-o26-RxP7aI{nj1(MOFbiOa}VtDBsXkJt^9fZ1Ao zs#q^~7Gne0mtBVxF|{R0_Q3FH^9ysAWO0JDGMAL)!2{;miO100E4sQz`k+&No;0=X zk@(y=66jhDsjw0aYQ8!K5Ax=s5@rF~Ct+?Ck#iH~e^LEM#f8>1U_t;+gG;MQmmzC9 zhx@_MEty`zr>$8V<@UkErcWAdW-AlsIVywkY=xh1hP?Z2Xl(M#FEv`Jn?{Ocga6+P ziVA7zI(O^HfLI@qFxuo76$5I~coHU$;(KW#kQFr7)yrn@sOz1(;&Sdpe$Gv>aP`7 z8SNXY&vRSnk8oX2*zyYfgD~!qg%L!|S9AarqJqvA6jB~4(@LRI!a>OfY8e_h$f`^a zf%n9x4VX!Si5$G$ope>4ZrtRD$U8rPXkU0Akd=!N71h7u+-XuNm9*yIeL_3im9P|a zCa3fe;!8Gc*c_Lud_sjTWJv+pGclNzu{kgZ$_FMM5)=+kED;04nIeul@t-yfd@itz zu$W#J%2i(y>C=!Al1dIY_Pxl#@TCQK@xu!XblMwbJZcn!h-v)3Jr3|^Q7(ig9s>Yz zK$vuC6bQsU`%SZWL_A`QB|~ctTVxxV1lGZ;6Uey86^&JNk%f7u)L?KI<+nzkP4(Bi zt@YQ5)hX|%sfZpMm?vd=;U}-5W`OXJT31s1P}g@ zW93mSBy@@YxC%_Vt_tNtoRE_=b=>+J_#XC}GqjGoIHu#OM@boqYqz8|vW5%0n)d9| ze|y0^%FaMKEzVI+wW-tAf0Fgk<1)R)!9LjRajQXT&Y`Y`6UHb$e&^7LPWvh7$3x;@ zt=#<+BqSj+kOV| z)5U16D5;7*jI^(wJh3Rn z0G(0OZ9{dZyM3S#)%ljm=yK+@ebDx3q9zor>IEEwyTW+`W)d)4!8>b12LO;yI+L+v zfl?s9Rn|@2^=OG$Fb=j5%dms`>zpAA?pE+i$r9974{v4Rl#l`5_@+N{)vPBJhkOPobP0H43eULF!3;03;<(?}J5Wn>B_l zbyLMsQ-MoEyu!I3@${PgldeGfo9#1K&IVAH^C=q!_lL{B^BuxCUEv8sWIT80tI zf;oA1zrZ~TodRA9wndQ_kkoJZOb~J1M84Cq#X+DCw<2+%FhwRV=EwzZ>NY60XhnAatYtn_xR2dLl=#Nm`L=s^7N$5_Rd6nk` zx{Fe`$fnnwPD1`XZ;gZY{!9LU`9=uerTiduIpj>EBGQd`OgT*;kDPxRH;$CKDK$OteFRDva8*Lh@{s(P@R2yw7)O%EQQavvLz3+q(n4!i)RVynv3=MU2yx0Fj9{kjw40b_ zjpw5JTmL`$Senw{|HKK_7+S&qgS6}zVN`fSsX{_-N}M(f}>LOnMrQk24KPj_H=b*3V=sofSQmGM7=DV<`2C$V>V5+g?~!D zYClo?2}D)JUyJb-{;WF+Kl1*nY?^QCM=Eiz0OxJ1ed3(mFN-RU&zz!Ls&}$!PSJu> z|5p16@nhIDN7UyjyyuU@C+sx|rmLzyinAG6@_4Cq9Go)Kxq`e6&xdxn<-=1RYXJdY zLd7LV8(0@_*7-1E&&&`V=bFSkV$@K-)u+IKENFE~kVd#V?to~<9P~W;>c8pEs%sL< zQ{&%E%~J*p3aVS8Eh8LaM?+kMgm`4xq7gv*%9uCy(`RT`TgrPZg^I}Y4Hyme-(uO2 z!+BXHGsZzziKIw3>J&~lw-at z=e^KrBF!bi{RC{9TIB)-X2~sH7$R6#M$XN5a(=lIG35qUY#)hvq=n_V6d>{jVO>9q z+QFK38|uI7Zg2dN$buSUOGJ97ijkp+OEp}wuwGi!SEn zU=g06ZFV$Qc5sYR3yRRKkc;`0x>I``=zBhCPyh?f^)3tcMa4nn2GQikJOlB8nOy;E(*OW;{>EFi0&CnhkPCtS9Z6((23of0Qt!rnI=<8bfPmMj#iF;#3P^l%|z~ zOxY|-X4PQru`Kpj&EFzxvrL)`bYQc1%pL=BQ-*f|<&jCIiBk)Yl(vvt`#jBHIy`L3 z#9k+!v0>I0f>lJ>2`wPfBW^UT-8N#8j@66WZ#qWGf$GefkNPm4*) zOic^b4}13@?$`DrElaaI>E`do?*A@ z8-FkE;I9x10-NHgC8TE1g&{blGn{TtP_YP-lt^Od9B$gE#(y98d9s|(KO&oz`B2JB zIv(=5TL*3XLi12YK>ESgn=RX|8c+Bw%6Lo0HPpC`|xl+!U_jlD9fHQNA6 zz^|Gy`1;6IWq{{a+=ZQO^QyebiEoinFT9#<_@Dy0 z>4Hw2j~adE>c58=wF?o8Pr0qM(<-)|jfSBpZ|8E7oeXMgcJt0nMh=?3`v1nAf8^>8 zG(FW=szyr#CXe-Huy_|d;^5Avbf30R$p4bjl^A}c-}zccnDaAN|38o=r^a=$eTr9! z@OzHZU2(=2W_20`DG+JryGH(+T>agsYj;fC<{q&OXidyE;!86>8IDPNkt{{-QV5N( zK7;cEBacn4{vP&&&^`Ug{lw5%Ga4{M|JyS}@IUU?z8uP#`um{W!gow^Cbm{!av2%Z z)syeSJz$8+Vm?o1NhVS#OVaFwD|s@He`zD2{#F^&AzE?gHXK6|V<6iA@>o*#_08D6 z5P?oc!BS=%!`7D_8p_JzFpy^55VP3h;Z{>);i17SL#4whHk^LMz1uikrSQ2-%Oq@Y2<0SwdV7y0M&S=<98=&JX3XHiJnq~^VO}); zesP{9V=ZeQi8}V>VM-*a*`OtXk@q@}ay;vL(nEzpKV%!H9;aYTGGKI%6CetTU<~io*kTm#QXUMkxgG zfisNf8fwmWTX*abYoYI&Re+Qaq$JsfOCDKV>u%bzs0Qh#6Kw|EB*6v$=YowylE+3i zSZf)Jz-EkVWPrnYO`4V4zC82L z62pc7Z%IV4Tms=0+gMFdQFOC8CzL3pNDyHSaGudJ=uC+-jd5fM2e@-}qRc=VIG*;1 zbQ)ezhKWvP{Icvk4|#9J>^!*Lmd)w*wb#^MQ(n-Y=pFG>qA=aI+sGD;Klc8n>^yJj zXDShY1{^NNXZ&fq5Nu#?h$?Q=q+6RKV+|PO4P7iePWqO<5LpP=N>w)~nHJr6g?$d~SJT79xcmVqGMng9s65ZFhQXocJ zFHBytkcX|huSqO0Z5TEEeD{83eD915R_W&XjS%+HtaBC!sm`-iVHIkC2YPwUfV*AY zt&Jm%?17E{HzX0XV9XY#W9XnHU@B^4PIrHc_b}vu*TI2{$D%u z*kft3Z0`?E?&v%;=VAa*iSo#X4lA=HONu|El&+-0u-8Gk4Wt8u+UO~vCc|w8+zip- zK)0v}yLX|di|-h1a`g`({^CY7KGgc$QmF-3b3?z+OS#V>K{hF^t|W|&Nh3OUxt=J zMHwPb^5zVKf+^V;H>gifJ4>6*Yd4 z%wdpZCH<>u%cy?@auc@SFgD*rjTDze(`H~k_e2>SHp5Ou&H#BimW=-frIYM*#u;bS zhDyY$)twnC-Udl#3>J2Vr$1}#0#CW#g zu52;BS{P6uCsn~NHd?B9A!C-3SB6m>y_H+6Bcx>@yP6z0Q>u z%vR)g=;(sQ05|!YNReS#2Xa!EkpibL2`!psD2w>oML&cM>df)EjnftmZBQCn-nqeo zwG+;%^GeWM2|6tPaMf9@s%@Xi(QA9+AXCRwO z%-RUv)3YYDhpSx-g0ra>%-uF@*voTvV#yL@E7#GYRJeZjb@9vGoz9O9*csYOVbe*I zBYY23;Z|Pn{LXl;ul{j&7X00(q^drb(sxln|NEb=54mH1mU1D#oxdCXH`Jqc_p)W; z>~Y#bIlcDXbLC1e7XBqIAI`rm@w1mp)CO@ESk zh_tcXN^B)PNu*Hj=_Hmg_r(m&Y5G!88R!fk)`fJVi(i%&RsGM=YPxQz-uVuyys+4u z*1y$m7e8?X?jy;UbqBR(5WI(aMSNhEGAdH~Mdgu__E)OC0RqB()FNsZfmrC2t#~dd z+!UqsbWg;Fmn3+QTjwddfpB6PP?W>aNZp{rI(nD2R4lOYkQeBx+Hj!@LM({13z)Z= zYFJ{jn%^r4Cip+Q1d$nVw8)c)x-Ez6sz{Inehh2_M6N`S%4v#QhVTSXl|5A7B2UXe zI^`dRqc^Lf3$@_O;NV&IM)a;J;BEo`uj$IKD4=leW^{bnnF8Z3AXNt0w!{bbafR5gM?Cwf&#V! zju{UFl=E9}it0>^y_--i>&w)+O)4u(0T+izic*EZ0hF^W46RQi(T;UD6tHndT8RQU zeLXiH7T{2EIl@Uv6yNx$j0{301E-Y(@%g3db?MyXbWoW&@|Eog9P6=&3{RG>h+-rkWKN=*NPkALwBm|~H z)H6QGfYng{Jo~}3?U+np=HtyYND~-DjcPk#mIx91x{`{DY{Se1AT-?LmywWUEF_94 z8|N%F;3f%fx?h~a=4Q4!Qn3T{7&9$W>IhgbRq9X$Gpv?O)Occ=Xm+*L{}%XmX`dKP z$0Z5LiiT;ZF)S8jMFjujzGoQ!OXJ>x`UOgN4h(AMO+PjkF%il9qvSi`n|4yQz*z`2 z8hQs&>XnoY#RQ=}g}4!SJ)?_ie$lkTmlS%# z>C5jqbc={jTIAH1Iye~{yHaVD@kO7U2(mVm{<@M7!JNc z-kdTxKT#Xmq{SEAo$ytkoiP+e?OMSz#$i<1W)K5{xM4nZmfR3Tfq(q~L=r6%JC`+A~Wx!1W z?#}LRZ18{lBx+m$F7{WsLV%;&uG_Dm}Q`v+*VXiTH!bX@=U&xq73n!^f#uXBhiqW<+eiym@t2&7wNMC zHo(Rys&?ESv`bPujJ+BuN4kc3*8@ZyjiUyin`e@RThwHR#HltPMqt&lOIVaJz( zb{Xmq86nG$(|dg&55)W)BB{};mv#VroU+PCcfKOy+0>R2^T z{YE$$3x;4o`pequ2q%m~`f4nXE5u30ZHNEZ#tHF%6enm08|T3hoB)(EX~Gp?;RfxI zGr9(<1Y`i8d!Tc%391ZjP5dNNXbX6?(&rSRp^cPCBt0macYM*nC)#)Cg-eXdB~U8F z*PdPPtp3(5V$IxI&{>6?d*h?tKVvw>PxUXy+B2QOXE6$$NwEr=P_NqSBRI9`Y@yo@ zyIjpmr0Sy!fNGzoi9tYFctu;>v#KIB0=Bh)DAUJS_(VIvkKms}p%LMQb1V2ig40Y& zwm+y7w2phhAthIc+wVQ!X}{)XvF?&X#LT(l<&+v9^LCYIYp?g-33+nDNqj%rYL7PG z7T=uPCw|lLyjXpSk3K3@A3yWnDbISlyxm40{X&5Mt@gFodJl^o&#o6Wmo$s~+)3iZ zOD3p39`|;mk9T}SHcXKGZ?&(z()*>eeA$K0xv1H?`pWA>Mb&w#kDvSC4{x{c&^Ua@ z#~dpQFipRuB?>uI}dct?g2Ylftyy-r` zGc4RG-|;28J%1iN?lS$(uqKdfH|PUBIBQS3QGEXM_lTo=t}x*I!cPE>{vASebZ|dLd;Wa) zmz(vw9DgQ@0x{WQ9_`P1^$zjEZ)b}+5B}8X|4Dx=`cL|0jGr1=2|ME%Ed<)_d1G;+3F9VFR{sEW+WG};@B}m%s`SU-XUasF6 zMukC6kiSmXac$16@7Zpx^V9wTfKld;<9UqpA#<2^7uxOl^H&dBtluS`^c+&M{nwYg zZq4CW{y6l1fM1R|;9u?^Q)qmQ`!U+{=et_Ipxl<$!^) z0|vZA31G$f>ek1z0M~I#)?Dmi|jyUwz>0;Xt z7mK!Yjx})pyni5YKHi_eeN6CcKsPrEartnpJw1Qj9lQ8@yfeJw1QZMJMz3c$f5J$~y2rwYjD9VKM0n zb1uL0s{mtyUkw=emtkb-B3G^huUrJxY zIPCVUuW@`p$#VhARgxF#g%Lpq#-1Txw!XFqI6}49c_ZuCL>e5QXIr`&+JXOT=&TQ& zi|iyEUINo~8TS3?*#K>^k9%@clp48q#g`3Rx*FPIF4ZuSNo%OGz*Jlj!yS*m@sIw& z(A946YiYgYYXY(!<4j=T8f`rB^ZrkZ^|+Wc@!Q)BdV0mL#d;m=PvSM7+#;mw) zaD@Az-@lX{Csy6`oVa}+^6WmkT=q%-Hooqs&~KezZ}fY*5Reykdy)eQ^sT?Y?Sf|R z?~F&E;rG*Tdar1E7P>h1`)9u%xJ~(o8vTL_ATR9pgxdtt5OH&K61_3KxQA3b*##`!mB7t0v>U-y8*`MP-cC+LC=1!40d4<@vQ_)1@TmIqb_b~s6Sig3A z)Y}t@k-T$G)t{&z?(ddc#yFE6z0=uo$1eqOQt)d0n|}oQJ=||F`h8u9xszh;iT@K- z=jrdA)vCWkZn{ledBs&?;o3!F;nkV>wf*eW~xji~r{zjd2|1Pcg>9{BO614tA8Ys`gFs{Q4_JW-w!n*>7N<8CR;kv-q)Voz)NCC$g7hMSWGhn#(SKD*Bk>H=>X6m`fx2z)vrX zjkSk7iG3$=`i|d-xlHw^8FQIV{BO61E;!X$bMp@8ro&xv{3WxQe`FuK{b?9Squ+#a zxc*m2cSdX#_K$db$dF(ExksEf_Z$3Z^`p=|=rv9FP3U8qKRp~r@@gT#|8{%uzexD$ z;CuQ#TeVX>b3v!LMwv+@Cy4)_|52dx_?ZxU+}-(9{i7f4-dYl-;WqMR6HZDbmqSRTu1sH;~#^5oBbI^ zzc&j3{60e<6Oo_A2p{fk{@sWBnHNJHsC^`n^pE@W0(2{EvQ*48Et|e{<3_(MKCO{{HL9 z>x9HIK20n0XHtBne_UmPA>yB1{{T&8W9{+G*s7aus~mG6+9zIQnd4ym6i-NhNqpOr zy2{;#|IbPt*p-4$F)%NzK(~v-Bt&aJ0-yCubWSw5C~8~GUU!DKUHFk z2l%sO45%?i>{BJ$^B4y+dW?=}{HK7OCo;xd>SOLU?Eg;1o6afA9x4HEoZlLQhZt4A zG1i{pJ$Rpnmmqz@dF)yX-pAc-jqdstF4~!6TbtVMUXJI- zO(7ppacTwjZK4Sp-#1R)ZH%wdKLO)A-hYoVzHQLE?~k>wCY<>#dVC3yoFE+V|3rd= zKjM?MscYTKi7uDt5l=F(t^)lKZ4lh)%N{o1j`!aKxF`508gS7F>twfQxQ`yB;f^7` zcOXZiaIbSO2mhC`qqc(A`xtaa^f7+-JKV9DcA$SEV7|wnZNrSU$1`IwW(D&P0{qWH zrrd~uT${SyZCjBQ6XwCO7_3LJ0{qWwOYn&nLiiK>*?@ndKgWO%nS&R}2eZ8e-ys@s zu>YIzdr~(b!zA{Ul=m%?Ny`?jS=^h;9QGzc%$rw*~xva7JeNR_eB3>z&pvGYrw-mcggiO+ehd5G7fex#ptak z^%-|Cb&WVE<^6|R?@Ycsi=dne=2hx1y52SZT);ospBIIH^6prB3w{FpFPvo$S@XTo zZSh+~t%6GT?bTI2P67oBH?JR!Bf8$6KM&)W>(4jF0e!Q)GuEERvF%41?_)@|lOT-Z z{j+Wh_+PGf%T)5N^`Y6R@Xbco+xO=K?mT~i0T=7-&yKZ^&i{{0t8uuWLtZYNx+~gw zy$N1)y$|*m0N#8*W55Gt0w2WRW_t^sgWqHG>`8sz9fVGT_5M$_-ltRKY_?CXH}w}? z?^-_t_zV1n2K?OwpV!-LZ^2JsZ-~KPo4UzuA@~Yvcm=(J*Nys%uJa^+A>e2HMF#vI zVRa;3nC%%p_+RQ=e;h+R;rLC~I^XQJ0C#eoXHKn1{DIePHF5?-*ZB~C5#TQLPch&E zDxM{}FxyMGCo8zGfEPQ3173^L*Dc6P@QyeDz6%5uREWgOynfVAbiM2RQvi37zu15q zuD97fitktCdILrj?yYVc@I4kWG5Ly@c+IGf=o+W|#ejK=zr=tE4#3_{`@7kmVU~C5 zxh8lafafU8+jy={#XG#F^n7$p>-{Bwx7a_`fR`6yq%YQ<;RU?=${2huK~rDg+;2|B zcwU=s_}Qatd8mIX;4Sf&8t^c3@ExtC*`DFe(fY`%g6PWuA4TW)MYqjgAj+|pT?M$E zD>`{Csh{XtPWG1q?y3H=7+m6AvpvIo@>2@0uR5jY`6ZsGTuaG+)JJqJ)BZBRTH$ZJE-N7wQ&e>vbS^H&(~X#e|TtUbd^ z-K61-fz*NHt6;&q-EG6Z4%*?h8Q%StwU&qbD*$h~f0_aB;eapA_6#r3|6dbSYtBjC z{QpS168N~Ps(;@!4VgEkrj))nCDZbdpe;!QX$oblv@~o|T4gqftJ zB8m!H7Fpdu6nC^L?hE3ADI-md0Ej_e~T$Ai69z+CB_VPRrT1-+mg?e>DXE3}WtoPFrqft%#% z$K55ce=W!7MK0_kDaU5-3}CME&a^OZ#5il)3ufj~!`H_$#B%T_iTMe4Ne=UW?gt_l z;w9yHh<7IN&hS=Scs~#yz}VStFL=|VF-~#lXKV022|TXj?iM+|5qIY&ZSob~YT%ve zt+DVPQR=GN_DQ_Ii~ZN)-3GjU)pW+pD8lU-92y+kuH{MWqgtpWCGZ>@z*-s(Bk zZZFu8UH;wCI`okgZ$ITOfi7rywu?O3M^c{iytTkw<8@h>IHg&wZ7-O6b{l#AJu|Tm zeHwOx`8D^P$dhDfsPm^h?e>C~`CEuLWn%sLjJpJ~0iMY7TAYQX zJoE4u@@YBLTL-)@Z@qw&w@+hF0wvb5U^ZsGlAoR1q>CT(+|@HuxBw$W6W^#v0jEgKreIS;(0yE51dj}Iq- z@o-*b-;{AoORKj5w5<2evS@+tMIA)CJ)W7`I8qL2!Fw&9RT=bU+w8o;=iO27Ox0SL z^)(!YThep_%N|Ft6vTys!^O%V_UCljWK3X?c}(qZop)P`K9<1$%-9mv`&4-}pgfX$ zR`h^lpx(q|Sm2$7F>LV8w#Gm?*0$Gjd@LNpUi1d{rb)HUjT#?;HycYkK3; z?e>Bf`MW0^r|^*)e>YJ0k~@lX5Po6S7mePWUhW&jRm2soGcEH(2iR}YFC6Zj13ET( z=O*be@wMGPHSUbD|HQZl3SSm}&o9jSYGE(>V$Q==Scq3OF&c4_{-fPH7j&KDooCSn zJuv>pZZCAT92&}F3WLJhb8~Xodey_xf4F0^bw1_Uf}h3eMvmnKjS{Tz2HUu{3!={Gv(lY zI5yru;TxD+9;1)=veAu`#z({(i*`VNMc(W;=_8Kv`anmoS4z@h)@OG6B)^}^V7^ce zYKv_;x(j%(z+g!ovKRe`PFji%oG0@HF_Qk_Xs-mC`n=5+O^o}WsA(@W6>bk@G3B`9 zj>h`!dmc*Zz^lCTfjj7Jv2dY0&{4(;c6*Kcl)-&Qcu*T_eoyA6?8&9_a0%BJ zW8Fg8vY(_b9Pe!b?)l!3g&XH)?Dm4&HyGlYSo0eR8FUx!!d;oYX5CN~IkJzW+?RSo zz}(^uTbLN@t|w~R3ud%#cqXGVPbmlXZ|h%o;rs5A!kzGWC6Oudk}_T94FeB+wD2g? zM{3#&9_(M|+nzzbjd`ypQh0ZpT+r?6H=pTOF?c4wbydM;u7*na$~U7sH>_pIE7su`O|*#&k|c z-!Wz<(0aVGt1QfK(>`k23udJpVv1j3Y%vY}Mf+fL2HeHopsHWaE2;E;R2Sw`juW!b zqiQ+PyCB=+I$p)X#EuT^pM0^~i~I_+4Ce0@E{jqQ&KKJHGB9Tl@_SS@7G?|;@OnK= zRC45$iy)2}{mGbP{F8v(<6Yowx9~w5=u5X3{I0bjzSCX!F8B=lN9@8iFV@-Y# znMbCb%JHe(Y5&rFciif2&GrCogN1jyQm}vECEEWdc=S;f+nj`6In{d<Y-yLwOc`XC( z&|*4+SE%R<9<+bE0DA{XUaSHIJ>F})*IINSPf#2Z-r4Pij_RPHqfXKO(`%1`Ib-gU zjt{AQ3o}N@3v9cWd%;@zD)g1&!5Kj9@h=oa=*zS-?%y$ZY3x_}x$G|NmoHGv(>*(TVhEtB0q zW^ZxFB(BKjX;U7F=6ws1tKW+2*X4a7=AH+09SFQWZd55&`jMzZy#Vbokq09N=sSY% zeZ@3^d(Ti*fSkXa@viV57k$GBPBzO`3w(DC<`KCF0QxYoAK2-=-uQv23jf9VfyPgI zmt_01{o)5`&lBT)9Idq984xMrFXBzmeloxFdhhb=V0KXOVE;}4xpl$Thzote-}tnw z@!pW_ne`3tjqd*X8^lZ(@&BA4)n0TA74WkfA605fgKG4)qd4lJgq*wQAc={2-CZ*< zxOt36&vVjGFLXPJyViRn^y>}Yn=D+#j}zdJ-Cl5a6%B4y(f(`gtl%!0Qm3*j%Dr0z zcCGYt0dlTM+%E4;z|>d-%BLQ{$cEE&&gwE!TIY3N-fN*w^ck zuTNsH^DYJUo4m^`Y|PPU8>HF`cFUP&%sKTm8{v;_&)sw8>h(0TknIB8BmKM;`Q9Y% zdhaseUh2Ks!Y%Slc1`=_n5QY&{{*DZEtK)T3ihv@Qji+&0<5L*9dJ7YR|zijKFRT(<-G;CZ}xUrxD{NuRjO$( zxWysE=jqZ*1;>(~f?lJY$)!aYLc z3LY?{*aMHCxbzdSbnP?FmoMssx@ zYUt|tq<5vE3)0q~nfh%NpvM%f=Q_%g%&$ISCD6vDttCo%4TR9Hzn%q8Nzu14}hyB{^@yyi5 z)62PrMtF!RjVeGJ2ln59fB6S|%M48S-K)^wyh7tM%t!I~E=rFJFMGNWmmlK5PyA9q91^b6~?MSYzr_Yw!))_Gmf|K|j z$=s0BY4E{cYi)m?cP;R*@vgJ*IbK!MUhrGa4)LS$Ql_CCx~Cr?_|s29AcHr~F!tD7 z&dFGgG-HQfz!UhiZ1S!H_O;&i7PkHsd1bd3UxK`c)&XiZcn$kc_>$?Em+^gl?^p#p ztwKNh;CN%qZtr?vUgzDA#;j>?{8xzSDA<2Z4a9WJ$>=|~e4seWclER%PSuj}cJBFu z$U4R@dN%<3dhcx(HZ`WUeG+@-UVP`_g1wJfXkeT&2I3~i+~d6sxHoujw{Yn@|4`FD zh3mlnQEQ%zvAgG7B=Ju?<|Csquio>!)R=p{w*&ia-a9O847g>Z@W^hT#J)lO6wSz; zgpB8)jtAe>N%5H;FZ)Q2x6gYAFyHRI)51gy60DZ-+U--A4(uP}?MY#xmIwA9kN1ci zb)Gufz2`Tn@s_-I0{b1_yDV%pHui6~7wndEjefmN(GS*+SJ(CAqML%MY%k+rU&(QA z_TB~TcX~Hk*jQ~1mTKB3$Ne@3_CEnO>U&^6Zm8QwX*(X-^Q+XD`@I{1`!4S$3%86I zNc%9mz2HVZ?ClEn4U{8UEaRhccur*e+C9HWjd##{H?VK=Znm%oaQ9KEroCW$Z!$7|hl2eB`)w&~ z)cgQ@pI)i?A+C&>xXCe}@7)aCcYE)#aPeSO%hzt79P>LI*gtUJp29`FPh!lAqcLBx z=jW+0Z}Hv(?3=y!TG;WJ?eL3oX=!V z)4p6c=HL7oe|F&?*uVMYv3rO2v4=l9k|Q>GVl^}kx{tNxU}4`Kg_Y&4x{AF0@YbOH z=%W`G_PxB&uwt;MQpBs=)|tdY!CO>lZ#%r;9f9JS_NK#FVbfXe)%kJfpfAjthrz>t=WRz&%(vP#i zJ>mC^`xJh!uD))bv(S0FT6xAvYGb$X5`KT!dq4I`M!XML`y|&(Jeh6}`&V^{)V}rp zHPTP`d;a^@;y=`H{x~B4{%P5;x@7**$@?8zfB>BLdmoH(Fjh6??JC`#KVRPXn0$|a z^&Jd+*BNB=r*Cd{mY?;{RNrOqgXsGM-iNHdwQi)_^XC=IZj*lSZ`?Ozy!#E?Rd+V4 zX3cJo&-%BFdLKgHAM`$K^{sU!-JU-WJpOg*2meanQ{|4v-Rjl{TAkqbyHb5$;C&c< zf5`iY)i(sSe4wU1pP&E!*UILg@!r^FZrP@Btm5K8bfBS?&3=Q}=&6!+(Xxxp`~x z@@Tv%xUzjd?0=&3%CMoW-cHc@G4JCRov^w>Q@TA*Kg%6E-#H(2kc{wtq?T>o$3f># z?-QW21$2Hw(+NMoJAAD6^7Fl`H--NSo#?9e{4oJqF7!SD+CJ`m(xUAoENpwy?RlD6 zed5k7&W)#DhqKqS)zNnv|JkzL`y~4Kgm;_O$J>>jVrBJWe#ig%m$ z>A3GYZU5=^uz!_-{fFOoAKoYZ9q^;o>Vx;A-@~Is0Q!Bc_i6O|Dep5@zZ4qw7gFsh z#|-R0{C?B!b<*Df51poNA5HgrvG*DD`)Tj9$$rswx;=dn?j4A}@7{lv^w-q5M15yz zy5HA%pGCi)@jhqudn>g-rQ6eAWN@cJ_W*> z+J6TABK-c=W$n&aADp8Wbu3bYfZX@S8)ZE&1h>4=`yyiy@Ag@b=n?2xqGfAMd#p#M zHWr#@{cqz5u*`*WAA*B>85-~$|45FcaEf~sWV_kQ4e&7bavsJ;=qXpi>GRpE`BjN8 z?8PNFtfpbRb^MZd{mM=9{ARs;gKdgeNQ0H~6kb+WnDw1PPTlpxdnXvvo4haSxXK#S zbxOhh)9n#g@tkQmCWrR#+_}Y$moj~YQ{AI3xn4QBoz969;$7-}xdspM#`(4F1#k7H z5HExM7o00ylfrwodsNFsz^jN1wu84fKxUD5Xt~V09Wm<{y{}l~yG<$dLmAucC7*J5 zox$s%{bTJ}N#=73r@4z^|G1x0UzR?Pms+*(_Nn7;Ow`aA^MybcE~MP;a^mE8NAf|NKdVLql?FDmSvYSkW4j^FAlMCmk;& z=y;2F2k7{U_f?AyMEy$}YuXDPk*qs1uz$qwpHIlQw0k>E$t?FB#L!ysueGBw`)BCnXAMEy| z!J76$ALf5O?;J1VWE7X=%UYo?l#eFGmX8vCla8c(uJOJNI==Q4jX|MSd z`my63j;E$pqtK=4fZf>dtB%cRxA32IB;|Fj_Z`sjZST7l9Rraa+3kgn$bOG!2%(&o z%TxSV=PucGxB9p8(n_3?*IMEK=deGUl-G6McR}BGyzg1`0l4Lgn)X89hAmoNnKQJ! zpr1*3t#_Be{%09`IyJnf9j0E*4GHf_LsC}Pd*1^M-}UaYXt)>qc8hA-3k}$h7oEwR zAwj>hYj%o;4N_NQ=RK8kgvf{3N%`F1-39FLdEd9N*WeDya!q@|-ec@3b4CXC5C8hj z6!ux}68NISv_09wk31bLD*7I`E4dqCR{ydPS$L1$tA>Gnb!>|g8b<%q)vaCm-8iYMm^ zPxd!<6P96%SU>~kdeV@T%e%ZEf`)s%do3E4DYd3l(_U!kSQOH*m$TL9iI3BH)hmR@ z#7xTMM()n^61Lt7Kf4jZV;T&P;xMDAUt6Rn%@*g$6yn#yIoz4^t`OiMd z|Cok%d-s8cA9?p%G@K=|NV>h$fQ@bsX>i~cRR(wU+q?)0Md-kDDkt}nw(;aiR<*n> zS;NIP$O-Qkwb@i08pM6sCXOSG@jmYXi$=)H#Bp|eJTtZNhxdjwX23UD z$0lj)5kAe+HY7aK!s07e@TJYT;I%;(w0McLm_6>I!bZh?b~Ih4X{VMm^=zCWa4Ey* zP%lH7U$p11=mnpa_jnIrEcbgqw#I_*CulD+kLHOh&H2c468!Ei^tww zq+&^(G9(R@c}&B5y&r>y2fUvoX+WEFdpyG$dc)5v9ol~`lbp|kLZ6&XeOV+=xlMt` zFcNZCYzJF3?YQ&7QyN*=zdF!*AEUH`{ZH5ZRrSf?tU9zSexIW5Yqy%F+sG;)3%fa@ zYeiIZE^RRW1EK(DYDcZ>OQ%^D~@G%tJAtpscBeIvwiWBbE#6O{3qQuZgLqwkc8UGhw14HE z=chJC_J3uD_CKY@{!3#22iMpZzCh5hGIU5tnZW)NcBKk<7V>I;-MonnaYB2W-x`3g z2V45Hl>IUvMRDX*eH5iBeQ@md*-F`p(o_~g51Vuj>6QyCb_p>WE4EXKQr|||1I86z29fA$X+3Muz%8pcc}l> z`82v?-aahKZn<&CGIr>n$YFzDe(`A6r@&UdfM zT&ePf#t#%aOFiTLC@a!$j;G_R=3smOxMU(aKIr|A9=AnD5qq|6HSHz;v~y=jhXeb^ zSBHVHVLw0jer1iXPbt`cy1nFhx;hQsTd`jOJkUy+g?#QV47-bA z|1)cOoGVq^oLOgR8ji;^alY##-mgHzFTGz|G_)zTy;{@W7ei(!Z6 zzC35G!Ti`CY|LA|Ujy@3-ft|-ofuQ8roCWhdqT_%0uto}uSkvijqc(?DZU#J?k9xlW?ytSyTDaI}gZ-!5%lw(!ZE&xixSpo)Ch?g*dl+2i)J{tAo&od=N`1*gxfDw-;R4zqaeEGYa-!i+h>iwwh5# z?>OY%INztqkcMyX-lE?JjC&BOcsIyieB7tunY53)(vYTReh>rId*kqPkq@5Cr~V8l ztFFpkB|eU}h-djHdS1Hk_zWsIH6E-GqTGbJpj*C$i6EpAkIlDe(EsI-HBS z0RK;X`Luk>`xDL_9p(KwdrbJpyH=*^Z+ZkvqbCCud@dRK68Mx_iR9Iod6s-BvV)=zs68Q#RSf(-B` z-Cq2B=IW4EhjzytYQoRYUGE-+N>xXnSI=xlj^*R%4!%o&T0R4=^mu>r9=3SH`Bm!u z679v`?fI+0J5c8^IzE;3cXKzu&#zTp$QQnJmn@OPEI9{nq>w%tx5qSm7U(_RpS{0W zG@!vQRnuP6usfsycShnQBkVsh*UUW&KKC-UuNH=W{dG>q6Wh%AW54q`p!RqVdygcs z0Y3y<70@%uf z>SN?gUgid@#ggOv63}|Qzj}{anA-j+W4pazM)v=5j1uF7{U_$MxyXy)`+e4o701S_ zIoyyTV`V?dv3?ndJ>LI8Q({|&Ul}UZv`>!pcd-?gW@7^5#>-L~DPL(2hr6z6q&~>KYZ=lDb_gMa> zY@olvyKnG6nEwsEVSA27f0sUE+j^(>xbd4&AJb49Tp6ip55FmS3C-aUkpGhH9KZdY z%HQ;F>iPzz;T|yfyG1r{wso)(`SUo<%+o6L~4m&AWSn!U;PP!f+ z#+aJ_IjiaU|Jjg~na|7rkso&ZN#;lILGQ`zKeGRj`H{AjeqK85_ySsKJX2ADH6wmA zLHo(@p75T^{xkbe!Go{g3*HyeO5^EKp&{|`Nz*qO-jm)7*?(pKC3w7ZApN{_+VLgt zX^rRdRS)u+sqH`AeiFR=4c;^EKJGq($N4M$y!74iW$zh-*Pzi}^!T3k{^e%ftl)Le z?cNLC?cTEnkMzrDW)b$OZ3Q$&`ZdY;{3+f)+?no7!K3|8Jif1Z|1fy_M|k+33EEGB z=RNB^=gx9x2_Ec!FL-x&&lx-~!n;ZSFHPTMc>nP0T;KHtkG7tEUOMggDo&D#e!BSx z4?Y8*boZ@omkr@US6x7}|~f_JC4%izW9nHR-R z?*(tS`(0PBXZFs|Z+g28-uGVO_;z`F+`HVnCK=ziygdf*`!5l1x3Ap0-Mc5j`?k-u zElXWV<;dndvBuFpDm;{Aw!^YbF@&+(_Y z_qq2?g7-atiov^IqrGUnjQ6bjfcwBCcz5}A2JeqA4bOYdpXxs7J~#>9_x-5`?@uoc z&#&|MaUXIYngs7|zuw?2d}(;zzx+?QyWCxq;QhegN8{zDMtJ&v{>%BnpXxW{>T~sz z;N9al7`*7b%!|~|ef)iM4Y`I%@P6oL4IZku^ykIl?;1Qg=|#jB zhv#SgT&|ESOoI0#KWFgfnBl!xJcJUtxw*NM;N9m>Gk6ESM7*4TMlQ$&li=O&?`!b3 zzeKzSe|qjUxz|jB_kcg$;K}V9#C(zR+t+_t?zOqsPJ;Ji|78a6;+HtS>3(DGb-C9~ zg7*`@(cr!QCE~rzpOL#HcgZApKlNuAyf?f=yhi`v+#7RmjPM3F_p6(54)IGJ9aety zc7H$O`A28Z5AkqU9zW^!)3~RGe8!gj4nThNO4&ceiaD7do%4T^ADyRb-GcD7;qmI2 zl{~t}xUgSSA=iQ09R11kq1PzpZuyEoGmCYM{h4n6pz`lVetU)em5+5@t}t=j+j57$ zzvioNmYY$MIOVr9mtsGe`DAQ-*uCTbIa>W4;=x(%v)cLl{JYi1@C%p!k55yAA9XWs zb{7G6%^2?SsiNwB7{&L@3-%5SmbUVSpP)E8S}9+MOS8vHxMhm(v^90my|~)DUsA{@ zfZ)YIC0>gwSKI~I{;wz9v+$<@f9jBj=_FRi{p!F`rW%HeNJ8Qd@Orif>_HzXZ*zZ& z_J>-}HP3htvcwH)!`cDdFa%UN^xijE?H#Y8fF&3xZ$lolR}Rmh+wFSSME9u+3e1)E zq$;SE0ahFfs^dLX*0=M*BfN6b!s|46hekZXwMu0q&IgL*NHEHmzVwa{6)VUeSMj=^ zHkax8Xq-bc-s^VY=L040qTfwd#GO5(0k}Ng%Uo+=)};lP>m}$^^j!0PufjN$T8}+@ zuybVdVE=eUu4^jt+P*P40)Zh2`>=P0)GcHpmoP=GNvOzg1ZOCCA()5-0vs#X6Yl~G zug>6Y>@5%NwXY(i+E>~f$_ady5)F%^t)$gR68B0$W18HHSkePa5=`bDLmeO{{qWf+ z^8iP<{TFATj}1nL#;eRpm&SN^Rp~;!@wj&o|Bu@0%3vRrO!mL4e4&--Dc*6ll_Ioc zqOMHgk*BLkwmEEqo>{vREDYw6I}66j3&>4dcgf=UL0bO8(Bk-58MZK3uill$f&HJ? zTO5LwlzV%}LGeg`TL2}%ZCL+iDCDqZ3}hh~fB{jsD0jC~^nt?8SH#OsBfqB56#8)S z1s;`Kk%RUl+d80__g|56a>Cs0QHSFiyM-_Erx)EW24fW7WAx-^GgV8}}tuf#1-ei-R@- zZsqv!X+3=>^XlK~x#(T`mtO}kPzVh@h(#h3wv-sIlalo*(7Ap-#xf*WKSG53YOWN5~x+^Z@jb!efnj&*@@=}z?i5}Dd#k6SIwoLg`+t=99+ zGd|-k!tg4ns@!+Nakn@uakJ?t!l$q z1#jiReS0PC#=zAQ=39C^B8&}GO2A=lX0Q#Fg=x&RSJM8Yuhi!D1)0?r-q4KC$~<&b zVgFAGf4C9p}y`JQ)^GH_1BCrspBJEaGGWw;;S4_zG}g?b)m;dasv2g>Rs+!;VW2}{=|D-Hmm4hCSp z3537e*O}Lm>Z?M>M@&$O5amp(@8%hwhfgl6;z}$<7)t3rVXg~`+vr&IA^}=J@M;{i z=~y`O2$wd=7pb^LVnyi8IP|DTooC^85;y2ot8m3>Q9KH&%+G)>XeXtE%p!tnvg(BK zv9a<<>bI={E_uTn?H~qR1}>9F^%xiSuc{VK^NcUJi#7+?567FR8;12ud9(HE601!e z+u-M^?ME~m4*P#=`ghRj{n|Sgv@dEnnSlnx+*i6VtGMeF>!R*s)=>-E7dD(>3O+R9 zI31vFwc2(Xyy=H8Slob^Mm$s1O~s906q;7^jx|bSd_>DbFS~FYNpw1CVo^lR``92( zagbb~!CJKdOMPuYB2KKE0UX%XhS1cKJw{rowMX2)u{QERD~t67{WMohkP2c`c-{KZ ziqs^=d;(suO&NDgsZf5Q)3GeXo|iUS5a((g4?S1SEEmk<93>r(l++(BzROsHF}04K zEAmm+E7&AVq|&cijR7ENE$eHIFS#AC{}T(1Qwz%(Hoz|Q5+BPqS&4!w&Zafrrvr-13yAHQ zoe2AGp7CXO5$u26db(e(EYZCzRq3B2}OLBE=2FB{<|rI@&2{>FfXhSv7Fx zSy*+%3J~iFh}}0;WLzIB)@+2h^kl$M0UUoO&Qw@WwgqFY&Jk(6>M^k%ClVBrNC;y_ zOeNv+9V4pZfJP`>5@3@m>^6$h-r<~(#>3C+V^&~X;aas99P2NQl(3{U*FsY#C+uF< zxcqHW8qG7l=&VZP6)S2@4Sk3VIU#fEkSJ%n%ze=eFG-BOqD$lr`*+TFYP;3V=P#Hoyl+@kK%ieMN?bF@LU`iTHH4_*je z-8R@aHqgq9nyg>o7o0>+gjk3zsUxAg5v>Xt!~4WJoGK2e1X$ymmsf|>7pv8B@1QI^ zw+)UB1cPImFp>-VckEn99kJj`*Mxm@(YlRuIXt^uz&bVo0v#&llEjh0faYUCTp7_G z?BDsUr4xdMIB#7@sF~9G2Dc(dWgPXyz(z*%+7~REFDru(t1aNfDnB{jNMn_YYCY(o ze}gW;L$bb(oU4>DugX>H<)N*J*CY!@6KC{F&T2W;veworhx^!}PY(IGHX$gPdZM)4 zR=hruX~_k+4Wl1&F@q8r@oggdw-c~?q~!cEjnz|DXThb($fYC0i3^LvqeBRl2X*9{ z^hOXeoiCziQ9%rIE1Gh^5eJ03Rp;R}9&$`;XpGd!;lciaF}OzNaH*jDUT8qK7}wag za%4%gsv>+Ecy4|vt8}9QZ2|1xc`A*C9N5}rmI6+MNf4WXHmJ#lLh6-1o3Nla1E{3T z%7N-4{hA`nf};tQOye9nhyin{FjOkSMcR0w9Kuz}U!;xaf)o&myslW2Zd2N(r=(KG zUITR+ti(LT(L+77V8zQ7gE91m*$)YPE#cnsIMT*2AFX;6jhR{LUcjq17xtg&w8q{% z;|>|uivMm*p_fQ;*9^7To3YnFbq1pg%POcGo~e$NMuYaENR+k?wFlewI-^bO&5T5Y zjJ@U&EWF3;l;rZ$5Eik<%nq%x^f}R_5zHKW%kguhoWDtjSx#ybH`+3oxzNIzM!sR5UXPK643|9uJ}yy(7JKCQ zLjOh>=yF?tK;fE#Str*L1^drjX5nex1!|Sqk(hv5$VoI8s+AyouN0Eepam%MN#%mR z?)x>lps=a@n}1LKJ=vA^S9m|T!u#t^!FTwR$_0JH&zoEjYhmRxZ3OQw=uNlJycxgL z`;9H8VfYVoK`oK}n{V^)Q6J|o%%?^CR6M^xPOX7@^}iDb{J8e(Ms3L$-Cq2%*8kp; z>_;4v&iSDKwm_}z2~#x_%^$`M%G*vvzb5g9#w2Fkk;?Y~YouSTBte`YphuHR+H_?- zA{vMx4;Qh?IzAjEay*^X>(M|pgB1${(dE4{r_DuPAmOk456PNG*6cFDCVVi$9&9p* ziiQ?rJYZxSh>tj_BI>P_@!n)+kF^|B!eBE) zHP&wJ<{^KQ@L9wf?oq4guz4dH*7pp7!hT`udPubagUK@^RUu>Q>yv~nsKc}Muz!{C zUBp2?@oc_8Tb9#f#VuSHO2o({(8}@}IV9i2Elf~@UeJ*11IB=cbNC@#%n3noXc23a z?Z4`Xx1~p|hlbM~MkUns=sU7=gSDE9PPL_JfToC@TKn|;UIrx6o7;6y z47(Y*GWZCeu!&W-On|eB(G7-ZBw zSD#4Z!2Va2CJIamZsdiIOA=Owq;uOrrT_^c?Tu;*4cO}TG!A|~J=x{Lh!bS^$?f89 zPF|?JjzpsJz21U}+HRATI951i^*sxtld^#iZjE?_b=bU<>4$_Nt-%VJ&iJMwM2TBV zL-UVu%cJVoRv&%-heekTKDm8GI|y2_FgST3|8F7xuY>>Bq5rSLh5f6?t!JD4k08f) zfm(yvc0#3^U`~xh87UK$B;+v#Z|rlRC`V*sJp|TJpw3KA{0uCh5?In8-Lj3_eep6; z^h5{HS_vgQ3ZbHYRyy2VPvAgjwEeRCv@()Wt->k%4OYqD3tJhbvbY10>CkrZ4e?ON ziad*z#K8DgL{Yr$`oygv84|H#1c`Vnqs1MFV#4W(EnVoKB{Gt>;ABZR z>kUe(bAmH5GC0e8&k%xq7?jhV?jL!hGj#0@JWFviUtwW^oCFPztgI*tHJSDWOxnTE za<;WsV3<9fS6Min)Up1GIt{eMYs)}e1XU%{ok*aegAUgL+ELJ#ibfpcE}C(Nv&O>c z^KZp|WLX_Ip$)XJ=%AeOSHc>ClNZrA7ST8st>|#Km7M{r&u0IldX2G+3w>eCZf?Zg(TgIUzU7Oa&k7!Z`5aSNl47_k4fhM86@Vr_9TZW_d7i3Rw-HBver zG@vu%oV;*_^Tsq5?7z!I^Awzxb%=TxEjkiE9S`Oj6aI(@FjXE7i+57$KitugzVA zobzX_cFq3B+(m=^DvrOxk!zKlC>qoHF6Bvf)I}!S4$t|zh0{r#YO9(KQL~Ytw7Jet ztTuiAPS9Lb$BA`u$2);uDGj5>3UWk&-|*-d_9|K1)`ul1>R@z-)iyUc*?Gk3v)RXc zqbdRF)sRMz%oMkow3Z4Dp`Dfnp(1gTEp(-l1@9>__b;I+rcM(!LB}hldZd4xXDqx< z!7Hoz(FQFQF5W6mqDD;tt1Qu^9gd{(X1)=N} z4Q}2pDqY4DF268&g;C@!Wg#9qIdlY*&e*e86?=$cFf&Us&v8M<_Tinx2H)m$e_bMKJ{KD31et5MlsVes zb8G${ z$zl8ad-Lzjt_pwRzXRAc8Qsg7%$9HZ2bf&L?C_as=&!i7CfD#fymO}!`|zlq4O^Oj znNm1VY6D>Z{BGulX0_(ut3Kf zqQJF-i3{oqv#uz(>eV=}9>&1U`TMXoFRHUlpGn(*?ISb|>vsFcSDknqExbD7 zL3huhcS9YKp26erm(v`EHiFU!vQ%!m7HGX~YWAauZ7jt|P~YND8GlpVVBvKV5B5LX zO7n0ecw;cPvHFg2d(}s+_RaYRK%b-hhK6;6m9cS%H=Iy_IGR!dyIoM>2v zT5Z_dXbE=;Zdcz*w;8Fb_J-4d+*3j`5!~Z$oJ4U85oE=GQ%3b5tXFCjwV*?V_fVv z{iADjbdOqd{wMB|QlMs}>ZdQt?sV$xnr61cdj}SC3?PCf(z@0dQo;XI>S949WMsf3 zlFO@G!Wv`PzcZuDs$*t<SZUZiRP3+nj+@+3F^^L>QADdnLUM`cnp1_< zP$tmQY=*XFF5NF4*WE^{$8sBGTiDPL(PG&f&dw;XQYPHNUNfPg}K; zZvv8rY>)LFN=a{ne;}K{wB)a82^>&RbxySI#S{$K$8y%fFB{puOf<9simJOd8jJpV zP({XmA#l3PXbA*;CKS4c{X46>;=43gkXOi&9?2T-E5jOZC{R+1QRdAmZ~J>G^ma;k zzi>Qv{1mzLt!fw{PLsQU)1mlFNQ{*vvC1t%(KsfFp}}F6YSFnEf+NA|8W+tWZkCz4 zQP~7adK|1DD;5oPdC*YYuBzx!2i-$R%;-!ZfkMf%qzn-v9Ui|%DJ4{D5LSsi4r}LR zUT2*=9?<23jDh6~KF4uMC}&FPWt^}Eyw^JBhtPui_`1P>V|sPfNNE)+iiI0^910#PZRRx=c3mFW*ykVT*#PM$)JP+y7o&-?NEigO zrG68uR9h>>U+NTaaF~g)Rcfv9Ex)N|t$=vEA~8Cj$={N{C3{BrH2)pLPsi@%{*RV# z`vtRBV6C8hrUke>x2a~Wa0%|4YQ+48m98|4|KeIWkvTx_XfKZ?a7%uq(&NpyjA7u18k!Fnv^ z66=Rf$`(3%kOUBjL!ppd>V?&~(lm*)vKr-5#KhhjCo!jwr~^fF^%-2KB$N%?b5UJ9 zk`u81pIXl~=YK0}ke;=$8Jbx*M!gCSJ+}nE7{U;|t&X*|*Y1%_jq$@~;tL~~V`VmE z45Qa8>W>y~oxwdv!UH{5Cc+9i@S(p+AWBZTEm((J^kM8m3y6c&YCF_vBXblJvG8LS zW+yRW|MjRFZAYGViuJqZ{O_C#fXl@W8ZhUbGNs3Fn8pfe}k zH*$RE{hPj_RE+aLAJtF%Y#1wX$-!O?w4Ref;c`O_TWS2gb7%_lw*0Tv*0h~zeL^P* zstK5GX-G1LADbolp{IiM6S0;$i&M04eZ3hWqSjsWVC3FS?16v+Gl$XQnl?0{a328D zZzIj&3V>?`krRk^IxXx@>eKoGwIHO88y%1&xQz1>G$(WsTbz$tcy)Q;aUCL_gF-CEITed| zU8|>0P-CG%rIH{%R0M1Kj28T%V-ddrz5PNOw|77l+0(y!STEF!S0il;v=n37%$kA% zhIR11Ul>_=!~}NrZO*qW+)j?SuSw-~z^8X#!e=&bZo?UM=YOpB&G`pqZE?;^_tz(w zBve8gn(dpNhb+uGVs39!>nRRi6V5q3)}#Mi6tR{jL_zz1B87Jm?7w9Ecck0$6nH8` zQc&b^nh>}%$}iISMNNs2I?drgIlC?FPL6f7r1nqe)KGBkmMaVOuf|#N7OU^({6j7_?$vt6QivnWl%#W^CIgD_mgdOq zcx1|;YKhGt@FtqYd6GiX7^dI~n*zaL<|qrV&fuL*wia=MK@t%>^Jot6Q1(&^knUHe z>FBr*Xaa{5cF9aN>CBvH;dK&ktfI1*Wk?+&w9MJo@0;^~mYlRct3{&Ng=s9)lFlvA z!oq{(dM@LN2P}{F+s!j(X&}poYLMx-usVsA|D);*XFKVD(_f;*gha$iYF$GX?eQDx zj&UnN=CxMeefft`d(@{6-&@Vb0yth&ZSWt|ZSWt6eZh!}XUr$H{{4it#aJ&k4wdoTAyL=* zf4KfVgqK;+74s{9o_}Qied;!cxcYNQV*T5k{|oXOV=}LVRSLS;+$zQhCvd}DUCks; z)vApQ>mrXuuroY}OLBOI7n9owsr4@KsyL^v!5AVyb>OO_%8yzwmX=Y!CIExFrtS>N zKjJPrt(2Z8WgSAbO5EZD6T;m-Se=w`!pu}VU)_5S){i0$d>~%oR{l}hxOWH;4Q0uTJs6@UD8W#5qrPx*)8q(E(I@YwBnv@=R z0fCw@BWwg+czYTPKc5}>a_l@XOKTpBR*-R-OjHm+@j^9_poiSFoMXHw^I5MxkjCr7 z+Mi>iu#!jIEadb$qZ%X@(*Q?&7AHH!md)d+2l!MP6LnD=WzGth#3^L{jswzs5Eevg zA2I{K*D@4UgZ$#*LOSZJX-urIi!tBLnnq_}`F=RmXX{lTcx`p1?SkM~J>YJIL6kkg z7QignYho$JzU#NEyVJP%`P_u=MC!7BV2~+_=qfDaXiiQ5G4C+!12uZ(#c z`87$GkWpOIK$XL+-h{lfc?3`Wf`u`Z|3A5-W=WxOP601?9-{+Vo{-7unE3e(Tq(Dp zPYMsju94uYFzdR4TX7n#KAZE8B32nzXLljlX*S}~weA(YiAEqe+gxIu4|N$z0PE5l zN5&v|e;4rhtE7JLn|g`bs{fHyR`vhPv;>LFUD6 zN8li{;aUCIfRmi#9(8X(-RQYB%!F0OJ8M|6Bh|Zkd`MrbLgLJMeX63)!3mQ&m*Wf> z>|26V7ywV~4minq4zk4izc;WO$V{Kq=ZJBcPo>;nDGuYPKjQJKiHj%XCZCk7g)rNw za~~hW841Up>qM5gKj&=eZv@q4#+`(s#5&IgXF$@28)>Mv;+lt1Xf=q^XBYe$2FRWN~Knr%QZUy?|U zeV(P0IBS-v0z_fzo3PskW>rE$k@guMab9ojEi}*EA@{F!ttIzRGR;ullyyfrps+V> zJd~2`=M{%=D%=Q*B8jRNqY6iyOYe$vHJ!vdxugWaSh}%9%}AuAQPztZ)RUZBto+MR z{%?41bVV&)gJ0wBz{36=Q2H?z7bLZGNfR!vyO~$zjSdwN6Ub#kt-*zS1=*6O`EJjk z^NFswhM_P27-}a*)G?jt3y!pOtkM^&8Qe3``8$NFs>S-?eK-zqJE~}j&08j#rxfm&r>pQ_rq6V4{-vX zhsB8WUUa+G?S9cXV7*v9nh3hdy`|QqAR<0o57(91ZsB(lf2gX?X1Cmd)fZ6VU$jTO z+J~K(3kQ)QK?nmig8}hywvM~#9=4&N0^ewVN#>v#aG%^B2zCsU+Q0c_{{8Axj%wnnm7jwpmI&jC=KRy{4XA-V``_7DtyJwxmZ){) zoVoBTHZp{2{64W3uLItKu|ajdZoP@ElTmX*y}L$+c>M%jy$(9G_2~dMnp@>SfP~$Y zvaH*M9$kr?s9`1kBKWNHEuX}D%A!D|#>r@f(A!;W#^rTWLNH<>-0j8NF%W*}1M7Sr z6*WBky{08`##ZphDykQET4A4=^K`j~7usUpW?x0DH>+diN)dY`WNZnSLtx&FHB+a$ zq3O6AqFmX6*c*;BfxoSJMAHY3WMc2)RA^wRd!3X;Pm?;2J+W)>Z-rd* zArJD}whAs^sR(;ux%v<-jF|W0N#T?6$>0UlHyC8RKyr0_fNOlq6`Ukdu(}9yDF2Mx zF;-R0g~p)JCFu|jdU+!9M%-SQb$!9b`HijCv(5Qu#n+uhFa(6WfrSZaxDk|zZXO>o z%TQUbNDu=Bz{M9_@k7qs$llvU(fBn6Sl^@GWZ~5j5B9&&#A^tND$u*TdU#rjSf)l;n_XZLmr! z?BpP|4+qde^`0~yxY{lAEMj&fCs=fABs&j2#42)zah_(@>yQztp{DShZFG!}_mkX48*McV1F^6coKv&!!s#Sdsj6NTK8bR6;lu8pOcvSdcKDc(dwcwTAkow6S7{YL)2DAi~3mfCg>OgM*S5I z*YgWhoP^(i-c6DLjK8ApNh_REx4xAd+~te;uKHV79FO=s9Eple43hz{ zA?M#jk>I-#4MNA^QT4nPulMDjcb9-CtDrN>aa*G4R1VsP!-~4*b&6DYeGC_4#C#TC zqndz${X6?~+41|ourIq=bt23*7&f0YM0_nls&84V#bdxEzJDT?e*yPP52{zieJ41s zJ2#1J2J-gy2awQM_H_?R#O=G>CB=$58GKoT^3y{#v(sYJUF%8+*-zhF=eXL}X|rmL z`|`WNkFr_;c`nyd=WW=UHTuYssDTFPDfVt*mO9Kgng&<}^3aC9?+>zVa-C&}d&0S+ zIlsrf0lDM#z?eXtF+D}am85-ioQI^t$;`STGV+WxG|OLcJ+RWks{ zVy#Ex1wp&1JeF{NFG4~FSWc4A*MT|CxJA!2@*IBQVz5k)iKVERNX0u9X8lf5PN(aM zAj~$wZ_yP>>W6ecRD5V^yE1bx?!Id8ORq8?ndVT(GK zlTV0=ZUv7)Bv*R2`@`?J=s<+0*Qpc-Z||s)6ETg1f)&m+Da=LC^=>T}%`ojTaDFCK zMm$@)Ry6kukSu6T=%_&x^I-r?c%}ME$+ zbzY20kyujB7cE*ksgsaJ9WL*1HT~g$lp&uX{ zRa-1}l02cQ9;VcgPJ9UI~q^HcleXK`|580r7m+Shr(Eh{UIZChykVbdlGB-PGSXH)X9kvv;}$#<`O24PSaP$RZl8cmSebU zbm@mID>X2cf4qV^!qPDaEiP6^T5)shjA`x?>^&g(#+9!79}$Mld+XH1&X%JIgJbb< z^qz4T%r%)5*g$KsAyLIa-10a|%7P}f+=_`iLBq{GU1}y=!Y1~xsWMg>VK?(#0I4(V zICpl&T>|?L^RNiEB%%{<5~hwLfm=eR{YkD+42T)nP#g%ju=mns#kjMlxJ&TvfG+Sv zI!}!DKZ!!c>EF!EWpX?WPcKmC+cEF#I>e7n>Qpcsk~8sXf|nXlG&x%2LamlRNL(MclK1AK^#}d+WGMSRrfbHMbaUsHAu9Z01g^GMvt`rORbo5V#5As zvZ5ulCsGOenrA!ez1I1;=Gpt8?KZU`pp^590ANa&xGnnX4lPQ;KY|91mI zUf_Ma>xAgMVJGnrFXx~qGQ)u;*uVPvo=4*te&!YK4TvuW@I1&`OLLgOU?BiZ#d=N) zDG_Bdp%$$}ESnRy=AiktB>`!G7~&oazYh3|O2?>kioMXJFka?>D&t5yM%&tn`ucX< zjHg5Kg!W0$fn~u!87_q>s!*h*P3jjln7wLatWERc#_^YoPbR4DZ$F}KA&&Tpw2gM? zV`>XcnuOHD{?(t;m|IHfob<3vf|lZotcXlZZDDZMPH760F4}W!V}VgmDLCv<^`wQ_ zN!}tyJu{s)#MU3|-`U4%+dOBAy9oAw_AbCNNK1@H@$tsV)LL%!% zBMKf%j4`RFs*N^rvHSQiqHd1J+26ve1K!23|8sB)BG(0*xGE9_sbEt$$^@Ubca>yW z7^yQQ_IOO+oozBa=(E15!8s^}xd=Qu3nR0xq)kWRMyBZ!8lKamWU0_pzxb9Z9j5Yk zSc9kWVE^>BN!yK|)s;p%zile0!E^Q%FAFq53`j3-N}ChQ*wEZLHjTS;C*Hqe$khdE zF{mbZLX{FZ^0|;^m@#!zms{f12Jr5@CCV_#ImN>5qz;YrsY7TuTyWu4LAcI}SDy9b zmOU(D|OGn$js@n{hXCB^d%1{Z1jn1A2XFL_R_7T7!X-vn|#C zMKiBZ8&CXqm+5k?n`(fC_r<85jt5Hvp-I;6Cc^%mOH-JOfO#Hdi4{Ag!Ix0!)v*;f z#LLhqe?{qwU&UDH18BPd9l>#(J{;V~jsT`t9xg^9jdNWZ6K4|#$p~?ra;cU9O>3?m zN90R{wPIVc<|*N+RU9U=MiXm3bM;l{y=i>xZ=4ga^i5y1SCT661EzC~p4lwuE0i}5dqb#r5+&NR6JFT|Ob8@op)y={o7zH;u_c}H` z1`^Ff4hX6koIvxVlAqWXqqz%jFy#Cl0QX)CcN%dkf!e6=7e|+|M#%$hFqRt%%cJ?y zunB{=Sp;~@dC|*%%uVfVgg?yH{mR0uBj#Yg>MbF(##PawJHfK04^Pshll`HO|!No=f5JvN3=8DdL`KBg~Bea;J3+veG>yXb)Pzc} zI@UvFwO(jk9%bxxZ`Sa1k8s9}aCNiLF3kK>I|fh<`_EL6+kj3g*lMPE_RHKGaK?c( z2NSX!69YHRFo}!XLFN&rhMXzYGrAzp?9cGcVz9CBEqJ`Q0WZSKyxzjA10HKcHd5=t zsJ@phrzgN%pgFAj504ZfPSM-B3?X=_j}(P5qTrmAE@Td9Z&z8Eoy0`UJ&RYJAj5~i zK(88zic*YJ?nkF^I)3IKtaC-VH|cM1^BB%l;GW5J`~C2H{uz>XA8bHCZ(T^2q*vx*uP#3TBdD3>)E-ogGMxi{zDEO_iH{k(MF@jw0{ z2JbEM1^$|e{1s|0)9ok2YxZA}+mYKb$@qTZzrx^M9^qjZcy{i;#yiA+W$udH6@rH= zxNDx*+!@bcw%ns={|<6qXdT(*!0bcZt9q8JR}^MEi}!EY z^91~9To)ajj=LVKIdxwOLx^g*$DglxV9^xdOwmI%?S-b%(U2wwK3h4U-KME;_A9VP zuP7%s>`b2!?}z@O6XVsi7rdYv;$>io%E4WN3A`rE-&+TPhx{M#`cM-`U7aC=!(T1; z`YqWWoN;Qk##fQwrrYD0sf|5@8ZQGiz>TH~iffXR_tfa=+gO+y(w&7A_?u zzAj_8$1_tKm1A%p5}PD$*2?8}H|=m)kv9W#&6@DGDB-md-myROI>vv%$4y-r_2Cvi z9Jc?;n)VuBh4_x@_@#27i%I;;WscrQpZ?DM6s#e?iA#RRxIgv}2kv2hyM=odD06Ds zr*Jc{f8lo$_X>9jFnkP}S8PSQ;Zhq_&C&j;uWtek)W4XHpZM*d<8XhWMMr@9Hnlz2 z?S+m#Pn+@o8NGnomU~j;ztSDu6{wlu|H-`3I}ER&?bJ!?JNrz^;HUmV(9rI8STtbI zWPhT|WSznhadsNfqm`jSzmK$%H0Pk1+Q8jq&M6PMC@tzFvGL3A6 zxjc#YoXdMxo!m~;t@o>);Lj;&cOZM@r{&lF(ct%f{xR10o|Ipu+v6GdR%P(uhhYCy za@s7tG2{4PZk@Xry5~~6gtNFW$ollN0K|ObfGn?o@X%?7u0d>5R(YFw1I}o7!)&f69Y>e;&`qwEPxS z^!Ug4$62&!`%kw|(GuBzl9mQ{G3DZ8xLn=&#p%NsAkRD^Z+sNl&oVS)w%kO~P z;~(oUvGDb;((T0_W;|o$^H#Bc#&Ze(GdJrlL9NO@r%5s`H-@@S@|3ugL5%x*Aolpj z`L9ai?$R=_+v6Ea@81f&e^^Zci8gL9*L9c7`K_8u8OVznu;{5-8D`b~)_$krGw7!| zd>1p*Kc!)mNcWkY4d&KOcfdT*+W%b2XOVM$B^zixlxk8td#cMkCApM?{fm8ZT$F#z zhd+P=J^m8^_!J-9n)br~$o}7&3GLtJL-$#>iHx21$Y5%som+~3(bMWc7MVW7+ z;;K4)E7cHk_L36PqX6x~e~yFlipTLMjG)I~>YreZV=DZ0P}3gIOl=$)3&)Y6J=bBp z$#EbL0>9%e8ydu|hkEBiiia@*yvW+7U(H2Z&@wkMX8njMoI&wo=xs2C+&TO|e1cQJoJt=LIpJ@7S{?#7di-Vn za*HP=IhT@dFFF+>Su* zl5&fE&tEW#9>3E+$r_9H6O^0XJ}I|rB?hSFq37ZmmQC;6vXbb)Dmo~vmu^HQYC*NS|nfPP!Ag1H5E3F5Wc$Yxj~ip?)OJt0%Y z_SLfbkMsfc{K+|q&u0Gveb_AeaMqrOQ**;#G3p-wWdBra>{uh?ZY1i1-Cks}=LO^2 zu2Zmo#N*2oWAC2(a@3Lcs|M|_syX-z+A{k|&JF(u#2)_?|J6y{wcBgjCwYFI1N)yK z7C0FG<8gJ6#^oYNHUKy|K>Ru?5cj$^#d|z=S_!d}xu7z9GK+XEG54dLf1)}-_iyGN zEnU5zqJ0O)nVdTw#Rz-+Q~lGdaeC089?>nkz04i`)sVlL^3dP}b4Rn-|GaP;HPUl> zjWDTfX&rRk_8)34o`>9~3NMmll;5HKf24=-r^$H({o>C5$^BA~=+%xrzY{$?de5^k zG<;hA1`hT3ul841e8TszBkG~uUi5J1PQ$0`73^O*)gYyZhoFwEtgZV-Me%wTYYT~2vXF^w8;V%ahl3}u4GC*3 z&&Qa`)*E>ieE82|l>^ifR{h>mgB!;xI!3{K7wspYYo$7V<*$U!vPxVt`|JKKCtF_jrUvs zOoR8g2(KBj-&jri$?#VBt8RW%|8{(5`fGBJ=N=b4 zc9ni!2F7Hon#V+T4@5Cj}4nK{d~7yg&GB4Ic88`ojhOuG;pK z;jQtza!==;7ChR2nqKL=)sBm#D6-X+Ig>T7O;c+1#^&2m7yiUgJIJ zuQPc6i11#V{dM_Y%RQHSZW8(Z$zN~q{u$wk{nyYp+4#=zH{_nrJui5$|C;CZ_#W~% z7`%VIM7;I>S-BT-FHC~>Xa6jNhiOWGX1=)bZSc>|?au9<1n*)0Y=gJwCE}gsJwFY} zy-D!?;&0S=F7tfyd2!?O{^_4H&B1@%pW3_p9`Vo7c+;43cnNs^M*l<8rr^I2uj};> zs3PX0+ts;FacQUSyXA5JT#YyD{RU1=*Yd-U&gbsj;-BYlQEJu)_WiZ|zK*Fc`Ru@5 zWUa40T%C!ZF8TPE^p`D9_~&J@zn%Y}e=c&|-9C2N>#;=v`=6-&j_#G}^IPXgAJl*O zv^?o=(vb)I&>tpY@JYAN?g_O(wn20w`I|pGv=Pp~;V1t=>@6|Rsy~jx`#I##l&-E! z-@e~-;R#eD_s!&XAuO8kq980^h4!&89xQa4hY=?}<#%VdV5CL=TyUw#u_8ȷBr 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 i(}Cqs}$i5}oOi+#44Sa7V_!U;hVME2mWe diff --git a/doc/xorg-docs/specs/XKB/XKBlib/allchaps.ix b/doc/xorg-docs/specs/XKB/XKBlib/allchaps.ix deleted file mode 100644 index d855d0a956475c59307776fd69a49ee712e6b957..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133120 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�ZD(kYG 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 V|093+xwpLT&;uX8_J4(n{~w7V`)&XL diff --git a/doc/xorg-docs/specs/XKB/XKBlib/allchaps.lof b/doc/xorg-docs/specs/XKB/XKBlib/allchaps.lof deleted file mode 100644 index e5c081ac7630643dc1cb3fe64d30030f5473deeb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36864 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 E7Z0Q+6aWAK diff --git a/doc/xorg-docs/specs/XKB/XKBlib/allchaps.lot b/doc/xorg-docs/specs/XKB/XKBlib/allchaps.lot deleted file mode 100644 index 6eddc582b8ea6c7ec0d0326e9cd47b2c5edae62f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41984 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 [ 45 { pop } {exch pop} .5 2 sqrt] FmBD - <0f87c3e1f0783c1e> [ 135 { pop } {exch pop} .5 2 sqrt] FmBD - [ 0 { pop } dup .5 2 ] FmBD - [ 90 { pop } dup .5 2 ] FmBD - <8142241818244281> [ 45 { 2 copy lt {exch} if pop} dup .75 2 sqrt] FmBD - <03060c183060c081> [ 45 { pop } {exch pop} .875 2 sqrt] FmBD - <8040201008040201> [ 135 { pop } {exch pop} .875 2 sqrt] FmBD - end def -} { - - /patProcDict 5 dict dup begin - <0f1e3c78f0e1c387> { 3 setlinewidth -1 -1 moveto 9 9 lineto stroke - 4 -4 moveto 12 4 lineto stroke - -4 4 moveto 4 12 lineto stroke} bind def - <0f87c3e1f0783c1e> { 3 setlinewidth -1 9 moveto 9 -1 lineto stroke - -4 4 moveto 4 -4 lineto stroke - 4 12 moveto 12 4 lineto stroke} bind def - <8142241818244281> { 1 setlinewidth -1 9 moveto 9 -1 lineto stroke - -1 -1 moveto 9 9 lineto stroke } bind def - <03060c183060c081> { 1 setlinewidth -1 -1 moveto 9 9 lineto stroke - 4 -4 moveto 12 4 lineto stroke - -4 4 moveto 4 12 lineto stroke} bind def - <8040201008040201> { 1 setlinewidth -1 9 moveto 9 -1 lineto stroke - -4 4 moveto 4 -4 lineto stroke - 4 12 moveto 12 4 lineto stroke} bind def - end def - /patDict 15 dict dup begin - /PatternType 1 def - /PaintType 2 def - /TilingType 3 def - /BBox [ 0 0 8 8 ] def - /XStep 8 def - /YStep 8 def - /PaintProc { - begin - patProcDict bstring known { - patProcDict bstring get exec - } { - 8 8 true [1 0 0 -1 0 8] bstring imagemask - } ifelse - end - } bind def - end def -} ifelse -/combineColor { - FrameSepIs FMnone eq - { - graymode fMLevel1 or not { - - [/Pattern [/DeviceCMYK]] setcolorspace - FrameCurColors 0 4 getinterval aload pop FrameCurPat setcolor - } { - FrameCurColors 3 get 1.0 ge { - FrameCurGray RealSetgray - } { - fMAcrobat not FMPColor graymode and and { - 0 1 3 { - FrameCurColors exch get - 1 FrameCurGray sub mul - } for - RealSetcmykcolor - } { - 4 1 6 { - FrameCurColors exch get - graymode { - 1 exch sub 1 FrameCurGray sub mul 1 exch sub - } { - 1.0 lt {FrameCurGray} {1} ifelse - } ifelse - } for - RealSetrgbcolor - } ifelse - } ifelse - } ifelse - } { - FrameCurColors 0 4 getinterval aload - FrameColorInSepListCMYK { - FrameSepBlack eq exch - FrameSepYellow eq and exch - FrameSepMagenta eq and exch - FrameSepCyan eq and - FrameSepIs FMcustom eq and - { FrameCurGray } { 1 } ifelse - } { - FrameSepIs FMblack eq - {FrameCurGray 1.0 exch sub mul 1.0 exch sub 4 1 roll pop pop pop} { - FrameSepIs FMyellow eq - {pop FrameCurGray 1.0 exch sub mul 1.0 exch sub 3 1 roll pop pop} { - FrameSepIs FMmagenta eq - {pop pop FrameCurGray 1.0 exch sub mul 1.0 exch sub exch pop } { - FrameSepIs FMcyan eq - {pop pop pop FrameCurGray 1.0 exch sub mul 1.0 exch sub } - {pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse - } ifelse - graymode fMLevel1 or not { - - [/Pattern [/DeviceGray]] setcolorspace - FrameCurPat setcolor - } { - graymode not fMLevel1 and { - - dup 1 lt {pop FrameCurGray} if - } if - RealSetgray - } ifelse - } ifelse -} bind def -/savematrix { - orgmatrix currentmatrix pop - } bind def -/restorematrix { - orgmatrix setmatrix - } bind def -/fMDefaultMatrix matrix defaultmatrix def -/fMatrix2 matrix def -/dpi 72 0 fMDefaultMatrix dtransform - dup mul exch dup mul add sqrt def - -/freq dpi dup 72 div round dup 0 eq {pop 1} if 8 mul div def -/sangle 1 0 fMDefaultMatrix dtransform exch atan def - sangle fMatrix2 rotate - fMDefaultMatrix fMatrix2 concatmatrix - dup 0 get /sflipx exch def - 3 get /sflipy exch def -/screenIndex { - 0 1 dpiranges length 1 sub { dup dpiranges exch get 1 sub dpi le {exit} {pop} ifelse } for -} bind def -/getCyanScreen { - FMUseHighFrequencyScreens { CHighAngles CMHighFreqs} {CLowAngles CMLowFreqs} ifelse - screenIndex dup 3 1 roll get 3 1 roll get /FMSpotFunction load -} bind def -/getMagentaScreen { - FMUseHighFrequencyScreens { MHighAngles CMHighFreqs } {MLowAngles CMLowFreqs} ifelse - screenIndex dup 3 1 roll get 3 1 roll get /FMSpotFunction load -} bind def -/getYellowScreen { - FMUseHighFrequencyScreens { YHighTDot YHighFreqs} { YLowTDot YLowFreqs } ifelse - screenIndex dup 3 1 roll get 3 1 roll get { 3 div - {2 { 1 add 2 div 3 mul dup floor sub 2 mul 1 sub exch} repeat - FMSpotFunction } } {/FMSpotFunction load } ifelse - 0.0 exch -} bind def -/getBlackScreen { - FMUseHighFrequencyScreens { KHighFreqs } { KLowFreqs } ifelse - screenIndex get 45.0 /FMSpotFunction load -} bind def -/getSpotScreen { - getBlackScreen -} bind def -/getCompositeScreen { - getBlackScreen -} bind def -/FMSetScreen - fMLevel1 { /setscreen load - }{ { - 8 dict begin - /HalftoneType 1 def - /SpotFunction exch def - /Angle exch def - /Frequency exch def - /AccurateScreens FMUseAcccurateScreens def - currentdict end sethalftone - } bind } ifelse -def -/setDefaultScreen { - FMPColor { - orgrxfer cvx orggxfer cvx orgbxfer cvx orgxfer cvx setcolortransfer - } - { - orgxfer cvx settransfer - } ifelse - orgfreq organgle orgproc cvx setscreen -} bind def -/setCurrentScreen { - FrameSepIs FMnone eq { - FMUseDefaultNoSeparationScreen { - setDefaultScreen - } { - getCompositeScreen FMSetScreen - } ifelse - } { - FrameSepIs FMcustom eq { - FMUseDefaultSpotSeparationScreen { - setDefaultScreen - } { - getSpotScreen FMSetScreen - } ifelse - } { - FMUseDefaultProcessSeparationScreen { - setDefaultScreen - } { - FrameSepIs FMcyan eq { - getCyanScreen FMSetScreen - } { - FrameSepIs FMmagenta eq { - getMagentaScreen FMSetScreen - } { - FrameSepIs FMyellow eq { - getYellowScreen FMSetScreen - } { - getBlackScreen FMSetScreen - } ifelse - } ifelse - } ifelse - } ifelse - } ifelse - } ifelse -} bind def -end - -/FMDOCUMENT { - array /FMfonts exch def - /#copies exch def - FrameDict begin - 0 ne /manualfeed exch def - /paperheight exch def - /paperwidth exch def - 0 ne /fMNegative exch def - 0 ne /edown exch def - /yscale exch def - /xscale exch def - fMLevel1 { - manualfeed {setmanualfeed} if - /FMdicttop countdictstack 1 add def - /FMoptop count def - setpapername - manualfeed {true} {papersize} ifelse - {manualpapersize} {false} ifelse - {desperatepapersize} {false} ifelse - {papersizefailure} if - count -1 FMoptop {pop pop} for - countdictstack -1 FMdicttop {pop end} for - } - {2 dict - dup /PageSize [paperwidth paperheight] put - manualfeed {dup /ManualFeed manualfeed put} if - {setpagedevice} stopped {papersizefailure} if - } - ifelse - - FMPColor { - currentcolorscreen - cvlit /orgproc exch def - /organgle exch def - /orgfreq exch def - cvlit /orgbproc exch def - /orgbangle exch def - /orgbfreq exch def - cvlit /orggproc exch def - /orggangle exch def - /orggfreq exch def - cvlit /orgrproc exch def - /orgrangle exch def - /orgrfreq exch def - currentcolortransfer - fMNegative { - 1 1 4 { - pop { 1 exch sub } fmConcatProcs 4 1 roll - } for - 4 copy - setcolortransfer - } if - cvlit /orgxfer exch def - cvlit /orgbxfer exch def - cvlit /orggxfer exch def - cvlit /orgrxfer exch def - } { - currentscreen - cvlit /orgproc exch def - /organgle exch def - /orgfreq exch def - - currenttransfer - fMNegative { - { 1 exch sub } fmConcatProcs - dup settransfer - } if - cvlit /orgxfer exch def - } ifelse - end -} def -/FMBEGINPAGE { - FrameDict begin - /pagesave save def - 3.86 setmiterlimit - /landscape exch 0 ne def - landscape { - 90 rotate 0 exch dup /pwid exch def neg translate pop - }{ - pop /pwid exch def - } ifelse - edown { [-1 0 0 1 pwid 0] concat } if - 0 0 moveto paperwidth 0 lineto paperwidth paperheight lineto - 0 paperheight lineto 0 0 lineto 1 setgray fill - xscale yscale scale - /orgmatrix matrix def - gsave -} def -/FMENDPAGE { - grestore - pagesave restore - end - showpage - } def -/FMFONTDEFINE { - FrameDict begin - findfont - ReEncode - 1 index exch - definefont - FMfonts 3 1 roll - put - end - } def -/FMFILLS { - FrameDict begin dup - array /fillvals exch def - dict /patCache exch def - end - } def -/FMFILL { - FrameDict begin - fillvals 3 1 roll put - end - } def -/FMNORMALIZEGRAPHICS { - newpath - 1 setlinewidth - 0 setlinecap - 0 0 0 sethsbcolor - 0 setgray - } bind def -/FMBEGINEPSF { - end - /FMEPSF save def - /showpage {} def -% See Adobe's "PostScript Language Reference Manual, 2nd Edition", page 714. -% "...the following operators MUST NOT be used in an EPS file:" (emphasis ours) - /banddevice {(banddevice) FMBADEPSF} def - /clear {(clear) FMBADEPSF} def - /cleardictstack {(cleardictstack) FMBADEPSF} def - /copypage {(copypage) FMBADEPSF} def - /erasepage {(erasepage) FMBADEPSF} def - /exitserver {(exitserver) FMBADEPSF} def - /framedevice {(framedevice) FMBADEPSF} def - /grestoreall {(grestoreall) FMBADEPSF} def - /initclip {(initclip) FMBADEPSF} def - /initgraphics {(initgraphics) FMBADEPSF} def - /quit {(quit) FMBADEPSF} def - /renderbands {(renderbands) FMBADEPSF} def - /setglobal {(setglobal) FMBADEPSF} def - /setpagedevice {(setpagedevice) FMBADEPSF} def - /setshared {(setshared) FMBADEPSF} def - /startjob {(startjob) FMBADEPSF} def - /lettertray {(lettertray) FMBADEPSF} def - /letter {(letter) FMBADEPSF} def - /lettersmall {(lettersmall) FMBADEPSF} def - /11x17tray {(11x17tray) FMBADEPSF} def - /11x17 {(11x17) FMBADEPSF} def - /ledgertray {(ledgertray) FMBADEPSF} def - /ledger {(ledger) FMBADEPSF} def - /legaltray {(legaltray) FMBADEPSF} def - /legal {(legal) FMBADEPSF} def - /statementtray {(statementtray) FMBADEPSF} def - /statement {(statement) FMBADEPSF} def - /executivetray {(executivetray) FMBADEPSF} def - /executive {(executive) FMBADEPSF} def - /a3tray {(a3tray) FMBADEPSF} def - /a3 {(a3) FMBADEPSF} def - /a4tray {(a4tray) FMBADEPSF} def - /a4 {(a4) FMBADEPSF} def - /a4small {(a4small) FMBADEPSF} def - /b4tray {(b4tray) FMBADEPSF} def - /b4 {(b4) FMBADEPSF} def - /b5tray {(b5tray) FMBADEPSF} def - /b5 {(b5) FMBADEPSF} def - FMNORMALIZEGRAPHICS - [/fy /fx /fh /fw /ury /urx /lly /llx] {exch def} forall - fx fw 2 div add fy fh 2 div add translate - rotate - fw 2 div neg fh 2 div neg translate - fw urx llx sub div fh ury lly sub div scale - llx neg lly neg translate - /FMdicttop countdictstack 1 add def - /FMoptop count def - } bind def -/FMENDEPSF { - count -1 FMoptop {pop pop} for - countdictstack -1 FMdicttop {pop end} for - FMEPSF restore - FrameDict begin - } bind def -FrameDict begin -/setmanualfeed { -%%BeginFeature *ManualFeed True - statusdict /manualfeed true put -%%EndFeature - } bind def -/max {2 copy lt {exch} if pop} bind def -/min {2 copy gt {exch} if pop} bind def -/inch {72 mul} def -/pagedimen { - paperheight sub abs 16 lt exch - paperwidth sub abs 16 lt and - {/papername exch def} {pop} ifelse - } bind def -/setpapername { - /papersizedict 14 dict def - papersizedict begin - /papername /unknown def - /Letter 8.5 inch 11.0 inch pagedimen - /LetterSmall 7.68 inch 10.16 inch pagedimen - /Tabloid 11.0 inch 17.0 inch pagedimen - /Ledger 17.0 inch 11.0 inch pagedimen - /Legal 8.5 inch 14.0 inch pagedimen - /Statement 5.5 inch 8.5 inch pagedimen - /Executive 7.5 inch 10.0 inch pagedimen - /A3 11.69 inch 16.5 inch pagedimen - /A4 8.26 inch 11.69 inch pagedimen - /A4Small 7.47 inch 10.85 inch pagedimen - /B4 10.125 inch 14.33 inch pagedimen - /B5 7.16 inch 10.125 inch pagedimen - end - } bind def -/papersize { - papersizedict begin - /Letter {lettertray letter} def - /LetterSmall {lettertray lettersmall} def - /Tabloid {11x17tray 11x17} def - /Ledger {ledgertray ledger} def - /Legal {legaltray legal} def - /Statement {statementtray statement} def - /Executive {executivetray executive} def - /A3 {a3tray a3} def - /A4 {a4tray a4} def - /A4Small {a4tray a4small} def - /B4 {b4tray b4} def - /B5 {b5tray b5} def - /unknown {unknown} def - papersizedict dup papername known {papername} {/unknown} ifelse get - end - statusdict begin stopped end - } bind def -/manualpapersize { - papersizedict begin - /Letter {letter} def - /LetterSmall {lettersmall} def - /Tabloid {11x17} def - /Ledger {ledger} def - /Legal {legal} def - /Statement {statement} def - /Executive {executive} def - /A3 {a3} def - /A4 {a4} def - /A4Small {a4small} def - /B4 {b4} def - /B5 {b5} def - /unknown {unknown} def - papersizedict dup papername known {papername} {/unknown} ifelse get - end - stopped - } bind def -/desperatepapersize { - statusdict /setpageparams known - { - paperwidth paperheight 0 1 - statusdict begin - {setpageparams} stopped - end - } {true} ifelse - } bind def -/papersizefailure { - FMAllowPaperSizeMismatch not - { -(The requested paper size is not available in any currently-installed tray) -(Edit the PS file to "FMAllowPaperSizeMismatch true" to use default tray) - FMFAILURE } if - } def -/DiacriticEncoding [ -/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef -/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef -/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef -/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef -/.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl -/numbersign /dollar /percent /ampersand /quotesingle /parenleft -/parenright /asterisk /plus /comma /hyphen /period /slash /zero /one -/two /three /four /five /six /seven /eight /nine /colon /semicolon -/less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K -/L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash -/bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h -/i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar -/braceright /asciitilde /.notdef /Adieresis /Aring /Ccedilla /Eacute -/Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis -/atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis -/iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve -/ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex -/udieresis /dagger /.notdef /cent /sterling /section /bullet -/paragraph /germandbls /registered /copyright /trademark /acute -/dieresis /.notdef /AE /Oslash /.notdef /.notdef /.notdef /.notdef -/yen /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef -/ordfeminine /ordmasculine /.notdef /ae /oslash /questiondown -/exclamdown /logicalnot /.notdef /florin /.notdef /.notdef -/guillemotleft /guillemotright /ellipsis /.notdef /Agrave /Atilde -/Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright -/quoteleft /quoteright /.notdef /.notdef /ydieresis /Ydieresis -/fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl -/periodcentered /quotesinglbase /quotedblbase /perthousand -/Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute -/Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /.notdef /Ograve -/Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron -/breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron -] def -/ReEncode { - dup - length - dict begin - { - 1 index /FID ne - {def} - {pop pop} ifelse - } forall - 0 eq {/Encoding DiacriticEncoding def} if - currentdict - end - } bind def -FMPColor - - { - /BEGINBITMAPCOLOR { - BITMAPCOLOR} def - /BEGINBITMAPCOLORc { - BITMAPCOLORc} def - /BEGINBITMAPTRUECOLOR { - BITMAPTRUECOLOR } def - /BEGINBITMAPTRUECOLORc { - BITMAPTRUECOLORc } def - /BEGINBITMAPCMYK { - BITMAPCMYK } def - /BEGINBITMAPCMYKc { - BITMAPCMYKc } def - } - - { - /BEGINBITMAPCOLOR { - BITMAPGRAY} def - /BEGINBITMAPCOLORc { - BITMAPGRAYc} def - /BEGINBITMAPTRUECOLOR { - BITMAPTRUEGRAY } def - /BEGINBITMAPTRUECOLORc { - BITMAPTRUEGRAYc } def - /BEGINBITMAPCMYK { - BITMAPCMYKGRAY } def - /BEGINBITMAPCMYKc { - BITMAPCMYKGRAYc } def - } -ifelse -/K { - FMPrintAllColorsAsBlack { - dup 1 eq 2 index 1 eq and 3 index 1 eq and not - {7 {pop} repeat 0 0 0 1 0 0 0} if - } if - FrameCurColors astore - pop combineColor -} bind def -/graymode true def -fMLevel1 { - /fmGetFlip { - fMatrix2 exch get mul 0 lt { -1 } { 1 } ifelse - } FmBD -} if -/setPatternMode { - fMLevel1 { - 2 index patScreenDict exch known { - pop pop - patScreenDict exch get aload pop - freq - mul - 5 2 roll - fMatrix2 currentmatrix 1 get 0 ne { - 3 -1 roll 90 add 3 1 roll - sflipx 1 fmGetFlip sflipy 2 fmGetFlip neg mul - } { - sflipx 0 fmGetFlip sflipy 3 fmGetFlip mul - } ifelse - 0 lt {exch pop} {pop} ifelse - fMNegative { - {neg} fmConcatProcs - } if - bind - - - - systemdict /setscreen get exec - /FrameCurGray exch def - } { - /bwidth exch def - /bpside exch def - /bstring exch def - /onbits 0 def /offbits 0 def - freq sangle landscape {90 add} if - {/ypoint exch def - /xpoint exch def - /xindex xpoint 1 add 2 div bpside mul cvi def - /yindex ypoint 1 add 2 div bpside mul cvi def - bstring yindex bwidth mul xindex 8 idiv add get - 1 7 xindex 8 mod sub bitshift and 0 ne fMNegative {not} if - {/onbits onbits 1 add def 1} - {/offbits offbits 1 add def 0} - ifelse - } - setscreen - offbits offbits onbits add div fMNegative {1.0 exch sub} if - /FrameCurGray exch def - } ifelse - } { - pop pop - dup patCache exch known { - patCache exch get - } { - dup - patDict /bstring 3 -1 roll put - patDict - 9 PatFreq screenIndex get div dup matrix scale - makepattern - dup - patCache 4 -1 roll 3 -1 roll put - } ifelse - /FrameCurGray 0 def - /FrameCurPat exch def - } ifelse - /graymode false def - combineColor -} bind def -/setGrayScaleMode { - graymode not { - /graymode true def - fMLevel1 { - setCurrentScreen - } if - } if - /FrameCurGray exch def - combineColor -} bind def -/normalize { - transform round exch round exch itransform - } bind def -/dnormalize { - dtransform round exch round exch idtransform - } bind def -/lnormalize { - 0 dtransform exch cvi 2 idiv 2 mul 1 add exch idtransform pop - } bind def -/H { - lnormalize setlinewidth - } bind def -/Z { - setlinecap - } bind def - -/PFill { - graymode fMLevel1 or not { - gsave 1 setgray eofill grestore - } if -} bind def -/PStroke { - graymode fMLevel1 or not { - gsave 1 setgray stroke grestore - } if - stroke -} bind def -/X { - fillvals exch get - dup type /stringtype eq - {8 1 setPatternMode} - {setGrayScaleMode} - ifelse - } bind def -/V { - PFill gsave eofill grestore - } bind def -/Vclip { - clip - } bind def -/Vstrk { - currentlinewidth exch setlinewidth PStroke setlinewidth - } bind def -/N { - PStroke - } bind def -/Nclip { - strokepath clip newpath - } bind def -/Nstrk { - currentlinewidth exch setlinewidth PStroke setlinewidth - } bind def -/M {newpath moveto} bind def -/E {lineto} bind def -/D {curveto} bind def -/O {closepath} bind def -/L { - /n exch def - newpath - normalize - moveto - 2 1 n {pop normalize lineto} for - } bind def -/Y { - L - closepath - } bind def -/R { - /y2 exch def - /x2 exch def - /y1 exch def - /x1 exch def - x1 y1 - x2 y1 - x2 y2 - x1 y2 - 4 Y - } bind def -/rarc - {rad - arcto - } bind def -/RR { - /rad exch def - normalize - /y2 exch def - /x2 exch def - normalize - /y1 exch def - /x1 exch def - mark - newpath - { - x1 y1 rad add moveto - x1 y2 x2 y2 rarc - x2 y2 x2 y1 rarc - x2 y1 x1 y1 rarc - x1 y1 x1 y2 rarc - closepath - } stopped {x1 y1 x2 y2 R} if - cleartomark - } bind def -/RRR { - /rad exch def - normalize /y4 exch def /x4 exch def - normalize /y3 exch def /x3 exch def - normalize /y2 exch def /x2 exch def - normalize /y1 exch def /x1 exch def - newpath - normalize moveto - mark - { - x2 y2 x3 y3 rarc - x3 y3 x4 y4 rarc - x4 y4 x1 y1 rarc - x1 y1 x2 y2 rarc - closepath - } stopped - {x1 y1 x2 y2 x3 y3 x4 y4 newpath moveto lineto lineto lineto closepath} if - cleartomark - } bind def -/C { - grestore - gsave - R - clip - setCurrentScreen -} bind def -/CP { - grestore - gsave - Y - clip - setCurrentScreen -} bind def -/F { - FMfonts exch get - FMpointsize scalefont - setfont - } bind def -/Q { - /FMpointsize exch def - F - } bind def -/T { - moveto show - } bind def -/RF { - rotate - 0 ne {-1 1 scale} if - } bind def -/TF { - gsave - moveto - RF - show - grestore - } bind def -/P { - moveto - 0 32 3 2 roll widthshow - } bind def -/PF { - gsave - moveto - RF - 0 32 3 2 roll widthshow - grestore - } bind def -/S { - moveto - 0 exch ashow - } bind def -/SF { - gsave - moveto - RF - 0 exch ashow - grestore - } bind def -/B { - moveto - 0 32 4 2 roll 0 exch awidthshow - } bind def -/BF { - gsave - moveto - RF - 0 32 4 2 roll 0 exch awidthshow - grestore - } bind def -/G { - gsave - newpath - normalize translate 0.0 0.0 moveto - dnormalize scale - 0.0 0.0 1.0 5 3 roll arc - closepath - PFill fill - grestore - } bind def -/Gstrk { - savematrix - newpath - 2 index 2 div add exch 3 index 2 div sub exch - normalize 2 index 2 div sub exch 3 index 2 div add exch - translate - scale - 0.0 0.0 1.0 5 3 roll arc - restorematrix - currentlinewidth exch setlinewidth PStroke setlinewidth - } bind def -/Gclip { - newpath - savematrix - normalize translate 0.0 0.0 moveto - dnormalize scale - 0.0 0.0 1.0 5 3 roll arc - closepath - clip newpath - restorematrix - } bind def -/GG { - gsave - newpath - normalize translate 0.0 0.0 moveto - rotate - dnormalize scale - 0.0 0.0 1.0 5 3 roll arc - closepath - PFill - fill - grestore - } bind def -/GGclip { - savematrix - newpath - normalize translate 0.0 0.0 moveto - rotate - dnormalize scale - 0.0 0.0 1.0 5 3 roll arc - closepath - clip newpath - restorematrix - } bind def -/GGstrk { - savematrix - newpath - normalize translate 0.0 0.0 moveto - rotate - dnormalize scale - 0.0 0.0 1.0 5 3 roll arc - closepath - restorematrix - currentlinewidth exch setlinewidth PStroke setlinewidth - } bind def -/A { - gsave - savematrix - newpath - 2 index 2 div add exch 3 index 2 div sub exch - normalize 2 index 2 div sub exch 3 index 2 div add exch - translate - scale - 0.0 0.0 1.0 5 3 roll arc - restorematrix - PStroke - grestore - } bind def -/Aclip { - newpath - savematrix - normalize translate 0.0 0.0 moveto - dnormalize scale - 0.0 0.0 1.0 5 3 roll arc - closepath - strokepath clip newpath - restorematrix -} bind def -/Astrk { - Gstrk -} bind def -/AA { - gsave - savematrix - newpath - - 3 index 2 div add exch 4 index 2 div sub exch - - normalize 3 index 2 div sub exch 4 index 2 div add exch - translate - rotate - scale - 0.0 0.0 1.0 5 3 roll arc - restorematrix - PStroke - grestore - } bind def -/AAclip { - savematrix - newpath - normalize translate 0.0 0.0 moveto - rotate - dnormalize scale - 0.0 0.0 1.0 5 3 roll arc - closepath - strokepath clip newpath - restorematrix -} bind def -/AAstrk { - GGstrk -} bind def -/BEGINPRINTCODE { - /FMdicttop countdictstack 1 add def - /FMoptop count 7 sub def - /FMsaveobject save def - userdict begin - /showpage {} def - FMNORMALIZEGRAPHICS - 3 index neg 3 index neg translate - } bind def -/ENDPRINTCODE { - count -1 FMoptop {pop pop} for - countdictstack -1 FMdicttop {pop end} for - FMsaveobject restore - } bind def -/gn { - 0 - { 46 mul - cf read pop - 32 sub - dup 46 lt {exit} if - 46 sub add - } loop - add - } bind def -/cfs { - /str sl string def - 0 1 sl 1 sub {str exch val put} for - str def - } bind def -/ic [ - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 - 0 - {0 hx} {1 hx} {2 hx} {3 hx} {4 hx} {5 hx} {6 hx} {7 hx} {8 hx} {9 hx} - {10 hx} {11 hx} {12 hx} {13 hx} {14 hx} {15 hx} {16 hx} {17 hx} {18 hx} - {19 hx} {gn hx} {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12} - {13} {14} {15} {16} {17} {18} {19} {gn} {0 wh} {1 wh} {2 wh} {3 wh} - {4 wh} {5 wh} {6 wh} {7 wh} {8 wh} {9 wh} {10 wh} {11 wh} {12 wh} - {13 wh} {14 wh} {gn wh} {0 bl} {1 bl} {2 bl} {3 bl} {4 bl} {5 bl} {6 bl} - {7 bl} {8 bl} {9 bl} {10 bl} {11 bl} {12 bl} {13 bl} {14 bl} {gn bl} - {0 fl} {1 fl} {2 fl} {3 fl} {4 fl} {5 fl} {6 fl} {7 fl} {8 fl} {9 fl} - {10 fl} {11 fl} {12 fl} {13 fl} {14 fl} {gn fl} - ] def -/ms { - /sl exch def - /val 255 def - /ws cfs - /im cfs - /val 0 def - /bs cfs - /cs cfs - } bind def -400 ms -/ip { - is - 0 - cf cs readline pop - { ic exch get exec - add - } forall - pop - - } bind def -/rip { - - - bis ris copy pop - is - 0 - cf cs readline pop - { ic exch get exec - add - } forall - pop pop - ris gis copy pop - dup is exch - - cf cs readline pop - { ic exch get exec - add - } forall - pop pop - gis bis copy pop - dup add is exch - - cf cs readline pop - { ic exch get exec - add - } forall - pop - - } bind def -/rip4 { - - - kis cis copy pop - is - 0 - cf cs readline pop - { ic exch get exec - add - } forall - pop pop - cis mis copy pop - dup is exch - - cf cs readline pop - { ic exch get exec - add - } forall - pop pop - mis yis copy pop - dup dup add is exch - - cf cs readline pop - { ic exch get exec - add - } forall - pop pop - yis kis copy pop - 3 mul is exch - - cf cs readline pop - { ic exch get exec - add - } forall - pop - - } bind def -/wh { - /len exch def - /pos exch def - ws 0 len getinterval im pos len getinterval copy pop - pos len - } bind def -/bl { - /len exch def - /pos exch def - bs 0 len getinterval im pos len getinterval copy pop - pos len - } bind def -/s1 1 string def -/fl { - /len exch def - /pos exch def - /val cf s1 readhexstring pop 0 get def - pos 1 pos len add 1 sub {im exch val put} for - pos len - } bind def -/hx { - 3 copy getinterval - cf exch readhexstring pop pop - } bind def -/wbytes { - dup dup - 8 gt { pop 8 idiv mul } - { 8 eq {pop} {1 eq {7 add 8 idiv} {3 add 4 idiv} ifelse} ifelse } ifelse - } bind def -/BEGINBITMAPBWc { - 1 {} COMMONBITMAPc - } bind def -/BEGINBITMAPGRAYc { - 8 {} COMMONBITMAPc - } bind def -/BEGINBITMAP2BITc { - 2 {} COMMONBITMAPc - } bind def -/COMMONBITMAPc { - - /cvtProc exch def - /depth exch def - gsave - - 3 index 2 div add exch - 4 index 2 div add exch - translate - rotate - 1 index 2 div neg - 1 index 2 div neg - translate - scale - /height exch def /width exch def - /lb width depth wbytes def - sl lb lt {lb ms} if - /bitmapsave save def - cvtProc - /is im 0 lb getinterval def - ws 0 lb getinterval is copy pop - /cf currentfile def - width height depth [width 0 0 height neg 0 height] - {ip} image - bitmapsave restore - grestore - } bind def -/BEGINBITMAPBW { - 1 {} COMMONBITMAP - } bind def -/BEGINBITMAPGRAY { - 8 {} COMMONBITMAP - } bind def -/BEGINBITMAP2BIT { - 2 {} COMMONBITMAP - } bind def -/COMMONBITMAP { - /cvtProc exch def - /depth exch def - gsave - - 3 index 2 div add exch - 4 index 2 div add exch - translate - rotate - 1 index 2 div neg - 1 index 2 div neg - translate - scale - /height exch def /width exch def - /bitmapsave save def - cvtProc - /is width depth wbytes string def - /cf currentfile def - width height depth [width 0 0 height neg 0 height] - {cf is readhexstring pop} image - bitmapsave restore - grestore - } bind def -/ngrayt 256 array def -/nredt 256 array def -/nbluet 256 array def -/ngreent 256 array def -fMLevel1 { -/colorsetup { - currentcolortransfer - /gryt exch def - /blut exch def - /grnt exch def - /redt exch def - 0 1 255 { - /indx exch def - /cynu 1 red indx get 255 div sub def - /magu 1 green indx get 255 div sub def - /yelu 1 blue indx get 255 div sub def - /kk cynu magu min yelu min def - /u kk currentundercolorremoval exec def -% /u 0 def - nredt indx 1 0 cynu u sub max sub redt exec put - ngreent indx 1 0 magu u sub max sub grnt exec put - nbluet indx 1 0 yelu u sub max sub blut exec put - ngrayt indx 1 kk currentblackgeneration exec sub gryt exec put - } for - {255 mul cvi nredt exch get} - {255 mul cvi ngreent exch get} - {255 mul cvi nbluet exch get} - {255 mul cvi ngrayt exch get} - setcolortransfer - {pop 0} setundercolorremoval - {} setblackgeneration - } bind def -} -{ -/colorSetup2 { - [ /Indexed /DeviceRGB 255 - {dup red exch get 255 div - exch dup green exch get 255 div - exch blue exch get 255 div} - ] setcolorspace -} bind def -} ifelse -/fakecolorsetup { - /tran 256 string def - 0 1 255 {/indx exch def - tran indx - red indx get 77 mul - green indx get 151 mul - blue indx get 28 mul - add add 256 idiv put} for - currenttransfer - {255 mul cvi tran exch get 255.0 div} - exch fmConcatProcs settransfer -} bind def -/BITMAPCOLOR { - /depth 8 def - gsave - - 3 index 2 div add exch - 4 index 2 div add exch - translate - rotate - 1 index 2 div neg - 1 index 2 div neg - translate - scale - /height exch def /width exch def - /bitmapsave save def - fMLevel1 { - colorsetup - /is width depth wbytes string def - /cf currentfile def - width height depth [width 0 0 height neg 0 height] - {cf is readhexstring pop} {is} {is} true 3 colorimage - } { - colorSetup2 - /is width depth wbytes string def - /cf currentfile def - 7 dict dup begin - /ImageType 1 def - /Width width def - /Height height def - /ImageMatrix [width 0 0 height neg 0 height] def - /DataSource {cf is readhexstring pop} bind def - /BitsPerComponent depth def - /Decode [0 255] def - end image - } ifelse - bitmapsave restore - grestore - } bind def -/BITMAPCOLORc { - /depth 8 def - gsave - - 3 index 2 div add exch - 4 index 2 div add exch - translate - rotate - 1 index 2 div neg - 1 index 2 div neg - translate - scale - /height exch def /width exch def - /lb width depth wbytes def - sl lb lt {lb ms} if - /bitmapsave save def - fMLevel1 { - colorsetup - /is im 0 lb getinterval def - ws 0 lb getinterval is copy pop - /cf currentfile def - width height depth [width 0 0 height neg 0 height] - {ip} {is} {is} true 3 colorimage - } { - colorSetup2 - /is im 0 lb getinterval def - ws 0 lb getinterval is copy pop - /cf currentfile def - 7 dict dup begin - /ImageType 1 def - /Width width def - /Height height def - /ImageMatrix [width 0 0 height neg 0 height] def - /DataSource {ip} bind def - /BitsPerComponent depth def - /Decode [0 255] def - end image - } ifelse - bitmapsave restore - grestore - } bind def -/BITMAPTRUECOLORc { - /depth 24 def - gsave - - 3 index 2 div add exch - 4 index 2 div add exch - translate - rotate - 1 index 2 div neg - 1 index 2 div neg - translate - scale - /height exch def /width exch def - /lb width depth wbytes def - sl lb lt {lb ms} if - /bitmapsave save def - - /is im 0 lb getinterval def - /ris im 0 width getinterval def - /gis im width width getinterval def - /bis im width 2 mul width getinterval def - - ws 0 lb getinterval is copy pop - /cf currentfile def - width height 8 [width 0 0 height neg 0 height] - {width rip pop ris} {gis} {bis} true 3 colorimage - bitmapsave restore - grestore - } bind def -/BITMAPCMYKc { - /depth 32 def - gsave - - 3 index 2 div add exch - 4 index 2 div add exch - translate - rotate - 1 index 2 div neg - 1 index 2 div neg - translate - scale - /height exch def /width exch def - /lb width depth wbytes def - sl lb lt {lb ms} if - /bitmapsave save def - - /is im 0 lb getinterval def - /cis im 0 width getinterval def - /mis im width width getinterval def - /yis im width 2 mul width getinterval def - /kis im width 3 mul width getinterval def - - ws 0 lb getinterval is copy pop - /cf currentfile def - width height 8 [width 0 0 height neg 0 height] - {width rip4 pop cis} {mis} {yis} {kis} true 4 colorimage - bitmapsave restore - grestore - } bind def -/BITMAPTRUECOLOR { - gsave - - 3 index 2 div add exch - 4 index 2 div add exch - translate - rotate - 1 index 2 div neg - 1 index 2 div neg - translate - scale - /height exch def /width exch def - /bitmapsave save def - /is width string def - /gis width string def - /bis width string def - /cf currentfile def - width height 8 [width 0 0 height neg 0 height] - { cf is readhexstring pop } - { cf gis readhexstring pop } - { cf bis readhexstring pop } - true 3 colorimage - bitmapsave restore - grestore - } bind def -/BITMAPCMYK { - gsave - - 3 index 2 div add exch - 4 index 2 div add exch - translate - rotate - 1 index 2 div neg - 1 index 2 div neg - translate - scale - /height exch def /width exch def - /bitmapsave save def - /is width string def - /mis width string def - /yis width string def - /kis width string def - /cf currentfile def - width height 8 [width 0 0 height neg 0 height] - { cf is readhexstring pop } - { cf mis readhexstring pop } - { cf yis readhexstring pop } - { cf kis readhexstring pop } - true 4 colorimage - bitmapsave restore - grestore - } bind def -/BITMAPTRUEGRAYc { - /depth 24 def - gsave - - 3 index 2 div add exch - 4 index 2 div add exch - translate - rotate - 1 index 2 div neg - 1 index 2 div neg - translate - scale - /height exch def /width exch def - /lb width depth wbytes def - sl lb lt {lb ms} if - /bitmapsave save def - - /is im 0 lb getinterval def - /ris im 0 width getinterval def - /gis im width width getinterval def - /bis im width 2 mul width getinterval def - ws 0 lb getinterval is copy pop - /cf currentfile def - width height 8 [width 0 0 height neg 0 height] - {width rip pop ris gis bis width gray} image - bitmapsave restore - grestore - } bind def -/BITMAPCMYKGRAYc { - /depth 32 def - gsave - - 3 index 2 div add exch - 4 index 2 div add exch - translate - rotate - 1 index 2 div neg - 1 index 2 div neg - translate - scale - /height exch def /width exch def - /lb width depth wbytes def - sl lb lt {lb ms} if - /bitmapsave save def - - /is im 0 lb getinterval def - /cis im 0 width getinterval def - /mis im width width getinterval def - /yis im width 2 mul width getinterval def - /kis im width 3 mul width getinterval def - ws 0 lb getinterval is copy pop - /cf currentfile def - width height 8 [width 0 0 height neg 0 height] - {width rip pop cis mis yis kis width cgray} image - bitmapsave restore - grestore - } bind def -/cgray { - /ww exch def - /k exch def - /y exch def - /m exch def - /c exch def - 0 1 ww 1 sub { /i exch def c i get m i get y i get k i get CMYKtoRGB - .144 mul 3 1 roll .587 mul 3 1 roll .299 mul add add - c i 3 -1 roll floor cvi put } for - c - } bind def -/gray { - /ww exch def - /b exch def - /g exch def - /r exch def - 0 1 ww 1 sub { /i exch def r i get .299 mul g i get .587 mul - b i get .114 mul add add r i 3 -1 roll floor cvi put } for - r - } bind def -/BITMAPTRUEGRAY { - gsave - - 3 index 2 div add exch - 4 index 2 div add exch - translate - rotate - 1 index 2 div neg - 1 index 2 div neg - translate - scale - /height exch def /width exch def - /bitmapsave save def - /is width string def - /gis width string def - /bis width string def - /cf currentfile def - width height 8 [width 0 0 height neg 0 height] - { cf is readhexstring pop - cf gis readhexstring pop - cf bis readhexstring pop width gray} image - bitmapsave restore - grestore - } bind def -/BITMAPCMYKGRAY { - gsave - - 3 index 2 div add exch - 4 index 2 div add exch - translate - rotate - 1 index 2 div neg - 1 index 2 div neg - translate - scale - /height exch def /width exch def - /bitmapsave save def - /is width string def - /yis width string def - /mis width string def - /kis width string def - /cf currentfile def - width height 8 [width 0 0 height neg 0 height] - { cf is readhexstring pop - cf mis readhexstring pop - cf yis readhexstring pop - cf kis readhexstring pop width cgray} image - bitmapsave restore - grestore - } bind def -/BITMAPGRAY { - 8 {fakecolorsetup} COMMONBITMAP - } bind def -/BITMAPGRAYc { - 8 {fakecolorsetup} COMMONBITMAPc - } bind def -/ENDBITMAP { - } bind def -end - /ALDmatrix matrix def ALDmatrix currentmatrix pop -/StartALD { - /ALDsave save def - savematrix - ALDmatrix setmatrix - } bind def -/InALD { - restorematrix - } bind def -/DoneALD { - ALDsave restore - } bind def -/I { setdash } bind def -/J { [] 0 setdash } bind def -%%EndProlog -%%BeginSetup -(5.0) FMVERSION -1 1 0 0 612 792 0 1 29 FMDOCUMENT -0 0 /Helvetica-Bold FMFONTDEFINE -1 0 /Times-Italic FMFONTDEFINE -2 0 /Times-Roman FMFONTDEFINE -3 0 /Times-Bold FMFONTDEFINE -4 0 /Helvetica FMFONTDEFINE -5 0 /Courier FMFONTDEFINE -6 1 /Symbol FMFONTDEFINE -7 0 /Times-BoldItalic FMFONTDEFINE -32 FMFILLS -0 0 FMFILL -1 0.1 FMFILL -2 0.3 FMFILL -3 0.5 FMFILL -4 0.7 FMFILL -5 0.9 FMFILL -6 0.97 FMFILL -7 1 FMFILL -8 <0f1e3c78f0e1c387> FMFILL -9 <0f87c3e1f0783c1e> FMFILL -10 FMFILL -11 FMFILL -12 <8142241818244281> FMFILL -13 <03060c183060c081> FMFILL -14 <8040201008040201> FMFILL -16 1 FMFILL -17 0.9 FMFILL -18 0.7 FMFILL -19 0.5 FMFILL -20 0.3 FMFILL -21 0.1 FMFILL -22 0.03 FMFILL -23 0 FMFILL -24 FMFILL -25 FMFILL -26 <3333333333333333> FMFILL -27 <0000ffff0000ffff> FMFILL -28 <7ebddbe7e7dbbd7e> FMFILL -29 FMFILL -30 <7fbfdfeff7fbfdfe> FMFILL -%%EndSetup -%%Page: "1" 1 -%%BeginPaperSize: Letter -%%EndPaperSize -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -J -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 24 Q -0 X -0 0 0 1 0 0 0 K -(The X K) 150.56 646 T -(e) 239.56 646 T -(yboar) 252.54 646 T -(d Extension:) 317.41 646 T -(Librar) 187.18 617 T -(y Speci\336cation) 255.43 617 T -0 14 Q -(Librar) 160.6 524.67 T -(y V) 200.42 524.67 T -(er) 220.73 524.67 T -(sion 1.0 / Document Re) 233.75 524.67 T -(vision 1.1) 387.58 524.67 T -(X Consor) 227.82 490.67 T -(tium Standar) 290.33 490.67 T -(d) 375.62 490.67 T -(X V) 222.41 456.67 T -(er) 244.27 456.67 T -(sion 11, Release 6.4) 257.29 456.67 T -1 12 Q -(Amber J) 224.23 263 T -(. Benson and Gary Aitk) 264.25 263 T -(en) 376.45 263 T -(Erik F) 275.47 235 T -(ortune) 305.2 235 T -2 F -(Silicon Graphics, Inc.) 253.67 221 T -1 F -(Donna Con) 265.81 193 T -(ver) 320.99 193 T -(se) 336.2 193 T -2 F -(X Consortium Inc.) 261.17 179 T -1 F -(Geor) 272.88 151 T -(g) 297.1 151 T -(e Sac) 302.98 151 T -(hs) 328.45 151 T -2 F -(He) 241.18 137 T -(wlett-P) 254.87 137 T -(ackard Compan) 289.36 137 T -(y) 364.82 137 T -1 F -(W) 278.11 109 T -(ill W) 287.45 109 T -(alk) 309.35 109 T -(er) 323.89 109 T -2 F -(Digital Equipment Corporation) 231 95 T -0 0 0 1 0 0 0 K -FMENDPAGE -%%EndPage: "1" 1 -%%Page: "2" 2 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -2 12 Q -0 X -0 0 0 1 0 0 0 K -(Cop) 72 516 T -(yright \251 1995, 1996 X Consortium Inc.) 91.88 516 T -(Cop) 72 502 T -(yright \251 1995, 1996 Silicon Graphics Inc.) 91.88 502 T -(Cop) 72 488 T -(yright \251 1995, 1996 He) 91.88 488 T -(wlett-P) 209.36 488 T -(ackard Compan) 243.85 488 T -(y) 319.32 488 T -(Cop) 72 474 T -(yright \251 1995, 1996 Digital Equipment Corporation) 91.88 474 T -(Permission is hereby granted, free of char) 72 446 T -(ge, to an) 272.06 446 T -(y person obtaining a cop) 312.88 446 T -(y of this softw) 430.74 446 T -(are and) 499.62 446 T -(associated documentation \336les \050the \322Softw) 72 432 T -(are\323\051, to deal in the Softw) 277.19 432 T -(are without restriction,) 401.04 432 T --0.35 (including without limitation the rights to use, cop) 72 418 P --0.35 (y) 306.79 418 P --0.35 (, modify) 312.01 418 P --0.35 (, mer) 351.55 418 P --0.35 (ge, publish, distrib) 375.64 418 P --0.35 (ute, sublicense,) 464.04 418 P --0.08 (and/or sell copies of the Softw) 72 404 P --0.08 (are, and to permit persons to whom the Softw) 217.82 404 P --0.08 (are is furnished to do) 436.06 404 P -(so, subject to the follo) 72 390 T -(wing conditions:) 178.03 390 T --0.47 (The abo) 72 362 P --0.47 (v) 110.34 362 P --0.47 (e cop) 116.16 362 P --0.47 (yright notice and this permission notice shall be included in all copies or substantial) 141.23 362 P -(portions of the Softw) 72 348 T -(are.) 173.54 348 T -(THE SOFTW) 72 320 T -(ARE IS PR) 137.56 320 T -(O) 192.42 320 T -(VIDED \322) 200.48 320 T -(AS IS\323, WITHOUT W) 245.17 320 T -(ARRANTY OF ANY KIND,) 354.37 320 T -(EXPRESS OR IMPLIED, INCLUDING B) 72 306 T -(UT NO) 278.21 306 T -(T LIMITED T) 314.05 306 T -(O THE W) 383.82 306 T -(ARRANTIES OF) 431.7 306 T -(MERCHANT) 72 292 T -(ABILITY) 138.22 292 T -(, FITNESS FOR A P) 184.66 292 T -(AR) 284.57 292 T -(TICULAR PURPOSE AND NONINFRINGE-) 300.52 292 T -(MENT) 72 278 T -(. IN NO EVENT SHALL THE X CONSOR) 105.11 278 T -(TIUM BE LIABLE FOR ANY CLAIM,) 317.03 278 T --0.46 (D) 72 264 P --0.46 (AMA) 80.18 264 P --0.46 (GES OR O) 107.7 264 P --0.46 (THER LIABILITY) 160.3 264 P --0.46 (, WHETHER IN AN A) 251.94 264 P --0.46 (CTION OF CONTRA) 361.93 264 P --0.46 (CT) 467.86 264 P --0.46 (, T) 482.31 264 P --0.46 (OR) 494.97 264 P --0.46 (T OR) 510.92 264 P --0.52 (O) 72 250 P --0.52 (THER) 80.18 250 P --0.52 (WISE, ARISING FR) 110.86 250 P --0.52 (OM, OUT OF OR IN CONNECTION WITH THE SOFTW) 211 250 P --0.52 (ARE OR) 494.37 250 P -(THE USE OR O) 72 236 T -(THER DEALINGS IN THE SOFTW) 151.85 236 T -(ARE.) 330.38 236 T -(Except as contained in this notice, the names of the X Consortium, Silicon Graphics Inc.,) 72 208 T --0.38 (He) 72 194 P --0.38 (wlett-P) 85.69 194 P --0.38 (ackard Compan) 120.18 194 P --0.38 (y) 195.26 194 P --0.38 (, and Digital Equipment Corporation shall not be used in adv) 200.48 194 P --0.38 (ertising or) 488.77 194 P --0.12 (otherwise to promote the sale, use or other dealings in this Softw) 72 180 P --0.12 (are without prior written authori-) 381.85 180 P -(zation.) 72 166 T -0 0 0 1 0 0 0 K -FMENDPAGE -%%EndPage: "2" 2 -%%Page: "3" 3 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -3 14 Q -0 X -0 0 0 1 0 0 0 K -(Ackno) 251.24 710.67 T -(wledgments) 289.99 710.67 T -2 12 Q --0.26 (This document is the result of a great deal of hard w) 72 678 P --0.26 (ork by a great man) 319.3 678 P --0.26 (y people. W) 408.05 678 P --0.26 (ithout Erik F) 465.36 678 P --0.26 (or-) 526.01 678 P --0.11 (tune\325) 72 664 P --0.11 (s w) 96 664 P --0.11 (ork as Architect of the X K) 112.1 664 P --0.11 (e) 241.77 664 P --0.11 (yboard Extension and the longtime support of Silicon Graph-) 246.91 664 P -(ics Inc. there w) 72 650 T -(ould not be a k) 145.19 650 T -(e) 216.4 650 T -(yboard e) 221.54 650 T -(xtension.) 263.02 650 T --0.18 (W) 72 622 P --0.18 (e gratefully thank W) 82.37 622 P --0.18 (ill W) 180.34 622 P --0.18 (alk) 203.54 622 P --0.18 (er and Geor) 218.08 622 P --0.18 (ge Sachs for their help and e) 274.15 622 P --0.18 (xpertise in pro) 409.55 622 P --0.18 (viding some) 478.35 622 P -(of the content for this document, and Digital Equipment Corporation and He) 72 608 T -(wlett-P) 439 608 T -(ackard for) 473.48 608 T -(allo) 72 594 T -(wing them to participate in this project, and we are deeply indebted to IBM for pro) 89.7 594 T -(viding the) 486.79 594 T -(funding to complete this library speci\336cation.) 72 580 T -(Most of all, we thank Gary Aitk) 72 552 T -(en and Amber J. Benson for their long hours and late nights as) 225.53 552 T --0.02 (ultimate authors of this speci\336cation, and for serving as authors, document editors, and XKB pro-) 72 538 P -(tocol and implementation re) 72 524 T -(vie) 206.69 524 T -(wers. Their commitment to accurac) 221.05 524 T -(y and completeness, their) 391.16 524 T -(attention to detail, their k) 72 510 T -(een insight, and their good natures when w) 192.88 510 T -(orking under tremendous) 398.72 510 T -(pressure are in some measure responsible not only for the quality of this document, b) 72 496 T -(ut for the) 480.04 496 T -(quality of the K) 72 482 T -(e) 147.36 482 T -(yboard e) 152.51 482 T -(xtension itself.) 193.98 482 T -(Matt Landau) 72 440 T -(Manager) 72 426 T -(, X W) 114.17 426 T -(indo) 142.68 426 T -(w System) 163.72 426 T -(X Consortium Inc.) 72 412 T -(5 February 1996) 72 398 T -0 0 0 1 0 0 0 K -FMENDPAGE -%%EndPage: "3" 3 -%%Page: "4" 4 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -2 12 Q -(The following table shows the font conventions used in this document:) 108 712 T -1 F -(Usa) 109 673 T -(g) 128.21 673 T -(e) 134.09 673 T -(F) 298 673 T -(ont e) 304.07 673 T -(xample) 327.5 673 T -2 11 Q -(K) 109 657.67 T -(e) 116.67 657.67 T -(y Labels) 121.39 657.67 T -4 F -(Num_Loc) 298 657.67 T -(k) 344.85 657.67 T -2 F -(Ne) 109 642.67 T -(w terms) 121.55 642.67 T -1 12 Q -(SlowK) 298 642.67 T -(e) 328.92 642.67 T -(ys acceptance delay) 333.89 642.67 T -2 11 Q -(Function de\336nitions) 109 627.67 T -(XkbColorPtr) 298 627.67 T -3 F -(XkbAddGeomColor) 357.59 627.67 T -2 F -(\050) 452.92 627.67 T -1 F -(g) 456.59 627.67 T -(eom) 461.98 627.67 T -2 F -(,) 480.3 627.67 T -1 F -(spec) 483.05 627.67 T -2 F -(,) 502.6 627.67 T -1 F -(pixel) 505.35 627.67 T -2 F -(\051) 526.73 627.67 T -(Function references) 109 612.67 T -1 12 Q -(XkbAddGeomColor) 298 612.67 T -2 11 Q -(P) 109 597.67 T -(arameters or ar) 114.95 597.67 T -(guments) 180.72 597.67 T -1 12 Q -(g) 298 597 T -(eom) 303.88 597 T -2 11 Q -(Structure de\336nitions) 109 581.67 T -3 F -(XkbGeometryRec) 298 581.67 T -2 F -(Structure references) 109 566.67 T -5 12 Q --0.6 (XkbGeometryRec) 298 566.67 S -2 11 Q -(References to \336elds in a data structure) 109 551.67 T -1 12 Q -(key_aliases) 298 551 T -2 11 Q -(References to masks, modi\336ers, controls) 109 535.67 T -5 12 Q --0.6 (IgnoreGroupLock) 298 535.67 S -108 685 540 685 2 L -V -0.5 H -0 Z -N -108 667 540 667 2 L -V -N -FMENDPAGE -%%EndPage: "4" 4 -%%Page: "1" 5 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(T) 509.04 40.62 T -(OC-1) 515.56 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -2 12 Q -(1) 72 712 T -(Ov) 108 712 T -(ervie) 122.48 712 T -(w) 146.17 712 T -(..................................................................................................................) 156 712 T -(1) 498 712 T -2 10 Q -(1.1) 108 697.33 T -(Core X Protocol Support for K) 144 697.33 T -(e) 267.35 697.33 T -(yboards) 271.64 697.33 T -(.............................................................................) 305 697.33 T -(1) 499 697.33 T -(1.2) 108 683.33 T -(Xkb K) 144 683.33 T -(e) 170.69 683.33 T -(yboard Extension Support for K) 174.98 683.33 T -(e) 303.05 683.33 T -(yboards) 307.34 683.33 T -(...............................................................) 340 683.33 T -(1) 499 683.33 T -(1.3) 108 669.33 T -(Xkb Extension Components) 144 669.33 T -(................................................................................................) 257.5 669.33 T -(1) 499 669.33 T -(1.3.1) 144 657.33 T -(Groups and Shift Le) 180 657.33 T -(v) 261.13 657.33 T -(els) 265.98 657.33 T -(........................................................................................) 277.5 657.33 T -(3) 499 657.33 T -(1.3.2) 144 645.33 T -(Radio Groups) 180 645.33 T -(........................................................................................................) 237.5 645.33 T -(3) 499 645.33 T -(1.4) 108 631.33 T -(Client T) 144 631.33 T -(ypes) 176.26 631.33 T -(.........................................................................................................................) 195 631.33 T -(3) 499 631.33 T -(1.5) 108 617.33 T -(Compatibility W) 144 617.33 T -(ith the Core Protocol) 211.11 617.33 T -(.................................................................................) 295 617.33 T -(4) 499 617.33 T -(1.6) 108 603.33 T -(Additional Protocol Errors) 144 603.33 T -(..................................................................................................) 252.5 603.33 T -(4) 499 603.33 T -(1.7) 108 589.33 T -(Extension Library Functions) 144 589.33 T -(...............................................................................................) 260 589.33 T -(4) 499 589.33 T -(1.7.1) 144 577.33 T -(Error Indications) 180 577.33 T -(...................................................................................................) 250 577.33 T -(4) 499 577.33 T -2 12 Q -(2) 72 558 T -(Initialization and General Programming Information) 108 558 T -(..............................................) 360 558 T -(6) 498 558 T -2 10 Q -(2.1) 108 543.33 T -(Extension Header Files) 144 543.33 T -(........................................................................................................) 237.5 543.33 T -(6) 499 543.33 T -(2.2) 108 529.33 T -(Extension Name) 144 529.33 T -(..................................................................................................................) 212.5 529.33 T -(6) 499 529.33 T -(2.3) 108 515.33 T -(Determining Library Compatibility) 144 515.33 T -(....................................................................................) 287.5 515.33 T -(6) 499 515.33 T -(2.4) 108 501.33 T -(Initializing the K) 144 501.33 T -(e) 212.08 501.33 T -(yboard Extension) 216.37 501.33 T -(....................................................................................) 287.5 501.33 T -(7) 499 501.33 T -(2.5) 108 487.33 T -(Disabling the K) 144 487.33 T -(e) 207.08 487.33 T -(yboard Extension) 211.37 487.33 T -(......................................................................................) 282.5 487.33 T -(8) 499 487.33 T -(2.6) 108 473.33 T -(Protocol Errors) 144 473.33 T -(....................................................................................................................) 207.5 473.33 T -(9) 499 473.33 T -(2.7) 108 459.33 T -(Display and De) 144 459.33 T -(vice Speci\336cations in Function Calls) 205.96 459.33 T -(.........................................................) 355 459.33 T -(9) 499 459.33 T -2 12 Q -(3) 72 440 T -(Data Structures) 108 440 T -(.......................................................................................................) 183 440 T -(11) 492 440 T -2 10 Q -(3.1) 108 425.33 T -(Allocating Xkb Data Structures) 144 425.33 T -(........................................................................................) 272.5 425.33 T -(11) 494 425.33 T -(3.2) 108 411.33 T -(Adding Data and Editing Data Structures) 144 411.33 T -(.........................................................................) 310 411.33 T -(11) 494 411.33 T -(3.3) 108 397.33 T -(Making Changes to the Serv) 144 397.33 T -(er\325) 257.73 397.33 T -(s K) 268.28 397.33 T -(e) 281.64 397.33 T -(yboard Description) 285.93 397.33 T -(...................................................) 365 397.33 T -(12) 494 397.33 T -(3.4) 108 383.33 T -(T) 144 383.33 T -(racking K) 149.76 383.33 T -(e) 189.22 383.33 T -(yboard Changes in the Serv) 193.51 383.33 T -(er) 303.9 383.33 T -(........................................................................) 312.5 383.33 T -(12) 494 383.33 T -(3.5) 108 369.33 T -(Freeing Data Structures) 144 369.33 T -(.....................................................................................................) 240 369.33 T -(13) 494 369.33 T -2 12 Q -(4) 72 350 T -(Xkb Ev) 108 350 T -(ents) 144.82 350 T -(.............................................................................................................) 165 350 T -(14) 492 350 T -2 10 Q -(4.1) 108 335.33 T -(Xkb Ev) 144 335.33 T -(ent T) 174.68 335.33 T -(ypes) 194.71 335.33 T -(...............................................................................................................) 215 335.33 T -(14) 494 335.33 T -(4.2) 108 321.33 T -(Xkb Ev) 144 321.33 T -(ent Data Structures) 174.68 321.33 T -(................................................................................................) 252.5 321.33 T -(15) 494 321.33 T -(4.3) 108 307.33 T -(Selecting Xkb Ev) 144 307.33 T -(ents) 214.4 307.33 T -(........................................................................................................) 232.5 307.33 T -(15) 494 307.33 T -(4.3.1) 144 295.33 T -(Ev) 180 295.33 T -(ent Masks) 190.96 295.33 T -(........................................................................................................) 232.5 295.33 T -(17) 494 295.33 T -(4.4) 108 281.33 T -(Uni\336ed Xkb Ev) 144 281.33 T -(ent T) 207.18 281.33 T -(ype) 227.21 281.33 T -(....................................................................................................) 242.5 281.33 T -(18) 494 281.33 T -2 12 Q -(5) 72 262 T -(K) 108 262 T -(e) 116.36 262 T -(yboard State) 121.51 262 T -(.......................................................................................................) 183 262 T -(19) 492 262 T -2 10 Q -(5.1) 108 247.33 T -(K) 144 247.33 T -(e) 150.97 247.33 T -(yboard State Description) 155.26 247.33 T -(...............................................................................................) 255 247.33 T -(19) 494 247.33 T -(5.2) 108 233.33 T -(Changing the K) 144 233.33 T -(e) 207.08 233.33 T -(yboard State) 211.37 233.33 T -(............................................................................................) 262.5 233.33 T -(22) 494 233.33 T -(5.2.1) 144 221.33 T -(Changing Modi\336ers) 180 221.33 T -(............................................................................................) 262.5 221.33 T -(22) 494 221.33 T -(5.2.2) 144 209.33 T -(Changing Groups) 180 209.33 T -(................................................................................................) 252.5 209.33 T -(23) 494 209.33 T -(5.3) 108 195.33 T -(Determining K) 144 195.33 T -(e) 204.02 195.33 T -(yboard State) 208.31 195.33 T -(.............................................................................................) 260 195.33 T -(23) 494 195.33 T -(5.4) 108 181.33 T -(T) 144 181.33 T -(racking K) 149.76 181.33 T -(e) 189.22 181.33 T -(yboard State) 193.51 181.33 T -(...................................................................................................) 245 181.33 T -(24) 494 181.33 T -2 12 Q -(6) 72 162 T -(Complete K) 108 162 T -(e) 166.03 162 T -(yboard Description) 171.18 162 T -(............................................................................) 264 162 T -(27) 492 162 T -2 10 Q -(6.1) 108 147.33 T -(The XkbDescRec Structure) 144 147.33 T -(...............................................................................................) 255 147.33 T -(27) 494 147.33 T -(6.2) 108 133.33 T -(Obtaining a K) 144 133.33 T -(e) 200.41 133.33 T -(yboard Description from the Serv) 204.7 133.33 T -(er) 338.97 133.33 T -(..........................................................) 347.5 133.33 T -(28) 494 133.33 T -(6.3) 108 119.33 T -(T) 144 119.33 T -(racking Changes to the K) 149.76 119.33 T -(e) 251.16 119.33 T -(yboard Description in the Serv) 255.45 119.33 T -(er) 378.06 119.33 T -(..........................................) 387.5 119.33 T -(28) 494 119.33 T -(6.4) 108 105.33 T -(Allocating and Freeing a K) 144 105.33 T -(e) 252.62 105.33 T -(yboard Description) 256.91 105.33 T -(...............................................................) 335 105.33 T -(28) 494 105.33 T -2 12 Q -(7) 72 86 T -(V) 108 86 T -(irtual Modi\336ers) 115.94 86 T -(....................................................................................................) 192 86 T -(30) 492 86 T -2 10 Q -(7.1) 108 71.33 T -(V) 144 71.33 T -(irtual Modi\336er Names and Masks) 150.62 71.33 T -(..................................................................................) 287.5 71.33 T -(30) 494 71.33 T -0 0 0 1 0 0 0 K -FMENDPAGE -%%EndPage: "1" 5 -%%Page: "2" 6 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(T) 509.04 40.62 T -(OC-2) 515.56 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -2 10 Q -(7.2) 108 713.33 T -(Modi\336er De\336nitions) 144 713.33 T -(..........................................................................................................) 227.5 713.33 T -(30) 494 713.33 T -(7.3) 108 699.33 T -(Binding V) 144 699.33 T -(irtual Modi\336ers to Real Modi\336ers) 185.35 699.33 T -(....................................................................) 322.5 699.33 T -(31) 494 699.33 T -(7.4) 108 685.33 T -(V) 144 685.33 T -(irtual Modi\336er K) 150.62 685.33 T -(e) 218.7 685.33 T -(y Mapping) 222.99 685.33 T -(..........................................................................................) 267.5 685.33 T -(31) 494 685.33 T -(7.4.1) 144 673.33 T -(Inacti) 180 673.33 T -(v) 202.52 673.33 T -(e Modi\336er Sets) 207.37 673.33 T -(.........................................................................................) 270 673.33 T -(32) 494 673.33 T -(7.5) 108 659.33 T -(Con) 144 659.33 T -(v) 160.27 659.33 T -(entions) 165.12 659.33 T -(.......................................................................................................................) 195 659.33 T -(32) 494 659.33 T -(7.6) 108 645.33 T -(Example) 144 645.33 T -(.............................................................................................................................) 180 645.33 T -(32) 494 645.33 T -2 12 Q -(8) 72 626 T -(Indicators) 108 626 T -(................................................................................................................) 156 626 T -(34) 492 626 T -2 10 Q -(8.1) 108 611.33 T -(Indicator Names) 144 611.33 T -(................................................................................................................) 212.5 611.33 T -(34) 494 611.33 T -(8.2) 108 597.33 T -(Indicator Data Structures) 144 597.33 T -(...................................................................................................) 245 597.33 T -(34) 494 597.33 T -(8.2.1) 144 585.33 T -(XkbIndicatorRec) 180 585.33 T -(.................................................................................................) 250 585.33 T -(34) 494 585.33 T -(8.2.2) 144 573.33 T -(XkbIndicatorMapRec) 180 573.33 T -(..........................................................................................) 267.5 573.33 T -(35) 494 573.33 T -(8.3) 108 559.33 T -(Getting Information About Indicators) 144 559.33 T -(...............................................................................) 295 559.33 T -(39) 494 559.33 T -(8.3.1) 144 547.33 T -(Getting Indicator State) 180 547.33 T -(........................................................................................) 272.5 547.33 T -(40) 494 547.33 T -(8.3.2) 144 535.33 T -(Getting Indicator Information by Inde) 180 535.33 T -(x) 331.49 535.33 T -(..............................................................) 337.5 535.33 T -(40) 494 535.33 T -(8.3.3) 144 523.33 T -(Getting Indicator Information by Name) 180 523.33 T -(.............................................................) 340 523.33 T -(40) 494 523.33 T -(8.4) 108 509.33 T -(Changing Indicator Maps and State) 144 509.33 T -(..................................................................................) 287.5 509.33 T -(41) 494 509.33 T -(8.4.1) 144 497.33 T -(Ef) 180 497.33 T -(fects of Explicit Changes on Indicators) 189.19 497.33 T -(...........................................................) 345 497.33 T -(41) 494 497.33 T -(8.4.2) 144 485.33 T -(Changing Indicator Maps by Inde) 180 485.33 T -(x) 314.83 485.33 T -(.....................................................................) 320 485.33 T -(42) 494 485.33 T -(8.4.3) 144 473.33 T -(Changing Indicator Maps by Name) 180 473.33 T -(....................................................................) 322.5 473.33 T -(43) 494 473.33 T -(8.4.4) 144 461.33 T -(The XkbIndicatorChangesRec Structure) 180 461.33 T -(............................................................) 342.5 461.33 T -(43) 494 461.33 T -(8.5) 108 447.33 T -(T) 144 447.33 T -(racking Changes to Indicator State or Map) 149.76 447.33 T -(.....................................................................) 320 447.33 T -(44) 494 447.33 T -(8.6) 108 433.33 T -(Allocating and Freeing Indicator Maps) 144 433.33 T -(.............................................................................) 300 433.33 T -(45) 494 433.33 T -2 12 Q -(9) 72 414 T -(Bells) 108 414 T -(.......................................................................................................................) 135 414 T -(47) 492 414 T -2 10 Q -(9.1) 108 399.33 T -(Bell Names) 144 399.33 T -(........................................................................................................................) 192.5 399.33 T -(47) 494 399.33 T -(9.2) 108 385.33 T -(Audible Bells) 144 385.33 T -(.....................................................................................................................) 200 385.33 T -(48) 494 385.33 T -(9.3) 108 371.33 T -(Bell Functions) 144 371.33 T -(...................................................................................................................) 205 371.33 T -(48) 494 371.33 T -(9.3.1) 144 359.33 T -(Generating Named Bells) 180 359.33 T -(.....................................................................................) 280 359.33 T -(49) 494 359.33 T -(9.3.2) 144 347.33 T -(Generating Named Bell Ev) 180 347.33 T -(ents) 288.44 347.33 T -(...........................................................................) 305 347.33 T -(50) 494 347.33 T -(9.3.3) 144 335.33 T -(F) 180 335.33 T -(orcing a Serv) 185.41 335.33 T -(er) 238.58 335.33 T -(-Generated Bell) 246.15 335.33 T -(.........................................................................) 310 335.33 T -(51) 494 335.33 T -(9.4) 108 321.33 T -(Detecting Bells) 144 321.33 T -(..................................................................................................................) 207.5 321.33 T -(51) 494 321.33 T -2 12 Q -(10) 72 302 T -(K) 108 302 T -(e) 116.36 302 T -(yboard Controls) 121.51 302 T -(.................................................................................................) 201 302 T -(53) 492 302 T -2 10 Q -(10.1) 108 287.33 T -(Controls that Enable and Disable Other Controls) 144 287.33 T -(.............................................................) 340 287.33 T -(54) 494 287.33 T -(10.1.1) 144 275.33 T -(The EnabledControls Control) 180 275.33 T -(.............................................................................) 300 275.33 T -(54) 494 275.33 T -(10.1.2) 144 263.33 T -(The AutoReset Control) 180 263.33 T -(.......................................................................................) 275 263.33 T -(55) 494 263.33 T -(10.2) 108 249.33 T -(Control for Bell Beha) 144 249.33 T -(vior) 230.74 249.33 T -(..................................................................................................) 247.5 249.33 T -(56) 494 249.33 T -(10.2.1) 144 237.33 T -(The AudibleBell Control) 180 237.33 T -(.....................................................................................) 280 237.33 T -(56) 494 237.33 T -(10.3) 108 223.33 T -(Controls for Repeat K) 144 223.33 T -(e) 232.35 223.33 T -(y Beha) 236.64 223.33 T -(vior) 264.49 223.33 T -(....................................................................................) 282.5 223.33 T -(56) 494 223.33 T -(10.3.1) 144 211.33 T -(The PerK) 180 211.33 T -(e) 218.35 211.33 T -(yRepeat Control) 222.64 211.33 T -(.................................................................................) 290 211.33 T -(56) 494 211.33 T -(10.3.2) 144 199.33 T -(The RepeatK) 180 199.33 T -(e) 232.79 199.33 T -(ys Control) 237.08 199.33 T -(.....................................................................................) 280 199.33 T -(56) 494 199.33 T -(10.3.3) 144 187.33 T -(The DetectableAutorepeat Control) 180 187.33 T -(.....................................................................) 320 187.33 T -(57) 494 187.33 T -(10.4) 108 173.33 T -(Controls for K) 144 173.33 T -(e) 202.08 173.33 T -(yboard Ov) 206.37 173.33 T -(erlays \050Ov) 248.71 173.33 T -(erlay1 and Ov) 290.49 173.33 T -(erlay2 Controls\051) 346.99 173.33 T -(................................) 412.5 173.33 T -(58) 494 173.33 T -(10.5) 108 159.33 T -(Controls for Using the Mouse from the K) 144 159.33 T -(e) 309.57 159.33 T -(yboard) 313.86 159.33 T -(............................................................) 342.5 159.33 T -(59) 494 159.33 T -(10.5.1) 144 147.33 T -(The MouseK) 180 147.33 T -(e) 232.24 147.33 T -(ys Control) 236.53 147.33 T -(.....................................................................................) 280 147.33 T -(59) 494 147.33 T -(10.5.2) 144 135.33 T -(The MouseK) 180 135.33 T -(e) 232.24 135.33 T -(ysAccel Control) 236.53 135.33 T -(............................................................................) 302.5 135.33 T -(59) 494 135.33 T -(10.6) 108 121.33 T -(Controls for Better K) 144 121.33 T -(e) 229.02 121.33 T -(yboard Access by Ph) 233.31 121.33 T -(ysically Impaired Persons) 317.41 121.33 T -(............................) 422.5 121.33 T -(61) 494 121.33 T -(10.6.1) 144 109.33 T -(The AccessXK) 180 109.33 T -(e) 240.56 109.33 T -(ys Control) 244.85 109.33 T -(..................................................................................) 287.5 109.33 T -(62) 494 109.33 T -(10.6.2) 144 97.33 T -(The AccessXT) 180 97.33 T -(imeout Control) 239.35 97.33 T -(............................................................................) 302.5 97.33 T -(62) 494 97.33 T -(10.6.3) 144 85.33 T -(The AccessXFeedback Control) 180 85.33 T -(...........................................................................) 305 85.33 T -(63) 494 85.33 T -(10.6.4) 144 73.33 T -(AccessXNotify Ev) 180 73.33 T -(ents) 255.11 73.33 T -(........................................................................................) 272.5 73.33 T -(64) 494 73.33 T -0 0 0 1 0 0 0 K -FMENDPAGE -%%EndPage: "2" 6 -%%Page: "3" 7 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(T) 509.04 40.62 T -(OC-3) 515.56 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -2 10 Q -(10.6.5) 144 713.33 T -(Stick) 180 713.33 T -(yK) 200.41 713.33 T -(e) 212.38 713.33 T -(ys, RepeatK) 216.67 713.33 T -(e) 265.3 713.33 T -(ys, and MouseK) 269.59 713.33 T -(e) 334.61 713.33 T -(ys Ev) 338.9 713.33 T -(ents) 361.25 713.33 T -(..............................................) 377.5 713.33 T -(65) 494 713.33 T -(10.6.6) 144 701.33 T -(The Slo) 180 701.33 T -(wK) 211.14 701.33 T -(e) 225.33 701.33 T -(ys Control) 229.62 701.33 T -(........................................................................................) 272.5 701.33 T -(65) 494 701.33 T -(10.6.7) 144 689.33 T -(The BounceK) 180 689.33 T -(e) 235.57 689.33 T -(ys Control) 239.86 689.33 T -(....................................................................................) 282.5 689.33 T -(66) 494 689.33 T -(10.6.8) 144 677.33 T -(The Stick) 180 677.33 T -(yK) 218.46 677.33 T -(e) 230.43 677.33 T -(ys Control) 234.72 677.33 T -(......................................................................................) 277.5 677.33 T -(67) 494 677.33 T -(10.7) 108 663.33 T -(Controls for General K) 144 663.33 T -(e) 236.23 663.33 T -(yboard Mapping) 240.52 663.33 T -(..........................................................................) 307.5 663.33 T -(68) 494 663.33 T -(10.7.1) 144 651.33 T -(The GroupsWrap Control) 180 651.33 T -(...................................................................................) 285 651.33 T -(69) 494 651.33 T -(10.7.2) 144 639.33 T -(The IgnoreLockMods Control) 180 639.33 T -(............................................................................) 302.5 639.33 T -(69) 494 639.33 T -(10.7.3) 144 627.33 T -(The IgnoreGroupLock Control) 180 627.33 T -(...........................................................................) 305 627.33 T -(70) 494 627.33 T -(10.7.4) 144 615.33 T -(The InternalMods Control) 180 615.33 T -(...................................................................................) 285 615.33 T -(70) 494 615.33 T -(10.8) 108 601.33 T -(The XkbControlsRec Structure) 144 601.33 T -(.........................................................................................) 270 601.33 T -(71) 494 601.33 T -(10.9) 108 587.33 T -(Querying Controls) 144 587.33 T -(.............................................................................................................) 220 587.33 T -(77) 494 587.33 T -(10.10) 108 573.33 T -(Changing Controls) 144 573.33 T -(.............................................................................................................) 220 573.33 T -(77) 494 573.33 T -(10.10.1) 144 561.33 T -(The XkbControlsChangesRec Structure) 180 561.33 T -(.............................................................) 340 561.33 T -(78) 494 561.33 T -(10.11) 108 547.33 T -(T) 144 547.33 T -(racking Changes to K) 149.76 547.33 T -(e) 236.44 547.33 T -(yboard Controls) 240.73 547.33 T -(..........................................................................) 307.5 547.33 T -(79) 494 547.33 T -(10.12) 108 533.33 T -(Allocating and Freeing an XkbControlsRec) 144 533.33 T -(.....................................................................) 320 533.33 T -(80) 494 533.33 T -(10.13) 108 519.33 T -(The Miscellaneous Per) 144 519.33 T -(-client Controls) 235.45 519.33 T -(.............................................................................) 300 519.33 T -(81) 494 519.33 T -2 12 Q -(11) 72 500 T -(X Library Controls) 108 500 T -(.................................................................................................) 201 500 T -(82) 492 500 T -2 10 Q -(11.1) 108 485.33 T -(Controls Af) 144 485.33 T -(fecting K) 191.25 485.33 T -(e) 228.49 485.33 T -(ycode-to-String T) 232.78 485.33 T -(ranslation) 303.81 485.33 T -(...........................................................) 345 485.33 T -(82) 494 485.33 T -(11.1.1) 144 473.33 T -(F) 180 473.33 T -(orceLatin1Lookup) 185.41 473.33 T -(.............................................................................................) 260 473.33 T -(82) 494 473.33 T -(11.1.2) 144 461.33 T -(ConsumeLookupMods) 180 461.33 T -(........................................................................................) 272.5 461.33 T -(82) 494 461.33 T -(11.1.3) 144 449.33 T -(Al) 180 449.33 T -(w) 189.9 449.33 T -(aysConsumeShiftAndLock) 197.02 449.33 T -(..........................................................................) 307.5 449.33 T -(83) 494 449.33 T -(11.2) 108 435.33 T -(Controls Af) 144 435.33 T -(fecting Compose Processing) 191.25 435.33 T -(..........................................................................) 307.5 435.33 T -(83) 494 435.33 T -(11.2.1) 144 423.33 T -(ConsumeK) 180 423.33 T -(e) 224.75 423.33 T -(ysOnComposeF) 229.04 423.33 T -(ail) 293.34 423.33 T -(...........................................................................) 305 423.33 T -(83) 494 423.33 T -(11.2.2) 144 411.33 T -(ComposeLED) 180 411.33 T -(......................................................................................................) 237.5 411.33 T -(84) 494 411.33 T -(11.2.3) 144 399.33 T -(BeepOnComposeF) 180 399.33 T -(ail) 255.96 399.33 T -(..........................................................................................) 267.5 399.33 T -(84) 494 399.33 T -(11.3) 108 385.33 T -(Controls Ef) 144 385.33 T -(fecting Ev) 190.14 385.33 T -(ent Deli) 231.37 385.33 T -(v) 263.06 385.33 T -(ery) 267.91 385.33 T -(....................................................................................) 282.5 385.33 T -(84) 494 385.33 T -(11.3.1) 144 373.33 T -(IgnoreNe) 180 373.33 T -(wK) 217.51 373.33 T -(e) 231.7 373.33 T -(yboards) 235.99 373.33 T -(.........................................................................................) 270 373.33 T -(84) 494 373.33 T -(11.4) 108 359.33 T -(Manipulating the Library Controls) 144 359.33 T -(....................................................................................) 282.5 359.33 T -(85) 494 359.33 T -(11.4.1) 144 347.33 T -(Determining Which Library Controls are Implemented) 180 347.33 T -(.....................................) 400 347.33 T -(85) 494 347.33 T -(11.4.2) 144 335.33 T -(Determining the State of the Library Controls) 180 335.33 T -(...................................................) 365 335.33 T -(85) 494 335.33 T -(11.4.3) 144 323.33 T -(Changing the State of the Library Controls) 180 323.33 T -(........................................................) 352.5 323.33 T -(85) 494 323.33 T -2 12 Q -(12) 72 304 T -(Interpreting K) 108 304 T -(e) 176.02 304 T -(y Ev) 181.16 304 T -(ents) 203.32 304 T -(.........................................................................................) 225 304 T -(87) 492 304 T -2 10 Q -(12.1) 108 289.33 T -(Ef) 144 289.33 T -(fects of Xkb on the Core X Library) 153.19 289.33 T -(...............................................................................) 295 289.33 T -(87) 494 289.33 T -(12.1.1) 144 277.33 T -(Ef) 180 277.33 T -(fects of Xkb on Ev) 189.19 277.33 T -(ent State) 264.58 277.33 T -(.............................................................................) 300 277.33 T -(87) 494 277.33 T -(12.1.2) 144 265.33 T -(Ef) 180 265.33 T -(fects of Xkb on MappingNotify Ev) 189.19 265.33 T -(ents) 329.3 265.33 T -(..........................................................) 347.5 265.33 T -(87) 494 265.33 T -(12.1.3) 144 253.33 T -(X Library Functions Af) 180 253.33 T -(fected by Xkb) 274.46 253.33 T -(................................................................) 332.5 253.33 T -(88) 494 253.33 T -(12.2) 108 239.33 T -(Xkb Ev) 144 239.33 T -(ent and K) 174.68 239.33 T -(e) 213.31 239.33 T -(ymap Functions) 217.6 239.33 T -(....................................................................................) 282.5 239.33 T -(89) 494 239.33 T -2 12 Q -(13) 72 220 T -(K) 108 220 T -(e) 116.36 220 T -(yboard Geometry) 121.51 220 T -(...............................................................................................) 207 220 T -(92) 492 220 T -2 10 Q -(13.1) 108 205.33 T -(Shapes and Outlines) 144 205.33 T -(..........................................................................................................) 227.5 205.33 T -(94) 494 205.33 T -(13.2) 108 191.33 T -(Sections) 144 191.33 T -(.............................................................................................................................) 180 191.33 T -(95) 494 191.33 T -(13.3) 108 177.33 T -(Ro) 144 177.33 T -(ws and K) 155.42 177.33 T -(e) 192.94 177.33 T -(ys) 197.23 177.33 T -(..................................................................................................................) 207.5 177.33 T -(95) 494 177.33 T -(13.4) 108 163.33 T -(Doodads) 144 163.33 T -(.............................................................................................................................) 180 163.33 T -(96) 494 163.33 T -(13.5) 108 149.33 T -(Ov) 144 149.33 T -(erlay Ro) 156.07 149.33 T -(ws and Ov) 189.98 149.33 T -(erlay K) 232.6 149.33 T -(e) 262.06 149.33 T -(ys) 266.35 149.33 T -(......................................................................................) 277.5 149.33 T -(96) 494 149.33 T -(13.6) 108 135.33 T -(Dra) 144 135.33 T -(wing a K) 158.84 135.33 T -(e) 195.25 135.33 T -(yboard Representation) 199.54 135.33 T -(.................................................................................) 290 135.33 T -(97) 494 135.33 T -(13.7) 108 121.33 T -(Geometry Data Structures) 144 121.33 T -(.................................................................................................) 250 121.33 T -(98) 494 121.33 T -(13.8) 108 107.33 T -(Getting K) 144 107.33 T -(e) 183.47 107.33 T -(yboard Geometry From the Serv) 187.76 107.33 T -(er) 317.59 107.33 T -(................................................................) 327.5 107.33 T -(104) 489 107.33 T -(13.9) 108 93.33 T -(Using K) 144 93.33 T -(e) 177.36 93.33 T -(yboard Geometry) 181.65 93.33 T -(..............................................................................................) 252.5 93.33 T -(105) 489 93.33 T -(13.10) 108 79.33 T -(Adding Elements to a K) 144 79.33 T -(e) 240.41 79.33 T -(yboard Geometry) 244.7 79.33 T -(.....................................................................) 315 79.33 T -(106) 489 79.33 T -0 0 0 1 0 0 0 K -FMENDPAGE -%%EndPage: "3" 7 -%%Page: "4" 8 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(T) 509.04 40.62 T -(OC-4) 515.56 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -2 10 Q -(13.11) 108 713.33 T -(Allocating and Freeing Geometry Components) 144 713.33 T -(..............................................................) 332.5 713.33 T -(110) 489 713.33 T -2 12 Q -(14) 72 694 T -(Xkb K) 108 694 T -(e) 140.03 694 T -(yboard Mapping) 145.18 694 T -(.......................................................................................) 225 694 T -(116) 486 694 T -2 10 Q -(14.1) 108 679.33 T -(Notation and T) 144 679.33 T -(erminology) 203.85 679.33 T -(...............................................................................................) 250 679.33 T -(116) 489 679.33 T -(14.1.1) 144 667.33 T -(Core Implementation) 180 667.33 T -(........................................................................................) 267.5 667.33 T -(117) 489 667.33 T -(14.1.2) 144 655.33 T -(Xkb Implementation) 180 655.33 T -(.........................................................................................) 265 655.33 T -(117) 489 655.33 T -(14.2) 108 641.33 T -(Getting Map Components from the Serv) 144 641.33 T -(er) 305.23 641.33 T -(.....................................................................) 315 641.33 T -(118) 489 641.33 T -(14.3) 108 627.33 T -(Changing Map Components in the Serv) 144 627.33 T -(er) 302.46 627.33 T -(......................................................................) 312.5 627.33 T -(120) 489 627.33 T -(14.3.1) 144 615.33 T -(The XkbMapChangesRec Structure) 180 615.33 T -(.................................................................) 325 615.33 T -(120) 489 615.33 T -(14.4) 108 601.33 T -(T) 144 601.33 T -(racking Changes to Map Components) 149.76 601.33 T -(..........................................................................) 302.5 601.33 T -(122) 489 601.33 T -(14.5) 108 587.33 T -(Allocating and Freeing Client and Serv) 144 587.33 T -(er Maps) 300.78 587.33 T -(.............................................................) 335 587.33 T -(123) 489 587.33 T -(14.5.1) 144 575.33 T -(Allocating an Empty Client Map) 180 575.33 T -(......................................................................) 312.5 575.33 T -(123) 489 575.33 T -(14.5.2) 144 563.33 T -(Freeing a Client Map) 180 563.33 T -(........................................................................................) 267.5 563.33 T -(124) 489 563.33 T -(14.5.3) 144 551.33 T -(Allocating an Empty Serv) 180 551.33 T -(er Map) 284.01 551.33 T -(.....................................................................) 315 551.33 T -(124) 489 551.33 T -(14.5.4) 144 539.33 T -(Freeing a Serv) 180 539.33 T -(er Map) 238.17 539.33 T -(........................................................................................) 267.5 539.33 T -(125) 489 539.33 T -2 12 Q -(15) 72 520 T -(Xkb Client K) 108 520 T -(e) 172.37 520 T -(yboard Mapping) 177.52 520 T -(............................................................................) 258 520 T -(126) 486 520 T -2 10 Q -(15.1) 108 505.33 T -(The XkbClientMapRec Structure) 144 505.33 T -(....................................................................................) 277.5 505.33 T -(127) 489 505.33 T -(15.2) 108 491.33 T -(K) 144 491.33 T -(e) 150.97 491.33 T -(y T) 155.26 491.33 T -(ypes) 168.07 491.33 T -(........................................................................................................................) 187.5 491.33 T -(127) 489 491.33 T -(15.2.1) 144 479.33 T -(The Canonical K) 180 479.33 T -(e) 248.07 479.33 T -(y T) 252.36 479.33 T -(ypes) 265.17 479.33 T -(.................................................................................) 285 479.33 T -(129) 489 479.33 T -(15.2.2) 144 467.33 T -(Getting K) 180 467.33 T -(e) 219.47 467.33 T -(y T) 223.76 467.33 T -(ypes from the Serv) 236.57 467.33 T -(er) 312.24 467.33 T -(..................................................................) 322.5 467.33 T -(131) 489 467.33 T -(15.2.3) 144 455.33 T -(Changing the Number of Le) 180 455.33 T -(v) 292.51 455.33 T -(els in a K) 297.36 455.33 T -(e) 335.16 455.33 T -(y T) 339.45 455.33 T -(ype) 352.26 455.33 T -(................................................) 367.5 455.33 T -(132) 489 455.33 T -(15.2.4) 144 443.33 T -(Cop) 180 443.33 T -(ying K) 196.57 443.33 T -(e) 223.82 443.33 T -(y T) 228.11 443.33 T -(ypes) 240.92 443.33 T -(...........................................................................................) 260 443.33 T -(132) 489 443.33 T -(15.3) 108 429.33 T -(K) 144 429.33 T -(e) 150.97 429.33 T -(y Symbol Map) 155.26 429.33 T -(.............................................................................................................) 215 429.33 T -(133) 489 429.33 T -(15.3.1) 144 417.33 T -(Per) 180 417.33 T -(-K) 193.13 417.33 T -(e) 203.43 417.33 T -(y K) 207.72 417.33 T -(e) 222.19 417.33 T -(y T) 226.48 417.33 T -(ype Indices) 239.29 417.33 T -(................................................................................) 287.5 417.33 T -(133) 489 417.33 T -(15.3.2) 144 405.33 T -(Per) 180 405.33 T -(-K) 193.13 405.33 T -(e) 203.43 405.33 T -(y Group Information) 207.72 405.33 T -(..............................................................................) 292.5 405.33 T -(134) 489 405.33 T -(15.3.3) 144 393.33 T -(K) 180 393.33 T -(e) 186.97 393.33 T -(y W) 191.26 393.33 T -(idth) 207.8 393.33 T -(.........................................................................................................) 225 393.33 T -(135) 489 393.33 T -(15.3.4) 144 381.33 T -(Of) 180 381.33 T -(fset in to the Symbol Map) 190.3 381.33 T -(.............................................................................) 295 381.33 T -(135) 489 381.33 T -(15.3.5) 144 369.33 T -(Getting the Symbol Map for K) 180 369.33 T -(e) 302.8 369.33 T -(ys from the Serv) 307.09 369.33 T -(er) 373.32 369.33 T -(..........................................) 382.5 369.33 T -(136) 489 369.33 T -(15.3.6) 144 357.33 T -(Changing the Number of Groups and T) 180 357.33 T -(ypes Bound to a K) 336.4 357.33 T -(e) 410.59 357.33 T -(y) 414.88 357.33 T -(...........................) 420 357.33 T -(137) 489 357.33 T -(15.3.7) 144 345.33 T -(Changing the Number of Symbols Bound to a K) 180 345.33 T -(e) 373.08 345.33 T -(y) 377.37 345.33 T -(..........................................) 382.5 345.33 T -(138) 489 345.33 T -(15.4) 108 331.33 T -(The Per) 144 331.33 T -(-K) 175.18 331.33 T -(e) 185.48 331.33 T -(y Modi\336er Map) 189.77 331.33 T -(.............................................................................................) 255 331.33 T -(138) 489 331.33 T -(15.4.1) 144 319.33 T -(Getting the Per) 180 319.33 T -(-K) 240.35 319.33 T -(e) 250.65 319.33 T -(y Modi\336er Map from the Serv) 254.94 319.33 T -(er) 375.61 319.33 T -(.........................................) 385 319.33 T -(139) 489 319.33 T -2 12 Q -(16) 72 300 T -(Xkb Serv) 108 300 T -(er K) 153.48 300 T -(e) 174.17 300 T -(yboard Mapping) 179.32 300 T -(...........................................................................) 261 300 T -(140) 486 300 T -2 10 Q -(16.1) 108 285.33 T -(K) 144 285.33 T -(e) 150.97 285.33 T -(y Actions) 155.26 285.33 T -(.....................................................................................................................) 195 285.33 T -(141) 489 285.33 T -(16.1.1) 144 273.33 T -(The XkbAction Structure) 180 273.33 T -(..................................................................................) 282.5 273.33 T -(142) 489 273.33 T -(16.1.2) 144 261.33 T -(The XkbAn) 180 261.33 T -(yAction Structure) 227.34 261.33 T -(...........................................................................) 300 261.33 T -(143) 489 261.33 T -(16.1.3) 144 249.33 T -(Actions for Changing Modi\336ers\325 State) 180 249.33 T -(.............................................................) 335 249.33 T -(143) 489 249.33 T -(16.1.4) 144 237.33 T -(Actions for Changing Group State) 180 237.33 T -(....................................................................) 317.5 237.33 T -(145) 489 237.33 T -(16.1.5) 144 225.33 T -(Actions for Mo) 180 225.33 T -(ving the Pointer) 241.51 225.33 T -(........................................................................) 307.5 225.33 T -(147) 489 225.33 T -(16.1.6) 144 213.33 T -(Actions for Simulating Pointer Button Press and Release) 180 213.33 T -(................................) 407.5 213.33 T -(148) 489 213.33 T -(16.1.7) 144 201.33 T -(Actions for Changing the Pointer Button Simulated) 180 201.33 T -(........................................) 387.5 201.33 T -(149) 489 201.33 T -(16.1.8) 144 189.33 T -(Actions for Locking Modi\336ers and Group) 180 189.33 T -(........................................................) 347.5 189.33 T -(150) 489 189.33 T -(16.1.9) 144 177.33 T -(Actions for Changing the Acti) 180 177.33 T -(v) 300.85 177.33 T -(e Screen) 305.7 177.33 T -(...........................................................) 340 177.33 T -(153) 489 177.33 T -(16.1.10) 144 165.33 T -(Actions for Changing Boolean Controls State) 180 165.33 T -(..................................................) 362.5 165.33 T -(154) 489 165.33 T -(16.1.11) 144 153.33 T -(Actions for Generating Messages) 180 153.33 T -(.....................................................................) 315 153.33 T -(155) 489 153.33 T -(16.1.12) 144 141.33 T -(Actions for Generating a Dif) 180 141.33 T -(ferent K) 294.72 141.33 T -(e) 327.51 141.33 T -(ycode) 331.8 141.33 T -(....................................................) 357.5 141.33 T -(156) 489 141.33 T -(16.1.13) 144 129.33 T -(Actions for Generating De) 180 129.33 T -(viceButtonPress and De) 286.11 129.33 T -(viceButtonRelease) 381.96 129.33 T -(............) 457.5 129.33 T -(158) 489 129.33 T -(16.1.14) 144 117.33 T -(Actions for Simulating Ev) 180 117.33 T -(ents from De) 285.13 117.33 T -(vice V) 337.09 117.33 T -(aluators) 362.36 117.33 T -(.....................................) 395 117.33 T -(159) 489 117.33 T -(16.1.15) 144 105.33 T -(Obtaining K) 180 105.33 T -(e) 229.47 105.33 T -(y Actions for K) 233.76 105.33 T -(e) 296 105.33 T -(ys from the Serv) 300.29 105.33 T -(er) 366.52 105.33 T -(.............................................) 375 105.33 T -(160) 489 105.33 T -(16.1.16) 144 93.33 T -(Changing the Number of Actions Bound to a K) 180 93.33 T -(e) 369.18 93.33 T -(y) 373.47 93.33 T -(...........................................) 380 93.33 T -(160) 489 93.33 T -(16.2) 108 79.33 T -(K) 144 79.33 T -(e) 150.97 79.33 T -(y Beha) 155.26 79.33 T -(vior) 183.11 79.33 T -(...................................................................................................................) 200 79.33 T -(161) 489 79.33 T -(16.2.1) 144 67.33 T -(Radio Groups) 180 67.33 T -(....................................................................................................) 237.5 67.33 T -(161) 489 67.33 T -0 0 0 1 0 0 0 K -FMENDPAGE -%%EndPage: "4" 8 -%%Page: "5" 9 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(T) 509.04 40.62 T -(OC-5) 515.56 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -2 10 Q -(16.2.2) 144 713.33 T -(The XkbBeha) 180 713.33 T -(vior Structure) 235.62 713.33 T -(..............................................................................) 292.5 713.33 T -(161) 489 713.33 T -(16.2.3) 144 701.33 T -(Obtaining K) 180 701.33 T -(e) 229.47 701.33 T -(y Beha) 233.76 701.33 T -(viors for K) 261.61 701.33 T -(e) 305.24 701.33 T -(ys from the Serv) 309.53 701.33 T -(er) 375.76 701.33 T -(.........................................) 385 701.33 T -(162) 489 701.33 T -(16.3) 108 687.33 T -(Explicit Components\321A) 144 687.33 T -(v) 245.21 687.33 T -(oiding Automatic Remapping by the Serv) 250.01 687.33 T -(er) 416.8 687.33 T -(.........................) 425 687.33 T -(163) 489 687.33 T -(16.3.1) 144 675.33 T -(Obtaining Explicit Components for K) 180 675.33 T -(e) 330.86 675.33 T -(ys from the Serv) 335.15 675.33 T -(er) 401.38 675.33 T -(...............................) 410 675.33 T -(163) 489 675.33 T -(16.4) 108 661.33 T -(V) 144 661.33 T -(irtual Modi\336er Mapping) 150.62 661.33 T -(...............................................................................................) 250 661.33 T -(164) 489 661.33 T -(16.4.1) 144 649.33 T -(Obtaining V) 180 649.33 T -(irtual Modi\336er Bindings from the Serv) 229.12 649.33 T -(er) 383.69 649.33 T -(......................................) 392.5 649.33 T -(165) 489 649.33 T -(16.4.2) 144 637.33 T -(Obtaining Per) 180 637.33 T -(-K) 235.63 637.33 T -(e) 245.93 637.33 T -(y V) 250.22 637.33 T -(irtual Modi\336er Mappings from the Serv) 264.34 637.33 T -(er) 422.79 637.33 T -(......................) 432.5 637.33 T -(166) 489 637.33 T -2 12 Q -(17) 72 618 T -(The Xkb Compatibility Map) 108 618 T -(................................................................................) 246 618 T -(167) 486 618 T -2 10 Q -(17.1) 108 603.33 T -(The XkbCompatMap Structure) 144 603.33 T -(.......................................................................................) 270 603.33 T -(169) 489 603.33 T -(17.1.1) 144 591.33 T -(Xkb State to Core Protocol State T) 180 591.33 T -(ransformation) 319.09 591.33 T -(............................................) 377.5 591.33 T -(169) 489 591.33 T -(17.1.2) 144 579.33 T -(Core K) 180 579.33 T -(e) 208.91 579.33 T -(yboard Mapping to Xkb K) 213.2 579.33 T -(e) 319.05 579.33 T -(yboard Mapping T) 323.34 579.33 T -(ransformation) 397.98 579.33 T -(.............) 455 579.33 T -(170) 489 579.33 T -(17.1.3) 144 567.33 T -(Xkb K) 180 567.33 T -(e) 206.69 567.33 T -(yboard Mapping to Core K) 210.98 567.33 T -(e) 319.05 567.33 T -(yboard Mapping T) 323.34 567.33 T -(ransformations) 397.98 567.33 T -(...........) 460 567.33 T -(173) 489 567.33 T -(17.2) 108 553.33 T -(Getting Compatibility Map Components From the Serv) 144 553.33 T -(er) 365.53 553.33 T -(.............................................) 375 553.33 T -(174) 489 553.33 T -(17.3) 108 539.33 T -(Using the Compatibility Map) 144 539.33 T -(..........................................................................................) 262.5 539.33 T -(175) 489 539.33 T -(17.4) 108 525.33 T -(Changing the Serv) 144 525.33 T -(er\325) 218.29 525.33 T -(s Compatibility Map) 228.84 525.33 T -(......................................................................) 312.5 525.33 T -(177) 489 525.33 T -(17.5) 108 511.33 T -(T) 144 511.33 T -(racking Changes to the Compatibility Map) 149.76 511.33 T -(..................................................................) 322.5 511.33 T -(178) 489 511.33 T -(17.6) 108 497.33 T -(Allocating and Freeing the Compatibility Map) 144 497.33 T -(...............................................................) 330 497.33 T -(179) 489 497.33 T -2 12 Q -(18) 72 478 T -(Symbolic Names) 108 478 T -(..................................................................................................) 192 478 T -(180) 486 478 T -2 10 Q -(18.1) 108 463.33 T -(The XkbNamesRec Structure) 144 463.33 T -(..........................................................................................) 262.5 463.33 T -(180) 489 463.33 T -(18.2) 108 449.33 T -(Symbolic Names Masks) 144 449.33 T -(..................................................................................................) 242.5 449.33 T -(182) 489 449.33 T -(18.3) 108 435.33 T -(Getting Symbolic Names From the Serv) 144 435.33 T -(er) 304.68 435.33 T -(......................................................................) 312.5 435.33 T -(183) 489 435.33 T -(18.4) 108 421.33 T -(Changing Symbolic Names on the Serv) 144 421.33 T -(er) 301.9 421.33 T -(.......................................................................) 310 421.33 T -(183) 489 421.33 T -(18.5) 108 407.33 T -(T) 144 407.33 T -(racking Name Changes) 149.76 407.33 T -(.................................................................................................) 245 407.33 T -(185) 489 407.33 T -(18.6) 108 393.33 T -(Allocating and Freeing Symbolic Names) 144 393.33 T -(........................................................................) 307.5 393.33 T -(186) 489 393.33 T -2 12 Q -(19) 72 374 T -(Replacing a K) 108 374 T -(e) 176.35 374 T -(yboard \322On the Fly\323) 181.5 374 T -(....................................................................) 282 374 T -(187) 486 374 T -(20) 72 354 T -(Serv) 108 354 T -(er Database of K) 129.82 354 T -(e) 210.48 354 T -(yboard Components) 215.63 354 T -(.........................................................) 315 354 T -(190) 486 354 T -2 10 Q -(20.1) 108 339.33 T -(Component Names) 144 339.33 T -(..........................................................................................................) 222.5 339.33 T -(191) 489 339.33 T -(20.2) 108 325.33 T -(Listing the Kno) 144 325.33 T -(wn K) 206.53 325.33 T -(e) 228.22 325.33 T -(yboard Components) 232.51 325.33 T -(.....................................................................) 315 325.33 T -(191) 489 325.33 T -(20.3) 108 311.33 T -(Component Hints) 144 311.33 T -(.............................................................................................................) 215 311.33 T -(192) 489 311.33 T -(20.4) 108 297.33 T -(Building a K) 144 297.33 T -(e) 195.42 297.33 T -(yboard Description Using the Serv) 199.71 297.33 T -(er Database) 338.43 297.33 T -(........................................) 387.5 297.33 T -(193) 489 297.33 T -2 12 Q -(21) 72 278 T -(Attaching Xkb Actions to X Input Extension De) 108 278 T -(vices) 339.35 278 T -(........................................) 366 278 T -(198) 486 278 T -2 10 Q -(21.1) 108 263.33 T -(XkbDe) 144 263.33 T -(viceInfoRec) 172.63 263.33 T -(..........................................................................................................) 222.5 263.33 T -(199) 489 263.33 T -(21.2) 108 249.33 T -(Querying Xkb Features for Non-K) 144 249.33 T -(e) 282.05 249.33 T -(yClass Input Extension De) 286.34 249.33 T -(vices) 393.03 249.33 T -(.............................) 415 249.33 T -(200) 489 249.33 T -(21.3) 108 235.33 T -(Allocating, Initializing, and Freeing the XkbDe) 144 235.33 T -(viceInfoRec Structure) 333.45 235.33 T -(..........................) 422.5 235.33 T -(203) 489 235.33 T -(21.4) 108 221.33 T -(Setting Xkb Features for Non-K) 144 221.33 T -(e) 272.62 221.33 T -(yClass Input Extension De) 276.91 221.33 T -(vices) 383.6 221.33 T -(.................................) 405 221.33 T -(204) 489 221.33 T -(21.5) 108 207.33 T -(XkbExtensionDe) 144 207.33 T -(viceNotify Ev) 212.63 207.33 T -(ent) 268.86 207.33 T -(..................................................................................) 282.5 207.33 T -(206) 489 207.33 T -(21.6) 108 193.33 T -(T) 144 193.33 T -(racking Changes to Extension De) 149.76 193.33 T -(vices) 283.38 193.33 T -(.........................................................................) 305 193.33 T -(207) 489 193.33 T -2 12 Q -(22) 72 174 T -(Deb) 108 174 T -(ugging Aids) 127.75 174 T -(...................................................................................................) 189 174 T -(210) 486 174 T -(T) 72 154 T -(able 22.1) 78.37 154 T -(Glossary) 122.36 154 T -(..........................................................................................................) 168 154 T -(211) 486 154 T -0 0 0 1 0 0 0 K -FMENDPAGE -%%EndPage: "5" 9 -%%Page: "12" 10 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(LOF-12) 504.56 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -2 12 Q -(Figure 1.1) 72 712 T -(Ov) 144 712 T -(erall Xkb Structure) 158.48 712 T -(..................................................................................) 252 712 T -(2) 498 712 T -(Figure 5.1) 72 696 T -(Xkb State) 144 696 T -(....................................................................................................) 192 696 T -(19) 492 696 T -(Figure 10.1) 72 680 T -(MouseK) 144 680 T -(e) 185.03 680 T -(ys Acceleration) 190.18 680 T -(...........................................................................) 267 680 T -(61) 492 680 T -(Figure 131) 72 664 T -(Rotated K) 144 664 T -(e) 192.7 664 T -(yboard Sections) 197.84 664 T -(........................................................................) 276 664 T -(92) 492 664 T -(Figure 13.2) 72 648 T -(K) 144 648 T -(e) 152.36 648 T -(yboard with F) 157.51 648 T -(our Sections) 224.66 648 T -(.....................................................................) 285 648 T -(94) 492 648 T -(Figure 13.3) 72 632 T -(Ro) 144 632 T -(ws in a Section) 157.7 632 T -(.......................................................................................) 231 632 T -(95) 492 632 T -(Figure 13.4) 72 616 T -(Xkb Geometry Data Structures) 144 616 T -(..................................................................) 294 616 T -(98) 492 616 T -(Figure 13.5) 72 600 T -(Xkb Geometry Data Structures \050Doodads\051) 144 600 T -(................................................) 348 600 T -(99) 492 600 T -(Figure 13.6) 72 584 T -(Xkb Geometry Data Structures \050Ov) 144 584 T -(erlays\051) 314.45 584 T -(..............................................) 348 584 T -(100) 486 584 T -(Figure 13.7) 72 568 T -(K) 144 568 T -(e) 152.36 568 T -(y Surf) 157.51 568 T -(ace, Shape Outlines, and Bounding Box) 187.06 568 T -(...................................) 381 568 T -(105) 486 568 T -(Figure 14.1) 72 552 T -(Shift Le) 144 552 T -(v) 182.7 552 T -(els and Groups) 188.52 552 T -(...........................................................................) 261 552 T -(117) 486 552 T -(Figure 15.1) 72 536 T -(Xkb Client Map) 144 536 T -(........................................................................................) 222 536 T -(126) 486 536 T -(Figure 16.1) 72 520 T -(Serv) 144 520 T -(er Map Relationships) 165.82 520 T -(........................................................................) 270 520 T -(140) 486 520 T -(Figure 16.2) 72 504 T -(V) 144 504 T -(irtual Modi\336er Relationships) 151.94 504 T -(.................................................................) 291 504 T -(165) 486 504 T -(Figure 17.1) 72 488 T -(Serv) 144 488 T -(er Interaction with T) 165.82 488 T -(ypes of Clients) 263.83 488 T -(..................................................) 336 488 T -(167) 486 488 T -(Figure 17.2) 72 472 T -(Serv) 144 472 T -(er Deri) 165.82 472 T -(v) 199.16 472 T -(ation of State and K) 204.86 472 T -(e) 300.55 472 T -(yboard Mapping Components) 305.7 472 T -(............) 450 472 T -(168) 486 472 T -(Figure 17.3) 72 456 T -(Xkb Compatibility Data Structures) 144 456 T -(..........................................................) 312 456 T -(169) 486 456 T -(Figure 20.1) 72 440 T -(Building a Ne) 144 440 T -(w K) 211.03 440 T -(e) 231.06 440 T -(yboard Description from the Serv) 236.21 440 T -(er Database) 397.33 440 T -(..........) 456 440 T -(196) 486 440 T -0 0 0 1 0 0 0 K -FMENDPAGE -%%EndPage: "12" 10 -%%Page: "1" 11 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(LO) 510.9 40.62 T -(T) 525.13 40.62 T -(-1) 530.84 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -2 12 Q -(T) 72 712 T -(able 1.1) 78.37 712 T -(Function Error Returns Due to Extension Problems) 135 712 T -(.............................................) 381 712 T -(4) 516 712 T -(T) 72 696 T -(able 2.1) 78.37 696 T -(Xkb Protocol Errors) 135 696 T -(..............................................................................................) 234 696 T -(9) 516 696 T -(T) 72 680 T -(able 2.2) 78.37 680 T -(BadK) 135 680 T -(e) 162.7 680 T -(yboard Protocol Error resource_id V) 167.84 680 T -(alues) 342.47 680 T -(.................................................) 369 680 T -(9) 516 680 T -(T) 72 664 T -(able 4.1) 78.37 664 T -(Xkb Ev) 135 664 T -(ent T) 171.82 664 T -(ypes) 195.85 664 T -(.................................................................................................) 219 664 T -(14) 510 664 T -(T) 72 648 T -(able 4.2) 78.37 648 T -(XkbSelectEv) 135 648 T -(ents Mask Constants) 198.14 648 T -(......................................................................) 300 648 T -(17) 510 648 T -(T) 72 632 T -(able 5.1) 78.37 632 T -(Real Modi\336er Masks) 135 632 T -(...........................................................................................) 237 632 T -(22) 510 632 T -(T) 72 616 T -(able 5.2) 78.37 616 T -(Symbolic Group Names) 135 616 T -(......................................................................................) 252 616 T -(23) 510 616 T -(T) 72 600 T -(able 5.3) 78.37 600 T -(XkbStateNotify Ev) 135 600 T -(ent Detail Masks) 227.15 600 T -(...................................................................) 309 600 T -(24) 510 600 T -(T) 72 584 T -(able 6.1) 78.37 584 T -(XkbDescRec Component References) 135 584 T -(.................................................................) 315 584 T -(27) 510 584 T -(T) 72 568 T -(able 6.2) 78.37 568 T -(Mask Bits for XkbDescRec) 135 568 T -(................................................................................) 270 568 T -(28) 510 568 T -(T) 72 552 T -(able 8.1) 78.37 552 T -(XkbIndicatorMapRec \337ags Field) 135 552 T -(........................................................................) 294 552 T -(35) 510 552 T -(T) 72 536 T -(able 8.2) 78.37 536 T -(XkbIndicatorMapRec which_groups and groups, K) 135 536 T -(e) 380.99 536 T -(yboard Dri) 386.14 536 T -(v) 438.16 536 T -(es Indicator) 443.98 536 T -(...) 501 536 T -(37) 510 536 T -(T) 72 520 T -(able 8.3) 78.37 520 T -(XkbIndicatorMapRec which_groups and groups, Indicator Dri) 135 520 T -(v) 434.64 520 T -(es K) 440.46 520 T -(e) 461.82 520 T -(yboard) 466.97 520 T -(...) 501 520 T -(37) 510 520 T -(T) 72 504 T -(able 8.4) 78.37 504 T -(XkbIndicatorMapRec which_mods and mods, K) 135 504 T -(e) 367.67 504 T -(yboard Dri) 372.82 504 T -(v) 424.84 504 T -(es Indicator) 430.66 504 T -(.......) 489 504 T -(38) 510 504 T -(T) 72 488 T -(able 8.5) 78.37 488 T -(XkbIndicatorMapRec which_mods and mods, Indicator Dri) 135 488 T -(v) 421.32 488 T -(es K) 427.14 488 T -(e) 448.5 488 T -(yboard) 453.65 488 T -(.......) 489 488 T -(39) 510 488 T -(T) 72 472 T -(able 9.1) 78.37 472 T -(Prede\336ned Bells) 135 472 T -(..................................................................................................) 216 472 T -(48) 510 472 T -(T) 72 456 T -(able 9.2) 78.37 456 T -(Bell Sounding and Bell Ev) 135 456 T -(ent Generating) 263.5 456 T -(..........................................................) 336 456 T -(49) 510 456 T -(T) 72 440 T -(able 10.1) 78.37 440 T -(Xkb K) 135 440 T -(e) 167.03 440 T -(yboard Controls) 172.18 440 T -(......................................................................................) 252 440 T -(53) 510 440 T -(T) 72 424 T -(able 10.2) 78.37 424 T -(MouseK) 135 424 T -(e) 176.03 424 T -(ysAccel Fields) 181.18 424 T -(.....................................................................................) 255 424 T -(59) 510 424 T -(T) 72 408 T -(able 10.3) 78.37 408 T -(AccessXFeedback Masks) 135 408 T -(....................................................................................) 258 408 T -(63) 510 408 T -(T) 72 392 T -(able 10.4) 78.37 392 T -(AccessXNotify Ev) 135 392 T -(ents) 225.13 392 T -(........................................................................................) 246 392 T -(64) 510 392 T -(T) 72 376 T -(able 10.5) 78.37 376 T -(AccessXNotify Ev) 135 376 T -(ent Details) 225.13 376 T -(.............................................................................) 279 376 T -(65) 510 376 T -(T) 72 360 T -(able 10.6) 78.37 360 T -(Xkb Controls) 135 360 T -(.......................................................................................................) 201 360 T -(72) 510 360 T -(T) 72 344 T -(able 10.7) 78.37 344 T -(Controls Mask Bits) 135 344 T -(.............................................................................................) 231 344 T -(73) 510 344 T -(T) 72 328 T -(able 10.8) 78.37 328 T -(GroupsWrap options \050groups_wrap \336eld\051) 135 328 T -(..........................................................) 336 328 T -(74) 510 328 T -(T) 72 312 T -(able 10.9) 78.37 312 T -(Access X Enable/Disable Bits \050ax_options \336eld\051) 135 312 T -(...............................................) 369 312 T -(75) 510 312 T -(T) 72 296 T -(able 11.1) 78.37 296 T -(Library Control Masks) 135 296 T -(........................................................................................) 246 296 T -(85) 510 296 T -(T) 72 280 T -(able 13.1) 78.37 280 T -(Doodad T) 135 280 T -(ypes) 182.36 280 T -(.....................................................................................................) 207 280 T -(96) 510 280 T -(T) 72 264 T -(able 14.1) 78.37 264 T -(Xkb Mapping Component Masks and Con) 135 264 T -(v) 338.18 264 T -(enience Functions) 344 264 T -(........................) 432 264 T -(118) 504 264 T -(T) 72 248 T -(able 14.2) 78.37 248 T -(XkbMapChangesRec Masks) 135 248 T -(.............................................................................) 273 248 T -(121) 504 248 T -(T) 72 232 T -(able 14.3) 78.37 232 T -(XkbAllocClientMap Masks) 135 232 T -(..............................................................................) 270 232 T -(123) 504 232 T -(T) 72 216 T -(able 14.4) 78.37 216 T -(XkbAllocServ) 135 216 T -(erMap Masks) 204.14 216 T -(..............................................................................) 270 216 T -(124) 504 216 T -(T) 72 200 T -(able 15.1) 78.37 200 T -(Example K) 135 200 T -(e) 189.02 200 T -(y T) 194.17 200 T -(ype) 209.54 200 T -(............................................................................................) 228 200 T -(128) 504 200 T -(T) 72 184 T -(able 15.2) 78.37 184 T -(group_info Range Normalization) 135 184 T -(.....................................................................) 297 184 T -(134) 504 184 T -(T) 72 168 T -(able 15.3) 78.37 168 T -(Group Inde) 135 168 T -(x Constants) 189.8 168 T -(.....................................................................................) 249 168 T -(137) 504 168 T -(T) 72 152 T -(able 16.1) 78.37 152 T -(Action T) 135 152 T -(ypes) 177.04 152 T -(.....................................................................................................) 201 152 T -(143) 504 152 T -(T) 72 136 T -(able 16.2) 78.37 136 T -(Modi\336er Action T) 135 136 T -(ypes) 222.04 136 T -(......................................................................................) 246 136 T -(144) 504 136 T -(T) 72 120 T -(able 16.3) 78.37 120 T -(Modi\336er Action Flags) 135 120 T -(.......................................................................................) 243 120 T -(145) 504 120 T -(T) 72 104 T -(able 16.4) 78.37 104 T -(Group Action T) 135 104 T -(ypes) 210.7 104 T -(..........................................................................................) 234 104 T -(146) 504 104 T -(T) 72 88 T -(able 16.5) 78.37 88 T -(Group Action Flags) 135 88 T -(...........................................................................................) 231 88 T -(146) 504 88 T -(T) 72 72 T -(able 16.6) 78.37 72 T -(Pointer Action T) 135 72 T -(ypes) 214.7 72 T -(.........................................................................................) 237 72 T -(147) 504 72 T -0 0 0 1 0 0 0 K -FMENDPAGE -%%EndPage: "1" 11 -%%Page: "2" 12 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(LO) 510.9 40.62 T -(T) 525.13 40.62 T -(-2) 530.84 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -2 12 Q -(T) 72 712 T -(able 16.7) 78.37 712 T -(Pointer Button Action T) 135 712 T -(ypes) 250.38 712 T -(.............................................................................) 273 712 T -(149) 504 712 T -(T) 72 696 T -(able 16.8) 78.37 696 T -(Pointer Button Action Flags) 135 696 T -(.............................................................................) 273 696 T -(149) 504 696 T -(T) 72 680 T -(able 16.9) 78.37 680 T -(Pointer Def) 135 680 T -(ault Flags) 190.54 680 T -(........................................................................................) 240 680 T -(150) 504 680 T -(T) 72 664 T -(able 16.10) 78.37 664 T -(ISO Action Flags when XkbSA_ISOD\337tIsGroup is Set) 135 664 T -(..................................) 402 664 T -(151) 504 664 T -(T) 72 648 T -(able 16.11) 78.37 648 T -(ISO Action Flags when XkbSA_ISOD\337tIsGroup is Not Set) 135 648 T -(...........................) 423 648 T -(152) 504 648 T -(T) 72 632 T -(able 16.12) 78.37 632 T -(ISO Action Af) 135 632 T -(fect Field V) 205.36 632 T -(alues) 261.35 632 T -(........................................................................) 288 632 T -(152) 504 632 T -(T) 72 616 T -(able 16.13) 78.37 616 T -(Switch Screen Action Flags) 135 616 T -(..............................................................................) 270 616 T -(153) 504 616 T -(T) 72 600 T -(able 16.14) 78.37 600 T -(Controls Action T) 135 600 T -(ypes) 221.38 600 T -(......................................................................................) 246 600 T -(154) 504 600 T -(T) 72 584 T -(able 16.15) 78.37 584 T -(Control Action Flags) 135 584 T -(.........................................................................................) 237 584 T -(154) 504 584 T -(T) 72 568 T -(able 16.16) 78.37 568 T -(Message Action Flags) 135 568 T -(.......................................................................................) 243 568 T -(155) 504 568 T -(T) 72 552 T -(able 16.17) 78.37 552 T -(De) 135 552 T -(vice Button Action T) 148.69 552 T -(ypes) 249.4 552 T -(.............................................................................) 273 552 T -(158) 504 552 T -(T) 72 536 T -(able 16.18) 78.37 536 T -(De) 135 536 T -(vice Button Action Flags) 148.69 536 T -(..............................................................................) 270 536 T -(158) 504 536 T -(T) 72 520 T -(able 16.19) 78.37 520 T -(De) 135 520 T -(vice V) 148.69 520 T -(aluator v_what High Bits V) 179.02 520 T -(alues) 329.88 520 T -(.................................................) 357 520 T -(159) 504 520 T -(T) 72 504 T -(able 16.20) 78.37 504 T -(K) 135 504 T -(e) 143.36 504 T -(y Beha) 148.51 504 T -(viors) 181.93 504 T -(...................................................................................................) 207 504 T -(161) 504 504 T -(T) 72 488 T -(able 16.21) 78.37 488 T -(Explicit Component Masks) 135 488 T -(...............................................................................) 267 488 T -(163) 504 488 T -(T) 72 472 T -(able 17.1) 78.37 472 T -(Symbol Interpretation Match Criteria) 135 472 T -(...............................................................) 315 472 T -(172) 504 472 T -(T) 72 456 T -(able 17.2) 78.37 456 T -(Compatibility Map Component Masks) 135 456 T -(.............................................................) 321 456 T -(174) 504 456 T -(T) 72 440 T -(able 18.1) 78.37 440 T -(Symbolic Names Masks) 135 440 T -(....................................................................................) 252 440 T -(182) 504 440 T -(T) 72 424 T -(able 18.2) 78.37 424 T -(XkbNameChanges Fields) 135 424 T -(..................................................................................) 258 424 T -(184) 504 424 T -(T) 72 408 T -(able 19.1) 78.37 408 T -(XkbNe) 135 408 T -(wK) 169.36 408 T -(e) 186.38 408 T -(yboardNotifyEv) 191.53 408 T -(ent Details) 269.34 408 T -(.............................................................) 321 408 T -(188) 504 408 T -(T) 72 392 T -(able 20.1) 78.37 392 T -(Serv) 135 392 T -(er Database K) 156.82 392 T -(e) 224.48 392 T -(yboard Components) 229.63 392 T -(...........................................................) 327 392 T -(190) 504 392 T -(T) 72 376 T -(able 20.2) 78.37 376 T -(XkbComponentNameRec Flags Bits) 135 376 T -(................................................................) 312 376 T -(193) 504 376 T -(T) 72 360 T -(able 20.3) 78.37 360 T -(W) 135 360 T -(ant and Need Mask Bits and Required Names Components) 145.37 360 T -(.........................) 429 360 T -(195) 504 360 T -(T) 72 344 T -(able 20.4) 78.37 344 T -(XkbDescRec Components Returned for V) 135 344 T -(alues of W) 336.3 344 T -(ant & Needs) 387.32 344 T -(..................) 450 344 T -(197) 504 344 T -(T) 72 328 T -(able 21.1) 78.37 328 T -(XkbDe) 135 328 T -(viceInfoRec Mask Bits) 169.36 328 T -(..........................................................................) 282 328 T -(200) 504 328 T -(T) 72 312 T -(able 22.1) 78.37 312 T -(Deb) 135 312 T -(ug Control Masks) 154.75 312 T -(.......................................................................................) 243 312 T -(210) 504 312 T -0 0 0 1 0 0 0 K -FMENDPAGE -%%EndPage: "2" 12 -%%Page: "1" 13 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(1) 534.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(1 Ov) 483.32 744.87 T -(ervie) 510.34 744.87 T -(w) 532.06 744.87 T -0 14 Q -(1) 72 710.67 T -(Over) 108 710.67 T -(vie) 140.05 710.67 T -(w) 159.3 710.67 T -2 12 Q --0.47 (The X Keyboard Extension provides capabilities that are lacking or are cumbersome in the) 108 688 P -(core X protocol.) 108 675 T -0 F -(1.1) 72 650 T -(Core X Pr) 108 650 T -(otocol Suppor) 162.44 650 T -(t f) 244.02 650 T -(or K) 255.11 650 T -(e) 278.93 650 T -(yboar) 285.42 650 T -(ds) 317.86 650 T -2 F -(The core X protocol specifies the ways that the) 108 630 T -5 F --0.6 (Shift) 336.95 630 S -2 F -(,) 369.95 630 T -5 F --0.6 (Control,) 375.95 630 S -2 F -( and) 428.75 630 T -5 F --0.6 (Lock) 452.08 630 S -2 F -( modifiers) 478.48 630 T -(and the modifiers bound to the) 108 617 T -4 11 Q -(Mode_s) 257.99 617 T -(witch) 296.79 617 T -2 12 Q -( or) 321.84 617 T -4 11 Q -(Num_Loc) 337.84 617 T -(k) 384.69 617 T -2 12 Q -( keysyms interact to generate) 390.19 617 T -(keysyms and characters. The core protocol also allows users to specify that a key affects) 108 604 T -(one or more modifiers. This behavior is simple and fairly flexible, but it has a number of) 108 591 T --0.38 (limitations that make it difficult or impossible to properly support many common varieties) 108 578 P -(of keyboard behavior. The limitations of core protocol support for keyboards include:) 108 565 T -2 11 Q -(\245) 126 544.67 T --0.02 (Use of a single, uniform, four) 139.68 544.67 P --0.02 (-symbol mapping for all k) 269.82 544.67 P --0.02 (e) 384.52 544.67 P --0.02 (yboard k) 389.23 544.67 P --0.02 (e) 427.9 544.67 P --0.02 (ys mak) 432.62 544.67 P --0.02 (es it dif) 463.96 544.67 P --0.02 (\336cult) 496.65 544.67 P -(to properly support k) 139.68 532.67 T -(e) 232.15 532.67 T -(yboard o) 236.87 532.67 T -(v) 275.5 532.67 T -(erlays, PC-style break k) 280.83 532.67 T -(e) 385.82 532.67 T -(ys, or k) 390.54 532.67 T -(e) 423.12 532.67 T -(yboards that comply) 427.84 532.67 T -(with ISO9995, or a host of other national and international standards.) 139.68 520.67 T -(\245) 126 508.67 T -(A second k) 139.68 508.67 T -(e) 189.06 508.67 T -(yboard group may be speci\336ed using a modi\336er) 193.78 508.67 T -(, b) 403.23 508.67 T -(ut this has side ef) 414.01 508.67 T -(fects) 490.12 508.67 T -(that wreak ha) 139.68 496.67 T -(v) 198.72 496.67 T -(oc with client grabs and X toolkit translations. Furthermore, this) 204 496.67 T -(approach limits the number of k) 139.68 484.67 T -(e) 280.41 484.67 T -(yboard groups to tw) 285.13 484.67 T -(o.) 373.32 484.67 T -(\245) 126 472.67 T --0.27 (Poorly speci\336ed locking k) 139.68 472.67 P --0.27 (e) 253.94 472.67 P --0.27 (y beha) 258.66 472.67 P --0.27 (vior requires X serv) 287.19 472.67 P --0.27 (ers to look for a fe) 373.87 472.67 P --0.27 (w \322magic\323 k) 453.18 472.67 P --0.27 (e) 508.12 472.67 P --0.27 (y-) 512.84 472.67 P -(syms to determine that k) 139.68 460.67 T -(e) 247.73 460.67 T -(ys should lock when pressed. This leads to incompatibilities) 252.45 460.67 T -(between X serv) 139.68 448.67 T -(ers with no w) 207.93 448.67 T -(ay for clients to detect implementation dif) 267.4 448.67 T -(ferences.) 451.66 448.67 T -(\245) 126 436.67 T --0.19 (Poorly speci\336ed capitalization and control beha) 139.68 436.67 P --0.19 (vior requires modi\336cations to X library) 347.78 436.67 P -(source code to support ne) 139.68 424.67 T -(w character sets or locales and can lead to incompatibilities) 251.82 424.67 T -(between system wide and X library capitalization beha) 139.68 412.67 T -(vior) 380.49 412.67 T -(.) 397.61 412.67 T -(\245) 126 400.67 T --0.19 (Limited interactions between modi\336ers speci\336ed by the core protocol mak) 139.68 400.67 P --0.19 (e man) 465.11 400.67 P --0.19 (y com-) 491.33 400.67 P --0.1 (mon k) 139.68 388.67 P --0.1 (e) 167.28 388.67 P --0.1 (yboard beha) 172 388.67 P --0.1 (viors dif) 225.75 388.67 P --0.1 (\336cult or impossible to implement. F) 262.35 388.67 P --0.1 (or e) 419.39 388.67 P --0.1 (xample, there is no) 435.92 388.67 P --0.18 (reliable w) 139.68 376.67 P --0.18 (ay to indicate whether or not the shift modi\336er should \322cancel\323 the lock mod-) 183.07 376.67 P -(i\336er) 139.68 364.67 T -(.) 156.8 364.67 T -(\245) 126 352.67 T -(The lack of an) 139.68 352.67 T -(y e) 202.74 352.67 T -(xplicit descriptions for indicators, most modi\336ers, and other aspects) 215.71 352.67 T -(of the k) 139.68 340.67 T -(e) 173.18 340.67 T -(yboard appearance requires clients that wish to clearly describe the k) 177.89 340.67 T -(e) 480.81 340.67 T -(yboard) 485.53 340.67 T -(to a user to resort to a mish-) 139.68 328.67 T -(mash of prior kno) 262.8 328.67 T -(wledge and heuristics.) 341.05 328.67 T -0 12 Q -(1.2) 72 304 T -(Xkb K) 108 304 T -(e) 141.83 304 T -(yboar) 148.32 304 T -(d Extension Suppor) 180.76 304 T -(t f) 294.35 304 T -(or K) 305.44 304 T -(e) 329.26 304 T -(yboar) 335.75 304 T -(ds) 368.18 304 T -2 F --0.47 (The X Keyboard Extension makes it possible to clearly and explicitly specify most aspects) 108 284 P --0.15 (of keyboard behavior on a per-key basis. It adds the notion of a keyboard group to the glo-) 108 271 P --0.42 (bal keyboard state and provides mechanisms to more closely track the logical and physical) 108 258 P -(state of the keyboard. For keyboard-control clients, Xkb provides descriptions and sym-) 108 245 T -(bolic names for many aspects of keyboard appearance and behavior.) 108 232 T -(In addition, the X Keyboard Extension includes additional keyboard controls designed to) 108 211 T -(make keyboards more accessible to people with movement impairments.) 108 198 T -0 F -(1.3) 72 173 T -(Xkb Extension Components) 108 173 T -2 F -(The Xkb extension is composed of two parts: a server extension, and a client-side X) 108 153 T -(library extension. These consist of a loadable module that may be activated when an X) 108 140 T -(server is started and a modified version of Xlib. Both server and Xlib versions must be at) 108 127 T -(least X11 R6.) 108 114 T -FMENDPAGE -%%EndPage: "1" 13 -%%Page: "2" 14 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(2) 534.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(1 Ov) 483.32 744.87 T -(ervie) 510.34 744.87 T -(w) 532.06 744.87 T -2 12 Q -(Figure 1.1 shows the overall structure of the Xkb extension:) 108 712 T -3 F -(Figur) 227.66 373.5 T -(e 1.1 Ov) 256.11 373.5 T -(erall Xkb Structur) 297.65 373.5 T -(e) 392.77 373.5 T -2 F --0.12 (The server portion of the Xkb extension encompasses a database of named keyboard com-) 108 345.5 P -(ponents, in unspecified format, that may be used to configure a keyboard. Internally, the) 108 332.5 T --0.36 (server maintains a) 108 319.5 P -1 F --0.36 (k) 197.23 319.5 P --0.36 (e) 202.44 319.5 P --0.36 (yboar) 207.4 319.5 P --0.36 (d description) 234.96 319.5 P -2 F --0.36 ( that includes the keyboard state and configuration) 297.6 319.5 P --0.12 (\050mapping\051. By \322keyboard\323 we mean the logical keyboard device, which includes not only) 108 306.5 P --0.29 (the physical keys, but also potentially a set of up to 32 indicators \050usually LEDs\051 and bells.) 108 293.5 P --0.4 (The keyboard description is a composite of several different data structures, each of which) 108 272.5 P -(may be manipulated separately. When manipulating the server components, the design) 108 259.5 T -(allows partial components to be transmitted between the server and a client. The individ-) 108 246.5 T -(ual components are shown in Figure 1.1.) 108 233.5 T -0 11 Q -(Client Map) 108 211.17 T -2 12 Q -(The key mapping information needed to convert arbitrary keycodes to symbols.) 126 192.5 T -0 11 Q -(Server Map) 108 170.17 T -2 12 Q -(The key mapping information categorizing keys by functionality \050which keys are) 126 151.5 T -(modifiers, how keys behave, and so on\051.) 126 138.5 T -0 11 Q -(Controls) 108 116.17 T -2 12 Q -(Client configurable quantities effecting how the keyboard behaves, such as repeat) 126 97.5 T -(behavior and modifications for people with movement impairments.) 126 84.5 T -83.34 394.5 528.66 708 C -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -2 10 Q -0 X -0 0 0 1 0 0 0 K -(Xkb Extension) 279.59 691.34 T -88.59 484.75 228.84 549.25 R -7 X -V -0.5 H -0 Z -0 X -N -(Core Xlib) 164.74 531.06 T -(Xkb) 106.6 534.53 T -(\050Xkb*) 102.43 499.78 T -141.34 518.75 228 518.75 2 L -8 X -N -0 X -(Xkb Modifications) 145.86 506.78 T -(functions) 165.16 488.01 T -327.53 487.5 526.59 592.25 R -N -328.68 561.56 526.48 561.56 2 L -N -(X Server) 419.44 573.21 T -(Xkb Server Extension) 393.21 543.88 T -374.34 406.25 500.34 451.25 R -N -(Server Database of) 398.08 433.25 T -(Keyboard Components) 391.12 419.86 T -437.34 475.96 434.37 475.97 437.34 486.34 440.32 475.97 4 Y -N -437.34 475.96 434.37 475.97 437.34 486.34 440.32 475.97 4 Y -V -437.34 451.25 437.34 475.72 2 L -N -300.79 579 300.79 576.02 290.41 579 300.79 581.97 4 Y -N -300.79 579 300.79 576.02 290.41 579 300.79 581.97 4 Y -V -315.72 579 315.72 581.97 326.1 579 315.72 576.02 4 Y -N -315.72 579 315.72 581.97 326.1 579 315.72 576.02 4 Y -V -301.04 579 315.47 579 2 L -N -193.59 614.72 190.62 614.72 193.59 625.09 196.57 614.72 4 Y -N -193.59 614.72 190.62 614.72 193.59 625.09 196.57 614.72 4 Y -V -193.59 560.53 196.57 560.53 193.59 550.16 190.62 560.53 4 Y -N -193.59 560.53 196.57 560.53 193.59 550.16 190.62 560.53 4 Y -V -193.59 614.47 193.59 560.78 2 L -N -329.25 513.66 526.5 513.66 2 L -8 X -N -378.84 534.25 378.84 513.25 2 L -N -0 X -(Client Map) 329.96 521.21 T -432.99 534.25 432.99 513.25 2 L -8 X -N -0 X -(Server Map) 382.46 521.21 T -(Compatibility Map) 442.66 521.21 T -329.58 534.78 525.53 534.78 2 L -8 X -N -374.87 512.16 374.87 491.16 2 L -N -0 X -(Controls) 335.38 497.21 T -441.9 512.16 441.9 491.16 2 L -8 X -N -0 X -(Indicator Map) 379.94 497.21 T -(Names) 446.97 497.21 T -479.79 512.16 479.79 491.16 2 L -8 X -N -0 X -(Geometry) 484.86 497.21 T -383.09 631.25 473.09 658.25 R -N -(Keyboard) 408.39 640.3 T -429.59 617.72 426.62 617.72 429.59 628.09 432.57 617.72 4 Y -N -429.59 617.72 426.62 617.72 429.59 628.09 432.57 617.72 4 Y -V -429.59 604.29 432.57 604.29 429.59 593.91 426.62 604.29 4 Y -N -429.59 604.29 432.57 604.29 429.59 593.91 426.62 604.29 4 Y -V -429.59 617.47 429.59 604.54 2 L -N -141.25 548.5 141.25 484.75 2 L -N -( to Xlib) 101.18 511.36 T -(Additions) 96.74 522.95 T -(functions\051) 96.19 488.2 T -( to Core Xlib) 157.52 497.39 T -232.47 560.02 287.97 593.02 R -7 X -V -0 X -N -(Core Xlib) 240.37 572.06 T -162.84 626.73 224.34 670.98 R -N -(Xkb-capable) 166.81 656.55 T -(User) 184.16 645.48 T -(Application) 170 634.42 T -95.84 626.73 157.34 670.98 R -N -(Xkb-aware) 103.14 656.55 T -(User) 117.16 645.48 T -(Application) 103 634.42 T -229.84 626.73 291.34 670.98 R -N -(Xkb-unaware) 232.15 656.55 T -(User) 251.16 645.48 T -(Application) 237 634.42 T -140.04 615.26 137.21 614.35 136.87 625.14 142.88 616.17 4 Y -N -140.04 615.26 137.21 614.35 136.87 625.14 142.88 616.17 4 Y -V -157.8 559.99 160.63 560.9 160.97 550.11 154.97 559.08 4 Y -N -157.8 559.99 160.63 560.9 160.97 550.11 154.97 559.08 4 Y -V -140.12 615.02 157.72 560.23 2 L -N -119.59 614.72 116.62 614.72 119.59 625.09 122.57 614.72 4 Y -N -119.59 614.72 116.62 614.72 119.59 625.09 122.57 614.72 4 Y -V -119.59 560.53 122.57 560.53 119.59 550.16 116.62 560.53 4 Y -N -119.59 560.53 122.57 560.53 119.59 550.16 116.62 560.53 4 Y -V -119.59 614.47 119.59 560.78 2 L -N -240.04 536.77 241.1 533.99 230.35 533.07 238.98 539.55 4 Y -N -240.04 536.77 241.1 533.99 230.35 533.07 238.98 539.55 4 Y -V -317.21 566.22 316.15 569.01 326.9 569.93 318.27 563.45 4 Y -N -317.21 566.22 316.15 569.01 326.9 569.93 318.27 563.45 4 Y -V -240.28 536.86 316.98 566.14 2 L -N -260.09 614.21 257.12 614.21 260.09 624.59 263.07 614.21 4 Y -N -260.09 614.21 257.12 614.21 260.09 624.59 263.07 614.21 4 Y -V -260.09 604.78 263.07 604.78 260.09 594.41 257.12 604.78 4 Y -N -260.09 604.78 263.07 604.78 260.09 594.41 257.12 604.78 4 Y -V -260.09 613.96 260.09 605.03 2 L -N -0 0 612 792 C -FMENDPAGE -%%EndPage: "2" 14 -%%Page: "3" 15 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(3) 534.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(1 Ov) 483.32 744.87 T -(ervie) 510.34 744.87 T -(w) 532.06 744.87 T -0 F -(Indicators) 108 712.67 T -2 12 Q -(The mapping of behavior to indicators.) 126 694 T -0 11 Q -(Geometry) 108 671.67 T -2 12 Q -(A complete description of the physical keyboard layout, sufficient to draw a represen-) 126 653 T -(tation of the keyboard.) 126 640 T -0 11 Q -(Names) 108 617.67 T -2 12 Q -(A mapping of names to various aspects of the keyboard such as individual virtual) 126 599 T -(modifiers, indicators, and bells.) 126 586 T -0 11 Q -(Compatibility Map) 108 563.67 T -2 12 Q -(The definition of how to map core protocol keyboard state to Xkb keyboard state.) 126 545 T -(A client application interrogates and manipulates the keyboard by reading and writing) 108 524 T -(portions of the server description for the keyboard. In a typical sequence a client would) 108 511 T -(fetch the current information it is interested in, modify it, and write it back. If a client) 108 498 T -(wishes to track some portion of the keyboard state, it typically maintains a local copy of) 108 485 T -(the portion of the server keyboard description dealing with the items of interest and) 108 472 T -(updates this local copy from events describing state transitions that are sent by the server.) 108 459 T -(A client may request the server to reconfigure the keyboard either by sending explicit) 108 438 T -(reconfiguration instructions to it, or by telling it to load a new configuration from its data-) 108 425 T -(base of named components. Partial reconfiguration and incremental reconfiguration are) 108 412 T -(both supported.) 108 399 T -0 F -(1.3.1) 72 374 T -(Gr) 108 374 T -(oups and Shift Le) 121.76 374 T -(vels) 222.26 374 T -2 F --0.01 (The graphic characters or control functions that may be accessed by one key are logically) 108 354 P -(arranged in groups and levels. See section 14.1for a complete description of groups and) 108 341 T -(levels.) 108 328 T -0 F -(1.3.2) 72 303 T -(Radio Gr) 108 303 T -(oups) 158.44 303 T -2 F --0.14 (A radio group is a set of keys whose behavior simulates a set of radio buttons. Once a key) 108 283 P -(in a radio group is pressed, it stays logically depressed until another key in the group is) 108 270 T -(pressed, at which point the previously depressed key is logically released. Consequently,) 108 257 T -(at most one key in a radio group can be logically depressed at one time. A radio group is) 108 244 T -(defined by a radio group index, an optional name, and by assigning each key in the radio) 108 231 T -(group) 108 218 T -5 F --0.6 (XkbKB_RadioGroup) 139 218 S -2 F -( behavior and the radio group index.) 244.6 218 T -0 F -(1.4) 72 193 T -(Client T) 108 193 T -(ypes) 151.28 193 T -2 F -(This specification differentiates between three different classes of client applications:) 108 173 T -2 11 Q -(\245) 126 152.67 T -(Xkb-a) 139.68 152.67 T -(w) 167 152.67 T -(are applications) 174.84 152.67 T -(These applications mak) 139.68 140.67 T -(e speci\336c use of Xkb functionality and APIs not present in the) 243.44 140.67 T -(core protocol.) 139.68 127.67 T -(\245) 126 114.67 T -(Xkb-capable applications) 139.68 114.67 T -(These applications mak) 139.68 102.67 T -(e no use of Xkb e) 243.44 102.67 T -(xtended functionality and Application Pro-) 320.56 102.67 T -(gramming Interf) 139.68 89.67 T -(aces \050APIs\051 directly) 211.97 89.67 T -(. Ho) 298.62 89.67 T -(we) 317.29 89.67 T -(v) 329.84 89.67 T -(er) 335.17 89.67 T -(, the) 343.28 89.67 T -(y are link) 362.06 89.67 T -(ed with a v) 403.49 89.67 T -(ersion of Xlib) 451.9 89.67 T -(that includes Xkb and indirectly bene\336t from some of Xkb\325) 139.68 76.67 T -(s features.) 400.29 76.67 T -FMENDPAGE -%%EndPage: "3" 15 -%%Page: "4" 16 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(4) 534.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(1 Ov) 483.32 744.87 T -(ervie) 510.34 744.87 T -(w) 532.06 744.87 T -(\245) 126 712.67 T -(Xkb-una) 139.68 712.67 T -(w) 178 712.67 T -(are applications) 185.84 712.67 T -(These applications mak) 139.68 700.67 T -(e no use of Xkb e) 243.44 700.67 T -(xtended functionality or APIs and require) 320.56 700.67 T -(Xkb\325) 139.68 687.67 T -(s functionality to be mapped to core Xlib functionality to operate properly) 161.68 687.67 T -(.) 486.95 687.67 T -0 12 Q -(1.5) 72 662 T -(Compatibility With the Core Pr) 108 662 T -(otocol) 281.11 662 T -2 F -(Because the Xkb extension allows a keyboard to be configured in ways not foreseen by) 108 642 T -(the core protocol, and because Xkb-unaware clients are allowed to connect to a server) 108 629 T -(using the Xkb extension, there must be a means of converting between the Xkb domain) 108 616 T -(and the core protocol. The Xkb server extension maintains a compatibility map as part of) 108 603 T --0.33 (its keyboard description; this map controls the conversion of Xkb generated events to core) 108 590 P -(protocol events and the results of core protocol requests to appropriate Xkb state and con-) 108 577 T -(figuration.) 108 564 T -0 F -(1.6) 72 539 T -(Ad) 108 539 T -(ditional Pr) 123.88 539 T -(otocol Err) 182.32 539 T -(or) 238.75 539 T -(s) 250.57 539 T -2 F --0.09 (The Xkb extension adds a single protocol error,) 108 519 P -5 F --0.19 -0.6 (BadKeyboard) 338.94 519 B -2 F --0.09 (, to the core protocol error) 411.55 519 P -(set. See section 2.6 for a discussion of the) 108 506 T -5 F --0.6 (BadKeyboard) 311.64 506 S -2 F -( protocol error.) 384.24 506 T -0 F -(1.7) 72 481 T -(Extension Librar) 108 481 T -(y Functions) 202.81 481 T -2 F -(The X Keyboard Extension replaces the core protocol definition of a keyboard with a) 108 461 T -(more comprehensive one. The X Keyboard Extension library interfaces are included in) 108 448 T -(Xlib.) 108 435 T -2 9.6 Q -(1) 132.34 439.8 T -2 12 Q -(Xlib detects the presence of the X Keyboard server extension and uses Xkb protocol to) 108 414 T -(replace some standard X library functions related to the keyboard. If an application uses) 108 401 T --0.35 (only standard X library functions to examine the keyboard or process key events, it should) 108 388 P -(not need to be modified when linked with an X library containing the X keyboard exten-) 108 375 T -(sion. All of the keyboard-related X library functions have been modified to automatically) 108 362 T -(use Xkb protocol when the server extension is present.) 108 349 T --0.02 (The Xkb extension adds library interfaces to allow a client application to directly manipu-) 108 328 P -(late the new capabilities.) 108 315 T -0 F -(1.7.1) 72 290 T -(Err) 108 290 T -(or Indications) 125.1 290 T -2 F --0.25 (Xkb functions that communicate with the X server check to be sure the Xkb extension has) 108 270 P --0.13 (been properly initialized prior to doing any other operations. If the extension has not been) 108 257 P --0.02 (properly initialized or the application, library, and server versions are incompatible, these) 108 244 P -(functions return an error indication as shown in Table 1.1. Because of this test,) 108 231 T -5 F --0.6 (BadAc-) 488.94 231 S --0.6 (cess) 108 218 S -2 F -( and) 134.4 218 T -5 F --0.6 (BadMatch) 157.73 218 S -2 F -( \050due to incompatible versions\051 protocol errors should normally not) 210.53 218 T -(be generated.) 108 205 T -72 90 540 110 C -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 98 204 98 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -0 0 612 792 C -2 10 Q -0 X -0 0 0 1 0 0 0 K -(1. X11R6.1 is the \336rst release by the X Consortium, Inc.,that includes the X K) 72 83.33 T -(e) 387.28 83.33 T -(yboard Extension in Xlib) 391.57 83.33 T -(. X11R6) 492 83.33 T -(included w) 72 71.33 T -(ork in progress on this e) 116.06 71.33 T -(xtension as nonstandard additions to the library) 212.29 71.33 T -(.) 401.07 71.33 T -3 12 Q -(T) 104.9 185 T -(able 1.1 Function Err) 111.8 185 T -(or Retur) 224.59 185 T -(ns Due to Extension Pr) 268.73 185 T -(oblems) 385.85 185 T -1 F -(Functions r) 109 165 T -(eturn type) 164.22 165 T -(Return value) 280 165 T -2 11 Q -(pointer to a structure) 109 150.67 T -(NULL) 280 150.67 T -(Bool) 109 136.67 T -(F) 280 136.67 T -(alse) 285.95 136.67 T -(Status) 109 122.67 T -(BadAccess) 280 122.67 T -108 177 405 177 2 L -V -0.5 H -0 Z -N -108 160 405 160 2 L -V -N -FMENDPAGE -%%EndPage: "4" 16 -%%Page: "5" 17 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(5) 534.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(1 Ov) 483.32 744.87 T -(ervie) 510.34 744.87 T -(w) 532.06 744.87 T -2 12 Q -(Many Xkb functions do not actually communicate with the X server; they only require) 108 712 T -(processing in the client-side portion of the library. Furthermore, some applications may) 108 699 T --0.18 (never actually need to communicate with the server; they simply use the Xkb library capa-) 108 686 P --0.02 (bilities. The functions that do not communicate with the server return either a pointer to a) 108 673 P -(structure, a Bool, or a Status. These functions check that the application has queried the) 108 660 T -(Xkb library version and return the values shown in Table 1.1 if it has not.) 108 647 T -FMENDPAGE -%%EndPage: "5" 17 -%%Page: "6" 18 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(6) 534.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T --0.39 (2 Initialization and General Programming) 350.58 744.87 P -0 14 Q -(2) 72 710.67 T -(Initialization and General Pr) 108 710.67 T -(ogramming Inf) 292.11 710.67 T -(ormation) 389.06 710.67 T -0 12 Q -(2.1) 72 684 T -(Extension Header Files) 108 684 T -2 F -(The following include files are part of the Xkb standard:) 108 664 T -2 11 Q -(\245) 126 643.67 T -5 12 Q --0.6 () 139.68 643.67 S --0.41 -0.6 (XKBlib.h) 139.68 631.67 B -2 11 Q --0.17 (is the main header \336le for Xkb; it declares constants, types, and functions.) 198.67 631.67 P -(\245) 126 619.67 T -5 12 Q --0.6 () 139.68 619.67 S --0.6 (XKBstr.h) 139.68 607.67 S -2 11 Q -(declares types and constants for Xkb) 199.08 607.67 T -(. It is included automatically from) 360.24 607.67 T -5 12 Q --0.71 -0.6 () 139.68 595.67 B -2 11 Q --0.29 (; you should ne) 232.08 595.67 P --0.29 (v) 298.45 595.67 P --0.29 (er need to reference it directly in your application) 303.79 595.67 P -(code.) 139.68 583.67 T -(\245) 126 571.67 T -5 12 Q --0.6 () 139.68 571.67 S --0.6 (XKB.h) 139.68 559.67 S -2 11 Q -(de\336nes constants for Xkb) 179.28 559.67 T -(. It is included automatically from) 290.96 559.67 T -5 12 Q --0.6 () 139.68 547.67 S -2 11 Q -(; you should ne) 179.28 547.67 T -(v) 246.54 547.67 T -(er need to reference it directly in your application code.) 251.87 547.67 T -(\245) 126 535.67 T -5 12 Q --0.6 () 139.68 535.67 S --0.6 (XKBgeom.h) 139.68 523.67 S -2 11 Q -(declares types, symbolic constants, and functions for manipulating k) 205.68 523.67 T -(e) 506.82 523.67 T -(y-) 511.54 523.67 T -(board geometry descriptions.) 139.68 511.67 T -0 12 Q -(2.2) 72 487 T -(Extension Name) 108 487 T -2 F -(The name of the Xkb extension is given in) 108 467 T -5 F --0.6 (:) 314.98 467 S -2 F -(#define XkbName \322XKEYBOARD\323) 108 446 T --0.33 (Most extensions to the X protocol are initialized by calling) 108 425 P -1 F --0.33 (XInitExtension) 390 425 P -2 F --0.33 ( and passing the) 461.33 425 P -(extension name. However, as explained in section 2.4, Xkb requires a more complex ini-) 108 412 T -(tialization sequence, and a client program should not call) 108 399 T -1 F -(XInitExtension) 384.62 399 T -2 F -( directly.) 455.95 399 T -0 F -(2.3) 72 374 T -(Determining Librar) 108 374 T -(y Compatibility) 215.47 374 T -2 F -(If an application is dynamically linked, both the X server and the client-side X library) 108 354 T -(must contain the Xkb extension in order for the client to use the Xkb extension capabili-) 108 341 T --0.4 (ties. Therefore a dynamically linked application must check both the library and the server) 108 328 P --0.2 (for compatibility before using Xkb function calls. A properly written program must check) 108 315 P -(for compatibility between the version of the Xkb library that is dynamically loaded and) 108 302 T -(the one used when the application was built. It must then check the server version for) 108 289 T -(compatibility with the version of Xkb in the library.) 108 276 T -(If your application is statically linked, you must still check for server compatibility and) 108 255 T -(may check library compatibility. \050It is possible to compile against one set of header files) 108 242 T -(and link against a different, incompatible, version of the library, although this should not) 108 229 T -(normally occur.\051) 108 216 T -(To determine the compatibility of a library at runtime, call) 108 195 T -1 F -(XkbLibraryVersion) 391.63 195 T -2 F -(.) 484.3 195 T -2 11 Q -(Bool) 108 174.67 T -3 F -(XkbLibraryV) 132.15 174.67 T -(ersion) 196.44 174.67 T -2 F -(\050) 225.16 174.67 T -1 F -(lib_major_in_out) 228.82 174.67 T -2 F -(,) 305.83 174.67 T -1 F -(lib_minor_in_out) 311.33 174.67 T -2 F -(\051) 388.35 174.67 T -(int *) 126 161.67 T -1 F -(lib_major_in_out;) 153 161.67 T -2 F -(/* speci\336es and returns the major Xkb library v) 252 161.67 T -(ersion. */) 459.58 161.67 T -(int *) 126 148.67 T -1 F -(lib_minor_in_out;) 153 148.67 T -2 F -(/* speci\336es and returns the minor Xkb library v) 252 148.67 T -(ersion. */) 460.2 148.67 T -2 12 Q -(Pass the symbolic value) 108 129 T -5 F --0.6 (XkbMajorVersion) 226 129 S -2 F -( in) 325 129 T -1 F -(lib_major_in_out) 340.33 129 T -2 F -( and) 424.35 129 T -5 F --0.6 (XkbMinorVer-) 447.67 129 S --0.6 (sion) 108 116 S -2 F -( in) 134.4 116 T -1 F -(lib_minor_in_out) 149.74 116 T -2 F -(. These arguments represent the version of the library used at) 233.75 116 T -(compile time. The) 108 103 T -1 F -(XkbLibr) 198.66 103 T -(aryV) 237.82 103 T -(er) 259.81 103 T -(sion) 269.69 103 T -2 F -(function backfills the major and minor version) 292.69 103 T -(numbers of the library used at run time in) 108 90 T -1 F -(lib_major_in_out) 310.31 90 T -2 F -( and) 394.32 90 T -1 F -(lib_minor_in_out) 417.65 90 T -2 F -(. If the) 501.66 90 T -FMENDPAGE -%%EndPage: "6" 18 -%%Page: "7" 19 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(7) 534.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T --0.39 (2 Initialization and General Programming) 350.58 744.87 P -2 12 Q -(versions of the compile time and run time libraries are compatible,) 108 712 T -1 F -(XkbLibr) 430.62 712 T -(aryV) 469.78 712 T -(er) 491.77 712 T -(sion) 501.65 712 T -2 F -(returns) 108 699 T -5 F --0.6 (True) 144.32 699 S -2 F -(, otherwise, it returns) 170.73 699 T -5 F --0.6 (False.) 275.38 699 S -2 F -(In addition, in order to use the Xkb extension, you must ensure that the extension is) 108 678 T -(present in the server and that the server supports the version of the extension expected by) 108 665 T -(the client. Use) 108 652 T -1 F -(XkbQueryExtension) 179.99 652 T -2 F -( to do this, as described in the next section.) 275.96 652 T -0 F -(2.4) 72 627 T -(Initializing the K) 108 627 T -(e) 199.84 627 T -(yboar) 206.33 627 T -(d Extension) 238.76 627 T -2 F -(Call) 108 607 T -1 F -(XkbQueryExtension) 131 607 T -2 F -( to check for the presence and compatibility of the extension in) 226.98 607 T -(the server and to initialize the extension. Because of potential version mismatches, you) 108 594 T -(cannot use the generic extension mechanism functions \050) 108 581 T -1 F -(XQueryExtension) 376.28 581 T -2 F -(and) 463.93 581 T -1 F -( XInitExten-) 481.26 581 T -(sion) 108 568 T -2 F -(\051 for checking for the presence of, and initializing the Xkb extension.) 128 568 T --0.38 (You must call) 108 547 P -1 F --0.38 (XkbQueryExtension) 177.19 547 P -2 F --0.38 ( or) 273.16 547 P -1 F --0.38 (XkbOpenDisplay) 288.39 547 P -2 F --0.38 ( before using any other Xkb library) 370.38 547 P --0.05 (interfaces, unless such usage is explicitly allowed in the interface description in this docu-) 108 534 P --0.15 (ment. The exceptions are:) 108 521 P -1 F --0.15 (XkbIgnor) 234.37 521 P --0.15 (eExtension) 279.25 521 P -2 F --0.15 (,) 331.9 521 P -1 F --0.15 (XkbLibr) 337.75 521 P --0.15 (aryV) 376.91 521 P --0.15 (er) 398.9 521 P --0.15 (sion) 408.78 521 P -2 F --0.15 (, and a handful of audi-) 428.78 521 P -(ble-bell functions. You should not use any other Xkb functions if the extension is not) 108 508 T --0.14 (present or is uninitialized. In general, calls to Xkb library functions made prior to initializ-) 108 495 P -(ing the Xkb extension cause) 108 482 T -5 F --0.6 (BadAccess) 246.31 482 S -2 F -( protocol errors.) 305.71 482 T -1 F --0.37 (XkbQueryExtension) 108 461 P -2 F --0.37 ( both determines whether a compatible Xkb e) 203.98 461 P --0.37 (xtension is present in the) 419.51 461 P -(X serv) 108 448 T -(er and initializes the e) 139.48 448 T -(xtension when it is present.) 244.61 448 T -2 11 Q -(Bool) 108 427.67 T -3 F -(XkbQueryExtension) 132.15 427.67 T -2 F -(\050) 228.71 427.67 T -1 F -(dpy) 232.38 427.67 T -(, opcode_rtrn, e) 247.66 427.67 T -(vent_rtrn, err) 317.76 427.67 T -(or_rtrn, major_in_out,) 377.15 427.67 T -(minor_in_out) 261 414.67 T -2 F -(\051) 320.89 414.67 T -(Display *) 126 401.67 T -1 F -(dpy;) 180 401.67 T -2 F -(/* connection to the X serv) 261 401.67 T -(er */) 379.68 401.67 T -(int *) 126 388.67 T -1 F -(opcode_rtrn) 180 388.67 T -2 F -(;) 234.38 388.67 T -(/* back\336lled with the major e) 261 388.67 T -(xtension opcode */) 390.07 388.67 T -(int *) 126 375.67 T -1 F -(e) 180 375.67 T -(vent_rtrn) 184.72 375.67 T -2 F -(;) 225.66 375.67 T -(/* back\336lled with the e) 261 375.67 T -(xtension base e) 361.66 375.67 T -(v) 428.6 375.67 T -(ent code */) 433.93 375.67 T -(int *) 126 362.67 T -1 F -(err) 180 362.67 T -(or_rtrn) 192.95 362.67 T -2 F -(;) 225.34 362.67 T -(/* back\336lled with the e) 261 362.67 T -(xtension base error code */) 361.66 362.67 T -(int *) 126 349.67 T -1 F -(major_in_out) 180 349.67 T -2 F -(;) 239.9 349.67 T --0.26 (/* compile time lib major v) 261 349.67 P --0.26 (ersion in, serv) 379.64 349.67 P --0.26 (er major v) 440.98 349.67 P --0.26 (ersion out */) 485.51 349.67 P -(int *) 126 336.67 T -1 F -(minor_in_out;) 180 336.67 T -2 F -(/* compile time lib min v) 261 336.67 T -(ersion in, serv) 372.38 336.67 T -(er minor v) 434.23 336.67 T -(ersion out */) 479.89 336.67 T -2 12 Q -(The) 108 317 T -1 F -(XkbQueryExtension) 129.66 317 T -2 F -( function determines whether a compatible version of the X Key-) 225.64 317 T -(board Extension is present in the server. If a compatible extension is present,) 108 304 T -1 F -(XkbQue-) 479.6 304 T -(ryExtension) 108 291 T -2 F -( returns) 165.32 291 T -5 F --0.6 (True) 204.65 291 S -2 F -(; otherwise, it returns) 231.05 291 T -5 F --0.6 (False) 336.04 291 S -2 F -(.) 369.04 291 T -(If a compatible version of Xkb is present,) 108 270 T -1 F -(XkbQueryExtension) 310.3 270 T -2 F -( initializes the extension. It) 406.27 270 T --0.3 (backfills the major opcode for the keyboard extension in) 108 257 P -1 F --0.3 (opcode_rtrn) 379.55 257 P -2 F --0.3 (, the base event code) 438.88 257 P --0.1 (in) 108 244 P -1 F --0.1 (e) 120.23 244 P --0.1 (vent_rtrn) 125.38 244 P -2 F --0.1 (, the base error code) 170.04 244 P --0.1 ( in) 266.59 244 P -1 F --0.1 (err) 281.72 244 P --0.1 (or_rtrn) 295.85 244 P -2 F --0.1 (, and the major and minor version numbers) 331.19 244 P -(of the extension in) 108 231 T -1 F -(major_in_out) 199.99 231 T -2 F -( and) 265.33 231 T -1 F -(minor_in_out) 288.66 231 T -2 F -(. The major opcode is reported in the) 354 231 T -1 F --0.12 (req_major) 108 218 P -2 F --0.12 ( fields of some Xkb events. For a discussion of the base event code, see section) 158.66 218 P -(4.1.) 108 205 T -FMENDPAGE -%%EndPage: "7" 19 -%%Page: "8" 20 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(8) 534.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T --0.39 (2 Initialization and General Programming) 350.58 744.87 P -2 12 Q -(As a convenience, you can use the function) 108 712 T -1 F -(XkbOpenDisplay) 318.95 712 T -2 F -( to perform these three tasks) 400.93 712 T -(at once: open a connection to an X server, check for a compatible version of the Xkb) 108 699 T -(extension in both the library and the server, and initialize the extension for use.) 108 686 T -2 11 Q -(Display *) 108 665.67 T -3 F -(XkbOpenDisplay) 150.47 665.67 T -2 F -(\050) 231.77 665.67 T -1 F -(display_name) 235.43 665.67 T -(, e) 296.43 665.67 T -(vent_rtrn, err) 306.65 665.67 T -(or_rtrn, major_in_out, minor_in_out,) 366.04 665.67 T -(r) 252 652.67 T -(eason_rtrn\051) 255.87 652.67 T -2 F -(char *) 126 639.67 T -1 F -(display_name) 153.18 639.67 T -2 F -(;) 214.29 639.67 T -(/* hardw) 234 639.67 T -(are display name, which determines the display and) 272.69 639.67 T -(communications domain to be used */) 246 626.67 T -(int *) 126 613.67 T -1 F -(e) 153 613.67 T -(vent_rtrn) 157.72 613.67 T -2 F -(;) 198.66 613.67 T -(/* back\336lled with the e) 234 613.67 T -(xtension base e) 334.66 613.67 T -(v) 401.6 613.67 T -(ent code */) 406.93 613.67 T -(int *) 126 600.67 T -1 F -(err) 153 600.67 T -(or_rtrn) 165.95 600.67 T -2 F -(;) 198.34 600.67 T -(/* back\336lled with the e) 234 600.67 T -(xtension base error code */) 334.66 600.67 T -(int *) 126 587.67 T -1 F -(major_in_out) 153 587.67 T -2 F -(;) 212.9 587.67 T -(/* compile time lib major v) 234 587.67 T -(ersion in, serv) 353.92 587.67 T -(er major v) 415.77 587.67 T -(ersion out */) 460.82 587.67 T -(int *) 126 574.67 T -1 F -(minor_in_out) 153 574.67 T -2 F -(;) 212.9 574.67 T -(/* compile time lib minor v) 234 574.67 T -(ersion in, serv) 354.54 574.67 T -(er minor v) 416.39 574.67 T -(ersion out */) 462.05 574.67 T -(int *) 126 561.67 T -1 F -(r) 153 561.67 T -(eason_rtrn) 156.87 561.67 T -2 F -(;) 205.15 561.67 T -(/* back\336lled with a status code */) 234 561.67 T -1 12 Q --0.16 (XkbOpenDisplay) 108 542 P -2 F --0.16 (is a convenience function that opens an X display connection and initial-) 192.82 542 P --0.48 (izes the X keyboard extension. In all cases, upon return) 108 529 P -1 F --0.48 (r) 371.84 529 P --0.48 (eason_rtrn) 376.06 529 P -2 F --0.48 ( contains a status value) 428.73 529 P -(indicating success or the type of failure. If) 108 516 T -1 F -(major_in_out) 313.62 516 T -2 F -( and) 378.96 516 T -1 F -(minor_in_out) 402.29 516 T -2 F -( are not) 467.63 516 T -5 F --0.6 (NULL) 506.62 516 S -2 F -(,) 533.02 516 T -1 F -(XkbOpenDisplay) 108 503 T -2 F -( first calls) 189.98 503 T -1 F -(XkbLibr) 240.31 503 T -(aryV) 279.47 503 T -(er) 301.46 503 T -(sion) 311.34 503 T -2 F -( to determine whether the client library is) 331.34 503 T -(compatible, passing it the values pointed to by) 108 490 T -1 F -(major_in_out) 333.66 490 T -2 F -( and) 399 490 T -1 F -(minor_in_out) 422.33 490 T -2 F -(. If the) 487.67 490 T -(library is incompatible,) 108 477 T -1 F -(XkbOpenDisplay) 222.66 477 T -2 F -( backfills) 304.64 477 T -1 F -(major_in_out) 351.97 477 T -2 F -( and) 417.31 477 T -1 F -(minor_in_out) 440.64 477 T -2 F -( with) 505.98 477 T -(the major and minor extension versions of the library being used and returns) 108 464 T -5 F --0.6 (NULL) 477.61 464 S -2 F -(. If the) 504.01 464 T -(library is compatible,) 108 451 T -1 F -( XkbOpenDisplay) 210.32 451 T -2 F -(next calls) 298.31 451 T -1 F -(XOpenDisplay) 346.97 451 T -2 F -( with the) 417.62 451 T -1 F -(display_name) 462.62 451 T -2 F -(.) 529.28 451 T -(If this fails, the function returns) 108 438 T -5 F --0.6 (NULL) 262.98 438 S -2 F -(. If successful,) 289.38 438 T -1 F -(XkbOpenDisplay) 361.69 438 T -2 F -(calls) 446.68 438 T -1 F -(XkbQueryEx-) 471.67 438 T -(tension) 108 425 T -2 F -( and) 142.67 425 T -(backfills the major and minor Xkb server extension version numbers in) 166 425 T -1 F --0.31 (major_in_out) 108 412 P -2 F --0.31 ( and) 173.34 412 P -1 F --0.31 (minor_in_out) 196.06 412 P -2 F --0.31 (.) 261.4 412 P --0.31 (If the server extension version is not compatible with the) 267.09 412 P -(library extension version or if the server extension is not present,) 108 399 T -1 F -(XkbOpenDisplay) 422.62 399 T -2 F -(closes) 507.6 399 T -(the display and returns) 108 386 T -5 F --0.6 (NULL) 219.98 386 S -2 F -(. When successful, the function returns the display connec-) 246.38 386 T -(tion) 108 373 T -5 F --0.6 (.) 126.67 373 S -2 F -(The possible values for) 108 352 T -1 F -(r) 222.65 352 T -(eason_rtrn) 226.87 352 T -2 F -( are:) 279.54 352 T -2 11 Q -(\245) 126 331.67 T -5 12 Q --0.6 (XkbOD_BadLibraryVersion) 139.68 331.67 S -2 11 Q -( indicates) 291.48 331.67 T -1 F -(XkbLibr) 336.09 331.67 T -(aryV) 371.98 331.67 T -(er) 392.14 331.67 T -(sion) 401.2 331.67 T -2 F -(returned) 422.28 331.67 T -5 12 Q --0.6 (False) 461.69 331.67 S -2 11 Q -(.) 494.69 331.67 T -(\245) 126 319.67 T -5 12 Q --0.6 (XkbOD_ConnectionRefused) 139.68 319.67 S -2 11 Q -( indicates the display could not be opened.) 291.48 319.67 T -(\245) 126 307.67 T -5 12 Q --0.9 -0.6 (XkbOD_BadServerVersion) 139.68 307.67 B -2 11 Q --0.37 ( indicates the library and the serv) 284.88 307.67 P --0.37 (er ha) 428.5 307.67 P --0.37 (v) 449.59 307.67 P --0.37 (e incompatible) 454.92 307.67 P -(e) 139.68 295.67 T -(xtension v) 144.4 295.67 T -(ersions.) 189.76 295.67 T -(\245) 126 283.67 T -5 12 Q --0.6 (XkbOD_NonXkbServer) 139.68 283.67 S -2 11 Q -( indicates the e) 258.48 283.67 T -(xtension is not present in the X serv) 324 283.67 T -(er) 481.79 283.67 T -(.) 489.73 283.67 T -(\245) 126 271.67 T -5 12 Q --0.6 (XkbOD_Success) 139.68 271.67 S -2 11 Q -( indicates that the function succeeded.) 225.48 271.67 T -0 12 Q -(2.5) 72 247 T -(Disab) 108 247 T -(ling the K) 140.56 247 T -(e) 195.05 247 T -(yboar) 201.54 247 T -(d Extension) 233.98 247 T -2 F -(If a server supports the Xkb extension, the X library normally implements preXkb key-) 108 227 T -(board functions using the Xkb keyboard description and state. The server Xkb keyboard) 108 214 T -(state may differ from the preXkb keyboard state. This difference does not affect most cli-) 108 201 T -(ents, but there are exceptions. To allow these clients to work properly, you may instruct) 108 188 T -(the extension not to use Xkb functionality.) 108 175 T -(Call) 108 154 T -1 F -(XkbIgnoreExtension) 131 154 T -2 F -( to prevent core X library keyboard functions from using the X) 228.98 154 T --0.29 (Keyboard Extension. You must call) 108 141 P -1 F --0.29 (XkbIgnoreExtension) 281.18 141 P -2 F --0.29 ( before you open a server connec-) 379.16 141 P -(tion; Xkb does not provide a way to enable or disable use of the extension once a connec-) 108 128 T -(tion is established.) 108 115 T -2 11 Q -(Bool) 108 94.67 T -3 F -( XkbIgnor) 129.4 94.67 T -(eExtension) 178.4 94.67 T -2 F -(\050) 229.74 94.67 T -1 F -(ignor) 233.4 94.67 T -(e) 256.83 94.67 T -2 F -(\051) 261.71 94.67 T -(Bool) 126 81.67 T -1 F -(ignor) 189 81.67 T -(e) 212.43 81.67 T -2 F -(;) 217.31 81.67 T -(/*) 234 81.67 T -5 12 Q --0.6 (True) 245.31 81.67 S -2 11 Q -( means ignore the e) 271.71 81.67 T -(xtension */) 357.08 81.67 T -FMENDPAGE -%%EndPage: "8" 20 -%%Page: "9" 21 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(9) 534.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T --0.39 (2 Initialization and General Programming) 350.58 744.87 P -1 12 Q -(XkbIgnor) 108 712 T -(eExtension) 152.88 712 T -2 F -( tells the X library whether to use the X Keyboard Extension on any) 205.54 712 T -0 (subsequently opened X display connections. If ignore is) 108 699 P -5 F -0 -0.6 (True) 379.62 699 B -2 F -0 (, the library does not initial-) 406.02 699 P -(ize the Xkb extension when it opens a new display. This forces the X server to use com-) 108 686 T -(patibility mode and communicate with the client using only core protocol requests and) 108 673 T -(events. If ignore is) 108 660 T -5 F --0.6 (False) 200.32 660 S -2 F -(, the library treats subsequent calls to) 233.32 660 T -1 F -(XOpenDisplay) 414.62 660 T -2 F -( normally) 485.28 660 T --0.22 (and uses Xkb extension requests, events, and state. Do not explicitly use Xkb on a connec-) 108 647 P -(tion for which it is disabled.) 108 634 T -1 F -( XkbIgnor) 242.66 634 T -(eExtension) 290.54 634 T -2 F -( returns) 343.2 634 T -5 F --0.6 (False) 382.52 634 S -2 F -( if it was unable to apply) 415.52 634 T -(the ignore request.) 108 621 T -0 F -(2.6) 72 596 T -(Pr) 108 596 T -(otocol Err) 120.43 596 T -(or) 176.87 596 T -(s) 188.69 596 T -2 F -(Many of the Xkb extension library functions described in this document can cause the X) 108 582 T -(server to report an error, referred to in this document as a) 108 569 T -5 F --0.6 (BadXxx) 385.58 569 S -2 F -( protocol error, where) 425.18 569 T -5 F --0.95 -0.6 (Xxx) 108 556 B -2 F --0.43 ( is some name. These errors are fielded in the normal manner, by the default Xlib error) 127.8 556 P --0.02 (handler or one replacing it. Note that X protocol errors are not necessarily reported imme-) 108 543 P -(diately because of the buffering of X protocol requests in Xlib and the server.) 108 530 T -(Table 2.1 lists the protocol errors that can be generated, and their causes.) 108 509 T --0.09 (The Xkb extension adds a single protocol error,) 108 320 P -5 F --0.19 -0.6 (BadKeyboard) 338.94 320 B -2 F --0.09 (, to the core protocol error) 411.55 320 P -(set. This error code will be reported as the) 108 307 T -1 F -(err) 313.28 307 T -(or_rtrn) 327.41 307 T -2 F -( when) 362.75 307 T -1 F -(XkbQueryExtension) 394.74 307 T -2 F -( is called.) 490.72 307 T -(When a) 108 294 T -5 F --0.6 (BadKeyboard) 147.98 294 S -2 F -( error is reported in an) 220.59 294 T -5 F --0.6 (XErrorEvent) 330.55 294 S -2 F -(, additional information is) 403.15 294 T --0.04 (reported in the) 108 281 P -1 F --0.04 (resource_id) 180.86 281 P -2 F --0.04 ( field. The most significant byte of the) 238.19 281 P -1 F --0.04 (resource_id) 424.85 281 P -2 F --0.04 ( is a further) 482.18 281 P -(refinement of the error cause, as defined in Table 2.2. The least significant byte will con-) 108 268 T -(tain the device, class, or feedback ID as indicated in the table.) 108 255 T -0 F -(2.7) 72 136 T -(Displa) 108 136 T -(y and De) 143.77 136 T -(vice Speci\336cations in Function Calls) 193.61 136 T -2 F -(Where a connection to the server is passed as an argument \050Display*\051 and an) 108 116 T -5 F --0.6 (XkbDescPtr) 108 103 S -2 F -( is also passed as an argument, the Display* argument must match the) 174 103 T -1 F -(dpy) 512.63 103 T -2 F -(field of the) 108 90 T -5 F --0.6 (XkbDescRec) 163.66 90 S -2 F -( pointed to by the) 229.66 90 T -5 F --0.6 (XkbDescPtr) 316.66 90 S -2 F -( argument, or else the) 382.66 90 T -1 F -(dpy) 489.3 90 T -2 F -( field) 506.63 90 T -(of the) 108 77 T -5 F --0.6 (XkbDescRec) 138.66 77 S -2 F -( must be) 204.66 77 T -5 F --0.6 (NULL) 248.33 77 S -2 F -(. If they don\325t match or the) 274.73 77 T -1 F -(dpy) 406.71 77 T -2 F -( field is not) 424.03 77 T -5 F --0.6 (NULL) 481.37 77 S -2 F -(, a) 507.77 77 T -3 F -(T) 251.98 489 T -(able 2.1 Xkb Pr) 258.88 489 T -(otocol Err) 341.67 489 T -(ors) 393.77 489 T -1 F -(Err) 109 469 T -(or) 125.13 469 T -(Cause) 208 469 T -2 11 Q -(BadAccess) 109 454.67 T -(The Xkb e) 208 454.67 T -(xtension has not been properly initialized) 254.27 454.67 T -(BadK) 109 440.67 T -(e) 134.39 440.67 T -(yboard) 139.11 440.67 T -(The de) 208 440.67 T -(vice speci\336ed w) 237.96 440.67 T -(as not a v) 308.73 440.67 T -(alid core or input e) 350.31 440.67 T -(xtension de) 433.24 440.67 T -(vice) 483.37 440.67 T -(BadImplementation) 109 426.67 T -(In) 208 426.67 T -(v) 216.72 426.67 T -(alid reply from serv) 221.95 426.67 T -(er) 308.85 426.67 T -(BadAlloc) 109 412.67 T -(Unable to allocate storage) 208 412.67 T -(BadMatch) 109 398.67 T --0.25 (A compatible v) 208 398.67 P --0.25 (ersion of Xkb w) 275.16 398.67 P --0.25 (as not a) 345.47 398.67 P --0.25 (v) 378.36 398.67 P --0.25 (ailable in the serv) 383.58 398.67 P --0.25 (er or an ar) 460.56 398.67 P --0.25 (gument) 504.5 398.67 P -(has correct type and range, b) 208 387.67 T -(ut is otherwise in) 334.24 387.67 T -(v) 409.27 387.67 T -(alid) 414.49 387.67 T -(BadV) 109 373.67 T -(alue) 133.44 373.67 T -(An ar) 208 373.67 T -(gument is out of range) 232.54 373.67 T -(BadAtom) 109 359.67 T -(A name is neither a v) 208 359.67 T -(alid Atom or) 301.51 359.67 T -5 12 Q --0.6 (None) 360.48 359.67 S -2 11 Q -(BadDe) 109 345.67 T -(vice) 139.27 345.67 T -(De) 208 345.67 T -(vice, Feedback Class, or Feedback ID in) 220.55 345.67 T -(v) 397.9 345.67 T -(alid) 403.13 345.67 T -3 12 Q -(T) 179.9 235 T -(able 2.2 BadK) 186.8 235 T -(eyboard Pr) 261.85 235 T -(otocol Err) 319.3 235 T -(or r) 371.4 235 T -(esour) 390.84 235 T -(ce_id V) 418.62 235 T -(alues) 455.84 235 T -1 F -(high-or) 109.21 215 T -(der byte) 144.77 215 T -(value) 217.21 215 T -(meaning) 262.21 215 T -(low-or) 462.32 215 T -(der byte) 493.88 215 T -2 11 Q -(XkbErr_BadDe) 109.21 200.67 T -(vice) 177.97 200.67 T -(0xf) 217.21 200.67 T -(f) 231.6 200.67 T -(de) 262.21 200.67 T -(vice not found) 272.32 200.67 T -(de) 462.32 200.67 T -(vice ID) 472.43 200.67 T -(XkbErr_BadClass) 109.21 186.67 T -(0xfe) 217.21 186.67 T -(de) 262.21 186.67 T -(vice found, b) 272.32 186.67 T -(ut it is of the wrong class) 329.84 186.67 T -(class ID) 462.32 186.67 T -(XkbErr_BadId) 109.21 172.67 T -(0xfd) 217.21 172.67 T -(de) 262.21 172.67 T -(vice found, class ok, b) 272.32 172.67 T -(ut de) 370.47 172.67 T -(vice does not) 391.89 172.67 T -(contain a feedback with the indicated ID) 262.21 161.67 T -(feedback ID) 462.32 172.67 T -108 481 540 481 2 L -V -0.5 H -0 Z -N -108 464 540 464 2 L -V -N -108.21 227 539.79 227 2 L -V -N -108.21 210 539.79 210 2 L -V -N -FMENDPAGE -%%EndPage: "9" 21 -%%Page: "10" 22 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(10) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T --0.39 (2 Initialization and General Programming) 350.58 744.87 P -5 12 Q --0.6 (BadMatch) 108 712 S -2 F -( error is returned \050either in the return value or a backfilled) 160.8 712 T -5 F --0.6 (Status) 441.39 712 S -2 F -( variable\051.) 480.99 712 T -(Upon successful return, the) 108 699 T -1 F -(dpy) 242.3 699 T -2 F -( field of the) 259.63 699 T -5 F --0.6 (XkbDescRec) 318.29 699 S -2 F -( always contains the Display*) 384.29 699 T -(value passed in.) 108 686 T -(The Xkb extension can communicate with the X input extension if it is present. Conse-) 108 665 T --0.24 (quently, there can potentially be more than one input device connected to the server. Most) 108 652 P --0.28 (Xkb library calls that require communicating with the server involve both a server connec-) 108 639 P --0.09 (tion \050Display *) 108 626 P -1 F --0.09 (dpy) 182.72 626 P -2 F --0.09 (\051 and a device identifier \050unsigned int) 200.05 626 P -1 F --0.09 (de) 382.36 626 P --0.09 (vice_spec) 393.51 626 P -2 F --0.09 (\051. In some cases, the) 440.16 626 P --0.09 (device identifier is implicit and is taken as the) 108 613 P -1 F --0.09 (device_spec) 330.83 613 P -2 F --0.09 ( field of an) 388.8 613 P -5 F --0.2 -0.6 (XkbDescRec) 443.77 613 B -2 F --0.09 ( struc-) 509.77 613 P -(ture passed as an argument.) 108 600 T --0.09 (The device identifier can specify any X input extension device with a) 108 579 P -5 F --0.22 (KeyClass) 442.83 579 P -2 F --0.09 ( compo-) 500.43 579 P -(nent, or it can specify the constant,) 108 566 T -5 F --0.6 (XkbUseCoreKbd) 278.3 566 S -2 F -(. The use of) 364.11 566 T -5 F --0.6 (XkbUseCoreKbd) 423.76 566 S -2 F -(allows applications to indicate the core keyboard without having to determine its device) 108 553 T -(identifier.) 108 540 T -(Where an Xkb device identifier is passed as an argument and an) 108 519 T -5 F --0.6 (XkbDescPtr) 418.58 519 S -2 F -( is also) 484.58 519 T -(passed as an argument, if either the argument or the) 108 506 T -5 F --0.6 (XkbDescRec) 358.94 506 S -1 F -(de) 427.95 506 T -(vice_spec) 439.09 506 T -2 F -( field is) 485.74 506 T -5 F --0.6 (XkbUseCoreKbd) 108 493 S -2 F -(, and if the function returns successfully, the) 193.8 493 T -5 F --0.6 (XkbDescPtr) 409.77 493 S -1 F -(device_spec) 478.77 493 T -2 F --0.25 (field will have been converted from) 108 480 P -5 F --0.54 -0.6 (XkbUseCoreKbd) 281.14 480 B -2 F --0.25 ( to a real Xkb device ID. If the func-) 366.95 480 P -(tion does not complete successfully, the) 108 467 T -1 F -(device_spec) 302.32 467 T -2 F -( field remains unchanged. Subse-) 360.29 467 T -(quently, the device id argument must match the) 108 454 T -1 F -(de) 338.98 454 T -(vice_spec) 350.12 454 T -2 F -( field of the) 396.77 454 T -5 F --0.6 (XkbDescPtr) 455.42 454 S -2 F -0 (argument. If they don\325t match, a) 108 441 P -5 F -0 -0.6 (BadMatch) 265.95 441 B -2 F -0 ( error is returned \050either in the return value or) 318.76 441 P -(a backfilled) 108 428 T -5 F --0.6 (Status) 167.32 428 S -2 F -( variable\051.) 206.92 428 T -(When the Xkb extension in the server hands an application a device identifier to use for) 108 407 T -(the keyboard, that ID is the input extension identifier for the device if the server supports) 108 394 T -(the X Input Extension. If the server does not support the input extension, the meaning of) 108 381 T -(the identifier is undefined \321 the only guarantee is that when you use) 108 368 T -5 F --0.6 (XkbUseCoreKbd) 442.28 368 S -2 F -(,) 528.09 368 T -5 F --0.01 -0.6 (XkbUseCoreKbd) 108 355 B -2 F -0 ( will work and the identifier returned by the server will refer to the core) 193.8 355 P -(keyboard device.) 108 342 T -FMENDPAGE -%%EndPage: "10" 22 -%%Page: "11" 23 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(11) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(3 Data Structures) 458.13 744.87 T -0 14 Q -(3) 72 710.67 T -(Data Structures) 108 710.67 T -2 12 Q -(An Xkb keyboard description consists of a variety of data structures, each of which) 108 688 T -(describes some aspect of the keyboard. Although each data structure has its own peculiar-) 108 675 T -(ities, there are a number of features common to nearly all Xkb structures. This chapter) 108 662 T -(describes these common features and techniques for manipulating them.) 108 649 T -(Many Xkb data structures are interdependent; changing a field in one might require) 108 628 T -(changes to others. As an additional complication, some Xkb library functions allocate) 108 615 T -(related components as a group to reduce fragmentation and allocator overhead. In these) 108 602 T -(cases, simply allocating and freeing fields of Xkb structures might corrupt program mem-) 108 589 T -(ory. Creating and destroying such structures or keeping them properly synchronized dur-) 108 576 T -(ing editing is complicated and error prone.) 108 563 T -(Xkb provides functions and macros to allocate and free all major data structures. You) 108 542 T -(should use them instead of allocating and freeing the structures yourself.) 108 529 T -0 F -(3.1) 72 504 T -(Allocating Xkb Data Structures) 108 504 T -2 F -(Xkb provides functions, known as allocators, to create and initialize Xkb data structures.) 108 484 T --0.13 (In most situations, the Xkb functions that read a keyboard description from the server call) 108 471 P --0.14 (these allocators automatically. As a result, you will seldom have to directly allocate or ini-) 108 458 P -(tialize Xkb data structures.) 108 445 T -(However, if you need to enlarge an existing structure or construct a keyboard definition) 108 424 T -(from scratch, you may need to allocate and initialize Xkb data structures directly. Each) 108 411 T -(major Xkb data structure has its own unique allocator. The allocator functions share com-) 108 398 T --0.12 (mon features: allocator functions for structures with optional components take as an input) 108 385 P --0.13 (argument a mask of subcomponents to be allocated. Allocators for data structures contain-) 108 372 P -(ing variable-length data take an argument specifying the initial length of the data.) 108 359 T -(You may call an allocator to change the size of the space allocated for variable-length) 108 338 T -(data. When you call an allocator with an existing data structure as a parameter, the alloca-) 108 325 T -(tor does not change the data in any of the fields, with one exception: variable-length data) 108 312 T -(might be moved. The allocator resizes the allocated memory if the current size is too) 108 299 T --0.13 (small. This normally involves allocating new memory, copying existing data to the newly) 108 286 P -(allocated memory, and freeing the original memory. This possible reallocation is impor-) 108 273 T --0.09 (tant to note because local variables pointing into Xkb data structures might be invalidated) 108 260 P -(by calls to allocator functions.) 108 247 T -0 F -(3.2) 72 222 T -(Ad) 108 222 T -(ding Data and Editing Data Structures) 123.88 222 T -2 F -(You should edit most data structures via the Xkb-supplied helper functions and macros,) 108 202 T -(although a few data structures can be edited directly. The helper functions and macros) 108 189 T -(make sure everything is initialized and interdependent values are properly updated for) 108 176 T -(those Xkb structures that have interdependencies. As a general rule, if there is a helper) 108 163 T -(function or macro to edit the data structure, use it. For example, increasing the width of a) 108 150 T -(type requires you to resize every key that uses that type. This is complicated and ugly,) 108 137 T -(which is why there\325s an) 108 124 T -1 F -(XkbResizeK) 224.98 124 T -(e) 281.88 124 T -(yT) 286.85 124 T -(ype) 297.96 124 T -2 F -( function.) 314.62 124 T --0.2 (Many Xkb data structures have arrays whose size is reported by two fields. The first field,) 108 103 P --0.35 (whose name is usually prefixed by) 108 90 P -1 F --0.35 (sz_) 275.21 90 P -2 F --0.35 (, represents the total number of elements that can be) 290.55 90 P -(stored in the array. The second field, whose name is usually prefixed by) 108 77 T -1 F -(num_) 456.26 77 T -2 F -(, specifies) 482.93 77 T -FMENDPAGE -%%EndPage: "11" 23 -%%Page: "12" 24 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(12) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(3 Data Structures) 458.13 744.87 T -2 12 Q --0.4 (the number of elements currently stored there. These arrays typically represent data whose) 108 712 P -(total size cannot always be determined when the array is created. In these instances, the) 108 699 T -(usual way to allocate space and add data is as follows:) 108 686 T -2 11 Q -(\245) 126 665.67 T -(Call the allocator function with some arbitrary size, as a hint.) 139.68 665.67 T -(\245) 126 653.67 T -(F) 139.68 653.67 T -(or those arrays that ha) 145.63 653.67 T -(v) 242.55 653.67 T -(e an) 247.89 653.67 T -1 F -(Xkb) 268.65 653.67 T -(...Add...) 285.32 653.67 T -2 F -( function, call it each time you w) 319.54 653.67 T -(ant to add) 464.25 653.67 T -(ne) 139.68 641.67 T -(w data to the array) 149.79 641.67 T -(. The function e) 230.94 641.67 T -(xpands the array if necessary) 300.42 641.67 T -(.) 427.39 641.67 T -2 12 Q -(For example, call:) 108 623 T -(XkbAllocGeomShapes\050geom,4\051) 108 602 T -(to say \322I\325ll need space for four new shapes in this geometry.\323 This makes sure that) 108 581 T -1 F -(sz_shapes) 108 568 T -2 F -( -) 156 568 T -1 F -(num_shapes) 166 568 T -2 F -( >= 4, and resizes the shapes array if it isn\325t. If this function suc-) 225.32 568 T -(ceeds, you are guaranteed to have space for the number of shapes you need.) 108 555 T -(When you call an editing function for a structure, you do not need to check for space,) 108 534 T --0.26 (because the function automatically checks the) 108 521 P -1 F --0.26 (sz_) 329.72 521 P -2 F --0.26 ( and) 345.06 521 P -1 F --0.26 (num_) 367.87 521 P -2 F --0.26 ( fields of the array, resizes the) 394.53 521 P -(array if necessary, adds the entry to the array, and then updates the) 108 508 T -1 F -(num_) 430.91 508 T -2 F -( field.) 457.57 508 T -0 F -(3.3) 72 483 T -(Making Chang) 108 483 T -(es to the Ser) 190.13 483 T -(ver\325) 262.27 483 T -(s K) 282.9 483 T -(e) 301.39 483 T -(yboar) 307.88 483 T -(d Description) 340.32 483 T -2 F -(In Xkb, as in the core protocol, the client and server have independent copies of the data) 108 463 T --0.49 (structures that describe the keyboard. The recommended way to change some aspect of the) 108 450 P -(keyboard mapping in the X server is to edit a local copy of the Xkb keyboard description) 108 437 T -(and then send only the changes to the X server. This method helps eliminate the need to) 108 424 T -(transfer the entire keyboard description or even an entire data structure for only minor) 108 411 T -(changes.) 108 398 T -(To help you keep track of the changes you make to a local copy of the keyboard descrip-) 108 377 T --0.07 (tion, Xkb provides separate special) 108 364 P -1 F --0.07 (c) 278.95 364 P --0.07 (hang) 284.09 364 P --0.07 (es) 307.97 364 P -2 F --0.07 ( data structures for each major Xkb data struc-) 317.97 364 P --0.31 (ture. These data structures do not contain the actual changed values: they only indicate the) 108 351 P -(changes that have been made to the structures that actually describe the keyboard.) 108 338 T -(When you wish to change the keyboard description in the server, you first modify a local) 108 317 T -(copy of the keyboard description and then flag the modifications in an appropriate) 108 304 T -(changes data structure. When you finish editing the local copy of the keyboard descrip-) 108 291 T -(tion, you pass your modified version of the keyboard description and the modified) 108 278 T -(changes data structure to an Xkb function. This function uses the modified keyboard) 108 265 T --0.26 (description and changes structure to pass only the changed information to the server. Note) 108 252 P -(that modifying the keyboard description but not setting the appropriate flags in the) 108 239 T -(changes data structure causes indeterminate behavior.) 108 226 T -0 F -(3.4) 72 201 T -(T) 108 201 T -(rac) 114.37 201 T -(king K) 132.14 201 T -(e) 168.64 201 T -(yboar) 175.13 201 T -(d Chang) 207.56 201 T -(es in the Ser) 255.68 201 T -(ver) 327.17 201 T -2 F -(The server reports all changes in its keyboard description to any interested clients via spe-) 108 181 T --0.13 (cial Xkb events. Just as clients use special changes data structures to change the keyboard) 108 168 P -(description in the server, the server uses special changes data structures to tell a client) 108 155 T -(what changed in the server\325s keyboard description.) 108 142 T -(Unlike clients, however, the server does not always pass the new values when it reports) 108 121 T -(changes to its copy of the keyboard description. Instead, the server only passes a changes) 108 108 T -(data structure when it reports changes to its keyboard description. This is done for effi-) 108 95 T -(ciency reasons \321 some clients do not always need to update their copy of the keyboard) 108 82 T -(description with every report from the server.) 108 69 T -FMENDPAGE -%%EndPage: "12" 24 -%%Page: "13" 25 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(13) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(3 Data Structures) 458.13 744.87 T -2 12 Q -(When your client application receives a report from the server indicating the keyboard) 108 712 T -(description has changed, you can determine the set of changes by passing the event to an) 108 699 T -(Xkb function that \322notes\323 event information in the corresponding changes data structure.) 108 686 T -(These \322note changes\323 functions are defined for all major Xkb components, and their) 108 673 T -(names have the form) 108 660 T -1 F -(XkbNote{Component}Chang) 211.31 660 T -(es) 349.45 660 T -2 F -(, where) 359.45 660 T -1 F -(Component) 397.76 660 T -2 F -( is the name of a) 453.1 660 T --0.43 (major Xkb component such as) 108 647 P -1 F --0.43 (Map) 254.82 647 P -2 F --0.43 ( or) 276.81 647 P -1 F --0.43 (Names) 291.94 647 P -2 F --0.43 (. When you want to copy these changes from) 324.61 647 P -(the server into a local copy of the keyboard description, use the corresponding) 108 634 T -1 F -(Xkb-) 486.59 634 T -(Get{Component}Chang) 108 621 T -(es) 222.14 621 T -2 F -( function) 232.14 621 T -1 F -(,) 275.14 621 T -2 F -(passing it the changes structure. The function then) 281.14 621 T -(retrieves only the changed structures from the server and copies the modified pieces into) 108 608 T -(the local keyboard description.) 108 595 T -0 F -(3.5) 72 570 T -(Freeing Data Structures) 108 570 T -2 F -(For the same reasons you should not directly use) 108 550 T -1 F -(malloc) 344.98 550 T -2 F -( to allocate Xkb data structures,) 377.64 550 T -(you should not free Xkb data structures or components directly using) 108 537 T -1 F -(fr) 442.96 537 T -(ee) 450.52 537 T -2 F -( or) 461.17 537 T -1 F -(Xfr) 477.17 537 T -(ee) 492.06 537 T -2 F -(. Xkb) 502.72 537 T -(provides functions to free the various data structures and their components.) 108 524 T -508.6 522.8 471.94 522.8 2 L -V -0.6 H -0 Z -N -(Always) 471.94 524 T -( use) 508.6 524 T -(the free functions supplied by Xkb. There is no guarantee that any particular field can be) 108 511 T -(safely freed by) 108 498 T -1 F -(fr) 182.3 498 T -(ee) 189.86 498 T -2 F -( or) 200.52 498 T -1 F -(Xfr) 216.52 498 T -(ee) 231.41 498 T -2 F -(.) 242.06 498 T -FMENDPAGE -%%EndPage: "13" 25 -%%Page: "14" 26 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(14) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(4 Xkb Ev) 474.78 744.87 T -(ents) 522.28 744.87 T -0 14 Q -(4) 72 710.67 T -(Xkb Events) 108 710.67 T -2 12 Q --0.02 (The primary way the X server communicates with clients is by sending X events to them.) 108 688 P --0.31 (Some events are sent to all clients, while others are sent only to clients that have requested) 108 675 P -(them. Some of the events that can be requested are associated with a particular window) 108 662 T --0.2 (and are only sent to those clients who have both requested the event and specified the win-) 108 649 P -(dow in which the event occurred.) 108 636 T -(The Xkb extension uses events to communicate the keyboard status to interested clients.) 108 615 T --0.38 (These events are not associated with a particular window. Instead, all Xkb keyboard status) 108 602 P -(events are reported to all interested clients, regardless of which window currently has the) 108 589 T -(keyboard focus and regardless of the grab state of the keyboard.) 108 576 T -2 9.6 Q -(1) 414.91 580.8 T -2 12 Q -(The X server reports the events defined by the Xkb extension to your client application) 108 555 T --0.21 (only if you have requested them. You may request Xkb events by calling either) 108 542 P -1 F --0.21 (XkbSelect-) 488.69 542 P --0.54 (Events) 108 529 P -2 F --0.54 (or) 142.46 529 P -1 F --0.54 (XkbSelectEventDetails) 154.91 529 P -2 F --0.54 (.) 264.22 529 P -1 F --0.54 (XkbSelectEvents) 269.69 529 P -2 F --0.54 ( requests Xkb events by their event type) 348.99 529 P --0.35 (and causes them to be reported to your client application under all circumstances. You can) 108 516 P --0.33 (specify a finer granularity for event reporting by using) 108 503 P -1 F --0.33 (XkbSelectEventDetails) 369.33 503 P -2 F --0.33 (; in this case) 478.64 503 P -(events are reported only when the specific detail conditions you specify have been met.) 108 490 T -0 F -(4.1) 72 465 T -(Xkb Event T) 108 465 T -(ypes) 175.97 465 T -2 F --0.06 (The Xkb Extension adds new event types to the X protocol definition. An Xkb event type) 108 445 P -(is defined by two fields in the X event data structure. One is the) 108 432 T -1 F -(type) 416.95 432 T -2 F -( field, containing the) 436.94 432 T -1 F -(base e) 108 419 T -(vent code) 138.14 419 T -(.) 183.61 419 T -2 F -( This base event code is a value the X server assigns to each X extension) 186.61 419 T --0.26 (at runtime and thatidentifies the extension that generated the event; thus, the event code in) 108 406 P -(the) 108 393 T -1 F -(type) 125.66 393 T -2 F -( field identifies the event as an Xkb extension event, rather than an event from) 145.66 393 T --0.38 (another extension or a core X protocol event. You can obtain the base event code via a call) 108 380 P --0.28 (to) 108 367 P -1 F --0.28 (XkbQueryExtension) 120.06 367 P -2 F --0.28 ( or) 216.04 367 P -1 F --0.28 (XkbOpenDisplay) 231.48 367 P -2 F --0.28 (. The second field is the Xkb event type, which) 313.46 367 P -(contains a value uniquely identifying each different Xkb event type. Possible values are) 108 354 T -(defined by constants declared in the header file) 108 341 T -1 F -(.) 337.27 341 T -2 F --0.2 (Table 4.1 lists the categories of events defined by Xkb and their associated event types, as) 108 320 P -(defined in) 108 307 T -1 F -(Xkb) 159.32 307 T -(.h) 177.5 307 T -2 F -(. Each event is described in more detail in the section referenced for that) 186.5 307 T -(event.) 108 294 T -72 90 540 110 C -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 98 204 98 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -0 0 612 792 C -2 10 Q -0 X -0 0 0 1 0 0 0 K -(1.) 72 83.33 T -(The one exception to this rule is the) 84.5 83.33 T -5 F --0.5 (XkbExtensionDeviceNotify) 230.04 83.33 S -2 F -( event report that is sent when a client) 362.04 83.33 T -(attempts to use an unsupported feature of an X Input Extension device \050see section 21.4\051.) 72 71.33 T -3 12 Q -(T) 262.8 274 T -(able 4.1 Xkb Ev) 269.7 274 T -(ent T) 353.92 274 T -(ypes) 380.04 274 T -1 F -(Event T) 109 254 T -(ype) 145.11 254 T -(Conditions Gener) 260.5 254 T -(ating Event) 345.99 254 T -(Section) 454.75 254 T -(P) 499.75 254 T -(a) 506.12 254 T -(g) 512 254 T -(e) 517.88 254 T -5 11 Q --0.33 (XkbNewKeyboardNotify) 109 239.67 S -2 F -(K) 260.5 239.67 T -(e) 268.17 239.67 T -(yboard geometry; k) 272.89 239.67 T -(e) 358.93 239.67 T -(ycode range change) 363.65 239.67 T -(19) 454.75 239.67 T -(187) 499.75 239.67 T -5 F --0.33 (XkbMapNotify) 109 225.67 S -2 F -(K) 260.5 225.67 T -(e) 268.17 225.67 T -(yboard mapping change) 272.89 225.67 T -(14.4) 454.75 225.67 T -(122) 499.75 225.67 T -5 F --0.33 (XkbStateNotify) 109 211.67 S -2 F -(K) 260.5 211.67 T -(e) 268.17 211.67 T -(yboard state change) 272.89 211.67 T -(5.4) 454.75 211.67 T -(25) 499.75 211.67 T -5 F --0.33 (XkbControlsNotify) 109 197.67 S -2 F -(K) 260.5 197.67 T -(e) 268.17 197.67 T -(yboard controls state change) 272.89 197.67 T -(10.11) 454.75 197.67 T -(79) 499.75 197.67 T -5 F --0.33 (XkbIndicatorStateNotify) 109 183.67 S -2 F -(K) 260.5 183.67 T -(e) 268.17 183.67 T -(yboard indicators state change) 272.89 183.67 T -(8.5) 454.75 183.67 T -(45) 499.75 183.67 T -5 F --0.33 (XkbIndicatorMapNotify) 109 169.67 S -2 F -(K) 260.5 169.67 T -(e) 268.17 169.67 T -(yboard indicators map change) 272.89 169.67 T -(8.5) 454.75 169.67 T -(45) 499.75 169.67 T -5 F --0.33 (XkbNamesNotify) 109 155.67 S -2 F -(K) 260.5 155.67 T -(e) 268.17 155.67 T -(yboard name change) 272.89 155.67 T -(18.5) 454.75 155.67 T -(185) 499.75 155.67 T -5 F --0.33 (XkbCompatMapNotify) 109 141.67 S -2 F -(K) 260.5 141.67 T -(e) 268.17 141.67 T -(yboard compatibility map change) 272.89 141.67 T -(17.5) 454.75 141.67 T -(178) 499.75 141.67 T -5 F --0.33 (XkbBellNotify) 109 127.67 S -2 F -(K) 260.5 127.67 T -(e) 268.17 127.67 T -(yboard bell generated) 272.89 127.67 T -(9.4) 454.75 127.67 T -(52) 499.75 127.67 T -108 266 543.75 266 2 L -V -0.5 H -0 Z -N -108 249 543.75 249 2 L -V -N -FMENDPAGE -%%EndPage: "14" 26 -%%Page: "15" 27 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(15) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(4 Xkb Ev) 474.78 744.87 T -(ents) 522.28 744.87 T -0 12 Q -(4.2) 72 625 T -(Xkb Event Data Structures) 108 625 T -2 F --0.29 (Xkb reports each event it generates in a unique structure holding the data values needed to) 108 605 P --0.38 (describe the conditions the event is reporting. However, all Xkb events have certain things) 108 592 P -(in common. These common features are contained in the same fields at the beginning of) 108 579 T -(all Xkb event structures and are described in the) 108 566 T -5 F --0.6 (XkbAnyEvent) 342.28 566 S -2 F -( structure:) 414.88 566 T -2 11 Q -(typedef struct {) 126 545.67 T -(int) 144 532.67 T -(type;) 234 532.67 T -(/* Xkb e) 297 532.67 T -(xtension base e) 334.72 532.67 T -(v) 401.65 532.67 T -(ent code */) 406.99 532.67 T -(unsigned long) 144 519.67 T -(serial;) 234 519.67 T -(/* X serv) 297 519.67 T -(er serial number for e) 337.16 519.67 T -(v) 431.57 519.67 T -(ent */) 436.91 519.67 T -(Bool) 144 506.67 T -(send_e) 234 506.67 T -(v) 264.27 506.67 T -(ent;) 269.61 506.67 T -(/*) 297 506.67 T -5 12 Q --0.6 (True) 308.31 506.67 S -2 11 Q -( => synthetically generated */) 334.71 506.67 T -(Display *) 144 493.67 T -(display;) 234 493.67 T -(/* serv) 297 493.67 T -(er connection where e) 326.47 493.67 T -(v) 423.02 493.67 T -(ent generated */) 428.35 493.67 T -(T) 144 480.67 T -(ime) 150.34 480.67 T -(time;) 234 480.67 T -(/* serv) 297 480.67 T -(er time when e) 326.47 480.67 T -(v) 391.26 480.67 T -(ent generated */) 396.59 480.67 T -(int) 144 467.67 T -(xkb_type;) 234 467.67 T -(/* Xkb minor e) 297 467.67 T -(v) 363.64 467.67 T -(ent code */) 368.97 467.67 T -(unsigned int) 144 454.67 T -(de) 234 454.67 T -(vice;) 244.11 454.67 T -(/* Xkb de) 297 454.67 T -(vice ID, will not be) 340.11 454.67 T -5 F --0.33 (XkbUseCoreKbd) 428.1 454.67 S -2 F -( */) 509.61 454.67 T -(}) 126 441.67 T -3 F -(XkbAnyEv) 134.03 441.67 T -(ent) 186.49 441.67 T -2 F -(;) 201.15 441.67 T -2 12 Q -(For any Xkb event, the) 108 422 T -1 F -(type) 221.32 422 T -2 F -( field is set to the base event code for the Xkb extension,) 241.31 422 T -(assigned by the server to all Xkb extension events. The) 108 409 T -1 F -(serial) 375.62 409 T -2 F -(,) 402.96 409 T -1 F -(send_event) 408.96 409 T -2 F -(, and) 462.28 409 T -1 F -(display) 488.6 409 T -2 F -(fields are as described for all X11 events. The) 108 396 T -1 F -(time) 331.27 396 T -2 F -( field is set to the time when the event) 351.94 396 T -(was generated and is expressed in milliseconds. The) 108 383 T -1 F -(xkb_type) 361.62 383 T -2 F -( field contains the minor) 404.27 383 T -(extension event code, which is the extension event type, and is one of the values listed in) 108 370 T -(Table 4.1. The) 108 357 T -1 F -(device) 180.98 357 T -2 F -( field contains the keyboard device identifier associated with the) 211.63 357 T -(event. This is never) 108 344 T -5 F --0.6 (XkbUseCoreKbd) 204.98 344 S -2 F -(, even if the request that generated the event speci-) 290.79 344 T -(fied a device of) 108 331 T -5 F --0.6 (XkbUseCoreKbd) 185.3 331 S -2 F -(. If the request that generated the event specified) 271.11 331 T -5 F --0.6 (XkbUseCoreKbd) 108 318 S -2 F -(,) 193.8 318 T -1 F -(device) 199.8 318 T -2 F -( contains a value assigned by the server to specify the core key-) 230.45 318 T --0.33 (board. If the request that generated the event specified an X input extension device,) 108 305 P -1 F --0.33 (device) 506.68 305 P -2 F -(contains that same identifier.) 108 292 T -(Other data fields specific to individual Xkb events are described in subsequent chapters) 108 271 T -(where the events are described.) 108 258 T -0 F -(4.3) 72 233 T -(Selecting Xkb Events) 108 233 T -2 F -(Xkb events are selected using an event mask, much the same as normal core X events are) 108 213 T -(selected. However, unlike selecting core X events, where you must specify the selection) 108 200 T -(status \050on or off\051 for all possible event types whenever you wish to change the selection) 108 187 T -(criteria for any one event, Xkb allows you to restrict the specification to only the event) 108 174 T -(types you wish to change. This means that you do not need to remember the event selec-) 108 161 T -(tion values for all possible types each time you want to change one of them.) 108 148 T -(Many Xkb event types are generated under several different circumstances. When select-) 108 127 T -(ing to receive an Xkb event, you may specify either that you want it delivered under all) 108 114 T -(circumstances, or that you want it delivered only for a subset of the possible circum-) 108 101 T -(stances.) 108 88 T -5 11 Q --0.33 (XkbActionMessage) 109 677.67 S -2 F -(K) 260.5 677.67 T -(e) 268.17 677.67 T -(yboard action message) 272.89 677.67 T -(16.1.11) 454.75 677.67 T -(155) 499.75 677.67 T -5 F --0.33 (XkbAccessXNotify) 109 663.67 S -2 F -(AccessX state change) 260.5 663.67 T -(10.6.4) 454.75 663.67 T -(65) 499.75 663.67 T -5 F --0.33 (XkbExtensionDeviceNotify) 109 649.67 S -2 F -(Extension de) 260.5 649.67 T -(vice change) 317.36 649.67 T -(21.6) 454.75 649.67 T -(207) 499.75 649.67 T -3 12 Q -(T) 262.8 712 T -(able 4.1 Xkb Ev) 269.7 712 T -(ent T) 353.92 712 T -(ypes) 380.04 712 T -1 F -(Event T) 109 692 T -(ype) 145.11 692 T -(Conditions Gener) 260.5 692 T -(ating Event) 345.99 692 T -(Section) 454.75 692 T -(P) 499.75 692 T -(a) 506.12 692 T -(g) 512 692 T -(e) 517.88 692 T -108 704 543.75 704 2 L -V -0.5 H -0 Z -N -108 687 543.75 687 2 L -V -N -FMENDPAGE -%%EndPage: "15" 27 -%%Page: "16" 28 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(16) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(4 Xkb Ev) 474.78 744.87 T -(ents) 522.28 744.87 T -2 12 Q -(You can also deselect an event type that was previously selected for, using the same gran-) 108 712 T -(ularity.) 108 699 T -(Xkb provides two functions to select and deselect delivery of Xkb events.) 108 678 T -1 F -(XkbSelect-) 464.94 678 T -(Events) 108 665 T -2 F -( allows you to select or deselect delivery of more than one Xkb event type at once.) 139.99 665 T -(Events selected using) 108 652 T -1 F -(XkbSelectEvents) 214.32 652 T -2 F -( are delivered to your program under all circum-) 293.63 652 T -(stances that generate the events. To restrict delivery of an event to a subset of the condi-) 108 639 T -(tions under which it occurs, use) 108 626 T -1 F -(XkbSelectEventDetails) 262.98 626 T -2 F -(.) 372.29 626 T -1 F -(XkbSelectEventDetails) 378.29 626 T -2 F -( only) 487.6 626 T --0.16 (allows you to change the selection conditions for a single event at a time, but it provides a) 108 613 P -(means of fine-tuning the conditions under which the event is delivered.) 108 600 T --0.4 (To select and / or deselect for delivery of one or more Xkb events and have them delivered) 108 579 P -(under all conditions, use) 108 566 T -1 F -(XkbSelectEvents) 228.32 566 T -2 F -(.) 307.63 566 T -2 11 Q -(Bool) 108 545.67 T -3 F -(XkbSelectEv) 132.15 545.67 T -(ents) 192.54 545.67 T -2 F -(\050) 211.48 545.67 T -1 F -(display) 215.14 545.67 T -(, de) 246.31 545.67 T -(vice_spec, bits_to_c) 262.03 545.67 T -(hang) 350.46 545.67 T -(e) 372.35 545.67 T -(, values_for_bits) 377.13 545.67 T -2 F -(\051) 450.46 545.67 T -(Display *) 126 532.67 T -1 F -(display) 207 532.67 T -2 F -(;) 238.78 532.67 T -(/* connection to the X serv) 279 532.67 T -(er */) 397.68 532.67 T -(unsigned int) 126 519.67 T -1 F -(de) 207 519.67 T -(vice_spec) 217.22 519.67 T -2 F -(;) 259.98 519.67 T -(/* de) 279 519.67 T -(vice ID, or) 300.42 519.67 T -5 F --0.55 (XkbUseCoreKbd) 350.51 519.67 S -2 F -( */) 429.16 519.67 T -(unsigned long int) 126 506.67 T -1 F -(bits_to_c) 207 506.67 T -(hang) 247.17 506.67 T -(e;) 269.06 506.67 T -2 F -(/* determines e) 279 506.67 T -(v) 345.93 506.67 T -(ents to be selected / deselected */) 351.27 506.67 T -(unsigned long int) 126 493.67 T -1 F -(values_for_bits) 207 493.67 T -2 F -(;) 274.84 493.67 T -(/* 1=>select, 0->deselect; for e) 279 493.67 T -(v) 415.55 493.67 T -(ents in) 420.89 493.67 T -1 F -(bits_to_c) 452.67 493.67 T -(hang) 492.84 493.67 T -(e) 514.73 493.67 T -2 F -( */) 519.61 493.67 T -2 12 Q -(This request changes the Xkb event selection mask for the keyboard specified by) 108 474 T -1 F -(de) 108 461 T -(vice_spec) 119.15 461 T -2 F -(.) 165.79 461 T -(Each Xkb event that can be selected is represented by a bit in the) 108 440 T -1 F -(bits_to_c) 422.59 440 T -(hang) 466.42 440 T -(e) 490.3 440 T -2 F -( and) 495.62 440 T -1 F -(values_for_bits) 108 427 T -2 F -( masks. Only the event selection bits specified by the) 182 427 T -1 F -(bits_to_c) 439.64 427 T -(hang) 483.47 427 T -(e) 507.35 427 T -2 F --0.25 (parameter are affected; any unspecified bits are left unchanged. To turn on event selection) 108 414 P -(for an event, set the bit for the event in the) 108 401 T -1 F -(bits_to_c) 314.63 401 T -(hang) 358.45 401 T -(e) 382.33 401 T -2 F -( parameter and set the corre-) 387.66 401 T --0.11 (sponding bit in the) 108 388 P -1 F --0.11 (values_for_bits) 200.25 388 P -2 F --0.11 ( parameter. To turn off event selection for an event, set) 274.25 388 P -(the bit for the event in the) 108 375 T -1 F -(bits_to_c) 234.98 375 T -(hang) 278.81 375 T -(e) 302.69 375 T -2 F -( parameter and do not set the corresponding bit) 308.02 375 T -(in the) 108 362 T -1 F -(values_for_bits) 138 362 T -2 F -( parameter. The valid values for both of these parameters are an) 212 362 T --0.25 (inclusive bitwise OR of the masks shown in Table 4.2. There is no interface to return your) 108 349 P -(client\325s current event selection mask. Clients cannot set other clients\325 event selection) 108 336 T -(masks.) 108 323 T -(If a bit is not set in the) 108 302 T -1 F -(bits_to_c) 218.66 302 T -(hang) 262.49 302 T -(e) 286.37 302 T -2 F -( parameter, but the corresponding bit is set in the) 291.7 302 T -1 F --0.1 (values_for_bits) 108 289 P -2 F --0.1 ( parameter, a) 182 289 P -5 F --0.22 -0.6 (BadMatch) 247.01 289 B -2 F --0.1 ( protocol error results. If an undefined bit is set in) 299.81 289 P -(either the) 108 276 T -1 F -(bits_to_c) 155.99 276 T -(hang) 199.81 276 T -(e) 223.69 276 T -2 F -( or the) 229.02 276 T -1 F -(values_for_bits) 262.68 276 T -2 F -( parameter, a) 336.68 276 T -5 F --0.6 (BadValue) 401.99 276 S -2 F -( protocol error) 454.79 276 T -(results.) 108 263 T --0.14 (All event selection bits are initially zero for clients using the Xkb extension. Once you set) 108 242 P -(some bits, they remain set for your client until you clear them via another call to) 108 229 T -1 F -(XkbSe-) 496.28 229 T -(lectEvents) 108 216 T -2 F -(.) 157.32 216 T -1 F -(XkbSelectEvents) 108 195 T -2 F -( returns) 187.31 195 T -5 F --0.6 (False) 226.63 195 S -2 F -( if the Xkb extension has not been initilialized and) 259.63 195 T -5 F --0.6 (True) 504.28 195 S -2 F -(otherwise.) 108 182 T -(To select or deselect for a specific Xkb event and optionally place conditions on when) 108 161 T --0.28 (events of that type are reported to your client, use) 108 148 P -1 F --0.28 (XkbSelectEventDetails) 346.14 148 P -2 F --0.28 (. This allows you) 455.45 148 P -FMENDPAGE -%%EndPage: "16" 28 -%%Page: "17" 29 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(17) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(4 Xkb Ev) 474.78 744.87 T -(ents) 522.28 744.87 T -2 12 Q -(to exercise a finer granularity of control over delivery of Xkb events with) 108 712 T -1 F -(XkbSelect-) 463.58 712 T -(Events) 108 699 T -2 F -(.) 139.99 699 T -2 11 Q -(Bool) 108 678.67 T -3 F -(XkbSelectEv) 132.15 678.67 T -(entDetails) 192.54 678.67 T -2 F -(\050) 239.58 678.67 T -1 F -(display) 243.24 678.67 T -(, de) 274.42 678.67 T -(vice_spec, e) 290.14 678.67 T -(vent_type) 343.11 678.67 T -(, bits_to_c) 385.16 678.67 T -(hang) 430.83 678.67 T -(e) 452.72 678.67 T -2 F -(,) 457.6 678.67 T -1 F -(values_for_bits) 463.1 678.67 T -2 F -(\051) 530.94 678.67 T -(Display *) 126 665.67 T -1 F -(display) 207 665.67 T -2 F -(;) 238.78 665.67 T -(/* connection to the X serv) 279 665.67 T -(er */) 397.68 665.67 T -(unsigned int) 126 652.67 T -1 F -(de) 207 652.67 T -(vice_spec) 217.22 652.67 T -2 F -(;) 259.98 652.67 T -(/* de) 279 652.67 T -(vice ID, or) 300.42 652.67 T -5 F --0.55 (XkbUseCoreKbd) 350.51 652.67 S -2 F -( */) 429.16 652.67 T -(unsigned int) 126 639.67 T -1 F -(e) 207 639.67 T -(vent_type) 211.72 639.67 T -2 F -(;) 253.87 639.67 T -(/* Xkb e) 279 639.67 T -(v) 316.61 639.67 T -(ent type of interest */) 321.94 639.67 T -(unsigned long int) 126 626.67 T -1 F -(bits_to_c) 207 626.67 T -(hang) 247.17 626.67 T -(e) 269.06 626.67 T -2 F -(;) 273.95 626.67 T -(/* e) 279 626.67 T -(v) 294.92 626.67 T -(ent selection details */) 300.25 626.67 T -(unsigned long int) 126 613.67 T -1 F -(values_for_bits) 207 613.67 T -2 F -(;) 274.84 613.67 T -(/* v) 279 613.67 T -(alues for bits selected by) 295.53 613.67 T -1 F -(bits_to_c) 407.04 613.67 T -(hang) 447.21 613.67 T -(e) 469.1 613.67 T -2 F -( */) 473.99 613.67 T -2 12 Q -(While) 108 594 T -1 F -(XkbSelectEvents) 140.33 594 T -2 F -( allows multiple events to be selected,) 219.64 594 T -1 F -(XkbSelectEventDetails) 404.95 594 T -2 F -(changes the selection criteria for a single type of Xkb event. The interpretation of the) 108 581 T -1 F -(bits_to_c) 108 568 T -(hang) 151.82 568 T -(e) 175.7 568 T -2 F -( and) 181.03 568 T -1 F -(values_for_bits) 204.36 568 T -2 F -( masks depends on the event type in question.) 278.36 568 T -1 F -(XkbSelectEventDetails) 108 547 T -2 F -( changes the Xkb event selection mask for the keyboard specified) 217.31 547 T -(by) 108 534 T -1 F -(de) 123 534 T -(vice_spec) 134.15 534 T -2 F -( and the Xkb event specified by) 180.79 534 T -1 F -(e) 335.76 534 T -(vent_type) 340.91 534 T -2 F -(. To turn on event selection for) 386.89 534 T -(an event detail, set the bit for the detail in the) 108 521 T -1 F -(bits_to_c) 327.97 521 T -(hang) 371.8 521 T -(e) 395.68 521 T -2 F -( parameter and set the corre-) 401 521 T -(sponding bit in the) 108 508 T -1 F -(values_for_bits) 200.68 508 T -2 F -( parameter. To turn off event detail selection for a) 274.68 508 T -(detail, set the bit for the detail in the) 108 495 T -1 F -(bits_to_c) 284.65 495 T -(hang) 328.48 495 T -(e) 352.36 495 T -2 F -( parameter and do not set the corre-) 357.68 495 T -(sponding bit in the) 108 482 T -1 F -(values_for_bits) 200.68 482 T -2 F -( parameter.) 274.68 482 T --0.34 (If an invalid event type is specified, a) 108 461 P -5 F --0.74 -0.6 (BadValue) 288.27 461 B -2 F --0.34 ( protocol error results. If a bit is not set in) 341.07 461 P -(the) 108 448 T -1 F -(bits_to_c) 125.66 448 T -(hang) 169.49 448 T -(e) 193.37 448 T -2 F -( parameter, but the corresponding bit is set in the) 198.7 448 T -1 F -(values_for_bits) 436.33 448 T -2 F -(parameter, a) 108 435 T -5 F --0.6 (BadMatch) 170.3 435 S -2 F -( protocol error results. If an undefined bit is set in either the) 223.1 435 T -1 F -(bits_to_c) 108 422 T -(hang) 151.82 422 T -(e) 175.7 422 T -2 F -( or the) 181.03 422 T -1 F -(values_for_bits) 214.69 422 T -2 F -( parameter, a) 288.7 422 T -5 F --0.6 (BadValue) 354 422 S -2 F -( protocol error results.) 406.8 422 T -(For each type of Xkb event, the legal event details that you can specify in the) 108 401 T -1 F -(XkbSelect-) 481.6 401 T -(EventDetails) 108 388 T -2 F -( request are listed in the chapters that describe each event in detail.) 169.99 388 T -0 F -(4.3.1) 72 363 T -(Event Masks) 108 363 T -2 F --0.21 (The X server reports the events defined by Xkb to your client application only if you have) 108 343 P -(requested them via a call to) 108 330 T -1 F -(XkbSelectEvents) 242.64 330 T -2 F -( or) 321.95 330 T -1 F -(XkbSelectEventDetails) 337.94 330 T -2 F -(. Specify the event) 447.25 330 T -(types in which you are interested in a mask, as described in section 4.3.) 108 317 T -(Table 4.2 lists the event mask constants that can be specified with the) 108 296 T -1 F -(XkbSelectEvents) 444.62 296 T -2 F -(request and the circumstances in which the mask should be specified.) 108 283 T -3 F -(T) 218.48 263 T -(able 4.2 XkbSelectEv) 225.38 263 T -(ents Mask Constants) 336.6 263 T -1 F -(Event Mask) 110.95 243 T -(V) 304.21 243 T -(alue) 310.21 243 T -(Noti\336cation W) 374.61 243 T -(anted) 443.18 243 T -5 11 Q --0.33 (XkbNewKeyboardNotifyMask) 110.95 228.67 S -2 F -(\0501L<<0\051) 304.21 228.67 T -(K) 374.61 228.67 T -(e) 382.27 228.67 T -(yboard geometry change) 386.99 228.67 T -5 F --0.33 (XkbMapNotifyMask) 110.95 214.67 S -2 F -(\0501L<<1\051) 304.21 214.67 T -(K) 374.61 214.67 T -(e) 382.27 214.67 T -(yboard mapping change) 386.99 214.67 T -5 F --0.33 (XkbStateNotifyMask) 110.95 200.67 S -2 F -(\0501L<<2\051) 304.21 200.67 T -(K) 374.61 200.67 T -(e) 382.27 200.67 T -(yboard state change) 386.99 200.67 T -5 F --0.33 (XkbControlsNotifyMask) 110.95 186.67 S -2 F -(\0501L<<3\051) 304.21 186.67 T -(K) 374.61 186.67 T -(e) 382.27 186.67 T -(yboard control change) 386.99 186.67 T -5 F --0.33 (XkbIndicatorStateNotifyMask) 110.95 172.67 S -2 F -(\0501L<<4\051) 304.21 172.67 T -(K) 374.61 172.67 T -(e) 382.27 172.67 T -(yboard indicator state change) 386.99 172.67 T -5 F --0.33 (XkbIndicatorMapNotifyMask) 110.95 158.67 S -2 F -(\0501L<<5\051) 304.21 158.67 T -(K) 374.61 158.67 T -(e) 382.27 158.67 T -(yboard indicator map change) 386.99 158.67 T -5 F --0.33 (XkbNamesNotifyMask) 110.95 144.67 S -2 F -(\0501L<<6\051) 304.21 144.67 T -(K) 374.61 144.67 T -(e) 382.27 144.67 T -(yboard name change) 386.99 144.67 T -5 F --0.33 (XkbCompatMapNotifyMask) 110.95 130.67 S -2 F -(\0501L<<7\051) 304.21 130.67 T -(K) 374.61 130.67 T -(e) 382.27 130.67 T -(yboard compat map change) 386.99 130.67 T -5 F --0.33 (XkbBellNotifyMask) 110.95 116.67 S -2 F -(\0501L<<8\051) 304.21 116.67 T -(Bell) 374.61 116.67 T -5 F --0.33 (XkbActionMessageMask) 110.95 102.67 S -2 F -(\0501L<<9\051) 304.21 102.67 T -(Action message) 374.61 102.67 T -5 F --0.33 (XkbAccessXNotifyMask) 110.95 88.67 S -2 F -(\0501L<<10\051) 304.21 88.67 T -(AccessX features) 374.61 88.67 T -5 F --0.33 (XkbExtensionDeviceNotifyMask) 110.95 74.67 S -2 F -(\0501L<<11\051) 304.21 74.67 T -(Extension de) 374.61 74.67 T -(vice) 431.47 74.67 T -109.95 255 538.05 255 2 L -V -0.5 H -0 Z -N -109.95 238 538.05 238 2 L -V -N -FMENDPAGE -%%EndPage: "17" 29 -%%Page: "18" 30 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(18) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(4 Xkb Ev) 474.78 744.87 T -(ents) 522.28 744.87 T -0 12 Q -(4.4) 72 653 T -(Uni\336ed Xkb Event T) 108 653 T -(ype) 219.97 653 T -2 F -(The) 108 633 T -5 F --0.6 (XkbEvent) 129.66 633 S -2 F -( structure is a union of the individual structures declared for each Xkb) 182.46 633 T --0.44 (event type and for the core protocol) 108 620 P -5 F --0.98 -0.6 (XEvent) 279.18 620 B -2 F --0.44 ( type. Given an) 318.78 620 P -5 F --0.98 -0.6 (XkbEvent) 393.32 620 B -2 F --0.44 ( structure, you may) 446.12 620 P --0.33 (use the) 108 607 P -1 F --0.33 (type) 144 607 P -2 F --0.33 ( field to determine if the event is an Xkb event \050) 163.99 607 P -1 F --0.33 (type) 390.67 607 P -2 F --0.33 ( equals the Xkb base event) 410.67 607 P -(code; see section 2.4\051. If the event is an Xkb event, you may then use the) 108 594 T -1 F -(any.xkb_type) 460.93 594 T -2 F --0.22 (field to determine the type of Xkb event and thereafter access the event-dependent compo-) 108 581 P -(nents using the union member corresponding to the particular Xkb event type.) 108 568 T -2 11 Q -(typedef union _XkbEv) 126 547.67 T -(ent {) 226.04 547.67 T -(int) 144 534.67 T -(type;) 306 534.67 T -(XkbAn) 144 521.67 T -(yEv) 176.22 521.67 T -(ent) 193.77 521.67 T -(an) 306 521.67 T -(y;) 316.22 521.67 T -(XkbStateNotifyEv) 144 508.67 T -(ent) 225.72 508.67 T -(state;) 306 508.67 T -(XkbMapNotifyEv) 144 495.67 T -(ent) 223.88 495.67 T -(map;) 306 495.67 T -(XkbControlsNotifyEv) 144 482.67 T -(ent) 241.61 482.67 T -(ctrls;) 306 482.67 T -(XkbIndicatorNotifyEv) 144 469.67 T -(ent) 243.43 469.67 T -(indicators;) 306 469.67 T -(XkbBellNotifyEv) 144 456.67 T -(ent) 222.06 456.67 T -(bell;) 306 456.67 T -(XkbAccessXNotifyEv) 144 443.67 T -(ent) 242.81 443.67 T -(accessx;) 306 443.67 T -(XkbNamesNotifyEv) 144 430.67 T -(ent) 234.27 430.67 T -(names;) 306 430.67 T -(XkbCompatMapNotifyEv) 144 417.67 T -(ent) 258.72 417.67 T -(compat;) 306 417.67 T -(XkbActionMessageEv) 144 404.67 T -(ent) 243.43 404.67 T -(message;) 306 404.67 T -(XkbExtensionDe) 144 391.67 T -(viceNotifyEv) 219.49 391.67 T -(ent) 278.6 391.67 T -(de) 306 391.67 T -(vice;) 316.11 391.67 T -(XkbNe) 144 378.67 T -(wK) 175.49 378.67 T -(e) 191.1 378.67 T -(yboardNotifyEv) 195.82 378.67 T -(ent) 267.14 378.67 T -(ne) 306 378.67 T -(w_kbd;) 316.11 378.67 T -(XEv) 144 365.67 T -(ent) 164 365.67 T -(core;) 306 365.67 T -(}) 126 352.67 T -3 F -(XkbEv) 134.03 352.67 T -(ent) 166.93 352.67 T -2 F -(;) 181.59 352.67 T -2 12 Q --0.01 (This unified Xkb event type includes a normal) 108 333 P -5 F --0.03 -0.6 (XEvent) 333.87 333 B -2 F --0.01 ( as used by the core protocol, so it) 373.47 333 P --0.33 (is straightforward for applications that use Xkb events to call the X library event functions) 108 320 P --0.22 (without having to cast every reference. For example, to get the next event, you can simply) 108 307 P -(declare a variable of type) 108 294 T -5 F --0.6 (XkbEvent) 232.28 294 S -2 F -( and call:) 285.08 294 T -2 11 Q -(XNe) 144 273.67 T -(xtEv) 164.6 273.67 T -(ent\050dp) 185.22 273.67 T -(y) 213.21 273.67 T -(,&xkbe) 218 273.67 T -(v) 250.41 273.67 T -(.core\051;) 255.2 273.67 T -5 F --0.33 (XkbAllEventsMask) 110.95 677.67 S -2 F -(\0500xFFF\051) 304.21 677.67 T -(All Xkb e) 374.61 677.67 T -(v) 417.72 677.67 T -(ents) 423.05 677.67 T -3 12 Q -(T) 218.48 712 T -(able 4.2 XkbSelectEv) 225.38 712 T -(ents Mask Constants) 336.6 712 T -1 F -(Event Mask) 110.95 692 T -(V) 304.21 692 T -(alue) 310.21 692 T -(Noti\336cation W) 374.61 692 T -(anted) 443.18 692 T -109.95 704 538.05 704 2 L -V -0.5 H -0 Z -N -109.95 687 538.05 687 2 L -V -N -FMENDPAGE -%%EndPage: "18" 30 -%%Page: "19" 31 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(19) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(5 K) 458.57 744.87 T -(e) 479.98 744.87 T -(yboard State) 484.7 744.87 T -0 14 Q -(5) 72 710.67 T -(K) 108 710.67 T -(e) 117.9 710.67 T -(yboar) 125.47 710.67 T -(d State) 163.31 710.67 T -2 12 Q --0.02 (Keyboard state encompasses all of the transitory information necessary to map a physical) 108 688 P --0.04 (key press or release to an appropriate event. The Xkb keyboard state consists of primitive) 108 675 P --0.48 (components and additional derived components that are maintained for efficiency reasons.) 108 662 P -(Figure 5.1 shows the components of Xkb keyboard state and their relationships.) 108 649 T -3 F -(Figur) 259.99 234.25 T -(e 5.1 Xkb State) 288.44 234.25 T -0 F -(5.1) 72 206.25 T -(K) 108 206.25 T -(e) 116.48 206.25 T -(yboar) 122.98 206.25 T -(d State Description) 155.41 206.25 T -2 F -(The Xkb keyboard state is comprised of the state of all keyboard modifiers, the keyboard) 108 186.25 T -(group, and the state of the pointer buttons. These are grouped into the following compo-) 108 173.25 T -(nents:) 108 160.25 T -2 11 Q -(\245) 126 139.92 T -(The lock) 139.68 139.92 T -(ed group and lock) 178.37 139.92 T -(ed modi\336ers) 257.38 139.92 T -(\245) 126 127.92 T -(The latched group and latched modi\336ers) 139.68 127.92 T -(\245) 126 115.92 T -(The base group and base modi\336ers) 139.68 115.92 T -(\245) 126 103.92 T -(The ef) 139.68 103.92 T -(fecti) 167.81 103.92 T -(v) 187.08 103.92 T -(e group and ef) 192.41 103.92 T -(fecti) 255.37 103.92 T -(v) 274.64 103.92 T -(e modi\336ers) 279.97 103.92 T -(\245) 126 91.92 T -(The state of the core pointer b) 139.68 91.92 T -(uttons) 271.43 91.92 T -55.71 255.25 556.29 645 C -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -217.21 286.19 396.71 313.19 R -0.5 H -0 Z -0 X -0 0 0 1 0 0 0 K -N -2 10 Q -(Compatibility Map) 264.17 298.19 T -78.96 268.69 549.21 635.06 R -N -213.88 539.19 213.88 542.16 224.26 539.19 213.88 536.21 4 Y -N -213.88 539.19 213.88 542.16 224.26 539.19 213.88 536.21 4 Y -V -203.41 539.19 213.63 539.19 2 L -N -322.63 450.69 322.63 453.66 333.01 450.69 322.63 447.71 4 Y -N -322.63 450.69 322.63 453.66 333.01 450.69 322.63 447.71 4 Y -V -318.17 450.69 322.38 450.69 2 L -N -198.16 329.94 318.17 329.94 318.17 540.69 311.08 540.69 4 L -N -(Xkb State) 294.86 617.44 T -227.46 526.14 312.46 553.14 R -N -(Effective Modifiers) 230.69 535.19 T -85.21 349.09 196.46 376.09 R -N -(Server Internal Modifiers) 90.04 358.14 T -85.21 588.49 196.46 615.49 R -N -(Base Modifiers) 110.16 597.54 T -85.21 554.29 196.46 581.29 R -N -(Base Group) 117.11 563.34 T -85.21 520.09 196.46 547.09 R -N -(Locked Modifiers) 104.89 529.14 T -85.21 485.89 196.46 512.89 R -N -(Locked Group) 111.83 494.94 T -85.21 451.69 196.46 478.69 R -N -(Latched Modifiers) 103.78 460.74 T -85.21 417.49 196.46 444.49 R -N -(Latched Group) 110.72 426.54 T -85.21 383.29 196.46 410.29 R -N -(Core Pointer Buttons) 98.64 392.34 T -85.21 314.89 196.46 341.89 R -N -(IgnoreLock Modifiers) 96.57 323.94 T -85.21 280.69 196.46 307.69 R -N -(IgnoreGroupLock) 104.76 289.74 T -335.21 436.39 398.46 463.39 R -N -(Lookup State) 340.05 445.44 T -424.46 569.09 544.71 596.09 R -N -(Compatibility State) 445.58 578.14 T -424.46 534.89 544.71 561.89 R -N -(Compatibility Lookup State) 428.78 543.94 T -424.46 500.69 544.71 527.69 R -N -(Compatibility Grab State) 434.34 509.74 T -227.46 491.94 312.46 518.94 R -N -(Effective Group) 237.63 500.99 T -335.21 402.19 398.46 429.19 R -N -(Grab State) 345.6 411.24 T -196.66 601.94 203.41 601.94 203.41 532.94 3 L -N -397.92 300.19 404.67 300.19 404.67 544.69 3 L -N -196.66 533.69 203.41 533.69 203.41 465.44 196.66 465.44 4 L -N -212.64 505.32 212.54 508.29 223.01 505.66 212.73 502.34 4 Y -N -212.64 505.32 212.54 508.29 223.01 505.66 212.73 502.34 4 Y -V -208.66 505.19 212.39 505.31 2 L -N -197.16 568.44 208.12 568.44 208.12 499.44 3 L -N -197.16 500.19 208.12 500.19 208.12 431.94 197.16 431.94 4 L -N -3 24 Q -(.) 205.46 497.73 T -(.) 201.46 536.72 T -(.) 205.46 502.73 T -(.) 201.46 530.72 T -(.) 315.21 448.73 T -322.63 415.69 322.63 418.66 333.01 415.69 322.63 412.71 4 Y -N -322.63 415.69 322.63 418.66 333.01 415.69 322.63 412.71 4 Y -V -318.17 415.69 322.38 415.69 2 L -N -(.) 315.71 413.98 T -197.66 363.19 208.62 363.19 208.62 294.94 197.66 294.94 4 L -N -(.) 205.96 327.22 T -411.89 580.49 411.77 583.46 422.26 580.9 412.01 577.51 4 Y -N -411.89 580.49 411.77 583.46 422.26 580.9 412.01 577.51 4 Y -V -312.17 544.19 404.42 544.19 404.42 580.19 411.64 580.48 4 L -N -411.13 547.19 411.13 550.16 421.51 547.19 411.13 544.21 4 Y -N -411.13 547.19 411.13 550.16 421.51 547.19 411.13 544.21 4 Y -V -398.42 448.94 408.17 448.94 408.17 547.19 410.88 547.19 4 L -N -398.41 295.5 408.17 295.5 408.17 450.19 3 L -N -(.) 401.21 542.72 T -(.) 405.21 446.98 T -415.37 513.79 415.4 515.91 422.76 513.7 415.35 511.67 4 Y -N -415.37 513.79 415.4 515.91 422.76 513.7 415.35 511.67 4 Y -V -399.67 415.44 413.42 415.56 413.42 513.81 415.12 513.79 4 L -N -397.41 291.5 413.54 291.5 413.54 416 3 L -N -(.) 410.59 414.04 T -0 0 612 792 C -FMENDPAGE -%%EndPage: "19" 31 -%%Page: "20" 32 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(20) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(5 K) 458.57 744.87 T -(e) 479.98 744.87 T -(yboard State) 484.7 744.87 T -2 12 Q -(The) 108 712 T -1 F -(modi\336er) 129.66 712 T -(s) 169.54 712 T -2 F -( are) 174.2 712 T -5 F --0.6 (Shift) 194.86 712 S -2 F -(,) 227.86 712 T -5 F --0.6 (Lock) 233.86 712 S -2 F -(,) 260.26 712 T -5 F --0.6 (Control) 266.26 712 S -2 F -(, and) 312.46 712 T -5 F --0.6 (Mod1) 338.79 712 S -2 F -(-) 365.19 712 T -5 F --0.6 (Mod5) 369.18 712 S -2 F -(, as defined by the core proto-) 395.58 712 T -(col. A modifier can be thought of as a toggle that is either set or unset. All modifiers are) 108 699 T -(initially unset. When a modifier is locked, it is set and remains set for all future key) 108 686 T -(events, until it is explicitly unset. A latched modifier is set, but automatically unsets after) 108 673 T -(the next key event that does not change the keyboard state. Locked and latched modifier) 108 660 T -(state can be changed by keyboard activity or via Xkb extension library functions.) 108 647 T -(The Xkb extension provides support for) 108 626 T -1 F -(k) 302.64 626 T -(e) 307.85 626 T -(ysym) 312.82 626 T -(gr) 339.8 626 T -(oups) 349.93 626 T -2 F -(, as defined by ISO9995:) 372.6 626 T -2 11 Q -(Group) 126 605.67 T --0.09 (A logical state of a k) 198 605.67 P --0.09 (e) 288.8 605.67 P --0.09 (yboard pro) 293.52 605.67 P --0.09 (viding access to a collection of characters. A) 341.22 605.67 P -(group usually contains a set of characters that logically belong together and) 198 592.67 T -(that may be arranged on se) 198 579.67 T -(v) 315.94 579.67 T -(eral shift le) 321.28 579.67 T -(v) 370.49 579.67 T -(els within that group.) 375.83 579.67 T -2 12 Q --0.12 (The Xkb extension supports up to four keysym groups. Groups are named beginning with) 108 560 P --0.37 (one and indexed beginning with zero. All group states are indicated using the group index.) 108 547 P --0.21 (At any point in time, there is zero or one locked group, zero or one latched group, and one) 108 534 P --0.19 (base group. When a group is locked, it supersedes any previous locked group and remains) 108 521 P -(the locked group for all future key events, until a new group is locked. A latched group) 108 508 T --0.23 (applies only to the next key event that does not change the keyboard state. The locked and) 108 495 P --0.1 (latched group can be changed by keyboard activity or via Xkb extension library functions.) 108 482 P --0.23 (Changing to a different group changes the keyboard state to produce characters from a dif-) 108 461 P --0.15 (ferent group. Groups are typically used to switch between keysyms of different languages) 108 448 P -(and locales.) 108 435 T -(The) 108 414 T -1 F -(pointer b) 129.66 414 T -(uttons) 173.09 414 T -2 F -( are) 202.43 414 T -5 F --0.6 (Button1) 223.08 414 S -2 F -( -) 269.28 414 T -5 F --0.6 (Button5) 279.28 414 S -2 F -(, as defined by the core protocol.) 325.48 414 T -(The) 108 393 T -1 F -(base gr) 129.66 393 T -(oup) 164.78 393 T -2 F -( and) 182.78 393 T -1 F -(base modi\336er) 206.11 393 T -(s) 270.98 393 T -2 F -( represent keys that are physically or logically down.) 275.65 393 T -(These and the pointer buttons can be changed by keyboard activity and not by Xkb) 108 380 T --0.31 (requests. It is possible for a key to be logically down, but not physically down, and neither) 108 367 P -(latched nor locked.) 108 354 T -2 9.6 Q -(1) 199.64 358.8 T -2 12 Q --0.46 (The) 108 333 P -1 F --0.46 (ef) 129.2 333 P --0.46 (fective modi\336er) 137.65 333 P --0.46 (s) 211.38 333 P -2 F --0.46 ( are the bitwise union of the locked, latched, and the base modifiers.) 216.05 333 P --0.18 (The) 108 312 P -1 F --0.18 (ef) 129.48 312 P --0.18 (fective gr) 137.93 312 P --0.18 (oup) 182.2 312 P -2 F --0.18 ( is the arithmetic sum of the group indices of the latched group, locked) 200.2 312 P -(group, and base group, which is then normalized by some function. The result is a mean-) 108 299 T -(ingful group index.) 108 286 T -2 11 Q -(n = number of k) 139.68 265.67 T -(e) 210.54 265.67 T -(yboard groups, 1<= n <= 4) 215.26 265.67 T -(0 <= an) 139.68 252.67 T -(y of lock) 173.31 252.67 T -(ed, latched, or base group < n) 212.3 252.67 T -(ef) 139.68 239.67 T -(fecti) 147.95 239.67 T -(v) 167.22 239.67 T -(e group = f\050lock) 172.56 239.67 T -(ed group + latched group + base group\051) 243.72 239.67 T -2 12 Q -(The function f ensures that the effective group is within range. The precise function is) 108 220 T -(specified for the keyboard and can be retrieved through the keyboard description. It may) 108 207 T --0.4 (wrap around, clamp down, or default. Few applications will actually examine the effective) 108 194 P -(group, and far fewer still will examine the locked, latched, and base groups.) 108 181 T -(There are two circumstances under which groups are normalized:) 108 160 T -72 90 540 110 C -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 98 204 98 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -0 0 612 792 C -2 10 Q -0 X -0 0 0 1 0 0 0 K -(1. K) 72 83.33 T -(e) 91.47 83.33 T -(ys may be logically do) 95.76 83.33 T -(wn when the) 186.06 83.33 T -(y are ph) 237.01 83.33 T -(ysically up because of their electrical properties or because of the) 269.17 83.33 T -(k) 72 71.33 T -(e) 76.9 71.33 T -(yboard e) 81.19 71.33 T -(xtension in the X serv) 115.75 71.33 T -(er ha) 203.37 71.33 T -(ving \336ltered the k) 222.88 71.33 T -(e) 293.61 71.33 T -(y release, for esoteric reasons.) 297.9 71.33 T -FMENDPAGE -%%EndPage: "20" 32 -%%Page: "21" 33 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(21) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(5 K) 458.57 744.87 T -(e) 479.98 744.87 T -(yboard State) 484.7 744.87 T -2 12 Q -(1.) 108 712 T -(The global locked or effective group changes. In this case, the changed group is nor-) 125.25 712 T -(malized into range according to the settings of the) 126 699 T -1 F -(gr) 368.96 699 T -(oups_wr) 379.09 699 T -(ap) 420.25 699 T -2 F -( field of the) 432.25 699 T -5 F --0.6 (XkbCon-) 490.91 699 S --0.6 (trolsRec) 126 686 S -2 F -( structure for the keyboard \050see section 10.7.1\051.) 178.8 686 T -(2.) 108 665 T -(The Xkb library is interpreting an event with an effective group that is legal for the) 125.25 665 T -(keyboard as a whole, but not for the key in question. In this case, the group to use for) 126 652 T -196.67 637.8 126 637.8 2 L -V -0.6 H -0 Z -N -(this event only) 126 639 T -( is determined using the) 196.67 639 T -1 F -(gr) 314.33 639 T -(oup_info) 324.46 639 T -2 F -( field of the key symbol mapping) 367.13 639 T -(\050) 126 626 T -5 F --0.6 (XkbSymMapRec) 130 626 S -2 F -(\051 for the event key.) 209.2 626 T -(Each nonmodifier key on a keyboard has zero or more symbols, or keysyms, associated) 108 605 T --0.14 (with it. These are the logical symbols that the key can generate when it is pressed. The set) 108 592 P --0.1 (of all possible keysyms for a keyboard is divided into groups. Each key is associated with) 108 579 P -(zero or more groups; each group contains one or more symbols. When a key is pressed,) 108 566 T -(the determination of which symbol for the key is selected is based on the effective group) 108 553 T -(and the shift level, which is determined by which modifiers are set.) 108 540 T -(A client that does not explicitly call Xkb functions, but that otherwise makes use of an X) 108 519 T --0.31 (library containing the Xkb extension, will have keyboard state represented in bits 0 - 14 of) 108 506 P -(the state field of events that report modifier and button state. Such a client is said to be) 108 493 T -1 F -(Xkb-capable) 108 480 T -2 F -(. A client that does explicitly call Xkb functions is an) 168.65 480 T -1 F -(Xkb-awar) 427.3 480 T -(e) 474.18 480 T -2 F -( client. The) 479.51 480 T -(Xkb keyboard state includes information derived from the effective state and from two) 108 467 T -(server parameters that can be set through the keyboard extension. The following compo-) 108 454 T -(nents of keyboard state pertain to Xkb-capable and Xkb-aware clients:) 108 441 T -2 11 Q -(\245) 126 420.67 T -(lookup state: lookup group and lookup modi\336ers) 139.68 420.67 T -(\245) 126 408.67 T -(grab state: grab group and grab modi\336ers) 139.68 408.67 T -2 12 Q --0.06 (The) 108 390 P -1 F --0.06 (lookup modi\336er) 129.6 390 P --0.06 (s) 205.09 390 P -2 F --0.06 ( and) 209.75 390 P -1 F --0.06 (lookup gr) 232.97 390 P --0.06 (oup) 278.7 390 P -2 F --0.06 ( are represented in the state field of core X events.) 296.7 390 P -(The modifier state and keycode of a key event are used to determine the symbols associ-) 108 377 T -(ated with the event. For) 108 364 T -5 F --0.6 (KeyPress) 224.65 364 S -2 F -( and) 277.45 364 T -5 F --0.6 (KeyRelease) 300.78 364 S -2 F -( events, the lookup modifiers are) 366.78 364 T -(computed as:) 108 351 T -(\050\050base | latched | locked\051 & ~) 126 330 T -1 F -(server_internal_modi\336er) 264.59 330 T -(s) 384.46 330 T -2 F -(\051) 389.12 330 T -(Otherwise the lookup modifiers are computed as:) 108 309 T -(\050\050\050base | latched | \050locked & ~) 126 288 T -1 F -(ignor) 268.58 288 T -(e_loc) 294.14 288 T -(ks) 319.9 288 T -2 F -(\051\051 & ~) 329.89 288 T -1 F -(server_internal_modi\336er) 359.71 288 T -(s) 479.58 288 T -2 F -(\051) 484.25 288 T -(The lookup group is the same as the effective group.) 108 267 T -(When an Xkb-capable or Xkb-aware client wishes to map a keycode to a keysym, it) 108 246 T -(should use the) 108 233 T -1 F -(lookup state) 179.66 233 T -2 F -( \321 the lookup group and the lookup modifiers.) 238 233 T -(The) 108 212 T -1 F -(gr) 129.66 212 T -(ab state) 140.15 212 T -2 F -( is the state used when matching events to passive grabs. If the event acti-) 177.82 212 T --0.18 (vates a grab, the) 108 199 P -1 F --0.18 (gr) 188.26 199 P --0.18 (ab modi\336er) 198.75 199 P --0.18 (s) 253.45 199 P -2 F --0.18 ( and) 258.11 199 P -1 F --0.18 (gr) 281.08 199 P --0.18 (ab gr) 291.57 199 P --0.18 (oup) 316.52 199 P -2 F --0.18 ( are represented in the state field of core X) 334.52 199 P -(events; otherwise, the lookup state is used. The grab modifiers are computed as:) 108 186 T -(\050\050\050base | latched | \050locked & ~ignore_locks\051\051 & ~server_internal_modifiers\051) 126 165 T --0.37 (If the server\325s) 108 144 P -5 F --0.82 -0.6 (IgnoreGroupLock) 176.51 144 B -2 F --0.37 ( control \050see section 10.7.3\051 is not set, the grab group is) 275.52 144 P -(the same as the effective group. Otherwise, the grab group is computed from the base) 108 131 T -(group and latched group, ignoring the locked group.) 108 118 T -(The final three components of Xkb state are applicable to clients that are not linked with) 108 97 T -(an Xlib containing the X keyboard extension library and therefore are not aware of the) 108 84 T -(keyboard extension \050) 108 71 T -1 F -(Xkb-unawar) 208.64 71 T -(e) 267.53 71 T -2 F -(clients\051:) 275.86 71 T -FMENDPAGE -%%EndPage: "21" 33 -%%Page: "22" 34 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(22) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(5 K) 458.57 744.87 T -(e) 479.98 744.87 T -(yboard State) 484.7 744.87 T -(\245) 126 712.67 T -(The compatibility modi\336er state) 139.68 712.67 T -(\245) 126 700.67 T -(The compatibility lookup modi\336er state) 139.68 700.67 T -(\245) 126 688.67 T -(The compatibility grab modi\336er state) 139.68 688.67 T -2 12 Q -(The X11 protocol interpretation of modifiers does not include direct support for multiple) 108 670 T --0.05 (groups. When an Xkb-extended X server connects to an Xkb-unaware client, the compati-) 108 657 P -(bility states remap the keyboard group into a core modifier whenever possible. The com-) 108 644 T -(patibility state corresponds to the effective modifier and effective group state, with the) 108 631 T --0.21 (group remapped to a modifier. The compatibility lookup and grab states correspond to the) 108 618 P --0.1 (lookup and grab states, respectively, with the group remapped to a modifier. The compati-) 108 605 P -(bility lookup state is reported in events that do not trigger passive grabs; otherwise, the) 108 592 T -(compatibility grab state is reported.) 108 579 T -0 F -(5.2) 72 554 T -(Changing the K) 108 554 T -(e) 196.49 554 T -(yboar) 202.98 554 T -(d State) 235.42 554 T -(5.2.1) 72 528 T -(Changing Modi\336er) 108 528 T -(s) 213.16 528 T -2 F --0.02 (The functions in this section that change the use of modifiers use a mask in the parameter) 108 508 P -1 F -(af) 108 495 T -(fect) 117.12 495 T -2 F -(. It is a bitwise inclusive OR of the legal modifier masks:) 134.45 495 T -(To lock and unlock any of the eight real keyboard modifiers, use) 108 317 T -1 F -(XkbLockModifiers:) 421.61 317 T -2 11 Q -(Bool) 108 296.67 T -3 F -(XkbLockModi\336ers) 132.15 296.67 T -2 F -(\050) 221.38 296.67 T -1 F -(display) 225.04 296.67 T -(, de) 256.21 296.67 T -(vice_spec, af) 271.93 296.67 T -(fect, values) 328.55 296.67 T -2 F -(\051) 378.04 296.67 T -(Display *) 126 283.67 T -1 F -(display) 189 283.67 T -2 F -(;) 220.78 283.67 T -(/* connection to the X serv) 252 283.67 T -(er */) 370.68 283.67 T -(unsigned int) 126 270.67 T -1 F -(de) 189 270.67 T -(vice_spec) 199.22 270.67 T -2 F -(;) 241.98 270.67 T -(/* de) 252 270.67 T -(vice ID, or) 273.42 270.67 T -5 F --0.55 (XkbUseCoreKbd) 323.51 270.67 S -2 F -( */) 402.16 270.67 T -(unsigned int) 126 257.67 T -1 F -(af) 189 257.67 T -(fect) 197.36 257.67 T -2 F -(;) 213.24 257.67 T -(/* mask of real modi\336ers whose lock state is to change */) 252 257.67 T -(unsigned int) 126 244.67 T -1 F -(values) 189 244.67 T -2 F -(;) 217.1 244.67 T -(/* 1 => lock, 0 => unlock; only for modi\336ers selected by) 252 244.67 T -1 F -(af) 504.44 244.67 T -(fect) 512.8 244.67 T -2 F -( */) 528.68 244.67 T -1 12 Q --0.03 (XkbLoc) 108 225 P --0.03 (kModi\336er) 144.42 225 P --0.03 (s) 190.96 225 P -2 F --0.03 ( sends a request to the serv) 195.62 225 P --0.03 (er to lock the real modi\336ers selected by both) 323.93 225 P -1 F --0.29 (af) 108 212 P --0.29 (fect) 117.12 212 P -2 F --0.29 ( and) 134.45 212 P -1 F --0.29 (values) 157.2 212 P -2 F --0.29 ( and to unlock the real modi\336ers selected by) 187.86 212 P -1 F --0.29 (af) 400.24 212 P --0.29 (fect) 409.36 212 P -2 F --0.29 ( b) 426.69 212 P --0.29 (ut not selected by) 435.17 212 P -1 F --0.29 (val-) 521.34 212 P -(ues) 108 199 T -2 F -(.) 124 199 T -1 F -(XkbLoc) 130 199 T -(kModi\336er) 166.42 199 T -(s) 212.95 199 T -2 F -( does not w) 217.62 199 T -(ait for a reply from the serv) 272.5 199 T -(er) 404.28 199 T -(. It returns) 412.94 199 T -5 F --0.6 (True) 465.6 199 S -2 F -( if the) 492 199 T -(request w) 108 186 T -(as sent, and) 154.2 186 T -5 F --0.6 (False) 212.86 186 S -2 F -( otherwise.) 245.86 186 T -(To latch and unlatch any of the eight real keyboard modifiers, use) 108 165 T -1 F -(XkbLatchModifiers:) 426.94 165 T -2 11 Q -(Bool) 108 144.67 T -3 F -(XkbLatchModi\336ers) 132.15 144.67 T -2 F -(\050d) 225.04 144.67 T -1 F -(isplay) 234.2 144.67 T -(, de) 259.88 144.67 T -(vice_spec, af) 275.6 144.67 T -(fect, values) 332.21 144.67 T -2 F -(\051) 381.7 144.67 T -(Display *) 126 131.67 T -1 F -(display) 189 131.67 T -2 F -(;) 220.78 131.67 T -(/* connection to the X serv) 252 131.67 T -(er */) 370.68 131.67 T -(unsigned int) 126 118.67 T -1 F -(de) 189 118.67 T -(vice_spec) 199.22 118.67 T -2 F -(;) 241.98 118.67 T -(/* de) 252 118.67 T -(vice ID, or) 273.42 118.67 T -5 12 Q --0.6 (XkbUseCoreKbd) 323.51 118.67 S -2 11 Q -( */) 409.31 118.67 T -(unsigned int) 126 105.67 T -1 F -(af) 189 105.67 T -(fect) 197.36 105.67 T -2 F -(;) 213.24 105.67 T -(/* mask of modi\336ers whose latch state is to change */) 252 105.67 T -(unsigned int) 126 92.67 T -1 F -(values) 189 92.67 T -2 F -(;) 217.1 92.67 T -(/* 1 => latch, 0 => unlatch; only for mods selected by) 252 92.67 T -1 F -(af) 491.6 92.67 T -(fect) 499.96 92.67 T -2 F -( */) 515.85 92.67 T -3 12 Q -(T) 251.09 475 T -(able 5.1 Real Modi\336er Masks) 257.99 475 T -1 F -(Mask) 289 455 T -2 11 Q -(ShiftMask) 289 440.67 T -(LockMask) 289 426.67 T -(ControlMask) 289 412.67 T -(Mod1Mask) 289 398.67 T -(Mod2Mask) 289 384.67 T -(Mod3Mask) 289 370.67 T -(Mod4Mask) 289 356.67 T -(Mod5Mask) 289 342.67 T -288 467 360 467 2 L -V -0.5 H -0 Z -N -288 450 360 450 2 L -V -N -FMENDPAGE -%%EndPage: "22" 34 -%%Page: "23" 35 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(23) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(5 K) 458.57 744.87 T -(e) 479.98 744.87 T -(yboard State) 484.7 744.87 T -1 12 Q --0.47 (XkbLatc) 108 712 P --0.47 (hModi\336er) 147.82 712 P --0.47 (s) 195.02 712 P -2 F --0.47 ( sends a request to the serv) 199.69 712 P --0.47 (er to latch the real modi\336ers selected by both) 325.31 712 P -1 F -(af) 108 699 T -(fect) 117.12 699 T -2 F -( and) 134.45 699 T -1 F -(values) 157.78 699 T -2 F -( and to unlatch the real modi\336ers selected by) 188.44 699 T -1 F -(af) 406.07 699 T -(fect) 415.19 699 T -2 F -( b) 432.52 699 T -(ut not selected by) 441.28 699 T -1 F --0.11 (values) 108 686 P -2 F --0.11 (.) 138.66 686 P -1 F --0.11 (XkbLatc) 144.55 686 P --0.11 (hModi\336er) 184.37 686 P --0.11 (s) 231.58 686 P -2 F --0.11 ( does not w) 236.24 686 P --0.11 (ait for a reply from the serv) 290.8 686 P --0.11 (er) 421.93 686 P --0.11 (. It returns) 430.6 686 P -5 F --0.24 -0.6 (True) 482.93 686 B -2 F --0.11 ( if the) 509.33 686 P -(request w) 108 673 T -(as sent, and) 154.2 673 T -5 F --0.6 (False) 212.86 673 S -2 F -( otherwise.) 245.86 673 T -0 F -(5.2.2) 72 648 T -(Changing Gr) 108 648 T -(oups) 180.43 648 T -2 F -(Reference the keysym group indices with these symbolic constants:) 108 628 T -(To lock the keysym group, use) 108 506 T -1 F -(XkbLockGroup.) 258.98 506 T -2 11 Q -(Bool) 108 485.67 T -3 F -(XkbLockGr) 132.15 485.67 T -(oup) 189.4 485.67 T -2 F -(\050) 207.13 485.67 T -1 F -(display) 210.79 485.67 T -(, de) 241.97 485.67 T -(vice_spec, gr) 257.69 485.67 T -(oup) 315.23 485.67 T -2 F -(\051) 331.73 485.67 T -(Display *) 126 472.67 T -1 F -(display) 189 472.67 T -2 F -(;) 220.78 472.67 T -(/* connection to the X serv) 252 472.67 T -(er */) 370.68 472.67 T -(unsigned int) 126 459.67 T -1 F -(de) 189 459.67 T -(vice_spec) 199.22 459.67 T -2 F -(;) 241.98 459.67 T -(/* de) 252 459.67 T -(vice ID, or) 273.42 459.67 T -5 F --0.55 (XkbUseCoreKbd) 323.51 459.67 S -2 F -( */) 402.16 459.67 T -(unsigned int) 126 446.67 T -1 F -(gr) 189 446.67 T -(oup) 198.28 446.67 T -2 F -(;) 214.78 446.67 T -(/* inde) 252 446.67 T -(x of the k) 282.08 446.67 T -(e) 323.83 446.67 T -(ysym group to lock */) 328.55 446.67 T -1 12 Q -(XkbLoc) 108 427 T -(kGr) 144.42 427 T -(oup) 162.54 427 T -2 F -( sends a request to the server to lock the specified) 180.54 427 T -1 F -(gr) 421.49 427 T -(oup) 431.62 427 T -2 F -(and) 452.62 427 T -(does not w) 472.94 427 T -(ait) 524.82 427 T -(for a reply) 108 414 T -(. It returns) 157.2 414 T -5 F --0.6 (True) 209.86 414 S -2 F -( if the request w) 236.26 414 T -(as sent and) 313.45 414 T -5 F --0.6 (False) 369.11 414 S -2 F -( otherwise.) 402.11 414 T -(To latch the keysym group, use) 108 393 T -1 F -(XkbLatchGroup.) 261.65 393 T -2 11 Q -(Bool) 108 372.67 T -3 F -(XkbLatchGr) 132.15 372.67 T -(oup) 193.06 372.67 T -2 F -(\050) 210.79 372.67 T -1 F -(display) 214.46 372.67 T -(, de) 245.63 372.67 T -(vice_spec, gr) 261.35 372.67 T -(oup) 318.89 372.67 T -2 F -(\051) 335.39 372.67 T -(Display *) 126 359.67 T -1 F -(display) 189 359.67 T -2 F -(;) 220.78 359.67 T -(/* connection to the X serv) 252 359.67 T -(er */) 370.68 359.67 T -(unsigned int) 126 346.67 T -1 F -(de) 189 346.67 T -(vice_spec) 199.22 346.67 T -2 F -(;) 241.98 346.67 T -(/* de) 252 346.67 T -(vice ID, or) 273.42 346.67 T -5 12 Q --0.6 (XkbUseCoreKbd) 323.51 346.67 S -2 11 Q -( */) 409.31 346.67 T -(unsigned int) 126 333.67 T -1 F -(gr) 189 333.67 T -(oup) 198.28 333.67 T -2 F -(;) 214.78 333.67 T -(/* inde) 252 333.67 T -(x of the k) 282.08 333.67 T -(e) 323.83 333.67 T -(ysym group to latch */) 328.55 333.67 T -1 12 Q --0.4 (XkbLatc) 108 314 P --0.4 (hGr) 147.82 314 P --0.4 (oup) 166.61 314 P -2 F --0.4 ( sends a request to the server to latch the specified group) 184.61 314 P --0.4 (and) 454.4 314 P --0.4 (does not w) 474.33 314 P --0.4 (ait) 525.4 314 P -(for a reply) 108 301 T -(. It returns) 157.2 301 T -5 F --0.6 (True) 209.86 301 S -2 F -( if the request w) 236.26 301 T -(as sent and) 313.45 301 T -5 F --0.6 (False) 369.11 301 S -2 F -( otherwise.) 402.11 301 T -0 F -(5.3) 72 276 T -(Determining K) 108 276 T -(e) 189.83 276 T -(yboar) 196.32 276 T -(d State) 228.76 276 T -2 F -(Xkb keyboard state may be represented in an) 108 256 T -5 F --0.6 (XkbStateRec) 327.28 256 S -2 F -( structure:) 399.88 256 T -2 11 Q -(typedef struct {) 126 235.67 T -(unsigned char) 144 222.67 T -(group;) 225 222.67 T -(/* ef) 324 222.67 T -(fecti) 343.58 222.67 T -(v) 362.85 222.67 T -(e group inde) 368.19 222.67 T -(x */) 423.01 222.67 T -(unsigned char) 144 209.67 T -(base_group;) 225 209.67 T -(/* base group inde) 324 209.67 T -(x */) 404.8 209.67 T -(unsigned char) 144 196.67 T -(latched_group;) 225 196.67 T -(/* latched group inde) 324 196.67 T -(x */) 417.02 196.67 T -(unsigned char) 144 183.67 T -(lock) 225 183.67 T -(ed_group;) 243.83 183.67 T -(/* lock) 324 183.67 T -(ed group inde) 354.14 183.67 T -(x */) 414.46 183.67 T -(unsigned char) 144 170.67 T -(mods;) 225 170.67 T -(/* ef) 324 170.67 T -(fecti) 343.58 170.67 T -(v) 362.85 170.67 T -(e modi\336ers */) 368.19 170.67 T -(unsigned char) 144 157.67 T -(base_mods;) 225 157.67 T -(/* base modi\336ers */) 324 157.67 T -(unsigned char) 144 144.67 T -(latched_mods;) 225 144.67 T -(/* latched modi\336ers */) 324 144.67 T -(unsigned char) 144 131.67 T -(lock) 225 131.67 T -(ed_mods;) 243.83 131.67 T -(/* lock) 324 131.67 T -(ed modi\336ers */) 354.14 131.67 T -(unsigned char) 144 118.67 T -(compat_state;) 225 118.67 T -(/* ef) 324 118.67 T -(fecti) 343.58 118.67 T -(v) 362.85 118.67 T -(e group => modi\336ers */) 368.19 118.67 T -(unsigned char) 144 105.67 T -(grab_mods;) 225 105.67 T -(/* modi\336ers used for grabs */) 324 105.67 T -(unsigned char) 144 92.67 T -(compat_grab_mods;) 225 92.67 T -(/* mods used for compatibility mode grabs */) 324 92.67 T -(unsigned char) 144 79.67 T -(lookup_mods;) 225 79.67 T -(/* modi\336ers used to lookup symbols */) 324 79.67 T -(unsigned char) 144 66.67 T -(compat_lookup_mods;) 225 66.67 T -(/* mods used for compatibility lookup */) 325.84 66.67 T -3 12 Q -(T) 243.86 608 T -(able 5.2 Symbolic Gr) 250.76 608 T -(oup Names) 360.89 608 T -1 F -(Symbolic Name) 253 588 T -(V) 361 588 T -(alue) 367 588 T -2 11 Q -(XkbGroup1Inde) 253 573.67 T -(x) 324.93 573.67 T -(0) 361 573.67 T -(XkbGroup2Inde) 253 559.67 T -(x) 324.93 559.67 T -(1) 361 559.67 T -(XkbGroup3Inde) 253 545.67 T -(x) 324.93 545.67 T -(2) 361 545.67 T -(XkbGroup4Inde) 253 531.67 T -(x) 324.93 531.67 T -(3) 361 531.67 T -252 600 396 600 2 L -V -0.5 H -0 Z -N -252 583 396 583 2 L -V -N -FMENDPAGE -%%EndPage: "23" 35 -%%Page: "24" 36 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(24) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(5 K) 458.57 744.87 T -(e) 479.98 744.87 T -(yboard State) 484.7 744.87 T -(unsigned short) 144 712.67 T -(ptr_b) 225 712.67 T -(uttons;) 248 712.67 T -(/* 1 bit => corresponding pointer btn is do) 324 712.67 T -(wn */) 510.3 712.67 T -(}) 126 699.67 T -3 F -(XkbStateRec) 134.03 699.67 T -2 F -(,*XkbStatePtr;) 195.74 699.67 T -2 12 Q -(To obtain the keyboard state, use) 108 680 T -1 F -(XkbGetState) 269.64 680 T -(.) 329.45 680 T -2 11 Q -(Status) 108 659.67 T -3 F -(XkbGetState) 137.65 659.67 T -2 F -(\050) 198.75 659.67 T -1 F -(display) 202.41 659.67 T -2 F -(,) 233.48 659.67 T -1 F -(de) 238.98 659.67 T -(vice_spec) 249.2 659.67 T -2 F -(,) 291.95 659.67 T -1 F -(state_r) 297.45 659.67 T -(eturn) 327.6 659.67 T -2 F -(\051) 350.83 659.67 T -(Display *) 126 646.67 T -1 F -(display) 234 646.67 T -2 F -(;) 265.78 646.67 T -(/* connection to the X serv) 306 646.67 T -(er */) 424.68 646.67 T -(unsigned int) 126 633.67 T -1 F -(de) 234 633.67 T -(vice_spec) 244.22 633.67 T -2 F -(;) 286.98 633.67 T -(/* de) 306 633.67 T -(vice ID, or) 327.42 633.67 T -5 F --0.55 (XkbUseCoreKbd) 377.51 633.67 S -2 F -( */) 456.16 633.67 T -(XkbStatePtr) 126 620.67 T -1 F -(state_r) 234 620.67 T -(eturn) 264.15 620.67 T -2 F -(;) 287.37 620.67 T -(/* back\336lled with Xkb state */) 306 620.67 T -2 12 Q -(The) 108 601 T -1 F -(XkbGetState) 129.66 601 T -2 F -(function queries the server for the current keyboard state, waits for a) 192.65 601 T -(reply, and then backfills) 108 588 T -1 F -(state_r) 226.98 588 T -(eturn) 259.87 588 T -2 F -( with the results.) 285.2 588 T -(All group values are expressed as group indices in the range [0..3]. Modifiers and the) 108 567 T -(compatibility modifier state values are expressed as the bitwise union of the core X11) 108 554 T -(modifier masks. The pointer button state is reported as in the core X11 protocol.) 108 541 T -0 F -(5.4) 72 516 T -(T) 108 516 T -(rac) 114.37 516 T -(king K) 132.14 516 T -(e) 168.64 516 T -(yboar) 175.13 516 T -(d State) 207.56 516 T -2 F -(The Xkb extension reports) 108 496 T -5 F --0.6 (XkbStateNotify) 238.64 496 S -2 F -(events to clients wanting notification) 337.65 496 T -(whenever the Xkb state changes. The changes reported include changes to any aspect of) 108 483 T -(the keyboard state: when a modifier is set or unset, when the current group changes, or) 108 470 T -(when a pointer button is pressed or released. As with all Xkb events,) 108 457 T -5 F --0.6 (XkbStateNotify) 440.28 457 S -2 F -(events are reported to all interested clients without regard to the current keyboard input) 108 444 T -(focus or grab state.) 108 431 T -(There are many different types of Xkb state changes. Xkb defines an event detail mask) 108 410 T -(corresponding to each type of change. The event detail masks are listed in Table 5.3.) 108 397 T -(To track changes in the keyboard state for a particular device, select to receive) 108 121 T -5 F --0.6 (Xkb-) 487.55 121 S --0.6 (StateNotify) 108 108 S -2 F -( events by calling either) 180.6 108 T -1 F -(XkbSelectEvents) 298.25 108 T -2 F -( or) 377.56 108 T -1 F -(XkbSelectEventDetails) 393.55 108 T -2 F -( \050see) 502.86 108 T -(section 4.3\051.) 108 95 T -3 F -(T) 213.32 377 T -(able 5.3 XkbStateNotify Ev) 220.22 377 T -(ent Detail Masks) 362.44 377 T -1 F -(Mask) 217 357 T -(V) 361 357 T -(alue) 367 357 T -2 11 Q -(XkbModi\336erStateMask) 217 342.67 T -(\0501L << 0\051) 361 342.67 T -(XkbModi\336erBaseMask) 217 328.67 T -(\0501L << 1\051) 361 328.67 T -(XkbModi\336erLatchMask) 217 314.67 T -(\0501L << 2\051) 361 314.67 T -(XkbModi\336erLockMask) 217 300.67 T -(\0501L << 3\051) 361 300.67 T -(XkbGroupStateMask) 217 286.67 T -(\0501L << 4\051) 361 286.67 T -(XkbGroupBaseMask) 217 272.67 T -(\0501L << 5\051) 361 272.67 T -(XkbGroupLatchMask) 217 258.67 T -(\0501L << 6\051) 361 258.67 T -(XkbGroupLockMask) 217 244.67 T -(\0501L << 7\051) 361 244.67 T -(XkbCompatStateMask) 217 230.67 T -(\0501L << 8\051) 361 230.67 T -(XkbGrabModsMask) 217 216.67 T -(\0501L << 9\051) 361 216.67 T -(XkbCompatGrabModsMask) 217 202.67 T -(\0501L << 10\051) 361 202.67 T -(XkbLookupModsMask) 217 188.67 T -(\0501L << 11\051) 361 188.67 T -(XkbCompatLookupModsMask) 217 174.67 T -(\0501L << 12\051) 361 174.67 T -(XkbPointerButtonMask) 217 160.67 T -(\0501L << 13\051) 361 160.67 T -(XkbAllStateComponentsMask) 217 146.67 T -(\0500x3f) 361 146.67 T -(f) 384.55 146.67 T -(f\051) 387.94 146.67 T -216 369 432 369 2 L -V -0.5 H -0 Z -N -216 352 432 352 2 L -V -N -FMENDPAGE -%%EndPage: "24" 36 -%%Page: "25" 37 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(25) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(5 K) 458.57 744.87 T -(e) 479.98 744.87 T -(yboard State) 484.7 744.87 T -2 12 Q -(To receive) 108 712 T -5 F --0.6 (XkbStateNotify) 161.98 712 S -2 F -( events under all possible conditions, use) 254.38 712 T -1 F -(XkbSelectEvents) 453.7 712 T -2 F -(and pass) 108 699 T -5 F --0.6 (XkbStateNotifyMask) 151.99 699 S -2 F -( in both) 270.8 699 T -1 F -(bits_to_c) 310.47 699 T -(hang) 354.29 699 T -(e) 378.17 699 T -2 F -( and) 383.5 699 T -1 F -(values_for_bits) 406.83 699 T -2 F -(.) 480.83 699 T -(To receive) 108 678 T -5 F --0.6 (XkbStateNotify) 161.98 678 S -2 F -( events only under certain conditions, use) 254.38 678 T -1 F -(XkbSelectEvent-) 456.35 678 T -(Details) 108 665 T -2 F -( using) 142.67 665 T -5 F --0.6 (XkbStateNotify) 174.67 665 S -2 F -( as the) 267.07 665 T -1 F -(e) 300.73 665 T -(vent_type) 305.88 665 T -2 F -( and specifying the desired state) 351.87 665 T -(changes in) 108 652 T -1 F -(bits_to_c) 161.99 652 T -(hang) 205.81 652 T -(e) 229.69 652 T -2 F -( and) 235.02 652 T -1 F -(values_for_bits) 258.35 652 T -2 F -( using mask bits from Table 5.3.) 332.35 652 T -(The structure for) 108 631 T -5 F --0.6 (XkbStateNotify) 191.64 631 S -2 F -( events is:) 284.04 631 T -2 11 Q -(typedef struct {) 126 610.67 T -(int) 144 597.67 T -(type;) 234 597.67 T -(/* Xkb e) 306 597.67 T -(xtension base e) 343.72 597.67 T -(v) 410.65 597.67 T -(ent code */) 415.99 597.67 T -(unsigned long) 144 584.67 T -(serial;) 234 584.67 T -(/* X serv) 306 584.67 T -(er serial number for e) 346.16 584.67 T -(v) 440.57 584.67 T -(ent */) 445.91 584.67 T -(Bool) 144 571.67 T -(send_e) 234 571.67 T -(v) 264.27 571.67 T -(ent;) 269.61 571.67 T -(/*) 306 571.67 T -5 12 Q --0.6 (True) 317.31 571.67 S -2 11 Q -( => synthetically generated */) 343.71 571.67 T -(Display *) 144 558.67 T -(display;) 234 558.67 T -(/* serv) 306 558.67 T -(er connection where e) 335.47 558.67 T -(v) 432.02 558.67 T -(ent generated */) 437.35 558.67 T -(T) 144 545.67 T -(ime) 150.34 545.67 T -(time;) 234 545.67 T -(/* serv) 306 545.67 T -(er time when e) 335.47 545.67 T -(v) 400.26 545.67 T -(ent generated */) 405.59 545.67 T -(int) 144 532.67 T -(xkb_type;) 234 532.67 T -(/*) 306 532.67 T -5 F --0.33 (XkbStateNotify) 317.31 532.67 S -2 F -( */) 405.09 532.67 T -(int) 144 519.67 T -(de) 234 519.67 T -(vice;) 244.11 519.67 T -(/* Xkb de) 306 519.67 T -(vice ID, will not be) 349.11 519.67 T -5 F --0.33 (XkbUseCoreKbd) 437.1 519.67 S -2 F -( */) 518.61 519.67 T -(unsigned int) 144 506.67 T -(changed;) 234 506.67 T -(/* bits indicating what has changed */) 306 506.67 T -(int) 144 493.67 T -(group;) 234 493.67 T -(/* group inde) 306 493.67 T -(x of ef) 364.5 493.67 T -(fecti) 392.93 493.67 T -(v) 412.2 493.67 T -(e group */) 417.54 493.67 T -(int) 144 480.67 T -(base_group;) 234 480.67 T -(/* group inde) 306 480.67 T -(x of base group */) 364.5 480.67 T -(int) 144 467.67 T -(latched_group;) 234 467.67 T -(/* group inde) 306 467.67 T -(x of latched group */) 364.5 467.67 T -(int) 144 454.67 T -(lock) 234 454.67 T -(ed_group;) 252.83 454.67 T -(/* group inde) 306 454.67 T -(x of lock) 364.5 454.67 T -(ed group */) 403.49 454.67 T -(unsigned int) 144 441.67 T -(mods;) 234 441.67 T -(/* ef) 306 441.67 T -(fecti) 325.58 441.67 T -(v) 344.85 441.67 T -(e modi\336ers */) 350.19 441.67 T -(unsigned int) 144 428.67 T -(base_mods;) 234 428.67 T -(/* base modi\336ers */) 306 428.67 T -(unsigned int) 144 415.67 T -(latched_mods;) 234 415.67 T -(/* latched modi\336ers */) 306 415.67 T -(unsigned int) 144 402.67 T -(lock) 234 402.67 T -(ed_mods;) 252.83 402.67 T -(/* lock) 306 402.67 T -(ed modi\336ers */) 336.14 402.67 T -(int) 144 389.67 T -(compat_state;) 234 389.67 T -(/* computed compatibility state */) 306 389.67 T -(unsigned char) 144 376.67 T -(grab_mods;) 234 376.67 T -(/* modi\336ers used for grabs */) 306 376.67 T -(unsigned char) 144 363.67 T -(compat_grab_mods;) 234 363.67 T -(/* modi\336ers used for compatibility grabs */) 342 363.67 T -(unsigned char) 144 350.67 T -(lookup_mods;) 234 350.67 T -(/* modi\336ers used to lookup symbols */) 306 350.67 T -(unsigned char) 144 337.67 T -(compat_lookup_mods;) 234 337.67 T -(/* mods used for compatibility look up */) 342 337.67 T -(int) 144 324.67 T -(ptr_b) 234 324.67 T -(uttons;) 257 324.67 T -(/* core pointer b) 306 324.67 T -(uttons */) 378.18 324.67 T -(K) 144 311.67 T -(e) 151.67 311.67 T -(yCode) 156.39 311.67 T -(k) 234 311.67 T -(e) 239.39 311.67 T -(ycode;) 244.11 311.67 T -(/* k) 306 311.67 T -(e) 322.7 311.67 T -(ycode causing e) 327.42 311.67 T -(v) 397.4 311.67 T -(ent, 0 if programmatic */) 402.73 311.67 T -(char) 144 298.67 T -(e) 234 298.67 T -(v) 238.61 298.67 T -(ent_type;) 243.94 298.67 T -(/* core e) 306 298.67 T -(v) 343.6 298.67 T -(ent if) 348.93 298.67 T -1 F -(r) 374.6 298.67 T -(eq_major) 378.47 298.67 T -2 F -( or) 420.63 298.67 T -1 F -(r) 435.29 298.67 T -(eq_minor) 439.17 298.67 T -2 F -( non zero */) 481.33 298.67 T -(char) 144 285.67 T -(req_major;) 234 285.67 T -(/* major request code if program trigger) 306 285.67 T -(, else 0 */) 482.13 285.67 T -(char) 144 272.67 T -(req_minor;) 234 272.67 T -(/* minor request code if program trigger) 306 272.67 T -(, else 0 */) 482.75 272.67 T -(}) 126 259.67 T -3 F -(XkbStateNotifyEv) 134.03 259.67 T -(ent) 220.08 259.67 T -2 F -(;) 234.75 259.67 T -2 12 Q -(When you receive an) 108 240 T -5 F --0.6 (XkbStateNotify) 212.63 240 S -2 F -( event, the) 305.03 240 T -1 F -(changed) 357.69 240 T -2 F -( field indicates which ele-) 398.34 240 T -(ments of keyboard state have changed. This will be the bitwise inclusive OR of one or) 108 227 T --0.17 (more of the) 108 214 P -5 F --0.37 -0.6 (XkbStateNotify) 165.82 214 B -2 F --0.17 ( event detail masks shown in Table 5.3. All fields reported) 258.22 214 P -(in the event are valid, but only those indicated in) 108 201 T -1 F -(changed) 344.98 201 T -2 F -( have changed values.) 385.63 201 T -(The) 108 180 T -1 F -(group) 129.66 180 T -2 F -( field is the group index of the effective keysym group. The) 158.33 180 T -1 F -(base_group) 447.28 180 T -2 F -(,) 503.94 180 T -1 F -(latched_group) 108 167 T -2 F -(, and) 178 167 T -1 F -(locked_group) 204.32 167 T -2 F -( fields are set to a group index value representing the) 270.31 167 T --0.37 (base group, the latched group, and the locked group, respectively. The X server can set the) 108 154 P --0.42 (modifier and compatibility state fields to a union of the core modifier mask bits; this union) 108 141 P -(represents the corresponding modifier states. The) 108 128 T -1 F -(ptr_button) 347.62 128 T -2 F -( field gives the state of the) 398.29 128 T -(core pointer buttons as a mask composed of an inclusive OR of zero or more of the core) 108 115 T -(pointer button masks.) 108 102 T -(Xkb state changes can occur either in response to keyboard activity or under application) 108 81 T -(control. If a key event caused the state change, the) 108 68 T -1 F -(keycode) 352.6 68 T -2 F -( field gives the keycode of the) 391.24 68 T -FMENDPAGE -%%EndPage: "25" 37 -%%Page: "26" 38 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(26) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(5 K) 458.57 744.87 T -(e) 479.98 744.87 T -(yboard State) 484.7 744.87 T -2 12 Q --0.3 (key event, and the) 108 712 P -1 F --0.3 (event_type) 197.13 712 P -2 F --0.3 ( field is set to either) 248.44 712 P -5 F --0.65 -0.6 (KeyPress) 344.66 712 B -2 F --0.3 ( or) 397.46 712 P -5 F --0.65 -0.6 (KeyRelease) 412.86 712 B -2 F --0.3 (. If a pointer) 478.87 712 P -(button event caused the state change, the) 108 699 T -1 F -(k) 306.62 699 T -(e) 311.83 699 T -(ycode) 316.8 699 T -2 F -( field is zero, and the) 344.78 699 T -1 F -(e) 448.43 699 T -(vent_type) 453.58 699 T -2 F -( field is) 499.56 699 T -(set to either) 108 686 T -5 F --0.6 (ButtonPress) 166.99 686 S -2 F -( or) 239.59 686 T -5 F --0.6 (ButtonRelease) 255.59 686 S -2 F -(. Otherwise, the major and minor codes) 341.39 686 T -(of the request that caused the state change are given in the) 108 673 T -1 F -(req_major) 389.93 673 T -2 F -( and) 440.59 673 T -1 F -(req_minor) 463.92 673 T -2 F --0.44 (fields, and the) 108 660 P -1 F --0.44 (keycode) 177.34 660 P -2 F --0.44 ( field is zero. The) 215.98 660 P -1 F --0.44 (req_major) 301.08 660 P -2 F --0.44 ( value is the same as the) 351.75 660 P -2 11 Q --0.4 (major e) 467.65 660 P --0.4 (xtension) 500.37 660 P -(opcode) 108 647 T -2 12 Q -(.) 139.77 647 T -FMENDPAGE -%%EndPage: "26" 38 -%%Page: "27" 39 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(27) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(6 Complete K) 383.71 744.87 T -(e) 450.66 744.87 T -(yboard Description) 455.38 744.87 T -0 14 Q -(6) 72 710.67 T -(Complete K) 108 710.67 T -(e) 185.57 710.67 T -(yboar) 193.15 710.67 T -(d Description) 230.99 710.67 T -2 12 Q -(The complete Xkb description for a keyboard device is accessed using a single structure) 108 688 T --0.14 (containing pointers to major Xkb components. This chapter describes this single structure) 108 675 P -(and provides references to other sections of this document that discuss the major Xkb) 108 662 T -(components in detail.) 108 649 T -0 F -(6.1) 72 624 T -(The XkbDescRec Structure) 108 624 T -2 F -(The complete description of an Xkb keyboard is given by an) 108 604 T -5 F --0.6 (XkbDescRec) 401.62 604 S -2 F -(. The compo-) 467.62 604 T -(nent structures in the) 108 591 T -5 F --0.6 (XkbDescRec) 211.32 591 S -2 F -( represent the major Xkb components outlined in Fig-) 277.32 591 T -(ure 1.1.) 108 578 T -2 11 Q -(typedef struct {) 126 557.67 T -(struct _XDisplay *) 144 544.67 T -(display;) 270 544.67 T -(/* connection to X serv) 342 544.67 T -(er */) 444.49 544.67 T -(unsigned short) 144 531.67 T -(\337ags;) 270 531.67 T -(/* pri) 342 531.67 T -(v) 365.25 531.67 T -(ate to Xkb, do not modify */) 370.48 531.67 T -(unsigned short) 144 518.67 T -(de) 270 518.67 T -(vice_spec;) 280.11 518.67 T -(/* de) 342 518.67 T -(vice of interest */) 363.42 518.67 T -(K) 144 505.67 T -(e) 151.67 505.67 T -(yCode) 156.39 505.67 T -(min_k) 270 505.67 T -(e) 298.01 505.67 T -(y_code;) 302.73 505.67 T -(/* minimum k) 342 505.67 T -(e) 404.24 505.67 T -(ycode for de) 408.96 505.67 T -(vice */) 463.66 505.67 T -(K) 144 492.67 T -(e) 151.67 492.67 T -(yCode) 156.39 492.67 T -(max_k) 270 492.67 T -(e) 299.83 492.67 T -(y_code;) 304.55 492.67 T -(/* maximum k) 342 492.67 T -(e) 406.06 492.67 T -(ycode for de) 410.78 492.67 T -(vice */) 465.49 492.67 T -(XkbControlsPtr) 144 479.67 T -(ctrls;) 270 479.67 T -(/* controls */) 342 479.67 T -(XkbServ) 144 466.67 T -(erMapPtr) 182.94 466.67 T -(serv) 270 466.67 T -(er;) 288.16 466.67 T -(/* serv) 342 466.67 T -(er k) 371.47 466.67 T -(e) 388.16 466.67 T -(ymap */) 392.88 466.67 T -(XkbClientMapPtr) 144 453.67 T -(map;) 270 453.67 T -(/* client k) 342 453.67 T -(e) 385.89 453.67 T -(ymap */) 390.61 453.67 T -(XkbIndicatorPtr) 144 440.67 T -(indicators;) 270 440.67 T -(/* indicator map */) 342 440.67 T -(XkbNamesPtr) 144 427.67 T -(names;) 270 427.67 T -(/* names for all components */) 342 427.67 T -(XkbCompatMapPtr) 144 414.67 T -(compat;) 270 414.67 T -(/* compatibility map */) 342 414.67 T -(XkbGeometryPtr) 144 401.67 T -(geom;) 270 401.67 T -(/* ph) 342 401.67 T -(ysical geometry of k) 364.25 401.67 T -(e) 454.27 401.67 T -(yboard */) 458.98 401.67 T -(}) 126 388.67 T -3 F -(XkbDescRec) 134.03 388.67 T -2 F -(, *XkbDescPtr;) 193.9 388.67 T -2 12 Q -(The) 108 369 T -1 F -(display) 129.66 369 T -2 F -( field points to an X display structure. The) 164.33 369 T -1 F -(flags) 370.31 369 T -2 F -( field is private to the library:) 393.65 369 T -(modifying) 108 356 T -1 F -(flags) 161 356 T -2 F -( may yield unpredictable results. The) 184.34 356 T -1 F -(device_spec) 365.32 356 T -2 F -( field specifies the) 423.29 356 T -(device identifier of the keyboard input device, or) 108 343 T -5 F --0.6 (XkbUseCoreKeyboard) 345.61 343 S -2 F -(, which speci-) 464.41 343 T -(fies the core keyboard device. The) 108 330 T -1 F -(min_key_code) 276.28 330 T -2 F -( and) 344.92 330 T -1 F -(max_key_code) 368.24 330 T -2 F -( fields specify the) 438.88 330 T -(least and greatest keycode that can be returned by the keyboard.) 108 317 T -(The other fields specify structure components of the keyboard description and are) 108 296 T -(described in detail in other sections of this document. Table 6.1 identifies the subsequent) 108 283 T -(sections of this document that discuss the individual components of the) 108 270 T -5 F --0.6 (XkbDescRec) 452.99 270 S -2 F -(.) 518.99 270 T -(Each structure component has a corresponding mask bit that is used in function calls to) 108 106 T -(indicate that the structure should be manipulated in some manner, such as allocating it or) 108 93 T -3 F -(T) 193.22 250 T -(able 6.1 XkbDescRec Component Refer) 200.12 250 T -(ences) 405.2 250 T -1 F -(XkbDescRec F) 217 230 T -(ield) 287.43 230 T -(F) 325 230 T -(or mor) 331.07 230 T -(e info) 363.63 230 T -2 11 Q -(ctrls) 217 215.67 T -(Chapter 10) 325 215.67 T -(serv) 217 201.67 T -(er) 235.16 201.67 T -(Chapter 16) 325 201.67 T -(map) 217 187.67 T -(Chapter 15) 325 187.67 T -(indicators) 217 173.67 T -(Chapter 8) 325 173.67 T -(names) 217 159.67 T -(Chapter 18) 325 159.67 T -(compat) 217 145.67 T -(Chapter 17) 325 145.67 T -(geom) 217 131.67 T -(Chapter 13) 325 131.67 T -216 242 396 242 2 L -V -0.5 H -0 Z -N -216 225 396 225 2 L -V -N -FMENDPAGE -%%EndPage: "27" 39 -%%Page: "28" 40 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(28) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(6 Complete K) 383.71 744.87 T -(e) 450.66 744.87 T -(yboard Description) 455.38 744.87 T -2 12 Q --0.17 (freeing it. These masks and their relationships to the fields in the) 108 712 P -5 F --0.38 -0.6 (XkbDescRec) 419.54 712 B -2 F --0.17 ( are shown) 485.54 712 P -(in Table 6.2.) 108 699 T -0 F -(6.2) 72 507 T -(Obtaining a K) 108 507 T -(e) 185.83 507 T -(yboar) 192.32 507 T -(d Description fr) 224.76 507 T -(om the Ser) 313.2 507 T -(ver) 375.34 507 T -2 F -(To retrieve one or more components of a keyboard device description, use) 108 487 T -1 F -(XkbGetK) 467.58 487 T -(e) 511.15 487 T -(y-) 516.12 487 T -(boar) 108 474 T -(d) 130.22 474 T -2 F -( \050see also) 136.22 474 T -1 F -(XkbGetK) 183.88 474 T -(e) 227.45 474 T -(yboar) 232.42 474 T -(dbyName) 259.97 474 T -2 F -(\051.) 305.29 474 T -2 11 Q -(XkbDescPtr) 108 453.67 T -3 F -(XkbGetK) 164.52 453.67 T -(eyboard) 210.08 453.67 T -2 F -(\050) 248.58 453.67 T -1 F -(display) 252.24 453.67 T -(, whic) 283.42 453.67 T -(h, de) 309.53 453.67 T -(vice_spec) 330.75 453.67 T -2 F -(\051) 373.51 453.67 T -(Display *) 126 440.67 T -1 F -(display) 189 440.67 T -2 F -(;) 220.78 440.67 T -(/* connection to X serv) 252 440.67 T -(er */) 354.49 440.67 T -(unsigned int) 126 427.67 T -1 F -(whic) 189 427.67 T -(h) 209.61 427.67 T -2 F -(;) 215.11 427.67 T -(/* mask indicating components to return */) 252 427.67 T -(unsigned int) 126 414.67 T -1 F -(de) 189 414.67 T -(vice_spec) 199.22 414.67 T -2 F -(;) 241.98 414.67 T -(/* de) 252 414.67 T -(vice for which to fetch description, or) 273.42 414.67 T -5 F --0.55 (XkbUseCoreKbd) 442.05 414.67 S -2 F -( */) 520.7 414.67 T -1 12 Q -(XkbGetK) 108 395 T -(e) 151.57 395 T -(yboar) 156.54 395 T -(d) 184.09 395 T -2 F -(allocates and returns a pointer to a keyboard description. It queries the) 193.09 395 T -(server for those components specified in the) 108 382 T -1 F -(whic) 322.96 382 T -(h) 345.44 382 T -2 F -( parameter for device) 351.44 382 T -1 F -(device_spec) 456.73 382 T -2 F -( and) 514.7 382 T -(copies the results to the) 108 369 T -5 F --0.6 (XkbDescRec) 223.66 369 S -2 F -( it allocated. The remaining fields in the keyboard) 289.66 369 T -(description are set to) 108 356 T -5 F --0.6 (NULL) 210.65 356 S -2 F -(. The valid masks for) 237.05 356 T -1 F -(which) 341.7 356 T -2 F -( are those listed in Table 6.2.) 370.37 356 T -1 F -(XkbGetK) 108 335 T -(e) 151.57 335 T -(yboar) 156.54 335 T -(d) 184.09 335 T -2 F -( can generate) 190.09 335 T -5 F --0.6 (BadAlloc) 256.39 335 S -2 F -( protocol errors.) 309.19 335 T -(To free the returned keyboard description, use) 108 314 T -1 F -(XkbF) 332.6 314 T -(r) 357.94 314 T -(eeK) 362.16 314 T -(e) 380.4 314 T -(yboar) 385.37 314 T -(d) 412.92 314 T -2 F -( \050see section 6.4\051.) 418.92 314 T -0 F -(6.3) 72 289 T -(T) 108 289 T -(rac) 114.37 289 T -(king Chang) 132.14 289 T -(es to the K) 197.6 289 T -(e) 258.77 289 T -(yboar) 265.26 289 T -(d Description in the Ser) 297.7 289 T -(ver) 432.52 289 T -2 F --0.23 (The server can generate events whenever its copy of the keyboard description for a device) 108 269 P -(changes. Refer to section 14.4 for detailed information on tracking changes to the key-) 108 256 T -(board description.) 108 243 T -0 F -(6.4) 72 218 T -(Allocating) 108 218 T -(and Freeing a K) 169.34 218 T -(e) 259.19 218 T -(yboar) 265.68 218 T -(d Description) 298.12 218 T -2 F -(Applications seldom need to directly allocate a keyboard description; calling) 108 198 T -1 F -(XkbGetK) 479.28 198 T -(e) 522.85 198 T -(y-) 527.82 198 T -(boar) 108 185 T -(d) 130.22 185 T -2 F -( usually suffices. In the event you need to create a keyboard description from) 136.22 185 T -(scratch, however, use) 108 172 T -1 F -(XkbAllocK) 214.3 172 T -(e) 265.87 172 T -(yboar) 270.84 172 T -(d) 298.39 172 T -2 F -( rather than directly calling) 304.39 172 T -1 F -(malloc) 437.36 172 T -2 F -(or) 473.03 172 T -1 F -(Xmalloc) 486.02 172 T -2 F -(.) 526.02 172 T -2 11 Q -(XkbDescRec *) 108 151.67 T -3 F -(XkbAllocK) 177.04 151.67 T -(eyboard) 229.93 151.67 T -2 F -(\050v) 268.43 151.67 T -(oid\051) 277.38 151.67 T -2 12 Q -(If) 108 132 T -1 F -(XkbAllocK) 118.99 132 T -(e) 170.57 132 T -(yboar) 175.54 132 T -(d) 203.09 132 T -2 F -( fails to allocate the keyboard description, it returns) 209.09 132 T -5 F --0.6 (NULL) 459.05 132 S -2 F -(. Other-) 485.45 132 T --0.47 (wise, it returns a pointer to an empty keyboard description structure. The) 108 119 P -1 F --0.47 (device_spec) 454.97 119 P -2 F --0.47 ( field) 512.94 119 P -(will have been initialized to) 108 106 T -5 F --0.6 (XkbUseCoreKbd) 244.32 106 S -2 F -(. You may then either fill in the structure) 330.12 106 T -(components or use Xkb functions to obtain values for the structure components from a) 108 93 T -(keyboard device.) 108 80 T -3 F -(T) 217.75 679 T -(able 6.2 Mask Bits f) 224.65 679 T -(or XkbDescRec) 328.36 679 T -1 F -(Mask Bit) 172 652 T -(XkbDescRec) 298 659 T -(F) 298 645 T -(ield) 304.79 645 T -(V) 370 652 T -(alue) 376 652 T -2 11 Q -(XkbControlsMask) 172 630.67 T -(ctrls) 298 630.67 T -(\0501L<<0\051) 370 630.67 T -(XkbServ) 172 616.67 T -(erMapMask) 210.94 616.67 T -(serv) 298 616.67 T -(er) 316.16 616.67 T -(\0501L<<1\051) 370 616.67 T -(XkbIClientMapMask) 172 602.67 T -(map) 298 602.67 T -(\0501L<<2\051) 370 602.67 T -(XkbIndicatorMapMask) 172 588.67 T -(indicators) 298 588.67 T -(\0501L<<3\051) 370 588.67 T -(XkbNamesMask) 172 574.67 T -(names) 298 574.67 T -(\0501L<<4\051) 370 574.67 T -(XkbCompatMapMask) 172 560.67 T -(compat) 298 560.67 T -(\0501L<<5\051) 370 560.67 T -(XkbGeometryMask) 172 546.67 T -(geom) 298 546.67 T -(\0501L<<6\051) 370 546.67 T -(XkbAllComponentsMask) 172 532.67 T -(All Fields) 298 532.67 T -(\0500x7f\051) 370 532.67 T -171 671 441 671 2 L -V -0.5 H -0 Z -N -171 640 441 640 2 L -V -N -FMENDPAGE -%%EndPage: "28" 40 -%%Page: "29" 41 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(29) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(6 Complete K) 383.71 744.87 T -(e) 450.66 744.87 T -(yboard Description) 455.38 744.87 T -2 12 Q --0.21 (To destroy either an entire an) 108 712 P -5 F --0.46 -0.6 (XkbDescRec) 250.71 712 B -2 F --0.21 ( or just some of its members, use) 316.71 712 P -1 F --0.21 (XkbFreeKey-) 476.03 712 P -(board.) 108 699 T -2 11 Q -(v) 108 678.67 T -(oid) 113.28 678.67 T -3 F -(XkbFr) 130.09 678.67 T -(eeK) 161.67 678.67 T -(eyboard) 179.72 678.67 T -1 F -(\050xkb, whic) 218.22 678.67 T -(h, fr) 263.27 678.67 T -(ee_all) 281.2 678.67 T -2 F -(\051) 308.08 678.67 T -(XkbDescPtr) 126 665.67 T -1 F -(xkb) 234 665.67 T -2 F -(;) 249.27 665.67 T -(/* k) 306 665.67 T -(e) 322.7 665.67 T -(yboard description with components to free */) 327.42 665.67 T -(unsigned int) 126 652.67 T -1 F -(whic) 234 652.67 T -(h) 254.61 652.67 T -2 F -(;) 260.11 652.67 T -(/* mask selecting components to free */) 306 652.67 T -(Bool) 126 639.67 T -1 F -(fr) 234 639.67 T -(ee_all) 240.93 639.67 T -2 F -(;) 267.81 639.67 T -(/*) 306 639.67 T -5 F --0.55 (True) 317.31 639.67 S -2 F -( => free all components and) 341.51 639.67 T -1 F -(xkb) 467.56 639.67 T -2 F -( */) 482.83 639.67 T -1 12 Q -(XkbF) 108 620 T -(r) 133.33 620 T -(eeK) 137.56 620 T -(e) 155.8 620 T -(yboar) 160.76 620 T -(d) 188.32 620 T -2 F -( frees the components of) 194.32 620 T -1 F -(xkb) 315.29 620 T -2 F -( specified by) 331.94 620 T -1 F -(whic) 396.26 620 T -(h) 418.75 620 T -2 F -( and sets the corre-) 424.75 620 T -(sponding values to) 108 607 T -5 F --0.6 (NULL) 201 607 S -2 F -(. If) 227.4 607 T -1 F -(fr) 244.39 607 T -(ee_all) 251.95 607 T -2 F -( is) 281.28 607 T -5 F --0.6 (True) 295.28 607 S -2 F -(,) 321.68 607 T -1 F -(XkbF) 327.68 607 T -(r) 353.02 607 T -(eeK) 357.24 607 T -(e) 375.48 607 T -(yboar) 380.45 607 T -(d) 408 607 T -2 F -( frees every non-) 414 607 T -5 F --0.6 (NULL) 494.96 607 S -2 F -(component of) 108 594 T -1 F -(xkb) 177.32 594 T -2 F -( and then frees the) 193.98 594 T -1 F -(xkb) 284.95 594 T -2 F -( structure itself.) 301.61 594 T -FMENDPAGE -%%EndPage: "29" 41 -%%Page: "30" 42 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(30) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(7 V) 450.22 744.87 T -(irtual Modi\336ers) 471.25 744.87 T -0 14 Q -(7) 72 710.67 T -(Vir) 108 710.67 T -(tual Modi\336er) 126.96 710.67 T -(s) 209.98 710.67 T -2 12 Q --0.47 (The core protocol specifies that certain keysyms, when bound to modifiers, affect the rules) 108 688 P -(of keycode to keysym interpretation for all keys; for example, when the) 108 675 T -4 11 Q -(Num_Loc) 454.93 675 T -(k) 501.78 675 T -2 12 Q -( key-) 507.28 675 T -(sym is bound to some modifier, that modifier is used to select between shifted and) 108 662 T -(unshifted state for the numeric keypad keys. The core protocol does not provide a conve-) 108 649 T --0.16 (nient way to determine the mapping of modifier bits \050in particular) 108 636 P -5 F --0.36 -0.6 (Mod1) 425.18 636 B -2 F --0.16 ( through) 451.58 636 P -5 F --0.36 -0.6 (Mod5) 494.59 636 B -2 F --0.16 (\051 to) 520.99 636 P -(keysyms such as) 108 623 T -4 11 Q -(Num_Loc) 190.99 623 T -(k) 237.84 623 T -2 12 Q -( and) 243.34 623 T -4 11 Q -(Mode_s) 266.67 623 T -(witch) 305.47 623 T -2 12 Q -(. Using the core protocol only, a client) 330.52 623 T --0.28 (application must retrieve and search the modifier map to determine the keycodes bound to) 108 610 P -(each modifier, and then retrieve and search the keyboard mapping to determine the key-) 108 597 T -(syms bound to the keycodes. It must repeat this process for all modifiers whenever any) 108 584 T -(part of the modifier mapping is changed.) 108 571 T -(Xkb alleviates these problems by defining virtual modifiers. In addition to the eight core) 108 550 T -(modifiers, referred to as the) 108 537 T -1 F -(r) 243.96 537 T -(eal modi\336er) 248.18 537 T -(s) 305.72 537 T -2 F -(, Xkb provides a set of sixteen named) 310.39 537 T -1 F -(virtual) 494.03 537 T -(modi\336er) 108 524 T -(s) 147.88 524 T -2 F -(. Each virtual modifier can be bound to any set of the real modifiers \050) 152.54 524 T -5 F --0.6 (Shift) 484.81 524 S -2 F -(,) 517.81 524 T -5 F --0.6 (Lock) 108 511 S -2 F -(,) 134.4 511 T -5 F --0.6 (Control,) 140.4 511 S -2 F -( and) 193.2 511 T -5 F --0.6 (Mod1) 216.53 511 S -2 F -(-) 242.93 511 T -5 F --0.6 (Mod5) 246.93 511 S -2 F -(\051.) 273.33 511 T -(The separation of function from physical modifier bindings makes it easier to specify) 108 490 T --0.31 (more clearly the intent of a binding. X servers do not all assign modifiers the same way \321) 108 477 P --0.41 (for example,) 108 464 P -4 11 Q --0.42 (Num_Loc) 170.83 464 P --0.42 (k) 217.68 464 P -2 12 Q --0.41 ( might be bound to) 223.18 464 P -5 F --0.98 (Mod2) 314.8 464 P -2 F --0.41 ( for one vendor and to) 343.6 464 P -5 F --0.98 (Mod4) 450.45 464 P -2 F --0.41 ( for another.) 479.25 464 P --0.38 (This makes it cumbersome to automatically remap the keyboard to a desired configuration) 108 451 P -(without some kind of prior knowledge about the keyboard layout and bindings. With) 108 438 T -(XKB, applications can use virtual modifiers to specify the desired behavior, without) 108 425 T -(regard for the actual physical bindings in effect.) 108 412 T -0 F -(7.1) 72 387 T -(Vir) 108 387 T -(tual Modi\336er Names and Masks) 124.25 387 T -2 F --0.15 (Virtual modifiers are named by converting their string name to an X) 108 367 P -5 F --0.32 -0.6 (Atom) 436.86 367 B -2 F --0.15 ( and storing the) 463.26 367 P -(Atom in the) 108 354 T -1 F -(names.vmods) 168.34 354 T -2 F -( array in an) 232.66 354 T -5 F --0.6 (XkbDescRec) 289.97 354 S -2 F -( structure \050see section 6.1\051. The posi-) 355.97 354 T -(tion of a name Atom in the) 108 341 T -1 F -(names.vmods) 240.32 341 T -2 F -( array defines the bit position used to represent) 304.64 341 T -(the virtual modifier and also the index used when accessing virtual modifier information) 108 328 T --0.37 (in arrays: the name in the i-th \0500 relative\051 entry of) 108 315 P -1 F --0.37 (names.vmods) 344.89 315 P -2 F --0.37 ( is the i-th virtual modifier,) 409.21 315 P --0.19 (represented by the mask \0501<) 141.98 415 T -1 F -(vmods) 152.75 415 T -2 F -([virtual_modifier_index] is zero\051.) 183.41 415 T -(Some Xkb operations ignore modifier definitions in which the virtual modifiers are) 108 394 T -(unbound. Consider this example:) 108 381 T -2 11 Q -(if \050state matches {Shift}\051 Do OneThing;) 144 360.67 T -(if \050state matches {Shift+NumLock}\051 Do Another;) 144 348.67 T -2 12 Q --0.32 (If the) 108 330 P -5 F --0.71 -0.6 (NumLock) 136.01 330 B -2 F --0.32 ( virtual modifier is not bound to any real modifiers, the effective masks for) 182.21 330 P -(these two cases are identical \050that is, contain only) 108 317 T -5 F --0.6 (Shift) 348.62 317 S -2 F -(\051. When it is essential to distin-) 381.62 317 T -(guish between) 108 304 T -(OneThing) 179.99 304 T -( and Another, Xkb considers only those modifier definitions for) 228.65 304 T -(which all virtual modifiers are bound.) 108 291 T -0 F -(7.5) 72 266 T -(Con) 108 266 T -(ventions) 130.85 266 T -2 F -(The Xkb extension does not require any specific virtual modifier names. However, every-) 108 246 T -(one benefits if the same names are used for common modifiers. The following names are) 108 233 T -(suggested:) 108 220 T -5 F --0.6 (NumLock) 126 199 S --0.6 (ScrollLock) 126 186 S --0.6 (Alt) 126 173 S --0.6 (Meta) 126 160 S --0.6 (AltGr) 126 147 S --0.6 (LevelThree) 126 134 S -0 F -(7.6) 72 109 T -(Example) 108 109 T -2 F -(If the second \0500-relative\051 entry in) 108 89 T -1 F -(names.vmods) 269.95 89 T -2 F -( contains the Atom for \322NumLock\323, then) 334.27 89 T --0.41 (0x4 \0501<<2\051 is the virtual modifier bit for the) 108 76 P -5 F --0.89 -0.6 (NumLock) 319.53 76 B -2 F --0.41 ( virtual modifier. If) 365.73 76 P -1 F --0.41 (server.vmods) 459.77 76 P -2 F --0.41 ([2]) 523.41 76 P -FMENDPAGE -%%EndPage: "32" 44 -%%Page: "33" 45 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(33) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(7 V) 450.22 744.87 T -(irtual Modi\336ers) 471.25 744.87 T -2 12 Q -(contains) 108 712 T -5 F --0.6 (Mod3Mask) 151 712 S -2 F -(, then the) 203.8 712 T -5 F --0.6 (NumLock) 251.12 712 S -2 F -( virtual modifier is bound to the) 297.33 712 T -5 F --0.6 (Mod3) 452.99 712 S -2 F -( real modi-) 479.39 712 T -(fier.) 108 699 T -(A virtual modifier definition for this example would have:) 108 678 T -(real_mods = 0) 126 657 T -(vmods = 0x4 \050NumLock named virtual modifier\051) 126 644 T -(mask = 0x20 \050Mod3Mask\051) 126 631 T -(Continuing the example, if the keyboard has a) 108 610 T -4 11 Q -(Num_Loc) 332.3 610 T -(k) 379.15 610 T -2 12 Q -( keysym bound to the key with) 384.65 610 T -(keycode 14, and the) 108 597 T -5 F --0.6 (NumLock) 206.98 597 S -2 F -( virtual modifier is bound to this key,) 253.18 597 T -1 F -(server.vmodmap) 434.85 597 T -2 F -([14]) 514.49 597 T -(contains 0x4.) 108 584 T -(Finally, if the keyboard also used the real) 108 563 T -5 F --0.6 (Mod1) 309.64 563 S -2 F -( modifier for numeric lock operations, the) 336.04 563 T -(modifier definition below would represent the situation where either the key bound to) 108 550 T -5 F --0.6 (Mod1) 108 537 S -2 F -( or the) 134.4 537 T -5 F --0.6 (NumLock) 168.06 537 S -2 F -( virtual modifier could be used for this purpose:) 214.26 537 T -(real_mods = 0x8 \050Mod1Mask\051) 126 516 T -(vmods = 0x4 \050NumLock named virtual modifier\051) 126 503 T -(mask = 0x28 \050Mod1Mask | Mod3Mask\051) 126 490 T -FMENDPAGE -%%EndPage: "33" 45 -%%Page: "34" 46 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(34) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(8 Indicators) 482.26 744.87 T -0 14 Q -(8) 72 710.67 T -(Indicator) 108 710.67 T -(s) 166.91 710.67 T -2 12 Q -(Although the core X implementation supports up to 32 LEDs on an input device, it does) 108 688 T -(not provide any linkage between the state of the LEDs and the logical state of the input) 108 675 T -(device. For example, most keyboards have a) 108 662 T -5 F --0.6 (CapsLock) 324.29 662 S -2 F -( LED, but X does not provide a) 377.09 662 T -(mechanism to make the LED automatically follow the logical state of the) 108 649 T -4 11 Q -(CapsLoc) 462.62 649 T -(k) 505.81 649 T -2 12 Q -( key.) 511.31 649 T -(Furthermore, the core X implementation does not provide clients with the ability to deter-) 108 628 T --0.31 (mine what bits in the) 108 615 P -1 F --0.31 (led_mask) 210.1 615 P -2 F --0.31 ( field of the) 255.43 615 P -5 F --0.69 -0.6 (XKeyboardState) 312.83 615 B -2 F --0.31 ( map to the particular LEDs) 405.23 615 P --0.25 (on the keyboard. For example, X does not provide a method for a client to determine what) 108 602 P -(bit to set in the) 108 589 T -1 F -(led_mask) 182.34 589 T -2 F -( field to turn on the) 227.66 589 T -2 11 Q -(Scroll Lock) 322.99 589 T -2 12 Q -(LED or whether the keyboard) 377.38 589 T -(even has a) 108 576 T -2 11 Q -(Scroll Lock) 160.98 576 T -2 12 Q -( LED.) 212.61 576 T --0.13 (Xkb provides indicator names and programmable indicators to help solve these problems.) 108 555 P -(Using Xkb, clients can determine the names of the various indicators, determine and con-) 108 542 T -(trol the way that the individual indicators should be updated to reflect keyboard changes,) 108 529 T -(and determine which of the 32 keyboard indicators reported by the protocol are actually) 108 516 T --0.45 (present on the keyboard. Clients may also request immediate notification of changes to the) 108 503 P -(state of any subset of the keyboard indicators, which makes it straightforward to provide) 108 490 T --0.4 (an on-screen \322virtual\323 LED panel. This chapter describes Xkb indicators and the functions) 108 477 P -(used for manipulating them.) 108 464 T -0 F -(8.1) 72 439 T -(Indicator Names) 108 439 T -2 F -(Xkb provides the capability of symbolically naming indicators. Xkb itself doesn\325t use) 108 419 T --0.23 (these symbolic names for anything; they are there only to help make the keyboard descrip-) 108 406 P --0.23 (tion comprehensible to humans. To set the names of specific indicators, use) 108 393 P -1 F --0.23 (XkbSetNames) 471.24 393 P -2 F -(as discussed in Chapter 18. Then set the map using) 108 380 T -1 F -(XkbSetMap) 355.64 380 T -2 F -( \050see section 14.3\051 or) 410.96 380 T -1 F -(Xkb-) 514.27 380 T --0.06 (SetNamedIndicator) 108 367 P -2 F --0.06 ( \050below\051. To retrieve indicator names, use) 201.32 367 P -1 F --0.06 (XkbGetNames) 404.49 367 P -2 F --0.06 ( \050Chapter 18\051.) 473.14 367 P -0 F -(8.2) 72 342 T -(Indicator Data Structures) 108 342 T -2 F -(Use the indicator description record,) 108 322 T -5 F --0.6 (XkbIndicatorRec) 285.96 322 S -2 F -(, and its indicator map,) 384.96 322 T -5 F --0.6 (XkbIndicatorMapRec) 108 309 S -2 F -(, to inquire about and control most indicator properties and) 226.8 309 T -(behaviors.) 108 296 T -0 F -(8.2.1) 72 271 T -(XkbIndicatorRec) 108 271 T -2 F -(The description for all the Xkb indicators is held in the) 108 251 T -1 F -(indicators) 374.3 251 T -2 F -( field of the complete) 422.98 251 T -(keyboard description \050see Chapter 6\051, which is defined as follows:) 108 238 T -2 11 Q -(#de\336ne) 126 217.67 T -(XkbNumIndicators) 162 217.67 T -(32) 279 217.67 T -(typedef struct {) 126 197.67 T -(unsigned long) 144 184.67 T -(ph) 270 184.67 T -(ys_indicators;) 280.95 184.67 T -(/* LEDs e) 414 184.67 T -(xistence */) 458.44 184.67 T -(XkbIndicatorMapRec) 144 171.67 T -(maps[XkbNumIndicators];) 270 171.67 T -(/* indicator maps */) 414 171.67 T -(}) 126 158.67 T -3 F -(XkbIndicatorRec) 134.03 158.67 T -2 F -(,*XkbIndicatorPtr;) 215.91 158.67 T -2 12 Q -(This structure contains the) 108 139 T -1 F -(phys_indicators) 237.98 139 T -2 F -( field, which relates some information about) 314.65 139 T -(the correspondence between indicators and physical LEDs on the keyboard, and an array) 108 126 T -(of indicator) 108 113 T -1 F -(maps) 166.66 113 T -2 F -(, one map per indicator.) 191.99 113 T -(The) 108 92 T -1 F -(phys_indicators) 129.66 92 T -2 F -( field indicates which indicators are bound to physical LEDs on the) 206.33 92 T -(keyboard; if a bit is set in) 108 79 T -1 F -(phys_indicators) 232.99 79 T -2 F -(, then the associated indicator has a physical) 309.66 79 T -FMENDPAGE -%%EndPage: "34" 46 -%%Page: "35" 47 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(35) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(8 Indicators) 482.26 744.87 T -2 12 Q --0.02 (LED associated with it. This field is necessary because some indicators may not have cor-) 108 712 P -(responding physical LEDs on the keyboard. For example, most keyboards have an LED) 108 699 T -(for indicating the state of) 108 686 T -5 F --0.6 (CapsLock) 231.65 686 S -2 F -(, but most keyboards do not have an LED that indi-) 284.45 686 T --0.24 (cates the current group. Because) 108 673 P -1 F --0.24 (phys_indicators) 265.41 673 P -2 F --0.24 ( describes a physical characteristic of the) 342.08 673 P -(keyboard, you cannot directly change it under program control. However, if a client pro-) 108 660 T -(gram loads a completely new keyboard description via) 108 647 T -1 F -(XkbGetK) 373.28 647 T -(e) 416.86 647 T -(yboar) 421.82 647 T -(dByName) 449.38 647 T -2 F -(, or if a) 496.03 647 T -(new keyboard is attached and the X implementation notices,) 108 634 T -1 F -(phys_indicators) 400.62 634 T -2 F -( changes if) 477.29 634 T -(the indicators for the new keyboard are different.) 108 621 T -0 F -(8.2.2) 72 596 T -(XkbIndicatorMapRec) 108 596 T -2 F -(Each indicator has its own set of attributes that specify whether clients can explicitly set) 108 576 T -(its state and whether it tracks the keyboard state. The attributes of each indicator are held) 108 563 T -(in the) 108 550 T -1 F -(maps) 138 550 T -2 F -( array, which is an array of) 163.33 550 T -5 F --0.6 (XkbIndicatorRec) 295.28 550 S -2 F -( structures:) 394.29 550 T -2 11 Q -(typedef struct {) 126 529.67 T -(unsigned char) 144 516.67 T -(\337ags;) 234 516.67 T -(/* ho) 315 516.67 T -(w the indicator can be changed */) 337.03 516.67 T -(unsigned char) 144 503.67 T -(which_groups;) 234 503.67 T -(/* match criteria for groups */) 315 503.67 T -(unsigned char) 144 490.67 T -(groups;) 234 490.67 T -(/* which k) 315 490.67 T -(e) 361.33 490.67 T -(yboard groups the indicator w) 366.05 490.67 T -(atches */) 497.92 490.67 T -(unsigned char) 144 477.67 T -(which_mods;) 234 477.67 T -(/* match criteria for modi\336ers */) 315 477.67 T -(XkbModsRec) 144 464.67 T -(mods;) 234 464.67 T -(/* which modi\336ers the indicator w) 315 464.67 T -(atches */) 466.13 464.67 T -(unsigned int) 144 451.67 T -(ctrls;) 234 451.67 T -(/* which controls the indicator w) 315 451.67 T -(atches */) 460.01 451.67 T -(}) 126 438.67 T -3 F -(XkbIndicatorMapRec) 134.03 438.67 T -2 F -(, *XkbIndicatorMapPtr;) 237.91 438.67 T -2 12 Q -(This indicator map specifies for each indicator:) 108 419 T -2 11 Q -(\245) 126 398.67 T -(The conditions under which the k) 139.68 398.67 T -(e) 287.14 398.67 T -(yboard modi\336er state af) 291.85 398.67 T -(fects the indicator) 396.36 398.67 T -(\245) 126 386.67 T -(The conditions under which the k) 139.68 386.67 T -(e) 287.14 386.67 T -(yboard group state af) 291.85 386.67 T -(fects the indicator) 384.75 386.67 T -(\245) 126 374.67 T -(The conditions under which the state of the boolean controls af) 139.68 374.67 T -(fects the indicator) 416.8 374.67 T -(\245) 126 362.67 T -(The ef) 139.68 362.67 T -(fect \050if an) 167.81 362.67 T -(y\051 of attempts to e) 210.4 362.67 T -(xplicitly change the state of the indicator using the) 290.28 362.67 T -(functions) 139.68 350.67 T -1 12 Q -(XkbSetControls) 183.37 350.67 T -2 11 Q -( or) 258.71 350.67 T -1 F -(XChang) 273.37 350.67 T -(eK) 309.32 350.67 T -(e) 321.15 350.67 T -(yboar) 325.71 350.67 T -(dContr) 350.96 350.67 T -(ol) 381.64 350.67 T -2 12 Q -(For more information on the effects of explicit changes to indicators and the relationship) 108 332 T -(to the indicator map, see section 8.4.1.) 108 319 T -0 11 Q -(XkbIndicatorMapRec flags field) 108 296.67 T -2 12 Q -(The) 108 278 T -1 F -(flags) 129.66 278 T -2 F -( field specifies the conditions under which the indicator can be changed and the) 153 278 T -(effects of changing the indicator. The valid values for) 108 265 T -1 F -(flags) 368.6 265 T -2 F -( and their effects are shown in) 391.94 265 T -(Table 8.1.) 108 252 T -(Note that if) 108 111 T -5 F --0.6 (XkbIM_NoAutomatic) 165.66 111 S -2 F -( is not set, by default the indicator follows the key-) 277.86 111 T -(board state.) 108 98 T -3 F -(T) 220.42 232 T -(able 8.1 XkbIndicatorMapRec \337ags Field) 227.32 232 T -1 F -(V) 109 212 T -(alue) 115 212 T -(Ef) 271 212 T -(fect) 281.45 212 T -2 11 Q -(XkbIM_NoExplicit) 109 197.67 T -(\0501L<<7\051) 217 197.67 T -(Client applications cannot change the state of the indicator) 271 197.67 T -(.) 528.25 197.67 T -(XkbIM_NoAutomatic) 109 183.67 T -(\0501L<<6\051) 217 183.67 T --0.14 (Xkb does not automatically change the v) 271 183.67 P --0.14 (alue of the indicator) 449.52 183.67 P -(based upon a change in the k) 271 172.67 T -(e) 397.97 172.67 T -(yboard state, re) 402.69 172.67 T -(g) 470.03 172.67 T -(ardless of the) 475.48 172.67 T -(v) 271 161.67 T -(alues for the other \336elds of the indicator map.) 276.23 161.67 T -(XkbIM_LEDDri) 109 147.67 T -(v) 182.66 147.67 T -(esKB) 187.99 147.67 T -(\0501L<<5\051) 217 147.67 T --0.41 (A client application changing the state of the indicator causes) 271 147.67 P -(the state of the k) 271 136.67 T -(e) 343.6 136.67 T -(yboard to change.) 348.32 136.67 T -108 224 540 224 2 L -V -0.5 H -0 Z -N -108 207 540 207 2 L -V -N -FMENDPAGE -%%EndPage: "35" 47 -%%Page: "36" 48 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(36) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(8 Indicators) 482.26 744.87 T -2 12 Q --0.44 (If) 108 712 P -5 F --0.96 -0.6 (XkbIM_LEDDrivesKB) 118.56 712 B -2 F --0.44 ( is set and) 230.76 712 P -5 F --0.96 -0.6 (XkbIM_NoExplicit) 279.67 712 B -2 F --0.44 ( is not, and if you call a function) 385.28 712 P -(which updates the server\325s image of the indicator map \050such as) 108 699 T -1 F -(XkbSetIndicatorMap) 412.93 699 T -2 F -( or) 512.92 699 T -1 F -(XkbSetNamedIndicator) 108 686 T -2 F -(\051, Xkb changes the keyboard state and controls to reflect the other) 219.98 686 T --0.05 (fields of the indicator map, as described in the remainder of this section. If you attempt to) 108 673 P -(explicitly change the value of an indicator for which) 108 660 T -5 F --0.6 (XkbIM_LEDDrivesKB) 362.28 660 S -2 F -( is absent or) 474.48 660 T -(for which) 108 647 T -5 F --0.6 (XkbIM_NoExplicit) 157.32 647 S -2 F -( is present, keyboard state or controls are unaffected.) 262.92 647 T -(For example, a keyboard designer may want to make the) 108 626 T -5 F --0.6 (CapsLock) 382.94 626 S -2 F -( LED controllable) 435.74 626 T -(only by the server, but allow the) 108 613 T -2 11 Q -(Scroll Lock) 265.98 613 T -2 12 Q -( LED to be controlled by client applications.) 317.61 613 T -(To do so, the keyboard designer could set the) 108 600 T -5 F --0.6 (XkbIM_NoExplicit) 328.63 600 S -2 F -( flag for the) 434.23 600 T -5 F --0.6 (CapsLock) 108 587 S -2 F -(LED, but not set it for the) 163.55 587 T -2 11 Q -(Scroll Lock) 290.21 587 T -2 12 Q -( LED. Or the keyboard designer may) 341.85 587 T -(wish to allow the) 108 574 T -5 F --0.6 (CapsLock) 193.33 574 S -2 F -( LED to be controlled by both the server and client applica-) 246.13 574 T --0.22 (tions and also have the server to automatically change the) 108 561 P -5 F --0.48 -0.6 (CapsLock) 385.77 561 B -2 F --0.22 (modifier state when-) 441.12 561 P -(ever a client application changes the) 108 548 T -5 F --0.6 (CapsLock) 285.29 548 S -2 F -( LED. To do so, the keyboard designer) 338.09 548 T -(would not set the) 108 535 T -5 F --0.6 (XkbIM_NoExplicit) 193.33 535 S -2 F -( flag, but would instead set the) 298.93 535 T -5 F --0.6 (XkbIM_LEDDrivesKB) 108 522 S -2 F -( flag.) 220.2 522 T -(The remaining fields in the indicator map specify the conditions under which Xkb auto-) 108 501 T -(matically turns an indicator on or off \050only if) 108 488 T -5 F --0.6 (XkbIM_NoAutomatic) 326.3 488 S -2 F -( is not set\051. If these) 438.51 488 T -(conditions match the keyboard state, Xkb turns the indicator on. If the conditions do not) 108 475 T -(match, Xkb turns the indicator off.) 108 462 T -0 11 Q -(XkbIndicatorMapRec which_groups and groups fields) 108 439.67 T -2 12 Q --0.09 (The) 108 421 P -1 F --0.09 (which_groups) 129.57 421 P -2 F --0.09 ( and the) 197.57 421 P -1 F --0.09 (groups) 238.29 421 P -2 F --0.09 ( fields of an indicator map determine how the keyboard) 271.63 421 P -(group state affects the corresponding indicator. The) 108 408 T -1 F -(which_groups) 358.61 408 T -2 F -( field controls the inter-) 426.61 408 T -(pretation of) 108 395 T -1 F -(groups) 166.66 395 T -2 F -( and may contain any one of the following values:) 199.99 395 T -2 11 Q -(#de\336ne XkbIM_UseNone) 126 374.67 T -(0) 279 374.67 T -(#de\336ne XkbIM_UseBase) 126 361.67 T -(\0501L << 0\051) 279 361.67 T -(#de\336ne XkbIM_UseLatched) 126 348.67 T -(\0501L << 1\051) 279 348.67 T -(#de\336ne XkbIM_UseLock) 126 335.67 T -(ed) 238.62 335.67 T -(\0501L << 2\051) 279 335.67 T -(#de\336ne XkbIM_UseEf) 126 322.67 T -(fecti) 226.23 322.67 T -(v) 245.5 322.67 T -(e) 250.84 322.67 T -(\0501L << 3\051) 279 322.67 T -(#de\336ne XkbIM_UseAn) 126 309.67 T -(yGroup) 229.4 309.67 T -(XkbIM_UseLatched | XkbIM_UseLock) 279 309.67 T -(ed |) 454.6 309.67 T -(XkbIM_UseEf) 279 296.67 T -(fecti) 344.1 296.67 T -(v) 363.37 296.67 T -(e) 368.7 296.67 T -2 12 Q -(The) 108 277 T -1 F -(groups) 129.66 277 T -2 F -(field specifies what keyboard groups an indicator watches and is the bitwise) 166 277 T -(inclusive OR of the following valid values:) 108 264 T -2 11 Q -(#de\336ne XkbGroup1Mask) 126 243.67 T -(\0501<<0\051) 279 243.67 T -(#de\336ne XkbGroup2Mask) 126 230.67 T -(\0501<<1\051) 279 230.67 T -(#de\336ne XkbGroup3Mask) 126 217.67 T -(\0501<<2\051) 279 217.67 T -(#de\336ne XkbGroup4Mask) 126 204.67 T -(\0501<<3\051) 279 204.67 T -(#de\336ne XkbAn) 126 191.67 T -(yGroupMask) 193.35 191.67 T -(\0501<<7\051) 279 191.67 T -(#de\336ne XkbAllGroupsMask) 126 178.67 T -(\0500xf\051) 279 178.67 T -FMENDPAGE -%%EndPage: "36" 48 -%%Page: "37" 49 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(37) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(8 Indicators) 482.26 744.87 T -2 12 Q -(If) 108 712 T -5 F --0.6 (XkbIM_NoAutomatic) 118.99 712 S -2 F -( is not set \050the keyboard drives the indicator\051, the effect of) 231.19 712 T -1 F -(which_groups) 108 699 T -2 F -( and) 176 699 T -1 F -(gr) 199.33 699 T -(oups) 209.46 699 T -2 F -( is shown in Table 8.2.) 232.13 699 T -(The effect of) 108 469 T -1 F -(which_groups) 172.97 469 T -2 F -( and) 240.97 469 T -1 F -(groups) 264.3 469 T -2 F -( when you change an indicator for which) 297.64 469 T -5 F --0.6 (XkbIM_LEDDrivesKB) 108 456 S -2 F -( is set \050the indicator drives the keyboard\051 is shown in Table 8.3.) 220.2 456 T -(The \322New State\323 column refers to the new state to which you set the indicator.) 108 443 T -0 11 Q -(XkbIndicatorMapRec which_mods and mods fields) 108 172.67 T -2 12 Q -(The) 108 154 T -1 F -(mods) 129.66 154 T -2 F -(field specifies what modifiers an indicator watches. The) 157.99 154 T -1 F -(mods) 429.6 154 T -2 F -( field is an Xkb) 454.93 154 T --0.33 (modifier definition,) 108 141 P -5 F --0.72 -0.6 (XkbModsRec) 204.34 141 B -2 F --0.33 (, as described in section 7.2, which can specify both real) 270.34 141 P -(and virtual modifiers. The) 108 128 T -1 F -(mods) 236.32 128 T -2 F -( field takes effect even if some or all of the virtual indica-) 261.65 128 T -(tors specified in) 108 115 T -1 F -(mods) 187.66 115 T -2 F -( are unbound. To specify the mods field, in general, assign the mod-) 212.99 115 T -(ifiers of interest to) 108 102 T -1 F -(mods.r) 199.32 102 T -(eal_mods) 231.88 102 T -2 F -( and the virtual modifiers of interest to) 277.87 102 T -1 F -(mods.vmods) 465.85 102 T -2 F -(.) 524.84 102 T -(You can disregard the) 108 89 T -1 F -(mods.mask) 216.64 89 T -2 F -( field unless your application needs to interpret the indi-) 269.63 89 T --0.47 (cator map directly \050that is, to simulate automatic indicator behavior on its own\051. Relatively) 108 76 P -3 F -(T) 93 679 T -(able 8.2 XkbIndicatorMapRec which_gr) 99.9 679 T -(oups and gr) 309.35 679 T -(oups, K) 369.82 679 T -(eyboard Dri) 408.86 679 T -(v) 471.07 679 T -(es Indicator) 476.95 679 T -1 F -(whic) 111 659 T -(h_gr) 133.49 659 T -(oups) 155.62 659 T -(Ef) 219 659 T -(fect) 229.45 659 T -2 11 Q -(XkbIM_UseNone) 111 643.67 T -(The) 219 643.67 T -1 F -(gr) 238.85 643.67 T -(oups) 248.14 643.67 T -2 F -( \336eld and the current k) 268.92 643.67 T -(e) 368.09 643.67 T -(yboard group state are ignored.) 372.81 643.67 T -(XkbIM_UseBase) 111 628.67 T -(If) 219 628.67 T -1 12 Q -(gr) 229.08 628.67 T -(oups) 239.2 628.67 T -2 11 Q -( is nonzero, the indicator is lit whene) 261.87 628.67 T -(v) 424.13 628.67 T -(er the base k) 429.47 628.67 T -(e) 484.64 628.67 T -(yboard) 489.36 628.67 T --0.37 (group is nonzero. If) 219 617.67 P -1 12 Q --0.4 (gr) 307.02 617.67 P --0.4 (oups) 317.15 617.67 P -2 11 Q --0.37 ( is zero, the indicator is lit whene) 339.82 617.67 P --0.37 (v) 482.99 617.67 P --0.37 (er the base) 488.33 617.67 P -(k) 219 606.67 T -(e) 224.39 606.67 T -(yboard group is zero.) 229.11 606.67 T -(XkbIM_UseLatched) 111 591.67 T -(If) 219 591.67 T -1 12 Q -(gr) 229.08 591.67 T -(oups) 239.2 591.67 T -2 11 Q -( is nonzero, the indicator is lit whene) 261.87 591.67 T -(v) 424.13 591.67 T -(er the latched k) 429.47 591.67 T -(e) 496.86 591.67 T -(yboard) 501.58 591.67 T -(group is nonzero. If) 219 580.67 T -1 12 Q -(gr) 308.51 580.67 T -(oups) 318.64 580.67 T -2 11 Q -( is zero, the indicator is lit whene) 341.3 580.67 T -(v) 487.06 580.67 T -(er the) 492.4 580.67 T -(latched k) 219 569.67 T -(e) 258.91 569.67 T -(yboard group is zero.) 263.63 569.67 T -(XkbIM_UseLock) 111 554.67 T -(ed) 188.48 554.67 T -(The) 219 554.67 T -1 12 Q -(gr) 238.85 554.67 T -(oups) 248.98 554.67 T -2 11 Q -( \336eld is interpreted as a mask. The indicator is lit when the) 271.65 554.67 T -(current lock) 219 543.67 T -(ed k) 271.73 543.67 T -(e) 290.26 543.67 T -(yboard group matches one of the bits that are set in) 294.98 543.67 T -1 12 Q -(gr) 219 532.67 T -(oups) 229.13 532.67 T -2 11 Q -(.) 251.8 532.67 T -(XkbIM_UseEf) 111 517.67 T -(fecti) 176.1 517.67 T -(v) 195.37 517.67 T -(e) 200.71 517.67 T -(The) 219 517.67 T -1 12 Q -(gr) 238.85 517.67 T -(oups) 248.98 517.67 T -2 11 Q -( \336eld is interpreted as a mask. The indicator is lit when the) 271.65 517.67 T -(current ef) 219 506.67 T -(fecti) 261.17 506.67 T -(v) 280.45 506.67 T -(e k) 285.78 506.67 T -(e) 298.8 506.67 T -(yboard group matches one of the bits that are set in) 303.52 506.67 T -1 12 Q -(gr) 219 495.67 T -(oups) 229.13 495.67 T -2 11 Q -(.) 251.8 495.67 T -3 12 Q -(T) 93 423 T -(able 8.3 XkbIndicatorMapRec which_gr) 99.9 423 T -(oups and gr) 309.35 423 T -(oups, Indicator Dri) 369.82 423 T -(v) 468.04 423 T -(es K) 473.92 423 T -(eyboard) 495.95 423 T -1 F -( whic) 109 403 T -(h_gr) 134.49 403 T -(oups) 156.62 403 T -(Ne) 217 403 T -(w State) 230.15 403 T -(Ef) 271 403 T -(fect on K) 281.45 403 T -(e) 324.36 403 T -(yboar) 329.33 403 T -(d Gr) 356.88 403 T -(oup State) 378.68 403 T -2 11 Q -(XkbIM_UseNone) 109 388.67 T -(On or Of) 221.95 388.67 T -(f) 261.39 388.67 T -(No ef) 271 388.67 T -(fect) 295.46 388.67 T -(XkbIM_UseBase) 109 374.67 T -(On or Of) 221.95 374.67 T -(f) 261.39 374.67 T -(No ef) 271 374.67 T -(fect) 295.46 374.67 T -(XkbIM_UseLatched) 109 360.67 T -(On) 236.78 360.67 T -(The) 271 360.67 T -1 F -(groups) 290.86 360.67 T -2 F -( \336eld is treated as a group mask. The k) 321.41 360.67 T -(e) 491.17 360.67 T -(yboard) 495.88 360.67 T -(group latch is changed to the lo) 271 349.67 T -(west numbered group speci-) 408.82 349.67 T --0.44 (\336ed in) 271 338.67 P -1 F --0.44 (groups) 300.67 338.67 P -2 F --0.44 (; if) 331.23 338.67 P -1 F --0.44 (groups) 345.63 338.67 P -2 F --0.44 ( is empty) 376.18 338.67 P --0.44 (, the k) 414.92 338.67 P --0.44 (e) 441.12 338.67 P --0.44 (yboard group latch is) 445.84 338.67 P -(changed to zero.) 271 327.67 T -(XkbIM_UseLatched) 109 313.67 T -(Of) 236 313.67 T -(f) 247.33 313.67 T --0.32 (The) 271 313.67 P -1 F --0.32 (groups) 290.54 313.67 P -2 F --0.32 ( \336eld is treated as a group mask. If the indicator is) 321.1 313.67 P -(e) 271 302.67 T -(xplicitly e) 275.72 302.67 T -(xtinguished, k) 319.86 302.67 T -(e) 382.09 302.67 T -(yboard group latch is changed to) 386.81 302.67 T --0.27 (the lo) 271 291.67 P --0.27 (west numbered group not speci\336ed in) 295.21 291.67 P -1 F --0.27 (groups) 461.65 291.67 P -2 F --0.27 (; if) 492.21 291.67 P -1 F --0.27 (groups) 506.96 291.67 P -2 F -(is zero, the k) 271 280.67 T -(e) 327.1 280.67 T -(yboard group latch is set to the inde) 331.82 280.67 T -(x of the) 489 280.67 T -(highest le) 271 269.67 T -(g) 313.31 269.67 T -(al k) 318.75 269.67 T -(e) 334.83 269.67 T -(yboard group.) 339.55 269.67 T -(XkbIM_UseLock) 109 255.67 T -(ed or) 186.48 255.67 T -(XkbIM_UseEf) 109 242.67 T -(fecti) 174.1 242.67 T -(v) 193.37 242.67 T -(e) 198.71 242.67 T -(On) 236.78 255.67 T --0.45 (If the) 271 255.67 P -1 F --0.45 (groups) 296.37 255.67 P -2 F --0.45 ( mask is empty) 326.92 255.67 P --0.45 (, group is not changed; otherwise,) 391.17 255.67 P -(the lock) 271 244.67 T -(ed k) 306.02 244.67 T -(e) 324.55 244.67 T -(yboard group is changed to the lo) 329.27 244.67 T -(west num-) 476.25 244.67 T -(bered group speci\336ed in) 271 233.67 T -1 F -(groups) 379.76 233.67 T -2 F -(.) 410.32 233.67 T -(XkbIM_UseLock) 109 219.67 T -(ed or) 186.48 219.67 T -(XkbIM_UseEf) 109 206.67 T -(fecti) 174.1 206.67 T -(v) 193.37 206.67 T -(e) 198.71 206.67 T -(Of) 236 219.67 T -(f) 247.33 219.67 T -(Lock) 271 219.67 T -(ed k) 293.49 219.67 T -(e) 312.02 219.67 T -(yboard group is changed to the lo) 316.74 219.67 T -(west numbered) 463.72 219.67 T --0.04 (group that is not speci\336ed in the) 271 208.67 P -1 F --0.04 (groups) 414.6 208.67 P -2 F --0.04 ( mask, or to) 445.16 208.67 P -5 F --0.1 -0.33 (Group1) 499.67 208.67 B -2 F -(if the) 271 197.67 T -1 F -(groups) 296.66 197.67 T -2 F -( mask contains all k) 327.22 197.67 T -(e) 414.49 197.67 T -(yboard groups.) 419.21 197.67 T -108 671 540 671 2 L -V -0.5 H -0 Z -N -108 653 540 653 2 L -V -N -108 415 540 415 2 L -V -N -108 398 540 398 2 L -V -N -FMENDPAGE -%%EndPage: "37" 49 -%%Page: "38" 50 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(38) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(8 Indicators) 482.26 744.87 T -2 12 Q -(few applications need to do so, but if you find it necessary, you can either read the indica-) 108 712 T -(tor map back from the server after you update it \050the server automatically updates the) 108 699 T -(mask field whenever any of the real or virtual modifiers are changed in the modifier defi-) 108 686 T -(nition\051 or you can use) 108 673 T -1 F -(XkbV) 215.65 673 T -(irtualModsT) 240.76 673 T -(oReal) 299.66 673 T -2 F -( to determine the proper contents for the) 327.66 673 T -(mask field, assuming that the) 108 660 T -5 F --0.6 (XkbDescRec) 251.33 660 S -2 F -( contains the virtual modifier definitions.) 317.33 660 T -1 F --0.33 (which_mods) 108 639 P -2 F --0.33 ( specifies what criteria Xkb uses to determine a match with the corresponding) 168 639 P -1 F -(mods) 108 626 T -2 F -( field by specifying one or more components of the Xkb keyboard state. If) 133.33 626 T -5 F --0.6 (XkbIM_NoAutomatic) 108 613 S -2 F -( is not set \050the keyboard drives the indicator\051, the indicator is lit) 220.2 613 T -(whenever any of the modifiers specified in the) 108 600 T -1 F -(mask) 333.95 600 T -2 F -( field of the) 358.61 600 T -1 F -( mods) 414.26 600 T -2 F -( modifier definition) 442.6 600 T -(are also set in any of the current keyboard state components specified by) 108 587 T -1 F -(which_mods) 459.59 587 T -2 F -(.) 519.59 587 T --0.2 (Remember that the) 108 574 P -1 F --0.2 (mask) 201.71 574 P -2 F --0.2 ( field is comprised of all of the real modifiers specified in the def-) 226.37 574 P -(inition plus any real modifiers that are bound to the virtual modifiers specified in the defi-) 108 561 T --0.06 (nition. \050See Chapter 5 for more information on the keyboard state and Chapter 7 for more) 108 548 P -(information on virtual modifiers.\051 Use a bitwise inclusive OR of the following values to) 108 535 T -(compose a value for) 108 522 T -1 F -(whic) 207.97 522 T -(h_mods) 230.46 522 T -2 F -(:) 267.79 522 T -2 11 Q -(#de\336ne XkbIM_UseNone) 126 501.67 T -(0) 270 501.67 T -(#de\336ne XkbIM_UseBase) 126 488.67 T -(\0501L << 0\051) 270 488.67 T -(#de\336ne XkbIM_UseLatched) 126 475.67 T -(\0501L << 1\051) 270 475.67 T -(#de\336ne XkbIM_UseLock) 126 462.67 T -(ed) 238.62 462.67 T -(\0501L << 2\051) 270 462.67 T -(#de\336ne XkbIM_UseEf) 126 449.67 T -(fecti) 226.23 449.67 T -(v) 245.5 449.67 T -(e) 250.84 449.67 T -(\0501L << 3\051) 270 449.67 T -(#de\336ne XkbIM_UseCompat) 126 436.67 T -(\0501L << 4\051) 270 436.67 T -(#de\336ne XkbIM_UseAn) 126 423.67 T -(yMods) 229.4 423.67 T -(XkbIM_UseBase | XkbIM_UseLatched |) 270 423.67 T --2.81 (XkbIM_UseLock) 452.19 423.67 P --2.81 (ed) 529.68 423.67 P -(| XkbIM_UseEf) 270 410.67 T -(fecti) 340.05 410.67 T -(v) 359.32 410.67 T -(e | XkbIM_UseCompat) 364.65 410.67 T -2 12 Q -(If) 108 391 T -5 F --0.6 (XkbIM_NoAutomatic) 118.99 391 S -2 F -( is not set \050the keyboard drives the indicator\051, the effect of) 231.19 391 T -1 F -(which_mods) 108 378 T -2 F -( and) 168 378 T -1 F -(mods) 191.33 378 T -2 F -( is shown in Table 8.4) 216.66 378 T -3 F -(T) 108 358 T -(able 8.4 XkbIndicatorMapRec which_mods and mods, K) 114.9 358 T -(eyboard Dri) 408.29 358 T -(v) 470.5 358 T -(es Indicator) 476.38 358 T -1 F -(whic) 109 338 T -(h_mods) 131.49 338 T -(Ef) 217 338 T -(fect on K) 227.45 338 T -(e) 270.36 338 T -(yboar) 275.33 338 T -(d Modi\336er) 302.88 338 T -(s) 353.09 338 T -2 11 Q -(XkbIM_UseNone) 109 323.67 T -(The mods \336eld and the current k) 217 323.67 T -(e) 359.87 323.67 T -(yboard modi\336er state are ignored.) 364.59 323.67 T -(XkbIM_UseBase) 109 309.67 T --0.3 (The indicator is lit when an) 217 309.67 P --0.3 (y of the modi\336ers speci\336ed in the) 336.02 309.67 P -1 F --0.3 (mask) 483.94 309.67 P -2 F --0.3 ( \336eld) 506.54 309.67 P -(of) 217 298.67 T -1 F -(mods) 228.91 298.67 T -2 F -( are on in the k) 252.13 298.67 T -(e) 317.7 298.67 T -(yboard base state.) 322.42 298.67 T -2 12 Q -(If both) 403.68 298.67 T -1 F -(mods.r) 439.01 298.67 T -(eal_mods) 471.57 298.67 T -2 F -(and) 217 287.67 T -1 F -(mods.vmods) 237.33 287.67 T -2 F -( are zero, the indicator is lit when the base key-) 296.32 287.67 T -(board state contains no modifiers.) 217 276.67 T -2 11 Q -(XkbIM_UseLatched) 109 262.67 T --0.3 (The indicator is lit when an) 217 262.67 P --0.3 (y of the modi\336ers speci\336ed in the) 336.02 262.67 P -1 F --0.3 (mask) 483.94 262.67 P -2 F --0.3 ( \336eld) 506.54 262.67 P -(of) 217 251.67 T -1 F -(mods) 228.91 251.67 T -2 F -( are latched.) 252.13 251.67 T -2 12 Q -(If both) 308.33 251.67 T -1 F -(mods.r) 343.66 251.67 T -(eal_mods) 376.22 251.67 T -2 F -( and) 422.21 251.67 T -1 F -(mods.vmods) 445.54 251.67 T -2 F -( are) 504.53 251.67 T -(zero, the indicator is lit when none of the modifier keys are) 217 240.67 T -(latched.) 217 229.67 T -2 11 Q -(XkbIM_UseLock) 109 215.67 T -(ed) 186.48 215.67 T --0.3 (The indicator is lit when an) 217 215.67 P --0.3 (y of the modi\336ers speci\336ed in the) 336.02 215.67 P -1 F --0.3 (mask) 483.94 215.67 P -2 F --0.3 ( \336eld) 506.54 215.67 P -(of) 217 204.67 T -1 F -(mods) 228.91 204.67 T -2 F -( are lock) 252.13 204.67 T -(ed.) 289.9 204.67 T -2 12 Q -(If both) 305.78 204.67 T -1 F -(mods.r) 341.11 204.67 T -(eal_mods) 373.67 204.67 T -2 F -( and) 419.66 204.67 T -1 F -(mods.vmods) 442.99 204.67 T -2 F -( are) 501.98 204.67 T -(zero, the indicator) 217 193.67 T -2 11 Q -(is lit when none of the modi\336er k) 306.98 193.67 T -(e) 453.22 193.67 T -(ys are lock) 457.94 193.67 T -(ed.) 505.48 193.67 T -(XkbIM_UseEf) 109 179.67 T -(fecti) 174.1 179.67 T -(v) 193.37 179.67 T -(e) 198.71 179.67 T --0.3 (The indicator is lit when an) 217 179.67 P --0.3 (y of the modi\336ers speci\336ed in the) 336.02 179.67 P -1 F --0.3 (mask) 483.94 179.67 P -2 F --0.3 ( \336eld) 506.54 179.67 P -(of) 217 168.67 T -1 F -(mods) 228.91 168.67 T -2 F -( are in the ef) 252.13 168.67 T -(fecti) 306.84 168.67 T -(v) 326.11 168.67 T -(e k) 331.44 168.67 T -(e) 344.47 168.67 T -(yboard state.) 349.19 168.67 T -2 12 Q -(If both) 408.15 168.67 T -1 F -(mods.r) 443.48 168.67 T -(eal_mods) 476.03 168.67 T -2 F -(and) 217 157.67 T -1 F -(mods.vmods) 237.33 157.67 T -2 F -( are zero, the indicator is lit when the effective) 296.32 157.67 T -(keyboard state contains no modifiers.) 217 146.67 T -2 11 Q -(XkbIM_UseCompat) 109 132.67 T --0.3 (The indicator is lit when an) 217 132.67 P --0.3 (y of the modi\336ers speci\336ed in the) 336.02 132.67 P -1 F --0.3 (mask) 483.94 132.67 P -2 F --0.3 ( \336eld) 506.54 132.67 P -(of) 217 121.67 T -1 F -(mods) 228.91 121.67 T -2 F -( are in the k) 252.13 121.67 T -(e) 303.95 121.67 T -(yboard compatibility state.) 308.67 121.67 T -2 12 Q -(If both) 429.06 121.67 T -1 F -(mods.r) 217 110.67 T -(eal_mods) 249.56 110.67 T -2 F -( and) 295.55 110.67 T -1 F -(mods.vmods) 318.88 110.67 T -2 F -( are zero, the indicator is lit) 377.87 110.67 T -(when) 217 99.67 T -2 11 Q -( the k) 242.99 99.67 T -(e) 267.32 99.67 T -(yboard compatibility state contains no modi\336ers.) 272.04 99.67 T -108 350 531 350 2 L -V -0.5 H -0 Z -N -108 333 531 333 2 L -V -N -FMENDPAGE -%%EndPage: "38" 50 -%%Page: "39" 51 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(39) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(8 Indicators) 482.26 744.87 T -2 12 Q -(The effect on the keyboard modifiers of) 108 712 T -1 F -(which_mods) 302.28 712 T -2 F -( and) 362.28 712 T -1 F -(mods) 385.61 712 T -2 F -( when you change an indi-) 410.94 712 T --0.09 (cator for which) 108 699 P -5 F --0.19 -0.6 (XkbIM_LEDDrivesKB) 184.04 699 B -2 F --0.09 ( is set \050the indicator drives the keyboard\051 is shown) 296.25 699 P -(in Table 8.5. The \322New State\323 column refers to the new state to which you set the indica-) 108 686 T -(tor.) 108 673 T -0 11 Q -(XkbIndicatorMapRec ctrls field) 108 417.67 T -2 12 Q -(The) 108 399 T -1 F -(ctrls) 129.66 399 T -2 F -( field specifies what controls \050see Chapter 10\051 the indicator watches and is com-) 151 399 T -(posed using the bitwise inclusive OR of the following values:) 108 386 T -2 11 Q -(#de\336ne XkbRepeatK) 126 365.67 T -(e) 218.29 365.67 T -(ysMask) 223.01 365.67 T -(\0501L << 0\051) 297 365.67 T -(#de\336ne XkbSlo) 126 352.67 T -(wK) 194.48 352.67 T -(e) 210.08 352.67 T -(ysMask) 214.8 352.67 T -(\0501L << 1\051) 297 352.67 T -(#de\336ne XkbBounceK) 126 339.67 T -(e) 221.35 339.67 T -(ysMask) 226.07 339.67 T -(\0501L << 2\051) 297 339.67 T -(#de\336ne XkbStick) 126 326.67 T -(yK) 202.53 326.67 T -(e) 215.69 326.67 T -(ysMask) 220.41 326.67 T -(\0501L << 3\051) 297 326.67 T -(#de\336ne XkbMouseK) 126 313.67 T -(e) 217.68 313.67 T -(ysMask) 222.4 313.67 T -(\0501L << 4\051) 297 313.67 T -(#de\336ne XkbMouseK) 126 300.67 T -(e) 217.68 300.67 T -(ysAccelMask) 222.4 300.67 T -(\0501L << 5\051) 297 300.67 T -(#de\336ne XkbAccessXK) 126 287.67 T -(e) 226.84 287.67 T -(ysMask) 231.56 287.67 T -(\0501L << 6\051) 297 287.67 T -(#de\336ne XkbAccessXT) 126 274.67 T -(imeoutMask) 225.51 274.67 T -(\0501L << 7\051) 297 274.67 T -(#de\336ne XkbAccessXFeedbackMask) 126 261.67 T -(\0501L << 8\051) 297 261.67 T -(#de\336ne XkbAudibleBellMask) 126 248.67 T -(\0501L << 9\051) 297 248.67 T -(#de\336ne XkbOv) 126 235.67 T -(erlay1Mask) 193.35 235.67 T -(\0501L << 10\051) 297 235.67 T -(#de\336ne XkbOv) 126 222.67 T -(erlay2Mask) 193.35 222.67 T -(\0501L << 11\051) 297 222.67 T -(#de\336ne XkbAllBooleanCtrlsMask) 126 209.67 T -(\0500x00001FFF\051) 297 209.67 T -2 12 Q --0.16 (Xkb lights the indicator whenever any of the boolean controls specified in) 108 190 P -1 F --0.16 (ctrls) 464.66 190 P -2 F --0.16 ( is enabled.) 486 190 P -0 F -(8.3) 72 165 T -(Getting Inf) 108 165 T -(ormation About Indicator) 167.76 165 T -(s) 310.92 165 T -2 F -(Xkb allows applications to obtain information about indicators using two different meth-) 108 145 T --0.06 (ods. The first method, which is similar to the core X implementation, uses a mask to spec-) 108 132 P -(ify the indicators. The second method, which is more suitable for applications concerned) 108 119 T -(with interoperability, uses indicator names. The correspondence between the indicator) 108 106 T --0.16 (name and the bit position in masks is as follows: one of the parameters returned from) 108 93 P -1 F --0.16 (Xkb-) 517.34 93 P -(GetNamedIndicator) 108 80 T -(s) 203.87 80 T -2 F -( is an index that is the bit position to use in any function call that) 208.54 80 T -3 F -(T) 108 653 T -(able 8.5 XkbIndicatorMapRec which_mods and mods, Indicator Dri) 114.9 653 T -(v) 467.46 653 T -(es K) 473.34 653 T -(eyboard) 495.37 653 T -1 F -(whic) 109 632 T -(h_mods) 131.49 632 T -(Ne) 217 632 T -(w State) 230.15 632 T -(Ef) 271 632 T -(fect on K) 281.45 632 T -(e) 324.36 632 T -(yboar) 329.33 632 T -(d Modi\336er) 356.88 632 T -(s) 407.09 632 T -2 11 Q -(XkbIM_UseNone or) 109 614.67 T -(XkbIM_UseBase) 109 601.67 T -(On or Of) 221.95 614.67 T -(f) 261.39 614.67 T -(No Ef) 271 614.67 T -(fect) 297.3 614.67 T -(XkbIM_UseLatched) 109 584.67 T -(On) 236.78 584.67 T -(An) 271 584.67 T -(y modi\336ers speci\336ed in the) 284.28 584.67 T -1 F -(mask) 406.19 584.67 T -2 F -( \336eld of) 428.8 584.67 T -1 F -(mods) 465.77 584.67 T -2 F -( are) 488.99 584.67 T -(added to the latched modi\336ers.) 271 573.67 T -(XkbIM_UseLatched) 109 556.67 T -(Of) 236 556.67 T -(f) 247.33 556.67 T -(An) 271 556.67 T -(y modi\336ers speci\336ed in the) 284.28 556.67 T -1 F -(mask) 406.19 556.67 T -2 F -( \336eld of) 428.8 556.67 T -1 F -(mods) 465.77 556.67 T -2 F -( are) 488.99 556.67 T -(remo) 271 545.67 T -(v) 293.44 545.67 T -(ed from the latched modi\336ers.) 298.77 545.67 T -(XkbIM_UseLock) 109 528.67 T -(ed,) 186.48 528.67 T --0.12 (XkbIM_UseCompat, or) 109 515.67 P -(XkbIM_UseEf) 109 502.67 T -(fecti) 174.1 502.67 T -(v) 193.37 502.67 T -(e) 198.71 502.67 T -(On) 236.78 528.67 T -(An) 271 528.67 T -(y modi\336ers speci\336ed in the) 284.28 528.67 T -1 F -(mask) 406.19 528.67 T -2 F -( \336eld of) 428.8 528.67 T -1 F -(mods) 465.77 528.67 T -2 F -( are) 488.99 528.67 T -(added to the lock) 271 517.67 T -(ed modi\336ers.) 346.35 517.67 T -(XkbIM_UseLock) 109 485.67 T -(ed) 186.48 485.67 T -(Of) 236 485.67 T -(f) 247.33 485.67 T -(An) 271 485.67 T -(y modi\336ers speci\336ed in the) 284.28 485.67 T -1 F -(mask) 406.19 485.67 T -2 F -( \336eld of) 428.8 485.67 T -1 F -(mods) 465.77 485.67 T -2 F -( are) 488.99 485.67 T -(remo) 271 474.67 T -(v) 293.44 474.67 T -(ed from the lock) 298.77 474.67 T -(ed modi\336ers.) 371.07 474.67 T -(XkbIM_UseCompat or) 109 457.67 T -(XkbIM_UseEf) 109 444.67 T -(fecti) 174.1 444.67 T -(v) 193.37 444.67 T -(e) 198.71 444.67 T -(Of) 236 457.67 T -(f) 247.33 457.67 T -(An) 271 457.67 T -(y modi\336ers speci\336ed in the) 284.28 457.67 T -1 F -(mask) 406.19 457.67 T -2 F -( \336eld of) 428.8 457.67 T -1 F -(mods) 465.77 457.67 T -2 F -( are) 488.99 457.67 T -(remo) 271 446.67 T -(v) 293.44 446.67 T -(ed from both the lock) 298.77 446.67 T -(ed and latched modi\336ers.) 393.38 446.67 T -108 645 522 645 2 L -V -0.5 H -0 Z -N -108 625 522 625 2 L -V -N -FMENDPAGE -%%EndPage: "39" 51 -%%Page: "40" 52 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(40) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(8 Indicators) 482.26 744.87 T -2 12 Q -(requires a mask of indicator bits, as well as the indicator\325s index into the) 108 712 T -5 F --0.6 (XkbIndica-) 458.95 712 S --0.6 (torRec) 108 699 S -2 F -( array of indicator maps.) 147.6 699 T -0 F -(8.3.1) 72 674 T -(Getting Indicator State) 108 674 T -2 F --0.07 (Because the state of the indicators is relatively volatile, the keyboard description does not) 108 654 P -(hold the current state of the indicators. To obtain the current state of the keyboard indica-) 108 641 T -(tors, use) 108 628 T -1 F -(XkbGetIndicatorState) 151 628 T -2 F -(.) 255.65 628 T -2 11 Q -(Status) 108 607.67 T -3 F -(XkbGetIndicatorState) 137.65 607.67 T -2 F -(\050) 242.75 607.67 T -1 F -(display) 246.41 607.67 T -2 F -(,) 277.48 607.67 T -1 F -(de) 282.98 607.67 T -(vice_spec) 293.2 607.67 T -2 F -(,) 335.95 607.67 T -1 F -(state_r) 341.45 607.67 T -(eturn) 371.6 607.67 T -2 F -(\051) 394.83 607.67 T -(Display *) 126 594.67 T -1 F -(display) 189 594.67 T -2 F -(;) 220.78 594.67 T -(/* connection to the X serv) 252 594.67 T -(er */) 370.68 594.67 T -(unsigned int) 126 581.67 T -1 F -(de) 189 581.67 T -(vice_spec) 199.22 581.67 T -2 F -(;) 241.98 581.67 T -(/* de) 252 581.67 T -(vice ID, or) 273.42 581.67 T -5 12 Q --0.6 (XkbUseCoreKbd) 323.51 581.67 S -2 11 Q -( */) 409.31 581.67 T -(unsigned int *) 126 568.67 T -1 F -(state_r) 189 568.67 T -(eturn) 219.15 568.67 T -2 F -(;) 242.37 568.67 T -(/* back\336lled with a mask of the indicator state */) 252 568.67 T -1 12 Q --0.12 (XkbGetIndicatorState) 108 549 P -2 F --0.12 ( queries the) 212.65 549 P -1 F --0.12 (display) 270.61 549 P -2 F --0.12 ( for the state of the indicators on the device spec-) 305.27 549 P -(ified by the) 108 536 T -1 F -(device_spec) 165.66 536 T -2 F -(. For each indicator that is \322turned on\323 on the device, the associ-) 223.63 536 T --0.23 (ated bit is set in) 108 523 P -1 F --0.23 (state_return) 185.17 523 P -2 F --0.23 (. If a compatible version of the Xkb extension is not available) 243.84 523 P -(in the server,) 108 510 T -1 F -(XkbGetIndicatorState) 173.32 510 T -2 F -( returns a) 277.97 510 T -5 F --0.6 (BadMatch) 325.62 510 S -2 F -( error. Otherwise, it sends the) 378.42 510 T -(request to the X server, places the state of the indicators into) 108 497 T -1 F -(state_r) 400.94 497 T -(eturn,) 433.84 497 T -2 F -( and returns) 462.17 497 T -5 F --0.6 (Success) 108 484 S -2 F -(. Thus the value reported by) 154.2 484 T -1 F -(XkbGetIndicatorState) 291.84 484 T -2 F -( is identical to the value) 396.49 484 T -(reported by the core protocol.) 108 471 T -0 F -(8.3.2) 72 446 T -(Getting Indicator Inf) 108 446 T -(ormation b) 221.77 446 T -(y Inde) 283.54 446 T -(x) 318.04 446 T -2 F --0.17 (To get the map for one or more indicators, using a mask to specify the indicators, use) 108 426 P -1 F --0.17 (Xkb-) 517.34 426 P -(GetIndicatorMap) 108 413 T -2 F -(.) 191.99 413 T -2 11 Q -(Status) 108 392.67 T -3 F -(XkbGetIndicatorMap) 137.65 392.67 T -2 F -(\050) 240.92 392.67 T -1 F -(dpy) 244.59 392.67 T -2 F -(,) 259.76 392.67 T -1 F -( whic) 262.51 392.67 T -(h) 285.87 392.67 T -2 F -(,) 291.37 392.67 T -1 F -( desc) 294.12 392.67 T -2 F -(\051) 316.42 392.67 T -(Display *) 126 379.67 T -1 F -(dpy) 189 379.67 T -2 F -(;) 204.88 379.67 T -(/* connection to the X serv) 234 379.67 T -(er */) 352.68 379.67 T -(unsigned int) 126 366.67 T -1 F -(whic) 189 366.67 T -(h) 209.61 366.67 T -2 F -(;) 215.11 366.67 T -(/* mask of indicators for which maps should be returned */) 234 366.67 T -(XkbDescPtr) 126 353.67 T -1 F -(desc) 189 353.67 T -2 F -(;) 208.55 353.67 T -(/* k) 234 353.67 T -(e) 250.7 353.67 T -(yboard description to be updated */) 255.42 353.67 T -1 12 Q -(XkbGetIndicatorMap) 108 334 T -2 F -( obtains the maps from the server for only those indicators specified) 210.65 334 T --0.44 (by the) 108 321 P -1 F --0.44 (whic) 139.79 321 P --0.44 (h) 162.28 321 P -2 F --0.44 ( mask and copies the values into the keyboard description specified by) 168.28 321 P -1 11 Q --0.4 (desc) 504.33 321 P -2 12 Q --0.44 (. If) 523.88 321 P -(the) 108 308 T -1 F -(indicators) 125.66 308 T -2 F -( field of the) 174.34 308 T -1 F -(desc) 232.99 308 T -2 F -( parameter is) 254.32 308 T -5 F --0.6 (NULL) 319.3 308 S -2 F -(,) 345.7 308 T -1 F -(XkbGetIndicatorMap) 351.7 308 T -2 F -( allocates and ini-) 454.34 308 T -(tializes it.) 108 295 T -1 F -(XkbGetIndicatorMap) 108 274 T -2 F -( can generate) 210.65 274 T -5 F --0.6 (BadAlloc) 276.95 274 S -2 F -(,) 329.75 274 T -5 F --0.6 (BadLength) 335.75 274 S -2 F -(,) 395.15 274 T -5 F --0.6 (BadMatch) 401.15 274 S -2 F -(, and) 453.95 274 T -5 F --0.6 (BadImple-) 480.28 274 S --0.6 (mentation) 108 261 S -2 F -( errors.) 167.4 261 T -(To free the indicator maps, use) 108 240 T -1 F -(XkbF) 259.63 240 T -(r) 284.96 240 T -(eeIndicatorMaps) 289.19 240 T -2 F -( \050see section 8.6\051.) 371.17 240 T -0 F -(8.3.3) 72 215 T -(Getting Indicator Inf) 108 215 T -(ormation b) 221.77 215 T -(y Name) 283.54 215 T -2 F -(Xkb also allows applications to refer to indicators by name. Use) 108 195 T -1 F -(XkbGetNames) 418.62 195 T -2 F -( to get the) 487.27 195 T -(indicator names \050see Chapter 18\051. Using names eliminates the need for hard-coding bit-) 108 182 T -(mask values for particular keyboards. For example, instead of using vendor-specific con-) 108 169 T -(stants such as) 108 156 T -5 F --0.6 (WSKBLed_ScrollLock) 176.33 156 S -2 F -( mask on Digital workstations or) 295.13 156 T -5 F --0.6 (XLED_SCROLL_LOCK) 108 143 S -2 F -( on Sun workstations, you can instead use) 213.6 143 T -1 F -(XkbGetNamedIndicator) 417.25 143 T -2 F -(to look up information on the indicator named \322Scroll Lock.\323) 108 130 T -FMENDPAGE -%%EndPage: "40" 52 -%%Page: "41" 53 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(41) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(8 Indicators) 482.26 744.87 T -2 12 Q -(Use) 108 712 T -1 F -(XkbGetNamedIndicator) 129.66 712 T -2 F -( to look up the indicator map and other information for an) 244.31 712 T -(indicator by name.) 108 699 T -2 11 Q -(Bool) 108 678.67 T -3 F -(XkbGetNamedIndicator) 132.15 678.67 T -2 F -(\050) 247.03 678.67 T -1 F -(dpy) 250.69 678.67 T -2 F -(,) 265.86 678.67 T -1 F -( de) 268.61 678.67 T -(v_spec) 281.58 678.67 T -2 F -(,) 311.51 678.67 T -1 F -( name) 314.26 678.67 T -2 F -(,) 340.84 678.67 T -1 F -( ndx_rtrn) 343.59 678.67 T -2 F -(,) 384.84 678.67 T -1 F -( state_rtrn) 387.59 678.67 T -2 F -(,) 433.73 678.67 T -1 F -( map_rtrn) 436.48 678.67 T -2 F -(,) 480.79 678.67 T -1 F -(r) 486.29 678.67 T -(eal_rtrn) 490.16 678.67 T -2 F -(\051) 526.22 678.67 T -(Display *) 126 665.67 T -1 F -(dpy) 189 665.67 T -2 F -(;) 204.88 665.67 T -(/* connection to the X serv) 248.25 665.67 T -(er */) 366.93 665.67 T -(unsigned int) 126 652.67 T -1 F -(de) 189 652.67 T -(vice_spec) 199.22 652.67 T -2 F -(;) 241.98 652.67 T -(/* k) 248.25 652.67 T -(e) 264.95 652.67 T -(yboard de) 269.67 652.67 T -(vice ID, or) 313.07 652.67 T -5 F --0.33 (XkbUseCoreKbd) 363.17 652.67 S -2 F -( */) 444.68 652.67 T -(Atom) 126 639.67 T -1 F -(name) 189 639.67 T -2 F -(;) 212.83 639.67 T -(/* name of the indicator to be retrie) 248.25 639.67 T -(v) 403.47 639.67 T -(ed */) 408.81 639.67 T -(int *) 126 626.67 T -1 F -(ndx_rtrn) 189 626.67 T -2 F -(;) 227.5 626.67 T -(/* back\336lled with the inde) 248.25 626.67 T -(x of the retrie) 362.97 626.67 T -(v) 422.26 626.67 T -(ed indicator */) 427.59 626.67 T -(Bool *) 126 613.67 T -1 F -(state_rtrn) 189 613.67 T -2 F -(;) 232.4 613.67 T -(/* back\336lled with the current state of the retrie) 248.25 613.67 T -(v) 452.05 613.67 T -(ed indicator */) 457.38 613.67 T -(XkbIndicatorMapPtr) 126 600.67 T -1 F -(map_rtrn) 217.65 600.67 T -2 F -(;) 259.21 600.67 T -(/* back\336lled with the mapping for the retrie) 262.27 600.67 T -(v) 454.16 600.67 T -(ed indicator */) 459.5 600.67 T -(Bool *) 126 587.67 T -1 F -(r) 189 587.67 T -(eal_rtrn) 192.87 587.67 T -2 F -(;) 228.93 587.67 T --0.12 (/* back\336lled with) 248.25 587.67 P -5 12 Q --0.29 -0.6 (True) 327.64 587.67 B -2 11 Q --0.12 ( if the named indicator is real \050ph) 354.04 587.67 P --0.12 (ysical\051 */) 499.48 587.67 P -2 12 Q -(If the device specified by) 108 568 T -1 F -(device_spec) 232.3 568 T -2 F -( has an indicator named) 290.27 568 T -1 F -(name) 407.24 568 T -2 F -(,) 433.24 568 T -1 F -( XkbGetNamedIndi-) 436.24 568 T -(cator) 108 555 T -2 F -( returns) 133.33 555 T -5 F --0.6 (True) 172.66 555 S -2 F -( and populates the rest of the parameters with information about the) 199.06 555 T -(indicator. Otherwise,) 108 542 T -1 F -(XkbGetNamedIndicator) 211.98 542 T -2 F -( returns) 326.63 542 T -5 F --0.6 (False) 365.95 542 S -2 F -(.) 398.95 542 T -(The) 108 521 T -1 F -(ndx_rtrn) 129.66 521 T -2 F -( field returns the zero-based index of the named indicator. This index is the) 171.66 521 T --0.07 (bit position to use in any function call that requires a mask of indicator bits, as well as the) 108 508 P -(indicator\325s index into the) 108 495 T -5 F --0.6 (XkbIndicatorRec) 231.32 495 S -2 F -( array of indicator maps.) 330.33 495 T -1 F -(state_rtrn) 450.96 495 T -2 F -( returns) 498.3 495 T -(the current state of the named indicator \050) 108 482 T -5 F --0.6 (True) 302.95 482 S -2 F -( = on,) 329.35 482 T -5 F --0.6 (False) 360.12 482 S -2 F -( = off\051.) 393.12 482 T -1 F -(map_rtrn) 429.88 482 T -2 F -( returns the) 475.21 482 T --0.2 (indicator map for the named indicator. In addition, if the indicator is mapped to a physical) 108 469 P -(LED, the) 108 456 T -1 F -(real_rtrn) 154.99 456 T -2 F -( parameter is set to) 199 456 T -5 F --0.6 (True) 292.64 456 S -2 F -(.) 319.04 456 T -(Each of the \322) 108 435 T -1 F -(_rtrn) 170.98 435 T -2 F -(\323 arguments is optional; you can pass) 195.65 435 T -5 F --0.6 (NULL) 377.96 435 S -2 F -( for any unneeded \322) 404.36 435 T -1 F -(_rtrn) 499 435 T -2 F -(\323) 523.67 435 T -(arguments.) 108 422 T -1 F -(XkbGetNamedIndicator) 108 401 T -2 F -( can generate) 222.65 401 T -5 F --0.6 (BadAtom) 288.95 401 S -2 F -( and) 335.15 401 T -5 F --0.6 (BadImplementation) 358.48 401 S -2 F -( errors.) 470.68 401 T -0 F -(8.4) 72 376 T -(Changing Indicator Maps and State) 108 376 T -2 F --0.1 (Just as you can get the indicator map using a mask or using an indicator name, so you can) 108 356 P -(change it using a mask or a name.) 108 343 T -0 F -(Note) 126 322.67 T -2 11 Q -(Y) 162 322.67 T -(ou cannot change the) 168.73 322.67 T -1 12 Q -(phys_indicator) 264.65 322.67 T -(s) 336.53 322.67 T -2 11 Q -( \336eld of the indicators structure. The only) 341.2 322.67 T -(w) 162 310.67 T -(ay to change the) 169.83 310.67 T -1 12 Q -(phys_indicator) 244.37 310.67 T -(s) 316.25 310.67 T -2 11 Q -( \336eld is to change the k) 320.92 310.67 T -(e) 422.85 310.67 T -(yboard map.) 427.57 310.67 T -2 12 Q -(There are two ways to make changes to indicator maps and state: either change a local) 108 290 T --0.05 (copy of the indicator maps and use) 108 277 P -1 F --0.05 (XkbSetIndicatorMap) 277.95 277 P -2 F --0.05 ( or) 377.94 277 P -1 F --0.05 (XkbSetNamedIndicator) 393.83 277 P -2 F --0.05 (, or, to) 505.82 277 P -(reduce network traffic, use an) 108 264 T -5 F --0.6 (XkbIndicatorChangesRec) 253.94 264 S -2 F -( structure and use) 399.15 264 T -1 F -(XkbChang) 108 251 T -(eIndicator) 158.54 251 T -(s) 208.42 251 T -2 F -(.) 213.08 251 T -0 F -(8.4.1) 72 226 T -(Eff) 108 226 T -(ects of Explicit Chang) 123.88 226 T -(es on Indicator) 249.36 226 T -(s) 334.54 226 T -2 F -(This section discusses the effects of explicitly changing indicators depending upon differ-) 108 206 T -(ent settings in the indicator map. See Tables 8.3 and Table 8.5 for information on the) 108 193 T -(effects of the indicator map fields when explicit changes are made.) 108 180 T --0.44 (If) 108 159 P -5 F --0.96 -0.6 (XkbIM_LEDDrivesKB) 118.56 159 B -2 F --0.44 ( is set and) 230.76 159 P -5 F --0.96 -0.6 (XkbIM_NoExplicit) 279.67 159 B -2 F --0.44 ( is not, and if you call a function) 385.28 159 P --0.02 (that updates the server\325s image of the indicator map \050such as) 108 146 P -1 F --0.02 (XkbSetIndicatorMap) 401.4 146 P -2 F --0.02 ( or) 501.39 146 P -1 F --0.02 (Xkb-) 517.34 146 P -(SetNamedIndicator) 108 133 T -2 F -(\051, Xkb changes the keyboard state and controls to reflect the other) 201.32 133 T --0.35 (fields of the indicator map. If you attempt to explicitly change the value of an indicator for) 108 120 P -(which) 108 107 T -5 F --0.6 (XkbIM_LEDDrivesKB) 140.33 107 S -2 F -( is absent or for which) 252.53 107 T -5 F --0.6 (XkbIM_NoExplicit) 362.51 107 S -2 F -( is present,) 468.11 107 T -(keyboard state or controls are unaffected.) 108 94 T -FMENDPAGE -%%EndPage: "41" 53 -%%Page: "42" 54 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(42) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(8 Indicators) 482.26 744.87 T -2 12 Q -(If neither) 108 712 T -5 F --0.6 (XkbIM_NoAutomatic) 155.32 712 S -2 F -( nor) 267.52 712 T -5 F --0.6 (XkbIM_NoExplicit) 289.51 712 S -2 F -( is set in an indicator map,) 395.12 712 T -(Xkb honors any request to change the state of the indicator, but the new state might be) 108 699 T -(immediately superseded by automatic changes to the indicator state if the keyboard state) 108 686 T -(or controls change.) 108 673 T --0.24 (The effects of changing an indicator that drives the keyboard are cumulative; it is possible) 108 652 P -(for a single change to affect keyboard group, modifiers, and controls simultaneously.) 108 639 T -(If you change an indicator for which both the) 108 618 T -5 F --0.6 (XkbIM_LEDDrivesKB) 328.28 618 S -2 F -( and) 440.49 618 T -5 F --0.56 -0.6 (XkbIM_NoAutomatic) 108 605 B -2 F --0.25 ( flags are specified, Xkb applies the keyboard changes specified in) 220.2 605 P --0.15 (the other indicator map fields and changes the indicator to reflect the state that was explic-) 108 592 P -(itly requested. The indicator remains in the new state until it is explicitly changed again.) 108 579 T --0.44 (If the) 108 558 P -5 F --0.97 -0.6 (XkbIM_NoAutomatic) 135.78 558 B -2 F --0.44 ( flag is not set and) 247.98 558 P -5 F --0.97 -0.6 (XkbIM_LEDDrivesKB) 336 558 B -2 F --0.44 ( is set, Xkb applies) 448.2 558 P --0.17 (the changes specified in the other indicator map fields and sets the state of the indicator to) 108 545 P -(the values specified by the indicator map. Note that it is possible in this case for the indi-) 108 532 T --0.21 (cator to end up in a different state than the one that was explicitly requested. For example,) 108 519 P -(Xkb does not extinguish an indicator with) 108 506 T -1 F -(which_mods) 312.32 506 T -2 F -( of) 372.32 506 T -5 F --0.6 (XkbIM_UseBase) 388.32 506 S -2 F -( and) 474.12 506 T -1 F -(mods) 497.45 506 T -2 F -( of) 522.78 506 T -5 F --0.78 -0.6 (Shift) 108 493 B -2 F --0.35 ( if, at the time Xkb processes the request to extinguish the indicator, one of the) 141 493 P -2 11 Q --0.32 (Shift) 515.96 493 P -2 12 Q -(keys is physically depressed.) 108 480 T --0.42 (If you explicitly light an indicator for which) 108 459 P -5 F --0.92 -0.6 (XkbIM_LEDDrivesKB) 319.31 459 B -2 F --0.42 ( is set, Xkb enables all) 431.51 459 P -(of the boolean controls specified in the) 108 446 T -1 F -(ctrls) 297.64 446 T -2 F -( field of its indicator map. Explicitly extin-) 318.97 446 T -(guishing such an indicator causes Xkb to disable all of the boolean controls specified in) 108 433 T -1 F -(ctrls) 108 420 T -2 F -(.) 129.34 420 T -0 F -(8.4.2) 72 395 T -(Changing Indicator Maps b) 108 395 T -(y Inde) 261.78 395 T -(x) 296.28 395 T -2 F -(To update the maps for one or more indicators, first modify a local copy of the keyboard) 108 375 T -(description, then use) 108 362 T -1 F -(XkbSetIndicatorMap) 209.99 362 T -2 F -( to download the changes to the server:) 309.97 362 T -2 11 Q -(Bool) 108 341.67 T -3 F -( XkbSetIndicatorMap) 129.4 341.67 T -2 F -(\050) 232.98 341.67 T -1 F -(dpy) 236.65 341.67 T -2 F -(,) 251.81 341.67 T -1 F -( whic) 254.56 341.67 T -(h) 277.93 341.67 T -2 F -(,) 283.43 341.67 T -1 F -( desc) 286.18 341.67 T -2 F -(\051) 308.48 341.67 T -(Display *) 126 328.67 T -1 F -(dpy) 189 328.67 T -2 F -(;) 204.88 328.67 T -(/* connection to the X serv) 234 328.67 T -(er */) 352.68 328.67 T -(unsigned int) 126 315.67 T -1 F -(whic) 189 315.67 T -(h) 209.61 315.67 T -2 F -(;) 215.11 315.67 T -(/* mask of indicators to change */) 234 315.67 T -(XkbDescPtr) 126 302.67 T -1 F -(desc) 189 302.67 T -2 F -(;) 208.55 302.67 T -(/* k) 234 302.67 T -(e) 250.7 302.67 T -(yboard description from which the maps are tak) 255.42 302.67 T -(en */) 465.79 302.67 T -2 12 Q -(For each) 108 283 T -(bit set in the) 152.65 283 T -1 F -(whic) 214.66 283 T -(h) 237.14 283 T -2 F -(parameter,) 246.14 283 T -1 F -( XkbSetIndicatorMap) 297.12 283 T -2 F -( sends the corresponding) 400.1 283 T -(indicator map from the) 108 270 T -1 F -(desc) 221.32 270 T -2 F -( parameter to the server.) 242.64 270 T -FMENDPAGE -%%EndPage: "42" 54 -%%Page: "43" 55 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(43) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(8 Indicators) 482.26 744.87 T -0 12 Q -(8.4.3) 72 712 T -(Changing Indicator Maps b) 108 712 T -(y Name) 261.78 712 T -1 F -(XkbSetNamedIndicator) 108 692 T -2 F -( can do several related things:) 219.98 692 T -2 11 Q -(\245) 126 671.67 T -(Name an indicator if it is not already named) 139.68 671.67 T -(\245) 126 659.67 T -(T) 139.68 659.67 T -(oggle the state of the indicator) 145.52 659.67 T -(\245) 126 647.67 T -(Set the indicator to a speci\336ed state) 139.68 647.67 T -(\245) 126 635.67 T -(Set the indicator map for the indicator) 139.68 635.67 T -(Bool) 108 617.67 T -3 F -( XkbSetNamedIndicator) 129.4 617.67 T -2 F -(\050) 244.59 617.67 T -1 F -(dpy) 248.25 617.67 T -2 F -(,) 263.42 617.67 T -1 F -( de) 266.17 617.67 T -(vice_spec) 279.14 617.67 T -2 F -(,) 321.89 617.67 T -1 F -( name) 324.64 617.67 T -2 F -(,) 351.22 617.67 T -1 F -( c) 353.97 617.67 T -(hang) 361.44 617.67 T -(e_state) 383.33 617.67 T -(, state) 414.38 617.67 T -2 F -(,) 440.66 617.67 T -1 F -( cr) 443.41 617.67 T -(eate_ne) 454.92 617.67 T -(w) 488.96 617.67 T -2 F -(,) 495.58 617.67 T -1 F -( map) 498.33 617.67 T -2 F -(\051) 520.03 617.67 T -(Display *) 126 604.67 T -1 F -(dpy) 225 604.67 T -2 F -(;) 240.88 604.67 T -(/* connection to the X serv) 288 604.67 T -(er */) 406.68 604.67 T -(unsigned int) 126 591.67 T -1 F -(de) 225 591.67 T -(vice_spec) 235.22 591.67 T -2 F -(;) 277.98 591.67 T -(/* de) 288 591.67 T -(vice ID, or) 309.42 591.67 T -5 12 Q --0.6 (XkbUseCoreKbd) 359.51 591.67 S -2 11 Q -( */) 445.31 591.67 T -(Atom) 126 578.67 T -1 F -(name) 225 578.67 T -2 F -(;) 248.83 578.67 T -(/* name of the indicator to change */) 288 578.67 T -(Bool) 126 565.67 T -1 F -(c) 225 565.67 T -(hang) 229.72 565.67 T -(e_state) 251.61 565.67 T -2 F -(;) 282.77 565.67 T -(/* whether to change the indicator state or not */) 288 565.67 T -(Bool) 126 552.67 T -1 F -(state) 225 552.67 T -2 F -(;) 245.78 552.67 T -(/* desired ne) 288 552.67 T -(w state for the indicator */) 343.93 552.67 T -(Bool) 126 539.67 T -1 F -(cr) 225 539.67 T -(eate_ne) 233.76 539.67 T -(w) 267.8 539.67 T -2 F -(;) 275.14 539.67 T -(/* whether a ne) 288 539.67 T -(w indicator with the speci\336ed name) 355.23 539.67 T -(should be created when necessary */) 298.5 526.67 T -(XkbIndicatorMapPtr) 126 513.67 T -1 F -(map) 225 513.67 T -2 F -(;) 243.94 513.67 T -(/* ne) 288 513.67 T -(w map for the indicator */) 309.42 513.67 T -2 12 Q -(If a compatible version of the Xkb extension is not available in the server,) 108 494 T -1 F -(XkbSetNamed-) 466.27 494 T -(Indicator) 108 481 T -2 F -( returns) 152.66 481 T -5 F --0.6 (False) 191.99 481 S -2 F -(. Otherwise, it sends a request to the X server to change the indi-) 224.99 481 T -(cator specified by) 108 468 T -1 F -(name) 196.31 468 T -2 F -( and returns) 222.3 468 T -5 F --0.6 (True) 281.95 468 S -2 F -(.) 308.35 468 T -(If) 108 447 T -1 F -(c) 118.99 447 T -(hang) 124.14 447 T -(e_state) 148.02 447 T -2 F -( is) 182.02 447 T -5 F --0.6 (True) 196.02 447 S -2 F -(, and the optional parameter,) 222.42 447 T -1 F -(state) 362.72 447 T -2 F -(, is not) 385.39 447 T -5 F --0.6 (NULL) 420.73 447 S -2 F -(,) 447.13 447 T -1 F -(XkbSetNamed-) 453.13 447 T -(Indicator) 108 434 T -2 F -( tells the server to change the state of the named indicator to the value specified) 152.66 434 T -(by) 108 421 T -1 F -(state) 123 421 T -2 F -(.) 145.67 421 T -(If an indicator with the name specified by) 108 400 T -1 F -(name) 311.29 400 T -2 F -( does not already exist, the) 337.28 400 T -1 F -(create_new) 468.26 400 T -2 F --0.35 (parameter tells the server whether it should create a new named indicator. If) 108 387 P -1 F --0.35 (create_new) 471.37 387 P -2 F --0.35 ( is) 526.69 387 P -5 F --0.6 (True) 108 374 S -2 F -(, the server finds the first indicator that doesn\325t have a name and gives it the name) 134.4 374 T -(specified by) 108 361 T -1 F -(name) 169.32 361 T -2 F -(.) 195.31 361 T -(If the optional parameter,) 108 340 T -1 F -(map) 232.97 340 T -2 F -(, is not) 253.63 340 T -5 F --0.6 (NULL) 288.97 340 S -2 F -(,) 315.37 340 T -1 F -(XkbSetNamedIndicator) 321.37 340 T -2 F -( tells the server to) 433.36 340 T -(change the indicator\325s map to the values specified in) 108 327 T -1 F -(map) 362.95 327 T -2 F -(.) 383.62 327 T -1 F -(XkbSetNamedIndicator) 108 306 T -2 F -( can generate) 219.98 306 T -5 F --0.6 (BadAtom) 286.28 306 S -2 F -( and) 332.48 306 T -5 F --0.6 (BadImplementation) 355.81 306 S -2 F -( errors. In) 468.02 306 T --0.06 (addition, it can also generate) 108 293 P -5 F --0.14 -0.6 (XkbIndicatorStateNotify) 248.33 293 B -2 F --0.06 ( \050see section 8.5\051,) 400.13 293 P -5 F --0.14 -0.6 (XkbIndi-) 487.2 293 B --0.6 (catorMapNotify) 108 280 S -2 F -(, and) 200.4 280 T -5 F --0.6 (XkbNamesNotify) 226.73 280 S -2 F -( events \050see section 18.5\051.) 319.13 280 T -0 F -(8.4.4) 72 255 T -(The XkbIndicatorChang) 108 255 T -(esRec Structure) 242.81 255 T -2 F -(The) 108 235 T -5 F --0.6 (XkbIndicatorChangesRec) 129.66 235 S -2 F -( identifies small modifications to the indicator map.) 274.86 235 T -(Use it with the function) 108 222 T -1 F -(XkbChang) 224.33 222 T -(eIndicator) 274.87 222 T -(s) 324.74 222 T -2 F -( to reduce the amount of traffic sent to the) 329.41 222 T -(server.) 108 209 T -2 11 Q -(typedef struct _XkbIndicatorChanges {) 126 188.67 T -(unsigned int) 144 175.67 T -( state_changes;) 234 175.67 T -(unsigned int) 144 162.67 T -( map_changes;) 234 162.67 T -(}) 126 149.67 T -3 F -(XkbIndicatorChangesRec) 131.28 149.67 T -2 F -(,*XkbIndicatorChangesPtr;) 253.5 149.67 T -2 12 Q --0.33 (The) 108 130 P -1 F --0.33 (state_c) 129.33 130 P --0.33 (hang) 163.15 130 P --0.33 (es) 187.03 130 P -2 F --0.33 ( field is a mask that specifies the indicators that have changed state, and) 197.02 130 P -1 F -(map_c) 108 117 T -(hang) 139.81 117 T -(es) 163.69 117 T -2 F -( is a mask that specifies the indicators whose maps have changed.) 173.69 117 T -FMENDPAGE -%%EndPage: "43" 55 -%%Page: "44" 56 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(44) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(8 Indicators) 482.26 744.87 T -2 12 Q -(To change indicator maps or state without passing the entire keyboard description, use) 108 712 T -1 F -(XkbChang) 108 699 T -(eIndicator) 158.54 699 T -(s) 208.42 699 T -2 F -(.) 213.08 699 T -2 11 Q -(Bool) 108 678.67 T -3 F -(XkbChangeIndicators) 132.15 678.67 T -2 F -(\050) 236.66 678.67 T -1 F -(dpy) 240.32 678.67 T -(, xkb, c) 255.6 678.67 T -(hang) 286.58 678.67 T -(es, state) 308.48 678.67 T -2 F -(\051) 343.92 678.67 T -(Display *) 126 665.67 T -1 F -(dpy) 243 665.67 T -2 F -(;) 258.88 665.67 T -(/* connection to the X serv) 288 665.67 T -(er */) 406.68 665.67 T -(XkbDescPtr) 126 652.67 T -1 F -(xkb) 243 652.67 T -2 F -(;) 258.27 652.67 T -(/* k) 288 652.67 T -(e) 304.7 652.67 T -(yboard description from which names are to be) 309.42 652.67 T -(tak) 298.5 639.67 T -(en. */) 311.83 639.67 T -(XkbIndicatorChangesPtr) 126 626.67 T -1 F -(c) 243 626.67 T -(hang) 247.72 626.67 T -(es) 269.61 626.67 T -2 F -(;) 278.77 626.67 T -(/* indicators to be updated on the serv) 288 626.67 T -(er */) 455.56 626.67 T -(unsigned int) 126 613.67 T -1 F -(state) 243 613.67 T -2 F -(;) 263.78 613.67 T -(/* ne) 288 613.67 T -(w state of indicators listed in) 309.42 613.67 T -1 F -(c) 298.5 600.67 T -(hang) 303.22 600.67 T -(es) 325.11 600.67 T -2 F -(->) 334.27 600.67 T -1 F -(state_c) 344.14 600.67 T -(hang) 375.14 600.67 T -(es) 397.03 600.67 T -2 F -( */) 406.19 600.67 T -1 12 Q -(XkbChang) 108 581 T -(eIndicator) 158.54 581 T -(s) 208.42 581 T -2 F -( copies any maps specified by) 213.08 581 T -1 F -(c) 359.72 581 T -(hang) 364.87 581 T -(es) 388.75 581 T -2 F -( from the keyboard descrip-) 398.75 581 T -(tion,) 108 568 T -1 F -(xkb) 132.67 568 T -2 F -(, to the server specified by) 149.33 568 T -1 F -(dpy) 278.96 568 T -2 F -(. If any bits are set in the) 296.29 568 T -1 F -(state_c) 417.94 568 T -(hang) 451.75 568 T -(es) 475.63 568 T -2 F -( field of) 485.63 568 T -1 F -(c) 108 555 T -(hang) 113.15 555 T -(es) 137.03 555 T -2 F -(,) 147.02 555 T -1 F -(XkbChang) 153.02 555 T -(eIndicator) 203.57 555 T -(s) 253.44 555 T -2 F -( also sets the state of those indicators to the values speci-) 258.11 555 T --0.03 (fied in the) 108 542 P -1 F --0.03 (state) 159.56 542 P -2 F --0.03 ( mask. A 1 bit in) 182.23 542 P -1 F --0.03 (state) 265.04 542 P -2 F --0.03 ( turns the corresponding indicator on, a 0 bit turns it) 287.71 542 P -(off.) 108 529 T -1 F -(XkbChang) 108 508 T -(eIndicator) 158.54 508 T -2 F -(s can generate) 208.54 508 T -5 F --0.6 (BadAtom) 279.5 508 S -2 F -( and) 325.7 508 T -5 F --0.6 (BadImplementation) 349.03 508 S -2 F -( errors. In addi-) 461.23 508 T --0.59 (tion, it can also generate) 108 495 P -5 F --1.29 -0.6 (XkbIndicatorStateNotify) 225.03 495 B -2 F --0.59 ( and) 376.83 495 P -5 F --1.29 -0.6 (XkbIndicatorMapNotify) 398.99 495 B -2 F -(events \050see section 8.5\051.) 108 482 T -0 F -(8.5) 72 457 T -(T) 108 457 T -(rac) 114.37 457 T -(king Chang) 132.14 457 T -(es to Indicator State or Map) 197.6 457 T -2 F -(Whenever an indicator changes state, the server sends) 108 437 T -5 F --0.6 (XkbIndicatorStateNotify) 369.59 437 S -2 F --0.25 (events to all interested clients. Similarly, whenever an indicator\325s map changes, the server) 108 424 P -(sends) 108 411 T -5 F --0.6 (XkbIndicatorMapNotify) 137.66 411 S -2 F -( events to all interested clients.) 276.27 411 T -(To receive) 108 390 T -5 F --0.6 (XkbIndicatorStateNotify) 161.98 390 S -2 F -( events, use) 313.78 390 T -1 F -(XkbSelectEvents) 372.43 390 T -2 F -( \050see section 4.3\051) 451.74 390 T -(with both the) 108 377 T -1 F -(bits_to_c) 174.34 377 T -(hang) 218.16 377 T -(e) 242.04 377 T -2 F -(and) 250.37 377 T -1 F -( values_for_bits) 267.7 377 T -2 F -( parameters containing) 344.7 377 T -5 F --0.6 (XkbIndica-) 457.01 377 S --0.6 (torStateNotifyMask) 108 364 S -2 F -(. To receive) 226.8 364 T -5 F --0.6 (XkbIndicatorMapNotify) 286.78 364 S -2 F -( events, use) 425.38 364 T -1 F -(XkbSelect-) 484.04 364 T -(Events) 108 351 T -2 F -( with) 139.99 351 T -5 F --0.6 (XkbIndicatorMapNotifyMask) 167.33 351 S -2 F -(.) 332.33 351 T -(To receive events for only specific indicators, use) 108 330 T -1 F -(XkbSelectEventDetails) 349.61 330 T -2 F -(. Set the) 458.92 330 T -1 F -(e) 108 317 T -(vent_type) 113.15 317 T -2 F -( parameter) 159.13 317 T -5 F --0.6 ( to XkbIndicatorStateNotify) 210.11 317 S -2 F -( or) 388.31 317 T -5 F --0.6 (XkbIndicatorMapNo-) 404.31 317 S --0.6 (tify) 108 304 S -2 F -(, and set both the) 134.4 304 T -1 F -(bits_to_c) 219.06 304 T -(hang) 262.89 304 T -(e) 286.77 304 T -2 F -(and) 295.09 304 T -1 F -( values_for_bits) 312.42 304 T -2 F -( detail parameters to a mask) 389.42 304 T -(where each bit specifies one indicator, turning on those bits that specify the indicators for) 108 291 T -(which you want to receive events.) 108 278 T -(Both types of indicator events use the same structure:) 108 257 T -2 11 Q -(typedef struct _XkbIndicatorNotify {) 126 236.67 T -(int) 144 223.67 T -(type;) 216 223.67 T -(/* Xkb e) 279 223.67 T -(xtension base e) 316.72 223.67 T -(v) 383.65 223.67 T -(ent code */) 388.99 223.67 T -(unsigned long) 144 210.67 T -(serial;) 216 210.67 T -(/* X serv) 279 210.67 T -(er serial number for e) 319.16 210.67 T -(v) 413.57 210.67 T -(ent */) 418.91 210.67 T -(Bool) 144 197.67 T -(send_e) 216 197.67 T -(v) 246.27 197.67 T -(ent;) 251.61 197.67 T -(/*) 279 197.67 T -5 12 Q --0.6 (True) 290.31 197.67 S -2 11 Q -( => synthetically generated */) 316.71 197.67 T -(Display *) 144 184.67 T -(display;) 216 184.67 T -(/* serv) 279 184.67 T -(er connection where e) 308.47 184.67 T -(v) 405.02 184.67 T -(ent generated */) 410.35 184.67 T -(T) 144 171.67 T -(ime) 150.34 171.67 T -(time;) 216 171.67 T -(/* serv) 279 171.67 T -(er time when e) 308.47 171.67 T -(v) 373.26 171.67 T -(ent generated */) 378.59 171.67 T -(int) 144 158.67 T -(xkb_type;) 216 158.67 T -(/* speci\336es state or map notify */) 279 158.67 T -(int) 144 145.67 T -(de) 216 145.67 T -(vice;) 226.11 145.67 T -(/* Xkb de) 279 145.67 T -(vice ID, will not be) 322.11 145.67 T -5 F --0.33 (XkbUseCoreKbd) 410.1 145.67 S -2 F -(*/) 491.61 145.67 T -(unsigned int) 144 132.67 T -(changed;) 216 132.67 T -(/* mask of indicators with ne) 279 132.67 T -(w state or map */) 406.74 132.67 T -(unsigned int) 144 119.67 T -(state;) 216 119.67 T -(/* current state of all indicators */) 279 119.67 T -(}) 126 106.67 T -3 F -(XkbIndicatorNotifyEv) 134.03 106.67 T -(ent) 240.26 106.67 T -2 F -(;) 254.92 106.67 T -FMENDPAGE -%%EndPage: "44" 56 -%%Page: "45" 57 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(45) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(8 Indicators) 482.26 744.87 T -1 12 Q -(xkb_type) 108 712 T -2 F -( is either) 150.65 712 T -5 F --0.6 (XkbIndicatorStateNotify) 194.98 712 S -2 F -( or) 346.78 712 T -5 F --0.6 (XkbIndicatorMapNotify) 362.77 712 S -2 F -(,) 501.38 712 T -(depending on whether the event is a) 108 699 T -5 F --0.6 (kbIndicatorStateNotify) 283.63 699 S -2 F -( event or) 428.83 699 T -5 F --0.6 (kbIndica-) 473.82 699 S --0.6 (torMapNotify) 108 686 S -2 F -( event.) 187.2 686 T -(The) 108 665 T -1 F -(changed) 129.66 665 T -2 F -( parameter is a mask that is the bitwise inclusive OR of the indicators that) 170.32 665 T -(have changed. If the event is of type) 108 652 T -5 F --0.6 (XkbIndicatorMapNotify) 284.95 652 S -2 F -(,) 423.55 652 T -1 F -(c) 429.55 652 T -(hang) 434.7 652 T -(ed) 458.58 652 T -2 F -( reports the) 469.91 652 T --0.51 (maps that changed. If the event is of type) 108 639 P -5 F --1.12 -0.6 (XkbIndicatorStateNotify) 304.04 639 B -2 F --0.51 (,) 455.85 639 P -1 F --0.51 (c) 461.34 639 P --0.51 (hang) 466.49 639 P --0.51 (ed) 490.37 639 P -2 F --0.51 ( reports) 501.7 639 P --0.04 (the indicators that have changed state.) 108 626 P -1 F --0.04 (state) 293.42 626 P -2 F --0.04 ( is a mask that specifies the current state of all) 316.09 626 P -(indicators, whether they have changed or not, for both) 108 613 T -5 F --0.6 (XkbIndicatorStateNotify) 370.94 613 S -2 F -(and) 108 600 T -5 F --0.6 (IndicatorMapNotify) 128.33 600 S -2 F -( events.) 247.13 600 T -(When your client application receives either a) 108 579 T -5 F --0.6 (XkbIndicatorStateNotify) 331.61 579 S -2 F -( event or) 483.41 579 T -5 F --0.6 (XkbIndicatorMapNotify) 108 566 S -2 F -( event, you can note the changes in a changes structure by) 246.6 566 T -(calling) 108 553 T -1 F -(XkbNoteIndicatorChang) 143.66 553 T -(es) 261.54 553 T -2 F -(.) 271.54 553 T -2 11 Q -(v) 108 532.67 T -(oid) 113.28 532.67 T -3 F -(XkbNoteIndicatorChanges) 130.09 532.67 T -2 F -(\050) 256.59 532.67 T -1 F -(old) 260.25 532.67 T -2 F -(,) 274.31 532.67 T -1 F -( ne) 277.06 532.67 T -(w) 290.03 532.67 T -2 F -(,) 296.65 532.67 T -1 F -( wanted) 299.4 532.67 T -2 F -(\051) 333.93 532.67 T -(XkbIndicatorChangesPtr) 126 519.67 T -1 F -(old) 252 519.67 T -2 F -(;) 266.06 519.67 T -(/* XkbIndicatorChanges structure to be updated */) 306 519.67 T -(XkbIndicatorNotifyEv) 126 506.67 T -(ent *) 225.43 506.67 T -1 F -(ne) 252 506.67 T -(w) 262.22 506.67 T -2 F -(;) 269.56 506.67 T -(/* e) 306 506.67 T -(v) 321.92 506.67 T -(ent from which changes are to be copied */) 327.25 506.67 T -(unsigned int) 126 493.67 T -1 F -(wanted) 252 493.67 T -2 F -(;) 283.78 493.67 T -(/* which changes are to be noted */) 306 493.67 T -2 12 Q -(The) 108 474 T -1 F -(wanted) 129.66 474 T -2 F -( parameter is the bitwise inclusive OR of) 164.33 474 T -5 F --0.6 (XkbIndicatorMapMask) 363.64 474 S -2 F -( and) 489.04 474 T -5 F --0.6 (XkbIndicatorStateMask) 108 461 S -2 F -(.) 246.6 461 T -1 F -(XkbNoteIndicatorChang) 252.6 461 T -(es) 370.48 461 T -2 F -( copies any changes reported in) 380.48 461 T -1 F -(ne) 108 448 T -(w) 119.15 448 T -2 F -( and specified in) 127.15 448 T -1 F -(wanted) 209.14 448 T -2 F -( into the changes record specified by) 243.8 448 T -1 F -(old) 422.76 448 T -2 F -(.) 438.1 448 T --0.06 (To update a local copy of the keyboard description with the actual values, pass the results) 108 427 P -(of one or more calls to) 108 414 T -1 F -(XkbNoteIndicatorChanges) 219.31 414 T -2 F -( to) 347.3 414 T -1 F -(XkbGetIndicatorChanges) 362.64 414 T -2 F -(:) 485.29 414 T -2 11 Q -(Status) 108 393.67 T -3 F -(XkbGetIndicatorChanges) 137.65 393.67 T -2 F -(\050) 259.26 393.67 T -1 F -(dpy) 262.92 393.67 T -2 F -(,) 278.09 393.67 T -1 F -( xkb) 280.84 393.67 T -2 F -(,) 298.86 393.67 T -1 F -( c) 301.61 393.67 T -(hang) 309.08 393.67 T -(es) 330.97 393.67 T -2 F -(,) 340.13 393.67 T -1 F -( state) 342.88 393.67 T -2 F -(\051) 366.41 393.67 T -(Display *) 126 380.67 T -1 F -(dpy) 243 380.67 T -2 F -(;) 258.88 380.67 T -(/* connection to the X serv) 288 380.67 T -(er */) 406.68 380.67 T -(XkbDescPtr) 126 367.67 T -1 F -(xkb) 243 367.67 T -2 F -(;) 258.27 367.67 T -(/* k) 288 367.67 T -(e) 304.7 367.67 T -(yboard description to hold the ne) 309.42 367.67 T -(w v) 454.27 367.67 T -(alues */) 470.18 367.67 T -(XkbIndicatorChangesPtr) 126 354.67 T -1 F -(c) 243 354.67 T -(hang) 247.72 354.67 T -(es) 269.61 354.67 T -2 F -(;) 278.77 354.67 T -(/* indicator maps/state to be obtained from the serv) 288 354.67 T -(er */) 513.92 354.67 T -(unsigned int *) 126 341.67 T -1 F -(state) 243 341.67 T -2 F -(;) 263.78 341.67 T -(/* back\336lled with the state of the indicators */) 288 341.67 T -1 12 Q --0.09 (XkbGetIndicatorChang) 108 322 P --0.09 (es) 220.54 322 P -2 F --0.09 ( examines the) 230.53 322 P -1 F --0.09 (c) 299.25 322 P --0.09 (hang) 304.4 322 P --0.09 (es) 328.28 322 P -2 F --0.09 ( parameter, pulls over the necessary infor-) 338.27 322 P --0.45 (mation from the server, and copies the results into the) 108 309 P -1 F --0.45 (xkb) 364.43 309 P -2 F --0.45 ( keyboard description. If any bits) 381.08 309 P -(are set in the) 108 296 T -1 F -(state_c) 171.98 296 T -(hang) 205.8 296 T -(es) 229.68 296 T -2 F -( field of) 239.68 296 T -1 F -(c) 280.67 296 T -(hang) 285.82 296 T -(es) 309.7 296 T -2 F -(,) 319.69 296 T -1 F -(XkbGetIndicatorChang) 325.69 296 T -(es) 438.23 296 T -2 F -( also places the) 448.22 296 T -(state of those indicators in) 108 283 T -1 F -(state) 236.99 283 T -2 F -(. If the) 259.66 283 T -1 F -(indicators) 294.31 283 T -2 F -( field of) 342.98 283 T -1 F -(xkb) 383.98 283 T -2 F -( is) 400.63 283 T -5 F --0.6 (NULL) 414.64 283 S -2 F -(,) 441.04 283 T -1 F -(XkbGetIndicator-) 447.04 283 T -(Chang) 108 270 T -(es) 139.88 270 T -2 F -( allocates and initializes it. To free the) 149.88 270 T -1 F -(indicators) 336.18 270 T -2 F -( field, use) 384.85 270 T -1 F -(XkbF) 434.84 270 T -(r) 460.18 270 T -(eeIndicator) 464.4 270 T -(s) 519.6 270 T -2 F -(\050see section 8.6\051.) 108 257 T -1 F -(XkbGetIndicatorChang) 108 236 T -(es) 220.54 236 T -2 F -( can generate) 230.53 236 T -5 F --0.6 (BadAlloc) 296.83 236 S -2 F -(,) 349.63 236 T -5 F --0.6 (BadImplementation,) 355.63 236 S -2 F -( and) 474.44 236 T -5 F --0.6 (Bad-) 497.76 236 S --0.6 (Match) 108 223 S -2 F -( errors.) 141 223 T -0 F -(8.6) 72 198 T -(Allocating and Freeing Indicator Maps) 108 198 T -2 F -(Most applications do not need to directly allocate the) 108 178 T -1 F -(indicators) 365.64 178 T -2 F -( member of the keyboard) 414.31 178 T --0.06 (description record \050the keyboard description record is described in Chapter 6\051. If the need) 108 165 P -(arises, however, use) 108 152 T -1 F -(XkbAllocIndicatorMaps.) 207.64 152 T -2 11 Q -(Status) 108 131.67 T -3 F -(XkbAllocIndicatorMaps) 137.65 131.67 T -2 F -(\050) 252.54 131.67 T -1 F -(xkb) 256.2 131.67 T -2 F -(\051) 271.47 131.67 T -(XkbDescPtr) 126 118.67 T -1 F -(xkb) 189 118.67 T -2 F -(;) 204.27 118.67 T -(/* k) 234 118.67 T -(e) 250.7 118.67 T -(yboard description structure */) 255.42 118.67 T -2 12 Q -(The) 108 99 T -1 F -(xkb) 129.66 99 T -2 F -( parameter must point to a valid keyboard description. If it doesn\325t,) 146.32 99 T -1 F -(XkbAllocIndi-) 470.94 99 T -(catorMaps) 108 86 T -2 F -( returns a) 160 86 T -5 F --0.6 (BadMatch) 207.65 86 S -2 F -( error. Otherwise,) 260.45 86 T -1 F -(XkbAllocIndicatorMaps) 348.08 86 T -2 F -( allocates and) 463.4 86 T -(initializes the) 108 73 T -1 F -(indicators) 175.33 73 T -2 F -( member of the keyboard description record and returns) 224 73 T -5 F --0.6 (Suc-) 494.27 73 S -FMENDPAGE -%%EndPage: "45" 57 -%%Page: "46" 58 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(46) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(8 Indicators) 482.26 744.87 T -5 12 Q --0.6 (cess) 108 712 S -2 F -(. If) 134.4 712 T -1 F -(XkbAllocIndicatorMaps) 151.39 712 T -2 F -( was unable to allocate the indicators record, it reports a) 266.71 712 T -(Bad) 108 699 T -5 F --0.6 (Alloc) 127.33 699 S -2 F -( error.) 160.33 699 T -(To free memory used by the) 108 678 T -1 F -(indicators) 246.64 678 T -2 F -( member of an) 295.31 678 T -5 F --0.6 (XkbDescRec) 367.96 678 S -2 F -( structure, use) 433.96 678 T -1 F -(XkbF) 108 665 T -(r) 133.33 665 T -(eeIndicatorMaps.) 137.56 665 T -2 11 Q -(v) 108 644.67 T -(oid) 113.28 644.67 T -3 F -(XkbFr) 130.09 644.67 T -(eeIndicatorMaps) 161.67 644.67 T -2 F -(\050) 241.72 644.67 T -1 F -(xkb) 245.38 644.67 T -2 F -(\051) 260.65 644.67 T -(XkbDescPtr) 126 631.67 T -1 F -(xkb) 189 631.67 T -2 F -(;) 204.27 631.67 T -(/* k) 234 631.67 T -(e) 250.7 631.67 T -(yboard description structure */) 255.42 631.67 T -2 12 Q --0.42 (If the) 108 612 P -1 F --0.42 (indicators) 135.82 612 P -2 F --0.42 ( member of the keyboard description record pointed to by) 184.49 612 P -1 F --0.42 (xkb) 460.27 612 P -2 F --0.42 ( is not) 476.93 612 P -5 F --0.92 -0.6 (NULL) 508.02 612 B -2 F --0.42 (,) 534.42 612 P -1 F -(XkbF) 108 599 T -(r) 133.33 599 T -(eeIndicatorMaps) 137.56 599 T -2 F -( frees the memory associated with the) 219.54 599 T -1 F -(indicators) 403.84 599 T -2 F -( member of) 452.51 599 T -1 F -(xkb) 510.83 599 T -2 F -(.) 527.48 599 T -FMENDPAGE -%%EndPage: "46" 58 -%%Page: "47" 59 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(47) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(9 Bells) 503.63 744.87 T -0 14 Q -(9) 72 710.67 T -(Bells) 108 710.67 T -2 12 Q -(The core X protocol allows only applications to explicitly sound the system bell with a) 108 688 T -(given duration, pitch, and volume. Xkb extends this capability by allowing clients to) 108 675 T -(attach symbolic names to bells, disable audible bells, and receive an event whenever the) 108 662 T -(keyboard bell is rung. For the purposes of this document, the) 108 649 T -1 F -(audible) 402.97 649 T -2 F -( bell is defined to be) 438.97 649 T --0.11 (the system bell, or the default keyboard bell, as opposed to any other audible sound gener-) 108 636 P -(ated elsewhere in the system.) 108 623 T -(You can ask to receive) 108 602 T -5 F --0.6 (XkbBellNotify) 220.3 602 S -2 F -( events \050see section 9.4\051 when any client rings) 306.1 602 T -(any one of the following:) 108 589 T -2 11 Q -(\245) 126 568.67 T -(The def) 139.68 568.67 T -(ault bell) 173.47 568.67 T -(\245) 126 556.67 T -(An) 139.68 556.67 T -(y bell on an input de) 152.96 556.67 T -(vice that can be speci\336ed by a) 242.82 556.67 T -1 12 Q -(bell_class) 377.53 556.67 T -2 11 Q -( and) 425.53 556.67 T -1 12 Q -(bell_id) 446.92 556.67 T -2 11 Q -( pair) 480.25 556.67 T -(\245) 126 544.67 T -(An) 139.68 544.67 T -(y bell speci\336ed only by an arbitrary name. \050This is, from the serv) 152.96 544.67 T -(er\325) 438.75 544.67 T -(s point of vie) 450.35 544.67 T -(w) 507.83 544.67 T -(,) 515.05 544.67 T -(merely a name, and not connected with an) 139.68 532.67 T -(y ph) 325.25 532.67 T -(ysical sound-generating de) 344.45 532.67 T -(vice. Some) 462.09 532.67 T --0.15 (client application must generate the sound, or visual feedback, if an) 139.68 520.67 P --0.15 (y) 435 520.67 P --0.15 (, that is associated) 439.79 520.67 P -(with the name.\051) 139.68 508.67 T -2 12 Q --0.4 (You can also ask to receive) 108 490 P -5 F --0.89 -0.6 (XkbBellNotify) 240.21 490 B -2 F --0.4 ( events when the server rings the default bell) 326.01 490 P -(or if any client has requested events only \050without the bell sounding\051 for any of the bell) 108 477 T -(types previously listed.) 108 464 T -(You can disable audible bells on a global basis \050to set the) 108 443 T -5 F --0.6 (AudibleBell) 385.97 443 S -2 F -( control, see) 458.57 443 T --0.24 (Chapter 10\051. For example, a client that replaces the keyboard bell with some other audible) 108 430 P -(cue might want to turn off the) 108 417 T -5 F --0.6 (AudibleBell) 254.32 417 S -2 F -( control to prevent the server from also gen-) 326.92 417 T -(erating a sound and avoid cacophony. If you disable audible bells and request to receive) 108 404 T -5 F --0.6 (XkbBellNotify) 108 391 S -2 F -( events, you can generate feedback different from the default bell.) 193.8 391 T --0.37 (You can, however, override the) 108 370 P -5 F --0.82 -0.6 (AudibleBell) 260.43 370 B -2 F --0.37 ( control by calling one of the functions that) 333.03 370 P -(force the ringing of a bell in spite of the setting of the) 108 357 T -5 F --0.6 (AudibleBell) 367.63 357 S -2 F -( control \321) 440.23 357 T -1 F -(Xkb-) 495.23 357 T -(F) 108 344 T -(or) 114.07 344 T -(ceDe) 124.3 344 T -(viceBell) 148.76 344 T -2 F -( or) 187.42 344 T -1 F -(XkbF) 203.41 344 T -(or) 228.14 344 T -(ceBell) 238.37 344 T -2 F -( \050see section 9.3.3\051. In this case the server does not gen-) 268.36 344 T -(erate a bell event.) 108 331 T --0.01 (Just as some keyboards can produce keyclicks to indicate when a key is pressed or repeat-) 108 310 P -(ing, Xkb can provide feedback for the controls by using special beep codes. The) 108 297 T -5 F --0.6 (AccessXFeedback) 108 284 S -2 F -( control is used to configure the specific types of operations that gen-) 207 284 T -(erate feedback. See section 10.6.3 for a discussion on) 108 271 T -5 F --0.6 (AccessXFeedback) 367.27 271 S -2 F -( control.) 466.27 271 T -(This chapter describes bell names, the functions used to generate named bells, and the) 108 250 T -(events the server generates for bells.) 108 237 T -0 F -(9.1) 72 212 T -(Bell Names) 108 212 T -2 F -(You can associate a name to an act of ringing a bell by converting the name to an Atom) 108 192 T -(and then using this name when you call the functions listed in this chapter. If an event is) 108 179 T -(generated as a result, the name is then passed to all other clients interested in receiving) 108 166 T -5 F --0.6 (XkbBellNotify) 108 153 S -2 F -( events. Note that these are arbitrary names and that there is no binding) 193.8 153 T -(to any sounds. Any sounds or other effects \050such as visual bells on the screen\051 must be) 108 140 T --0.31 (generated by a client application upon receipt of the bell event containing the name. There) 108 127 P -(is no default name for the default keyboard bell. The server does generate some pre-) 108 114 T -(defined bells for the AccessX controls \050see section 10.6.3\051. These named bells are shown) 108 101 T -(in Table 9.1; the name is included in any bell event sent to clients that have requested to) 108 88 T -(receive) 108 75 T -5 F --0.6 (XkbBellNotify) 145.64 75 S -2 F -( events.) 231.45 75 T -FMENDPAGE -%%EndPage: "47" 59 -%%Page: "48" 60 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(48) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(9 Bells) 503.63 744.87 T -0 12 Q -(9.2) 72 436 T -(A) 108 436 T -(udib) 116.3 436 T -(le Bells) 141.52 436 T -2 F -(Using Xkb you can generate bell events that do not necessarily ring the system bell. This) 108 416 T --0.22 (is useful if you need to use an audio server instead of the system beep. For example, when) 108 403 P -(an audio client starts, it could disable the audible bell \050the system bell\051 and then listen for) 108 390 T -5 F --0.95 -0.6 (XkbBellNotify) 108 377 B -2 F --0.43 ( events \050see section 9.4\051. When it receives a) 193.8 377 P -5 F --0.95 -0.6 (XkbBellNotify) 402.84 377 B -2 F --0.43 ( event, the) 488.64 377 P -(audio client could then send a request to an audio server to play a sound.) 108 364 T -(You can control the audible bells feature by passing the) 108 343 T -5 F --0.6 (XkbAudibleBellMask) 377.95 343 S -2 F -( to) 496.75 343 T -1 F -(XkbChang) 108 330 T -(eEnabledContr) 158.54 330 T -(ols) 231.34 330 T -2 F -( \050see section 10.1.1\051. If you set) 245.34 330 T -5 F --0.6 (XkbAudibleBellMask) 395.98 330 S -2 F -( on,) 514.78 330 T -(the server rings the system bell when a bell event occurs. This is the default. If you set) 108 317 T -5 F --0.6 (XkbAudibleBellMask) 108 304 S -2 F -( off and a bell event occurs, the server does not ring the system) 226.8 304 T -(bell unless you call) 108 291 T -1 F -(XkbF) 203.33 291 T -(or) 228.06 291 T -(ceDe) 238.28 291 T -(viceBell) 262.75 291 T -2 F -( or) 301.4 291 T -1 F -(XkbF) 317.4 291 T -(or) 342.13 291 T -(ceBell) 352.36 291 T -2 F -( \050see section 9.3.3\051.) 382.34 291 T -(Audible bells are also part of the per-client auto-reset controls. For more information on) 108 270 T -(auto-reset controls, see section 10.1.2.) 108 257 T -0 F -(9.3) 72 232 T -(Bell Functions) 108 232 T -2 F -(Use the functions described in this section to ring bells and to generate bell events.) 108 212 T -(The input extension has two types of feedbacks that can generate bells \321 bell feedback) 108 191 T -(and keyboard feedback. Some of the functions in this section have) 108 178 T -1 F -(bell_class) 429.28 178 T -2 F -( and) 477.28 178 T -1 F -(bell_id) 500.6 178 T -2 F -(parameters; set them as follows: Set) 108 165 T -1 F -(bell_class) 283.98 165 T -2 F -( to) 331.98 165 T -5 F --0.6 (BellFeedbackClass) 347.32 165 S -2 F -( or) 459.52 165 T -5 F --0.6 (KbdFeed-) 475.51 165 S --0.6 (backClass) 108 152 S -2 F -(. A device can have more than one feedback of each type; set) 167.4 152 T -1 F -(bell_id) 463.97 152 T -2 F -( to the) 497.3 152 T -(particular bell feedback of) 108 139 T -1 F -(bell_class) 237.29 139 T -2 F -( type.) 285.29 139 T -3 F -(T) 249.86 692 T -(able 9.1 Pr) 256.76 692 T -(ede\336ned Bells) 314.54 692 T -1 F -(Action) 109 672 T -(Named Bell) 370 672 T -2 11 Q -(Indicator turned on) 109 657.67 T -(AX_IndicatorOn) 370 657.67 T -(Indicator turned of) 109 643.67 T -(f) 191.2 643.67 T -(AX_IndicatorOf) 370 643.67 T -(f) 442.42 643.67 T -(More than one indicator changed state) 109 629.67 T -(AX_IndicatorChange) 370 629.67 T -(Control turned on) 109 615.67 T -(AX_FeatureOn) 370 615.67 T -(Control turned of) 109 601.67 T -(f) 185.11 601.67 T -(AX_FeatureOf) 370 601.67 T -(f) 435.7 601.67 T -(More than one control changed state) 109 587.67 T -(AX_FeatureChange) 370 587.67 T -(Slo) 109 573.67 T -(wK) 123.4 573.67 T -(e) 139.01 573.67 T -(ys and BounceK) 143.73 573.67 T -(e) 216.16 573.67 T -(ys about to be turned on or of) 220.88 573.67 T -(f) 350.45 573.67 T -(AX_Slo) 370 573.67 T -(wK) 405.78 573.67 T -(e) 421.39 573.67 T -(ysW) 426.11 573.67 T -(arning) 445.39 573.67 T -(Slo) 109 559.67 T -(wK) 123.4 559.67 T -(e) 139.01 559.67 T -(ys k) 143.73 559.67 T -(e) 161.65 559.67 T -(y pressed) 166.37 559.67 T -(AX_Slo) 370 559.67 T -(wK) 405.78 559.67 T -(e) 421.39 559.67 T -(yPress) 426.11 559.67 T -(Slo) 109 545.67 T -(wK) 123.4 545.67 T -(e) 139.01 545.67 T -(ys k) 143.73 545.67 T -(e) 161.65 545.67 T -(y accepted) 166.37 545.67 T -(AX_Slo) 370 545.67 T -(wK) 405.78 545.67 T -(e) 421.39 545.67 T -(yAccept) 426.11 545.67 T -(Slo) 109 531.67 T -(wK) 123.4 531.67 T -(e) 139.01 531.67 T -(ys k) 143.73 531.67 T -(e) 161.65 531.67 T -(y rejected) 166.37 531.67 T -(AX_Slo) 370 531.67 T -(wK) 405.78 531.67 T -(e) 421.39 531.67 T -(yReject) 426.11 531.67 T -(Accepted Slo) 109 517.67 T -(wK) 167.68 517.67 T -(e) 183.29 517.67 T -(ys k) 188.01 517.67 T -(e) 205.93 517.67 T -(y released) 210.65 517.67 T -(AX_Slo) 370 517.67 T -(wK) 405.78 517.67 T -(e) 421.39 517.67 T -(yRelease) 426.11 517.67 T -(BounceK) 109 503.67 T -(e) 150.27 503.67 T -(ys k) 154.99 503.67 T -(e) 172.91 503.67 T -(y rejected) 177.63 503.67 T -(AX_BounceK) 370 503.67 T -(e) 432.66 503.67 T -(yReject) 437.38 503.67 T -(Stick) 109 489.67 T -(yK) 131.45 489.67 T -(e) 144.62 489.67 T -(ys k) 149.34 489.67 T -(e) 167.26 489.67 T -(y latched) 171.98 489.67 T -(AX_Stick) 370 489.67 T -(yLatch) 413.83 489.67 T -(Stick) 109 475.67 T -(yK) 131.45 475.67 T -(e) 144.62 475.67 T -(ys k) 149.34 475.67 T -(e) 167.26 475.67 T -(y lock) 171.98 475.67 T -(ed) 199.06 475.67 T -(AX_Stick) 370 475.67 T -(yLock) 413.83 475.67 T -(Stick) 109 461.67 T -(yK) 131.45 461.67 T -(e) 144.62 461.67 T -(ys k) 149.34 461.67 T -(e) 167.26 461.67 T -(y unlock) 171.98 461.67 T -(ed) 210.06 461.67 T -(AX_Stick) 370 461.67 T -(yUnlock) 413.83 461.67 T -108 684 513 684 2 L -V -0.5 H -0 Z -N -108 667 513 667 2 L -V -N -FMENDPAGE -%%EndPage: "48" 60 -%%Page: "49" 61 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(49) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(9 Bells) 503.63 744.87 T -2 12 Q --0.36 (Table 9.2 shows the conditions that cause a bell to sound or an) 108 712 P -5 F --0.8 -0.6 (XkbBellNotifyEvent) 406.59 712 B -2 F --0.36 ( to) 525.39 712 P -(be generated when a bell function is called.) 108 699 T -0 F -(9.3.1) 72 512 T -(Generating Named Bells) 108 512 T -2 F -(To ring the bell on an X input extension device or the default keyboard, use) 108 492 T -1 F -(XkbDevice-) 473.94 492 T -(Bell.) 108 479 T -2 11 Q -(Bool) 108 458.67 T -3 F -(XkbDe) 132.15 458.67 T -(viceBell) 164.98 458.67 T -2 F -(\050) 201.64 458.67 T -1 F -(display) 205.31 458.67 T -(, window) 236.48 458.67 T -(, de) 275.4 458.67 T -(vice_id, bell_class, bell_id, per) 291.12 458.67 T -(cent, name) 428.2 458.67 T -2 F -(\051) 475.85 458.67 T -(Display *) 126 445.67 T -1 F -(display) 189 445.67 T -2 F -(;) 220.78 445.67 T -(/* connection to the X serv) 252 445.67 T -(er */) 370.68 445.67 T -(W) 126 432.67 T -(indo) 135.94 432.67 T -(w) 155.23 432.67 T -1 F -(window) 189 432.67 T -2 F -(;) 223.23 432.67 T -(/* windo) 252 432.67 T -(w for which the bell is generated, or None */) 290.53 432.67 T -(unsigned int) 126 419.67 T -1 F -(de) 189 419.67 T -(vice_spec) 199.22 419.67 T -2 F -(;) 241.98 419.67 T -(/* de) 252 419.67 T -(vice ID, or) 273.42 419.67 T -5 12 Q --0.6 (XkbUseCoreKbd) 323.51 419.67 S -2 11 Q -( */) 409.31 419.67 T -(unsigned int) 126 406.67 T -1 F -(bell_class) 189 406.67 T -2 F -(;) 233 406.67 T -(/* X input e) 252 406.67 T -(xtension bell class of the bell to be rung */) 304.08 406.67 T -(unsigned int) 126 393.67 T -1 F -(bell_id) 189 393.67 T -2 F -(;) 219.56 393.67 T -(/* X input e) 252 393.67 T -(xtension bell ID of the bell to be rung */) 304.08 393.67 T -(int) 126 380.67 T -1 F -(per) 189 380.67 T -(cent) 203.26 380.67 T -2 F -(;) 221.58 380.67 T -(/* bell v) 252 380.67 T -(olume, from -100 to 100 inclusi) 287.84 380.67 T -(v) 427.51 380.67 T -(e */) 432.84 380.67 T -(Atom) 126 367.67 T -1 F -(name) 189 367.67 T -2 F -(;) 212.83 367.67 T -(/* a name for the bell, or) 252 367.67 T -5 12 Q --0.6 (NULL) 363.2 367.67 S -2 11 Q -( */) 389.6 367.67 T -2 12 Q --0.11 (Set) 108 348 P -1 F --0.11 (per) 126.23 348 P --0.11 (cent) 141.78 348 P -2 F --0.11 ( to be the volume relative to the base volume for the keyboard as described for) 161.77 348 P -1 F -(XBell) 108 335 T -2 F -(.) 134.66 335 T -(Note that) 108 314 T -1 F -(bell_class) 155.33 314 T -2 F -( and) 203.33 314 T -1 F -(bell_id) 226.66 314 T -2 F -( indicate the bell to physically ring.) 259.99 314 T -1 F -(name) 432.65 314 T -2 F -( is simply an) 458.64 314 T -(arbitrary moniker for the client application\325s use.) 108 301 T -(To determine the current feedback settings of an extension input device, use) 108 280 T -1 F -(XGetF) 476.26 280 T -(eed-) 507.35 280 T -(bac) 108 267 T -(kContr) 125.09 267 T -(ol) 157.88 267 T -2 F -(. See the X input extension documentation for more information on) 167.22 267 T -1 F -(XGet-) 493.19 267 T -(F) 108 254 T -(eedbac) 114.43 254 T -(kContr) 148.18 254 T -(ol) 180.97 254 T -2 F -( and related data structures.) 190.31 254 T -(If a compatible keyboard extension is not present in the X server,) 108 233 T -1 F -(XkbDe) 424.27 233 T -(viceBell) 456.74 233 T -2 F -( immedi-) 495.4 233 T -(ately returns) 108 220 T -5 F --0.6 (False) 170.65 220 S -2 F -(. Otherwise,) 203.65 220 T -1 F -(XkbDe) 264.97 220 T -(viceBell) 297.45 220 T -2 F -(rings the bell as specified for the display) 339.1 220 T -(and keyboard device and returns) 108 207 T -5 F --0.6 (True) 266.95 207 S -2 F -(. If you have disabled the audible bell, the server) 293.35 207 T -(does not ring the system bell, although it does generate a) 108 194 T -5 F --0.6 (XkbBellNotify) 383.3 194 S -2 F -( event.) 469.11 194 T -(You can call) 108 173 T -1 F -(XkbDe) 171.65 173 T -(viceBell) 204.12 173 T -2 F -( without first initializing the keyboard extension.) 242.77 173 T -(As a convenience function, Xkb provides a function to ring the bell on the default key-) 108 152 T -(board:) 108 139 T -1 F -(XkbBell.) 141.66 139 T -2 11 Q -(Bool) 108 118.67 T -3 F -(XkbBell) 132.15 118.67 T -2 F -(\050) 170.66 118.67 T -1 F -(display) 174.32 118.67 T -(, window) 205.49 118.67 T -(, per) 244.41 118.67 T -(cent, name) 264.17 118.67 T -2 F -(\051) 311.82 118.67 T -(Display *) 126 105.67 T -1 F -(display) 189 105.67 T -2 F -(;) 220.78 105.67 T -(/* connection to the X serv) 252 105.67 T -(er */) 370.68 105.67 T -(W) 126 92.67 T -(indo) 135.94 92.67 T -(w) 155.23 92.67 T -1 F -(window) 189 92.67 T -2 F -(;) 223.23 92.67 T -(/* e) 252 92.67 T -(v) 267.92 92.67 T -(ent windo) 273.25 92.67 T -(w) 316.67 92.67 T -(, or None*/) 323.9 92.67 T -(int) 126 79.67 T -1 F -(per) 189 79.67 T -(cent) 203.26 79.67 T -2 F -(;) 221.58 79.67 T -(/* relati) 252 79.67 T -(v) 285.64 79.67 T -(e v) 290.97 79.67 T -(olume, which can range from -100 to 100 inclusi) 303.89 79.67 T -(v) 518.39 79.67 T -(e */) 523.72 79.67 T -(Atom) 126 66.67 T -1 F -(name) 189 66.67 T -2 F -(;) 212.83 66.67 T -(/* a bell name, or) 252 66.67 T -5 12 Q --0.6 (NULL) 331.43 66.67 S -2 11 Q -( */) 357.83 66.67 T -3 12 Q -(T) 190.3 679 T -(able 9.2 Bell Sounding and Bell Ev) 197.2 679 T -(ent Generating) 376.46 679 T -1 F -(Function called) 108 651 T -(A) 252 651 T -(udibleBell) 259.09 651 T -(Server sounds) 333 658 T -(a bell) 333 644 T -(Server sends an) 423 658 T -(XkbBellNotifyEvent) 423 644 T -2 11 Q -(XkbDe) 108 628.67 T -(viceBell) 139.49 628.67 T -(On) 252 628.67 T -(Y) 333 628.67 T -(es) 339.84 628.67 T -(Y) 423 628.67 T -(es) 429.84 628.67 T -(XkbDe) 108 615.67 T -(viceBell) 139.49 615.67 T -(Of) 252 615.67 T -(f) 263.33 615.67 T -(No) 333 615.67 T -(Y) 423 615.67 T -(es) 429.84 615.67 T -(XkbBell) 108 602.67 T -(On) 252 602.67 T -(Y) 333 602.67 T -(es) 339.84 602.67 T -(Y) 423 602.67 T -(es) 429.84 602.67 T -(XkbBell) 108 589.67 T -(Of) 252 589.67 T -(f) 263.33 589.67 T -(No) 333 589.67 T -(Y) 423 589.67 T -(es) 429.84 589.67 T -(XkbDe) 108 576.67 T -(viceBellEv) 139.49 576.67 T -(ent) 188.21 576.67 T -(On or Of) 252 576.67 T -(f) 291.43 576.67 T -(No) 333 576.67 T -(Y) 423 576.67 T -(es) 429.84 576.67 T -(XkbBellEv) 108 563.67 T -(ent) 157.34 563.67 T -(On or Of) 252 563.67 T -(f) 291.43 563.67 T -(No) 333 563.67 T -(Y) 423 563.67 T -(es) 429.84 563.67 T -(XkbDe) 108 550.67 T -(viceF) 139.49 550.67 T -(orceBell) 163.77 550.67 T -(On or Of) 252 550.67 T -(f) 291.43 550.67 T -(Y) 333 550.67 T -(es) 339.84 550.67 T -(No) 423 550.67 T -(XkbF) 108 537.67 T -(orceBell) 132.89 537.67 T -(On or Of) 252 537.67 T -(f) 291.43 537.67 T -(Y) 333 537.67 T -(es) 339.84 537.67 T -(No) 423 537.67 T -108 671 522 671 2 L -V -0.5 H -0 Z -N -108 637 522 637 2 L -V -N -FMENDPAGE -%%EndPage: "49" 61 -%%Page: "50" 62 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(50) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(9 Bells) 503.63 744.87 T -2 12 Q -(If a compatible keyboard extension isn\325t present in the X server,) 108 712 T -1 F -(XkbBell) 419.27 712 T -2 F -( calls) 457.26 712 T -1 F -(XBell) 485.26 712 T -2 F -(with) 514.92 712 T -(the specified) 108 699 T -1 F -(display) 171.98 699 T -2 F -( and) 206.65 699 T -1 F -(per) 229.98 699 T -(cent) 245.53 699 T -2 F -(, and returns) 265.52 699 T -5 F --0.6 (False) 328.18 699 S -2 F -(. Otherwise,) 361.18 699 T -1 F -(XkbBell) 422.5 699 T -2 F -(calls) 463.49 699 T -1 F -(XkbDe) 488.48 699 T -(vi-) 520.96 699 T --0.05 (ceBell) 108 686 P -2 F --0.05 ( with the specified) 137.99 686 P -1 F --0.05 (display) 229.12 686 P --0.05 (, window) 263.13 686 P --0.05 (, per) 305.54 686 P --0.05 (cent,) 327.05 686 P -2 F --0.05 (and) 352.99 686 P -1 F --0.05 (name) 373.27 686 P -2 F --0.05 (, a) 399.27 686 P -1 F --0.05 (de) 413.5 686 P --0.05 (vice_spec) 424.65 686 P -2 F --0.05 ( of) 471.3 686 P -5 F --0.1 -0.6 (XkbUseC-) 487.2 686 B --0.21 -0.6 (oreKbd) 108 673 B -2 F --0.1 (, a) 147.6 673 P -1 F --0.1 (bell_class) 161.73 673 P -2 F --0.1 (of) 212.64 673 P -5 F --0.21 -0.6 (XkbDfltXIClass) 225.54 673 B -2 F --0.1 (, and a) 317.94 673 P -1 F --0.1 (bell_id) 352.3 673 P -2 F --0.1 (of) 388.54 673 P -5 F --0.21 -0.6 (XkbDfltXIId,) 401.44 673 B -2 F --0.1 ( and returns) 480.64 673 P -5 F --0.6 (True) 108 660 S -2 F -(.) 134.4 660 T -(If you have disabled the audible bell, the server does not ring the system bell, although it) 108 639 T -(does generate a) 108 626 T -5 F --0.6 (XkbBellNotify) 184.97 626 S -2 F -( event.) 270.77 626 T -(You can call) 108 605 T -1 F -(XkbBell) 171.65 605 T -2 F -( without first initializing the keyboard extension.) 209.64 605 T -0 F -(9.3.2) 72 580 T -(Generating Named Bell Events) 108 580 T -2 F -(Using Xkb, you can also generate a named bell event that does not ring any bell. This) 108 560 T -(allows you to do things such as generate events when your application starts.) 108 547 T -(For example, if an audio client listens for these types of bells, it can produce a \322whoosh\323) 108 526 T -(sound when it receives a named bell event to indicate a client just started. In this manner,) 108 513 T -(applications can generate start-up feedback and not worry about producing annoying) 108 500 T -(beeps if an audio server is not running.) 108 487 T --0.11 (To cause a bell event for an X input extension device or for the keyboard, without ringing) 108 466 P -(the corresponding bell, use) 108 453 T -1 F -(XkbDeviceBellEvent.) 240.31 453 T -2 11 Q -(Bool) 108 432.67 T -3 F -(XkbDe) 132.15 432.67 T -(viceBellEv) 164.98 432.67 T -(ent) 214.37 432.67 T -2 F -(\050) 229.03 432.67 T -1 F -(display) 232.7 432.67 T -(, window) 263.87 432.67 T -(, de) 302.79 432.67 T -(vice_spec, bell_class, bell_id, per) 318.51 432.67 T -(cent, name) 466.58 432.67 T -2 F -(\051) 514.23 432.67 T -(Display *) 126 419.67 T -1 F -(display) 189 419.67 T -2 F -(;) 220.78 419.67 T -(/* connection to the X serv) 234 419.67 T -(er */) 352.68 419.67 T -(W) 126 406.67 T -(indo) 135.94 406.67 T -(w) 155.23 406.67 T -1 F -(window) 189 406.67 T -2 F -(;) 223.23 406.67 T -(/* e) 234 406.67 T -(v) 249.92 406.67 T -(ent windo) 255.25 406.67 T -(w) 298.67 406.67 T -(, or None*/) 305.9 406.67 T -(unsigned int) 126 393.67 T -1 F -(de) 189 393.67 T -(vice_spec) 199.22 393.67 T -2 F -(;) 241.98 393.67 T -(/* de) 245.03 393.67 T -(vice ID, or) 266.45 393.67 T -5 12 Q --0.6 (XkbUseCoreKbd) 316.55 393.67 S -2 11 Q -( */) 402.35 393.67 T -(unsigned int) 126 380.67 T -1 F -(bell_class;) 189 380.67 T -2 F -(/* input e) 236.66 380.67 T -(xtension bell class for the e) 278.06 380.67 T -(v) 397.85 380.67 T -(ent */) 403.18 380.67 T -(unsigned int) 126 367.67 T -1 F -(bell_id) 189 367.67 T -2 F -(;) 219.56 367.67 T -(/* input e) 234 367.67 T -(xtension bell ID for the e) 275.39 367.67 T -(v) 385.4 367.67 T -(ent */) 390.74 367.67 T -(int) 126 354.67 T -1 F -(per) 189 354.67 T -(cent) 203.26 354.67 T -2 F -(;) 221.58 354.67 T -(/* v) 234 354.67 T -(olume for the bell, which can range from -100 to 100 inclusi) 250.59 354.67 T -(v) 516.11 354.67 T -(e */) 521.44 354.67 T -(Atom) 126 341.67 T -1 F -(name) 189 341.67 T -2 F -(;) 212.83 341.67 T -(/* a bell name, or) 234 341.67 T -5 12 Q --0.6 (NULL) 313.43 341.67 S -2 11 Q -( */) 339.83 341.67 T -2 12 Q -(If a compatible keyboard extension isn\325t present in the X server,) 108 322 T -1 F -(XkbDe) 419.27 322 T -(viceBellEvent) 451.74 322 T -2 F -0 (immediately returns) 108 309 P -5 F --0.01 -0.6 (False) 207.31 309 B -2 F -0 (. Otherwise,) 240.31 309 P -1 F -0 (XkbDe) 301.62 309 P -0 (viceBellEvent) 334.1 309 P -2 F -0 (causes an) 402.82 309 P -5 F --0.01 -0.6 (XkbBellNotify) 451.45 309 B -2 F --0.15 (event to be sent to all interested clients and returns) 108 296 P -5 F --0.32 -0.6 (True) 352.25 296 B -2 11 Q --0.14 (.) 378.65 296 P -2 12 Q --0.15 (Set) 384.02 296 P -1 F --0.15 (per) 402.21 296 P --0.15 (cent) 417.76 296 P -2 F --0.15 ( to be the volume rel-) 437.75 296 P -(ative to the base volume for the keyboard as described for) 108 283 T -1 F -(XBell) 388.93 283 T -2 F -(.) 415.6 283 T -(In addition,) 108 262 T -1 F -(XkbDe) 166.33 262 T -(viceBellEvent) 198.8 262 T -2 F -( may generate) 264.78 262 T -5 F --0.6 (Atom) 335.09 262 S -2 F -( protocol errors as well as) 361.49 262 T -5 F --0.6 (Xkb-) 488.12 262 S --0.6 (BellNotify) 108 249 S -2 F -( events. You can call) 174 249 T -1 F -(XkbBell) 277.31 249 T -2 F -( without first initializing the keyboard exten-) 315.3 249 T -(sion.) 108 236 T --0.22 (As a convenience function, Xkb provides a function to cause a bell event for the keyboard) 108 215 P -(without ringing the bell:) 108 202 T -1 F -(XkbBellEvent.) 227.34 202 T -2 11 Q -(Bool) 108 181.67 T -3 F -(XkbBellEv) 132.15 181.67 T -(ent) 183.38 181.67 T -2 F -(\050) 198.05 181.67 T -1 F -(display) 201.71 181.67 T -(, window) 232.88 181.67 T -(, per) 271.8 181.67 T -(cent, name) 291.56 181.67 T -2 F -(\051) 339.21 181.67 T -(Display *) 126 168.67 T -1 F -(display) 189 168.67 T -2 F -(;) 220.78 168.67 T -(/* connection to the X serv) 252 168.67 T -(er */) 370.68 168.67 T -(W) 126 155.67 T -(indo) 135.94 155.67 T -(w) 155.23 155.67 T -1 F -(window) 189 155.67 T -2 F -(;) 223.23 155.67 T -(/* the e) 252 155.67 T -(v) 284.11 155.67 T -(ent windo) 289.44 155.67 T -(w) 332.86 155.67 T -(, or None */) 340.09 155.67 T -(int) 126 142.67 T -1 F -(per) 189 142.67 T -(cent) 203.26 142.67 T -2 F -(;) 221.58 142.67 T -(/* relati) 252 142.67 T -(v) 285.64 142.67 T -(e v) 290.97 142.67 T -(olume, which can range from -100 to 100 inclusi) 303.89 142.67 T -(v) 518.39 142.67 T -(e */) 523.72 142.67 T -(Atom) 126 129.67 T -1 F -(name) 189 129.67 T -2 F -(;) 212.83 129.67 T -(/* a bell name, or) 252 129.67 T -5 12 Q --0.6 (NULL) 331.43 129.67 S -2 11 Q -( */) 357.83 129.67 T -2 12 Q -(If a compatible keyboard extension isn\325t present in the X server,) 108 110 T -1 F -(XkbBellEvent) 419.27 110 T -2 F -( immedi-) 484.58 110 T -(ately returns) 108 97 T -5 F --0.6 (False) 170.65 97 S -2 F -(. Otherwise,) 203.65 97 T -1 F -(XkbBellEvent) 264.97 97 T -2 F -(calls) 333.29 97 T -1 F -( XkbDe) 355.28 97 T -(viceBellEvent) 390.76 97 T -2 F -( with the speci-) 456.73 97 T -(fied) 108 84 T -1 F -(display) 129.66 84 T -(, window) 163.67 84 T -(, per) 206.12 84 T -(cent,) 227.68 84 T -2 F -(and) 253.67 84 T -1 F -(name) 274 84 T -2 F -(, a) 299.99 84 T -1 F -(de) 314.32 84 T -(vice_spec) 325.46 84 T -2 F -( of) 372.11 84 T -5 F --0.6 (XkbUseCoreKbd) 388.1 84 S -2 F -(, a) 473.91 84 T -1 F -(bell_class) 488.23 84 T -FMENDPAGE -%%EndPage: "50" 62 -%%Page: "51" 63 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(51) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(9 Bells) 503.63 744.87 T -2 12 Q -(of) 108 712 T -5 F --0.6 (XkbDfltXIClass) 121 712 S -2 F -(, and a) 213.4 712 T -1 F -(bell_id) 248.05 712 T -2 F -(of) 284.39 712 T -5 F --0.6 (XkbDfltXIId,) 297.39 712 S -2 F -( and returns what) 376.59 712 T -1 F -(XkbDe) 462.57 712 T -(vice-) 495.04 712 T -(BellEvent) 108 699 T -2 F -( returns.) 154.66 699 T -1 F -(XkbBellEvent) 108 678 T -2 F -( generates a) 173.32 678 T -5 F --0.6 (XkbBellNotify) 232.96 678 S -2 F -( event.) 318.76 678 T -(You can call) 108 657 T -1 F -(XkbBellEvent) 171.65 657 T -2 F -( without first initializing the keyboard extension.) 236.96 657 T -0 F -(9.3.3) 72 632 T -(For) 108 632 T -(cing a Ser) 127.09 632 T -(ver) 184.57 632 T -(-Generated Bell) 202.34 632 T -2 F --0.24 (To ring the bell on any keyboard, overriding user preference settings for audible bells, use) 108 612 P -1 F -(XkbForceDeviceBell) 108 599 T -2 F -(.) 207.96 599 T -2 11 Q -(Bool) 108 578.67 T -3 F -(XkbF) 132.15 578.67 T -(or) 158.76 578.67 T -(ceDe) 168.95 578.67 T -(viceBell) 191.38 578.67 T -2 F -(\050) 228.04 578.67 T -1 F -(display) 231.71 578.67 T -(, window) 262.88 578.67 T -(, de) 301.8 578.67 T -(vice_spec, bell_class, bell_id, per) 317.52 578.67 T -(cent) 465.59 578.67 T -2 F -(\051) 483.91 578.67 T -(Display *) 126 565.67 T -1 F -(display) 189 565.67 T -2 F -(;) 220.78 565.67 T -(/* connection to the X serv) 252 565.67 T -(er */) 370.68 565.67 T -(W) 126 552.67 T -(indo) 135.94 552.67 T -(w) 155.23 552.67 T -1 F -(window) 189 552.67 T -2 F -(;) 223.23 552.67 T -(/* e) 252 552.67 T -(v) 267.92 552.67 T -(ent windo) 273.25 552.67 T -(w) 316.67 552.67 T -(, or None */) 323.9 552.67 T -(unsigned int) 126 539.67 T -1 F -(de) 189 539.67 T -(vice_spec) 199.22 539.67 T -2 F -(;) 241.98 539.67 T -(/* de) 252 539.67 T -(vice ID, or) 273.42 539.67 T -5 12 Q --0.6 (XkbUseCoreKbd) 323.51 539.67 S -2 11 Q -( */) 409.31 539.67 T -(unsigned int) 126 526.67 T -1 F -(bell_class) 189 526.67 T -2 F -(;) 233 526.67 T -(/* input e) 252 526.67 T -(xtension class of the bell to be rung */) 293.39 526.67 T -(unsigned int) 126 513.67 T -1 F -(bell_id) 189 513.67 T -2 F -(;) 219.56 513.67 T -(/* input e) 252 513.67 T -(xtension ID of the bell to be rung */) 293.39 513.67 T -(int) 126 500.67 T -1 F -(per) 189 500.67 T -(cent) 203.26 500.67 T -2 F -(;) 221.58 500.67 T -(/* relati) 252 500.67 T -(v) 285.64 500.67 T -(e v) 290.97 500.67 T -(olume, which can range from -100 to 100 inclusi) 303.89 500.67 T -(v) 518.39 500.67 T -(e */) 523.72 500.67 T -2 12 Q -(If a compatible keyboard extension isn\325t present in the X server,) 108 481 T -1 F -(XkbF) 419.27 481 T -(or) 444 481 T -(ceDe) 454.22 481 T -(viceBell) 478.69 481 T -2 F --0.43 (immediately returns) 108 468 P -5 F --0.94 -0.6 (False) 206.47 468 B -2 F --0.43 (. Otherwise,) 239.47 468 P -1 F --0.43 (XkbF) 299.94 468 P --0.43 (or) 324.67 468 P --0.43 (ceDe) 334.89 468 P --0.43 (viceBell) 359.36 468 P -2 F --0.43 (rings the bell as specified for) 400.59 468 P --0.39 (the display and keyboard device and returns) 108 455 P -5 F --0.86 -0.6 (True) 319.56 455 B -2 F --0.39 (. Set) 345.96 455 P -1 F --0.39 (per) 369.52 455 P --0.39 (cent) 385.08 455 P -2 F --0.39 ( to be the volume relative to) 405.07 455 P -(the base volume for the keyboard as described for) 108 442 T -1 F -(XBell) 350.27 442 T -2 F -(. There is no) 376.93 442 T -1 F -(name) 439.92 442 T -2 F -( parameter) 465.91 442 T -(because) 108 429 T -1 F -(XkbF) 148.98 429 T -(or) 173.71 429 T -(ceDe) 183.94 429 T -(viceBell) 208.4 429 T -2 F -(does not cause an) 250.06 429 T -5 F --0.6 (XkbBellNotify) 337.37 429 S -2 F -( event.) 423.17 429 T -(You can call) 108 408 T -1 F -(XkbBell) 171.65 408 T -2 F -( without first initializing the keyboard extension.) 209.64 408 T -(To ring the bell on the default keyboard, overriding user preference settings for audible) 108 387 T -(bells, use) 108 374 T -1 F -(XkbF) 155.66 374 T -(or) 180.4 374 T -(ceBell) 190.62 374 T -2 F -(.) 220.61 374 T -2 11 Q -(Bool) 108 353.67 T -3 F -(XkbF) 132.15 353.67 T -(or) 158.76 353.67 T -(ceBell) 168.95 353.67 T -2 F -(\050) 197.06 353.67 T -1 F -(display) 200.72 353.67 T -(, per) 231.89 353.67 T -(cent\051) 251.65 353.67 T -2 F -(Display *) 126 340.67 T -1 F -(display) 189 340.67 T -2 F -(;) 220.78 340.67 T -(/* connection to the X serv) 234 340.67 T -(er */) 352.68 340.67 T -(int) 126 327.67 T -1 F -(per) 189 327.67 T -(cent) 203.26 327.67 T -2 F -(;) 221.58 327.67 T -(/* v) 234 327.67 T -(olume for the bell, which can range from -100 to 100 inclusi) 250.59 327.67 T -(v) 516.11 327.67 T -(e */) 521.44 327.67 T -2 12 Q --0.13 (If a compatible keyboard extension isn\325t present in the X server,) 108 308 P -1 F --0.13 (XkbF) 417.8 308 P --0.13 (or) 442.53 308 P --0.13 (ceBell) 452.75 308 P -2 F --0.13 ( calls) 482.74 308 P -1 F --0.13 (XBell) 510.47 308 P -2 F -(with the specified) 108 295 T -1 F -(display) 196.32 295 T -2 F -( and) 230.99 295 T -1 F -(per) 254.32 295 T -(cent) 269.87 295 T -2 F -( and returns) 289.86 295 T -5 F --0.6 (False) 349.51 295 S -2 F -(. Otherwise,) 382.51 295 T -1 F -(XkbF) 443.83 295 T -(or) 468.56 295 T -(ceBell) 478.79 295 T -2 F -(calls) 511.78 295 T -1 F -(XkbF) 108 282 T -(or) 132.73 282 T -(ceDe) 142.96 282 T -(viceBell) 167.42 282 T -2 F -( with the specified) 206.08 282 T -1 F -(display) 297.4 282 T -2 F -(and) 335.06 282 T -1 F -( per) 352.39 282 T -(cent) 370.94 282 T -2 F -(,) 390.94 282 T -1 F -(de) 396.94 282 T -(vice_spec) 408.08 282 T -2 F -( =) 454.73 282 T -5 F --0.6 (XkbUseC-) 464.5 282 S --0.7 -0.6 (oreKbd) 108 269 B -2 F --0.32 (,) 147.6 269 P -1 F --0.32 (bell_class) 153.28 269 P -2 F --0.32 (=) 203.96 269 P -5 F --0.7 -0.6 (XkbDfltXIClass) 213.41 269 B -2 F --0.32 (,) 305.81 269 P -1 F --0.32 (bell_id) 311.49 269 P -2 F --0.32 (=) 347.51 269 P -5 F --0.7 -0.6 (XkbDfltXIId,) 356.96 269 B -1 F --0.32 (window) 438.84 269 P -2 F --0.32 ( = None, and) 476.19 269 P -1 F -(name) 108 256 T -2 F -( =) 133.99 256 T -5 F --0.6 (NULL) 146.76 256 S -2 F -(, and returns what) 173.16 256 T -1 F -( XkbF) 259.14 256 T -(or) 286.87 256 T -(ceDe) 297.1 256 T -(viceBell) 321.56 256 T -2 F -( returns.) 360.22 256 T -1 F -(XkbF) 108 235 T -(or) 132.73 235 T -(ceBell) 142.96 235 T -2 F -(does not cause an) 175.94 235 T -5 F --0.6 (XkbBellNotify) 263.26 235 S -2 F -( event.) 349.06 235 T -(You can call) 108 214 T -1 F -(XkbBell) 171.65 214 T -2 F -( without first initializing the keyboard extension.) 209.64 214 T -0 F -(9.4) 72 189 T -(Detecting Bells) 108 189 T -2 F -(Xkb generates) 108 169 T -5 F --0.6 (XkbBellNotify) 179.98 169 S -2 F -( events for all bells except for those resulting from calls) 265.78 169 T -(to) 108 156 T -1 F -(XkbF) 120.34 156 T -(or) 145.07 156 T -(ceDe) 155.29 156 T -(viceBell) 179.76 156 T -2 F -( and) 218.41 156 T -1 F -(XkbF) 241.74 156 T -(or) 266.47 156 T -(ceBell) 276.7 156 T -2 F -(. To receive) 306.68 156 T -5 F --0.6 (XkbBellNotify) 366.66 156 S -2 F -( events under all) 452.46 156 T -(possible conditions, pass) 108 143 T -5 F --0.6 (XkbBellNotifyMask) 230 143 S -2 F -( in both the) 342.21 143 T -1 F -(bits_to_c) 399.54 143 T -(hang) 443.37 143 T -(e) 467.25 143 T -2 F -(and) 475.57 143 T -1 F -(values_for_bits) 108 130 T -2 F -( parameters to) 182 130 T -1 F -(XkbSelectEvents) 252.98 130 T -2 F -( \050see section 4.3\051.) 332.29 130 T -(The) 108 109 T -5 F -(XkbBellNotify) 129.66 109 T -2 F -( event has no event details. It is either selected or it is not. How-) 223.26 109 T -(ever, you can call) 108 96 T -1 F -(XkbSelectEventDetails) 195.64 96 T -2 F -( using) 304.94 96 T -5 F --0.6 (XkbBellNotify) 336.95 96 S -2 F -( as the) 422.75 96 T -1 F -(e) 456.41 96 T -(vent_type) 461.56 96 T -2 F -( and) 507.54 96 T -(specifying) 108 83 T -5 F --0.6 (XkbAllBellNotifyMask) 160.99 83 S -2 F -( in) 292.99 83 T -1 F -(bits_to_c) 308.33 83 T -(hang) 352.15 83 T -(e) 376.04 83 T -2 F -( and) 381.36 83 T -1 F -(values_for_bits.) 404.69 83 T -2 F -( This has) 481.7 83 T -(the same effect as a call to) 108 70 T -1 F -(XkbSelectEvents) 237.62 70 T -2 F -(.) 316.93 70 T -FMENDPAGE -%%EndPage: "51" 63 -%%Page: "52" 64 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(52) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(9 Bells) 503.63 744.87 T -2 12 Q -(The structure for the) 108 712 T -5 F --0.6 (XkbBellNotify) 209.3 712 S -2 F -( event type contains:) 295.11 712 T -2 11 Q -(typedef struct _XkbBellNotify {) 126 691.67 T -(int) 144 678.67 T -(type;) 216 678.67 T -(/* Xkb e) 279 678.67 T -(xtension base e) 316.72 678.67 T -(v) 383.65 678.67 T -(ent code */) 388.99 678.67 T -(unsigned long) 144 665.67 T -(serial;) 216 665.67 T -(/* X serv) 279 665.67 T -(er serial number for e) 319.16 665.67 T -(v) 413.57 665.67 T -(ent */) 418.91 665.67 T -(Bool) 144 652.67 T -(send_e) 216 652.67 T -(v) 246.27 652.67 T -(ent;) 251.61 652.67 T -(/*) 279 652.67 T -5 12 Q --0.6 (True) 290.31 652.67 S -2 11 Q -( => synthetically generated */) 316.71 652.67 T -(Display *) 144 639.67 T -(display;) 216 639.67 T -(/* serv) 279 639.67 T -(er connection where e) 308.47 639.67 T -(v) 405.02 639.67 T -(ent generated */) 410.35 639.67 T -(T) 144 626.67 T -(ime) 150.34 626.67 T -(time;) 216 626.67 T -(/* serv) 279 626.67 T -(er time when e) 308.47 626.67 T -(v) 373.26 626.67 T -(ent generated */) 378.59 626.67 T -(int) 144 613.67 T -(xkb_type;) 216 613.67 T -(/*) 279 613.67 T -5 F --0.33 (XkbBellNotify) 290.31 613.67 S -2 F -( */) 371.82 613.67 T -(unsigned int) 144 600.67 T -(de) 216 600.67 T -(vice;) 226.11 600.67 T -(/* Xkb de) 279 600.67 T -(vice ID, will not be) 322.11 600.67 T -5 F --0.33 (XkbUseCoreKbd) 410.1 600.67 S -2 F -( */) 491.61 600.67 T -(int) 144 587.67 T -(percent;) 216 587.67 T -(/* requested v) 279 587.67 T -(olume as % of max */) 340.49 587.67 T -(int) 144 574.67 T -(pitch;) 216 574.67 T -(/* requested pitch in Hz */) 279 574.67 T -(int) 144 561.67 T -(duration;) 216 561.67 T -(/* requested duration in microseconds */) 279 561.67 T -(unsigned int) 144 548.67 T -(bell_class;) 216 548.67 T -(/* X input e) 279 548.67 T -(xtension feedback class */) 331.08 548.67 T -(unsigned int) 144 535.67 T -(bell_id;) 216 535.67 T -(/* X input e) 279 535.67 T -(xtension feedback ID */) 331.08 535.67 T -(Atom) 144 522.67 T -(name;) 216 522.67 T -(/* \322name\323 of requested bell */) 279 522.67 T -(W) 144 509.67 T -(indo) 153.94 509.67 T -(w) 173.23 509.67 T -(windo) 216 509.67 T -(w;) 243.23 509.67 T -(/* windo) 279 509.67 T -(w associated with e) 317.53 509.67 T -(v) 403.1 509.67 T -(ent */) 408.44 509.67 T -(Bool) 144 496.67 T -(e) 216 496.67 T -(v) 220.61 496.67 T -(ent_only;) 225.94 496.67 T -(/*) 279 496.67 T -5 12 Q --0.6 (False) 290.31 496.67 S -2 11 Q -( -> the serv) 323.31 496.67 T -(er did not produce a beep */) 373.03 496.67 T -(}) 126 483.67 T -3 F -(XkbBellNotifyEv) 134.03 483.67 T -(ent) 214.59 483.67 T -2 F -(;) 229.26 483.67 T -2 12 Q --0.08 (If your application needs to generate visual bell feedback on the screen when it receives a) 108 464 P -(bell event, use the window ID in the) 108 451 T -5 F --0.6 (XkbBellNotifyEvent) 284.98 451 S -2 F -(, if present.) 403.78 451 T -FMENDPAGE -%%EndPage: "52" 64 -%%Page: "53" 65 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(53) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(10 K) 437.17 744.87 T -(e) 464.09 744.87 T -(yboard Controls) 468.81 744.87 T -0 14 Q -(10) 72 710.67 T -(K) 108 710.67 T -(e) 117.9 710.67 T -(yboar) 125.47 710.67 T -(d Contr) 163.31 710.67 T -(ols) 212.8 710.67 T -2 12 Q -(The Xkb extension is composed of two parts: a server extension, and a client-side X) 108 688 T -(library extension. This chapter discusses functions used to modify controls effecting the) 108 675 T -(behavior of the server portion of the Xkb extension. Chapter 11 discusses functions used) 108 662 T --0.46 (to modify controls that affect only the behavior of the client portion of the extension; those) 108 649 P -(controls are known as Library Controls.) 108 636 T -(Xkb contains control features that affect the entire keyboard, known as global keyboard) 108 615 T --0.11 (controls. Some of the controls may be selectively enabled and disabled; these controls are) 108 602 P -(known as the) 108 589 T -1 F -(Boolean Contr) 174.32 589 T -(ols) 244.79 589 T -2 F -(. Boolean Controls can be turned on or off under program) 258.79 589 T -(control and can also be automatically set to an on or off condition when a client program) 108 576 T --0.66 (exits. The remaining controls, known as the) 108 563 P -1 F --0.66 (Non-Boolean Contr) 316.37 563 P --0.66 (ols) 410.18 563 P -2 F --0.66 (, are always active. The) 424.18 563 P -5 F --0.11 -0.6 (XkbControlsRec) 108 550 B -2 F --0.05 ( structure describes the current state of most of the global controls and) 200.4 550 P -(the attributes effecting the behavior of each of these Xkb features. This chapter describes) 108 537 T -(the Xkb controls and how to manipulate them.) 108 524 T --0.38 (There are two possible components for each of the Boolean Controls: attributes describing) 108 503 P -(how the control should work, and a state describing whether the behavior as a whole is) 108 490 T -(enabled or disabled. The attributes and state for most of these controls are held in the) 108 477 T -5 F --0.6 (XkbControlsRec) 108 464 S -2 F -( structure \050see section 10.8\051.) 200.4 464 T -(You can manipulate the Xkb controls individually, via convenience functions, or as a) 108 443 T --0.13 (whole. To treat them as a group, modify an) 108 430 P -5 F --0.29 -0.6 (XkbControlsRec) 317.1 430 B -2 F --0.13 ( structure to describe all of) 409.5 430 P -(the changes to be made, and then pass that structure and appropriate flags to an Xkb) 108 417 T -(library function, or use a) 108 404 T -5 F --0.6 (XkbControlsChangesRec) 229.31 404 S -2 F -( \050see section 10.10.1\051 to reduce net-) 367.91 404 T -(work traffic. When using a convenience function to manipulate one control individually,) 108 391 T -(you do not use an) 108 378 T -5 F --0.6 (XkbControlsRec) 195.66 378 S -2 F -( structure directly.) 288.06 378 T -(The Xkb controls are grouped as shown in Table 10.1.) 108 357 T -3 F -(T) 241.14 337 T -(able 10.1 Xkb K) 248.04 337 T -(eyboard Contr) 333.42 337 T -(ols) 408.86 337 T -1 F -(T) 109 317 T -(ype of Contr) 114.78 317 T -(ol) 174.24 317 T -(Contr) 343 317 T -(ol Name) 370.47 317 T -(Boolean Contr) 451 317 T -(ol?) 521.46 317 T -2 11 Q -(Controls for enabling and disabling other controls) 109 302.67 T -(EnabledControls) 343 302.67 T -(No) 451 302.67 T -(AutoReset) 343 288.67 T -(No) 451 288.67 T -(Control for bell beha) 109 274.67 T -(vior) 200.74 274.67 T -(AudibleBell) 343 274.67 T -(Boolean) 451 274.67 T -(Controls for repeat k) 109 260.67 T -(e) 200.23 260.67 T -(y beha) 204.95 260.67 T -(vior) 233.75 260.67 T -(PerK) 343 260.67 T -(e) 365.33 260.67 T -(yRepeat) 370.05 260.67 T -(No) 451 260.67 T -(RepeatK) 343 246.67 T -(e) 381.21 246.67 T -(ys) 385.93 246.67 T -(Boolean) 451 246.67 T -(DetectableAutorepeat) 343 232.67 T -(Boolean) 451 232.67 T -(Controls for k) 109 218.67 T -(e) 170.61 218.67 T -(yboard o) 175.33 218.67 T -(v) 213.96 218.67 T -(erlays) 219.3 218.67 T -(Ov) 343 218.67 T -(erlay1) 356.28 218.67 T -(Boolean) 451 218.67 T -(Ov) 343 204.67 T -(erlay2) 356.28 204.67 T -(Boolean) 451 204.67 T -(Controls for using the mouse from the k) 109 190.67 T -(e) 285.19 190.67 T -(yboard) 289.91 190.67 T -(MouseK) 343 190.67 T -(e) 380.61 190.67 T -(ys) 385.33 190.67 T -(Boolean) 451 190.67 T -(MouseK) 343 176.67 T -(e) 380.61 176.67 T -(ysAccel) 385.33 176.67 T -(Boolean) 451 176.67 T -(Controls for better k) 109 162.67 T -(e) 198.41 162.67 T -(yboard access by) 203.13 162.67 T -(AccessXFeedback) 343 162.67 T -(Boolean) 451 162.67 T -(ph) 109 148.67 T -(ysically impaired persons) 119.94 148.67 T -(AccessXK) 343 148.67 T -(e) 389.76 148.67 T -(ys) 394.48 148.67 T -(Boolean) 451 148.67 T -(AccessXT) 343 134.67 T -(imeout) 388.43 134.67 T -(Boolean) 451 134.67 T -(BounceK) 343 120.67 T -(e) 384.27 120.67 T -(ys) 388.99 120.67 T -(Boolean) 451 120.67 T -(Slo) 343 106.67 T -(wK) 357.4 106.67 T -(e) 373.01 106.67 T -(ys) 377.73 106.67 T -(Boolean) 451 106.67 T -(Stick) 343 92.67 T -(yK) 365.45 92.67 T -(e) 378.62 92.67 T -(ys) 383.34 92.67 T -(Boolean) 451 92.67 T -(Controls for general k) 109 78.67 T -(e) 205.73 78.67 T -(yboard mapping) 210.45 78.67 T -(GroupsWrap) 343 78.67 T -(No) 451 78.67 T -108 329 542.25 329 2 L -V -0.5 H -0 Z -N -108 312 542.25 312 2 L -V -N -FMENDPAGE -%%EndPage: "53" 65 -%%Page: "54" 66 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(54) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(10 K) 437.17 744.87 T -(e) 464.09 744.87 T -(yboard Controls) 468.81 744.87 T -2 12 Q -(The individual categories and controls are described first, together with functions for) 108 557 T -(manipulating them. A description of the) 108 544 T -5 F --0.6 (XkbControlsRec) 302.99 544 S -2 F -( structure and the general) 395.39 544 T -(functions for dealing with all of the controls at once follow at the end of the chapter.) 108 531 T -0 F -(10.1) 72 506 T -(Contr) 108 506 T -(ols that Enab) 139.75 506 T -(le and Disab) 214.98 506 T -(le Other Contr) 285.55 506 T -(ols) 365.99 506 T -2 F -(Enable and disable the boolean controls under program control by using the) 108 486 T -5 F --0.6 (Enabled-) 474.61 486 S --0.6 (Controls) 108 473 S -2 F -( control; enable and disable them upon program exit by configuring the) 160.8 473 T -5 F --0.6 (AutoReset) 108 460 S -2 F -( control.) 167.4 460 T -0 F -(10.1.1) 72 435 T -(The Enab) 108 435 T -(ledContr) 161.89 435 T -(ols Contr) 210.98 435 T -(ol) 263.41 435 T -2 F -(The) 108 415 T -5 F --0.6 (EnabledControls) 129.66 415 S -2 F -( control is a bit mask where each bit that is turned on means the) 228.66 415 T -(corresponding control is enabled, and when turned off, disabled. It corresponds to the) 108 402 T -1 F -(enabled_ctrls) 108 389 T -2 F -( field of an) 173.33 389 T -5 F --0.6 (XkbControlsRec) 228.65 389 S -2 F -( structure \050see section 10.8\051. The bits describ-) 321.05 389 T -(ing which controls are turned on or off are defined in Table 10.7.) 108 376 T -(Use) 108 355 T -1 F -(XkbChang) 129.66 355 T -(eEnabledContr) 180.2 355 T -(ols) 253 355 T -2 F -( to manipulate the) 267 355 T -5 F --0.6 (EnabledControls) 356.33 355 S -2 F -( control.) 455.33 355 T -2 11 Q -(Bool) 108 334.67 T -3 F -(XkbChangeEnabledContr) 132.15 334.67 T -(ols) 255.41 334.67 T -2 F -(\050) 268.25 334.67 T -1 F -(dpy) 271.91 334.67 T -2 F -(,) 287.08 334.67 T -1 F -(de) 292.58 334.67 T -(vice_spec) 302.8 334.67 T -2 F -(,) 345.56 334.67 T -1 F -(mask) 351.06 334.67 T -2 F -(,) 373.66 334.67 T -1 F -( values) 376.41 334.67 T -2 F -(\051) 407.27 334.67 T -(Display *) 126 321.67 T -1 F -(dpy) 234 321.67 T -2 F -(;) 249.88 321.67 T -(/* connection to X serv) 306 321.67 T -(er */) 408.49 321.67 T -(unsigned int) 126 308.67 T -1 F -(de) 234 308.67 T -(vice_spec) 244.22 308.67 T -2 F -(;) 286.98 308.67 T -(/* k) 306 308.67 T -(e) 322.7 308.67 T -(yboard de) 327.42 308.67 T -(vice to modify */) 370.82 308.67 T -(unsigned int) 126 295.67 T -1 F -(mask) 234 295.67 T -2 F -(;) 256.61 295.67 T -(/* 1 bit -> controls to enable / disable */) 306 295.67 T -(unsigned int) 126 282.67 T -1 F -(values) 234 282.67 T -2 F -(;) 262.11 282.67 T -(/* 1 bit => enable, 0 bit => disable */) 306 282.67 T -2 12 Q -(The) 108 263 T -1 F -(mask) 129.66 263 T -2 F -( parameter specifies the boolean controls to be enabled or disabled, and the) 154.32 263 T -1 F -(val-) 517.57 263 T -(ues) 108 250 T -2 F -( mask specifies the new state for those controls. Valid values for both of these masks) 124 250 T -(are composed of a bitwise inclusive OR of bits taken from the set of mask bits in Table) 108 237 T -(10.7, using only those masks with \322ok\323 in the) 108 224 T -1 F -(enabled_ctrls) 329.66 224 T -2 F -( column.) 394.99 224 T --0.18 (If the X server does not support a compatible version of Xkb or the Xkb extension has not) 108 203 P -(been properly initialized,) 108 190 T -1 F -(XkbChang) 231.31 190 T -(eEnabledContr) 281.86 190 T -(ols) 354.65 190 T -2 F -( returns) 368.65 190 T -5 F --0.6 (False) 407.98 190 S -2 F -(; otherwise, it sends) 440.98 190 T -(the request to the X server and returns) 108 177 T -5 F --0.6 (True) 293.95 177 S -2 F -(.) 320.35 177 T -(Note that the) 108 156 T -5 F --0.6 (EnabledControls) 172.99 156 S -2 F -( control only enables and disables controls; it does not) 271.99 156 T --0.13 (configure them. Some controls, such as the) 108 143 P -5 F --0.28 -0.6 (AudibleBell) 316.74 143 B -2 F --0.13 ( control, have no configuration) 389.34 143 P -(attributes and are therefore manipulated solely by enabling and disabling them. Others,) 108 130 T -(however, have additional attributes to configure their behavior. For example, the) 108 117 T -5 F --0.6 (RepeatControl) 108 104 S -2 F -( control uses) 193.8 104 T -1 F -(repeat_delay) 257.46 104 T -2 F -( and) 320.11 104 T -1 F -(repeat_interval) 343.44 104 T -2 F -( fields to describe the) 417.43 104 T -(timing behavior of keys that repeat. The) 108 91 T -5 F --0.6 (RepeatControl) 303.3 91 S -2 F -( behavior is turned on or off) 389.1 91 T -2 11 Q -(IgnoreGroupLock) 343 677.67 T -(Boolean) 451 677.67 T -(IgnoreLockMods) 343 663.67 T -(No) 451 663.67 T -(InternalMods) 343 649.67 T -(No) 451 649.67 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(Miscellaneous per) 109 635.67 T -(-client controls) 189.12 635.67 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(GrabsUseXKBState) 343 635.67 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(Boolean) 451 635.67 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(LookupStateWhenGrab) 343 621.67 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(bed) 343 608.67 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(Boolean) 451 621.67 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(SendEv) 343 594.67 T -(entUsesXKBSta) 377.06 594.67 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(te) 343 581.67 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(Boolean) 451 594.67 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -3 12 Q -(T) 241.14 712 T -(able 10.1 Xkb K) 248.04 712 T -(eyboard Contr) 333.42 712 T -(ols) 408.86 712 T -1 F -(T) 109 692 T -(ype of Contr) 114.78 692 T -(ol) 174.24 692 T -(Contr) 343 692 T -(ol Name) 370.47 692 T -(Boolean Contr) 451 692 T -(ol?) 521.46 692 T -108 704 542.25 704 2 L -V -0.5 H -0 Z -N -108 687 542.25 687 2 L -V -N -FMENDPAGE -%%EndPage: "54" 66 -%%Page: "55" 67 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(55) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(10 K) 437.17 744.87 T -(e) 464.09 744.87 T -(yboard Controls) 468.81 744.87 T -2 12 Q -(depending on the value of the) 108 712 T -5 F --0.6 (XkbRepeatKeysMask) 253.31 712 S -2 F -( bit, but you must use other means,) 365.51 712 T -(as described in this chapter, to configure its behavior in detail.) 108 699 T -0 F -(10.1.2) 72 674 T -(The A) 108 674 T -(utoReset Contr) 140.98 674 T -(ol) 227.4 674 T -2 F -(You can configure the boolean controls to automatically be enabled or disabled when a) 108 654 T --0.18 (program exits. This capability is controlled via two masks maintained in the X server on a) 108 641 P -(per-client basis. There is no client-side Xkb data structure corresponding to these masks.) 108 628 T -(Whenever the client exits for any reason, any boolean controls specified in the) 108 615 T -1 F -(auto-r) 487.25 615 T -(eset) 516.8 615 T -(mask) 108 602 T -2 F -( are set to the corresponding value from the) 132.66 602 T -1 F -(auto-r) 344.28 602 T -(eset values) 373.84 602 T -2 F -( mask. This makes it) 426.16 602 T --0.3 (possible for clients to \322clean up after themselves\323 automatically, even if abnormally termi-) 108 589 P -(nated. The bits used in the masks correspond to the) 108 576 T -5 F --0.6 (EnabledControls) 356.3 576 S -2 F -( control bits.) 455.31 576 T -(For example, a client that replaces the keyboard bell with some other audible cue might) 108 555 T -(want to turn off the) 108 542 T -5 F --0.6 (AudibleBell) 203.65 542 S -2 F -( control to prevent the server from also generating a) 276.25 542 T --0.43 (sound and avoid cacophony. If the client were to exit without resetting the) 108 529 P -5 F --0.94 -0.6 (AudibleBell) 461.74 529 B -2 F --0.01 (control, the user would be left without any feedback at all. Setting) 108 516 P -5 F --0.03 -0.6 (AudibleBell) 427.77 516 B -2 F --0.01 ( in both) 500.37 516 P -(the auto-reset mask and auto-reset values guarantees that the audible bell will be turned) 108 503 T -(back on when the client exits.) 108 490 T -(To get the current values of the auto-reset controls, use) 108 469 T -1 F -(XkbGetA) 374.94 469 T -(utoResetContr) 418.02 469 T -(ols) 486.82 469 T -2 F -(.) 500.82 469 T -2 11 Q -(Bool) 108 448.67 T -3 F -(XkbGetA) 132.15 448.67 T -(utoResetContr) 176.82 448.67 T -(ols) 245.65 448.67 T -2 F -(\050) 258.49 448.67 T -1 F -(dpy) 262.15 448.67 T -2 F -(,) 277.32 448.67 T -1 F -(auto_ctrls) 282.82 448.67 T -2 F -(,) 327.44 448.67 T -1 F -(auto_values) 332.94 448.67 T -2 F -(\051) 386.1 448.67 T -(Display *) 126 435.67 T -1 F -(dpy) 234 435.67 T -2 F -(;) 249.88 435.67 T -(/* connection to X serv) 306 435.67 T -(er */) 408.49 435.67 T -(unsigned int *) 126 422.67 T -1 F -(auto_ctrls) 234 422.67 T -2 F -(;) 278.62 422.67 T -(/* speci\336es which bits in) 306 422.67 T -1 F -(auto_values) 417.53 422.67 T -2 F -( are rele) 470.69 422.67 T -(v) 505.84 422.67 T -(ant */) 511.06 422.67 T -(unsigned int *) 126 409.67 T -1 F -(auto_values) 234 409.67 T -2 F -(;) 287.16 409.67 T --0.06 (/* 1 bit => corresponding control has auto-reset on */) 306 409.67 P -1 12 Q -(XkbGetA) 108 390 T -(utoResetContr) 151.08 390 T -(ols) 219.88 390 T -2 F -( backfills) 233.88 390 T -1 F -(auto_ctrls) 281.21 390 T -2 F -( and) 329.88 390 T -1 F -(auto_values) 353.21 390 T -2 F -( with the) 411.2 390 T -5 F --0.6 (AutoReset) 456.2 390 S -2 F -( con-) 515.6 390 T --0.15 (trol attributes for this particular client. It returns) 108 377 P -5 F --0.34 -0.6 (True) 339.73 377 B -2 F --0.15 ( if successful, and) 366.13 377 P -5 F --0.34 -0.6 (False) 454.5 377 B -2 F --0.15 ( otherwise.) 487.5 377 P -(To change the current values of the) 108 356 T -5 F --0.6 (AutoReset) 280.28 356 S -2 F -( control attributes, use) 339.68 356 T -1 F -(XkbSetA) 449.34 356 T -(utoReset-) 489.76 356 T -(Contr) 108 343 T -(ols.) 135.47 343 T -2 11 Q -(Bool) 108 322.67 T -3 F -(XkbSetA) 132.15 322.67 T -(utoResetContr) 174.37 322.67 T -(ols) 243.21 322.67 T -2 F -(\050) 256.05 322.67 T -1 F -(dpy) 259.71 322.67 T -2 F -(,) 274.88 322.67 T -1 F -(c) 280.38 322.67 T -(hang) 285.1 322.67 T -(es) 306.99 322.67 T -2 F -(,) 316.15 322.67 T -1 F -( auto_ctrls) 318.9 322.67 T -2 F -(,) 366.27 322.67 T -1 F -(auto_values) 371.77 322.67 T -2 F -(\051) 424.93 322.67 T -(Display *) 126 309.67 T -1 F -(dpy) 234 309.67 T -2 F -(;) 249.88 309.67 T -(/* connection to X serv) 306 309.67 T -(er */) 408.49 309.67 T -(unsigned int) 126 296.67 T -1 F -(c) 234 296.67 T -(hang) 238.72 296.67 T -(es) 260.61 296.67 T -2 F -(;) 269.77 296.67 T -(/* controls for which to change auto-reset v) 306 296.67 T -(alues */) 497.27 296.67 T -(unsigned int *) 126 283.67 T -1 F -(auto_ctrls) 234 283.67 T -2 F -(;) 278.62 283.67 T -(/* controls from changes that should auto reset */) 306 283.67 T -(unsigned int *) 126 270.67 T -1 F -(auto_values) 234 270.67 T -2 F -(;) 287.16 270.67 T -(/* 1 bit => auto-reset on */) 306 270.67 T -1 12 Q -(XkbSetA) 108 251 T -(utoResetContr) 148.42 251 T -(ols) 217.21 251 T -2 F -( changes the auto-reset status and associated auto-reset values) 231.22 251 T -(for the controls selected by) 108 238 T -1 F -(c) 240.97 238 T -(hang) 246.12 238 T -(es) 270 238 T -2 F -(. For any control selected by) 280 238 T -1 F -(c) 419.64 238 T -(hang) 424.79 238 T -(es) 448.67 238 T -2 F -(, if the corre-) 458.66 238 T -(sponding bit is set in) 108 225 T -1 F -(auto_ctrls) 210.35 225 T -2 F -(, the control is configured to auto-reset when the client) 259.02 225 T --0.33 (exits. If the corresponding bit in) 108 212 P -1 F --0.33 (auto_values) 263 212 P -2 F --0.33 ( is on, the control is turned on when the client) 320.99 212 P -(exits; if zero, the control is turned off when the client exits. For any control selected by) 108 199 T -1 F -(c) 108 186 T -(hang) 113.15 186 T -(es) 137.03 186 T -2 F -(, if the corresponding bit is not set in) 147.02 186 T -1 F -(auto_ctrls) 326.35 186 T -2 F -(, the control is configured to not) 375.02 186 T -(reset when the client exits. For example:) 108 173 T -(To leave the auto-reset controls for) 108 152 T -5 F --0.6 (StickyKeys) 279.29 152 S -2 F -( the way they are:) 345.29 152 T -2 11 Q -(ok = XkbSetAutoResetControls\050dp) 144 131.67 T -(y) 298.59 131.67 T -(, 0, 0, 0\051;) 303.38 131.67 T -2 12 Q -(To change the auto-reset controls so that) 108 112 T -5 F --0.6 (StickyKeys) 305.63 112 S -2 F -( are unaffected when the client) 371.63 112 T -(exits:) 108 99 T -2 11 Q -(ok = XkbSetAutoResetControls\050dp) 144 78.67 T -(y) 298.59 78.67 T -(, XkbStick) 303.38 78.67 T -(yK) 350.27 78.67 T -(e) 363.44 78.67 T -(ysMask, 0, 0\051;) 368.16 78.67 T -FMENDPAGE -%%EndPage: "55" 67 -%%Page: "56" 68 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(56) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(10 K) 437.17 744.87 T -(e) 464.09 744.87 T -(yboard Controls) 468.81 744.87 T -2 12 Q -(To change the auto-reset controls so that) 108 712 T -5 F --0.6 (StickyKeys) 305.63 712 S -2 F -( are turned off when the client) 371.63 712 T -(exits:) 108 699 T -2 11 Q -(ok = XkbSetAutoResetControls\050dp) 144 678.67 T -(y) 298.59 678.67 T -(, XkbStick) 303.38 678.67 T -(yK) 350.27 678.67 T -(e) 363.44 678.67 T -(ysMask, XkbStick) 368.16 678.67 T -(yK) 449.27 678.67 T -(e) 462.44 678.67 T -(ysMask, 0\051;) 467.16 678.67 T -2 12 Q --0.23 (To change the auto-reset controls so that) 108 659 P -5 F --0.51 -0.6 (StickyKeys) 303.99 659 B -2 F --0.23 ( are turned on when the client exits:) 370 659 P -2 11 Q -(ok = XkbSetAutoResetControls\050dp) 144 638.67 T -(y) 298.59 638.67 T -(, XkbStick) 303.38 638.67 T -(yK) 350.27 638.67 T -(e) 363.44 638.67 T -(ysMask, XkbStick) 368.16 638.67 T -(yK) 449.27 638.67 T -(e) 462.44 638.67 T -(ysMask,) 467.16 638.67 T -(XkbStick) 144 625.67 T -(yK) 185.39 625.67 T -(e) 198.56 625.67 T -(ysMask\051;) 203.28 625.67 T -1 12 Q -(XkbSetA) 108 606 T -(utoResetContr) 148.42 606 T -(ols) 217.21 606 T -2 F -( backfills) 231.22 606 T -1 F -(auto_ctrls) 278.54 606 T -2 F -( and) 327.22 606 T -1 F -(auto_values) 350.54 606 T -2 F -( with the auto-reset con-) 408.54 606 T -(trols for this particular client. Note that all of the bits are valid in the returned values, not) 108 593 T -(just the ones selected in the) 108 580 T -1 F -(c) 242.65 580 T -(hang) 247.8 580 T -(es) 271.68 580 T -2 F -( mask.) 281.68 580 T -0 F -(10.2) 72 555 T -(Contr) 108 555 T -(ol f) 139.75 555 T -(or Bell Beha) 157.51 555 T -(vior) 227.35 555 T -2 F -(The X server\325s generation of sounds is controlled by the) 108 535 T -5 F --0.6 (AudibleBell) 380.62 535 S -2 F -( control. Configu-) 453.22 535 T -(ration of different bell sounds is discussed in Chapter 9.) 108 522 T -0 F -(10.2.1) 72 497 T -(The A) 108 497 T -(udib) 140.98 497 T -(leBell Contr) 166.19 497 T -(ol) 233.29 497 T -2 F -(The) 108 477 T -5 F --0.6 (AudibleBell) 129.66 477 S -2 F -( control is a boolean control that has no attributes. As such, you may) 202.26 477 T -(enable and disable it using either the) 108 464 T -5 F --0.6 (EnabledControls) 286.31 464 S -2 F -( control or the) 385.31 464 T -5 F --0.6 (AutoReset) 455.97 464 S -2 F -( con-) 515.37 464 T -(trol discussed in section 10.1.1. When enabled, protocol requests to generate a sound) 108 451 T -(result in the X server actually producing a real sound; when disabled, requests to the) 108 438 T -(server to generate a sound are ignored unless the sound is forced. See section 9.2.) 108 425 T -0 F -(10.3) 72 400 T -(Contr) 108 400 T -(ols f) 139.75 400 T -(or Repeat K) 164.18 400 T -(e) 231.35 400 T -(y Beha) 237.84 400 T -(vior) 277.01 400 T -2 F -(The repeating behavior of keyboard keys is governed by three controls, the) 108 380 T -5 F --0.6 (PerKeyRe-) 470.92 380 S --0.6 (peat) 108 367 S -2 F -( control, which is always active, and the) 134.4 367 T -5 F --0.6 (RepeatKeys) 329.7 367 S -2 F -( and) 395.7 367 T -5 F --0.6 (DetectableAutore-) 419.03 367 S --0.6 (peat) 108 354 S -2 F -( controls, which are boolean controls that may be enabled and disabled.) 134.4 354 T -5 F --0.6 (PerKeyRepeat) 108 341 S -2 F -( determines which keys are allowed to repeat.) 187.2 341 T -5 F --0.6 (RepeatKeys) 409.48 341 S -2 F -( governs the) 475.48 341 T -(behavior of an individual key when it is repeating.) 108 328 T -5 F --0.6 (DetectableAutorepeat) 352.63 328 S -2 F -( allows a) 484.64 328 T -(client to detect when a key is repeating as a result of being held down.) 108 315 T -0 F -(10.3.1) 72 290 T -(The P) 108 290 T -(erK) 140.32 290 T -(e) 160.14 290 T -(yRepeat Contr) 166.63 290 T -(ol) 248.4 290 T -2 F --0.09 (The) 108 270 P -5 F --0.19 -0.6 (PerKeyRepeat) 129.57 270 B -2 F --0.09 ( control is a bitmask long enough to contain a bit for each key on the) 208.77 270 P -(device; it determines which individual keys are allowed to repeat. The Xkb) 108 257 T -5 F --0.6 (PerKeyRe-) 471.6 257 S --0.6 (peat) 108 244 S -2 F -( control provides no functionality different from that available via the core X proto-) 134.4 244 T -(col. There are no convenience functions in Xkb for manipulating this control. The) 108 231 T -5 F --0.6 (PerKeyRepeat) 108 218 S -2 F -( control settings are carried in the) 187.2 218 T -1 F -(per_key_repeat) 350.83 218 T -2 F -( field of an) 425.47 218 T -5 F --0.6 (XkbCon-) 480.79 218 S --0.6 (trolsRec) 108 205 S -2 F -( structure, discussed in section 10.8.) 160.8 205 T -0 F -(10.3.2) 72 180 T -(The RepeatK) 108 180 T -(e) 181.16 180 T -(ys Contr) 187.66 180 T -(ol) 236.09 180 T -2 F -(The core protocol allows only control over whether or not the entire keyboard or individ-) 108 160 T -(ual keys should auto-repeat when held down.) 108 147 T -5 F --0.6 (RepeatKeys) 327.96 147 S -2 F -( is a boolean control that) 393.96 147 T --0.45 (extends this capability by adding control over the delay until a key begins to repeat and the) 108 134 P -(rate at which it repeats.) 108 121 T -5 F --0.6 (RepeatKeys) 222.64 121 S -2 F -( is coupled with the core auto-repeat control: when) 288.64 121 T -5 F --0.6 (RepeatKeys) 108 108 S -2 F -( is enabled or disabled, the core auto-repeat is enabled or disabled and vice) 174 108 T -(versa.) 108 95 T -FMENDPAGE -%%EndPage: "56" 68 -%%Page: "57" 69 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(57) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(10 K) 437.17 744.87 T -(e) 464.09 744.87 T -(yboard Controls) 468.81 744.87 T -2 12 Q -(Auto-repeating keys are controlled by two attributes. The first,) 108 712 T -1 F -(timeout) 411.61 712 T -2 F -(, is the delay after) 447.61 712 T -(the initial press of an auto-repeating key and the first generated repeat event. The second,) 108 699 T -1 F -(interval) 108 686 T -2 F -(, is the delay between all subsequent generated repeat events. As with all boolean) 145.33 686 T -(controls, configuring the attributes that determine how the control operates does not auto-) 108 673 T -(matically enable the control as a whole; see section 10.1.) 108 660 T -(To get the current attributes of the) 108 639 T -5 F --0.6 (RepeatKeys) 274.97 639 S -2 F -( control for a keyboard device, use) 340.97 639 T -1 F -(Xkb-) 510.25 639 T -(GetAutoRepeatRate) 108 626 T -2 F -(.) 203.32 626 T -2 11 Q -(Bool) 108 605.67 T -3 F -(XkbGetA) 132.15 605.67 T -(utoRepeatRate) 176.82 605.67 T -2 F -(\050) 247.07 605.67 T -1 F -(display) 250.74 605.67 T -(, de) 281.91 605.67 T -(vice_spec, timeout_rtrn, interval_rtrn) 297.63 605.67 T -2 F -(\051) 463.84 605.67 T -(Display *) 126 592.67 T -1 F -(display) 234 592.67 T -2 F -(;) 265.78 592.67 T -(/* connection to X serv) 306 592.67 T -(er */) 408.49 592.67 T -(unsigned int) 126 579.67 T -1 F -(de) 234 579.67 T -(vice_spec) 244.22 579.67 T -2 F -(;) 286.98 579.67 T -(/* desired de) 306 579.67 T -(vice ID, or) 361.93 579.67 T -5 F --0.55 (XkbUseCoreKbd) 412.03 579.67 S -2 F -( */) 490.68 579.67 T -(unsigned int) 126 566.67 T -1 F -(*) 182.84 566.67 T -(timeout_rtrn) 234 566.67 T -2 F -(;) 289.62 566.67 T -(/* back\336lled with initial repeat delay) 306 566.67 T -(, ms */) 466.91 566.67 T -(unsigned int) 126 553.67 T -1 F -(*) 182.84 553.67 T -(interval_rtrn) 234 553.67 T -2 F -(;) 290.84 553.67 T -(/* back\336lled with subsequent repeat delay) 306 553.67 T -(, ms */) 490.12 553.67 T -1 12 Q --0.34 (XkbGetA) 108 534 P --0.34 (utoRepeatRate) 151.08 534 P -2 F --0.34 ( queries the server for the current values of the) 221.74 534 P -5 F --0.75 -0.6 (RepeatControls) 444.94 534 B -2 F --0.28 (control attributes, backfills) 108 521 P -1 F --0.28 (timeout_rtrn) 239.15 521 P -2 F --0.28 ( and) 299.82 521 P -1 F --0.28 (interval_rtrn) 322.58 521 P -2 F --0.28 ( with them, and returns) 384.59 521 P -5 F --0.62 -0.6 (True) 497.17 521 B -2 F --0.28 (. If) 523.57 521 P -(a compatible version of the Xkb extension is not available in the server) 108 508 T -1 F -(XkbGetA) 452.28 508 T -(utoRepe-) 495.36 508 T -(atRate) 108 495 T -2 F -( returns) 139.33 495 T -5 F --0.6 (False) 178.66 495 S -2 F -(.) 211.66 495 T -(To set the attributes of the RepeatKeys control for a keyboard device, use) 108 474 T -1 F -(XkbSetAutoRe-) 463.92 474 T -(peatRate) 108 461 T -2 F -(.) 150.66 461 T -2 11 Q -(Bool) 108 440.67 T -3 F -(XkbSetA) 132.15 440.67 T -(utoRepeatRate) 174.37 440.67 T -2 F -(\050) 244.63 440.67 T -1 F -(display) 248.29 440.67 T -(, de) 279.47 440.67 T -(vice_spec, timeout, interval) 295.19 440.67 T -2 F -(\051) 416.17 440.67 T -(Display *) 126 427.67 T -1 F -(display) 234 427.67 T -2 F -(;) 265.78 427.67 T -(/* connection to X serv) 306 427.67 T -(er */) 408.49 427.67 T -(unsigned int) 126 414.67 T -1 F -(de) 234 414.67 T -(vice_spec) 244.22 414.67 T -2 F -(;) 286.98 414.67 T -(/* de) 306 414.67 T -(vice to con\336gure, or) 327.42 414.67 T -5 F --0.55 (XkbUseCoreKbd) 418.76 414.67 S -2 F -( */) 497.41 414.67 T -(unsigned int) 126 401.67 T -1 F -(timeout) 234 401.67 T -2 F -(;) 267 401.67 T -(/* initial delay) 306 401.67 T -(, ms */) 368.84 401.67 T -(unsigned int) 126 388.67 T -1 F -(interval) 234 388.67 T -2 F -(;) 268.22 388.67 T -(/* delay between repeats, ms */) 306 388.67 T -1 12 Q --0.08 (XkbSetA) 108 369 P --0.08 (utoRepeatRate) 148.42 369 P -2 F --0.08 ( sends a request to the X server to configure the) 219.07 369 P -5 F --0.19 -0.6 (AutoRepeat) 449.76 369 B -2 F --0.08 ( con-) 515.76 369 P -(trol attributes to the values specified in) 108 356 T -1 F -(timeout) 297.65 356 T -2 F -( and) 333.65 356 T -1 F -(interval) 356.98 356 T -2 F -(.) 394.31 356 T -1 F -(XkbSetA) 108 335 T -(utoRepeatRate) 148.42 335 T -2 F -( does not wait for a reply; it normally returns) 219.07 335 T -5 F --0.6 (True) 437.71 335 S -2 F -(. Specifying a) 464.11 335 T -(zero value for either) 108 322 T -1 F -(timeout) 207.96 322 T -2 F -( or) 243.96 322 T -1 F -(interval) 259.96 322 T -2 F -( causes the server to generate a) 297.29 322 T -5 F --0.6 (BadValue) 448.9 322 S -2 F -( proto-) 501.7 322 T -(col error. If a compatible version of the Xkb extension is not available in the server,) 108 309 T -1 F -(Xkb-) 513.25 309 T -(SetA) 108 296 T -(utoRepeatRate) 129.76 296 T -2 F -( returns) 200.41 296 T -5 F --0.6 (False) 239.74 296 S -2 F -(.) 272.74 296 T -0 F -(10.3.3) 72 271 T -(The Detectab) 108 271 T -(leA) 183.23 271 T -(utorepeat Contr) 201.54 271 T -(ol) 291.3 271 T -2 F -(Auto-repeat is the generation of multiple key events by a keyboard when the user presses) 108 251 T -(a key and holds it down. Keyboard hardware and device-dependent X server software) 108 238 T --0.46 (often implement auto-repeat by generating multiple) 108 225 P -5 F --1.02 -0.6 (KeyPress) 355.86 225 B -2 F --0.46 ( events with no intervening) 408.66 225 P -5 F --0.6 (KeyRelease) 108 212 S -2 F -( event. The standard behavior of the X server is to generate a) 174 212 T -5 F --0.6 (KeyRelease) 469.25 212 S -2 F -(event for every) 108 199 T -5 F --0.6 (KeyPress) 183.64 199 S -2 F -( event. If the keyboard hardware and device-dependent soft-) 236.44 199 T --0.16 (ware of the X server implement auto-repeat by generating multiple) 108 186 P -5 F --0.35 -0.6 (KeyPress) 430.35 186 B -2 F --0.16 ( events, the) 483.15 186 P --0.21 (device-independent part of the X server by default synthetically generates a) 108 173 P -5 F --0.47 -0.6 (KeyRelease) 471.21 173 B -2 F -(event after each) 108 160 T -5 F --0.6 (KeyPress) 186.96 160 S -2 F -( event. This provides predictable behavior for X clients, but) 239.76 160 T -(does not allow those clients to detect the fact that a key is auto-repeating.) 108 147 T -(Xkb allows clients to request) 108 126 T -1 F -(detectable auto-r) 250.32 126 T -(epeat) 332.2 126 T -2 F -(. If a client requests and the server) 358.19 126 T -(supports) 108 113 T -5 F --0.6 (DetectableAutorepeat) 151.67 113 S -2 F -(, Xkb generates) 283.67 113 T -5 F --0.6 (KeyRelease) 361.65 113 S -2 F -( events only when the) 427.65 113 T -(key is physically released. If) 108 100 T -5 F --0.6 (DetectableAutorepeat) 247.97 100 S -2 F -( is not supported or has not been) 379.97 100 T -(requested, the server synthesizes a) 108 87 T -5 F --0.6 (KeyRelease) 275.95 87 S -2 F -( event for each repeating) 341.95 87 T -5 F --0.6 (KeyPress) 463.57 87 S -2 F -(event it generates.) 108 74 T -FMENDPAGE -%%EndPage: "57" 69 -%%Page: "58" 70 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(58) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(10 K) 437.17 744.87 T -(e) 464.09 744.87 T -(yboard Controls) 468.81 744.87 T -5 12 Q --0.6 (DetectableAutorepeat) 108 712 S -2 F -(, unlike the other controls in this chapter, is not contained in) 240 712 T -(the) 108 699 T -5 F --0.6 (XkbControlsRec) 125.66 699 S -2 F -( structure, nor can it be enabled or disabled via the) 218.07 699 T -5 F --0.6 (EnabledCon-) 463.35 699 S --0.6 (trols) 108 686 S -2 F -( control. Instead, query and set) 141 686 T -5 F --0.6 (DetectableAutorepeat) 291.64 686 S -2 F -( using) 423.64 686 T -1 F -(XkbGetDetectab-) 455.64 686 T -(leA) 108 673 T -(utor) 123.76 673 T -(epeat) 143.32 673 T -2 F -( and) 169.31 673 T -1 F -(XkbSetDetectableA) 192.64 673 T -(utor) 285.04 673 T -(epeat) 304.6 673 T -2 F -(.) 330.59 673 T -5 F --1.07 -0.6 (DetectableAutorepeat) 108 652 B -2 F --0.48 ( is a condition that applies to all keyboard devices for a client\325s) 240 652 P -(connection to a given X server; it cannot be selectively set for some devices and not for) 108 639 T -(others. For this reason, none of the Xkb library functions involving) 108 626 T -5 F --0.6 (DetectableAu-) 432.97 626 S --0.6 (torepeat) 108 613 S -2 F -( involve a device specifier.) 160.8 613 T -(To determine whether or not the server supports) 108 592 T -5 F --0.6 (DetectableAutorepeat) 341.95 592 S -2 F -(, use) 473.95 592 T -1 F -(XkbGet-) 498.95 592 T -(DetectableA) 108 579 T -(utor) 167.08 579 T -(epeat) 186.64 579 T -2 F -(.) 212.63 579 T -2 11 Q -(Bool) 108 558.67 T -3 F -(XkbGetDetectableA) 132.15 558.67 T -(utor) 226.29 558.67 T -(epeat) 246.26 558.67 T -2 F -(\050) 271.31 558.67 T -1 F -(display) 274.97 558.67 T -(, supported_rtrn) 306.14 558.67 T -2 F -(\051) 378.26 558.67 T -(Display *) 126 545.67 T -1 F -(display) 180 545.67 T -2 F -(;) 211.78 545.67 T -(/* connection to X serv) 261 545.67 T -(er */) 363.49 545.67 T -(Bool *) 126 532.67 T -1 F -(supported_rtrn) 180 532.67 T -2 F -(;) 246.62 532.67 T -(/* back\336lled) 261 532.67 T -5 12 Q --0.6 (True) 318.44 532.67 S -2 11 Q -( if) 344.84 532.67 T -5 F --0.33 (DetectableAutorepeat) 357.06 532.67 S -2 F -( supported */) 482.46 532.67 T -1 F -(XkbGetDetectableA) 108 513 T -(utor) 195.14 513 T -(epeat) 213.07 513 T -2 12 Q -( queries the server for the current state of) 236.9 513 T -5 F --0.6 (DetectableAu-) 437.17 513 S --1.02 -0.6 (torepeat) 108 500 B -2 F --0.47 ( and waits for a reply. If) 160.8 500 P -1 F --0.47 (supported_rtrn) 276.17 500 P -2 F --0.47 ( is not) 348.85 500 P -5 F --1.02 -0.6 (NULL) 379.79 500 B -2 F --0.47 (, it backfills) 406.19 500 P -1 F --0.47 (supported_rtrn) 464.79 500 P -2 F -(with) 108 487 T -5 F --0.6 (True) 132.34 487 S -2 F -( if the server supports) 158.74 487 T -5 F --0.6 (DetectableAutorepeat) 265.72 487 S -2 F -(, and) 397.72 487 T -5 F --0.6 (False) 424.05 487 S -2 F -( otherwise.) 457.05 487 T -1 11 Q -(Xkb-) 512.7 487 T -(GetDetectableA) 108 474 T -(utor) 178.04 474 T -(epeat) 195.97 474 T -2 12 Q -( returns the current state of) 219.79 474 T -5 F --0.6 (DetectableAutorepeat) 351.76 474 S -2 F -( for the) 483.76 474 T -(requesting client:) 108 461 T -5 F --0.6 (True) 193.99 461 S -2 F -( if) 220.39 461 T -5 F --0.6 (DetectableAutorepeat) 233.72 461 S -2 F -( is set, and) 365.73 461 T -5 F --0.6 (False) 419.39 461 S -2 F -( otherwise.) 452.39 461 T -(To set) 108 440 T -5 F --0.6 (DetectableAutorepeat) 140.66 440 S -2 F -(, use) 272.67 440 T -1 F -(XkbSetDetectableA) 297.66 440 T -(utor) 390.06 440 T -(epeat) 409.62 440 T -2 F -(. This request affects) 435.61 440 T --0.09 (all keyboard activity for the requesting client only; other clients still see the expected non-) 108 427 P -(detectable auto-repeat behavior, unless they have requested otherwise.) 108 414 T -2 11 Q -(Bool) 108 393.67 T -3 F -(XkbSetDetectableA) 132.15 393.67 T -(utor) 223.85 393.67 T -(epeat) 243.82 393.67 T -2 F -(\050) 268.86 393.67 T -1 F -(display) 272.53 393.67 T -(, detectable) 303.7 393.67 T -(, supported_rtrn) 354.3 393.67 T -2 F -(\051) 426.42 393.67 T -(Display *) 126 380.67 T -1 F -(display) 180 380.67 T -2 F -(;) 211.78 380.67 T -(/* connection to X serv) 261 380.67 T -(er */) 363.49 380.67 T -(Bool) 126 367.67 T -1 F -(detectable) 180 367.67 T -2 F -(;) 225.21 367.67 T -(/*) 261 367.67 T -5 12 Q --0.6 (True) 272.31 367.67 S -2 11 Q -( => set) 298.71 367.67 T -5 F --0.33 (DetectableAutorepeat) 331.59 367.67 S -2 F -( */) 456.99 367.67 T -(Bool *) 126 354.67 T -1 F -(supported_rtrn) 180 354.67 T -2 F -(;) 246.62 354.67 T -(/* back\336lled) 261 354.67 T -5 12 Q --0.6 (True) 318.44 354.67 S -2 11 Q -( if) 344.84 354.67 T -5 F --0.33 (DetectableAutorepeat) 357.06 354.67 S -2 F -( supported */) 482.46 354.67 T -1 12 Q -(XkbSetDetectableA) 108 335 T -(utor) 200.4 335 T -(epeat) 219.96 335 T -2 F -( sends a request to the server to set) 245.95 335 T -5 F --0.6 (DetectableAutore-) 415.58 335 S --0.34 -0.6 (peat) 108 322 B -2 F --0.15 ( on for the current client if) 134.4 322 P -1 F --0.15 (detectable) 262.97 322 P -2 F --0.15 ( is) 312.29 322 P -5 F --0.34 -0.6 (True) 325.99 322 B -2 F --0.15 (, and off it) 352.39 322 P -1 F --0.15 (detectable) 404.77 322 P -2 F --0.15 ( is) 454.09 322 P -5 F --0.34 -0.6 (False) 467.79 322 B -2 F --0.15 (; it then) 500.79 322 P -(waits for a reply. If) 108 309 T -1 F -(supported_rtrn) 203.3 309 T -2 F -( is not) 275.98 309 T -5 F --0.6 (NULL) 308.32 309 S -2 F -(,) 334.72 309 T -1 F -(XkbSetDetectableA) 340.72 309 T -(utor) 433.12 309 T -(epeat) 452.68 309 T -2 F -( backfills) 478.67 309 T -1 F -(supported_rtrn) 108 296 T -2 F -( with) 180.67 296 T -5 F --0.6 (True) 208.01 296 S -2 F -( if the server supports) 234.41 296 T -5 F --0.6 (DetectableAutorepeat) 341.39 296 S -2 F -(, and) 473.39 296 T -5 F --0.6 (False) 499.72 296 S -2 F -(if it does not.) 108 283 T -1 F -(XkbSetDetectableA) 174.34 283 T -(utor) 266.74 283 T -(epeat) 286.3 283 T -2 F -( returns the current state of) 312.29 283 T -5 F --0.6 (DetectableAu-) 444.25 283 S --1.07 -0.6 (torepeat) 108 270 B -2 F --0.49 ( for the requesting client:) 160.8 270 P -5 F --1.07 -0.6 (True) 282.01 270 B -2 F --0.49 ( if) 308.41 270 P -5 F --1.07 -0.6 (DetectableAutorepeat) 320.77 270 B -2 F --0.49 ( is set, and) 452.77 270 P -5 F --1.07 -0.6 (False) 504.49 270 B -2 F -(otherwise.) 108 257 T -0 F -(10.4) 72 232 T -(Contr) 108 232 T -(ols f) 139.75 232 T -(or K) 164.18 232 T -(e) 188 232 T -(yboar) 194.5 232 T -(d Overla) 226.93 232 T -(ys \050Overla) 274.72 232 T -(y1 and Overla) 332.51 232 T -(y2 Contr) 410.98 232 T -(ols\051) 459.41 232 T -2 F --0.37 (A keyboard overlay allows some subset of the keyboard to report alternate keycodes when) 108 212 P --0.37 (the overlay is enabled. For example, a keyboard overlay can be used to simulate a numeric) 108 199 P -(or editing keypad on a keyboard that does not actually have one by reusing some portion) 108 186 T --0.04 (of the keyboard as an overlay. This technique is very common on portable computers and) 108 173 P -(embedded systems with small keyboards.) 108 160 T -(Xkb includes direct support for two keyboard overlays, using the) 108 139 T -5 F --0.6 (Overlay1) 422.95 139 S -2 F -( and) 475.75 139 T -5 F --0.6 (Overlay2) 108 126 S -2 F -( controls. When) 160.8 126 T -5 F --0.6 (Overlay1) 240.12 126 S -2 F -( is enabled, all of the keys that are members of the) 292.92 126 T -(first keyboard overlay generate an alternate keycode. When) 108 113 T -5 F --0.6 (Overlay2) 396.9 113 S -2 F -( is enabled, all of) 449.7 113 T -(the keys that are members of the second keyboard overlay generate an alternate keycode.) 108 100 T -(The two overlays are mutually exclusive; any particular key may be in at most one over-) 108 87 T --0.32 (lay.) 108 74 P -5 F --0.71 -0.6 (Overlay1) 128.34 74 B -2 F --0.32 ( and) 181.14 74 P -5 F --0.71 -0.6 (Overlay2) 203.82 74 B -2 F --0.32 ( are boolean controls. As such, you may enable and disable) 256.62 74 P -FMENDPAGE -%%EndPage: "58" 70 -%%Page: "59" 71 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(59) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(10 K) 437.17 744.87 T -(e) 464.09 744.87 T -(yboard Controls) 468.81 744.87 T -2 12 Q --0.2 (them using either the) 108 712 P -5 F --0.44 -0.6 (EnabledControls) 211.2 712 B -2 F --0.2 ( control or the) 310.2 712 P -5 F --0.44 -0.6 (AutoReset) 380.06 712 B -2 F --0.2 ( control discussed in) 439.46 712 P -(section 10.1.1.) 108 699 T --0.37 (To specify the overlay to which a key belongs and the alternate keycode it should generate) 108 678 P --0.48 (when that overlay is enabled, assign it either the) 108 665 P -5 F --1.06 -0.6 (XkbKB_Overlay1) 337.64 665 B -2 F --0.48 ( or) 430.04 665 P -5 F --1.06 -0.6 (XkbKB_Overlay2) 445.08 665 B -2 F -(key behaviors, as described in section 16.2.) 108 652 T -0 F -(10.5) 72 627 T -(Contr) 108 627 T -(ols f) 139.75 627 T -(or Using the Mouse fr) 164.18 627 T -(om the K) 287.29 627 T -(e) 338.45 627 T -(yboar) 344.94 627 T -(d) 377.38 627 T -2 F -(Using Xkb, it is possible to configure the keyboard to allow simulation of the X pointer) 108 607 T --0.26 (device. This simulation includes both movement of the pointer itself and press and release) 108 594 P -(events associated with the buttons on the pointer. Two controls affect this behavior: the) 108 581 T -5 F --0.6 (MouseKeys) 108 568 S -2 F -( control determines whether or not simulation of the pointer device is active,) 167.4 568 T -(as well as configuring the default button; the) 108 555 T -5 F --0.6 (MouseKeysAccel) 325.31 555 S -2 F -( control determines the) 417.71 555 T -(movement characteristics of the pointer when simulated via the keyboard. Both of them) 108 542 T -(are boolean controls; as such, you may enable and disable them using either the) 108 529 T -5 F --0.6 (EnabledControls) 108 516 S -2 F -( control or the) 207 516 T -5 F --0.6 (AutoReset) 277.66 516 S -2 F -( control discussed in section 10.1.1. The) 337.06 516 T --0.04 (individual keys that simulate different aspects of the pointer device are determined by the) 108 503 P -(keyboard mapping, discussed in Chapter 16.) 108 490 T -0 F -(10.5.1) 72 465 T -(The MouseK) 108 465 T -(e) 179.16 465 T -(ys Contr) 185.65 465 T -(ol) 234.08 465 T -2 F -(The) 108 445 T -5 F --0.6 (MouseKeys) 129.66 445 S -2 F -( control allows a user to control all the mouse functions from the key-) 189.06 445 T -(board. When) 108 432 T -5 F --0.6 (MouseKeys) 172.98 432 S -2 F -( are enabled, all keys with) 232.38 432 T -5 F --0.6 (MouseKeys) 360.68 432 S -2 F -( actions bound to them) 420.09 432 T -(generate core pointer events instead of normal) 108 419 T -5 F --0.6 (KeyPress) 332.94 419 S -2 F -( and) 385.74 419 T -5 F --0.6 (KeyRelease) 409.07 419 S -2 F -( events.) 475.07 419 T -(The) 108 398 T -5 F --0.6 (MouseKeys) 129.66 398 S -2 F -( control has a single attribute,) 189.06 398 T -1 F -(mk_dflt_btn) 334.05 398 T -2 F -( that specifies the core button) 391.38 398 T -(number to be used by mouse keys actions that do not explicitly specify a button. There is) 108 385 T -(no convenience function for getting or setting the attribute; instead use) 108 372 T -1 F -(XkbGetContr) 450.29 372 T -(ols) 513.74 372 T -2 F -(and) 108 359 T -1 F -(XkbSetContr) 128.33 359 T -(ols) 189.12 359 T -2 F -( \050see sections 10.9 and 10.10\051.) 203.12 359 T -0 F -(Note) 126 338.67 T -5 F --0.91 -0.6 (MouseKeys) 162 338.67 B -2 11 Q --0.38 ( can also be turned on and of) 221.4 338.67 P --0.38 (f by pressing the k) 345.26 338.67 P --0.38 (e) 424.91 338.67 P --0.38 (y combination necessary) 429.62 338.67 P -(to produce an) 162 326.67 T -5 12 Q --0.6 (XK_Pointer_EnableKeys) 224.62 326.67 S -2 11 Q -( k) 363.23 326.67 T -(e) 371.37 326.67 T -(ysym. The de f) 376.08 326.67 T -(acto def) 441.96 326.67 T -(ault standard) 476.98 326.67 T -(for this is) 162 314.67 T -5 12 Q --0.6 (Shift+Alt+NumLock) 206.31 314.67 S -2 11 Q -(, b) 318.51 314.67 T -(ut this may v) 329.29 314.67 T -(ary depending on the k) 386.16 314.67 T -(e) 486.86 314.67 T -(ymap.) 491.58 314.67 T -0 12 Q -(10.5.2) 72 290 T -(The MouseK) 108 290 T -(e) 179.16 290 T -(ysAccel Contr) 185.65 290 T -(ol) 266.1 290 T -2 F -(When the) 108 270 T -5 F --0.6 (MouseKeysAccel) 157.32 270 S -2 F -( control is enabled, the effect of a key-activated pointer) 249.72 270 T -(motion action changes as a key is held down. If the control is disabled, pressing a) 108 257 T -(mouse-pointer key yields one mouse event. When) 108 244 T -5 F --0.6 (MouseKeysAccel) 350.63 244 S -2 F -( is enabled, mouse) 443.03 244 T -(movement is defined by an initial distance specified in the) 108 231 T -5 F --0.6 (XkbSA_MovePtr) 390.64 231 S -2 F -( action and) 476.44 231 T -(the following fields in the) 108 218 T -5 F --0.6 (XkbControlsRec) 235 218 S -2 F -( structure \050see section 10.8\051.) 327.4 218 T -3 F -(T) 242.32 198 T -(able 10.2 MouseK) 249.22 198 T -(eysAccel Fields) 343.58 198 T -1 F -(F) 108 179 T -(ield) 114.79 179 T -(Function) 207 179 T -2 11 Q -(mk_delay) 108 165.67 T -(T) 207 165.67 T -(ime \050ms\051 between the initial k) 213.34 165.67 T -(e) 344.91 165.67 T -(y press and the \336rst repeated motion e) 349.63 165.67 T -(v) 516.46 165.67 T -(ent) 521.8 165.67 T -(mk_interv) 108 152.67 T -(al) 152.95 152.67 T -(T) 207 152.67 T -(ime \050ms\051 between repeated motion e) 213.34 152.67 T -(v) 373.44 152.67 T -(ents) 378.78 152.67 T -(mk_time_to_max) 108 139.67 T -(Number of e) 207 139.67 T -(v) 262.32 139.67 T -(ents \050count\051 before the pointer reaches maximum speed) 267.65 139.67 T -(mk_max_speed) 108 126.67 T -(The maximum speed \050in pix) 207 126.67 T -(els per e) 330.88 126.67 T -(v) 367.26 126.67 T -(ent\051 the pointer reaches) 372.59 126.67 T -(mk_curv) 108 113.67 T -(e) 146.94 113.67 T -(The ramp used to reach maximum pointer speed) 207 113.67 T -108 190 541.8 190 2 L -V -0.5 H -0 Z -N -108 174 541.8 174 2 L -V -N -FMENDPAGE -%%EndPage: "59" 71 -%%Page: "60" 72 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(60) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(10 K) 437.17 744.87 T -(e) 464.09 744.87 T -(yboard Controls) 468.81 744.87 T -2 12 Q -(There are no convenience functions to query or change the attributes of the) 108 712 T -5 F --0.6 (MouseKey-) 470.9 712 S --0.6 (sAccel) 108 699 S -2 F -( control; instead use) 147.6 699 T -1 F -(XkbGetContr) 246.93 699 T -(ols) 310.38 699 T -2 F -( and) 324.39 699 T -1 F -(XkbSetContr) 347.71 699 T -(ols) 408.51 699 T -2 F -( \050see sections 10.9 and) 422.51 699 T -(10.10\051.) 108 686 T -(The effects of the attributes of the) 108 665 T -5 F --0.6 (MouseKeysAccel) 273.62 665 S -2 F -( control depend on whether the) 366.03 665 T -5 F --0.6 (XkbSA_MovePtr) 108 652 S -2 F -( action \050see section 16.1\051 specifies relative or absolute pointer motion.) 193.8 652 T -0 11 Q -(Absolute Pointer Motion) 108 629.67 T -2 12 Q --0.22 (If an) 108 611 P -5 F --0.48 -0.6 (XkbSA_MovePtr) 132.88 611 B -2 F --0.22 ( action specifies an absolute position for one of the coordinates but) 218.68 611 P -(still allows acceleration, all repeated events contain any absolute coordinates specified in) 108 598 T -(the action. For example, if the) 108 585 T -5 F --0.6 (XkbSA_MovePtr) 255.31 585 S -2 F -( action specifies an absolute position for) 341.11 585 T -(the X direction, but a relative motion for the Y direction, the pointer accelerates in the Y) 108 572 T -(direction, but stays at the same X position.) 108 559 T -0 11 Q -(Relative Pointer Motion) 108 536.67 T -2 12 Q -(If the) 108 518 T -5 F --0.6 (XkbSA_MovePtr) 136.66 518 S -2 F -( action specifies relative motion, the initial event always moves) 222.46 518 T -(the cursor the distance specified in the action. After) 108 505 T -1 F -(mk_delay) 358.61 505 T -2 F -( milliseconds, a second) 404.59 505 T -(motion event is generated, and another occurs every) 108 492 T -1 F -(mk_interval) 360.94 492 T -2 F -( milliseconds until the) 418.26 492 T -(user releases the key.) 108 479 T -(Between the time of the second motion event and) 108 458 T -1 F -(mk_time_to_max) 348.3 458 T -2 F -( intervals, the change) 430.28 458 T -(in pointer distance per interval increases with each interval. After) 108 445 T -1 F -(mk_time_to_max) 424.92 445 T -2 F -( inter-) 506.9 445 T -(vals have elapsed, the change in pointer distance per interval remains the same and is cal-) 108 432 T -(culated by multiplying the original distance specified in the action by) 108 419 T -1 F -(mk_max_speed) 443.64 419 T -2 F -(.) 516.95 419 T --0.01 (For example, if the) 108 398 P -5 F --0.01 -0.6 (XkbSA_MovePtr) 202.29 398 B -2 F --0.01 ( action specifies a relative motion in the X direction) 288.1 398 P -(of 5,) 108 385 T -1 F -(mk_delay) 133 385 T -2 F -(=160,) 178.98 385 T -1 F -(mk_interval) 209.75 385 T -2 F -(=40,) 267.07 385 T -1 F -(mk_time_to_max) 291.84 385 T -2 F -(=30, and) 373.82 385 T -1 F -(mk_max_speed) 418.92 385 T -2 F -(=30, the) 492.23 385 T -(following happens when the user presses the key:) 108 372 T -2 11 Q -(\245) 126 351.67 T -(The pointer immediately mo) 139.68 351.67 T -(v) 265.09 351.67 T -(es 5 pix) 270.43 351.67 T -(els in the X direction when the k) 304.48 351.67 T -(e) 447.66 351.67 T -(y is pressed.) 452.38 351.67 T -(\245) 126 339.67 T --0.4 (After 160 milliseconds \050) 139.68 339.67 P -1 F --0.4 (mk_delay) 245.72 339.67 P -2 F --0.4 (\051, and e) 287.87 339.67 P --0.4 (v) 319.48 339.67 P --0.4 (ery 40 milliseconds thereafter \050) 324.82 339.67 P -1 F --0.4 (mk_interval) 460.69 339.67 P -2 F --0.4 (\051,) 513.24 339.67 P -(the pointer mo) 139.68 327.67 T -(v) 203.68 327.67 T -(es in the X direction.) 209.01 327.67 T -(\245) 126 315.67 T -(The distance in the X direction increases with each interv) 139.68 315.67 T -(al until 30 interv) 392.04 315.67 T -(als) 464.8 315.67 T -(\050) 139.68 303.67 T -1 F -(mk_time_to_max) 143.34 303.67 T -2 F -(\051 ha) 218.49 303.67 T -(v) 235.07 303.67 T -(e elapsed.) 240.41 303.67 T -(\245) 126 291.67 T -(After 30 interv) 139.68 291.67 T -(als, the pointer stops accelerating, and mo) 204.78 291.67 T -(v) 389.14 291.67 T -(es 150 pix) 394.47 291.67 T -(els) 439.53 291.67 T -(\050) 139.68 279.67 T -1 F -(mk_max_speed) 143.34 279.67 T -2 F -( * the original distance\051 e) 210.54 279.67 T -(v) 321.77 279.67 T -(ery interv) 327.11 279.67 T -(al thereafter) 369.29 279.67 T -(, until the k) 421.69 279.67 T -(e) 471.69 279.67 T -(y is) 476.41 279.67 T -(released.) 139.68 267.67 T -2 12 Q --0.21 (The increase in pointer difference for each interval is a function of) 108 249 P -1 F --0.21 ( mk_curve.) 424.56 249 P -2 F --0.21 ( Events after) 476.99 249 P --0.01 (the first but before maximum acceleration has been achieved are accelerated according to) 108 236 P -(the formula:) 108 223 T -(Where) 108 170.03 T -1 F -(action_delta) 142.98 170.03 T -2 F -( is the relative motion specified by the) 202.98 170.03 T -5 F --0.6 (XkbSA_MovePtr) 389.63 170.03 S -2 F -( action,) 475.43 170.03 T -1 F -(mk_max_speed) 108 157.03 T -2 F -(and) 184.31 157.03 T -1 F -(mk_time_to_max) 204.64 157.03 T -2 F -( are parameters to the) 286.62 157.03 T -5 F --0.6 (MouseKeysAccel) 392.92 157.03 S -2 F -( control,) 485.32 157.03 T --0.06 (and the curveFactor is computed using the) 108 144.03 P -5 F --0.13 -0.6 (MouseKeysAccel) 313.89 144.03 B -1 F --0.06 (mk_curve) 409.23 144.03 P -2 F --0.06 ( parameter as fol-) 455.88 144.03 P -(lows:) 108 131.03 T -72 63 540 720 C -126 187.03 540 219 C -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -1 9 Q -0 X -0 0 0 1 0 0 0 K -(d) 207.46 200.79 T -2 F -(step) 216.37 200.79 T -6 F -(\050) 212.74 200.79 T -(\051) 231.51 200.79 T -2 F -(action_delta) 248.57 200.79 T -(max_accel) 331.62 205.99 T -(steps_to_max) 305.81 193.71 T -1 7 Q -(c) 355.76 196.47 T -(u) 359.41 196.47 T -(r) 363.45 196.47 T -(v) 366.71 196.47 T -(e) 370.35 196.47 T -(F) 374 196.47 T -(a) 378.82 196.47 T -(c) 382.85 196.47 T -(t) 386.5 196.47 T -(o) 388.98 196.47 T -(r) 393.02 196.47 T -2 9 Q -(-) 305.81 201 T -(-) 307.31 201 T -(-) 308.81 201 T -(-) 310.31 201 T -(-) 311.81 201 T -(-) 313.3 201 T -(-) 314.8 201 T -(-) 316.3 201 T -(-) 317.8 201 T -(-) 319.3 201 T -(-) 320.8 201 T -(-) 322.3 201 T -(-) 323.79 201 T -(-) 325.29 201 T -(-) 326.79 201 T -(-) 328.29 201 T -(-) 329.79 201 T -(-) 331.29 201 T -(-) 332.79 201 T -(-) 334.28 201 T -(-) 335.78 201 T -(-) 337.28 201 T -(-) 338.78 201 T -(-) 340.28 201 T -(-) 341.78 201 T -(-) 343.27 201 T -(-) 344.77 201 T -(-) 346.27 201 T -(-) 347.77 201 T -(-) 349.27 201 T -(-) 350.77 201 T -(-) 352.27 201 T -(-) 353.76 201 T -(-) 355.26 201 T -(-) 356.76 201 T -(-) 358.26 201 T -(-) 359.76 201 T -(-) 361.26 201 T -(-) 362.76 201 T -(-) 364.25 201 T -(-) 365.75 201 T -(-) 367.25 201 T -(-) 368.75 201 T -(-) 370.25 201 T -(-) 371.75 201 T -(-) 373.24 201 T -(-) 374.74 201 T -(-) 376.24 201 T -(-) 377.74 201 T -(-) 379.24 201 T -(-) 380.74 201 T -(-) 382.24 201 T -(-) 383.73 201 T -(-) 385.23 201 T -(-) 386.73 201 T -(-) 388.23 201 T -(-) 389.73 201 T -(-) 391.23 201 T -(-) 392.73 201 T -(-) 392.91 201 T -6 F -(\350) 302 196.26 T -(\370) 396.28 196.26 T -(\346) 302 203.97 T -(\366) 396.28 203.97 T -2 F -(step) 409.15 200.79 T -2 7 Q -(curveFactor) 424.1 203.55 T -6 9 Q -(\264) 401.97 200.79 T -(\264) 294.81 200.79 T -2 F -(=) 239 200.79 T -72 63 540 720 C -0 0 612 792 C -72 63 540 720 C -126 93.05 540 127.03 C -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -2 9 Q -0 X -0 0 0 1 0 0 0 K -(curveFactor\050curve\051) 273.78 108.54 T -(1) 356.81 108.54 T -(curve) 371.06 113.54 T -(1000) 372.05 102.52 T -(-) 371.06 108.54 T -(-) 372.55 108.54 T -(-) 374.05 108.54 T -(-) 375.55 108.54 T -(-) 377.05 108.54 T -(-) 378.55 108.54 T -(-) 380.05 108.54 T -(-) 381.55 108.54 T -(-) 383.04 108.54 T -(-) 384.54 108.54 T -(-) 386.04 108.54 T -(-) 387.54 108.54 T -(-) 388.05 108.54 T -(+) 363.55 108.54 T -(=) 347.24 108.54 T -72 63 540 720 C -0 0 612 792 C -FMENDPAGE -%%EndPage: "60" 72 -%%Page: "61" 73 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(61) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(10 K) 437.17 744.87 T -(e) 464.09 744.87 T -(yboard Controls) 468.81 744.87 T -2 12 Q -(With the result that a) 108 712 T -1 F -(mk_curve) 211.66 712 T -2 F -( of zero causes the distance moved to increase linearly) 258.3 712 T -(from) 108 699 T -1 F -(action_delta) 134.33 699 T -2 F -( to) 194.33 699 T -(. A negative) 326.66 699 T -1 F -(mk_curve) 387.98 699 T -2 F -( causes an initial) 434.63 699 T -(sharp increase in acceleration that tapers off, and a positive curve yields a slower initial) 108 686 T -(increase in acceleration followed by a sharp increase as the number of pointer events gen-) 108 673 T -(erated by the action approaches) 108 660 T -1 F -(mk_time_to_max) 262.28 660 T -2 F -(. The legal values for) 344.27 660 T -1 F -(mk_curve) 448.91 660 T -2 F -( are) 495.55 660 T -(between -1000 and 1000.) 108 647 T -(A distance vs. time graph of the pointer motion is shown in Figure 10.1.) 108 626 T -3 F -(Figur) 219.15 252 T -(e 10.1 MouseK) 247.6 252 T -(eys Acceleration) 322.96 252 T -0 F -(10.6) 72 224 T -(Contr) 108 224 T -(ols f) 139.75 224 T -(or Better K) 164.18 224 T -(e) 226.01 224 T -(yboar) 232.5 224 T -(d Access b) 264.94 224 T -(y Ph) 328.06 224 T -(ysicall) 353.16 224 T -(y Impaired P) 389.68 224 T -(er) 460.68 224 T -(sons) 471.84 224 T -2 F -(The Xkb extension includes several controls specifically aimed at making keyboard use) 108 204 T -(more effective for physically impaired people. All of these controls are boolean controls) 108 191 T -(and may be individually enabled and disabled, as well as configured to tune their specific) 108 178 T -(behavior. The behavior of these controls is based on the AccessDOS package) 108 165 T -2 9.6 Q -(1) 479.24 169.8 T -2 12 Q -(.) 484.04 165 T -72 114 540 134 C -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 122 204 122 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -0 0 612 792 C -2 10 Q -0 X -0 0 0 1 0 0 0 K -(1. AccessDOS pro) 72 107.33 T -(vides access to the DOS operating system for people with ph) 148.5 107.33 T -(ysical impairments and w) 391.75 107.33 T -(as de) 494.14 107.33 T -(v) 514.16 107.33 T -(el-) 519.01 107.33 T -(oped by the T) 72 95.33 T -(race R&D Center at the Uni) 126.92 95.33 T -(v) 238.59 95.33 T -(ersity of W) 243.44 95.33 T -(isconsin. F) 288.03 95.33 T -(or more information on AccessDOS, contact the) 331.22 95.33 T -(T) 72 83.33 T -(race R&D Center) 77.76 83.33 T -(, W) 147.34 83.33 T -(aisman Center and Department of Industrial Engineering, Uni) 160.98 83.33 T -(v) 407.91 83.33 T -(ersity of W) 412.76 83.33 T -(isconsin-Madison) 457.35 83.33 T -(WI 53705-2280. Phone: 608-262-6966. e-mail: info@trace.wisc.edu.) 72 71.33 T -209.66 694.75 326.66 706.75 C -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -2 9 Q -0 X -0 0 0 1 0 0 0 K -(mk_max_speed) 212.79 699 T -(action_delta) 278.72 699 T -6 F -(\264) 271.53 699 T -(\050) 209.15 699 T -(\051) 323.35 699 T -0 0 612 792 C -72 63 540 720 C -107.72 273 504.28 622 C -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -143.72 595 143.72 388 2 L -0.5 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -404.72 388 143.72 388 2 L -N -186.72 388 186.72 379 2 L -4 H -N -194.82 388 194.82 379 2 L -0.5 H -N -202.93 388 202.93 379 2 L -N -211.03 388 211.03 379 2 L -N -219.13 388 219.13 379 2 L -N -227.24 388 227.24 379 2 L -N -235.34 388 235.34 379 2 L -N -243.45 388 243.45 379 2 L -N -251.55 388 251.55 379 2 L -N -259.65 388 259.65 379 2 L -N -267.76 388 267.76 379 2 L -N -275.86 388 275.86 379 2 L -N -283.97 388 283.97 379 2 L -N -292.07 388 292.07 379 2 L -N -300.17 388 300.17 379 2 L -N -308.28 388 308.28 379 2 L -N -316.39 388 316.39 379 2 L -4 H -N -143.59 377 161.72 361 2 L -0.5 H -N -185.84 375.75 161.72 361 2 L -N -2 12 Q -(mk_delay) 140.22 349 T -342.82 377 349.19 361 2 L -N -349.19 362.11 351.07 378.61 2 L -N -(mk_interval) 321.32 349.75 T -184.29 375.77 240.96 355.77 2 L -N -316.51 374.66 238.73 354.66 2 L -N -(mk_time_to_max) 200.84 345.2 T -143.72 424 134.72 424 2 L -N -(d) 119.72 523.82 T -(i) 119.72 511.82 T -(s) 119.72 499.82 T -(t) 119.72 487.82 T -(a) 119.72 475.82 T -(n) 119.72 463.82 T -(c) 119.72 451.82 T -(e) 119.72 439.82 T -143.72 424 143.72 388 2 L -4 H -N -(Action delta) 161.72 406 T -143.72 424 184.29 424 2 L -N -143.72 460 134.72 460 2 L -0.5 H -N -143.72 496 134.72 496 2 L -N -143.72 532 134.72 532 2 L -N -143.72 568 134.72 568 2 L -N -157.07 410.77 147.62 423 2 L -N -157.07 410.77 147.07 391.33 2 L -N -317.62 570.78 400.4 570.78 2 L -4 H -N -(\050msec\051) 140.22 337 T -326.25 388.33 326.25 379.33 2 L -0.5 H -N -334.36 388.33 334.36 379.33 2 L -N -342.46 388.33 342.46 379.33 2 L -N -350.57 388.33 350.57 379.33 2 L -N -358.67 388.33 358.67 379.33 2 L -N -366.77 388.33 366.77 379.33 2 L -N -374.88 388.33 374.88 379.33 2 L -N -382.98 388.33 382.98 379.33 2 L -N -391.09 388.33 391.09 379.33 2 L -N -399.19 388.33 399.19 379.33 2 L -N -(\050count\051) 200.84 333.2 T -(\050msec\051) 321.32 337.75 T -(mk_max_speed * Action delta) 348.48 489.61 T -335.4 493 315.96 565.78 2 L -N -335.96 493 317.62 395.22 2 L -N -187.07 425.22 315.96 570.22 2 L -4 H -N -(mk_curve=0) 355.4 312.44 T -90 180 131.11 143.89 315.4 426.89 A -(mk_curve<0) 355.4 300.44 T -(mk_curve>0) 355.4 288.44 T -8 X -270 360 128.33 144.45 187.07 569.11 A -347.07 290.22 315.4 290.22 2 L -N -349.85 315.77 313.73 315.77 2 L -0 X -N -348.73 303.55 312.07 304.11 2 L -N -72 63 540 720 C -0 0 612 792 C -FMENDPAGE -%%EndPage: "61" 73 -%%Page: "62" 74 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(62) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(10 K) 437.17 744.87 T -(e) 464.09 744.87 T -(yboard Controls) 468.81 744.87 T -0 12 Q -(10.6.1) 72 712 T -(The AccessXK) 108 712 T -(e) 191.18 712 T -(ys Contr) 197.68 712 T -(ol) 246.11 712 T -2 F -(Enabling or disabling the keyboard controls through a graphical user interface may be) 108 692 T -(impossible for people who need to use the controls. For example, a user who needs) 108 679 T -5 F --0.11 -0.6 (SlowKeys) 108 666 B -2 F --0.05 ( \050see section 10.6.6\051 may not even be able to start the graphical application, let) 160.8 666 P -(alone use it, if) 108 653 T -5 F --0.6 (SlowKeys) 178.99 653 S -2 F -( is not enabled. To allow easier access to some of the controls,) 231.79 653 T -(the) 108 640 T -5 F --0.6 (AccessXKeys) 125.66 640 S -2 F -( control provides a set of special key sequences similar to those avail-) 198.27 640 T -(able in AccessDOS.) 108 627 T -(When the) 108 606 T -5 F --0.6 (AccessXKeys) 157.32 606 S -2 F -( control is enabled, the user can turn controls on or off from the) 229.92 606 T -(keyboard by entering the following standard key sequences:) 108 593 T -2 11 Q -(\245) 126 572.67 T -(Holding do) 139.68 572.67 T -(wn a shift k) 189.21 572.67 T -(e) 240.74 572.67 T -(y by itself for eight seconds toggles the) 245.46 572.67 T -5 12 Q --0.6 (SlowKeys) 420.83 572.67 S -2 11 Q -( control.) 473.63 572.67 T -(\245) 126 560.67 T -(Pressing and releasing the left or right) 139.68 560.67 T -4 F -(Shift) 309.85 560.67 T -2 F -( k) 331.86 560.67 T -(e) 340 560.67 T -(y \336v) 344.72 560.67 T -(e times in a ro) 364.42 560.67 T -(w) 426.47 560.67 T -(, without an) 433.7 560.67 T -(y inter-) 485.78 560.67 T -(v) 139.68 548.67 T -(ening k) 145.01 548.67 T -(e) 177.6 548.67 T -(y e) 182.32 548.67 T -(v) 195.18 548.67 T -(ents and with less than 30 seconds delay between consecuti) 200.51 548.67 T -(v) 461.44 548.67 T -(e presses,) 466.78 548.67 T -(toggles the state of the) 139.68 536.67 T -5 12 Q --0.6 (StickyKeys) 241.42 536.67 S -2 11 Q -( control.) 307.42 536.67 T -(\245) 126 524.67 T -(Simultaneously operating tw) 139.68 524.67 T -(o or more modi\336er k) 266.07 524.67 T -(e) 357.01 524.67 T -(ys deacti) 361.73 524.67 T -(v) 400.25 524.67 T -(ates the) 405.47 524.67 T -5 12 Q --0.6 (StickyKeys) 441.52 524.67 S -2 11 Q -(control.) 139.68 512.67 T -2 12 Q --0.08 (When the) 108 494 P -5 F --0.18 -0.6 (AccessXKeys) 157.16 494 B -2 F --0.08 ( control is disabled, Xkb does not look for the above special key) 229.76 494 P -(sequences.) 108 481 T -(Some of these key sequences optionally generate audible feedback of the change in state,) 108 460 T -(as described in section 10.6.3, or) 108 447 T -5 F --0.6 (XkbControlsNotify) 268.31 447 S -2 F -( events, described in section) 380.51 447 T -(10.11.) 108 434 T -0 F -(10.6.2) 72 409 T -(The AccessXTimeout Contr) 108 409 T -(ol) 264.46 409 T -2 F -(In environments where computers are shared, features such as) 108 389 T -5 F --0.6 (SlowKeys) 408.58 389 S -2 F -( present a prob-) 461.38 389 T --0.15 (lem: if) 108 376 P -5 F --0.33 -0.6 (SlowKeys) 142.37 376 B -2 F --0.15 ( is on, the keyboard can appear to be unresponsive because keys are not) 195.17 376 P -(accepted until they are held for a certain period of time. To help solve this problem, Xkb) 108 363 T --0.3 (provides an) 108 350 P -5 F --0.66 -0.6 (AccessXTimeout) 166.05 350 B -2 F --0.3 ( control to automatically change the enabled/disabled state) 258.45 350 P -(of any boolean controls and to change the value of the) 108 337 T -5 F --0.6 (AccessXKeys) 370.94 337 S -2 F -( and) 443.55 337 T -5 F --0.6 (AccessX-) 466.87 337 S --0.6 (Feedback) 108 324 S -2 F -( control attributes if the keyboard is idle for a specified period of time.) 160.8 324 T -(When a timeout as specified by) 108 303 T -5 F --0.6 (AccessXTimeout) 261.97 303 S -2 F -( occurs and a control is consequently) 354.37 303 T -(modified, Xkb generates an) 108 290 T -5 F --0.6 (XkbControlsNotify) 243.64 290 S -2 F -( event. For more information on) 355.84 290 T -5 F --0.6 (Xkb-) 512.82 290 S --0.6 (ControlsNotify) 108 277 S -2 F -( events, refer to section 10.11.) 200.4 277 T -(Use) 108 256 T -1 F -(XkbGetAccessXT) 129.66 256 T -(imeout) 211.64 256 T -2 F -( to query the current) 244.31 256 T -5 F --0.6 (AccessXTimeout) 344.62 256 S -2 F -( options for a key-) 437.02 256 T -(board device.) 108 243 T -2 11 Q -(Bool) 108 222.67 T -3 F -(XkbGetAccessXT) 132.15 222.67 T -(imeout) 215.66 222.67 T -2 F -(\050) 248.04 222.67 T -1 F -(display) 251.7 222.67 T -2 F -(,) 282.77 222.67 T -1 F -( de) 285.52 222.67 T -(vice_spec) 298.49 222.67 T -2 F -(,) 341.24 222.67 T -1 F -( timeout_rtrn) 343.99 222.67 T -2 F -(,) 402.36 222.67 T -1 F -( ctrls_mask_rtrn) 405.11 222.67 T -2 F -(,) 478.14 222.67 T -1 F -(ctrls_values_rtrn) 252 209.67 T -2 F -(,) 327.78 209.67 T -1 F -( options_mask_rtrn, options_values_rtrn) 330.53 209.67 T -2 F -(\051) 510.51 209.67 T -(Display *) 126 196.67 T -1 F -(display) 234 196.67 T -2 F -(;) 265.78 196.67 T -(/* connection to X serv) 342 196.67 T -(er */) 444.49 196.67 T -(unsigned int) 126 183.67 T -1 F -(de) 234 183.67 T -(vice_spec) 244.22 183.67 T -2 F -(;) 286.98 183.67 T -(/* de) 342 183.67 T -(vice to query) 363.42 183.67 T -(, or) 420.13 183.67 T -5 F --0.55 (XkbUseCoreKbd) 437.55 183.67 S -2 F -( */) 516.2 183.67 T -(unsigned short *) 126 170.67 T -1 F -(timeout_rtrn) 234 170.67 T -2 F -(;) 289.62 170.67 T -(/* delay until AccessXT) 342 170.67 T -(imeout, seconds */) 448.24 170.67 T -(unsigned int *) 126 157.67 T -1 F -(ctrls_mask_rtrn) 234 157.67 T -2 F -(;) 304.28 157.67 T -(/* back\336lled with controls to modify */) 342 157.67 T -(unsigned int *) 126 144.67 T -1 F -(ctrls_values_rtrn) 234 144.67 T -2 F -(;) 309.78 144.67 T --0.18 (/* back\336lled with on/of) 342 144.67 P --0.18 (f status for controls */) 444.16 144.67 P -(unsigned short *) 126 131.67 T -1 F -(opts_mask_rtrn) 234 131.67 T -2 F -(;) 303.06 131.67 T -(/* back\336lled with) 342 131.67 T -1 F -(ax_options) 421.75 131.67 T -2 F -( to modify */) 470.03 131.67 T -(unsigned short *) 126 118.67 T -1 F -(opts_values_rtrn) 234 118.67 T -2 F -(;) 308.56 118.67 T -(/* back\336lled with v) 342 118.67 T -(alues for) 426.98 118.67 T -1 F -(ax_options) 467.91 118.67 T -2 F -( */) 516.18 118.67 T -1 12 Q --0.24 (XkbGetAccessXT) 108 99 P --0.24 (imeout) 189.98 99 P -2 F --0.24 ( sends a request to the X server to obtain the current values for the) 222.65 99 P -5 F --0.6 (AccessXTimeout) 108 86 S -2 F -( attributes, waits for a reply, and backfills the values) 200.4 86 T -(into the appropri-) 454.36 86 T -(ate ar) 108 73 T -(guments) 134.1 73 T -(.) 174.77 73 T -(The parameters) 180.77 73 T -1 F -(opts_mask_rtrn) 258.07 73 T -2 F -( and) 333.41 73 T -1 F -(opts_values_rtrn) 356.74 73 T -2 F -( are backfilled with) 438.07 73 T -FMENDPAGE -%%EndPage: "62" 74 -%%Page: "63" 75 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(63) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(10 K) 437.17 744.87 T -(e) 464.09 744.87 T -(yboard Controls) 468.81 744.87 T -2 12 Q -(the options to modify and the values for) 108 712 T -1 F -(ax_options) 302.65 712 T -2 F -(, which is a field in the) 355.32 712 T -5 F --0.6 (XkbCon-) 467.98 712 S --0.6 (trolsRec) 108 699 S -2 F -( structure \050see section 10.8\051.) 160.8 699 T -1 F -(XkbGetAccessXT) 299.1 699 T -(imeout) 381.08 699 T -2 F -(returns) 416.75 699 T -5 F --0.6 (True) 452.82 699 S -2 F -( if success-) 479.22 699 T -(ful; if a compatible version of the Xkb extension is not available in the server,) 108 686 T -1 F -(XkbGetAccessXT) 108 673 T -(imeout) 189.98 673 T -2 F -( returns) 222.65 673 T -5 F --0.6 (False) 261.97 673 S -2 F -(.) 294.97 673 T -(To configure the) 108 652 T -5 F --0.6 (AccessXTimeout) 190.98 652 S -2 F -( options for a keyboard device, use) 283.38 652 T -1 F -(XkbSetAccessX-) 454.01 652 T -(Timeout) 108 639 T -2 F -(.) 147.34 639 T -2 11 Q -(Bool) 108 618.67 T -3 F -(XkbSetAccessXT) 132.15 618.67 T -(imeout) 213.21 618.67 T -2 F -(\050) 245.6 618.67 T -1 F -(display) 249.26 618.67 T -2 F -(,) 280.33 618.67 T -1 F -( de) 283.08 618.67 T -(vice_spec, timeout, ctrls_mask, ctrls_values,) 296.05 618.67 T -(opts_mask, opts_values) 252 605.67 T -2 F -(\051) 355.88 605.67 T -(Display *) 126 592.67 T -1 F -(display) 234 592.67 T -2 F -(;) 265.78 592.67 T -(/* connection to X serv) 306 592.67 T -(er */) 408.49 592.67 T -(unsigned int) 126 579.67 T -1 F -(de) 234 579.67 T -(vice_spec) 244.22 579.67 T -2 F -(;) 286.98 579.67 T -(/* de) 306 579.67 T -(vice to con\336gure, or) 327.42 579.67 T -5 F --0.55 (XkbUseCoreKbd) 418.76 579.67 S -2 F -( */) 497.41 579.67 T -(unsigned short) 126 566.67 T -1 F -(timeout) 234 566.67 T -2 F -(;) 267 566.67 T -(/* seconds idle until AccessXT) 306 566.67 T -(imeout occurs */) 442.49 566.67 T -(unsigned int) 126 553.67 T -1 F -(ctrls_mask) 234 553.67 T -2 F -(;) 281.66 553.67 T -(/* boolean controls to modify */) 306 553.67 T -(unsigned int) 126 540.67 T -1 F -(ctrls_values) 234 540.67 T -2 F -(;) 287.16 540.67 T -(/* ne) 306 540.67 T -(w bits for controls selected by) 327.42 540.67 T -1 F -(ctrls_mask) 462.45 540.67 T -2 F -( */) 510.12 540.67 T -(unsigned short) 126 527.67 T -1 F -(opts_mask) 234 527.67 T -2 F -(;) 280.44 527.67 T -(/*) 306 527.67 T -1 F -(ax_options) 317.31 527.67 T -2 F -( to change */) 365.59 527.67 T -(unsigned short) 126 514.67 T -1 F -(opts_values) 234 514.67 T -2 F -(;) 285.94 514.67 T -(/* ne) 306 514.67 T -(w bits for) 327.42 514.67 T -1 F -(ax_options) 372.33 514.67 T -2 F -( selected by) 420.61 514.67 T -1 F -(opts_mask) 475.29 514.67 T -2 F -( */) 521.73 514.67 T -1 12 Q --0.06 (timeout) 108 495 P -2 F --0.06 ( specifies the number of seconds the keyboard must be idle before the controls are) 144 495 P -(modified.) 108 482 T -1 F -(ctrls_mask) 157.33 482 T -2 F -( specifies what controls are to be enabled or disabled, and) 209.33 482 T -1 F --0.02 (ctrls_values) 108 469 P -2 F --0.02 ( specifies whether those controls are to be enabled or disabled. The bit values) 166 469 P -(correspond to those for enabling and disabling boolean controls \050see section 10.1.1\051. The) 108 456 T -1 F --0.02 (opts_mask) 108 443 P -2 F --0.02 ( field specifies which attributes of the) 158.66 443 P -5 F --0.05 -0.6 (AccessXKeys) 342.14 443 B -2 F --0.02 ( and) 414.74 443 P -5 F --0.05 -0.6 (AccessXFeedback) 438.02 443 B -2 F -(controls are to be changed, and) 108 430 T -1 F -(opts_values) 260.29 430 T -2 F -( specifies the new values for those options.) 316.96 430 T --0.46 (The bit values correspond to those for the) 108 417 P -1 F --0.46 (ax_options) 306.93 417 P -2 F --0.46 ( field of an) 359.6 417 P -5 F --1.02 -0.6 (XkbDescRec) 413.07 417 B -2 F --0.46 ( \050see section) 479.07 417 P -(10.8\051.) 108 404 T -1 11 Q -(XkbSetAccessXT) 108 383 T -(imeout) 180.71 383 T -2 12 Q -( sends a request to configure the) 210.65 383 T -5 F --0.6 (AccessXTimeout) 368.28 383 S -2 F -( control to the) 460.69 383 T -(server.) 108 370 T -(It does not wait for a reply, and normally returns) 143.32 370 T -5 F --0.6 (True) 379.61 370 S -2 F -(. If a compatible version of) 406.01 370 T -(the Xkb extension is not available in the server,) 108 357 T -1 11 Q -(XkbSetAccessXT) 339.3 357 T -(imeout) 412.01 357 T -2 12 Q -( returns) 441.95 357 T -5 F --0.6 (False) 481.28 357 S -2 F -(.) 514.28 357 T -0 F -(10.6.3) 72 332 T -(The AccessXFeedbac) 108 332 T -(k Contr) 231.14 332 T -(ol) 272.9 332 T -2 F --0.01 (Just as some keyboards can produce keyclicks to indicate when a key is pressed or repeat-) 108 312 P -(ing, Xkb can provide feedback for the controls by using special beep codes. Use the) 108 299 T -5 F --0.6 (AccessXFeedback) 108 286 S -2 F -( control to configure the specific types of operations that generate) 207 286 T -(feedback.) 108 273 T --0.51 (There is no convenience function for modifying the) 108 252 P -5 F --1.12 -0.6 (AccessXFeedback) 354.53 252 B -2 F --0.51 ( control, although) 453.54 252 P -(the feedback as a whole can be enabled or disabled just as other boolean controls are \050see) 108 239 T -(section 10.1\051. Individual beep codes are turned on or off by modifying the following bits) 108 226 T -(in the) 108 213 T -1 F -(ax_options) 138 213 T -2 F -( field of an) 190.67 213 T -5 F --0.6 (XkbControlsRec) 245.99 213 S -2 F -( structure and using) 338.39 213 T -1 F -(XkbSetContr) 435.71 213 T -(ols) 496.5 213 T -2 F -( \050see) 510.51 213 T -(section 10.10\051:) 108 200 T -3 F -(T) 236.25 180 T -(able 10.3 AccessXF) 243.15 180 T -(eedback Masks) 344.17 180 T -1 F -(Action) 108 161 T -(Beep Code) 267.75 161 T -(ax_options bit) 405.75 161 T -2 11 Q -(LED turned on) 108 147.67 T -(High-pitched beep) 267.75 147.67 T -(XkbAX_IndicatorFBMask) 405.75 147.67 T -(LED turned of) 108 134.67 T -(f) 171.88 134.67 T -(Lo) 267.75 134.67 T -(w-pitched beep) 279.7 134.67 T -(XkbAX_IndicatorFBMask) 405.75 134.67 T -(More than one LED changed state) 108 121.67 T -(T) 267.75 121.67 T -(w) 273.59 121.67 T -(o high-pitched beeps) 281.42 121.67 T -(XkbAX_IndicatorFBMask) 405.75 121.67 T -(Control turned on) 108 108.67 T -(Rising tone) 267.75 108.67 T -(XkbAX_FeatureFBMask) 405.75 108.67 T -(Control turned of) 108 95.67 T -(f) 184.11 95.67 T -(F) 267.75 95.67 T -(alling tone) 273.7 95.67 T -(XkbAX_FeatureFBMask) 405.75 95.67 T --0.13 (More than one control changed state) 108 82.67 P -(T) 267.75 82.67 T -(w) 273.59 82.67 T -(o high-pitched beeps) 281.42 82.67 T -(XkbAX_FeatureFBMask) 405.75 82.67 T -108 172 537 172 2 L -V -0.5 H -0 Z -N -108 156 537 156 2 L -V -N -FMENDPAGE -%%EndPage: "63" 75 -%%Page: "64" 76 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(64) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(10 K) 437.17 744.87 T -(e) 464.09 744.87 T -(yboard Controls) 468.81 744.87 T -2 12 Q -(Implementations that cannot generate continuous tones may generate multiple beeps) 108 529 T --0.02 (instead of falling and rising tones; for example, they can generate a high-pitched beep fol-) 108 516 P -(lowed by a low-pitched beep instead of a continuous falling tone. Other implementations) 108 503 T -(can only ring the bell with one fixed pitch. In these cases, use the) 108 490 T -5 F --0.6 (XkbAX_DumbBellFBMask) 108 477 S -2 F -( bit of) 240 477 T -1 F -(ax_options) 271.67 477 T -2 F -( to indicate that the bell can only ring with a) 324.34 477 T -(fixed pitch.) 108 464 T --0.38 (When any of the above feedbacks occur, Xkb may generate a) 108 443 P -5 F --0.84 -0.6 (XkbBellNotify) 401.03 443 B -2 F --0.38 ( event \050see) 486.83 443 P -(section 9.4\051.) 108 430 T -0 F -(10.6.4) 72 405 T -(AccessXNotify Events) 108 405 T -2 F -(The server can generate) 108 385 T -5 F --0.6 (XkbAccessXNotify) 225.28 385 S -2 F -( events for some of the global keyboard) 330.88 385 T -(controls. The structure for the) 108 372 T -5 F --0.6 (XkbAccessXNotify) 253.97 372 S -2 F -( event type is as follows:) 359.57 372 T -2 11 Q -(typedef struct {) 108 351.67 T -2 12 Q -(int) 126 338.67 T -(type;) 225 338.67 T -(/*) 306 338.67 T -2 11 Q -(Xkb e) 318.34 338.67 T -(xtension base e) 344.75 338.67 T -(v) 411.68 338.67 T -(ent code) 417.02 338.67 T -2 12 Q -( */) 453.98 338.67 T -(unsigned long) 126 325.67 T -(serial;) 225 325.67 T -(/*) 306 325.67 T -2 11 Q -(X serv) 318.34 325.67 T -(er serial number for e) 347.19 325.67 T -(v) 441.6 325.67 T -(ent) 446.94 325.67 T -2 12 Q -( */) 460.38 325.67 T -(Bool) 126 312.67 T -(send_event;) 225 312.67 T -(/*) 306 312.67 T -5 F --0.6 (True) 318.34 312.67 S -2 11 Q -( => synthetically generated) 344.74 312.67 T -2 12 Q -( */) 464.37 312.67 T -(Display *) 126 299.67 T -(display;) 225 299.67 T -(/*) 306 299.67 T -2 11 Q -(serv) 318.34 299.67 T -(er connection where e) 336.5 299.67 T -(v) 433.04 299.67 T -(ent generated) 438.38 299.67 T -2 12 Q -(*/) 500.08 299.67 T -(Time) 126 286.67 T -(time;) 225 286.67 T -(/*) 306 286.67 T -2 11 Q -(serv) 318.34 286.67 T -(er time when e) 336.5 286.67 T -(v) 401.29 286.67 T -(ent generated) 406.62 286.67 T -2 12 Q -( */) 465.57 286.67 T -(int) 126 273.67 T -(xkb_type;) 225 273.67 T -(/*) 306 273.67 T -5 11 Q --0.33 (XkbAccessXNotify) 318.34 273.67 S -2 12 Q -( */) 418.66 273.67 T -(int) 126 260.67 T -(device) 225 260.67 T -2 11 Q -(;) 256.32 260.67 T -(/* Xkb de) 306 260.67 T -(vice ID, will not be) 349.11 260.67 T -5 F --0.33 (XkbUseCoreKbd) 437.1 260.67 S -2 F -( */) 518.61 260.67 T -(int) 126 247.67 T -(detail;) 225 247.67 T -(/* XkbAXN_* */) 306 247.67 T -(K) 126 234.67 T -(e) 133.67 234.67 T -(yCode) 138.39 234.67 T -(k) 225 234.67 T -(e) 230.39 234.67 T -(ycode;) 235.11 234.67 T -(/* k) 306 234.67 T -(e) 322.7 234.67 T -(y of e) 327.42 234.67 T -(v) 352.19 234.67 T -(ent */) 357.52 234.67 T -(int) 126 221.67 T -(slo) 225 221.67 T -(wK) 237.56 221.67 T -(e) 253.17 221.67 T -(ysDelay;) 257.89 221.67 T -(/* current Slo) 306 221.67 T -(wK) 365.61 221.67 T -(e) 381.22 221.67 T -(ys delay */) 385.94 221.67 T -(int) 126 208.67 T -(debounceDelay;) 225 208.67 T -(/* current debounce delay */) 306 208.67 T -(}) 108 195.67 T -3 F -(XkbAccessXNotifyEv) 116.03 195.67 T -(ent) 217.35 195.67 T -2 F -(;) 232.01 195.67 T -2 12 Q -(The) 108 176 T -1 F -(detail) 129.66 176 T -2 F -( field describes what AccessX event just occurred and can be any of the values) 157 176 T -(in Table 10.4.) 108 163 T -2 11 Q -(Slo) 108 679.67 T -(wK) 122.4 679.67 T -(e) 138.01 679.67 T -(ys and BounceK) 142.73 679.67 T -(e) 215.16 679.67 T -(ys about) 219.88 679.67 T -(to be turned on or of) 108 668.67 T -(f) 197.85 668.67 T -(Three high-pitched beeps) 267.75 679.67 T -(XkbAX_Slo) 405.75 679.67 T -(wW) 460.48 679.67 T -(arnFBMask) 477.92 679.67 T -(Slo) 108 655.67 T -(wK) 122.4 655.67 T -(e) 138.01 655.67 T -(ys k) 142.73 655.67 T -(e) 160.65 655.67 T -(y pressed) 165.37 655.67 T -(Medium-pitched beep) 267.75 655.67 T -(XkbAX_SKPressFBMask) 405.75 655.67 T -(Slo) 108 642.67 T -(wK) 122.4 642.67 T -(e) 138.01 642.67 T -(ys k) 142.73 642.67 T -(e) 160.65 642.67 T -(y accepted) 165.37 642.67 T -(Medium-pitched beep) 267.75 642.67 T -(XkbAX_SKAcceptFBMask) 405.75 642.67 T -(Slo) 108 629.67 T -(wK) 122.4 629.67 T -(e) 138.01 629.67 T -(ys k) 142.73 629.67 T -(e) 160.65 629.67 T -(y rejected) 165.37 629.67 T -(Lo) 267.75 629.67 T -(w-pitched beep) 279.7 629.67 T -(XkbAX_SKRejectFBMask) 405.75 629.67 T -(Accepted Slo) 108 616.67 T -(wK) 166.68 616.67 T -(e) 182.29 616.67 T -(ys k) 187.01 616.67 T -(e) 204.93 616.67 T -(y released) 209.65 616.67 T -(Medium-pitched beep) 267.75 616.67 T -(XkbAX_SKReleaseFBMask) 405.75 616.67 T -(BounceK) 108 603.67 T -(e) 149.27 603.67 T -(ys k) 153.99 603.67 T -(e) 171.91 603.67 T -(y rejected) 176.63 603.67 T -(Lo) 267.75 603.67 T -(w-pitched beep) 279.7 603.67 T -(XkbAX_BKRejectFBMask) 405.75 603.67 T -(Stick) 108 590.67 T -(yK) 130.45 590.67 T -(e) 143.62 590.67 T -(ys k) 148.34 590.67 T -(e) 166.26 590.67 T -(y latched) 170.98 590.67 T -(Lo) 267.75 590.67 T -(w-pitched beep follo) 279.7 590.67 T -(wed by) 370.46 590.67 T -(high-pitched beep) 267.75 579.67 T -(XkbAX_Stick) 405.75 590.67 T -(yK) 468.53 590.67 T -(e) 481.69 590.67 T -(ysFBMask) 486.41 590.67 T -(Stick) 108 566.67 T -(yK) 130.45 566.67 T -(e) 143.62 566.67 T -(ys k) 148.34 566.67 T -(e) 166.26 566.67 T -(y lock) 170.98 566.67 T -(ed) 198.06 566.67 T -(High-pitched beep) 267.75 566.67 T -(XkbAX_Stick) 405.75 566.67 T -(yK) 468.53 566.67 T -(e) 481.69 566.67 T -(ysFBMask) 486.41 566.67 T -(Stick) 108 553.67 T -(yK) 130.45 553.67 T -(e) 143.62 553.67 T -(ys k) 148.34 553.67 T -(e) 166.26 553.67 T -(y unlock) 170.98 553.67 T -(ed) 209.06 553.67 T -(Lo) 267.75 553.67 T -(w-pitched beep) 279.7 553.67 T -(XkbAX_Stick) 405.75 553.67 T -(yK) 468.53 553.67 T -(e) 481.69 553.67 T -(ysFBMask) 486.41 553.67 T -3 12 Q -(T) 254.66 143 T -(able 10.4 AccessXNotify Ev) 261.56 143 T -(ents) 404.42 143 T -1 F -(detail) 126 124 T -(Reason) 252 124 T -2 11 Q -(XkbAXN_SKPress) 126 110.67 T -(A k) 252 110.67 T -(e) 268.08 110.67 T -(y w) 272.8 110.67 T -(as pressed when Slo) 288.88 110.67 T -(wK) 377.51 110.67 T -(e) 393.12 110.67 T -(ys w) 397.84 110.67 T -(as enabled.) 418.2 110.67 T -(XkbAXN_SKAccept) 126 97.67 T -(A k) 252 97.67 T -(e) 268.08 97.67 T -(y w) 272.8 97.67 T -(as accepted \050held longer than the Slo) 288.88 97.67 T -(wK) 450.52 97.67 T -(e) 466.13 97.67 T -(ys delay\051.) 470.85 97.67 T -(XkbAXN_SKRelease) 126 84.67 T -(An accepted Slo) 252 84.67 T -(wK) 323.82 84.67 T -(e) 339.43 84.67 T -(ys k) 344.15 84.67 T -(e) 362.07 84.67 T -(y w) 366.79 84.67 T -(as released.) 382.87 84.67 T -(XkbAXN_SKReject) 126 71.67 T --0.1 (A k) 252 71.67 P --0.1 (e) 267.98 71.67 P --0.1 (y w) 272.7 71.67 P --0.1 (as rejected \050released before the Slo) 288.68 71.67 P --0.1 (wK) 441.53 71.67 P --0.1 (e) 457.14 71.67 P --0.1 (ys delay e) 461.86 71.67 P --0.1 (xpired\051.) 505.48 71.67 P -3 12 Q -(T) 236.25 712 T -(able 10.3 AccessXF) 243.15 712 T -(eedback Masks) 344.17 712 T -1 F -(Action) 108 693 T -(Beep Code) 267.75 693 T -(ax_options bit) 405.75 693 T -108 704 537 704 2 L -V -0.5 H -0 Z -N -108 688 537 688 2 L -V -N -126 135 540 135 2 L -V -N -126 119 540 119 2 L -V -N -FMENDPAGE -%%EndPage: "64" 76 -%%Page: "65" 77 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(65) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(10 K) 437.17 744.87 T -(e) 464.09 744.87 T -(yboard Controls) 468.81 744.87 T -2 12 Q -(The) 108 618 T -1 F -(keycode) 129.66 618 T -2 F -( field reports the keycode of the key for which the event occurred. If the) 168.3 618 T -(action is related to) 108 605 T -5 F --0.6 (SlowKeys) 199.32 605 S -2 F -(, the) 252.12 605 T -1 11 Q -(slowKeysDelay) 275.79 605 T -2 12 Q -( field contains the current) 343.61 605 T -5 F --0.6 (SlowKeys) 469.25 605 S -2 F --0.36 (acceptance delay. If the action is related to) 108 592 P -5 F --0.79 -0.6 (BounceKeys) 312.72 592 B -2 F --0.36 (, the) 378.72 592 P -1 11 Q --0.33 (debounceDelay) 401.67 592 P -2 12 Q --0.36 ( field contains) 470.09 592 P -(the current) 108 579 T -5 F --0.6 (BounceKeys) 162.65 579 S -2 F -( debounce delay.) 228.65 579 T -0 11 Q -(Selecting for AccessX Events) 108 556.67 T -2 12 Q -(To receive) 108 538 T -5 F --0.6 (XkbAccessXNotify) 161.98 538 S -2 F -( events under all possible conditions, use) 267.58 538 T -1 F -(XkbSelect-) 466.9 538 T -(Events) 108 525 T -2 F -( \050see section 4.3\051 and pass) 139.99 525 T -5 F --0.6 (XkbAccesXNotifyMask) 268.3 525 S -2 F -( in both) 393.7 525 T -1 F -(bits_to_c) 433.37 525 T -(hang) 477.2 525 T -(e) 501.08 525 T -2 F -( and) 506.4 525 T -1 F -(values_for_bits) 108 512 T -2 F -(.) 182 512 T -(To receive) 108 491 T -5 F --0.6 (XkbStateNotify) 161.98 491 S -2 F -( events only under certain conditions, use) 254.38 491 T -1 F -(XkbSelectEvent-) 456.35 491 T -(Details) 108 478 T -2 F -( using) 142.67 478 T -5 F --0.6 (XkbAccessXNotify) 174.67 478 S -2 F -( as the) 280.27 478 T -1 F -(e) 313.93 478 T -(vent_type) 319.08 478 T -2 F -( and specifying the desired state) 365.07 478 T -(changes in) 108 465 T -1 F -(bits_to_c) 161.99 465 T -(hang) 205.81 465 T -(e) 229.69 465 T -2 F -( and) 235.02 465 T -1 F -(values_for_bits) 258.35 465 T -2 F -( using mask bits from Table 10.5.) 332.35 465 T -0 F -(10.6.5) 72 296 T -(Stic) 108 296 T -(kyK) 129.77 296 T -(e) 151.6 296 T -(ys, RepeatK) 158.09 296 T -(e) 226.6 296 T -(ys, and MouseK) 233.09 296 T -(e) 324.26 296 T -(ys Events) 330.76 296 T -2 F -(The) 108 276 T -5 F --0.6 (StickyKeys) 129.66 276 S -2 F -(,) 195.66 276 T -5 F --0.6 (RepeatKeys) 201.66 276 S -2 F -(, and) 267.66 276 T -5 F --0.6 (MouseKeys) 293.99 276 S -2 F -( controls do not generate specific) 353.39 276 T --0.08 (events. Instead, the latching, unlatching, locking, or unlocking of modifiers using) 108 263 P -5 F --0.18 -0.6 (Stick-) 500.4 263 B --0.6 (yKeys) 108 250 S -2 F -( generates) 141 250 T -5 F --0.6 (XkbStateNotify) 192.31 250 S -2 F -( events as described in section 5.4. Repeating keys) 284.71 250 T -(generate normal) 108 237 T -5 F --0.6 (KeyPress) 188.64 237 S -2 F -( and) 241.44 237 T -5 F --0.6 (KeyRelease) 264.77 237 S -2 F -( events, though the auto-repeat can be) 330.77 237 T -(detected using) 108 224 T -5 F --0.6 (DetectableAutorepeat) 179.99 224 S -2 F -( \050see section 10.3.3\051. Finally,) 311.99 224 T -5 F --0.6 (MouseKeys) 454.31 224 S -2 F -( gen-) 513.71 224 T -(erates pointer events identical to those of the core pointer device.) 108 211 T -0 F -(10.6.6) 72 186 T -(The Slo) 108 186 T -(wK) 151.16 186 T -(e) 168.98 186 T -(ys Contr) 175.48 186 T -(ol) 223.91 186 T -2 F -(Some users may accidentally bump keys while moving a hand or typing stick toward the) 108 166 T -(key they want. Usually, the keys that are accidentally bumped are just hit for a very short) 108 153 T -(period of time. The) 108 140 T -5 F --0.6 (SlowKeys) 203.65 140 S -2 F -( control helps filter these accidental bumps by telling the) 256.45 140 T --0.01 (server to wait a specified period, called the) 108 127 P -1 F --0.01 (SlowK) 316.88 127 P --0.01 (e) 347.8 127 P --0.01 (ys acceptance delay) 352.77 127 P -2 F --0.01 (, before delivering) 448.72 127 P -(key events. If the key is released before this period elapses, no key events are generated.) 108 114 T -(Users can then bump any number of keys on their way to the one they want without acci-) 108 101 T --0.33 (dentally getting those characters. Once they have reached the key they want, they can then) 108 88 P -2 11 Q -(XkbAXN_BKAccept) 126 679.67 T -(A k) 252 679.67 T -(e) 268.08 679.67 T -(y w) 272.8 679.67 T -(as accepted by BounceK) 288.88 679.67 T -(e) 397.05 679.67 T -(ys.) 401.77 679.67 T -(XkbAXN_BKReject) 126 666.67 T -(A k) 252 666.67 T -(e) 268.08 666.67 T -(y w) 272.8 666.67 T -(as rejected \050pressed before the BounceK) 288.88 666.67 T -(e) 466.07 666.67 T -(ys delay) 470.79 666.67 T -(e) 252 655.67 T -(xpired\051.) 256.72 655.67 T -(XkbAXN_AXKW) 126 642.67 T -(arning) 207.6 642.67 T -(AccessXK) 252 642.67 T -(e) 298.76 642.67 T -(ys is about to turn on/of) 303.48 642.67 T -(f Stick) 408.01 642.67 T -(yK) 436.88 642.67 T -(e) 450.04 642.67 T -(ys or BounceK) 454.76 642.67 T -(e) 520.48 642.67 T -(ys.) 525.2 642.67 T -3 12 Q -(T) 219.83 445 T -(able 10.5 AccessXNotify Ev) 226.73 445 T -(ent Details) 369.59 445 T -1 F -(XkbAccessXNotify Event Details) 108 426 T -(V) 270 426 T -(alue) 276 426 T -(Cir) 320.4 426 T -(cumstances) 335.96 426 T -2 11 Q -(XkbAXN_SKPressMask) 108 412.67 T -(\0501<<0\051) 270 412.67 T -(Slo) 320.4 412.67 T -(w k) 334.8 412.67 T -(e) 350.88 412.67 T -(y press noti\336cation w) 355.6 412.67 T -(anted) 449.9 412.67 T -(XkbAXN_SKAcceptMask) 108 399.67 T -(\0501<<1\051) 270 399.67 T -(Slo) 320.4 399.67 T -(w k) 334.8 399.67 T -(e) 350.88 399.67 T -(y accept noti\336cation w) 355.6 399.67 T -(anted) 455.39 399.67 T -(XkbAXN_SKRejectMask) 108 386.67 T -(\0501<<2\051) 270 386.67 T -(Slo) 320.4 386.67 T -(w k) 334.8 386.67 T -(e) 350.88 386.67 T -(y reject noti\336cation w) 355.6 386.67 T -(anted) 451.73 386.67 T -(XkbAXN_SKReleaseMask) 108 373.67 T -(\0501<<3\051) 270 373.67 T -(Slo) 320.4 373.67 T -(w k) 334.8 373.67 T -(e) 350.88 373.67 T -(y release noti\336cation w) 355.6 373.67 T -(anted) 457.83 373.67 T -(XkbAXN_BKAcceptMask) 108 360.67 T -(\0501<<4\051) 270 360.67 T -(Bounce k) 320.4 360.67 T -(e) 362.14 360.67 T -(y accept noti\336cation w) 366.86 360.67 T -(anted) 466.65 360.67 T -(XkbAXN_BKRejectMask) 108 347.67 T -(\0501<<5\051) 270 347.67 T -(Bounce k) 320.4 347.67 T -(e) 362.14 347.67 T -(y reject noti\336cation w) 366.86 347.67 T -(anted) 462.99 347.67 T -(XkbAXN_AXKW) 108 334.67 T -(arningMask) 189.6 334.67 T -(\0501<<6\051) 270 334.67 T -(AccessX w) 320.4 334.67 T -(arning noti\336cation w) 370.07 334.67 T -(anted) 461.63 334.67 T -(XkbAXN_AllEv) 108 321.67 T -(entsMask) 182.38 321.67 T -(\0500x7f\051) 270 321.67 T -(All AccessX features noti\336cations w) 320.4 321.67 T -(anted) 481.59 321.67 T -3 12 Q -(T) 254.66 712 T -(able 10.4 AccessXNotify Ev) 261.56 712 T -(ents) 404.42 712 T -1 F -(detail) 126 693 T -(Reason) 252 693 T -126 704 540 704 2 L -V -0.5 H -0 Z -N -126 688 540 688 2 L -V -N -108 437 522 437 2 L -V -N -108 421 522 421 2 L -V -N -FMENDPAGE -%%EndPage: "65" 77 -%%Page: "66" 78 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(66) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(10 K) 437.17 744.87 T -(e) 464.09 744.87 T -(yboard Controls) 468.81 744.87 T -2 12 Q -(hold the desired key long enough for the computer to accept it.) 108 712 T -5 F --0.6 (SlowKeys) 412.28 712 S -2 F -( is a boolean) 465.08 712 T -(control with one configurable attribute.) 108 699 T -(When the) 108 678 T -5 F --0.6 (SlowKeys) 157.32 678 S -2 F -( control is active, the server reports the initial key press, subsequent) 210.12 678 T -(acceptance or rejection, and release of any key to interested clients by sending an appro-) 108 665 T -(priate) 108 652 T -5 F --0.6 (AccessXNotify) 138.32 652 S -2 F -( event \050see section 10.6.4\051.) 224.13 652 T -(To get the) 108 631 T -5 F --0.6 (SlowKeys) 159.66 631 S -2 F -( acceptance delay for a keyboard device, use) 212.46 631 T -1 F -(XkbGetSlowKeysDe-) 429.37 631 T -(lay) 108 618 T -2 F -(.) 122.66 618 T -2 11 Q -(Bool) 108 597.67 T -3 F -(XkbGetSlo) 132.15 597.67 T -(wK) 183.99 597.67 T -(eysDelay) 200.21 597.67 T -2 F -(\050) 241.76 597.67 T -1 F -(display) 245.42 597.67 T -2 F -(,) 276.49 597.67 T -1 F -( de) 279.24 597.67 T -(vice_spec) 292.21 597.67 T -2 F -(,) 334.96 597.67 T -1 F -( delay_rtrn) 337.71 597.67 T -2 F -(\051) 386.9 597.67 T -(Display *) 126 584.67 T -1 F -(display) 234 584.67 T -2 F -(;) 265.78 584.67 T -(/* connection to X serv) 306 584.67 T -(er */) 408.49 584.67 T -(unsigned int) 126 571.67 T -1 F -(de) 234 571.67 T -(vice_spec) 244.22 571.67 T -2 F -(;) 286.98 571.67 T -(/* de) 306 571.67 T -(vice ID, or) 327.42 571.67 T -5 F --0.55 (XkbUseCoreKbd) 377.51 571.67 S -2 F -( */) 456.16 571.67 T -(unsigned int *) 126 558.67 T -1 F -(delay_rtrn) 234 558.67 T -2 F -(;) 280.44 558.67 T -(/* back\336lled with) 306 558.67 T -5 F --0.55 (SlowKeys) 385.75 558.67 S -2 F -( delay) 434.15 558.67 T -(, ms */) 460.01 558.67 T -1 12 Q -(XkbGetSlowK) 108 539 T -(e) 174.91 539 T -(ysDelay) 179.88 539 T -2 F -(requests the attributes of the) 221.53 539 T -5 F --0.6 (SlowKeys) 359.84 539 S -2 F -( control from the server,) 412.64 539 T -(waits for a reply and backfills) 108 526 T -1 F -(delay_rtrn) 253.97 526 T -2 F -(with the) 307.63 526 T -5 F --0.6 (SlowKeys) 349.63 526 S -2 F -( delay attribute.) 402.43 526 T -1 F -(Xkb-) 480.42 526 T -(GetSlowK) 108 513 T -(e) 156.25 513 T -(ysDelay) 161.22 513 T -2 F -(returns) 202.87 513 T -5 F --0.6 (True) 239.2 513 S -2 F -( if successful; if a compatible version of the Xkb exten-) 265.6 513 T -(sion is not available in the server,) 108 500 T -1 F -(XkbGetSlowK) 271.98 500 T -(e) 338.89 500 T -(ysDelay) 343.86 500 T -2 F -( returns) 382.51 500 T -5 F --0.6 (False) 421.84 500 S -2 F -(.) 454.84 500 T -(To set the) 108 479 T -5 F --0.6 (SlowKeys) 158.33 479 S -2 F -( acceptance delay for a keyboard device, use) 211.13 479 T -1 F -(XkbSetSlowKeysDelay) 428.04 479 T -2 F -(.) 536.69 479 T -2 11 Q -(Bool) 108 458.67 T -3 F -(XkbSetSlo) 132.15 458.67 T -(wK) 181.55 458.67 T -(eysDelay) 197.77 458.67 T -2 F -(\050) 239.32 458.67 T -1 F -(display) 242.98 458.67 T -2 F -(,) 274.05 458.67 T -1 F -( de) 276.8 458.67 T -(vice_spec) 289.76 458.67 T -2 F -(,) 332.52 458.67 T -1 F -( delay) 335.27 458.67 T -2 F -(\051) 361.85 458.67 T -(Display *) 126 445.67 T -1 F -(display) 234 445.67 T -2 F -(;) 265.78 445.67 T -(/* connection to X serv) 306 445.67 T -(er */) 408.49 445.67 T -(unsigned int) 126 432.67 T -1 F -(de) 234 432.67 T -(vice_spec) 244.22 432.67 T -2 F -(;) 286.98 432.67 T -(/* de) 306 432.67 T -(vice to con\336gure, or) 327.42 432.67 T -5 F --0.55 (XkbUseCoreKbd) 418.76 432.67 S -2 F -( */) 497.41 432.67 T -(unsigned int) 126 419.67 T -1 F -(delay) 234 419.67 T -2 F -(;) 257.83 419.67 T -(/*) 306 419.67 T -5 F --0.55 (SlowKeys) 317.31 419.67 S -2 F -( delay) 365.71 419.67 T -(, ms */) 391.57 419.67 T -1 12 Q --0.15 (XkbSetSlowK) 108 400 P --0.15 (e) 172.25 400 P --0.15 (ysDelay) 177.22 400 P -2 F --0.15 ( sends a request to configure the) 215.87 400 P -5 F --0.33 -0.6 (SlowKeys) 372.45 400 B -2 F --0.15 ( control to the server.) 425.25 400 P --0.15 (It) 529.82 400 P --0.27 (does not wait for a reply, and normally returns) 108 387 P -5 F --0.6 -0.6 (True) 331.5 387 B -2 F --0.27 (. Specifying a value of) 357.9 387 P -5 F --0.6 -0.6 (0) 467.85 387 B -2 F --0.27 ( for the) 474.45 387 P -1 F --0.27 (delay) 511.28 387 P -2 F --0.3 (parameter causes) 108 374 P -1 F --0.3 (XkbSetSlowK) 192.7 374 P --0.3 (e) 256.95 374 P --0.3 (ys) 261.92 374 P -2 F --0.3 ( to generate a) 271.91 374 P -5 F --0.66 -0.6 (BadValue) 338.03 374 B -2 F --0.3 ( protocol error. If a compatible) 390.83 374 P -(version of the Xkb extension is not available in the server) 108 361 T -1 F -(XkbSetSlowK) 387.62 361 T -(e) 451.87 361 T -(ysDelay) 456.84 361 T -2 F -( returns) 495.49 361 T -5 F --0.6 (False) 108 348 S -2 F -(.) 141 348 T -0 F -(10.6.7) 72 323 T -(The BounceK) 108 323 T -(e) 185.16 323 T -(ys Contr) 191.65 323 T -(ol) 240.08 323 T -2 F -(Some users may accidentally \322bounce\323 on a key when they release it. They press it once,) 108 303 T --0.25 (then accidentally press it again after they release it. The) 108 290 P -5 F --0.55 -0.6 (BounceKeys) 375.76 290 B -2 F --0.25 ( control temporarily) 441.76 290 P -(disables a key after it has been pressed, effectively \322debouncing\323 the keyboard. The) 108 277 T -(period of time the key is disabled after it is released is known as the) 108 264 T -1 F -(BounceK) 436.28 264 T -(e) 479.86 264 T -(ys delay) 484.82 264 T -2 F -(.) 523.81 264 T -5 F --0.6 (BounceKeys) 108 251 S -2 F -( is a boolean control.) 174 251 T --0.16 (When the) 108 230 P -5 F --0.35 -0.6 (BounceKeys) 157 230 B -2 F --0.16 ( control is active, the server reports acceptance or rejection of any) 223 230 P -(key to interested clients by sending an appropriate) 108 217 T -5 F --0.6 (AccessXNotify) 351.96 217 S -2 F -( event \050see section) 437.76 217 T -(10.6.4\051.) 108 204 T -(Use) 108 183 T -1 F -(XkbGetBounceKeysDelay) 129.66 183 T -2 F -( to query the current) 253.62 183 T -5 F --0.6 (BounceKeys) 353.93 183 S -2 F -( delay for a keyboard) 419.93 183 T -(device.) 108 170 T -2 11 Q -(Bool) 108 149.67 T -3 F -(XkbGetBounceK) 132.15 149.67 T -(eysDelay) 212.54 149.67 T -2 F -(\050) 254.09 149.67 T -1 F -(display) 257.75 149.67 T -2 F -(,) 288.82 149.67 T -1 F -( de) 291.57 149.67 T -(vice_spec) 304.54 149.67 T -2 F -(,) 347.29 149.67 T -1 F -( delay_rtrn) 350.04 149.67 T -2 F -(\051) 399.24 149.67 T -(Display *) 126 136.67 T -1 F -(display) 234 136.67 T -2 F -(;) 265.78 136.67 T -(/* connection to X serv) 306 136.67 T -(er */) 408.49 136.67 T -(unsigned int) 126 123.67 T -1 F -(de) 234 123.67 T -(vice_spec) 244.22 123.67 T -2 F -(;) 286.98 123.67 T -(/* de) 306 123.67 T -(vice ID, or) 327.42 123.67 T -5 F --0.55 (XkbUseCoreKbd) 377.51 123.67 S -2 F -( */) 456.16 123.67 T -(unsigned int *) 126 110.67 T -1 F -(delay_rtrn) 234 110.67 T -2 F -(;) 280.44 110.67 T -(/* back\336lled with bounce k) 306 110.67 T -(e) 425.66 110.67 T -(ys delay) 430.38 110.67 T -(, ms */) 466.02 110.67 T -1 12 Q -(XkbGetBounceK) 108 91 T -(e) 187.56 91 T -(ysDelay) 192.53 91 T -2 F -(requests the attributes of the) 234.18 91 T -5 F --0.6 (BounceKeys) 372.49 91 S -2 F -( control from the) 438.49 91 T -(server, waits for a reply, and backfills) 108 78 T -1 F -(delay_rtrn) 292.28 78 T -2 F -(with the) 345.95 78 T -5 F --0.6 (BounceKeys) 387.95 78 S -2 F -( delay attribute.) 453.95 78 T -FMENDPAGE -%%EndPage: "66" 78 -%%Page: "67" 79 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(67) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(10 K) 437.17 744.87 T -(e) 464.09 744.87 T -(yboard Controls) 468.81 744.87 T -1 12 Q -(XkbGetBounceK) 108 712 T -(e) 187.56 712 T -(ysDelay) 192.53 712 T -2 F -(returns) 234.18 712 T -5 F --0.6 (True) 270.25 712 S -2 F -( if successful; if a compatible version of the Xkb) 296.65 712 T -(extension is not available in the server) 108 699 T -1 F -(XkbGetSlowK) 294.97 699 T -(e) 361.88 699 T -(ysDelay) 366.85 699 T -2 F -( returns) 405.5 699 T -5 F --0.6 (False) 444.83 699 S -2 F -(.) 477.83 699 T -(To set the) 108 678 T -5 F --0.6 (BounceKeys) 158.33 678 S -2 F -( delay for a keyboard device, use) 224.33 678 T -1 F -(XkbSetBounceKeysDelay) 385.61 678 T -2 F -(.) 506.9 678 T -2 11 Q -(Bool) 108 657.67 T -3 F -(XkbSetBounceK) 132.15 657.67 T -(eysDelay) 210.1 657.67 T -2 F -(\050) 251.65 657.67 T -1 F -(display) 255.31 657.67 T -2 F -(,) 286.38 657.67 T -1 F -( de) 289.13 657.67 T -(vice_spec) 302.1 657.67 T -2 F -(,) 344.85 657.67 T -1 F -( delay) 347.6 657.67 T -2 F -(\051) 374.18 657.67 T -(Display *) 126 644.67 T -1 F -(display) 234 644.67 T -2 F -(;) 265.78 644.67 T -(/* connection to X serv) 306 644.67 T -(er */) 408.49 644.67 T -(unsigned int) 126 631.67 T -1 F -(de) 234 631.67 T -(vice_spec) 244.22 631.67 T -2 F -(;) 286.98 631.67 T -(/* de) 306 631.67 T -(vice to con\336gure, or) 327.42 631.67 T -5 F --0.55 (XkbUseCoreKbd) 418.76 631.67 S -2 F -( */) 497.41 631.67 T -(unsigned int) 126 618.67 T -1 F -(delay) 234 618.67 T -2 F -(;) 257.83 618.67 T -(/* bounce k) 306 618.67 T -(e) 357.22 618.67 T -(ys delay) 361.93 618.67 T -(, ms */) 397.58 618.67 T -1 12 Q -(XkbSetBounceK) 108 599 T -(e) 184.9 599 T -(ysDelay) 189.86 599 T -2 F -( sends a request to configure the) 228.52 599 T -5 F --0.6 (BounceKeys) 386.15 599 S -2 F -( control to the) 452.15 599 T --0.4 (server.) 108 586 P --0.4 (It does not wait for a reply and normally returns) 142.91 586 P -5 F --0.88 -0.6 (True) 372.18 586 B -2 F --0.4 (. Specifying a value of) 398.58 586 P -5 F --0.88 -0.6 (zero) 507.88 586 B -2 F --0.32 (for the) 108 573 P -1 F --0.32 (delay) 142.01 573 P -2 F --0.32 (parameter causes) 170.68 573 P -1 F --0.32 (XkbSetBounceK) 255.32 573 P --0.32 (e) 332.22 573 P --0.32 (ysDelay) 337.19 573 P -2 F --0.32 ( to generate a) 375.84 573 P -5 F --0.71 -0.6 (BadValue) 441.85 573 B -2 F --0.32 ( protocol) 494.65 573 P -(error. If a compatible version of the Xkb extension is not available in the server,) 108 560 T -1 F -(XkbSet-) 495.59 560 T -(BounceK) 108 547 T -(e) 151.57 547 T -(ysDelay) 156.54 547 T -2 F -( returns) 195.19 547 T -5 F --0.6 (False) 234.52 547 S -2 F -(.) 267.52 547 T -0 F -(10.6.8) 72 522 T -(The Stic) 108 522 T -(kyK) 154.44 522 T -(e) 176.27 522 T -(ys Contr) 182.76 522 T -(ol) 231.19 522 T -2 F --0.09 (Some people find it difficult or even impossible to press two keys at once. For example, a) 108 502 P --0.38 (one-fingered typist or someone using a mouth stick cannot press the) 108 489 P -4 11 Q --0.38 (Shift) 433.48 489 P -2 12 Q --0.38 ( and) 455.49 489 P -4 11 Q --0.38 (1) 478.07 489 P -2 12 Q --0.38 ( keys at the) 484.18 489 P --0.16 (same time. The) 108 476 P -5 F --0.36 -0.6 (StickyKeys) 184.16 476 B -2 F --0.16 ( control solves this problem by changing the behavior of the) 250.17 476 P --0.37 (modifier keys. With) 108 463 P -5 F --0.82 -0.6 (StickyKeys) 206.21 463 B -2 F --0.37 (, the user can first press a modifier, release it, then press) 272.21 463 P -(another key. For example, to get an exclamation point on a PC-style keyboard, the user) 108 450 T -(can press the) 108 437 T -4 11 Q -(Shift) 172.98 437 T -2 12 Q -( key, release it, and then press the) 194.99 437 T -4 11 Q -(1) 359.62 437 T -2 12 Q -( key.) 365.73 437 T -5 F --0.6 (StickyKeys) 108 416 S -2 F -( also allows users to lock modifier keys without requiring special locking) 174 416 T -(keys. When) 108 403 T -5 F --0.6 (StickyKeys) 167.65 403 S -2 F -( is enabled, a modifier is latched when the user presses it just) 233.65 403 T --0.43 (once. The user can press a modifier twice in a row to lock it, and then unlock it by pressing) 108 390 P -(it one more time.) 108 377 T --0.44 (When a modifier is latched, it becomes unlatched when the user presses a nonmodifier key) 108 356 P --0.34 (or a pointer button. For instance, to enter the sequence) 108 343 P -5 F --0.74 -0.6 (Shift) 368.57 343 B -2 F --0.34 (+) 401.57 343 P -5 F --0.74 -0.6 (Control) 408.34 343 B -2 F --0.34 (+) 454.54 343 P -4 11 Q --0.34 (Z) 461.31 343 P -2 12 Q --0.34 ( the user could) 468.03 343 P --0.12 (press and release the) 108 330 P -4 11 Q --0.13 (Shift) 209.46 330 P -2 12 Q --0.12 ( key to latch it, then press and release the) 231.47 330 P -4 11 Q --0.13 (Control) 430.51 330 P -2 12 Q --0.12 ( key to latch it,) 465.96 330 P --0.45 (and finally press and release the Z key. Because the) 108 317 P -4 11 Q --0.46 (Control) 354.4 317 P -2 12 Q --0.45 ( key is a modifier key, pressing) 389.86 317 P -(it does not unlatch the) 108 304 T -4 11 Q -(Shift) 217 304 T -2 12 Q -( key. Thus, after the user presses the) 239.01 304 T -4 11 Q -(Control) 416.3 304 T -2 12 Q -( key, both the) 451.75 304 T -5 F --0.07 -0.6 (Shift) 108 291 B -2 F --0.03 ( and) 141 291 P -5 F --0.07 -0.6 (Control) 164.27 291 B -2 F --0.03 ( modifiers are latched. When the user presses the) 210.47 291 P -4 11 Q --0.03 (Z) 448.13 291 P -2 12 Q --0.03 ( key, the effect is) 454.85 291 P -(as though the user had pressed) 108 278 T -5 F --0.6 (Shift) 257.3 278 S -2 F -(+) 290.3 278 T -5 F --0.6 (Control) 297.07 278 S -2 F -(+) 343.27 278 T -4 11 Q -(Z) 350.04 278 T -2 12 Q -(. In addition, because the) 356.76 278 T -4 11 Q -(Z) 479.74 278 T -2 12 Q -( key is not) 486.46 278 T -(a modifier key, the) 108 265 T -5 F --0.6 (Shift) 201.65 265 S -2 F -( and) 234.65 265 T -5 F --0.6 (Control) 257.98 265 S -2 F -( modifiers are unlatched.) 304.18 265 T --0.04 (Locking a modifier key means that the modifier affects any key or pointer button the user) 108 244 P -(presses until the user unlocks it or it is unlocked programmatically. For example, to enter) 108 231 T -(the sequence \050\322XKB\323\051 on a keyboard where \324\050\325 is a shifted \3249\325, \324\051\325 is a shifted \3240\325, and \324\323\325) 108 218 T -(is a shifted single quote, the user could press and release the) 108 205 T -4 11 Q -(Shift) 399.61 205 T -2 12 Q -( key twice to lock the) 421.62 205 T -5 F --0.6 (Shift) 108 192 S -2 F -( modifier. Then, when the user presses the) 141 192 T -4 11 Q -(9) 346.96 192 T -2 12 Q -(,) 353.07 192 T -4 11 Q -(\324) 359.07 192 T -2 12 Q -(,) 361.52 192 T -4 11 Q -(x) 367.52 192 T -2 12 Q -(,) 373.02 192 T -4 11 Q -(k) 379.02 192 T -2 12 Q -(,) 384.52 192 T -4 11 Q -(b) 390.52 192 T -2 12 Q -(,) 396.63 192 T -4 11 Q -(\324) 402.63 192 T -2 12 Q -(, and) 405.07 192 T -4 11 Q -(0) 431.4 192 T -2 12 Q -( keys in sequence, it) 437.52 192 T --0.44 (generates \050\322XKB\323\051. To unlock the) 108 179 P -5 F --0.96 -0.6 (Shift) 273.76 179 B -2 F --0.44 ( modifier, the user can press and release the) 306.76 179 P -4 11 Q --0.45 (Shift) 515.43 179 P -2 12 Q -(key.) 108 166 T -5 F --0.6 (StickyKeys) 108 145 S -2 F -( is a boolean control with two separate attributes that may be individually) 174 145 T -(configured: one to automatically disable it, and one to control the latching behavior of) 108 132 T -(modifier keys.) 108 119 T -FMENDPAGE -%%EndPage: "67" 79 -%%Page: "68" 80 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(68) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(10 K) 437.17 744.87 T -(e) 464.09 744.87 T -(yboard Controls) 468.81 744.87 T -0 F -(StickyKeys Options) 108 712.67 T -2 12 Q -(The) 108 694 T -5 F --0.6 (StickyKeys) 129.66 694 S -2 F -( control has two options that can be accessed via the) 195.66 694 T -1 F -(ax_options) 449.28 694 T -2 F -( of an) 501.95 694 T -5 F --0.6 (XkbControlsRec) 108 681 S -2 F -( structure \050see section 10.8\051. The first option,) 200.4 681 T -5 F --0.6 (TwoKeys) 419.37 681 S -2 F -(, specifies) 465.57 681 T -(whether) 108 668 T -5 F --0.6 (StickyKeys) 149.65 668 S -2 F -( should automatically turn off when two keys are pressed at the) 215.65 668 T --0.31 (same time. This feature is useful for shared computers so people who do not want them do) 108 655 P -(not need to turn) 108 642 T -5 F --0.6 (StickyKeys) 186.66 642 S -2 F -( off if a previous user left) 252.66 642 T -5 F --0.6 (StickyKeys) 377.63 642 S -2 F -( on. The second) 443.63 642 T -(option,) 108 629 T -5 F --0.6 (LatchToLock) 144.67 629 S -2 F -(, specifies whether or not) 217.27 629 T -5 F --0.6 (StickyKeys) 341.24 629 S -2 F -( locks a modifier when) 407.25 629 T -(pressed twice in a row.) 108 616 T --0.4 (Use) 108 595 P -1 F --0.4 (XkbGetStic) 129.26 595 P --0.4 (k) 183 595 P --0.4 (yK) 188.21 595 P --0.4 (e) 201.12 595 P --0.4 (ysOptions) 206.09 595 P -2 F --0.4 ( to query the current) 254.09 595 P -5 F --0.89 -0.6 (StickyKeys) 352.38 595 B -2 F --0.4 ( attributes for a keyboard) 418.38 595 P -(device.) 108 582 T -2 11 Q -(Bool) 108 561.67 T -3 F -(XkbGetStick) 132.15 561.67 T -(yK) 193.1 561.67 T -(eysOptions) 206.88 561.67 T -2 F -(\050) 258.83 561.67 T -1 F -(display) 262.49 561.67 T -2 F -(,) 293.56 561.67 T -1 F -( de) 296.31 561.67 T -(vice_spec) 309.28 561.67 T -2 F -(,) 352.04 561.67 T -1 F -( options_rtrn) 354.79 561.67 T -2 F -(\051) 412.55 561.67 T -(Display *) 126 548.67 T -1 F -(display) 234 548.67 T -2 F -(;) 265.78 548.67 T -(/* connection to X serv) 306 548.67 T -(er */) 408.49 548.67 T -(unsigned int) 126 535.67 T -1 F -(de) 234 535.67 T -(vice_spec) 244.22 535.67 T -2 F -(;) 286.98 535.67 T -(/* de) 306 535.67 T -(vice ID, or) 327.42 535.67 T -5 F --0.55 (XkbUseCoreKbd) 377.51 535.67 S -2 F -( */) 456.16 535.67 T -(unsigned int *) 126 522.67 T -1 F -(options_rtrn) 234 522.67 T -2 F -(;) 289.01 522.67 T -(/* back\336lled with Stick) 306 522.67 T -(yK) 408.2 522.67 T -(e) 421.37 522.67 T -(ys option mask */) 426.09 522.67 T -1 12 Q -(XkbGetStic) 108 503 T -(k) 161.75 503 T -(yK) 166.96 503 T -(e) 179.87 503 T -(ysOptions) 184.84 503 T -2 F -(requests the attributes of the) 235.84 503 T -5 F --0.6 (StickyKeys) 374.15 503 S -2 F -( control from the) 440.15 503 T -(server, waits for a reply, and backfills) 108 490 T -1 F -(options_rtrn) 292.28 490 T -2 F -(with a mask indicating whether the) 355.3 490 T -(individual) 108 477 T -5 F --0.6 (StickyKeys) 159.67 477 S -2 F -( options are on or off. Valid bits in) 225.67 477 T -1 F -(options_rtrn) 394.99 477 T -2 F -( are:) 455.01 477 T -5 F --0.6 (XkbAX_TwoKeysMask) 139.68 456 S --0.6 (XkbAX_LatchToLockMask) 139.68 442 S -1 F -(XkbGetStic) 108 422 T -(k) 161.75 422 T -(yK) 166.96 422 T -(e) 179.87 422 T -(ysOptions) 184.84 422 T -2 F -(returns) 235.84 422 T -5 F --0.6 (True) 272.16 422 S -2 F -( if successful; if a compatible version of the Xkb) 298.56 422 T -(extension is not available in the server) 108 409 T -1 F -(XkbGetStic) 294.97 409 T -(k) 348.72 409 T -(yK) 353.93 409 T -(e) 366.84 409 T -(ysOptions) 371.81 409 T -2 F -( returns) 419.81 409 T -5 F --0.6 (False) 459.13 409 S -2 F -(.) 492.13 409 T -(To set the) 108 388 T -5 F --0.6 (StickyKeys) 158.33 388 S -2 F -( attributes for a keyboard device, use) 224.33 388 T -1 F -(XkbSetStickyKeysOptions) 404.28 388 T -2 F -(.) 527.59 388 T -2 11 Q -(Bool) 108 367.67 T -3 F -(XkbSetStick) 132.15 367.67 T -(yK) 190.65 367.67 T -(eysOptions) 204.44 367.67 T -2 F -(\050) 256.39 367.67 T -1 F -(display) 260.05 367.67 T -2 F -(,) 291.12 367.67 T -1 F -( de) 293.87 367.67 T -(vice_spec, mask, values) 306.84 367.67 T -2 F -(\051) 411.3 367.67 T -(Display *) 126 354.67 T -1 F -(display) 234 354.67 T -2 F -(;) 265.78 354.67 T -(/* connection to X serv) 306 354.67 T -(er */) 408.49 354.67 T -(unsigned int) 126 341.67 T -1 F -(de) 234 341.67 T -(vice_spec) 244.22 341.67 T -2 F -(;) 286.98 341.67 T -(/* de) 306 341.67 T -(vice to con\336gure, or XkbUseCoreKbd */) 327.42 341.67 T -(unsigned int) 126 328.67 T -1 F -(mask) 234 328.67 T -2 F -(;) 256.61 328.67 T -(/* selects Stick) 306 328.67 T -(yK) 371.83 328.67 T -(e) 385 328.67 T -(ys attrib) 389.72 328.67 T -(utes to modify */) 425.25 328.67 T -(unsigned int) 126 315.67 T -1 F -(values;) 234 315.67 T -2 F -(/* v) 306 315.67 T -(alues for selected attrib) 322.53 315.67 T -(utes */) 424.65 315.67 T -1 12 Q -(XkbSetStic) 108 296 T -(k) 159.08 296 T -(yK) 164.29 296 T -(e) 177.2 296 T -(ysOptions) 182.17 296 T -2 F -( sends a request to configure the) 230.17 296 T -5 F --0.6 (StickyKeys) 387.8 296 S -2 F -( control to the) 453.8 296 T -(server.) 108 283 T -(It does not wait for a reply and normally returns) 143.32 283 T -5 F --0.6 (True) 376.61 283 S -2 F -(. The valid bits to use for) 403.01 283 T -(both the) 108 270 T -1 F -(mask) 150 270 T -2 F -( and) 174.66 270 T -1 F -(values) 197.99 270 T -2 F -( parameters are:) 228.65 270 T -5 F --0.6 (XkbAX_TwoKeysMask) 139.68 249 S --0.6 (XkbAX_LatchToLockMask) 139.68 235 S -2 F -( If a compatible version of the Xkb extension is not available in the server,) 108 215 T -1 F -(XkbSetStic) 469.27 215 T -(k-) 520.36 215 T -(yK) 108 202 T -(e) 120.91 202 T -(ysOptions) 125.88 202 T -2 F -( returns) 173.88 202 T -5 F --0.6 (False) 213.2 202 S -2 F -(.) 246.21 202 T -0 F -(10.7) 72 177 T -(Contr) 108 177 T -(ols f) 139.75 177 T -(or General K) 164.18 177 T -(e) 236.03 177 T -(yboar) 242.52 177 T -(d Mapping) 274.96 177 T -2 F -(There are several controls that apply to the keyboard mapping in general. They control) 108 157 T --0.17 (handling of out-of-range group indices and how modifiers are processed and consumed in) 108 144 P -(the server. These are:) 108 131 T -5 F --0.6 (GroupsWrap) 139.68 110 S --0.6 (IgnoreGroupLock) 139.68 96 S --0.6 (IgnoreLockMods) 139.68 82 S --0.6 (InternalMods) 139.68 68 S -FMENDPAGE -%%EndPage: "68" 80 -%%Page: "69" 81 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(69) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(10 K) 437.17 744.87 T -(e) 464.09 744.87 T -(yboard Controls) 468.81 744.87 T -5 12 Q --0.6 (IgnoreGroupLock) 108 712 S -2 F -( is a boolean control; the rest are always active.) 207 712 T -(Without the modifier processing options provided by Xkb, passive grabs set via transla-) 108 691 T -(tions in a client \050for example,) 108 678 T -5 F --0.6 (Altspace) 252.31 678 S -2 F -(\051 do not trigger if any modifiers) 371.11 678 T -(other than those specified by the translation are set. This results in problems in the user) 108 665 T -(interface when either) 108 652 T -5 F --0.6 (NumLock) 212.29 652 S -2 F -( or a secondary keyboard group is active. The) 258.49 652 T -5 F --0.6 (Ignore-) 480.43 652 S --0.29 -0.6 (LockMods) 108 639 B -2 F --0.13 ( and) 160.8 639 P -5 F --0.29 -0.6 (IgnoreGroupLock) 183.87 639 B -2 F --0.13 ( controls make it possible to avoid this behavior with-) 282.87 639 P -(out exhaustively specifying a grab for every possible modifier combination.) 108 626 T -0 F -(10.7.1) 72 601 T -(The Gr) 108 601 T -(oupsWrap Contr) 146.44 601 T -(ol) 240.19 601 T -2 F -(The) 108 581 T -5 F --0.6 (GroupsWrap) 129.66 581 S -2 F -( control determines how illegal groups are handled on a global basis.) 195.66 581 T -(There are a number of valid keyboard sequences that can cause the effective group num-) 108 568 T -(ber to go out of range. When this happens, the group must be normalized back to a valid) 108 555 T -(number. The) 108 542 T -5 F --0.6 (GroupsWrap) 172.32 542 S -2 F -( control specifies how this is done.) 238.32 542 T -(When dealing with group numbers, all computations are done using the group index,) 108 521 T -(which is the group number minus one. There are three different algorithms; the) 108 508 T -5 F --0.6 (GroupsWrap) 108 495 S -2 F -( control specifies which one is used:) 174 495 T -2 11 Q -(\245) 126 474.67 T -(XkbRedirectIntoRange) 139.68 474.67 T -2 12 Q --0.37 (All invalid group numbers are converted to a valid group number by taking the last) 144 456 P -(four bits of the) 144 443 T -5 F --0.6 (GroupsWrap) 217.99 443 S -2 F -( control and using them as the group index. If the) 283.99 443 T -(result is still out of range, Group one is used.) 144 430 T -2 11 Q -(\245) 126 409.67 T -(XkbClampIntoRange) 139.68 409.67 T -2 12 Q --0.25 (All invalid group numbers are converted to the nearest valid group number. Group) 144 391 P --0.43 (numbers larger than the highest supported group number are mapped to the highest) 144 378 P -(supported group; those less than one are mapped to group one.) 144 365 T -2 11 Q -(\245) 126 344.67 T -(XkbWrapIntoRange) 139.68 344.67 T -2 12 Q -(All invalid group numbers are converted to a valid group number using integer) 144 326 T -(modulus applied to the group index.) 144 313 T -(There are no convenience functions for manipulating the) 108 292 T -5 F --0.6 (GroupsWrap) 383.27 292 S -2 F -( control. Manipu-) 449.27 292 T -(late the) 108 279 T -5 F --0.6 (GroupsWrap) 145.99 279 S -2 F -( control via the) 211.99 279 T -1 F -(groups_wrap) 287.32 279 T -2 F -( field in the) 351.33 279 T -5 F --0.6 (XkbControlsRec) 409.32 279 S -2 F -( struc-) 501.72 279 T --0.07 (ture, then use) 108 266 P -1 F --0.07 (XkbSetContr) 175.12 266 P --0.07 (ols) 235.91 266 P -2 F --0.07 ( and) 249.91 266 P -1 F --0.07 (XkbGetContr) 273.11 266 P --0.07 (ols) 336.56 266 P -2 F --0.07 ( \050see section 10.9 and section 10.10\051 to) 350.57 266 P -(query and change this control.) 108 253 T -0 F -(Note) 126 232.67 T -2 11 Q --0.11 (See also section 15.3.2 or a discussion of the related \336eld,) 162 232.67 P -1 F --0.11 (gr) 418.01 232.67 P --0.11 (oup_info) 427.29 232.67 P -2 F --0.11 (, which also nor-) 466.41 232.67 P -(malizes a group under certain circumstances.) 162 220.67 T -0 12 Q -(10.7.2) 72 196 T -(The IgnoreLoc) 108 196 T -(kMods Contr) 190.44 196 T -(ol) 263.53 196 T -2 F --0.09 (The core protocol does not provide a way to exclude specific modifiers from grab calcula-) 108 176 P -(tions, with the result that locking modifiers sometimes have unanticipated side effects.) 108 163 T --0.12 (The) 108 142 P -5 F --0.27 -0.6 (IgnoreLockMods) 129.54 142 B -2 F --0.12 ( control specifies modifiers that should be excluded from grab cal-) 221.94 142 P -(culations. These modifiers are also not reported in any core events except) 108 129 T -5 F --0.6 (KeyPress) 463.58 129 S -2 F -( and) 516.39 129 T -5 F --0.38 -0.6 (KeyRelease) 108 116 B -2 F --0.17 ( events that do not activate a passive grab and that do not occur while a grab) 174 116 P -(is active.) 108 103 T -FMENDPAGE -%%EndPage: "69" 81 -%%Page: "70" 82 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(70) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(10 K) 437.17 744.87 T -(e) 464.09 744.87 T -(yboard Controls) 468.81 744.87 T -2 12 Q -(Manipulate the) 108 712 T -5 F --0.6 (IgnoreLockMods) 183.32 712 S -2 F -( control via the) 275.73 712 T -1 F -(ignore_lock) 351.05 712 T -2 F -( field in the) 408.37 712 T -5 F --0.6 (XkbCon-) 466.37 712 S --0.27 -0.6 (trolsRec) 108 699 B -2 F --0.12 ( structure, then use) 160.8 699 P -1 F --0.12 (XkbSetContr) 253.96 699 P --0.12 (ols) 314.75 699 P -2 F --0.12 ( and) 328.76 699 P -1 F --0.12 (XkbGetContr) 351.84 699 P --0.12 (ols) 415.3 699 P -2 F --0.12 ( \050see sections 10.9 and) 429.3 699 P -(10.10\051 to query and change this control. Alternatively, use) 108 686 T -1 F -(XkbSetIgnor) 390.62 686 T -(eLoc) 450.17 686 T -(kMods) 473.26 686 T -2 F -(.) 505.25 686 T -(To set the modifiers that, if locked, are not to be reported in matching events to passive) 108 665 T -(grabs, use) 108 652 T -1 F -(XkbSetIgnoreLockMods.) 158.99 652 T -2 11 Q -(Bool) 108 631.67 T -3 F -(XkbSetIgnor) 132.15 631.67 T -(eLockMods) 193.06 631.67 T -2 F -(\050) 248.06 631.67 T -1 F -(display) 251.73 631.67 T -(, de) 282.9 631.67 T -(vice_spec, af) 298.62 631.67 T -(fect_r) 355.24 631.67 T -(eal, r) 380.49 631.67 T -(eal_values, af) 403.31 631.67 T -(fect_virtual,) 464.21 631.67 T -(virtual_values) 252 618.67 T -2 F -(\051) 314.94 618.67 T -(Display *) 126 605.67 T -1 F -(display) 189 605.67 T -2 F -(;) 220.78 605.67 T -(/* connection to the X serv) 252 605.67 T -(er */) 370.68 605.67 T -(unsigned int) 126 592.67 T -1 F -(de) 189 592.67 T -(vice_spec) 199.22 592.67 T -2 F -(;) 241.98 592.67 T -(/* de) 252 592.67 T -(vice ID, or) 273.42 592.67 T -5 F --0.55 (XkbUseCoreKbd) 323.51 592.67 S -2 F -( */) 402.16 592.67 T -(unsigned int) 126 579.67 T -1 F -(af) 189 579.67 T -(fect_r) 197.36 579.67 T -(eal) 222.62 579.67 T -2 F -(;) 236.06 579.67 T -(/* mask of real modi\336ers af) 252 579.67 T -(fected by this call */) 373.01 579.67 T -(unsigned int) 126 566.67 T -1 F -(r) 189 566.67 T -(eal_values) 192.87 566.67 T -2 F -(;) 239.92 566.67 T -(/* v) 252 566.67 T -(alues for af) 268.53 566.67 T -(fected real modi\336ers \0501=>set, 0=>unset\051 */) 317.74 566.67 T -(unsigned int) 126 553.67 T -1 F -(af) 189 553.67 T -(fect_virtual) 197.36 553.67 T -2 F -(;) 248.08 553.67 T -(/* mask of virtual modi\336ers af) 252 553.67 T -(fected by this call */) 385.24 553.67 T -(unsigned int) 126 540.67 T -1 F -(virtual_values) 189 540.67 T -2 F -(;) 251.94 540.67 T -(/* v) 255 540.67 T -(alues for af) 271.53 540.67 T -(fected virtual modi\336ers \0501=>set, 0=>unset\051 */) 320.74 540.67 T -1 12 Q -(XkbSetIgnoreLockMods) 108 521 T -2 F -( sends a request to the server to change the server\325s) 223.31 521 T -5 F --0.6 (Ignore-) 472.24 521 S --0.6 (LockMods) 108 508 S -2 F -( control.) 160.8 508 T -1 F -(af) 203.8 508 T -(fect_r) 212.92 508 T -(eal) 240.47 508 T -2 F -( and) 255.13 508 T -1 F -(r) 278.46 508 T -(eal_values) 282.68 508 T -2 F -( are masks of real modifier bits indicating) 334.01 508 T -(which real modifiers are to be added and removed from the server\325s) 108 495 T -5 F --0.6 (IgnoreLockMods) 436.57 495 S -2 F -(control. Modifiers selected by both) 108 482 T -1 F -(af) 279.31 482 T -(fect_r) 288.43 482 T -(eal) 315.98 482 T -2 F -( and) 330.65 482 T -1 F -(r) 353.98 482 T -(eal_values) 358.2 482 T -2 F -( are added to the server\325s) 409.52 482 T -5 F --0.6 (IgnoreLockMods) 108 469 S -2 F -( control; those selected by) 200.4 469 T -1 F -(af) 328.72 469 T -(fect_r) 337.84 469 T -(eal) 365.39 469 T -2 F -( but not by) 380.05 469 T -1 F -(r) 434.73 469 T -(eal_values) 438.95 469 T -2 F -( are) 490.27 469 T -(removed from the server\325s) 108 456 T -5 F --0.6 (IgnoreLockMods) 237.96 456 S -2 F -( control. Valid values for) 330.36 456 T -1 F -(af) 453.67 456 T -(fect_r) 462.79 456 T -(eal) 490.35 456 T -2 F -( and) 505.01 456 T -1 F -(r) 108 443 T -(eal_values) 112.22 443 T -2 F -( consist of any combination of the eight core modifier bits:) 163.55 443 T -5 F --0.6 (ShiftMask) 448.52 443 S -2 F -(,) 507.92 443 T -5 F --1 -0.6 (LockMask) 108 430 B -2 F --0.46 (,) 160.8 430 P -5 F --1 -0.6 (ControlMask) 166.35 430 B -2 F --0.46 (,) 238.95 430 P -5 F --1 -0.6 (Mod1Mask) 244.49 430 B -2 F --0.46 ( -) 297.29 430 P -5 F --1 -0.6 (Mod5Mask) 306.38 430 B -2 F --0.46 (.) 359.18 430 P -1 F --0.46 (af) 364.73 430 P --0.46 (fect_virtual) 373.85 430 P -2 F --0.46 ( and) 429.18 430 P -1 F --0.46 (virtual_values) 451.59 430 P -2 F --0.46 ( are) 520.26 430 P -(masks of virtual modifier bits indicating which virtual modifiers are to be added and) 108 417 T -(removed from the server\325s) 108 404 T -5 F --0.6 (IgnoreLockMods) 237.96 404 S -2 F -( control. Modifiers selected by both) 330.36 404 T -1 F -(af) 108 391 T -(fect_virtual) 117.12 391 T -2 F -( and) 172.45 391 T -1 F -(virtual_values) 195.78 391 T -2 F -( are added to the server\325s) 264.44 391 T -5 F --0.6 (IgnoreLockMods) 387.73 391 S -2 F -( control;) 480.13 391 T -(those selected by) 108 378 T -1 F -(af) 192.98 378 T -(fect_virtual) 202.1 378 T -2 F -( but not by) 257.44 378 T -1 F -(virtual_values) 312.11 378 T -2 F -( are removed from the server\325s) 380.77 378 T -5 F --0.6 (IgnoreLockMods) 108 365 S -2 F -( control.) 200.4 365 T -(See section 7.1 for a discussion of virtual modifier masks to) 243.4 365 T -0 (use in) 108 352 P -1 F -0 (af) 139.32 352 P -0 (fect_virtual) 148.44 352 P -2 F -0 ( and) 203.77 352 P -1 F -0 (virtual_values) 227.09 352 P -2 F -0 (.) 295.76 352 P -1 F -0 (XkbSetIgnoreLockMods) 301.75 352 P -2 F -0 ( does not wait for a reply) 417.06 352 P -(from the server. It returns) 108 339 T -5 F --0.6 (True) 233.96 339 S -2 F -( if the request was sent, and) 260.36 339 T -5 F --0.6 (False) 396.34 339 S -2 F -( otherwise.) 429.34 339 T -0 F -(10.7.3) 72 314 T -(The IgnoreGr) 108 314 T -(oupLoc) 183.11 314 T -(k Contr) 226.2 314 T -(ol) 267.96 314 T -2 F -(The) 108 294 T -5 F --0.6 (IgnoreGroupLock) 129.66 294 S -2 F -( control is a boolean control with no attributes. If enabled, it) 228.66 294 T -(specifies that the locked state of the keyboard group should not be considered when acti-) 108 281 T -(vating passive grabs.) 108 268 T --0.05 (Because) 108 247 P -5 F --0.11 -0.6 (IgnoreGroupLock) 150.93 247 B -2 F --0.05 ( is a boolean control with no attributes, use the general bool-) 249.93 247 P -(ean controls functions \050see section 10.1\051 to change its state.) 108 234 T -0 F -(10.7.4) 72 209 T -(The InternalMods Contr) 108 209 T -(ol) 242.44 209 T -2 F -(The core protocol does not provide any means to prevent a modifier from being reported) 108 189 T -(in events sent to clients; Xkb, however makes this possible via the) 108 176 T -5 F --0.6 (InternalMods) 428.98 176 S -2 F -( con-) 508.18 176 T -(trol. It specifies modifiers that should be consumed by the server and not reported to cli-) 108 163 T -(ents. When a key is pressed and a modifier that has its bit set in the) 108 150 T -5 F --0.6 (InternalMods) 432.96 150 S -2 F --0.31 (control is reported to the server, the server uses the modifier when determining the actions) 108 137 P -(to apply for the key. The server then clears the bit, so it is not actually reported to the cli-) 108 124 T -(ent. In addition, modifiers specified in the) 108 111 T -5 F --0.6 (InternalMods) 312.31 111 S -2 F -( control are not used to deter-) 391.51 111 T -(mine grabs and are not used to calculate core protocol compatibility state.) 108 98 T -FMENDPAGE -%%EndPage: "70" 82 -%%Page: "71" 83 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(71) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(10 K) 437.17 744.87 T -(e) 464.09 744.87 T -(yboard Controls) 468.81 744.87 T -2 12 Q -(Manipulate the) 108 712 T -5 F --0.6 (InternalMods) 183.32 712 S -2 F -( control via the) 262.53 712 T -1 F -(internal) 337.85 712 T -2 F -( field in the) 375.85 712 T -5 F --0.6 (XkbControlsRec) 433.85 712 S -2 F -(structure, using) 108 699 T -1 F -(XkbSetContr) 184.99 699 T -(ols) 245.78 699 T -2 F -( and) 259.79 699 T -1 F -(XkbGetContr) 283.12 699 T -(ols) 346.57 699 T -2 F -( \050see sections10.9 and 10.10\051.) 360.58 699 T -(Alter-) 505.88 699 T -(nati) 108 686 T -(v) 125.7 686 T -(ely) 131.52 686 T -(, use) 145.4 686 T -1 F -(XkbSetServerInternalMods) 170.4 686 T -2 F -(.) 300.37 686 T --0.08 (To set the modifiers that are consumed by the server before events are delivered to the cli-) 108 665 P -(ent, use) 108 652 T -1 F -(XkbSetServerInternalMods.) 147.66 652 T -2 11 Q -(Bool) 108 631.67 T -3 F -(XkbSetSer) 132.15 631.67 T -(v) 182.76 631.67 T -(erInter) 188.15 631.67 T -(nalMods) 221.57 631.67 T -2 F -(\050) 262.53 631.67 T -1 F -(display) 266.19 631.67 T -(, de) 297.36 631.67 T -(vice_spec, af) 313.08 631.67 T -(fect_r) 369.7 631.67 T -(eal, r) 394.96 631.67 T -(eal_values, af) 417.77 631.67 T -(fect_virtual,) 478.68 631.67 T -(virtual_values) 252 618.67 T -2 F -(\051) 314.94 618.67 T -(Display *) 126 605.67 T -1 F -(display) 189 605.67 T -2 F -(;) 220.78 605.67 T -(/* connection to the X serv) 252 605.67 T -(er */) 370.68 605.67 T -(unsigned int) 126 592.67 T -1 F -(de) 189 592.67 T -(vice_spec) 199.22 592.67 T -2 F -(;\324) 241.98 592.67 T -(/* de) 252 592.67 T -(vice ID, or) 273.42 592.67 T -5 F --0.55 (XkbUseCoreKbd) 323.51 592.67 S -2 F -( */) 402.16 592.67 T -(unsigned int) 126 579.67 T -1 F -(af) 189 579.67 T -(fect_r) 197.36 579.67 T -(eal) 222.62 579.67 T -2 F -(;) 236.06 579.67 T -(/* mask of real modi\336ers af) 252 579.67 T -(fected by this call */) 373.01 579.67 T -(unsigned int) 126 566.67 T -1 F -(r) 189 566.67 T -(eal_values) 192.87 566.67 T -2 F -(;) 239.92 566.67 T -(/* v) 252 566.67 T -(alues for af) 268.53 566.67 T -(fected real modi\336ers \0501=>set, 0=>unset\051 */) 317.74 566.67 T -(unsigned int) 126 553.67 T -1 F -(af) 189 553.67 T -(fect_virtual) 197.36 553.67 T -2 F -(;) 248.08 553.67 T -(/* mask of virtual modi\336ers af) 252 553.67 T -(fected by this call */) 385.24 553.67 T -(unsigned int) 126 540.67 T -1 F -(virtual_values) 189 540.67 T -2 F -(;) 251.94 540.67 T -(/* v) 255 540.67 T -(alues for af) 271.53 540.67 T -(fected virtual modi\336ers \0501=>set, 0=>unset\051 */) 320.74 540.67 T -1 12 Q -(XkbSetServerInternalMods) 108 521 T -2 F -( sends a request to the server to change the internal modifiers) 237.97 521 T -(consumed by the server.) 108 508 T -1 F -(af) 227.64 508 T -(fect_r) 236.76 508 T -(eal) 264.31 508 T -2 F -( and) 278.98 508 T -1 F -(r) 302.3 508 T -(eal_values) 306.53 508 T -2 F -( are masks of real modifier bits indi-) 357.85 508 T -(cating which real modifiers are to be added and removed from the server\325s internal modi-) 108 495 T -(fiers control. Modifiers selected by both) 108 482 T -1 F -(af) 303.64 482 T -(fect_r) 312.76 482 T -(eal) 340.31 482 T -2 F -( and) 354.97 482 T -1 F -(r) 378.3 482 T -(eal_values) 382.52 482 T -2 F -( are added to the) 433.85 482 T --0.4 (server\325s internal modifiers control; those selected by) 108 469 P -1 F --0.4 (af) 360.17 469 P --0.4 (fect_r) 369.29 469 P --0.4 (eal) 396.85 469 P -2 F --0.4 ( but not by) 411.51 469 P -1 F --0.4 (r) 464.59 469 P --0.4 (eal_values) 468.82 469 P -2 F --0.4 ( are) 520.14 469 P -(removed from the server\325s internal modifiers mask. Valid values for) 108 456 T -1 F -(af) 438.26 456 T -(fect_r) 447.38 456 T -(eal) 474.94 456 T -2 F -( and) 489.6 456 T -1 F -(r) 108 443 T -(eal_values) 112.22 443 T -2 F -( consist of any combination of the eight core modifier bits:) 163.55 443 T -5 F --0.6 (ShiftMask) 448.52 443 S -2 F -(,) 507.92 443 T -5 F --1 -0.6 (LockMask) 108 430 B -2 F --0.46 (,) 160.8 430 P -5 F --1 -0.6 (ControlMask) 166.35 430 B -2 F --0.46 (,) 238.95 430 P -5 F --1 -0.6 (Mod1Mask) 244.49 430 B -2 F --0.46 ( -) 297.29 430 P -5 F --1 -0.6 (Mod5Mask) 306.38 430 B -2 F --0.46 (.) 359.18 430 P -1 F --0.46 ( af) 362.18 430 P --0.46 (fect_virtual) 373.85 430 P -2 F --0.46 ( and) 429.18 430 P -1 F --0.46 (virtual_values) 451.59 430 P -2 F --0.46 ( are) 520.26 430 P -(masks of virtual modifier bits indicating which virtual modifiers are to be added and) 108 417 T -(removed from the server\325s internal modifiers control. Modifiers selected by both) 108 404 T -1 F --0.42 (af) 108 391 P --0.42 (fect_virtual) 117.12 391 P -2 F --0.42 ( and) 172.45 391 P -1 F --0.42 (virtual_values) 194.94 391 P -2 F --0.42 ( are added to the server\325s internal modifiers control; those) 263.6 391 P --0.21 (selected by) 108 378 P -1 F --0.21 (af) 164.24 378 P --0.21 (fect_virtual) 173.35 378 P -2 F --0.21 ( but not by) 228.69 378 P -1 F --0.21 (virtual_values) 282.52 378 P -2 F --0.21 ( are removed from the server\325s internal) 351.19 378 P -(modifiers control.) 108 365 T -(See section 7.1 for a discussion of virtual modifier masks to use in) 196.99 365 T -1 F -(af) 108 352 T -(fect_virtual) 117.12 352 T -2 F -( and) 172.45 352 T -1 F -(virtual_values) 195.78 352 T -2 F -(.) 264.44 352 T -1 F -( XkbSetServerInternalMods) 267.44 352 T -2 F -( does not wait for a reply) 400.42 352 T -(from the server. It returns) 108 339 T -5 F --0.6 (True) 233.96 339 S -2 F -( if the request was sent and) 260.36 339 T -5 F --0.6 (False) 393.34 339 S -2 F -( otherwise.) 426.34 339 T -0 F -(10.8) 72 314 T -(The XkbContr) 108 314 T -(olsRec Structure) 186.43 314 T -2 F -(Many of the individual controls described in sections 10.1 through 10.7 may be manipu-) 108 294 T --0.25 (lated via convenience functions discussed in those sections. Some of them, however, have) 108 281 P -(no convenience functions. The) 108 268 T -5 F --0.6 (XkbControlsRec) 258.3 268 S -2 F -( structure allows the manipulation of) 350.7 268 T -(one or more of the controls in a single operation and to track changes to any of them in) 108 255 T -(conjunction with the) 108 242 T -1 F -(XkbGetContr) 209.66 242 T -(ols) 273.12 242 T -2 F -( and) 287.12 242 T -1 F -(XkbSetContr) 310.45 242 T -(ols) 371.24 242 T -2 F -( functions. This is the only way) 385.25 242 T -(to manipulate those controls that have no convenience functions.) 108 229 T -(The) 108 208 T -5 F --0.6 (XkbControlsRec) 129.66 208 S -2 F -( structure is defined as follows:) 222.06 208 T -2 11 Q -(#de\336ne) 126 182.67 T -(XkbMaxLe) 162 182.67 T -(g) 212.54 182.67 T -(alK) 217.99 182.67 T -(e) 233.6 182.67 T -(yCode) 238.32 182.67 T -(255) 306 182.67 T -(#de\336ne) 126 169.67 T -(XkbPerK) 162 169.67 T -(e) 203.27 169.67 T -(yBitArraySize) 207.99 169.67 T -(\050\050XkbMaxLe) 306 169.67 T -(g) 363.87 169.67 T -(alK) 369.32 169.67 T -(e) 384.92 169.67 T -(yCode+1\051/8\051) 389.64 169.67 T -(typedef struct {) 126 149.67 T -(unsigned char) 144 136.67 T -(mk_d\337t_btn;) 224.25 136.67 T -(/* def) 306.75 136.67 T -(ault b) 332 136.67 T -(utton for k) 356.53 136.67 T -(e) 402.86 136.67 T -(yboard dri) 407.58 136.67 T -(v) 452.82 136.67 T -(en mouse */) 458.15 136.67 T -(unsigned char) 144 123.67 T -(num_groups;) 224.25 123.67 T -(/* number of k) 306.75 123.67 T -(e) 371.72 123.67 T -(yboard groups */) 376.44 123.67 T -(unsigned char) 144 110.67 T -(groups_wrap;) 224.25 110.67 T -(/* ho) 306.75 110.67 T -(w to wrap out-of-bounds groups */) 328.78 110.67 T -(XkbModsRec) 144 97.67 T -(internal;) 224.25 97.67 T -(/* de\336nes serv) 306.75 97.67 T -(er internal modi\336ers */) 370.13 97.67 T -(XkbModsRec) 144 84.67 T -(ignore_lock;) 224.25 84.67 T -(/* modi\336ers to ignore when checking for grab */) 306.75 84.67 T -(unsigned int) 144 71.67 T -(enabled_ctrls;) 224.25 71.67 T -(/* 1 bit => corresponding boolean control enabled */) 306.75 71.67 T -FMENDPAGE -%%EndPage: "71" 83 -%%Page: "72" 84 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(72) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(10 K) 437.17 744.87 T -(e) 464.09 744.87 T -(yboard Controls) 468.81 744.87 T -(unsigned short) 144 712.67 T -(repeat_delay;) 224.25 712.67 T -(/* ms delay until \336rst repeat */) 306.75 712.67 T -(unsigned short) 144 699.67 T -(repeat_interv) 224.25 699.67 T -(al;) 282.01 699.67 T -(/* ms delay between repeats */) 306.75 699.67 T -(unsigned short) 144 686.67 T -(slo) 224.25 686.67 T -(w_k) 236.81 686.67 T -(e) 255.64 686.67 T -(ys_delay;) 260.36 686.67 T -(/* ms minimum time k) 306.75 686.67 T -(e) 406.88 686.67 T -(y must be do) 411.6 686.67 T -(wn to be ok */) 467.86 686.67 T -(unsigned short) 144 673.67 T -(debounce_delay;) 224.25 673.67 T -(/* ms delay before k) 306.75 673.67 T -(e) 396.46 673.67 T -(y reacti) 401.17 673.67 T -(v) 433.58 673.67 T -(ated */) 438.81 673.67 T -(unsigned short) 144 660.67 T -(mk_delay;) 224.25 660.67 T -(/* ms delay to second mouse motion e) 306.75 660.67 T -(v) 474.83 660.67 T -(ent */) 480.17 660.67 T -(unsigned short) 144 647.67 T -(mk_interv) 224.25 647.67 T -(al;) 269.2 647.67 T -(/* ms delay between repeat mouse e) 306.75 647.67 T -(v) 465.33 647.67 T -(ents */) 470.66 647.67 T -(unsigned short) 144 634.67 T -(mk_time_to_max;) 224.25 634.67 T -(/* # interv) 306.75 634.67 T -(als until constant mouse mo) 351.7 634.67 T -(v) 474.37 634.67 T -(e */) 479.7 634.67 T -(unsigned short) 144 621.67 T -(mk_max_speed;) 224.25 621.67 T -(/* multiplier for maximum mouse speed */) 306.75 621.67 T -(short) 144 608.67 T -(mk_curv) 224.25 608.67 T -(e;) 263.19 608.67 T -(/* determines mouse mo) 306.75 608.67 T -(v) 414.44 608.67 T -(e curv) 419.78 608.67 T -(e type */) 446.79 608.67 T -(unsigned short) 144 595.67 T -(ax_options;) 224.25 595.67 T -(/* 1 bit => Access X option enabled */) 306.75 595.67 T -(unsigned short) 144 582.67 T -(ax_timeout;) 224.25 582.67 T -(/* seconds until Access X disabled */) 306.75 582.67 T -(unsigned short) 144 569.67 T -(axt_opts_mask;) 224.25 569.67 T -(/* 1 bit => options to reset on Access X timeout */) 306.75 569.67 T -(unsigned short) 144 556.67 T -(axt_opts_v) 224.25 556.67 T -(alues;) 272.25 556.67 T -(/* 1 bit => turn option on, 0=> of) 306.75 556.67 T -(f */) 453.22 556.67 T -(unsigned int) 144 543.67 T -(axt_ctrls_mask;) 224.25 543.67 T -(/* which bits in) 306.75 543.67 T -1 F -(enabled_ctrls) 377.65 543.67 T -2 F -( to modify */) 437.53 543.67 T -(unsigned int) 144 530.67 T -(axt_ctrls_v) 224.25 530.67 T -(alues;) 272.86 530.67 T -(/* v) 306.75 530.67 T -(alues for ne) 323.28 530.67 T -(w bits in) 374.32 530.67 T -1 F -(enabled_ctrls) 414.97 530.67 T -2 F -( */) 474.85 530.67 T -(unsigned char) 144 517.67 T -(per_k) 224.25 517.67 T -(e) 249.19 517.67 T -(y_repeat[XkbPerK) 253.91 517.67 T -(e) 336.71 517.67 T -(yBitArraySize];) 341.43 517.67 T -( /* per k) 411.7 517.67 T -(e) 447.95 517.67 T -(y auto repeat */) 452.67 517.67 T -(}) 126 504.67 T -3 F -(XkbContr) 134.03 504.67 T -(olsRec) 182.11 504.67 T -2 F -(, *XkbControlsPtr;) 212.66 504.67 T -2 12 Q --0.36 (The general-purpose functions that work with the) 108 485 P -5 F --0.8 -0.6 (XkbControlsRec) 345.76 485 B -2 F --0.36 ( structure use a mask) 438.16 485 P --0.09 (to specify which controls are to be manipulated. Table 10.6 lists these controls, the masks) 108 472 P -(used to select them in the general function calls \050) 108 459 T -1 F -(whic) 342.96 459 T -(h) 365.45 459 T -2 F -( parameter\051, and the data fields in) 371.45 459 T --0.06 (the) 108 446 P -5 F --0.13 -0.6 (XkbControlsRec) 125.61 446 B -2 F --0.06 ( structure that comprise each of the individual controls. Also listed) 218.01 446 P -(are the bit used to turn boolean controls on and off and the section where each control is) 108 433 T -(described in more detail.) 108 420 T -3 F -(T) 268.38 400 T -(able 10.6 Xkb Contr) 275.28 400 T -(ols) 382.07 400 T -1 F -(Contr) 73 373 T -(ol) 100.47 373 T -(Contr) 157.15 380 T -(ol Selection Mask) 184.62 380 T -(\050whic) 157.15 366 T -(h par) 183.63 366 T -(ameter\051) 209.12 366 T -(Rele) 286.75 380 T -(vant XkbContr) 307.89 380 T -(olsRec) 377.69 380 T -(Data F) 286.75 366 T -(ields) 320.54 366 T -(Boolean Contr) 423.55 380 T -(ol) 494.01 380 T -(enabled_ctrls bit) 423.55 366 T -(Secti) 550.9 380 T -(on) 550.9 366 T -2 11 Q -(AccessXFeedback) 73 351.67 T -(XkbAccessXFeedbackMask) 157.15 351.67 T -(ax_options:) 286.75 351.67 T -(XkbAX_*FBMask) 295.75 338.67 T -(XkbAccessXFeedbackMask) 424.41 351.67 T -(10.6.3) 550.9 351.67 T -(AccessXK) 73 324.67 T -(e) 119.76 324.67 T -(ys) 124.48 324.67 T -(XkbAccessXK) 423.55 324.67 T -(e) 489.25 324.67 T -(ysMask) 493.97 324.67 T -(10.6.1) 550.9 324.67 T -(AccessXT) 73 310.67 T -(imeout) 118.43 310.67 T -(XkbAccessXT) 157.15 310.67 T -(imeoutMask) 221.52 310.67 T -(ax_timeout) 286.75 310.67 T -(axt_opts_mask) 286.75 297.67 T -(axt_opts_v) 286.75 284.67 T -(alues) 334.75 284.67 T -(axt_ctrls_mask) 286.75 271.67 T -(axt_ctrls_v) 286.75 258.67 T -(alues) 335.36 258.67 T -(XkbAccessXT) 423.55 310.67 T -(imeoutMask) 487.92 310.67 T -(10.6.2) 550.9 310.67 T -(AudibleBell) 73 244.67 T -(XkbAudibleBellMask) 423.55 244.67 T -(9.2) 550.9 244.67 T -(AutoReset) 73 230.67 T -(10.1.2) 550.9 230.67 T -(BounceK) 73 216.67 T -(e) 114.27 216.67 T -(ys) 118.99 216.67 T -(XkbBounceK) 157.15 216.67 T -(e) 217.36 216.67 T -(ysMask) 222.08 216.67 T -(debounce_delay) 286.75 216.67 T -(XkbBounceK) 423.55 216.67 T -(e) 483.76 216.67 T -(ysMask) 488.48 216.67 T -(10.6.7) 550.9 216.67 T -(Detectable-) 73 202.67 T -(Autorepeat) 73 189.67 T -(10.3.3) 550.9 202.67 T -(EnabledControls) 73 175.67 T -(XkbControlsEnabledMask) 157.15 175.67 T -(enabled_ctrls) 286.75 175.67 T -1 F -(Non-Boolean Contr) 423.55 175.67 T -(ol) 510.14 175.67 T -2 F -(10.1.1) 550.9 175.67 T -(GroupsWrap) 73 161.67 T -(XkbGroupsWrapMask) 157.15 161.67 T -(groups_wrap) 286.75 161.67 T -1 F -(Non-Boolean Contr) 423.55 161.67 T -(ol) 510.14 161.67 T -2 F -(10.7.1) 550.9 161.67 T -(IgnoreGroupLock) 73 147.67 T -(XkbIgnoreGroupLockMask) 423.55 147.67 T -(10.7.3) 550.9 147.67 T -(IgnoreLockMods) 73 133.67 T -(XkbIgnoreLockModsMask) 157.15 133.67 T -(ignore_lock) 286.75 133.67 T -1 F -(Non-Boolean Contr) 423.55 133.67 T -(ol) 510.14 133.67 T -2 F -(5.1) 550.9 133.67 T -(InternalMods) 73 119.67 T -(XkbInternalModsMask) 157.15 119.67 T -(internal) 286.75 119.67 T -1 F -(Non-Boolean Contr) 423.55 119.67 T -(ol) 510.14 119.67 T -2 F -(5.1) 550.9 119.67 T -(MouseK) 73 105.67 T -(e) 110.61 105.67 T -(ys) 115.33 105.67 T -(XkbMouseK) 157.15 105.67 T -(e) 213.7 105.67 T -(ysMask) 218.42 105.67 T -(mk_d\337t_btn) 286.75 105.67 T -(XkbMouseK) 423.55 105.67 T -(e) 480.1 105.67 T -(ysMask) 484.82 105.67 T -(10.5.1) 550.9 105.67 T -72 392 578.7 392 2 L -V -0.5 H -0 Z -N -72 361 578.7 361 2 L -V -N -FMENDPAGE -%%EndPage: "72" 84 -%%Page: "73" 85 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(73) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(10 K) 437.17 744.87 T -(e) 464.09 744.87 T -(yboard Controls) 468.81 744.87 T -2 12 Q -(Table 10.7 shows the actual values for the individual mask bits used to select controls for) 108 464 T -(modification and to enable and disable the control. Note that the same mask bit is used to) 108 451 T --0.19 (specify general modifications to the parameters used to configure the control \050) 108 438 P -1 F --0.19 (whic) 481.56 438 P --0.19 (h) 504.05 438 P -2 F --0.19 (\051, and) 510.05 438 P -(to enable and disable the control \050) 108 425 T -1 F -(enabled_ctrls) 270.64 425 T -2 F -(\051. The anomalies in the table \050no \322ok\323 in) 335.96 425 T -(column\051 are for controls that have no configurable attributes; and for controls that are not) 108 412 T -(boolean controls and therefore cannot be enabled or disabled.) 108 399 T -2 11 Q -(MouseK) 73 663.67 T -(e) 110.61 663.67 T -(ysAccel) 115.33 663.67 T -(XkbMouseK) 157.15 663.67 T -(e) 213.7 663.67 T -(ysAccelMask) 218.42 663.67 T -(mk_delay) 286.75 663.67 T -(mk_interv) 286.75 650.67 T -(al) 331.7 650.67 T -(mk_time_to_max) 286.75 637.67 T -(mk_max_speed) 286.75 624.67 T -(mk_curv) 286.75 611.67 T -(e) 325.69 611.67 T -(XkbMouseK) 423.55 663.67 T -(e) 480.1 663.67 T -(ysAccelMask) 484.82 663.67 T -(10.5.2) 550.9 663.67 T -(Ov) 73 597.67 T -(erlay1) 86.28 597.67 T -(XkbOv) 423.55 597.67 T -(erlay1Mask) 455.77 597.67 T -(10.4) 550.9 597.67 T -(Ov) 73 583.67 T -(erlay2) 86.28 583.67 T -(XkbOv) 423.55 583.67 T -(erlay2Mask) 455.77 583.67 T -(10.4) 550.9 583.67 T -(PerK) 73 569.67 T -(e) 95.33 569.67 T -(yRepeat) 100.05 569.67 T -(XkbPerK) 157.15 569.67 T -(e) 198.42 569.67 T -(yRepeatMask) 203.14 569.67 T -(per_k) 286.75 569.67 T -(e) 311.69 569.67 T -(y_repeat) 316.41 569.67 T -1 F -(Non-Boolean Contr) 423.55 569.67 T -(ol) 510.14 569.67 T -2 F -(10.3.1) 550.9 569.67 T -(RepeatK) 73 555.67 T -(e) 111.21 555.67 T -(ys) 115.93 555.67 T -(XkbRepeatK) 157.15 555.67 T -(e) 214.31 555.67 T -(ysMask) 219.02 555.67 T -(repeat_delay) 286.75 555.67 T -(repeat_interv) 286.75 542.67 T -(al) 344.51 542.67 T -(XkbRepeatK) 423.55 555.67 T -(e) 480.71 555.67 T -(ysMask) 485.42 555.67 T -(10.3) 550.9 555.67 T -(Slo) 73 528.67 T -(wK) 87.4 528.67 T -(e) 103.01 528.67 T -(ys) 107.73 528.67 T -(XkbSlo) 157.15 528.67 T -(wK) 190.49 528.67 T -(e) 206.1 528.67 T -(ysMask) 210.82 528.67 T -(slo) 286.75 528.67 T -(w_k) 299.31 528.67 T -(e) 318.14 528.67 T -(ys_delay) 322.86 528.67 T -(XkbSlo) 423.55 528.67 T -(wK) 456.89 528.67 T -(e) 472.5 528.67 T -(ysMask) 477.22 528.67 T -(10.6.6) 550.9 528.67 T -(Stick) 73 514.67 T -(yK) 95.45 514.67 T -(e) 108.62 514.67 T -(ys) 113.34 514.67 T -(XkbStick) 157.15 514.67 T -(yK) 198.54 514.67 T -(e) 211.71 514.67 T -(ysMask) 216.43 514.67 T -(ax_options:) 286.75 514.67 T -(XkbAX_T) 295.75 501.67 T -(w) 341.92 501.67 T -(oK) 349.75 501.67 T -(e) 362.92 501.67 T -(ysMask) 367.64 501.67 T -(XkbAX_LatchT) 295.75 488.67 T -(oLockMask) 366.96 488.67 T -(XkbStick) 423.55 514.67 T -(yK) 464.94 514.67 T -(e) 478.11 514.67 T -(ysMask) 482.83 514.67 T -(10.6.8) 550.9 514.67 T -3 12 Q -(T) 252.2 379 T -(able 10.7 Contr) 259.1 379 T -(ols Mask Bits) 340.88 379 T -1 F -(Mask Bit) 107.76 352 T -(whic) 256.68 359 T -(h or) 279.17 359 T -(c) 256.68 345 T -(hang) 261.83 345 T -(ed_ctrls) 285.71 345 T -(enabled_ctrls) 331.87 352 T -(V) 407.24 352 T -(alue) 413.24 352 T -2 11 Q -(XkbRepeatK) 107.76 330.67 T -(e) 164.91 330.67 T -(ysMask) 169.63 330.67 T -(ok) 256.68 330.67 T -(ok) 331.87 330.67 T -(\0501L<<0\051) 407.24 330.67 T -(XkbSlo) 107.76 316.67 T -(wK) 141.1 316.67 T -(e) 156.71 316.67 T -(ysMask) 161.43 316.67 T -(ok) 256.68 316.67 T -(ok) 331.87 316.67 T -(\0501L<<1\051) 407.24 316.67 T -(XkbBounceK) 107.76 302.67 T -(e) 167.97 302.67 T -(ysMask) 172.69 302.67 T -(ok) 256.68 302.67 T -(ok) 331.87 302.67 T -(\0501L<<2\051) 407.24 302.67 T -(XkbStick) 107.76 288.67 T -(yK) 149.15 288.67 T -(e) 162.32 288.67 T -(ysMask) 167.04 288.67 T -(ok) 256.68 288.67 T -(ok) 331.87 288.67 T -(\0501L<<3\051) 407.24 288.67 T -(XkbMouseK) 107.76 274.67 T -(e) 164.31 274.67 T -(ysMask) 169.03 274.67 T -(ok) 256.68 274.67 T -(ok) 331.87 274.67 T -(\0501L<<4\051) 407.24 274.67 T -(XkbMouseK) 107.76 260.67 T -(e) 164.31 260.67 T -(ysAccelMask) 169.03 260.67 T -(ok) 256.68 260.67 T -(ok) 331.87 260.67 T -(\0501L<<5\051) 407.24 260.67 T -(XkbAccessXK) 107.76 246.67 T -(e) 173.46 246.67 T -(ysMask) 178.18 246.67 T -(ok) 256.68 246.67 T -(ok) 331.87 246.67 T -(\0501L<<6\051) 407.24 246.67 T -(XkbAccessXT) 107.76 232.67 T -(imeoutMask) 172.13 232.67 T -(ok) 256.68 232.67 T -(ok) 331.87 232.67 T -(\0501L<<7\051) 407.24 232.67 T -(XkbAccessXFeedbackMask) 107.76 218.67 T -(ok) 256.68 218.67 T -(ok) 331.87 218.67 T -(\0501L<<8\051) 407.24 218.67 T -(XkbAudibleBellMask) 107.76 204.67 T -(ok) 331.87 204.67 T -(\0501L<<9\051) 407.24 204.67 T -(XkbOv) 107.76 190.67 T -(erlay1Mask) 139.98 190.67 T -(ok) 331.87 190.67 T -(\0501L<<10\051) 407.24 190.67 T -(XkbOv) 107.76 176.67 T -(erlay2Mask) 139.98 176.67 T -(ok) 331.87 176.67 T -(\0501L<<11\051) 407.24 176.67 T -(XkbIgnoreGroupLockMask) 107.76 162.67 T -(ok) 331.87 162.67 T -(\0501L<<12\051) 407.24 162.67 T -(XkbGroupsWrapMask) 107.76 148.67 T -(ok) 256.68 148.67 T -(\0501L<<27\051) 407.24 148.67 T -(XkbInternalModsMask) 107.76 134.67 T -(ok) 256.68 134.67 T -(\0501L<<28\051) 407.24 134.67 T -(XkbIgnoreLockModsMask) 107.76 120.67 T -(ok) 256.68 120.67 T -(\0501L<<29\051) 407.24 120.67 T -(XkbPerK) 107.76 106.67 T -(e) 149.03 106.67 T -(yRepeatMask) 153.75 106.67 T -(ok) 256.68 106.67 T -(\0501L<<30\051) 407.24 106.67 T -(XkbControlsEnabledMask) 107.76 92.67 T -(ok) 256.68 92.67 T -(\0501L<<31\051) 407.24 92.67 T -(XkbAccessXOptionsMask) 107.76 78.67 T -(ok) 256.68 78.67 T -(ok) 331.87 78.67 T -(\050XkbStick) 407.24 78.67 T -(yK) 452.3 78.67 T -(e) 465.46 78.67 T -(ysMask |) 470.18 78.67 T -(XkbAccessXFeedbackMask\051) 407.24 67.67 T -3 12 Q -(T) 268.38 712 T -(able 10.6 Xkb Contr) 275.28 712 T -(ols) 382.07 712 T -1 F -(Contr) 73 685 T -(ol) 100.47 685 T -(Contr) 157.15 692 T -(ol Selection Mask) 184.62 692 T -(\050whic) 157.15 678 T -(h par) 183.63 678 T -(ameter\051) 209.12 678 T -(Rele) 286.75 692 T -(vant XkbContr) 307.89 692 T -(olsRec) 377.69 692 T -(Data F) 286.75 678 T -(ields) 320.54 678 T -(Boolean Contr) 423.55 692 T -(ol) 494.01 692 T -(enabled_ctrls bit) 423.55 678 T -(Secti) 550.9 692 T -(on) 550.9 678 T -72 704 578.7 704 2 L -V -0.5 H -0 Z -N -72 673 578.7 673 2 L -V -N -106.76 371 541.24 371 2 L -V -N -106.76 340 541.24 340 2 L -V -N -FMENDPAGE -%%EndPage: "73" 85 -%%Page: "74" 86 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(74) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(10 K) 437.17 744.87 T -(e) 464.09 744.87 T -(yboard Controls) 468.81 744.87 T -2 12 Q -(The individual fields of the) 108 625 T -5 F --0.6 (XkbControlsRec) 241.66 625 S -2 F -( structure are defined as follows.) 334.06 625 T -0 11 Q -(mk_dflt_btn) 108 602.67 T -1 12 Q -(mk_dflt_btn) 108 584 T -2 F -( is an attribute of the) 165.34 584 T -5 F --0.6 (MouseKeys) 267.32 584 S -2 F -( control \050see section 10.5\051. It specifies the) 326.73 584 T -(mouse button number to use for keyboard simulated mouse button operations. Its value) 108 571 T -(should be one of the core symbols) 108 558 T -5 F --0.6 (Button1) 274.98 558 S -2 F -( -) 321.18 558 T -5 F --0.6 (Button5) 331.18 558 S -2 F -(.) 377.38 558 T -0 11 Q -(num_groups) 108 535.67 T -1 12 Q --0.42 (num_groups) 108 517 P -2 F --0.42 ( is not a part of any control, but is reported in the) 168 517 P -5 F --0.93 -0.6 (XkbControlsRec) 400.46 517 B -2 F --0.42 ( structure) 492.86 517 P -(whenever any of its components are fetched from the server. It reports the number of) 108 504 T -(groups the particular keyboard configuration uses and is computed automatically by the) 108 491 T -(server whenever the keyboard mapping changes.) 108 478 T -0 11 Q -(groups_wrap) 108 455.67 T -1 12 Q -(groups_wrap) 108 437 T -2 F -( is an attrib) 172.01 437 T -(ute of the) 225.43 437 T -5 F --0.6 (GroupsWrap) 273.76 437 S -2 F -( control \050) 339.76 437 T -(see section 10.7.1) 383.75 437 T -(\051. It speci\336es) 469.07 437 T -(the handling of ille) 108 424 T -(g) 198.82 424 T -(al groups on a global basis. V) 204.76 424 T -(alid v) 345.74 424 T -(alues for) 372.44 424 T -1 F -(groups_wrap) 417.1 424 T -2 F -( are sho) 481.1 424 T -(wn) 518.12 424 T -(in T) 108 411 T -(able 10.8.) 126.71 411 T -(When) 108 303 T -1 F -(groups_wrap) 139.66 303 T -2 F -( is set to) 203.66 303 T -5 F --0.6 (XkbRedirectIntoRange) 246.34 303 S -2 F -(, its four low-order bits specify) 378.34 303 T -(the index of the group to use.) 108 290 T -0 11 Q -(internal) 108 267.67 T -1 12 Q -(internal) 108 249 T -2 F -( is an attrib) 146 249 T -(ute of the) 199.43 249 T -5 F --0.6 (InternalMods) 247.75 249 S -2 F -( control \050see section 10.7.4\051. It speci\336es) 326.95 249 T -(modifiers to be consumed in the server and not passed on to clients when events are) 108 236 T -(reported. Valid values consist of any combination of the eight core modifier bits:) 108 223 T -5 F --0.6 (Shift-) 499.28 223 S --0.6 (Mask) 108 210 S -2 F -(,) 134.4 210 T -5 F --0.6 (LockMask) 140.4 210 S -2 F -(,) 193.2 210 T -5 F --0.6 (ControlMask) 199.2 210 S -2 F -(,) 271.8 210 T -5 F --0.6 (Mod1Mask) 277.8 210 S -2 F -( -) 330.6 210 T -5 F --0.6 (Mod5Mask) 340.6 210 S -2 F -(.) 393.4 210 T -0 11 Q -(ignore_lock) 108 187.67 T -1 12 Q -(ignore_lock) 108 169 T -2 F -( is an attrib) 165.32 169 T -(ute of the) 218.75 169 T -5 F --0.6 (IgnoreLockMods) 267.07 169 S -2 F -( control \050see section 10.7.2\051. It speci-) 359.47 169 T -(\336es) 108 156 T -(modifiers to be ignored in grab calculations. Valid values consist of any combination) 127.67 156 T -(of the eight core modifier bits:) 108 143 T -5 F --0.6 (ShiftMask) 257.32 143 S -2 F -(,) 316.72 143 T -5 F --0.6 (LockMask) 322.72 143 S -2 F -(,) 375.52 143 T -5 F --0.6 (ControlMask) 381.52 143 S -2 F -(,) 454.12 143 T -5 F --0.6 (Mod1Mask) 460.12 143 S -2 F -( -) 512.92 143 T -5 F --0.6 (Mod5Mask) 108 130 S -2 F -(.) 160.8 130 T -0 11 Q -(enabled_ctrls) 108 107.67 T -1 12 Q -(enabled_ctrls) 108 89 T -2 F -( is an attribute of the) 173.33 89 T -5 F --0.6 (EnabledControls) 275.32 89 S -2 F -( control \050see section 10.1.1\051. It) 374.32 89 T -(contains one bit per boolean control. Each bit determines whether the corresponding con-) 108 76 T -2 11 Q -(XkbAllBooleanCtrlsMask) 107.76 663.67 T -(ok) 331.87 663.67 T -(\0500x00001FFF\051) 407.24 663.67 T -(XkbAllControlsMask) 107.76 649.67 T -(ok) 256.68 649.67 T -(\0500xF8001FFF\051) 407.24 649.67 T -3 12 Q -(T) 197.02 391 T -(able 10.8 Gr) 203.92 391 T -(oupsWrap options \050) 269.7 391 T -7 F -(groups_wrap) 371.05 391 T -3 F -( \336eld\051) 435.73 391 T -1 F -(gr) 217 371 T -(oups_wr) 227.13 371 T -(ap symbolic name) 268.29 371 T -(value) 361 371 T -2 11 Q -(XkbWrapIntoRange) 217 356.67 T -(\0500x00\051) 361 356.67 T -(XkbClampIntoRange) 217 342.67 T -(\0500x40\051) 361 342.67 T -(XkbRedirectIntoRange) 217 328.67 T -(\0500x80\051) 361 328.67 T -3 12 Q -(T) 252.2 712 T -(able 10.7 Contr) 259.1 712 T -(ols Mask Bits) 340.88 712 T -1 F -(Mask Bit) 107.76 685 T -(whic) 256.68 692 T -(h or) 279.17 692 T -(c) 256.68 678 T -(hang) 261.83 678 T -(ed_ctrls) 285.71 678 T -(enabled_ctrls) 331.87 685 T -(V) 407.24 685 T -(alue) 413.24 685 T -106.76 704 541.24 704 2 L -V -0.5 H -0 Z -N -106.76 673 541.24 673 2 L -V -N -216 383 432 383 2 L -V -N -216 366 432 366 2 L -V -N -FMENDPAGE -%%EndPage: "74" 86 -%%Page: "75" 87 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(75) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(10 K) 437.17 744.87 T -(e) 464.09 744.87 T -(yboard Controls) 468.81 744.87 T -2 12 Q -(trol is enabled or disabled; a one bit means the control is enabled. The mask bits used to) 108 712 T -(enable these controls are listed in Table 10.7, using only those masks with \322ok\323 in the) 108 699 T -1 F -(enabled_ctrls) 108 686 T -2 F -( column.) 173.33 686 T -0 11 Q -(repeat_delay and repeat_interval) 108 663.67 T -1 12 Q -(repeat_delay) 108 645 T -2 F -( and) 170.65 645 T -1 F -(repeat_interval) 193.98 645 T -2 F -( are attrib) 267.97 645 T -(utes of the) 313.72 645 T -5 F --0.6 (RepeatKeys) 366.71 645 S -2 F -( control \050see section) 432.71 645 T -(10.3.2\051.) 108 632 T -1 F -(repeat_delay) 148 632 T -2 F -( is the initial delay before a k) 210.65 632 T -(e) 350.17 632 T -(y be) 355.32 632 T -(gins repeating, in milliseconds;) 375.47 632 T -1 F -(repeat_interval) 108 619 T -2 F -( is the delay between subsequent k) 181.99 619 T -(e) 347.84 619 T -(y e) 352.99 619 T -(v) 367.02 619 T -(ents, in milliseconds.) 372.84 619 T -0 11 Q -(slow_keys_delay) 108 596.67 T -1 12 Q -(slow_keys_delay) 108 578 T -2 F -( is an attrib) 188.65 578 T -(ute of the) 242.08 578 T -5 F --0.6 (SlowKeys) 290.4 578 S -2 F -( control \050see section 10.6.6\051. Its v) 343.2 578 T -(alue) 503.21 578 T -(speci\336es the) 108 565 T -5 F --0.6 (SlowKeys) 169.99 565 S -2 F -( acceptance delay period in milliseconds before a k) 222.79 565 T -(e) 467.94 565 T -(y press is) 473.09 565 T -(accepted by the serv) 108 552 T -(er) 205.45 552 T -(.) 214.12 552 T -0 11 Q -(debounce_delay) 108 529.67 T -1 12 Q -(debounce_delay) 108 511 T -2 F -( is an attrib) 185.98 511 T -(ute of the) 239.4 511 T -5 F --0.6 (BounceKeys) 287.72 511 S -2 F -( control \050see section 10.6.7\051. Its v) 353.73 511 T -(alue) 513.73 511 T --0.26 (speci\336es the) 108 498 P -5 F --0.57 -0.6 (BounceKeys) 169.47 498 B -2 F --0.26 ( delay period in milliseconds for which the k) 235.47 498 P --0.26 (e) 447.91 498 P --0.26 (y is disabled after) 453.06 498 P -(ha) 108 485 T -(ving been pressed before another press of the same k) 119.09 485 T -(e) 372.56 485 T -(y is accepted by the serv) 377.71 485 T -(er) 495.17 485 T -(.) 503.83 485 T -0 11 Q -(mk_delay, mk_interval, mk_time_to_max, mk_max_speed, and mk_curve) 108 462.67 T -1 12 Q -(mk_delay) 108 444 T -2 F -(,) 153.98 444 T -1 F -(mk_interval) 159.98 444 T -2 F -(,) 217.31 444 T -1 F -(mk_time_to_max) 223.31 444 T -2 F -(,) 305.29 444 T -1 F -(mk_max_speed) 311.29 444 T -2 F -(, and) 384.6 444 T -1 F -(mk_curve) 410.93 444 T -2 F -( are attrib) 457.57 444 T -(utes of) 503.32 444 T --0.33 (the) 108 431 P -5 F --0.74 -0.6 (MouseKeysAccel) 125.33 431 B -2 F --0.33 ( control. Refer to section 10.5.2 for a description of these \336elds and) 217.73 431 P -(the units in) 108 418 T -(v) 160.86 418 T -(olv) 166.62 418 T -(ed.) 181.78 418 T -0 11 Q -(ax_options) 108 395.67 T -2 12 Q -(The) 108 377 T -1 F -(ax_options) 129.66 377 T -2 F -( field contains attributes used to configure two different controls, the) 182.33 377 T -5 F --0.6 (StickyKeys) 108 364 S -2 F -( control \050see section 10.6.8\051 and the) 174 364 T -5 F --0.6 (AccessXFeedback) 348.3 364 S -2 F -( control \050see sec-) 447.3 364 T -(tion 10.6.3\051. The) 108 351 T -1 F -(ax_options) 191.33 351 T -2 F -( field is a bitmask and may include any combination of the) 244 351 T -(bits defined in Table 10.9.) 108 338 T -3 F -(T) 182.25 318 T -(able 10.9 Access X Enable/Disable Bits \050) 189.15 318 T -7 F -(ax_options) 396.49 318 T -3 F -( \336eld\051) 450.5 318 T -1 F -(Access X Contr) 172 298 T -(ol) 245.45 298 T -(ax_options bit) 262 298 T -(value) 406 298 T -2 11 Q -(AccessXFeedback) 172 283.67 T -(XkbAX_SKPressFBMask) 262 283.67 T -(\0501L<<0\051) 406 283.67 T -(XkbAX_SKAcceptFBMask) 262 269.67 T -(\0501L << 1\051) 406 269.67 T -(XkbAX_FeatureFBMask) 262 255.67 T -(\0501L << 2\051) 406 255.67 T -(XkbAX_Slo) 262 241.67 T -(wW) 316.73 241.67 T -(arnFBMask) 334.17 241.67 T -(\0501L << 3\051) 406 241.67 T -(XkbAX_IndicatorFBMask) 262 227.67 T -(\0501L << 4\051) 406 227.67 T -(XkbAX_Stick) 262 213.67 T -(yK) 324.78 213.67 T -(e) 337.94 213.67 T -(ysFBMask) 342.66 213.67 T -(\0501L << 5\051) 406 213.67 T -(XkbAX_SKReleaseFBMask) 262 199.67 T -(\0501L << 8\051) 406 199.67 T -(XkbAX_SKRejectFBMask) 262 185.67 T -(\0501L << 9\051) 406 185.67 T -(XkbAX_BKRejectFBMask) 262 171.67 T -(\0501L << 10\051) 406 171.67 T -(XkbAX_DumbBellFBMask) 262 157.67 T -(\0501L << 11\051) 406 157.67 T -(Stick) 172 143.67 T -(yK) 194.45 143.67 T -(e) 207.62 143.67 T -(ys) 212.34 143.67 T -(XkbAX_T) 262 143.67 T -(w) 308.17 143.67 T -(oK) 316 143.67 T -(e) 329.17 143.67 T -(ysMask) 333.89 143.67 T -(\0501L << 6\051) 406 143.67 T -(XkbAX_LatchT) 262 129.67 T -(oLockMask) 333.21 129.67 T -(\0501L << 7\051) 406 129.67 T -(XkbAX_AllOptionsMask) 262 115.67 T -(\0500xFFF\051) 406 115.67 T -171 310 477 310 2 L -V -0.5 H -0 Z -N -171 293 477 293 2 L -V -N -FMENDPAGE -%%EndPage: "75" 87 -%%Page: "76" 88 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(76) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(10 K) 437.17 744.87 T -(e) 464.09 744.87 T -(yboard Controls) 468.81 744.87 T -2 12 Q -(The fields pertaining to each control are relevant only when the) 108 712 T -2 11 Q -(control is enabled \050) 415.6 712 T -5 12 Q --0.6 (XkbAc-) 500.22 712 S --0.6 (cessXFeedbackMask) 108 699 S -2 F -( or) 220.2 699 T -5 F --0.6 (XkbStickyKeysMask) 236.2 699 S -2 F -( bit is turned on in the) 348.4 699 T -1 F -(enabled_cntrls) 456.74 699 T -2 F -(field\051.) 108 686 T -(Xkb provides a set of convenience macros for working with the) 108 665 T -1 F -(ax_options) 416.27 665 T -2 F -( field of an) 468.94 665 T -5 F --0.6 (XkbControlsRec) 108 652 S -2 F -( structure:) 200.4 652 T -2 11 Q -(#de\336ne) 126 626.67 T -3 F -(XkbAX_NeedOption) 162 626.67 T -2 F -(\050c,w\051) 260.39 626.67 T -(\050\050c\051->ax_options&\050w\051\051) 306 626.67 T -2 12 Q -(The) 108 606 T -1 F -(XkbAX_NeedOption) 129.66 606 T -2 F -( macro is useful for determining whether a particular AccessX) 226.98 606 T --0.25 (option is enabled or not. It accepts a pointer to an) 108 593 P -5 F --0.55 -0.6 (XkbControlsRec) 345.21 593 B -2 F --0.25 ( structure and a valid) 437.61 593 P -(mask bit from Table 10.9. If the specified mask bit in the) 108 580 T -1 F -(ax_options) 384.64 580 T -2 F -( field of the controls) 437.3 580 T -(structure is set, the macro returns the mask bit. Otherwise, it returns zero. Thus,) 108 567 T -(XkbAX_NeedOption\050ctlrec, XkbAX_) 108 546 T -2 11 Q -(LatchT) 291.29 546 T -(oLockMask) 322.18 546 T -2 12 Q -(\051) 374.72 546 T -(is nonzero if the latch to lock transition for latching keys is enabled, and zero if it is dis-) 108 525 T -(abled. Note that) 108 512 T -1 F -(XkbAX_NeedOption) 187.32 512 T -2 F -( only determines whether or not the particular capa-) 284.64 512 T -(bility is configured to operate; the) 108 499 T -5 F --0.6 (XkbAccessXFeedbackMask) 273.98 499 S -2 F -( bit must also be turned) 419.19 499 T -(on in) 108 486 T -1 F -(enabled_ctrls) 135.34 486 T -2 F -( for the capability to actually be functioning.) 200.66 486 T -2 11 Q -(#de\336ne) 126 460.67 T -3 F -(XkbAX_AnyF) 162 460.67 T -(eedback) 229.56 460.67 T -2 F -(\050c\051) 268.06 460.67 T -(\050\050c\051->enabled_ctrls&XkbAccessXFeedbackMask\051) 306 460.67 T -2 12 Q -(The) 108 440 T -1 F -(XkbAX_AnyF) 129.66 440 T -(eebac) 194.08 440 T -(k) 221.82 440 T -2 F -( macro accepts a pointer to an) 227.15 440 T -5 F --0.6 (XkbControlsRec) 373.44 440 S -2 F -( structure and) 465.84 440 T --0.47 (tells whether the) 108 427 P -5 F --1.03 -0.6 (AccessXFeedback) 188.91 427 B -2 F --0.47 ( control is enabled or not. If the) 287.91 427 P -5 F --1.03 -0.6 (AccessXFeedback) 438.47 427 B -2 F -(control is enabled, the macro returns) 108 414 T -5 F --0.6 (XkbAccessXFeedbackMask) 286.3 414 S -2 F -(. Otherwise, it returns) 431.5 414 T -(zero.) 108 401 T -2 11 Q -(#de\336ne) 126 375.67 T -3 F -(XkbAX_NeedF) 162 375.67 T -(eedback) 233.83 375.67 T -2 F -(\050c,w\051) 272.33 375.67 T -(\050XkbAX_An) 162 362.67 T -(yFeedback\050c\051&&XkbAX_NeedOption\050c,w\051\051) 219.27 362.67 T -2 12 Q -(The) 108 342 T -1 F -(XkbAX_NeedF) 129.66 342 T -(eedbac) 200.08 342 T -(k) 233.82 342 T -2 F -( macro is useful for determining if both the) 239.15 342 T -5 F --0.6 (AccessXFeed-) 448.79 342 S --0.6 (back) 108 329 S -2 F -( control and a particular AccessX feedback option are enabled. The macro accepts a) 134.4 329 T -(pointer to an) 108 316 T -5 F --0.6 (XkbControlsRec) 171.66 316 S -2 F -( structure and a feedback option from the table above. If) 264.06 316 T -(both the) 108 303 T -5 F --0.6 (AccessXFeedback) 150 303 S -2 F -( control and the specified feedback option are enabled, the) 249 303 T -(macro returns) 108 290 T -5 F --0.6 (True) 177.31 290 S -2 F -(. Otherwise it returns) 203.71 290 T -5 F --0.6 (False) 308.03 290 S -2 F -(.) 341.03 290 T -0 11 Q -(ax_timeout, axt_opts_mask, axt_opts_values, axt_ctrls_mask, and) 108 267.67 T -(axt_ctrls_values) 108 255.67 T -1 12 Q -(ax_timeout) 108 237 T -2 F -(,) 161.33 237 T -1 F -(act_opts_mask) 167.33 237 T -2 F -(,) 238.66 237 T -1 F -(axt_opts_values) 244.66 237 T -2 F -(,) 321.98 237 T -1 F -(axt_ctrls_mask) 327.98 237 T -2 F -(, and) 400.64 237 T -1 F -(axt_ctrls_values) 426.97 237 T -2 F -( are) 505.63 237 T -(attrib) 108 224 T -(utes of the) 133.09 224 T -5 F --0.6 (AccessXTimeout) 186.08 224 S -2 F -( control. Refer to section 10.6.2 for a description of) 278.49 224 T -(these \336elds and the units in) 108 211 T -(v) 237.85 211 T -(olv) 243.61 211 T -(ed.) 258.77 211 T -0 11 Q -(per_key_repeat) 108 188.67 T -2 12 Q --0.2 (The) 108 170 P -1 F --0.2 (per_key_repeat) 129.46 170 P -2 F --0.2 ( field mirrors the) 204.1 170 P -1 F --0.2 (auto_repeats) 287.26 170 P -2 F --0.2 ( field of the core protocol) 349.93 170 P -5 F --0.45 -0.6 (XKeyboard-) 474 170 B --0.6 (State) 108 157 S -2 F -( structure: changing the) 141 157 T -1 F -(auto_repeats) 256.98 157 T -2 F -( field automatically changes) 319.64 157 T -1 F -(per_key_repeat) 457.62 157 T -2 F --0.13 (and vice versa. It is provided for convenience and to reduce protocol traffic. For example,) 108 144 P -(to obtain the individual repeat key behavior as well as the repeat delay and rate, use) 108 131 T -1 F -(Xkb-) 512.24 131 T --0.07 (GetContr) 108 118 P --0.07 (ols) 152.8 118 P -2 F --0.07 (. If the) 166.8 118 P -1 F --0.07 (per_key_repeat) 201.24 118 P -2 F --0.07 ( were not in this structure, you would have to call both) 275.88 118 P -1 F --0.27 (XGetK) 108 105 P --0.27 (e) 140.24 105 P --0.27 (yboar) 145.21 105 P --0.27 (dContr) 172.76 105 P --0.27 (ol) 206.23 105 P -2 F --0.27 ( and) 215.57 105 P -1 F --0.27 (XkbGetContr) 238.35 105 P --0.27 (ols) 301.8 105 P -2 F --0.27 ( to get this information. The bits correspond to) 315.81 105 P --0.25 (keycodes. The first seven keys \050keycodes 1-7\051 are indicated in) 108 92 P -1 F --0.25 (per_k) 407.05 92 P --0.25 (e) 434.25 92 P --0.25 (y_r) 439.22 92 P --0.25 (epeat) 454.77 92 P -2 F --0.25 ([0], with bit) 480.76 92 P -FMENDPAGE -%%EndPage: "76" 88 -%%Page: "77" 89 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(77) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(10 K) 437.17 744.87 T -(e) 464.09 744.87 T -(yboard Controls) 468.81 744.87 T -2 12 Q --0.3 (position 0 \050low order\051 corresponding to the fictitious keycode 0. Following array elements) 108 712 P -(correspond to 8 keycodes per element. A 1 bit indicates that the key is a repeating key.) 108 699 T -0 F -(10.9) 72 674 T -(Quer) 108 674 T -(ying Contr) 136.13 674 T -(ols) 195.89 674 T -2 F -(Use) 108 654 T -1 F -(XkbGetControls) 129.66 654 T -2 F -( to find the current state of Xkb server controls.) 207.66 654 T -2 11 Q -(Status) 108 633.67 T -3 F -(XkbGetContr) 137.65 633.67 T -(ols) 202.83 633.67 T -2 F -(\050) 215.67 633.67 T -1 F -(display) 219.33 633.67 T -(, whic) 250.51 633.67 T -(h, xkb\051) 276.62 633.67 T -2 F -(Display *) 126 620.67 T -1 F -(display) 234 620.67 T -2 F -(;) 265.78 620.67 T -(/* connection to X serv) 306 620.67 T -(er */) 408.49 620.67 T -(unsigned long) 126 607.67 T -1 F -(whic) 234 607.67 T -(h) 254.61 607.67 T -2 F -(;) 260.11 607.67 T -(/* mask of controls requested */) 306 607.67 T -(XkbDescPtr) 126 594.67 T -1 F -(xkb) 234 594.67 T -2 F -(;) 249.27 594.67 T -(/* k) 306 594.67 T -(e) 322.7 594.67 T -(yboard description for controls information*/) 327.42 594.67 T -1 12 Q --0.28 (XkbGetContr) 108 575 P --0.28 (ols) 171.46 575 P -2 F --0.28 ( queries the server for the requested control information, waits for a reply,) 185.46 575 P --0.19 (and then copies the server\325s values for the requested information into the) 108 562 P -1 F --0.19 (ctrls) 458.26 562 P -2 F --0.19 ( structure of) 479.6 562 P -(the) 108 549 T -1 F -(xkb) 125.66 549 T -2 F -( argument. Only those components specified by the) 142.32 549 T -1 F -(whic) 391.96 549 T -(h) 414.44 549 T -2 F -( parameter are copied.) 420.44 549 T -(Valid values for) 108 536 T -1 F -(which) 188.32 536 T -2 F -( are any combination of the masks listed in Table 10.7 that have) 216.98 536 T -(\322ok\323 in the) 108 523 T -1 F -(whic) 163.66 523 T -(h) 186.14 523 T -2 F -( column.) 192.14 523 T -(If) 108 502 T -1 F -(xkb) 118.99 502 T -2 F -(->) 135.65 502 T -1 F -(ctrls) 146.41 502 T -2 F -(is) 170.75 502 T -5 F --0.6 (NULL) 181.75 502 S -2 F -(,) 208.15 502 T -1 F -(XkbGetContr) 214.15 502 T -(ols) 277.61 502 T -2 F -( allocates and initializes it before obtaining the val-) 291.61 502 T -(ues specified by) 108 489 T -1 F -(which) 188.32 489 T -2 F -(. If) 216.98 489 T -1 F -(xkb) 233.98 489 T -2 F -(->) 250.63 489 T -1 F -(ctrls) 261.4 489 T -2 F -( is not) 282.73 489 T -5 F --0.6 (NULL) 315.07 489 S -2 F -(,) 341.47 489 T -1 F -(XkbGetContr) 347.47 489 T -(ols) 410.93 489 T -2 F -( modifies only those) 424.93 489 T -(portions of) 108 476 T -1 F -(xkb) 163.33 476 T -2 F -(->) 179.99 476 T -1 F -(ctrls) 190.75 476 T -2 F -( corresponding to the values specified by) 212.09 476 T -1 F -(whic) 411.72 476 T -(h) 434.21 476 T -2 F -(.) 440.21 476 T -1 F -(XkbGetContr) 108 455 T -(ols) 171.46 455 T -2 F -( returns) 185.46 455 T -5 F --0.6 (Success) 224.78 455 S -2 F -( if successful; otherwise, it returns) 270.98 455 T -5 F --0.6 (BadAlloc) 438.62 455 S -2 F -( if it can-) 491.43 455 T -(not obtain sufficient storage,) 108 442 T -5 F --0.6 (BadMatch) 248.32 442 S -2 F -( if) 301.12 442 T -1 F -(xkb) 314.45 442 T -2 F -( is) 331.11 442 T -5 F --0.6 (NULL) 345.11 442 S -2 F -( or) 371.51 442 T -1 F -(whic) 387.51 442 T -(h) 409.99 442 T -2 F -( is empty, or) 415.99 442 T -5 F --0.6 (BadImple-) 478.99 442 S --0.6 (mentation) 108 429 S -2 F -(.) 167.4 429 T -(To free the) 108 408 T -1 F -(ctrls) 163.64 408 T -2 F -( member of a keyboard description, use) 184.98 408 T -1 F -(XkbF) 377.6 408 T -(r) 402.94 408 T -(eeContr) 407.16 408 T -(ols) 445.28 408 T -2 F -( \050see section) 459.29 408 T -(10.12\051) 108 395 T -(The) 108 374 T -1 F -(num_groups) 129.66 374 T -2 F -( field in the) 189.66 374 T -1 F -(ctrls) 247.66 374 T -2 F -( structure is always filled in by) 268.99 374 T -1 F -(XkbGetContr) 419.98 374 T -(ols) 483.43 374 T -2 F -(, regard-) 497.44 374 T -(less of which bits are selected by) 108 361 T -1 F -(which) 268.97 361 T -2 F -(.) 297.64 361 T -0 F -(10.10) 72 336 T -(Changing Contr) 108 336 T -(ols) 198.42 336 T -2 F -(There are two ways to make changes to controls: either change a local copy keyboard) 108 316 T -(description and call) 108 303 T -1 F -(XkbSetContr) 204.98 303 T -(ols) 265.78 303 T -2 F -(, or, to reduce network traffic, use an) 279.78 303 T -5 F --0.6 (XkbCon-) 460.06 303 S --0.6 (trolsChangesRec) 108 290 S -2 F -( structure and call) 207 290 T -1 F -(XkbChang) 295.65 290 T -(eContr) 346.19 290 T -(ols) 378.99 290 T -2 F -(.) 392.99 290 T --0.16 (To change the state of one or more controls, first modify the) 108 269 P -1 F --0.16 (ctrls) 398.33 269 P -2 F --0.16 ( structure in a local copy) 419.67 269 P -(of the keyboard description and then use) 108 256 T -1 F -(XkbSetControls) 305.63 256 T -2 F -( to copy those changes to the X) 380.96 256 T -(server.) 108 243 T -2 11 Q -(Bool) 108 222.67 T -3 F -(XkbSetContr) 132.15 222.67 T -(ols) 194.89 222.67 T -2 F -(\050) 207.73 222.67 T -1 F -(display) 211.39 222.67 T -(, whic) 242.56 222.67 T -(h, xkb\051) 268.68 222.67 T -2 F -(Display *) 126 209.67 T -1 F -(display) 234 209.67 T -2 F -(;) 265.78 209.67 T -(/* connection to X serv) 306 209.67 T -(er */) 408.49 209.67 T -(unsigned long) 126 196.67 T -1 F -(whic) 234 196.67 T -(h) 254.61 196.67 T -2 F -(;) 260.11 196.67 T -(/* mask of controls to change */) 306 196.67 T -(XkbDescPtr) 126 183.67 T -1 F -(xkb) 234 183.67 T -2 F -(;) 249.27 183.67 T -(/*) 306 183.67 T -1 12 Q -(ctrls) 317.31 183.67 T -2 11 Q -( \336eld contains ne) 338.64 183.67 T -(w v) 413.22 183.67 T -(alues to be set */) 429.14 183.67 T -2 12 Q -(For each bit that is set in the) 108 164 T -1 F -(whic) 246.66 164 T -(h) 269.15 164 T -2 F -( parameter,) 275.15 164 T -1 F -(XkbSetContr) 332.12 164 T -(ols) 392.92 164 T -2 F -( sends the corresponding) 406.92 164 T --0.05 (values from the) 108 151 P -1 F --0.05 (xkb) 185.51 151 P -2 F --0.05 (->) 202.17 151 P -1 F --0.05 (ctrls) 212.93 151 P -2 F --0.05 ( field to the server. Valid values for) 234.27 151 P -1 F --0.05 (which) 407.53 151 P -2 F --0.05 ( are any combination) 436.2 151 P -(of the masks listed in Table 10.7 that have \322ok\323 in the) 108 138 T -1 F -(whic) 369.64 138 T -(h) 392.12 138 T -2 F -( column.) 398.12 138 T --0.2 (If) 108 117 P -1 F --0.2 (xkb) 118.79 117 P -2 F --0.2 (->) 135.45 117 P -1 F --0.2 (ctrls) 146.21 117 P -2 F --0.2 ( is) 167.55 117 P -5 F --0.44 -0.6 (NULL) 181.15 117 B -2 F --0.2 (, the server does not support a compatible version of Xkb, or the Xkb) 207.55 117 P -(extension has not been properly initialized,) 108 104 T -1 F -(XkbSetContr) 317.64 104 T -(ols) 378.43 104 T -2 F -( returns) 392.44 104 T -5 F --0.6 (False) 431.76 104 S -2 F -(. Otherwise, it) 464.76 104 T -(sends the request to the X server and returns) 108 91 T -5 F --0.6 (True) 323.62 91 S -2 F -(.) 350.02 91 T -FMENDPAGE -%%EndPage: "77" 89 -%%Page: "78" 90 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(78) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(10 K) 437.17 744.87 T -(e) 464.09 744.87 T -(yboard Controls) 468.81 744.87 T -2 12 Q --0.31 (Note that changes to attributes of controls in the) 108 712 P -5 F --0.68 -0.6 (XkbControlsRec) 338.87 712 B -2 F --0.31 ( structure are apparent) 431.27 712 P -(only when the associated control is enabled, although the corresponding values are still) 108 699 T -(updated in the X server. For example, the) 108 686 T -1 F -(repeat_delay) 309.96 686 T -2 F -( and) 372.61 686 T -1 F -(repeat_interval) 395.94 686 T -2 F -( fields are) 469.93 686 T -(ignored unless the) 108 673 T -5 F --0.6 (RepeatKeys) 198.32 673 S -2 F -( control is enabled \050that is, the X server\325s equivalent of) 264.33 673 T -1 F -0 (xkb->ctrls) 108 660 P -2 F -0 ( has) 158.09 660 P -5 F -0 -0.6 (XkbRepeatKeyMask) 180.08 660 B -2 F -0 ( set in) 285.68 660 P -1 F -0 (enabled_ctrls) 317.35 660 P -2 F -0 (\051. It is permissible to modify the) 382.68 660 P --0.37 (attributes of a control in one call to XkbSetControls and enable the control in a subsequent) 108 647 P -(call. See section 10.1.1 for more information on enabling and disabling controls.) 108 634 T --0.05 (Note that the) 108 613 P -1 F --0.05 (enabled_ctrls) 172.85 613 P -2 F --0.05 ( field is itself a control \321 the) 238.18 613 P -5 F --0.1 -0.6 (EnabledControls) 381.81 613 B -2 F --0.05 ( control. As) 480.81 613 P --0.46 (such, to set a specific configuration of enabled and disabled boolean controls, you must set) 108 600 P -1 F -(enabled_ctrls) 108 587 T -2 F -( to the appropriate bits to enable only the controls you want and disable all) 173.33 587 T -(others, then specify the) 108 574 T -5 F --0.6 (XkbControlsEnabledMask) 222.31 574 S -2 F -( in a call to) 367.52 574 T -1 F -(XkbSetContr) 423.84 574 T -(ols) 484.64 574 T -2 F -(.) 498.64 574 T -(Because this is somewhat awkward if all you want to do is enable and disable controls,) 108 561 T --0.26 (and not modify any of their attributes, a convenience function is also provided for this pur-) 108 548 P -(pose \050) 108 535 T -1 F -(XkbChang) 136.99 535 T -(eEnabledContr) 187.54 535 T -(ols) 260.33 535 T -2 F -(, section 10.1.1\051.) 274.33 535 T -0 F -(10.10.1) 72 510 T -(The XkbContr) 112.03 510 T -(olsChang) 190.46 510 T -(esRec Structure) 245.26 510 T -2 F -(The) 108 490 T -5 F --0.6 (XkbControlsChangesRec) 129.66 490 S -2 F -( structure allows applications to track modifications to) 268.26 490 T --0.47 (an) 108 477 P -5 F --1.04 -0.6 (XkbControlsRec) 121.85 477 B -2 F --0.47 ( structure and thereby reduce the amount of traffic sent to the server.) 214.26 477 P -(The same) 108 464 T -5 F --0.6 (XkbControlsChangesRec) 157.32 464 S -2 F -( structure may be used in several successive modi-) 295.92 464 T -(fications to the same) 108 451 T -5 F --0.6 (XkbControlsRec) 209.99 451 S -2 F -( structure, then subsequently used to cause all of) 302.39 451 T -(the changes, and only the changes, to be propagated to the server. The) 108 438 T -5 F --0.6 (XkbCon-) 447.25 438 S --0.6 (trolsChangesRec) 108 425 S -2 F -( structure is defined as follows:) 207 425 T -2 11 Q -(typedef struct _XkbControlsChanges {) 126 404.67 T -(unsigned) 144 391.67 T -(int) 186.47 391.67 T -( changed_ctrls;) 198.09 391.67 T -(/* bits indicating changed control data */) 314.25 391.67 T -(unsigned) 144 378.67 T -( int) 183.72 378.67 T -( enabled_ctrls_changes;) 198.09 378.67 T -(/* bits indicating enabled/disabled controls */) 314.25 378.67 T -(Bool) 144 365.67 T -( num_groups_changed;) 198 365.67 T -(/*) 314.25 365.67 T -5 12 Q --0.6 (True) 325.56 365.67 S -2 11 Q -( if number of k) 351.96 365.67 T -(e) 417.84 365.67 T -(yboard groups changed */) 422.56 365.67 T -(}) 126 352.67 T -3 F -(XkbContr) 134.03 352.67 T -(olsChangesRec) 182.11 352.67 T -2 F -(,*XkbControlsChangesPtr;) 252.99 352.67 T -2 12 Q -(The) 108 333 T -1 F -(c) 129.66 333 T -(hang) 134.81 333 T -(ed_ctrls) 158.69 333 T -2 F -( field is a mask specifying which logical sets of data in the controls) 197.35 333 T -(structure have been modified. In this context, modified means) 108 320 T -1 F -(set) 408.29 320 T -2 F -(, that is, if a value is set) 421.62 320 T -(to the same value it previously contained, it has still been modified, and is noted as) 108 307 T --0.11 (changed. Valid values for) 108 294 P -1 F --0.11 (changed_ctrls) 233.84 294 P -2 F --0.11 ( are any combination of the masks listed in Table) 301.84 294 P -(10.7 that have \322ok\323 in the) 108 281 T -1 F -(c) 234.31 281 T -(hang) 239.46 281 T -(ed_ctrls) 263.34 281 T -2 F -( column. Setting a bit implies the corresponding) 302 281 T -(data fields from the \322Relevant XkbControlsRec Data Fields\323 column in Table 10.6 have) 108 268 T -(been modified. The) 108 255 T -1 F -(enabled_ctrls_changes) 204.65 255 T -2 F -( field specifies which bits in the) 315.3 255 T -1 F -(enabled_ctrls) 470.95 255 T -2 F -(field have changed. If the number of keyboard groups has changed, the) 108 242 T -1 F -(num_groups_changed) 108 229 T -2 F -( field is set to) 214.66 229 T -5 F --0.6 (True) 282.32 229 S -2 F -(.) 308.72 229 T -(If you have an Xkb description with controls that have been modified and an) 108 208 T -5 F --0.6 (XkbCon-) 479.27 208 S --0.6 (trolsChangesRec) 108 195 S -2 F -( that describes the changes that have been made, the) 207 195 T -1 F -(XkbChang) 459.94 195 T -(eCon-) 510.48 195 T -(tr) 108 182 T -(ols) 115.46 182 T -2 F -( function provides a flexible method for updating the controls in a server to match) 129.47 182 T -(those in the changed keyboard description.) 108 169 T -2 11 Q -(Bool) 108 148.67 T -3 F -(XkbChangeContr) 132.15 148.67 T -(ols) 216.28 148.67 T -2 F -(\050) 229.12 148.67 T -1 F -(dpy) 232.78 148.67 T -(, xkb, c) 248.06 148.67 T -(hang) 279.05 148.67 T -(es) 300.94 148.67 T -2 F -(\051) 310.1 148.67 T -(Display *) 126 135.67 T -1 F -(dpy) 261 135.67 T -2 F -(;) 276.88 135.67 T -(/* connection to X serv) 306 135.67 T -(er */) 408.49 135.67 T -(XkbDescPtr) 126 122.67 T -1 F -(xkb) 261 122.67 T -2 F -(;) 276.27 122.67 T -(/* k) 306 122.67 T -(e) 322.7 122.67 T -(yboard description with changed) 327.42 122.67 T -1 F -(xkb->ctrls) 474.06 122.67 T -2 F -( */) 519.97 122.67 T -(XkbControlsChangesPtr) 126 109.67 T -1 F -(c) 261 109.67 T -(hang) 265.72 109.67 T -(es) 287.61 109.67 T -2 F -(;) 296.77 109.67 T -(/* which parts of) 306 109.67 T -1 F -(xkb->ctrls) 382.99 109.67 T -2 F -( ha) 428.9 109.67 T -(v) 441.82 109.67 T -(e changed */) 447.15 109.67 T -1 12 Q -(XkbChang) 108 90 T -(eContr) 158.54 90 T -(ols) 191.34 90 T -2 F -( copies any controls fields specified by) 205.34 90 T -1 F -(c) 394.98 90 T -(hang) 400.13 90 T -(es) 424.01 90 T -2 F -( from the keyboard) 434 90 T -(description controls structure,) 108 77 T -1 F -(xkb) 253.98 77 T -2 F -(->) 270.64 77 T -1 F -(ctrls) 281.4 77 T -2 F -(, to the server specified by) 302.74 77 T -1 F -(dpy) 432.37 77 T -2 F -(.) 449.7 77 T -FMENDPAGE -%%EndPage: "78" 90 -%%Page: "79" 91 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(79) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(10 K) 437.17 744.87 T -(e) 464.09 744.87 T -(yboard Controls) 468.81 744.87 T -0 12 Q -(10.11) 72 712 T -(T) 108 712 T -(rac) 114.37 712 T -(king Chang) 132.14 712 T -(es to K) 197.6 712 T -(e) 237.43 712 T -(yboar) 243.92 712 T -(d Contr) 276.36 712 T -(ols) 318.78 712 T -2 F -(Whenever a field in the controls structure changes in the server\325s keyboard description,) 108 692 T -(the server sends an) 108 679 T -5 F --0.6 (XkbControlsNotify) 201.97 679 S -2 F -( event to all interested clients.To receive) 314.17 679 T -5 F --0.6 (Xkb-) 511.47 679 S --0.3 -0.6 (ControlsNotify) 108 666 B -2 F --0.14 ( events under all possible conditions, use) 200.4 666 P -1 F --0.14 (XkbSelectEvents) 398.78 666 P -2 F --0.14 ( \050see section) 478.09 666 P -(4.3\051 and pass) 108 653 T -5 F --0.6 (XkbControlsNotifyMask) 173.99 653 S -2 F -( in both) 312.59 653 T -1 F -(bits_to_c) 352.26 653 T -(hang) 396.09 653 T -(e) 419.97 653 T -2 F -( and) 425.3 653 T -1 F -(values_for_bits) 448.62 653 T -2 F -(.) 522.63 653 T -(To receive) 108 632 T -5 F --0.6 (XkbControlsNotify) 161.98 632 S -2 F -( events only under certain conditions, use) 274.18 632 T -1 F -(XkbSelect-) 476.15 632 T -(EventDetails) 108 619 T -2 F -( using) 169.99 619 T -5 F --0.6 (XkbControlsNotify) 202 619 S -2 F -( as the) 314.2 619 T -1 F -(e) 347.86 619 T -(vent_type) 353.01 619 T -2 F -( and specifying the desired) 398.99 619 T -(state changes in) 108 606 T -1 F -(bits_to_c) 186.98 606 T -(hang) 230.81 606 T -(e) 254.69 606 T -2 F -( and) 260.02 606 T -1 F -(values_for_bits) 283.34 606 T -2 F -( using mask bits from Table 10.7.) 357.35 606 T -(The structure for the) 108 585 T -5 F --0.6 (XkbControlsNotify) 209.3 585 S -2 F -( event is defined as follows:) 321.51 585 T -2 11 Q -(typedef struct {) 126 564.67 T -(int) 144 551.67 T -(type;) 219.75 551.67 T -(/* Xkb e) 297 551.67 T -(xtension base e) 334.72 551.67 T -(v) 401.65 551.67 T -(ent code */) 406.99 551.67 T -(unsigned long) 144 538.67 T -(serial;) 219.75 538.67 T -(/* X serv) 297 538.67 T -(er serial number for e) 337.16 538.67 T -(v) 431.57 538.67 T -(ent */) 436.91 538.67 T -(Bool) 144 525.67 T -(send_e) 219.75 525.67 T -(v) 250.02 525.67 T -(ent;) 255.36 525.67 T -(/*) 297 525.67 T -5 12 Q --0.6 (True) 308.31 525.67 S -2 11 Q -( => synthetically generated */) 334.71 525.67 T -(Display *) 144 512.67 T -(display;) 219.75 512.67 T -(/* serv) 297 512.67 T -(er connection where e) 326.47 512.67 T -(v) 423.02 512.67 T -(ent generated */) 428.35 512.67 T -(T) 144 499.67 T -(ime) 150.34 499.67 T -(time;) 219.75 499.67 T -(/* serv) 297 499.67 T -(er time when e) 326.47 499.67 T -(v) 391.26 499.67 T -(ent generated */) 396.59 499.67 T -(int) 144 486.67 T -(xkb_type;) 219.75 486.67 T -(/*) 297 486.67 T -5 F --0.33 (XkbCompatMapNotify) 308.31 486.67 S -2 F -( */) 421.17 486.67 T -(int) 144 473.67 T -(de) 219.75 473.67 T -(vice;) 229.86 473.67 T -(/* Xkb de) 297 473.67 T -(vice ID, will not be) 340.11 473.67 T -5 F --0.33 (XkbUseCoreKbd) 428.1 473.67 S -2 F -( */) 509.61 473.67 T -(unsigned int) 144 460.67 T -(changed_ctrls;) 219.75 460.67 T -(/* bits indicating which controls data ha) 297 460.67 T -(v) 472.77 460.67 T -(e changed*/) 478.1 460.67 T -(unsigned int) 144 447.67 T -(enabled_ctrls;) 219.75 447.67 T -(/* controls currently enabled in serv) 297 447.67 T -(er */) 455.39 447.67 T -(unsigned int) 144 434.67 T -(enabled_ctrl_changes;) 219.75 434.67 T -(/* bits indicating enabled/disabled controls */) 324 434.67 T -(int) 144 421.67 T -(num_groups;) 219.75 421.67 T -(/* current number of k) 297 421.67 T -(e) 395.87 421.67 T -(yboard groups */) 400.59 421.67 T -(K) 144 408.67 T -(e) 151.67 408.67 T -(yCode) 156.39 408.67 T -(k) 219.75 408.67 T -(e) 225.14 408.67 T -(ycode;) 229.86 408.67 T -(/* != 0 => k) 297 408.67 T -(e) 349.72 408.67 T -(ycode of k) 354.44 408.67 T -(e) 400.76 408.67 T -(y causing change */) 405.48 408.67 T -(char) 144 395.67 T -(e) 219.75 395.67 T -(v) 224.36 395.67 T -(ent_type;) 229.69 395.67 T -(/* T) 297 395.67 T -(ype of e) 314.15 395.67 T -(v) 349.3 395.67 T -(ent causing change */) 354.64 395.67 T -(char) 144 382.67 T -(req_major;) 219.75 382.67 T -(/* major e) 297 382.67 T -(v) 341.33 382.67 T -(ent code of e) 346.67 382.67 T -(v) 402.9 382.67 T -(ent causing change */) 408.23 382.67 T -(char) 144 369.67 T -(req_minor;) 219.75 369.67 T -(/* minor e) 297 369.67 T -(v) 341.95 369.67 T -(ent code of e) 347.28 369.67 T -(v) 403.51 369.67 T -(ent causing change */) 408.85 369.67 T -(}) 126 356.67 T -3 F -(XkbContr) 134.03 356.67 T -(olsNotifyEv) 182.11 356.67 T -(ent) 237 356.67 T -2 F -(;) 251.66 356.67 T -2 12 Q --0.16 (The) 108 337 P -1 F --0.16 (changed_ctrls) 129.5 337 P -2 F --0.16 ( field specifies the controls components that have changed and consists) 197.49 337 P --0.18 (of bits taken from the masks defined in Table 10.7 with \322ok\323 in the) 108 324 P -1 F --0.18 (c) 430.48 324 P --0.18 (hang) 435.63 324 P --0.18 (ed_ctrls) 459.51 324 P -2 F --0.18 ( column.) 498.18 324 P -(The controls currently enabled in the server are reported in the) 108 303 T -1 F -(enabled_ctrls) 410.92 303 T -2 F -( field. If any) 476.24 303 T -(controls were just enabled or disabled \050that is, the contents of the) 108 290 T -1 F -(enabled_ctrls) 422.95 290 T -2 F -( field) 488.28 290 T -(changed\051, they are flagged in the) 108 277 T -1 F -(enabled_ctrl_changes) 268.28 277 T -2 F -( field. The valid bits for these) 374.27 277 T -(fields are the masks listed in Table 10.7 with \322ok\323 in the) 108 264 T -1 F -(enabled_ctrls) 381.64 264 T -2 F -( column. The) 446.96 264 T -1 F -(num_groups) 108 251 T -2 F -( field reports the number of groups bound to the key belonging to the most) 168 251 T -(number of groups and is automatically updated when the keyboard mapping changes.) 108 238 T --0.02 (If the change was caused by a request from a client, the) 108 217 P -1 F --0.02 (keycode) 376.68 217 P -2 F --0.02 ( and) 415.32 217 P -1 F --0.02 (e) 438.61 217 P --0.02 (vent_type) 443.76 217 P -2 F --0.02 ( fields are) 489.74 217 P -(set to) 108 204 T -5 F --0.6 (zero) 136.67 204 S -2 F -(and the) 169.67 204 T -1 F -(req_major) 207.66 204 T -2 F -( and) 258.33 204 T -1 F -(req_minor) 281.65 204 T -2 F -( fields identify the request. The) 332.32 204 T -1 F -(req_major) 485.29 204 T -2 F -(value is the same as the) 108 191 T -2 11 Q -(major e) 223.98 191 T -(xtension opcode) 257.11 191 T -2 12 Q -(. Otherwise,) 328.91 191 T -1 F -(event_type) 390.23 191 T -2 F -( is set to the type of) 441.54 191 T -(event that caused the change \050one of) 108 178 T -5 F --0.6 (KeyPress) 285.61 178 S -2 F -(,) 338.41 178 T -5 F --0.6 (KeyRelease) 344.41 178 S -2 F -(,) 410.41 178 T -5 F --0.6 (DeviceKeyPress) 416.41 178 S -2 F -(,) 508.82 178 T -5 F --0.6 (DeviceKeyRelease) 108 165 S -2 F -(,) 213.6 165 T -5 F --0.6 (ButtonPress) 219.6 165 S -2 F -( or) 292.2 165 T -5 F --0.6 (ButtonRelease) 308.2 165 S -2 F -(\051, and) 394 165 T -1 F -(req_major) 424.33 165 T -2 F -( and) 474.99 165 T -1 F -(req_minor) 108 152 T -2 F -( are undefined. If) 158.66 152 T -1 F -(e) 244.3 152 T -(vent_type) 249.44 152 T -2 F -( is) 295.43 152 T -5 F --0.6 (KeyPress) 309.43 152 S -2 F -(,) 362.23 152 T -5 F --0.6 (KeyRelease) 368.23 152 S -2 F -(,) 434.23 152 T -5 F --0.6 (DeviceKeyPress) 440.23 152 S -2 F -(,) 532.64 152 T -(or) 108 139 T -5 F --0.6 (DeviceKeyRelease) 121 139 S -2 F -(, the) 226.6 139 T -1 F -(keycode) 250.26 139 T -2 F -( field is set to the key that caused the change. If) 288.9 139 T -1 F -(e) 108 126 T -(vent_type) 113.15 126 T -2 F -( is) 159.13 126 T -5 F --0.6 (ButtonPress) 173.14 126 S -2 F -( or) 245.74 126 T -5 F --0.6 (ButtonRelease) 261.73 126 S -2 F -(,) 347.54 126 T -1 F -(k) 353.54 126 T -(e) 358.74 126 T -(ycode) 363.71 126 T -2 F -( contains the button number.) 391.7 126 T -FMENDPAGE -%%EndPage: "79" 91 -%%Page: "80" 92 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(80) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(10 K) 437.17 744.87 T -(e) 464.09 744.87 T -(yboard Controls) 468.81 744.87 T -2 12 Q -(When a client receives an) 108 712 T -5 F --0.6 (XkbControlsNotify) 234.29 712 S -2 F -( event, it can note the changes in a) 346.49 712 T -(changes structure using) 108 699 T -1 F -(XkbNoteContr) 223.64 699 T -(olsChang) 292.44 699 T -(es) 338.33 699 T -2 F -(.) 348.32 699 T -2 11 Q -(v) 108 678.67 T -(oid) 113.28 678.67 T -3 F -(XkbNoteContr) 130.09 678.67 T -(olsChanges) 200.16 678.67 T -2 F -(\050) 253.33 678.67 T -1 F -(c) 256.99 678.67 T -(hang) 261.71 678.67 T -(es) 283.6 678.67 T -2 F -(,) 292.77 678.67 T -1 F -( ne) 295.52 678.67 T -(w) 308.49 678.67 T -2 F -(,) 315.11 678.67 T -1 F -( wanted) 317.86 678.67 T -2 F -(\051) 352.39 678.67 T -(XkbControlsChangesPtr) 126 665.67 T -1 F -(c) 261 665.67 T -(hang) 265.72 665.67 T -(es) 287.61 665.67 T -2 F -(;) 296.77 665.67 T -(/* records changes indicated by ne) 306 665.67 T -(w */) 457.55 665.67 T -(XkbControlsNotifyEv) 126 652.67 T -(ent *) 223.61 652.67 T -1 F -(ne) 261 652.67 T -(w) 271.22 652.67 T -2 F -(;) 278.56 652.67 T -(/* tells which things ha) 306 652.67 T -(v) 407.84 652.67 T -(e changed */) 413.17 652.67 T -(unsigned int) 126 639.67 T -1 F -(wanted) 261 639.67 T -2 F -(;) 292.78 639.67 T -(/* tells which parts of ne) 306 639.67 T -(w to record in changes */) 414.18 639.67 T -2 12 Q -(The) 108 620 T -1 F -(wanted) 129.66 620 T -2 F -( parameter is a bitwise inclusive OR of bits taken from the set of masks speci-) 164.33 620 T -(fied in Table 10.7 with \322ok\323 in the) 108 607 T -1 F -(c) 276.31 607 T -(hang) 281.46 607 T -(ed_ctrls) 305.34 607 T -2 F -( column.) 344 607 T -1 F -(XkbNoteContr) 389 607 T -(olsChang) 457.8 607 T -(es) 503.69 607 T -2 F -( cop-) 513.68 607 T --0.09 (ies any changes reported in) 108 594 P -1 F --0.09 (ne) 241.17 594 P --0.09 (w) 252.32 594 P -2 F --0.09 ( and specified in) 260.32 594 P -1 F --0.09 (wanted) 341.93 594 P -2 F --0.09 ( into the changes record specified) 376.6 594 P -(by) 108 581 T -1 F -(old) 123 581 T -2 F -(.) 138.34 581 T -(Use) 108 560 T -1 F -(XkbGetControlsChanges) 129.66 560 T -2 F -( to update a local copy of a keyboard description with the) 249.66 560 T -(changes previously noted by one or more calls to) 108 547 T -1 F -(XkbNoteControlsChanges.) 346.3 547 T -2 11 Q -(Status) 108 526.67 T -3 F -(XkbGetContr) 137.65 526.67 T -(olsChanges) 202.83 526.67 T -2 F -(\050) 256.01 526.67 T -1 F -(dpy) 259.67 526.67 T -2 F -(,) 274.84 526.67 T -1 F -( xkb) 277.59 526.67 T -2 F -(,) 295.61 526.67 T -1 F -( c) 298.36 526.67 T -(hang) 305.82 526.67 T -(es) 327.71 526.67 T -2 F -(\051) 336.88 526.67 T -(Display *) 126 513.67 T -1 F -(dpy) 234 513.67 T -2 F -(;) 249.88 513.67 T -(/* connection to X serv) 306 513.67 T -(er */) 408.49 513.67 T -(XkbDescPtr) 126 500.67 T -1 F -(xkb) 234 500.67 T -2 F -(;) 249.27 500.67 T -(/*) 306 500.67 T -1 12 Q -(xkb->ctrls) 317.31 500.67 T -2 11 Q -( will be updated */) 367.4 500.67 T -(XkbNameChangesPtr) 126 487.67 T -1 F -(c) 234 487.67 T -(hang) 238.72 487.67 T -(es) 260.61 487.67 T -2 F -(;) 269.77 487.67 T -(/* indicates which parts of) 306 487.67 T -1 12 Q -(xkb->ctrls) 424.84 487.67 T -2 11 Q -( to update */) 474.93 487.67 T -1 12 Q -(XkbGetContr) 108 468 T -(olsChang) 171.46 468 T -(es) 217.34 468 T -2 F -( examines the) 227.34 468 T -1 F -(c) 296.33 468 T -(hang) 301.48 468 T -(es) 325.36 468 T -2 F -( parameter, queries the server for the nec-) 335.35 468 T -(essary information, and copies the results into the) 108 455 T -1 F -(xkb) 348.97 455 T -2 F -(->) 365.63 455 T -1 F -(ctrls) 376.39 455 T -2 F -( keyboard description. If the) 397.73 455 T -1 F -(ctrls) 108 442 T -2 F -( field of) 129.34 442 T -1 F -(xkb) 170.33 442 T -2 F -( is) 186.98 442 T -5 F --0.6 (NULL) 200.99 442 S -2 F -(,) 227.39 442 T -1 F -(XkbGetContr) 233.39 442 T -(olsChang) 296.84 442 T -(es) 342.73 442 T -2 F -( allocates and initializes it. To free the) 352.73 442 T -1 F -(ctrls) 108 429 T -2 F -( field, use) 129.34 429 T -1 F -(XkbF) 179.33 429 T -(r) 204.66 429 T -(eeContr) 208.88 429 T -(ols) 247.01 429 T -2 F -( \050see section 10.12\051.) 261.01 429 T -1 F -(XkbGetContr) 108 408 T -(olsChang) 171.46 408 T -(es) 217.34 408 T -2 F -( returns) 227.34 408 T -5 F --0.6 (Success) 266.66 408 S -2 F -( if successful and can generate) 312.86 408 T -5 F --0.6 (BadAlloc) 462.14 408 S -2 F -(,) 514.95 408 T -5 F --0.6 (BadImplementation,) 108 395 S -2 F -( and) 226.8 395 T -5 F --0.6 (BadMatch) 250.13 395 S -2 F -( errors.) 302.93 395 T -0 F -(10.12) 72 370 T -(Allocating and Freeing an XkbContr) 108 370 T -(olsRec) 311.8 370 T -2 F --0.25 (The need to allocate an) 108 350 P -5 F --0.56 -0.6 (XkbControlsRec) 221.02 350 B -2 F --0.25 ( structure seldom arises; Xkb creates one when) 313.43 350 P --0.3 (an application calls) 108 337 P -1 F --0.3 (XkbGetControls) 202.74 337 P -2 F --0.3 ( or a related function. For those situations where there) 280.74 337 P -(is not an) 108 324 T -5 F --0.6 (XkbControlsRec) 151.67 324 S -2 F -( structure allocated in the) 244.07 324 T -5 F --0.6 (XkbDescRec) 368.38 324 S -2 F -(, allocate one by call-) 434.38 324 T -(ing) 108 311 T -1 F -(XkbAllocControls) 126.34 311 T -2 F -(.) 212.34 311 T -2 11 Q -(Status) 108 290.67 T -3 F -(XkbAllocContr) 137.65 290.67 T -(ols) 210.17 290.67 T -2 F -(\050) 223.01 290.67 T -1 F -(xkb, whic) 226.67 290.67 T -(h) 268.05 290.67 T -2 F -(\051) 273.55 290.67 T -(XkbDescPtr) 126 277.67 T -1 F -(xkb) 234 277.67 T -2 F -(;) 249.27 277.67 T -(/* Xkb description in which to allocate ctrls rec */) 306 277.67 T -(unsigned int) 126 264.67 T -1 F -(whic) 234 264.67 T -(h) 254.61 264.67 T -2 F -(;) 260.11 264.67 T -(/* mask of components of) 306 264.67 T -1 F -(ctrls) 423.02 264.67 T -2 F -( to allocate */) 442.58 264.67 T -1 12 Q --0.43 (XkbAllocContr) 108 245 P --0.43 (ols) 179.46 245 P -2 F --0.43 ( allocates the) 193.46 245 P -1 F --0.43 (ctrls) 257.82 245 P -2 F --0.43 ( field of the) 279.15 245 P -1 F --0.43 (xkb) 336.08 245 P -2 F --0.43 ( parameter, initializes all fields to zero,) 352.73 245 P --0.26 (and returns) 108 232 P -5 F --0.58 -0.6 (Success) 164.12 232 B -2 F --0.26 (. If the) 210.32 232 P -1 F --0.26 (ctrls) 244.18 232 P -2 F --0.26 ( field is not) 265.52 232 P -5 F --0.58 -0.6 (NULL) 321.8 232 B -2 F --0.26 (,) 348.2 232 P -1 F --0.26 (XkbAllocContr) 353.93 232 P --0.26 (ols) 425.39 232 P -2 F --0.26 ( simply returns) 439.39 232 P -5 F --0.58 -0.6 (Suc-) 513.6 232 B --0.05 -0.6 (cess) 108 219 B -2 F --0.02 (. If) 134.4 219 P -1 F --0.02 (xkb) 151.35 219 P -2 F --0.02 ( is) 168 219 P -5 F --0.05 -0.6 (NULL) 181.96 219 B -2 F --0.02 (,) 208.36 219 P -1 F --0.02 (XkbAllocContr) 214.34 219 P --0.02 (ols) 285.8 219 P -2 F --0.02 ( reports a) 299.8 219 P -5 F --0.05 -0.6 (BadMatch) 347.39 219 B -2 F --0.02 ( error. If the) 400.19 219 P -1 F --0.02 (ctrls) 461.07 219 P -2 F --0.02 ( field could) 482.41 219 P -(not be allocated, it reports a) 108 206 T -5 F --0.6 (BadAlloc) 244.31 206 S -2 F -( error.) 297.11 206 T --0.41 (The) 108 185 P -1 F --0.41 (which) 129.25 185 P -2 F --0.41 ( mask specifies the individual fields of the) 157.91 185 P -1 F --0.41 (ctrls) 360.6 185 P -2 F --0.41 ( structure to be allocated and can) 381.93 185 P -(contain any of the valid masks defined in Table 10.7. Because none of the currently exist-) 108 172 T --0.16 (ing controls have any structures associated with them, which is currently of little practical) 108 159 P -(value in this call.) 108 146 T -FMENDPAGE -%%EndPage: "80" 92 -%%Page: "81" 93 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(81) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(10 K) 437.17 744.87 T -(e) 464.09 744.87 T -(yboard Controls) 468.81 744.87 T -2 12 Q -(To free memory used by the) 108 712 T -1 F -(ctrls) 246.64 712 T -2 F -( member of an) 267.97 712 T -5 F --0.6 (XkbDescRec) 340.62 712 S -2 F -(structure, use) 413.22 712 T -1 F -(XkbFree-) 480.2 712 T -(Controls:) 108 699 T -2 11 Q -(v) 108 678.67 T -(oid) 113.28 678.67 T -3 F -(XkbFr) 130.09 678.67 T -(eeContr) 161.67 678.67 T -(ols) 199.34 678.67 T -2 F -(\050) 212.18 678.67 T -1 F -(xkb, whic) 215.84 678.67 T -(h, fr) 257.23 678.67 T -(ee_all) 275.16 678.67 T -2 F -(\051) 302.04 678.67 T -(XkbDescPtr) 126 665.67 T -1 F -(xkb) 198 665.67 T -2 F -(;) 213.27 665.67 T -(/* Xkb description in which to free controls components */) 252 665.67 T -(unsigned int) 126 652.67 T -1 F -(whic) 198 652.67 T -(h) 218.61 652.67 T -2 F -(;) 224.11 652.67 T -(/* mask of components of) 252 652.67 T -1 F -(ctrls) 369.02 652.67 T -2 F -( to free */) 388.58 652.67 T -(Bool) 126 639.67 T -1 F -(fr) 198 639.67 T -(ee_all) 204.93 639.67 T -2 F -(;) 231.81 639.67 T -(/*) 252 639.67 T -5 12 Q --0.6 (True) 263.31 639.67 S -2 11 Q -( => free e) 289.71 639.67 T -(v) 332.07 639.67 T -(erything + ctrls itself */) 337.4 639.67 T -1 12 Q -(XkbF) 108 620 T -(r) 133.33 620 T -(eeContr) 137.56 620 T -(ols) 175.68 620 T -2 F -( frees the specified components of the) 189.68 620 T -1 F -(ctrls) 374.64 620 T -2 F -( field in the) 395.98 620 T -1 F -(xkb) 453.97 620 T -2 F -( keyboard) 470.63 620 T -(description and sets the corresponding structure component values to) 108 607 T -5 F --0.6 (NULL) 442.28 607 S -2 F -( or) 468.68 607 T -5 F --0.6 (zero) 484.68 607 S -2 F -(. The) 511.08 607 T -1 F -(whic) 108 594 T -(h) 130.49 594 T -2 F -( mask specifies the fields of) 136.49 594 T -1 F -(ctrls) 273.13 594 T -2 F -( to be freed and can contain any of the controls) 294.47 594 T -(components specified in Table 10.7.) 108 581 T -(If) 108 560 T -1 F -(fr) 118.99 560 T -(ee_all) 126.55 560 T -2 F -( is) 155.88 560 T -5 F --0.6 (True) 169.88 560 S -2 F -(,) 196.29 560 T -1 F -(XkbF) 202.29 560 T -(r) 227.62 560 T -(eeContr) 231.84 560 T -(ols) 269.96 560 T -2 F -( frees every non-) 283.97 560 T -5 F --0.6 (NULL) 364.93 560 S -2 F -( structure component in the) 391.33 560 T --0.46 (controls, frees the) 108 547 P -5 F --1.01 -0.6 (XkbControlsRec) 195.27 547 B -2 F --0.46 ( structure referenced by the) 287.67 547 P -1 F --0.46 (ctrls) 419.65 547 P -2 F --0.46 ( member of) 440.99 547 P -1 F --0.46 (xkb) 497.93 547 P -2 F --0.46 (, and) 514.59 547 P -(sets) 108 534 T -1 F -(ctrls) 129 534 T -2 F -( to) 150.34 534 T -5 F --0.6 (NULL.) 165.67 534 S -0 F -(10.13) 72 509 T -(The Miscellaneous P) 108 509 T -(er) 225.68 509 T -(-c) 236.78 509 T -(lient Contr) 247.21 509 T -(ols) 306.97 509 T -2 F --0.33 (You can configure the boolean per-client controls which affect the) 108 489 P -1 F --0.33 (state) 426.65 489 P -2 F --0.33 ( reported in button) 449.31 489 P --0.09 (and key events. See section 12.1.1, 12.3, 12.5, and 16.3.11 of the XKB Protocol specifica-) 108 476 P -(tion for more details.) 108 463 T -(To get the current values of the) 108 442 T -5 F --0.6 (per-client) 260.96 442 S -2 F -( controls, use) 326.96 442 T -1 F -(XkbGetP) 393.62 442 T -(erClientContr) 435.98 442 T -(ols) 502.79 442 T -2 F -(.) 516.79 442 T -2 11 Q -(Bool) 108 421.67 T -3 F -(XkbGetP) 132.15 421.67 T -(erClientContr) 175.93 421.67 T -(ols) 242.32 421.67 T -2 F -(\050) 255.16 421.67 T -1 F -(dpy) 258.82 421.67 T -2 F -(,) 273.99 421.67 T -1 F -(ctrls) 279.49 421.67 T -2 F -(\051) 299.05 421.67 T -(Display *) 126 408.67 T -1 F -(dpy) 234 408.67 T -2 F -(;) 249.88 408.67 T -(/* connection to X serv) 306 408.67 T -(er */) 408.49 408.67 T -(unsigned int *) 126 395.67 T -1 F -(ctrls) 234 395.67 T -2 F -(;) 253.56 395.67 T -(/* 1 bit => corresponding control is on */) 306 395.67 T -1 12 Q -(XkbGetP) 108 376 T -(erClientContr) 150.36 376 T -(ols) 217.16 376 T -2 F -( backfills) 231.17 376 T -1 F -(ctrls) 278.5 376 T -2 F -( with the) 299.83 376 T -5 F --0.6 (per-client) 344.83 376 S -2 F -(control attributes for this) 417.43 376 T -(particular client. It returns) 108 363 T -5 F --0.6 (True) 236.3 363 S -2 F -( if successful, and) 262.7 363 T -5 F --0.6 (False) 351.68 363 S -2 F -( otherwise.) 384.68 363 T -(To change the current values of the) 108 342 T -5 F --0.6 (per-client) 280.28 342 S -2 F -( control attributes, use) 346.29 342 T -1 F -(XkbSetP) 455.94 342 T -(erClient-) 495.64 342 T -(Contr) 108 329 T -(ols.) 135.47 329 T -2 11 Q -(Bool) 108 308.67 T -3 F -(XkbSetP) 132.15 308.67 T -(erClientContr) 173.48 308.67 T -(ols) 239.88 308.67 T -2 F -(\050) 252.72 308.67 T -1 F -(dpy) 256.38 308.67 T -2 F -(,) 271.55 308.67 T -1 F -(ctrls) 277.05 308.67 T -2 F -(\051) 296.61 308.67 T -(Display *) 126 295.67 T -1 F -(dpy) 234 295.67 T -2 F -(;) 249.88 295.67 T -(/* connection to X serv) 306 295.67 T -(er */) 408.49 295.67 T -(unsigned int) 126 282.67 T -1 F -(c) 234 282.67 T -(hang) 238.72 282.67 T -(e) 260.61 282.67 T -2 F -(;) 265.49 282.67 T -(/* 1 bit => change control */) 306 282.67 T -(unsigned int *) 126 269.67 T -1 F -(value) 234 269.67 T -2 F -(;) 257.83 269.67 T -(/* 1 bit => control on */) 306 269.67 T -1 12 Q --0.34 (XkbSetP) 108 250 P --0.34 (erClientContr) 147.7 250 P --0.34 (ols) 214.5 250 P -2 F --0.34 ( changes the per-client values for the controls selected by) 228.5 250 P -1 F --0.34 (c) 502.99 250 P --0.34 (hang) 508.14 250 P --0.34 (e) 532.02 250 P -2 F -(to the corresponding v) 108 237 T -(alue in) 215.35 237 T -1 F -(value) 250.68 237 T -(.) 276.49 237 T -2 F -(Le) 282.49 237 T -(g) 294.97 237 T -(al v) 300.91 237 T -(alues for) 318.28 237 T -1 F -( c) 359.93 237 T -(hang) 368.08 237 T -(e) 391.96 237 T -2 F -(and) 400.28 237 T -1 F -( value) 417.61 237 T -2 F -( are:) 446.6 237 T -1 F -(XkbPCF_Gr) 108 224 T -(absUseXKBStateMask, XkbPCF_LookupStateWhenGr) 168.48 224 T -(abbed, and) 430.27 224 T --0.34 (XkbPCF_SendEventUsesXKBState) 108 211 P --0.34 (.) 275.8 211 P -2 F --0.34 (More than one control may be changed at one time by) 281.46 211 P -(OR-ing the v) 108 198 T -(alues together) 170.36 198 T -(.) 236.69 198 T -1 F -(XkbSetP) 242.69 198 T -(erClientContr) 282.38 198 T -(ols) 349.19 198 T -2 F -( back\336lls) 363.19 198 T -1 F -(value) 409.86 198 T -2 F -( with the) 435.85 198 T -5 F --0.6 (per-cli-) 480.85 198 S --0.6 (ent) 108 185 S -2 F -(control attrib) 134.4 185 T -(utes for this particular client.) 196.49 185 T -(It returns) 337.8 185 T -5 F --0.6 (True) 384.46 185 S -2 F -( if successful, and) 410.86 185 T -5 F --0.6 (False) 499.84 185 S -2 F -(otherwise.) 108 172 T -FMENDPAGE -%%EndPage: "81" 93 -%%Page: "82" 94 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(82) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(11 X Library Controls) 436.42 744.87 T -0 14 Q -(11) 72 710.67 T -(X Librar) 108 710.67 T -(y Contr) 161.05 710.67 T -(ols) 209.77 710.67 T -2 12 Q -(The Xkb extension is composed of two parts: a server extension, and a client-side X) 108 688 T -(library extension. Chapter 10 discusses functions used to modify controls affecting the) 108 675 T --0.21 (behavior of the server portion of the Xkb extension. This chapter discusses functions used) 108 662 P --0.41 (to modify controls that affect only the behavior of the client portion of the extension; these) 108 649 P -(controls are known as Library Controls.) 108 636 T -(All of the Library Controls are boolean flags that may be enabled and disabled. The con-) 108 615 T -(trols can be divided into several categories:) 108 602 T -2 11 Q -(\245) 126 581.67 T -(Controls af) 139.68 581.67 T -(fecting general string lookups) 188.6 581.67 T -(\245) 126 569.67 T -(Controls af) 139.68 569.67 T -(fecting compose processing) 188.6 569.67 T -(\245) 126 557.67 T -(Controls af) 139.68 557.67 T -(fecting e) 188.6 557.67 T -(v) 226.5 557.67 T -(ent deli) 231.84 557.67 T -(v) 264.26 557.67 T -(ery) 269.59 557.67 T -2 12 Q -(There are two types of string lookups performed by) 108 539 T -1 F -(XLookupString) 358.28 539 T -2 F -(. The first type) 430.96 539 T -(involves translating a single keycode into a string; the controls in the first category affect) 108 526 T --0.23 (this type of lookup. The second type involves translating a series of keysyms into a string;) 108 513 P -(the controls in the second category affect this type of lookup.) 108 500 T -(An Xkb implementation is required to support the programming interface for all of the) 108 479 T --0.44 (controls. However, an implementation may choose not to support the semantics associated) 108 466 P -(with the controls that deal with compose processing. In this case, a program that accesses) 108 453 T -(these controls should still function normally; however, the feedback that would normally) 108 440 T -(occur with the controls enabled may be missing.) 108 427 T -0 F -(11.1) 72 402 T -(Contr) 108 402 T -(ols Aff) 139.75 402 T -(ecting K) 176.96 402 T -(e) 224.12 402 T -(ycode-to-String T) 230.62 402 T -(ranslation) 328.99 402 T -2 F -(The first type of string lookups, which are here called) 108 382 T -1 F -(simple string lookups) 368.28 382 T -2 F -(, involves) 470.95 382 T -(translating a single keycode into a string. Because these simple lookups involve only a) 108 369 T -(single keycode, all of the information needed to do the translation is contained in the key-) 108 356 T -(board state in a single event. The controls affecting simple string lookups are:) 108 343 T -5 F --0.6 (ForceLatin1Lookup) 139.68 322 S --0.6 (ConsumeLookupMods) 139.68 308 S --0.6 (LevelOneUsesShiftAndLock) 139.68 294 S -0 F -(11.1.1) 72 268 T -(For) 108 268 T -(ceLatin1Lookup) 127.09 268 T -2 F --0.32 (If the) 108 248 P -5 F --0.7 -0.6 (ForceLatin1Lookup) 136.02 248 B -2 F --0.32 ( control is enabled,) 248.22 248 P -1 F --0.32 (XLookupString) 341.26 248 P -2 F --0.32 ( only returns strings using) 413.93 248 P -(the Latin1 character set. If) 108 235 T -5 F --0.6 (ForceLatin1Lookup) 237.29 235 S -2 F -( is not enabled,) 349.49 235 T -1 F -(XLookupString) 425.15 235 T -2 F -( can) 497.82 235 T -(return characters that are not in the Latin1 set. By default, this control is disabled, allow-) 108 222 T -(ing characters outside of the Latin1 set to be returned.) 108 209 T -0 F -(11.1.2) 72 184 T -(ConsumeLookupMods) 108 184 T -2 F --0.36 (Simple string lookups in) 108 164 P -1 F --0.36 (XLookupString) 227.24 164 P -2 F --0.36 ( involve two different translation phases. The first) 299.92 164 P --0.46 (phase translates raw device keycodes to individual keysyms. The second phase attempts to) 108 151 P -(map the resulting keysym into a string of one or more characters. In the first phase, some) 108 138 T -(of the modifiers are normally used to determine the appropriate shift level for a key.) 108 125 T -(The) 108 104 T -5 F --0.6 (ConsumeLookupMods) 129.66 104 S -2 F -( control determines whether or not) 241.86 104 T -1 F -(XLookupString) 410.5 104 T -(consumes) 486.17 104 T -2 F -(the modifiers it uses during the first phase of processing \050mapping a keycode to a key-) 108 91 T -(sym\051. When a modifier is consumed, it is effectively removed from the working copy of) 108 78 T -FMENDPAGE -%%EndPage: "82" 94 -%%Page: "83" 95 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(83) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(11 X Library Controls) 436.42 744.87 T -2 12 Q -(the keyboard state information) 108 712 T -1 F -(XLookupString) 257.98 712 T -2 F -( is using and appears to be unset for the) 330.65 712 T -(remainder of the processing.) 108 699 T -(If the) 108 678 T -5 F --0.6 (ConsumeLookupMods) 136.66 678 S -2 F -( control is enabled,) 248.86 678 T -1 F -(XLookupString) 343.18 678 T -2 F -( does not use the modifi-) 415.85 678 T --0.33 (ers used to translate the keycode of the event to a keysym when it is determining the string) 108 665 P --0.11 (associated with a keysym. For example, assume the keymap for the \324A\325 key only contains) 108 652 P -(the shift modifier and the) 108 639 T -5 F --0.6 (ConsumeLookupMods) 232.32 639 S -2 F -( control is enabled. If a user presses the) 344.52 639 T -4 11 Q --0.45 (Shift) 108 626 P -2 12 Q --0.44 ( key and the) 130.01 626 P -4 11 Q --0.45 (A) 189.58 626 P -2 12 Q --0.44 ( key while the) 196.92 626 P -4 11 Q --0.45 (Num_Loc) 265.83 626 P --0.45 (k) 312.67 626 P -2 12 Q --0.44 ( key is locked,) 318.17 626 P -1 F --0.44 (XLookupString) 388.75 626 P -2 F --0.44 ( uses the) 461.42 626 P -5 F --0.96 -0.6 (Shift) 504.44 626 B -2 F --0.43 (modifier when mapping the keycode for the \324a\325 key to the keysym for \324A\325; subsequently, it) 108 613 P -(only uses the) 108 600 T -5 F --0.6 (NumLock) 173.66 600 S -2 F -( modifier when determining the string associated with the keysym) 219.87 600 T -(\324A\325.) 108 587 T -(If the) 108 566 T -5 F --0.6 (ConsumeLookupMods) 136.66 566 S -2 F -( control is not enabled,) 248.86 566 T -1 F -(XLookupString) 361.51 566 T -2 F -( uses all of the event) 434.19 566 T -(modifiers to determine the string associated with a keysym. This behavior mirrors the) 108 553 T -(behavior of) 108 540 T -1 F -(XLookupString) 165.98 540 T -2 F -( in the core implementation.) 238.66 540 T --0.15 (The) 108 519 P -5 F --0.34 -0.6 (ConsumeLookupMods) 129.51 519 B -2 F --0.15 ( control is unset by default. For more information on modifier) 241.71 519 P -(consumption, refer to Chapter 12.) 108 506 T -0 F -(11.1.3) 72 481 T -(Al) 108 481 T -(wa) 119.82 481 T -(ysConsumeShiftAndLoc) 135.59 481 T -(k) 274.69 481 T -2 F -(The) 108 461 T -5 F --0.6 (AlwaysConsumeShiftAndLock) 129.66 461 S -2 F -( control, if enabled, forces) 294.66 461 T -1 F -(XLookupString) 423.63 461 T -2 F -( to con-) 496.3 461 T -(sume the) 108 448 T -5 F --0.6 (Shift) 154 448 S -2 F -( and) 187 448 T -5 F --0.6 (Lock) 210.32 448 S -2 F -( modifiers when processing all keys, even if the definition for) 236.73 448 T --0.13 (the key type does not specify these modifiers. The) 108 435 P -5 F --0.28 -0.6 (AlwaysConsumeShiftAndLock) 350.8 435 B -2 F --0.13 ( con-) 515.8 435 P -(trol is unset by default. See section 15.2 for a discussion of key types.) 108 422 T -0 F -(11.2) 72 397 T -(Contr) 108 397 T -(ols Aff) 139.75 397 T -(ecting Compose Pr) 176.96 397 T -(ocessing) 286.08 397 T -2 F -(The second type of string lookup performed by) 108 377 T -1 F -(XLookupString) 337.3 377 T -2 F -( involves translating a) 409.97 377 T -(series of keysyms into a string. Because these lookups can involve more than one key) 108 364 T -(event, they require) 108 351 T -1 F -(XLookupString) 200.64 351 T -2 F -( to retain some state information between successive) 273.31 351 T -(calls. The process of mapping a series of keysyms to a string is known as) 108 338 T -1 F -(compose pr) 461.95 338 T -(o-) 517.07 338 T -(cessing) 108 325 T -2 F -(. The controls affecting compose processing are:) 143.33 325 T -5 F --0.6 (ConsumeKeysOnComposeFail) 139.68 304 S --0.6 (ComposeLED) 139.68 290 S --0.6 (BeepOnComposeFail) 139.68 276 S -2 F -(Because different vendors have historically used different algorithms to implement com-) 108 256 T -(pose processing, and these algorithms may be incompatible with the semantics required) 108 243 T -(by the Xkb compose processing controls, implementation of the compose processing con-) 108 230 T -(trols is optional in an Xkb implementation.) 108 217 T -0 F -(11.2.1) 72 192 T -(ConsumeK) 108 192 T -(e) 171.16 192 T -(ysOnComposeF) 177.65 192 T -(ail) 269.42 192 T -2 F -(Some compose processing algorithms signal the start of a compose sequence by a key) 108 172 T -(event meaning \322start compose\323.) 108 159 T -2 9.6 Q -(1) 261.3 163.8 T -2 12 Q -(The subsequent key events should normally result in a) 266.1 159 T -(valid composition yielding a valid translation to a string. If the subsequent key events do) 108 146 T -(not have a valid translation, some decision must be made about what to do with the key) 108 133 T -(events that were processed while attempting the compose. The) 108 120 T -5 F --0.6 (ConsumeKeysOnCom-) 411.28 120 S -72 90 540 110 C -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 98 204 98 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -0 0 612 792 C -2 10 Q -0 X -0 0 0 1 0 0 0 K -(1. Another possibility is to ha) 72 83.33 T -(v) 192.64 83.33 T -(e the compose processing simply be the result of a \336nite state acceptor; a compose) 197.49 83.33 T -(sequence w) 72 71.33 T -(ould ne) 118.27 71.33 T -(v) 147.74 71.33 T -(er f) 152.59 71.33 T -(ail for a properly written \336nite state acceptor) 166.09 71.33 T -(.) 344.11 71.33 T -FMENDPAGE -%%EndPage: "83" 95 -%%Page: "84" 96 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(84) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(11 X Library Controls) 436.42 744.87 T -5 12 Q --0.6 (poseFail) 108 712 S -2 F -( control allows a client to specify what happens with the key events) 160.8 712 T -1 F -(XLookup-) 487.75 712 T -(String) 108 699 T -2 F -( has been considering when it reaches a dead end in a compose sequence.) 137.34 699 T -(If the) 108 678 T -5 F --0.6 (ConsumeKeysOnComposeFail) 136.66 678 S -2 F -( control is set, all keys associated with a failed) 295.06 678 T -(compose sequence should be consumed \050discarded\051. If the) 108 665 T -5 F --0.6 (ConsumeKeysOnCompose-) 390.26 665 S --0.6 (Fail) 108 652 S -2 F -( control is not set, the key events associated with a failed compose sequence should) 134.4 652 T -(be processed as a normal sequence of key events.) 108 639 T -(The) 108 618 T -5 F --0.6 (ConsumeKeysOnComposeFail) 129.66 618 S -2 F -( control is disabled by default.) 288.06 618 T -0 F -(11.2.2) 72 593 T -(ComposeLED) 108 593 T -2 F --0.02 (The) 108 573 P -5 F --0.04 -0.6 (ComposeLED) 129.64 573 B -2 F --0.02 ( control allows a client to specify whether or not an indicator should be) 195.64 573 P -(set and cleared to provide feedback when compose processing is in progress. The control) 108 560 T -(does not specify which indicator should be used; the mapping for this is up to the individ-) 108 547 T -(ual implementation. If the) 108 534 T -5 F --0.6 (ComposeLED) 235.66 534 S -2 F -( control is enabled, it specifies that an indicator) 301.66 534 T -(should be set when a compose sequence is in progress and cleared when one is not in) 108 521 T -(progress. The) 108 508 T -5 F --0.6 (ComposeLED) 176.32 508 S -2 F -( control is disabled by default.) 242.32 508 T --0.37 (While the Xkb extension does not specify the type of type of indicator to be used when the) 108 487 P -5 F --0.6 (ComposeLED) 108 474 S -2 F -( control is implemented, a consistent convention between implementations) 174 474 T -(is to everyone\325s benefit. If a named indicator is used for this purpose, the recommended) 108 461 T -(name is \322) 108 448 T -5 F --0.6 (Compose) 153.32 448 S -2 F -(\323. Note that some implementations may use an unnamed, custom hard-) 199.52 448 T -(ware LED for this purpose.) 108 435 T -0 F -(11.2.3) 72 410 T -(BeepOnComposeF) 108 410 T -(ail) 215.77 410 T -2 F --0.11 (The) 108 390 P -5 F --0.23 -0.6 (BeepOnComposeFail) 129.55 390 B -2 F --0.11 ( control allows a client to specify whether or not a bell should) 241.76 390 P -(be activated to provide feedback when a compose sequence fails. The control does not) 108 377 T -(specify the type of bell that should be used; the mapping for this is up to the individual) 108 364 T -(implementation. If the) 108 351 T -5 F --0.6 (BeepOnComposeFail) 217.99 351 S -2 F -( control is enabled, it specifies that a bell) 330.19 351 T --0.43 (should be activated when a compose sequence fails. The) 108 338 P -5 F --0.94 -0.6 (BeepOnComposeFail) 378.08 338 B -2 F --0.43 ( control is) 490.28 338 P -(disabled by default. If implemented, the bell should be activated using) 108 325 T -1 F -(XkbBell) 448.3 325 T -2 F -( or) 486.29 325 T -1 F -(XkbDe-) 502.28 325 T -(viceBell) 108 312 T -2 F -(.) 146.65 312 T -(While the Xkb extension does not specify the type of bell to be used when the) 108 291 T -5 F --0.6 (BeepOn-) 485.28 291 S --0.47 -0.6 (ComposeFail) 108 278 B -2 F --0.21 ( control is implemented, a consistent convention between implementations) 180.6 278 P --0.45 (is to everyone\325s benefit. If a named bell is used for this purpose, the recommended name is) 108 265 P -(\322) 108 252 T -5 F --0.6 (ComposeFail) 113.33 252 S -2 F -(\323.) 185.93 252 T -0 F -(11.3) 72 227 T -(Contr) 108 227 T -(ols Eff) 139.75 227 T -(ecting Event Deliver) 176.3 227 T -(y) 291.13 227 T -(11.3.1) 72 201 T -(IgnoreNe) 108 201 T -(wK) 159.83 201 T -(e) 177.65 201 T -(yboar) 184.14 201 T -(ds) 216.58 201 T -2 F -(When Xkb is initialized, it implicitly forces requests for) 108 181 T -5 F --0.6 (NewKeyboardNotify) 379.31 181 S -2 F -( events.) 491.51 181 T --0.28 (These events may be used by the Xkb library extension internally; they are normally trans-) 108 168 P -(lated into core protocol) 108 155 T -5 F --0.6 (MappingNotify) 222.65 155 S -2 F -( events before being passed to the client. While) 308.45 155 T --0.39 (delivering the event to the client is appropriate in most cases, it is not appropriate for some) 108 142 P -(clients that maintain per-key data structures. This is because once the server has sent a) 108 129 T -5 F --0.6 (NewKeyboardNotify) 108 116 S -2 F -( event, it is free to send the client events for all keys in the new) 220.2 116 T -(range and that range may be outside of the per-key data structures the client is maintain-) 108 103 T -(ing.) 108 90 T -FMENDPAGE -%%EndPage: "84" 96 -%%Page: "85" 97 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(85) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(11 X Library Controls) 436.42 744.87 T -2 12 Q -(The) 108 712 T -5 F --0.6 (IgnoreNewKeyboards) 129.66 712 S -2 F -( control, if enabled, prevents Xkb from mapping) 248.46 712 T -5 F --0.6 (NewKey-) 483.76 712 S --1.08 -0.6 (boardNotify) 108 699 B -2 F --0.49 ( events to core) 180.6 699 P -5 F --1.08 -0.6 (MappingNotify) 251.29 699 B -2 F --0.49 ( events and passing them to the client. The) 337.09 699 P -(control is initially disabled.) 108 686 T -0 F -(11.4) 72 661 T -(Manipulating the Librar) 108 661 T -(y Contr) 240.8 661 T -(ols) 282.56 661 T -2 F -(The Library Controls are manipulated using functions that deal with bitmasks to indicate) 108 641 T -(which controls to manipulate. The controls are identified by the masks defined in Table) 108 628 T -(11.1.) 108 615 T -0 F -(11.4.1) 72 437 T -(Determining Whic) 108 437 T -(h Librar) 209.89 437 T -(y Contr) 254.69 437 T -(ols are Implemented) 296.45 437 T -2 F -(To determine which Library Controls are actually implemented, use) 108 417 T -1 F -(XkbXlibContr) 437.28 417 T -(olsIm-) 503.41 417 T -(plemented) 108 404 T -2 F -(.) 157.32 404 T -2 11 Q -(unsigned int) 108 383.67 T -3 F -(XkbXlibContr) 164.84 383.67 T -(olsImplemented) 233.09 383.67 T -2 F -(\050) 308.26 383.67 T -1 F -(display) 311.92 383.67 T -2 F -(\051) 343.7 383.67 T -(Display *) 126 370.67 T -1 F -(display) 234 370.67 T -2 F -(;) 265.78 370.67 T -(/* connection to X serv) 342 370.67 T -(er */) 444.49 370.67 T -1 12 Q -(XkbXlibContr) 108 351 T -(olsImplemented) 174.13 351 T -2 F -( returns a bitmask indicating the controls actually imple-) 250.12 351 T -(mented in the Xkb library and is composed of an inclusive OR of bits from Table 11.1.) 108 338 T -0 F -(11.4.2) 72 313 T -(Determining the State of the Librar) 108 313 T -(y Contr) 305.48 313 T -(ols) 347.24 313 T -2 F -(To determine the current state of the Library Controls, use) 108 293 T -1 F -(XkbGetXlibContr) 390.95 293 T -(ols) 474.41 293 T -2 F -(.) 488.41 293 T -2 11 Q -(unsigned int) 108 272.67 T -3 F -(XkbGetXlibContr) 164.84 272.67 T -(ols) 250.2 272.67 T -2 F -(\050) 263.03 272.67 T -1 F -(display) 266.7 272.67 T -2 F -(\051) 298.48 272.67 T -(Display *) 126 259.67 T -1 F -(display) 234 259.67 T -2 F -(;) 265.78 259.67 T -(/* connection to X serv) 342 259.67 T -(er */) 444.49 259.67 T -1 12 Q -(XkbGetXlibContr) 108 240 T -(ols) 191.46 240 T -2 F -( returns the current state of the Library Controls as a bit mask that is) 205.46 240 T --0.45 (an inclusive OR of the control masks from Table 11.1 for the controls that are enabled. For) 108 227 P --0.22 (the optional compose processing controls, the fact that a control is enabled does not imply) 108 214 P -(that it is actually implemented.) 108 201 T -0 F -(11.4.3) 72 176 T -(Changing the State of the Librar) 108 176 T -(y Contr) 290.81 176 T -(ols) 332.57 176 T -2 F -(To change the state of the Library Controls, use) 108 156 T -1 F -(XkbSetXlibContr) 339.96 156 T -(ols) 420.76 156 T -2 F -(.) 434.76 156 T -2 11 Q -(Bool) 108 135.67 T -3 F -(XkbSetXlibContr) 132.15 135.67 T -(ols) 215.06 135.67 T -2 F -(\050) 227.9 135.67 T -1 F -(display) 231.56 135.67 T -(, bits_to_c) 262.74 135.67 T -(hang) 308.41 135.67 T -(e) 330.3 135.67 T -(, values_for_bits) 335.07 135.67 T -2 F -(\051) 408.41 135.67 T -(Display *) 126 122.67 T -1 F -(display) 234 122.67 T -2 F -(;) 265.78 122.67 T -(/* connection to X serv) 342 122.67 T -(er */) 444.49 122.67 T -(unsigned long) 126 109.67 T -1 F -(bits_to_c) 234 109.67 T -(hang) 274.17 109.67 T -(e) 296.06 109.67 T -2 F -(;) 300.95 109.67 T -(/* selects controls to be modi\336ed */) 342 109.67 T -(unsigned long) 126 96.67 T -1 F -(values_for_bits) 234 96.67 T -2 F -(;) 301.84 96.67 T -(/* turns selected controls on \0501\051 or of) 342 96.67 T -(f \0500\051 */) 504.56 96.67 T -3 12 Q -(T) 241.87 595 T -(able 11.1 Library Contr) 248.77 595 T -(ol Masks) 374.21 595 T -1 F -(Libr) 194.5 575 T -(ary Contr) 215 575 T -(ol Mask) 261.46 575 T -(V) 392.5 575 T -(alue) 398.5 575 T -2 11 Q -(XkbLC_F) 194.5 560.67 T -(orceLatin1Lookup) 238.95 560.67 T -(\0501 << 0\051) 392.5 560.67 T -(XkbLC_ConsumeLookupMods) 194.5 546.67 T -(\0501 << 1\051) 392.5 546.67 T -(XkbLC_Al) 194.5 532.67 T -(w) 243.89 532.67 T -(aysConsumeShiftAndLock) 251.72 532.67 T -(\0501 << 2\051) 392.5 532.67 T -(XkbLC_IgnoreNe) 194.5 518.67 T -(wK) 274.26 518.67 T -(e) 289.87 518.67 T -(yboards) 294.59 518.67 T -(\0501 << 3\051) 392.5 518.67 T -(XkbLC_ConsumeK) 194.5 504.67 T -(e) 282.23 504.67 T -(ysOnComposeF) 286.94 504.67 T -(ail) 357.67 504.67 T -(\0501 << 29\051) 392.5 504.67 T -(XkbLC_ComposeLED) 194.5 490.67 T -(\0501 << 30\051) 392.5 490.67 T -(XkbLC_BeepOnComposeF) 194.5 476.67 T -(ail) 316.56 476.67 T -(\0501 << 31\051) 392.5 476.67 T -(XkbLC_AllControls) 194.5 462.67 T -(\0500xc0000007\051) 392.5 462.67 T -193.5 587 454.5 587 2 L -V -0.5 H -0 Z -N -193.5 570 454.5 570 2 L -V -N -FMENDPAGE -%%EndPage: "85" 97 -%%Page: "86" 98 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(86) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(11 X Library Controls) 436.42 744.87 T -1 12 Q --0.32 (XkbSetXlibContr) 108 712 P --0.32 (ols) 188.8 712 P -2 F --0.32 ( modifies the state of the controls selected by) 202.8 712 P -1 F --0.32 (bits_to_c) 419.58 712 P --0.32 (hang) 463.41 712 P --0.32 (e) 487.29 712 P -2 F --0.32 (; only the) 492.61 712 P -(controls selected by) 108 699 T -1 F -(bits_to_c) 206.32 699 T -(hang) 250.14 699 T -(e) 274.02 699 T -2 F -( are modified. If the bit corresponding to a control is) 279.35 699 T --0.22 (on in) 108 686 P -1 F --0.22 (bits_to_c) 134.89 686 P --0.22 (hang) 178.72 686 P --0.22 (e) 202.6 686 P -2 F --0.22 ( and also on in) 207.93 686 P -1 F --0.22 (values_for_bits) 279.81 686 P -2 F --0.22 (, the control is enabled. If the bit corre-) 353.82 686 P -(sponding to a control is on in) 108 673 T -1 F -(bits_to_c) 251 673 T -(hang) 294.83 673 T -(e) 318.71 673 T -2 F -( but off in) 324.04 673 T -1 F -(values_for_bits) 374.7 673 T -2 F -(, the control is dis-) 448.7 673 T -(abled.) 108 660 T -1 F -(bits_to_c) 139.99 660 T -(hang) 183.82 660 T -(e) 207.7 660 T -2 F -( should be an inclusive OR of bits from Table 11.1.) 213.02 660 T -FMENDPAGE -%%EndPage: "86" 98 -%%Page: "87" 99 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(87) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(12 Interpreting K) 415.66 744.87 T -(e) 497.25 744.87 T -(y Ev) 501.97 744.87 T -(ents) 522.28 744.87 T -0 14 Q -(12) 72 710.67 T -(Interpreting K) 108 710.67 T -(e) 199.57 710.67 T -(y Events) 207.15 710.67 T -2 12 Q -(Xkb provides functions to help developers interpret key events without having to directly) 108 688 T -(interpret Xkb data structures. Xkb also modifies the behavior of several core X library) 108 675 T -(functions.) 108 662 T -0 F -(12.1) 72 637 T -(Eff) 108 637 T -(ects of Xkb on the Core X Librar) 123.88 637 T -(y) 306.71 637 T -2 F -(When support for Xkb is built into the X library, the) 108 617 T -1 F -(XOpenDisplay) 361.98 617 T -2 F -( function looks for a) 432.64 617 T -(compatible version of Xkb on the server. If it finds a compatible version, it initializes the) 108 604 T -(extension and enables) 108 591 T -1 F -(implicit support) 216.31 591 T -2 F -( for Xkb in a number of X library functions. This) 292.66 591 T --0.33 (makes it possible for clients to take advantage of nearly all Xkb features without having to) 108 578 P -(be rewritten or even recompiled, if they are built with shared libraries. This implicit sup-) 108 565 T --0.37 (port is invisible to most clients, but it can have side effects, so the extension includes ways) 108 552 P -(to control or disable it.) 108 539 T -0 F -(12.1.1) 72 514 T -(Eff) 108 514 T -(ects of Xkb on Event State) 123.88 514 T -2 F -(Because) 108 494 T -1 F -(XOpenDisplay) 150.98 494 T -2 F -( initializes Xkb, some events contain an Xkb description of the) 221.64 494 T -(keyboard state instead of that normally used by the core protocol. See section 17.1.1 for) 108 481 T -(more information about the differences between Xkb keyboard state and that reported by) 108 468 T -(the core protocol.) 108 455 T -0 F -(12.1.2) 72 430 T -(Eff) 108 430 T -(ects of Xkb on MappingNotify Events) 123.88 430 T -2 F -(When Xkb is missing or disabled, the X library tracks changes to the keyboard mapping) 108 410 T -(using) 108 397 T -5 F --0.6 (MappingNotify) 137 397 S -2 F -( events. Whenever the keyboard mapping is changed, the server) 222.81 397 T -(sends all clients a) 108 384 T -5 F --0.6 (MappingNotify) 195.32 384 S -2 F -( event to report the change. When a client receives a) 281.13 384 T -5 F --0.6 (MappingNotify) 108 371 S -2 F -( event, it is supposed to call) 193.8 371 T -1 F -(XRefr) 329.8 371 T -(eshK) 357.35 371 T -(e) 380.93 371 T -(yboar) 385.9 371 T -(dMapping) 413.45 371 T -2 F -( to update the) 462.78 371 T -(keyboard description used internally by the X library.) 108 358 T -(The X Keyboard Extension uses) 108 337 T -5 F --0.6 (XkbMapNotify) 266.3 337 S -2 F -( and) 345.51 337 T -5 F --0.6 (XkbNewKeyboardNotify) 368.83 337 S -2 F -( events) 500.84 337 T -(to track changes to the keyboard mapping. When an Xkb-aware client receives either) 108 324 T -(event, it should call) 108 311 T -1 F -(XkbRefr) 205 311 T -(eshK) 243.88 311 T -(e) 267.46 311 T -(yboar) 272.42 311 T -(dMapping) 299.98 311 T -2 F -( to update the keyboard description) 349.31 311 T --0.45 (used internally by the X library. To avoid duplicate events, the X server does not send core) 108 298 P -(protocol) 108 285 T -5 F --0.6 (MappingNotify) 151 285 S -2 F -( events to a client that has selected for) 236.8 285 T -5 F --0.6 (XkbMapNotify) 422.43 285 S -2 F -( events.) 501.63 285 T -(The implicit support for Xkb selects for) 108 264 T -5 F --0.6 (XkbMapNotify) 301.64 264 S -2 F -( events. This means that clients) 380.85 264 T --0.19 (that do not explicitly use Xkb but that are using a version of the X library that has implicit) 108 251 P -(support for Xkb do not receive) 108 238 T -5 F --0.6 (MappingNotify) 258.64 238 S -2 F -( events over the wire. Clients that were) 344.44 238 T --0.04 (not written with Xkb in mind do not recognize or properly handle the new Xkb events, so) 108 225 P -(the implicit support converts them to) 108 212 T -5 F --0.6 (MappingNotify) 288 212 S -2 F -( events that report approximately) 373.8 212 T -(the same information, unless the client has explicitly selected for the Xkb version of the) 108 199 T -(event.) 108 186 T -(An Xkb-capable X server does not send events from keys that fall outside the legal range) 108 165 T --0.17 (of keycodes expected by that client. Once the server sends a client an) 108 152 P -5 F --0.38 -0.6 (XkbNewKeyboard-) 441 152 B --0.6 (Notify) 108 139 S -2 F -( event, it reports events from all keys because it assumes that any client that has) 147.6 139 T -(receieved an) 108 126 T -5 F --0.6 (XkbNewKeyboardNotify) 171.3 126 S -2 F -( event expects key events from the new range of) 303.3 126 T --0.33 (keycodes. The implicit support for Xkb asks for) 108 113 P -5 F --0.73 -0.6 (XkbNewKeyboardNotify) 338.33 113 B -2 F --0.33 ( events, so the) 470.33 113 P -(range of keycodes reported to the client might vary without the client\325s knowledge. Most) 108 100 T -(clients don\325t really care about the range of legal keycodes, but some clients maintain) 108 87 T -(information about each key and might have problems with events that come from unex-) 108 74 T -FMENDPAGE -%%EndPage: "87" 99 -%%Page: "88" 100 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(88) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(12 Interpreting K) 415.66 744.87 T -(e) 497.25 744.87 T -(y Ev) 501.97 744.87 T -(ents) 522.28 744.87 T -2 12 Q --0.09 (pected keys. Such clients can set the) 108 712 P -5 F --0.2 -0.6 (XkbLC_IgnoreNewKeyboards) 284.66 712 B -2 F --0.09 ( library control \050see) 443.06 712 P -(section 11.3.1\051 to prevent the implicit support from requesting notification of changes to) 108 699 T -(the legal range of keycodes.) 108 686 T -0 F -(12.1.3) 72 661 T -(X Librar) 108 661 T -(y Functions Aff) 153.47 661 T -(ected b) 240.68 661 T -(y Xkb) 282.46 661 T -2 F -(The following X library functions are modified by Xkb:) 108 641 T -1 11 Q -(XK) 139.68 620.67 T -(e) 153.35 620.67 T -(ycodeT) 157.91 620.67 T -(oK) 188.66 620.67 T -(e) 201.12 620.67 T -(ysym) 205.67 620.67 T -(XK) 139.68 607.67 T -(e) 153.35 607.67 T -(ysymT) 157.91 607.67 T -(oK) 185 607.67 T -(e) 197.45 607.67 T -(ycode) 202.01 607.67 T -(XLookupK) 139.68 594.67 T -(e) 186.35 594.67 T -(ysym) 190.91 594.67 T -(XLookupString) 139.68 581.67 T -(XRefr) 139.68 568.67 T -(eshK) 164.94 568.67 T -(e) 186.55 568.67 T -(yboar) 191.1 568.67 T -(dMapping) 216.36 568.67 T -(XRebindK) 139.68 555.67 T -(e) 184.52 555.67 T -(ysym) 189.07 555.67 T -2 12 Q -(The implicit support for Xkb replaces a number of X library functions with versions that) 108 536 T -(understand and use the X Keyboard Extension. In most cases, the semantics of the new) 108 523 T --0.06 (versions are identical to those of the old, but there are occasional visible differences. This) 108 510 P -(section lists all of the functions that are affected and the differences in behavior, if any,) 108 497 T -(that are visible to clients.) 108 484 T -(The) 108 463 T -1 F -(XK) 129.66 463 T -(e) 144.58 463 T -(ycodeT) 149.54 463 T -(oK) 183.1 463 T -(e) 196.68 463 T -(ysym) 201.65 463 T -2 F -( function reports the keysym associated with a particular index) 225.64 463 T -(for a single key. The index specifies a column of symbols in the core keyboard mapping) 108 450 T -(\050that is, as reported by the core protocol) 108 437 T -1 F -(GetK) 302.29 437 T -(e) 327.2 437 T -(yboar) 332.17 437 T -(dMapping) 359.72 437 T -2 F -( request\051. The order of the) 409.06 437 T -(symbols in the core mapping does not necessarily correspond to the order of the symbols) 108 424 T -(used by Xkb; section 17.1.3 describes the differences.) 108 411 T -(The) 108 390 T -1 F -(XK) 129.66 390 T -(e) 144.58 390 T -(ysymT) 149.54 390 T -(oK) 179.1 390 T -(e) 192.68 390 T -(ycode) 197.65 390 T -2 F -( function reports a keycode to which a particular keysym is) 225.64 390 T -(bound. When Xkb is missing or disabled, this function looks in each column of the core) 108 377 T --0.2 (keyboard mapping in turn and returns the lowest numbered key that matches in the lowest) 108 364 P -(numbered group. When Xkb is present, this function uses the Xkb ordering for symbols) 108 351 T -(instead.) 108 338 T -(The) 108 317 T -1 F -(XLookupK) 129.66 317 T -(e) 180.58 317 T -(ysym) 185.54 317 T -2 F -( function reports the symbol in a specific column of the key associ-) 209.53 317 T -(ated with an event. Whether or not Xkb is present, the column specifies an index into the) 108 304 T -(core symbol mapping.) 108 291 T -(The) 108 270 T -1 F -(XLookupString) 129.66 270 T -2 F -( function reports the symbol and string associated with a key event,) 202.33 270 T --0.06 (taking into account the keycode and keyboard state as reported in the event. When Xkb is) 108 257 P -(disabled or missing,) 108 244 T -1 F -(XLookupString) 207.34 244 T -2 F -( uses the rules specified by the core protocol and) 280.01 244 T -(reports only ISO Latin-1 characters. When Xkb is present,) 108 231 T -1 F -(XLookupString) 390.94 231 T -2 F -( uses the) 463.61 231 T -(explicit keyboard group, key types, and rules specified by Xkb. When Xkb is present,) 108 218 T -1 F -(XLookupString) 108 205 T -2 F -( is allowed, but not required, to return strings in character sets other than) 180.67 205 T -(ISO Latin-1, depending on the current locale. If any key bindings are defined,) 108 192 T -1 F -(XLookup-) 484.58 192 T -(String) 108 179 T -2 F -( does not use any consumed modifiers \050see sections 11.1.2 and 15.2\051 to determine) 137.34 179 T -(matching bindings.) 108 166 T --0.49 (The) 108 145 P -1 F --0.49 (XRefr) 129.17 145 P --0.49 (eshK) 156.72 145 P --0.49 (e) 180.3 145 P --0.49 (yboar) 185.27 145 P --0.49 (dMapping) 212.82 145 P -2 F --0.49 ( function updates the X library\325s internal representation of) 262.15 145 P -(the keyboard to reflect changes reported via) 108 132 T -5 F --0.6 (MappingNotify) 321.6 132 S -2 F -( events. When Xkb is miss-) 407.4 132 T --0.19 (ing or disabled, this function reloads the entire modifier map or keyboard mapping. When) 108 119 P -(Xkb is present, the implicit Xkb support keeps track of the changed components reported) 108 106 T -(by each) 108 93 T -5 F --0.6 (XkbMapNotify) 147.98 93 S -2 F -( event and updates only those pieces of the keyboard description) 227.19 93 T -(that have changed. If the implicit support has not noted any keyboard mapping changes,) 108 80 T -1 F -(XRefr) 108 67 T -(eshK) 135.55 67 T -(e) 159.13 67 T -(yboar) 164.1 67 T -(dMapping) 191.65 67 T -2 F -( updates the entire keyboard description.) 240.98 67 T -FMENDPAGE -%%EndPage: "88" 100 -%%Page: "89" 101 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(89) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(12 Interpreting K) 415.66 744.87 T -(e) 497.25 744.87 T -(y Ev) 501.97 744.87 T -(ents) 522.28 744.87 T -2 12 Q -(The) 108 712 T -1 F -(XRebindK) 129.66 712 T -(e) 178.57 712 T -(ysym) 183.54 712 T -2 F -( function associates a string with a keysym and a set of modifiers.) 207.53 712 T -(Xkb does not directly change this function, but it does affect the way that the state) 108 699 T -(reported in the event is compared to the state specified to) 108 686 T -1 F -(XRebindK) 384.95 686 T -(e) 433.86 686 T -(ysym) 438.83 686 T -2 F -(. When Xkb is) 462.82 686 T -(missing or disabled,) 108 673 T -1 F -(XLookupString) 207.34 673 T -2 F -( returns the specified string if the modifiers in the) 280.01 673 T --0.33 (event exactly match the modifiers from this call. When Xkb is present, any modifiers used) 108 660 P -(to determine the keysym are consumed and are not used to look up the string.) 108 647 T -0 F -(12.2) 72 622 T -(Xkb Event and K) 108 622 T -(e) 202.51 622 T -(ymap Functions) 209 622 T -2 F -(To find the keysym bound to a particular key at a specified group and shift level, use) 108 602 T -1 F -(XkbKeycodeToKeysym) 108 589 T -2 F -(.) 217.97 589 T -2 11 Q -(K) 108 568.67 T -(e) 115.67 568.67 T -(ySym) 120.39 568.67 T -3 F -(XkbK) 148.81 568.67 T -(eycodeT) 177.27 568.67 T -(oK) 215.36 568.67 T -(eysym) 229.14 568.67 T -2 F -(\050) 258.47 568.67 T -1 F -(dpy) 262.13 568.67 T -(, kc, gr) 277.41 568.67 T -(oup, le) 307.46 568.67 T -(vel) 337.24 568.67 T -2 F -(\051) 350.07 568.67 T -(Display *) 126 555.67 T -(dp) 234 555.67 T -(y;) 244.89 555.67 T -(/* connection to X serv) 306 555.67 T -(er */) 408.49 555.67 T -(K) 126 542.67 T -(e) 133.67 542.67 T -(yCode) 138.39 542.67 T -(kc;) 234 542.67 T -(/* k) 306 542.67 T -(e) 322.7 542.67 T -(y of interest */) 327.42 542.67 T -(unsigned int) 126 529.67 T -(group;) 234 529.67 T -(/* group of interest */) 306 529.67 T -(unsigned int) 126 516.67 T -(le) 234 516.67 T -(v) 241.67 516.67 T -(el;) 247 516.67 T -(/* shift le) 306 516.67 T -(v) 347.28 516.67 T -(el of interest */) 352.62 516.67 T -1 12 Q --0.18 (XkbK) 108 497 P --0.18 (e) 134.24 497 P --0.18 (ycodeT) 139.21 497 P --0.18 (oK) 172.76 497 P --0.18 (e) 186.35 497 P --0.18 (ysym) 191.32 497 P -2 F --0.18 ( returns the keysym bound to a particular group and shift level for a) 215.3 497 P --0.38 (particular key on the core keyboard. If) 108 484 P -1 11 Q --0.35 (kc) 292.58 484 P -2 12 Q --0.38 ( is not a legal keycode for the core keyboard, or if) 302.35 484 P -1 11 Q --0.18 (gr) 108 471 P --0.18 (oup) 117.28 471 P -2 12 Q --0.2 ( or) 133.78 471 P -1 11 Q --0.18 (le) 149.39 471 P --0.18 (vel) 157.16 471 P -2 12 Q --0.2 ( are out of range for the specified key,) 169.99 471 P -1 F --0.2 (XkbK) 354.16 471 P --0.2 (e) 380.41 471 P --0.2 (ycodeT) 385.38 471 P --0.2 (oK) 418.93 471 P --0.2 (e) 432.51 471 P --0.2 (ysym) 437.48 471 P -2 F --0.2 ( returns) 461.47 471 P -5 F --0.43 -0.6 (NoSym-) 500.4 471 B --0.6 (bol) 108 458 S -2 F -(.) 127.8 458 T -(To find the set of modifiers bound to a particular keysym on the core keyboard, use) 108 437 T -1 11 Q -(XkbK) 108 424 T -(e) 132.06 424 T -(ysymT) 136.61 424 T -(oModi\336er) 163.7 424 T -(s) 206.98 424 T -2 12 Q -(.) 211.26 424 T -2 11 Q -(unsigned) 108 403.67 T -(int) 150.47 403.67 T -3 F -(XkbK) 164.84 403.67 T -(eysymT) 193.29 403.67 T -(oModi\336ers) 228.95 403.67 T -2 F -(\050) 279.67 403.67 T -1 F -(dpy) 283.33 403.67 T -2 F -(,) 298.5 403.67 T -1 F -( ks) 301.25 403.67 T -2 F -(\051) 313.16 403.67 T -(Display *) 126 390.67 T -1 F -(dpy) 234 390.67 T -2 F -(;) 249.88 390.67 T -(/* connection to X serv) 306 390.67 T -(er */) 408.49 390.67 T -(K) 126 377.67 T -(e) 133.67 377.67 T -(ySym) 138.39 377.67 T -1 F -(ks) 234 377.67 T -2 F -(;) 243.16 377.67 T -(/* k) 306 377.67 T -(e) 322.7 377.67 T -(ysym of interest */) 327.42 377.67 T -1 F -(XkbK) 108 358 T -(e) 132.06 358 T -(ysymT) 136.61 358 T -(oModi\336er) 163.7 358 T -(s) 206.98 358 T -2 12 Q -( finds the set of modifiers currently bound to the keysym) 211.26 358 T -1 F -(ks) 486.9 358 T -2 F -( on the) 496.89 358 T --0.01 (core keyboard. The value returned is the mask of modifiers bound to the keysym) 108 345 P -1 F --0.01 (ks) 498.06 345 P -2 F --0.01 (. If no) 508.05 345 P -(modifiers are bound to the keysym,) 108 332 T -1 11 Q -(XkbK) 280.98 332 T -(e) 305.04 332 T -(ysymT) 309.59 332 T -(oModi\336er) 336.68 332 T -(s) 379.96 332 T -2 12 Q -( returns zero; otherwise, it) 384.24 332 T -(returns the inclusive OR of zero or more of the following:) 108 319 T -5 F --0.6 (ShiftMask) 388.96 319 S -2 F -(,) 448.36 319 T -5 F --0.6 (ControlMask) 454.36 319 S -2 F -(,) 526.96 319 T -5 F --0.6 (LockMask) 108 306 S -2 F -(,) 160.8 306 T -5 F --0.6 (Mod1Mask) 166.8 306 S -2 F -(,) 219.6 306 T -5 F --0.6 (Mod2Mask) 225.6 306 S -2 F -(,) 278.4 306 T -5 F --0.6 (Mod3Mask) 284.4 306 S -2 F -(,) 337.2 306 T -5 F --0.6 (Mod4Mask,) 343.2 306 S -2 F -( and) 402.61 306 T -5 F --0.6 (Mod5Mask) 425.93 306 S -2 F -(.) 478.73 306 T -(Use) 108 285 T -1 F -(XkbLookupKeySym) 129.66 285 T -2 F -( to find the symbol associated with a key for a particular state.) 222.97 285 T -2 11 Q -(Bool) 108 264.67 T -3 F -(XkbLookupK) 132.15 264.67 T -(eySym) 197.29 264.67 T -2 F -(\050) 228.45 264.67 T -1 F -(dpy) 232.11 264.67 T -2 F -(,) 247.28 264.67 T -1 F -( k) 250.03 264.67 T -(e) 257.56 264.67 T -(y) 262.11 264.67 T -2 F -(,) 266.28 264.67 T -1 F -( state) 269.03 264.67 T -2 F -(,) 292.56 264.67 T -1 F -( mods_rtrn) 295.31 264.67 T -2 F -(,) 343.89 264.67 T -1 F -( sym_rtrn) 346.64 264.67 T -2 F -(\051) 389.12 264.67 T -(Display *) 126 251.67 T -1 F -(dpy) 234 251.67 T -2 F -(;) 249.88 251.67 T -(/* connection to X serv) 297.75 251.67 T -(er */) 400.24 251.67 T -(K) 126 238.67 T -(e) 133.67 238.67 T -(yCode) 138.39 238.67 T -1 F -(k) 234 238.67 T -(e) 238.77 238.67 T -(y) 243.33 238.67 T -2 F -(;) 248.21 238.67 T -(/* k) 297.75 238.67 T -(e) 314.45 238.67 T -(y for which symbols are to be found */) 319.17 238.67 T -(unsigned int) 126 225.67 T -1 F -(state) 234 225.67 T -2 F -(;) 254.78 225.67 T -(/* state for which symbol should be found */) 297.75 225.67 T -(unsigned int *) 126 212.67 T -1 F -(mods_rtrn) 234 212.67 T -2 F -(;) 279.84 212.67 T -(/* back\336lled with unconsumed modi\336ers */) 297.75 212.67 T -(K) 126 199.67 T -(e) 133.67 199.67 T -(ySym *) 138.39 199.67 T -1 F -(sym_rtrn) 234 199.67 T -2 F -(;) 273.72 199.67 T --0.19 (/* back\336lled with symbol associated with k) 297.75 199.67 P --0.19 (e) 487.17 199.67 P --0.19 (y + state */) 491.89 199.67 P -1 12 Q -(XkbLookupK) 108 180 T -(e) 170.24 180 T -(ySym) 175.21 180 T -2 F -( is the equivalent of the core) 200.53 180 T -1 F -(XLookupK) 339.5 180 T -(e) 390.42 180 T -(ySym) 395.39 180 T -2 F -( function. For the core) 420.71 180 T --0.28 (keyboard, given a keycode) 108 167 P -1 F --0.28 (k) 238.51 167 P --0.28 (e) 243.72 167 P --0.28 (y) 248.68 167 P -2 F --0.28 ( and an Xkb state) 254.01 167 P -1 F --0.28 (state) 338.93 167 P -2 F --0.28 (,) 361.6 167 P -1 F --0.28 (XkbLookupK) 367.32 167 P --0.28 (e) 429.56 167 P --0.28 (ySym) 434.53 167 P -2 F --0.28 ( returns the sym-) 459.85 167 P -(bol associated with the key in) 108 154 T -1 F -(sym_rtrn) 256.32 154 T -2 F -( and the list of modifiers that should still be) 299.65 154 T -(applied in) 108 141 T -1 F -(mods_rtrn) 158.66 141 T -2 F -(. The) 208.67 141 T -1 F -(state) 236.33 141 T -2 F -( parameter is the state from a) 259 141 T -5 F --0.6 (KeyPress) 401.29 141 S -2 F -( or) 454.09 141 T -5 F --0.6 (KeyRelease) 470.09 141 S -2 F -(event.) 108 128 T -1 F -(XkbLookupK) 139.99 128 T -(e) 202.24 128 T -(ySym) 207.2 128 T -2 F -( returns) 232.52 128 T -5 F --0.6 (True) 271.85 128 S -2 F -( if it succeeds.) 298.25 128 T -FMENDPAGE -%%EndPage: "89" 101 -%%Page: "90" 102 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(90) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(12 Interpreting K) 415.66 744.87 T -(e) 497.25 744.87 T -(y Ev) 501.97 744.87 T -(ents) 522.28 744.87 T -2 12 Q -(Use) 108 712 T -1 F -(XkbLookupKeyBinding) 129.66 712 T -2 F -( to find the string bound to a key by) 240.98 712 T -1 F -(XRebindKeySym) 415.64 712 T -2 F -(.) 495.62 712 T -1 F -(XkbLookupKeyBinding) 108 699 T -2 F -( is the equivalent of the core) 219.32 699 T -1 F -(XLookupString) 358.3 699 T -2 F -( function.) 430.97 699 T -2 11 Q -(int) 108 678.67 T -3 F -(XkbLookupK) 122.37 678.67 T -(eyBinding) 187.51 678.67 T -2 F -(\050) 235.19 678.67 T -1 F -(dpy) 238.86 678.67 T -2 F -(,) 254.02 678.67 T -1 F -( sym) 256.77 678.67 T -2 F -(,) 276.63 678.67 T -1 F -( state) 279.38 678.67 T -2 F -(,) 302.91 678.67 T -1 F -( b) 305.66 678.67 T -(uf) 313.69 678.67 T -2 F -(,) 322.25 678.67 T -1 F -( nbytes) 325 678.67 T -2 F -(,) 355.85 678.67 T -1 F -( e) 358.6 678.67 T -(xtr) 366.02 678.67 T -(a_rtrn) 378.07 678.67 T -2 F -(\051) 406.19 678.67 T -(Display *) 126 665.67 T -1 F -(dpy) 234 665.67 T -2 F -(;) 249.88 665.67 T -(/* connection to serv) 306 665.67 T -(er */) 397.8 665.67 T -(K) 126 652.67 T -(e) 133.67 652.67 T -(ySym) 138.39 652.67 T -1 F -(sym) 234 652.67 T -2 F -(;) 251.1 652.67 T -(/* symbol to be look) 306 652.67 T -(ed up */) 396.34 652.67 T -(unsigned int) 126 639.67 T -1 F -(state) 234 639.67 T -2 F -(;) 254.78 639.67 T -(/* state for which string is to be look) 306 639.67 T -(ed up */) 467.22 639.67 T -(char *) 126 626.67 T -1 F -(b) 234 626.67 T -(uf) 239.28 626.67 T -2 F -(;) 247.84 626.67 T -(/* b) 306 626.67 T -(uf) 322.59 626.67 T -(fer into which returned string is written */) 331.48 626.67 T -(int) 126 613.67 T -1 F -(nbytes) 234 613.67 T -2 F -(;) 262.11 613.67 T -(/* size of b) 306 613.67 T -(uf) 354.36 613.67 T -(fer in bytes */) 363.24 613.67 T -(int *) 126 600.67 T -1 F -(e) 234 600.67 T -(xtr) 238.66 600.67 T -(a_rtrn) 250.72 600.67 T -2 F -(;) 278.84 600.67 T -(/* back\336lled with number bytes o) 306 600.67 T -(v) 453.41 600.67 T -(er\337o) 458.75 600.67 T -(w */) 478.63 600.67 T -1 12 Q -(XRebindK) 108 581 T -(e) 156.91 581 T -(ysym) 161.88 581 T -2 F -( binds an ASCII string to a specified keysym, so that the string and key-) 185.87 581 T -(sym are returned when the key is pressed and a specified list of modifiers are also being) 108 568 T -(held down.) 108 555 T -1 F -(XkbLookupK) 164.33 555 T -(e) 226.57 555 T -(yBinding) 231.54 555 T -2 F -( returns in) 274.87 555 T -1 F -(b) 326.53 555 T -(uf) 332.29 555 T -2 F -( the string associated with the keysym) 341.63 555 T -1 F -(sym) 108 542 T -2 F -( and modifier state) 126.66 542 T -1 F -(state) 219.31 542 T -2 F -(.) 241.98 542 T -1 F -(b) 247.98 542 T -(uf) 253.74 542 T -2 F -( is) 263.08 542 T -5 F --0.6 (NULL) 277.08 542 S -2 F -( terminated unless there\325s an overflow. If the) 303.48 542 T -(string returned is larger than) 108 529 T -1 F -(nbytes) 246.97 529 T -2 F -(, a count of bytes that does not fit into the buffer is) 277.63 529 T -(returned in) 108 516 T -1 F -(extra_rtrn) 163.32 516 T -2 F -(.) 212.65 516 T -1 F -(XkbTranslateKeySym) 218.65 516 T -2 F -( returns the number of bytes that it placed) 321.97 516 T -(into) 108 503 T -1 F -(b) 129.67 503 T -(uf) 135.43 503 T -2 F -(.) 144.77 503 T -(To find the string and symbol associated with a keysym for a given keyboard state, use) 108 482 T -1 F -(XkbTranslateKeySym) 108 469 T -2 F -(.) 211.32 469 T -2 11 Q -(int) 108 448.67 T -3 F -(XkbT) 122.37 448.67 T -(ranslateK) 149.06 448.67 T -(eySym) 195.23 448.67 T -2 F -(\050) 226.39 448.67 T -1 F -(dpy) 230.06 448.67 T -2 F -(,) 245.23 448.67 T -1 F -( sym_inout) 247.98 448.67 T -2 F -(,) 295.95 448.67 T -1 F -( mods) 298.7 448.67 T -2 F -(,) 324.67 448.67 T -1 F -( b) 327.42 448.67 T -(uf) 335.45 448.67 T -2 F -(,) 344.01 448.67 T -1 F -( nbytes) 346.76 448.67 T -2 F -(,) 377.61 448.67 T -1 F -(e) 383.11 448.67 T -(xtr) 387.77 448.67 T -(a_rtrn) 399.83 448.67 T -2 F -(\051) 427.95 448.67 T -(Display *) 126 435.67 T -1 F -(dpy) 234 435.67 T -2 F -(;) 249.88 435.67 T -(/* connection to X serv) 306 435.67 T -(er */) 408.49 435.67 T -(K) 126 422.67 T -(e) 133.67 422.67 T -(ySym *) 138.39 422.67 T -1 F -(sym_inout) 234 422.67 T -2 F -(;) 279.22 422.67 T -(/* symbol to be translated; result of translation */) 306 422.67 T -(unsigned int) 126 409.67 T -1 F -(mods) 234 409.67 T -2 F -(;) 257.22 409.67 T -(/* modi\336ers to apply to) 306 409.67 T -1 F -(sym_inout) 411.42 409.67 T -2 F -( */) 456.64 409.67 T -(char *) 126 396.67 T -1 F -(b) 234 396.67 T -(uf) 239.28 396.67 T -2 F -(;) 247.84 396.67 T -(/* b) 306 396.67 T -(uf) 322.59 396.67 T -(fer into which returned string is written */) 331.48 396.67 T -(int) 126 383.67 T -1 F -(nbytes) 234 383.67 T -2 F -(;) 262.11 383.67 T -(/* size of b) 306 383.67 T -(uf) 354.36 383.67 T -(fer in bytes */) 363.24 383.67 T -(int *) 126 370.67 T -1 F -(e) 234 370.67 T -(xtr) 238.66 370.67 T -(a_rtrn) 250.72 370.67 T -2 F -(;) 278.84 370.67 T -(/* number of bytes o) 306 370.67 T -(v) 396.88 370.67 T -(er\337o) 402.22 370.67 T -(w*/) 422.11 370.67 T -1 12 Q -(XkbT) 108 351 T -(r) 132.67 351 T -(anslateK) 137.16 351 T -(e) 179.41 351 T -(ySym) 184.38 351 T -2 F -( applies the transformations specified in) 209.7 351 T -1 F -(mods) 404.34 351 T -2 F -( to the symbol speci-) 429.67 351 T -(fied by) 108 338 T -1 F -(sym_inout) 144.66 338 T -2 F -(. It returns in) 193.99 338 T -1 F -(b) 258.98 338 T -(uf) 264.74 338 T -2 F -( the string, if any, associated with the keysym for the) 274.08 338 T -(current locale. If the transformations in) 108 325 T -1 F -(mods) 298.96 325 T -2 F -( changes the keysym,) 324.29 325 T -1 F -(sym_inout) 429.94 325 T -2 F -( is updated) 479.27 325 T -(accordingly. If the string returned is larger than) 108 312 T -1 F -(nbytes) 338.28 312 T -2 F -(, a count of bytes that does not fit) 368.94 312 T --0.2 (into the buffer is returned in) 108 299 P -1 F --0.2 (extra_rtrn) 244.77 299 P -2 F --0.2 (.) 294.11 299 P -1 F --0.2 (XkbTranslateKeySym) 299.91 299 P -2 F --0.2 ( returns the number of bytes) 403.23 299 P -(it placed into) 108 286 T -1 F -(b) 173.66 286 T -(uf) 179.42 286 T -2 F -(.) 188.76 286 T -(To update the keyboard description that is internal to the X library, use) 108 265 T -1 F -(XkbRefr) 451.28 265 T -(eshK) 490.16 265 T -(e) 513.74 265 T -(y-) 518.71 265 T -(boar) 108 252 T -(dMapping) 130.22 252 T -2 F -(.) 179.56 252 T -2 11 Q -(Status) 108 231.67 T -3 F -(XkbRefr) 137.65 231.67 T -(eshK) 178.99 231.67 T -(eyboardMapping) 202.56 231.67 T -2 F -(\050) 283.85 231.67 T -1 F -(e) 287.51 231.67 T -(vent\051) 292.23 231.67 T -2 F -(XkbMapNotifyEv) 126 218.67 T -(ent *) 205.88 218.67 T -1 F -(e) 234 218.67 T -(vent) 238.72 218.67 T -2 F -(;) 257.05 218.67 T -(/* e) 306 218.67 T -(v) 321.92 218.67 T -(ent initiating remapping */) 327.25 218.67 T -1 12 Q -(XkbRefr) 108 199 T -(eshK) 146.88 199 T -(e) 170.46 199 T -(yboar) 175.43 199 T -(dMapping) 202.98 199 T -2 F -( is the Xkb equivalent of the core) 252.31 199 T -1 F -(XRefr) 414.95 199 T -(eshK) 442.5 199 T -(e) 466.08 199 T -(yboar) 471.05 199 T -(dMap-) 498.6 199 T -(ping) 108 186 T -2 F -(function. It requests that the X server send the current key mapping information to) 132.34 186 T -(this client. A client usually invokes) 108 173 T -1 F -(XkbRefr) 280.33 173 T -(eshK) 319.21 173 T -(e) 342.79 173 T -(yboar) 347.76 173 T -(dMapping) 375.31 173 T -2 F -( after receiving an) 424.64 173 T -5 F --0.25 -0.6 (XkbMapNotify) 108 160 B -2 F --0.11 ( event.) 187.2 160 P -1 F --0.11 (XkbRefr) 221.97 160 P --0.11 (eshK) 260.85 160 P --0.11 (e) 284.43 160 P --0.11 (yboar) 289.4 160 P --0.11 (dMapping) 316.95 160 P -2 F --0.11 ( returns) 366.28 160 P -5 F --0.25 -0.6 (Success) 405.38 160 B -2 F --0.11 ( if it succeeds and) 451.58 160 P -5 F --0.6 (BadMatch) 108 147 S -2 F -( if the event is not an Xkb event.) 160.8 147 T -(The) 108 126 T -5 F --0.6 (XkbMapNotify) 129.66 126 S -2 F -( event can be generated when some client calls) 208.86 126 T -1 F -(XkbSetMap) 436.46 126 T -2 F -(,) 491.79 126 T -1 F --0.32 (XkbChang) 108 113 P --0.32 (eMap) 158.54 113 P -2 F --0.32 (,) 185.87 113 P -1 F --0.32 (XkbGetK) 191.54 113 P --0.32 (e) 235.12 113 P --0.32 (yboar) 240.08 113 P --0.32 (dByName) 267.64 113 P -2 F --0.32 (, or any of the standard X library functions that) 314.29 113 P -(change the keyboard mapping or modifier mapping.) 108 100 T -FMENDPAGE -%%EndPage: "90" 102 -%%Page: "91" 103 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(91) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(12 Interpreting K) 415.66 744.87 T -(e) 497.25 744.87 T -(y Ev) 501.97 744.87 T -(ents) 522.28 744.87 T -2 12 Q -(To translate a keycode to a key symbol and modifiers, use) 108 712 T -1 F -(XkbTranslateKeyCode) 389.95 712 T -2 F -(.) 498.61 712 T -2 11 Q -(Booll) 108 691.67 T -3 F -(XkbT) 135.2 691.67 T -(ranslateK) 161.9 691.67 T -(eyCode) 208.07 691.67 T -2 F -(\050) 242.89 691.67 T -1 F -(xkb, k) 246.56 691.67 T -(e) 272.1 691.67 T -(y) 276.65 691.67 T -(, mods, mods_rtrn, k) 280.93 691.67 T -(e) 371.26 691.67 T -(ysym_rtrn\051) 375.82 691.67 T -2 F -(XkbDescPtr) 126 678.67 T -1 F -(xkb) 234 678.67 T -2 F -(;) 249.27 678.67 T -(/* k) 306 678.67 T -(e) 322.7 678.67 T -(yboard description to use for translation */) 327.42 678.67 T -(K) 126 665.67 T -(e) 133.67 665.67 T -(yCode) 138.39 665.67 T -1 F -(k) 234 665.67 T -(e) 238.77 665.67 T -(y) 243.33 665.67 T -2 F -(;) 248.21 665.67 T -(/* k) 306 665.67 T -(e) 322.7 665.67 T -(ycode to translate */) 327.42 665.67 T -(unsigned int) 126 652.67 T -1 F -(mods) 234 652.67 T -2 F -(;) 257.22 652.67 T -(/* modi\336ers to apply when translating) 306 652.67 T -1 F -(k) 475.88 652.67 T -(e) 480.66 652.67 T -(y) 485.21 652.67 T -2 F -( */) 490.1 652.67 T -(unsigned int *) 126 639.67 T -1 F -(mods_rtrn) 234 639.67 T -2 F -(;) 279.84 639.67 T -(/* back\336lled with unconsumed modi\336ers */) 306 639.67 T -(K) 126 626.67 T -(e) 133.67 626.67 T -(ySym *) 138.39 626.67 T -1 F -(k) 234 626.67 T -(e) 238.77 626.67 T -(ysym_rtrn) 243.33 626.67 T -2 F -(;) 287.93 626.67 T -(/* k) 306 626.67 T -(e) 322.7 626.67 T -(ysym resulting from translation */) 327.42 626.67 T -1 12 Q -(mods_rtrn) 108 607 T -2 11 Q -( is back\336lled with the modi\336ers consumed by the translation process.) 158 607 T -1 12 Q -(mods) 465.01 607 T -2 F -( is a bit-) 490.34 607 T -(wise inclusive OR of the legal modifier masks:) 108 594 T -5 F --0.6 (ShiftMask) 336.65 594 S -2 F -(,) 396.05 594 T -5 F --0.6 (LockMask) 402.05 594 S -2 F -(,) 454.85 594 T -5 F --0.6 (ControlMask) 460.85 594 S -2 F -(,) 533.45 594 T -5 F --0.6 (Mod1Mask) 108 581 S -2 F -(,) 160.8 581 T -5 F --0.6 (Mod2Mask) 166.8 581 S -2 F -(,) 219.6 581 T -5 F --0.6 (Mod3Mask) 225.6 581 S -2 F -(,) 278.4 581 T -5 F --0.6 (Mod4Mask) 284.4 581 S -2 F -(,) 337.2 581 T -5 F --0.6 (Mod5Mask) 343.2 581 S -2 11 Q -(.The) 396.01 581 T -5 12 Q --0.6 (AlwaysConsume-) 418.61 581 S --0.6 (ShiftAndLock) 108 568 S -2 11 Q -( library control \050see section 11.1.3\051, if enabled, causes) 187.2 568 T -1 12 Q -(XkbTranslateKeyCode) 427.62 568 T -2 11 Q -(to consume shift and lock.) 108 555 T -1 12 Q -( XkbTranslateKeyCode) 223.8 555 T -2 F -( returns) 335.46 555 T -5 F --0.6 (True) 374.78 555 S -2 F -( if the translation resulted in) 401.18 555 T -(a keysym, and) 108 542 T -5 F --0.6 (False) 179.99 542 S -2 F -( if it resulted in) 212.99 542 T -5 F --0.6 (NoSymbol) 289.32 542 S -2 F -(.) 342.12 542 T -FMENDPAGE -%%EndPage: "91" 103 -%%Page: "92" 104 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(92) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(13 K) 431.08 744.87 T -(e) 457.99 744.87 T -(yboard Geometry) 462.71 744.87 T -0 14 Q -(13) 72 710.67 T -(K) 108 710.67 T -(e) 117.9 710.67 T -(yboar) 125.47 710.67 T -(d Geometr) 163.31 710.67 T -(y) 233.47 710.67 T -2 12 Q --0.17 (The Xkb description of a keyboard includes an optional) 108 688 P -1 F --0.17 (keyboard geometry) 376.73 688 P -2 F --0.17 (that describes) 471.69 688 P -(the physical appearance of the keyboard. Keyboard geometry describes the shape, loca-) 108 675 T -(tion, and color of all keyboard keys or other visible keyboard components such as indica-) 108 662 T -(tors. The information contained in a keyboard geometry is sufficient to allow a client) 108 649 T -(program to draw an accurate two-dimensional image of the keyboard.) 108 636 T -(You can retrieve a keyboard geometry from an X server that supports Xkb, or you can) 108 615 T -(allocate it from scratch and initialize it in a client program. The keyboard geometry need) 108 602 T --0.06 (not have any correspondence with the physical keyboard that is connected to the X server.) 108 589 P --0.28 (Geometry measurements are specified in) 108 568 P -2 9.6 Q --0.22 (mm) 305.57 572.8 P -2 12 Q --0.28 (/) 320.51 568 P -2 9.6 Q --0.22 (10) 323.84 565 P -2 12 Q --0.28 ( units. The origin \0500,0\051 is in the top left cor-) 333.44 568 P --0.41 (ner of the keyboard image. A component\325s own origin is also its upper left corner. In some) 108 555 P --0.41 (cases a component needs to be drawn rotated. For example, a special keyboard may have a) 108 542 P -(section of keys arranged in rows in a rectangular area, but the entire rectangle may not be) 108 529 T -(in alignment with the rest of the keyboard, and instead, it is rotated from horizontal by) 108 516 T -(30) 108 503 T -2 9.6 Q -(o) 120 507.8 T -2 12 Q -(. Rotation for a geometry object is specified in) 124.8 503 T -2 9.6 Q -(1) 350.77 507.8 T -2 12 Q -(/) 355.57 503 T -2 9.6 Q -(10) 358.91 500 T -(o) 370.91 507.8 T -2 12 Q -(increments about its origin. An) 378.11 503 T -(example of a keyboard with rotated sections is shown in Figure 13.1.) 108 490 T -3 F -(Figur) 212.64 330.25 T -(e 131 Rotated K) 241.09 330.25 T -(eyboard Sections) 326.11 330.25 T -2 F -(Some geometry components include a) 108 302.25 T -1 F -(priority) 294.31 302.25 T -2 F -(, which indicates the order in which over-) 330.98 302.25 T -(lapping objects should be drawn. Objects should be drawn in order from highest priority) 108 289.25 T -(\0500\051 to lowest \050255\051.) 108 276.25 T -(The keyboard geometry\325s top-level) 108 255.25 T -2 11 Q -( description is stored in a) 276.96 255.25 T -5 12 Q --0.6 (XkbGeometryRec) 390.01 255.25 S -2 11 Q -( structure.) 482.41 255.25 T -2 12 Q -(This structure contains three types of information:) 108 242.25 T -(1.) 126 221.25 T -(Lists of items, not used to draw the basic keyboard, but indexed by the geometry) 144 221.25 T -(descriptions that comprise the entire keyboard geometry \050colors, geometry proper-) 144 208.25 T -(ties, key aliases, shapes\051) 144 195.25 T -(2.) 126 180.25 T -(A number of singleton items that describe the keyboard as a whole \050keyboard) 144 180.25 T -(name, width and height, a color for the keyboard as a whole, and a color for key-) 144 167.25 T -(board key labels\051) 144 154.25 T -(3.) 126 139.25 T -(A list of the keyboard\325s sections and nonkey doodads) 144 139.25 T -(The top-level geometry is described in more detail in the following.) 108 120.25 T --0.09 (The lists of items used by components of the keyboard geometry description is as follows:) 108 99.25 P -114.19 351.25 497.81 486 C -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -277.63 396.56 342.43 472.16 R -7 X -0 0 0 1 0 0 0 K -V -1 H -0 Z -0 X -N -281.23 457.76 293.83 468.56 R -7 X -V -0 X -N -295.63 457.76 308.23 468.56 R -7 X -V -0 X -N -310.03 457.76 322.63 468.56 R -7 X -V -0 X -N -326.59 457.76 338.83 468.56 R -7 X -V -0 X -N -281.23 443.36 293.83 454.16 R -7 X -V -0 X -N -295.63 443.36 308.23 454.16 R -7 X -V -0 X -N -310.03 443.36 322.63 454.16 R -7 X -V -0 X -N -326.59 429.32 338.83 453.8 R -7 X -V -0 X -N -281.23 428.96 293.83 439.76 R -7 X -V -0 X -N -295.63 428.96 308.23 439.76 R -7 X -V -0 X -N -310.03 428.96 322.63 439.76 R -7 X -V -0 X -N -281.77 400.16 307.69 410.96 R -7 X -V -0 X -N -310.03 400.16 322.63 410.96 R -7 X -V -0 X -N -281.23 414.56 293.83 425.36 R -7 X -V -0 X -N -295.63 414.56 308.23 425.36 R -7 X -V -0 X -N -310.03 414.56 322.63 425.36 R -7 X -V -0 X -N -326.59 400.52 338.83 425 R -7 X -V -0 X -N -252.8 441.23 243.35 448.42 236.55 438.97 246 431.79 4 Y -N -232.83 438.81 223.38 445.99 216.57 436.54 226.02 429.36 4 Y -N -240.84 450.05 231.39 457.24 224.58 447.79 234.03 440.61 4 Y -N -244.35 430.08 234.9 437.26 228.09 427.81 237.54 420.63 4 Y -N -256.05 421.26 246.6 428.44 239.79 418.99 249.24 411.81 4 Y -N -264.05 432.51 254.6 439.69 247.8 430.24 257.25 423.06 4 Y -N -267.75 432.52 249.75 408.07 212.81 436.01 230.62 460.64 4 Y -N -368.93 441.23 378.38 448.42 385.18 438.97 375.73 431.79 4 Y -N -388.91 438.81 398.36 445.99 405.17 436.54 395.71 429.36 4 Y -N -380.9 450.05 390.35 457.24 397.15 447.79 387.7 440.61 4 Y -N -377.39 430.08 386.84 437.26 393.64 427.81 384.2 420.63 4 Y -N -365.69 421.26 375.14 428.44 381.95 418.99 372.49 411.81 4 Y -N -357.68 432.51 367.13 439.69 373.93 430.24 364.48 423.06 4 Y -N -353.99 432.52 371.99 408.07 408.92 436.01 391.11 460.64 4 Y -N -2 12 Q -(Rotated Sections) 269.86 361.11 T -257.36 393.35 255.05 392.07 252.88 401.41 259.67 394.64 4 Y -N -257.36 393.35 255.05 392.07 252.88 401.41 259.67 394.64 4 Y -V -267 376 257.6 392.92 2 L -N -362.64 393.35 360.33 394.64 367.12 401.41 364.95 392.07 4 Y -N -362.64 393.35 360.33 394.64 367.12 401.41 364.95 392.07 4 Y -V -353 376 362.4 392.92 2 L -N -204.19 387 420.19 477 R -0.5 H -N -0 0 612 792 C -FMENDPAGE -%%EndPage: "92" 104 -%%Page: "93" 105 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(93) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(13 K) 431.08 744.87 T -(e) 457.99 744.87 T -(yboard Geometry) 462.71 744.87 T -(\245) 126 712.67 T --0.13 (The top-le) 139.68 712.67 P --0.13 (v) 184.79 712.67 P --0.13 (el k) 190.12 712.67 P --0.13 (e) 206.07 712.67 P --0.13 (yboard geometry description includes a list of up to) 210.79 712.67 P -5 12 Q --0.32 -0.6 (MaxColors) 439.04 712.67 B -2 11 Q --0.13 ( \05032\051) 498.44 712.67 P -1 12 Q -(color names) 139.68 700.67 T -2 11 Q -(. A color name is a string whose interpretation is not speci\336ed by Xkb) 198.67 700.67 T -(.) 506.2 700.67 T -(The) 139.68 688.67 T -5 12 Q --0.6 (XkbColorRec) 159.54 688.67 S -2 11 Q -( structure pro) 232.14 688.67 T -(vides a \336eld for this name as well as a pix) 290.62 688.67 T -(el \336eld.) 474.38 688.67 T -(The pix) 139.68 676.67 T -(el \336eld is a con) 173.43 676.67 T -(v) 239.59 676.67 T -(enient place for an application to store a pix) 244.93 676.67 T -(el v) 437.83 676.67 T -(alue or color) 453.75 676.67 T -(de\336nition, if it needs to. All other geometry data structures refer to colors using their) 139.68 664.67 T -(indices in this global list.) 139.68 652.67 T -(\245) 126 640.67 T -(The top-le) 139.68 640.67 T -(v) 184.92 640.67 T -(el k) 190.26 640.67 T -(e) 206.34 640.67 T -(yboard geometry description includes a list of) 211.06 640.67 T -1 12 Q -(g) 415.45 640.67 T -(eometry pr) 421.33 640.67 T -(operties) 473.11 640.67 T -2 11 Q -(.) 511.77 640.67 T -(A geometry property associates an arbitrary string with an equally arbitrary name.) 139.68 628.67 T -(Geometry properties can be used to pro) 139.68 616.67 T -(vide hints to programs that display images of) 313.03 616.67 T -(k) 139.68 604.67 T -(e) 145.07 604.67 T -(yboards, b) 149.79 604.67 T -(ut the) 195.4 604.67 T -(y are not interpreted by Xkb) 219.98 604.67 T -(. No other geometry structures refer to) 343.87 604.67 T -(geometry properties. As an e) 139.68 592.67 T -(xample of a possible use of) 266.29 592.67 T -1 12 Q -(pr) 389.11 592.67 T -(operties) 399.23 592.67 T -2 11 Q -(, consider the) 437.9 592.67 T -(pause/break k) 139.68 580.67 T -(e) 200.36 580.67 T -(y on most PC k) 205.07 580.67 T -(e) 272.81 580.67 T -(yboards: the \322break\323 symbol is usually on the front of) 277.53 580.67 T -(the k) 139.68 568.67 T -(e) 161.26 568.67 T -(y and is often a dif) 165.98 568.67 T -(ferent color) 247.89 568.67 T -(. A program might set a property to:) 298.29 568.67 T -(LBL_P) 139.68 556.67 T -(A) 171.06 556.67 T -(US = \322{P) 178.4 556.67 T -(ause/top/black,Break/front/red}\323) 220.28 556.67 T -(and use the property information to dra) 139.68 543.67 T -(w the k) 311.82 543.67 T -(e) 344.09 543.67 T -(y with a front label as well as a top) 348.81 543.67 T -(label.) 139.68 530.67 T -(\245) 126 517.67 T --0.17 (The top-le) 139.68 517.67 P --0.17 (v) 184.75 517.67 P --0.17 (el k) 190.09 517.67 P --0.17 (e) 206 517.67 P --0.17 (yboard geometry description includes a list of) 210.72 517.67 P -1 F --0.17 (key aliases) 413.93 517.67 P -2 F --0.17 ( \050see Chapter) 461.72 517.67 P -(18\051. K) 139.68 505.67 T -(e) 167.51 505.67 T -(y aliases allo) 172.23 505.67 T -(w the k) 228.78 505.67 T -(e) 261.05 505.67 T -(yboard layout designer to assign multiple k) 265.77 505.67 T -(e) 455.71 505.67 T -(y names to a) 460.43 505.67 T -(single k) 139.68 493.67 T -(e) 174.1 493.67 T -(y) 178.82 493.67 T -(.) 183.6 493.67 T -0 12 Q -(Note) 126 475.67 T -2 11 Q --0.19 (K) 162 475.67 P --0.19 (e) 169.67 475.67 P --0.19 (y aliases de\336ned in the geometry component of a k) 174.39 475.67 P --0.19 (e) 396.47 475.67 P --0.19 (yboard mapping o) 401.19 475.67 P --0.19 (v) 480.68 475.67 P --0.19 (erride those) 486.02 475.67 P -(de\336ned in the k) 162 463.67 T -(e) 230.02 463.67 T -(ycodes component of the serv) 234.74 463.67 T -(er database, which are stored in the) 365.94 463.67 T -5 12 Q --0.6 (XkbNamesRec) 162 451.67 S -2 11 Q -( \050) 234.6 451.67 T -1 12 Q -(xkb->names) 241.01 451.67 T -2 11 Q -(\051. Therefore, consider the k) 300.43 451.67 T -(e) 420.05 451.67 T -(y aliases de\336ned by the) 424.77 451.67 T -(geometry before considering k) 162 439.67 T -(e) 296.61 439.67 T -(y aliases supplied by the k) 301.33 439.67 T -(e) 417.01 439.67 T -(ycodes.) 421.73 439.67 T -(\245) 126 419.67 T --0.06 (The top-le) 139.68 419.67 P --0.06 (v) 184.87 419.67 P --0.06 (el k) 190.2 419.67 P --0.06 (e) 206.23 419.67 P --0.06 (yboard geometry description includes a list of) 210.95 419.67 P -1 12 Q --0.06 (shapes) 414.94 419.67 P -2 11 Q --0.06 (; other k) 447.6 419.67 P --0.06 (e) 484.04 419.67 P --0.06 (yboard) 488.76 419.67 P -(components refer to shapes by their inde) 139.68 407.67 T -(x in this list. A shape consists of an arbitrary) 317.92 407.67 T -(name of type Atom and one or more closed-polygon) 139.68 395.67 T -1 12 Q -(outlines) 372.78 395.67 T -2 11 Q -(. All points in an outline) 410.79 395.67 T -(are speci\336ed relati) 139.68 383.67 T -(v) 220.05 383.67 T -(e to the origin of its enclosing shape, that is, whiche) 225.38 383.67 T -(v) 453.64 383.67 T -(er shape that) 458.98 383.67 T -(contains this outline in its list of outlines. One outline is the primary outline. The pri-) 139.68 371.67 T -(mary outline is by def) 139.68 359.67 T -(ault the \336rst outline, or it can be optionally speci\336ed by the) 236.12 359.67 T -1 12 Q -(pri-) 498.58 359.67 T -(mary) 139.68 347.67 T -2 11 Q -( \336eld in the) 164.34 347.67 T -5 12 Q --0.6 (XkbShapeRec) 216.9 347.67 S -2 11 Q -( structure. A k) 289.5 347.67 T -(e) 352.32 347.67 T -(yboard display application can) 357.04 347.67 T -(generate a simpler b) 139.68 335.67 T -(ut still accurate k) 228.35 335.67 T -(e) 303.7 335.67 T -(yboard image by displaying only the primary) 308.42 335.67 T -(outlines for each shape. Nonrectangular k) 139.68 323.67 T -(e) 322.85 323.67 T -(ys must include a rectangular) 327.57 323.67 T -1 12 Q -(appr) 459.24 323.67 T -(oxima-) 481.37 323.67 T -(tion) 139.68 311.67 T -2 11 Q -( as one of the outlines associated with the shape. The approximation is not nor-) 158.35 311.67 T -(mally displayed b) 139.68 299.67 T -(ut can be used by v) 217.68 299.67 T -(ery simple k) 302.14 299.67 T -(e) 356.41 299.67 T -(yboard display applications to) 361.13 299.67 T -(generate a recognizable b) 139.68 287.67 T -(ut de) 251.55 287.67 T -(graded image of the k) 273.08 287.67 T -(e) 368.89 287.67 T -(yboard.) 373.61 287.67 T -2 12 Q --0.6 (The) 108 269 P -5 F --1.31 -0.6 (XkbGeometryRec) 129.06 269 B -2 F --0.6 ( top-level geometry description contains the following information) 221.47 269 P -(that pertains to the keyboard as a whole:) 108 256 T -2 11 Q -(\245) 126 235.67 T -(A) 139.68 235.67 T -1 12 Q -(k) 150.37 235.67 T -(e) 155.58 235.67 T -(yboar) 160.55 235.67 T -(d symbolic name) 188.1 235.67 T -2 11 Q -( of type Atom to help users identify the k) 268.75 235.67 T -(e) 449.82 235.67 T -(yboard.) 454.54 235.67 T -(\245) 126 223.67 T -(The) 139.68 223.67 T -1 12 Q -(width) 159.54 223.67 T -2 11 Q -( and) 186.21 223.67 T -1 12 Q -(height) 207.6 223.67 T -2 11 Q -( of the k) 237.6 223.67 T -(e) 273.84 223.67 T -(yboard, in) 278.56 223.67 T -2 9.6 Q -(mm) 325.91 228.47 T -2 12 Q -(/) 340.85 223.67 T -2 9.6 Q -(10) 344.19 220.67 T -2 11 Q -(. F) 353.79 223.67 T -(or nonrectangular k) 365.24 223.67 T -(e) 451.27 223.67 T -(yboards, the) 455.99 223.67 T -(width and height describe the smallest bounding box that encloses the outline of the) 139.68 211.67 T -(k) 139.68 199.67 T -(e) 145.07 199.67 T -(yboard.) 149.79 199.67 T -(\245) 126 187.67 T -(The) 139.68 187.67 T -1 12 Q -( base color) 156.79 187.67 T -2 11 Q -( of the k) 210.11 187.67 T -(e) 246.36 187.67 T -(yboard is the predominant color on the k) 251.08 187.67 T -(e) 429.7 187.67 T -(yboard and is used) 434.41 187.67 T -(as the def) 139.68 175.67 T -(ault color for an) 181.72 175.67 T -(y components whose color is not e) 252.12 175.67 T -(xplicitly speci\336ed.) 404.11 175.67 T -(\245) 126 163.67 T -(The) 139.68 163.67 T -1 12 Q -(label color) 159.54 163.67 T -2 11 Q -( is the color used to dra) 211.87 163.67 T -(w the labels on most of the k) 314.35 163.67 T -(e) 441.04 163.67 T -(yboard k) 445.76 163.67 T -(e) 484.45 163.67 T -(ys.) 489.17 163.67 T -(\245) 126 151.67 T --0.33 (The) 139.68 151.67 P -1 12 Q --0.36 (label font) 159.2 151.67 P -2 11 Q --0.33 ( is a string that describes the font used to dra) 204.51 151.67 P --0.33 (w labels on most k) 397.16 151.67 P --0.33 (e) 478.22 151.67 P --0.33 (ys; label) 482.94 151.67 P -(fonts are arbitrary strings, because Xkb does not specify the format or name space for) 139.68 139.67 T -(font names.) 139.68 127.67 T -2 12 Q --0.45 (The keyboard is subdivided into named) 108 109 P -1 F --0.45 (sections) 297.96 109 P -2 F --0.45 ( of related keys and) 336.62 109 P -1 F --0.45 (doodads) 431.35 109 P -2 F --0.45 (. The sections) 472.02 109 P -(and doodads on the keyboard are listed in the) 108 96 T -5 F --0.6 (XkbGeometryRec) 328.3 96 S -2 F -( top-level keyboard) 420.7 96 T --0.1 (geometry description. A) 108 83 P -1 F --0.1 (section) 227.02 83 P -2 F --0.1 ( is composed of keys that are physically together and logi-) 261.02 83 P -FMENDPAGE -%%EndPage: "93" 105 -%%Page: "94" 106 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(94) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(13 K) 431.08 744.87 T -(e) 457.99 744.87 T -(yboard Geometry) 462.71 744.87 T -2 12 Q -(cally related. Figure 13.2 shows a keyboard that is divided into four sections. A) 108 712 T -1 F -(doodad) 492.29 712 T -2 F -(describes some visible aspect of the keyboard that is not a key and is not a section.) 108 699 T -3 F -(Figur) 206.12 497 T -(e 13.2 K) 234.57 497 T -(eyboard with F) 278.93 497 T -(our Sections) 356.63 497 T -0 F -(13.1) 72 469 T -(Shapes and Outlines) 108 469 T -2 F --0.22 (A) 108 449 P -1 F --0.22 (shape) 119.44 449 P -2 F --0.22 (, used to draw keyboard components and stored in a) 147.44 449 P -5 F --0.49 -0.6 (XkbShapeRec) 397.52 449 B -2 F --0.22 ( structure, has:) 470.12 449 P -2 11 Q -(\245) 126 428.67 T -(An arbitrary name of type Atom.) 139.68 428.67 T -(\245) 126 416.67 T -(Bounds \050tw) 139.68 416.67 T -(o x and y coordinates\051 that describe the corners of a rectangle containing) 190.6 416.67 T -(the shape\325) 139.68 404.67 T -(s top surf) 183.98 404.67 T -(ace outline.) 224.81 404.67 T -(\245) 126 392.67 T -(A list of one or more outlines \050described belo) 139.68 392.67 T -(w\051.) 339.21 392.67 T -(\245) 126 380.67 T -(Optional pointers to a primary and an approximation outline \050described belo) 139.68 380.67 T -(w\051. If) 474.86 380.67 T -(either of these pointers is) 139.68 368.67 T -5 12 Q --0.6 (NULL) 253.02 368.67 S -2 11 Q -(, the def) 279.42 368.67 T -(ault primary/approximation outline is the \336rst) 315.05 368.67 T -(one in the list of outlines for the shape.) 139.68 356.67 T -2 12 Q -(An) 108 338 T -1 F -(outline) 125.66 338 T -2 F -(, stored in a) 159 338 T -5 F --0.6 (XkbOutlineRec) 217.99 338 S -2 F -( structure, is a list of one or more points that) 303.79 338 T -(describes a single closed-polygon, as follows:) 108 325 T -2 11 Q -(\245) 126 304.67 T --0.38 (A list with a single point describes a rectangle with one corner at the origin of the shape) 139.68 304.67 P -(\0500,0\051 and the opposite corner at the speci\336ed point.) 139.68 292.67 T -(\245) 126 280.67 T -(A list of tw) 139.68 280.67 T -(o points describes a rectangle with one corner at the position speci\336ed by) 189.38 280.67 T -(the \336rst point and the opposite corner at the position speci\336ed by the second point.) 139.68 268.67 T -(\245) 126 256.67 T -(A list of three or more points describes an arbitrary polygon. If necessary) 139.68 256.67 T -(, the polygon) 461.25 256.67 T -(is automatically closed by connecting the last point in the list with the \336rst.) 139.68 244.67 T -(\245) 126 232.67 T -(A nonzero v) 139.68 232.67 T -(alue for the) 193.78 232.67 T -1 F -(corner_radius) 246.62 232.67 T -2 F -( \336eld speci\336es that the corners of the polygon) 309.56 232.67 T -(should be dra) 139.68 220.67 T -(wn as circles with the speci\336ed radius.) 198.78 220.67 T -2 12 Q --0.27 (All points in an outline are specified relative to the origin of the enclosing shape. Points in) 108 202 P -(an outline may have negative values for the X and Y coordinate.) 108 189 T -(One outline is the primary outline; a keyboard display application can generate a simple) 108 168 T -(but still accurate keyboard image by displaying only the primary outlines for each shape.) 108 155 T -(The default primary outline is the first in a shape\325s list of outlines. If the) 108 142 T -1 F -(primary) 457.3 142 T -2 F -( field of) 495.96 142 T -(the) 108 129 T -5 F --0.6 (XkbShapeRec) 125.66 129 S -2 F -( structure is not) 198.27 129 T -5 F --0.6 (NULL) 275.59 129 S -2 F -(, it points to the primary outline. A rectangular) 301.99 129 T -1 F --0.03 (appr) 108 116 P --0.03 (oximation) 130.13 116 P -2 F --0.03 ( must be included for nonrectangular keys as one of the outlines associated) 178.13 116 P -(with the shape; the approximation is not normally displayed but can be used by very sim-) 108 103 T -(ple keyboard display applications to generate a recognizable but degraded image of the) 108 90 T -(keyboard.) 108 77 T -72 63 540 720 C -82.2 518 529.8 674 C -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -207.63 635.6 220.23 646.4 R -7 X -0 0 0 1 0 0 0 K -V -1 H -0 Z -0 X -N -222.03 635.6 234.63 646.4 R -7 X -V -0 X -N -236.43 635.6 249.03 646.4 R -7 X -V -0 X -N -252.63 635.6 265.23 646.4 R -7 X -V -0 X -N -174.33 635.6 186.93 646.4 R -7 X -V -0 X -N -340.83 635.6 353.43 646.4 R -7 X -V -0 X -N -355.23 635.6 367.83 646.4 R -7 X -V -0 X -N -369.63 635.6 382.23 646.4 R -7 X -V -0 X -N -384.03 635.6 396.27 646.4 R -7 X -V -0 X -N -276.03 635.6 288.63 646.4 R -7 X -V -0 X -N -290.43 635.6 303.03 646.4 R -7 X -V -0 X -N -304.83 635.6 317.43 646.4 R -7 X -V -0 X -N -319.23 635.6 331.83 646.4 R -7 X -V -0 X -N -408.6 606.8 421.75 617.6 R -7 X -V -0 X -N -423.63 606.8 436.77 617.6 R -7 X -V -0 X -N -438.65 606.8 451.8 617.6 R -7 X -V -0 X -N -408.6 635.6 421.75 646.4 R -7 X -V -0 X -N -423.63 635.6 436.77 646.4 R -7 X -V -0 X -N -438.65 635.6 451.8 646.4 R -7 X -V -0 X -N -408.6 592.4 421.75 603.2 R -7 X -V -0 X -N -423.63 592.4 436.77 603.2 R -7 X -V -0 X -N -438.65 592.4 451.8 603.2 R -7 X -V -0 X -N -423.63 563.6 436.77 574.4 R -7 X -V -0 X -N -408.6 549.2 421.75 560 R -7 X -V -0 X -N -423.63 549.2 436.77 560 R -7 X -V -0 X -N -438.65 549.2 451.8 560 R -7 X -V -0 X -N -171 542 401.4 621.2 R -7 X -V -0 X -N -311.4 606.8 324 617.6 R -7 X -V -0 X -N -325.8 606.8 338.4 617.6 R -7 X -V -0 X -N -340.2 606.8 352.8 617.6 R -7 X -V -0 X -N -356.4 606.8 369 617.6 R -7 X -V -0 X -N -250.2 606.8 262.8 617.6 R -7 X -V -0 X -N -264.6 606.8 277.2 617.6 R -7 X -V -0 X -N -279 606.8 291.6 617.6 R -7 X -V -0 X -N -295.2 606.8 307.8 617.6 R -7 X -V -0 X -N -189 606.8 201.6 617.6 R -7 X -V -0 X -N -203.4 606.8 216 617.6 R -7 X -V -0 X -N -217.8 606.8 230.4 617.6 R -7 X -V -0 X -N -234 606.8 246.6 617.6 R -7 X -V -0 X -N -174.6 606.8 187.2 617.6 R -7 X -V -0 X -N -372.6 606.8 396 617.6 R -7 X -V -0 X -N -318.6 592.4 331.2 603.2 R -7 X -V -0 X -N -333 592.4 345.6 603.2 R -7 X -V -0 X -N -347.4 592.4 360 603.2 R -7 X -V -0 X -N -361.8 592.4 374.4 603.2 R -7 X -V -0 X -N -257.4 592.4 270 603.2 R -7 X -V -0 X -N -271.8 592.4 284.4 603.2 R -7 X -V -0 X -N -286.2 592.4 298.8 603.2 R -7 X -V -0 X -N -302.4 592.4 315 603.2 R -7 X -V -0 X -N -196.2 592.4 208.8 603.2 R -7 X -V -0 X -N -210.6 592.4 223.2 603.2 R -7 X -V -0 X -N -225 592.4 237.6 603.2 R -7 X -V -0 X -N -241.2 592.4 253.8 603.2 R -7 X -V -0 X -N -174.6 592.4 192.6 603.2 R -7 X -V -0 X -N -376.56 592.4 396 603.2 R -7 X -V -0 X -N -322.2 578 334.8 588.8 R -7 X -V -0 X -N -338.4 578 351 588.8 R -7 X -V -0 X -N -352.8 578 365.4 588.8 R -7 X -V -0 X -N -261 578 273.6 588.8 R -7 X -V -0 X -N -275.4 578 288 588.8 R -7 X -V -0 X -N -289.8 578 302.4 588.8 R -7 X -V -0 X -N -306 578 318.6 588.8 R -7 X -V -0 X -N -198 578 210.6 588.8 R -7 X -V -0 X -N -214.2 578 226.8 588.8 R -7 X -V -0 X -N -228.6 578 241.2 588.8 R -7 X -V -0 X -N -244.8 578 257.4 588.8 R -7 X -V -0 X -N -174.6 578 195.12 588.8 R -7 X -V -0 X -N -369 578 396 588.8 R -7 X -V -0 X -N -343.8 548.48 361.8 559.28 R -7 X -V -0 X -N -232.2 548.48 340.2 559.28 R -7 X -V -0 X -N -210.6 548.48 228.6 559.28 R -7 X -V -0 X -N -174.6 548.48 192.6 559.28 R -7 X -V -0 X -N -378.35 548.48 396.35 559.28 R -7 X -V -0 X -N -327.6 563.6 340.2 574.4 R -7 X -V -0 X -N -342 563.6 354.6 574.4 R -7 X -V -0 X -N -264.6 563.6 277.2 574.4 R -7 X -V -0 X -N -279 563.6 291.6 574.4 R -7 X -V -0 X -N -295.2 563.6 307.8 574.4 R -7 X -V -0 X -N -311.4 563.6 324 574.4 R -7 X -V -0 X -N -203.4 563.6 216 574.4 R -7 X -V -0 X -N -217.8 563.6 230.4 574.4 R -7 X -V -0 X -N -232.2 563.6 244.8 574.4 R -7 X -V -0 X -N -248.4 563.6 261 574.4 R -7 X -V -0 X -N -174.6 563.6 199.8 574.4 R -7 X -V -0 X -N -356.4 563.6 396 574.4 R -7 X -V -0 X -N -459 545.6 523.8 621.2 R -7 X -V -0 X -N -462.6 606.8 475.2 617.6 R -7 X -V -0 X -N -477 606.8 489.6 617.6 R -7 X -V -0 X -N -491.4 606.8 504 617.6 R -7 X -V -0 X -N -507.96 606.8 520.2 617.6 R -7 X -V -0 X -N -462.6 592.4 475.2 603.2 R -7 X -V -0 X -N -477 592.4 489.6 603.2 R -7 X -V -0 X -N -491.4 592.4 504 603.2 R -7 X -V -0 X -N -507.96 578.36 520.2 602.84 R -7 X -V -0 X -N -462.6 578 475.2 588.8 R -7 X -V -0 X -N -477 578 489.6 588.8 R -7 X -V -0 X -N -491.4 578 504 588.8 R -7 X -V -0 X -N -463.14 549.2 489.06 560 R -7 X -V -0 X -N -491.4 549.2 504 560 R -7 X -V -0 X -N -462.6 563.6 475.2 574.4 R -7 X -V -0 X -N -477 563.6 489.6 574.4 R -7 X -V -0 X -N -491.4 563.6 504 574.4 R -7 X -V -0 X -N -507.96 549.56 520.2 574.04 R -7 X -V -0 X -N -2 12 Q -(Editing) 88.2 639.2 T -(Function) 88.2 610.4 T -(Alpha) 88.2 578 T -(Keypad) 88.2 549.2 T -156.6 614 135 614 2 L -7 X -V -2 Z -0 X -N -156.37 581.6 156.37 584.24 165.59 581.6 156.37 578.96 4 Y -0 Z -N -156.37 581.6 156.37 584.24 165.59 581.6 156.37 578.96 4 Y -V -121.5 581.6 155.87 581.6 2 L -7 X -V -2 Z -0 X -N -109.8 653.6 109.8 668 2 L -7 X -V -0 X -N -109.8 668 433.8 668 2 L -7 X -V -0 X -N -433.8 664.64 436.44 664.64 433.8 655.41 431.16 664.64 4 Y -0 Z -N -433.8 664.64 436.44 664.64 433.8 655.41 431.16 664.64 4 Y -V -433.8 668 433.8 665.14 2 L -7 X -V -2 Z -0 X -N -109.8 542 109.8 524 2 L -7 X -V -0 X -N -491.4 524 109.8 524 2 L -7 X -V -0 X -N -491.4 530.96 488.76 530.96 491.4 540.19 494.04 530.96 4 Y -0 Z -N -491.4 530.96 488.76 530.96 491.4 540.19 494.04 530.96 4 Y -V -491.4 524 491.4 530.46 2 L -7 X -V -2 Z -0 X -N -156.6 614 156.6 639.2 2 L -7 X -V -0 X -N -158.9 639.2 158.9 641.12 165.59 639.2 158.9 637.28 4 Y -0 Z -N -158.9 639.2 158.9 641.12 165.59 639.2 158.9 637.28 4 Y -V -156.6 639.2 158.4 639.2 2 L -7 X -V -2 Z -0 X -N -405 542 455.4 650 R -0 Z -N -171 632 401.4 650 R -N -72 63 540 720 C -0 0 612 792 C -FMENDPAGE -%%EndPage: "94" 106 -%%Page: "95" 107 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(95) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(13 K) 431.08 744.87 T -(e) 457.99 744.87 T -(yboard Geometry) 462.71 744.87 T -0 12 Q -(13.2) 72 712 T -(Sections) 108 712 T -2 F -(As previously noted, a keyboard is subdivided into) 108 692 T -1 F -(sections) 354.98 692 T -2 F -( of related keys. Each section) 393.65 692 T --0.39 (has its own coordinate system \321 if a section is rotated, the coordinates of any components) 108 679 P -(within the section are interpreted relative to the edges that were on the top and left before) 108 666 T -(rotation. The components that make up a section, stored in a) 108 653 T -5 F --0.6 (XkbSectionRec) 400.3 653 S -2 F -(, include:) 486.1 653 T -2 11 Q -(\245) 126 632.67 T -(An arbitrary name of type Atom.) 139.68 632.67 T -(\245) 126 620.67 T -(A priority) 139.68 620.67 T -(, to indicate dra) 182.66 620.67 T -(wing order) 250.92 620.67 T -(. 0 is the highest priority) 298.28 620.67 T -(, 255 the lo) 405.12 620.67 T -(west.) 454.35 620.67 T -(\245) 126 608.67 T -(Origin of the section, relati) 139.68 608.67 T -(v) 258.25 608.67 T -(e to the origin of the k) 263.58 608.67 T -(e) 361.24 608.67 T -(yboard.) 365.96 608.67 T -(\245) 126 596.67 T -(The width and height and the angle of rotation.) 139.68 596.67 T -(\245) 126 584.67 T -(A list of) 139.68 584.67 T -1 12 Q -(r) 178.49 584.67 T -(ows) 182.62 584.67 T -2 11 Q -(. A ro) 201.29 584.67 T -(w is a list of horizontally or v) 226.37 584.67 T -(ertically adjacent k) 356.06 584.67 T -(e) 439.65 584.67 T -(ys. Horizontal) 444.37 584.67 T --0.14 (ro) 139.68 572.67 P --0.14 (ws parallel the \050prerotation\051 top of the section, and v) 148.57 572.67 P --0.14 (ertical ro) 378.07 572.67 P --0.14 (ws parallel the \050prerota-) 417.05 572.67 P --0.37 (tion\051 left of the section. All k) 139.68 560.67 P --0.37 (e) 265.35 560.67 P --0.37 (ys in a horizontal ro) 270.06 560.67 P --0.37 (w share a common top coordinate; all) 356.28 560.67 P --0.1 (k) 139.68 548.67 P --0.1 (e) 145.07 548.67 P --0.1 (ys in a v) 149.79 548.67 P --0.1 (ertical ro) 186.29 548.67 P --0.1 (w share a left coordinate. Figure 13.3 sho) 225.32 548.67 P --0.1 (ws the alpha section from) 406.72 548.67 P -(the k) 139.68 536.67 T -(e) 161.26 536.67 T -(yboard sho) 165.98 536.67 T -(wn in Figure 13.2, di) 214.28 536.67 T -(vided into ro) 306.29 536.67 T -(ws. Ro) 362.23 536.67 T -(ws and k) 392.52 536.67 T -(e) 431.51 536.67 T -(ys are de\336ned) 436.23 536.67 T -(belo) 139.68 524.67 T -(w) 158.35 524.67 T -(.) 165.57 524.67 T -3 12 Q -(Figur) 235.88 377.9 T -(e 13.3 Ro) 264.33 377.9 T -(ws in a Section) 314.2 377.9 T -2 11 Q -(\245) 126 350.57 T -(An optional list of) 139.68 350.57 T -1 12 Q -(doodads) 222.8 350.57 T -2 11 Q -(; an) 263.46 350.57 T -(y type of doodad can be enclosed within a section.) 279.49 350.57 T -(Position and angle of rotation are relati) 139.68 338.57 T -(v) 311.1 338.57 T -(e to the origin and angle of rotation of the sec-) 316.44 338.57 T -(tions that contain them. Priority for doodads in a section is relati) 139.68 326.57 T -(v) 422.34 326.57 T -(e to the other compo-) 427.67 326.57 T -(nents of the section, not to the k) 139.68 314.57 T -(e) 280.12 314.57 T -(yboard as a whole.) 284.84 314.57 T -(\245) 126 302.57 T -(An optional) 139.68 302.57 T -1 12 Q -(o) 194.68 302.57 T -(verlay) 200.56 302.57 T -2 11 Q -( with a name of type Atom and a list of o) 230.55 302.57 T -(v) 410.95 302.57 T -(erlay ro) 416.28 302.57 T -(ws \050described) 449.91 302.57 T -(belo) 139.68 290.57 T -(w\051.) 158.35 290.57 T -(\245) 126 278.57 T -(Bounds \050tw) 139.68 278.57 T -(o x and y coordinates\051 that describe the corners of a rectangle containing) 190.6 278.57 T -(the entire section.) 139.68 266.57 T -0 12 Q -(13.3) 72 241.9 T -(Ro) 108 241.9 T -(ws and K) 123.82 241.9 T -(e) 176.32 241.9 T -(ys) 182.81 241.9 T -2 F -(A row description \050) 108 221.9 T -5 F --0.6 (XkbRowRec) 201.65 221.9 S -2 F -(\051 consists of the coordinates of its origin relative to its) 261.05 221.9 T -(enclosing section, a flag indicating whether the row is horizontal or vertical, and a list of) 108 208.9 T -(keys in the row.) 108 195.9 T -(A key description \050) 108 174.9 T -5 F --0.6 (XkbKeyRec) 200.32 174.9 S -2 F -(\051 consists of a key name, a shape, a key color, and a gap.) 259.72 174.9 T --0.24 (The key name should correspond to one of the keys named in the keyboard names descrip-) 108 161.9 P --0.21 (tion, the shape specifies the appearance of the key, and the key color specifies the color of) 108 148.9 P --0.22 (the key \050not the label on the key; the label color is stored in the) 108 135.9 P -5 F --0.48 -0.6 (XkbGeometryRec) 410.38 135.9 B -2 F --0.22 (\051. Keys) 502.78 135.9 P -(are normally drawn immediately adjacent to one another from left to right \050or top to bot-) 108 122.9 T -(tom\051 within a row. The gap field specifies the distance between a key and its predecessor.) 108 109.9 T -72 63 540 720 C -107.76 398.9 504.24 502 C -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -392.04 482.5 407.79 496 R -9 X -0 0 0 1 0 0 0 K -V -1 H -0 Z -0 X -N -410.04 482.5 425.79 496 R -9 X -V -0 X -N -428.04 482.5 443.79 496 R -9 X -V -0 X -N -448.29 482.5 464.04 496 R -9 X -V -0 X -N -315.54 482.5 331.29 496 R -9 X -V -0 X -N -333.54 482.5 349.29 496 R -9 X -V -0 X -N -351.54 482.5 367.29 496 R -9 X -V -0 X -N -371.79 482.5 387.54 496 R -9 X -V -0 X -N -239.04 482.5 254.79 496 R -9 X -V -0 X -N -257.04 482.5 272.79 496 R -9 X -V -0 X -N -275.04 482.5 290.79 496 R -9 X -V -0 X -N -295.29 482.5 311.04 496 R -9 X -V -0 X -N -221.04 482.5 236.79 496 R -9 X -V -0 X -N -468.54 482.5 497.79 496 R -9 X -V -0 X -N -401.04 464.5 416.79 478 R -7 X -V -0 X -N -419.04 464.5 434.79 478 R -7 X -V -0 X -N -437.04 464.5 452.79 478 R -7 X -V -0 X -N -455.04 464.5 470.79 478 R -7 X -V -0 X -N -324.54 464.5 340.29 478 R -7 X -V -0 X -N -342.54 464.5 358.29 478 R -7 X -V -0 X -N -360.54 464.5 376.29 478 R -7 X -V -0 X -N -380.79 464.5 396.54 478 R -7 X -V -0 X -N -248.04 464.5 263.79 478 R -7 X -V -0 X -N -266.04 464.5 281.79 478 R -7 X -V -0 X -N -284.04 464.5 299.79 478 R -7 X -V -0 X -N -304.29 464.5 320.04 478 R -7 X -V -0 X -N -221.04 464.5 243.54 478 R -7 X -V -0 X -N -473.49 464.5 497.79 478 R -7 X -V -0 X -N -405.54 446.5 421.29 460 R -12 X -V -0 X -N -425.79 446.5 441.54 460 R -12 X -V -0 X -N -443.79 446.5 459.54 460 R -12 X -V -0 X -N -329.04 446.5 344.79 460 R -12 X -V -0 X -N -347.04 446.5 362.79 460 R -12 X -V -0 X -N -365.04 446.5 380.79 460 R -12 X -V -0 X -N -385.29 446.5 401.04 460 R -12 X -V -0 X -N -250.29 446.5 266.04 460 R -12 X -V -0 X -N -270.54 446.5 286.29 460 R -12 X -V -0 X -N -288.54 446.5 304.29 460 R -12 X -V -0 X -N -308.79 446.5 324.54 460 R -12 X -V -0 X -N -221.04 446.5 246.69 460 R -12 X -V -0 X -N -464.04 446.5 497.79 460 R -12 X -V -0 X -N -432.54 409.6 455.04 423.11 R -3 X -V -0 X -N -293.04 409.6 428.04 423.11 R -3 X -V -0 X -N -266.04 409.6 288.54 423.11 R -3 X -V -0 X -N -221.04 409.6 243.54 423.11 R -3 X -V -0 X -N -475.73 409.6 498.24 423.11 R -3 X -V -0 X -N -412.29 428.5 428.04 442 R -11 X -V -0 X -N -430.29 428.5 446.04 442 R -11 X -V -0 X -N -333.54 428.5 349.29 442 R -11 X -V -0 X -N -351.54 428.5 367.29 442 R -11 X -V -0 X -N -371.79 428.5 387.54 442 R -11 X -V -0 X -N -392.04 428.5 407.79 442 R -11 X -V -0 X -N -257.04 428.5 272.79 442 R -11 X -V -0 X -N -275.04 428.5 290.79 442 R -11 X -V -0 X -N -293.04 428.5 308.79 442 R -11 X -V -0 X -N -313.29 428.5 329.04 442 R -11 X -V -0 X -N -221.04 428.5 252.54 442 R -11 X -V -0 X -N -448.29 428.5 497.79 442 R -11 X -V -0 X -N -113.76 481.42 126.36 492.22 R -9 X -V -0 X -N -113.76 461.62 126.36 472.42 R -7 X -V -0 X -N -113.76 443.62 126.36 454.42 R -12 X -V -0 X -N -113.76 425.62 126.36 436.42 R -11 X -V -0 X -N -113.76 409.42 126.36 420.22 R -3 X -V -0 X -N -2 20 Q -(Ro) 140.76 481.24 T -(w 1) 163.6 481.24 T -(Ro) 140.76 463.24 T -(w 2) 163.6 463.24 T -(Ro) 140.76 445.24 T -(w 3) 163.6 445.24 T -(Ro) 140.76 427.24 T -(w 4) 163.6 427.24 T -(Ro) 140.76 409.24 T -(w 5) 163.6 409.24 T -72 63 540 720 C -0 0 612 792 C -FMENDPAGE -%%EndPage: "95" 107 -%%Page: "96" 108 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(96) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(13 K) 431.08 744.87 T -(e) 457.99 744.87 T -(yboard Geometry) 462.71 744.87 T -0 12 Q -(13.4) 72 712 T -(Doodads) 108 712 T -2 F --0.39 (Doodads can be global to the keyboard or part of a section. Doodads have symbolic names) 108 692 P -(of arbitrary length. The only doodad name whose interpretation is specified by Xkb is) 108 679 T -(\322Edges\323, which, if present, describes the outline of the entire keyboard.) 108 666 T -(Each doodad\325s origin is stored in fields named) 108 645 T -1 F -(left) 333.97 645 T -2 F -( and) 349.31 645 T -1 F -(top) 372.64 645 T -2 F -(, which are the coordinates of) 387.97 645 T --0.1 (the doodad\325s origin relative to its enclosing object, whether it be a section or the top-level) 108 632 P -(keyboard. The priority for doodads that are listed in the top-level geometry is relative to) 108 619 T -(the other doodads listed in the top-level geometry and the sections listed in the top-level) 108 606 T --0.13 (geometry. The priority for doodads listed in a section are relative to the other components) 108 593 P -(of the section. Each doodad is stored in a structure with a) 108 580 T -1 F -(type) 385.62 580 T -2 F -( field, which specifies the) 405.61 580 T -(type of doodad.) 108 567 T -(Xkb supports five types of doodads:) 108 546 T -2 11 Q -(\245) 126 525.67 T -(An) 139.68 525.67 T -1 12 Q -(indicator doodad) 155.87 525.67 T -2 11 Q -( describes one of the ph) 238.88 525.67 T -(ysical k) 342.99 525.67 T -(e) 376.79 525.67 T -(yboard indicators. Indicator) 381.51 525.67 T --0.14 (doodads specify the shape of the indicator) 139.68 513.67 P --0.14 (, the indicator color when it is lit \050) 323.52 513.67 P -1 12 Q --0.16 (on_color) 472.4 513.67 P -2 11 Q --0.14 (\051) 515.73 513.67 P -(and the indicator color when it is dark \050) 139.68 501.67 T -1 12 Q -(of) 313.2 501.67 T -(f_color) 322.33 501.67 T -2 11 Q -(\051.) 356.99 501.67 T -(\245) 126 489.67 T --0.17 (An) 139.68 489.67 P -1 12 Q --0.18 (outline doodad) 155.71 489.67 P -2 11 Q --0.17 ( describes some aspect of the k) 227.86 489.67 P --0.17 (e) 362.99 489.67 P --0.17 (yboard to be dra) 367.71 489.67 P --0.17 (wn as one or more) 438.83 489.67 P -(hollo) 139.68 477.67 T -(w) 162.02 477.67 T -(, closed polygons. Outline doodads specify the shape, color) 169.25 477.67 T -(, and angle of rota-) 430.02 477.67 T -(tion about the doodad origin at which the) 139.68 465.67 T -(y should be dra) 320.7 465.67 T -(wn.) 388.05 465.67 T -(\245) 126 453.67 T -(A) 139.68 453.67 T -1 12 Q -(solid doodad) 150.37 453.67 T -2 11 Q -( describes some aspect of the k) 212.71 453.67 T -(e) 348.85 453.67 T -(yboard to be dra) 353.57 453.67 T -(wn as one or more) 425.19 453.67 T --0.05 (\336lled polygons. Solid doodads specify the shape, color) 139.68 441.67 P --0.05 (, and angle of rotation about the) 379.36 441.67 P -(doodad origin at which the) 139.68 429.67 T -(y should be dra) 257.45 429.67 T -(wn.) 324.8 429.67 T -(\245) 126 417.67 T --0.45 (A) 139.68 417.67 P -1 12 Q --0.49 (te) 149.92 417.67 P --0.49 (xt doodad) 158.35 417.67 P -2 11 Q --0.45 ( describes a te) 205.52 417.67 P --0.45 (xt label some) 266.02 417.67 P --0.45 (where on the k) 323.51 417.67 P --0.45 (e) 387.12 417.67 P --0.45 (yboard. T) 391.84 417.67 P --0.45 (e) 433.39 417.67 P --0.45 (xt doodads specify) 438.11 417.67 P --0.02 (the label string, the font and color to use when dra) 139.68 405.67 P --0.02 (wing the label, and the angle of rota-) 360.22 405.67 P -(tion of the doodad about its origin.) 139.68 393.67 T -(\245) 126 381.67 T -(A) 139.68 381.67 T -1 12 Q -(lo) 150.37 381.67 T -(go doodad) 159.59 381.67 T -2 11 Q -(is a catch-all, which describes some other visible element of the k) 213.59 381.67 T -(e) 502.48 381.67 T -(y-) 507.2 381.67 T -(board. A logo doodad is essentially an outline doodad with an additional symbolic) 139.68 369.67 T --0.26 (name that describes the element to be dra) 139.68 357.67 P --0.26 (wn. If a k) 319.44 357.67 P --0.26 (e) 360.7 357.67 P --0.26 (yboard display program recognizes) 365.42 357.67 P -(the symbolic name, it can dra) 139.68 345.67 T -(w something appropriate within the bounding re) 269.05 345.67 T -(gion of) 480.92 345.67 T -(the shape speci\336ed in the doodad. If the symbolic name does not describe a recogniz-) 139.68 333.67 T -(able image, it should dra) 139.68 321.67 T -(w an outline using the speci\336ed shape, outline, and angle of) 247.98 321.67 T -(rotation. The Xkb e) 139.68 309.67 T -(xtension does not specify the interpretation of logo names.) 225.67 309.67 T -2 12 Q -(The structures these doodads are stored in and the values of the) 108 291 T -1 F -(type) 414.6 291 T -2 F -( fields are shown in) 434.59 291 T -(Table 13.1.) 108 278 T -0 F -(13.5) 72 142 T -(Overla) 108 142 T -(y Ro) 145.12 142 T -(ws and Overla) 170.94 142 T -(y K) 252.07 142 T -(e) 270.56 142 T -(ys) 277.06 142 T -2 F --0.13 (An) 108 122 P -1 F --0.13 (o) 125.54 122 P --0.13 (verlay r) 131.42 122 P --0.13 (ow) 168.41 122 P -2 F --0.13 ( \050) 182.41 122 P -5 F --0.28 -0.6 (XkbOverlayRowRec) 189.28 122 B -2 F --0.13 (\051 contains a pointer to the row it overlays and a list) 294.88 122 P -(of) 108 109 T -1 F -(o) 121 109 T -(verlay k) 126.88 109 T -(e) 165.07 109 T -(ys) 170.04 109 T -2 F -(.) 180.04 109 T --0.46 (Each overlay key definition \050) 108 88 P -5 F --1.02 -0.6 (XkbOverlayKeyRec) 246.12 88 B -2 F --0.46 (\051 indicates a key that can yield multiple) 351.72 88 P -(keycodes and consists of a field named) 108 75 T -1 F -(under) 298.3 75 T -2 F -(, which specifies the primary name of the) 326.29 75 T -3 F -(T) 256.36 258 T -(able 13.1 Doodad T) 263.26 258 T -(ypes) 364.72 258 T -1 F -(Doodad) 109 238 T -(Structur) 235 238 T -(e) 273.89 238 T -(T) 397 238 T -(ype) 402.78 238 T -(indicator doodad) 109 223.67 T -5 F --0.6 (XkbIndicatorDoodadRec) 235 223.67 S -1 F -(XkbIndicatorDoodad) 397 223.67 T -(outline doodad) 109 209.67 T -5 F --0.6 (XkbShapeDoodadRec) 235 209.67 S -1 F -(XkbOutlineDoodad) 397 209.67 T -(solid doodad) 109 195.67 T -5 F --0.6 (XkbShapeDoodadRec) 235 195.67 S -1 F -(XkbSolidDoodad) 397 195.67 T -(te) 109 181.67 T -(xt doodad) 117.42 181.67 T -5 F --0.6 (XkbTextDoodadRec) 235 181.67 S -1 F -(XkbT) 397 181.67 T -(e) 421.23 181.67 T -(xtDoodad) 426.32 181.67 T -(lo) 109 167.67 T -(go doodad) 118.22 167.67 T -5 F --0.6 (XkbLogoDoodadRec) 235 167.67 S -1 F -(XkbLo) 397 167.67 T -(goDoodad) 428.21 167.67 T -108 250 522 250 2 L -V -0.5 H -0 Z -N -108 233 522 233 2 L -V -N -FMENDPAGE -%%EndPage: "96" 108 -%%Page: "97" 109 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(97) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(13 K) 431.08 744.87 T -(e) 457.99 744.87 T -(yboard Geometry) 462.71 744.87 T -2 12 Q -(key and a field named) 108 712 T -1 F -(over) 216.97 712 T -2 F -(, which specifies the name for the key when the overlay key-) 238.3 712 T --0.23 (code is selected. The key specified in) 108 699 P -1 F --0.23 (under) 288.34 699 P -2 F --0.23 ( must be a member of the section that contains) 316.34 699 P -(the overlay key definition, while the key specified in) 108 686 T -1 F -(over) 363.96 686 T -2 F -( must not be.) 385.28 686 T -0 F -(13.6) 72 661 T -(Dra) 108 661 T -(wing a K) 127.82 661 T -(e) 176.99 661 T -(yboar) 183.48 661 T -(d Representation) 215.92 661 T -2 F -(To draw a representation of the keyboard, draw in the following order:) 108 641 T -2 11 Q -(Dra) 144 620.67 T -(w the top-le) 160.32 620.67 T -(v) 212.6 620.67 T -(el k) 217.93 620.67 T -(e) 234.01 620.67 T -(yboard as a rectangle, using its width and height.) 238.73 620.67 T -(F) 144 607.67 T -(or each component \050section or doodad\051 of the top-le) 149.95 607.67 T -(v) 378.18 607.67 T -(el geometry) 383.51 607.67 T -(, in priority order:) 435.04 607.67 T -(If component is a section) 162 594.67 T -(F) 198 581.67 T -(or each ro) 203.95 581.67 T -(w) 247.65 581.67 T -(, in the order it appears in the section) 254.88 581.67 T -(Dra) 234 568.67 T -(w k) 250.32 568.67 T -(e) 266.41 568.67 T -(ys in the order the) 271.12 568.67 T -(y appear in the ro) 350.39 568.67 T -(w) 427.09 568.67 T -(Dra) 198 555.67 T -(w doodads within the section in priority order) 214.32 555.67 T -(.) 415.06 555.67 T -(Else dra) 162 542.67 T -(w doodad) 197.57 542.67 T -FMENDPAGE -%%EndPage: "97" 109 -%%Page: "98" 110 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(98) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(13 K) 431.08 744.87 T -(e) 457.99 744.87 T -(yboard Geometry) 462.71 744.87 T -0 12 Q -(13.7) 72 712 T -(Geometr) 108 712 T -(y Data Structures) 157.46 712 T -2 F -(In the following figures, a solid arrow denotes a pointer to an array of structures or a sin-) 108 692 T -(gleton structure. A dotted arrow denotes an index or a pointer into the array.) 108 679 T -3 F -(Figur) 200.61 72.75 T -(e 13.4 Xkb Geometry Data Structur) 229.06 72.75 T -(es) 415.15 72.75 T -72 93.75 540 675 C -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -218.5 654 299.5 672 R -7 X -0 0 0 1 0 0 0 K -V -0.5 H -0 Z -0 X -N -214.5 650.25 295.5 668.25 R -7 X -V -0 X -N -210.25 646.75 291.25 664.75 R -7 X -V -0 X -N -90.75 480 171.75 663.5 R -N -90.75 453 171.75 471 R -7 X -V -2 10 Q -0 X -(XkbGeometryRec) 94.87 464.33 T -90.75 588 171.75 588 2 L -7 X -V -0 X -N -90.75 570 171.75 570 2 L -7 X -V -0 X -N -90.75 552 171.75 552 2 L -7 X -V -0 X -N -90.75 534 171.75 534 2 L -7 X -V -0 X -N -90.75 516 171.75 516 2 L -7 X -V -0 X -N -90.75 498 171.75 498 2 L -7 X -V -0 X -N -(properties) 108.36 577 T -(colors) 108.36 559 T -(shapes) 108.36 541 T -(sections) 108.36 523 T -(doodads) 108.36 505 T -(key_aliases) 108.36 487 T -204 545 285 575.75 R -7 X -V -0 X -(XkbColorRec\050s\051) 211.45 569.08 T -(\050array\051) 230.9 559.08 T -205.25 612 286.25 636 R -7 X -V -0 X -(XkbPropertyRec\050s\051) 206.87 629.33 T -(\050array\051) 232.15 619.33 T -206.25 643 287.25 661 R -7 X -V -0 X -N -217.75 592.88 298.75 610.88 R -7 X -V -0 X -N -213.75 589.12 294.75 607.12 R -7 X -V -0 X -N -209.5 585.62 290.5 603.62 R -7 X -V -0 X -N -205.5 581.87 286.5 599.87 R -7 X -V -0 X -N -90.5 627.75 171.5 627.75 2 L -7 X -V -0 X -N -90.75 609.75 171.75 609.75 2 L -7 X -V -0 X -N -90.75 645.75 171.75 645.75 2 L -7 X -V -0 X -N -(label_color) 108.36 633.75 T -(base_color) 108.36 615.75 T -99 262 180 351 R -7 X -V -0 X -N -94 257 175 346 R -7 X -V -0 X -N -89 251 170 341 R -7 X -V -0 X -N -89 216.5 170 245 R -7 X -V -0 X -(XkbSectionRec\050s\051) 92.84 238.33 T -(\050array\051) 115.9 228.33 T -89 323 170 323 2 L -7 X -V -0 X -N -89 305 170 305 2 L -7 X -V -0 X -N -89 287 170 287 2 L -7 X -V -0 X -N -89 269 170 269 2 L -7 X -V -0 X -N -(rows) 107 314 T -(doodads) 107 296 T -(bounds) 107 278 T -(overlays) 107 260 T -201.13 641.51 198.43 642.77 205.49 650.93 203.83 640.26 4 Y -N -201.13 641.51 198.43 642.77 205.49 650.93 203.83 640.26 4 Y -V -172.13 579 201.02 641.29 2 L -7 X -V -0 X -N -453.5 331.5 534.5 401.75 R -7 X -V -0 X -N -448.5 324.25 529.5 396.75 R -7 X -V -0 X -N -443.5 319 524.5 391.75 R -7 X -V -0 X -N -442.75 284.5 523.75 313 R -7 X -V -0 X -(doodads \050s\051) 460.06 306.33 T -(\050array\051) 469.65 296.33 T -443.5 373.75 524.5 373.75 2 L -7 X -V -0 X -N -443.5 355.75 524.5 355.75 2 L -7 X -V -0 X -N -443.5 337.75 524.5 337.75 2 L -7 X -V -0 X -N -103 416 184 434 R -7 X -V -0 X -N -99 412.25 180 430.25 R -7 X -V -0 X -N -94.75 408.75 175.75 426.75 R -7 X -V -0 X -N -89.75 372.25 176 396.25 R -7 X -V -0 X -(XkbKeyAliasRec\050s\051) 92.33 389.58 T -(\050array\051) 119.28 379.58 T -90.75 405 171.75 423 R -7 X -V -0 X -N -222.75 293.25 303.75 350 R -7 X -V -0 X -N -217.75 288.25 298.75 345 R -7 X -V -0 X -N -212.75 285.25 293.75 340 R -7 X -V -0 X -N -213.5 248.5 294.5 277 R -7 X -V -0 X -(XkbRowRec\050s\051) 222.89 270.33 T -(\050array\051) 240.4 260.33 T -212.75 322 293.75 322 2 L -7 X -V -0 X -N -212.75 304 293.75 304 2 L -7 X -V -0 X -N -(keys) 230.75 313 T -(bounds) 231.5 292 T -201.34 313.75 201.34 316.72 211.72 313.75 201.34 310.77 4 Y -N -201.34 313.75 201.34 316.72 211.72 313.75 201.34 310.77 4 Y -V -169.88 313.75 201.09 313.75 2 L -7 X -V -0 X -N -210 109.87 291 127.87 R -7 X -V -0 X -N -210 85 291 103 R -7 X -V -0 X -(XkbBoundsRec) 218.84 96.33 T -221.25 178.5 302.25 248.75 R -7 X -V -0 X -N -216.25 171.25 297.25 243.75 R -7 X -V -0 X -N -211.25 166 292.25 238.75 R -7 X -V -0 X -N -210.5 131.5 291.5 160 R -7 X -V -0 X -(doodads \050s\051) 227.81 153.33 T -(\050array\051) 237.4 143.33 T -211.25 220.75 292.25 220.75 2 L -7 X -V -0 X -N -211.25 202.75 292.25 202.75 2 L -7 X -V -0 X -N -211.25 184.75 292.25 184.75 2 L -7 X -V -0 X -N -199.09 119 199.09 121.97 209.47 119 199.09 116.02 4 Y -N -199.09 119 199.09 121.97 209.47 119 199.09 116.02 4 Y -V -169.88 276.5 191.18 276.5 191.18 119 198.84 119 4 L -N -209.06 249.17 211.94 249.92 211.65 239.13 206.18 248.43 4 Y -N -209.06 249.17 211.94 249.92 211.65 239.13 206.18 248.43 4 Y -V -169.88 295.25 197.18 295.25 208.99 249.42 3 L -N -322.59 314.25 322.59 317.22 332.97 314.25 322.59 311.27 4 Y -N -322.59 314.25 322.59 317.22 332.97 314.25 322.59 311.27 4 Y -V -293.38 314.25 322.34 314.25 2 L -N -345 277.25 426 334 R -7 X -V -0 X -N -340 273 421 329 R -7 X -V -0 X -N -335 269.25 416 324 R -7 X -V -0 X -N -334.25 231.75 415.25 260.25 R -7 X -V -0 X -(XkbKeyRec\050s\051) 344.76 253.58 T -(\050array\051) 361.15 243.58 T -335 306 416 306 2 L -7 X -V -0 X -N -335 288 416 288 2 L -7 X -V -0 X -N -(shape_ndx) 353.46 295 T -(color_ndx) 353.46 277 T -334 199.37 415 217.37 R -7 X -V -0 X -N -334 174.5 415 192.5 R -7 X -V -0 X -(XkbBoundsRec) 342.83 185.83 T -329.05 218.45 331.73 219.72 333.49 209.07 326.36 217.17 4 Y -N -329.05 218.45 331.73 219.72 333.49 209.07 326.36 217.17 4 Y -V -293.38 293.75 328.94 218.67 2 L -7 X -V -0 X -N -196.12 581.06 194.09 583.23 203.71 588.13 198.15 578.88 4 Y -N -196.12 581.06 194.09 583.23 203.71 588.13 198.15 578.88 4 Y -V -171.38 558 195.94 580.89 2 L -7 X -V -0 X -N -193.84 597.75 193.84 600.73 204.22 597.75 193.84 594.77 4 Y -8 X -N -193.84 597.75 193.84 600.73 204.22 597.75 193.84 594.77 4 Y -V -171.38 636.75 185.63 636.75 185.63 597.75 193.59 597.75 4 L -N -193.84 591.75 193.84 594.72 204.22 591.75 193.84 588.77 4 Y -N -193.84 591.75 193.84 594.72 204.22 591.75 193.84 588.77 4 Y -V -171.38 617.25 183.38 617.25 182.63 591.75 193.59 591.75 4 L -N -337 475.25 418 564.25 R -7 X -V -0 X -N -332 470.25 413 559.25 R -7 X -V -0 X -N -327 464.25 408 554.25 R -7 X -V -0 X -N -327 426.75 408 455.25 R -7 X -V -0 X -(XkbShapeRec\050s\051) 333.62 448.58 T -(\050array\051) 353.9 438.58 T -327 536.25 408 536.25 2 L -7 X -V -0 X -N -327 518.25 408 518.25 2 L -7 X -V -0 X -N -327 500.25 408 500.25 2 L -7 X -V -0 X -N -327 482.25 408 482.25 2 L -7 X -V -0 X -N -(outlines) 345 527.25 T -(approx) 345 509.25 T -(primary) 345 491.25 T -(bounds) 345 473.25 T -457.5 512.12 538.5 530.12 R -7 X -V -0 X -N -453.5 508.38 534.5 526.38 R -7 X -V -0 X -N -449.25 504.88 530.25 522.88 R -7 X -V -0 X -N -445.25 501.12 526.25 519.12 R -7 X -V -0 X -N -435.23 514.67 436.66 517.28 444.33 509.68 433.8 512.06 4 Y -N -435.23 514.67 436.66 517.28 444.33 509.68 433.8 512.06 4 Y -V -407.81 529.69 435.01 514.79 2 L -7 X -V -0 X -N -433.84 508.5 433.84 511.48 444.22 508.5 433.84 505.52 4 Y -8 X -N -433.84 508.5 433.84 511.48 444.22 508.5 433.84 505.52 4 Y -V -407.63 508.5 433.59 508.5 2 L -7 X -V -8 X -N -434.8 503.95 433.6 506.68 444.3 508.13 436 501.23 4 Y -9 X -N -434.8 503.95 433.6 506.68 444.3 508.13 436 501.23 4 Y -V -407.63 492 434.57 503.85 2 L -7 X -V -9 X -N -446 469 527 495.25 R -7 X -V -0 X -(XkbOutlineRec\050s\051) 449.84 488.58 T -(\050array\051) 472.9 478.58 T -447.25 444.62 528.25 462.62 R -7 X -V -0 X -N -447.25 419.75 528.25 437.75 R -7 X -V -0 X -(XkbBoundsRec) 456.08 431.08 T -437.4 457.52 438.79 460.15 446.58 452.67 436.01 454.89 4 Y -N -437.4 457.52 438.79 460.15 446.58 452.67 436.01 454.89 4 Y -V -407.63 473.25 437.18 457.64 2 L -7 X -V -0 X -N -435.2 504.38 434.12 506.98 444.29 508.15 436.28 501.77 4 Y -N -435.2 504.38 434.12 506.98 444.29 508.15 436.28 501.77 4 Y -V -432.94 503.44 434.97 504.28 2 L -7 X -V -0 X -N -434.47 508.57 434.39 511.42 444.41 508.85 434.55 505.72 4 Y -N -434.47 508.57 434.39 511.42 444.41 508.85 434.55 505.72 4 Y -V -432 508.5 434.22 508.56 2 L -7 X -V -0 X -N -315.34 543 315.34 545.97 325.72 543 315.34 540.02 4 Y -N -315.34 543 315.34 545.97 325.72 543 315.34 540.02 4 Y -V -172.13 543 315.09 543 2 L -7 X -V -0 X -N -316.09 538.5 316.09 541.47 326.47 538.5 316.09 535.52 4 Y -8 X -N -316.09 538.5 316.09 541.47 326.47 538.5 316.09 535.52 4 Y -V -333.83 297 313.13 296.25 313.13 538.5 315.84 538.5 4 L -N -297.41 586.5 297.41 583.52 287.03 586.5 297.41 589.47 4 Y -N -297.41 586.5 297.41 583.52 287.03 586.5 297.41 589.47 4 Y -V -334.88 279.75 307.11 279.75 307.11 586.5 297.66 586.5 4 L -N -181.15 329.79 181.29 326.81 170.78 329.29 181.01 332.76 4 Y -0 X -N -181.15 329.79 181.29 326.81 170.78 329.29 181.01 332.76 4 Y -V -172.24 525.75 192.38 525.75 192.38 330.32 181.4 329.8 4 L -N -182.65 414.96 182.51 411.99 172.28 415.46 182.79 417.93 4 Y -N -182.65 414.96 182.51 411.99 172.28 415.46 182.79 417.93 4 Y -V -171.38 486.75 187.13 486.75 187.13 414.75 182.9 414.95 4 L -N -448.13 358.5 520.13 370.5 R -7 X -V -0 X -(\050See Figure 13.5\051) 449.27 363.83 T -215.63 204.5 287.63 217.25 R -7 X -V -0 X -(\050See Figure 13.5\051) 216.77 210.58 T -99 153.25 180 223.5 R -7 X -V -0 X -N -94 146 175 218.5 R -7 X -V -0 X -N -89 140.75 170 213.5 R -7 X -V -0 X -N -88.25 106.25 169.25 134.75 R -7 X -V -0 X -(overlays \050s\051) 105.29 128.08 T -(\050array\051) 115.15 118.08 T -89 195.5 170 195.5 2 L -7 X -V -0 X -N -89 177.5 170 177.5 2 L -7 X -V -0 X -N -89 159.5 170 159.5 2 L -7 X -V -0 X -N -181.16 202.5 181.16 199.52 170.78 202.5 181.16 205.47 4 Y -N -181.16 202.5 181.16 199.52 170.78 202.5 181.16 205.47 4 Y -V -169.88 260.25 186.38 260.25 186.38 202.5 181.41 202.5 4 L -N -93.88 181.75 165.88 193.75 R -7 X -V -0 X -(\050See Figure 13.6\051) 95.02 187.08 T -432.34 385.5 432.34 388.48 442.72 385.5 432.34 382.52 4 Y -N -432.34 385.5 432.34 388.48 442.72 385.5 432.34 382.52 4 Y -V -171.38 507.75 246.38 507.75 246.38 385.5 432.09 385.5 4 L -N -2 12 Q -(...) 353.46 310.5 T -(...) 231.75 330.56 T -(...) 108.33 330.81 T -(...) 108.21 597.19 T -(...) 108.08 651.07 T -(...) 346.08 543.69 T -316.69 538.56 316.69 541.37 326.47 538.56 316.69 535.76 4 Y -N -316.69 538.56 316.69 541.37 326.47 538.56 316.69 535.76 4 Y -V -316.44 538.56 314.25 538.56 2 L -N -194.47 591.55 194.42 594.4 204.41 591.73 194.52 588.7 4 Y -N -194.47 591.55 194.42 594.4 204.41 591.73 194.52 588.7 4 Y -V -194.22 591.54 192 591.5 2 L -N -194.44 597.78 194.4 600.59 204.22 597.92 194.48 594.98 4 Y -N -194.44 597.78 194.4 600.59 204.22 597.92 194.48 594.98 4 Y -V -194.19 597.78 192 597.75 2 L -N -296.69 586.35 296.65 583.63 287.22 586.49 296.73 589.06 4 Y -N -296.69 586.35 296.65 583.63 287.22 586.49 296.73 589.06 4 Y -V -296.94 586.34 299.06 586.31 2 L -N -0 0 612 792 C -FMENDPAGE -%%EndPage: "98" 110 -%%Page: "99" 111 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(99) 529 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(13 K) 431.08 744.87 T -(e) 457.99 744.87 T -(yboard Geometry) 462.71 744.87 T -3 12 Q -(Figur) 172.78 68.75 T -(e 13.5 Xkb Geometry Data Structur) 201.23 68.75 T -(es \050Doodads\051) 387.31 68.75 T -75.37 89.75 536.62 716 C -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -164.88 529.75 245.88 713.25 R -0.5 H -0 Z -0 X -0 0 0 1 0 0 0 K -N -164.88 502.75 245.88 520.75 R -7 X -V -2 10 Q -0 X -(XkbGeometryRec) 168.99 514.08 T -164.88 637.75 245.88 637.75 2 L -7 X -V -0 X -N -164.88 619.75 245.88 619.75 2 L -7 X -V -0 X -N -164.88 601.75 245.88 601.75 2 L -7 X -V -0 X -N -164.88 583.75 245.88 583.75 2 L -7 X -V -0 X -N -164.88 565.75 245.88 565.75 2 L -7 X -V -0 X -N -164.88 547.75 245.88 547.75 2 L -7 X -V -0 X -N -(properties) 182.49 626.75 T -(colors) 182.49 608.75 T -(shapes) 182.49 590.75 T -(sections) 182.49 572.75 T -(doodads) 182.49 554.75 T -(key_aliases) 182.49 536.75 T -397.88 371.12 478.88 401.87 R -7 X -V -0 X -(XkbColorRec\050s\051) 405.33 395.21 T -(\050array\051) 424.77 385.21 T -411.62 419 492.62 437 R -7 X -V -0 X -N -407.62 415.25 488.62 433.25 R -7 X -V -0 X -N -403.38 411.75 484.38 429.75 R -7 X -V -0 X -N -399.37 408 480.37 426 R -7 X -V -0 X -N -164.62 677.5 245.62 677.5 2 L -7 X -V -0 X -N -164.88 659.5 245.88 659.5 2 L -7 X -V -0 X -N -164.88 695.5 245.88 695.5 2 L -7 X -V -0 X -N -(label_color) 182.49 683.5 T -(base_color) 182.49 665.5 T -2 12 Q -(...) 182.33 646.94 T -(...) 182.21 700.82 T -409.5 222 490.5 311 R -7 X -V -0 X -N -404.5 217 485.5 306 R -7 X -V -0 X -N -399.5 211 480.5 301 R -7 X -V -0 X -N -399.5 173.5 480.5 202 R -7 X -V -2 10 Q -0 X -(XkbShapeRec\050s\051) 406.12 195.33 T -(\050array\051) 426.4 185.33 T -399.5 283 480.5 283 2 L -7 X -V -0 X -N -399.5 265 480.5 265 2 L -7 X -V -0 X -N -399.5 247 480.5 247 2 L -7 X -V -0 X -N -399.5 229 480.5 229 2 L -7 X -V -0 X -N -(outlines) 417.5 274 T -(approx) 417.5 256 T -(primary) 417.5 238 T -(bounds) 417.5 220 T -2 12 Q -(...) 418.58 290.44 T -165.12 429.62 246.12 484.38 R -7 X -V -0 X -N -156.88 406.38 259.62 422.13 R -7 X -V -2 10 Q -0 X --0.83 (XkbShapeDoodadRec\050s\051) 158.54 415.46 P -165.12 466.38 246.12 466.38 2 L -7 X -V -0 X -N -165.12 448.38 246.12 448.38 2 L -7 X -V -0 X -N -(color_ndx) 183.12 454.38 T -(shape_ndx) 183.12 436.38 T -2 12 Q -(...) 185.58 473.44 T -165.21 348.62 246.21 384.62 R -7 X -V -0 X -N -159.96 322.38 255.96 341.12 R -7 X -V -2 10 Q -0 X -(XkbTextDoodadRec\050s\051) 161.3 334.46 T -165.21 366.62 246.21 366.62 2 L -7 X -V -0 X -N -(color_ndx) 183.21 354.62 T -2 12 Q -(...) 185.67 373.69 T -165.37 229.25 246.37 302 R -7 X -V -0 X -N -149.62 205.25 265.12 223.25 R -7 X -V -2 10 Q -0 X -(XkbIndicatorDoodadRec\050s\051) 151.83 216.58 T -165.37 284 246.37 284 2 L -7 X -V -0 X -N -165.37 266 246.37 266 2 L -7 X -V -0 X -N -165.37 248 246.37 248 2 L -7 X -V -0 X -N -(shape_ndx) 183.37 272 T -(on_color_ndx) 183.37 254 T -(off_color_ndx) 183.37 236 T -2 12 Q -(...) 185.83 291.07 T -165.12 123.5 246.12 178.25 R -7 X -V -0 X -N -156.12 97.25 259.62 113.75 R -7 X -V -2 10 Q -0 X -(XkbLogoDoodadRec\050s\051) 159.83 107.08 T -165.12 160.25 246.12 160.25 2 L -7 X -V -0 X -N -165.12 142.25 246.12 142.25 2 L -7 X -V -0 X -N -(color_ndx) 183.12 148.25 T -(shape_ndx) 183.12 130.25 T -2 12 Q -(...) 185.58 167.32 T -391.83 281.96 389.71 284.05 399.12 289.35 393.95 279.87 4 Y -10 X -N -391.83 281.96 389.71 284.05 399.12 289.35 393.95 279.87 4 Y -V -246 134 391.65 281.78 2 L -7 X -V -10 X -N -388.54 290.99 388.2 293.95 398.85 292.15 388.87 288.03 4 Y -N -388.54 290.99 388.2 293.95 398.85 292.15 388.87 288.03 4 Y -V -246 275 388.29 290.96 2 L -7 X -V -10 X -N -391.46 303.65 393.47 305.83 399.09 296.61 389.44 301.46 4 Y -N -391.46 303.65 393.47 305.83 399.09 296.61 389.44 301.46 4 Y -V -246 437.75 391.27 303.82 2 L -7 X -V -10 X -N -387.95 427.27 388.55 430.19 398.11 425.18 387.35 424.36 4 Y -N -387.95 427.27 388.55 430.19 398.11 425.18 387.35 424.36 4 Y -V -246 456.5 387.7 427.32 2 L -7 X -V -10 X -N -388.59 417.66 387.44 420.41 398.17 421.65 389.73 414.91 4 Y -N -388.59 417.66 387.44 420.41 398.17 421.65 389.73 414.91 4 Y -V -246 358.25 388.36 417.56 2 L -7 X -V -10 X -N -391.21 409.33 389.06 411.38 398.38 416.84 393.37 407.28 4 Y -N -391.21 409.33 389.06 411.38 398.38 416.84 393.37 407.28 4 Y -V -246 257 391.04 409.15 2 L -7 X -V -10 X -N -391.59 405.24 389.34 407.2 398.41 413.07 393.83 403.29 4 Y -N -391.59 405.24 389.34 407.2 398.41 413.07 393.83 403.29 4 Y -V -246 238.25 391.42 405.06 2 L -7 X -V -10 X -N -393.26 401.04 390.7 402.55 398.54 409.97 395.82 399.52 4 Y -N -393.26 401.04 390.7 402.55 398.54 409.97 395.82 399.52 4 Y -V -246 152 393.13 400.82 2 L -7 X -V -10 X -N -435.75 437.03 438.73 437.03 435.75 426.65 432.78 437.03 4 Y -0 X -N -435.75 437.03 438.73 437.03 435.75 426.65 432.78 437.03 4 Y -V -246 610.25 435.75 610.25 435.75 437.28 3 L -N -492.04 295.25 492.04 292.27 481.66 295.25 492.04 298.22 4 Y -N -492.04 295.25 492.04 292.27 481.66 295.25 492.04 298.22 4 Y -V -246 591.5 516 591.5 516 295.25 492.29 295.25 4 L -N -2 10 Q -(doodads array) 91.5 302.75 T -112.5 317 112.5 321.5 112.5 487.25 152.25 487.25 4 L -N -110.75 258 110.75 253.72 110.75 96 150.5 96 4 L -N -388.31 427.25 389.03 430.06 398.12 424.73 387.58 424.43 4 Y -N -388.31 427.25 389.03 430.06 398.12 424.73 387.58 424.43 4 Y -V -388.06 427.31 385.88 427.87 2 L -N -388.55 417.9 387.5 420.55 397.78 421.54 389.59 415.25 4 Y -N -388.55 417.9 387.5 420.55 397.78 421.54 389.59 415.25 4 Y -V -388.31 417.81 386.25 417 2 L -N -391.36 409.8 389.27 411.81 398.37 417.1 393.45 407.79 4 Y -N -391.36 409.8 389.27 411.81 398.37 417.1 393.45 407.79 4 Y -V -391.19 409.62 389.63 408 2 L -N -391.54 404.46 389.23 406.33 398.06 412.54 393.86 402.6 4 Y -N -391.54 404.46 389.23 406.33 398.06 412.54 393.86 402.6 4 Y -V -391.39 404.27 389.25 401.62 2 L -N -393.27 401.46 390.85 403.07 398.87 409.87 395.68 399.85 4 Y -N -393.27 401.46 390.85 403.07 398.87 409.87 395.68 399.85 4 Y -V -393.13 401.25 391.88 399.37 2 L -N -391.93 303.2 393.85 305.2 398.91 296.5 390.01 301.2 4 Y -N -391.93 303.2 393.85 305.2 398.91 296.5 390.01 301.2 4 Y -V -391.75 303.37 390.19 304.87 2 L -N -389.03 291.09 388.71 293.85 398.66 292.21 389.35 288.33 4 Y -N -389.03 291.09 388.71 293.85 398.66 292.21 389.35 288.33 4 Y -V -388.78 291.06 386.62 290.81 2 L -N -391.85 282.19 389.72 284.28 399.11 289.6 393.97 280.11 4 Y -N -391.85 282.19 389.72 284.28 399.11 289.6 393.97 280.11 4 Y -V -391.67 282.02 390 280.31 2 L -N -(may contain) 91.5 291.68 T -(any of these) 91.5 280.62 T -(doodad types) 91.5 269.56 T -(XkbGeometryRec,) 360 678.75 T -(repeated from) 359.25 643.03 T -(Figure 16.4) 360 631.12 T -(XkbColorRec, and) 360 666.84 T -(XkbShapeRec) 360 654.93 T -0 0 612 792 C -FMENDPAGE -%%EndPage: "99" 111 -%%Page: "100" 112 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(100) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(13 K) 431.08 744.87 T -(e) 457.99 744.87 T -(yboard Geometry) 462.71 744.87 T -3 12 Q -(Figur) 172.18 326.25 T -(e 13.6 Xkb Geometry Data Structur) 200.63 326.25 T -(es \050Ov) 386.71 326.25 T -(erlays\051) 418.92 326.25 T -2 11 Q -(typedef struct _XkbGeometry {) 108 298.92 T -(/* top-le) 288 298.92 T -(v) 324.7 298.92 T -(el k) 330.03 298.92 T -(e) 346.11 298.92 T -(yboard geometry structure */) 350.83 298.92 T -(Atom) 126 285.92 T -(name;) 207 285.92 T -(/* k) 288 285.92 T -(e) 304.7 285.92 T -(yboard name */) 309.42 285.92 T -(unsigned short) 126 272.92 T -(width_mm;) 207 272.92 T -(/* k) 288 272.92 T -(e) 304.7 272.92 T -(yboard width in) 309.42 272.92 T -2 9.6 Q -(mm) 381.83 277.72 T -2 11 Q -(/) 396.77 272.92 T -2 9.6 Q -(10) 399.83 269.92 T -2 11 Q -( */) 409.42 272.92 T -(unsigned short) 126 259.92 T -(height_mm;) 207 259.92 T -(/* k) 288 259.92 T -(e) 304.7 259.92 T -(yboard height in) 309.42 259.92 T -2 9.6 Q -(mm) 384.27 264.72 T -2 11 Q -(/) 399.21 259.92 T -2 9.6 Q -(10) 402.27 256.92 T -2 11 Q -( */) 411.87 259.92 T -(char *) 126 246.92 T -(label_font;) 207 246.92 T -(/* font for k) 288 246.92 T -(e) 340.74 246.92 T -(y labels */) 345.46 246.92 T -(XkbColorPtr) 126 233.92 T -(label_color;) 207 233.92 T -(/* color for k) 288 233.92 T -(e) 345.63 233.92 T -(y labels - pointer into colors array */) 350.35 233.92 T -(XkbColorPtr) 126 220.92 T -(base_color;) 207 220.92 T -(/* color for basic k) 288 220.92 T -(e) 370.98 220.92 T -(yboard - pointer into colors array */) 375.7 220.92 T -(unsigned short) 126 207.92 T -(sz_properties;) 207 207.92 T -(/* size of properties array */) 288 207.92 T -(unsigned short) 126 194.92 T -(sz_colors;) 207 194.92 T -(/* size of colors array */) 288 194.92 T -(unsigned short) 126 181.92 T -(sz_shapes;) 207 181.92 T -(/* size of shapes array */) 288 181.92 T -(unsigned short) 126 168.92 T -(sz_sections;) 207 168.92 T -(/* size of sections array */) 288 168.92 T -(unsigned short) 126 155.92 T -(sz_doodads;) 207 155.92 T -(/* size of doodads array */) 288 155.92 T -(unsigned short) 126 142.92 T -(sz_k) 207 142.92 T -(e) 227.05 142.92 T -(y_aliases;) 231.77 142.92 T -(/* size of k) 288 142.92 T -(e) 336.47 142.92 T -(y aliases array */) 341.18 142.92 T -(unsigned short) 126 129.92 T -(num_properties;) 207 129.92 T -(/* number of properties in the properties array */) 288 129.92 T -(unsigned short) 126 116.92 T -(num_colors;) 207 116.92 T -(/* number of colors in the colors array */) 288 116.92 T -(unsigned short) 126 103.92 T -(num_shapes;) 207 103.92 T -(/* number of shapes in the shapes array */) 288 103.92 T -(unsigned short) 126 90.92 T -(num_sections;) 207 90.92 T -(/* number of sections in the sections array */) 288 90.92 T -(unsigned short) 126 77.92 T -(num_doodads;) 207 77.92 T -(/* number of doodads in the doodads array */) 288 77.92 T -74.25 347.25 537.75 708 C -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -94.56 615.75 175.56 704.75 R -7 X -0 0 0 1 0 0 0 K -V -0.5 H -0 Z -0 X -N -89.56 610.75 170.56 699.75 R -7 X -V -0 X -N -84.56 604.75 165.56 694.75 R -7 X -V -0 X -N -84.56 570.25 165.56 598.75 R -7 X -V -2 10 Q -0 X -(XkbSectionRec\050s\051) 88.4 592.08 T -(\050array\051) 111.46 582.08 T -84.56 676.75 165.56 676.75 2 L -7 X -V -0 X -N -84.56 658.75 165.56 658.75 2 L -7 X -V -0 X -N -84.56 640.75 165.56 640.75 2 L -7 X -V -0 X -N -84.56 622.75 165.56 622.75 2 L -7 X -V -0 X -N -(rows) 102.56 667.75 T -(doodads) 102.56 649.75 T -(bounds) 102.56 631.75 T -(overlays) 102.56 613.75 T -264.56 631.25 345.56 688 R -7 X -V -0 X -N -259.56 626.25 340.56 683 R -7 X -V -0 X -N -254.56 623.25 335.56 678 R -7 X -V -0 X -N -255.31 586.5 336.31 615 R -7 X -V -0 X -(XkbRowRec\050s\051) 264.71 608.33 T -(\050array\051) 282.21 598.33 T -254.56 660 335.56 660 2 L -7 X -V -0 X -N -254.56 642 335.56 642 2 L -7 X -V -0 X -N -(keys) 272.56 651 T -(bounds) 273.31 630 T -242.97 666.75 242.97 669.73 253.34 666.75 242.97 663.77 4 Y -N -242.97 666.75 242.97 669.73 253.34 666.75 242.97 663.77 4 Y -V -166.94 666.75 242.72 666.75 2 L -7 X -V -0 X -N -2 12 Q -(...) 273.56 668.57 T -(...) 103.89 684.57 T -94.62 469.12 175.62 539.38 R -7 X -V -0 X -N -89.62 461.87 170.62 534.37 R -7 X -V -0 X -N -84.62 456.62 165.62 529.37 R -7 X -V -0 X -N -83.87 422.12 164.87 450.62 R -7 X -V -2 10 Q -0 X -(XkbOverlayRec \050s\051) 85.36 443.96 T -(\050array\051) 110.77 433.96 T -84.62 511.37 165.62 511.37 2 L -7 X -V -0 X -N -84.62 493.37 165.62 493.37 2 L -7 X -V -0 X -N -84.62 475.37 165.62 475.37 2 L -7 X -V -0 X -N -(section_under) 102.62 500.37 T -(rows) 102.62 482.37 T -(bounds) 102.62 464.37 T -2 12 Q -(...) 103.64 519.81 T -262.5 446 343.5 502 R -7 X -V -0 X -N -257.5 441 338.5 497 R -7 X -V -0 X -N -252.5 436.5 333.5 492 R -7 X -V -0 X -N -243.5 400.5 341.75 429 R -7 X -V -2 10 Q -0 X -(XkbOverlayRowRec \050s\051) 244.16 422.33 T -(\050array\051) 279.02 412.33 T -252.5 474 333.5 474 2 L -7 X -V -0 X -N -(row_under) 270.5 463 T -2 12 Q -(...) 271.52 482.44 T -253.5 374.38 334.5 392.38 R -7 X -V -0 X -N -253.5 349.5 334.5 367.5 R -7 X -V -2 10 Q -0 X -(XkbBoundsRec) 262.33 360.83 T -396.63 401.56 491.88 432.31 R -7 X -V -0 X -(XkbOv) 398.43 425.64 T -(erlayK) 427.72 425.64 T -(e) 454.68 425.64 T -(yRec\050s\051) 458.97 425.64 T -(\050array\051) 430.65 415.64 T -416.38 449.44 497.38 467.44 R -7 X -V -0 X -N -412.38 445.69 493.38 463.69 R -7 X -V -0 X -N -408.13 442.19 489.13 460.19 R -7 X -V -0 X -N -404.12 438.44 485.12 456.44 R -7 X -V -0 X -N -177.78 689.25 177.78 686.27 167.41 689.25 177.78 692.23 4 Y -N -177.78 689.25 177.78 686.27 167.41 689.25 177.78 692.23 4 Y -V -166.5 500.25 200.25 500.25 200.25 689.25 178.03 689.25 4 L -N -241.47 483.75 241.47 486.73 251.84 483.75 241.47 480.77 4 Y -N -241.47 483.75 241.47 486.73 251.84 483.75 241.47 480.77 4 Y -V -165.75 483.75 241.22 483.75 2 L -N -392.97 447 392.97 449.97 403.35 447 392.97 444.02 4 Y -N -392.97 447 392.97 449.97 403.35 447 392.97 444.02 4 Y -V -333.75 447 392.72 447 2 L -N -245.42 390.37 247.5 392.51 252.85 383.13 243.34 388.24 4 Y -N -245.42 390.37 247.5 392.51 252.85 383.13 243.34 388.24 4 Y -V -165.75 468 245.24 390.55 2 L -N -253.25 454.75 334.25 454.75 2 L -N -(keys) 271.75 442.25 T -346.54 671.25 346.54 668.27 336.16 671.25 346.54 674.23 4 Y -N -346.54 671.25 346.54 668.27 336.16 671.25 346.54 674.23 4 Y -V -333.75 465 381 465 381 671.25 346.79 671.25 4 L -N -(repeated from) 417.27 634.97 T -(Figure 16.4) 418.02 623.06 T -(XkbSectionRec and) 418.02 658.78 T -(XkbRowRec) 418.02 646.88 T -254.25 555 335.25 573 R -7 X -V -0 X -N -254.25 530.12 335.25 548.12 R -7 X -V -0 X -(XkbBoundsRec) 263.08 541.46 T -346.53 564 346.53 561.02 336.16 564 346.53 566.98 4 Y -N -346.53 564 346.53 561.02 336.16 564 346.53 566.98 4 Y -V -335.25 636 353.25 636 353.25 564 346.78 564 4 L -N -0 0 612 792 C -FMENDPAGE -%%EndPage: "100" 112 -%%Page: "101" 113 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(101) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(13 K) 431.08 744.87 T -(e) 457.99 744.87 T -(yboard Geometry) 462.71 744.87 T -(unsigned short) 126 712.67 T -(num_k) 207 712.67 T -(e) 237.45 712.67 T -(y_aliases;) 242.17 712.67 T -(/* number of k) 288 712.67 T -(e) 352.97 712.67 T -(y aliases in the k) 357.68 712.67 T -(e) 430.9 712.67 T -(y */) 435.62 712.67 T -(XkbPropertyPtr) 126 699.67 T -(properties;) 207 699.67 T -(/* properties array */) 288 699.67 T -(XkbColorPtr) 126 686.67 T -(colors;) 207 686.67 T -(/* colors array */) 288 686.67 T -(XkbShapePtr) 126 673.67 T -(shapes;) 207 673.67 T -(/* shapes array */) 288 673.67 T -(XkbSectionPtr) 126 660.67 T -(sections;) 207 660.67 T -(/* sections array */) 288 660.67 T -(XkbDoodadPtr) 126 647.67 T -(doodads;) 207 647.67 T -(/* doodads array */) 288 647.67 T -(XkbK) 126 634.67 T -(e) 152.61 634.67 T -(yAliasPtr) 157.33 634.67 T -(k) 207 634.67 T -(e) 212.39 634.67 T -(y_aliases;) 217.11 634.67 T -(/* k) 288 634.67 T -(e) 304.7 634.67 T -(y aliases array */) 309.42 634.67 T -(}) 108 621.67 T -3 F -(XkbGeometryRec) 116.03 621.67 T -2 F -( *XkbGeometryPtr;) 200.95 621.67 T -2 12 Q --0.41 (The) 108 602 P -1 F --0.41 (doodads) 129.26 602 P -2 F --0.41 ( array is only for doodads not contained in any of the) 169.92 602 P -1 F --0.41 (sections) 422.36 602 P -2 F --0.41 ( that has its own) 461.02 602 P -1 F -(doodads) 108 589 T -2 F -(. The key aliases contained in the) 148.67 589 T -1 F -(k) 311.3 589 T -(e) 316.51 589 T -(y_aliases) 321.48 589 T -2 F -( array take precedence over any) 366.14 589 T -2 11 Q -(de\336ned in the k) 108 576 T -(e) 176.02 576 T -(ycodes component) 180.74 576 T -2 12 Q -( of the keyboard description.) 262.92 576 T -2 11 Q -(typedef struct _XkbProperty {) 108 555.67 T -(char *) 126 542.67 T -(name;) 207 542.67 T -(/* property name */) 288 542.67 T -(char *) 126 529.67 T -(v) 207 529.67 T -(alue;) 212.23 529.67 T -(/* property v) 288 529.67 T -(alue */) 344.55 529.67 T -(}) 108 516.67 T -3 F -(XkbPr) 116.03 516.67 T -(opertyRec) 147.61 516.67 T -2 F -(,*XkbPropertyPtr;) 195.87 516.67 T -(typedef struct _XkbColor {) 108 496.67 T -(unsigned int) 126 483.67 T -(pix) 207 483.67 T -(el;) 220.89 483.67 T -(/* color */) 288 483.67 T -(char *) 126 470.67 T -(spec;) 207 470.67 T -(/* color name */) 288 470.67 T -(}) 108 457.67 T -3 F -(XkbColorRec) 116.03 457.67 T -2 F -(,*XkbColorPtr;) 180.8 457.67 T -(typedef struct _XkbK) 108 437.67 T -(e) 203.04 437.67 T -(yAliasRec {) 207.76 437.67 T -(char) 126 424.67 T -(real[XkbK) 189 424.67 T -(e) 235.76 424.67 T -(yNameLength];) 240.48 424.67 T -(/* real name of the k) 324 424.67 T -(e) 414.62 424.67 T -(y */) 419.34 424.67 T -(char) 126 411.67 T -(alias[XkbK) 189 411.67 T -(e) 239.43 411.67 T -(yNameLength];) 244.15 411.67 T -(/* alias for the k) 324 411.67 T -(e) 395.38 411.67 T -(y */) 400.1 411.67 T -(}) 108 398.67 T -3 F -(XkbK) 116.03 398.67 T -(eyAliasRec) 144.49 398.67 T -2 F -(,*XkbK) 196.42 398.67 T -(e) 231.28 398.67 T -(yAliasPtr;) 236 398.67 T -2 12 Q -(typedef struct _XkbPoint {) 108 378 T -(/* x,y coordinates */) 288 378 T -(short) 126 364 T -(x;) 207 364 T -(short) 126 350 T -(y;) 207 350 T -(}) 108 336 T -3 11 Q -(XkbP) 116.76 336 T -(ointRec) 143.43 336 T -2 12 Q -(, *XkbPointPtr;) 179.48 336 T -2 11 Q -(typedef struct _XkbOutline {) 108 315.67 T -(unsigned short) 126 302.67 T -(num_points;) 207 302.67 T -(/* number of points in the outline */) 288 302.67 T -(unsigned short) 126 289.67 T -(sz_points;) 207 289.67 T -(/* size of the points array */) 288 289.67 T -(unsigned short) 126 276.67 T -(corner_radius;) 207 276.67 T -(/* dra) 288 276.67 T -(w corners as circles with this radius */) 313.19 276.67 T -(XkbPointPtr) 126 263.67 T -(points;) 207 263.67 T -(/* array of points de\336ning the outline */) 288 263.67 T -(}) 108 250.67 T -3 F -(XkbOutlineRec) 116.03 250.67 T -2 F -(, *XkbOutlinePtr;) 189.37 250.67 T -(typedef struct _XkbBounds {) 108 230.67 T -(short) 126 217.67 T -(x1,y1;) 207 217.67 T -(/* upper left corner of the bounds, in) 288 217.67 T -2 9.6 Q -(mm) 452.05 222.47 T -2 11 Q -(/) 466.99 217.67 T -2 9.6 Q -(10) 470.05 214.67 T -2 11 Q -( */) 479.65 217.67 T -(short) 126 204.67 T -(x2,y2;) 207 204.67 T -(/* lo) 288 204.67 T -(wer right corner of the bounds, in) 307.59 204.67 T -2 9.6 Q -(mm) 457.89 209.47 T -2 11 Q -(/) 472.83 204.67 T -2 9.6 Q -(10) 475.89 201.67 T -2 11 Q -( */) 485.49 204.67 T -(}) 108 191.67 T -3 F -(XkbBoundsRec) 116.03 191.67 T -2 F -(, *XkbBoundsPtr;) 189.38 191.67 T -(typedef struct _XkbShape {) 108 171.67 T -(Atom) 126 158.67 T -(name;) 207 158.67 T -(/* shape\325) 279 158.67 T -(s name */) 318.41 158.67 T -(unsigned short) 126 145.67 T -(num_outlines;) 207 145.67 T -(/* number of outlines for the shape */) 279 145.67 T -(unsigned short) 126 132.67 T -(sz_outlines;) 207 132.67 T -(/* size of the outlines array */) 279 132.67 T -(XkbOutlinePtr) 126 119.67 T -(outlines;) 207 119.67 T -(/* array of outlines for the shape */) 279 119.67 T -(XkbOutlinePtr) 126 106.67 T -(approx;) 207 106.67 T -(/* pointer into the array to the approximating outline */) 279 106.67 T -(XkbOutlinePtr) 126 93.67 T -(primary;) 207 93.67 T -(/* pointer into the array to the primary outline */) 279 93.67 T -(XkbBoundsRec) 126 80.67 T -(bounds;) 207 80.67 T -(/* bounding box for the shape; encompasses all outlines */) 279 80.67 T -(}) 108 67.67 T -3 F -(XkbShapeRec) 116.03 67.67 T -2 F -(, *XkbShapePtr;) 182.65 67.67 T -FMENDPAGE -%%EndPage: "101" 113 -%%Page: "102" 114 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(102) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(13 K) 431.08 744.87 T -(e) 457.99 744.87 T -(yboard Geometry) 462.71 744.87 T -2 12 Q --0.16 (If) 108 712 P -1 F --0.16 (appr) 118.84 712 P --0.16 (ox) 140.96 712 P -2 F --0.16 ( and/or) 152.29 712 P -1 F --0.16 (primary) 188.64 712 P -2 F --0.16 ( is) 227.31 712 P -5 F --0.34 -0.6 (NULL) 241 712 B -2 F --0.16 (, the default value is used. The default primary outline is) 267.4 712 P -(the first element in the outlines array, as is the default approximating outline.) 108 699 T -2 11 Q -(typedef struct _XkbK) 108 678.67 T -(e) 203.04 678.67 T -(y {) 207.76 678.67 T -(/* k) 288 678.67 T -(e) 304.7 678.67 T -(y in a ro) 309.42 678.67 T -(w */) 345.5 678.67 T -(XkbK) 126 665.67 T -(e) 152.61 665.67 T -(yNameRec) 157.33 665.67 T -(name;) 216 665.67 T -(/* k) 288 665.67 T -(e) 304.7 665.67 T -(y name */) 309.42 665.67 T -(short) 126 652.67 T -(g) 216 652.67 T -(ap;) 221.45 652.67 T -(/* g) 288 652.67 T -(ap in) 304.75 652.67 T -2 9.6 Q -(mm) 329.2 657.47 T -2 11 Q -(/) 344.13 652.67 T -2 9.6 Q -(10) 347.19 649.67 T -2 11 Q -( from pre) 356.79 652.67 T -(vious k) 397.45 652.67 T -(e) 429.42 652.67 T -(y in ro) 434.14 652.67 T -(w */) 462.59 652.67 T -(unsigned char) 126 639.67 T -(shape_ndx;) 216 639.67 T -(/* inde) 288 639.67 T -(x of shape for k) 318.08 639.67 T -(e) 387.01 639.67 T -(y */) 391.73 639.67 T -(unsigned char) 126 626.67 T -(color_ndx;) 216 626.67 T -(/* inde) 288 626.67 T -(x of color for k) 318.08 626.67 T -(e) 384.57 626.67 T -(y body */) 389.29 626.67 T -(}) 108 613.67 T -3 F -(XkbK) 116.03 613.67 T -(eyRec) 144.49 613.67 T -2 F -(, *XkbK) 172.58 613.67 T -(e) 210.19 613.67 T -(yPtr;) 214.91 613.67 T -(typedef struct _XkbRo) 108 593.67 T -(w {) 207.93 593.67 T -(/* ro) 261 593.67 T -(w in a section */) 281.2 593.67 T -(short) 126 580.67 T -(top;) 207 580.67 T -(/* top coordinate of ro) 261 580.67 T -(w origin, relati) 359.1 580.67 T -(v) 423.9 580.67 T -(e to section\325) 429.23 580.67 T -(s origin */) 482.4 580.67 T -(short) 126 567.67 T -(left;) 207 567.67 T -(/* left coordinate of ro) 261 567.67 T -(w origin, relati) 359.7 567.67 T -(v) 424.5 567.67 T -(e to section\325) 429.84 567.67 T -(s origin */) 483 567.67 T -(unsigned short) 126 554.67 T -(num_k) 207 554.67 T -(e) 237.45 554.67 T -(ys;) 242.17 554.67 T -(/* number of k) 261 554.67 T -(e) 325.97 554.67 T -(ys in the k) 330.68 554.67 T -(e) 376.1 554.67 T -(ys array */) 380.82 554.67 T -(unsigned short) 126 541.67 T -(sz_k) 207 541.67 T -(e) 227.05 541.67 T -(ys;) 231.77 541.67 T -(/* size of the k) 261 541.67 T -(e) 325.66 541.67 T -(ys array */) 330.38 541.67 T -(int) 126 528.67 T -(v) 207 528.67 T -(ertical;) 212.34 528.67 T -(/*) 261 528.67 T -5 12 Q --0.6 (True) 272.31 528.67 S -2 11 Q -(=>v) 298.71 528.67 T -(ertical ro) 316.45 528.67 T -(w) 355.58 528.67 T -(,) 362.81 528.67 T -5 12 Q --0.6 (False) 368.31 528.67 S -2 11 Q -(=>horizontal ro) 401.31 528.67 T -(w */) 469.96 528.67 T -(XkbK) 126 515.67 T -(e) 152.61 515.67 T -(yPtr) 157.33 515.67 T -(k) 207 515.67 T -(e) 212.39 515.67 T -(ys;) 217.11 515.67 T -(/* array of k) 261 515.67 T -(e) 314.95 515.67 T -(ys in the ro) 319.67 515.67 T -(w*/) 368.59 515.67 T -(XkbBoundsRec) 126 502.67 T -(bounds;) 207 502.67 T -(/* bounding box for the ro) 261 502.67 T -(w */) 376.52 502.67 T -(}) 108 489.67 T -3 F -(XkbRo) 116.03 489.67 T -(wRec) 149.54 489.67 T -2 F -(, *XkbRo) 175.19 489.67 T -(wPtr;) 217.69 489.67 T -1 12 Q -(top) 108 470 T -2 F -( and) 123.34 470 T -1 F -(left) 146.66 470 T -2 F -( are in) 162 470 T -2 9.6 Q -(mm) 194.99 474.8 T -2 11 Q -(/) 209.93 470 T -2 9.6 Q -(10) 212.98 467 T -2 12 Q -(.) 222.58 470 T -2 11 Q -(typedef struct _XkbOv) 108 449.67 T -(erlayRec {) 208.65 449.67 T -(Atom) 126 436.67 T -(name;) 225 436.67 T -(/* o) 297 436.67 T -(v) 313.64 436.67 T -(erlay name */) 318.98 436.67 T -(XkbSectionPtr) 126 423.67 T -(section_under;) 225 423.67 T -(/* the section under this o) 297 423.67 T -(v) 410.19 423.67 T -(erlay */) 415.52 423.67 T -(unsigned short) 126 410.67 T -(num_ro) 225 410.67 T -(ws;) 258.95 410.67 T -(/* number of ro) 297 410.67 T -(ws in the ro) 365.46 410.67 T -(ws array */) 416.82 410.67 T -(unsigned short) 126 397.67 T -(sz_ro) 225 397.67 T -(ws;) 248.55 397.67 T -(/* size of the ro) 297 397.67 T -(ws array */) 365.16 397.67 T -(XkbOv) 126 384.67 T -(erlayRo) 158.22 384.67 T -(wPtr) 192.77 384.67 T -(ro) 225 384.67 T -(ws;) 233.89 384.67 T -(/* array of ro) 297 384.67 T -(ws in the o) 354.45 384.67 T -(v) 402.26 384.67 T -(erlay */) 407.59 384.67 T -(XkbBoundsPtr) 126 371.67 T -(bounds;) 225 371.67 T -(/* bounding box for the o) 297 371.67 T -(v) 408.97 371.67 T -(erlay */) 414.3 371.67 T -(}) 108 358.67 T -3 F -(XkbOv) 116.03 358.67 T -(erlayRec) 150.15 358.67 T -2 F -(,*XkbOv) 191.69 358.67 T -(erlayPtr;) 232.16 358.67 T -(typedef struct _XkbOv) 108 338.67 T -(erlayRo) 208.65 338.67 T -(w {) 243.2 338.67 T -(unsigned short) 126 325.67 T -(ro) 225 325.67 T -(w_under;) 233.89 325.67 T -(/* inde) 288 325.67 T -(x into the ro) 318.08 325.67 T -(w under this o) 371.28 325.67 T -(v) 433.75 325.67 T -(erlay ro) 439.08 325.67 T -(w */) 472.71 325.67 T -(unsigned short) 126 312.67 T -(num_k) 225 312.67 T -(e) 255.45 312.67 T -(ys;) 260.17 312.67 T -(/* number of k) 288 312.67 T -(e) 352.97 312.67 T -(ys in the k) 357.68 312.67 T -(e) 403.1 312.67 T -(ys array */) 407.82 312.67 T -(unsigned short) 126 299.67 T -(sz_k) 225 299.67 T -(e) 245.05 299.67 T -(ys;) 249.77 299.67 T -(/* size of the k) 288 299.67 T -(e) 352.66 299.67 T -(ys array */) 357.38 299.67 T -(XkbOv) 126 286.67 T -(erlayK) 158.22 286.67 T -(e) 187.88 286.67 T -(yPtr) 192.59 286.67 T -(k) 225 286.67 T -(e) 230.39 286.67 T -(ys;) 235.11 286.67 T -(/* array of k) 288 286.67 T -(e) 341.95 286.67 T -(ys in the o) 346.67 286.67 T -(v) 392.04 286.67 T -(erlay ro) 397.37 286.67 T -(w */) 431 286.67 T -(}) 108 273.67 T -3 F -(XkbOv) 116.03 273.67 T -(erlayRo) 150.15 273.67 T -(wRec) 187.31 273.67 T -2 F -(,*XkbOv) 212.96 273.67 T -(erlayRo) 253.43 273.67 T -(wPtr;) 287.98 273.67 T -1 12 Q --0.13 (r) 108 254 P --0.13 (ow_under) 112.13 254 P -2 F --0.13 ( is an index into the array of) 160.13 254 P -1 F --0.13 (r) 297.07 254 P --0.13 (ows) 301.19 254 P -2 F --0.13 ( in the section under this overlay. The section) 319.86 254 P -(under this overlay row is the one pointed to by) 108 241 T -1 F -(section_under) 334.64 241 T -2 F -( in this overlay row\325s) 402.64 241 T -5 F --0.6 (XkbOverlayRec) 108 228 S -2 F -(.) 193.8 228 T -2 11 Q -(typedef struct _XkbOv) 108 207.67 T -(erlayK) 208.65 207.67 T -(e) 238.31 207.67 T -(y {) 243.02 207.67 T -(XkbK) 126 194.67 T -(e) 152.61 194.67 T -(yNameRec) 157.33 194.67 T -(o) 243 194.67 T -(v) 248.34 194.67 T -(er;) 253.67 194.67 T -(/* name of this o) 306 194.67 T -(v) 379.78 194.67 T -(erlay k) 385.11 194.67 T -(e) 415.24 194.67 T -(y */) 419.96 194.67 T -(XkbK) 126 181.67 T -(e) 152.61 181.67 T -(yNameRec) 157.33 181.67 T -(under;) 243 181.67 T -(/* name of the k) 306 181.67 T -(e) 377.38 181.67 T -(y under this o) 382.1 181.67 T -(v) 442.12 181.67 T -(erlay k) 447.46 181.67 T -(e) 477.59 181.67 T -(y */) 482.31 181.67 T -(}) 108 168.67 T -3 F -(XkbOv) 116.03 168.67 T -(erlayK) 150.15 168.67 T -(eyRec) 182.26 168.67 T -2 F -(,*XkbOv) 210.35 168.67 T -(erlayK) 250.82 168.67 T -(e) 280.48 168.67 T -(yPtr;) 285.2 168.67 T -(typedef struct _XkbSection {) 108 148.67 T -(Atom) 126 135.67 T -(name;) 243 135.67 T -(/* section name */) 315 135.67 T -( unsigned char) 126 122.67 T -(priority;) 243 122.67 T -(/* dra) 315 122.67 T -(wing priority) 340.19 122.67 T -(, 0=>highest, 255=>lo) 397.23 122.67 T -(west */) 495.1 122.67 T -(short) 126 109.67 T -(top;) 243 109.67 T -(/* top coordinate of section origin */) 315 109.67 T -(short) 126 96.67 T -(left;) 243 96.67 T -(/* left coordinate of ro) 315 96.67 T -(w origin */) 413.7 96.67 T -(unsigned short) 126 83.67 T -(width;) 243 83.67 T -(/* section width, in) 315 83.67 T -2 9.6 Q -(mm) 402.09 88.47 T -2 11 Q -(/) 417.02 83.67 T -2 9.6 Q -(10) 420.08 80.67 T -2 11 Q -( */) 429.68 83.67 T -(unsigned short) 126 70.67 T -(height;) 243 70.67 T -(/* section height, in) 315 70.67 T -2 9.6 Q -(mm) 404.53 75.47 T -2 11 Q -(/) 419.47 70.67 T -2 9.6 Q -(10) 422.52 67.67 T -2 11 Q -( */) 432.12 70.67 T -FMENDPAGE -%%EndPage: "102" 114 -%%Page: "103" 115 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(103) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(13 K) 431.08 744.87 T -(e) 457.99 744.87 T -(yboard Geometry) 462.71 744.87 T -(short) 126 712.67 T -(angle;) 243 712.67 T -(/* angle of section rotation, counterclockwise */) 315 712.67 T -(unsigned short) 126 699.67 T -(num_ro) 243 699.67 T -(ws;) 276.95 699.67 T -(/* number of ro) 315 699.67 T -(ws in the ro) 383.46 699.67 T -(ws array */) 434.82 699.67 T -(unsigned short) 126 686.67 T -(num_doodads;) 243 686.67 T -(/* number of doodads in the doodads array */) 315 686.67 T -(unsigned short) 126 673.67 T -(num_o) 243 673.67 T -(v) 273.39 673.67 T -(erlays;) 278.73 673.67 T -(/* number of o) 315 673.67 T -(v) 379.91 673.67 T -(erlays in the o) 385.25 673.67 T -(v) 447.1 673.67 T -(erlays array */) 452.43 673.67 T -(unsigned short) 126 660.67 T -(sz_ro) 243 660.67 T -(ws;) 266.55 660.67 T -(/* size of the ro) 315 660.67 T -(ws array */) 383.16 660.67 T -(unsigned short) 126 647.67 T -(sz_doodads;) 243 647.67 T -(/* size of the doodads array */) 315 647.67 T -(unsigned short) 126 634.67 T -(sz_o) 243 634.67 T -(v) 263 634.67 T -(erlays;) 268.33 634.67 T -(/* size of the o) 315 634.67 T -(v) 379.6 634.67 T -(erlays array */) 384.94 634.67 T -(XkbRo) 126 621.67 T -(wPtr) 157.5 621.67 T -(ro) 243 621.67 T -(ws;) 251.89 621.67 T -(/* section ro) 315 621.67 T -(ws array */) 369.11 621.67 T -(XkbDoodadPtr) 126 608.67 T -(doodads;) 243 608.67 T -(/* section doodads array */) 315 608.67 T -(XkbBoundsRec) 126 595.67 T -(bounds;) 243 595.67 T -(/* bounding box for the section, before rotation*/) 315 595.67 T -(XkbOv) 126 582.67 T -(erlayPtr) 158.22 582.67 T -(o) 243 582.67 T -(v) 248.34 582.67 T -(erlays;) 253.67 582.67 T -(/* section o) 315 582.67 T -(v) 365.56 582.67 T -(erlays array */) 370.89 582.67 T -(}) 108 569.67 T -3 F -(XkbSectionRec) 116.03 569.67 T -2 F -(, *XkbSectionPtr;) 188.13 569.67 T -1 12 Q -(top) 108 550 T -2 F -( and) 123.34 550 T -1 F -(left) 146.66 550 T -2 F -( are the origin of the section, relative to the origin of the keyboard, in) 162 550 T -2 9.6 Q -(mm) 496.94 554.8 T -2 11 Q -(/) 511.88 550 T -2 9.6 Q -(10) 514.94 547 T -2 12 Q -(.) 524.54 550 T -1 F -(angle) 108 537 T -2 F -( is in) 134.66 537 T -2 9.6 Q -(1) 161 541.8 T -2 12 Q -(/) 165.8 537 T -2 9.6 Q -(10) 169.14 534 T -2 12 Q -( degrees.) 178.74 537 T -0 11 Q -(DoodadRec Structures) 108 514.67 T -2 12 Q -(The doodad arrays in the) 108 496 T -5 F --0.6 (XkbGeometryRec) 230.3 496 S -2 F -( and the) 322.71 496 T -5 F --0.6 (XkbSectionRec) 363.7 496 S -2 F -( may contain any) 449.5 496 T -(of the doodad structures and types shown in Table 13.1.) 108 483 T -(The doodad structures form a union:) 108 462 T -2 11 Q -(typedef union _XkbDoodad {) 126 441.67 T -( XkbAn) 126 428.67 T -(yDoodadRec) 180.22 428.67 T -(an) 306 428.67 T -(y;) 316.22 428.67 T -( XkbShapeDoodadRec) 126 415.67 T -(shape;) 306 415.67 T -( XkbT) 126 402.67 T -(e) 172.89 402.67 T -(xtDoodadRec) 177.61 402.67 T -(te) 306 402.67 T -(xt;) 313.78 402.67 T -( XkbIndicatorDoodadRec) 126 389.67 T -(indicator;) 306 389.67 T -( XkbLogoDoodadRec) 126 376.67 T -(logo;) 306 376.67 T -(}) 126 363.67 T -3 F -(XkbDoodadRec) 134.03 363.67 T -2 F -(, *XkbDoodadPtr;) 208.59 363.67 T -2 12 Q --0.37 (The) 108 344 P -1 F --0.37 (top) 129.29 344 P -2 F --0.37 ( and) 144.63 344 P -1 F --0.37 (left) 167.22 344 P -2 F --0.37 ( coordinates of each doodad are the coordinates of the origin of the doodad) 182.56 344 P -(relative to the keyboard\325s origin if the doodad is in the) 108 331 T -5 F --0.6 (XkbGeometryRec) 372.3 331 S -2 F -( doodad array,) 464.7 331 T -(and with respect to the section\325s origin if the doodad is in a) 108 318 T -5 F --0.6 (XkbSectionRec) 394.97 318 S -2 F -( doodad) 480.77 318 T -(array.) 108 305 T -2 11 Q -(The) 138.65 305 T -1 12 Q -(color_ndx) 158.5 305 T -2 11 Q -( or) 207.16 305 T -1 12 Q -(on_color_ndx) 221.83 305 T -2 11 Q -( and) 288.49 305 T -1 12 Q -(of) 309.87 305 T -(f_color_ndx) 318.99 305 T -2 11 Q -( \336elds are color indices into the) 376.99 305 T -5 12 Q --0.6 (XkbGeometryRec) 108 292 S -2 11 Q -(\325) 200.4 292 T -(s color array and are the colors to dra) 203.46 292 T -(w the doodads with. Similarly) 367.02 292 T -(, the) 498.61 292 T -1 12 Q -(shape_ndx) 108 279 T -2 11 Q -( \336elds are indices into the) 159.32 279 T -5 12 Q --0.6 (XkbGeometryRec) 274.81 279 S -2 11 Q -(\325) 367.21 279 T -(s shape array) 370.27 279 T -(.) 426.98 279 T -(typedef struct _XkbShapeDoodad {) 108 258.67 T -(Atom) 126 245.67 T -(name;) 207 245.67 T -(/* doodad name */) 279 245.67 T -(unsigned char) 126 232.67 T -(type;) 207 232.67 T -(/*) 279 232.67 T -5 F --0.33 (XkbOutlineDoodad) 290.31 232.67 S -2 F -( or) 390.63 232.67 T -5 F --0.33 (XkbSolidDoodad) 405.29 232.67 S -2 F -(*/) 493.07 232.67 T -(unsigned char) 126 219.67 T -(priority;) 207 219.67 T -(/* dra) 279 219.67 T -(wing priority) 304.19 219.67 T -(, 0=>highest, 255=>lo) 361.23 219.67 T -(west */) 459.1 219.67 T -(short) 126 206.67 T -(top;) 207 206.67 T -(/* top coordinate, in) 279 206.67 T -2 9.6 Q -(mm) 370.36 211.47 T -2 11 Q -(/) 385.29 206.67 T -2 9.6 Q -(10) 388.35 203.67 T -2 11 Q -( */) 397.95 206.67 T -(short) 126 193.67 T -(left;) 207 193.67 T -(/* left coordinate, in) 279 193.67 T -2 9.6 Q -(mm) 370.96 198.47 T -2 11 Q -(/) 385.9 193.67 T -2 9.6 Q -(10) 388.95 190.67 T -2 11 Q -( */) 398.55 193.67 T -(short) 126 180.67 T -(angle;) 207 180.67 T -(/* angle of rotation, clockwise, in) 279 180.67 T -2 9.6 Q -(1) 429.32 185.47 T -2 11 Q -(/) 434.11 180.67 T -2 9.6 Q -(10) 437.17 177.67 T -2 11 Q -( de) 446.77 180.67 T -(grees */) 459.74 180.67 T -(unsigned short) 126 167.67 T -(color_ndx;) 207 167.67 T -(/* doodad color */) 279 167.67 T -(unsigned short) 126 154.67 T -(shape_ndx;) 207 154.67 T -(/* doodad shape */) 279 154.67 T -(}) 108 141.67 T -3 F -(XkbShapeDoodadRec) 116.03 141.67 T -2 F -(, *XkbShapeDoodadPtr;) 219.32 141.67 T -(typedef struct _XkbT) 108 121.67 T -(e) 201.32 121.67 T -(xtDoodad {) 206.04 121.67 T -(Atom) 126 108.67 T -(name;) 207 108.67 T -(/* doodad name */) 279 108.67 T -(unsigned char) 126 95.67 T -(type;) 207 95.67 T -(/*) 279 95.67 T -5 F --0.33 (XkbTextDoodad) 290.31 95.67 S -2 F -( */) 371.82 95.67 T -(unsigned char) 126 82.67 T -(priority;) 207 82.67 T -(/* dra) 279 82.67 T -(wing priority) 304.19 82.67 T -(, 0=>highest, 255=>lo) 361.23 82.67 T -(west */) 459.1 82.67 T -(short) 126 69.67 T -(top;) 207 69.67 T -(/* top coordinate, in) 279 69.67 T -2 9.6 Q -(mm) 370.36 74.47 T -2 11 Q -(/) 385.29 69.67 T -2 9.6 Q -(10) 388.35 66.67 T -2 11 Q -( */) 397.95 69.67 T -FMENDPAGE -%%EndPage: "103" 115 -%%Page: "104" 116 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(104) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(13 K) 431.08 744.87 T -(e) 457.99 744.87 T -(yboard Geometry) 462.71 744.87 T -(short) 126 712.67 T -(left;) 207 712.67 T -(/* left coordinate, in) 279 712.67 T -2 9.6 Q -(mm) 370.96 717.47 T -2 11 Q -(/) 385.9 712.67 T -2 9.6 Q -(10) 388.95 709.67 T -2 11 Q -( */) 398.55 712.67 T -(short) 126 699.67 T -(angle;) 207 699.67 T -(/* angle of rotation, clockwise, in) 279 699.67 T -2 9.6 Q -(1) 429.32 704.47 T -2 11 Q -(/) 434.11 699.67 T -2 9.6 Q -(10) 437.17 696.67 T -2 11 Q -( de) 446.77 699.67 T -(grees */) 459.74 699.67 T -(short) 126 686.67 T -(width;) 207 686.67 T -(/* width in) 279 686.67 T -2 9.6 Q -(mm) 329.42 691.47 T -2 11 Q -(/) 344.36 686.67 T -2 9.6 Q -(10) 347.42 683.67 T -2 11 Q -( */) 357.02 686.67 T -(short) 126 673.67 T -(height;) 207 673.67 T -(/* height in) 279 673.67 T -2 9.6 Q -(mm) 331.87 678.47 T -2 11 Q -(/) 346.8 673.67 T -2 9.6 Q -(10) 349.86 670.67 T -2 11 Q -( */) 359.46 673.67 T -(unsigned short) 126 660.67 T -(color_ndx;) 207 660.67 T -(/* doodad color */) 279 660.67 T -(char *) 126 647.67 T -(te) 207 647.67 T -(xt;) 214.78 647.67 T -(/* doodad te) 279 647.67 T -(xt */) 333.22 647.67 T -(char *) 126 634.67 T -(font;) 207 634.67 T -(/* arbitrary font name for doodad te) 279 634.67 T -(xt */) 436.46 634.67 T -(}) 108 621.67 T -3 F -(XkbT) 116.03 621.67 T -(extDoodadRec) 142.53 621.67 T -2 F -(, *XkbT) 210.96 621.67 T -(e) 246.85 621.67 T -(xtDoodadPtr;) 251.57 621.67 T -(typedef struct _XkbIndicatorDoodad {) 108 601.67 T -(Atom) 126 588.67 T -(name;) 207 588.67 T -(/* doodad name */) 279 588.67 T -(unsigned char) 126 575.67 T -(type;) 207 575.67 T -(/*) 279 575.67 T -5 F --0.33 (XkbIndicatorDoodad) 290.31 575.67 S -2 F -( */) 403.17 575.67 T -(unsigned char) 126 562.67 T -(priority;) 207 562.67 T -(/* dra) 279 562.67 T -(wing priority) 304.19 562.67 T -(, 0=>highest, 255=>lo) 361.23 562.67 T -(west */) 459.1 562.67 T -(short) 126 549.67 T -(top;) 207 549.67 T -(/* top coordinate, in) 279 549.67 T -2 9.6 Q -(mm) 370.36 554.47 T -2 11 Q -(/) 385.29 549.67 T -2 9.6 Q -(10) 388.35 546.67 T -2 11 Q -( */) 397.95 549.67 T -(short) 126 536.67 T -(left;) 207 536.67 T -(/* left coordinate, in) 279 536.67 T -2 9.6 Q -(mm) 370.96 541.47 T -2 11 Q -(/) 385.9 536.67 T -2 9.6 Q -(10) 388.95 533.67 T -2 11 Q -( */) 398.55 536.67 T -(short) 126 523.67 T -(angle;) 207 523.67 T -(/* angle of rotation, clockwise, in) 279 523.67 T -2 9.6 Q -(1) 429.32 528.47 T -2 11 Q -(/) 434.11 523.67 T -2 9.6 Q -(10) 437.17 520.67 T -2 11 Q -( de) 446.77 523.67 T -(grees */) 459.74 523.67 T -(unsigned short) 126 510.67 T -(shape_ndx;) 207 510.67 T -(/* doodad shape */) 279 510.67 T -(unsigned short) 126 497.67 T -(on_color_ndx;) 207 497.67 T -(/* color for doodad if indicator is on */) 279 497.67 T -(unsigned short) 126 484.67 T -(of) 207 484.67 T -(f_color_ndx;) 215.89 484.67 T -(/* color for doodad if indicator is of) 279 484.67 T -(f */) 436.67 484.67 T -(}) 108 471.67 T -3 F -(XkbIndicatorDoodadRec) 116.03 471.67 T -2 F -(, *XkbIndicatorDoodadPtr;) 234.59 471.67 T -(typedef struct _XkbLogoDoodad {) 108 451.67 T -(Atom) 126 438.67 T -(name;) 207 438.67 T -(/* doodad name */) 279 438.67 T -(unsigned char) 126 425.67 T -(type;) 207 425.67 T -(/*) 279 425.67 T -5 F --0.33 (XkbLogoDoodad) 290.31 425.67 S -2 F -( */) 371.82 425.67 T -(unsigned char) 126 412.67 T -(priority;) 207 412.67 T -(/* dra) 279 412.67 T -(wing priority) 304.19 412.67 T -(, 0=>highest, 255=>lo) 361.23 412.67 T -(west */) 459.1 412.67 T -(short) 126 399.67 T -(top;) 207 399.67 T -(/* top coordinate, in) 279 399.67 T -2 9.6 Q -(mm) 370.36 404.47 T -2 11 Q -(/) 385.29 399.67 T -2 9.6 Q -(10) 388.35 396.67 T -2 11 Q -( */) 397.95 399.67 T -(short) 126 386.67 T -(left;) 207 386.67 T -(/* left coordinate, in) 279 386.67 T -2 9.6 Q -(mm) 370.96 391.47 T -2 11 Q -(/) 385.9 386.67 T -2 9.6 Q -(10) 388.95 383.67 T -2 11 Q -( */) 398.55 386.67 T -(short) 126 373.67 T -(angle;) 207 373.67 T -(/* angle of rotation, clockwise, in) 279 373.67 T -2 9.6 Q -(1) 429.32 378.47 T -2 11 Q -(/) 434.11 373.67 T -2 9.6 Q -(10) 437.17 370.67 T -2 11 Q -( de) 446.77 373.67 T -(grees */) 459.74 373.67 T -(unsigned short) 126 360.67 T -(color_ndx;) 207 360.67 T -(/* doodad color */) 279 360.67 T -(unsigned short) 126 347.67 T -(shape_ndx;) 207 347.67 T -(/* doodad shape */) 279 347.67 T -(char *) 126 334.67 T -(logo_name;) 207 334.67 T -(/* te) 279 334.67 T -(xt for logo */) 298.08 334.67 T -(}) 108 321.67 T -3 F -(XkbLogoDoodadRec) 116.03 321.67 T -2 F -(, *XkbLogoDoodadPtr) 214.43 321.67 T -0 12 Q -(13.8) 72 296 T -(Getting K) 108 296 T -(e) 161.82 296 T -(yboar) 168.31 296 T -(d Geometr) 200.75 296 T -(y Fr) 260.88 296 T -(om the Ser) 282.65 296 T -(ver) 344.78 296 T -2 F -(Y) 108 276 T -(ou can load a k) 115.34 276 T -(e) 187.87 276 T -(yboard geometry as part of the k) 193.02 276 T -(e) 348.86 276 T -(yboard description returned by) 354.01 276 T -1 F -(Xkb-) 504.65 276 T -(GetKeyboard) 108 263 T -2 F -(. Ho) 172.66 263 T -(we) 193.02 263 T -(v) 206.71 263 T -(er) 212.53 263 T -(, if a k) 221.38 263 T -(e) 251.92 263 T -(yboard description has been pre) 257.06 263 T -(viously loaded, you can) 409.39 263 T -(instead obtain the geometry by calling the) 108 250 T -1 F -(XkbGetGeometry) 312.31 250 T -2 F -(. In this case, the geometry) 394.84 250 T -(returned is the one associated with the k) 108 237 T -(e) 300.18 237 T -(yboard whose de) 305.33 237 T -(vice ID is contained in the k) 386.34 237 T -(e) 521.53 237 T -(y-) 526.68 237 T -(board description.) 108 224 T -(To load a keyboard geometry if you already have the keyboard description, use) 108 203 T -1 F -(XkbGet-) 491.24 203 T -(Geometry) 108 190 T -2 F -(.) 155.32 190 T -2 11 Q -(Status) 108 169.67 T -3 F -(XkbGetGeometry) 137.65 169.67 T -2 F -(\050) 221.96 169.67 T -1 F -(dpy) 225.62 169.67 T -2 F -(,) 240.79 169.67 T -1 F -( xkb) 243.54 169.67 T -2 F -(\051) 261.56 169.67 T -(Display *) 126 156.67 T -1 F -(dpy) 207 156.67 T -2 F -(;) 222.88 156.67 T -(/* connection to the X serv) 270 156.67 T -(er */) 388.68 156.67 T -(XkbDescPtr) 126 143.67 T -1 F -(xkb) 207 143.67 T -2 F -(;) 222.27 143.67 T --0.07 (/* k) 270 143.67 P --0.07 (e) 286.62 143.67 P --0.07 (yboard description that contains the ID for the k) 291.34 143.67 P --0.07 (e) 502.06 143.67 P --0.07 (yboard) 506.78 143.67 P -(and into which the geometry should be loaded */) 279 130.67 T -1 12 Q -(XkbGetGeometry) 108 111 T -2 F -( can return) 191.3 111 T -5 F --0.6 (BadValue) 245.62 111 S -2 F -(,) 298.42 111 T -5 F --0.6 (BadImplementation) 304.42 111 S -2 F -(,) 416.62 111 T -5 F --0.6 (BadName) 422.62 111 S -2 F -(,) 468.82 111 T -5 F --0.6 (BadAlloc,) 474.82 111 S -2 F -(or) 108 98 T -5 F --0.6 (BadLength) 121 98 S -2 F -( errors or) 180.4 98 T -5 F --0.6 (Success) 227.38 98 S -2 F -( if it succeeds.) 273.58 98 T -FMENDPAGE -%%EndPage: "104" 116 -%%Page: "105" 117 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(105) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(13 K) 431.08 744.87 T -(e) 457.99 744.87 T -(yboard Geometry) 462.71 744.87 T -2 12 Q -(It is also possible to load a keyboard geometry by name. The X server maintains a data-) 108 712 T -(base of keyboard components \050see Chapter 20\051. To load a keyboard geometry description) 108 699 T -(from this database by name, use) 108 686 T -1 F -(XkbGetNamedGeometry) 264.97 686 T -2 F -(.) 382.27 686 T -2 11 Q -(Status) 108 665.67 T -3 F -(XkbGetNamedGeometry) 137.65 665.67 T -2 F -(\050) 255.57 665.67 T -1 F -(dpy) 259.23 665.67 T -2 F -(,) 274.4 665.67 T -1 F -( xkb) 277.15 665.67 T -2 F -(,) 295.17 665.67 T -1 F -( name) 297.92 665.67 T -2 F -(\051) 324.49 665.67 T -(Display *) 126 652.67 T -1 F -(dpy) 189 652.67 T -2 F -(;) 204.88 652.67 T -(/* connection to the X serv) 234 652.67 T -(er */) 352.68 652.67 T -(XkbDescPtr) 126 639.67 T -1 F -(xkb) 189 639.67 T -2 F -(;) 204.27 639.67 T -(/* k) 234 639.67 T -(e) 250.7 639.67 T -(yboard description into which the geometry should be loaded */) 255.42 639.67 T -(Atom) 126 626.67 T -1 F -(name) 189 626.67 T -2 F -(;) 212.83 626.67 T -(/* name of the geometry to be loaded */) 234 626.67 T -1 12 Q -(XkbGetNamedGeometry) 108 607 T -2 F -( can return) 225.3 607 T -5 F --0.6 (BadName) 279.61 607 S -2 F -( if the) 325.81 607 T -1 F -(name) 356.81 607 T -2 F -( cannot be found.) 382.8 607 T -0 F -(13.9) 72 582 T -(Using K) 108 582 T -(e) 153.16 582 T -(yboar) 159.65 582 T -(d Geometr) 192.08 582 T -(y) 252.22 582 T -2 F --0.11 (Xkb provides a number of convenience functions to help use a keyboard geometry. These) 108 562 P -(include functions to return the bounding box of a shape\325s top surface and to update the) 108 549 T -(bounding box of a shape row or section.) 108 536 T -(A shape is made up of a number of outlines. Each outline is a polygon made up of a num-) 108 515 T -(ber of points. The bounding box of a shape is a rectangle that contains all the outlines of) 108 502 T -(that shape.) 108 489 T -3 F -(Figur) 157.11 344.5 T -(e 13.7 K) 185.56 344.5 T -(ey Surface, Shape Outlines, and Bounding Box) 229.93 344.5 T -2 F -(To determine the bounding box of the top surface of a shape, use) 108 316.5 T -1 F -(XkbComputeShapeTop) 422.6 316.5 T -2 F -(.) 532.6 316.5 T -2 11 Q -(Bool) 108 296.17 T -3 F -(XkbComputeShapeT) 132.15 296.17 T -(op) 230.76 296.17 T -2 F -(\050) 242.38 296.17 T -1 F -(shape) 246.04 296.17 T -2 F -(,) 271.7 296.17 T -1 F -( bounds_rtrn) 274.45 296.17 T -2 F -(\051) 331.6 296.17 T -(XkbShapePtr) 126 283.17 T -1 F -(shape) 207 283.17 T -2 F -(;) 232.66 283.17 T -(/* shape to be e) 270 283.17 T -(xamined */) 338.27 283.17 T -(XkbBoundsPtr) 126 270.17 T -1 F -(bounds_rtrn) 207 270.17 T -2 F -(/* back\336lled with the bounding box for the shape */) 270 270.17 T -1 12 Q --0.36 (XkbComputeShapeTop) 108 250.5 P -2 F --0.36 ( returns a) 217.99 250.5 P -5 F --0.8 -0.6 (BoundsRec) 264.56 250.5 B -2 F --0.36 ( that contains two x and y coordinates. These) 323.96 250.5 P -(coordinates describe the corners of a rectangle that contains the outline that describes the) 108 237.5 T -(top surface of the shape. The top surface is defined to be the approximating outline if the) 108 224.5 T -1 F -(appr) 108 211.5 T -(ox) 130.13 211.5 T -2 F -( field of) 141.46 211.5 T -1 F -(shape) 182.45 211.5 T -2 F -( is not) 210.44 211.5 T -5 F --0.6 (NULL) 242.78 211.5 S -2 F -(. If) 269.18 211.5 T -1 F -(appr) 286.18 211.5 T -(ox) 308.3 211.5 T -2 F -( is) 319.63 211.5 T -5 F --0.6 (NULL) 333.64 211.5 S -2 F -(, the top surface is defined as the last) 360.04 211.5 T -(outline in the) 108 198.5 T -1 F -(shape) 174.34 198.5 T -2 F -(\325s array of outlines.) 202.33 198.5 T -1 F -(XkbComputeShapeTop) 298.64 198.5 T -2 F -( returns) 408.64 198.5 T -5 F --0.6 (False) 447.96 198.5 S -2 F -( if) 480.96 198.5 T -1 F -(shape) 494.29 198.5 T -2 F -( is) 522.29 198.5 T -5 F --0.6 (NULL) 108 185.5 S -2 F -( or if there are no outlines for the shape; otherwise, it returns) 134.4 185.5 T -5 F --0.6 (True) 428.34 185.5 S -2 F -(.) 454.74 185.5 T --0.16 (A) 108 164.5 P -5 F --0.34 -0.6 (ShapeRec) 119.51 164.5 B -2 F --0.16 ( contains a) 172.31 164.5 P -5 F --0.34 -0.6 (BoundsRec) 226.17 164.5 B -2 F --0.16 ( that describes the bounds of the shape. If you add or) 285.57 164.5 P -(delete an outline to or from a shape, the bounding box must be updated. To update the) 108 151.5 T -(bounding box of a shape, use) 108 138.5 T -1 F -(XkbComputeShapeBounds) 250.98 138.5 T -2 F -(.) 378.3 138.5 T -2 11 Q -(Bool) 108 118.17 T -3 F -(XkbComputeShapeBounds) 132.15 118.17 T -2 F -(\050) 259.9 118.17 T -1 F -(shape) 263.56 118.17 T -2 F -(\051) 289.23 118.17 T -(XkbShapePtr) 126 105.17 T -1 F -(shape) 207 105.17 T -2 F -(;) 232.66 105.17 T -(/* shape to be e) 306 105.17 T -(xamined */) 374.27 105.17 T -1 12 Q -(XkbComputeShapeBounds) 108 85.5 T -2 F -( updates the) 235.32 85.5 T -5 F --0.6 (BoundsRec) 295.64 85.5 S -2 F -( contained in the) 355.05 85.5 T -1 F -(shape) 437.7 85.5 T -2 F -( by examining) 465.7 85.5 T -(all the outlines of the shape and setting the) 108 72.5 T -5 F --0.6 (BoundsRec) 315.65 72.5 S -2 F -( to the minimum x and minimum) 375.05 72.5 T -108.38 365.5 503.62 485 C -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -2 10 Q -0 X -0 0 0 1 0 0 0 K -(actual k) 122.86 405.59 T -(e) 154.14 405.59 T -(y) 158.43 405.59 T -(bounding) 443.25 405.42 T -(detailed) 367.84 405.49 T -(outline) 369.78 394.43 T -(approximating) 193.83 404.89 T -(outline) 210.35 393.55 T -188.5 382 188.5 373 263.5 373 3 L -0.5 H -0 Z -N -(outline array) 275.48 373.05 T -413.25 382 413.25 373 338.25 373 3 L -N -194.73 423 253.73 459.5 R -N -433.88 423 492.88 459.5 R -N -(primary) 288.12 404.5 T -(outline) 290.06 393.15 T -(surf) 130.09 394.52 T -(ace) 145.54 394.52 T -(box) 455.88 394.36 T -112.12 430.56 M - 112.12 433.38 112.12 433.38 112.12 436.19 D - 112.12 439 112.12 439 112.5 440.12 D - 112.88 441.25 112.88 441.25 113.81 441.62 D - 114.75 442 114.75 442 116.25 442.38 D - 117.75 442.75 117.75 442.75 124.5 442.75 D - 131.25 442.75 131.25 442.75 132.75 442.94 D - 134.25 443.12 134.25 443.12 135 444.25 D - 135.75 445.37 135.75 445.37 136.12 446.87 D - 136.5 448.37 136.5 448.37 136.5 451.75 D - 136.5 455.12 136.5 455.12 137.25 456.81 D - 138 458.5 138 458.5 139.31 458.88 D - 140.63 459.25 140.63 459.25 153.19 459.25 D - 165.75 459.25 165.75 459.25 167.25 458.88 D - 168.75 458.5 168.75 458.5 169.69 457.38 D - 170.62 456.25 170.62 456.25 171 454.94 D - 171.38 453.62 171.38 453.62 171.38 440.69 D - 171.38 427.75 171.38 427.75 170.63 426.06 D - 169.88 424.38 169.88 424.38 168.56 424 D - 167.25 423.62 167.25 423.62 141 423.62 D - 114.75 423.62 114.75 423.62 113.81 424.37 D - 112.88 425.12 112.88 425.12 112.5 426.44 D - 112.12 427.75 112.12 427.75 112.12 430.56 D -O -N -353 429.81 M - 353 432.62 353 432.62 353 435.44 D - 353 438.25 353 438.25 353.38 439.38 D - 353.75 440.5 353.75 440.5 354.69 440.88 D - 355.63 441.25 355.63 441.25 357.13 441.62 D - 358.63 442 358.63 442 365.38 442 D - 372.13 442 372.13 442 373.63 442.19 D - 375.13 442.38 375.13 442.38 375.88 443.5 D - 376.63 444.62 376.63 444.62 377 446.12 D - 377.38 447.62 377.38 447.62 377.38 451 D - 377.38 454.38 377.38 454.38 378.13 456.06 D - 378.88 457.75 378.88 457.75 380.19 458.12 D - 381.5 458.5 381.5 458.5 394.06 458.5 D - 406.63 458.5 406.63 458.5 408.13 458.12 D - 409.63 457.75 409.63 457.75 410.56 456.62 D - 411.5 455.5 411.5 455.5 411.88 454.19 D - 412.25 452.87 412.25 452.87 412.25 439.94 D - 412.25 427 412.25 427 411.5 425.31 D - 410.75 423.62 410.75 423.62 409.44 423.25 D - 408.13 422.87 408.13 422.87 381.88 422.87 D - 355.63 422.87 355.63 422.87 354.69 423.62 D - 353.75 424.38 353.75 424.38 353.38 425.69 D - 353 427 353 427 353 429.81 D -O -N -333 423 333 458.25 298.13 458.25 298.13 442.12 273.75 442.12 273.75 423 6 Y -N -0 0 612 792 C -FMENDPAGE -%%EndPage: "105" 117 -%%Page: "106" 118 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(106) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(13 K) 431.08 744.87 T -(e) 457.99 744.87 T -(yboard Geometry) 462.71 744.87 T -2 12 Q -(y, and maximum x and maximum y values found in those outlines.) 108 712 T -1 F -(XkbComputeShape-) 431.33 712 T --0.35 (Bounds) 108 699 P -2 F --0.35 ( returns) 144 699 P -5 F --0.78 -0.6 (False) 182.62 699 B -2 F --0.35 ( if) 215.62 699 P -1 F --0.35 (shape) 228.24 699 P -2 F --0.35 ( is) 256.24 699 P -5 F --0.78 -0.6 (NULL) 269.54 699 B -2 F --0.35 ( or if there are no outlines for the shape; otherwise,) 295.94 699 P -(it returns) 108 686 T -5 F --0.6 (True) 154 686 S -2 F -(.) 180.4 686 T -( If you add or delete a key to or from a row, or if you update the shape of one of the keys) 108 665 T --0.37 (in that row, you may need to update the bounding box of that row. To update the bounding) 108 652 P -(box of a row, use) 108 639 T -1 F -(XkbComputeRowBounds) 193.98 639 T -2 F -(.) 313.31 639 T -2 11 Q -(Bool) 108 618.67 T -3 F -(XkbComputeRo) 132.15 618.67 T -(wBounds) 209.04 618.67 T -2 F -(\050) 252.44 618.67 T -1 F -(g) 256.1 618.67 T -(eom) 261.49 618.67 T -2 F -(,) 279.82 618.67 T -1 F -( section) 282.57 618.67 T -2 F -(,) 316.48 618.67 T -1 F -( r) 319.23 618.67 T -(ow) 325.77 618.67 T -2 F -(\051) 338.6 618.67 T -(XkbGeometryPtr) 126 605.67 T -1 F -(g) 207 605.67 T -(eom) 212.39 605.67 T -2 F -(;) 230.72 605.67 T -(/* geometry that contains the) 270 605.67 T -1 F -(section) 400.46 605.67 T -2 F -( */) 431.62 605.67 T -(XkbSectionPtr) 126 592.67 T -1 F -(section) 207 592.67 T -2 F -(;) 238.16 592.67 T -(/* section that contains the ro) 270 592.67 T -(w */) 398.96 592.67 T -(XkbRo) 126 579.67 T -(wPtr) 157.5 579.67 T -1 F -(r) 207 579.67 T -(ow) 210.78 579.67 T -2 F -(;) 223.62 579.67 T -(/* ro) 270 579.67 T -(w to be e) 290.2 579.67 T -(xamined and updated */) 330.05 579.67 T -1 12 Q -(XkbComputeRowBounds) 108 560 T -2 F -( checks the bounds of all keys in the) 227.33 560 T -1 F -(r) 404.3 560 T -(ow) 408.43 560 T -2 F -(and updates the bound-) 425.44 560 T --0.28 (ing box of the row if necessary.) 108 547 P -1 F --0.28 (XkbComputeRowBounds) 260.67 547 P -2 F --0.28 ( returns) 380 547 P -5 F --0.62 -0.6 (False) 418.76 547 B -2 F --0.28 ( if any of the argu-) 451.76 547 P -(ments is) 108 534 T -5 F --0.6 (NULL) 150.67 534 S -2 F -(; otherwise, it returns) 177.07 534 T -5 F --0.6 (True) 282.06 534 S -2 F -(.) 308.46 534 T --0.4 ( If you add or delete a row to or from a section, or if you change the geometry of any of the) 108 513 P --0.09 (rows in that section, you may need to update the bounding box for that section. To update) 108 500 P -(the bounding box of a section, use) 108 487 T -1 F -(XkbComputeSectionBounds) 275.32 487 T -2 F -(.) 408.64 487 T -2 11 Q -(Bool) 108 466.67 T -3 F -(XkbComputeSectionBounds) 132.15 466.67 T -2 F -(\050) 265.39 466.67 T -1 F -(g) 269.05 466.67 T -(eom) 274.44 466.67 T -2 F -(,) 292.77 466.67 T -1 F -( section) 295.52 466.67 T -2 F -(\051) 329.43 466.67 T -(XkbGeometryPtr) 126 453.67 T -1 F -(g) 207 453.67 T -(eom) 212.39 453.67 T -2 F -(;) 230.72 453.67 T -(/* geometry that contains the) 270 453.67 T -1 F -(section) 400.46 453.67 T -2 F -( */) 431.62 453.67 T -(XkbSectionPtr) 126 440.67 T -1 F -(section) 207 440.67 T -2 F -(;) 238.16 440.67 T -(/* section to be e) 270 440.67 T -(xamined and updated */) 344.38 440.67 T -1 12 Q --0.44 (XkbComputeSectionBounds) 108 421 P -2 F --0.44 ( examines all the rows of the) 241.32 421 P -1 F --0.44 (section) 379.22 421 P -2 F --0.44 ( and updates the bounding) 413.21 421 P --0.02 (box of that section so that it contains all rows.) 108 408 P -1 F --0.02 (XkbComputeSectionBounds) 331.42 408 P -2 F --0.02 ( returns) 464.74 408 P -5 F --0.05 -0.6 (False) 504.02 408 B -2 F -(if any of the arguments is) 108 395 T -5 F --0.6 (NULL) 233.32 395 S -2 F -(; otherwise, it returns) 259.72 395 T -5 F --0.6 (True) 364.7 395 S -2 F -(.) 391.11 395 T -(Keys that can generate multiple keycodes may be associated with multiple names. Such) 108 374 T -(keys have a primary name and an alternate name. To find the alternate name by using the) 108 361 T -(primary name for a key that is part of an overlay, use) 108 348 T -1 F -(XkbFindOverlayForKey) 365.6 348 T -2 F -(.) 482.24 348 T -2 11 Q -(char *) 108 327.67 T -3 F -(XkbFindOv) 137.93 327.67 T -(erlayF) 194.06 327.67 T -(orK) 224.34 327.67 T -(ey) 243 327.67 T -2 F -(\050) 253.39 327.67 T -1 F -(g) 257.05 327.67 T -(eom) 262.44 327.67 T -2 F -(,) 280.77 327.67 T -1 F -( section) 283.52 327.67 T -2 F -(,) 317.43 327.67 T -1 F -( under) 320.18 327.67 T -2 F -(\051) 348.59 327.67 T -(XkbGeometryPtr) 126 314.67 T -1 F -(g) 207 314.67 T -(eom) 212.39 314.67 T -2 F -(;) 230.72 314.67 T -(/* geometry that contains the) 270 314.67 T -1 F -(section) 400.46 314.67 T -2 F -( */) 431.62 314.67 T -(XkbSectionPtr) 126 301.67 T -1 F -(section) 207 301.67 T -2 F -(;) 238.16 301.67 T -(/* section to be searched for matching k) 270 301.67 T -(e) 445.55 301.67 T -(ys */) 450.27 301.67 T -(char *) 126 288.67 T -1 F -(under) 207 288.67 T -2 F -(.) 232.06 288.67 T -(/* primary name of the k) 270 288.67 T -(e) 378.95 288.67 T -(y to be considered */) 383.67 288.67 T -1 12 Q --0.04 (XkbFindOverlayForKey) 108 269 P -2 F --0.04 ( uses the primary name of the key,) 224.64 269 P -1 F --0.04 (under) 392.6 269 P -2 F --0.04 (, to look up the alternate) 420.6 269 P -(name, which it returns.) 108 256 T -0 F -(13.10) 72 231 T -(Ad) 108 231 T -(ding Elements to a K) 123.88 231 T -(e) 242.39 231 T -(yboar) 248.88 231 T -(d Geometr) 281.32 231 T -(y) 341.45 231 T -2 F -(Xkb provides functions to add a single new element to the top-level keyboard geometry.) 108 211 T -(In each case the) 108 198 T -1 F -(num_) 187.3 198 T -2 11.2 Q -(*) 216.96 194.5 T -2 12 Q -( fields of the corresponding structure is incremented by 1. These) 222.56 198 T -(functions do not change) 108 185 T -1 F -(sz_) 225.98 185 T -2 11.2 Q -(*) 241.32 181.5 T -2 12 Q -( unless there is no more room in the array. Some of these) 246.92 185 T -(functions fill in the values of the element\325s structure from the arguments. For other func-) 108 172 T -(tions, you must explicitly write code to fill the structure\325s elements.) 108 159 T -(The top-level geometry description includes a list of) 108 138 T -1 F -(g) 361.97 138 T -(eometry pr) 367.85 138 T -(operties) 419.63 138 T -2 F -(. A geometry) 458.29 138 T -(property associates an arbitrary string with an equally arbitrary name. Programs that dis-) 108 125 T -(play images of keyboards can use geometry properties as hints, but they are not inter-) 108 112 T -(preted by Xkb. No other geometry structures refer to geometry properties.) 108 99 T -FMENDPAGE -%%EndPage: "106" 118 -%%Page: "107" 119 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(107) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(13 K) 431.08 744.87 T -(e) 457.99 744.87 T -(yboard Geometry) 462.71 744.87 T -2 12 Q -(To add one property to an existing keyboard geometry description, use) 108 712 T -1 F -(XkbAddGeomPro-) 450.61 712 T -(perty) 108 699 T -2 F -(.) 132.66 699 T -2 11 Q -(XkbPropertyPtr) 108 678.67 T -3 F -(XkbAddGeomPr) 180.41 678.67 T -(operty) 260.27 678.67 T -2 F -(\050) 290.82 678.67 T -1 F -(g) 294.48 678.67 T -(eom) 299.87 678.67 T -2 F -(,) 318.2 678.67 T -1 F -( name) 320.95 678.67 T -2 F -(,) 347.52 678.67 T -1 F -( value) 350.27 678.67 T -2 F -(\051) 376.85 678.67 T -(XkbGeometryPtr) 126 665.67 T -1 F -(g) 207 665.67 T -(eom) 212.39 665.67 T -2 F -(;) 230.72 665.67 T -(/* geometry to be updated */) 270 665.67 T -(char *) 126 652.67 T -1 F -(name) 207 652.67 T -2 F -(;) 230.83 652.67 T -(/* name of the ne) 270 652.67 T -(w property */) 346.1 652.67 T -(char *) 126 639.67 T -1 F -(value) 207 639.67 T -2 F -(;) 230.83 639.67 T -(/* v) 270 639.67 T -(alue for the ne) 286.53 639.67 T -(w property */) 349.49 639.67 T -1 12 Q -(XkbAddGeomProperty) 108 620 T -2 F -( adds one property with the specified) 217.31 620 T -1 F -(name) 397.61 620 T -2 F -( and) 423.6 620 T -1 F -(value) 446.93 620 T -2 F -( to the key-) 472.92 620 T -(board geometry specified by) 108 607 T -1 F -(geom) 247.97 607 T -2 F -(.) 273.96 607 T -1 F -(XkbAddGeomProperty) 283.56 607 T -2 F -( returns) 392.87 607 T -5 F --0.6 (NULL) 432.19 607 S -2 F -( if any of the) 458.59 607 T -(parameters is empty or if it was not able to allocate space for the property. To allocate) 108 594 T -(space for an arbitrary number of properties, use the) 108 581 T -1 F -(XkbAllocGeomProps) 356.59 581 T -2 F -( function.) 457.91 581 T --0.13 (To add one key alias to an existing keyboard geometry description, use) 108 560 P -1 F --0.13 (XkbAddGeomKey-) 450.7 560 P -(Alias) 108 547 T -2 F -(.) 132.67 547 T -2 11 Q -(XkbK) 108 526.67 T -(e) 134.61 526.67 T -(yAliasPtr) 139.33 526.67 T -3 F -(XkbAddGeomK) 183.64 526.67 T -(eyAlias) 260.37 526.67 T -2 F -(\050) 294.59 526.67 T -1 F -(g) 298.26 526.67 T -(eom) 303.65 526.67 T -2 F -(,) 321.97 526.67 T -1 F -( alias, r) 324.72 526.67 T -(eal) 358.24 526.67 T -2 F -(\051) 371.68 526.67 T -(XkbGeometryPtr) 126 513.67 T -1 F -(g) 207 513.67 T -(eom) 212.39 513.67 T -2 F -(;) 230.72 513.67 T -(/* geometry to be updated */) 270 513.67 T -(char *) 126 500.67 T -1 F -(alias) 207 500.67 T -2 F -(;) 228.4 500.67 T -(/* alias to be added */) 270 500.67 T -(char *) 126 487.67 T -1 F -(r) 207 487.67 T -(eal) 210.87 487.67 T -2 F -(;) 224.31 487.67 T -(/* real name to be bound to the ne) 270 487.67 T -(w alias */) 419.42 487.67 T -1 12 Q -(XkbAddGeomKeyAlias) 108 468 T -2 F -( adds one key alias with the value) 217.98 468 T -1 F -(alias) 382.62 468 T -2 F -( to the geometry) 405.96 468 T -1 F -(geom) 487.28 468 T -2 F -(, and) 513.28 468 T -(associates it with the key whose real name is) 108 455 T -1 F -(real) 325.63 455 T -2 F -(.) 344.96 455 T -1 F -(XkbAddGeomKeyAlias) 350.96 455 T -2 F -( returns) 460.94 455 T -5 F --0.6 (NULL) 500.27 455 S -2 F -( if) 526.67 455 T -(any of the parameters is empty or if it was not able to allocate space for the alias. To allo-) 108 442 T -(cate space for an arbitrary number of aliases, use the) 108 429 T -1 F -(XkbAllocGeomKeyAliases) 362.92 429 T -2 F -( function.) 488.89 429 T -(To add one color name to an existing keyboard geometry description, use) 108 408 T -1 F -(XkbAddGeom-) 463.61 408 T -(Color) 108 395 T -2 F -(.) 136.01 395 T -2 11 Q -(XkbColorPtr) 108 374.67 T -3 F -(XkbAddGeomColor) 167.59 374.67 T -2 F -(\050) 262.92 374.67 T -1 F -(g) 266.59 374.67 T -(eom) 271.98 374.67 T -2 F -(,) 290.3 374.67 T -1 F -( spec) 293.05 374.67 T -2 F -(,) 315.35 374.67 T -1 F -( pixel) 318.1 374.67 T -2 F -(\051) 342.23 374.67 T -(XkbGeometryPtr) 126 361.67 T -1 F -(g) 207 361.67 T -(eom) 212.39 361.67 T -2 F -(;) 230.72 361.67 T -(/* geometry to be updated */) 270 361.67 T -(char *) 126 348.67 T -1 F -(spec) 207 348.67 T -2 F -(;) 226.55 348.67 T -(/* color to be added */) 270 348.67 T -(unsigned int) 126 335.67 T -1 F -(pixel) 207 335.67 T -2 F -(;) 228.38 335.67 T -(/* color to be added */) 270 335.67 T -1 12 Q -(XkbAddGeomColor) 108 316 T -2 F -( adds the specified color) 202.66 316 T -1 F -(name) 322.3 316 T -2 F -( and) 348.29 316 T -1 F -(pixel) 371.62 316 T -2 F -( to the specified geometry) 394.94 316 T -1 F -(g) 108 303 T -(eom) 113.88 303 T -2 F -(. The top-level geometry description includes a list of up to) 133.87 303 T -5 F --0.6 (MaxColors) 421.18 303 S -2 F -( \05032\051) 480.58 303 T -1 F -(color) 506.57 303 T --0.35 (names) 108 290 P -2 F --0.35 (. A color) 138.66 290 P -1 F --0.35 (name) 182.94 290 P -2 F --0.35 ( is a string whose interpretation is not specified by Xkb and neither is) 208.93 290 P -(the) 108 277 T -1 F -(pixel) 125.66 277 T -2 F -( value\325s interpretation. All other geometry data structures refer to colors using) 148.99 277 T -(their indices in this global list or pointers to colors in this list.) 108 264 T -1 F -(XkbAddGeomColor) 406.02 264 T -2 F -( returns) 500.68 264 T -5 F --0.22 -0.6 (NULL) 108 251 B -2 F --0.1 ( if any of the parameters is empty or if it was not able to allocate space for the color.) 134.4 251 P --0.01 (To allocate space for an arbitrary number of colors to a geometry, use the) 108 238 P -1 F --0.01 (XkbAllocGeom-) 463.36 238 P -(Colors) 108 225 T -2 F -( function.) 140.68 225 T -(To add one outline to an existing shape, use) 108 204 T -1 F -(XkbAddGeomOutline) 321.31 204 T -2 F -(.) 423.96 204 T -2 11 Q -(XkbOutlinePtr) 108 183.67 T -3 F -(XkbAddGeomOutline) 175.53 183.67 T -2 F -(\050) 279.43 183.67 T -1 F -(shape) 283.1 183.67 T -2 F -(,) 308.76 183.67 T -1 F -( sz_points) 311.51 183.67 T -2 F -(\051) 355.21 183.67 T -(XkbShapePtr) 126 170.67 T -1 F -(shape) 207 170.67 T -2 F -(;) 232.66 170.67 T -(/* shape to be updated */) 270 170.67 T -(int) 126 157.67 T -1 F -(sz_points) 207 157.67 T -2 F -(;) 247.95 157.67 T -(/* number of points to be reserv) 270 157.67 T -(ed */) 410.37 157.67 T -2 12 Q --0.3 (An outline consists of an arbitrary number of points.) 108 138 P -1 F --0.3 (XkbAddGeomOutline) 359.91 138 P -2 F --0.3 ( adds an outline) 462.55 138 P --0.39 (to the specified) 108 125 P -1 F --0.39 (shape) 183.14 125 P -2 F --0.39 ( by reserving) 211.14 125 P -1 F --0.39 (sz_points) 275.61 125 P -2 F --0.39 ( points for it. The new outline is allocated and) 320.29 125 P -(zeroed.) 108 112 T -1 F -(XkbAddGeomOutline) 145.98 112 T -2 F -( returns) 248.63 112 T -5 F --0.6 (NULL) 287.95 112 S -2 F -( if any of the parameters is empty or if it was) 314.35 112 T --0.25 (not able to allocate space. To allocate space for an arbitrary number of outlines to a shape,) 108 99 P -(use) 108 86 T -1 F -(XkbAllocGeomOutlines) 127 86 T -2 F -(.) 240.31 86 T -FMENDPAGE -%%EndPage: "107" 119 -%%Page: "108" 120 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(108) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(13 K) 431.08 744.87 T -(e) 457.99 744.87 T -(yboard Geometry) 462.71 744.87 T -2 12 Q -(To add a shape to a keyboard geometry, use) 108 712 T -1 F -(XkbAddGeomShape) 321.95 712 T -2 F -(.) 417.92 712 T -2 11 Q -(XkbShapePtr) 108 691.67 T -3 F -(XkbAddGeomShape) 169.41 691.67 T -2 F -(\050) 266.6 691.67 T -1 F -(g) 270.26 691.67 T -(eom) 275.65 691.67 T -2 F -(,) 293.98 691.67 T -1 F -( name) 296.73 691.67 T -2 F -(,) 323.3 691.67 T -1 F -( sz_outlines) 326.05 691.67 T -2 F -(\051) 377.7 691.67 T -(XkbGeometryPtr) 126 678.67 T -1 F -(g) 207 678.67 T -(eom) 212.39 678.67 T -2 F -(;) 230.72 678.67 T -(/* geometry to be updated */) 270 678.67 T -(Atom) 126 665.67 T -1 F -(name) 207 665.67 T -2 F -(;) 230.83 665.67 T -(/* name of the ne) 270 665.67 T -(w shape */) 346.1 665.67 T -(int) 126 652.67 T -1 F -(sz_outlines) 207 652.67 T -2 F -(;) 255.9 652.67 T -(/* number of outlines to be reserv) 270 652.67 T -(ed */) 418.31 652.67 T -2 12 Q -(A geometry contains an arbitrary number of shapes, each of which is made up of an arbi-) 108 633 T --0.14 (trary number of outlines.) 108 620 P -1 F --0.14 (XkbAddGeomShape) 229.77 620 P -2 F --0.14 ( adds a shape to a geometry) 325.74 620 P -1 F --0.14 (g) 460.42 620 P --0.14 (eom) 466.3 620 P -2 F --0.14 ( by allocat-) 486.29 620 P -(ing space for) 108 607 T -1 F -(sz_outlines) 172.98 607 T -2 F -( outlines for it and giving it the name specified by) 226.32 607 T -1 F -(name) 468.64 607 T -2 F -(. If a) 494.63 607 T -(shape with name) 108 594 T -1 F -(name) 191.65 594 T -2 F -( already exists in the geometry, a pointer to the existing shape is) 217.64 594 T -(returned.) 108 581 T -1 F -(XkbAddGeomShape) 153.98 581 T -2 F -( returns) 249.96 581 T -5 F --0.6 (NULL) 289.28 581 S -2 F -( if any of the parameters is empty or if it was) 315.68 581 T -(not able to allocate space.) 108 568 T -(T) 234.64 568 T -(o allocate space for an arbitrary number of geometry shapes,) 241.01 568 T -(use) 108 555 T -1 F -(XkbAllocGeomShapes) 127 555 T -2 F -(.) 233.64 555 T -(To add one key at the end of an existing row of keys, use) 108 534 T -1 F -(XkbAddGeomKey) 384.95 534 T -2 F -(.) 470.26 534 T -2 11 Q -(XkbK) 108 513.67 T -(e) 134.61 513.67 T -(yPtr) 139.33 513.67 T -3 F -(XkbAddGeomK) 160.41 513.67 T -(ey) 237.15 513.67 T -2 F -(\050) 247.54 513.67 T -1 F -(r) 251.2 513.67 T -(ow) 254.98 513.67 T -2 F -(\051) 267.82 513.67 T -(XkbRo) 126 500.67 T -(wPtr) 157.5 500.67 T -1 F -(r) 207 500.67 T -(ow) 210.78 500.67 T -2 F -(;) 223.62 500.67 T -(/* ro) 270 500.67 T -(w to be updated */) 290.2 500.67 T -2 12 Q -(Keys are grouped into rows.) 108 481 T -1 F -(XkbAddGeomKey) 246.64 481 T -2 F -( adds one key to the end of the specified) 331.94 481 T -1 F --0.16 (r) 108 468 P --0.16 (ow) 112.13 468 P -2 F --0.16 (. The key is allocated and zeroed.) 126.13 468 P -1 F --0.16 (XkbAddGeomKey) 288.62 468 P -2 F --0.16 ( returns) 373.93 468 P -5 F --0.35 -0.6 (NULL) 412.93 468 B -2 F --0.16 ( if) 439.33 468 P -1 F --0.16 (r) 452.34 468 P --0.16 (ow) 456.47 468 P -2 F --0.16 ( is empty or if) 470.47 468 P -(it was not able to allocate space for the key. To allocate space for an arbitrary number of) 108 455 T -(keys to a row, use) 108 442 T -1 F -(XkbAllocGeomKeys) 197.32 442 T -2 F -(.) 293.29 442 T -(To add one section to an existing keyboard geometry, use) 108 421 T -1 F -(XkbAddGeomSection) 387.62 421 T -2 F -(.) 489.6 421 T -2 11 Q -(XkbSectionPtr) 108 400.67 T -3 F -(XkbAddGeomSection) 175.53 400.67 T -2 F -(\050) 278.2 400.67 T -1 F -(g) 281.87 400.67 T -(eom) 287.26 400.67 T -2 F -(,) 305.58 400.67 T -1 F -( name) 308.33 400.67 T -2 F -(,) 334.91 400.67 T -1 F -( sz_r) 337.66 400.67 T -(ows) 358.25 400.67 T -2 F -(,) 375.37 400.67 T -1 F -( sz_doodads) 378.12 400.67 T -2 F -(,) 432.2 400.67 T -1 F -( sz_o) 434.95 400.67 T -(verlays) 457.15 400.67 T -2 F -(\051) 488.92 400.67 T -(XkbGeometryPtr) 126 387.67 T -1 F -(g) 207 387.67 T -(eom) 212.39 387.67 T -2 F -(;) 230.72 387.67 T -(/* geometry to be updated */) 270 387.67 T -(Atom) 126 374.67 T -1 F -(name) 207 374.67 T -2 F -(;) 230.83 374.67 T -(/* name of the ne) 270 374.67 T -(w section */) 346.1 374.67 T -(int) 126 361.67 T -1 F -(sz_r) 207 361.67 T -(ows) 224.84 361.67 T -2 F -(;) 241.96 361.67 T -(/* number of ro) 270 361.67 T -(ws to reserv) 338.46 361.67 T -(e in the section */) 391.45 361.67 T -(int) 126 348.67 T -1 F -(sz_doodads) 207 348.67 T -2 F -(;) 258.34 348.67 T -(/* number of doodads to reserv) 270 348.67 T -(e in the section */) 407.01 348.67 T -(int) 126 335.67 T -1 F -(sz_o) 207 335.67 T -(verlays) 226.45 335.67 T -2 F -(;) 258.22 335.67 T -(/* number of o) 270 335.67 T -(v) 334.91 335.67 T -(erlays to reserv) 340.25 335.67 T -(e in the section */) 407.28 335.67 T -2 12 Q --0.42 (A keyboard geometry contains an arbitrary number of sections.) 108 316 P -1 F --0.42 (XkbAddGeomSection) 410.86 316 P -2 F --0.42 ( adds) 512.84 316 P -(one section to an existing keyboard geometry) 108 303 T -1 F -(g) 328.97 303 T -(eom) 334.85 303 T -2 F -(. The new section contains space for) 354.84 303 T -(the number of rows, doodads, and overlays specified by) 108 290 T -1 11 Q -(sz_r) 378.95 290 T -(ows) 396.79 290 T -2 12 Q -(,) 413.91 290 T -1 11 Q -(sz_doodads) 419.91 290 T -2 12 Q -(, and) 471.24 290 T -1 11 Q -(sz_o) 108 277 T -(verlays) 127.45 277 T -2 12 Q -(. The new section is allocated and zeroed and given the name specified by) 159.22 277 T -1 F --0.29 (name) 108 264 P -2 F --0.29 (. If a section with name) 133.99 264 P -1 F --0.29 (name) 247.9 264 P -2 F --0.29 ( already exists in the geometry, a pointer to the existing) 273.89 264 P --0.47 (section is returned.) 108 251 P -1 F --0.47 ( XkbAddGeomSection) 198.03 251 P -2 F --0.47 ( returns) 302.54 251 P -5 F --1.04 -0.6 (NULL) 340.91 251 B -2 F --0.47 ( if any of the parameters is empty or) 367.31 251 P -(if it was not able to allocate space for the section. To allocate space for an arbitrary num-) 108 238 T -(ber of sections to a geometry, use) 108 225 T -1 F -(XkbAllocGeomSections) 271.97 225 T -2 F -(.) 384.61 225 T -(To add a row to a section, use) 108 204 T -1 F -(XkbAddGeomRow) 254.3 204 T -2 F -(.) 342.29 204 T -2 11 Q -(XkbRo) 108 183.67 T -(wPtr) 139.5 183.67 T -3 F -(XkbAddGeomRo) 163.03 183.67 T -(w) 244.82 183.67 T -2 F -(\050) 252.76 183.67 T -1 F -(section) 256.42 183.67 T -2 F -(,) 287.59 183.67 T -1 F -( sz_k) 290.34 183.67 T -(e) 311.92 183.67 T -(ys) 316.47 183.67 T -2 F -(\051) 325.64 183.67 T -(XkbSectionPtr) 126 170.67 T -1 F -(section) 207 170.67 T -2 F -(;) 238.16 170.67 T -(/* section to be updated */) 270 170.67 T -(int) 126 157.67 T -1 F -(sz_k) 207 157.67 T -(e) 225.83 157.67 T -(ys) 230.39 157.67 T -2 F -(;) 239.55 157.67 T -(/* number of k) 270 157.67 T -(e) 334.97 157.67 T -(ys to be reserv) 339.68 157.67 T -(ed */) 403.36 157.67 T -2 12 Q -(One of the components of a keyboard geometry section is one or more rows of keys.) 108 138 T -1 F -(XkbAddGeomRow) 108 125 T -2 F -( adds one row to the specified) 195.98 125 T -1 F -(section) 342.29 125 T -2 F -(. The newly created row contains) 376.28 125 T --0.27 (space for the number of keys specified in) 108 112 P -1 11 Q --0.25 (sz_k) 306.43 112 P --0.25 (e) 325.26 112 P --0.25 (ys) 329.82 112 P -2 12 Q --0.27 (. They are allocated and zeroed, but other-) 338.98 112 P -(wise uninitialized.) 108 99 T -1 F -(XkbAddGeomRow) 199 99 T -2 F -( returns) 286.98 99 T -5 F --0.6 (NULL) 326.3 99 S -2 F -( if any of the parameters is empty or if) 352.7 99 T -(it was not able to allocate space for the row. To allocate space for an arbitrary number of) 108 86 T -(rows to a section, use the) 108 73 T -1 F -(XkbAllocGeomRows) 231.65 73 T -2 F -( function.) 330.3 73 T -FMENDPAGE -%%EndPage: "108" 120 -%%Page: "109" 121 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(109) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(13 K) 431.08 744.87 T -(e) 457.99 744.87 T -(yboard Geometry) 462.71 744.87 T -2 12 Q -(To add one doodad to a section of a keyboard geometry or to the top-level geometry, use) 108 712 T -1 F -(XkbAddGeomDoodad) 108 699 T -2 F -(.) 213.31 699 T -2 11 Q -(XkbDoodadPtr) 108 678.67 T -3 F -(XkbAddGeomDoodad) 177.35 678.67 T -2 F -(\050) 282.48 678.67 T -1 F -(g) 286.14 678.67 T -(eom) 291.54 678.67 T -2 F -(,) 309.86 678.67 T -1 F -( section) 312.61 678.67 T -2 F -(,) 346.52 678.67 T -1 F -( name) 349.27 678.67 T -2 F -(\051) 375.85 678.67 T -(XkbGeometryPtr) 126 665.67 T -1 F -(g) 207 665.67 T -(eom) 212.39 665.67 T -2 F -(;) 230.72 665.67 T -(/* geometry to which the doodad is added */) 270 665.67 T -(XkbSectionPtr) 126 652.67 T -1 F -(section) 207 652.67 T -2 F -(;) 238.16 652.67 T -(/* section, if an) 270 652.67 T -(y) 337.66 652.67 T -(, to which the doodad is added */) 342.45 652.67 T -(Atom) 126 639.67 T -1 F -(name) 207 639.67 T -2 F -(;) 230.83 639.67 T -(/* name of the ne) 270 639.67 T -(w doodad */) 346.1 639.67 T -2 12 Q -(A) 108 620 T -1 F -(doodad) 119.66 620 T -2 F -( describes some visible aspect of the keyboard that is not a key and is not a sec-) 155.66 620 T -(tion.) 108 607 T -1 F -(XkbAddGeomDoodad) 132.67 607 T -2 F -( adds a doodad with name specified by) 237.98 607 T -1 F -(name) 427.28 607 T -2 F -( to the geometry) 453.28 607 T -1 F --0.01 (g) 108 594 P --0.01 (eom) 113.88 594 P -2 F --0.01 ( if) 133.87 594 P -1 F --0.01 (section) 147.18 594 P -2 F --0.01 ( is) 181.17 594 P -5 F --0.03 -0.6 (NULL) 195.15 594 B -2 F --0.01 ( or to the section of the geometry specified by) 221.55 594 P -1 F --0.01 (section) 444.72 594 P -2 F --0.01 ( if) 478.72 594 P -1 F --0.01 (section) 492.02 594 P -2 F --0.01 ( is) 526.02 594 P -(not) 108 581 T -5 F --0.6 (NULL) 126.34 581 S -2 F -(.) 152.74 581 T -1 F -(XkbAddGeomDoodad) 158.74 581 T -2 F -( returns) 264.05 581 T -5 F --0.6 (NULL) 303.37 581 S -2 F -( if any of the parameters is empty or if it) 329.77 581 T -(was not able to allocate space for the doodad. If there is already a doodad with the name) 108 568 T -1 F --0.09 (name) 108 555 P -2 F --0.09 ( in the doodad array for the geometry \050if) 133.99 555 P -1 F --0.09 (section) 329.45 555 P -2 F --0.09 ( is) 363.44 555 P -5 F --0.2 -0.6 (NULL) 377.26 555 B -2 F --0.09 (\051 or the section \050if) 403.66 555 P -1 F --0.09 (section) 492.18 555 P -2 F --0.09 ( is) 526.18 555 P --0.13 (non-) 108 542 P -5 F --0.29 -0.6 (NULL) 130 542 B -2 F --0.13 (\051, a pointer to that doodad is returned. To allocate space for an arbitrary number) 156.4 542 P -(of doodads to a section, use the) 108 529 T -1 F -(XkbAllocGeomSectionDoodads) 261.31 529 T -2 F -( function. To allocate) 412.62 529 T --0.14 (space for an arbitrary number of doodads to a keyboard geometry, use the) 108 516 P -1 F --0.14 (XkbAllocGeom-) 463.36 516 P -(Doodads) 108 503 T -2 F -( function.) 151.33 503 T -(To add one overlay to a section, use) 108 482 T -1 F -(XkbAddGeomOverlay) 283.63 482 T -2 F -(.) 388.93 482 T -2 11 Q -(XkbOv) 108 461.67 T -(erlayPtr) 140.22 461.67 T -3 F -(XkbAddGeomOv) 177.79 461.67 T -(erlay) 260.2 461.67 T -2 F -(\050) 284.02 461.67 T -1 F -(section) 287.68 461.67 T -2 F -(,) 318.85 461.67 T -1 F -( name) 321.6 461.67 T -2 F -(,) 348.17 461.67 T -1 F -( sz_r) 350.92 461.67 T -(ows) 371.52 461.67 T -2 F -(\051) 388.63 461.67 T -(XkbSectionPtr) 126 448.67 T -1 F -(section) 207 448.67 T -2 F -(;) 238.16 448.67 T -(/* section to which an o) 270 448.67 T -(v) 374.63 448.67 T -(erlay will be added */) 379.97 448.67 T -(Atom) 126 435.67 T -1 F -(name) 207 435.67 T -2 F -(;) 230.83 435.67 T -(/* name of the o) 270 435.67 T -(v) 341.32 435.67 T -(erlay */) 346.66 435.67 T -(int) 126 422.67 T -1 F -(sz_r) 207 422.67 T -(ows) 224.84 422.67 T -2 F -(;) 241.96 422.67 T -(/* number of ro) 270 422.67 T -(ws to reserv) 338.46 422.67 T -(e in the o) 391.45 422.67 T -(v) 431.92 422.67 T -(erlay */) 437.26 422.67 T -1 12 Q -(XkbAddGeomOverlay) 108 403 T -2 F -( adds an overlay with the specified name to the specified) 213.3 403 T -1 F -(section) 488.24 403 T -2 F -(.) 522.24 403 T --0.39 (The new overlay is created with space allocated for) 108 390 P -1 F --0.39 (sz_rows) 354.08 390 P -2 F --0.39 ( rows. If an overlay with name) 392.76 390 P -1 F -(name) 108 377 T -2 F -( already exists in the section, a pointer to the existing overlay is returned.) 133.99 377 T -1 F -(XkbAddGeomOverlay) 108 364 T -2 F -( returns) 213.3 364 T -5 F --0.6 (NULL) 252.62 364 S -2 F -( if any of the parameters is empty or if it was not able) 279.02 364 T --0.34 (to allocate space for the overlay. To allocate space for an arbitrary number of overlays to a) 108 351 P -(section, use the) 108 338 T -1 F -(XkbAllocGeomOverlay) 184.66 338 T -2 F -( function.) 295.96 338 T -(To add a row to an existing overlay, use) 108 317 T -1 F -(XkbAddGeomOverlayRow) 303.3 317 T -2 F -(.) 429.94 317 T -2 11 Q -(XkbOv) 108 296.67 T -(erlayRo) 140.22 296.67 T -(wPtr) 174.77 296.67 T -3 F -(XkbAddGeomOv) 198.3 296.67 T -(erlayRo) 280.7 296.67 T -(w) 317.86 296.67 T -2 F -(\050) 325.8 296.67 T -1 F -(o) 329.46 296.67 T -(verlay) 334.85 296.67 T -2 F -(,) 361.63 296.67 T -1 F -( r) 364.38 296.67 T -(ow_under) 370.91 296.67 T -(, sz_k) 413.69 296.67 T -(e) 438.02 296.67 T -(ys) 442.58 296.67 T -2 F -(\051) 451.74 296.67 T -(XkbOv) 126 283.67 T -(erlayPtr) 158.22 283.67 T -1 F -(o) 207 283.67 T -(verlay) 212.39 283.67 T -2 F -(;) 239.88 283.67 T -(/* o) 270 283.67 T -(v) 286.64 283.67 T -(erlay to be updated */) 291.98 283.67 T -(XkbRo) 126 270.67 T -(wPtr) 157.5 270.67 T -1 F -(r) 207 270.67 T -(ow_under) 210.78 270.67 T -2 F -(;) 254.78 270.67 T -(/* ro) 270 270.67 T -(w to be o) 290.2 270.67 T -(v) 330.67 270.67 T -(erlayed in the section) 336 270.67 T -1 F -(o) 432.54 270.67 T -(verlay) 437.93 270.67 T -2 F -( o) 465.42 270.67 T -(v) 473.5 270.67 T -(erlays */) 478.83 270.67 T -(int) 126 257.67 T -1 F -(sz_k) 207 257.67 T -(e) 225.83 257.67 T -(ys) 230.39 257.67 T -2 F -(;) 239.55 257.67 T -(/* number of k) 270 257.67 T -(e) 334.97 257.67 T -(ys to reserv) 339.68 257.67 T -(e in the ro) 390.23 257.67 T -(w */) 434.25 257.67 T -1 12 Q -(XkbAddGeomOverlayRow) 108 238 T -2 F -( adds one row to the) 234.64 238 T -1 F -(o) 334.62 238 T -(verlay) 340.5 238 T -2 F -(. The new row contains space for) 370.49 238 T -1 11 Q -(sz_k) 108 225 T -(e) 126.83 225 T -(ys) 131.39 225 T -2 12 Q -( keys. If) 140.55 225 T -1 F -(r) 182.54 225 T -(ow_under) 186.66 225 T -2 F -( specifies a row that doesn\325t exist on the underlying section,) 234.66 225 T -1 F -(XkbAddGeomOverlayRow) 108 212 T -2 F -( returns) 234.64 212 T -5 F --0.6 (NULL) 273.96 212 S -2 F -( and doesn\325t change the overlay.) 300.36 212 T -1 F -( XkbAddGeo-) 455.65 212 T -(mOverlayRow) 108 199 T -2 F -( returns) 176.65 199 T -5 F --0.6 (NULL) 215.98 199 S -2 F -( if any of the parameters is empty or if it was not able to allo-) 242.38 199 T -(cate space for the overlay.) 108 186 T -(To add a key to an existing overlay row, use) 108 165 T -1 F -(XkbAddGeomOverlayKey) 323.63 165 T -2 F -(.) 447.59 165 T -2 11 Q -(XkbOv) 108 144.67 T -(erlayK) 140.22 144.67 T -(e) 169.88 144.67 T -(yPtr) 174.59 144.67 T -3 F -(XkbAddGeomOv) 195.68 144.67 T -(erlayK) 278.08 144.67 T -(ey) 310.19 144.67 T -2 F -(\050) 320.58 144.67 T -1 F -(o) 324.24 144.67 T -(verlay) 329.63 144.67 T -2 F -(,) 356.4 144.67 T -1 F -( r) 359.15 144.67 T -(ow) 365.69 144.67 T -(, under) 377.71 144.67 T -2 F -(\051) 408.87 144.67 T -(XkbOv) 126 131.67 T -(erlayPtr) 158.22 131.67 T -1 F -(o) 207 131.67 T -(verlay) 212.39 131.67 T -2 F -(;) 239.88 131.67 T -(/* o) 270 131.67 T -(v) 286.64 131.67 T -(erlay to be updated */) 291.98 131.67 T -(XkbRo) 126 118.67 T -(wPtr) 157.5 118.67 T -1 F -(r) 207 118.67 T -(ow) 210.78 118.67 T -2 F -(;) 223.62 118.67 T -(/* ro) 270 118.67 T -(w in o) 290.2 118.67 T -(v) 317.53 118.67 T -(erlay to be updated */) 322.87 118.67 T -(char *) 126 105.67 T -1 F -(under) 207 105.67 T -2 F -(;) 232.66 105.67 T -(/* primary name of the k) 270 105.67 T -(e) 378.95 105.67 T -(y to be considered */) 383.67 105.67 T -1 12 Q --0.18 (XkbAddGeomOverlayKey) 108 86 P -2 F --0.18 ( adds one key to the) 231.96 86 P -1 F --0.18 (r) 329.52 86 P --0.18 (ow) 333.65 86 P -2 F --0.18 ( in the) 347.65 86 P -1 F --0.18 (o) 380.1 86 P --0.18 (verlay) 385.98 86 P -2 F --0.18 (. If there is no key named) 415.97 86 P -1 F -(under) 108 73 T -2 F -( in the row of the underlying section,) 136 73 T -1 F -(XkbAddGeomOverlayKey) 316.31 73 T -2 F -( returns) 440.27 73 T -5 F --0.6 (NULL) 479.59 73 S -2 F -(.) 505.99 73 T -FMENDPAGE -%%EndPage: "109" 121 -%%Page: "110" 122 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(110) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(13 K) 431.08 744.87 T -(e) 457.99 744.87 T -(yboard Geometry) 462.71 744.87 T -0 12 Q -(13.11) 72 712 T -(Allocating and Freeing Geometr) 108 712 T -(y Components) 290.16 712 T -2 F -(Xkb provides a number of functions to allocate and free subcomponents of a keyboard) 108 692 T -(geometry. Use these functions to create or modify keyboard geometries. Note that these) 108 679 T --0.2 (functions merely allocate space for the new element\050s\051, and it is up to you to fill in the val-) 108 666 P -(ues explicitly in your code. These allocation functions increase) 108 653 T -1 F -(sz_) 413.28 653 T -2 11.2 Q -(*) 428.62 649.5 T -2 12 Q -( but never touch) 434.22 653 T -1 F --0.11 (num_) 108 640 P -2 11.2 Q --0.1 (*) 134.66 636.5 P -2 12 Q --0.11 ( \050unless there is an allocation failure, in which case they reset both) 140.26 640 P -1 F --0.11 (sz_) 460.8 640 P -2 11.2 Q --0.1 (*) 476.13 636.5 P -2 12 Q --0.11 ( and) 481.73 640 P -1 F --0.11 (num_) 504.84 640 P -2 11.2 Q --0.1 (*) 531.51 636.5 P -2 12 Q -(to zero\051. These functions return) 108 627 T -5 F --0.6 (Success) 261.96 627 S -2 F -( if they succeed,) 308.16 627 T -5 F --0.6 (BadAlloc) 389.14 627 S -2 F -( if they are not able) 441.94 627 T -(to allocate space, or) 108 614 T -5 F --0.6 (BadValue) 206.3 614 S -2 F -( if a parameter is not as expected.) 259.11 614 T -(To allocate space for an arbitrary number of outlines to a shape, use) 108 593 T -1 F -(XkbAllocGeomOut-) 436.58 593 T -(lines) 108 580 T -2 F -(.) 130.67 580 T -2 11 Q -(Status) 108 559.67 T -3 F -(XkbAllocGeomOutlines) 137.65 559.67 T -2 F -(\050) 250.1 559.67 T -1 F -(shape) 253.76 559.67 T -2 F -(,) 279.42 559.67 T -1 F -( num_needed) 282.17 559.67 T -2 F -(\051) 340.52 559.67 T -(XkbShapePtr) 126 546.67 T -1 F -(shape) 207 546.67 T -2 F -(;) 232.66 546.67 T -(/* shape for which outlines should be allocated */) 270 546.67 T -(int) 126 533.67 T -1 F -(num_needed) 207 533.67 T -2 F -(;) 262.59 533.67 T -(/* number of ne) 270 533.67 T -(w outlines required */) 339.68 533.67 T -1 12 Q -(XkbAllocGeomOutlines) 108 514 T -2 F -( allocates space for) 221.32 514 T -1 F -(num_needed) 315.95 514 T -2 F -( outlines in the specified) 376.6 514 T -1 F -(shape) 496.92 514 T -2 F -(.) 524.92 514 T -(The outlines are not initialized.) 108 501 T -(To free geometry outlines, use) 108 480 T -1 F -(XkbFreeGeomOutlines) 257.3 480 T -2 F -(.) 367.94 480 T -2 11 Q -(v) 108 459.67 T -(oid) 113.28 459.67 T -3 F -(XkbFr) 130.09 459.67 T -(eeGeomOutlines) 161.67 459.67 T -2 F -(\050) 239.27 459.67 T -1 F -(shape) 242.94 459.67 T -2 F -(,) 268.6 459.67 T -1 F -( \336r) 271.35 459.67 T -(st) 283.77 459.67 T -2 F -(,) 291.11 459.67 T -1 F -( count) 293.86 459.67 T -2 F -(,) 321.05 459.67 T -1 F -( fr) 323.8 459.67 T -(ee_all) 333.48 459.67 T -2 F -(\051) 360.36 459.67 T -(XkbShapePtr) 126 446.67 T -1 F -(shape) 207 446.67 T -2 F -(;) 232.66 446.67 T -(/* shape in which outlines should be freed */) 270 446.67 T -(int) 126 433.67 T -1 F -(\336r) 207 433.67 T -(st) 216.67 433.67 T -2 F -(;) 224.01 433.67 T -(/* \336rst outline to be freed */) 270 433.67 T -(int) 126 420.67 T -1 F -(count) 207 420.67 T -2 F -(;) 231.44 420.67 T -(/* number of outlines to be freed */) 270 420.67 T -(Bool) 126 407.67 T -1 F -(fr) 207 407.67 T -(ee_all;) 213.93 407.67 T -2 F -(/*) 270 407.67 T -5 12 Q --0.6 (True) 281.31 407.67 S -2 11 Q -( => all outlines are freed */) 307.71 407.67 T -2 12 Q -(If) 108 388 T -1 F -(free_all) 118.99 388 T -2 F -( is) 156.32 388 T -5 F --0.6 (True) 170.33 388 S -2 F -(, all outlines are freed regardless of the value of) 196.73 388 T -1 F -(first) 428.33 388 T -2 F -(or) 450.67 388 T -1 F -(count) 463.67 388 T -2 F -(. Other-) 490.33 388 T -(wise,) 108 375 T -1 F -(count) 136 375 T -2 F -( outlines are freed beginning with the one specified by) 162.66 375 T -1 F -(first) 426.61 375 T -2 F -(.) 445.96 375 T -(To) 108 354 T -(allocate space for) 124.33 354 T -( an arbitrary number of keys to a row, use) 208.3 354 T -1 F -(XkbAllocGeomKeys) 411.91 354 T -2 F -(.) 507.89 354 T -2 11 Q -(Status) 108 333.67 T -3 F -(XkbAllocGeomK) 137.65 333.67 T -(eys) 218.65 333.67 T -2 F -(\050) 233.31 333.67 T -1 F -(r) 236.98 333.67 T -(ow) 240.76 333.67 T -2 F -(,) 252.88 333.67 T -1 F -( num_needed) 255.63 333.67 T -2 F -(\051) 313.98 333.67 T -(XkbRo) 126 320.67 T -(wPtr) 157.5 320.67 T -1 F -(r) 207 320.67 T -(ow) 210.78 320.67 T -2 F -(;) 223.62 320.67 T -(/* ro) 270 320.67 T -(w to which k) 290.2 320.67 T -(e) 347.22 320.67 T -(ys should be allocated */) 351.94 320.67 T -(int) 126 307.67 T -1 F -(num_needed) 207 307.67 T -2 F -(;) 262.59 307.67 T -(/* number of ne) 270 307.67 T -(w k) 339.68 307.67 T -(e) 355.77 307.67 T -(ys required */) 360.49 307.67 T -1 12 Q -(XkbAllocGeomKeys) 108 288 T -2 F -( allocates) 203.98 288 T -1 F -(num_needed) 251.96 288 T -2 F -( keys and adds them to the) 312.61 288 T -1 F -(row) 442.93 288 T -2 F -(. No initializa-) 461.6 288 T -(tion of the keys is done.) 108 275 T -(To free geometry keys, use) 108 254 T -1 F -(XkbFreeGeomKeys) 241.3 254 T -2 F -(.) 334.6 254 T -2 11 Q -(v) 108 233.67 T -(oid) 113.28 233.67 T -3 F -(XkbFr) 130.09 233.67 T -(eeGeomK) 161.67 233.67 T -(eys) 207.82 233.67 T -2 F -(\050) 222.49 233.67 T -1 F -(r) 226.15 233.67 T -(ow) 229.93 233.67 T -2 F -(,) 242.06 233.67 T -1 F -( \336r) 244.81 233.67 T -(st) 257.23 233.67 T -2 F -(,) 264.56 233.67 T -1 F -( count) 267.31 233.67 T -2 F -(,) 294.51 233.67 T -1 F -( fr) 297.26 233.67 T -(ee_all) 306.93 233.67 T -2 F -(\051) 333.82 233.67 T -(XkbRo) 126 220.67 T -(wPtr) 157.5 220.67 T -1 F -(r) 207 220.67 T -(ow) 210.78 220.67 T -2 F -(;) 223.62 220.67 T -(/* ro) 270 220.67 T -(w in which k) 290.2 220.67 T -(e) 347.22 220.67 T -(ys should be freed */) 351.94 220.67 T -(int) 126 207.67 T -1 F -(\336r) 207 207.67 T -(st) 216.67 207.67 T -2 F -(;) 224.01 207.67 T -(/* \336rst k) 270 207.67 T -(e) 306.56 207.67 T -(y to be freed */) 311.28 207.67 T -(int) 126 194.67 T -1 F -(count) 207 194.67 T -2 F -(;) 231.44 194.67 T -(/* number of k) 270 194.67 T -(e) 334.97 194.67 T -(ys to be freed */) 339.68 194.67 T -(Bool) 126 181.67 T -1 F -(fr) 207 181.67 T -(ee_all;) 213.93 181.67 T -2 F -(/*) 270 181.67 T -5 12 Q --0.6 (True) 281.31 181.67 S -2 11 Q -( => all k) 307.71 181.67 T -(e) 344.76 181.67 T -(ys are freed */) 349.48 181.67 T -2 12 Q -(If) 108 162 T -1 F -(free_all) 118.99 162 T -2 F -( is) 156.32 162 T -5 F --0.6 (True) 170.33 162 S -2 F -(, all keys are freed regardless of the value of) 196.73 162 T -1 F -(first) 412.32 162 T -2 F -(or) 434.66 162 T -1 F -(count) 447.66 162 T -2 F -(. Otherwise,) 474.32 162 T -1 F -(count) 108 149 T -2 F -( keys are freed beginning with the one specified by) 134.66 149 T -1 F -(first) 382.61 149 T -2 F -(.) 401.95 149 T -(To allocate geometry properties, use) 108 128 T -1 F -(XkbAllocGeomProps) 285.96 128 T -2 F -(.) 387.28 128 T -2 11 Q -(Status) 108 107.67 T -3 F -(XkbAllocGeomPr) 137.65 107.67 T -(ops) 221.77 107.67 T -2 F -(\050) 237.67 107.67 T -1 F -(g) 241.33 107.67 T -(eom) 246.72 107.67 T -2 F -(,) 265.05 107.67 T -1 F -( num_needed) 267.8 107.67 T -2 F -(\051) 326.14 107.67 T -(XkbGeometryPtr) 126 94.67 T -1 F -(g) 207 94.67 T -(eom) 212.39 94.67 T -2 F -(;) 230.72 94.67 T -(/* geometry for which properties should be allocated */) 270 94.67 T -(int) 126 81.67 T -1 F -(num_needed) 207 81.67 T -2 F -(;) 262.59 81.67 T -(/* number of ne) 270 81.67 T -(w properties required */) 339.68 81.67 T -FMENDPAGE -%%EndPage: "110" 122 -%%Page: "111" 123 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(111) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(13 K) 431.08 744.87 T -(e) 457.99 744.87 T -(yboard Geometry) 462.71 744.87 T -1 12 Q -(XkbAllocGeomProps) 108 712 T -2 F -( allocates space for) 209.32 712 T -1 F -(num_needed) 303.95 712 T -2 F -( properties and adds them to the) 364.6 712 T --0.11 (specified geometry) 108 699 P -1 F --0.11 (g) 202.42 699 P --0.11 (eom) 208.3 699 P -2 F --0.11 (. No initialization of the properties is done. A geometry property) 228.29 699 P -(associates an arbitrary string with an equally arbitrary name. Geometry properties can be) 108 686 T -(used to provide hints to programs that display images of keyboards, but they are not inter-) 108 673 T -(preted by Xkb. No other geometry structures refer to geometry properties.) 108 660 T -(To free geometry properties, use) 108 639 T -1 F -(XkbFreeGeomProperties) 267.29 639 T -2 F -(.) 387.92 639 T -2 11 Q -(v) 108 618.67 T -(oid) 113.28 618.67 T -3 F -(XkbFr) 130.09 618.67 T -(eeGeomPr) 161.67 618.67 T -(operties) 210.95 618.67 T -2 F -(\050) 248.22 618.67 T -1 F -(g) 251.88 618.67 T -(eom) 257.27 618.67 T -2 F -(,) 275.6 618.67 T -1 F -( \336r) 278.35 618.67 T -(st) 290.77 618.67 T -2 F -(,) 298.1 618.67 T -1 F -( count) 300.85 618.67 T -2 F -(,) 328.04 618.67 T -1 F -( fr) 330.79 618.67 T -(ee_all) 340.47 618.67 T -2 F -(\051) 367.36 618.67 T -(XkbGeometryPtr) 126 605.67 T -1 F -(g) 207 605.67 T -(eom) 212.39 605.67 T -2 F -(;) 230.72 605.67 T -(/* geometry in which properties should be freed */) 270 605.67 T -(int) 126 592.67 T -1 F -(\336r) 207 592.67 T -(st) 216.67 592.67 T -2 F -(;) 224.01 592.67 T -(/* \336rst property to be freed */) 270 592.67 T -(int) 126 579.67 T -1 F -(count) 207 579.67 T -2 F -(;) 231.44 579.67 T -(/* number of properties to be freed */) 270 579.67 T -(Bool) 126 566.67 T -1 F -(fr) 207 566.67 T -(ee_all;) 213.93 566.67 T -2 F -(/*) 270 566.67 T -5 12 Q --0.6 (True) 281.31 566.67 S -2 11 Q -( => all properties are freed */) 307.71 566.67 T -2 12 Q -(If) 108 547 T -1 F -(free_all) 118.99 547 T -2 F -( is) 156.32 547 T -5 F --0.6 (True) 170.33 547 S -2 F -(, all properties are freed regardless of the value of) 196.73 547 T -1 F -(first) 438.31 547 T -2 F -(or) 460.66 547 T -1 F -(count) 473.65 547 T -2 F -(. Other-) 500.32 547 T -(wise,) 108 534 T -1 F -(count) 136 534 T -2 F -( properties are freed beginning with the one specified by) 162.66 534 T -1 F -(first) 436.6 534 T -2 F -(.) 455.94 534 T -(To allocate geometry key aliases, use) 108 513 T -1 F -(XkbAllocGeomKeyAliases) 290.29 513 T -2 F -(.) 416.27 513 T -2 11 Q -(Status) 108 492.67 T -3 F -(XkbAllocGeomK) 137.65 492.67 T -(eyAliases) 218.65 492.67 T -2 F -(\050) 262.03 492.67 T -1 F -(g) 265.7 492.67 T -(eom) 271.09 492.67 T -2 F -(,) 289.41 492.67 T -1 F -( num_needed) 292.16 492.67 T -2 F -(\051) 350.51 492.67 T -(XkbGeometryPtr) 126 479.67 T -1 F -(g) 207 479.67 T -(eom) 212.39 479.67 T -2 F -(;) 230.72 479.67 T -(/* geometry for which k) 270 479.67 T -(e) 376.2 479.67 T -(y aliases should be allocated */) 380.92 479.67 T -(int) 126 466.67 T -1 F -(num_needed) 207 466.67 T -2 F -(;) 262.59 466.67 T -(/* number of ne) 270 466.67 T -(w k) 339.68 466.67 T -(e) 355.77 466.67 T -(y aliases required */) 360.49 466.67 T -1 12 Q -(XkbAllocGeomKeyAliases) 108 447 T -2 F -( allocates space for) 233.98 447 T -1 F -(num_needed) 328.61 447 T -2 F -( key aliases and adds them to) 389.26 447 T -(the specified geometry) 108 434 T -1 F -(g) 220.31 434 T -(eom) 226.19 434 T -2 F -(. A key alias is a pair of strings that associates an alternate) 246.18 434 T -(name for a key with the real name for that key.) 108 421 T -(To free geometry key aliases, use) 108 400 T -1 F -(XkbFreeGeomKeyAliases) 271.62 400 T -2 F -(.) 394.92 400 T -2 11 Q -(v) 108 379.67 T -(oid) 113.28 379.67 T -3 F -(XkbFr) 130.09 379.67 T -(eeGeomK) 161.67 379.67 T -(eyAliases) 207.82 379.67 T -2 F -(\050) 251.21 379.67 T -1 F -(g) 254.87 379.67 T -(eom) 260.26 379.67 T -2 F -(,) 278.59 379.67 T -1 F -( \336r) 281.34 379.67 T -(st) 293.76 379.67 T -2 F -(,) 301.09 379.67 T -1 F -(count) 306.59 379.67 T -2 F -(,) 331.04 379.67 T -1 F -(fr) 336.54 379.67 T -(ee_all) 343.47 379.67 T -2 F -(\051) 370.35 379.67 T -(XkbGeometryPtr) 126 366.67 T -1 F -(g) 207 366.67 T -(eom) 212.39 366.67 T -2 F -(;) 230.72 366.67 T -(/* geometry in which k) 270 366.67 T -(e) 371.94 366.67 T -(y aliases should be freed */) 376.66 366.67 T -(int) 126 353.67 T -1 F -(\336r) 207 353.67 T -(st) 216.67 353.67 T -2 F -(;) 224.01 353.67 T -(/* \336rst k) 270 353.67 T -(e) 306.56 353.67 T -(y alias to be freed */) 311.28 353.67 T -(int) 126 340.67 T -1 F -(count) 207 340.67 T -2 F -(;) 231.44 340.67 T -(/* number of k) 270 340.67 T -(e) 334.97 340.67 T -(y aliases to be freed */) 339.68 340.67 T -(Bool) 126 327.67 T -1 F -(fr) 207 327.67 T -(ee_all;) 213.93 327.67 T -2 F -(/*) 270 327.67 T -5 12 Q --0.6 (True) 281.31 327.67 S -2 11 Q -( => all k) 307.71 327.67 T -(e) 344.76 327.67 T -(y aliases are freed */) 349.48 327.67 T -2 12 Q -(If) 108 308 T -1 F -(free_all) 118.99 308 T -2 F -( is) 156.32 308 T -5 F --0.6 (True) 170.33 308 S -2 F -(, all aliases in the top level of the specified geometry) 196.73 308 T -1 F -(g) 452.69 308 T -(eom) 458.57 308 T -2 F -( are freed) 478.56 308 T -(regardless of the value of) 108 295 T -1 F -(first) 232.3 295 T -2 F -(or) 254.64 295 T -1 F -(count) 267.64 295 T -2 F -(. Otherwise,) 294.3 295 T -1 F -(count) 355.62 295 T -2 F -( aliases in) 382.28 295 T -1 F -(g) 432.61 295 T -(eom) 438.49 295 T -2 F -( are freed begin-) 458.48 295 T -(ning with the one specified by) 108 282 T -1 F -(first) 255.98 282 T -2 F -(.) 275.33 282 T -(To allocate geometry colors, use) 108 261 T -1 F -(XkbAllocGeomColors) 267.3 261 T -2 F -(.) 372.62 261 T -2 11 Q -(Status) 108 240.67 T -3 F -(XkbAllocGeomColors) 137.65 240.67 T -2 F -(\050) 241.53 240.67 T -1 F -(g) 245.19 240.67 T -(eom) 250.58 240.67 T -2 F -(,) 268.91 240.67 T -1 F -( num_needed) 271.66 240.67 T -2 F -(\051) 330 240.67 T -(XkbGeometryPtr) 126 227.67 T -1 F -(g) 207 227.67 T -(eom) 212.39 227.67 T -2 F -(;) 230.72 227.67 T -(/* geometry for which colors should be allocated */) 270 227.67 T -(int) 126 214.67 T -1 F -(num_needed) 207 214.67 T -2 F -(;) 262.59 214.67 T -(/* number of ne) 270 214.67 T -(w colors required. */) 339.68 214.67 T -1 12 Q -(XkbAllocGeomColors) 108 195 T -2 F -( allocates space for) 213.32 195 T -1 F -(num_needed) 307.96 195 T -2 F -( colors and adds them to the speci-) 368.6 195 T --0.41 (fied geometry) 108 182 P -1 F --0.41 (g) 177.17 182 P --0.41 (eom) 183.05 182 P -2 F --0.41 (. A color name is a string whose interpretation is not specified by Xkb.) 203.05 182 P -(All other geometry data structures refer to colors using their indices in this global list or) 108 169 T -(pointers to colors in this list.) 108 156 T -FMENDPAGE -%%EndPage: "111" 123 -%%Page: "112" 124 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(112) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(13 K) 431.08 744.87 T -(e) 457.99 744.87 T -(yboard Geometry) 462.71 744.87 T -2 12 Q -(T) 108 712 T -(o free geometry colors, use) 114.37 712 T -1 F -(XkbFreeGeomColors) 247.67 712 T -2 F -(.) 350.32 712 T -2 11 Q -(v) 108 691.67 T -(oid) 113.28 691.67 T -3 F -(XkbFr) 130.09 691.67 T -(eeGeomColors) 161.67 691.67 T -2 F -(\050) 230.71 691.67 T -1 F -(g) 234.37 691.67 T -(eom) 239.76 691.67 T -2 F -(,) 258.08 691.67 T -1 F -( \336r) 260.83 691.67 T -(st) 273.25 691.67 T -2 F -(,) 280.59 691.67 T -1 F -( count) 283.34 691.67 T -2 F -(,) 310.53 691.67 T -1 F -( fr) 313.28 691.67 T -(ee_all) 322.96 691.67 T -2 F -(\051) 349.85 691.67 T -(XkbGeometryPtr) 126 678.67 T -1 F -(g) 207 678.67 T -(eom) 212.39 678.67 T -2 F -(;) 230.72 678.67 T -(/* geometry in which colors should be freed */) 270 678.67 T -(int) 126 665.67 T -1 F -(\336r) 207 665.67 T -(st) 216.67 665.67 T -2 F -(;) 224.01 665.67 T -(/* \336rst color to be freed */) 270 665.67 T -(int) 126 652.67 T -1 F -(count) 207 652.67 T -2 F -(;) 231.44 652.67 T -(/* number of colors to be freed */) 270 652.67 T -(Bool) 126 639.67 T -1 F -(fr) 207 639.67 T -(ee_all;) 213.93 639.67 T -2 F -(/*) 270 639.67 T -5 12 Q --0.6 (True) 281.31 639.67 S -2 11 Q -( => all colors are freed */) 307.71 639.67 T -2 12 Q --0.17 (If) 108 620 P -1 F --0.17 (free_all) 118.82 620 P -2 F --0.17 ( is) 156.15 620 P -5 F --0.38 -0.6 (True) 169.8 620 B -2 F --0.17 (, all colors are freed regardless of the value of) 196.2 620 P -1 F --0.17 (first) 417.38 620 P -2 F --0.17 (or) 439.55 620 P -1 F --0.17 (count) 452.37 620 P -2 F --0.17 (. Otherwise,) 479.03 620 P -1 F -(count) 108 607 T -2 F -( colors are freed beginning with the one specified by) 134.66 607 T -1 F -(first) 389.94 607 T -2 F -(.) 409.28 607 T -(T) 108 586 T -(o allocate points in an outline, use) 114.37 586 T -1 F -(XkbAllocGeomPoints) 281.03 586 T -2 F -(.) 384.35 586 T -2 11 Q -(Status) 108 565.67 T -3 F -(XkbAllocGeomP) 137.65 565.67 T -(oints) 216.87 565.67 T -2 F -(\050) 239.48 565.67 T -1 F -(outline) 243.15 565.67 T -2 F -(,) 273.7 565.67 T -1 F -( num_needed) 276.45 565.67 T -2 F -(\051) 334.8 565.67 T -(XkbOutlinePtr) 126 552.67 T -1 F -(outline) 207 552.67 T -2 F -(;) 237.56 552.67 T -(/* outline for which points should be allocated */) 270 552.67 T -(int) 126 539.67 T -1 F -(num_needed) 207 539.67 T -2 F -(;) 262.59 539.67 T -(/* number of ne) 270 539.67 T -(w points required */) 339.68 539.67 T -1 12 Q -(XkbAllocGeomPoints) 108 520 T -2 F -( allocates space for) 211.32 520 T -1 F -(num_needed) 305.95 520 T -2 F -( points in the specified) 366.6 520 T -1 F -(outline) 478.26 520 T -2 F -(. The) 511.6 520 T -(points are not initialized.) 108 507 T -(T) 108 486 T -(o free points in a outline, use) 114.37 486 T -1 F -(XkbFreeGeomPoints) 256.36 486 T -2 F -(.) 357 486 T -2 11 Q -(v) 108 465.67 T -(oid) 113.28 465.67 T -3 F -(XkbFr) 130.09 465.67 T -(eeGeomP) 161.67 465.67 T -(oints) 206.04 465.67 T -2 F -(\050) 228.66 465.67 T -1 F -(outline) 232.32 465.67 T -2 F -(,) 262.88 465.67 T -1 F -( \336r) 265.63 465.67 T -(st) 278.05 465.67 T -2 F -(,) 285.39 465.67 T -1 F -( count) 288.14 465.67 T -2 F -(,) 315.33 465.67 T -1 F -( fr) 318.08 465.67 T -(ee_all) 327.76 465.67 T -2 F -(\051) 354.64 465.67 T -(XkbOutlinePtr) 126 452.67 T -1 F -(outline) 207 452.67 T -2 F -(;) 237.56 452.67 T -(/* outline in which points should be freed */) 270 452.67 T -(int) 126 439.67 T -1 F -(\336r) 207 439.67 T -(st) 216.67 439.67 T -2 F -(;) 224.01 439.67 T -(/* \336rst point to be freed. */) 270 439.67 T -(int) 126 426.67 T -1 F -(count) 207 426.67 T -2 F -(;) 231.44 426.67 T -(/* number of points to be freed */) 270 426.67 T -(Bool) 126 413.67 T -1 F -(fr) 207 413.67 T -(ee_all;) 213.93 413.67 T -2 F -(/*) 270 413.67 T -5 12 Q --0.6 (True) 281.31 413.67 S -2 11 Q -( => all points are freed */) 307.71 413.67 T -2 12 Q -(If) 108 394 T -1 F -(free_all) 118.99 394 T -2 F -( is) 156.32 394 T -5 F --0.6 (True) 170.33 394 S -2 F -(, all points are freed regardless of the value of) 196.73 394 T -1 F -(first) 419.66 394 T -2 F -(and) 442.01 394 T -1 F -(count) 462.34 394 T -2 F -(. Other-) 489 394 T --0.33 (wise, the number of points specified by) 108 381 P -1 F --0.33 (count) 297.67 381 P -2 F --0.33 ( are freed, beginning with the point specified) 324.34 381 P -(by) 108 368 T -1 F -(first) 123 368 T -2 F -( in the specified outline.) 142.34 368 T -(T) 108 347 T -(o allocate space for an arbitrary number of geometry shapes, use) 114.37 347 T -1 F -(XkbAllocGeomShapes) 426.95 347 T -2 F -(.) 533.59 347 T -2 11 Q -(Status) 108 326.67 T -3 F -(XkbAllocGeomShapes) 137.65 326.67 T -2 F -(\050) 243.38 326.67 T -1 F -(g) 247.04 326.67 T -(eom) 252.43 326.67 T -2 F -(,) 270.76 326.67 T -1 F -( num_needed) 273.51 326.67 T -2 F -(\051) 331.85 326.67 T -(XkbGeometryPtr) 126 313.67 T -1 F -(g) 207 313.67 T -(eom) 212.39 313.67 T -2 F -(;) 230.72 313.67 T -(/* geometry for which shapes should be allocated */) 270 313.67 T -(int) 126 300.67 T -1 F -(num_needed) 207 300.67 T -2 F -(;) 262.59 300.67 T -(/* number of ne) 270 300.67 T -(w shapes required */) 339.68 300.67 T -1 12 Q -(XkbAllocGeomShapes) 108 281 T -2 F -( allocates space for) 214.64 281 T -1 F -(num_needed) 309.28 281 T -2 F -( shapes in the specified geometry) 369.92 281 T -1 F -(g) 108 268 T -(eom) 113.88 268 T -2 F -(. The shapes are not initialized.) 133.87 268 T -(T) 108 247 T -(o free geometry shapes, use) 114.37 247 T -1 F -(XkbFreeGeomShapes) 250.33 247 T -2 F -(.) 354.3 247 T -2 11 Q -(v) 108 226.67 T -(oid) 113.28 226.67 T -3 F -(XkbFr) 130.09 226.67 T -(eeGeomShapes) 161.67 226.67 T -2 F -(\050) 232.55 226.67 T -1 F -(g) 236.22 226.67 T -(eom) 241.61 226.67 T -2 F -(,) 259.93 226.67 T -1 F -( \336r) 262.68 226.67 T -(st) 275.1 226.67 T -2 F -(,) 282.44 226.67 T -1 F -( count) 285.19 226.67 T -2 F -(,) 312.38 226.67 T -1 F -( f r) 315.13 226.67 T -(ee_all) 327.56 226.67 T -2 F -(\051) 354.44 226.67 T -(XkbGeometryPtr) 126 213.67 T -1 F -(g) 207 213.67 T -(eom) 212.39 213.67 T -2 F -(;) 230.72 213.67 T -(/* geometry in which shapes should be freed */) 270 213.67 T -(int) 126 200.67 T -1 F -(\336r) 207 200.67 T -(st) 216.67 200.67 T -2 F -(;) 224.01 200.67 T -(/* \336rst shape to be freed */) 270 200.67 T -(int) 126 187.67 T -1 F -(count) 207 187.67 T -2 F -(;) 231.44 187.67 T -(/* number of shapes to be freed */) 270 187.67 T -(Bool) 126 174.67 T -1 F -(fr) 207 174.67 T -(ee_all;) 213.93 174.67 T -2 F -(/*) 270 174.67 T -5 12 Q --0.6 (True) 281.31 174.67 S -2 11 Q -( => all shapes are freed */) 307.71 174.67 T -2 12 Q --0.44 (If) 108 155 P -1 F --0.44 (free_all) 118.55 155 P -2 F --0.44 ( is) 155.88 155 P -5 F --0.98 -0.6 (True) 169 155 B -2 F --0.44 (, all shapes in the geometry are freed regardless of the values of) 195.4 155 P -1 F --0.44 (first) 498.21 155 P -2 F --0.44 ( and) 517.56 155 P -1 F -(count) 108 142 T -2 F -(. Otherwise,) 134.66 142 T -1 F -(count) 195.98 142 T -2 F -( shapes are freed, beginning with the shape specified by) 222.65 142 T -1 F -(first) 493.58 142 T -2 F -(.) 512.93 142 T -(T) 108 121 T -(o allocate geometry sections, use) 114.37 121 T -1 F -(XkbAllocGeomSections) 275.68 121 T -2 F -(.) 388.32 121 T -2 11 Q -(Status) 108 100.67 T -3 F -(XkbAllocGeomSections) 137.65 100.67 T -2 F -(\050) 248.87 100.67 T -1 F -(g) 252.53 100.67 T -(eom) 257.92 100.67 T -2 F -(,) 276.24 100.67 T -1 F -( num_needed) 278.99 100.67 T -2 F -(\051) 337.34 100.67 T -(XkbGeometryPtr) 126 87.67 T -1 F -(g) 207 87.67 T -(eom) 212.39 87.67 T -2 F -(;) 230.72 87.67 T -(/*geometry for which sections should be allocated */) 270 87.67 T -(int) 126 74.67 T -1 F -(num_needed) 207 74.67 T -2 F -(;) 262.59 74.67 T -(/* number of ne) 270 74.67 T -(w sections required */) 339.68 74.67 T -FMENDPAGE -%%EndPage: "112" 124 -%%Page: "113" 125 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(113) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(13 K) 431.08 744.87 T -(e) 457.99 744.87 T -(yboard Geometry) 462.71 744.87 T -1 12 Q -(XkbAllocGeomSections) 108 712 T -2 F -( allocates) 220.64 712 T -1 F -(num_needed) 268.63 712 T -2 F -( sections and adds them to the geometry) 329.28 712 T -1 F -(geom) 108 699 T -2 F -(. No initialization of the sections is done.) 133.99 699 T -(T) 108 678 T -(o free geometry sections, use) 114.37 678 T -1 F -(XkbFreeGeomSections) 257 678 T -2 F -(.) 366.97 678 T -2 11 Q -(v) 108 657.67 T -(oid) 113.28 657.67 T -3 F -(XkbFr) 130.09 657.67 T -(eeGeomSections) 161.67 657.67 T -2 F -(\050) 238.04 657.67 T -1 F -(g) 241.71 657.67 T -(eom) 247.1 657.67 T -2 F -(,) 265.42 657.67 T -1 F -( \336r) 268.17 657.67 T -(st) 280.59 657.67 T -2 F -(,) 287.93 657.67 T -1 F -( count) 290.68 657.67 T -2 F -(,) 317.87 657.67 T -1 F -( fr) 320.62 657.67 T -(ee_all) 330.3 657.67 T -2 F -(\051) 357.18 657.67 T -(XkbGeometryPtr) 126 644.67 T -1 F -(g) 207 644.67 T -(eom) 212.39 644.67 T -2 F -(;) 230.72 644.67 T -(/* geometry in which sections should be freed */) 270 644.67 T -(int) 126 631.67 T -1 F -(\336r) 207 631.67 T -(st) 216.67 631.67 T -2 F -(;) 224.01 631.67 T -(/* \336rst section to be freed. */) 270 631.67 T -(int) 126 618.67 T -1 F -(count) 207 618.67 T -2 F -(;) 231.44 618.67 T -(/* number of sections to be freed */) 270 618.67 T -(Bool) 126 605.67 T -1 F -(fr) 207 605.67 T -(ee_all;) 213.93 605.67 T -2 F -(/*) 270 605.67 T -5 12 Q --0.6 (True) 281.31 605.67 S -2 11 Q -( => all sections are freed */) 307.71 605.67 T -2 12 Q -(If) 108 586 T -1 F -(free_all) 118.99 586 T -2 F -( is) 156.32 586 T -5 F --0.6 (True) 170.33 586 S -2 F -(, all sections are freed regardless of the value of) 196.73 586 T -1 F -(first) 428.99 586 T -2 F -(and) 451.33 586 T -1 F -(count) 471.66 586 T -2 F -(. Other-) 498.32 586 T --0.18 (wise, the number of sections specified by) 108 573 P -1 F --0.18 (count) 308.01 573 P -2 F --0.18 ( are freed, beginning with the section spec-) 334.67 573 P -(ified by) 108 560 T -1 F -(first) 148 560 T -2 F -( in the specified geometry.) 167.34 560 T -(T) 108 539 T -(o allocate ro) 114.37 539 T -(ws in a section, use) 173.39 539 T -1 F -(XkbAllocGeomRows) 269.38 539 T -2 F -(.) 368.03 539 T -2 11 Q -(Status) 108 518.67 T -3 F -(XkbAllocGeomRo) 137.65 518.67 T -(ws) 223.7 518.67 T -2 F -(\050) 235.92 518.67 T -1 F -(section) 239.58 518.67 T -2 F -(,) 270.74 518.67 T -1 F -( num_needed) 273.49 518.67 T -2 F -(\051) 331.84 518.67 T -(XkbSectionPtr) 126 505.67 T -1 F -(section) 207 505.67 T -2 F -(;) 238.16 505.67 T -(/* section for which ro) 270 505.67 T -(ws should be allocated */) 369.32 505.67 T -(int) 126 492.67 T -1 F -(num_needed) 207 492.67 T -2 F -(;) 262.59 492.67 T -(/* number of ne) 270 492.67 T -(w ro) 339.68 492.67 T -(ws required */) 359.27 492.67 T -1 12 Q -(XkbAllocGeomRows) 108 473 T -2 F -( allocates) 206.65 473 T -1 F -(num_needed) 254.64 473 T -2 F -( rows and adds them to the) 315.29 473 T -1 F -(section) 446.94 473 T -2 F -(. No initial-) 480.94 473 T -(ization of the rows is done.) 108 460 T -(T) 108 439 T -(o free ro) 114.37 439 T -(ws in a section, use) 154.72 439 T -1 F -(XkbFreeGeomRows) 250.7 439 T -2 F -(.) 346.68 439 T -2 11 Q -(v) 108 418.67 T -(oid) 113.28 418.67 T -3 F -(XkbFr) 130.09 418.67 T -(eeGeomRo) 161.67 418.67 T -(ws) 212.87 418.67 T -2 F -(\050) 225.1 418.67 T -1 F -(section) 228.76 418.67 T -2 F -(,) 259.92 418.67 T -1 F -( \336r) 262.67 418.67 T -(st) 275.09 418.67 T -2 F -(,) 282.43 418.67 T -1 F -( count) 285.18 418.67 T -2 F -(,) 312.37 418.67 T -1 F -( fr) 315.12 418.67 T -(ee_all) 324.8 418.67 T -2 F -(\051) 351.68 418.67 T -(XkbSectionPtr) 126 405.67 T -1 F -(section) 207 405.67 T -2 F -(;) 238.16 405.67 T -(/* section in which ro) 270 405.67 T -(ws should be freed */) 365.05 405.67 T -(int) 126 392.67 T -1 F -(\336r) 207 392.67 T -(st) 216.67 392.67 T -2 F -(;) 224.01 392.67 T -(/* \336rst ro) 270 392.67 T -(w to be freed. */) 310.06 392.67 T -(int) 126 379.67 T -1 F -(count) 207 379.67 T -2 F -(;) 231.44 379.67 T -(/* number of ro) 270 379.67 T -(ws to be freed */) 338.46 379.67 T -(Bool) 126 366.67 T -1 F -(fr) 207 366.67 T -(ee_all;) 213.93 366.67 T -2 F -(/*) 270 366.67 T -5 12 Q --0.6 (True) 281.31 366.67 S -2 11 Q -( => all ro) 307.71 366.67 T -(ws are freed */) 348.26 366.67 T -2 12 Q --0.25 (If) 108 347 P -1 F --0.25 (free_all) 118.74 347 P -2 F --0.25 ( is) 156.07 347 P -5 F --0.56 -0.6 (True) 169.57 347 B -2 F --0.25 (, all rows are freed regardless of the value of) 195.97 347 P -1 F --0.25 (first) 410.36 347 P -2 F --0.25 (and) 432.45 347 P -1 F --0.25 (count) 452.52 347 P -2 F --0.25 (. Otherwise,) 479.19 347 P --0.14 (the number of rows specified by) 108 334 P -1 F --0.14 (count) 265.12 334 P -2 F --0.14 ( are freed, beginning with the row specified by) 291.79 334 P -1 F --0.14 (first) 517.8 334 P -2 F -(in the specified section.) 108 321 T -(T) 108 300 T -(o allocate o) 114.37 300 T -(v) 169.51 300 T -(erlays in a section, use) 175.33 300 T -1 F -(XkbAllocGeomOverlays) 286.64 300 T -2 F -(.) 402.61 300 T -2 11 Q -(Status) 108 279.67 T -3 F -(XkbAllocGeomOv) 137.65 279.67 T -(erlays) 224.31 279.67 T -2 F -(\050) 252.42 279.67 T -1 F -(section) 256.08 279.67 T -2 F -(,) 287.24 279.67 T -1 F -( num_needed) 289.99 279.67 T -2 F -(\051) 348.34 279.67 T -(XkbSectionPtr) 126 266.67 T -1 F -(section) 207 266.67 T -2 F -(;) 238.16 266.67 T -(/* section for which o) 270 266.67 T -(v) 365.77 266.67 T -(erlays should be allocated */) 371.1 266.67 T -(int) 126 253.67 T -1 F -(num_needed) 207 253.67 T -2 F -(;) 262.59 253.67 T -(/* number of ne) 270 253.67 T -(w o) 339.68 253.67 T -(v) 355.71 253.67 T -(erlays required */) 361.05 253.67 T -1 12 Q -(XkbAllocGeomRows) 108 234 T -2 F -( allocates) 206.65 234 T -1 F -(num_needed) 254.64 234 T -2 F -( overlays and adds them to the) 315.29 234 T -1 F -(section) 464.27 234 T -2 F -(. No ini-) 498.26 234 T -(tialization of the overlays is done.) 108 221 T -(T) 108 200 T -(o free ro) 114.37 200 T -(ws in an section, use) 154.72 200 T -1 F -(XkbFreeGeomOverlays) 256.7 200 T -2 F -(.) 370 200 T -2 11 Q -(v) 108 179.67 T -(oid) 113.28 179.67 T -3 F -(XkbFr) 130.09 179.67 T -(eeGeomOv) 161.67 179.67 T -(erlays) 213.49 179.67 T -2 F -(\050) 241.6 179.67 T -1 F -(section) 245.26 179.67 T -2 F -(,) 276.42 179.67 T -1 F -( \336r) 279.17 179.67 T -(st) 291.59 179.67 T -2 F -(,) 298.93 179.67 T -1 F -( count) 301.68 179.67 T -2 F -(,) 328.87 179.67 T -1 F -( fr) 331.62 179.67 T -(ee_all) 341.3 179.67 T -2 F -(\051) 368.18 179.67 T -(XkbSectionPtr) 126 166.67 T -1 F -(section) 207 166.67 T -2 F -(;) 238.16 166.67 T -(/* section in which o) 270 166.67 T -(v) 361.5 166.67 T -(erlays should be freed */) 366.83 166.67 T -(int) 126 153.67 T -1 F -(\336r) 207 153.67 T -(st) 216.67 153.67 T -2 F -(;) 224.01 153.67 T -(/* \336rst o) 270 153.67 T -(v) 306.51 153.67 T -(erlay to be freed. */) 311.84 153.67 T -(int) 126 140.67 T -1 F -(count) 207 140.67 T -2 F -(;) 231.44 140.67 T -(/* number of o) 270 140.67 T -(v) 334.91 140.67 T -(erlays to be freed */) 340.25 140.67 T -(Bool) 126 127.67 T -1 F -(fr) 207 127.67 T -(ee_all;) 213.93 127.67 T -2 F -(/*) 270 127.67 T -5 12 Q --0.6 (True) 281.31 127.67 S -2 11 Q -( => all o) 307.71 127.67 T -(v) 344.7 127.67 T -(erlays are freed */) 350.04 127.67 T -2 12 Q -(If) 108 108 T -1 F -(free_all) 118.99 108 T -2 F -( is) 156.32 108 T -5 F --0.6 (True) 170.33 108 S -2 F -(, all overlays are freed regardless of the value of) 196.73 108 T -1 F -(first) 430.98 108 T -2 F -(and) 453.32 108 T -1 F -(count) 473.65 108 T -2 F -(. Other-) 500.32 108 T -(wise, the number of overlays specified by) 108 95 T -1 F -(count) 311.29 95 T -2 F -( are freed, beginning with the overlay) 337.96 95 T -(specified by) 108 82 T -1 F -(first) 169.32 82 T -2 F -( in the specified section.) 188.66 82 T -FMENDPAGE -%%EndPage: "113" 125 -%%Page: "114" 126 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(114) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(13 K) 431.08 744.87 T -(e) 457.99 744.87 T -(yboard Geometry) 462.71 744.87 T -2 12 Q -(T) 108 712 T -(o allocate ro) 114.37 712 T -(ws in a o) 173.39 712 T -(v) 216.2 712 T -(erlay) 222.02 712 T -(, use) 245.23 712 T -1 F -(XkbAllocGeomOverlayRows) 270.23 712 T -2 F -(.) 407.53 712 T -2 11 Q -(Status) 108 691.67 T -3 F -(XkbAllocGeomOv) 137.65 691.67 T -(erlayRo) 224.31 691.67 T -(ws) 261.47 691.67 T -2 F -(\050) 273.69 691.67 T -1 F -(o) 277.36 691.67 T -(verlay) 282.75 691.67 T -2 F -(,) 309.52 691.67 T -1 F -( num_needed) 312.27 691.67 T -2 F -(\051) 370.61 691.67 T -(XkbSectionPtr) 126 678.67 T -1 F -(o) 207 678.67 T -(verlay) 212.39 678.67 T -2 F -(;) 239.88 678.67 T -(/* section for which ro) 270 678.67 T -(ws should be allocated */) 369.32 678.67 T -(int) 126 665.67 T -1 F -(num_needed) 207 665.67 T -2 F -(;) 262.59 665.67 T -(/* number of ne) 270 665.67 T -(w ro) 339.68 665.67 T -(ws required */) 359.27 665.67 T -1 12 Q --0.48 (XkbAllocGeomOverlayRows) 108 646 P -2 F --0.48 ( allocates) 245.3 646 P -1 F --0.48 (num_needed) 292.34 646 P -2 F --0.48 ( rows and adds them to the) 352.99 646 P -1 F --0.48 (overlay) 481.3 646 P -2 F --0.48 (. No) 517.29 646 P -(initialization of the rows is done.) 108 633 T -(T) 108 612 T -(o free ro) 114.37 612 T -(ws in an o) 154.72 612 T -(v) 203.53 612 T -(erlay) 209.35 612 T -(, use) 232.56 612 T -1 F -(XkbFreeGeomOverlayRows) 257.56 612 T -2 F -(.) 392.18 612 T -2 11 Q -(v) 108 591.67 T -(oid) 113.28 591.67 T -3 F -(XkbFr) 130.09 591.67 T -(eeGeomOv) 161.67 591.67 T -(erlayRo) 213.49 591.67 T -(ws) 250.65 591.67 T -2 F -(\050) 262.87 591.67 T -1 F -(o) 266.53 591.67 T -(verlay) 271.92 591.67 T -2 F -(,) 298.7 591.67 T -1 F -( \336r) 301.45 591.67 T -(st) 313.86 591.67 T -2 F -(,) 321.2 591.67 T -1 F -( count) 323.95 591.67 T -2 F -(,) 351.14 591.67 T -1 F -( fr) 353.89 591.67 T -(ee_all) 363.57 591.67 T -2 F -(\051) 390.46 591.67 T -(XkbSectionPtr) 126 578.67 T -1 F -(o) 207 578.67 T -(verlay) 212.39 578.67 T -2 F -(;) 239.88 578.67 T -(/* section in which ro) 270 578.67 T -(ws should be freed */) 365.05 578.67 T -(int) 126 565.67 T -1 F -(\336r) 207 565.67 T -(st) 216.67 565.67 T -2 F -(;) 224.01 565.67 T -(/* \336rst ro) 270 565.67 T -(w to be freed. */) 310.06 565.67 T -(int) 126 552.67 T -1 F -(count) 207 552.67 T -2 F -(;) 231.44 552.67 T -(/* number of ro) 270 552.67 T -(ws to be freed */) 338.46 552.67 T -(Bool) 126 539.67 T -1 F -(fr) 207 539.67 T -(ee_all;) 213.93 539.67 T -2 F -(/*) 270 539.67 T -5 12 Q --0.6 (True) 281.31 539.67 S -2 11 Q -( => all ro) 307.71 539.67 T -(ws are freed */) 348.26 539.67 T -2 12 Q --0.25 (If) 108 520 P -1 F --0.25 (free_all) 118.74 520 P -2 F --0.25 ( is) 156.07 520 P -5 F --0.56 -0.6 (True) 169.57 520 B -2 F --0.25 (, all rows are freed regardless of the value of) 195.97 520 P -1 F --0.25 (first) 410.36 520 P -2 F --0.25 (and) 432.45 520 P -1 F --0.25 (count) 452.52 520 P -2 F --0.25 (. Otherwise,) 479.19 520 P --0.14 (the number of rows specified by) 108 507 P -1 F --0.14 (count) 265.12 507 P -2 F --0.14 ( are freed, beginning with the row specified by) 291.79 507 P -1 F --0.14 (first) 517.8 507 P -2 F -(in the specified overlay.) 108 494 T -(T) 108 473 T -(o allocate k) 114.37 473 T -(e) 169.57 473 T -(ys in an o) 174.72 473 T -(v) 220.87 473 T -(erlay ro) 226.69 473 T -(w) 263.38 473 T -(, use) 271.26 473 T -1 F -(XkbAllocGeomOverlayKeys) 296.26 473 T -2 F -(.) 430.88 473 T -2 11 Q -(Status) 108 452.67 T -3 F -(XkbAllocGeomOv) 137.65 452.67 T -(erlayK) 224.31 452.67 T -(eys) 256.42 452.67 T -2 F -(\050) 271.09 452.67 T -1 F -(r) 274.75 452.67 T -(ow) 278.53 452.67 T -2 F -(,) 290.65 452.67 T -1 F -( num_needed) 293.4 452.67 T -2 F -(\051) 351.75 452.67 T -(XkbRo) 126 439.67 T -(wPtr) 157.5 439.67 T -1 F -(r) 207 439.67 T -(ow) 210.78 439.67 T -2 F -(;) 223.62 439.67 T -(/* section for which ro) 270 439.67 T -(ws should be allocated */) 369.32 439.67 T -(int) 126 426.67 T -1 F -(num_needed) 207 426.67 T -2 F -(;) 262.59 426.67 T -(/* number of ne) 270 426.67 T -(w ro) 339.68 426.67 T -(ws required */) 359.27 426.67 T -1 12 Q --0.05 (XkbAllocGeomOverlayKeys) 108 407 P -2 F --0.05 ( allocates) 242.63 407 P -1 F --0.05 (num_needed) 290.51 407 P -2 F --0.05 ( keys and adds them to the) 351.16 407 P -1 F --0.05 (row) 481.1 407 P -2 F --0.05 (. No ini-) 499.77 407 P -(tialization of the keys is done.) 108 394 T -(T) 108 373 T -(o free k) 114.37 373 T -(e) 150.9 373 T -(ys in an o) 156.05 373 T -(v) 202.2 373 T -(erlay ro) 208.02 373 T -(w) 244.7 373 T -(, use) 252.59 373 T -1 F -(XkbFreeGeomOverlayKeys) 277.58 373 T -2 F -(.) 409.54 373 T -2 11 Q -(v) 108 352.67 T -(oid) 113.28 352.67 T -3 F -(XkbFr) 130.09 352.67 T -(eeGeomOv) 161.67 352.67 T -(erlayK) 213.49 352.67 T -(eys) 245.6 352.67 T -2 F -(\050) 260.26 352.67 T -1 F -(r) 263.92 352.67 T -(ow) 267.71 352.67 T -2 F -(,) 279.83 352.67 T -1 F -( \336r) 282.58 352.67 T -(st) 295 352.67 T -2 F -(,) 302.34 352.67 T -1 F -( count) 305.09 352.67 T -2 F -(,) 332.28 352.67 T -1 F -( fr) 335.03 352.67 T -(ee_all) 344.71 352.67 T -2 F -(\051) 371.59 352.67 T -(XkbRo) 126 339.67 T -(wPtr) 157.5 339.67 T -1 F -(r) 207 339.67 T -(ow) 210.78 339.67 T -2 F -(;) 223.62 339.67 T -(/* ro) 270 339.67 T -(w in which k) 290.2 339.67 T -(e) 347.22 339.67 T -(ys should be freed */) 351.94 339.67 T -(int) 126 326.67 T -1 F -(\336r) 207 326.67 T -(st) 216.67 326.67 T -2 F -(;) 224.01 326.67 T -(/* \336rst k) 270 326.67 T -(e) 306.56 326.67 T -(y to be freed. */) 311.28 326.67 T -(int) 126 313.67 T -1 F -(count) 207 313.67 T -2 F -(;) 231.44 313.67 T -(/* number of k) 270 313.67 T -(e) 334.97 313.67 T -(ys to be freed */) 339.68 313.67 T -(Bool) 126 300.67 T -1 F -(fr) 207 300.67 T -(ee_all;) 213.93 300.67 T -2 F -(/*) 270 300.67 T -5 12 Q --0.6 (True) 281.31 300.67 S -2 11 Q -( => all k) 307.71 300.67 T -(e) 344.76 300.67 T -(ys are freed */) 349.48 300.67 T -2 12 Q --0.17 (If) 108 281 P -1 F --0.17 (free_all) 118.82 281 P -2 F --0.17 ( is) 156.15 281 P -5 F --0.38 -0.6 (True) 169.8 281 B -2 F --0.17 (, all keys are freed regardless of the value of) 196.2 281 P -1 F --0.17 (first) 410.04 281 P -2 F --0.17 (and) 432.21 281 P -1 F --0.17 (count) 452.37 281 P -2 F --0.17 (. Otherwise,) 479.03 281 P -(the number of keys specified by) 108 268 T -1 F -(count) 264.64 268 T -2 F -( are freed, beginning with the key specified by) 291.3 268 T -1 F -(first) 517.25 268 T -2 F -(in the specified row.) 108 255 T -(T) 108 234 T -(o allocate doodads that are global to a k) 114.37 234 T -(e) 304.88 234 T -(yboard geometry) 310.03 234 T -(, use) 390.9 234 T -1 F -(XkbAllocGeomDoodads) 415.9 234 T -2 F -(.) 531.88 234 T -2 11 Q -(Status) 108 213.67 T -3 F -(XkbAllocGeomDoodads) 137.65 213.67 T -2 F -(\050) 251.32 213.67 T -1 F -(g) 254.98 213.67 T -(eom) 260.37 213.67 T -2 F -(,) 278.7 213.67 T -1 F -( num_needed) 281.45 213.67 T -2 F -(\051) 339.79 213.67 T -(XkbGeometryPtr) 126 200.67 T -1 F -(g) 207 200.67 T -(eom) 212.39 200.67 T -2 F -(;) 230.72 200.67 T -(/* geometry for which doodads should be allocated */) 270 200.67 T -(int) 126 187.67 T -1 F -(num_needed) 207 187.67 T -2 F -(;) 262.59 187.67 T -(/* number of ne) 270 187.67 T -(w doodads required */) 339.68 187.67 T -1 12 Q -(XkbAllocGeomDoodads) 108 168 T -2 F -( allocates) 223.98 168 T -1 F -(num_needed) 271.97 168 T -2 F -( doodads and adds them to the specified) 332.62 168 T -(geometry) 108 155 T -1 F -(g) 156.32 155 T -(eom) 162.2 155 T -2 F -(. No initialization of the doodads is done.) 182.2 155 T -(T) 108 134 T -(o allocate doodads that are speci\336c to a section, use) 114.37 134 T -1 F -(XkbAllocGeomSectionDoodads) 364.66 134 T -2 F -(.) 515.96 134 T -2 11 Q -(Status) 108 113.67 T -3 F -(XkbAllocGeomSectionDoodads) 137.65 113.67 T -2 F -(\050) 285.54 113.67 T -1 F -(section) 289.2 113.67 T -2 F -(,) 320.37 113.67 T -1 F -( num_needed) 323.12 113.67 T -2 F -(\051) 381.46 113.67 T -(XkbSectionPtr) 126 100.67 T -1 F -(section) 207 100.67 T -2 F -(;) 238.16 100.67 T -(/* section for which doodads should be allocated */) 270 100.67 T -(int) 126 87.67 T -1 F -(num_needed) 207 87.67 T -2 F -(;) 262.59 87.67 T -(/* number of ne) 270 87.67 T -(w doodads required */) 339.68 87.67 T -FMENDPAGE -%%EndPage: "114" 126 -%%Page: "115" 127 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(115) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(13 K) 431.08 744.87 T -(e) 457.99 744.87 T -(yboard Geometry) 462.71 744.87 T -1 12 Q --0.18 (XkbAllocGeomSectionDoodads) 108 712 P -2 F --0.18 ( allocates) 259.31 712 P -1 F --0.18 (num_needed) 306.94 712 P -2 F --0.18 ( doodads and adds them to the spec-) 367.59 712 P -(ified) 108 699 T -1 F -(section) 133 699 T -2 F -(. No initialization of the doodads is done.) 166.99 699 T -(T) 108 678 T -(o free geometry doodads, use) 114.37 678 T -1 F -(XkbFreeGeomDoodads) 258.34 678 T -2 F -(.) 371.64 678 T -2 11 Q -(v) 108 657.67 T -(oid) 113.28 657.67 T -3 F -(XkbFr) 130.09 657.67 T -(eeGeomDoodads) 161.67 657.67 T -2 F -(\050) 240.49 657.67 T -1 F -(doodads) 244.16 657.67 T -2 F -(,) 281.44 657.67 T -1 F -( count) 284.19 657.67 T -2 F -(,) 311.38 657.67 T -1 F -( fr) 314.13 657.67 T -(ee_all) 323.81 657.67 T -2 F -(\051) 350.69 657.67 T -(XkbDoodadPtr) 126 644.67 T -1 F -(doodads) 207 644.67 T -2 F -(;) 244.28 644.67 T -(/* doodads to be freed */) 270 644.67 T -(int) 126 631.67 T -1 F -(count) 207 631.67 T -2 F -(;) 231.44 631.67 T -(/* number of doodads to be freed */) 270 631.67 T -(Bool) 126 618.67 T -1 F -(fr) 207 618.67 T -(ee_all;) 213.93 618.67 T -2 F -(/*) 270 618.67 T -5 12 Q --0.6 (True) 281.31 618.67 S -2 11 Q -( => all doodads are freed */) 307.71 618.67 T -2 12 Q -(If) 108 599 T -1 F -(fr) 118.99 599 T -(ee_all) 126.55 599 T -2 F -( is) 155.88 599 T -5 F --0.6 (True) 169.88 599 S -2 F -(, all doodads in the array are freed, regardless of the value of) 196.29 599 T -1 F -(count) 490.52 599 T -2 F -(.) 517.19 599 T -(Otherwise,) 108 586 T -1 F -(count) 163.32 586 T -2 F -( doodads are freed.) 189.98 586 T -(T) 108 565 T -(o allocate an entire geometry) 114.37 565 T -(, use) 252.89 565 T -1 F -(XkbAllocGeometry) 277.88 565 T -2 F -(.) 368.41 565 T -2 11 Q -(Status) 108 544.67 T -3 F -(XkbAllocGeometry) 137.65 544.67 T -2 F -(\050) 229.3 544.67 T -1 F -(xkb) 232.96 544.67 T -2 F -(,) 248.23 544.67 T -1 F -( sizes) 250.98 544.67 T -2 F -(\051) 274.51 544.67 T -(XkbDescPtr) 126 531.67 T -1 F -(xkb) 234 531.67 T -2 F -(;) 249.27 531.67 T --0.24 (/* k) 261 531.67 P --0.24 (e) 277.46 531.67 P --0.24 (yboard description for which geometry is to be allocated */) 282.18 531.67 P -(XkbGeometrySizesPtr) 126 518.67 T -1 F -(sizes) 234 518.67 T -2 F -(;) 254.78 518.67 T -(/* initial sizes for all geometry components */) 261 518.67 T -1 12 Q --0.05 (XkbAllocGeometry) 108 499 P -2 F --0.05 ( allocates a keyboard geometry and adds it to the keyboard description) 199.31 499 P --0.46 (specified by) 108 486 P -1 F --0.46 (xkb.) 168.41 486 P -2 F --0.46 (The keyboard description should be obtained via the) 190.61 486 P -1 F --0.46 (XkbGetKeyboard) 441.6 486 P -2 F --0.46 ( or) 524.91 486 P -1 F -(XkbAllockeyboard) 108 473 T -2 F -( functions. The) 196.64 473 T -1 F -(sizes) 271.97 473 T -2 F -( parameter specifies the number of elements to be) 294.64 473 T --0.26 (reserved for the subcomponents of the keyboard geometry and can be zero or more. These) 108 460 P -(subcomponents include the) 108 447 T -1 F -(properties, colors, shapes, sections, and doodads) 241.66 447 T -2 F -(.) 477.98 447 T -(T) 108 426 T -(o free an entire geometry) 114.37 426 T -(, use) 234.22 426 T -1 F -(XkbFreeGeometry) 259.21 426 T -2 F -(.) 347.06 426 T -2 11 Q -(v) 108 405.67 T -(oid) 113.28 405.67 T -3 F -(XkbFr) 130.09 405.67 T -(eeGeometry) 161.67 405.67 T -2 F -(\050) 218.47 405.67 T -1 F -(g) 222.14 405.67 T -(eom) 227.53 405.67 T -2 F -(,) 245.85 405.67 T -1 F -( whic) 248.6 405.67 T -(h) 271.97 405.67 T -2 F -(,) 277.47 405.67 T -1 F -( fr) 280.22 405.67 T -(ee_all) 289.9 405.67 T -2 F -(\051) 316.78 405.67 T -(XkbGeometryPtr) 126 392.67 T -1 F -(g) 207 392.67 T -(eom) 212.39 392.67 T -2 F -(;) 230.72 392.67 T -(/* geometry to be freed */) 270 392.67 T -(unsigned int) 126 379.67 T -1 F -(whic) 207 379.67 T -(h) 227.61 379.67 T -2 F -(;) 233.11 379.67 T -(/* mask of geometry components to be freed */) 270 379.67 T -(Bool) 126 366.67 T -1 F -(fr) 207 366.67 T -(ee_all;) 213.93 366.67 T -2 F -(/*) 270 366.67 T -5 12 Q --0.6 (True) 281.31 366.67 S -2 11 Q -( => the entire geometry is freed. */) 307.71 366.67 T -2 12 Q -(The values of) 108 347 T -1 F -(which) 176.32 347 T -2 F -( and) 204.98 347 T -1 F -(free_all) 228.31 347 T -2 F -(determine how much of the specified geometry is freed.) 268.64 347 T -(The valid values for) 108 334 T -1 F -(which) 207.31 334 T -2 F -( are:) 235.98 334 T -2 11 Q -(#de\336ne) 126 313.67 T -(XkbGeomPropertiesMask) 171 313.67 T -(\0501<<0\051) 306 313.67 T -(#de\336ne) 126 300.67 T -(XkbGeomColorsMask) 171 300.67 T -(\0501<<1\051) 306 300.67 T -(#de\336ne) 126 287.67 T -(XkbGeomShapesMask) 171 287.67 T -(\0501<<2\051) 306 287.67 T -(#de\336ne) 126 274.67 T -(XkbGeomSectionsMask) 171 274.67 T -(\0501<<3\051) 306 274.67 T -(#de\336ne) 126 261.67 T -(XkbGeomDoodadsMask) 171 261.67 T -(\0501<<4\051) 306 261.67 T -(#de\336ne) 126 248.67 T -(XkbGeomAllMask) 171 248.67 T -(\0500x1f\051) 306 248.67 T -2 12 Q -(If) 108 229 T -1 F -(free_all) 118.99 229 T -2 F -( is) 156.32 229 T -5 F --0.6 (True) 170.33 229 S -2 F -(, the entire geometry is freed regardless of the value of) 196.73 229 T -1 F -(which) 461.99 229 T -2 F -(. Other-) 490.66 229 T -(wise, the portions of the geometry specified by) 108 216 T -1 F -(which) 336.3 216 T -2 F -( are freed.) 364.97 216 T -FMENDPAGE -%%EndPage: "115" 127 -%%Page: "116" 128 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(116) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(14 Xkb K) 413.65 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -0 14 Q -(14) 72 710.67 T -(Xkb K) 108 710.67 T -(e) 147.47 710.67 T -(yboar) 155.04 710.67 T -(d Mapping) 192.88 710.67 T -2 12 Q -(The Xkb keyboard mapping contains all the information the server and clients need to) 108 688 T -(interpret key events. This chapter provides an overview of the terminology used to) 108 675 T -(describe an Xkb keyboard mapping and introduces common utilities for manipulating the) 108 662 T -(keyboard mapping.) 108 649 T -(The mapping consists of two components, a server map and a client map. The) 108 628 T -1 F -(client) 484.61 628 T -2 F -( map) 511.27 628 T --0.18 (is the collection of information a client needs to interpret key events from the keyboard. It) 108 615 P -(contains a global list of key types and an array of key symbol maps, each of which) 108 602 T -(describes the symbols bound to a key and the rules to be used to interpret those symbols.) 108 589 T -(The) 108 576 T -1 F -(server) 129.66 576 T -2 F -( map contains the information the server needs to interpret key events. This) 159.65 576 T --0.28 (includes actions and behaviors for each key, explicit components for a key, and the virtual) 108 563 P -(modifiers and the per-key virtual modifier mapping.) 108 550 T -(For detailed information on particular components of the keyboard map, refer to Chapter) 108 529 T -(15, \322Xkb Client Keyboard Mapping\323 and Chapter 16, \322Xkb Server Keyboard Mapping.\323) 108 516 T -0 F -(14.1) 72 491 T -(Notation and T) 108 491 T -(erminology) 191.28 491 T -2 F --0.01 (The graphic characters or control functions that may be accessed by one key are logically) 108 471 P -(arranged in groups and levels, where) 108 458 T -1 F -(gr) 287.62 458 T -(oup) 297.74 458 T -2 F -( and) 315.74 458 T -1 F -(le) 339.07 458 T -(vel) 347.56 458 T -2 F -( are defined as in the ISO9995 stan-) 361.55 458 T -(dard:) 108 445 T -2 11 Q -(Group:) 126 424.67 T -(A logical state of a k) 198 424.67 T -(e) 289.23 424.67 T -(yboard pro) 293.95 424.67 T -(viding access to a collection of graphic char-) 341.75 424.67 T --0.07 (acters. Usually these graphic characters logically belong together and may be) 198 411.67 P -(arranged on se) 198 398.67 T -(v) 261.87 398.67 T -(eral le) 267.2 398.67 T -(v) 294.11 398.67 T -(els within a group.) 299.44 398.67 T -(Le) 126 372.67 T -(v) 137.33 372.67 T -(el:) 142.66 372.67 T -(One of se) 198 372.67 T -(v) 239.88 372.67 T -(eral states \050normally 2 or 3\051 go) 245.21 372.67 T -(v) 380.69 372.67 T -(erning which graphic character is) 386.02 372.67 T -(produced when a graphic k) 198 359.67 T -(e) 317.02 359.67 T -(y is actuated. In certain cases the le) 321.74 359.67 T -(v) 476.64 359.67 T -(el may also) 481.98 359.67 T -(af) 198 346.67 T -(fect function k) 206.27 346.67 T -(e) 270.31 346.67 T -(ys.) 275.03 346.67 T -2 12 Q --0.44 (These definitions, taken from the ISO standard, refer to graphic keys and characters. In the) 108 327 P -(context of Xkb, Group and Level are not constrained to graphic keys and characters; they) 108 314 T -(may be used with any key to access any character the key is capable of generating.) 108 301 T -(Level is often referred to as \322Shift Level\323. Levels are numbered sequentially starting at) 108 280 T -(one.) 108 267 T -0 F -(Note) 126 246.67 T -2 11 Q -(Shift le) 162 246.67 T -(v) 193.81 246.67 T -(el is deri) 199.15 246.67 T -(v) 236.76 246.67 T -(ed from the modi\336er state, b) 242.09 246.67 T -(ut not necessarily in the same w) 366.52 246.67 T -(ay for) 506.95 246.67 T -(all k) 162 234.67 T -(e) 181.14 234.67 T -(ys. F) 185.86 234.67 T -(or e) 207.09 234.67 T -(xample, the) 223.72 234.67 T -5 12 Q --0.6 (Shift) 277.8 234.67 S -2 11 Q -( modi\336er selects shift le) 310.8 234.67 T -(v) 415.63 234.67 T -(el 2 on most k) 420.96 234.67 T -(e) 483.19 234.67 T -(ys, b) 487.91 234.67 T -(ut for) 508.47 234.67 T -(k) 162 222.67 T -(e) 167.39 222.67 T -(ypad k) 172.11 222.67 T -(e) 201.63 222.67 T -(ys the modi\336er bound to) 206.35 222.67 T -4 F -(Num_Loc) 316.66 222.67 T -(k) 363.51 222.67 T -2 F -( \050that is, the) 369.01 222.67 T -5 12 Q --0.6 (NumLock) 423.7 222.67 S -2 11 Q -( virtual modi-) 469.9 222.67 T -(\336er\051 also selects shift le) 162 210.67 T -(v) 265.6 210.67 T -(el 2.) 270.93 210.67 T -FMENDPAGE -%%EndPage: "116" 128 -%%Page: "117" 129 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(117) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(14 Xkb K) 413.65 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -2 12 Q -(For example, consider the following key \050the gray characters indicate symbols that are) 108 712 T -(implied or expected but are not actually engraved on the key\051:) 108 699 T -3 F -(Figur) 220.57 577 T -(e 14.1 Shift Le) 249.02 577 T -(v) 322.17 577 T -(els and Gr) 328.05 577 T -(oups) 381.17 577 T -2 F -(This key has two groups, indicated by the columns, and each group has two shift levels.) 108 549 T --0.22 (For the first group \050Group1\051, the symbol shift level one is) 108 536 P -0 F --0.25 (a) 384.88 536 P -2 F --0.22 (, and the symbol for shift level) 391.56 536 P -(two is) 108 523 T -0 F -(A) 140 523 T -2 F -(. For the second group, the symbol for shift level one is) 148.67 523 T -0 11 Q -(\276) 417.31 523 T -2 12 Q -(, and the symbol for) 427.09 523 T -(shift level two is) 108 510 T -0 11 Q -(\256) 190.67 510 T -2 12 Q -(.) 201.67 510 T -0 F -(14.1.1) 72 485 T -(Core Implementation) 108 485 T -2 F -(The standard interpretation rules for the core X keymap only allow clients to access keys) 108 465 T -(such as the one shown in Figure 14.1. That is, clients using the standard interpretation) 108 452 T --0.34 (rules can only access one of four keysyms for any given) 108 439 P -5 F --0.74 -0.6 (KeyPress) 376.57 439 B -2 F --0.34 ( event \321 two different) 429.37 439 P -(symbols in two different groups.) 108 426 T -(In general, the) 108 405 T -5 F --0.6 (Shift) 179.98 405 S -2 F -( modifier, the) 212.98 405 T -5 F --0.6 (Lock) 280.97 405 S -2 F -( modifier, and the modifier bound to the) 307.37 405 T -4 11 Q -(Num_Loc) 108 392 T -(k) 154.85 392 T -2 12 Q -( key are used to change between shift level 1 and shift level 2. To switch) 160.35 392 T -(between groups, the core implementation uses the modifier bound to the) 108 379 T -4 11 Q -(Mode_s) 457.96 379 T -(witch) 496.75 379 T -2 12 Q --0.13 (key. When the) 108 366 P -5 F --0.28 -0.6 (Mode_switch) 180.27 366 B -2 F --0.13 ( modifier is set, the keyboard is logically in Group 2. When) 252.87 366 P -(the) 108 353 T -5 F --0.6 (Mode_switch) 125.66 353 S -2 F -( modifier is not set, the keyboard is logically in Group 1.) 198.27 353 T -(The core implementation does not clearly specify the behavior of keys. For example, the) 108 332 T -(locking behavior of the) 108 319 T -4 11 Q -(CapsLoc) 222.65 319 T -(k) 265.83 319 T -2 12 Q -( and) 271.33 319 T -4 11 Q -(Num_Loc) 294.66 319 T -(k) 341.51 319 T -2 12 Q -( keys depends on the vendor.) 347.01 319 T -0 F -(14.1.2) 72 294 T -(Xkb Implementation) 108 294 T -2 F -(Xkb extends the core implementation by providing access to up to four keyboard groups) 108 274 T --0.24 (with up to 63 shift levels per key) 108 261 P -2 9.6 Q --0.19 (1) 263.96 265.8 P -2 12 Q --0.24 (. In addition, Xkb provides precise specifications regard-) 268.76 261 P -(ing the behavior of keys. In Xkb, modifier state and the current group are independent) 108 248 T -(\050with the exception of compatibility mapping, discussed in Chapter 17\051.) 108 235 T --0.15 (Xkb handles switching between groups via key actions, independent of any modifier state) 108 214 P -(information. Key actions are in the server map component and are described in detail in) 108 201 T -(section 16.1.4.) 108 188 T --0.07 (Xkb handles shift levels by associating a key type with each group on each key. Each key) 108 167 P -(type defines the shift levels available for the groups on keys of its type and specifies the) 108 154 T -(modifier combinations necessary to access each level.) 108 141 T -72 90 540 110 C -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 98 204 98 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -0 0 612 792 C -2 10 Q -0 X -0 0 0 1 0 0 0 K --0.29 (1. The core implementation restricts the number of symbols per k) 72 83.33 P --0.29 (e) 333.15 83.33 P --0.29 (y to 255. W) 337.44 83.33 P --0.29 (ith four groups, this allo) 383.4 83.33 P --0.29 (ws for up to 63) 478.39 83.33 P -(symbols \050or shift le) 72 71.33 T -(v) 149.25 71.33 T -(els\051 per group. Most k) 154.1 71.33 T -(e) 242.6 71.33 T -(ys will only ha) 246.89 71.33 T -(v) 305.86 71.33 T -(e a fe) 310.71 71.33 T -(w shift le) 332.11 71.33 T -(v) 369.08 71.33 T -(els.) 373.93 71.33 T -72 63 540 720 C -117 598 540 695 C -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 12 Q -0 X -0 0 0 1 0 0 0 K -(A) 152.02 668.2 T -1 0 0 0 0 1 1 K -1 0 0 0 0 1 1 K -(\276) 165.21 652.54 T -(a) 153.02 652.54 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(\256) 164.54 668.2 T -146.04 645.43 182.04 681.43 4.5 RR -0.5 H -0 Z -N -141.54 631.54 186.54 685.54 4.5 RR -N -0 0 0 0 1 1 1 K -7 X -0 0 0 0 1 1 1 K -(@) 164.69 635.5 T -(q) 152.69 635.5 T -0 0 0 1 0 0 0 K -4 10 Q -0 X -0 0 0 1 0 0 0 K -(Group) 143.83 622.54 T -6 F -(\256) 174.4 622.54 T -4 F -(Shift Le) 0 -270 139.24 631.54 TF -(v) 0 -270 139.24 665.15 TF -(el) 0 -270 139.24 669.9 TF -6 F -(\256) 0 -270 139.24 677.67 TF -4 F -(G1L1 =) 224.45 669.58 T -0 11 Q -( a) 257.53 669.58 T -4 10 Q -(G1L2 =) 224.45 656.99 T -0 11 Q -(A) 260.31 656.99 T -4 10 Q -(G2L1 =) 224.45 644.4 T -0 11 Q -( \276) 257.53 644.4 T -4 10 Q -(G2L2 =) 224.45 631.81 T -0 11 Q -( \256) 257.53 631.81 T -432.23 649 450.23 667 R -7 X -V -0 X -N -(a) 438.18 653.99 T -432.23 631 450.23 649 R -7 X -V -0 X -N -(\276) 436.35 635.99 T -450.23 649 468.23 667 R -7 X -V -0 X -N -(A) 455.26 653.99 T -450.23 631 468.23 649 R -7 X -V -0 X -N -(\256) 453.74 635.99 T -4 10 Q -(L1) 435.67 669.3 T -(L2) 453.67 669.3 T -(G1) 419.45 654.65 T -(G2) 419.45 636.65 T -303.87 645.95 321.87 663.95 R -7 X -V -0 X -N -0 11 Q -(a) 309.82 650.94 T -339.87 645.95 357.87 663.95 R -7 X -V -0 X -N -(\276) 343.99 650.94 T -321.87 645.95 339.87 663.95 R -7 X -V -0 X -N -(A) 326.91 650.94 T -357.87 645.95 375.87 663.95 R -7 X -V -0 X -N -(\256) 361.38 650.94 T -4 10 Q -(L1) 307.32 666.05 T -(L2) 325.32 666.05 T -(G1) 315.2 636.35 T -(G2) 351.2 636.35 T -(L1) 343.32 666.05 T -(L2) 361.32 666.05 T -3 11 Q -(Ph) 129.09 611.25 T -(ysical K) 141.77 611.25 T -(ey) 179.08 611.25 T -(Symbols) 226.91 611.25 T -(Xkb Symbols) 412.55 611.25 T -(Cor) 307.17 611.25 T -(e Symbols) 325.29 611.25 T -72 63 540 720 C -0 0 612 792 C -FMENDPAGE -%%EndPage: "117" 129 -%%Page: "118" 130 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(118) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(14 Xkb K) 413.65 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -2 12 Q --0.44 (For example, Xkb allows key types where the) 108 712 P -5 F --0.98 -0.6 (Control) 327.4 712 B -2 F --0.44 ( modifier can be used to access the) 373.6 712 P -(shift level two of a key. Key types are in the client map component and are described in) 108 699 T -(detail in section 15.2.) 108 686 T -(Xkb provides precise specification of the behavior of a key using key behaviors. Key) 108 665 T -(behaviors are in the server map component and are described in detail in section 16.2.) 108 652 T -0 F -(14.2) 72 627 T -(Getting Map Components fr) 108 627 T -(om the Ser) 265.76 627 T -(ver) 327.9 627 T -2 F --0.05 (Xkb provides two functions to obtain the keyboard mapping components from the server.) 108 607 P -(The first function,) 108 594 T -1 F -(XkbGetMap) 197.99 594 T -2 F -(, allocates an) 255.97 594 T -5 F --0.6 (XkbDescRec) 321.29 594 S -2 F -( structure, retrieves mapping) 387.29 594 T -(components from the server, and stores them in the) 108 581 T -5 F --0.6 (XkbDescRec) 356.63 581 S -2 F -( structure it just allo-) 422.63 581 T --0.29 (cated. The second function,) 108 568 P -1 F --0.29 (XkbGetUpdatedMap) 242.13 568 P -2 F --0.29 (, retrieves mapping components from the) 341.45 568 P -(server and stores them in an) 108 555 T -5 F --0.6 (XkbDescRec) 245.3 555 S -2 F -( structure that has previously been allocated.) 311.3 555 T -(To allocate an) 108 534 T -5 F --0.6 (XkbDescRec) 178.98 534 S -2 F -( structure and populate it with the server\325s keyboard client) 244.98 534 T --0.11 (map and server map, use) 108 521 P -1 F --0.11 (XkbGetMap. XkbGetMap) 229.41 521 P -2 F --0.11 (is similar to) 354.15 521 P -1 F --0.11 (XkbGetK) 413.49 521 P --0.11 (e) 457.06 521 P --0.11 (yboar) 462.03 521 P --0.11 (d) 489.58 521 P -2 F --0.11 ( \050see sec-) 495.58 521 P -(tion 6.2\051, but is used only for obtaining the address of an) 108 508 T -5 F --0.6 (XkbDescRec) 382.64 508 S -2 F -( structure that is) 448.64 508 T -(populated with keyboard mapping components. It allows finer control over which sub-) 108 495 T -(structures of the keyboard mapping components are to be populated.) 108 482 T -1 F -(XkbGetK) 439.61 482 T -(e) 483.18 482 T -(yboar) 488.15 482 T -(d) 515.7 482 T -2 F -(always returns fully populated components, while) 108 469 T -1 F -(XkbGetMap) 350.3 469 T -2 F -( can be instructed to return) 408.29 469 T -(a partially populated component.) 108 456 T -2 11 Q -(XkbDescPtr) 108 435.67 T -3 F -(XkbGetMap) 164.52 435.67 T -2 F -(\050) 223.8 435.67 T -1 F -(display) 227.46 435.67 T -(, whic) 258.63 435.67 T -(h, de) 284.75 435.67 T -(vice_spec) 305.97 435.67 T -2 F -(\051) 348.72 435.67 T -(Display *) 126 422.67 T -1 F -(display) 234 422.67 T -2 F -(;) 265.78 422.67 T -(/* connection to X serv) 306 422.67 T -(er */) 408.49 422.67 T -(unsigned int) 126 409.67 T -1 F -(whic) 234 409.67 T -(h) 254.61 409.67 T -2 F -(;) 260.11 409.67 T -(/* mask selecting subcomponents to populate */) 306 409.67 T -(unsigned int) 126 396.67 T -1 F -(de) 234 396.67 T -(vice_spec) 244.22 396.67 T -2 F -(;) 286.98 396.67 T -(/* de) 306 396.67 T -(vice_id, or) 327.42 396.67 T -5 F --0.55 (XkbUseCoreKbd) 377.21 396.67 S -2 F -( */) 455.87 396.67 T -2 12 Q --0.02 (The) 108 377 P -1 F --0.02 (which) 129.64 377 P -2 F --0.02 ( mask is a bitwise inclusive OR of the masks defined in Table 14.1. Only those) 158.31 377 P -(portions of the keyboard server map and the keyboard client maps that are specified in) 108 364 T -1 F -(whic) 108 351 T -(h) 130.49 351 T -2 F -( are allocated and populated.) 136.49 351 T --0.4 (In addition to allocating and obtaining the server map and the client map,) 108 330 P -1 F --0.4 (XkbGetMap) 457.48 330 P -2 F --0.4 ( also) 515.46 330 P --0.26 (sets the) 108 317 P -1 F --0.26 (de) 146.14 317 P --0.26 (vice_spec) 157.29 317 P -2 F --0.26 (, the) 203.93 317 P -1 F --0.26 (min_k) 227.08 317 P --0.26 (e) 256.29 317 P --0.26 (y_code) 261.25 317 P --0.26 (,) 295.24 317 P -2 F --0.26 (and) 300.98 317 P -1 F --0.26 (max_key_code) 321.04 317 P -2 F --0.26 ( fields of the keyboard descrip-) 391.68 317 P -(tion.) 108 304 T -1 F -(XkbGetMap) 108 283 T -2 F -( is synchronous; it queries the server for the desired information, waits for a) 165.98 283 T -(reply, and then returns. If successful) 108 270 T -1 F -(, XkbGetMap) 282.29 270 T -2 F -( returns a pointer to the) 346.27 270 T -5 F --0.6 (XkbDescRec) 460.92 270 S -2 F -(structure it allocated. If unsuccessful,) 108 257 T -1 F -(XkbGetMap) 290.29 257 T -2 F -( returns) 348.28 257 T -5 F --0.6 (NULL) 387.6 257 S -2 F -(. When unsuccessful, one) 414 257 T -(of the following protocol errors is also generated:) 108 244 T -5 F --0.6 (BadAlloc) 348.62 244 S -2 F -( \050unable to allocate the) 401.42 244 T -5 F --0.29 -0.6 (XkbDescRec) 108 231 B -2 F --0.13 ( structure\051,) 174 231 P -5 F --0.29 -0.6 (BadValue) 228.72 231 B -2 F --0.13 ( \050some mask bits in) 281.52 231 P -1 F --0.13 (whic) 377.2 231 P --0.13 (h) 399.69 231 P -2 F --0.13 ( are undefined\051) 405.69 231 P -5 F --0.29 -0.6 (,) 478.07 231 B -2 F --0.13 ( or) 484.67 231 P -5 F --0.29 -0.6 (BadIm-) 500.4 231 B --0.86 -0.6 (plementation) 108 218 B -2 F --0.39 ( \050a compatible version of the Xkb extension is not available in the server\051.) 187.2 218 P -(To free the returned data, use) 108 205 T -1 F -(XkbF) 251.62 205 T -(r) 276.95 205 T -(eeClientMap) 281.17 205 T -2 F -(.) 343.16 205 T -(Xkb also provides convenience functions to get partial component definitions from the) 108 184 T --0.5 (server. These functions are specified in the \322convenience functions\323 column in Table 14.1.) 108 171 P -(Refer to the sections listed in the table for more information on these functions.) 108 158 T -3 F -(T) 144.37 138 T -(able 14.1 Xkb Mapping Component Masks and Con) 151.27 138 T -(v) 419.83 138 T -(enience Functions) 425.71 138 T -1 F -(Mask) 86.55 118 T -(V) 245 118 T -(alue) 251 118 T -(Map) 279.65 118 T -(F) 314.6 118 T -(ields) 321.39 118 T -(Con) 379.85 118 T -(venience Functions) 399.38 118 T -(Section) 524.9 118 T -5 11 Q --0.33 (XkbKeyTypesMask) 86.55 102.67 S -2 F -(\0501<<0\051) 245 102.67 T -(client) 279.65 102.67 T -(types) 314.6 102.67 T -(size_types) 314.6 91.67 T -(num_types) 314.6 80.67 T -(XkbGetK) 379.85 102.67 T -(e) 422.35 102.67 T -(yT) 427.07 102.67 T -(ypes) 438.41 102.67 T -(XkbResizeK) 379.85 91.67 T -(e) 435.79 91.67 T -(yT) 440.51 91.67 T -(ype) 451.85 91.67 T -(XkbCop) 379.85 80.67 T -(yK) 417.02 80.67 T -(e) 430.19 80.67 T -(yT) 434.91 80.67 T -(ype) 446.25 80.67 T -(XkbCop) 379.85 69.67 T -(yK) 417.02 69.67 T -(e) 430.19 69.67 T -(yT) 434.91 69.67 T -(ypes) 446.25 69.67 T -(15.2) 524.9 102.67 T -85.55 130 562.45 130 2 L -V -0.5 H -0 Z -N -85.55 112 562.45 112 2 L -V -N -FMENDPAGE -%%EndPage: "118" 130 -%%Page: "119" 131 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(119) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(14 Xkb K) 413.65 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -2 12 Q -(Xkb defines combinations of these masks for convenience:) 108 495 T -2 11 Q -(#de\336ne XkbResizableInfoMask) 126 469.67 T -(\050XkbK) 306 469.67 T -(e) 336.27 469.67 T -(yT) 340.99 469.67 T -(ypesMask\051) 352.33 469.67 T -(#de\336ne) 126 456.67 T -(XkbAllClientInfoMask) 162 456.67 T -(\050XkbK) 306 456.67 T -(e) 336.27 456.67 T -(yT) 340.99 456.67 T -(ypesMask | XkbK) 352.33 456.67 T -(e) 431.25 456.67 T -(ySymsMask |) 435.96 456.67 T -(XkbModi\336erMapMask\051) 306 443.67 T -(#de\336ne) 126 430.67 T -(XkbAllServ) 162 430.67 T -(erInfoMask) 215 430.67 T -(\050XkbExplicitComponentsMask |) 306 430.67 T -( XkbK) 306 417.67 T -(e) 335.36 417.67 T -(yActionsMask| XkbK) 340.08 417.67 T -(e) 435.8 417.67 T -(yBeha) 440.52 417.67 T -(viorsMask |) 468.4 417.67 T -(XkbV) 306 404.67 T -(irtualModsMask | XkbV) 332.22 404.67 T -(irtualModMapMask\051) 438.87 404.67 T -(#de\336ne) 126 391.67 T -(XkbAllMapComponentsMask) 162 391.67 T -(\050XkbAllClientInfoMask|XkbAllServ) 306 391.67 T -(erInfoMask\051) 467.52 391.67 T -2 12 Q -(Key types, symbol maps, and actions are all interrelated: changes in one require changes) 108 371 T -(in the others. The convenience functions make it easier to edit these components and han-) 108 358 T -(dle the interdependencies.) 108 345 T -(T) 108 324 T -(o update the client or serv) 114.37 324 T -(er map information in an e) 238.5 324 T -(xisting k) 365.96 324 T -(e) 407.52 324 T -(yboard description, use) 412.67 324 T -1 F -(XkbGetUpdatedMap) 108 311 T -2 F -(.) 207.31 311 T -2 11 Q -(Status) 108 290.67 T -3 F -(XkbGetUpdatedMap) 137.65 290.67 T -2 F -(\050) 237.26 290.67 T -1 F -(display) 240.92 290.67 T -(, whic) 272.1 290.67 T -(h, xkb) 298.21 290.67 T -2 F -(\051) 324.48 290.67 T -(Display *) 126 277.67 T -1 F -(display) 234 277.67 T -2 F -(;) 265.78 277.67 T -(/* connection to X serv) 306 277.67 T -(er */) 408.49 277.67 T -(unsigned int) 126 264.67 T -1 F -(whic) 234 264.67 T -(h) 254.61 264.67 T -2 F -(;) 260.11 264.67 T -(/* mask selecting subcomponents to populate */) 306 264.67 T -(XkbDescPtr) 126 251.67 T -1 F -(xkb) 234 251.67 T -2 F -(;) 249.27 251.67 T -(/* k) 306 251.67 T -(e) 322.7 251.67 T -(yboard description to be updated */) 327.42 251.67 T -2 12 Q -(The) 108 232 T -1 F -(which) 129.66 232 T -2 F -( parameter is a bitwise inclusive OR of the masks in Table 14.1. If the needed) 158.33 232 T -(components of the) 108 219 T -1 F -(xkb) 199.66 219 T -2 F -( structure are not already allocated,) 216.31 219 T -1 F -(XkbGetUpdatedMap) 387.92 219 T -2 F -( allocates) 487.24 219 T -(them.) 108 206 T -1 F -(XkbGetUpdatedMap) 138 206 T -2 F -( fetches the requested information for the device specified in) 237.31 206 T -(the) 108 193 T -5 F --0.6 (XkbDescRec) 125.66 193 S -2 F -( passed in the) 191.66 193 T -1 F -(xkb) 259.66 193 T -2 F -( parameter.) 276.31 193 T -1 F -(XkbGetUpdatedMap) 108 172 T -2 F -( is synchronous; it queries the server for the desired information,) 207.31 172 T --0.29 (waits for a reply, and then returns. If successful) 108 159 P -1 F --0.29 (, XkbGetUpdatedMap) 333.62 159 P -2 F --0.29 ( returns) 438.64 159 P -5 F --0.64 -0.6 (Success) 477.39 159 B -2 F --0.29 (. If) 523.59 159 P -(unsuccessful,) 108 146 T -1 F -(XkbGetUpdatedMap) 175.32 146 T -2 F -( returns one of the following:) 274.63 146 T -5 F --0.6 (BadAlloc) 417.95 146 S -2 F -( \050unable to) 470.75 146 T --0.35 (allocate a component in the) 108 133 P -5 F --0.78 -0.6 (XkbDescRec) 241.21 133 B -2 F --0.35 ( structure\051,) 307.21 133 P -5 F --0.78 -0.6 (BadValue) 361.49 133 B -2 F --0.35 ( \050some mask bits in) 414.29 133 P -1 F --0.35 (whic) 508.86 133 P --0.35 (h) 531.35 133 P -2 F -(are undefined\051,) 108 120 T -5 F --0.6 (BadImplementation) 183.64 120 S -2 F -( \050a compatible version of the Xkb extension is not) 295.84 120 T -(available in the server or the reply from the server was invalid\051.) 108 107 T -5 11 Q --0.33 (XkbKeySymsMask) 86.55 676.67 S -2 F -(\0501<<1\051) 245 676.67 T -(client) 279.65 676.67 T -(syms) 314.6 676.67 T -(size_syms) 314.6 665.67 T -(num_syms) 314.6 654.67 T -(k) 314.6 643.67 T -(e) 319.99 643.67 T -(y_sym_map) 324.71 643.67 T -(XkbGetK) 379.85 676.67 T -(e) 422.35 676.67 T -(ySyms) 427.07 676.67 T -(XkbResizeK) 379.85 665.67 T -(e) 435.79 665.67 T -(ySyms) 440.51 665.67 T -(XkbChangeT) 379.85 654.67 T -(ypesOfK) 438.24 654.67 T -(e) 477.68 654.67 T -(y) 482.39 654.67 T -(15.3) 524.9 676.67 T -5 F --0.33 (XkbModifierMapMask) 86.55 628.67 S -2 F -(\0501<<2\051) 245 628.67 T -(client) 279.65 628.67 T -(modmap) 314.6 628.67 T -(XkbGetK) 379.85 628.67 T -(e) 422.35 628.67 T -(yModi\336erMap) 427.07 628.67 T -(15.4) 524.9 628.67 T -5 F --0.33 (XkbExplicitComponentsMask) 86.55 613.67 S -2 F -(\0501<<3\051) 245 613.67 T -(serv) 279.65 613.67 T -(er) 297.81 613.67 T -(e) 314.6 613.67 T -(xplicit) 319.32 613.67 T -(XkbGetK) 379.85 613.67 T -(e) 422.35 613.67 T -(yExplicitComponents) 427.07 613.67 T -(16.3) 524.9 613.67 T -5 F --0.33 (XkbKeyActionsMask) 86.55 598.67 S -2 F -(\0501<<4\051) 245 598.67 T -(serv) 279.65 598.67 T -(er) 297.81 598.67 T -(k) 314.6 598.67 T -(e) 319.99 598.67 T -(y_acts) 324.71 598.67 T -(acts) 314.6 587.67 T -(num_acts) 314.6 576.67 T -(size_acts) 314.6 565.67 T -(XkbGetK) 379.85 598.67 T -(e) 422.35 598.67 T -(yActions) 427.07 598.67 T -(XkbResizeK) 379.85 587.67 T -(e) 435.79 587.67 T -(yActions) 440.51 587.67 T -(16.1) 524.9 598.67 T -5 F --0.33 (XkbKeyBehaviorsMask) 86.55 550.67 S -2 F -(\0501<<5\051) 245 550.67 T -(serv) 279.65 550.67 T -(er) 297.81 550.67 T -(beha) 314.6 550.67 T -(viors) 335.15 550.67 T -(XkbGetK) 379.85 550.67 T -(e) 422.35 550.67 T -(yBeha) 427.07 550.67 T -(viors) 454.95 550.67 T -(16.2) 524.9 550.67 T -5 F --0.33 (XkbVirtualModsMask) 86.55 535.67 S -2 F -(\0501<<6\051) 245 535.67 T -(serv) 279.65 535.67 T -(er) 297.81 535.67 T -(vmods) 314.6 535.67 T -(XkbGetV) 379.85 535.67 T -(irtualMods) 421.96 535.67 T -(16.4) 524.9 535.67 T -5 F --0.33 (XkbVirtualModMapMask) 86.55 520.67 S -2 F -(\0501<<7\051) 245 520.67 T -(serv) 279.65 520.67 T -(er) 297.81 520.67 T -(vmodmap) 314.6 520.67 T -(XkbGetV) 379.85 520.67 T -(irtualModMap) 421.96 520.67 T -(16.4) 524.9 520.67 T -3 12 Q -(T) 144.37 712 T -(able 14.1 Xkb Mapping Component Masks and Con) 151.27 712 T -(v) 419.83 712 T -(enience Functions) 425.71 712 T -1 F -(Mask) 86.55 692 T -(V) 245 692 T -(alue) 251 692 T -(Map) 279.65 692 T -(F) 314.6 692 T -(ields) 321.39 692 T -(Con) 379.85 692 T -(venience Functions) 399.38 692 T -(Section) 524.9 692 T -85.55 704 562.45 704 2 L -V -0.5 H -0 Z -N -85.55 686 562.45 686 2 L -V -N -FMENDPAGE -%%EndPage: "119" 131 -%%Page: "120" 132 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(120) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(14 Xkb K) 413.65 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -0 12 Q -(14.3) 72 712 T -(Changing Map Components in the Ser) 108 712 T -(ver) 325.48 712 T -2 F --0.44 (There are two ways to make changes to map components: either change a local copy of the) 108 692 P -(keyboard map and call) 108 679 T -1 F -(XkbSetMap) 219.97 679 T -2 F -( to send the modified map to the server, or, to reduce) 275.29 679 T -(network traffic, use an) 108 666 T -5 F --0.6 (XkbMapChangesRec) 218.96 666 S -2 F -( structure and call) 324.57 666 T -1 F -(XkbChang) 413.21 666 T -(eMap) 463.75 666 T -2 F -(.) 491.08 666 T -2 11 Q -(Bool) 108 645.67 T -3 F -(XkbSetMap) 132.15 645.67 T -2 F -(\050) 188.98 645.67 T -1 F -(dpy) 192.65 645.67 T -2 F -(,) 207.81 645.67 T -1 F -( whic) 210.56 645.67 T -(h) 233.93 645.67 T -2 F -(,) 239.43 645.67 T -1 F -( xkb) 242.18 645.67 T -2 F -(\051) 260.2 645.67 T -(Display *) 126 632.67 T -1 F -(dpy) 234 632.67 T -2 F -(;) 249.88 632.67 T -(/* connection to X serv) 288 632.67 T -(er */) 390.49 632.67 T -(unsigned int) 126 619.67 T -1 F -(whic) 234 619.67 T -(h) 254.61 619.67 T -2 F -(;) 260.11 619.67 T -(/* mask selecting subcomponents to update */) 288 619.67 T -(XkbDescPtr) 126 606.67 T -1 F -(xkb) 234 606.67 T -2 F -(;) 249.27 606.67 T -(/* description from which ne) 288 606.67 T -(w v) 414.82 606.67 T -(alues are tak) 430.74 606.67 T -(en */) 485.6 606.67 T -2 12 Q --0.17 (Use) 108 587 P -1 F --0.17 (XkbSetMap) 129.49 587 P -2 F --0.17 ( to send a complete new set of values for entire components \050for example,) 184.81 587 P -(all symbols, all actions, and so on\051 to the server. The) 108 574 T -1 F -(which) 363.97 574 T -2 F -( parameter specifies the com-) 392.64 574 T --0.07 (ponents to be sent to the server, and is a bitwise inclusive OR of the masks listed in Table) 108 561 P -(14.1. The) 108 548 T -1 F -(xkb) 156.66 548 T -2 F -( parameter is a pointer to an) 173.32 548 T -5 F --0.6 (XkbDescRec) 310.28 548 S -2 F -( structure and contains the infor-) 376.29 548 T -(mation to be copied to the server. For each bit set in the) 108 535 T -1 F -(which) 377.96 535 T -2 F -( parameter,) 406.63 535 T -1 F -(XkbSetMap) 463.61 535 T -2 F --0.01 (takes the corresponding structure values from the) 108 522 P -1 F --0.01 (xkb) 347.51 522 P -2 F --0.01 ( parameter and sends it to the server) 364.17 522 P -(specified by) 108 509 T -1 F -(dpy) 169.32 509 T -2 F -(.) 186.65 509 T -(If any components specified by) 108 488 T -1 F -(which) 261.64 488 T -2 F -( are not present in the) 290.3 488 T -1 F -(xkb) 396.95 488 T -2 F -( parameter,) 413.6 488 T -1 F -(XkbSetMap) 470.58 488 T -2 F --0.17 (returns) 108 475 P -5 F --0.36 -0.6 (False) 144.16 475 B -2 F --0.17 (. Otherwise, it sends the update request to the server and returns) 177.16 475 P -5 F --0.36 -0.6 (True) 485.11 475 B -2 F --0.17 (.) 511.51 475 P -1 F --0.17 (Xkb-) 517.34 475 P -(SetMap) 108 462 T -2 F -( can generate) 144.66 462 T -5 F --0.6 (BadAlloc) 210.96 462 S -2 F -(,) 263.76 462 T -5 F --0.6 (BadLength) 269.76 462 S -2 F -(, and) 329.16 462 T -5 F --0.6 (BadValue) 355.49 462 S -2 F -( protocol errors.) 408.29 462 T -(Key types, symbol maps, and actions are all interrelated; changes in one require changes) 108 441 T -(in the others. Xkb provides functions to make it easier to edit these components and han-) 108 428 T --0.23 (dle the interdependencies. Table 14.1 lists these helper functions and provides a pointer to) 108 415 P -(where they are defined.) 108 402 T -0 F -(14.3.1) 72 377 T -(The XkbMapChang) 108 377 T -(esRec Structure) 216.13 377 T -2 F -(Use the) 108 357 T -5 F --0.6 (XkbMapChangesRec) 147.32 357 S -2 F -( structure to identify and track partial modifications to the) 252.93 357 T -(mapping components and to reduce the amount of traffic between the server and clients.) 108 344 T -2 11 Q -(typedef struct _XkbMapChanges {) 126 323.67 T -(unsigned short) 144 310.67 T -(changed;) 234 310.67 T -(/* identi\336es v) 342 310.67 T -(alid components in structure */) 401.62 310.67 T -(K) 144 297.67 T -(e) 151.67 297.67 T -(yCode) 156.39 297.67 T -(min_k) 234 297.67 T -(e) 262.01 297.67 T -(y_code;) 266.73 297.67 T -(/* lo) 342 297.67 T -(west numbered k) 361.59 297.67 T -(e) 436.63 297.67 T -(ycode for de) 441.35 297.67 T -(vice */) 496.05 297.67 T -(K) 144 284.67 T -(e) 151.67 284.67 T -(yCode) 156.39 284.67 T -(max_k) 234 284.67 T -(e) 263.83 284.67 T -(y_code;) 268.55 284.67 T -(/* highest numbered k) 342 284.67 T -(e) 439.97 284.67 T -(ycode for de) 444.68 284.67 T -(vice */) 499.39 284.67 T -(unsigned char) 144 271.67 T -(\336rst_type;) 234 271.67 T -(/* inde) 342 271.67 T -(x of \336rst k) 372.08 271.67 T -(e) 417.5 271.67 T -(y) 422.22 271.67 T -1 F -(type) 430.47 271.67 T -2 F -( modi\336ed */) 448.8 271.67 T -(unsigned char) 144 258.67 T -(num_types;) 234 258.67 T -(/* # types modi\336ed */) 342 258.67 T -(K) 144 245.67 T -(e) 151.67 245.67 T -(yCode) 156.39 245.67 T -(\336rst_k) 234 245.67 T -(e) 262.01 245.67 T -(y_sym;) 266.73 245.67 T -(/* \336rst k) 342 245.67 T -(e) 378.56 245.67 T -(y whose) 383.28 245.67 T -1 F -(key_sym_map) 422.39 245.67 T -2 F -( changed */) 484.09 245.67 T -(unsigned char) 144 232.67 T -(num_k) 234 232.67 T -(e) 264.45 232.67 T -(y_syms;) 269.17 232.67 T -(/* #) 342 232.67 T -1 F -(key_sym_map) 361.56 232.67 T -2 F -( entries changed */) 423.26 232.67 T -(K) 144 219.67 T -(e) 151.67 219.67 T -(yCode) 156.39 219.67 T -(\336rst_k) 234 219.67 T -(e) 262.01 219.67 T -(y_act;) 266.73 219.67 T -(/* \336rst k) 342 219.67 T -(e) 378.56 219.67 T -(y whose) 383.28 219.67 T -1 F -(key_acts) 422.39 219.67 T -2 F -(entry changed */) 463.01 219.67 T -(unsigned char) 144 206.67 T -(num_k) 234 206.67 T -(e) 264.45 206.67 T -(y_acts;) 269.17 206.67 T -(/* #) 342 206.67 T -1 F -(key_acts) 361.56 206.67 T -2 F -( entries changed */) 399.43 206.67 T -(K) 144 193.67 T -(e) 151.67 193.67 T -(yCode) 156.39 193.67 T -(\336rst_k) 234 193.67 T -(e) 262.01 193.67 T -(y_beha) 266.73 193.67 T -(vior;) 298.27 193.67 T -(/* \336rst k) 342 193.67 T -(e) 378.56 193.67 T -(y whose) 383.28 193.67 T -1 F -(behaviors) 422.39 193.67 T -2 F -( changed */) 465.77 193.67 T -(unsigned char) 144 180.67 T -(num_k) 234 180.67 T -(e) 264.45 180.67 T -(y_beha) 269.17 180.67 T -(viors;) 300.71 180.67 T -(/* #) 342 180.67 T -1 F -(behaviors) 361.56 180.67 T -2 F -( entries changed */) 404.94 180.67 T -(K) 144 167.67 T -(e) 151.67 167.67 T -(yCode) 156.39 167.67 T -(\336rst_k) 234 167.67 T -(e) 262.01 167.67 T -(y_e) 266.73 167.67 T -(xplicit;) 282.44 167.67 T -(/* \336rst k) 342 167.67 T -(e) 378.56 167.67 T -(y whose) 383.28 167.67 T -1 F -(explicit) 422.39 167.67 T -2 F -(entry changed */) 457.52 167.67 T -(unsigned char) 144 154.67 T -(num_k) 234 154.67 T -(e) 264.45 154.67 T -(y_e) 269.17 154.67 T -(xplicit;) 284.89 154.67 T -(/* #) 342 154.67 T -1 F -(explicit) 361.56 154.67 T -2 F -( entries changed */) 393.94 154.67 T -(K) 144 141.67 T -(e) 151.67 141.67 T -(yCode) 156.39 141.67 T -(\336rst_modmap_k) 234 141.67 T -(e) 306.01 141.67 T -(y;) 310.73 141.67 T -(/* \336rst k) 342 141.67 T -(e) 378.56 141.67 T -(y whose) 383.28 141.67 T -1 F -(modmap) 422.39 141.67 T -2 F -( entry changed */) 460.27 141.67 T -(unsigned char) 144 128.67 T -(num_modmap_k) 234 128.67 T -(e) 308.45 128.67 T -(ys;) 313.17 128.67 T -(/* #) 342 128.67 T -1 F -(modmap) 361.56 128.67 T -2 F -( entries changed */) 399.44 128.67 T -(K) 144 115.67 T -(e) 151.67 115.67 T -(yCode) 156.39 115.67 T -(\336rst_vmodmap_k) 234 115.67 T -(e) 311.51 115.67 T -(y;) 316.23 115.67 T -(/* \336rst k) 342 115.67 T -(e) 378.56 115.67 T -(y whose) 383.28 115.67 T -1 F -(vmodmap) 422.39 115.67 T -2 F -( changed */) 465.16 115.67 T -(unsigned char) 144 102.67 T -(num_vmodmap_k) 234 102.67 T -(e) 313.95 102.67 T -(ys;) 318.67 102.67 T -(/* #) 342 102.67 T -1 F -(vmodmap) 361.56 102.67 T -2 F -( entries changed */) 404.33 102.67 T -(unsigned char) 144 89.67 T -(pad1;) 234 89.67 T -(/* reserv) 342 89.67 T -(ed */) 380.02 89.67 T -FMENDPAGE -%%EndPage: "120" 132 -%%Page: "121" 133 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(121) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(14 Xkb K) 413.65 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -(unsigned short) 144 712.67 T -(vmods;) 234 712.67 T -(/* mask indicating which) 342 712.67 T -1 F -(vmods) 455.66 712.67 T -2 F -( changed */) 483.77 712.67 T -(}) 126 699.67 T -3 F -(XkbMapChangesRec) 134.03 699.67 T -2 F -(,*XkbMapChangesPtr;) 234.25 699.67 T -2 12 Q -(The) 108 680 T -1 F -(changed) 129.66 680 T -2 F -( field identifies the map components that have changed in an) 170.32 680 T -5 F --0.6 (XkbDescRec) 464.6 680 S -2 F -(structure and may contain any of the bits in Table 14.1, which are also shown in Table) 108 667 T --0.4 (14.2. Every 1 bit in) 108 654 P -1 F --0.4 (changed) 201.68 654 P -2 F --0.4 ( also identifies which other fields in the) 242.33 654 P -5 F --0.88 -0.6 (XkbMapChangesRec) 431.8 654 B -2 F -(structure contain valid values, as indicated in Table 14.2. The) 108 641 T -1 11 Q -(min_key_code) 406.28 641 T -2 F -( and) 469.2 641 T -1 F -(max_key_code) 108 628 T -2 12 Q -( fields are for reference only; they are ignored on any requests sent to the) 172.75 628 T -(server and are always updated by the server whenever it returns the data for an) 108 615 T -5 F --0.6 (XkbMapChangesRec) 108 602 S -2 F -(.) 213.6 602 T -(To update only partial components of a keyboard description, modify the appropriate) 108 242 T --0.02 (fields in the server and map components of a local copy of the keyboard description, then) 108 229 P -(call) 108 216 T -1 F -(XkbChang) 128.33 216 T -(eMap) 178.87 216 T -2 F -( with an) 206.2 216 T -5 F --0.6 (XkbMapChangesRec) 247.86 216 S -2 F -( structure indicating which compo-) 353.46 216 T -(nents have changed.) 108 203 T -2 11 Q -(Bool) 108 182.67 T -3 F -(XkbChangeMap) 132.15 182.67 T -2 F -(\050) 210.38 182.67 T -1 F -(dpy) 214.04 182.67 T -2 F -(,) 229.21 182.67 T -1 F -( xkb) 231.96 182.67 T -2 F -(,) 249.98 182.67 T -1 F -( c) 252.73 182.67 T -(hang) 260.2 182.67 T -(es) 282.09 182.67 T -2 F -(\051) 291.25 182.67 T -(Display *) 126 169.67 T -1 F -(dpy) 234 169.67 T -2 F -(;) 249.88 169.67 T -(/* connection to X serv) 288 169.67 T -(er */) 390.49 169.67 T -(XkbDescPtr) 126 156.67 T -1 F -(xkb) 234 156.67 T -2 F -(;) 249.27 156.67 T -(/* description from which ne) 288 156.67 T -(w v) 414.82 156.67 T -(alues are tak) 430.74 156.67 T -(en */) 485.6 156.67 T -(XkbMapChangesPtr) 126 143.67 T -1 F -(c) 234 143.67 T -(hang) 238.72 143.67 T -(es) 260.61 143.67 T -2 F -(;) 269.77 143.67 T -(/*identi\336es component parts to update */) 288 143.67 T -1 12 Q -(XkbChang) 108 124 T -(eMap) 158.54 124 T -2 F -( copies any components specified by the) 185.87 124 T -1 F -(changes) 382.84 124 T -2 F -( structure from the key-) 422.16 124 T -(board description,) 108 111 T -1 F -(xkb) 197.65 111 T -2 F -(, to the X server specified by) 214.31 111 T -1 F -(dpy) 355.61 111 T -2 F -(.) 372.94 111 T -3 F -(T) 237.92 582 T -(able 14.2 XkbMapChangesRec Masks) 244.82 582 T -1 F -(Mask) 109 548 T -(V) 271 562 T -(alid) 277 562 T -(XkbMapChang) 271 548 T -(esRec) 343.54 548 T -(F) 271 534 T -(ields) 277.79 534 T -(XkbDescRec F) 379 555 T -(ield Containing) 449.43 555 T -(Chang) 379 541 T -(ed Data) 410.88 541 T -5 11 Q --0.33 (XkbKeyTypesMask) 109 519.67 S -2 F -(\336rst_type,) 271 519.67 T -(num_types) 271 508.67 T -(map->type[\336rst_type] ..) 379 519.67 T -(map->type[\336rst_type + num_types - 1]) 379 508.67 T -5 F --0.33 (XkbKeySymsMask) 109 494.67 S -2 F -(\336rst_k) 271 494.67 T -(e) 299.01 494.67 T -(y_sym,) 303.73 494.67 T -(num_k) 271 483.67 T -(e) 301.45 483.67 T -(y_syms) 306.17 483.67 T -(map->k) 379 494.67 T -(e) 413.2 494.67 T -(y_sym_map[\336rst_k) 417.92 494.67 T -(e) 503.37 494.67 T -(y_sym] ..) 508.08 494.67 T -(map->k) 379 483.67 T -(e) 413.2 483.67 T -(y_sym_map[\336rst_k) 417.92 483.67 T -(e) 503.37 483.67 T -(y_sym +) 508.08 483.67 T -(num_k) 379 472.67 T -(e) 409.45 472.67 T -(y_syms - 1]) 414.17 472.67 T -5 F --0.33 (XkbModifierMapMask) 109 458.67 S -2 F -(\336rst_modmap_k) 271 458.67 T -(e) 343.01 458.67 T -(y) 347.73 458.67 T -(,) 352.51 458.67 T -(num_modmap_k) 271 447.67 T -(e) 345.45 447.67 T -(ys) 350.17 447.67 T -(map->modmap[\336rst_modmap_k) 379 458.67 T -(e) 521.98 458.67 T -(y] ..) 526.7 458.67 T -(map->modmap[\336rst_modmap_k) 379 447.67 T -(e) 521.98 447.67 T -(y +) 526.7 447.67 T -(num_modmap_k) 379 436.67 T -(e) 453.45 436.67 T -(ys-1]) 458.17 436.67 T -5 F --0.33 (XkbExplicitComponentsMask) 109 422.67 S -2 F -(\336rst_k) 271 422.67 T -(e) 299.01 422.67 T -(y_e) 303.73 422.67 T -(xplicit,) 319.44 422.67 T -(num_k) 271 411.67 T -(e) 301.45 411.67 T -(y_e) 306.17 411.67 T -(xplicit) 321.89 411.67 T -(serv) 379 422.67 T -(er) 397.16 422.67 T -(->e) 405.49 422.67 T -(xplicit[\336rst_k) 420.07 422.67 T -(e) 479.86 422.67 T -(y_e) 484.58 422.67 T -(xplicit] ..) 500.3 422.67 T -(serv) 379 411.67 T -(er) 397.16 411.67 T -(->e) 405.49 411.67 T -(xplicit[\336rst_k) 420.07 411.67 T -(e) 479.86 411.67 T -(y_e) 484.58 411.67 T -(xplicit +) 500.3 411.67 T -(num_k) 379 400.67 T -(e) 409.45 400.67 T -(y_e) 414.17 400.67 T -(xplicit - 1]) 429.89 400.67 T -5 F --0.33 (XkbKeyActionsMask) 109 386.67 S -2 F -(\336rst_k) 271 386.67 T -(e) 299.01 386.67 T -(y_act,) 303.73 386.67 T -(num_k) 271 375.67 T -(e) 301.45 375.67 T -(y_acts) 306.17 375.67 T -(serv) 379 386.67 T -(er) 397.16 386.67 T -(->k) 405.49 386.67 T -(e) 420.74 386.67 T -(y_acts[\336rst_k) 425.46 386.67 T -(e) 485.24 386.67 T -(y_act] ..) 489.96 386.67 T -(serv) 379 375.67 T -(er) 397.16 375.67 T -(->k) 405.49 375.67 T -(e) 420.74 375.67 T -(y_acts[\336rst_k) 425.46 375.67 T -(e) 485.24 375.67 T -(y_act +) 489.96 375.67 T -(num_k) 379 364.67 T -(e) 409.45 364.67 T -(y_acts - 1]) 414.17 364.67 T -5 F --0.33 (XkbKeyBehaviorsMask) 109 350.67 S -2 F -(\336rst_k) 271 350.67 T -(e) 299.01 350.67 T -(y_beha) 303.73 350.67 T -(vior) 335.27 350.67 T -(,) 352.55 350.67 T -(num_k) 271 339.67 T -(e) 301.45 339.67 T -(y_beha) 306.17 339.67 T -(viors) 337.71 339.67 T -(serv) 379 350.67 T -(er) 397.16 350.67 T -(->beha) 405.49 350.67 T -(viors[\336rst_k) 435.9 350.67 T -(e) 489.57 350.67 T -(y_beha) 494.29 350.67 T -(vior] ..) 525.84 350.67 T -(serv) 379 339.67 T -(er) 397.16 339.67 T -(->beha) 405.49 339.67 T -(viors[\336rst_k) 435.9 339.67 T -(e) 489.57 339.67 T -(y_beha) 494.29 339.67 T -(vior +) 525.84 339.67 T -(num_k) 379 328.67 T -(e) 409.45 328.67 T -(y_beha) 414.17 328.67 T -(viors - 1]) 445.71 328.67 T -5 F --0.33 (XkbVirtualModsMask) 109 314.67 S -2 F -(vmods) 271 314.67 T -(serv) 379 314.67 T -(er) 397.16 314.67 T -(->vmods[*]) 405.49 314.67 T -5 F --0.33 (XkbVirtualModMapMask) 109 300.67 S -2 F -(\336rst_vmodmap_k) 271 300.67 T -(e) 348.51 300.67 T -(y) 353.23 300.67 T -(,) 358.01 300.67 T -(num_vmodmap_k) 271 289.67 T -(e) 350.95 289.67 T -(ys) 355.67 289.67 T -(serv) 379 300.67 T -(er) 397.16 300.67 T -(->vmodmap[\336rst_vmodmap_k) 405.49 300.67 T -(e) 540.52 300.67 T -(y]) 545.24 300.67 T -(..) 379 289.67 T -(serv) 379 278.67 T -(er) 397.16 278.67 T -(->vmodmap[\336rst_vmodmap_k) 405.49 278.67 T -(e) 540.52 278.67 T -(y) 545.24 278.67 T -(+ num_vmodmap_k) 379 267.67 T -(e) 467.9 267.67 T -(ys - 1]) 472.62 267.67 T -108 574 558 574 2 L -V -0.5 H -0 Z -N -108 529 558 529 2 L -V -N -FMENDPAGE -%%EndPage: "121" 133 -%%Page: "122" 134 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(122) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(14 Xkb K) 413.65 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -2 12 Q -(If any components specified by) 108 712 T -1 F -(changes) 261.64 712 T -2 F -( are not present in the) 300.96 712 T -1 F -(xkb) 407.6 712 T -2 F -( parameter,) 424.26 712 T -1 F -(XkbChang) 108 699 T -(eMap) 158.54 699 T -2 F -( returns) 185.87 699 T -5 F --0.6 (False) 225.19 699 S -2 F -(. Otherwise, it sends a request to the server and returns) 258.19 699 T -5 F --0.6 (True) 108 686 S -2 F -(.) 134.4 686 T -1 F -(XkbChang) 108 665 T -(eMap) 158.54 665 T -2 F -( can generate) 185.87 665 T -5 F --0.6 (BadAlloc) 252.17 665 S -2 F -(,) 304.97 665 T -5 F --0.6 (BadLength) 310.97 665 S -2 F -(, and) 370.37 665 T -5 F --0.6 (BadValue) 396.7 665 S -2 F -( protocol errors.) 449.5 665 T -0 F -(14.4) 72 640 T -(T) 108 640 T -(rac) 114.37 640 T -(king Chang) 132.14 640 T -(es to Map Components) 197.6 640 T -2 F -(The Xkb extension reports) 108 620 T -5 F --0.6 (XkbMapNotify) 238.64 620 S -2 F -( events to clients wanting notification when-) 317.85 620 T --0.26 (ever a map component of the Xkb description for a device changes. There are many differ-) 108 607 P -(ent types of Xkb keyboard map changes. Xkb uses an event detail mask to identify each) 108 594 T -(type of change. The event detail masks are identical to the masks listed in Table 14.1.) 108 581 T --0.47 (To receive) 108 560 P -5 F --1.02 -0.6 (XkbMapNotify) 161.04 560 B -2 F --0.47 ( events under all possible conditions, use) 240.25 560 P -1 F --0.47 (XkbSelectEvents) 436.3 560 P -2 F --0.47 ( \050see) 515.61 560 P -(section 4.3\051 and pass) 108 547 T -5 F --0.6 (XkbMapNotifyMask) 210.98 547 S -2 F -( in both) 316.59 547 T -1 F -(bits_to_c) 356.26 547 T -(hang) 400.08 547 T -(e) 423.96 547 T -2 F -( and) 429.29 547 T -1 F -(values_for_bits) 452.62 547 T -2 F -(.) 526.62 547 T -(To receive) 108 526 T -5 F --0.6 (XkbMapNotify) 161.98 526 S -2 F -( events only under certain conditions, use) 241.18 526 T -1 F -(XkbSelectEventDe-) 443.15 526 T -(tails) 108 513 T -2 F -( using) 128.68 513 T -5 F --0.6 (XkbMapNotify) 160.68 513 S -2 F -( as the) 239.88 513 T -1 F -(e) 273.54 513 T -(vent_type) 278.69 513 T -2 F -( and specifying the desired map changes in) 324.67 513 T -1 F -(bits_to_c) 108 500 T -(hang) 151.82 500 T -(e) 175.7 500 T -2 F -( and) 181.03 500 T -1 F -(values_for_bits) 204.36 500 T -2 F -( using mask bits from Table 14.1.) 278.36 500 T -(The structure for) 108 479 T -5 F --0.6 (XkbMapNotify) 191.64 479 S -2 F -( events is:) 270.84 479 T -2 11 Q -(typedef struct {) 126 458.67 T -(int) 144 445.67 T -(type;) 216 445.67 T -(/* Xkb e) 315 445.67 T -(xtension base e) 352.72 445.67 T -(v) 419.65 445.67 T -(ent code */) 424.99 445.67 T -(unsigned long) 144 432.67 T -(serial;) 216 432.67 T -(/* X serv) 315 432.67 T -(er serial number for e) 355.16 432.67 T -(v) 449.57 432.67 T -(ent */) 454.91 432.67 T -(Bool) 144 419.67 T -(send_e) 216 419.67 T -(v) 246.27 419.67 T -(ent;) 251.61 419.67 T -(/*) 315 419.67 T -5 12 Q --0.6 (True) 326.31 419.67 S -2 11 Q -( => synthetically generated */) 352.71 419.67 T -(Display *) 144 406.67 T -(display;) 216 406.67 T -(/* serv) 315 406.67 T -(er connection where e) 344.47 406.67 T -(v) 441.02 406.67 T -(ent generated */) 446.35 406.67 T -(T) 144 393.67 T -(ime) 150.34 393.67 T -(time;) 216 393.67 T -(/* serv) 315 393.67 T -(er time when e) 344.47 393.67 T -(v) 409.26 393.67 T -(ent generated */) 414.59 393.67 T -(int) 144 380.67 T -(xkb_type;) 216 380.67 T -(/*) 315 380.67 T -5 F --0.33 (XkbMapNotify) 326.31 380.67 S -2 F -( */) 401.55 380.67 T -(int) 144 367.67 T -(de) 216 367.67 T -(vice;) 226.11 367.67 T -(/* Xkb de) 315 367.67 T -(vice ID, will not be) 358.11 367.67 T -5 F --0.33 (XkbUseCoreKbd) 446.1 367.67 S -2 F -( */) 527.61 367.67 T -(unsigned int) 144 354.67 T -(changed;) 216 354.67 T -(/* identi\336es v) 315 354.67 T -(alid \336elds in rest of e) 374.62 354.67 T -(v) 466.92 354.67 T -(ent */) 472.26 354.67 T -(unsigned int) 144 341.67 T -(resized;) 216 341.67 T -(/* reserv) 315 341.67 T -(ed */) 353.02 341.67 T -(int) 144 328.67 T -(\336rst_type;) 216 328.67 T -(/* inde) 315 328.67 T -(x of \336rst k) 345.08 328.67 T -(e) 390.5 328.67 T -(y) 395.22 328.67 T -1 F -(type) 403.47 328.67 T -2 F -( modi\336ed */) 421.8 328.67 T -(int) 144 315.67 T -(num_types) 216 315.67 T -(/* # types modi\336ed */) 315 315.67 T -(K) 144 302.67 T -(e) 151.67 302.67 T -(yCode) 156.39 302.67 T -(min_k) 216 302.67 T -(e) 244.01 302.67 T -(y_code;) 248.73 302.67 T -(/* minimum k) 315 302.67 T -(e) 377.24 302.67 T -(ycode for de) 381.96 302.67 T -(vice */) 436.66 302.67 T -(K) 144 289.67 T -(e) 151.67 289.67 T -(yCode) 156.39 289.67 T -(max_k) 216 289.67 T -(e) 245.83 289.67 T -(y_code;) 250.55 289.67 T -(/* maximum k) 315 289.67 T -(e) 379.06 289.67 T -(ycode for de) 383.78 289.67 T -(vice */) 438.49 289.67 T -(K) 144 276.67 T -(e) 151.67 276.67 T -(yCode) 156.39 276.67 T -(\336rst_k) 216 276.67 T -(e) 244.01 276.67 T -(y_sym;) 248.73 276.67 T -(/* \336rst k) 315 276.67 T -(e) 351.56 276.67 T -(y whose) 356.28 276.67 T -1 F -(key_sym_map) 395.39 276.67 T -2 F -( changed */) 457.09 276.67 T -(K) 144 263.67 T -(e) 151.67 263.67 T -(yCode) 156.39 263.67 T -(\336rst_k) 216 263.67 T -(e) 244.01 263.67 T -(y_act;) 248.73 263.67 T -(/* \336rst k) 315 263.67 T -(e) 351.56 263.67 T -(y whose) 356.28 263.67 T -1 F -(key_acts) 395.39 263.67 T -2 F -(entry changed */) 436.01 263.67 T -(K) 144 250.67 T -(e) 151.67 250.67 T -(yCode) 156.39 250.67 T -(\336rst_k) 216 250.67 T -(e) 244.01 250.67 T -(y_beha) 248.73 250.67 T -(vior;) 280.27 250.67 T -(/* \336rst k) 315 250.67 T -(e) 351.56 250.67 T -(y whose) 356.28 250.67 T -1 F -(behaviors) 395.39 250.67 T -2 F -( changed */) 438.77 250.67 T -(K) 144 237.67 T -(e) 151.67 237.67 T -(yCode) 156.39 237.67 T -(\336rst_k) 216 237.67 T -(e) 244.01 237.67 T -(y_e) 248.73 237.67 T -(xplicit;) 264.44 237.67 T -(/* \336rst k) 315 237.67 T -(e) 351.56 237.67 T -(y whose) 356.28 237.67 T -1 F -(explicit) 395.39 237.67 T -2 F -(entry changed */) 430.52 237.67 T -(K) 144 224.67 T -(e) 151.67 224.67 T -(yCode) 156.39 224.67 T -(\336rst_modmap_k) 216 224.67 T -(e) 288.01 224.67 T -(y;) 292.73 224.67 T -(/* \336rst k) 315 224.67 T -(e) 351.56 224.67 T -(y whose) 356.28 224.67 T -1 F -(modmap) 395.39 224.67 T -2 F -( entry changed */) 433.27 224.67 T -(K) 144 211.67 T -(e) 151.67 211.67 T -(yCode) 156.39 211.67 T -(\336rst_vmodmap_k) 216 211.67 T -(e) 293.51 211.67 T -(y;) 298.23 211.67 T -(/* #) 315 211.67 T -1 F -(modmap) 334.56 211.67 T -2 F -( entries changed */) 372.44 211.67 T -(int) 144 198.67 T -(num_k) 216 198.67 T -(e) 246.45 198.67 T -(y_syms;) 251.17 198.67 T -(/* #) 315 198.67 T -1 F -(key_sym_map) 334.56 198.67 T -2 F -( entries changed */) 396.26 198.67 T -(int) 144 185.67 T -(num_k) 216 185.67 T -(e) 246.45 185.67 T -(y_acts;) 251.17 185.67 T -(/* #) 315 185.67 T -1 F -(key_acts) 334.56 185.67 T -2 F -( entries changed */) 372.43 185.67 T -(int) 144 172.67 T -(num_k) 216 172.67 T -(e) 246.45 172.67 T -(y_beha) 251.17 172.67 T -(viors;) 282.71 172.67 T -(/* #) 315 172.67 T -1 F -(behaviors) 334.56 172.67 T -2 F -( entries changed */) 377.94 172.67 T -(int) 144 159.67 T -(num_k) 216 159.67 T -(e) 246.45 159.67 T -(y_e) 251.17 159.67 T -(xplicit;) 266.89 159.67 T -(/* #) 315 159.67 T -1 F -(explicit) 334.56 159.67 T -2 F -( entries changed */) 366.94 159.67 T -(int) 144 146.67 T -(num_modmap_k) 216 146.67 T -(e) 290.45 146.67 T -(ys;) 295.17 146.67 T -(/* #) 315 146.67 T -1 F -(modmap) 334.56 146.67 T -2 F -( entries changed */) 372.44 146.67 T -(int) 144 133.67 T -(num_vmodmap_k) 216 133.67 T -(e) 295.95 133.67 T -(ys;) 300.67 133.67 T -(/* #) 315 133.67 T -1 F -(vmodmap) 334.56 133.67 T -2 F -( entries changed */) 377.33 133.67 T -(unsigned in) 144 120.67 T -(t) 195.03 120.67 T -(vmods;) 216 120.67 T -(/* mask indicating which) 315 120.67 T -1 F -(vmods) 428.66 120.67 T -2 F -( changed */) 456.77 120.67 T -(}) 126 107.67 T -3 F -(XkbMapNotifyEv) 134.03 107.67 T -(ent) 218.26 107.67 T -2 F -(;) 232.92 107.67 T -2 12 Q -(The) 108 88 T -1 F -(c) 129.66 88 T -(hang) 134.81 88 T -(ed) 158.69 88 T -2 F -( field specifies the map components that have changed and is the bitwise) 170.02 88 T -(inclusive OR of the mask bits defined in Table 14.1. The other fields in this event are) 108 75 T -FMENDPAGE -%%EndPage: "122" 134 -%%Page: "123" 135 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(123) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(14 Xkb K) 413.65 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -2 12 Q -(interpreted as the like-named fields in an) 108 712 T -5 F --0.6 (XkbMapChangesRec) 306.96 712 S -2 F -( \050see section 14.3.1\051. The) 412.56 712 T -5 F --0.6 (XkbMapNotifyEvent) 108 699 S -2 F -( structure also has an additional) 220.2 699 T -1 F -(resized) 374.85 699 T -2 F -( field that is reserved for) 408.84 699 T -(future use.) 108 686 T -0 F -(14.5) 72 661 T -(Allocating and Freeing Client and Ser) 108 661 T -(ver Maps) 321.5 661 T -2 F --0.2 (Calling) 108 641 P -1 F --0.2 (XkbGetMap) 146.14 641 P -2 F --0.2 ( \050see section 14.2\051 should be sufficient for most applications to get cli-) 204.12 641 P -(ent and server maps. As a result, most applications do not need to directly allocate client) 108 628 T -(and server maps.) 108 615 T -(If you change the number of key types or construct map components without loading the) 108 594 T -(necessary components from the X server, do not allocate any map components directly) 108 581 T --0.03 (using) 108 568 P -1 F --0.03 (malloc) 136.98 568 P -2 F --0.03 ( or) 169.64 568 P -1 F --0.03 (Xmalloc) 185.59 568 P -2 F --0.03 (. Instead, use the Xkb allocators,) 225.59 568 P -1 F --0.03 (XkbAllocClientMap,) 385.07 568 P -2 F --0.03 ( and) 483.4 568 P -1 F --0.03 (XkbAl-) 506.68 568 P -(locServerMap) 108 555 T -2 F -(.) 175.98 555 T --0.2 (Similarly, use the Xkb destructors,) 108 534 P -1 F --0.2 (XkbF) 276.63 534 P --0.2 (r) 301.96 534 P --0.2 (eeClientMap,) 306.19 534 P -2 F --0.2 ( and) 371.18 534 P -1 F --0.2 (XkbF) 394.1 534 P --0.2 (r) 419.43 534 P --0.2 (eeServerMap) 423.65 534 P -2 F --0.2 ( instead of) 487.62 534 P -1 F -(fr) 108 521 T -(ee) 115.56 521 T -2 F -( or) 126.22 521 T -1 F -(Xfree) 142.21 521 T -2 F -(.) 168.2 521 T -0 F -(14.5.1) 72 496 T -(Allocating an Empty Client Map) 108 496 T -2 F --0.09 (To allocate and initialize an empty client map description record, use) 108 476 P -1 F --0.09 (XkbAllocClientMap.) 441.67 476 P -2 11 Q -(Status) 108 455.67 T -3 F -(XkbAllocClientMap) 137.65 455.67 T -2 F -(\050) 232.98 455.67 T -1 F -(xkb, whic) 236.65 455.67 T -(h, type_count) 278.03 455.67 T -2 F -(\051) 337.3 455.67 T -(XkbDescPtr) 126 442.67 T -1 F -(xkb) 216 442.67 T -2 F -(;) 231.27 442.67 T -(/* k) 279 442.67 T -(e) 295.7 442.67 T -(yboard description in which to allocate client map */) 300.42 442.67 T -(unsigned int) 126 429.67 T -1 F -(whic) 216 429.67 T -(h) 236.61 429.67 T -2 F -(;) 242.11 429.67 T -(/* mask selecting map components to allocate */) 279 429.67 T -(unsigned int) 126 416.67 T -1 F -(type_count) 216 416.67 T -2 F -(;) 264.27 416.67 T -(/* v) 279 416.67 T -(alue of) 295.53 416.67 T -1 F -(num_types) 328.52 416.67 T -2 F -( \336eld in map to be allocated */) 375.57 416.67 T -1 12 Q -(XkbAllocClientMap) 108 397 T -2 F -( allocates and initializes an empty client map in the) 203.33 397 T -1 F -(map) 451.97 397 T -2 F -( field of the) 472.63 397 T -(keyboard description specified by) 108 384 T -1 F -(xkb) 273.3 384 T -2 F -(. The) 289.96 384 T -1 F -(which) 317.62 384 T -2 F -( parameter specifies the particular com-) 346.28 384 T -(ponents of the client map structure to allocate and is a mask composed by a bitwise inclu-) 108 371 T -(sive OR of one or more of the masks shown in Table 14.3.) 108 358 T -0 F -(Note) 126 125.67 T -2 11 Q --0.37 (The) 162 125.67 P -1 F --0.37 (min_key_code) 181.48 125.67 P -2 F --0.37 ( and) 244.4 125.67 P -1 F --0.37 (max_key_code) 265.04 125.67 P -2 F --0.37 ( \336elds of the) 329.78 125.67 P -1 F --0.37 (xkb) 385.73 125.67 P -2 F --0.37 ( parameter must be le) 400.99 125.67 P --0.37 (g) 494.03 125.67 P --0.37 (al v) 499.48 125.67 P --0.37 (alues) 515.02 125.67 P -(if the) 162 113.67 T -5 12 Q --0.6 (XkbKeySymsMask) 187.66 113.67 S -2 11 Q -( or) 280.07 113.67 T -5 12 Q --0.6 (XkbModifierMapMask) 294.73 113.67 S -2 11 Q -( masks are set in the) 413.53 113.67 T -1 F -(which) 505.18 113.67 T -2 F -(parameter) 162 101.67 T -(. If the) 205.37 101.67 T -(y are not v) 234.23 101.67 T -(alid,) 280.69 101.67 T -1 F -(XkbAllocClientMap) 302.69 101.67 T -2 F -( returns) 390.07 101.67 T -5 12 Q --0.6 (BadValue) 426.12 101.67 S -2 11 Q -(.) 478.92 101.67 T -2 12 Q -(If the client map of the keyboard description is not) 108 81 T -5 F --0.6 (NULL) 353.96 81 S -2 F -(, and any fields are already allo-) 380.36 81 T -(cated in the client map,) 108 68 T -1 F -(XkbAllocClientMap) 222.65 68 T -2 F -( does not overwrite the existing values; it sim-) 317.98 68 T -3 F -(T) 229.59 338 T -(able 14.3 XkbAllocClientMap Masks) 236.49 338 T -1 F -(Mask) 109 318 T -(Ef) 249 318 T -(fect) 259.45 318 T -2 11 Q -(XkbK) 109 303.67 T -(e) 135.61 303.67 T -(yT) 140.33 303.67 T -(ypesMask) 151.67 303.67 T -2 12 Q -(The) 249 303 T -1 F -(type_count) 270.66 303 T -2 F -(field specifies the number of entries to pre-) 326.32 303 T -(allocate for the) 249 291 T -1 F -(types) 323.98 291 T -2 F -( field of the client map. If the) 348.64 291 T -1 F --0.01 (type_count) 249 279 P -2 F --0.01 (field is less than) 304.65 279 P -5 F --0.01 -0.6 (XkbNumRequiredTypes) 385.29 279 B -2 F --0.01 ( \050see) 510.69 279 P -(section 15.2.1\051, returns) 249 267 T -5 F --0.6 (BadValue) 362.32 267 S -2 F -(.) 415.12 267 T -2 11 Q -(XkbK) 109 252.67 T -(e) 135.61 252.67 T -(ySymsMask) 140.33 252.67 T -(The) 249 252.67 T -1 12 Q -(min_key_code) 268.86 252.67 T -2 F -( and) 337.49 252.67 T -1 F -(max_key_code) 360.82 252.67 T -2 F -( fields of the) 431.45 252.67 T -1 F -(xkb) 494.78 252.67 T -2 F -(parameter are used to allocate the) 249 241.67 T -1 F -(syms) 412.94 241.67 T -2 F -( and) 436.27 241.67 T -1 F -(key_sym_map) 459.6 241.67 T -2 F -(fields of the client map. The fields are allocated to contain) 249 230.67 T -(the maximum number of entries necessary for) 249 219.67 T -1 F -(max_key_code) 249 208.67 T -2 F -( -) 319.63 208.67 T -1 F -(min_key_code) 329.63 208.67 T -2 F -( + 1 keys) 398.27 208.67 T -2 11 Q -(.) 442.03 208.67 T -(XkbModi\336erMapMask) 109 194.67 T -(The) 249 194.67 T -1 12 Q -(min_key_code) 268.86 194.67 T -2 F -( and) 337.49 194.67 T -1 F -(max_key_code) 360.82 194.67 T -2 F -( fields of the) 431.45 194.67 T -1 F -(xkb) 494.78 194.67 T -2 F -(parameter are used to allocate the) 249 183.67 T -1 F -(modmap) 412.94 183.67 T -2 F -( field of the cli-) 454.27 183.67 T -(ent map. The field is allocated to contain the maximum) 249 172.67 T -(number of entries necessary for) 249 161.67 T -1 F -(max_key_code) 403.28 161.67 T -2 F -( -) 473.92 161.67 T -1 F -(min_key_code) 249 150.67 T -2 F -( + 1 keys.) 317.64 150.67 T -108 330 536 330 2 L -V -0.5 H -0 Z -N -108 313 536 313 2 L -V -N -FMENDPAGE -%%EndPage: "123" 135 -%%Page: "124" 136 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(124) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(14 Xkb K) 413.65 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -2 12 Q -(ply ignores that part of the request. The only exception is the) 108 712 T -1 F -(types) 402.96 712 T -2 F -( array. If) 427.62 712 T -1 F -(type_count) 472.26 712 T -2 F -( is) 524.92 712 T --0.04 (greater than the current) 108 699 P -1 F --0.04 (num_types) 222.45 699 P -2 F --0.04 ( field of the client map,) 273.77 699 P -1 F --0.04 (XkbAllocClientMap) 388.49 699 P -2 F --0.04 ( resizes the) 483.82 699 P -1 F -(types) 108 686 T -2 F -( array and resets the) 132.66 686 T -1 F -(num_types) 231.62 686 T -2 F -( field accordingly.) 282.95 686 T -(If) 108 665 T -1 F -(XkbAllocClientMap) 118.99 665 T -2 F -( is successful, it returns) 214.32 665 T -5 F --0.6 (Success) 329.64 665 S -2 F -(. Otherwise, it can return either) 375.84 665 T -5 F --0.6 (BadMatch) 108 652 S -2 F -(,) 160.8 652 T -5 F --0.6 (BadAlloc) 166.8 652 S -2 F -(, or) 219.6 652 T -5 F --0.6 (BadValue) 238.6 652 S -2 F -( errors.) 291.4 652 T -0 F -(14.5.2) 72 627 T -(Freeing a Client Map) 108 627 T -2 F -(To free memory used by the client map member of an) 108 607 T -5 F --0.6 (XkbDescRec) 369.61 607 S -2 F -( structure, use) 435.61 607 T -1 F -(XkbF) 108 594 T -(r) 133.33 594 T -(eeClientMap.) 137.56 594 T -2 11 Q -(v) 108 573.67 T -(oid) 113.28 573.67 T -3 F -(XkbFr) 130.09 573.67 T -(eeClientMap) 161.67 573.67 T -2 F -(\050) 222.16 573.67 T -1 F -(xkb, whic) 225.82 573.67 T -(h, fr) 267.2 573.67 T -(ee_all) 285.13 573.67 T -2 F -(\051) 312.02 573.67 T -(XkbDescPtr) 126 560.67 T -1 F -(xkb) 189 560.67 T -2 F -(;) 204.27 560.67 T -(/* k) 252 560.67 T -(e) 268.7 560.67 T -(yboard description containing client map to free */) 273.42 560.67 T -(unsigned int) 126 547.67 T -1 F -(whic) 189 547.67 T -(h) 209.61 547.67 T -2 F -(;) 215.11 547.67 T -(/* mask identifying components of map to free */) 252 547.67 T -(Bool) 126 534.67 T -1 F -(fr) 189 534.67 T -(ee_all) 195.93 534.67 T -2 F -(;) 222.81 534.67 T -(/*) 252 534.67 T -5 12 Q --0.6 (True) 263.31 534.67 S -2 11 Q -( => free all client components and map itself */) 289.71 534.67 T -1 12 Q --0.25 (XkbF) 108 515 P --0.25 (r) 133.33 515 P --0.25 (eeClientMap) 137.56 515 P -2 F --0.25 ( frees the components of client map specified by) 199.55 515 P -1 F --0.25 (which) 432.89 515 P -2 F --0.25 ( in the) 461.56 515 P -5 F --0.56 -0.6 (XkbDes-) 493.8 515 B --0.6 (cRec) 108 502 S -2 F -( structure specified by the) 134.4 502 T -1 F -(xkb) 261.37 502 T -2 F -( parameter and sets the corresponding structure com-) 278.03 502 T -(ponent values to) 108 489 T -5 F --0.6 (NULL) 189.66 489 S -2 F -(. The) 216.06 489 T -1 F -(which) 243.72 489 T -2 F -( parameter specifies a combination of the client map) 272.39 489 T -(masks shown in Table 14.3.) 108 476 T -(If) 108 455 T -1 F -(free_all) 118.99 455 T -2 F -( is) 156.32 455 T -5 F --0.6 (True) 170.33 455 S -2 F -(,) 196.73 455 T -1 F -(whic) 202.73 455 T -(h) 225.22 455 T -2 F -( is ignored;) 231.22 455 T -1 F -(XkbF) 288.22 455 T -(r) 313.55 455 T -(eeClientMap) 317.77 455 T -2 F -( frees every non-) 379.76 455 T -5 F --0.6 (NULL) 460.73 455 S -2 F -( structure) 487.13 455 T -(component in the client map, frees the) 108 442 T -5 F --0.6 (XkbClientMapRec) 294.64 442 S -2 F -( structure referenced by the) 393.64 442 T -1 F -(map) 108 429 T -2 F -( member of the) 128.66 429 T -1 F -(xkb) 204.65 429 T -2 F -( parameter, and sets the) 221.3 429 T -1 F -(map) 337.27 429 T -2 F -( member to) 357.94 429 T -5 F --0.6 (NULL.) 415.6 429 S -0 F -(14.5.3) 72 404 T -(Allocating an Empty Ser) 108 404 T -(ver Map) 246.16 404 T -2 F -(To allocate and initialize an empty server map description record, use) 108 384 T -1 F -(XkbAllocServer-) 445.26 384 T -(Map.) 108 371 T -2 11 Q -(Status) 108 350.67 T -3 F -(XkbAllocSer) 137.65 350.67 T -(v) 198.04 350.67 T -(erMap) 203.43 350.67 T -2 F -(\050) 235.19 350.67 T -1 F -(xkb, whic) 238.86 350.67 T -(h, count_acts) 280.24 350.67 T -2 F -(\051) 338.9 350.67 T -(XkbDescPtr) 126 337.67 T -1 F -(xkb) 216 337.67 T -2 F -(;) 231.27 337.67 T -(/* k) 279 337.67 T -(e) 295.7 337.67 T -(yboard description in which to allocate serv) 300.42 337.67 T -(er map */) 492.72 337.67 T -(unsigned int) 126 324.67 T -1 F -(whic) 216 324.67 T -(h) 236.61 324.67 T -2 F -(;) 242.11 324.67 T -(/* mask selecting map components to allocate */) 279 324.67 T -(unsigned int) 126 311.67 T -1 F -(count_acts) 216 311.67 T -2 F -(;) 263.66 311.67 T -(/* v) 279 311.67 T -(alue of) 295.53 311.67 T -1 F -(num_acts) 328.52 311.67 T -2 F -( \336eld in map to be allocated */) 370.68 311.67 T -1 12 Q --0.38 (XkbAllocServerMap) 108 292 P -2 F --0.38 ( allocates and initializes an empty server map in the) 205.31 292 P -1 F --0.38 (server) 452.85 292 P -2 F --0.38 ( field of the) 482.84 292 P -(keyboard description specified by) 108 279 T -1 F -(xkb) 273.3 279 T -2 F -(. The) 289.96 279 T -1 F -(which) 317.62 279 T -2 F -( parameter specifies the particular com-) 346.28 279 T -(ponents of the server map structure to allocate, as specified in Table 14.4.) 108 266 T -0 F -(Note) 126 78.67 T -2 11 Q -(The) 162 78.67 T -1 F -(min_key_code) 181.85 78.67 T -2 F -( and) 244.77 78.67 T -1 F -(max_key_code) 266.16 78.67 T -2 F -( \336elds of the) 330.9 78.67 T -1 F -(xkb) 388.35 78.67 T -2 F -( parameter must be le) 403.61 78.67 T -(g) 498.15 78.67 T -(al v) 503.59 78.67 T -(al-) 519.51 78.67 T -(ues. If the) 162 66.67 T -(y are not v) 205.52 66.67 T -(alid,) 251.98 66.67 T -1 F -(XkbAllocServerMap) 273.98 66.67 T -2 F -( returns) 363.18 66.67 T -5 12 Q --0.6 (BadValue) 399.23 66.67 S -2 11 Q -(.) 452.03 66.67 T -3 12 Q -(T) 228.38 246 T -(able 14.4 XkbAllocSer) 235.28 246 T -(v) 352.5 246 T -(erMap Masks) 358.38 246 T -1 F -(Mask) 109 226 T -(Ef) 249 226 T -(fect) 259.45 226 T -2 11 Q -(XkbExplicitComponentsMask) 109 211.67 T --0.46 (The) 249 211.67 P -1 F --0.46 (min_key_code) 268.4 211.67 P -2 F --0.46 ( and) 331.32 211.67 P -1 F --0.46 (max_key_code) 351.79 211.67 P -2 F --0.46 ( \336elds of the) 416.54 211.67 P -1 F --0.46 (xkb) 472.16 211.67 P -2 F --0.46 ( parameter) 487.43 211.67 P -(are used to allocate the) 249 200.67 T -1 F -(explicit) 352.55 200.67 T -2 F -(\336eld of the serv) 387.69 200.67 T -(er map.) 456.26 200.67 T -(XkbK) 109 186.67 T -(e) 135.61 186.67 T -(yActionsMask) 140.33 186.67 T --0.46 (The) 249 186.67 P -1 F --0.46 (min_key_code) 268.4 186.67 P -2 F --0.46 ( and) 331.32 186.67 P -1 F --0.46 (max_key_code) 351.79 186.67 P -2 F --0.46 ( \336elds of the) 416.54 186.67 P -1 F --0.46 (xkb) 472.16 186.67 P -2 F --0.46 ( parameter) 487.43 186.67 P -(are used to allocate the) 249 175.67 T -1 F -(key_acts) 352.55 175.67 T -2 F -(\336eld of the serv) 393.18 175.67 T -(er map. The) 461.75 175.67 T -1 F -(count_acts) 249 164.67 T -2 F -( parameter is used to allocate the) 296.66 164.67 T -1 F -(acts) 443.6 164.67 T -2 F -( \336eld of the) 461.32 164.67 T -(serv) 249 153.67 T -(er map.) 267.16 153.67 T -(XkbK) 109 139.67 T -(e) 135.61 139.67 T -(yBeha) 140.33 139.67 T -(viorsMask) 168.21 139.67 T --0.46 (The) 249 139.67 P -1 F --0.46 (min_key_code) 268.4 139.67 P -2 F --0.46 ( and) 331.32 139.67 P -1 F --0.46 (max_key_code) 351.79 139.67 P -2 F --0.46 ( \336elds of the) 416.54 139.67 P -1 F --0.46 (xkb) 472.16 139.67 P -2 F --0.46 ( parameter) 487.43 139.67 P -(are used to allocate the) 249 128.67 T -1 F -(behaviors) 352.55 128.67 T -2 F -(\336eld of the serv) 398.69 128.67 T -(er map.) 467.26 128.67 T -(XkbV) 109 114.67 T -(irtualModMapMask) 135.22 114.67 T --0.46 (The) 249 114.67 P -1 F --0.46 (min_key_code) 268.4 114.67 P -2 F --0.46 ( and) 331.32 114.67 P -1 F --0.46 (max_key_code) 351.79 114.67 P -2 F --0.46 ( \336elds of the) 416.54 114.67 P -1 F --0.46 (xkb) 472.16 114.67 P -2 F --0.46 (parameter) 489.73 114.67 P -(are used to allocate the) 249 103.67 T -1 F -(vmodmap) 352.55 103.67 T -2 F -(\336eld of the serv) 398.07 103.67 T -(er map.) 466.64 103.67 T -108 238 536 238 2 L -V -0.5 H -0 Z -N -108 221 536 221 2 L -V -N -FMENDPAGE -%%EndPage: "124" 136 -%%Page: "125" 137 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(125) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(14 Xkb K) 413.65 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -2 12 Q -(If the server map of the keyboard description is not) 108 712 T -5 F --0.6 (NULL) 356.62 712 S -2 F -( and any fields are already allo-) 383.02 712 T -(cated in the server map,) 108 699 T -1 F -(XkbAllocServerMap) 225.3 699 T -2 F -( does not overwrite the existing values. The) 322.61 699 T -(only exception is with the) 108 686 T -1 F -(acts) 235 686 T -2 F -(array. If the) 257.33 686 T -1 F -(count_acts) 316.63 686 T -2 F -(parameter is greater than the cur-) 371.63 686 T -(rent) 108 673 T -1 F -(num_acts) 129.66 673 T -2 F -(field of the server map,) 178.66 673 T -1 F -(XkbAllocServerMap) 293.29 673 T -2 F -( resizes the) 390.6 673 T -1 F -(acts) 446.92 673 T -2 F -(array and) 469.25 673 T -(resets the) 108 660 T -1 F -(num_acts) 155.99 660 T -2 F -(field accordingly.) 204.98 660 T -(If) 108 639 T -1 F -(XkbAllocServerMap) 118.99 639 T -2 F -( is successful, it returns) 216.3 639 T -5 F --0.6 (Success) 331.62 639 S -2 F -(. Otherwise, it can return either) 377.82 639 T -5 F --0.6 (BadMatch) 108 626 S -2 F -( or) 160.8 626 T -5 F --0.6 (BadAlloc) 176.8 626 S -2 F -( errors.) 229.6 626 T -0 F -(14.5.4) 72 601 T -(Freeing a Ser) 108 601 T -(ver Map) 184.15 601 T -2 F -(To free memory used by the server member of an) 108 581 T -5 F --0.6 (XkbDescRec) 348.6 581 S -2 F -( structure, use) 414.6 581 T -1 F -(XkbF) 108 568 T -(r) 133.33 568 T -(eeServerMap.) 137.56 568 T -2 11 Q -(v) 108 547.67 T -(oid) 113.28 547.67 T -3 F -(XkbFr) 130.09 547.67 T -(eeSer) 161.67 547.67 T -(v) 187.21 547.67 T -(erMap) 192.6 547.67 T -2 F -(\050) 224.37 547.67 T -1 F -(xkb, whic) 228.03 547.67 T -(h, fr) 269.41 547.67 T -(ee_all) 287.34 547.67 T -2 F -(\051) 314.23 547.67 T -(XkbDescPtr) 126 534.67 T -1 F -(xkb) 189 534.67 T -2 F -(;) 204.27 534.67 T -(/* k) 252 534.67 T -(e) 268.7 534.67 T -(yboard description containing serv) 273.42 534.67 T -(er map to free */) 425.7 534.67 T -(unsigned int) 126 521.67 T -1 F -(whic) 189 521.67 T -(h) 209.61 521.67 T -2 F -(;) 215.11 521.67 T -(/* mask identifying components of map to free */) 252 521.67 T -(Bool) 126 508.67 T -1 F -(fr) 189 508.67 T -(ee_all) 195.93 508.67 T -2 F -(;) 222.81 508.67 T -(/*) 252 508.67 T -5 12 Q --0.6 (True) 263.31 508.67 S -2 11 Q -( => free all serv) 289.71 508.67 T -(er map components and serv) 359.37 508.67 T -(er itself */) 485.07 508.67 T -2 12 Q -(The) 108 489 T -1 F -(XkbF) 129.66 489 T -(r) 154.99 489 T -(eeServerMap) 159.22 489 T -2 F -( function frees the specified components of server map in the) 223.19 489 T -5 F --0.6 (XkbDescRec) 108 476 S -2 F -( structure specified by the) 174 476 T -1 F -(xkb) 300.97 476 T -2 F -( parameter and sets the corresponding struc-) 317.63 476 T -(ture component values to) 108 463 T -5 F --0.6 (NULL) 231.98 463 S -2 F -(. The) 258.38 463 T -1 F -(which) 286.04 463 T -2 F -( parameter specifies a combination of the) 314.71 463 T -(server map masks and is a bitwise inclusive OR of the masks listed in Table 14.4. If) 108 450 T -1 F --0.26 (free_all) 108 437 P -2 F --0.26 ( is) 145.33 437 P -5 F --0.57 -0.6 (True) 158.82 437 B -2 F --0.26 (,) 185.22 437 P -1 F --0.26 (whic) 190.96 437 P --0.26 (h) 213.45 437 P -2 F --0.26 ( is ignored and) 219.45 437 P -1 F --0.26 (XkbF) 292.41 437 P --0.26 (r) 317.74 437 P --0.26 (eeServerMap) 321.97 437 P -2 F --0.26 ( frees every non-) 385.94 437 P -5 F --0.57 -0.6 (NULL) 466.13 437 B -2 F --0.26 ( structure) 492.53 437 P -(component in the server map, frees the) 108 424 T -5 F --0.6 (XkbServerMapRec) 297.29 424 S -2 F -( structure referenced by the) 396.29 424 T -1 F -(server) 108 411 T -2 F -( member of the) 137.99 411 T -1 F -(xkb) 213.97 411 T -2 F -( parameter, and sets the) 230.63 411 T -1 F -(server) 346.6 411 T -2 F -( member to) 376.58 411 T -5 F --0.6 (NULL.) 434.24 411 S -FMENDPAGE -%%EndPage: "125" 137 -%%Page: "126" 138 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(126) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(15 Xkb Client K) 384.01 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -0 14 Q -(15) 72 710.67 T -(Xkb Client K) 108 710.67 T -(e) 190.25 710.67 T -(yboar) 197.82 710.67 T -(d Mapping) 235.67 710.67 T -2 12 Q -(The Xkb client map for a keyboard is the collection of information a client needs to inter-) 108 688 T --0.42 (pret key events from the keyboard. It contains a global list of key types and an array of key) 108 675 P --0.35 (symbol maps, each of which describes the symbols bound to a key and the rules to be used) 108 662 P -(to interpret those symbols.) 108 649 T -(Figure 15.1 shows the relationships between elements in the client map:) 108 628 T -3 F -(Figur) 240.82 93 T -(e 15.1 Xkb Client Map) 269.27 93 T -63.37 114 548.63 624 C -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -86.75 464.58 167.75 613.58 R -0.5 H -0 Z -0 X -0 0 0 1 0 0 0 K -N -86.75 437.08 167.75 455.08 R -7 X -V -2 10 Q -0 X -(XkbClientMapRec) 89.47 448.41 T -86.75 538.08 167.75 538.08 2 L -7 X -V -0 X -N -86.75 520.08 167.75 520.08 2 L -7 X -V -0 X -N -86.75 502.08 167.75 502.08 2 L -7 X -V -0 X -N -86.75 484.08 167.75 484.08 2 L -7 X -V -0 X -N -(num_syms) 104.36 527.08 T -(syms) 104.36 509.08 T -(key_sym_map) 104.36 491.08 T -(modmap) 104.36 473.08 T -86.5 577.83 167.5 577.83 2 L -7 X -V -0 X -N -86.75 559.83 167.75 559.83 2 L -7 X -V -0 X -N -86.75 595.83 167.75 595.83 2 L -7 X -V -0 X -N -(num_types) 104.36 583.83 T -(types) 104.36 565.83 T -261 462.58 342 589.08 R -7 X -V -0 X -N -256 457.58 337 584.08 R -7 X -V -0 X -N -251 451.58 332 580.58 R -7 X -V -0 X -N -251 414.08 332 442.58 R -7 X -V -0 X -(XkbKeyTypeRec\050s\051) 251.24 435.91 T -(\050array\051) 277.9 425.91 T -251 523.58 332 523.58 2 L -7 X -V -0 X -N -251 505.58 332 505.58 2 L -7 X -V -0 X -N -251 487.58 332 487.58 2 L -7 X -V -0 X -N -251 469.58 332 469.58 2 L -7 X -V -0 X -N -(map) 269 514.58 T -(preserve) 269 496.58 T -(name) 269 478.58 T -(level_names) 269 460.58 T -232.47 569.58 232.47 572.55 242.84 569.58 232.47 566.6 4 Y -N -232.47 569.58 232.47 572.55 242.84 569.58 232.47 566.6 4 Y -V -168.88 569.58 232.22 569.58 2 L -7 X -V -0 X -N -2 12 Q -(...) 100.58 127.89 T -2 10 Q -(size_syms) 104.21 547.27 T -(size_types) 104.08 601.14 T -(map_count) 270.08 531.02 T -396.5 384.58 477.5 402.58 R -7 X -V -0 X -N -392.5 380.83 473.5 398.83 R -7 X -V -0 X -N -388.25 377.33 469.25 395.33 R -7 X -V -0 X -N -383.25 340.83 469.5 364.83 R -7 X -V -0 X -(KeySym\050s\051) 403.6 358.16 T -(\050array\051) 412.78 348.16 T -384.25 373.58 465.25 391.58 R -7 X -V -0 X -N -369.72 383.25 369.72 386.22 380.1 383.25 369.72 380.27 4 Y -N -369.72 383.25 369.72 386.22 380.1 383.25 369.72 380.27 4 Y -V -168 511.5 208.5 511.5 208.5 383.25 369.47 383.25 4 L -N -197.98 353.77 198.12 356.74 208.35 353.29 197.84 350.8 4 Y -N -197.98 353.77 198.12 356.74 208.35 353.29 197.84 350.8 4 Y -V -168 492.75 187.5 492.75 187.5 354.25 197.73 353.78 4 L -N -(KeyCode) 101.11 365.33 T -203.22 367.5 203.22 370.47 213.59 367.5 203.22 364.52 4 Y -8 X -N -203.22 367.5 203.22 370.47 213.59 367.5 203.22 364.52 4 Y -V -151.5 367.5 202.97 367.5 2 L -N -222.5 157.83 303.5 175.83 R -7 X -V -0 X -N -218.5 154.08 299.5 172.08 R -7 X -V -0 X -N -214.25 150.58 295.25 168.58 R -7 X -V -0 X -N -209.25 114.08 295.5 138.08 R -7 X -V -0 X -(unsigned char) 224.46 131.41 T -(\050array\051) 238.77 121.41 T -210.25 146.83 291.25 164.83 R -7 X -V -0 X -N -201.72 169.5 201.72 172.47 212.09 169.5 201.72 166.52 4 Y -8 X -N -201.72 169.5 201.72 172.47 212.09 169.5 201.72 166.52 4 Y -V -165.75 367.5 165.75 169.5 201.47 169.5 3 L -N -194.97 156.75 194.97 159.72 205.34 156.75 194.97 153.77 4 Y -0 X -N -194.97 156.75 194.97 159.72 205.34 156.75 194.97 153.77 4 Y -V -168 474 180 474 180 156.75 194.72 156.75 4 L -N -218.75 242.58 299.75 371.33 R -7 X -V -0 X -N -213.75 236.83 294.75 365.58 R -7 X -V -0 X -N -208.75 231.58 289.75 359.83 R -7 X -V -0 X -N -208.75 192.83 289.75 221.33 R -7 X -V -0 X -(XkbSymMapRec\050s\051) 209.26 214.66 T -(\050array\051) 235.65 204.66 T -208.75 286.33 289.75 286.33 2 L -7 X -V -0 X -N -208.75 268.33 289.75 268.33 2 L -7 X -V -0 X -N -208.75 250.33 289.75 250.33 2 L -7 X -V -0 X -N -(group_info) 226.75 277.33 T -(offset) 226.75 241.33 T -(kt_index[3]) 227.25 291.83 T -(width) 227 257.58 T -208.75 340.33 289.75 340.33 2 L -7 X -V -0 X -N -208.75 322.33 289.75 322.33 2 L -7 X -V -0 X -N -208.75 304.33 289.75 304.33 2 L -7 X -V -0 X -N -(kt_index[1]) 226.75 328.33 T -(kt_index[0]) 227.25 345.83 T -(kt_index[2]) 227 311.58 T -250.09 587.25 250.09 590.23 260.47 587.25 250.09 584.28 4 Y -8 X -N -250.09 587.25 250.09 590.23 260.47 587.25 250.09 584.28 4 Y -V -293.62 347.25 324.37 347.25 324.37 409.74 239.62 409.74 239.62 587.25 249.84 587.25 6 L -N -376.47 394.5 376.47 397.48 386.85 394.5 376.47 391.52 4 Y -N -376.47 394.5 376.47 397.48 386.85 394.5 376.47 391.52 4 Y -V -291.75 242.25 332.65 242.25 332.65 394.5 376.22 394.5 4 L -N -398.37 464.25 479.37 482.25 R -7 X -V -0 X -N -394.37 460.5 475.37 478.5 R -7 X -V -0 X -N -390.12 457 471.12 475 R -7 X -V -0 X -N -385.12 420.5 471.37 444.5 R -7 X -V -0 X -(Atom\050s\051) 411.58 437.83 T -(\050array\051) 414.65 427.83 T -386.12 453.25 467.12 471.25 R -7 X -V -0 X -N -373.09 464.25 373.09 467.23 383.47 464.25 373.09 461.27 4 Y -N -373.09 464.25 373.09 467.23 383.47 464.25 373.09 461.27 4 Y -V -333.37 464.25 372.84 464.25 2 L -7 X -V -0 X -N -251 542.95 332 542.95 2 L -7 X -V -0 X -N -(num_levels) 270.08 550.39 T -251 561.95 332 561.95 2 L -7 X -V -0 X -N -(mods) 270.08 569.39 T -368.97 541.5 368.97 544.47 379.35 541.5 368.97 538.52 4 Y -N -368.97 541.5 368.97 544.47 379.35 541.5 368.97 538.52 4 Y -V -332.25 515.25 356.25 515.25 356.25 541.5 368.72 541.5 4 L -N -398.87 543 479.87 561 R -7 X -V -0 X -N -394.87 539.25 475.87 557.25 R -7 X -V -0 X -N -390.62 535.75 471.62 553.75 R -7 X -V -0 X -N -382.62 499.25 480.87 523.25 R -7 X -V -0 X -(XkbKTMapEntryRec\050s\051) 383.15 516.58 T -(\050array\051) 418.15 506.58 T -386.62 532 467.62 550 R -7 X -V -0 X -N -250.38 587.25 250.38 590.14 260.47 587.25 250.38 584.35 4 Y -N -250.38 587.25 250.38 590.14 260.47 587.25 250.38 584.35 4 Y -V -247.88 587.25 250.13 587.25 2 L -N -376.88 394.37 376.88 397.27 386.97 394.37 376.88 391.48 4 Y -N -376.88 394.37 376.88 397.27 386.97 394.37 376.88 391.48 4 Y -V -374.38 394.37 376.63 394.37 2 L -N -203.38 367.62 203.38 370.52 213.47 367.62 203.38 364.73 4 Y -N -203.38 367.62 203.38 370.52 213.47 367.62 203.38 364.73 4 Y -V -200.88 367.62 203.13 367.62 2 L -N -202 169.5 202 172.39 212.09 169.5 202 166.6 4 Y -N -202 169.5 202 172.39 212.09 169.5 202 166.6 4 Y -V -199.5 169.5 201.75 169.5 2 L -N -0 0 612 792 C -FMENDPAGE -%%EndPage: "126" 138 -%%Page: "127" 139 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(127) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(15 Xkb Client K) 384.01 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -0 12 Q -(15.1) 72 712 T -(The XkbClientMapRec Structure) 108 712 T -2 F -(The) 108 692 T -1 F -(map) 129.66 692 T -2 F -(field of the complete Xkb keyboard description \050see section 6.1\051 is a pointer to) 153.32 692 T -(the Xkb client map, which is of type) 108 679 T -5 F --0.6 (XkbClientMapRec) 285.65 679 S -2 F -(:) 384.65 679 T -2 11 Q -(typedef struct {) 126 658.67 T -(/* Client Map */) 342 658.67 T -(unsigned char) 144 645.67 T -(size_types;) 234 645.67 T -(/* # occupied entries in) 342 645.67 T -1 F -(types) 447.4 645.67 T -2 F -( */) 470.01 645.67 T -(unsigned char) 144 632.67 T -(num_types;) 234 632.67 T -(/* # entries in) 342 632.67 T -1 F -(types) 404.94 632.67 T -2 F -( */) 427.55 632.67 T -(XkbK) 144 619.67 T -(e) 170.61 619.67 T -(yT) 175.33 619.67 T -(ypePtr) 186.67 619.67 T -(types;) 234 619.67 T --0.09 (/* v) 342 619.67 P --0.09 (ector of k) 358.55 619.67 P --0.09 (e) 400.42 619.67 P --0.09 (y types used by this k) 405.14 619.67 P --0.09 (e) 499.62 619.67 P --0.09 (ymap */) 504.34 619.67 P -(unsigned short) 144 606.67 T -(size_syms;) 234 606.67 T -(/* length of the) 342 606.67 T -1 F -(syms) 411.66 606.67 T -2 F -( array */) 433.05 606.67 T -(unsigned short) 144 593.67 T -(num_syms;) 234 593.67 T -(/* # entries in) 342 593.67 T -1 F -(syms) 404.94 593.67 T -2 F -( */) 426.33 593.67 T -(K) 144 580.67 T -(e) 151.67 580.67 T -(ySym *) 156.39 580.67 T -(syms;) 234 580.67 T -(/* linear 2d tables of k) 342 580.67 T -(e) 440.57 580.67 T -(ysyms, 1 per k) 445.29 580.67 T -(e) 509.34 580.67 T -(y */) 514.06 580.67 T -(XkbSymMapPtr) 144 567.67 T -(k) 234 567.67 T -(e) 239.39 567.67 T -(y_sym_map;) 244.11 567.67 T -(/* 1 per k) 342 567.67 T -(e) 383.74 567.67 T -(ycode, maps k) 388.46 567.67 T -(e) 451.59 567.67 T -(ycode to) 456.31 567.67 T -1 F -(syms) 496.64 567.67 T -2 F -( */) 518.02 567.67 T -(unsigned char) 144 554.67 T -( *) 205.4 554.67 T -(modmap;) 234 554.67 T -(/* 1 per k) 342 554.67 T -(e) 383.74 554.67 T -(ycode, real mods bound to k) 388.46 554.67 T -(e) 513.01 554.67 T -(y */) 517.72 554.67 T -(}) 126 541.67 T -3 F -(XkbClientMapRec) 134.03 541.67 T -2 F -(, *XkbClientMapPtr;) 222.63 541.67 T -2 12 Q --0.24 (The following sections describe each of the elements of the) 108 522 P -5 F --0.54 -0.6 (XkbClientMapRec) 393.5 522 B -2 F --0.24 ( structure) 492.5 522 P -(in more detail.) 108 509 T -0 F -(15.2) 72 484 T -(K) 108 484 T -(e) 116.48 484 T -(y T) 122.98 484 T -(ypes) 139.6 484 T -2 F -(Key types are used to determine the shift level of a key given the current state of the key-) 108 464 T -(board. The set of all possible key types for the Xkb keyboard description are held in the) 108 451 T -1 F --0.08 (types) 108 438 P -2 F --0.08 ( field of the client map, whose total size is stored in) 132.66 438 P -1 F --0.08 (size_types) 382.01 438 P -2 F --0.08 (, and whose total num-) 430.67 438 P -(ber of valid entries is stored in) 108 425 T -1 F -(num_types) 256.98 425 T -2 F -(. Key types are defined using the following) 308.3 425 T -(structures:) 108 412 T -2 11 Q -(typedef struct {) 126 391.67 T -(/* K) 315 391.67 T -(e) 333.98 391.67 T -(y T) 338.69 391.67 T -(ype */) 352.79 391.67 T -(XkbModsRec) 144 378.67 T -(mods;) 243 378.67 T -(/* modi\336ers used to compute shift le) 315 378.67 T -(v) 475.45 378.67 T -(el */) 480.78 378.67 T -(unsigned char) 144 365.67 T -(num_le) 243 365.67 T -(v) 275.73 365.67 T -(els;) 281.06 365.67 T -(/* total # shift le) 315 365.67 T -(v) 386.84 365.67 T -(els, do not modify directly */) 392.18 365.67 T -(unsigned char) 144 352.67 T -(map_count;) 243 352.67 T -(/* # entries in) 315 352.67 T -1 F -(map,) 377.94 352.67 T -(preserve) 402.38 352.67 T -2 F -( \050if non-) 440.26 352.67 T -5 12 Q --0.6 (NULL) 476.3 352.67 S -2 11 Q -(\051 */) 502.7 352.67 T -(XkbKTMapEntryPtr) 144 339.67 T -(map;) 243 339.67 T -(/* v) 315 339.67 T -(ector of modi\336ers for each shift le) 331.64 339.67 T -(v) 481.06 339.67 T -(el */) 486.39 339.67 T -(XkbModsPtr) 144 326.67 T -(preserv) 243 326.67 T -(e;) 275.21 326.67 T --0.11 (/* mods to preserv) 315 326.67 P --0.11 (e for corresponding) 396.07 326.67 P -1 F --0.11 (map) 484.62 326.67 P -2 F --0.11 ( entry */) 503.56 326.67 P -(Atom) 144 313.67 T -(name;) 243 313.67 T -(/* name of k) 315 313.67 T -(e) 370.19 313.67 T -(y type */) 374.91 313.67 T -(Atom *) 144 300.67 T -(le) 243 300.67 T -(v) 250.67 300.67 T -(el_names;) 256 300.67 T -(/* array of names of each shift le) 315 300.67 T -(v) 459.21 300.67 T -(el */) 464.55 300.67 T -(}) 126 287.67 T -3 F -(XkbK) 134.03 287.67 T -(eyT) 162.49 287.67 T -(ypeRec) 179.39 287.67 T -2 F -(, *XkbK) 213.6 287.67 T -(e) 251.21 287.67 T -(yT) 255.93 287.67 T -(ypePtr;) 267.27 287.67 T -(typedef struct {) 126 267.67 T -(/* Modi\336ers for a k) 288 267.67 T -(e) 373.44 267.67 T -(y type */) 378.16 267.67 T -(Bool) 144 254.67 T -(acti) 243 254.67 T -(v) 258.61 254.67 T -(e;) 263.94 254.67 T -(/*) 288 254.67 T -5 F --0.33 (True) 299.31 254.67 S -2 F -( => entry acti) 324.39 254.67 T -(v) 383.26 254.67 T -(e when determining shift le) 388.6 254.67 T -(v) 508.69 254.67 T -(el */) 514.03 254.67 T -(unsigned char) 144 241.67 T -(le) 243 241.67 T -(v) 250.67 241.67 T -(el;) 256 241.67 T -(/* shift le) 288 241.67 T -(v) 329.28 241.67 T -(el if modi\336ers match) 334.62 241.67 T -1 F -(mods) 428.72 241.67 T -2 F -( */) 451.94 241.67 T -(XkbModsRec) 144 228.67 T -(mods;) 243 228.67 T -(/* mods needed for this le) 288 228.67 T -(v) 401.68 228.67 T -(el to be selected */) 407.02 228.67 T -(}) 126 215.67 T -3 F -(XkbKTMapEntryRec) 134.03 215.67 T -2 F -(,*XkbKTMapEntryPtr;) 237.31 215.67 T -2 12 Q --0.22 (The) 108 196 P -1 F --0.22 (mods) 129.43 196 P -2 F --0.22 ( field of a key type is an) 154.77 196 P -5 F --0.5 -0.6 (XkbModsRec) 271.61 196 B -2 F --0.22 ( \050see section 7.2\051 specifying the modifiers) 337.61 196 P -(the key type uses when calculating the shift level, and can be composed of both the core) 108 183 T -(modifiers and virtual modifiers. To set the modifiers associated with a key type, modify) 108 170 T --0.07 (the) 108 157 P -1 F --0.07 (real_mods) 125.6 157 P -2 F --0.07 ( and) 176.26 157 P -1 F --0.07 (vmods) 199.46 157 P -2 F --0.07 ( fields of the) 230.12 157 P -1 F --0.07 (mods) 293.17 157 P -5 F --0.15 -0.6 (XkbModsRec) 321.44 157 B -2 F --0.07 ( accordingly. The) 387.44 157 P -1 F --0.07 (mask) 474.55 157 P -2 F --0.07 ( field of) 499.21 157 P -(the) 108 144 T -5 F --0.6 (XkbModsRec) 125.66 144 S -2 F -( is reserved for use by Xkb and is calculated from the) 191.66 144 T -1 F -(real_mods) 450.94 144 T -2 F -( and) 501.6 144 T -1 F -(vmods) 108 131 T -2 F -( fields.) 138.66 131 T -(The) 108 110 T -1 F -(num_levels) 129.66 110 T -2 F -( field holds the total number of shift levels for the key type. Xkb uses) 183.65 110 T -1 F -(num_levels) 108 97 T -2 F -( to ensure the array of symbols bound to a key is large enough. Do not modify) 161.99 97 T -1 F --0.28 (num_levels) 108 84 P -2 F --0.28 ( directly to change the number if shift levels for a key type. Instead, use) 161.99 84 P -1 F --0.28 (XkbRe-) 504.68 84 P -(sizeK) 108 71 T -(e) 133.58 71 T -(yT) 138.55 71 T -(ype) 149.66 71 T -2 F -( \050see section 15.2.3\051.) 166.32 71 T -FMENDPAGE -%%EndPage: "127" 139 -%%Page: "128" 140 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(128) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(15 Xkb Client K) 384.01 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -2 12 Q --0.35 (The) 108 712 P -1 F --0.35 (map) 129.31 712 P -2 F --0.35 ( field is a vector of) 149.97 712 P -5 F --0.77 -0.6 (XkbKTMapEntryRec) 241.19 712 B -2 F --0.35 ( structures, with) 346.79 712 P -1 F --0.35 (map_count) 425.73 712 P -2 F --0.35 ( entries, that) 479.06 712 P -(specify the modifier combinations for each possible shift level. Each map entry contains) 108 699 T -(an) 108 686 T -1 F -(active) 122.33 686 T -2 F -( field, a) 150.98 686 T -1 F -(mods) 190.31 686 T -2 F -( field, and a) 215.64 686 T -1 F -(level) 275.29 686 T -2 F -( field. The) 297.95 686 T -1 F -(active) 350.6 686 T -2 F -( field determines whether the) 379.26 686 T --0.49 (modifier combination listed in the) 108 673 P -1 F --0.49 (mods) 271.91 673 P -2 F --0.49 ( field should be considered when determining shift) 297.24 673 P --0.02 (level. If) 108 660 P -1 F --0.02 (active) 148.28 660 P -2 F --0.02 ( is) 176.94 660 P -5 F --0.04 -0.6 (False) 190.91 660 B -2 F --0.02 (, this) 223.91 660 P -1 F --0.02 (map) 250.21 660 P -2 F --0.02 ( entry is ignored. If) 270.88 660 P -1 F --0.02 (active) 366.11 660 P -2 F --0.02 ( is) 394.76 660 P -5 F --0.04 -0.6 (True) 408.73 660 B -2 F --0.02 (, the) 435.13 660 P -1 F --0.02 (level) 458.76 660 P -2 F --0.02 ( field of the) 481.42 660 P -1 F -(map) 108 647 T -2 F -(entry specifies the shift level to use when the current modifier combination matches) 131.66 647 T -(the combination specified in the) 108 634 T -1 F -(mods) 264.98 634 T -2 F -( field of the) 290.32 634 T -1 F -(map) 348.97 634 T -2 F -( entry.) 369.64 634 T --0.43 (Any combination of modifiers not explicitly listed somewhere in the) 108 613 P -1 F --0.43 (map) 435.71 613 P -2 F --0.43 ( yields shift level) 456.38 613 P -(one. In addition,) 108 600 T -1 F -(map) 189.66 600 T -2 F -( entries specifying unbound virtual modifiers are not considered.) 210.32 600 T -(Any modifiers specified in) 108 579 T -1 F -(mods) 239.32 579 T -2 F -( are normally) 264.65 579 T -1 F -(consumed) 331.63 579 T -2 F -( by) 379.62 579 T -1 F -(XkbT) 397.62 579 T -(r) 422.29 579 T -(anslateK) 426.78 579 T -(e) 469.03 579 T -(yCode) 474 579 T -2 F -( \050see) 504.66 579 T -(section 12.1.3\051. For those rare occasions a modifier) 108 566 T -1 F -(should) 356.95 566 T -2 F -( be considered despite having) 388.96 566 T -(been used to look up a symbol, key types include an optional) 108 553 T -1 F -(pr) 403.64 553 T -(eserve) 413.87 553 T -2 F -( field. If a) 444.52 553 T -1 F -(preserve) 494.83 553 T -2 F --0.02 (member of a key type is not) 108 540 P -5 F --0.04 -0.6 (NULL) 244.86 540 B -2 F --0.02 (, it represents a list of modifiers where each entry corre-) 271.26 540 P --0.27 (sponds directly to one of the key type\325s) 108 527 P -1 F --0.27 (map) 297.8 527 P -2 F --0.27 (. Each entry lists the modifiers that should) 318.46 527 P -1 F --0.27 (not) 521.94 527 P -2 F -(be consumed if the matching map entry is used to determine shift level.) 108 514 T -(Each shift level has a name and these names are held in the) 108 493 T -1 F -(level_names) 394.93 493 T -2 F -( array, whose) 454.25 493 T -(length is) 108 480 T -1 F -(num_levels) 152 480 T -2 F -(. The type itself also has a name, which is held in the) 205.99 480 T -1 F -(name) 462.96 480 T -2 F -( field.) 488.95 480 T --0.36 (For example, consider how the server handles the following possible symbolic description) 108 459 P -(of a possible key type \050note that the format used to specify keyboard mappings in the) 108 446 T --0.17 (server database is not specified by the Xkb extension, although this format is one possible) 108 433 P -(example\051:) 108 420 T -(The) 108 113 T -1 F -(name) 129.66 113 T -2 F -( of the example key type is \322ALPHATHREE,\323 and the modifiers it pays atten-) 155.65 113 T -(tion to are) 108 100 T -5 F --0.6 (Shift) 159.66 100 S -2 F -(,) 192.66 100 T -5 F --0.6 (Lock) 198.66 100 S -2 F -(, and the virtual modifier) 225.06 100 T -5 F --0.6 (LevelThree) 347.71 100 S -2 F -(. There are three shift lev-) 413.71 100 T -(els. The name of shift level one is \322Base,\323 the name of shift level two is \322Caps,\323 and the) 108 87 T -(name of shift level three is \322Level3.\323) 108 74 T -3 F -(T) 214.35 400 T -(able 15.1 Example K) 221.25 400 T -(ey T) 329.96 400 T -(ype) 351.4 400 T -1 F -(Symbolic Description) 109 379 T -(K) 297 379 T -(e) 304.58 379 T -(y T) 309.55 379 T -(ype Data Structur) 323.66 379 T -(e) 409.21 379 T -2 11 Q -(type \322) 109 363.67 T -(ALPHA) 134.7 363.67 T -(THREE\323 {) 170.14 363.67 T -(Xkb->map->types[i].name) 297 363.67 T -(modi\336ers = Shift+Lock+Le) 127 348.67 T -(v) 248 348.67 T -(elThree;) 253.34 348.67 T -(Xkb->map->types[i].mods) 297 348.67 T -(map[None]= Le) 127 333.67 T -(v) 197.38 333.67 T -(el1;) 202.71 333.67 T -(Xkb->map->types[i].map[0]) 297 333.67 T -(map[Lock]= Le) 127 318.67 T -(v) 196.16 318.67 T -(el1;) 201.49 318.67 T -(Xkb->map->types[i].map[1]) 297 318.67 T -(map[Shift]= Le) 127 303.67 T -(v) 194.95 303.67 T -(el2;) 200.28 303.67 T -(Xkb->map->types[i].map[2]) 297 303.67 T -(map[Le) 127 288.67 T -(v) 160.93 288.67 T -(elThree]= Le) 166.27 288.67 T -(v) 223.81 288.67 T -(el3;) 229.15 288.67 T -(Xkb->map->types[i].map[3]) 297 288.67 T -(map[Shift+Le) 127 273.67 T -(v) 188.53 273.67 T -(elThree]= Le) 193.87 273.67 T -(v) 251.41 273.67 T -(el3;) 256.74 273.67 T -(Xkb->map->types[i].map[4]) 297 273.67 T -(preserv) 127 258.67 T -(e[None]= None;) 159.21 258.67 T -(Xkb->map->types[i].perserv) 297 258.67 T -(e[0]) 423.18 258.67 T -(preserv) 127 243.67 T -(e[Lock]= Lock;) 159.21 243.67 T -(Xkb->map->types[i].preserv) 297 243.67 T -(e[1]) 423.18 243.67 T -(preserv) 127 228.67 T -(e[Shift]= None;) 159.21 228.67 T -(Xkb->map->types[i].preserv) 297 228.67 T -(e[2]) 423.18 228.67 T -(preserv) 127 213.67 T -(e[Le) 159.21 213.67 T -(v) 179.09 213.67 T -(elThree]= None;) 184.42 213.67 T -(Xkb->map->types[i].preserv) 297 213.67 T -(e[3]) 423.18 213.67 T -(preserv) 127 198.67 T -(e[Shift+Le) 159.21 198.67 T -(v) 206.68 198.67 T -(el3]= None;) 212.02 198.67 T -(Xkb->map->types[i].preserv) 297 198.67 T -(e[4]) 423.18 198.67 T -(le) 127 183.67 T -(v) 134.67 183.67 T -(el_name[Le) 140 183.67 T -(v) 192.26 183.67 T -(el1]= \322Base\323;) 197.6 183.67 T -(Xkb->map->types[i].le) 297 183.67 T -(v) 398.64 183.67 T -(el_names[0]) 403.98 183.67 T -(le) 127 168.67 T -(v) 134.67 168.67 T -(el_name[Le) 140 168.67 T -(v) 192.26 168.67 T -(el2]= \322Caps\323;) 197.6 168.67 T -(Xkb->map->types[i].le) 297 168.67 T -(v) 398.64 168.67 T -(el_names[1]) 403.98 168.67 T -(le) 127 153.67 T -(v) 134.67 153.67 T -(el_name[Le) 140 153.67 T -(v) 192.26 153.67 T -(el3]= \322Le) 197.6 153.67 T -(v) 239.87 153.67 T -(el3\323;) 245.21 153.67 T -(Xkb->map->types[i].le) 297 153.67 T -(v) 398.64 153.67 T -(el_names[2]) 403.98 153.67 T -(};) 109 138.67 T -108 392 462 392 2 L -V -0.5 H -0 Z -N -108 374 462 374 2 L -V -N -FMENDPAGE -%%EndPage: "128" 140 -%%Page: "129" 141 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(129) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(15 Xkb Client K) 384.01 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -2 12 Q -(Given the combination of the) 108 712 T -1 F -(map) 251.65 712 T -2 F -( and) 272.32 712 T -1 F -(preserve) 295.64 712 T -2 F -( specifications, there are five) 336.96 712 T -1 F -(map) 478.25 712 T -2 F -( entries.) 498.91 712 T -(The first map entry specifies that shift level one is to be used if no modifiers are set. The) 108 699 T --0.02 (second entry specifies the) 108 686 P -5 F --0.05 -0.6 (Lock) 234.55 686 B -2 F --0.02 ( modifier alone also yields shift level one. The third entry) 260.95 686 P -(specifies the) 108 673 T -5 F --0.6 (Shift) 170.65 673 S -2 F -( modifier alone yields shift level two. The fourth and fifth entries) 203.65 673 T -(specify that the virtual) 108 660 T -5 F --0.6 (LevelThree) 218.65 660 S -2 F -( modifier alone, or in combination with the) 284.65 660 T -5 F --0.6 (Shift) 494.3 660 S -2 F -(modifier, yields shift level three.) 108 647 T -0 F -(Note) 126 626.67 T -2 11 Q --0.17 (Shift le) 162 626.67 P --0.17 (v) 193.64 626.67 P --0.17 (el three can be reached only if the virtual modi\336er) 198.98 626.67 P -5 12 Q --0.41 -0.6 (LevelThree) 420.28 626.67 B -2 11 Q --0.17 ( is bound to) 486.28 626.67 P --0.27 (a real modi\336er \050see section 16.4\051. If) 162 614.67 P -5 12 Q --0.66 -0.6 (LevelThree) 319.85 614.67 B -2 11 Q --0.27 ( is not bound to a real modi\336er) 385.85 614.67 P --0.27 (, the) 518.85 614.67 P -1 F -(map) 162 602.67 T -2 F -( entries associated with it are ignored.) 180.94 602.67 T -2 12 Q -(Because the) 108 582 T -5 F --0.6 (Lock) 168.65 582 S -2 F -( modifier is to be preserved for further event processing, the) 195.05 582 T -1 F -(preserve) 486.31 582 T -2 F -(list is not) 108 569 T -5 F --0.6 (NULL) 155.02 569 S -2 F -( and parallels the) 181.42 569 T -1 F -(map) 266.06 569 T -2 F -( list. All) 286.73 569 T -1 F -(preserve) 328.74 569 T -2 F -( entries, except for the one corre-) 370.06 569 T --0.19 (sponding to the) 108 556 P -1 F --0.19 (map) 184.43 556 P -2 F --0.19 ( entry that specifies the) 205.09 556 P -5 F --0.42 -0.6 (Lock) 318.44 556 B -2 F --0.19 (modifier, do not list any modifiers. For) 351.02 556 P -(the) 108 543 T -1 F -(map) 125.66 543 T -2 F -( entry that specifies the) 146.33 543 T -5 F --0.6 (Lock) 260.64 543 S -2 F -( modifier, the corresponding) 287.04 543 T -1 F -(preserve) 426.68 543 T -2 F -( list entry lists) 468 543 T --0.45 (the) 108 530 P -5 F --0.99 -0.6 (Lock) 125.21 530 B -2 F --0.45 ( modifier, meaning do not consume the) 151.62 530 P -5 F --0.99 -0.6 (Lock) 339.78 530 B -2 F --0.45 ( modifier. In this particular case, the) 366.18 530 P -(preserved modifier is passed to Xlib translation functions and causes them to notice that) 108 517 T -(the) 108 504 T -5 F --0.6 (Lock) 125.66 504 S -2 F -( modifier is set; consequently, the Xlib functions apply the appropriate capitali-) 152.07 504 T --0.39 (zation rules to the symbol. Because this preserve entry is set only for a modifier that yields) 108 491 P -(shift level one, the capitalization occurs only for level-one symbols.) 108 478 T -0 F -(15.2.1) 72 453 T -(The Canonical K) 108 453 T -(e) 201.84 453 T -(y T) 208.33 453 T -(ypes) 224.95 453 T -2 F -(Xkb allows up to) 108 433 T -5 F --0.6 (XkbMaxKeyTypes) 193.33 433 S -2 F -( \050255\051 key types to be defined, but requires at least) 285.73 433 T -5 F --0.6 (XkbNumRequiredTypes) 108 420 S -2 F -( \0504\051 predefined types to be in a key map. These predefined key) 233.4 420 T --0.25 (types are referred to as the canonical key types and describe the types of keys available on) 108 407 P -(most keyboards. The definitions for the canonical key types are held in the first) 108 394 T -5 F --0.6 (XkbNum-) 491.6 394 S --0.3 -0.6 (RequiredTypes) 108 381 B -2 F --0.14 ( entries of the) 193.8 381 P -1 F --0.14 (types) 261.9 381 P -2 F --0.14 ( field of the client map and are indexed using the fol-) 286.56 381 P -(lowing constants:) 108 368 T -5 F --0.6 (XkbOneLevelIndex) 139.68 347 S --0.6 (XkbTwoLevelIndex) 139.68 333 S --0.6 (XkbAlphabeticIndex) 139.68 319 S --0.6 (XkbKeypadIndex) 139.68 305 S -0 11 Q -(ONE_LEVEL) 108 281.67 T -2 12 Q -(The ONE_LEVEL key type describes groups that have only one symbol. The default) 108 263 T --0.1 (ONE_LEVEL key type has no map entries and does not pay attention to any modifiers. A) 108 250 P -(symbolic representation of this key type could look like the following:) 108 237 T -2 11 Q -(type \322ONE_LEVEL\323 {) 144 216.67 T -(modi\336ers = None;) 162 204.67 T -(map[None]= Le) 162 192.67 T -(v) 232.38 192.67 T -(el1;) 237.71 192.67 T -(le) 162 180.67 T -(v) 169.67 180.67 T -(el_name[Le) 175 180.67 T -(v) 227.26 180.67 T -(el1]= \322) 232.6 180.67 T -(An) 262.66 180.67 T -(y\323;) 275.94 180.67 T -(};) 144 168.67 T -2 12 Q -(The description of the ONE_LEVEL key type is stored in the) 108 150 T -1 F -(types) 405.62 150 T -2 F -([) 430.28 150 T -5 F --0.6 (XkbOneLevelIn-) 434.28 150 S --0.6 (dex) 108 137 S -2 F -(] entry of the client key map.) 127.8 137 T -0 11 Q -(TWO_LEVEL) 108 114.67 T -2 12 Q -(The TWO_LEVEL key type describes groups that consist of two symbols but are neither) 108 96 T --0.38 (alphabetic nor numeric keypad keys. The default TWO_LEVEL type uses only the) 108 83 P -5 F --0.83 -0.6 (Shift) 504.38 83 B -FMENDPAGE -%%EndPage: "129" 141 -%%Page: "130" 142 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(130) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(15 Xkb Client K) 384.01 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -2 12 Q -(modifier. It returns shift level two if) 108 712 T -5 F --0.6 (Shift) 283.98 712 S -2 F -( is set, and level one if it is not. A symbolic) 316.98 712 T -(representation of this key type could look like the following:) 108 699 T -2 11 Q -(type \322TW) 144 678.67 T -(O_LEVEL\323 {) 187.57 678.67 T -(modi\336ers = Shift;) 162 666.67 T -(map[Shift]= Le) 162 654.67 T -(v) 229.95 654.67 T -(el2;) 235.28 654.67 T -(le) 162 642.67 T -(v) 169.67 642.67 T -(el_name[Le) 175 642.67 T -(v) 227.26 642.67 T -(el1]= \322Base\323;) 232.6 642.67 T -(le) 162 630.67 T -(v) 169.67 630.67 T -(el_name[Le) 175 630.67 T -(v) 227.26 630.67 T -(el2]= \322Shift\323;) 232.6 630.67 T -(};) 144 618.67 T -2 12 Q -(The description of the TWO_LEVEL key type is stored in the) 108 600 T -1 F -(types) 408.29 600 T -2 F -([) 432.95 600 T -5 F --0.6 (XkbTwoLevelIn-) 436.94 600 S --0.6 (dex) 108 587 S -2 F -(] entry of the client key map.) 127.8 587 T -0 11 Q -(ALPHABETIC) 108 564.67 T -2 12 Q -(The ALPHABETIC key type describes groups consisting of two symbols: the lowercase) 108 546 T -(form of a symbol followed by the uppercase form of the same symbol. The default) 108 533 T -(ALPHABETIC type implements locale-sensitive \322Shift cancels CapsLock\323 behavior) 108 520 T -(using both the) 108 507 T -5 F --0.6 (Shift) 179 507 S -2 F -( and) 212.01 507 T -5 F --0.6 (Lock) 235.33 507 S -2 F -( modifiers as follows:) 261.73 507 T -2 11 Q -(\245) 126 486.67 T -(If) 139.68 486.67 T -5 12 Q --0.6 (Shift) 149.76 486.67 S -2 11 Q -( and) 182.76 486.67 T -5 12 Q --0.6 (Lock) 204.14 486.67 S -2 11 Q -( are both set, the def) 230.54 486.67 T -(ault ALPHABETIC type yields le) 319.63 486.67 T -(v) 468.46 486.67 T -(el one.) 473.8 486.67 T -(\245) 126 474.67 T -(If) 139.68 474.67 T -5 12 Q --0.6 (Shift) 149.76 474.67 S -2 11 Q -( alone is set, it yields le) 182.76 474.67 T -(v) 285.45 474.67 T -(el tw) 290.79 474.67 T -(o.) 312.37 474.67 T -(\245) 126 462.67 T -(If) 139.68 462.67 T -5 12 Q --0.6 (Lock) 149.76 462.67 S -2 11 Q -( alone is set, it yields le) 176.16 462.67 T -(v) 278.85 462.67 T -(el one, b) 284.19 462.67 T -(ut preserv) 321.54 462.67 T -(es the) 365.06 462.67 T -5 12 Q --0.6 (Lock) 393.16 462.67 S -2 11 Q -( modi\336er so Xlib) 419.57 462.67 T -(notices and applies the appropriate capitalization rules.) 139.68 450.67 T -2 12 Q -(The Xlib functions are) 384.08 450.67 T -(locale-sensitive and apply different capitalization rules for different locales.) 139.68 438.67 T -2 11 Q -(\245) 126 426.67 T -(If neither) 139.68 426.67 T -5 12 Q --0.6 (Shift) 183.05 426.67 S -2 11 Q -( nor) 216.05 426.67 T -5 12 Q --0.6 (Lock) 236.22 426.67 S -2 11 Q -( is set, it yields le) 262.62 426.67 T -(v) 338.74 426.67 T -(el one.) 344.07 426.67 T -2 12 Q -(A symbolic representation of this key type could look like the following:) 108 408 T -2 11 Q -(type \322) 144 387.67 T -(ALPHABETIC\323 {) 169.7 387.67 T -(modi\336ers = Shift+Lock;) 162 375.67 T -(map[Shift]= Le) 162 363.67 T -(v) 229.95 363.67 T -(el2;) 235.28 363.67 T -(preserv) 162 351.67 T -(e[Lock]= Lock;) 194.21 351.67 T -(le) 162 339.67 T -(v) 169.67 339.67 T -(el_name[Le) 175 339.67 T -(v) 227.26 339.67 T -(el1]= \322Base\323;) 232.6 339.67 T -(le) 162 327.67 T -(v) 169.67 327.67 T -(el_name[Le) 175 327.67 T -(v) 227.26 327.67 T -(el2]= \322Caps\323;) 232.6 327.67 T -(};) 144 315.67 T -2 12 Q -(The description of the ALPHABETIC key type is stored in the) 108 297 T -1 F -(types) 411.64 297 T -2 F -([) 436.3 297 T -5 F --0.6 (XkbAlphabe-) 440.29 297 S --0.6 (ticIndex) 108 284 S -2 F -(] entry of the client key map.) 160.8 284 T -0 11 Q -(KEYPAD) 108 261.67 T -2 12 Q -(The KEYPAD key type describes groups that consist of two symbols, at least one of) 108 243 T -(which is a numeric keypad symbol. The numeric keypad symbol is assumed to reside at) 108 230 T --0.24 (level two. The default KEYPAD key type implements \322Shift cancels NumLock\323 behavior) 108 217 P -(using the Shift modifier and the real modifier bound to the virtual modifier named \322Num-) 108 204 T -(Lock,\323 known as the) 108 191 T -5 F --0.6 (NumLock) 210.31 191 S -2 F -( modifier, as follows:) 256.51 191 T -2 11 Q -(\245) 126 170.67 T -(If) 139.68 170.67 T -5 12 Q --0.6 (Shift) 149.76 170.67 S -2 11 Q -( and) 182.76 170.67 T -5 12 Q --0.6 (NumLock) 204.14 170.67 S -2 11 Q -( are both set, the def) 250.34 170.67 T -(ault KEYP) 339.43 170.67 T -(AD type yields le) 386.39 170.67 T -(v) 463.41 170.67 T -(el one.) 468.75 170.67 T -(\245) 126 158.67 T -(If) 139.68 158.67 T -5 12 Q --0.6 (Shift) 149.76 158.67 S -2 11 Q -( alone is set, it yields le) 182.76 158.67 T -(v) 285.45 158.67 T -(el tw) 290.79 158.67 T -(o.) 312.37 158.67 T -(\245) 126 146.67 T -(If) 139.68 146.67 T -5 12 Q --0.6 (NumLock) 149.76 146.67 S -2 11 Q -( alone is set, it yields le) 195.96 146.67 T -(v) 298.65 146.67 T -(el tw) 303.99 146.67 T -(o.) 325.57 146.67 T -(\245) 126 134.67 T -(If neither) 139.68 134.67 T -5 12 Q --0.6 (Shift) 183.05 134.67 S -2 11 Q -( nor) 216.05 134.67 T -5 12 Q --0.6 (NumLock) 236.22 134.67 S -2 11 Q -( is set, it yields le) 282.42 134.67 T -(v) 358.54 134.67 T -(el one.) 363.87 134.67 T -FMENDPAGE -%%EndPage: "130" 142 -%%Page: "131" 143 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(131) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(15 Xkb Client K) 384.01 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -2 12 Q -(A symbolic representation of this key type could look like the following:) 108 712 T -2 11 Q -(type \322KEYP) 144 691.67 T -(AD\323 {) 198.29 691.67 T -(modi\336ers = Shift+NumLock;) 162 679.67 T -(map[None]= Le) 162 667.67 T -(v) 232.38 667.67 T -(el1;) 237.71 667.67 T -(map[Shift]= Le) 162 655.67 T -(v) 229.95 655.67 T -(el2;) 235.28 655.67 T -(map[NumLock]= Le) 162 643.67 T -(v) 253.16 643.67 T -(el2;) 258.49 643.67 T -(map[Shift+NumLock]= Le) 162 631.67 T -(v) 280.76 631.67 T -(el1;) 286.09 631.67 T -(le) 162 619.67 T -(v) 169.67 619.67 T -(el_name[Le) 175 619.67 T -(v) 227.26 619.67 T -(el1]= \322Base\323;) 232.6 619.67 T -(le) 162 607.67 T -(v) 169.67 607.67 T -(el_name[Le) 175 607.67 T -(v) 227.26 607.67 T -(el2]= \322Caps\323;) 232.6 607.67 T -(};) 144 595.67 T -2 12 Q --0.1 (The description of the KEYPAD key type is stored in the) 108 577 P -1 F --0.1 (types) 384.49 577 P -2 F --0.1 ([) 409.15 577 P -5 F --0.23 -0.6 (XkbKeypadIndex) 413.15 577 B -2 F --0.1 (] entry) 505.55 577 P -(of the client key map.) 108 564 T -0 11 Q -(Initializing the Canonical Key Types in a New Client Map) 108 541.67 T -2 12 Q --0.24 (To set the definitions of the canonical key types in a client map to their default values, use) 108 523 P -1 F -(XkbInitCanonicalKeyTypes.) 108 510 T -2 11 Q -(Status) 108 489.67 T -3 F -(XkbInitCanonicalK) 137.65 489.67 T -(eyT) 230.89 489.67 T -(ypes) 247.8 489.67 T -2 F -(\050) 268.58 489.67 T -1 F -(xkb, whic) 272.24 489.67 T -(h, k) 313.62 489.67 T -(e) 329.4 489.67 T -(ypadVMod) 333.95 489.67 T -2 F -(\051) 382.22 489.67 T -(XkbDescPtr) 126 476.67 T -1 F -(xkb) 198 476.67 T -2 F -(;) 213.27 476.67 T -(/* k) 270 476.67 T -(e) 286.7 476.67 T -(yboard description containing client map to initialize */) 291.42 476.67 T -(unsigned int) 126 463.67 T -1 F -(whic) 198 463.67 T -(h) 218.61 463.67 T -2 F -(;) 224.11 463.67 T -(/* mask of types to initialize */) 270 463.67 T -(int) 126 450.67 T -1 F -(k) 198 450.67 T -(e) 202.77 450.67 T -(ypadVMod) 207.33 450.67 T -2 F -(;) 255.6 450.67 T -(/* inde) 270 450.67 T -(x of NumLock virtual modi\336er */) 300.08 450.67 T -1 12 Q -(XkbInitCanonicalK) 108 431 T -(e) 200.92 431 T -(yT) 205.88 431 T -(ypes) 217 431 T -2 F -( initializes the first) 238.32 431 T -5 F --0.6 (XkbNumRequiredTypes) 330.98 431 S -2 F -( key types of the) 456.39 431 T -(keyboard specified by the) 108 418 T -1 F -(xkb) 234.64 418 T -2 F -( parameter to their default values. The) 251.29 418 T -1 F -(which) 437.24 418 T -2 F -( parameter) 465.91 418 T --0.24 (specifies what canonical key types to initialize and is a bitwise inclusive OR of the follow-) 108 405 P -(ing masks:) 108 392 T -5 F --0.6 (XkbOneLevelMask) 162.67 392 S -2 F -(,) 261.67 392 T -5 F --0.6 (XkbTwoLevelMask) 267.67 392 S -2 F -(,) 366.68 392 T -5 F --0.6 (XkbAlphabeticMask) 372.68 392 S -2 F -(, and) 484.88 392 T -5 F --0.02 -0.6 (XkbKeypadMask) 108 379 B -2 F --0.01 (. Only those canonical types specified by the) 193.8 379 P -1 F --0.01 (which) 411.37 379 P -2 F --0.01 ( mask are initialized.) 440.04 379 P --0.48 (If) 108 358 P -5 F --1.06 -0.6 (XkbKeypadMask) 118.51 358 B -2 F --0.48 ( is set in the) 204.31 358 P -1 F --0.48 (which) 262.25 358 P -2 F --0.48 ( parameter,) 290.92 358 P -1 F --0.48 (XkbInitCanonicalK) 346.93 358 P --0.48 (e) 439.85 358 P --0.48 (yT) 444.82 358 P --0.48 (ypes) 455.93 358 P -2 F --0.48 ( looks up the) 477.25 358 P -5 F --0.6 (NumLock) 108 345 S -2 F -( named virtual modifier to determine which virtual modifier to use when initial-) 154.2 345 T -(izing the KEYPAD key type. If the) 108 332 T -5 F --0.6 (NumLock) 279.97 332 S -2 F -( virtual modifier does not exist,) 326.17 332 T -1 F -(XkbInitCa-) 479.83 332 T -(nonicalK) 108 319 T -(e) 151.58 319 T -(yT) 156.55 319 T -(ypes) 167.66 319 T -2 F -( creates it.) 188.99 319 T -1 F -(XkbInitCanonicalK) 108 298 T -(e) 200.92 298 T -(yT) 205.88 298 T -(ypes) 217 298 T -2 F -( normally returns Success. It returns) 238.32 298 T -5 F --0.6 (BadAccess) 414.62 298 S -2 F -( if the Xkb) 474.02 298 T -(extension has not been properly initialized, and) 108 285 T -5 F --0.6 (BadAccess) 337.97 285 S -2 F -( if the) 397.37 285 T -1 F -(xkb) 428.36 285 T -2 F -( parameter is not) 445.02 285 T -(valid.) 108 272 T -0 F -(15.2.2) 72 247 T -(Getting K) 108 247 T -(e) 161.82 247 T -(y T) 168.31 247 T -(ypes fr) 184.93 247 T -(om the Ser) 224.04 247 T -(ver) 286.18 247 T -2 F -(To obtain the list of available key types in the server\325s keyboard mapping, use) 108 227 T -1 F -(XkbGet-) 486.28 227 T -(KeyTypes) 108 214 T -2 F -(.) 154.66 214 T -2 11 Q -(Status) 108 193.67 T -3 F -(XkbGetK) 137.65 193.67 T -(eyT) 183.21 193.67 T -(ypes) 200.11 193.67 T -2 F -(\050) 220.89 193.67 T -1 F -(dpy) 224.56 193.67 T -2 F -(,) 239.73 193.67 T -1 F -( \336r) 242.48 193.67 T -(st) 254.89 193.67 T -2 F -(,) 262.23 193.67 T -1 F -( num) 264.98 193.67 T -2 F -(,) 286.67 193.67 T -1 F -( xkb) 289.42 193.67 T -2 F -(\051) 307.44 193.67 T -(Display *) 126 180.67 T -1 F -(dpy) 216 180.67 T -2 F -(;) 231.88 180.67 T -(/* connection to X serv) 258 180.67 T -(er */) 360.49 180.67 T -(unsigned int) 126 167.67 T -1 F -(\336r) 216 167.67 T -(st) 225.67 167.67 T -2 F -(;) 233.01 167.67 T -(/* inde) 258 167.67 T -(x to \336rst type to get, 0 => 1st type */) 288.08 167.67 T -(unsigned int) 126 154.67 T -1 F -(num) 216 154.67 T -2 F -(;) 234.94 154.67 T -(/* number of k) 258 154.67 T -(e) 322.97 154.67 T -(y types to be returned */) 327.68 154.67 T -(XkbDescPtr) 126 141.67 T -1 F -(xkb) 216 141.67 T -2 F -(;) 231.27 141.67 T -(/* k) 258 141.67 T -(e) 274.7 141.67 T -(yboard description containing client map to update */) 279.42 141.67 T -0 12 Q -(Note) 126 122.67 T -1 11 Q -(XkbGetK) 162 122.67 T -(e) 201.94 122.67 T -(yT) 206.49 122.67 T -(ypes) 216.68 122.67 T -2 F -( is used to obtain descriptions of the k) 236.23 122.67 T -(e) 402.94 122.67 T -(y types themselv) 407.66 122.67 T -(es, not the) 481.44 122.67 T -(k) 162 110.67 T -(e) 167.39 110.67 T -(y types bound to indi) 172.11 110.67 T -(vidual k) 264.73 110.67 T -(e) 300.37 110.67 T -(ys. T) 305.09 110.67 T -(o obtain the k) 326.21 110.67 T -(e) 386.29 110.67 T -(y types bound to an indi) 391.01 110.67 T -(vidual) 496.76 110.67 T -(k) 162 98.67 T -(e) 167.39 98.67 T -(y) 172.11 98.67 T -(, refer to the) 176.89 98.67 T -1 F -(key_sym_map) 233.4 98.67 T -2 F -( \336eld of the client map \050see section 15.3.1\051.) 295.1 98.67 T -FMENDPAGE -%%EndPage: "131" 143 -%%Page: "132" 144 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(132) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(15 Xkb Client K) 384.01 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -1 12 Q --0.13 (XkbGetK) 108 712 P --0.13 (e) 151.57 712 P --0.13 (yT) 156.54 712 P --0.13 (ypes) 167.65 712 P -2 F --0.13 ( queries the server for the desired types, waits for a reply, and returns the) 188.98 712 P -(desired types in the) 108 699 T -1 F -(xkb->map->types) 203.99 699 T -2 F -(. If successful, it returns Success.) 290.16 699 T -1 F -(XkbGetK) 108 678 T -(e) 151.57 678 T -(yT) 156.54 678 T -(ypes) 167.65 678 T -2 F -( returns) 188.98 678 T -5 F --0.6 (BadAccess) 228.3 678 S -2 F -( if the Xkb extension has not been properly initial-) 287.7 678 T -(ized and) 108 665 T -5 F --0.6 (BadValue) 151.32 665 S -2 F -( if the combination of) 204.12 665 T -1 F -(\336r) 311.11 665 T -(st) 321.66 665 T -2 F -( and) 329.67 665 T -1 F -(num) 352.99 665 T -2 F -( results in numbers out of valid) 373.66 665 T -(range.) 108 652 T -0 F -(15.2.3) 72 627 T -(Changing the Number of Le) 108 627 T -(vels in a K) 265.16 627 T -(e) 324.35 627 T -(y T) 330.84 627 T -(ype) 347.46 627 T -2 F -(To change the number of levels in a key type, use) 108 607 T -1 F -(XkbResizeKeyType) 349.28 607 T -2 F -(.) 440.59 607 T -2 11 Q -(Status) 108 586.67 T -3 F -(XkbResizeK) 137.65 586.67 T -(eyT) 196.03 586.67 T -(ype) 212.94 586.67 T -2 F -(\050) 229.44 586.67 T -1 F -(xkb) 233.1 586.67 T -2 F -(,) 248.37 586.67 T -1 F -( type_ndx) 251.12 586.67 T -2 F -(,) 293.58 586.67 T -1 F -( map_count) 296.33 586.67 T -2 F -(,) 347.96 586.67 T -1 F -( want_pr) 350.71 586.67 T -(eserve) 389.73 586.67 T -2 F -(,) 417.83 586.67 T -1 F -( ne) 420.58 586.67 T -(w_num_lvls) 433.55 586.67 T -2 F -(\051) 486.1 586.67 T -(XkbDescPtr) 126 573.67 T -1 F -(xkb) 186.75 573.67 T -2 F -(;) 202.02 573.67 T -(/* k) 261 573.67 T -(e) 277.7 573.67 T -(yboard description containing client map to update */) 282.42 573.67 T -(int) 126 560.67 T -1 F -(type_ndx) 186.75 560.67 T -2 F -(;) 226.46 560.67 T -(/* inde) 261 560.67 T -(x in xkb->map->types of type to change */) 291.08 560.67 T -(int) 126 547.67 T -1 F -(map_count) 186.75 547.67 T -2 F -(;) 235.63 547.67 T -(/* total # of map entries needed for the type */) 261 547.67 T -(Bool) 126 534.67 T -1 F -(want_pr) 186.75 534.67 T -(eserve) 223.02 534.67 T -2 F -(;) 251.11 534.67 T -(/*) 261 534.67 T -5 F --0.33 (True) 272.31 534.67 S -2 F -( => list of preserv) 297.39 534.67 T -(ed modi\336ers is necessary */) 375.62 534.67 T -(int) 126 521.67 T -1 F -(ne) 186.75 521.67 T -(w_num_lvls) 196.97 521.67 T -2 F -(;) 249.53 521.67 T -(/* ne) 261 521.67 T -(w max # of le) 282.42 521.67 T -(v) 342.63 521.67 T -(els for type */) 347.97 521.67 T -1 12 Q -(XkbResizeK) 108 502 T -(e) 164.9 502 T -(yT) 169.87 502 T -(ype) 180.98 502 T -2 F -( changes the type specified by) 197.64 502 T -1 F -(xkb) 344.94 502 T -2 F -(->) 361.6 502 T -1 F -(map->types) 372.36 502 T -2 F -([) 429.78 502 T -1 F -(type_ndx) 433.78 502 T -2 F -(], and reallo-) 477.1 502 T -(cates the symbols and actions bound to all keys that use the type, if necessary.) 108 489 T -1 F -(XkbRe-) 485.62 489 T --0.43 (sizeK) 108 476 P --0.43 (e) 133.58 476 P --0.43 (yT) 138.55 476 P --0.43 (ype) 149.66 476 P -2 F --0.43 ( updates only the local copy of the types in) 166.32 476 P -1 F --0.43 (xkb) 370.7 476 P -2 F --0.43 (; to update the server\325s copy for) 387.36 476 P -(the physical device, use) 108 463 T -1 F -(XkbSetMap) 224.98 463 T -2 F -( or) 280.3 463 T -1 F -(XkbChang) 296.29 463 T -(eMap) 346.84 463 T -2 F -( after calling) 374.16 463 T -1 F -(XkbResizeK) 437.81 463 T -(e) 494.71 463 T -(yT) 499.68 463 T -(ype) 510.79 463 T -2 F -(.) 527.45 463 T -(The) 108 442 T -1 F -(map_count) 129.66 442 T -2 F -( parameter specifies the total number of map entries needed for the type,) 182.99 442 T --0.3 (and can be zero or greater. If) 108 429 P -1 F --0.3 (map_count) 247.15 429 P -2 F --0.3 ( is zero,) 300.48 429 P -1 F --0.3 (XkbResizeK) 340.22 429 P --0.3 (e) 397.13 429 P --0.3 (yT) 402.1 429 P --0.3 (ype) 413.21 429 P -2 F --0.3 ( frees the existing) 429.86 429 P -1 F --0.3 (map) 516.64 429 P -2 F -(and) 108 416 T -1 F -(preserve) 128.33 416 T -2 F -( entries for the type if they exist and sets them to) 169.64 416 T -5 F --0.6 (NULL) 406.28 416 S -2 F -(.) 432.68 416 T -(The) 108 395 T -1 F -(want_preserve) 129.66 395 T -2 F -( parameter specifies whether a) 200.32 395 T -1 F -(preserve) 349.26 395 T -2 F -( list for the key should be cre-) 390.58 395 T -(ated. If) 108 382 T -1 F -(want_preserve) 144.98 382 T -2 F -( is) 215.64 382 T -5 F --0.6 (True) 229.64 382 S -2 F -(, the) 256.04 382 T -1 F -(preserve) 279.71 382 T -2 F -( list with) 321.02 382 T -1 F -(map_count) 366.04 382 T -2 F -( entries is allocated or) 419.36 382 T --0.19 (reallocated if it already exists. Otherwise, if) 108 369 P -1 F --0.19 (want_preserve) 319.66 369 P -2 F --0.19 ( is) 390.31 369 P -5 F --0.41 -0.6 (False) 403.95 369 B -2 F --0.19 (, the) 436.95 369 P -1 F --0.19 (preserve) 460.24 369 P -2 F --0.19 ( field is) 501.56 369 P -(freed if necessary and set to) 108 356 T -5 F --0.6 (NULL) 244.62 356 S -2 F -(.) 271.02 356 T -(The) 108 335 T -1 F -(new_num_lvls) 129.66 335 T -2 F -( parameter specifies the new maximum number of shift levels for the) 198.32 335 T --0.03 (type and is used to calculate and resize the symbols and actions bound to all keys that use) 108 322 P -(the type.) 108 309 T --0.29 (If) 108 288 P -1 F --0.29 (type_ndx) 118.7 288 P -2 F --0.29 ( does not specify a legal type,) 162.02 288 P -1 F --0.29 (new_num_lvls) 305.29 288 P -2 F --0.29 ( is less than 1, or the) 373.96 288 P -1 F --0.29 (map_count) 473.25 288 P -2 F --0.29 ( is) 526.58 288 P -(less than zero,) 108 275 T -1 F -(XkbResizeK) 179.32 275 T -(e) 236.22 275 T -(yT) 241.19 275 T -(ype) 252.3 275 T -2 F -( returns) 268.96 275 T -5 F --0.6 (BadValue) 308.28 275 S -2 F -(. If) 361.08 275 T -1 F -(XkbResizeK) 378.07 275 T -(e) 434.98 275 T -(yT) 439.95 275 T -(ype) 451.06 275 T -2 F -( encounters) 467.71 275 T -(any problems with allocation, it returns) 108 262 T -5 F --0.6 (BadAlloc) 299.65 262 S -2 F -(. Otherwise, it returns) 352.45 262 T -5 F --0.6 (Success) 459.77 262 S -2 F -(.) 505.97 262 T -0 F -(15.2.4) 72 237 T -(Cop) 108 237 T -(ying K) 131.15 237 T -(e) 167.64 237 T -(y T) 174.13 237 T -(ypes) 190.75 237 T -2 F -(Use) 108 217 T -1 F -(XkbCopyKeyType) 129.66 217 T -2 F -( and) 215.64 217 T -1 F -(XkbCopyKeyTypes) 238.97 217 T -2 F -( to copy one or more) 329.62 217 T -5 F --0.6 (XkbKeyTypeRec) 432.26 217 S -2 F -(structures.) 108 204 T -2 11 Q -(Status) 108 183.67 T -3 F -(XkbCopyK) 137.65 183.67 T -(eyT) 191.16 183.67 T -(ype) 208.07 183.67 T -2 F -(\050) 224.57 183.67 T -1 F -(fr) 228.23 183.67 T -(om) 235.07 183.67 T -2 F -(,) 248.51 183.67 T -1 F -( into) 251.26 183.67 T -2 F -(\051) 271.13 183.67 T -(XkbK) 126 170.67 T -(e) 152.61 170.67 T -(yT) 157.33 170.67 T -(ypePtr) 168.67 170.67 T -1 F -(fr) 234 170.67 T -(om) 240.84 170.67 T -2 F -(;) 254.28 170.67 T -(/* pointer to XkbK) 306 170.67 T -(e) 389.14 170.67 T -(yT) 393.86 170.67 T -(ypeRec to be copied */) 405.2 170.67 T -(XkbK) 126 157.67 T -(e) 152.61 157.67 T -(yT) 157.33 157.67 T -(ypePtr) 168.67 157.67 T -1 F -(into) 234 157.67 T -2 F -(;) 251.12 157.67 T -(/* pointer to XkbK) 306 157.67 T -(e) 389.14 157.67 T -(yT) 393.86 157.67 T -(ypeRec to be changed */) 405.2 157.67 T -1 12 Q -(XkbCopyK) 108 138 T -(e) 159.58 138 T -(yT) 164.54 138 T -(ype) 175.66 138 T -2 F -( copies the key type specified by) 192.31 138 T -1 F -(from) 351.95 138 T -2 F -( to the key type specified by) 374.62 138 T -1 F -(into) 512.93 138 T -2 F -(.) 531.6 138 T --0.2 (Both must point to legal) 108 125 P -5 F --0.44 -0.6 (XkbKeyTypeRec) 226.01 125 B -2 F --0.2 ( structures) 311.81 125 P --0.2 (. Xkb assumes) 361.27 125 P -1 F --0.2 (from) 433.33 125 P -2 F --0.2 ( and) 455.99 125 P -1 F --0.2 (into) 478.92 125 P -2 F --0.2 ( point to) 497.59 125 P -(different places. As a result, overlaps can be fatal.) 108 112 T -1 F -(XkbCopyK) 350.59 112 T -(e) 402.17 112 T -(yT) 407.14 112 T -(ype) 418.25 112 T -2 F -( frees any existing) 434.9 112 T -1 F -(map) 108 99 T -2 F -(,) 128.66 99 T -1 F -(preserve) 134.66 99 T -2 F -(, and) 175.98 99 T -1 F -(level_names) 202.31 99 T -2 F -( in) 261.62 99 T -1 F -(into) 276.96 99 T -2 F -( prior to copying. If any allocation errors occur) 295.63 99 T -(while copying) 108 86 T -1 F -(from) 179.33 86 T -2 F -( to) 202 86 T -1 F -(into) 217.33 86 T -2 F -(,) 236 86 T -1 F -(XkbCopyK) 242 86 T -(e) 293.58 86 T -(yT) 298.55 86 T -(ype) 309.66 86 T -2 F -( returns) 326.32 86 T -5 F --0.6 (BadAlloc) 365.64 86 S -2 F -(. Otherwise,) 418.44 86 T -1 F -(XkbCopy-) 479.76 86 T -(K) 108 73 T -(e) 115.58 73 T -(yT) 120.55 73 T -(ype) 131.66 73 T -2 F -( copies) 148.32 73 T -1 F -(from) 184.98 73 T -2 F -( to) 207.65 73 T -1 F -(into) 222.98 73 T -2 F -( and returns) 241.66 73 T -5 F --0.6 (Success) 301.31 73 S -2 F -(.) 347.51 73 T -FMENDPAGE -%%EndPage: "132" 144 -%%Page: "133" 145 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(133) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(15 Xkb Client K) 384.01 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -(Status) 108 712.67 T -3 F -(XkbCopyK) 137.65 712.67 T -(eyT) 191.16 712.67 T -(ypes) 208.07 712.67 T -2 F -(\050) 228.85 712.67 T -1 F -(fr) 232.51 712.67 T -(om) 239.35 712.67 T -2 F -(,) 252.79 712.67 T -1 F -( into) 255.54 712.67 T -2 F -(,) 275.41 712.67 T -1 F -(num_types) 280.91 712.67 T -2 F -(\051) 327.96 712.67 T -(XkbK) 126 699.67 T -(e) 152.61 699.67 T -(yT) 157.33 699.67 T -(ypePtr) 168.67 699.67 T -1 F -(fr) 234 699.67 T -(om) 240.84 699.67 T -2 F -(;) 254.28 699.67 T -(/* pointer to array of XkbK) 306 699.67 T -(e) 426.39 699.67 T -(yT) 431.11 699.67 T -(ypeRecs to cop) 442.45 699.67 T -(y */) 509.55 699.67 T -(XkbK) 126 686.67 T -(e) 152.61 686.67 T -(yT) 157.33 686.67 T -(ypePtr) 168.67 686.67 T -1 F -(into) 234 686.67 T -2 F -(;) 251.12 686.67 T -(/* pointer to array of XkbK) 306 686.67 T -(e) 426.39 686.67 T -(yT) 431.11 686.67 T -(ypeRecs to change */) 442.45 686.67 T -(int) 126 673.67 T -1 F -(num_types) 234 673.67 T -2 F -(;) 281.05 673.67 T -(/* number of types to cop) 306 673.67 T -(y */) 418.63 673.67 T -1 12 Q --0.49 (XkbCopyK) 108 654 P --0.49 (e) 159.58 654 P --0.49 (yT) 164.54 654 P --0.49 (ypes) 175.66 654 P -2 F --0.49 ( copies) 196.98 654 P -1 F --0.49 (num_types) 232.67 654 P -5 F --1.07 -0.6 (XkbKeyTypeRec) 286.5 654 B -2 F --0.49 ( structures from the array specified) 372.3 654 P -(by) 108 641 T -1 F -(from) 123 641 T -2 F -( into the array specified by) 145.67 641 T -1 F -(into) 276.97 641 T -2 F -(. It is intended for copying between, rather than) 295.64 641 T -(within, keyboard descriptions, so it doesn\325t check for overlaps. The same rules that apply) 108 628 T -(to the) 108 615 T -1 F -(from) 138 615 T -2 F -( and) 160.67 615 T -1 F -(into) 184 615 T -2 F -( parameters in) 202.67 615 T -1 F -(XkbCopyK) 273.65 615 T -(e) 325.22 615 T -(yT) 330.19 615 T -(ype) 341.3 615 T -2 F -( apply to each entry of the) 357.96 615 T -1 F -(from) 486.26 615 T -2 F -( and) 508.93 615 T -1 F --0.45 (into) 108 602 P -2 F --0.45 ( arrays of) 126.67 602 P -1 F --0.45 (XkbCopyK) 173.64 602 P --0.45 (e) 225.22 602 P --0.45 (yT) 230.19 602 P --0.45 (ypes) 241.3 602 P -2 F --0.45 (. If any allocation errors occur while copying) 262.62 602 P -1 F --0.45 (from) 478.66 602 P -2 F --0.45 ( to) 501.33 602 P -1 F --0.45 (into) 515.78 602 P -2 F --0.45 (,) 534.45 602 P -1 F -(XkbCopyK) 108 589 T -(e) 159.58 589 T -(yT) 164.54 589 T -(ypes) 175.66 589 T -2 F -( returns) 196.98 589 T -5 F --0.6 (BadAlloc) 236.3 589 S -2 F -(. Otherwise,) 289.11 589 T -1 F -(XkbCopyK) 350.42 589 T -(e) 402 589 T -(yT) 406.97 589 T -(ypes) 418.08 589 T -2 F -( copies) 439.4 589 T -1 F -(from) 476.07 589 T -2 F -( to) 498.73 589 T -1 F -(into) 514.07 589 T -2 F -(and returns) 108 576 T -5 F --0.6 (Success) 164.65 576 S -2 F -(.) 210.85 576 T -0 F -(15.3) 72 551 T -(K) 108 551 T -(e) 116.48 551 T -(y Symbol Map) 122.98 551 T -2 F --0.22 (The entire list of key symbols for the keyboard mapping is held in the) 108 531 P -1 F --0.22 (syms) 442.9 531 P -2 F --0.22 ( field of the cli-) 466.23 531 P -(ent map. Whereas the core keyboard mapping is a two-dimensional array of) 108 518 T -5 F --0.6 (KeySyms) 474.91 518 S -2 F --0.21 (whose rows are indexed by keycode, the) 108 505 P -1 F --0.21 (syms) 303.8 505 P -2 F --0.21 ( field of Xkb is a linear list of) 327.13 505 P -5 F --0.46 -0.6 (KeySyms) 470.22 505 B -2 F --0.21 ( that) 516.42 505 P --0.35 (needs to be indexed uniquely for each key. This section describes the key symbol map and) 108 492 P -(the methods for determining the symbols bound to a key.) 108 479 T --0.38 (The reason the) 108 458 P -1 F --0.38 (syms) 180.5 458 P -2 F --0.38 ( field is a linear list of) 203.83 458 P -5 F --0.84 -0.6 (KeySyms) 309.48 458 B -2 F --0.38 ( is to reduce the memory consumption) 355.68 458 P -(associated with a keymap; because Xkb allows individual keys to have multiple shift lev-) 108 445 T --0.05 (els and a different number of groups per key, a single two-dimensional array of) 108 432 P -5 F --0.12 -0.6 (KeySyms) 490.85 432 B -2 F -(would potentially be very large and sparse. Instead, Xkb provides a small two-dimen-) 108 419 T -(sional array of) 108 406 T -5 F --0.6 (KeySyms) 180.31 406 S -2 F -( for each key. To store all of these individual arrays, Xkb concat-) 226.51 406 T -(enates each array together in the) 108 393 T -1 F -(syms) 265.94 393 T -2 F -( field of the client map.) 289.27 393 T --0.05 (In order to determine which) 108 372 P -5 F --0.11 -0.6 (KeySyms) 244.71 372 B -2 F --0.05 ( in the) 290.91 372 P -1 F --0.05 (syms) 323.76 372 P -2 F --0.05 ( field are associated with each keycode,) 347.09 372 P --0.02 (the client map contains an array of key symbol mappings, held in the) 108 359 P -1 F --0.02 (key_sym_map) 441.73 359 P -2 F --0.02 ( field.) 509.04 359 P --0.5 (The) 108 346 P -1 F --0.5 (key_sym_map) 129.16 346 P -2 F --0.5 ( field is an array of) 196.47 346 P -5 F --1.09 -0.6 (XkbSymMapRec) 287.48 346 B -2 F --0.5 ( structures indexed by keycode. The) 366.68 346 P -1 F -(key_sym_map) 108 333 T -2 F -( array has) 175.31 333 T -1 F -(min_key_code) 224.95 333 T -2 F -( unused entries at the start to allow direct indexing) 293.59 333 T -(using a keycode. All keycodes falling between the minimum and maximum legal key-) 108 320 T -(codes, inclusive, have) 108 307 T -1 F -(key_sym_map) 216.31 307 T -2 F -( arrays, whether or not any key actually yields that) 283.62 307 T -(code. The) 108 294 T -5 F --0.6 (KeySymMapRec) 158.32 294 S -2 F -( structure is defined as follows:) 237.52 294 T -2 11 Q -(#de\336ne XkbNumKbdGroups) 126 268.67 T -(4) 306 268.67 T -(#de\336ne XkbMaxKbdGroup) 126 255.67 T -(\050XkbNumKbdGroups-1\051) 306 255.67 T -(typedef struct {) 126 235.67 T -(/* map to k) 306 235.67 T -(e) 355.7 235.67 T -(ysyms for a single k) 360.42 235.67 T -(e) 448.91 235.67 T -(ycode */) 453.63 235.67 T -(unsigned char) 144 222.67 T -(kt_inde) 234 222.67 T -(x[XkbNumKbdGroups];) 266.83 222.67 T -(/* k) 378 222.67 T -(e) 394.7 222.67 T -(y type inde) 399.42 222.67 T -(x for each group */) 448.14 222.67 T -(unsigned char) 144 209.67 T -(group_info;) 234 209.67 T -(/* # of groups and out of range group handling */) 306 209.67 T -(unsigned char) 144 196.67 T -(width;) 234 196.67 T -(/* max # of shift le) 306 196.67 T -(v) 389.14 196.67 T -(els for k) 394.47 196.67 T -(e) 430.41 196.67 T -(y */) 435.13 196.67 T -(unsigned short) 144 183.67 T -(of) 234 183.67 T -(fset;) 242.89 183.67 T -(/* inde) 306 183.67 T -(x to k) 336.08 183.67 T -(e) 361.03 183.67 T -(ysym table in) 365.75 183.67 T -1 F -(syms) 427.78 183.67 T -2 F -( array */) 449.17 183.67 T -(}) 126 170.67 T -3 F -(XkbSymMapRec) 134.03 170.67 T -2 F -(, *XkbSymMapPtr;) 214.69 170.67 T -2 12 Q -(These fields are described in detail in the following sections.) 108 151 T -0 F -(15.3.1) 72 126 T -(P) 108 126 T -(er) 115.64 126 T -(-K) 126.74 126 T -(e) 139.22 126 T -(y K) 145.72 126 T -(e) 164.21 126 T -(y T) 170.7 126 T -(ype Indices) 187.32 126 T -2 F -(The) 108 106 T -1 F -(kt_index) 129.66 106 T -2 F -( array of the) 170.32 106 T -5 F --0.6 (XkbSymMapRec) 231.62 106 S -2 F -( structure contains the indices of the key types) 310.83 106 T -(\050see section 15.2\051 for each possible group of symbols associated with the key. To obtain) 108 93 T --0.22 (the index of a key type or the pointer to a key type, Xkb provides the following macros, to) 108 80 P -(access the key types:) 108 67 T -FMENDPAGE -%%EndPage: "133" 145 -%%Page: "134" 146 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(134) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(15 Xkb Client K) 384.01 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -0 12 Q -(Note) 126 712.67 T -2 11 Q -(The array of k) 162 712.67 T -(e) 224.5 712.67 T -(y types is of \336x) 229.22 712.67 T -(ed width and is lar) 296.89 712.67 T -(ge enough to hold k) 377.96 712.67 T -(e) 465.24 712.67 T -(y types for the) 469.96 712.67 T --0.46 (maximum le) 162 700.67 P --0.46 (g) 216.68 700.67 P --0.46 (al number of groups \050) 222.13 700.67 P -5 12 Q --1.11 -0.6 (XkbNumKbdGroups) 315.6 700.67 B -2 11 Q --0.46 (, currently four\051; if a k) 414.6 700.67 P --0.46 (e) 510.54 700.67 P --0.46 (y has) 515.26 700.67 P --0.18 (fe) 162 688.67 P --0.18 (wer than) 170.27 688.67 P -5 12 Q --0.44 -0.6 (XkbNumKbdGroups) 210.84 688.67 B -2 11 Q --0.18 ( groups, the e) 309.84 688.67 P --0.18 (xtra k) 368.39 688.67 P --0.18 (e) 393.45 688.67 P --0.18 (y types are reported b) 398.17 688.67 P --0.18 (ut ignored.) 492.52 688.67 P -(int) 108 668.67 T -3 F -(XkbK) 122.37 668.67 T -(eyT) 150.82 668.67 T -(ypeIndex) 167.73 668.67 T -2 F -(\050) 211.12 668.67 T -1 F -(xkb, k) 214.79 668.67 T -(e) 240.33 668.67 T -(ycode) 244.88 668.67 T -(, gr) 270.43 668.67 T -(oup) 285.21 668.67 T -2 F -(\051) 301.71 668.67 T -(/* macro*/) 342 668.67 T -(XkbDescPtr) 126 655.67 T -1 F -(xkb) 234 655.67 T -2 F -(;) 249.27 655.67 T -(/* Xkb description of interest */) 342 655.67 T -(K) 126 642.67 T -(e) 133.67 642.67 T -(yCode) 138.39 642.67 T -1 F -(k) 234 642.67 T -(e) 238.77 642.67 T -(ycode) 243.33 642.67 T -2 F -(;) 268.98 642.67 T -(/* k) 342 642.67 T -(e) 358.7 642.67 T -(ycode of interest */) 363.42 642.67 T -(int) 126 629.67 T -1 F -(gr) 234 629.67 T -(oup) 243.28 629.67 T -2 F -(;) 259.78 629.67 T -(/* group inde) 342 629.67 T -(x */) 400.5 629.67 T -1 12 Q -(XkbK) 108 610 T -(e) 134.24 610 T -(yT) 139.21 610 T -(ypeInde) 150.32 610 T -(x) 188.06 610 T -2 F -( computes an index into the) 193.39 610 T -1 F -(types) 328.72 610 T -2 F -( vector of the client map in) 353.38 610 T -1 F -(xkb) 485.69 610 T -2 F -( from) 502.34 610 T -(the given) 108 597 T -1 F -(k) 155.33 597 T -(e) 160.54 597 T -(ycode) 165.5 597 T -2 F -( and) 193.49 597 T -1 F -(gr) 216.82 597 T -(oup) 226.94 597 T -2 F -( index.) 244.94 597 T -2 11 Q -(XkbK) 108 576.67 T -(e) 134.61 576.67 T -(yT) 139.33 576.67 T -(ypePtr) 150.67 576.67 T -3 F -(XkbK) 182.14 576.67 T -(eyT) 210.6 576.67 T -(ype) 227.5 576.67 T -2 F -(\050) 244 576.67 T -1 F -(xkb, k) 247.67 576.67 T -(e) 273.21 576.67 T -(ycode) 277.76 576.67 T -(, gr) 303.3 576.67 T -(oup) 318.09 576.67 T -2 F -(\051) 334.59 576.67 T -(/* macro */) 342 576.67 T -(XkbDescPtr) 126 563.67 T -1 F -(xkb) 234 563.67 T -2 F -(;) 249.27 563.67 T -(/* Xkb description of interest */) 342 563.67 T -(K) 126 550.67 T -(e) 133.67 550.67 T -(yCode) 138.39 550.67 T -1 F -(k) 234 550.67 T -(e) 238.77 550.67 T -(ycode) 243.33 550.67 T -2 F -(;) 268.98 550.67 T -(/* k) 342 550.67 T -(e) 358.7 550.67 T -(ycode of interest */) 363.42 550.67 T -(int) 126 537.67 T -1 F -(gr) 234 537.67 T -(oup) 243.28 537.67 T -2 F -(;) 259.78 537.67 T -(/* group inde) 342 537.67 T -(x */) 400.5 537.67 T -1 12 Q -(XkbK) 108 518 T -(e) 134.24 518 T -(yT) 139.21 518 T -(ype) 150.32 518 T -2 F -( returns a pointer to the key type in the) 166.98 518 T -1 F -(types) 355.62 518 T -2 F -( vector of the client map in) 380.28 518 T -1 F -(xkb) 512.59 518 T -2 F -(corresponding to the given) 108 505 T -1 F -(k) 239.32 505 T -(e) 244.52 505 T -(ycode) 249.49 505 T -2 F -( and) 277.48 505 T -1 F -(gr) 300.8 505 T -(oup) 310.93 505 T -2 F -( index.) 328.93 505 T -0 F -(15.3.2) 72 480 T -(P) 108 480 T -(er) 115.64 480 T -(-K) 126.74 480 T -(e) 139.22 480 T -(y Gr) 145.72 480 T -(oup Inf) 169.49 480 T -(ormation) 209.24 480 T -2 F --0.13 (The) 108 460 P -1 F --0.13 (group_info) 129.53 460 P -2 F --0.13 ( field of an) 182.87 460 P -5 F --0.28 -0.6 (XkbSymMapRec) 237.67 460 B -2 F --0.13 ( is an encoded value containing the number of) 316.87 460 P -(groups of symbols bound to the key as well as the specification of the treatment of) 108 447 T --0.33 (out-of-range groups. It is legal for a key to have zero groups, in which case it also has zero) 108 434 P --0.11 (symbols and all events from that key yield) 108 421 P -5 F --0.24 -0.6 (NoSymbol) 313.77 421 B -2 F --0.11 (. To obtain the number of groups of) 366.57 421 P -(symbols bound to the key, use) 108 408 T -1 F -(XkbKeyNumGroups) 256.33 408 T -2 F -(. To change the number of groups) 352.32 408 T -(bound to a key, use) 108 395 T -1 F -(XkbChang) 203.99 395 T -(eT) 254.53 395 T -(ypesOfK) 265.64 395 T -(e) 306.55 395 T -(y) 311.52 395 T -2 F -( \050see section 15.3.6\051. To obtain a mask that) 316.85 395 T -(determines the treatment of out-of-range groups, use) 108 382 T -1 F -(XkbKeyGroupInfo) 363.28 382 T -2 F -( and) 451.26 382 T -1 F -(XkbOutOf-) 474.59 382 T -(RangeGroupInfo) 108 369 T -2 F -(.) 189.32 369 T -(The keyboard controls \050see Chapter 10\051 contain a) 108 348 T -1 F -(groups_wrap) 347.94 348 T -2 F -( field specifying the han-) 411.95 348 T --0.29 (dling of illegal groups on a global basis. That is, when the user performs an action causing) 108 335 P -(the effective group to go out of the legal range, the) 108 322 T -1 F -(groups_wrap) 354.61 322 T -2 F -( field specifies how to) 418.62 322 T -(normalize the effective keyboard group to a group that is legal for the keyboard as a) 108 309 T --0.43 (whole, but there is no guarantee that the normalized group will be within the range of legal) 108 296 P -(groups for any individual key. The per-key) 108 283 T -1 F -(group_info) 317.29 283 T -2 F -( field specifies how a key treats a) 370.63 283 T -(legal effective group if the key does not have a type specified for the group of concern.) 108 270 T -(For example, the) 108 257 T -5 F --0.6 (Enter) 191.99 257 S -2 F -( key usually has just one group defined. If the user performs an) 224.99 257 T -(action causing the global keyboard group to change to) 108 244 T -5 F --0.6 (Group2) 370.96 244 S -2 F -(, the) 410.56 244 T -1 F -(group_info) 434.22 244 T -2 F -( field for) 487.56 244 T -(the) 108 231 T -5 F --0.6 (Enter) 125.66 231 S -2 F -( key describes how to handle this situation.) 158.66 231 T -(Out-of-range groups for individual keys are mapped to a legal group using the same) 108 210 T --0.18 (options as are used for the overall keyboard group. The particular type of mapping used is) 108 197 P --0.43 (controlled by the bits set in the) 108 184 P -1 F --0.43 (group_info) 255.99 184 P -2 F --0.43 ( flag, as shown in Table 15.2. See section 10.7.1) 309.33 184 P -(for more details on the normalization methods in this table.) 108 171 T -3 F -(T) 208.35 151 T -(able 15.2 gr) 215.25 151 T -(oup_inf) 277.7 151 T -(o Range Normalization) 316.75 151 T -1 F -(Bits set in gr) 109 131 T -(oup_info) 169.47 131 T -(Normalization method) 307 131 T -2 11 Q -(XkbRedirectIntoRange) 109 116.67 T -(XkbRedirectIntoRange) 307 116.67 T -(XkbClampIntoRange) 109 102.67 T -(XkbClampIntoRange) 307 102.67 T -(none of the abo) 109 88.67 T -(v) 176.96 88.67 T -(e) 182.29 88.67 T -(XkbWrapIntoRange) 307 88.67 T -108 143 522 143 2 L -V -0.5 H -0 Z -N -108 126 522 126 2 L -V -N -FMENDPAGE -%%EndPage: "134" 146 -%%Page: "135" 147 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(135) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(15 Xkb Client K) 384.01 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -2 12 Q -(Xkb provides the following macros to access group information:) 108 712 T -2 11 Q -(int) 108 691.67 T -3 F -(XkbK) 122.37 691.67 T -(eyNumGr) 150.82 691.67 T -(oups) 197.67 691.67 T -2 F -(\050) 219.68 691.67 T -1 F -(xkb, k) 223.35 691.67 T -(e) 248.89 691.67 T -(ycode) 253.44 691.67 T -2 F -(\051) 279.09 691.67 T -(/* macro */) 342 691.67 T -(XkbDescPtr) 126 678.67 T -1 F -(xkb) 234 678.67 T -2 F -(;) 249.27 678.67 T -(/* Xkb description of interest */) 342 678.67 T -(K) 126 665.67 T -(e) 133.67 665.67 T -(yCode) 138.39 665.67 T -1 F -(k) 234 665.67 T -(e) 238.77 665.67 T -(ycode) 243.33 665.67 T -2 F -(;) 268.98 665.67 T -(/* k) 342 665.67 T -(e) 358.7 665.67 T -(ycode of interest */) 363.42 665.67 T -1 12 Q -(XkbK) 108 646 T -(e) 134.24 646 T -(yNumGr) 139.21 646 T -(oups) 180 646 T -2 F -( returns the number of groups of symbols bound to the key corre-) 202.67 646 T -(sponding to) 108 633 T -1 F -(k) 167.34 633 T -(e) 172.55 633 T -(ycode) 177.52 633 T -2 F -(.) 205.5 633 T -2 11 Q -(unsigned char) 108 612.67 T -3 F -(XkbK) 172.15 612.67 T -(eyGr) 200.61 612.67 T -(oupInf) 224.24 612.67 T -(o) 255.75 612.67 T -2 F -(\050) 261.25 612.67 T -1 F -(xkb, k) 264.92 612.67 T -(e) 290.46 612.67 T -(ycode) 295.01 612.67 T -2 F -(\051) 320.66 612.67 T -(/*macro */) 342 612.67 T -(XkbDescPtr) 126 599.67 T -1 F -(xkb) 234 599.67 T -2 F -(;) 249.27 599.67 T -(/* Xkb description of interest */) 342 599.67 T -(K) 126 586.67 T -(e) 133.67 586.67 T -(yCode) 138.39 586.67 T -1 F -(k) 234 586.67 T -(e) 238.77 586.67 T -(ycode) 243.33 586.67 T -2 F -(;) 268.98 586.67 T -(/* k) 342 586.67 T -(e) 358.7 586.67 T -(ycode of interest */) 363.42 586.67 T -1 12 Q -(XkbK) 108 567 T -(e) 134.24 567 T -(yGr) 139.21 567 T -(oupInfo) 157.33 567 T -2 F -( returns the) 194.66 567 T -1 F -(group_info) 251.65 567 T -2 F -( field from the) 304.99 567 T -5 F --0.6 (XkbSymMapRec) 376.98 567 S -2 F -( structure associ-) 456.18 567 T -(ated with the key corresponding to) 108 554 T -1 F -(k) 277.31 554 T -(e) 282.52 554 T -(ycode) 287.48 554 T -2 F -(.) 315.47 554 T -2 11 Q -(unsigned char) 108 533.67 T -3 F -(XkbOutOfRangeGr) 172.15 533.67 T -(oupInf) 266.07 533.67 T -(o) 297.58 533.67 T -2 F -(\050) 303.08 533.67 T -1 F -(grp_inf) 306.75 533.67 T -2 F -(\051) 339.14 533.67 T -(/* macro */) 342.81 533.67 T -(unsigned char) 126 520.67 T -1 F -(grp_inf) 234 520.67 T -2 F -(;) 266.39 520.67 T -(/* group_info \336eld of) 342 520.67 T -5 F --0.55 (XkbSymMapRec) 439.16 520.67 S -2 F -( */) 511.76 520.67 T -1 12 Q -(XkbOutOfRang) 108 501 T -(eGr) 181.87 501 T -(oupInfo) 199.99 501 T -2 F -( returns only the out-of-range processing information from the) 237.32 501 T -1 F -(group_info) 108 488 T -2 F -( field of an) 161.34 488 T -5 F --0.6 (XkbSymMapRec) 216.66 488 S -2 F -( structure.) 295.86 488 T -2 11 Q -(unsigned char) 108 467.67 T -3 F -(XkbOutOfRangeGr) 172.15 467.67 T -(oupNumber) 266.07 467.67 T -2 F -(\050) 322.91 467.67 T -1 F -(grp_inf) 326.57 467.67 T -2 F -(\051) 358.96 467.67 T -(/* macro */) 362.63 467.67 T -(unsigned char) 126 454.67 T -1 F -(grp_inf) 234 454.67 T -2 F -(;) 266.39 454.67 T -(/* group_info \336eld of) 342 454.67 T -5 12 Q --0.6 (XkbSymMapRec) 439.16 454.67 S -2 11 Q -( */) 518.36 454.67 T -1 12 Q -(XkbOutOfRang) 108 435 T -(eGr) 181.87 435 T -(oupNumber) 199.99 435 T -2 F -( returns the out-of-range group number, represented as a) 256.66 435 T -(group index, from the) 108 422 T -1 F -(group_info) 215.65 422 T -2 F -( field of an) 268.99 422 T -5 F --0.6 (XkbSymMapRec) 324.31 422 S -2 F -( structure.) 403.51 422 T -0 F -(15.3.3) 72 397 T -(K) 108 397 T -(e) 116.48 397 T -(y Width) 122.98 397 T -2 F -(The maximum number of shift levels for a type is also referred to as the width of a key) 108 377 T --0.07 (type. The) 108 364 P -1 F --0.07 (width) 156.18 364 P -2 F --0.07 ( field of the) 182.85 364 P -1 F --0.07 (key_sym_map) 241.21 364 P -2 F --0.07 ( entry for a key contains the width of the widest) 308.52 364 P -(type associated with the key. The) 108 351 T -1 F -(width) 270.97 351 T -2 F -(field cannot be explicitly changed; it is updated) 300.65 351 T -(automatically whenever the symbols or set of types bound to a key are changed.) 108 338 T -0 F -(15.3.4) 72 313 T -(Offset in to the Symbol Map) 108 313 T -2 F -(The key width and number of groups associated with a key are used to form a small) 108 293 T -(two-dimensional array of) 108 280 T -5 F --0.6 (KeySyms) 232.31 280 S -2 F -( for a key. This array may be different sizes for differ-) 278.51 280 T --0.38 (ent keys. The array for a single key is stored as a linear list, in row-major order. The arrays) 108 267 P -(for all of the keys are stored in the) 108 254 T -1 F -(syms) 275.63 254 T -2 F -( field of the client map. There is one row for each) 298.96 254 T -(group associated with a key and one column for each level. The index corresponding to a) 108 241 T -(given group and shift level is computed as:) 108 228 T -(idx = group_index * key_width + shift_level) 126 207 T -(The) 108 186 T -1 F -(offset) 129.66 186 T -2 F -( field of the) 155.66 186 T -1 F -(key_sym_map) 214.32 186 T -2 F -( entry for a key is used to access the beginning of the) 281.63 186 T -(array.) 108 173 T --0.02 (Xkb provides the following macros for accessing the) 108 152 P -1 F --0.02 (width) 364.45 152 P -2 F --0.02 ( and) 391.13 152 P -1 F --0.02 (offset) 414.42 152 P -2 F --0.02 ( for individual keys,) 440.42 152 P -(as well as macros for accessing the two-dimensional array of symbols bound to the key:) 108 139 T -2 11 Q -(int) 108 118.67 T -3 F -(XkbK) 122.37 118.67 T -(eyGr) 150.82 118.67 T -(oupsW) 174.45 118.67 T -(idth) 207.26 118.67 T -2 F -(\050) 226.22 118.67 T -1 F -(xkb, k) 229.88 118.67 T -(e) 255.42 118.67 T -(ycode) 259.98 118.67 T -2 F -(\051) 285.63 118.67 T -(/* macro */) 342 118.67 T -(XkbDescPtr) 126 105.67 T -1 F -(xkb) 234 105.67 T -2 F -(;) 249.27 105.67 T -(/* Xkb description of interest */) 342 105.67 T -(K) 126 92.67 T -(e) 133.67 92.67 T -(yCode) 138.39 92.67 T -1 F -(k) 234 92.67 T -(e) 238.77 92.67 T -(ycode) 243.33 92.67 T -2 F -(;) 268.98 92.67 T -(/* k) 342 92.67 T -(e) 358.7 92.67 T -(ycode of interest */) 363.42 92.67 T -FMENDPAGE -%%EndPage: "135" 147 -%%Page: "136" 148 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(136) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(15 Xkb Client K) 384.01 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -1 12 Q -(XkbK) 108 712 T -(e) 134.24 712 T -(yGr) 139.21 712 T -(oupsW) 157.33 712 T -(idth) 189.34 712 T -2 F -( computes the maximum width associated with the key correspond-) 208.01 712 T -(ing to) 108 699 T -1 F -(k) 138.67 699 T -(e) 143.88 699 T -(ycode) 148.85 699 T -2 F -(.) 176.83 699 T -2 11 Q -(int) 108 678.67 T -3 F -(XkbK) 122.37 678.67 T -(eyGr) 150.82 678.67 T -(oupW) 174.45 678.67 T -(idth) 202.99 678.67 T -2 F -(\050) 221.94 678.67 T -1 F -(xkb, k) 225.6 678.67 T -(e) 251.14 678.67 T -(ycode) 255.7 678.67 T -(, grp) 281.24 678.67 T -2 F -(\051) 302.02 678.67 T -(/* macro */) 342 678.67 T -(XkbDescPtr) 126 665.67 T -1 F -(xkb) 234 665.67 T -2 F -(;) 249.27 665.67 T -(/* Xkb description of interest */) 342 665.67 T -(K) 126 652.67 T -(e) 133.67 652.67 T -(yCode) 138.39 652.67 T -1 F -(k) 234 652.67 T -(e) 238.77 652.67 T -(ycode) 243.33 652.67 T -2 F -(;) 268.98 652.67 T -(/* k) 342 652.67 T -(e) 358.7 652.67 T -(ycode of interest */) 363.42 652.67 T -(int) 126 639.67 T -1 F -(grp) 234 639.67 T -2 F -(;) 249.28 639.67 T -(/* group of interest */) 342 639.67 T -1 12 Q -(XkbK) 108 620 T -(e) 134.24 620 T -(yGr) 139.21 620 T -(oupW) 157.33 620 T -(idth) 184.67 620 T -2 F -( computes the width of the type associated with the group) 203.34 620 T -1 F -(grp) 482.98 620 T -2 F -( for the) 499.64 620 T -(key corresponding to) 108 607 T -1 F -(k) 212.32 607 T -(e) 217.52 607 T -(ycode) 222.49 607 T -2 F -(.) 250.48 607 T -2 11 Q -(int) 108 586.67 T -3 F -(XkbK) 122.37 586.67 T -(eySymsOffset) 150.82 586.67 T -2 F -(\050) 214.98 586.67 T -1 F -(xkb, k) 218.64 586.67 T -(e) 244.18 586.67 T -(ycode) 248.73 586.67 T -2 F -(\051) 274.39 586.67 T -(/* macro */) 342 586.67 T -(XkbDescPtr) 126 573.67 T -1 F -(xkb) 234 573.67 T -2 F -(;) 249.27 573.67 T -(/* Xkb description of interest */) 342 573.67 T -(K) 126 560.67 T -(e) 133.67 560.67 T -(yCode) 138.39 560.67 T -1 F -(k) 234 560.67 T -(e) 238.77 560.67 T -(ycode) 243.33 560.67 T -2 F -(;) 268.98 560.67 T -(/* k) 342 560.67 T -(e) 358.7 560.67 T -(ycode of interest */) 363.42 560.67 T -1 12 Q -(XkbK) 108 541 T -(e) 134.24 541 T -(ySymsOf) 139.21 541 T -(fset) 180.98 541 T -2 F -( returns the offset of the two-dimensional array of keysyms for the key) 197.65 541 T -(corresponding to) 108 528 T -1 F -(k) 191.99 528 T -(e) 197.2 528 T -(ycode) 202.16 528 T -2 F -(.) 230.15 528 T -2 11 Q -(int) 108 507.67 T -3 F -(XkbK) 122.37 507.67 T -(eyNumSyms) 150.82 507.67 T -2 F -(\050) 209.49 507.67 T -1 F -(xkb, k) 213.15 507.67 T -(e) 238.69 507.67 T -(ycode) 243.24 507.67 T -2 F -(\051) 268.9 507.67 T -(/* macro */) 342 507.67 T -(XkbDescPtr) 126 494.67 T -1 F -(xkb) 234 494.67 T -2 F -(;) 249.27 494.67 T -(/* Xkb description of interest */) 342 494.67 T -(K) 126 481.67 T -(e) 133.67 481.67 T -(yCode) 138.39 481.67 T -1 F -(k) 234 481.67 T -(e) 238.77 481.67 T -(ycode) 243.33 481.67 T -2 F -(;) 268.98 481.67 T -(/* k) 342 481.67 T -(e) 358.7 481.67 T -(ycode of interest */) 363.42 481.67 T -1 12 Q -(XkbK) 108 462 T -(e) 134.24 462 T -(yNumSyms) 139.21 462 T -2 F -( returns the total number of keysyms for the key corresponding to) 191.87 462 T -1 F -(k) 509.82 462 T -(e) 515.03 462 T -(y-) 520 462 T -(code) 108 449 T -2 F -(.) 130.66 449 T -2 11 Q -(K) 108 428.67 T -(e) 115.67 428.67 T -(ySym *) 120.39 428.67 T -3 F -(XkbK) 157.06 428.67 T -(eySymsPtr) 185.52 428.67 T -2 F -(\050) 236.23 428.67 T -1 F -(xkb, k) 239.89 428.67 T -(e) 265.43 428.67 T -(ycode) 269.99 428.67 T -2 F -(\051) 295.64 428.67 T -(/* macro */) 342 428.67 T -(XkbDescPtr) 126 415.67 T -1 F -(xkb) 234 415.67 T -2 F -(;) 249.27 415.67 T -(/* Xkb description of interest */) 342 415.67 T -(K) 126 402.67 T -(e) 133.67 402.67 T -(yCode) 138.39 402.67 T -1 F -(k) 234 402.67 T -(e) 238.77 402.67 T -(ycode) 243.33 402.67 T -2 F -(;) 268.98 402.67 T -(/* k) 342 402.67 T -(e) 358.7 402.67 T -(ycode of interest */) 363.42 402.67 T -1 12 Q -(XkbK) 108 383 T -(e) 134.24 383 T -(ySymsPtr) 139.21 383 T -2 F -( returns the pointer to the two-dimensional array of keysyms for the key) 184.54 383 T -(corresponding to) 108 370 T -1 F -(k) 191.99 370 T -(e) 197.2 370 T -(ycode) 202.16 370 T -2 F -(.) 230.15 370 T -2 11 Q -(K) 108 349.67 T -(e) 115.67 349.67 T -(ySym) 120.39 349.67 T -3 F -(XkbK) 148.81 349.67 T -(eySymEntry) 177.27 349.67 T -2 F -(\050) 235.93 349.67 T -1 F -(xkb, k) 239.59 349.67 T -(e) 265.14 349.67 T -(ycode) 269.69 349.67 T -(, shift, grp) 295.23 349.67 T -2 F -(\051) 340.46 349.67 T -(/* macro */) 344.13 349.67 T -(XkbDescPtr) 126 336.67 T -1 F -(xkb) 234 336.67 T -2 F -(;) 249.27 336.67 T -(/* Xkb description of interest */) 342 336.67 T -(K) 126 323.67 T -(e) 133.67 323.67 T -(yCode) 138.39 323.67 T -1 F -(k) 234 323.67 T -(e) 238.77 323.67 T -(ycode) 243.33 323.67 T -2 F -(;) 268.98 323.67 T -(/* k) 342 323.67 T -(e) 358.7 323.67 T -(ycode of interest */) 363.42 323.67 T -(int) 126 310.67 T -1 F -(shift) 234 310.67 T -2 F -(;) 252.95 310.67 T -(/* shift le) 342 310.67 T -(v) 383.28 310.67 T -(el of interest */) 388.62 310.67 T -(int) 126 297.67 T -1 F -(grp) 234 297.67 T -2 F -(;) 249.28 297.67 T -(/* group of interest */) 342 297.67 T -1 12 Q --0.5 (XkbK) 108 278 P --0.5 (e) 134.24 278 P --0.5 (ySymEntry) 139.21 278 P -2 F --0.5 ( returns the) 191.2 278 P -5 F --1.09 -0.6 (keysym) 246.7 278 B -2 F --0.5 ( corresponding to shift level) 286.3 278 P -1 F --0.5 (shift) 421.48 278 P -2 F --0.5 ( and group) 442.15 278 P -1 F --0.5 (grp) 494.99 278 P -2 F --0.5 ( from) 511.66 278 P -(the two-dimensional array of keysyms for the key corresponding to) 108 265 T -1 F -(k) 433.94 265 T -(e) 439.15 265 T -(ycode) 444.12 265 T -0 F -(15.3.5) 72 240 T -(Getting the Symbol Map f) 108 240 T -(or K) 252.44 240 T -(e) 276.26 240 T -(ys fr) 282.76 240 T -(om the Ser) 307.86 240 T -(ver) 370 240 T -2 F -(To obtain the symbols for a subset of the keys in a keyboard description, use) 108 220 T -1 F -(XkbGetKey-) 478.62 220 T -(Syms) 108 207 T -2 F -(:) 132.66 207 T -2 11 Q -(Status) 108 186.67 T -3 F -(XkbGetK) 137.65 186.67 T -(eySyms) 183.21 186.67 T -2 F -(\050) 218.65 186.67 T -1 F -(dpy) 222.31 186.67 T -2 F -(,) 237.48 186.67 T -1 F -( \336r) 240.23 186.67 T -(st) 252.65 186.67 T -2 F -(,) 259.99 186.67 T -1 F -(num) 265.49 186.67 T -2 F -(,) 284.43 186.67 T -1 F -( xkb) 287.18 186.67 T -2 F -(\051) 305.2 186.67 T -(Display *) 126 173.67 T -1 F -(dpy) 234 173.67 T -2 F -(;) 249.88 173.67 T -(/* connection to X serv) 306 173.67 T -(er */) 408.49 173.67 T -(unsigned int) 126 160.67 T -1 F -(\336r) 234 160.67 T -(st) 243.67 160.67 T -2 F -(;) 251.01 160.67 T -(/* k) 306 160.67 T -(e) 322.7 160.67 T -(ycode of \336rst k) 327.42 160.67 T -(e) 393.6 160.67 T -(y to get */) 398.32 160.67 T -(unsigned int) 126 147.67 T -1 F -(num) 234 147.67 T -2 F -(;) 252.94 147.67 T -(/* number of k) 306 147.67 T -(e) 370.97 147.67 T -(ycodes for which syms desired */) 375.68 147.67 T -(XkbDescPtr) 126 134.67 T -1 F -(xkb) 234 134.67 T -2 F -(;) 249.27 134.67 T -(/* Xkb description to be updated */) 306 134.67 T -1 12 Q -(XkbGetK) 108 115 T -(e) 151.57 115 T -(ySyms) 156.54 115 T -2 F -( sends a request to the server to obtain the set of keysyms bound to) 186.53 115 T -1 F -(num) 510.16 115 T -2 F -(keys starting with the key whose keycode is) 108 102 T -1 F -(first) 321.97 102 T -2 F -(. It waits for a reply and returns the key-) 341.32 102 T -(syms in the) 108 89 T -1 F -(map.syms) 165.67 89 T -2 F -( field of) 212.66 89 T -1 F -(xkb) 253.66 89 T -2 F -(. If successful,) 270.31 89 T -1 F -(XkbGetK) 342.62 89 T -(e) 386.2 89 T -(ySyms) 391.16 89 T -2 F -( returns) 421.15 89 T -5 F --0.6 (Success) 460.48 89 S -2 F -(. The) 506.68 89 T -1 F -(xkb) 108 76 T -2 F -( parameter must be a pointer to a valid Xkb keyboard description.) 124.66 76 T -FMENDPAGE -%%EndPage: "136" 148 -%%Page: "137" 149 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(137) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(15 Xkb Client K) 384.01 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -2 12 Q -(If the client) 108 712 T -1 F -(map) 166.32 712 T -2 F -( in the) 186.98 712 T -1 F -(xkb) 219.98 712 T -2 F -( parameter has not been allocated,) 236.64 712 T -1 F -(XkbGetK) 402.92 712 T -(e) 446.5 712 T -(ySyms) 451.46 712 T -2 F -( allocates) 481.45 712 T -(and initializes it before obtaining the symbols.) 108 699 T -(If a compatible version of Xkb is not available in the server or the Xkb extension has not) 108 678 T -(been properly initialized,) 108 665 T -1 F -(XkbGetK) 231.31 665 T -(e) 274.88 665 T -(ySyms) 279.85 665 T -2 F -( returns) 309.84 665 T -5 F --0.6 (BadAccess) 349.16 665 S -2 F -(. If) 408.57 665 T -1 F -(num) 425.56 665 T -2 F -( is less than 1 or) 446.22 665 T -(greater than) 108 652 T -5 F --0.6 (XkbMaxKeyCount) 167.98 652 S -2 F -(,) 260.38 652 T -1 F -(XkbGetK) 266.38 652 T -(e) 309.95 652 T -(ySyms) 314.92 652 T -2 F -( returns) 344.91 652 T -5 F --0.6 (BadValue) 384.23 652 S -2 F -(. If any allocation) 437.03 652 T -(errors occur,) 108 639 T -1 F -(XkbGetK) 171.64 639 T -(e) 215.21 639 T -(ySyms) 220.18 639 T -2 F -( returns) 250.16 639 T -5 F --0.6 (BadAlloc) 289.49 639 S -2 F -(.) 342.29 639 T -0 F -(15.3.6) 72 614 T -(Changing the Number of Gr) 108 614 T -(oups and T) 265.1 614 T -(ypes Bound to a K) 328.39 614 T -(e) 433.56 614 T -(y) 440.05 614 T -2 F -(To change the number of groups and the types bound to a key, use) 108 594 T -1 F -(XkbChang) 429.61 594 T -(eT) 480.16 594 T -(ype-) 491.27 594 T -(sOfK) 108 581 T -(e) 132.25 581 T -(y) 137.22 581 T -2 F -(.) 142.55 581 T -(Status) 108 560 T -3 11 Q -(XkbChangeT) 140.34 560 T -(ypesOfK) 203.1 560 T -(ey) 244.38 560 T -2 12 Q -(\050) 254.76 560 T -1 11 Q -(xkb) 258.76 560 T -2 12 Q -(,) 274.03 560 T -1 11 Q -( k) 277.03 560 T -(e) 284.55 560 T -(y) 289.1 560 T -2 12 Q -(,) 293.99 560 T -1 11 Q -( n_gr) 296.99 560 T -(oups) 320.02 560 T -2 12 Q -(,) 340.8 560 T -1 11 Q -( gr) 343.8 560 T -(oups) 355.83 560 T -2 12 Q -(,) 376.61 560 T -1 11 Q -( ne) 379.61 560 T -(w_types_in) 392.58 560 T -2 12 Q -(,) 442.08 560 T -1 11 Q -( p_c) 445.08 560 T -(hang) 463.55 560 T -(es) 485.44 560 T -2 12 Q -(\051) 494.61 560 T -2 11 Q -(XkbDescPtr) 126 539.67 T -1 F -(xkb) 234 539.67 T -2 F -(;) 249.27 539.67 T -(/* k) 306 539.67 T -(e) 322.7 539.67 T -(yboard description to be changed */) 327.42 539.67 T -(int) 126 526.67 T -1 F -(k) 234 526.67 T -(e) 238.77 526.67 T -(y) 243.33 526.67 T -2 F -(;) 248.21 526.67 T -(/* k) 306 526.67 T -(e) 322.7 526.67 T -(ycode for k) 327.42 526.67 T -(e) 377.4 526.67 T -(y of interest */) 382.12 526.67 T -(int) 126 513.67 T -1 F -(n_gr) 234 513.67 T -(oups) 254.28 513.67 T -2 F -(;) 275.06 513.67 T -(/* ne) 306 513.67 T -(w number of groups for k) 327.42 513.67 T -(e) 440.04 513.67 T -(y */) 444.75 513.67 T -(unsigned int) 126 500.67 T -1 F -(gr) 234 500.67 T -(oups) 243.28 500.67 T -2 F -(;) 264.06 500.67 T -(/* mask indicating groups to change */) 306 500.67 T -(int *) 126 487.67 T -1 F -(ne) 234 487.67 T -(w_types_in) 244.22 487.67 T -2 F -(;) 293.72 487.67 T -(/* indices for ne) 306 487.67 T -(w groups speci\336ed in) 376.91 487.67 T -1 F -(gr) 473.45 487.67 T -(oups) 482.74 487.67 T -2 F -( */) 503.52 487.67 T -(XkbMapChangesPtr) 126 474.67 T -1 F -(p_c) 234 474.67 T -(hang) 249.72 474.67 T -(es) 271.61 474.67 T -2 F -(;) 280.77 474.67 T -(/* notes changes made to) 306 474.67 T -1 F -(xkb) 419.34 474.67 T -2 F -( */) 434.61 474.67 T -1 12 Q --0.46 (XkbChang) 108 455 P --0.46 (eT) 158.54 455 P --0.46 (ypesOfK) 169.66 455 P --0.46 (e) 210.56 455 P --0.46 (y) 215.53 455 P -2 F --0.46 ( reallocates the symbols and actions bound to the key, if necessary,) 220.86 455 P -(and initializes any new symbols or actions to) 108 442 T -5 F --0.6 (NoSymbol) 326.65 442 S -2 F -( or) 379.45 442 T -5 F --0.6 (NoAction) 395.45 442 S -2 F -(, as appropriate. If) 448.25 442 T -(the) 108 429 T -1 F -(p_changes) 125.66 429 T -2 F -( parameter is not) 176.99 429 T -5 F --0.6 (NULL) 260.3 429 S -2 F -(,) 286.7 429 T -1 F -(XkbChang) 292.7 429 T -(eT) 343.25 429 T -(ypesOfK) 354.36 429 T -(e) 395.27 429 T -(y) 400.24 429 T -2 F -( adds the) 405.56 429 T -5 F --0.6 (XkbKeySyms-) 451.22 429 S --0.6 (Mask) 108 416 S -2 F -( to the) 134.4 416 T -1 F -(changes) 167.4 416 T -2 F -( field of) 206.73 416 T -1 F -(p_changes) 247.72 416 T -2 F -( and modifies the) 299.04 416 T -1 F -(first_key_sym) 385.03 416 T -2 F -( and) 451.02 416 T -1 F --0.45 (num_key_syms) 108 403 P -2 F --0.45 ( fields of) 179.98 403 P -1 F --0.45 (p_changes) 224.3 403 P -2 F --0.45 ( to include the) 275.62 403 P -1 F --0.45 (key) 345.17 403 P -2 F --0.45 ( that was changed. See section 14.3.1) 361.15 403 P -(for more information on the) 108 390 T -5 F --0.6 (XkbMapChangesPtr) 244.98 390 S -2 F -( structure. If successful,) 350.58 390 T -1 F -(XkbChang) 467.88 390 T -(e-) 518.43 390 T -(T) 108 377 T -(ypesOfK) 113.78 377 T -(e) 154.69 377 T -(y) 159.66 377 T -2 F -( returns) 164.99 377 T -5 F --0.6 (Success) 204.31 377 S -2 F -(.) 250.51 377 T -(The) 108 356 T -1 F -(n_groups) 129.66 356 T -2 F -( parameter specifies the new number of groups for the key. The) 175 356 T -1 F -(groups) 482.58 356 T -2 F -(parameter is a mask specifying the groups for which new types are supplied and is a bit-) 108 343 T -(wise inclusive OR of the following masks:) 108 330 T -5 F --0.6 (XkbGroup1Mask) 315.66 330 S -2 F -(,) 401.46 330 T -5 F --0.6 (XkbGroup2Mask) 407.46 330 S -2 F -(,) 493.26 330 T -5 F --0.6 (XkbGroup3Mask) 108 317 S -2 F -(, and) 193.8 317 T -5 F --0.6 (XkbGroup4Mask) 220.13 317 S -2 F -(.) 305.93 317 T --0.15 (The) 108 296 P -1 F --0.15 (new_types_in) 129.51 296 P -2 F --0.15 ( parameter is an integer array of length) 194.84 296 P -1 F --0.15 (n_groups) 382.95 296 P -2 F --0.15 (. Each entry represents) 428.29 296 P -(the type to use for the associated group and is an index into) 108 283 T -1 F -(xkb) 395.63 283 T -2 F -(->) 412.28 283 T -1 F -(map->types) 423.05 283 T -2 F -(. The) 480.47 283 T -1 F -(ne) 108 270 T -(w_types_in) 119.15 270 T -2 F -( array is indexed by group index; if) 173.15 270 T -1 F -(n_gr) 345.12 270 T -(oups) 367.25 270 T -2 F -( is four and) 389.92 270 T -1 F -(gr) 447.24 270 T -(oups) 457.37 270 T -2 F -( only has) 480.04 270 T -5 F --0.6 (Group1Mask) 108 257 S -2 F -( and) 174 257 T -5 F --0.6 (Group3Mask) 197.33 257 S -2 F -( set,) 263.33 257 T -1 F -(ne) 285.66 257 T -(w_types_in) 296.81 257 T -2 F -( looks like this:) 350.81 257 T -(new_types_in[0] = type for Group1) 126 236 T -(new_types_in[1] = ignored) 126 223 T -(new_types_in[2] = type for Group3) 126 210 T -(new_types_in[3] = ignored) 126 197 T -(For convenience, Xkb provides the following constants to use as indices to the groups:) 108 176 T -3 F -(T) 241.52 156 T -(able 15.3 Gr) 248.42 156 T -(oup Index Constants) 314.21 156 T -1 F -(Constant Name) 253 136 T -(V) 361 136 T -(alue) 367 136 T -2 11 Q -(XkbGroup1Inde) 253 121.67 T -(x) 324.93 121.67 T -(0) 361 121.67 T -(XkbGroup2Inde) 253 107.67 T -(x) 324.93 107.67 T -(1) 361 107.67 T -(XkbGroup3Inde) 253 93.67 T -(x) 324.93 93.67 T -(2) 361 93.67 T -(XkbGroup4Inde) 253 79.67 T -(x) 324.93 79.67 T -(3) 361 79.67 T -252 148 396 148 2 L -V -0.5 H -0 Z -N -252 131 396 131 2 L -V -N -FMENDPAGE -%%EndPage: "137" 149 -%%Page: "138" 150 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(138) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(15 Xkb Client K) 384.01 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -2 12 Q -(If the Xkb extension has not been properly initialized,) 108 712 T -1 F -(XkbChang) 369.96 712 T -(eT) 420.5 712 T -(ypesOfK) 431.62 712 T -(e) 472.52 712 T -(y) 477.49 712 T -2 F -( returns) 482.82 712 T -5 F --0.6 (BadAccess) 108 699 S -2 F -(. If the) 167.4 699 T -1 F -(xkb) 202.06 699 T -2 F -( parameter it not valid \050that is, it is) 218.71 699 T -5 F --0.6 (NULL) 387.37 699 S -2 F -( or it does not contain a) 413.77 699 T -(valid client map\051,) 108 686 T -1 F -(XkbChang) 195.32 686 T -(eT) 245.87 686 T -(ypesOfK) 256.98 686 T -(e) 297.89 686 T -(y) 302.86 686 T -2 F -( returns) 308.18 686 T -5 F --0.6 (Bad) 347.51 686 S -2 F -(Match. If the) 367.31 686 T -1 F -(key) 432.62 686 T -2 F -( is not a valid key-) 448.61 686 T -(code,) 108 673 T -1 F -(n_groups) 136.66 673 T -2 F -( is greater than) 181.99 673 T -5 F --0.6 (XkbNumKbdGroups) 255.97 673 S -2 F -(, or the) 354.97 673 T -1 F -(groups) 391.63 673 T -2 F -( mask does not contain) 424.97 673 T --0.15 (any of the valid group mask bits,) 108 660 P -1 F --0.15 (XkbChang) 267.6 660 P --0.15 (eT) 318.15 660 P --0.15 (ypesOfK) 329.26 660 P --0.15 (e) 370.17 660 P --0.15 (y) 375.13 660 P -2 F --0.15 ( returns) 380.46 660 P -5 F --0.33 -0.6 (BadValue) 419.48 660 B -2 F --0.15 (. If it is neces-) 472.29 660 P -(sary to resize the key symbols or key actions arrays and any allocation errors occur,) 108 647 T -1 F -(XkbChang) 108 634 T -(eT) 158.54 634 T -(ypesOfK) 169.66 634 T -(e) 210.56 634 T -(y) 215.53 634 T -2 F -( returns) 220.86 634 T -5 F --0.6 (BadAlloc) 260.18 634 S -2 F -(.) 312.98 634 T -0 F -(15.3.7) 72 609 T -(Changing the Number of Symbols Bound to a K) 108 609 T -(e) 379.18 609 T -(y) 385.67 609 T -2 F -(To change the number of symbols bound to a key, use) 108 589 T -1 F -(XkbResizeKeySyms) 370.63 589 T -2 F -(.) 463.27 589 T -2 11 Q -(K) 108 568.67 T -(e) 115.67 568.67 T -(ySym *) 120.39 568.67 T -3 F -(XkbResizeK) 154.31 568.67 T -(eySyms) 212.7 568.67 T -2 F -(\050) 248.14 568.67 T -1 F -(xkb) 251.8 568.67 T -2 F -(,) 267.07 568.67 T -1 F -( k) 269.82 568.67 T -(e) 277.35 568.67 T -(y) 281.9 568.67 T -2 F -(,) 286.07 568.67 T -1 F -( needed) 288.82 568.67 T -2 F -(\051) 322.72 568.67 T -(XkbDescRec *) 126 555.67 T -1 F -(xkb) 234 555.67 T -2 F -(;) 249.27 555.67 T -(/* k) 306 555.67 T -(e) 322.7 555.67 T -(yboard description to be changed */) 327.42 555.67 T -(int) 126 542.67 T -1 F -(k) 234 542.67 T -(e) 238.77 542.67 T -(y) 243.33 542.67 T -2 F -(;) 248.21 542.67 T -(/* k) 306 542.67 T -(e) 322.7 542.67 T -(ycode for k) 327.42 542.67 T -(e) 377.4 542.67 T -(y to modify */) 382.12 542.67 T -(int) 126 529.67 T -1 F -(needed) 234 529.67 T -2 F -(;) 265.15 529.67 T -(/* ne) 306 529.67 T -(w number of k) 327.42 529.67 T -(e) 391.77 529.67 T -(ysyms required for k) 396.49 529.67 T -(e) 487.72 529.67 T -(y */) 492.44 529.67 T -1 12 Q --0.21 (XkbResizeK) 108 510 P --0.21 (e) 164.9 510 P --0.21 (ySyms) 169.87 510 P -2 F --0.21 ( reserves the space needed for) 199.86 510 P -1 F --0.21 (needed) 345.19 510 P -2 F --0.21 ( keysyms and returns a pointer to) 379.17 510 P -(the beginning of the new array that holds the keysyms. It adjusts the) 108 497 T -1 F -(offset) 437.96 497 T -2 F -( field of the) 463.97 497 T -1 F --0.24 (key_sym_map) 108 484 P -2 F --0.24 ( entry for the key if necessary and can also change the) 175.31 484 P -1 F --0.24 (syms) 435.06 484 P -2 F --0.24 (,) 458.39 484 P -1 F --0.24 (num_syms) 464.15 484 P -2 F --0.24 (, and) 514.14 484 P -1 F --0.14 (size_syms) 108 471 P -2 F --0.14 ( fields of) 155.33 471 P -1 F --0.14 (xkb) 200.56 471 P -2 F --0.14 (-) 217.21 471 P -1 F --0.14 (>map) 221.21 471 P -2 F --0.14 ( if it is necessary to reallocate the) 249.97 471 P -1 F --0.14 (syms) 412.12 471 P -2 F --0.14 ( array.) 435.44 471 P -1 F --0.14 (XkbResizeK) 468.8 471 P --0.14 (e) 525.71 471 P --0.14 (y-) 530.68 471 P -(Syms) 108 458 T -2 F -( does not modify either the width or number of groups associated with the key.) 132.66 458 T -(If) 108 437 T -1 F -(needed) 118.99 437 T -2 F -( is greater than the current number of keysyms for the key,) 152.98 437 T -1 F -(XkbResizeK) 437.24 437 T -(e) 494.15 437 T -(ySyms) 499.12 437 T -2 F -(initializes all new keysyms in the array to) 108 424 T -5 F --0.6 (NoSymbol) 310.64 424 S -2 F -(.) 363.45 424 T --0.29 (Because the number of symbols needed by a key is normally computed as width * number) 108 403 P -(of groups, and) 108 390 T -1 F -(XkbResizeK) 179.99 390 T -(e) 236.89 390 T -(ySyms) 241.86 390 T -2 F -( does not modify either the width or number of groups) 271.85 390 T -(for the key, a discrepancy exists upon return from) 108 377 T -1 F -(XkbResizeK) 349.94 377 T -(e) 406.85 377 T -(ySyms) 411.82 377 T -2 F -( between the space) 441.8 377 T -(allocated for the keysyms and the number required. The unused entries in the list of sym-) 108 364 T --0.41 (bols returned by) 108 351 P -1 F --0.41 (XkbResizeK) 187.77 351 P --0.41 (e) 244.67 351 P --0.41 (ySyms) 249.64 351 P -2 F --0.41 ( are not preserved across future calls to any of the map) 279.63 351 P -(editing functions, so you must update the key symbol mapping \050which updates the width) 108 338 T -(and number of groups for the key\051 before calling another allocator function. A call to) 108 325 T -1 F -(XkbChang) 108 312 T -(eT) 158.54 312 T -(ypesOfK) 169.66 312 T -(e) 210.56 312 T -(y) 215.53 312 T -2 F -( will update the mapping.) 220.86 312 T -(If any allocation errors occur while resizing the number of symbols bound to the key,) 108 291 T -1 F -(XkbResizeK) 108 278 T -(e) 164.9 278 T -(ySyms) 169.87 278 T -2 F -( returns) 199.86 278 T -5 F --0.6 (NULL) 239.18 278 S -2 F -(.) 265.58 278 T -0 F -(Note) 126 257.67 T -2 11 Q -(A change to the number of symbols bound to a k) 162 257.67 T -(e) 376.37 257.67 T -(y should be accompanied by a) 381.09 257.67 T -(change in the number of actions bound to a k) 162 245.67 T -(e) 360.17 245.67 T -(y) 364.88 245.67 T -(. Refer to section 16.1.16 for more) 369.67 245.67 T -(information on changing the number of actions bound to a k) 162 233.67 T -(e) 426.47 233.67 T -(y) 431.19 233.67 T -(.) 435.98 233.67 T -0 12 Q -(15.4) 72 209 T -(The P) 108 209 T -(er) 140.32 209 T -(-K) 151.42 209 T -(e) 163.9 209 T -(y Modi\336er Map) 170.39 209 T -2 F -(The) 108 189 T -1 F -(modmap) 129.66 189 T -2 F -( entry of the client map is an array, indexed by keycode, specifying the real) 170.99 189 T --0.2 (modifiers bound to a key. Each entry is a mask composed of a bitwise inclusive OR of the) 108 176 P -(legal real modifiers:) 108 163 T -5 F --0.6 (ShiftMask) 207.65 163 S -2 F -(,) 267.05 163 T -5 F --0.6 (LockMask) 273.05 163 S -2 F -(,) 325.85 163 T -5 F --0.6 (ControlMask) 331.85 163 S -2 F -(,) 404.45 163 T -5 F --0.6 (Mod1Mask) 410.45 163 S -2 F -(,) 463.25 163 T -5 F --0.6 (Mod2Mask) 469.25 163 S -2 F -(,) 522.05 163 T -5 F --0.6 (Mod3Mask) 108 150 S -2 F -(,) 160.8 150 T -5 F --0.6 (Mod4Mask) 166.8 150 S -2 F -(, and) 219.6 150 T -5 F --0.6 (Mod5Mask) 245.93 150 S -2 F -(. If a bit is set in a) 298.73 150 T -1 F -(modmap) 387.72 150 T -2 F -( entry, the correspond-) 429.05 150 T -(ing key is bound to that modifier.) 108 137 T --0.22 (Pressing or releasing the key bound to a modifier changes the modifier set and unset state.) 108 116 P -(The particular manner in which the modifier set and unset state changes is determined by) 108 103 T -(the behavior and actions assigned to the key \050see Chapter 16\051.) 108 90 T -FMENDPAGE -%%EndPage: "138" 150 -%%Page: "139" 151 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(139) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(15 Xkb Client K) 384.01 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -0 12 Q -(15.4.1) 72 712 T -(Getting the P) 108 712 T -(er) 182.32 712 T -(-K) 193.42 712 T -(e) 205.9 712 T -(y Modi\336er Map fr) 212.39 712 T -(om the Ser) 308.16 712 T -(ver) 370.3 712 T -2 F -(To update the modifier map for one or more of the keys in a keyboard description, use) 108 692 T -1 F -(XkbGetKeyModifierMap) 108 679 T -2 F -(.) 226.64 679 T -2 11 Q -(Status) 108 658.67 T -3 F -(XkbGetK) 137.65 658.67 T -(eyModi\336erMap) 183.21 658.67 T -2 F -(\050) 256.53 658.67 T -1 F -(dpy) 260.2 658.67 T -2 F -(,) 275.36 658.67 T -1 F -( \336r) 278.11 658.67 T -(st) 290.53 658.67 T -2 F -(,) 297.87 658.67 T -1 F -( num) 300.62 658.67 T -2 F -(,) 322.31 658.67 T -1 F -( xkb) 325.06 658.67 T -2 F -(\051) 343.08 658.67 T -(Display *) 126 645.67 T -1 F -(dpy) 234 645.67 T -2 F -(;) 249.88 645.67 T -(/* connection to X serv) 306 645.67 T -(er */) 408.49 645.67 T -(unsigned int) 126 632.67 T -1 F -(\336r) 234 632.67 T -(st) 243.67 632.67 T -2 F -(;) 251.01 632.67 T -(/* k) 306 632.67 T -(e) 322.7 632.67 T -(ycode of \336rst k) 327.42 632.67 T -(e) 393.6 632.67 T -(y to get */) 398.32 632.67 T -(unsigned int) 126 619.67 T -1 F -(num) 234 619.67 T -2 F -(;) 252.94 619.67 T --0.14 (/* number of k) 306 619.67 P --0.14 (e) 370.54 619.67 P --0.14 (ys for which information is desired */) 375.26 619.67 P -(XkbDescPtr) 126 606.67 T -1 F -(xkb) 234 606.67 T -2 F -(;) 249.27 606.67 T -(/* k) 306 606.67 T -(e) 322.7 606.67 T -(yboard description to update */) 327.42 606.67 T -1 12 Q -(XkbGetK) 108 587 T -(e) 151.57 587 T -(yModi\336erMap) 156.54 587 T -2 F -( sends a request to the server for the modifier mappings for) 225.19 587 T -1 F -(num) 511.8 587 T -2 F --0.19 (keys starting with the key whose keycode is) 108 574 P -1 F --0.19 (\336r) 320.42 574 P --0.19 (st) 330.97 574 P -2 F --0.19 (. It waits for a reply and places the results) 338.98 574 P -(in the) 108 561 T -1 F -(xkb) 138 561 T -2 F -(->map->modmap array. If successful,) 154.66 561 T -1 F -(XkbGetK) 338.81 561 T -(e) 382.38 561 T -(yModi\336er) 387.35 561 T -2 F -( returns) 434 561 T -5 F --0.6 (Success) 473.33 561 S -2 F -(.) 519.53 561 T -(If the map component of the) 108 540 T -1 F -(xkb) 247.31 540 T -2 F -( parameter has not been allocated,) 263.96 540 T -1 F -(XkbGetK) 430.25 540 T -(e) 473.82 540 T -(yModi\336er-) 478.79 540 T -(Map) 108 527 T -2 F -( allocates and initializes it.) 130 527 T -(If a compatible version of Xkb is not available in the server or the Xkb extension has not) 108 506 T -(been properly initialized,) 108 493 T -1 F -(XkbGetK) 231.31 493 T -(e) 274.88 493 T -(ySyms) 279.85 493 T -2 F -( returns) 309.84 493 T -5 F --0.6 (BadAccess) 349.16 493 S -2 F -(. If any allocation errors) 408.57 493 T -(occur while obtaining the modifier map,) 108 480 T -1 F -(XkbGetK) 304.31 480 T -(e) 347.88 480 T -(yModi\336erMap) 352.85 480 T -2 F -( returns) 421.5 480 T -5 F --0.6 (BadAlloc) 460.82 480 S -2 F -(.) 513.62 480 T -FMENDPAGE -%%EndPage: "139" 151 -%%Page: "140" 152 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(140) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(16 Xkb Serv) 382.36 744.87 T -(er K) 443.3 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -0 14 Q -(16) 72 710.67 T -(Xkb Ser) 108 710.67 T -(ver K) 160.28 710.67 T -(e) 195.08 710.67 T -(yboar) 202.65 710.67 T -(d Mapping) 240.5 710.67 T -2 12 Q --0.18 (The) 108 688 P -1 F --0.18 (server) 129.48 688 P -2 F --0.18 ( field of the complete Xkb keyboard description \050see section 6.1\051 is a pointer to) 159.47 688 P -(the Xkb server map.) 108 675 T -(Figure 16.1 shows the relationships between elements in the server map:) 108 654 T -3 F -(Figur) 215.94 263 T -(e 16.1 Ser) 244.39 263 T -(v) 293.93 263 T -(er Map Relationships) 299.81 263 T -2 F --0.02 (The Xkb server map contains the information the server needs to interpret key events and) 108 235 P -(is of type) 108 222 T -5 F --0.6 (XkbServerMapRec) 155.66 222 S -2 F -(:) 254.67 222 T -2 11 Q -(#de\336ne XkbNumV) 126 196.67 T -(irtualMods) 209.36 196.67 T -(16) 306 196.67 T -(typedef struct {) 126 176.67 T -(/* Serv) 306 176.67 T -(er Map */) 337.31 176.67 T -(unsigned short) 144 163.67 T -(num_acts;) 234 163.67 T -(/* # of occupied entries in) 306 163.67 T -1 F -(acts) 423.32 163.67 T -2 F -( */) 441.04 163.67 T -(unsigned short) 144 150.67 T -(size_acts;) 234 150.67 T -(/* # of entries in) 306 150.67 T -1 F -(acts) 380.86 150.67 T -2 F -( */) 398.58 150.67 T -(XkbAction *) 144 137.67 T -(acts;) 234 137.67 T -(/* linear 2d tables of k) 306 137.67 T -(e) 404.57 137.67 T -(y actions, 1 per k) 409.29 137.67 T -(e) 484.64 137.67 T -(ycode */) 489.36 137.67 T -(XkbBeha) 144 124.67 T -(vior *) 185.33 124.67 T -(beha) 234 124.67 T -(viors;) 254.55 124.67 T -(/* k) 306 124.67 T -(e) 322.7 124.67 T -(y beha) 327.42 124.67 T -(viors,1 per k) 356.21 124.67 T -(e) 411.4 124.67 T -(ycode */) 416.12 124.67 T -(unsigned short *) 144 111.67 T -(k) 234 111.67 T -(e) 239.39 111.67 T -(y_acts;) 244.11 111.67 T -(/* inde) 306 111.67 T -(x into) 336.08 111.67 T -1 F -(acts) 364.2 111.67 T -2 F -(, 1 per k) 381.92 111.67 T -(e) 417.86 111.67 T -(ycode */) 422.58 111.67 T -(unsigned char *) 144 98.67 T -(e) 234 98.67 T -(xplicit;) 238.72 98.67 T -(/* e) 306 98.67 T -(xplicit o) 322.03 98.67 T -(v) 358.23 98.67 T -(errides of core remapping, 1 per k) 363.56 98.67 T -(e) 512.82 98.67 T -(y */) 517.54 98.67 T -(unsigned char) 144 85.67 T -(vmods[XkbNumV) 234 85.67 T -(irtualMods];) 315.22 85.67 T -(/* real mods bound to virtual mods */) 373.5 85.67 T -63.37 284 548.63 650 C -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -86.75 483.08 167.75 627.5 R -0.5 H -0 Z -0 X -0 0 0 1 0 0 0 K -N -86.75 454.08 167.75 472.08 R -7 X -V -2 10 Q -0 X -(XkbServerMapRec) 88.65 465.41 T -86.75 555.08 167.75 555.08 2 L -7 X -V -0 X -N -86.75 537.08 167.75 537.08 2 L -7 X -V -0 X -N -86.75 519.08 167.75 519.08 2 L -7 X -V -0 X -N -86.75 501.08 167.75 501.08 2 L -7 X -V -0 X -N -(key_acts) 104.36 543.08 T -(explicit) 104.36 526.08 T -(vmods[16]) 104.36 508.08 T -(vmodmap) 104.36 490.08 T -86.5 591.83 167.5 591.83 2 L -7 X -V -0 X -N -86.75 573.83 167.75 573.83 2 L -7 X -V -0 X -N -86.75 609.83 167.75 609.83 2 L -7 X -V -0 X -N -(size_acts) 104.36 597.83 T -(acts) 104.36 579.83 T -393.72 583.58 393.72 586.55 404.1 583.58 393.72 580.6 4 Y -N -393.72 583.58 393.72 586.55 404.1 583.58 393.72 580.6 4 Y -V -168.88 583.58 393.47 583.58 2 L -7 X -V -0 X -N -(beha) 104.21 563.27 T -(viors) 122.89 563.27 T -(num_acts) 104.08 615.14 T -254.75 403.83 335.75 421.83 R -7 X -V -0 X -N -250.75 400.08 331.75 418.08 R -7 X -V -0 X -N -246.5 396.58 327.5 414.58 R -7 X -V -0 X -N -241.5 360.08 327.75 384.08 R -7 X -V -0 X -(unsigned char\050s\051) 251.44 377.41 T -(\050array\051) 271.02 367.41 T -242.5 392.83 323.5 410.83 R -7 X -V -0 X -N -228.72 401.75 228.72 404.72 239.09 401.75 228.72 398.77 4 Y -N -228.72 401.75 228.72 404.72 239.09 401.75 228.72 398.77 4 Y -V -168 527.75 209.25 527.75 209.25 401.75 228.47 401.75 4 L -N -227.97 488.42 227.97 491.39 238.34 488.42 227.97 485.44 4 Y -N -227.97 488.42 227.97 491.39 238.34 488.42 227.97 485.44 4 Y -V -168.75 545.75 220.5 545.75 220.5 488.42 227.72 488.42 4 L -N -(KeyCode) 101.11 382.33 T -235.47 413.75 235.47 416.73 245.84 413.75 235.47 410.77 4 Y -8 X -N -235.47 413.75 235.47 416.73 245.84 413.75 235.47 410.77 4 Y -V -183.75 413.75 235.22 413.75 2 L -N -235.47 570.5 235.47 573.47 245.84 570.5 235.47 567.52 4 Y -N -235.47 570.5 235.47 573.47 245.84 570.5 235.47 567.52 4 Y -V -183 500 183 570.5 235.22 570.5 3 L -N -255.12 487.75 336.12 505.75 R -7 X -V -0 X -N -251.12 484 332.12 502 R -7 X -V -0 X -N -246.87 480.5 327.87 498.5 R -7 X -V -0 X -N -241.87 444 328.12 468 R -7 X -V -0 X -(unsigned short\050s\051) 250.42 461.33 T -(\050array\051) 271.4 451.33 T -242.87 476.75 323.87 494.75 R -7 X -V -0 X -N -403.47 595.25 403.47 598.22 413.85 595.25 403.47 592.27 4 Y -8 X -N -403.47 595.25 403.47 598.22 413.85 595.25 403.47 592.27 4 Y -V -333 493.25 373.88 493.25 373.88 595.25 403.22 595.25 4 L -N -257.62 559.5 338.62 577.5 R -7 X -V -0 X -N -253.62 555.75 334.62 573.75 R -7 X -V -0 X -N -249.37 552.25 330.37 570.25 R -7 X -V -0 X -N -241.37 515.75 339.62 539.75 R -7 X -V -0 X -(XkbBehaviors\050s\051) 256.34 533.08 T -(\050array\051) 276.9 523.08 T -245.37 548.5 326.37 566.5 R -7 X -V -0 X -N -232.47 563.83 232.47 566.8 242.84 563.83 232.47 560.85 4 Y -N -232.47 563.83 232.47 566.8 242.84 563.83 232.47 560.85 4 Y -V -168.88 563.83 232.22 563.83 2 L -7 X -V -0 X -N -256 326.08 337 344.08 R -7 X -V -0 X -N -252 322.33 333 340.33 R -7 X -V -0 X -N -247.75 318.83 328.75 336.83 R -7 X -V -0 X -N -242.75 282.33 329 306.33 R -7 X -V -0 X -(unsigned short\050s\051) 251.29 299.66 T -(\050array\051) 272.27 289.66 T -243.75 315.08 324.75 333.08 R -7 X -V -0 X -N -423.25 583.33 504.25 601.33 R -7 X -V -0 X -N -419.25 579.58 500.25 597.58 R -7 X -V -0 X -N -415 576.08 496 594.08 R -7 X -V -0 X -N -410 539.58 496.25 563.58 R -7 X -V -0 X -(XkbActions\050s\051) 423.69 556.91 T -(\050array\051) 439.53 546.91 T -411 572.33 492 590.33 R -7 X -V -0 X -N -231.47 499.5 231.47 502.48 241.84 499.5 231.47 496.52 4 Y -8 X -N -231.47 499.5 231.47 502.48 241.84 499.5 231.47 496.52 4 Y -V -146 384.75 183 385.25 183 499.5 231.22 499.5 4 L -N -229.22 324.75 229.22 327.72 239.6 324.75 229.22 321.77 4 Y -0 X -N -229.22 324.75 229.22 327.72 239.6 324.75 229.22 321.77 4 Y -V -168.5 492.75 196.5 492.75 196.5 324.75 228.97 324.75 4 L -N -235.22 336 235.22 338.97 245.59 336 235.22 333.02 4 Y -8 X -N -235.22 336 235.22 338.97 245.59 336 235.22 333.02 4 Y -V -182.75 385.5 182.75 336 234.97 336 3 L -N -236 570.8 236.08 573.52 245.47 570.53 235.92 568.09 4 Y -0 X -N -236 570.8 236.08 573.52 245.47 570.53 235.92 568.09 4 Y -V -233.63 570.87 235.75 570.81 2 L -N -232.5 499.93 232.58 502.64 241.97 499.65 232.42 497.21 4 Y -N -232.5 499.93 232.58 502.64 241.97 499.65 232.42 497.21 4 Y -V -230.13 500 232.25 499.94 2 L -N -404 595.43 404.08 598.15 413.47 595.15 403.92 592.71 4 Y -N -404 595.43 404.08 598.15 413.47 595.15 403.92 592.71 4 Y -V -401.63 595.5 403.75 595.44 2 L -N -235.59 413.62 235.59 416.6 245.97 413.62 235.59 410.65 4 Y -N -235.59 413.62 235.59 416.6 245.97 413.62 235.59 410.65 4 Y -V -232.5 413.62 235.34 413.62 2 L -N -235.65 336.12 235.65 339.05 245.84 336.12 235.65 333.2 4 Y -N -235.65 336.12 235.65 339.05 245.84 336.12 235.65 333.2 4 Y -V -233.13 336.12 235.4 336.12 2 L -N -0 0 612 792 C -FMENDPAGE -%%EndPage: "140" 152 -%%Page: "141" 153 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(141) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(16 Xkb Serv) 382.36 744.87 T -(er K) 443.3 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -(unsigned short *) 144 712.67 T -(vmodmap;) 234 712.67 T -(/* virtual mods bound to k) 306 712.67 T -(e) 422.31 712.67 T -(y) 427.03 712.67 T -(, 1 per k) 431.82 712.67 T -(e) 467.76 712.67 T -(ycode*/) 472.47 712.67 T -(}) 126 699.67 T -3 F -(XkbSer) 134.03 699.67 T -(v) 169.98 699.67 T -(erMapRec) 175.37 699.67 T -2 F -(, *XkbServ) 224.85 699.67 T -(erMapPtr;) 274.79 699.67 T -2 12 Q -(The) 108 680 T -1 F -(num_acts) 129.66 680 T -2 F -(,) 175.66 680 T -1 F -(size_acts) 181.66 680 T -2 F -(,) 224.99 680 T -1 F -(acts) 230.99 680 T -2 F -(, and) 250.32 680 T -1 F -(key_acts) 276.65 680 T -2 F -( fields specify the key actions, defined in sec-) 317.96 680 T --0.37 (tion 16.1. The) 108 667 P -1 F --0.37 (behaviors) 177.22 667 P -2 F --0.37 ( field describes the behavior for each key and is defined in section) 224.55 667 P -(16.2. The) 108 654 T -1 F -(explicit) 156.66 654 T -2 F -( field describes the explicit components for a key and is defined in sec-) 191.99 654 T -(tion 16.3. The) 108 641 T -1 F -(vmods) 178.33 641 T -2 F -( and the) 208.99 641 T -1 F -(vmodmap) 249.98 641 T -2 F -( fields describe the virtual modifiers and the) 296.64 641 T -(per-key virtual modifier mapping and are defined in section 16.4.) 108 628 T -0 F -(16.1) 72 603 T -(K) 108 603 T -(e) 116.48 603 T -(y Actions) 122.98 603 T -2 F -(A key action defines the effect key presses and releases have on the internal state of the) 108 583 T -(server. For example, the expected key action associated with pressing the) 108 570 T -4 11 Q -(Shift) 462.92 570 T -2 12 Q -( key is to) 484.93 570 T -(set the) 108 557 T -5 F --0.6 (Shift) 142 557 S -2 F -( modifier. There is zero or one key action associated with each keysym) 175 557 T -(bound to each key.) 108 544 T --0.05 (Just as the entire list of key symbols for the keyboard mapping is held in the) 108 523 P -1 F --0.05 (syms) 475.83 523 P -2 F --0.05 ( field of) 499.16 523 P -(the client map, the entire list of key actions for the keyboard mapping is held in the) 108 510 T -1 F -(acts) 509.95 510 T -2 F --0.03 (array of the server map. The total size of) 108 497 P -1 F --0.03 (acts) 305.65 497 P -2 F --0.03 ( is specified by) 324.98 497 P -1 F --0.03 (size_acts) 400.18 497 P -2 F --0.03 (, and the number of) 443.51 497 P -(entries is specified by) 108 484 T -1 F -(num_acts) 215.32 484 T -2 F -(.) 261.31 484 T -(The) 108 463 T -1 F -(key_acts) 129.66 463 T -2 F -( array, indexed by keycode, describes the actions associated with a key. The) 170.98 463 T -1 F --0.14 (key_acts) 108 450 P -2 F --0.14 ( array has) 149.32 450 P -1 F --0.14 (min_key_code) 198.55 450 P -2 F --0.14 ( unused entries at the start to allow direct indexing using) 267.19 450 P -(a keycode. If a) 108 437 T -1 F -(key_acts) 181.63 437 T -2 F -( entry is) 222.95 437 T -5 F --0.6 (zero) 264.61 437 S -2 F -(, it means the key does not have any actions associ-) 291.01 437 T --0.05 (ated with it. If an entry is not) 108 424 P -5 F --0.11 -0.6 (zero) 249.92 424 B -2 F --0.05 (, the entry represents an index into the) 276.32 424 P -1 F --0.05 (acts) 462.21 424 P -2 F --0.05 ( field of the) 481.55 424 P -(server map, much as the) 108 411 T -1 F -(offset) 227.3 411 T -2 F -( field of a) 253.31 411 T -5 F --0.6 (KeySymMapRec) 302.63 411 S -2 F -( structure is an index into the) 381.83 411 T -1 F -(syms) 108 398 T -2 F -( field of the client map.) 131.33 398 T --0.17 (The reason the) 108 377 P -1 F --0.17 (acts) 181.14 377 P -2 F --0.17 ( field is a linear list of) 200.47 377 P -5 F --0.37 -0.6 (XkbAction) 307.63 377 B -2 F --0.17 (s is to reduce the memory consump-) 367.03 377 P --0.12 (tion associated with a keymap. Because Xkb allows individual keys to have multiple shift) 108 364 P -(levels and a different number of groups per key, a single two-dimensional array of) 108 351 T -5 F --0.6 (Key-) 506.24 351 S --0.6 (Syms) 108 338 S -2 F -( would potentially be very large and sparse. Instead, Xkb provides a small) 134.4 338 T -(two-dimensional array of) 108 325 T -5 F --0.6 (XkbAction) 232.31 325 S -2 F -(s for each key. To store all of these individual) 291.71 325 T -(arrays, Xkb concatenates each array together in the) 108 312 T -1 F -(acts) 356.24 312 T -2 F -( field of the server map.) 375.58 312 T --0.19 (The key action structures consist only of fields of type char or unsigned char. This is done) 108 291 P -(to optimize data transfer when the server sends bytes over the wire. If the fields are any-) 108 278 T -(thing but bytes, the server has to sift through all of the actions and swap any nonbyte) 108 265 T -(fields. Because they consist of nothing but bytes, it can just copy them out.) 108 252 T -(Xkb provides the following macros, to simplify accessing information pertaining to key) 108 231 T -(actions:) 108 218 T -2 11 Q -(Bool) 108 197.67 T -3 F -(XkbK) 132.15 197.67 T -(eyHasActions) 160.6 197.67 T -2 F -(\050) 224.76 197.67 T -1 F -(xkb, k) 228.43 197.67 T -(e) 253.97 197.67 T -(ycode) 258.52 197.67 T -2 F -(\051) 284.18 197.67 T -(/* macro */) 342 197.67 T -(XkbDescPtr) 126 184.67 T -1 F -(xkb) 234 184.67 T -2 F -(;) 249.27 184.67 T -(/* Xkb description of interest */) 342 184.67 T -(K) 126 171.67 T -(e) 133.67 171.67 T -(yCode) 138.39 171.67 T -1 F -(k) 234 171.67 T -(e) 238.77 171.67 T -(ycode) 243.33 171.67 T -2 F -(;) 268.98 171.67 T -(/* k) 342 171.67 T -(e) 358.7 171.67 T -(ycode of interest */) 363.42 171.67 T -1 12 Q --0.25 (XkbK) 108 152 P --0.25 (e) 134.24 152 P --0.25 (yHasActions) 139.21 152 P -2 F --0.25 ( returns) 199.87 152 P -5 F --0.56 -0.6 (True) 238.69 152 B -2 F --0.25 ( if the key corresponding to) 265.09 152 P -1 F --0.25 (k) 398.88 152 P --0.25 (e) 404.08 152 P --0.25 (ycode) 409.05 152 P -2 F --0.25 ( has any actions asso-) 437.04 152 P -(ciated with it; otherwise, it returns) 108 139 T -5 F --0.6 (False) 275.65 139 S -2 F -(.) 308.65 139 T -2 11 Q -(int) 108 118.67 T -3 F -(XkbK) 122.37 118.67 T -(eyNumActions) 150.82 118.67 T -2 F -(\050) 219.87 118.67 T -1 F -(xkb, k) 223.53 118.67 T -(e) 249.07 118.67 T -(ycode) 253.63 118.67 T -2 F -(\051) 279.28 118.67 T -(/* macro */) 342 118.67 T -(XkbDescPtr) 126 105.67 T -1 F -(xkb) 234 105.67 T -2 F -(;) 249.27 105.67 T -(/* Xkb description of interest */) 342 105.67 T -(K) 126 92.67 T -(e) 133.67 92.67 T -(yCode) 138.39 92.67 T -1 F -(k) 234 92.67 T -(e) 238.77 92.67 T -(ycode) 243.33 92.67 T -2 F -(;) 268.98 92.67 T -(/* k) 342 92.67 T -(e) 358.7 92.67 T -(ycode of interest */) 363.42 92.67 T -FMENDPAGE -%%EndPage: "141" 153 -%%Page: "142" 154 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(142) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(16 Xkb Serv) 382.36 744.87 T -(er K) 443.3 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -1 12 Q -(XkbK) 108 712 T -(e) 134.24 712 T -(yNumActions) 139.21 712 T -2 F -( computes the number of actions associated with the key correspond-) 203.21 712 T -(ing to) 108 699 T -1 F -(k) 138.67 699 T -(e) 143.88 699 T -(ycode) 148.85 699 T -2 F -(. This should be the same value as the result of) 176.83 699 T -1 F -(XkbK) 404.14 699 T -(e) 430.38 699 T -(yNumSyms) 435.35 699 T -2 F -( \050see sec-) 488 699 T -(tion 15.3.3\051.) 108 686 T -2 11 Q -(XkbK) 108 665.67 T -(e) 134.61 665.67 T -(yActionPtr) 139.33 665.67 T -3 F -(XkbK) 190.36 665.67 T -(eyActionsPtr) 218.81 665.67 T -2 F -(\050) 279.91 665.67 T -1 F -(xkb, k) 283.57 665.67 T -(e) 309.11 665.67 T -(ycode) 313.67 665.67 T -2 F -(\051) 339.32 665.67 T -(/* macro */) 342.98 665.67 T -(XkbDescPtr) 126 652.67 T -1 F -(xkb) 234 652.67 T -2 F -(;) 249.27 652.67 T -(/* Xkb description of interest */) 342 652.67 T -(K) 126 639.67 T -(e) 133.67 639.67 T -(yCode) 138.39 639.67 T -1 F -(k) 234 639.67 T -(e) 238.77 639.67 T -(ycode) 243.33 639.67 T -2 F -(;) 268.98 639.67 T -(/* k) 342 639.67 T -(e) 358.7 639.67 T -(ycode of interest */) 363.42 639.67 T -1 12 Q --0.37 (XkbK) 108 620 P --0.37 (e) 134.24 620 P --0.37 (yActionsPtr) 139.21 620 P -2 F --0.37 ( returns a pointer to the two-dimensional array of key actions associated) 195.88 620 P --0.26 (with the key corresponding to) 108 607 P -1 F --0.26 (k) 253.01 607 P --0.26 (e) 258.22 607 P --0.26 (ycode) 263.18 607 P -2 F --0.26 (. Use) 291.17 607 P -1 F --0.26 ( XkbK) 315.57 607 P --0.26 (e) 344.55 607 P --0.26 (yActionsPtr) 349.52 607 P -2 F --0.26 ( only if the key actually has) 406.18 607 P -(some actions associated with it, that is,) 108 594 T -1 F -(XkbK) 297.66 594 T -(e) 323.9 594 T -(yNumActions) 328.87 594 T -2 F -(\050xkb, keycode\051 returns some-) 392.87 594 T -(thing greater than zero.) 108 581 T -2 11 Q -(XkbAction) 108 560.67 T -3 F -(XkbK) 159.63 560.67 T -(eyAction) 188.09 560.67 T -2 F -(\050) 229.64 560.67 T -1 F -(xkb, k) 233.3 560.67 T -(e) 258.84 560.67 T -(ycode) 263.4 560.67 T -(, idx) 288.94 560.67 T -2 F -(\051) 307.88 560.67 T -(/* macro */) 342 560.67 T -(XkbDescPtr) 126 547.67 T -1 F -(xkb) 234 547.67 T -2 F -(;) 249.27 547.67 T -(/* Xkb description of interest */) 342 547.67 T -(K) 126 534.67 T -(e) 133.67 534.67 T -(yCode) 138.39 534.67 T -1 F -(k) 234 534.67 T -(e) 238.77 534.67 T -(ycode) 243.33 534.67 T -2 F -(;) 268.98 534.67 T -(/* k) 342 534.67 T -(e) 358.7 534.67 T -(ycode of interest */) 363.42 534.67 T -(int) 126 521.67 T -1 F -(idx) 234 521.67 T -2 F -(;) 247.44 521.67 T -(/* inde) 342 521.67 T -(x for group and shift le) 372.08 521.67 T -(v) 472.93 521.67 T -(el */) 478.27 521.67 T -1 12 Q -(XkbK) 108 502 T -(e) 134.24 502 T -(yAction) 139.21 502 T -2 F -( returns the key action indexed by) 175.87 502 T -1 F -(idx) 341.51 502 T -2 F -( in the two-dimensional array of key) 356.17 502 T -(actions associated with the key corresponding to) 108 489 T -1 F -(k) 343.63 489 T -(e) 348.84 489 T -(ycode) 353.81 489 T -2 F -(.) 381.79 489 T -1 F -(idx) 387.79 489 T -2 F -( may be computed from the) 402.46 489 T -(group and shift level of interest as follows:) 108 476 T -(idx = group_index * key_width + shift_level) 126 455 T -2 11 Q -(XkbAction) 108 434.67 T -3 F -(XkbK) 159.63 434.67 T -(eyActionEntry) 188.09 434.67 T -2 F -(\050) 257.14 434.67 T -1 F -(xkb, k) 260.8 434.67 T -(e) 286.34 434.67 T -(ycode) 290.9 434.67 T -(, shift, grp) 316.44 434.67 T -2 F -(\051) 361.67 434.67 T -(/* macro */) 365.33 434.67 T -(XkbDescPtr) 126 421.67 T -1 F -(xkb) 234 421.67 T -2 F -(;) 249.27 421.67 T -(/* Xkb description of interest */) 342 421.67 T -(K) 126 408.67 T -(e) 133.67 408.67 T -(yCode) 138.39 408.67 T -1 F -(k) 234 408.67 T -(e) 238.77 408.67 T -(ycode) 243.33 408.67 T -2 F -(;) 268.98 408.67 T -(/* k) 342 408.67 T -(e) 358.7 408.67 T -(ycode of interest */) 363.42 408.67 T -(int) 126 395.67 T -1 F -(shift) 234 395.67 T -2 F -(;) 252.95 395.67 T -(/* shift le) 342 395.67 T -(v) 383.28 395.67 T -(el within group */) 388.62 395.67 T -(int) 126 382.67 T -1 F -(grp) 234 382.67 T -2 F -(;) 249.28 382.67 T -(/* group inde) 342 382.67 T -(x for group of interest */) 400.5 382.67 T -1 12 Q -(XkbK) 108 363 T -(e) 134.24 363 T -(yActionEntry) 139.21 363 T -2 F -( returns the key action corresponding to group) 202.54 363 T -1 F -(grp) 427.16 363 T -2 F -( and shift level) 443.83 363 T -1 F -(lvl) 517.82 363 T -2 F -(from the two-dimensional table of key actions associated with the key corresponding to) 108 350 T -1 F -(k) 108 337 T -(e) 113.21 337 T -(ycode) 118.18 337 T -2 F -(.) 146.16 337 T -0 F -(16.1.1) 72 312 T -(The XkbAction Structure) 108 312 T -2 F -(The description for an action is held in an) 108 292 T -5 F --0.6 (XkbAction) 310.97 292 S -2 F -( structure, which is a union of all) 370.37 292 T -(possible Xkb action types:) 108 279 T -2 11 Q -(typedef union _XkbAction {) 126 258.67 T -(XkbAn) 144 245.67 T -(yAction) 176.22 245.67 T -(an) 270 245.67 T -(y;) 280.22 245.67 T -(XkbModAction) 144 232.67 T -(mods;) 270 232.67 T -(XkbGroupAction) 144 219.67 T -(group;) 270 219.67 T -(XkbISO) 144 206.67 T -(Action) 180.28 206.67 T -(iso;) 270 206.67 T -(XkbPtrAction) 144 193.67 T -(ptr;) 270 193.67 T -(XkbPtrBtnAction) 144 180.67 T -(btn;) 270 180.67 T -(XkbPtrD\337tAction) 144 167.67 T -(d\337t;) 270 167.67 T -(XkbSwitchScreenAction) 144 154.67 T -(screen;) 270 154.67 T -(XkbCtrlsAction) 144 141.67 T -(ctrls;) 270 141.67 T -(XkbMessageAction) 144 128.67 T -(msg;) 270 128.67 T -(XkbRedirectK) 144 115.67 T -(e) 207.88 115.67 T -(yAction) 212.6 115.67 T -(redirect;) 270 115.67 T -(XkbDe) 144 102.67 T -(viceBtnAction) 175.49 102.67 T -(de) 270 102.67 T -(vbtn;) 280.11 102.67 T -(XkbDe) 144 89.67 T -(viceV) 175.49 89.67 T -(aluatorAction) 200.54 89.67 T -(de) 270 89.67 T -(vv) 280.11 89.67 T -(al;) 290.83 89.67 T -FMENDPAGE -%%EndPage: "142" 154 -%%Page: "143" 155 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(143) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(16 Xkb Serv) 382.36 744.87 T -(er K) 443.3 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -(unsigned char) 144 712.67 T -(type;) 270 712.67 T -(}) 126 699.67 T -3 F -(XkbAction) 134.03 699.67 T -2 F -(;) 185.37 699.67 T -2 12 Q -(The) 108 680 T -1 F -(type) 129.66 680 T -2 F -( field is provided for convenience and is the same as the type field in the individ-) 149.65 680 T -(ual structures. The following sections describe the individual structures for each action in) 108 667 T -(detail.) 108 654 T -0 F -(16.1.2) 72 629 T -(The XkbAn) 108 629 T -(yAction Structure) 170.44 629 T -2 F -(The) 108 609 T -5 F --0.6 (XkbAnyAction) 129.66 609 S -2 F -( structure is a convenience structure that refers to any of the actions:) 208.86 609 T -2 11 Q -(#de\336ne) 126 583.67 T -(XkbAn) 162 583.67 T -(yActionDataSize) 194.22 583.67 T -(7) 306 583.67 T -(typedef) 126 563.67 T -(struct _XkbAn) 179.25 563.67 T -(yAction {) 244.16 563.67 T -(unsigned char) 144 550.67 T -(type;) 234 550.67 T --0.23 (/* type of action; determines interpretation for data */) 306 550.67 P -(unsigned char) 144 537.67 T -(data[XkbAn) 234 537.67 T -(yActionDataSize];) 288.21 537.67 T -(}) 126 524.67 T -3 F -(XkbAnyAction) 134.03 524.67 T -2 F -(;) 204.93 524.67 T -2 12 Q -(The) 108 505 T -1 F -(data) 129.66 505 T -2 F -( field represents a structure for an action, and its interpretation depends on the) 151 505 T -1 F --0.08 (type) 108 492 P -2 F --0.08 ( field. The valid values for the) 127.99 492 P -1 F --0.08 (type) 275.42 492 P -2 F --0.08 ( field, and the data structures associated with them) 295.41 492 P -(are shown in Table 16.1:) 108 479 T -0 F -(16.1.3) 72 107 T -(Actions f) 108 107 T -(or Changing Modi\336er) 159.1 107 T -(s\325 State) 279.59 107 T -2 F -(Actions associated with the) 108 87 T -5 F --0.6 (XkbModAction) 242.65 87 S -2 F -( structure change the state of the modifiers) 321.85 87 T -(when keys are pressed and released \050see Chapter 7 for a discussion of modifiers\051:) 108 74 T -3 F -(T) 268.37 459 T -(able 16.1 Action T) 275.27 459 T -(ypes) 370.72 459 T -1 F -(T) 106.19 432 T -(ype) 111.97 432 T -(Structur) 240.06 432 T -(e for Data) 278.95 432 T -(XkbAction) 420.06 439 T -(Union Member) 420.06 425 T -(Section) 494.31 432 T -5 11 Q --0.33 (XkbSA_NoAction) 106.19 410.67 S -5 12 Q --0.6 (Xkb) 240.06 410.67 S -5 11 Q --0.33 (SA_NoAction) 259.86 410.67 S -2 F -( means the serv) 328.83 410.67 T -(er) 396.79 410.67 T -(does not perform an action for the k) 240.06 399.67 T -(e) 397.89 399.67 T -(y;) 402.61 399.67 T -(this action does not ha) 240.06 388.67 T -(v) 338.23 388.67 T -(e an associated) 343.56 388.67 T -(data structure.) 240.06 377.67 T -(an) 420.06 410.67 T -(y) 430.28 410.67 T -5 F --0.33 (XkbSA_SetMods) 106.19 363.67 S --0.33 (XkbSA_LatchMods) 106.19 352.67 S --0.33 (XkbSA_LockMods) 106.19 341.67 S --0.33 (XkbModAction) 240.06 363.67 S -2 F -(mods) 420.06 363.67 T -(16.1.3) 494.31 363.67 T -5 F --0.33 (XkbSA_SetGroup) 106.19 327.67 S --0.33 (XkbSA_LatchGroup) 106.19 316.67 S --0.33 (XkbSA_LockGroup) 106.19 305.67 S --0.33 (XkbGroupAction) 240.06 327.67 S -2 F -(group) 420.06 327.67 T -(16.1.4) 494.31 327.67 T -5 F --0.33 (XkbSA_MovePtr) 106.19 291.67 S --0.33 (XkbPtrAction) 240.06 291.67 S -2 F -(ptr) 420.06 291.67 T -(16.1.5) 494.31 291.67 T -5 F --0.33 (XKbSA_PtrBtn) 106.19 277.67 S --0.33 (XkbSA_LockPtrBtn) 106.19 266.67 S --0.33 (XkbPtrBtnAction) 240.06 277.67 S -2 F -(btn) 420.06 277.67 T -(16.1.6) 494.31 277.67 T -5 F --0.33 (XkbSA_SetPtrDflt) 106.19 252.67 S --0.33 (XkbPtrDfltAction) 240.06 252.67 S -2 F -(d\337t) 420.06 252.67 T -(16.1.7) 494.31 252.67 T -5 F --0.33 (XkbSA_ISOLock) 106.19 238.67 S --0.33 (XkbISOAction) 240.06 238.67 S -2 F -(iso) 420.06 238.67 T -(16.1.8) 494.31 238.67 T -5 F --0.33 (XkbSA_SwitchScreen) 106.19 224.67 S --0.33 (XkbSwitchScreenAction) 240.06 224.67 S -2 F -(screen) 420.06 224.67 T -(16.1.9) 494.31 224.67 T -5 F --0.33 (XkbSA_SetControls) 106.19 210.67 S --0.33 (XkbSA_LockControls) 106.19 199.67 S --0.33 (XkbCtrlsAction) 240.06 210.67 S -2 F -(ctrls) 420.06 210.67 T -(16.1.10) 494.31 210.67 T -5 F --0.33 (XkbSA_ActionMessage) 106.19 185.67 S --0.33 (XkbMessgeAction) 240.06 185.67 S -2 F -(msg) 420.06 185.67 T -(16.1.11) 494.31 185.67 T -5 F --0.33 (XkbSA_RedirectKey) 106.19 171.67 S --0.33 (XkbRedirectKeyAction) 240.06 171.67 S -2 F -(redirect) 420.06 171.67 T -(16.1.12) 494.31 171.67 T -5 F --0.33 (XkbSA_DeviceBtn) 106.19 157.67 S --0.33 (XKbSA_LockDeviceBtn) 106.19 146.67 S --0.33 (XkbDeviceBtnAction) 240.06 157.67 S -2 F -(de) 420.06 157.67 T -(vbtn) 430.17 157.67 T -(16.1.13) 494.31 157.67 T -5 F --0.33 (XkbSA_DeviceValuator) 106.19 132.67 S --0.33 (XkbDeviceValuatorAction) 240.06 132.67 S -2 F -(de) 420.06 132.67 T -(vv) 430.17 132.67 T -(al) 440.9 132.67 T -(16.1.14) 494.31 132.67 T -105.19 451 542.81 451 2 L -V -0.5 H -0 Z -N -105.19 420 542.81 420 2 L -V -N -FMENDPAGE -%%EndPage: "143" 155 -%%Page: "144" 156 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(144) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(16 Xkb Serv) 382.36 744.87 T -(er K) 443.3 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -(typedef struct _XkbModAction {) 126 712.67 T -(unsigned char) 144 699.67 T -(type;) 225 699.67 T -(/*) 279 699.67 T -5 F --0.33 (XkbSA_{Set|Latch|Lock}Mods) 290.31 699.67 S -2 F -( */) 453.33 699.67 T -(unsigned char) 144 686.67 T -(\337ags;) 225 686.67 T -(/* with) 279 686.67 T -1 F -(type) 312.62 686.67 T -2 F -(, controls the ef) 330.94 686.67 T -(fect on modi\336ers */) 399.1 686.67 T -(unsigned char) 144 673.67 T -(mask;) 225 673.67 T -(/*) 279 673.67 T -2 12 Q -(same as) 290.31 673.67 T -1 F -(mask) 330.96 673.67 T -2 F -( field of a modifier description) 355.62 673.67 T -2 11 Q -( */) 502.6 673.67 T -(unsigned char) 144 660.67 T -(real_mods;) 225 660.67 T -(/* same as) 279 660.67 T -1 12 Q -(real_mods) 327.58 660.67 T -2 11 Q -(\336eld of a modi\336er description) 381.24 660.67 T -2 12 Q -( */) 512.01 660.67 T -2 11 Q -(unsigned char) 144 647.67 T -(vmods1;) 225 647.67 T -(/* deri) 279 647.67 T -(v) 307.14 647.67 T -(ed from) 312.47 647.67 T -1 12 Q -(vmods) 349.74 647.67 T -2 F -( field of a modifier description) 380.4 647.67 T -2 11 Q -( */) 527.38 647.67 T -(unsigned char) 144 634.67 T -(vmods2;) 225 634.67 T -(/* deri) 279 634.67 T -(v) 307.14 634.67 T -(ed from) 312.47 634.67 T -1 12 Q -(vmods) 349.74 634.67 T -2 F -( field of a modifier description) 380.4 634.67 T -2 11 Q -( */) 527.38 634.67 T -(}) 126 621.67 T -3 F -(XkbModAction) 134.03 621.67 T -2 F -(;) 207.37 621.67 T -2 12 Q --0.09 (In the following description, the term) 108 602 P -1 F --0.09 (action modi\336er) 289.78 602 P --0.09 (s) 362.57 602 P -2 F --0.09 ( means the real modifier bits associ-) 367.23 602 P -(ated with this action. Depending on the value of) 108 589 T -1 F -(flags) 341.3 589 T -2 F -( \050see Table 16.3\051, these are desig-) 364.64 589 T -(nated either in the) 108 576 T -1 F -(mask) 197.32 576 T -2 F -( field of the) 221.98 576 T -5 F --0.6 (XkbModAction) 280.63 576 S -2 F -( structure itself or the real modifiers) 359.83 576 T -(bound to the key for which the action is being used. In the latter case, this is the client) 108 563 T -1 F -(map) 108 550 T -2 F -(->) 128.66 550 T -1 F -(modmap) 139.43 550 T -2 F -([) 180.76 550 T -1 F -(keycode) 184.75 550 T -2 F -(] field.) 223.39 550 T -(The) 108 529 T -1 F -(type) 129.66 529 T -2 F -( field can have any of the values shown in Table 16.2.) 149.65 529 T -3 F -(T) 235.54 509 T -(able 16.2 Modi\336er Action T) 242.44 509 T -(ypes) 385.55 509 T -1 F -(T) 109 489 T -(ype) 114.78 489 T -(Ef) 217 489 T -(fect) 227.45 489 T -5 11 Q --0.33 (XkbSA_SetMods) 109 474.67 S -2 F -(\245) 217 470.67 T --0.05 (A k) 226 470.67 P --0.05 (e) 242.03 470.67 P --0.05 (y press adds an) 246.75 470.67 P --0.05 (y action modi\336ers to the k) 313.34 470.67 P --0.05 (e) 428.17 470.67 P --0.05 (yboard\325) 432.89 470.67 P --0.05 (s base modi-) 466.49 470.67 P -(\336ers.) 226 459.67 T -(\245) 217 448.67 T -(A k) 226 448.67 T -(e) 242.08 448.67 T -(y release clears an) 246.8 448.67 T -(y action modi\336ers in the k) 326.96 448.67 T -(e) 442.04 448.67 T -(yboard\325) 446.76 448.67 T -(s base) 480.36 448.67 T -(modi\336ers, pro) 226 437.67 T -(vided no other k) 287.56 437.67 T -(e) 359.24 437.67 T -(y af) 363.96 437.67 T -(fecting the same modi\336ers is) 380.48 437.67 T -(logically do) 226 426.67 T -(wn.) 277.98 426.67 T -(\245) 217 415.67 T --0.1 (If no other k) 226 415.67 P --0.1 (e) 280.26 415.67 P --0.1 (ys are ph) 284.98 415.67 P --0.1 (ysically depressed when this k) 324.43 415.67 P --0.1 (e) 457.72 415.67 P --0.1 (y is released,) 462.44 415.67 P -(and) 226 404.67 T -5 F --0.33 (XkbSA_ClearLocks) 244.63 404.67 S -2 F -( is set in the) 344.95 404.67 T -1 F -(flags) 400.26 404.67 T -2 F -( \336eld, the k) 421.66 404.67 T -(e) 471.05 404.67 T -(y release) 475.77 404.67 T -(unlocks an) 226 393.67 T -(y action modi\336ers.) 273.19 393.67 T -5 F --0.33 (XkbSA_LatchMods) 109 379.67 S -2 F -(\245) 217 375.67 T -(K) 226 375.67 T -(e) 233.67 375.67 T -(y press and k) 238.39 375.67 T -(e) 296.02 375.67 T -(y release e) 300.73 375.67 T -(v) 346.88 375.67 T -(ents ha) 352.21 375.67 T -(v) 382.85 375.67 T -(e the same ef) 388.18 375.67 T -(fect as for) 445.64 375.67 T -5 F --0.33 (XkbSA_SetMods) 226 364.67 S -2 F -(; if no k) 307.51 364.67 T -(e) 341.93 364.67 T -(ys are ph) 346.65 364.67 T -(ysically depressed when this) 386.3 364.67 T -(k) 226 353.67 T -(e) 231.39 353.67 T -(y is released, k) 236.11 353.67 T -(e) 301.37 353.67 T -(y release e) 306.09 353.67 T -(v) 352.24 353.67 T -(ents ha) 357.57 353.67 T -(v) 388.21 353.67 T -(e the follo) 393.54 353.67 T -(wing additional) 437.87 353.67 T -(ef) 226 342.67 T -(fects:) 234.27 342.67 T -(\245) 217 331.67 T -(Modi\336ers unlock) 226 331.67 T -(ed due to) 301.36 331.67 T -5 F --0.33 (XkbSA_ClearLocks) 344.44 331.67 S -2 F -( ha) 444.76 331.67 T -(v) 457.67 331.67 T -(e no further) 463.01 331.67 T -(ef) 226 320.67 T -(fect.) 234.27 320.67 T -(\245) 217 309.67 T -(If) 226 309.67 T -5 F --0.33 (XkbSA_LatchToLock) 236.08 309.67 S -2 F -( is set in the) 342.67 309.67 T -1 F -(flags) 397.97 309.67 T -2 F -( \336eld, a k) 419.37 309.67 T -(e) 460.2 309.67 T -(y release) 464.92 309.67 T -(locks and then unlatches an) 226 298.67 T -(y remaining action modi\336ers that are) 346.81 298.67 T -(already latched.) 226 287.67 T -(\245) 217 276.67 T -(A k) 226 276.67 T -(e) 242.08 276.67 T -(y release latches an) 246.8 276.67 T -(y action modi\336ers not used by the) 331.85 276.67 T -5 F --0.33 (XkbSA_ClearLocks) 226 265.67 S -2 F -( and) 326.32 265.67 T -5 F --0.33 (XkbSA_LatchToLock) 347.7 265.67 S -2 F -( \337ags.) 454.29 265.67 T -5 F --0.33 (XkbSA_LockMods) 109 251.67 S -2 F -(\245) 217 247.67 T -(A k) 226 247.67 T -(e) 242.08 247.67 T -(y press sets the base state of an) 246.8 247.67 T -(y action modi\336ers. If) 383.19 247.67 T -5 F --0.33 (XkbSA_LockNoLock) 226 236.67 S -2 F -( is set in the) 326.32 236.67 T -1 F -(flags) 381.63 236.67 T -2 F -( \336eld, a k) 403.02 236.67 T -(e) 443.86 236.67 T -(y press also sets) 448.57 236.67 T -(the lock) 226 225.67 T -(ed state of an) 261.02 225.67 T -(y action modi\336ers.) 319.2 225.67 T -(\245) 217 214.67 T -(A k) 226 214.67 T -(e) 242.08 214.67 T -(y release clears an) 246.8 214.67 T -(y action modi\336ers in the k) 326.96 214.67 T -(e) 442.04 214.67 T -(yboard\325) 446.76 214.67 T -(s base) 480.36 214.67 T -(modi\336ers, pro) 226 203.67 T -(vided no other k) 287.56 203.67 T -(e) 359.24 203.67 T -(y that af) 363.96 203.67 T -(fects the same modi\336ers is) 399.73 203.67 T -(do) 226 192.67 T -(wn. If) 236.73 192.67 T -5 F --0.33 (XkbSA_LockNoUnlock) 265.74 192.67 S -2 F -( is not set in the) 378.6 192.67 T -1 F -(flags) 450.72 192.67 T -2 F -( \336eld, and) 472.11 192.67 T -(an) 226 181.67 T -(y of the action modi\336ers were lock) 236.22 181.67 T -(ed before the corresponding) 389.47 181.67 T -(k) 226 170.67 T -(e) 231.39 170.67 T -(y press occurred, a k) 236.11 170.67 T -(e) 326.72 170.67 T -(y release unlocks them.) 331.43 170.67 T -108 501 522 501 2 L -V -0.5 H -0 Z -N -108 484 522 484 2 L -V -N -FMENDPAGE -%%EndPage: "144" 156 -%%Page: "145" 157 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(145) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(16 Xkb Serv) 382.36 744.87 T -(er K) 443.3 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -2 12 Q --0.33 (The) 108 712 P -1 F --0.33 (flags) 129.33 712 P -2 F --0.33 ( field is composed of the bitwise inclusive OR of the masks shown in Table 16.3.) 152.67 712 P --0.08 (A general meaning is given in the table, but the exact meaning depends on the action) 108 699 P -1 F --0.08 (type) 517.01 699 P -2 F --0.08 (.) 537 699 P --0.38 (If) 108 486 P -5 F --0.85 -0.6 (XkbSA_UseModMapMods) 118.61 486 B -2 F --0.38 ( is not set in the) 244.01 486 P -1 F --0.38 (flags) 320.38 486 P -2 F --0.38 ( field, the) 343.72 486 P -1 F --0.38 (mask) 391.23 486 P -2 F --0.38 (,) 415.89 486 P -1 F --0.38 (real_mods) 421.5 486 P -2 F --0.38 (,) 472.16 486 P -1 F --0.38 (vmods1) 477.78 486 P -2 F --0.38 (, and) 514.44 486 P -1 F -(vmods2) 108 473 T -2 F -(fields are used to determine the action modifiers. Otherwise they are ignored and) 147.66 473 T -(the modifiers bound to the key \050client) 108 460 T -1 F -(map) 291.65 460 T -2 F -(->) 312.31 460 T -1 F -(modmap) 323.08 460 T -2 F -([) 364.4 460 T -1 F -(k) 368.4 460 T -(e) 373.61 460 T -(ycode) 378.58 460 T -2 F -(]\051 are used instead.) 406.56 460 T -(The) 108 439 T -1 F -(mask) 129.66 439 T -2 F -(,) 154.32 439 T -1 F -(real_mods) 160.32 439 T -2 F -(,) 210.98 439 T -1 F -(vmods1) 216.98 439 T -2 F -(, and) 253.64 439 T -1 F -(vmods2) 279.97 439 T -2 F -( fields represent the components of an Xkb) 316.63 439 T -(modifier description \050see section 7.2\051. While the) 108 426 T -1 F -(mask) 342.96 426 T -2 F -( and) 367.62 426 T -1 F -(real_mods) 390.95 426 T -2 F -( fields correspond) 441.61 426 T --0.09 (directly to the) 108 413 P -1 F --0.09 (mask) 177.41 413 P -2 F --0.09 ( and) 202.07 413 P -1 F --0.09 (real_mods) 225.22 413 P -2 F --0.09 ( fields of an Xkb modifier description, the) 275.89 413 P -1 F --0.09 (vmods1) 480.18 413 P -2 F --0.09 ( and) 516.84 413 P -1 F -(vmods2) 108 400 T -2 F -( fields are combined to correspond to the) 144.66 400 T -1 F -(vmods) 343.96 400 T -2 F -( field of an Xkb modifier descrip-) 374.62 400 T -(tion. Xkb provides the following macros, to convert between the two formats:) 108 387 T -2 11 Q -(unsigned short) 108 366.67 T -3 F -(XkbModActionVMods) 175.22 366.67 T -2 F -(\050) 282.78 366.67 T -1 F -(act) 286.44 366.67 T -2 F -(\051) 299.88 366.67 T -(/* macro */) 333 366.67 T -(XkbAction) 126 353.67 T -1 F -(act) 234 353.67 T -2 F -(;) 247.44 353.67 T -(/* action from which to e) 333 353.67 T -(xtract virtual mods */) 443.74 353.67 T -1 12 Q --0.38 (XkbModActionVMods) 108 334 P -2 F --0.38 ( returns the) 213.98 334 P -1 F --0.38 (vmods1) 269.84 334 P -2 F --0.38 ( and) 306.5 334 P -1 F --0.38 (vmods2) 329.07 334 P -2 F --0.38 ( fields of) 365.73 334 P -1 F --0.38 (act) 410.25 334 P -2 F --0.38 ( converted to the) 424.92 334 P -1 F --0.38 (vmods) 506.72 334 P -2 F -(format of an Xkb modifier description.) 108 321 T -2 11 Q -(v) 108 300.67 T -(oid) 113.28 300.67 T -3 F -(XkbSetModActionVMods) 130.09 300.67 T -2 F -(\050) 252.31 300.67 T -1 F -(act, vmods) 255.97 300.67 T -2 F -(\051) 303.02 300.67 T -(/* macro */) 342 300.67 T -(XkbAction) 126 287.67 T -1 F -(act) 234 287.67 T -2 F -(;) 247.44 287.67 T -(/* action in which to set vmods */) 342 287.67 T -(unsigned short) 126 274.67 T -1 F -(vmods) 234 274.67 T -2 F -(;) 262.11 274.67 T -(/* virtual mods to set */) 342 274.67 T -1 12 Q --0.43 (XkbSetModActionVMods) 108 255 P -2 F --0.43 ( sets the) 228.65 255 P -1 F --0.43 (vmods1) 269.02 255 P -2 F --0.43 ( and) 305.68 255 P -1 F --0.43 (vmods2) 328.14 255 P -2 F --0.43 ( fields of) 364.8 255 P -1 F --0.43 (act) 409.17 255 P -2 F --0.43 ( using the) 423.83 255 P -1 F --0.43 (vmods) 472.21 255 P -2 F --0.43 ( format) 502.87 255 P -(of an Xkb modifier description.) 108 242 T -0 F -(Note) 126 221.67 T -2 11 Q -(Despite the f) 162 221.67 T -(act that the \336rst parameter of these tw) 218.1 221.67 T -(o macros is of type XkbAction,) 383.87 221.67 T --0.13 (these macros may be used only with Actions of type) 162 209.67 P -5 12 Q --0.32 -0.6 (XkbModAction) 393.48 209.67 B -2 11 Q --0.13 ( and) 472.68 209.67 P -5 12 Q --0.32 -0.6 (XkbISO-) 493.8 209.67 B --0.6 (Action) 162 197.67 S -2 11 Q -(.) 201.6 197.67 T -0 12 Q -(16.1.4) 72 173 T -(Actions f) 108 173 T -(or Changing Gr) 159.1 173 T -(oup State) 246.86 173 T -2 F -(Actions associated with the) 108 153 T -5 F --0.6 (XkbGroupAction) 242.65 153 S -2 F -( structure change the current group state) 335.05 153 T -(when keys are pressed and released \050see Chapter 5 for a description of groups and key-) 108 140 T -(board state\051:) 108 127 T -2 11 Q -(typedef struct _XkbGroupAction {) 126 106.67 T -(unsigned char) 144 93.67 T -(type;) 234 93.67 T -(/*) 306 93.67 T -5 F --0.33 (XkbSA_{Set|Latch|Lock}Group) 317.31 93.67 S -2 F -( */) 486.6 93.67 T -(unsigned char) 144 80.67 T -(\337ags;) 234 80.67 T -(/* with) 306 80.67 T -1 F -(type) 339.62 80.67 T -2 F -(, controls the ef) 357.94 80.67 T -(fect on groups */) 426.1 80.67 T -3 12 Q -(T) 236.76 679 T -(able 16.3 Modi\336er Action Flags) 243.66 679 T -1 F -(Fla) 109 659 T -(g) 125.55 659 T -(Meaning) 253 659 T -5 11 Q --0.33 (XkbSA_UseModMapMods) 109 644.67 S -2 F -(If set, the action modi\336ers are determined by the modi\336ers) 253 644.67 T -(bound by the modi\336er mapping of the k) 253 633.67 T -(e) 427.97 633.67 T -(y) 432.68 633.67 T -(. Otherwise, the) 437.47 633.67 T -(action modi\336ers are set to the modi\336ers speci\336ed by the) 253 622.67 T -1 F -(mask) 253 611.67 T -2 F -(,) 275.61 611.67 T -1 F -(real_mods) 281.11 611.67 T -2 F -(,) 327.55 611.67 T -1 F -(vmod1) 333.05 611.67 T -2 F -(, and) 362.37 611.67 T -1 F -(vmod2) 386.51 611.67 T -2 F -( \336elds.) 415.83 611.67 T -5 F --0.33 (XkbSA_ClearLocks) 109 597.67 S -2 F -(If set and no k) 253 597.67 T -(e) 315.82 597.67 T -(ys are ph) 320.54 597.67 T -(ysically depressed when this k) 360.2 597.67 T -(e) 493.9 597.67 T -(y) 498.62 597.67 T -(transition occurs, the serv) 253 586.67 T -(er unlocks an) 365.87 586.67 T -(y action modi\336ers.) 424.36 586.67 T -5 F --0.33 (XkbSA_LatchToLock) 109 572.67 S -2 F --0.02 (If set, and the action type is) 253 572.67 P -5 F --0.05 -0.33 (XkbSA_LatchMods) 376.87 572.67 B -2 F --0.02 (, the serv) 470.92 572.67 P --0.02 (er) 510.73 572.67 P -(locks the action modi\336ers if the) 253 561.67 T -(y are already latched.) 391.85 561.67 T -5 F --0.33 (XkbSA_LockNoLock) 109 547.67 S -2 F -(If set, and the action type is) 253 547.67 T -5 F --0.33 (XkbSA_LockMods) 377.04 547.67 S -2 F -(, the serv) 464.82 547.67 T -(er) 504.67 547.67 T -(only unlocks the action modi\336ers.) 253 536.67 T -5 F --0.33 (XkbSA_LockNoUnlock) 109 522.67 S -2 F -(If set, and the action is) 253 522.67 T -5 F --0.33 (XkbSA_LockMods) 355.34 522.67 S -2 F -(, the serv) 443.12 522.67 T -(er only) 482.98 522.67 T -(locks the action modi\336ers.) 253 511.67 T -108 671 522 671 2 L -V -0.5 H -0 Z -N -108 654 522 654 2 L -V -N -FMENDPAGE -%%EndPage: "145" 157 -%%Page: "146" 158 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(146) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(16 Xkb Serv) 382.36 744.87 T -(er K) 443.3 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -(char) 144 712.67 T -(group_XXX;) 234 712.67 T -(/* represents a group inde) 306 712.67 T -(x or delta */) 419.48 712.67 T -(}) 126 699.67 T -3 F -(XkbGr) 134.03 699.67 T -(oupAction) 167.45 699.67 T -2 F -(;) 216.34 699.67 T -2 12 Q -(The) 108 680 T -1 F -(type) 129.66 680 T -2 F -( field can have any of the following values:) 149.65 680 T --0.33 (The) 108 241 P -1 F --0.33 (flags) 129.33 241 P -2 F --0.33 ( field is composed of the bitwise inclusive OR of the masks shown in Table 16.5.) 152.67 241 P --0.08 (A general meaning is given in the table, but the exact meaning depends on the action) 108 228 P -1 F --0.08 (type) 517.01 228 P -2 F --0.08 (.) 537 228 P -3 F -(T) 249.97 660 T -(able 16.4 Gr) 256.87 660 T -(oup Action T) 322.66 660 T -(ypes) 389.11 660 T -1 F -(T) 109 640 T -(ype) 114.78 640 T -(Ef) 221 640 T -(fect) 231.45 640 T -5 11 Q --0.33 (XkbSA_SetGroup) 109 625.67 S -2 F -(\245) 221 621.67 T -(If the) 230 621.67 T -5 F --0.33 (XkbSA_GroupAbsolute) 256.27 621.67 S -2 F -( bit is set in the) 375.4 621.67 T -1 F -(flags) 445.07 621.67 T -2 F -( \336eld, k) 466.47 621.67 T -(e) 499.67 621.67 T -(y press) 504.38 621.67 T -(e) 230 610.67 T -(v) 234.61 610.67 T -(ents change the base k) 239.94 610.67 T -(e) 338.2 610.67 T -(yboard group to the group speci\336ed by the) 342.92 610.67 T -1 F -(group_XXX) 230 599.67 T -2 F -( \336eld. Otherwise, k) 281.94 599.67 T -(e) 365.85 599.67 T -(y press e) 370.57 599.67 T -(v) 408.78 599.67 T -(ents change the base k) 414.12 599.67 T -(e) 512.37 599.67 T -(y-) 517.09 599.67 T -(board group by adding the) 230 588.67 T -1 F -(group_XXX) 348.84 588.67 T -2 F -( \336eld to the base k) 400.79 588.67 T -(e) 481.03 588.67 T -(yboard) 485.75 588.67 T --0.19 (group. In either case, the resulting ef) 230 577.67 P --0.19 (fecti) 389.85 577.67 P --0.19 (v) 409.12 577.67 P --0.19 (e k) 414.46 577.67 P --0.19 (e) 427.29 577.67 P --0.19 (yboard group is brought) 432.01 577.67 P --0.41 (back into range depending on the v) 230 566.67 P --0.41 (alue of the) 381.85 566.67 P -1 F --0.41 (groups_wrap) 429.8 566.67 P -2 F --0.41 ( \336eld of the) 488.48 566.67 P -(controls structure \050see section 10.7.1\051.) 230 555.67 T -(\245) 221 544.67 T -(If a k) 230 544.67 T -(e) 253.1 544.67 T -(y with an) 257.82 544.67 T -5 F --0.33 (XkbSA_ISOLock) 301.51 544.67 S -2 F -( action \050see section 16.1.8\051 is) 383.02 544.67 T -(pressed while this k) 230 533.67 T -(e) 316.97 533.67 T -(y is do) 321.68 533.67 T -(wn, the k) 350.75 533.67 T -(e) 391.27 533.67 T -(y release of this k) 395.99 533.67 T -(e) 473.47 533.67 T -(y has no) 478.19 533.67 T -(ef) 230 522.67 T -(fect. Otherwise, the k) 238.27 522.67 T -(e) 332.55 522.67 T -(y release cancels the ef) 337.27 522.67 T -(fects of the k) 438.39 522.67 T -(e) 495.41 522.67 T -(y press.) 500.13 522.67 T -(\245) 221 511.67 T -(If the) 230 511.67 T -5 F --0.33 (XkbSA_ClearLocks) 256.27 511.67 S -2 F -( bit is set in the \337ags \336eld, and no k) 356.59 511.67 T -(e) 512.62 511.67 T -(ys) 517.34 511.67 T --0.31 (are ph) 230 500.67 P --0.31 (ysically depressed when this k) 256.82 500.67 P --0.31 (e) 389.28 500.67 P --0.31 (y is released, the k) 393.99 500.67 P --0.31 (e) 474.21 500.67 P --0.31 (y release also) 478.93 500.67 P -(sets the lock) 230 489.67 T -(ed k) 284.27 489.67 T -(e) 302.8 489.67 T -(yboard group to) 307.52 489.67 T -5 F --0.33 (Group1) 380.54 489.67 S -2 F -(.) 418.15 489.67 T -5 F --0.33 (XkbSA_LatchGroup) 109 475.67 S -2 F -(\245) 221 471.67 T -(K) 230 471.67 T -(e) 237.67 471.67 T -(y press and k) 242.39 471.67 T -(e) 300.02 471.67 T -(y release e) 304.73 471.67 T -(v) 350.88 471.67 T -(ents ha) 356.21 471.67 T -(v) 386.85 471.67 T -(e the same ef) 392.18 471.67 T -(fect as for) 449.64 471.67 T -5 F --0.74 -0.33 (XkbSA_SetGroup) 230 460.67 B -2 F --0.32 (; if no k) 317.78 460.67 P --0.32 (e) 351.23 460.67 P --0.32 (ys are ph) 355.94 460.67 P --0.32 (ysically depressed when this k) 394.95 460.67 P --0.32 (e) 527.35 460.67 P --0.32 (y) 532.07 460.67 P -(is released, k) 230 449.67 T -(e) 287.01 449.67 T -(y release e) 291.73 449.67 T -(v) 337.88 449.67 T -(ents ha) 343.21 449.67 T -(v) 373.85 449.67 T -(e the follo) 379.18 449.67 T -(wing additional ef) 423.51 449.67 T -(fects.) 503.28 449.67 T -(\245) 221 438.67 T -(If the) 230 438.67 T -5 F --0.33 (XkbSA_LatchToLock) 256.27 438.67 S -2 F -( bit is set in the) 362.86 438.67 T -1 F -(flags) 432.53 438.67 T -2 F -( \336eld and the) 453.93 438.67 T -(latched k) 230 427.67 T -(e) 269.91 427.67 T -(yboard group inde) 274.63 427.67 T -(x is nonzero, the k) 355.11 427.67 T -(e) 435.96 427.67 T -(y release adds the) 440.68 427.67 T -(delta applied by the corresponding k) 230 416.67 T -(e) 390.28 416.67 T -(y press to the lock) 395 416.67 T -(ed k) 474.94 416.67 T -(e) 493.46 416.67 T -(yboard) 498.18 416.67 T -(group and subtracts it from the latched k) 230 405.67 T -(e) 408 405.67 T -(yboard group. The lock) 412.72 405.67 T -(ed) 515.87 405.67 T --0.19 (and ef) 230 394.67 P --0.19 (fecti) 256.71 394.67 P --0.19 (v) 275.99 394.67 P --0.19 (e k) 281.32 394.67 P --0.19 (e) 294.15 394.67 P --0.19 (yboard group are brought back into range according to) 298.87 394.67 P -(the v) 230 383.67 T -(alue of the) 251.42 383.67 T -1 F -(groups_wrap) 300.6 383.67 T -2 F -( \336eld of the controls structure.) 359.27 383.67 T -(\245) 221 372.67 T -(Otherwise, the k) 230 372.67 T -(e) 302.29 372.67 T -(y press adds the k) 307.01 372.67 T -(e) 385.11 372.67 T -(y press delta to the latched k) 389.83 372.67 T -(e) 514.98 372.67 T -(y-) 519.7 372.67 T -(board group.) 230 361.67 T -5 F --0.33 (XkbSA_LockGroup) 109 347.67 S -2 F -(\245) 221 343.67 T -(If the) 230 343.67 T -5 F --0.33 (XkbSA_GroupAbsolute) 256.27 343.67 S -2 F -( is set in the) 375.4 343.67 T -1 F -(flags) 430.71 343.67 T -2 F -( \336eld, k) 452.1 343.67 T -(e) 485.3 343.67 T -(y press) 490.02 343.67 T -(e) 230 332.67 T -(v) 234.61 332.67 T -(ents set the lock) 239.94 332.67 T -(ed k) 310.41 332.67 T -(e) 328.93 332.67 T -(yboard group to the group speci\336ed by the) 333.65 332.67 T -1 F -(group_XXX) 230 321.67 T -2 F -( \336eld. Otherwise, k) 281.94 321.67 T -(e) 365.85 321.67 T -(y press e) 370.57 321.67 T -(v) 408.78 321.67 T -(ents add the group speci\336ed) 414.12 321.67 T -(by the) 230 310.67 T -1 F -(group_XXX) 259.94 310.67 T -2 F -( \336eld to the lock) 311.88 310.67 T -(ed k) 383.27 310.67 T -(e) 401.8 310.67 T -(yboard group. In either case,) 406.52 310.67 T -(the resulting lock) 230 299.67 T -(ed and ef) 306.27 299.67 T -(fecti) 346.31 299.67 T -(v) 365.59 299.67 T -(e k) 370.92 299.67 T -(e) 383.95 299.67 T -(yboard groups are brought back) 388.66 299.67 T --0.11 (into range depending on the v) 230 288.67 P --0.11 (alue of the) 360.23 288.67 P -1 F --0.11 (groups_wrap) 409.07 288.67 P -2 F --0.11 ( \336eld of the con-) 467.74 288.67 P -(trols structure.) 230 277.67 T -(\245) 221 266.67 T -(A k) 230 266.67 T -(e) 246.08 266.67 T -(y release has no ef) 250.8 266.67 T -(fect.) 331.77 266.67 T -3 12 Q -(T) 242.2 208 T -(able 16.5 Gr) 249.1 208 T -(oup Action Flags) 314.88 208 T -1 F -(Fla) 109 188 T -(g) 125.55 188 T -(Meaning) 253 188 T -5 11 Q --0.33 (XkbSA_ClearLocks) 109 173.67 S -2 F -(If set and no k) 253 173.67 T -(e) 315.82 173.67 T -(ys are ph) 320.54 173.67 T -(ysically depressed when this k) 360.2 173.67 T -(e) 493.9 173.67 T -(y) 498.62 173.67 T -(transition occurs, the serv) 253 162.67 T -(er sets the lock) 365.87 162.67 T -(ed k) 431.44 162.67 T -(e) 449.97 162.67 T -(yboard group) 454.68 162.67 T -(to) 253 151.67 T -5 F --0.33 (Group1) 264.31 151.67 S -2 F -( on a k) 301.93 151.67 T -(e) 331.45 151.67 T -(y release.) 336.17 151.67 T -5 F --0.33 (XkbSA_LatchToLock) 109 137.67 S -2 F -(If set, and the action type is) 253 137.67 T -5 F --0.33 (SA_LatchGroup) 377.04 137.67 S -2 F -(, the serv) 458.55 137.67 T -(er) 498.4 137.67 T -(locks the action group if it is already latched.) 253 126.67 T -5 F --0.33 (XkbSA_GroupAbsolute) 109 112.67 S -2 F -(If set, the) 253 112.67 T -1 F -(group_XXX) 296.99 112.67 T -2 F -( \336eld represents an absolute group) 348.93 112.67 T --0.12 (number) 253 101.67 P --0.12 (. Otherwise, it represents a group delta to be added to) 286 101.67 P -(the current group to determine the ne) 253 90.67 T -(w group number) 415.86 90.67 T -(.) 487.96 90.67 T -108 652 540 652 2 L -V -0.5 H -0 Z -N -108 635 540 635 2 L -V -N -108 200 522 200 2 L -V -N -108 183 522 183 2 L -V -N -FMENDPAGE -%%EndPage: "146" 158 -%%Page: "147" 159 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(147) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(16 Xkb Serv) 382.36 744.87 T -(er K) 443.3 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -2 12 Q --0.3 (The) 108 712 P -1 F --0.3 (group_XXX) 129.36 712 P -2 F --0.3 ( field represents a signed character. Xkb provides the following macros to) 186.02 712 P -(convert between a signed integer value and a signed character:) 108 699 T -2 11 Q -(int) 108 678.67 T -3 F -(XkbSA) 122.37 678.67 T -(Gr) 155.99 678.67 T -(oup) 169.24 678.67 T -2 F -(\050) 186.97 678.67 T -1 F -(act) 190.63 678.67 T -2 F -(\051) 204.07 678.67 T -(/* macro */) 342 678.67 T -(XkbAction) 126 665.67 T -1 F -(act) 234 665.67 T -2 F -(;) 247.44 665.67 T -(/* action from which to e) 342 665.67 T -(xtract group */) 452.74 665.67 T -1 12 Q -(XkbSA) 108 646 T -(Gr) 139.57 646 T -(oup) 152.36 646 T -2 F -( returns the) 170.36 646 T -1 F -(group_XXX) 227.35 646 T -2 F -( field of) 284.02 646 T -1 F -(act) 325.01 646 T -2 F -( converted to a signed int.) 339.67 646 T -2 11 Q -(v) 108 625.67 T -(oid) 113.28 625.67 T -3 F -(XkbSASetGr) 130.09 625.67 T -(oup) 192.23 625.67 T -2 F -(\050) 209.96 625.67 T -1 F -(act, grp) 213.62 625.67 T -2 F -(\051) 247.84 625.67 T -(/* macro */) 342 625.67 T -(XkbAction) 126 612.67 T -1 F -(act) 234 612.67 T -2 F -(;) 247.44 612.67 T -(/* action from which to set group */) 342 612.67 T -(int) 126 599.67 T -1 F -(grp) 234 599.67 T -2 F -(;) 249.28 599.67 T -(/* group inde) 342 599.67 T -(x to set in) 400.5 599.67 T -1 12 Q -(gr) 446.33 599.67 T -(oup_XXX) 456.46 599.67 T -2 11 Q -( */) 502.46 599.67 T -1 12 Q -(XkbSASetGr) 108 580 T -(oup) 167.45 580 T -2 F -( sets the) 185.45 580 T -1 F -(group_XXX) 227.11 580 T -2 F -( field of) 283.78 580 T -1 F -(act) 324.77 580 T -2 F -( from the group index) 339.43 580 T -1 F -(grp) 447.08 580 T -2 F -(.) 463.75 580 T -0 F -(Note) 126 559.67 T -2 11 Q -(Despite the f) 162 559.67 T -(act that the \336rst parameter of these tw) 218.1 559.67 T -(o macros is of type XkbAction,) 383.87 559.67 T --0.13 (these macros may only be used with Actions of type) 162 547.67 P -5 12 Q --0.32 -0.6 (XkbGroupAction) 393.48 547.67 B -2 11 Q --0.13 ( and) 485.88 547.67 P -5 12 Q --0.32 -0.6 (XkbI-) 507 547.67 B --0.6 (SOAction) 162 535.67 S -2 11 Q -(.) 214.8 535.67 T -0 12 Q -(16.1.5) 72 511 T -(Actions f) 108 511 T -(or Mo) 159.1 511 T -(ving the P) 191.52 511 T -(ointer) 248.39 511 T -2 F -(Actions associated with the) 108 491 T -5 F --0.6 (XkbPtrAction) 242.65 491 S -2 F -( structure move the pointer when keys are) 321.85 491 T -(pressed and released:) 108 478 T -2 11 Q -(typedef struct _XkbPtrAction {) 126 457.67 T -(unsigned char) 144 444.67 T -(type;) 234 444.67 T -(/*) 306 444.67 T -5 F --0.33 (XkbSA_MovePtr) 317.31 444.67 S -5 12 Q --0.6 ( */) 398.82 444.67 S -2 11 Q -(unsigned char) 144 431.67 T -(\337ags;) 234 431.67 T -(/* determines type of pointer motion */) 306 431.67 T -(unsigned char) 144 418.67 T -(high_XXX;) 234 418.67 T -(/* x coordinate, high bits*/) 306 418.67 T -(unsigned char) 144 405.67 T -(lo) 234 405.67 T -(w_XXX;) 242.28 405.67 T -(/* y coordinate, lo) 306 405.67 T -(w bits */) 385.77 405.67 T -(unsigned char) 144 392.67 T -(high_YYY) 234 392.67 T -(;) 281.87 392.67 T -(/* x coordinate, high bits */) 306 392.67 T -(unsigned char) 144 379.67 T -(lo) 234 379.67 T -(w_YYY) 242.28 379.67 T -(;) 278.54 379.67 T -(/* y coordinate, lo) 306 379.67 T -(w bits */) 385.77 379.67 T -(}) 126 366.67 T -3 F -(XkbPtrAction) 134.03 366.67 T -2 F -(;) 200.63 366.67 T -2 12 Q -(If the) 108 347 T -5 F --0.6 (MouseKeys) 136.66 347 S -2 F -( control is not enabled \050see section 10.5.1\051,) 196.06 347 T -5 F --0.6 (KeyPress) 405.02 347 S -2 F -( and) 457.83 347 T -5 F --0.6 (KeyRe-) 481.15 347 S --0.6 (lease) 108 334 S -2 F -( events are treated as though the action is) 141 334 T -5 F --0.6 (XkbSA_NoAction) 341.29 334 S -2 F -(.) 433.7 334 T -(If the) 108 313 T -5 F --0.6 (MouseKeys) 136.66 313 S -2 F -( control is enabled, a server action of type) 196.06 313 T -5 F --0.6 (XkbSA_MovePtr) 400.01 313 S -2 F -( instructs) 485.81 313 T -(the server to generate core pointer) 108 300 T -5 F --0.6 (MotionNotify) 274.61 300 S -2 F -( events rather than the usual) 353.81 300 T -5 F --0.6 (Key-) 491.11 300 S --0.6 (Press) 108 287 S -2 F -( event, and the corresponding) 141 287 T -5 F --0.6 (KeyRelease) 285.64 287 S -2 F -( event disables any mouse keys timers) 351.64 287 T -(that were created as a result of handling the) 108 274 T -5 F --0.6 (XkbSA_MovePtr) 319.61 274 S -2 F -( action.) 405.41 274 T -(The) 108 253 T -1 F -(type) 129.66 253 T -2 F -( field of the) 149.65 253 T -5 F --0.6 (XkbPtrAction) 208.31 253 S -2 F -( structure is always) 287.51 253 T -5 F --0.6 (XkbSA_MovePtr) 382.83 253 S -2 F -(.) 468.63 253 T -(The) 108 232 T -1 F -(flags) 129.66 232 T -2 F -( field is a bitwise inclusive OR of the masks shown in Table 16.6.) 153 232 T -3 F -(T) 238.99 212 T -(able 16.6 P) 245.89 212 T -(ointer Action T) 304.32 212 T -(ypes) 382.09 212 T -1 F -(Action T) 109 192 T -(ype) 149.12 192 T -(Meaning) 253 192 T -5 11 Q --0.33 (XkbSA_NoAcceleration) 109 177.67 S -2 F --0.24 (If not set, and the) 253 177.67 P -5 F --0.54 -0.33 (MouseKeysAccel) 331.24 177.67 B -2 F --0.24 ( control is enabled \050see) 419.02 177.67 P -(section 10.5.2\051, the) 253 166.67 T -5 F --0.33 (KeyPress) 339.77 166.67 S -2 F -( initiates a mouse k) 389.93 166.67 T -(e) 474.76 166.67 T -(ys timer) 479.48 166.67 T -(for this k) 253 155.67 T -(e) 292.61 155.67 T -(y; e) 297.33 155.67 T -(v) 313.25 155.67 T -(ery time the timer e) 318.58 155.67 T -(xpires, the cursor mo) 404.57 155.67 T -(v) 497.28 155.67 T -(es.) 502.61 155.67 T -5 F --0.33 (XkbSA_MoveAbsoluteX) 109 141.67 S -2 F --0.09 (If set, the X portion of the structure speci\336es the ne) 253 141.67 P --0.09 (w pointer) 477.58 141.67 P -(X coordinate. Otherwise, the X portion is added to the cur-) 253 130.67 T -(rent pointer X coordinate to determine the ne) 253 119.67 T -(w pointer X) 450.99 119.67 T -(coordinate.) 253 108.67 T -108 204 522 204 2 L -V -0.5 H -0 Z -N -108 187 522 187 2 L -V -N -FMENDPAGE -%%EndPage: "147" 159 -%%Page: "148" 160 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(148) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(16 Xkb Serv) 382.36 744.87 T -(er K) 443.3 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -2 12 Q -(Each of the X and Y coordinantes of the) 108 620 T -5 F --0.6 (XkbPtrAction) 304.28 620 S -2 F -( structure is composed of two) 383.49 620 T -(signed 16-bit values, that is, the X coordinate is composed of) 108 607 T -1 F -(high_XXX) 404.3 607 T -2 F -( and) 453.64 607 T -1 F -(low_XXX) 476.96 607 T -2 F -(,) 522.3 607 T -(and similarly for the Y coordinate. Xkb provides the following macros, to convert) 108 594 T -(between a signed integer and two signed 16-bit values in) 108 581 T -5 F --0.6 (XkbPtrAction) 383.29 581 S -2 F -( structures:) 462.49 581 T -2 11 Q -(int) 108 560.67 T -3 F -(XkbPtrActionX) 122.37 560.67 T -2 F -(\050) 196.91 560.67 T -1 F -(act) 200.58 560.67 T -2 F -(\051) 214.02 560.67 T -(/* macro */) 342 560.67 T -(XkbPtrAction) 126 547.67 T -1 F -(act) 234 547.67 T -2 F -(;) 247.44 547.67 T -(/* action from which to e) 342 547.67 T -(xtract X */) 452.74 547.67 T -1 12 Q -(XkbPtrActionX) 108 528 T -2 F -( returns the) 180.66 528 T -1 F -(high_XXX) 237.65 528 T -2 F -( and) 286.98 528 T -1 F -(low_XXX) 310.31 528 T -2 F -( fields of) 355.64 528 T -1 F -(act) 401.3 528 T -2 F -( converted to a signed int.) 415.97 528 T -2 11 Q -(int) 108 507.67 T -3 F -(XkbPtrActionY) 122.37 507.67 T -2 F -(\050) 196.91 507.67 T -1 F -(act) 200.58 507.67 T -2 F -(\051) 214.02 507.67 T -(/* macro */) 342 507.67 T -(XkbPtrAction) 126 494.67 T -1 F -(act) 234 494.67 T -2 F -(;) 247.44 494.67 T -(/* action from which to e) 342 494.67 T -(xtract Y */) 452.74 494.67 T -1 12 Q -(XkbPtrActionY) 108 475 T -2 F -( returns the) 180 475 T -1 F -(high_YYY) 236.99 475 T -2 F -( and) 284.34 475 T -1 F -(low_YYY) 307.67 475 T -2 F -( fields of) 351.02 475 T -1 F -(act) 396.68 475 T -2 F -( converted to a signed int.) 411.35 475 T -2 11 Q -(v) 108 454.67 T -(oid) 113.28 454.67 T -3 F -(XkbSetPtrActionX) 130.09 454.67 T -2 F -(\050) 219.3 454.67 T -1 F -(act) 222.96 454.67 T -2 F -(,) 236.4 454.67 T -1 F -(x) 241.9 454.67 T -2 F -(\051) 246.79 454.67 T -(/* macro */) 342 454.67 T -(XkbPtrAction) 126 441.67 T -1 F -(act) 234 441.67 T -2 F -(;) 247.44 441.67 T -(/* action in which to set X */) 342 441.67 T -(int) 126 428.67 T -1 F -(x;) 234 428.67 T -2 F -(/* ne) 342 428.67 T -(w v) 363.42 428.67 T -(alue to set */) 379.33 428.67 T -1 12 Q -(XkbSetPtrActionX) 108 409 T -2 F -( sets the) 195.32 409 T -1 F -(high_XXX) 236.99 409 T -2 F -( and) 286.32 409 T -1 F -(low_XXX) 309.65 409 T -2 F -( fields of) 354.98 409 T -1 F -(act) 400.64 409 T -2 F -( from the signed integer) 415.31 409 T -(value) 108 396 T -1 F -(x) 136.99 396 T -2 F -(.) 142.32 396 T -2 11 Q -(v) 108 375.67 T -(oid) 113.28 375.67 T -3 F -(XkbSetPtrActionY) 130.09 375.67 T -2 F -(\050) 219.3 375.67 T -1 F -(act, y) 222.96 375.67 T -2 F -(\051) 246.79 375.67 T -(/* macro */) 342 375.67 T -(XkbPtrAction) 126 362.67 T -1 F -(act) 234 362.67 T -2 F -(;) 247.44 362.67 T -(/* action in which to set Y */) 342 362.67 T -(int) 126 349.67 T -1 F -(y) 234 349.67 T -2 F -(;) 238.88 349.67 T -(/* ne) 342 349.67 T -(w v) 363.42 349.67 T -(alue to set */) 379.33 349.67 T -1 12 Q -(XkbSetPtrActionX) 108 330 T -2 F -( sets the) 195.32 330 T -1 F -(high_YYY) 236.99 330 T -2 F -( and) 284.34 330 T -1 F -(low_YYY) 307.67 330 T -2 F -( fields of) 351.02 330 T -1 11 Q -(act) 396.68 330 T -2 12 Q -( from the signed integer) 410.13 330 T -(value) 108 317 T -1 F -(y) 136.99 317 T -2 F -(.) 142.32 317 T -0 F -(16.1.6) 72 292 T -(Actions f) 108 292 T -(or Sim) 159.1 292 T -(ulating P) 196.2 292 T -(ointer Button Press and Release) 246.4 292 T -2 F -(Actions associated with the) 108 272 T -5 F --0.6 (XkbPtrBtnAction) 242.65 272 S -2 F -( structure simulate the press and release) 341.65 272 T -(of pointer buttons when keys are pressed and released:) 108 259 T -2 11 Q -(typedef struct _XkbPtrBtnAction {) 126 238.67 T -(unsigned char) 144 225.67 T -(type;) 225 225.67 T -(/*) 261 225.67 T -5 F --0.33 (XkbSA_PtrBtn, XkbSA_LockPtrBtn) 269.56 225.67 S -2 F -( */) 457.66 225.67 T -(unsigned char) 144 212.67 T -(\337ags;) 225 212.67 T -(/* with) 261 212.67 T -1 F -(type) 294.62 212.67 T -2 F -(, controls the ef) 312.94 212.67 T -(fect on pointer b) 381.1 212.67 T -(uttons*/) 453.28 212.67 T -(unsigned char) 144 199.67 T -(count;) 225 199.67 T -(/* controls number of ButtonPress and ButtonRelease e) 261 199.67 T -(v) 504.85 199.67 T -(ents */) 510.18 199.67 T -(unsigned char) 144 186.67 T -(b) 225 186.67 T -(utton;) 230.28 186.67 T -(/* pointer b) 261 186.67 T -(utton to simulate */) 311.5 186.67 T -(}) 126 173.67 T -3 F -(XkbPtrBtnAction) 134.03 173.67 T -2 F -(;) 217.75 173.67 T -2 12 Q -(If the) 108 154 T -5 F --0.6 (MouseKeys) 136.66 154 S -2 F -( \050see section 10.5.1\051 control is not enabled,) 196.06 154 T -5 F --0.6 (KeyPress) 405.02 154 S -2 F -( and) 457.83 154 T -5 F --0.6 (KeyRe-) 481.15 154 S --0.6 (lease) 108 141 S -2 F -( events are treated as though the action is) 141 141 T -5 F --0.6 (XkbSA_NoAction) 341.29 141 S -2 F -(.) 433.7 141 T -5 11 Q --0.33 (XkbSA_MoveAbsoluteY) 109 677.67 S -2 F -(If set, the Y portion of the structure speci\336es the ne) 253 677.67 T -(w) 478.49 677.67 T -(pointer Y coordinate. Otherwise, the Y portion is added) 253 666.67 T -(to the current pointer Y coordinate to determine the ne) 253 655.67 T -(w) 492.54 655.67 T -(pointer Y coordinate.) 253 644.67 T -3 12 Q -(T) 238.99 712 T -(able 16.6 P) 245.89 712 T -(ointer Action T) 304.32 712 T -(ypes) 382.09 712 T -1 F -(Action T) 109 692 T -(ype) 149.12 692 T -(Meaning) 253 692 T -108 704 522 704 2 L -V -0.5 H -0 Z -N -108 687 522 687 2 L -V -N -FMENDPAGE -%%EndPage: "148" 160 -%%Page: "149" 161 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(149) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(16 Xkb Serv) 382.36 744.87 T -(er K) 443.3 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -2 12 Q -(The) 108 712 T -1 F -(type) 129.66 712 T -2 F -( field can have any one of the values shown in Table 16.7.) 149.65 712 T --0.33 (The) 108 346 P -1 F --0.33 (flags) 129.33 346 P -2 F --0.33 ( field is composed of the bitwise inclusive OR of the masks shown in Table 16.8.) 152.67 346 P --0.28 (A general meaning is given in the table, but the exact meaning depends on the action) 108 333 P -1 F --0.28 (type) 513.85 333 P --0.28 (.) 533.66 333 P -2 F --0.28 (:) 536.66 333 P -0 F -(16.1.7) 72 170 T -(Actions f) 108 170 T -(or Changing the P) 159.1 170 T -(ointer Button Sim) 261.96 170 T -(ulated) 362.39 170 T -2 F -(Actions associated with the) 108 150 T -5 F --0.6 (XkbPtrDfltAction) 242.65 150 S -2 F -( structure change the) 348.25 150 T -1 F -(mk_dflt_btn) 450.89 150 T -2 F -(attribute of the) 108 137 T -5 F --0.6 (MouseKeys) 181.66 137 S -2 F -( control \050) 241.06 137 T -2 11 Q -(see) 285.05 137 T -2 12 Q -(section 10.5.1\051:) 301.85 137 T -2 11 Q -(typedef struct _XkbPtrD\337tAction {) 126 116.67 T -(unsigned char) 144 103.67 T -(type;) 234 103.67 T -(/*) 306 103.67 T -5 F --0.33 (XkbSA_SetPtrDflt) 317.31 103.67 S -2 F -( */) 417.63 103.67 T -(unsigned char) 144 90.67 T -(\337ags;) 234 90.67 T -(/* controls the pointer b) 306 90.67 T -(utton number */) 410.89 90.67 T -(unsigned char) 144 77.67 T -(af) 234 77.67 T -(fect;) 242.27 77.67 T -(/*) 306 77.67 T -5 F --0.33 (XkbSA_AffectDfltBtn) 317.31 77.67 S -2 F -( */) 436.44 77.67 T -3 12 Q -(T) 228.82 692 T -(able 16.7 P) 235.72 692 T -(ointer Button Action T) 294.15 692 T -(ypes) 410.26 692 T -1 F -(T) 109 672 T -(ype) 114.78 672 T -(Ef) 217 672 T -(fect) 227.45 672 T -5 11 Q --0.33 (XkbSA_PtrBtn) 109 657.67 S -2 F -(\245) 217 653.67 T -(If) 226 653.67 T -5 F --0.33 ( XkbSA_UseDfltButton) 233.33 653.67 S -2 F -( is set in the) 358.73 653.67 T -1 F -(flags) 414.03 653.67 T -2 F -( \336eld, the e) 435.43 653.67 T -(v) 484.04 653.67 T -(ent is gen-) 489.37 653.67 T -(erated for the pointer b) 226 642.67 T -(utton speci\336ed by the) 326.58 642.67 T -1 F -(mk_dflt_btn) 423.75 642.67 T -2 F -( attrib) 476.3 642.67 T -(ute of) 502.06 642.67 T -(the) 226 631.67 T -5 12 Q --0.6 (MouseKeys) 242.19 631.67 S -2 11 Q -( control \050see) 301.59 631.67 T -2 12 Q -(section 10.5.1) 358.72 631.67 T -2 11 Q -(\051. Otherwise, the e) 425.71 631.67 T -(v) 506.39 631.67 T -(ent is) 511.72 631.67 T -(generated for the b) 226 620.67 T -(utton speci\336ed by the) 308.55 620.67 T -1 F -(button) 405.72 620.67 T -2 F -( \336eld.) 433.83 620.67 T -(\245) 217 609.67 T -(If the mouse b) 226 609.67 T -(utton speci\336ed for this action is logically do) 289.02 609.67 T -(wn, the k) 482.16 609.67 T -(e) 522.68 609.67 T -(y) 527.4 609.67 T -(press and corresponding k) 226 598.67 T -(e) 341.06 598.67 T -(y release are ignored and ha) 345.78 598.67 T -(v) 468.65 598.67 T -(e no ef) 473.98 598.67 T -(fect.) 503.64 598.67 T -(Otherwise, a k) 226 587.67 T -(e) 289.73 587.67 T -(y press causes one or more core pointer b) 294.45 587.67 T -(utton e) 476.29 587.67 T -(v) 506.27 587.67 T -(ents) 511.6 587.67 T -(instead of the usual) 226 576.67 T -5 F --0.33 (KeyPress) 313.99 576.67 S -2 F -( e) 364.15 576.67 T -(v) 371.51 576.67 T -(ent. If) 376.84 576.67 T -1 F -(count) 405.86 576.67 T -2 F -( is) 430.3 576.67 T -5 F --0.33 (zero) 443.14 576.67 S -2 F -(, a k) 468.22 576.67 T -(e) 486.74 576.67 T -(y press) 491.46 576.67 T --0.02 (generates a single) 226 565.67 P -5 F --0.04 -0.33 (ButtonPress) 306.9 565.67 B -2 F --0.02 ( e) 375.87 565.67 P --0.02 (v) 383.22 565.67 P --0.02 (ent; if) 388.55 565.67 P -1 F --0.02 (count) 417.24 565.67 P -2 F --0.02 ( is greater than) 441.68 565.67 P -5 F --0.04 -0.33 (zero) 509.43 565.67 B -2 F --0.02 (,) 534.52 565.67 P -(a k) 226 554.67 T -(e) 239.02 554.67 T -(y press generates) 243.74 554.67 T -1 F -(count) 321.63 554.67 T -2 F -( pairs of) 346.08 554.67 T -5 F --0.33 (ButtonPress) 384.87 554.67 S -2 F -( and) 453.84 554.67 T -5 F --0.33 (ButtonRe-) 475.23 554.67 S --0.33 (lease) 226 543.67 S -2 F -( e) 257.35 543.67 T -(v) 264.71 543.67 T -(ents.) 270.04 543.67 T -(\245) 217 532.67 T -(If) 226 532.67 T -1 F -(count) 236.08 532.67 T -2 F -( is) 260.52 532.67 T -5 12 Q --0.6 (zero) 273.36 532.67 S -2 11 Q -(, a k) 299.76 532.67 T -(e) 318.28 532.67 T -(y release generates a core pointer) 323 532.67 T -5 F --0.33 (ButtonRe-) 472.05 532.67 S --0.33 (lease) 226 521.67 S -2 F -( that matches the e) 257.35 521.67 T -(v) 338.95 521.67 T -(ent generated by the corresponding) 344.28 521.67 T -5 F --0.33 (Key-) 501.61 521.67 S --0.33 (Press) 226 510.67 S -2 F -(; if) 257.35 510.67 T -1 F -(count) 272.63 510.67 T -2 F -( is nonzero, a k) 297.07 510.67 T -(e) 363.86 510.67 T -(y release does not cause a) 368.58 510.67 T -5 F --0.33 (ButtonRelease) 226 499.67 S -2 F -( e) 307.51 499.67 T -(v) 314.87 499.67 T -(ent. A k) 320.2 499.67 T -(e) 355.23 499.67 T -(y release ne) 359.95 499.67 T -(v) 411.59 499.67 T -(er generates a k) 416.93 499.67 T -(e) 485.53 499.67 T -(y) 490.25 499.67 T -5 F --0.33 (KeyRe-) 498.5 499.67 S --0.33 (lease) 226 488.67 S -2 F -( e) 257.35 488.67 T -(v) 264.71 488.67 T -(ent.) 270.04 488.67 T -5 F --0.33 (XkbSA_LockPtrBtn) 109 474.67 S -2 F -(\245) 217 470.67 T -(If the b) 226 470.67 T -(utton speci\336ed by the) 257.55 470.67 T -5 F --0.33 (MouseKeys) 354.71 470.67 S -2 F -( def) 411.14 470.67 T -(ault b) 427.83 470.67 T -(utton) 452.36 470.67 T -(or) 477.72 470.67 T -1 F -(button) 489.64 470.67 T -2 F -( is) 517.75 470.67 T -(not lock) 226 459.67 T -(ed, a k) 261.64 459.67 T -(e) 290.55 459.67 T -(y press causes a) 295.27 459.67 T -5 F --0.33 (ButtonPress) 367.97 459.67 S -2 F -( e) 436.94 459.67 T -(v) 444.3 459.67 T -(ent instead of a) 449.63 459.67 T -5 F --0.33 (KeyPress) 226 448.67 S -2 F -( e) 276.16 448.67 T -(v) 283.52 448.67 T -(ent and locks the b) 288.85 448.67 T -(utton. If the b) 371.12 448.67 T -(utton is already lock) 430.79 448.67 T -(ed) 520.2 448.67 T -(or if) 226 437.67 T -5 F --0.33 (XkbSA_LockNoUnlock) 247.38 437.67 S -2 F -( is set in the) 360.24 437.67 T -1 F -(flags) 415.55 437.67 T -2 F -( \336eld, a k) 436.95 437.67 T -(e) 477.78 437.67 T -(y press is) 482.5 437.67 T -(ignored and has no ef) 226 426.67 T -(fect.) 320.42 426.67 T -(\245) 217 415.67 T -(If the corresponding k) 226 415.67 T -(e) 323.34 415.67 T -(y press w) 328.06 415.67 T -(as ignored, and if) 369.49 415.67 T -5 F --0.33 (XkbSA_LockNoLock) 226 404.67 S -2 F -( is not set in the) 326.32 404.67 T -1 F -(flags) 398.44 404.67 T -2 F -( \336eld, a k) 419.83 404.67 T -(e) 460.66 404.67 T -(y release gener-) 465.38 404.67 T -(ates a) 226 393.67 T -5 F --0.33 (ButtonRelease) 253.49 393.67 S -2 F -( e) 335 393.67 T -(v) 342.36 393.67 T -(ent instead of a) 347.69 393.67 T -5 F --0.33 (KeyRelease) 417.35 393.67 S -2 F -( e) 480.05 393.67 T -(v) 487.4 393.67 T -(ent and) 492.74 393.67 T -(unlocks the speci\336ed b) 226 382.67 T -(utton. If the corresponding k) 326.3 382.67 T -(e) 451.75 382.67 T -(y press lock) 456.47 382.67 T -(ed a) 508.91 382.67 T -(b) 226 371.67 T -(utton, the k) 231.28 371.67 T -(e) 280.98 371.67 T -(y release is ignored and has no ef) 285.7 371.67 T -(fect.) 431.74 371.67 T -3 12 Q -(T) 225.55 313 T -(able 16.8 P) 232.45 313 T -(ointer Button Action Flags) 290.87 313 T -1 F -(Fla) 109 293 T -(g) 125.55 293 T -(Meaning) 244 293 T -5 11 Q --0.33 (XkbSA_UseDfltButton) 109 278.67 S -2 F -(If set, the action uses the pointer b) 244 278.67 T -(utton speci\336ed by the) 394.7 278.67 T -1 F -(mk_dflt_btn) 244 267.67 T -2 F -( attrib) 296.56 267.67 T -(ute of the) 322.31 267.67 T -5 F --0.33 (MouseKeys) 366.61 267.67 S -2 F -( control \050see section) 423.04 267.67 T --0.43 (10.5.1\051. Otherwise, the action uses the pointer b) 244 256.67 P --0.43 (utton speci\336ed by) 451.3 256.67 P -(the) 244 245.67 T -1 F -( button) 257.44 245.67 T -2 F -(\336eld.) 291.06 245.67 T -5 F --0.33 (XkbSA_LockNoLock) 109 231.67 S -2 F -(If set, and the action type is) 244 231.67 T -5 F --0.33 (XkbSA_LockPtrBtn) 368.04 231.67 S -2 F -(, the serv) 468.36 231.67 T -(er) 508.21 231.67 T -(only unlocks the pointer b) 244 220.67 T -(utton.) 358.66 220.67 T -5 F --0.33 (XkbSA_LockNoUnlock) 109 206.67 S -2 F -(If set, and the action type is) 244 206.67 T -5 F --0.33 (XkbSA_LockPtrBtn) 368.04 206.67 S -2 F -(, the serv) 468.36 206.67 T -(er) 508.21 206.67 T -(only locks the pointer b) 244 195.67 T -(utton.) 347.66 195.67 T -108 684 540 684 2 L -V -0.5 H -0 Z -N -108 667 540 667 2 L -V -N -108 305 531 305 2 L -V -N -108 288 531 288 2 L -V -N -FMENDPAGE -%%EndPage: "149" 161 -%%Page: "150" 162 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(150) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(16 Xkb Serv) 382.36 744.87 T -(er K) 443.3 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -(char) 144 712.67 T -(v) 234 712.67 T -(alueXXX;) 239.23 712.67 T -(/* ne) 306 712.67 T -(w def) 327.42 712.67 T -(ault b) 352.05 712.67 T -(utton member */) 376.58 712.67 T -(}) 126 699.67 T -3 F -(XkbPtrD\337tAction) 134.03 699.67 T -2 F -(;) 218.36 699.67 T -2 12 Q --0.06 (If the) 108 680 P -5 F --0.14 -0.6 (MouseKeys) 136.53 680 B -2 F --0.06 ( control is not enabled,) 195.93 680 P -5 F --0.14 -0.6 (KeyPress) 308.28 680 B -2 F --0.06 ( and) 361.08 680 P -5 F --0.14 -0.6 (KeyRelease) 384.28 680 B -2 F --0.06 ( events are treated) 450.28 680 P --0.36 (as though the action is) 108 667 P -5 F --0.8 -0.6 (XkbSA_NoAction) 216.51 667 B -2 F --0.36 (. Otherwise, this action changes the) 308.91 667 P -1 F --0.36 (mk_dflt_btn) 480.03 667 P -2 F -(attribute of the) 108 654 T -5 F --0.6 (MouseKeys) 181.66 654 S -2 F -( control.) 241.06 654 T -(The) 108 633 T -1 F -(type) 129.66 633 T -2 F -( field of the) 149.65 633 T -5 F --0.6 (XkbPtrDfltAction) 208.31 633 S -2 F -( structure should always be) 313.91 633 T -5 F --0.6 (XkbSA_SetPtrDflt) 108 620 S -2 F -(.) 213.6 620 T --0.19 (The) 108 599 P -1 F --0.19 (flags) 129.47 599 P -2 F --0.19 ( field is composed of the bitwise inclusive OR of the values shown in Table 16.9) 152.81 599 P -(\050currently there is only one value defined\051.) 108 586 T -(The) 108 484 T -1 F -(affect) 129.66 484 T -2 F -( field specifies what changes as a result of this action. The only valid value for) 156.32 484 T -(the) 108 471 T -1 F -(affect) 125.66 471 T -2 F -( field is) 152.33 471 T -5 F --0.6 (XkbSA_AffectDfltBtn) 191.33 471 S -2 F -(.) 316.73 471 T -(The) 108 450 T -1 F -(valueXXX) 129.66 450 T -2 F -( field is a signed character that represents the new button value for the) 177.65 450 T -1 F -(mk_dflt_btn) 108 437 T -2 F -( attribute of the) 165.34 437 T -5 F --0.6 (MouseKeys) 241.99 437 S -2 F -( control \050see section 10.5.1\051. If) 301.39 437 T -5 F --0.6 (XkbSA_DfltBtnAbsolute) 108 424 S -2 F -( is set in) 246.6 424 T -1 F -(\337a) 289.27 424 T -(gs) 301.15 424 T -2 F -(,) 311.82 424 T -1 F -(valueXXX) 317.82 424 T -2 F -( specifies the button to be used; oth-) 365.81 424 T -(erwise,) 108 411 T -1 F -(valueXXX) 145.32 411 T -2 F -( specifies the amount to be added to the current default button. In either) 193.31 411 T -(case, illegal button choices are wrapped back around into range. Xkb provides the follow-) 108 398 T -(ing macros, to convert between the integer and signed character values in) 108 385 T -5 F --0.6 (XkbPtrDfl-) 462.91 385 S --0.6 (tAction) 108 372 S -2 F -( structures:) 154.2 372 T -2 11 Q -(int) 108 351.67 T -3 F -(XkbSAPtrD\337tV) 122.37 351.67 T -(alue) 196.52 351.67 T -2 F -(\050) 216.07 351.67 T -1 F -(act) 219.74 351.67 T -2 F -(\051) 233.18 351.67 T -(/* macro */) 342 351.67 T -(XkbAction) 126 338.67 T -1 F -(act) 234 338.67 T -2 F -(;) 247.44 338.67 T -(/* action from which to e) 342 338.67 T -(xtract group */) 452.74 338.67 T -1 12 Q -(XkbSAPtrD\337tV) 108 319 T -(alue) 179.33 319 T -2 F -( returns the) 199.99 319 T -1 F -(valueXXX) 256.98 319 T -2 F -( field of) 304.97 319 T -1 F -(act) 345.96 319 T -2 F -( converted to a signed int.) 360.62 319 T -2 11 Q -(v) 108 298.67 T -(oid) 113.28 298.67 T -3 F -(XkbSASetPtrD\337tV) 130.09 298.67 T -(alue) 218.9 298.67 T -2 F -(\050) 238.46 298.67 T -1 F -(act, val) 242.12 298.67 T -2 F -(\051) 274.51 298.67 T -(/* macro */) 342 298.67 T -(XkbPtrD\337tAction) 126 285.67 T -1 F -(act) 234 285.67 T -2 F -(;) 247.44 285.67 T -(/* action in which to set) 342 285.67 T -1 F -(valueXXX) 450.16 285.67 T -2 F -( */) 494.15 285.67 T -(int) 126 272.67 T -1 F -(val) 234 272.67 T -2 F -(;) 247.44 272.67 T -(/* v) 342 272.67 T -(alue to set in) 358.53 272.67 T -1 F -(valueXXX) 417.2 272.67 T -2 F -( */) 461.18 272.67 T -1 12 Q -(XkbSASetPtrD\337tV) 108 253 T -(alue) 193.99 253 T -2 F -( sets the) 214.66 253 T -1 F -(valueXXX) 256.32 253 T -2 F -( field of) 304.31 253 T -1 F -(act) 345.3 253 T -2 F -( from) 359.96 253 T -1 F -(val) 389.29 253 T -2 F -(.) 403.96 253 T -0 F -(16.1.8) 72 228 T -(Actions f) 108 228 T -(or Loc) 159.1 228 T -(king Modi\336er) 195.53 228 T -(s and Gr) 270.02 228 T -(oup) 318.47 228 T -2 F -(Actions associated with the) 108 208 T -5 F --0.6 (XkbISOAction) 242.65 208 S -2 F -( structure lock modifiers and the group) 321.85 208 T -(according to the ISO9995 specification.) 108 195 T -(Operated by itself, the) 108 174 T -5 F --0.6 (XkbISOAction) 217.64 174 S -2 F -( is just a caps lock. Operated simultaneously with) 296.85 174 T -(another modifier key, it transforms the other key into a locking key. For example, press) 108 161 T -4 11 Q -(ISO_Loc) 108 148 T -(k) 150.58 148 T -2 12 Q -(, press and release) 156.08 148 T -4 11 Q -(Control_L) 246.38 148 T -2 12 Q -(, release) 294.07 148 T -4 11 Q -(ISO_Loc) 336.38 148 T -(k) 378.96 148 T -2 12 Q -( ends up locking the) 384.46 148 T -5 F --0.6 (Control) 484.12 148 S -2 F -(modifier.) 108 135 T -(The default behavior is to convert:) 108 114 T -2 11 Q -( {Set,Latch}Mods to: LockMods) 139.68 93.67 T -( {Set,Latch}Group to: LockGroup) 139.68 80.67 T -( SetPtrBtn to: LockPtrBtn) 139.68 67.67 T -3 12 Q -(T) 238.72 566 T -(able 16.9 P) 245.62 566 T -(ointer Default Flags) 304.05 566 T -1 F -(Fla) 109 546 T -(g) 125.55 546 T -(Meaning) 254 546 T -5 11 Q --0.33 (XkbSA_DfltBtnAbsolute) 109 531.67 S -2 F -(If set, the) 254 531.67 T -1 F -(value) 297.99 531.67 T -2 F -( \336eld represents an absolute pointer b) 321.82 531.67 T -(utton.) 485.96 531.67 T -(Otherwise, the) 254 520.67 T -1 F -(value) 320.9 520.67 T -2 F -( \336eld represents the amount to be added) 344.73 520.67 T -(to the current def) 254 509.67 T -(ault b) 329.34 509.67 T -(utton.) 353.87 509.67 T -108 558 523 558 2 L -V -0.5 H -0 Z -N -108 541 523 541 2 L -V -N -FMENDPAGE -%%EndPage: "150" 162 -%%Page: "151" 163 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(151) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(16 Xkb Serv) 382.36 744.87 T -(er K) 443.3 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -( SetControls to: LockControls) 139.68 712.67 T -2 12 Q -(The) 108 693 T -1 F -(affects) 129.66 693 T -2 F -( field allows you to turn those effects on or off individually. Set) 160.99 693 T -5 F --0.6 (XkbSA_ISONoAffectMods) 108 680 S -2 F -( to disable the first,) 246.6 680 T -5 F --0.6 (XkbSA_ISONoAffectGroup) 341.93 680 S -2 F -( to disable) 487.13 680 T -(the second, and so forth.) 108 667 T -2 11 Q -(typedef struct _XkbISO) 126 646.67 T -(Action {) 230.71 646.67 T -(unsigned char) 144 633.67 T -(type;) 216 633.67 T -(/*) 261 633.67 T -5 F --0.33 (XkbSA_ISOLock) 272.31 633.67 S -2 F -( */) 353.82 633.67 T -(unsigned char) 144 620.67 T -(\337ags;) 216 620.67 T -(/* controls changes to group or modi\336er state */) 261 620.67 T -(unsigned char) 144 607.67 T -(mask;) 216 607.67 T -(/*) 261 607.67 T -2 12 Q -(same as) 272.31 607.67 T -1 F -(mask) 312.96 607.67 T -2 F -( field of a modifier description) 337.62 607.67 T -2 11 Q -( */) 484.6 607.67 T -(unsigned char) 144 594.67 T -(real_mods;) 216 594.67 T -(/* same as) 264.88 594.67 T -1 12 Q -(real_mods) 313.46 594.67 T -2 11 Q -(\336eld of a modi\336er description) 367.12 594.67 T -2 12 Q -( */) 497.89 594.67 T -2 11 Q -(char) 144 581.67 T -(group_XXX;) 216 581.67 T -(/* group inde) 274.05 581.67 T -(x or delta group */) 332.55 581.67 T -(unsigned char) 144 568.67 T -(af) 216 568.67 T -(fect;) 224.27 568.67 T -(/* speci\336es whether to af) 261 568.67 T -(fect mods, group, ptrbtn, or controls*/) 370.7 568.67 T -(unsigned char) 144 555.67 T -(vmods1;) 216 555.67 T -(/* deri) 261 555.67 T -(v) 289.14 555.67 T -(ed from) 294.47 555.67 T -1 12 Q -(vmods) 331.74 555.67 T -2 F -( field of a modifier description) 362.4 555.67 T -2 11 Q -( */) 509.38 555.67 T -(unsigned char) 144 542.67 T -(vmods2;) 216 542.67 T -(/* deri) 261 542.67 T -(v) 289.14 542.67 T -(ed from) 294.47 542.67 T -1 12 Q -(vmods) 331.74 542.67 T -2 F -( field of a modifier description) 362.4 542.67 T -2 11 Q -( */) 509.38 542.67 T -(}) 126 529.67 T -3 F -(XkbISO) 134.03 529.67 T -(Action) 172.72 529.67 T -2 F -(;) 203.88 529.67 T -2 12 Q -(The) 108 510 T -1 F -(type) 129.66 510 T -2 F -( field of the) 149.65 510 T -5 F --0.6 (XkbISOAction) 208.31 510 S -2 F -( structure should always be) 287.51 510 T -5 F --0.6 (XkbSA_ISOLock) 421.15 510 S -2 F -(.) 506.95 510 T --0.16 (The interpretation of the) 108 489 P -1 F --0.16 (flags) 227.32 489 P -2 F --0.16 ( field depends on whether the) 250.66 489 P -5 F --0.36 -0.6 (XkbSA_ISODfltIsGroup) 394.32 489 B -2 F --0.16 ( is) 526.32 489 P -(set in the) 108 476 T -1 F -(flags) 154.33 476 T -2 F -( field or not.) 177.67 476 T -(If the) 108 455 T -5 F --0.6 (XkbSA_ISODfltIsGroup) 136.66 455 S -2 F -( is set in the) 268.66 455 T -1 F -(flags) 328.99 455 T -2 F -( field, the action is used to change the) 352.33 455 T --0.27 (group state. The remaining valid bits of the) 108 442 P -1 F --0.27 (flags) 316.17 442 P -2 F --0.27 ( field are composed of a bitwise inclusive) 339.51 442 P -(OR using the masks shown in Table 16.10.) 108 429 T -3 F -(T) 154.85 409 T -(able 16.10 ISO Action Flags when XkbSA_ISOD\337tIsGr) 161.75 409 T -(oup is Set) 447.56 409 T -1 F -(Fla) 109 389 T -(g) 125.55 389 T -(Meaning) 261 389 T -5 11 Q --0.33 (XkbSA_ISODfltIsGroup) 109 374.67 S -2 F --0.06 (If set, the action is used to change the base group state. Must) 261 374.67 P -(be set for the remaining bits in this table to carry their inter-) 261 363.67 T -(pretations.) 261 352.67 T -2 12 Q -(A key press sets the base group as specified by the) 261 337.67 T -1 F --0.64 (group_XXX) 261 326.67 P -2 F --0.64 ( field and the) 317.66 326.67 P -5 11 Q --1.33 -0.33 (XkbSA_GroupAbsolute) 381.11 326.67 B -2 12 Q --0.64 ( bit of) 500.24 326.67 P --0.09 (the) 261 315.67 P -1 F --0.09 (flags) 278.58 315.67 P -2 F --0.09 ( field \050see section Note\051. If no other actions are) 301.92 315.67 P -(transformed by the) 261 304.67 T -5 11 Q --0.33 (XkbISO_Lock) 354.65 304.67 S -2 12 Q -( action, a key release) 423.62 304.67 T -(locks the group. Otherwise, a key release clears group) 261 293.67 T -(set by the key press.) 261 282.67 T -5 11 Q --0.33 (XkbSA_GroupAbsolute) 109 268.67 S -2 F -(If set, the) 261 268.67 T -1 F -(group_XXX) 304.99 268.67 T -2 F -( \336eld represents an absolute group) 356.93 268.67 T --0.12 (number) 261 257.67 P --0.12 (. Otherwise, it represents a group delta to be added to) 294 257.67 P -(the current group to determine the ne) 261 246.67 T -(w group number) 423.86 246.67 T -(.) 495.96 246.67 T -5 F --0.33 (XkbSA_ISONoAffectMods) 109 232.67 S -2 F -(If not set, an) 261 232.67 T -(y) 315.82 232.67 T -5 F --0.33 (XkbSA_SetMods) 324.07 232.67 S -2 F -( or) 405.58 232.67 T -5 F --0.33 (XkbSA_LatchMods) 420.25 232.67 S -2 F --0.5 (actions that occur simultaneously with the) 261 221.67 P -5 F --1.13 -0.33 (XkbSA_ISOLock) 446.23 221.67 B -2 F -(action are treated as) 261 210.67 T -5 F --0.33 (XkbSA_LockMod) 351.41 210.67 S -2 F -( actions instead.) 432.92 210.67 T -5 F --0.33 (XkbSA_ISONoAffectGroup) 109 196.67 S -2 F -(If not set, an) 261 196.67 T -(y) 315.82 196.67 T -5 F --0.33 (XkbSA_SetGroup) 324.07 196.67 S -2 F -( or) 411.85 196.67 T -5 F --0.33 (XkbSA_LatchGroup) 426.52 196.67 S -2 F --0.5 (actions that occur simultaneously with the) 261 185.67 P -5 F --1.13 -0.33 (XkbSA_ISOLock) 446.23 185.67 B -2 F -(action are treated as) 261 174.67 T -5 F --0.33 (XkbSA_LockGroup) 351.41 174.67 S -2 F -( actions instead.) 445.46 174.67 T -5 F --0.33 (XkbSA_ISONoAffectPtr) 109 160.67 S -2 F -(If not set, an) 261 160.67 T -(y) 315.82 160.67 T -5 F --0.33 (XkbSA_PtrBtn) 324.07 160.67 S -2 F -( actions that occur simulta-) 399.31 160.67 T -(neously with the) 261 149.67 T -5 F --0.33 (XkbSA_ISOLock) 336.47 149.67 S -2 F -( action are treated as) 417.98 149.67 T -5 F --0.33 (XkbSA_LockPtrBtn) 261 138.67 S -2 F -( actions instead.) 361.32 138.67 T -5 F --0.33 (XkbSA_ISONoAffectCtrls) 109 124.67 S -2 F -(If not set, an) 261 124.67 T -(y) 315.82 124.67 T -5 F --0.33 (XkbSA_SetControls) 324.07 124.67 S -2 F -( actions that occur) 430.66 124.67 T --0.23 (simultaneously with the) 261 113.67 P -5 F --0.53 -0.33 (XkbSA_ISOLock) 368.17 113.67 B -2 F --0.23 ( action are treated) 449.68 113.67 P -(as) 261 102.67 T -5 F --0.33 (XkbSA_LockControls) 272.91 102.67 S -2 F -( actions instead.) 385.77 102.67 T -108 401 530 401 2 L -V -0.5 H -0 Z -N -108 384 530 384 2 L -V -N -FMENDPAGE -%%EndPage: "151" 163 -%%Page: "152" 164 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(152) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(16 Xkb Serv) 382.36 744.87 T -(er K) 443.3 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -2 12 Q -(If the) 108 712 T -5 F --0.6 (XkbSA_ISODfltIsGroup) 136.66 712 S -2 F -( is not set in the) 268.66 712 T -1 F -(flags) 347.33 712 T -2 F -( field, the action is used to change) 370.67 712 T --0.13 (the modifier state and the remaining valid bits of the) 108 699 P -1 F --0.13 (flags) 361.3 699 P -2 F --0.13 ( field are composed of a bitwise) 384.64 699 P -(inclusive OR using the masks shown in Table 16.11.) 108 686 T -(The) 108 295 T -1 F -(group_XXX) 129.66 295 T -2 F -( field represents a signed character. Xkb provides macros to convert) 186.32 295 T -(between a signed integer value and a signed character as shown in section Note.) 108 282 T -(The) 108 261 T -1 F -(mask) 129.66 261 T -2 F -(,) 154.32 261 T -1 F -(real_mods) 160.32 261 T -2 F -(,) 210.98 261 T -1 F -(vmods1) 216.98 261 T -2 F -(, and) 253.64 261 T -1 F -(vmods2) 279.97 261 T -2 F -( fields represent the components of an Xkb) 316.63 261 T -(modifier description \050see section 7.2\051. While the) 108 248 T -1 F -(mask) 342.96 248 T -2 F -( and) 367.62 248 T -1 F -(real_mods) 390.95 248 T -2 F -( fields correspond) 441.61 248 T --0.09 (directly to the) 108 235 P -1 F --0.09 (mask) 177.41 235 P -2 F --0.09 ( and) 202.07 235 P -1 F --0.09 (real_mods) 225.22 235 P -2 F --0.09 ( fields of an Xkb modifier description, the) 275.89 235 P -1 F --0.09 (vmods1) 480.18 235 P -2 F --0.09 ( and) 516.84 235 P -1 F -(vmods2) 108 222 T -2 F -( fields are combined to correspond to the) 144.66 222 T -1 F -(vmods) 343.96 222 T -2 F -( field of an Xkb modifier descrip-) 374.62 222 T --0.04 (tion. Xkb provides macros to convert between the two formats as shown in section 16.1.3.) 108 209 P -(The) 108 188 T -1 F -(affect) 129.66 188 T -2 F -( field is composed of a bitwise inclusive OR using the masks shown in Table) 156.32 188 T -(16.11.) 108 175 T -3 F -(T) 144.02 666 T -(able 16.11 ISO Action Flags when XkbSA_ISOD\337tIsGr) 150.92 666 T -(oup is Not Set) 436.73 666 T -1 F -(Fla) 109 646 T -(g) 125.55 646 T -(Meaning) 261 646 T -5 11 Q --0.33 (XkbSA_ISODfltIsGroup) 109 631.67 S -2 F -(If not set, action is used to change the base modi\336er state.) 261 631.67 T -(Must not be set for the remaining bits in this table to carry) 261 620.67 T -(their interpretations.) 261 609.67 T -(A k) 261 594.67 T -(e) 277.08 594.67 T -(y press sets the action modi\336ers in the k) 281.8 594.67 T -(e) 457.68 594.67 T -(yboard\325) 462.4 594.67 T -(s base) 496 594.67 T -(modi\336ers using) 261 583.67 T -2 12 Q -(the) 331.89 583.67 T -1 F -(mask) 349.56 583.67 T -2 F -(,) 374.22 583.67 T -1 F -(real_mods) 380.22 583.67 T -2 F -(,) 430.88 583.67 T -1 F -(vmods1) 436.88 583.67 T -2 F -(, and) 473.54 583.67 T -1 F -(vmods2) 261 572.67 T -2 F -(fields) 300.66 572.67 T -2 11 Q -( \050see section 16.1.3\051. If) 327.32 572.67 T -2 12 Q -(no other actions are) 431.19 572.67 T -(transformed by the) 261 561.67 T -5 11 Q --0.33 (XkbISO_Lock) 354.65 561.67 S -2 12 Q -( action, a key release) 423.62 561.67 T -(locks the action modifiers. Otherwise, a key release) 261 550.67 T -(clears the base modifiers set by the key press.) 261 539.67 T -5 11 Q --0.33 (XkbSA_UseModMapMods) 109 525.67 S -2 F -(If set, the action modi\336ers are determined by the modi\336ers) 261 525.67 T -(bound by the modi\336er mapping of the k) 261 514.67 T -(e) 435.97 514.67 T -(y) 440.68 514.67 T -(. Otherwise, the) 445.47 514.67 T -(action modi\336ers are set to the modi\336ers speci\336ed by the) 261 503.67 T -1 F -(mask) 261 492.67 T -2 F -(,) 283.61 492.67 T -1 F -(real_mods) 289.11 492.67 T -2 F -(,) 335.55 492.67 T -1 F -(vmod1) 341.05 492.67 T -2 F -(, and) 370.37 492.67 T -1 F -(vmod2) 394.51 492.67 T -2 F -( \336elds.) 423.83 492.67 T -5 F --0.33 (XkbSA_LockNoLock) 109 478.67 S -2 F -(If set, the serv) 261 478.67 T -(er only unlocks the action modi\336ers.) 323.15 478.67 T -5 F --0.33 (XkbSA_LockNoUnlock) 109 464.67 S -2 F -(If set, the serv) 261 464.67 T -(er only locks the action modi\336ers.) 323.15 464.67 T -5 F --0.33 (XkbSA_ISONoAffectMods) 109 450.67 S -2 F -(If not set, an) 261 450.67 T -(y) 315.82 450.67 T -5 F --0.33 (XkbSA_SetMods) 324.07 450.67 S -2 F -( or) 405.58 450.67 T -5 F --0.33 (XkbSA_LatchMods) 420.25 450.67 S -2 F --0.5 (actions that occur simultaneously with the) 261 439.67 P -5 F --1.13 -0.33 (XkbSA_ISOLock) 446.23 439.67 B -2 F -(action are treated as) 261 428.67 T -5 F --0.33 (XkbSA_LockMod) 351.41 428.67 S -2 F -( actions instead.) 432.92 428.67 T -5 F --0.33 (XkbSA_ISONoAffectGroup) 109 414.67 S -2 F -(If not set, an) 261 414.67 T -(y) 315.82 414.67 T -5 F --0.33 (XkbSA_SetGroup) 324.07 414.67 S -2 F -( or) 411.85 414.67 T -5 F --0.33 (XkbSA_LatchGroup) 426.52 414.67 S -2 F --0.5 (actions that occur simultaneously with the) 261 403.67 P -5 F --1.13 -0.33 (XkbSA_ISOLock) 446.23 403.67 B -2 F -(action are treated as) 261 392.67 T -5 F --0.33 (XkbSA_LockGroup) 351.41 392.67 S -2 F -( actions instead.) 445.46 392.67 T -5 F --0.33 (XkbSA_ISONoAffectPtr) 109 378.67 S -2 F -(If not set, an) 261 378.67 T -(y) 315.82 378.67 T -5 F --0.33 (XkbSA_PtrBtn) 324.07 378.67 S -2 F -( actions that occur simulta-) 399.31 378.67 T -(neously with the) 261 367.67 T -5 F --0.33 (XkbSA_ISOLock) 336.47 367.67 S -2 F -( action are treated as) 417.98 367.67 T -5 F --0.33 (XkbSA_LockPtrBtn) 261 356.67 S -2 F -( actions instead.) 361.32 356.67 T -5 F --0.33 (XkbSA_ISONoAffectCtrls) 109 342.67 S -2 F -(If not set, an) 261 342.67 T -(y) 315.82 342.67 T -5 F --0.33 (XkbSA_SetControls) 324.07 342.67 S -2 F -( actions that occur) 430.66 342.67 T --0.23 (simultaneously with the) 261 331.67 P -5 F --0.53 -0.33 (XkbSA_ISOLock) 368.17 331.67 B -2 F --0.23 ( action are treated) 449.68 331.67 P -(as) 261 320.67 T -5 F --0.33 (XkbSA_LockControls) 272.91 320.67 S -2 F -( actions instead.) 385.77 320.67 T -3 12 Q -(T) 214.98 155 T -(able 16.12 ISO Action Affect Field V) 221.88 155 T -(alues) 410.76 155 T -1 F -(Af) 109 135 T -(fect) 119.45 135 T -(Meaning) 261 135 T -5 11 Q --0.33 (XkbSA_ISODNoAffectMods) 109 120.67 S -2 F --0.58 (If) 261 120.67 P -5 F --1.31 -0.33 (XkbSA_ISONoAffectMods) 270.5 120.67 B -2 F --0.58 ( is not set, an) 402.17 120.67 P --0.58 (y) 457.45 120.67 P -5 F --1.31 -0.33 (SA_SetMods) 465.13 120.67 B -2 F -(or) 261 109.67 T -5 F --0.33 (SA_LatchMods) 272.91 109.67 S -2 F -( actions occurring simultaneously with) 348.15 109.67 T -(the) 261 98.67 T -5 F --0.33 (XkbISOAction) 277.19 98.67 S -2 F -( are treated as) 352.43 98.67 T -5 F --0.33 (SA_LockMods) 415.96 98.67 S -2 F -( instead.) 484.93 98.67 T -108 658 530 658 2 L -V -0.5 H -0 Z -N -108 641 530 641 2 L -V -N -108 147 530 147 2 L -V -N -108 130 530 130 2 L -V -N -FMENDPAGE -%%EndPage: "152" 164 -%%Page: "153" 165 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(153) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(16 Xkb Serv) 382.36 744.87 T -(er K) 443.3 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -0 12 Q -(16.1.9) 72 537 T -(Actions f) 108 537 T -(or Changing the Active Screen) 159.1 537 T -2 F --0.17 (Actions associated with the) 108 517 P -5 F --0.38 -0.6 (XkbSwitchScreen) 241.95 517 B -2 F --0.17 ( action structure change the active screen) 340.95 517 P -(on a multiscreen display:) 108 504 T -0 F -(Note) 126 483.67 T -2 11 Q -(This action is optional. Serv) 162 483.67 T -(ers are free to ignore the action or an) 285.58 483.67 T -(y of its \337ags if the) 447.31 483.67 T -(y) 526.89 483.67 T -(do not support the requested beha) 162 471.67 T -(vior) 309.95 471.67 T -(. If the action is ignored, it beha) 327.07 471.67 T -(v) 467.07 471.67 T -(es lik) 472.41 471.67 T -(e) 495.83 471.67 T -5 12 Q --0.6 (XkbSA_NoAction) 162 459.67 S -2 11 Q -(. Otherwise, k) 254.4 459.67 T -(e) 316 459.67 T -(y press and k) 320.72 459.67 T -(e) 378.35 459.67 T -(y release e) 383.07 459.67 T -(v) 429.21 459.67 T -(ents do not generate an) 434.55 459.67 T -(e) 162 447.67 T -(v) 166.61 447.67 T -(ent.) 171.94 447.67 T -(typedef struct _XkbSwitchScreenAction {) 126 427.67 T -(unsigned char) 144 414.67 T -(type;) 234 414.67 T -(/*) 306 414.67 T -5 F --0.33 (XkbSA_SwitchScreen) 317.31 414.67 S -2 F -( */) 430.17 414.67 T -(unsigned char) 144 401.67 T -(\337ags;) 234 401.67 T -(/* controls screen switching */) 306 401.67 T -(char) 144 388.67 T -(screenXXX;) 234 388.67 T -(/* screen number or delta */) 306 388.67 T -(}) 126 375.67 T -3 F -(XkbSwitchScr) 134.03 375.67 T -(eenAction) 201.67 375.67 T -2 F -(;) 248.72 375.67 T -2 12 Q -(The) 108 356 T -1 F -(type) 129.66 356 T -2 F -( field of the) 149.65 356 T -5 F --0.6 (XkbSwitchScreenAction) 208.31 356 S -2 F -( structure should always be) 346.91 356 T -5 F --0.6 (XkbSA_SwitchScreen) 108 343 S -2 F -(.) 226.8 343 T -(The) 108 322 T -1 F -(flags) 129.66 322 T -2 F -( field is composed of the bitwise inclusive OR of the masks shown in Table) 153 322 T -(16.13.) 108 309 T -(The) 108 160 T -1 F -(screenXXX) 129.66 160 T -2 F -( field is a signed character value that represents either the relative or abso-) 182.98 160 T --0.26 (lute screen index, depending on the state of the) 108 147 P -5 F --0.57 -0.6 (XkbSA_SwitchAbsolute) 334.29 147 B -2 F --0.26 ( bit in the) 466.29 147 P -1 F --0.26 (flags) 513.92 147 P -2 F -(field. Xkb provides the following macros to convert between the integer and signed char-) 108 134 T -(acter value for screen numbers in) 108 121 T -5 F --0.6 (XkbSwitchScreenAction) 270.61 121 S -2 F -( structures:) 409.21 121 T -2 11 Q -(int) 108 100.67 T -3 F -(XkbSAScr) 122.37 100.67 T -(een) 172.28 100.67 T -2 F -(\050) 188.17 100.67 T -1 F -(act) 191.83 100.67 T -2 F -(\051) 205.27 100.67 T -(/* macro */) 306 100.67 T -(XkbSwitchScreenAction) 126 87.67 T -1 F -(act) 252 87.67 T -2 F -(;) 265.44 87.67 T -(/* action from which to e) 306 87.67 T -(xtract screen */) 416.74 87.67 T -1 12 Q -(XkbSAScr) 108 68 T -(een) 155.54 68 T -2 F -( returns the) 172.2 68 T -1 F -(screenXXX) 229.19 68 T -2 F -( field of) 282.5 68 T -1 F -(act) 323.5 68 T -2 F -( converted to a signed int.) 338.16 68 T -5 11 Q --0.33 (XkbSA_ISONoAffectGroup) 109 677.67 S -2 F -(If) 261 677.67 T -5 F --0.33 (XkbSA_ISONoAffectGroup) 271.08 677.67 S -2 F -( is not set, an) 409.02 677.67 T -(y) 466.6 677.67 T -5 F --0.33 (SA_SetGroup) 261 666.67 S -2 F -( or) 329.97 666.67 T -5 F --0.33 (SA_LatchGroup) 344.63 666.67 S -2 F -( actions occurring) 426.14 666.67 T -(simultaneously with the) 261 655.67 T -5 F --0.33 (XkbISOAction) 368.87 655.67 S -2 F -( are treated as) 444.11 655.67 T -5 F --0.33 (SA_LockGroup) 261 644.67 S -2 F -( instead.) 336.24 644.67 T -5 F --0.33 (XkbSA_ISONoAffectPtr) 109 630.67 S -2 F -(If) 261 630.67 T -5 F --0.33 (XkbSA_ISONoAffectPtr) 271.08 630.67 S -2 F -( is not set, an) 396.48 630.67 T -(y) 454.06 630.67 T -5 F --0.33 (SA_PtrBtn) 462.31 630.67 S -2 F -(actions occurring simultaneously with the) 261 619.67 T -5 F --0.33 (XkbISOAction) 447.68 619.67 S -2 F -(are treated as) 261 608.67 T -5 F --0.33 (SA_LockPtrBtn) 321.77 608.67 S -2 F -( instead.) 403.29 608.67 T -5 F --0.33 (XkbSA_ISONoAffectCtrls) 109 594.67 S -2 F -(If) 261 594.67 T -5 F --0.33 (XkbSA_ISONoAffectCtrls) 271.08 594.67 S -2 F -( is not set, an) 409.02 594.67 T -(y) 466.6 594.67 T -5 F --0.33 (SA_SetControls) 261 583.67 S -2 F -( actions occurring simultaneously with) 348.78 583.67 T -(the) 261 572.67 T -5 F --0.33 (XkbISOAction) 277.19 572.67 S -2 F -( are treated as) 352.43 572.67 T -5 F --0.33 (SA_LockControls) 415.96 572.67 S -2 F -(instead.) 261 561.67 T -3 12 Q -(T) 218.04 289 T -(able 16.13 Switch Scr) 224.94 289 T -(een Action Flags) 337.05 289 T -1 F -(Fla) 109 269 T -(g) 125.55 269 T -(Meaning) 267 269 T -5 11 Q --0.33 (XkbSA_SwitchAbsolute) 109 254.67 S -2 F -(If set, the) 267 254.67 T -1 F -(screenXXX) 310.99 254.67 T -2 F -( \336eld represents the inde) 359.86 254.67 T -(x of the) 467.23 254.67 T -(ne) 267 243.67 T -(w screen. Otherwise, it represents an of) 277.11 243.67 T -(fset from the) 450.34 243.67 T -(current screen to the ne) 267 232.67 T -(w screen.) 369.36 232.67 T -5 F --0.33 (XkbSA_SwitchApplication) 109 218.67 S -2 F -(If not set, the action should switch to another screen on) 267 218.67 T --0.3 (the same serv) 267 207.67 P --0.3 (er) 326.1 207.67 P --0.3 (. Otherwise, it should switch to another X) 334.05 207.67 P -(serv) 267 196.67 T -(er or application that shares the same ph) 285.16 196.67 T -(ysical dis-) 461.98 196.67 T -(play) 267 185.67 T -(.) 285.23 185.67 T -3 12 Q -(T) 214.98 712 T -(able 16.12 ISO Action Affect Field V) 221.88 712 T -(alues) 410.76 712 T -1 F -(Af) 109 692 T -(fect) 119.45 692 T -(Meaning) 261 692 T -108 704 530 704 2 L -V -0.5 H -0 Z -N -108 687 530 687 2 L -V -N -108 281 518 281 2 L -V -N -108 264 518 264 2 L -V -N -FMENDPAGE -%%EndPage: "153" 165 -%%Page: "154" 166 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(154) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(16 Xkb Serv) 382.36 744.87 T -(er K) 443.3 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -(v) 108 712.67 T -(oid) 113.28 712.67 T -3 F -(XkbSASetScr) 130.09 712.67 T -(een) 194.67 712.67 T -2 F -(\050) 210.55 712.67 T -1 F -(act, s) 214.22 712.67 T -2 F -(\051) 237.44 712.67 T -(/* macro */) 306 712.67 T -(XkbSwitchScreenAction) 126 699.67 T -1 F -(act) 252 699.67 T -2 F -(;) 265.44 699.67 T -(/* action in which to set) 306 699.67 T -1 F -(screenXXX) 414.16 699.67 T -2 F -( */) 463.04 699.67 T -(int) 126 686.67 T -1 F -(s) 252 686.67 T -2 F -(;) 256.28 686.67 T -(/* v) 306 686.67 T -(alue to set in) 322.53 686.67 T -1 F -(screenXXX) 381.2 686.67 T -2 F -( */) 430.07 686.67 T -1 12 Q -(XkbSASetScr) 108 667 T -(een) 170.21 667 T -2 F -( sets the) 186.86 667 T -1 F -(screenXXX) 228.53 667 T -2 F -( field of) 281.84 667 T -1 F -(act) 322.84 667 T -2 F -( from) 337.5 667 T -1 F -(s) 366.83 667 T -2 F -(.) 371.5 667 T -0 F -(16.1.10) 72 642 T -(Actions f) 112.03 642 T -(or Changing Boolean Contr) 163.13 642 T -(ols State) 319.56 642 T -2 F -(Actions associated with the) 108 622 T -5 F --0.6 (XkbCtrlsAction) 242.65 622 S -2 F -( structure change the state of the boolean) 335.05 622 T -(controls \050see section 10.1\051:) 108 609 T -2 11 Q -(typedef struct _XkbCtrlsAction {) 126 588.67 T -(unsigned char) 144 575.67 T -(type;) 234 575.67 T -(/*) 279 575.67 T -5 F --0.33 (XkbSA_SetControls, XkbSA_LockControls) 290.31 575.67 S -2 F -( */) 522.3 575.67 T -(unsigned char) 144 562.67 T -(\337ags;) 234 562.67 T -(/* with) 279 562.67 T -1 F -(type) 312.62 562.67 T -2 F -(, controls enabling and disabling of controls */) 330.94 562.67 T -(unsigned char) 144 549.67 T -(ctrls3;) 234 549.67 T -(/*) 279 549.67 T -1 F -(ctrls0) 290.31 549.67 T -2 F -( through) 315.37 549.67 T -1 F -(ctrls3) 355.09 549.67 T -2 12 Q -(represent the boolean controls) 382.89 549.67 T -2 11 Q -( */) 527.2 549.67 T -(unsigned char) 144 536.67 T -(ctrls2;) 234 536.67 T -(/*) 279 536.67 T -1 F -(ctrls0) 290.31 536.67 T -2 F -( through) 315.37 536.67 T -1 F -(ctrls3) 355.09 536.67 T -2 12 Q -(represent the boolean controls) 382.89 536.67 T -2 11 Q -( */) 527.2 536.67 T -(unsigned char) 144 523.67 T -(ctrls1;) 234 523.67 T -(/*) 279 523.67 T -1 F -(ctrls0) 290.31 523.67 T -2 F -( through) 315.37 523.67 T -1 F -(ctrls3) 355.09 523.67 T -2 12 Q -(represent the boolean controls) 382.89 523.67 T -2 11 Q -( */) 527.2 523.67 T -(unsigned char) 144 510.67 T -(ctrls0;) 234 510.67 T -(/*) 279 510.67 T -1 F -(ctrls0) 290.31 510.67 T -2 F -( through) 315.37 510.67 T -1 F -(ctrls3) 355.09 510.67 T -2 12 Q -(represent the boolean controls) 382.89 510.67 T -2 11 Q -( */) 527.2 510.67 T -(}) 126 497.67 T -3 F -(XkbCtrlsAction) 134.03 497.67 T -2 F -(;) 209.19 497.67 T -2 12 Q -(The) 108 478 T -1 F -(type) 129.66 478 T -2 F -( field can have any one of the values shown in Table 16.14.) 149.65 478 T -(The) 108 255 T -1 F -(flags) 129.66 255 T -2 F -( field is composed of the bitwise inclusive OR of the masks shown in Table) 153 255 T -(16.15.) 108 242 T --0.01 (The) 108 126 P -5 F --0.03 -0.6 (XkbSA_SetControls) 129.65 126 B -2 F --0.01 ( action implements a key that enables a boolean control when) 241.85 126 P -(pressed and disables it when released. The) 108 113 T -5 F --0.6 (XkbSA_LockControls) 314.62 113 S -2 F -( action is used to) 433.42 113 T -(implement a key that toggles the state of a boolean control each time it is pressed and) 108 100 T -(released. The) 108 87 T -5 F --0.6 (XkbSA_LockNoLock) 174.97 87 S -2 F -( and) 280.57 87 T -5 F --0.6 (XkbSA_LockNoUnlock) 303.9 87 S -2 F -( flags allow modifying) 422.7 87 T -(the toggling behavior to only unlock or only lock the boolean control.) 108 74 T -3 F -(T) 237.64 458 T -(able 16.14 Contr) 244.54 458 T -(ols Action T) 332.32 458 T -(ypes) 393.44 458 T -1 F -(T) 109 438 T -(ype) 114.78 438 T -(Ef) 245 438 T -(fect) 255.45 438 T -5 11 Q --0.33 (XkbSA_SetControls) 109 423.67 S -2 F -(\245) 245 419.67 T -(A k) 254 419.67 T -(e) 270.08 419.67 T -(y press enables an) 274.8 419.67 T -(y boolean controls speci\336ed in the) 354.36 419.67 T -1 F -(ctrls) 507.74 419.67 T -2 F --0.16 (\336elds that were not already enabled at the time of the k) 254 408.67 P --0.16 (e) 493.83 408.67 P --0.16 (y press.) 498.55 408.67 P -(\245) 245 397.67 T -(A k) 254 397.67 T -(e) 270.08 397.67 T -(y release disables an) 274.8 397.67 T -(y controls enabled by the k) 364.75 397.67 T -(e) 483.48 397.67 T -(y press.) 488.2 397.67 T -(\245) 245 386.67 T -(This action can cause) 254 386.67 T -5 F --0.33 (XkbControlsNotify) 351.14 386.67 S -2 F -( e) 457.73 386.67 T -(v) 465.09 386.67 T -(ents \050see sec-) 470.42 386.67 T -(tion 10.1\051.) 254 375.67 T -5 F --0.33 (XkbSA_LockControls) 109 361.67 S -2 F -(\245) 245 357.67 T -(If the) 254 357.67 T -5 F --0.33 (XkbSA_LockNoLock) 280.27 357.67 S -2 F -( bit is not set in the) 380.59 357.67 T -1 F -(flags) 467.07 357.67 T -2 F -( \336eld, a) 488.46 357.67 T -(k) 254 346.67 T -(e) 259.39 346.67 T -(y press enables an) 264.11 346.67 T -(y controls speci\336ed in the) 343.67 346.67 T -1 F -(ctrls) 459.47 346.67 T -2 F -( \336elds that) 479.03 346.67 T -(were not already enabled at the time of the k) 254 335.67 T -(e) 449.7 335.67 T -(y press.) 454.42 335.67 T -(\245) 245 324.67 T --0.37 (If the) 254 324.67 P -5 F --0.85 -0.33 (XkbSA_LockNoUnlock) 279.53 324.67 B -2 F --0.37 ( bit is not set in the) 392.39 324.67 P -1 F --0.37 (flags) 476.27 324.67 P -2 F --0.37 ( \336eld, a) 497.67 324.67 P -(k) 254 313.67 T -(e) 259.39 313.67 T -(y release disables an) 264.11 313.67 T -(y controls speci\336ed in the) 354.06 313.67 T -1 F -(ctrls) 469.85 313.67 T -2 F -( \336elds) 489.41 313.67 T -(that were not already disabled at the time of the k) 254 302.67 T -(e) 471.4 302.67 T -(y press.) 476.12 302.67 T -(\245) 245 291.67 T -(This action can cause) 254 291.67 T -5 F --0.33 (XkbControlsNotify) 351.14 291.67 S -2 F -( e) 457.73 291.67 T -(v) 465.09 291.67 T -(ents \050see sec-) 470.42 291.67 T -(tion 10.1\051.) 254 280.67 T -3 12 Q -(T) 236.2 222 T -(able 16.15 Contr) 243.1 222 T -(ol Action Flags) 330.88 222 T -1 F -(Fla) 109 202 T -(g) 125.55 202 T -(Meaning) 253 202 T -5 11 Q --0.33 (XkbSA_LockNoLock) 109 187.67 S -2 F -(If set, and the action type is) 253 187.67 T -5 F --0.33 (XkbSA_LockControls) 377.04 187.67 S -2 F -(, the) 489.9 187.67 T -(serv) 253 176.67 T -(er only disables controls.) 271.16 176.67 T -5 F --0.33 (XkbSA_LockNoUnlock) 109 162.67 S -2 F -(If set, and the action type is) 253 162.67 T -5 F --0.33 (XkbSA_LockControls) 377.04 162.67 S -2 F -(, the) 489.9 162.67 T -(serv) 253 151.67 T -(er only enables controls.) 271.16 151.67 T -108 450 532 450 2 L -V -0.5 H -0 Z -N -108 433 532 433 2 L -V -N -108 214 522 214 2 L -V -N -108 197 522 197 2 L -V -N -FMENDPAGE -%%EndPage: "154" 166 -%%Page: "155" 167 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(155) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(16 Xkb Serv) 382.36 744.87 T -(er K) 443.3 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -2 12 Q -(The) 108 712 T -1 F -(ctrls0) 129.66 712 T -2 F -(,) 157 712 T -1 F -(ctrls1) 163 712 T -2 F -(,) 190.33 712 T -1 F -(ctrls2) 196.33 712 T -2 F -(, and) 223.67 712 T -1 F -(ctrls3) 250 712 T -2 F -( fields represent the boolean controls in the) 277.33 712 T -1 F -(enabled_ctrls) 108 699 T -2 F -( field of the controls structure \050) 173.33 699 T -2 11 Q -(see section 10.1) 322.63 699 T -2 12 Q -(\051. Xkb provides the following) 392.59 699 T -(macros, to convert between the two formats:) 108 686 T -2 11 Q -(unsigned int) 108 665.67 T -3 F -(XkbActionCtrls) 164.84 665.67 T -2 F -(\050) 240 665.67 T -1 F -(act) 243.66 665.67 T -2 F -(\051) 257.11 665.67 T -(/* macro */) 306 665.67 T -(XkbCtrlsAction) 126 652.67 T -1 F -(act) 234 652.67 T -2 F -(;) 247.44 652.67 T -(/* action from which to e) 306 652.67 T -(xtract controls */) 416.74 652.67 T -1 12 Q -(XkbActionCtrls) 108 633 T -2 F -( returns the) 182 633 T -1 F -(ctrls) 238.99 633 T -2 F -( fields of) 260.33 633 T -1 F -(act) 305.99 633 T -2 F -( converted to an unsigned int.) 320.65 633 T -2 11 Q -(v) 108 612.67 T -(oid) 113.28 612.67 T -3 F -(XkbSAActionSetCtrls) 130.09 612.67 T -2 F -(\050) 233.97 612.67 T -1 F -(act, ctrls) 237.63 612.67 T -2 F -(\051) 276.14 612.67 T -(/* macro */) 306 612.67 T -(XkbCtrlsAction) 126 599.67 T -1 F -(act) 252 599.67 T -2 F -(;) 265.44 599.67 T -(/* action in which to set ctrls0-ctrls3 */) 306 599.67 T -(unsigned int) 126 586.67 T -1 F -(ctrls) 252 586.67 T -2 F -(;) 271.56 586.67 T -(/* v) 306 586.67 T -(alue to set in ctrls0-ctrls3 */) 322.53 586.67 T -1 12 Q -(XkbSAActionSetCtrls) 108 567 T -2 F -( sets the) 210 567 T -1 11 Q -(ctrls0) 251.66 567 T -2 12 Q -( through) 276.72 567 T -1 F -(ctrls3) 320.05 567 T -2 F -( fields of) 347.39 567 T -1 F -(act) 393.05 567 T -2 F -( from) 407.71 567 T -1 F -(ctrls) 437.04 567 T -2 F -(.) 458.38 567 T -0 F -(16.1.11) 72 542 T -(Actions f) 112.03 542 T -(or Generating Messa) 163.13 542 T -(g) 281.71 542 T -(es) 289.16 542 T -2 F -(Actions associated with the) 108 522 T -5 F --0.6 (XkbMessageAction) 242.65 522 S -2 F -( structure generate) 348.25 522 T -5 F --0.6 (XkbActionMes-) 439.89 522 S --0.6 (sage) 108 509 S -2 F -( events:) 134.4 509 T -2 11 Q -(#de\336ne) 126 488.67 T -(XkbActionMessageLength) 179.25 488.67 T -(6) 306 488.67 T -(typedef struct _XkbMessageAction {) 126 468.67 T -(unsigned char) 144 455.67 T -(type;) 216 455.67 T -(/*) 279 455.67 T -5 F --0.33 (XkbSA_ActionMessage) 290.31 455.67 S -2 F -( */) 409.44 455.67 T -(unsigned char) 144 442.67 T -(\337ags;) 216 442.67 T -(/* controls e) 279 442.67 T -(v) 333.11 442.67 T -(ent generation via k) 338.44 442.67 T -(e) 425.4 442.67 T -(y presses and releases */) 430.12 442.67 T -(unsigned char) 144 429.67 T -(message[XkbActionMessageLength];) 216 429.67 T -(/* message */) 414 429.67 T -(}) 126 416.67 T -3 F -(XkbMessageAction) 134.03 416.67 T -2 F -(;) 225.08 416.67 T -2 12 Q -(The) 108 397 T -1 F -(type) 129.66 397 T -2 F -( field of the) 149.65 397 T -5 F --0.6 (XkbMessageAction) 208.31 397 S -2 F -( structure should always be) 313.91 397 T -5 F --0.6 (XkbSA_ActionMessage) 108 384 S -2 F -(.) 233.4 384 T -(The) 108 363 T -1 F -(flags) 129.66 363 T -2 F -( field is composed of the bitwise inclusive OR of the masks shown in Table) 153 363 T -(16.16.) 108 350 T -(The) 108 176 T -1 F -(message) 129.66 176 T -2 F -( field is an array of) 170.32 176 T -5 F --0.6 (XkbActionMessageLength) 264.29 176 S -2 F -( unsigned characters and) 409.49 176 T -(may be set to anything the keymap designer wishes.) 108 163 T -0 11 Q -(Detecting Key Action Messages) 108 140.67 T -2 12 Q -(To receive) 108 122 T -5 F --0.6 (XkbActionMessage) 161.98 122 S -2 F -( events by calling either) 267.58 122 T -1 F -(XkbSelectEvents) 385.23 122 T -2 F -( or) 464.53 122 T -1 F -(XkbSelect-) 480.53 122 T -(EventDetails) 108 109 T -2 F -( \050see section 4.3\051.) 169.99 109 T -(To receive) 108 88 T -5 F --0.6 (XkbActionMessage) 161.98 88 S -2 F -( events under all possible conditions, use) 267.58 88 T -1 F -(XkbSelect-) 466.9 88 T -(Events) 108 75 T -2 F -( and pass) 139.99 75 T -5 F --0.6 (XkbActionMessageMask) 186.98 75 S -2 F -( in both) 318.99 75 T -1 F -(bits_to_c) 358.66 75 T -(hang) 402.48 75 T -(e) 426.36 75 T -2 F -( and) 431.69 75 T -1 F -(values_for_bits) 455.02 75 T -2 F -(.) 529.02 75 T -3 F -(T) 235.93 330 T -(able 16.16 Message Action Flags) 242.83 330 T -1 F -(Fla) 109 310 T -(g) 125.55 310 T -(Meaning) 274 310 T -5 11 Q --0.33 (XkbSA_MessageOnPress) 109 295.67 S -2 F -(If set, k) 274 295.67 T -(e) 307.19 295.67 T -(y press e) 311.91 295.67 T -(v) 350.12 295.67 T -(ents generate an) 355.45 295.67 T -5 F --0.33 (XkbActionMes-) 429.07 295.67 S --0.33 (sage) 274 284.67 S -2 F -( e) 299.08 284.67 T -(v) 306.44 284.67 T -(ent that reports the k) 311.77 284.67 T -(e) 402.1 284.67 T -(ycode, e) 406.81 284.67 T -(v) 443.19 284.67 T -(ent type, and) 448.53 284.67 T -(contents of the) 274 273.67 T -1 F -(message) 341.52 273.67 T -2 F -( \336eld.) 378.79 273.67 T -5 F --0.33 (XkbSA_MessageOnRelease) 109 259.67 S -2 F -(If set, k) 274 259.67 T -(e) 307.19 259.67 T -(y release e) 311.91 259.67 T -(v) 358.05 259.67 T -(ents generate an) 363.39 259.67 T -5 F --0.33 (XkbActionMes-) 437 259.67 S --0.33 (sage) 274 248.67 S -2 F -( e) 299.08 248.67 T -(v) 306.44 248.67 T -(ent that reports the k) 311.77 248.67 T -(e) 402.1 248.67 T -(ycode, e) 406.81 248.67 T -(v) 443.19 248.67 T -(ent type, and) 448.53 248.67 T -(contents of the) 274 237.67 T -1 F -(message) 341.52 237.67 T -2 F -( \336eld.) 378.79 237.67 T -5 F --0.33 (XkbSA_MessageGenKeyEvent) 109 223.67 S -2 F -(If set, k) 274 223.67 T -(e) 307.19 223.67 T -(y press and k) 311.91 223.67 T -(e) 369.54 223.67 T -(y release e) 374.25 223.67 T -(v) 420.4 223.67 T -(ents generate) 425.73 223.67 T -5 F --0.33 (Key-) 486.21 223.67 S --0.33 (Press) 274 212.67 S -2 F -( and) 305.35 212.67 T -5 F --0.33 (KeyRelease) 326.73 212.67 S -2 F -( e) 389.43 212.67 T -(v) 396.79 212.67 T -(ents, re) 402.13 212.67 T -(g) 433.73 212.67 T -(ardless of whether) 439.18 212.67 T -(the) 274 201.67 T -(y generate) 287.28 201.67 T -5 F --0.33 (XkbActionMessage) 335.53 201.67 S -2 F -( e) 435.85 201.67 T -(v) 443.21 201.67 T -(ents.) 448.55 201.67 T -108 322 525 322 2 L -V -0.5 H -0 Z -N -108 305 525 305 2 L -V -N -FMENDPAGE -%%EndPage: "155" 167 -%%Page: "156" 168 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(156) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(16 Xkb Serv) 382.36 744.87 T -(er K) 443.3 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -2 12 Q -(The) 108 712 T -5 F --0.6 (XkbActionMessage) 129.66 712 S -2 F -( event has no event details. However, you can call) 235.26 712 T -1 F -(XkbSelect-) 478.54 712 T -(EventDetails) 108 699 T -2 F -( using) 169.99 699 T -5 F --0.6 (XkbActionMessage) 202 699 S -2 F -( as the) 307.6 699 T -1 F -(e) 341.26 699 T -(vent_type) 346.41 699 T -2 F -( and specifying) 392.39 699 T -5 F --0.6 (XkbAllAc-) 468.71 699 S --0.6 (tionMessageMask) 108 686 S -2 F -( in) 207 686 T -1 F -(bits_to_c) 222.34 686 T -(hang) 266.16 686 T -(e) 290.04 686 T -2 F -( and) 295.37 686 T -1 F -(values_for_bits.) 318.7 686 T -2 F -( This has the same effect as a) 395.7 686 T -(call to) 108 673 T -1 F -(XkbSelectEvents) 140.66 673 T -2 F -(.) 219.97 673 T -(The structure for the) 108 652 T -5 F --0.6 (XkbActionMessage) 209.3 652 S -2 F -( event is defined as follows:) 314.91 652 T -2 11 Q -(typedef struct _XkbActionMessage {) 126 631.67 T -(int) 144 618.67 T -(type;) 216 618.67 T -(/* Xkb e) 306 618.67 T -(xtension base e) 343.72 618.67 T -(v) 410.65 618.67 T -(ent code */) 415.99 618.67 T -(unsigned long) 144 605.67 T -(serial;) 216 605.67 T -(/* X serv) 306 605.67 T -(er serial number for e) 346.16 605.67 T -(v) 440.57 605.67 T -(ent */) 445.91 605.67 T -(Bool) 144 592.67 T -(send_e) 216 592.67 T -(v) 246.27 592.67 T -(ent;) 251.61 592.67 T -(/*) 306 592.67 T -5 12 Q --0.6 (True) 317.31 592.67 S -2 11 Q -( => synthetically generated */) 343.71 592.67 T -(Display *) 144 579.67 T -(display;) 216 579.67 T -(/* serv) 306 579.67 T -(er connection where e) 335.47 579.67 T -(v) 432.02 579.67 T -(ent generated */) 437.35 579.67 T -(T) 144 566.67 T -(ime) 150.34 566.67 T -(time;) 216 566.67 T -(/* serv) 306 566.67 T -(er time when e) 335.47 566.67 T -(v) 400.26 566.67 T -(ent generated */) 405.59 566.67 T -(int) 144 553.67 T -(xkb_type;) 216 553.67 T -(/*) 306 553.67 T -5 F --0.33 (XkbActionMessage) 317.31 553.67 S -2 F -( */) 417.63 553.67 T -(int) 144 540.67 T -(de) 216 540.67 T -(vice;) 226.11 540.67 T -(/* Xkb de) 306 540.67 T -(vice ID, will not be) 349.11 540.67 T -5 F --0.33 (XkbUseCoreKbd) 437.1 540.67 S -2 F -( */) 518.61 540.67 T -(K) 144 527.67 T -(e) 151.67 527.67 T -(yCode) 156.39 527.67 T -(k) 216 527.67 T -(e) 221.39 527.67 T -(ycode;) 226.11 527.67 T -(/* k) 306 527.67 T -(e) 322.7 527.67 T -(ycode of k) 327.42 527.67 T -(e) 373.74 527.67 T -(y triggering e) 378.46 527.67 T -(v) 437.45 527.67 T -(ent */) 442.79 527.67 T -(Bool) 144 514.67 T -(press;) 216 514.67 T -(/*) 306 514.67 T -5 12 Q --0.6 (True) 317.31 514.67 S -2 11 Q -( => k) 343.71 514.67 T -(e) 367.01 514.67 T -(y press,) 371.73 514.67 T -5 12 Q --0.6 (False) 408.08 514.67 S -2 11 Q -( => release */) 441.08 514.67 T -(Bool) 144 501.67 T -(k) 216 501.67 T -(e) 221.39 501.67 T -(y_e) 226.11 501.67 T -(v) 241.72 501.67 T -(ent_follo) 247.05 501.67 T -(ws;) 286.5 501.67 T -(/*) 306 501.67 T -5 12 Q --0.6 (True) 317.31 501.67 S -2 11 Q -( => K) 343.71 501.67 T -(e) 369.28 501.67 T -(yPress/K) 374 501.67 T -(e) 413.45 501.67 T -(yRelease follo) 418.17 501.67 T -(ws */) 481.13 501.67 T -(char) 144 488.67 T -(message[XkbActionMessageLength+1];) 216 488.67 T -(/* message te) 450 488.67 T -(xt */) 509.1 488.67 T -(}) 126 475.67 T -3 F -(XkbActionMessageEv) 134.03 475.67 T -(ent) 237.8 475.67 T -2 F -(;) 252.47 475.67 T -2 12 Q -(The) 108 456 T -1 F -(keycode) 129.66 456 T -2 F -( is the keycode of the key that was pressed or released. The) 168.3 456 T -1 F -(press) 455.56 456 T -2 F -( field speci-) 480.89 456 T -(fies whether the event was the result of a key press or key release.) 108 443 T --0.04 (The) 108 422 P -1 F --0.04 (key_event_follows) 129.62 422 P -2 F --0.04 ( specifies whether a) 217.6 422 P -5 F --0.09 -0.6 (KeyPress) 315.42 422 B -2 F --0.04 ( \050if) 368.22 422 P -1 F --0.04 (press) 385.47 422 P -2 F --0.04 ( is) 410.8 422 P -5 F --0.09 -0.6 (True) 424.72 422 B -2 F --0.04 (\051 or) 451.12 422 P -5 F --0.09 -0.6 (KeyRelease) 471.04 422 B -2 F -(\050if) 108 409 T -1 F -(press) 122.33 409 T -2 F -( is) 147.66 409 T -5 F --0.6 (False) 161.66 409 S -2 F -(\051 event is also sent to the client. As with all other Xkb events,) 194.66 409 T -5 F --0.6 (XkbAc-) 492.64 409 S --0.6 (tionMessageEvent) 108 396 S -2 F -(s are delivered to all clients requesting them, regardless of the cur-) 213.6 396 T -(rent keyboard focus. However, the) 108 383 T -5 F --0.6 (KeyPress) 276.95 383 S -2 F -( or) 329.75 383 T -5 F --0.6 (KeyRelease) 345.74 383 S -2 F -( event that conditionally) 411.75 383 T -(follows an) 108 370 T -5 F --0.6 (XkbActionMessageEvent) 161.33 370 S -2 F -( is sent only to the client selected by the current) 299.93 370 T -(keyboard focus.) 108 357 T -1 F -(key_event_follows) 187.64 357 T -2 F -( is) 275.63 357 T -5 F --0.6 (True) 289.63 357 S -2 F -( only for the client that is actually sent the fol-) 316.03 357 T -(lowing) 108 344 T -5 F --0.6 (KeyPress) 144.34 344 S -2 F -( or) 197.14 344 T -5 F --0.6 (KeyRelease) 213.13 344 S -2 F -( event.) 279.14 344 T -(The) 108 323 T -1 F -(message) 129.66 323 T -2 F -( field is set to the message specified in the action and is guaranteed to be) 170.32 323 T -5 F --0.6 (NULL) 108 310 S -2 F -(-terminated; the Xkb extension forces a) 134.4 310 T -5 F --0.6 (NULL) 327.02 310 S -2 F -( into) 353.42 310 T -1 F -(message) 378.1 310 T -2 F -([) 418.75 310 T -5 F --0.6 (XkbActionMessage-) 422.75 310 S --0.6 (Length) 108 297 S -2 F -(].) 147.6 297 T -0 F -(16.1.12) 72 272 T -(Actions f) 112.03 272 T -(or Generating a Diff) 163.13 272 T -(erent K) 275.03 272 T -(e) 316.19 272 T -(ycode) 322.68 272 T -2 F --0.27 (Actions associated with the) 108 252 P -5 F --0.59 -0.6 (XkbRedirectKeyAction) 241.58 252 B -2 F --0.27 ( structure generate) 373.58 252 P -5 F --0.59 -0.6 (KeyPress) 464.41 252 B -2 F --0.27 ( and) 517.21 252 P -5 F --0.6 (KeyRelease) 108 239 S -2 F -( events containing a keycode different from the key that was pressed or) 174 239 T -(released:) 108 226 T -2 11 Q -(typedef struct) 126 205.67 T -(_XkbRedirectK) 186.18 205.67 T -(e) 255.56 205.67 T -(yAction {) 260.28 205.67 T -(unsigned char) 144 192.67 T -(type;) 216 192.67 T -(/*) 279 192.67 T -5 F --0.33 (XkbSA_RedirectKey) 290.31 192.67 S -2 F -( */) 396.9 192.67 T -(unsigned char) 144 179.67 T -(ne) 216 179.67 T -(w_k) 226.11 179.67 T -(e) 244.94 179.67 T -(y;) 249.66 179.67 T -(/* k) 279 179.67 T -(e) 295.7 179.67 T -(ycode to be put in e) 300.42 179.67 T -(v) 386.6 179.67 T -(ent */) 391.94 179.67 T -(unsigned char) 144 166.67 T -(mods_mask;) 216 166.67 T -(/* mask of real mods to be reset */) 279 166.67 T -(unsigned char) 144 153.67 T -(mods;) 216 153.67 T -(/* mask of real mods to tak) 279 153.67 T -(e v) 398.66 153.67 T -(alues from */) 411.52 153.67 T -(unsigned char) 144 140.67 T -(vmods_mask0;) 216 140.67 T -(/* \336rst half of mask of virtual mods to be reset */) 282.62 140.67 T -(unsigned char) 144 127.67 T -(vmods_mask1;) 216 127.67 T -(/* other half of mask of virtual mods to be reset */) 282.62 127.67 T -(unsigned char) 144 114.67 T -(vmods0;) 216 114.67 T -(/* \336rst half of mask of virtual mods to tak) 279 114.67 T -(e v) 462.52 114.67 T -(alues from */) 475.38 114.67 T -(unsigned char) 144 101.67 T -(vmods1;) 216 101.67 T -(/* other half of mask of virtual mods to tak) 279 101.67 T -(e v) 468.01 101.67 T -(alues from */) 480.87 101.67 T -(}) 126 88.67 T -3 F -(XkbRedir) 134.03 88.67 T -(ectK) 180.89 88.67 T -(eyAction) 202.6 88.67 T -2 F -(;) 244.15 88.67 T -FMENDPAGE -%%EndPage: "156" 168 -%%Page: "157" 169 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(157) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(16 Xkb Serv) 382.36 744.87 T -(er K) 443.3 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -2 12 Q -(The) 108 712 T -1 F -(type) 129.66 712 T -2 F -( field for the) 149.65 712 T -5 F --0.6 (XkbRedirectKeyAction) 212.3 712 S -2 F -( structure should always be) 344.31 712 T -5 F --0.6 (XkbSA_RedirectKey) 108 699 S -2 F -(.) 220.2 699 T --0.29 (Key presses cause a) 108 678 P -5 F --0.64 -0.6 (KeyPress) 205.46 678 B -2 F --0.29 ( event for the key specified by the) 258.26 678 P -1 F --0.29 (new_key) 421.87 678 P -2 F --0.29 ( field instead of) 463.18 678 P -(the actual key. The state reported in this event reports the current effective modifiers) 108 665 T -(changed as follows: any real modifiers selected by the) 108 652 T -1 F -(mods_mask) 370.94 652 T -2 F -( field are set to corre-) 426.94 652 T -(sponding values from the) 108 639 T -1 F -(mods) 232.66 639 T -2 F -( field. Any real modifiers bound to the virtual modifiers) 257.99 639 T -(specified by the) 108 626 T -1 F -(vmods_mask0) 186.98 626 T -2 F -( and) 254.3 626 T -1 F -(vmods_mask1) 277.63 626 T -2 F -( fields are either set or cleared, depend-) 344.95 626 T -(ing on the corresponding values in the) 108 613 T -1 F -(vmods0) 294.31 613 T -2 F -( and) 330.97 613 T -1 F -(vmods1) 354.3 613 T -2 F -( fields. If the real and virtual) 390.96 613 T -(modifier definitions specify conflicting values for a single modifier, the real modifier def-) 108 600 T -(inition has priority.) 108 587 T -(Key releases cause a) 108 566 T -5 F --0.6 (KeyRelease) 209.95 566 S -2 F -( event for the key specified by the) 275.95 566 T -1 F -(new_key) 441.91 566 T -2 F -( field) 483.23 566 T -(instead of the actual key. The state for this event consists of the effective keyboard modi-) 108 553 T -(fiers at the time of the release, changed as described previously.) 108 540 T -(The) 108 519 T -5 F --0.6 (XkbSA_RedirectKey) 129.66 519 S -2 F -( action normally redirects to another key on the same device) 241.86 519 T -(as the key that caused the event, unless that device does not belong to the input extension) 108 506 T -5 F --0.6 (KeyClass) 108 493 S -2 F -(, in which case this action causes an event on the core keyboard device. \050The) 160.8 493 T -(input extension categorizes devices by breaking them into classes. Keyboards, and other) 108 480 T -(input devices with keys, are classified as) 108 467 T -5 F -(KeyClass) 305.96 467 T -2 F -( devices by the input extension.\051) 363.56 467 T -(The) 108 446 T -1 F -(vmods_mask0) 129.66 446 T -2 F -( and) 196.98 446 T -1 F -(vmods_mask1) 220.31 446 T -2 F -( fields actually represent one) 287.63 446 T -1 F -(vmods_mask) 428.59 446 T -2 F -( value, as) 489.91 446 T -(described in Chapter 7. Xkb provides the following macros, to convert between the two) 108 433 T -(formats:) 108 420 T -2 11 Q -(unsigned int) 108 399.67 T -3 F -(XkbSARedir) 164.84 399.67 T -(ectVModsMask) 225.76 399.67 T -2 F -(\050) 299.69 399.67 T -1 F -(act) 303.35 399.67 T -2 F -(\051) 316.79 399.67 T -(/* macro */) 342 399.67 T -(XkbRedirectK) 126 386.67 T -(e) 189.88 386.67 T -(yAction) 194.6 386.67 T -1 F -(act) 252 386.67 T -2 F -(;) 265.44 386.67 T -(/* action from which to e) 342 386.67 T -(xtract vmods */) 452.74 386.67 T -1 12 Q -(XkbSARedir) 108 367 T -(ectVModsMask) 166.21 367 T -2 F -( returns the) 240.19 367 T -1 F -(vmods_mask0) 297.18 367 T -2 F -( and) 364.5 367 T -1 F -(vmods_mask1) 387.83 367 T -2 F -( fields of) 455.15 367 T -1 F -(act) 500.81 367 T -2 F -( con-) 515.47 367 T -(verted to an unsigned int.) 108 354 T -2 11 Q -(v) 108 333.67 T -(oid) 113.28 333.67 T -3 F -(XkbSARedir) 130.09 333.67 T -(ectSetVModsMask) 191.01 333.67 T -2 F -(\050) 279.6 333.67 T -1 F -(act, vm) 283.26 333.67 T -2 F -(\051) 315.03 333.67 T -(/* macro */) 342 333.67 T -(XkbRedirectK) 126 320.67 T -(e) 189.88 320.67 T -(yAction) 194.6 320.67 T -1 F -(act) 252 320.67 T -2 F -(;) 265.44 320.67 T -(/* action in which to set vmods */) 342 320.67 T -(unsigned int) 126 307.67 T -1 F -(vm) 252 307.67 T -2 F -(;) 264.83 307.67 T -(/* ne) 342 307.67 T -(w v) 363.42 307.67 T -(alue for virtual modi\336er mask */) 379.33 307.67 T -1 12 Q --0.41 (XkbSARedir) 108 288 P --0.41 (ectSetVModsMask) 166.21 288 P -2 F --0.41 ( sets the) 254.86 288 P -1 F --0.41 (vmods_mask0) 295.28 288 P -2 F --0.41 ( and) 362.6 288 P -1 F --0.41 (vmods_mask1) 385.1 288 P -2 F --0.41 ( fields of) 452.42 288 P -1 F --0.41 (act) 496.84 288 P -2 F --0.41 ( from) 511.5 288 P -1 F -(vm) 108 275 T -2 F -(.) 121.99 275 T --0.12 (Similarly, the) 108 254 P -1 F --0.12 (vmods0) 176.1 254 P -2 F --0.12 ( and) 212.76 254 P -1 F --0.12 (vmods1) 235.84 254 P -2 F --0.12 ( fields actually represent one) 272.5 254 P -1 F --0.12 (vmods) 412.86 254 P -2 F --0.12 (value, as described) 446.39 254 P -(in Chapter 7. To convert between the two formats, Xkb provides the following conve-) 108 241 T -(nience macros:) 108 228 T -2 11 Q -(unsigned int) 108 207.67 T -3 F -(XkbSARedir) 164.84 207.67 T -(ectVMods) 225.76 207.67 T -2 F -(\050) 273.41 207.67 T -1 F -(act) 277.07 207.67 T -2 F -(\051) 290.51 207.67 T -(/* macro */) 342 207.67 T -(XkbRedirectK) 126 194.67 T -(e) 189.88 194.67 T -(yAction) 194.6 194.67 T -1 F -(act) 252 194.67 T -2 F -(;) 265.44 194.67 T -(/* action from which to e) 342 194.67 T -(xtract vmods */) 452.74 194.67 T -1 12 Q -(XkbSARedir) 126 175 T -(ectVModsMask) 184.21 175 T -2 F -( returns the) 258.19 175 T -1 F -(vmods0) 315.18 175 T -2 F -( and) 351.84 175 T -1 F -(vmods1) 375.17 175 T -2 F -( fields of) 411.83 175 T -1 F -(act) 457.49 175 T -2 F -( converted to) 472.15 175 T -(an unsigned int.) 126 162 T -2 11 Q -(v) 108 141.67 T -(oid) 113.28 141.67 T -3 F -(XkbSARedir) 130.09 141.67 T -(ectSetVMods) 191.01 141.67 T -2 F -(\050) 253.32 141.67 T -1 F -(act, vm) 256.98 141.67 T -2 F -(\051) 288.75 141.67 T -(/* macro */) 342 141.67 T -(XkbRedirectK) 126 128.67 T -(e) 189.88 128.67 T -(yAction) 194.6 128.67 T -1 F -(act) 252 128.67 T -2 F -(;) 265.44 128.67 T -(/* action in which to set vmods */) 342 128.67 T -(unsigned int) 126 115.67 T -1 F -(v) 252 115.67 T -2 F -(;) 256.88 115.67 T -(/* ne) 342 115.67 T -(w v) 363.42 115.67 T -(alue for virtual modi\336ers */) 379.33 115.67 T -1 12 Q -(XkbSARedir) 126 96 T -(ectSetVModsMask) 184.21 96 T -2 F -( sets the) 272.86 96 T -1 F -(vmods0) 314.52 96 T -2 F -( and) 351.18 96 T -1 F -(vmods1) 374.51 96 T -2 F -( of) 411.17 96 T -1 F -(act) 427.16 96 T -2 F -( from) 441.83 96 T -1 F -(v) 471.16 96 T -2 F -(.) 476.48 96 T -FMENDPAGE -%%EndPage: "157" 169 -%%Page: "158" 170 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(158) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(16 Xkb Serv) 382.36 744.87 T -(er K) 443.3 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -0 12 Q -(16.1.13) 72 712 T -(Actions f) 112.03 712 T -(or Generating De) 163.13 712 T -(viceButtonPress and De) 260.3 712 T -(viceButtonRelease) 398.16 712 T -2 F -(Actions associated with) 108 692 T -5 F --0.6 (XkbDeviceBtnAction) 224.99 692 S -2 F -( structures generate) 343.79 692 T -5 F --0.6 (DeviceButton-) 440.09 692 S --0.6 (Press) 108 679 S -2 F -( and) 141 679 T -5 F --0.6 (DeviceButtonRelease) 164.33 679 S -2 F -( events instead of normal) 289.73 679 T -5 F --0.6 (KeyPress) 413.38 679 S -2 F -( and) 466.18 679 T -5 F --0.6 (KeyRe-) 489.51 679 S --0.6 (lease) 108 666 S -2 F -( events:) 141 666 T -2 11 Q -(typedef struct _XkbDe) 126 645.67 T -(viceBtnAction {) 225.92 645.67 T -(unsigned char) 144 632.67 T -(type;) 216 632.67 T -(/*) 261 632.67 T -5 F --0.33 (XkbSA_DeviceBtn, XkbSA_LockDeviceBtn) 272.31 632.67 S -2 F -( */) 498.03 632.67 T -(unsigned char) 144 619.67 T -(\337ags;) 216 619.67 T -(/* with) 261 619.67 T -1 F -(type) 294.62 619.67 T -2 F -(, speci\336es locking or unlocking */) 312.94 619.67 T -(unsigned char) 144 606.67 T -(count;) 216 606.67 T --0.02 (/* controls number of De) 261 606.67 P --0.02 (viceButtonPress and Release e) 371.25 606.67 P --0.02 (v) 505.65 606.67 P --0.02 (ents */) 510.99 606.67 P -(unsigned char) 144 593.67 T -(b) 216 593.67 T -(utton;) 221.28 593.67 T -(/* inde) 261 593.67 T -(x of b) 291.08 593.67 T -(utton on) 316.53 593.67 T -1 F -(device) 355.64 593.67 T -2 F -( */) 383.74 593.67 T -(unsigned char) 144 580.67 T -(de) 216 580.67 T -(vice;) 226.11 580.67 T -(/* de) 261 580.67 T -(vice ID of an X input e) 282.42 580.67 T -(xtension de) 383.67 580.67 T -(vice */) 433.81 580.67 T -(}) 126 567.67 T -3 F -(XkbDe) 134.03 567.67 T -(viceBtnAction) 166.87 567.67 T -2 F -(;) 233.47 567.67 T -2 12 Q -(The) 108 548 T -1 F -(type) 129.66 548 T -2 F -( field can have any one of the values shown in Table 16.17.) 149.65 548 T -(The) 108 149 T -1 F -(flags) 129.66 149 T -2 F -( field is composed of the bitwise inclusive OR of the masks shown in Table) 153 149 T -(16.18.) 108 136 T -3 F -(T) 227.3 528 T -(able 16.17 De) 234.2 528 T -(vice Button Action T) 305.34 528 T -(ypes) 410.79 528 T -1 F -(T) 109 508 T -(ype) 114.78 508 T -(Ef) 252 508 T -(fect) 262.45 508 T -5 11 Q --0.33 (XkbSA_DeviceBtn) 109 493.67 S -2 F -(\245) 252 489.67 T -(If the b) 261 489.67 T -(utton speci\336ed by this action is logically do) 292.55 489.67 T -(wn, the k) 483.86 489.67 T -(e) 524.38 489.67 T -(y) 529.1 489.67 T --0.33 (press and corresponding release are ignored and ha) 261 478.67 P --0.33 (v) 483 478.67 P --0.33 (e no ef) 488.34 478.67 P --0.33 (fect.) 517.34 478.67 P -(If the de) 261 467.67 T -(vice or b) 297.38 467.67 T -(utton speci\336ed by this action are ille) 335.65 467.67 T -(g) 494.97 467.67 T -(al, this) 500.42 467.67 T -(action beha) 261 456.67 T -(v) 311.18 456.67 T -(es lik) 316.52 456.67 T -(e) 339.94 456.67 T -5 F --0.33 (XkbSA_NoAction) 347.57 456.67 S -2 F -(.) 435.35 456.67 T -(\245) 252 445.67 T -(Otherwise, k) 261 445.67 T -(e) 317.1 445.67 T -(y presses cause one or more input e) 321.82 445.67 T -(xtension) 477.76 445.67 T -(de) 261 434.67 T -(vice e) 271.11 434.67 T -(v) 296.79 434.67 T -(ents instead of the usual k) 302.13 434.67 T -(e) 415.98 434.67 T -(y press e) 420.7 434.67 T -(v) 458.91 434.67 T -(ent. If the) 464.25 434.67 T -1 F -(count) 509.46 434.67 T -2 F -(\336eld is zero, a k) 261 423.67 T -(e) 330.85 423.67 T -(y press generates a single) 335.57 423.67 T -5 F --0.33 (DeviceButton-) 450.12 423.67 S --0.33 (Press) 261 412.67 S -2 F -( e) 292.35 412.67 T -(v) 299.71 412.67 T -(ent. If count is greater than zero, a k) 305.04 412.67 T -(e) 463.77 412.67 T -(y press e) 468.49 412.67 T -(v) 506.71 412.67 T -(ent) 512.04 412.67 T --0.23 (generates) 261 401.67 P -1 F --0.23 (count) 305.05 401.67 P -2 F --0.23 ( pairs of) 329.5 401.67 P -5 F --0.53 -0.33 (DeviceButtonPress) 367.6 401.67 B -2 F --0.23 ( and) 474.19 401.67 P -5 F --0.53 -0.33 (Device-) 495.11 401.67 B --0.33 (ButtonRelease) 261 390.67 S -2 F -( e) 342.51 390.67 T -(v) 349.87 390.67 T -(ents.) 355.2 390.67 T -(\245) 252 379.67 T -(If) 261 379.67 T -1 F -(count) 271.08 379.67 T -2 F -( is zero, a k) 295.52 379.67 T -(e) 345.81 379.67 T -(y release generates an input e) 350.53 379.67 T -(xtension) 479.57 379.67 T -5 F --0.33 (DeviceButtonRelease) 261 368.67 S -2 F -( e) 380.13 368.67 T -(v) 387.49 368.67 T -(ent that matches the e) 392.82 368.67 T -(v) 487.86 368.67 T -(ent gener-) 493.2 368.67 T -(ated by the corresponding k) 261 357.67 T -(e) 383.09 357.67 T -(y press. If) 387.81 357.67 T -1 F -(count) 434.24 357.67 T -2 F -( is nonzero, a k) 458.68 357.67 T -(e) 525.47 357.67 T -(y) 530.19 357.67 T --0.15 (release does not cause a) 261 346.67 P -5 F --0.35 -0.33 (DeviceButtonRelease) 368.06 346.67 B -2 F --0.15 ( e) 487.19 346.67 P --0.15 (v) 494.39 346.67 P --0.15 (ent. K) 499.73 346.67 P --0.15 (e) 526.18 346.67 P --0.15 (y) 530.9 346.67 P -(releases ne) 261 335.67 T -(v) 308.67 335.67 T -(er cause) 314.01 335.67 T -5 F --0.33 (KeyRelease) 352.49 335.67 S -2 F -( e) 415.19 335.67 T -(v) 422.55 335.67 T -(ents.) 427.88 335.67 T -5 F --0.33 (XkbSA_LockDeviceBtn) 109 321.67 S -2 F -(\245) 252 317.67 T -(If the de) 261 317.67 T -(vice or b) 297.38 317.67 T -(utton speci\336ed by this action are ille) 335.65 317.67 T -(g) 494.97 317.67 T -(al, this) 500.42 317.67 T -(action beha) 261 306.67 T -(v) 311.18 306.67 T -(es lik) 316.52 306.67 T -(e) 339.94 306.67 T -5 F --0.33 (XkbSA_NoAction) 347.57 306.67 S -2 F -(.) 435.35 306.67 T -(\245) 252 295.67 T -(Otherwise, if the speci\336ed b) 261 295.67 T -(utton is not lock) 384.51 295.67 T -(ed and the) 455.6 295.67 T -5 F --0.33 (XkbSA_LockNoLock) 261 284.67 S -2 F -( bit is not set in the) 361.32 284.67 T -1 F -(flags) 447.8 284.67 T -2 F -( \336eld, a k) 469.2 284.67 T -(e) 510.03 284.67 T -(y) 514.75 284.67 T -(press generates an input e) 261 273.67 T -(xtension) 373.86 273.67 T -5 F --0.33 (DeviceButtonPress) 413.89 273.67 S -2 F --0.09 (e) 261 262.67 P --0.09 (v) 265.61 262.67 P --0.09 (ent instead of a) 270.94 262.67 P -5 F --0.21 -0.33 (KeyPress) 340.23 262.67 B -2 F --0.09 ( e) 390.39 262.67 P --0.09 (v) 397.65 262.67 P --0.09 (ent and locks the b) 402.99 262.67 P --0.09 (utton. If the) 484.89 262.67 P --0.46 (b) 261 251.67 P --0.46 (utton is already lock) 266.28 251.67 P --0.46 (ed or if) 354.32 251.67 P -5 F --1.04 -0.33 (XkbSA_LockNoLock) 387.47 251.67 B -2 F --0.46 ( bit is set in) 487.79 251.67 P -(the) 261 240.67 T -1 F -(flags) 277.19 240.67 T -2 F -( \336eld, the k) 298.59 240.67 T -(e) 347.98 240.67 T -(y press is ignored and has no ef) 352.7 240.67 T -(fect.) 490.81 240.67 T -(\245) 252 229.67 T -(If the corresponding k) 261 229.67 T -(e) 358.34 229.67 T -(y press w) 363.06 229.67 T -(as ignored, and if the) 404.49 229.67 T -5 F --0.33 (XkbSA_LockNoUnlock) 261 218.67 S -2 F -( bit is not set in the) 373.86 218.67 T -1 F -(flags) 460.34 218.67 T -2 F -( \336eld, a k) 481.74 218.67 T -(e) 522.57 218.67 T -(y) 527.29 218.67 T -(release generates an input e) 261 207.67 T -(xtension) 381.79 207.67 T -5 F --0.33 (DeviceButtonRe-) 421.82 207.67 S --0.33 (lease) 261 196.67 S -2 F -( e) 292.35 196.67 T -(v) 299.71 196.67 T -(ent instead of a) 305.04 196.67 T -5 F --0.33 (KeyRelease) 374.7 196.67 S -2 F -( e) 437.4 196.67 T -(v) 444.76 196.67 T -(ent and unlocks the) 450.09 196.67 T -(b) 261 185.67 T -(utton. If the corresponding k) 266.28 185.67 T -(e) 391.73 185.67 T -(y press lock) 396.45 185.67 T -(ed a b) 448.89 185.67 T -(utton, the k) 474.94 185.67 T -(e) 524.64 185.67 T -(y) 529.36 185.67 T -(release is ignored and has no ef) 261 174.67 T -(fect.) 398.8 174.67 T -3 12 Q -(T) 220.02 116 T -(able 16.18 De) 226.92 116 T -(vice Button Action Flags) 298.07 116 T -1 F -(Fla) 109 96 T -(g) 125.55 96 T -(Meaning) 253 96 T -5 11 Q --0.33 (XkbSA_LockNoLock) 109 81.67 S -2 F -(If set, and the action type is) 253 81.67 T -5 F --0.33 (XkbSA_LockDeviceBtn) 377.04 81.67 S -2 F -(, the) 496.17 81.67 T -(serv) 253 70.67 T -(er only unlocks the b) 271.16 70.67 T -(utton.) 363.21 70.67 T -108 520 539 520 2 L -V -0.5 H -0 Z -N -108 503 539 503 2 L -V -N -108 108 522 108 2 L -V -N -108 91 522 91 2 L -V -N -FMENDPAGE -%%EndPage: "158" 170 -%%Page: "159" 171 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(159) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(16 Xkb Serv) 382.36 744.87 T -(er K) 443.3 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -0 12 Q -(16.1.14) 72 642 T -(Actions f) 112.03 642 T -(or Sim) 163.13 642 T -(ulating Events fr) 200.23 642 T -(om De) 294.01 642 T -(vice V) 330.5 642 T -(aluator) 364.48 642 T -(s) 404.3 642 T -2 F -(A) 108 622 T -1 F -(valuator) 119.66 622 T -2 F -( manipulates a range of values for some entity, like a mouse axis, a slider or a) 160.33 622 T -(dial. Actions associated with) 108 609 T -5 F --0.6 (XkbDeviceValuatorAction) 248.99 609 S -2 F -( structures are used to simu-) 400.79 609 T -(late events from one or two input extension device valuators.) 108 596 T -2 11 Q -(typedef struct _XkbDe) 126 575.67 T -(viceV) 225.92 575.67 T -(aluatorAction {) 250.97 575.67 T -(unsigned char) 144 562.67 T -(type;) 225 562.67 T -(/*) 279 562.67 T -5 F --0.33 (XkbSA_DeviceValuator) 287.56 562.67 S -2 F -( */) 412.96 562.67 T -(unsigned char) 144 549.67 T -(de) 225 549.67 T -(vice;) 235.11 549.67 T -(/* de) 279 549.67 T -(vice ID */) 300.42 549.67 T -(unsigned char) 144 536.67 T -(v1_what;) 225 536.67 T -(/* determines ho) 279 536.67 T -(w v) 352.05 536.67 T -(aluator is to beha) 367.97 536.67 T -(v) 443.21 536.67 T -(e for v) 448.54 536.67 T -(aluator 1 */) 476.98 536.67 T -(unsigned char) 144 523.67 T -(v1_ndx;) 225 523.67 T -(/* speci\336es a real v) 279 523.67 T -(aluator */) 363.04 523.67 T -(unsigned char) 144 510.67 T -(v1_v) 225 510.67 T -(alue;) 246.73 510.67 T -(/* the v) 279 510.67 T -(alue for v) 311.73 510.67 T -(aluator 1 */) 353.6 510.67 T -(unsigned char) 144 497.67 T -(v2_what;) 225 497.67 T -(/* determines ho) 279 497.67 T -(w v) 352.05 497.67 T -(aluator is to beha) 367.97 497.67 T -(v) 443.21 497.67 T -(e for v) 448.54 497.67 T -(aluator 2 */) 476.98 497.67 T -(unsigned char) 144 484.67 T -(v2_ndx;) 225 484.67 T -(/* speci\336es a real v) 279 484.67 T -(aluator */) 363.04 484.67 T -(unsigned char) 144 471.67 T -(v2_v) 225 471.67 T -(alue;) 246.73 471.67 T -(/* the v) 279 471.67 T -(alue for v) 311.73 471.67 T -(aluator 1 */) 353.6 471.67 T -(}) 126 458.67 T -3 F -(XkbDe) 134.03 458.67 T -(viceV) 166.87 458.67 T -(aluatorAction) 192.12 458.67 T -2 F -(;) 257.51 458.67 T -2 12 Q -(If) 108 439 T -1 F -(device) 118.99 439 T -2 F -( is illegal or if neither) 149.64 439 T -1 F -(v1_ndx) 256.3 439 T -2 F -( nor) 290.95 439 T -1 F -(v2_ndx) 312.95 439 T -2 F -( specifies a legal valuator, this action) 347.6 439 T -(behaves like) 108 426 T -5 F --0.6 (XkbSA_NoAction) 170.65 426 S -2 F -(.) 263.05 426 T -2 11 Q -(The lo) 108 405 T -(w four bits of) 136.14 405 T -1 F -(v1_what) 198.46 405 T -2 F -( and) 235.74 405 T -1 F -(v2_what) 257.13 405 T -2 F -( specify the corresponding scale v) 294.41 405 T -(alue \050denoted) 443.51 405 T -5 12 Q --0.6 (valScale) 108 392 S -2 11 Q -( in) 180.6 392 T -2 12 Q -(Table 16.17) 194.66 392 T -2 11 Q -(\051, if needed. The high four bits of) 251.98 392 T -1 F -(v1_what) 401.07 392 T -2 F -( and) 438.35 392 T -1 F -(v2_what) 459.73 392 T -2 F -( specify) 497.01 392 T -(the operation to perform to set the v) 108 379 T -(alues.) 265.67 379 T -2 12 Q -( The high four bits of) 291.03 379 T -1 F -(v1_what) 396.35 379 T -2 F -( and) 437.02 379 T -1 F -(v2_what) 460.35 379 T -2 F -( can) 501.02 379 T -(have the values shown in Table 16.17; the use of) 108 366 T -5 F --0.6 (valScale) 344.96 366 S -2 F -( is shown in that table) 417.57 366 T -(also.) 108 353 T -2 11 Q --0.25 (Ille) 108 203.67 P --0.25 (g) 122.5 203.67 P --0.25 (al v) 127.94 203.67 P --0.25 (alues for) 143.61 203.67 P -5 12 Q --0.61 -0.6 (XkbSA_SetValRelative) 184.03 203.67 B -2 11 Q --0.25 ( or) 316.04 203.67 P -5 12 Q --0.61 -0.6 (XkbSA_SetValAbsolute) 330.19 203.67 B -2 11 Q --0.25 ( are clamped into) 462.2 203.67 P -(range. Note that all of these possibilities are le) 108 191.67 T -(g) 311.61 191.67 T -(al for absolute v) 317.05 191.67 T -(aluators. F) 387.96 191.67 T -(or relati) 434.24 191.67 T -(v) 468.48 191.67 T -(e v) 473.82 191.67 T -(aluators,) 486.67 191.67 T --0.28 (only) 108 179.67 P -5 12 Q --0.68 -0.6 (XkbSA_SetValRelative) 130.02 179.67 B -2 11 Q --0.28 ( is permitted. P) 262.03 179.67 P --0.28 (art of the input e) 327.62 179.67 P --0.28 (xtension description of a de) 399.03 179.67 P --0.28 (vice) 519.21 179.67 P -(is the range of le) 108 167.67 T -(g) 181.15 167.67 T -(al v) 186.6 167.67 T -(alues for all absolute v) 202.51 167.67 T -(aluators, whence the maximum and minimum le) 301.83 167.67 T -(g) 514.01 167.67 T -(al) 519.46 167.67 T -(v) 108 155.67 T -(alues sho) 113.22 155.67 T -(wn in) 153.58 155.67 T -2 12 Q -(Table 16.17) 181.08 155.67 T -2 11 Q -(.) 238.41 155.67 T -2 12 Q -(The following two masks are provided as a convenience to select either portion of) 108 135 T -1 F -(v1_what) 108 122 T -2 F -( or) 148.67 122 T -1 F -(v2_what) 164.66 122 T -2 F -(:) 205.33 122 T -2 11 Q -(#de\336ne XkbSA_V) 126 96.67 T -(alOpMask) 206.35 96.67 T -(\0500x70\051) 306 96.67 T -(#de\336ne XkbSA_V) 126 83.67 T -(alScaleMask) 206.35 83.67 T -(\0500x07\051) 306 83.67 T -5 F --0.33 (XkbSA_LockNoUnlock) 109 677.67 S -2 F -(If set, and the action type is) 253 677.67 T -5 F --0.33 (XkbSA_LockDeviceBtn) 377.04 677.67 S -2 F -(, the) 496.17 677.67 T -(serv) 253 666.67 T -(er only locks the b) 271.16 666.67 T -(utton.) 352.21 666.67 T -3 12 Q -(T) 183.11 333 T -(able 16.19 De) 190.01 333 T -(vice V) 261.16 333 T -(aluator v_what High Bits V) 291.71 333 T -(alues) 451.64 333 T -1 F -(V) 109 313 T -(alue of high bits) 115 313 T -(Ef) 252 313 T -(fect) 262.45 313 T -5 11 Q --0.33 (XkbSA_IgnoreVal) 109 298.67 S -2 F -(No action) 252 298.67 T -5 F --0.33 (XkbSA_SetValMin) 109 284.67 S -1 F -(v_value) 252 284.67 T -2 F -( is set to its minimum le) 306.56 284.67 T -(g) 412.14 284.67 T -(al v) 417.58 284.67 T -(alue.) 433.5 284.67 T -5 F --0.33 (XkbSA_SetValCenter) 109 270.67 S -1 F -(v_value) 252 270.67 T -2 F -( is centered \050to \050max-min\051/2\051.) 306.56 270.67 T -5 F --0.33 (XkbSA_SetValMax) 109 256.67 S -1 F -(v_value) 252 256.67 T -2 F -( is set to its maximum le) 306.56 256.67 T -(g) 413.96 256.67 T -(al v) 419.41 256.67 T -(alue.) 435.33 256.67 T -5 F --0.33 (XkbSA_SetValRelative) 109 242.67 S -1 F -(v_value) 252 242.67 T -2 F -( * \0502) 306.56 242.67 T -2 9.6 Q -(v) 326.72 247.47 T -(alScale) 331.28 247.47 T -2 11 Q -(\051 is added to) 374.64 242.67 T -1 F -(v_value) 431.46 242.67 T -2 F -(.) 486.02 242.67 T -5 F --0.33 (XkbSA_SetValAbsolute) 109 228.67 S -1 F -(v_value) 252 228.67 T -2 F -( is set to \0502) 306.56 228.67 T -2 9.6 Q -(v) 354.84 233.47 T -(alScale) 359.4 233.47 T -2 11 Q -(\051.) 402.75 228.67 T -3 12 Q -(T) 220.02 712 T -(able 16.18 De) 226.92 712 T -(vice Button Action Flags) 298.07 712 T -1 F -(Fla) 109 692 T -(g) 125.55 692 T -(Meaning) 253 692 T -108 704 522 704 2 L -V -0.5 H -0 Z -N -108 687 522 687 2 L -V -N -108 325 539 325 2 L -V -N -108 308 539 308 2 L -V -N -FMENDPAGE -%%EndPage: "159" 171 -%%Page: "160" 172 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(160) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(16 Xkb Serv) 382.36 744.87 T -(er K) 443.3 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -1 12 Q -(v1_ndx) 108 712 T -2 F -( and) 142.66 712 T -1 F -(v2_ndx) 165.98 712 T -2 F -( specify valuators that actually exists. For example, most mice have) 200.64 712 T -(two valuators \050x and y axes\051 so the only legal values for a mouse would be 0 and 1. For a) 108 699 T -(dial box with eight dials, any value in the range 0..7 would be correct.) 108 686 T -0 F -(16.1.15) 72 661 T -(Obtaining K) 112.03 661 T -(e) 179.86 661 T -(y Actions f) 186.35 661 T -(or K) 247.45 661 T -(e) 271.27 661 T -(ys fr) 277.76 661 T -(om the Ser) 302.87 661 T -(ver) 365 661 T -2 F -(T) 108 641 T -(o update the actions \050the) 114.37 641 T -1 F -(key_acts) 234.68 641 T -2 F -( array\051 for a subset of the k) 276 641 T -(e) 405.5 641 T -(ys in a k) 410.65 641 T -(e) 450.86 641 T -(yboard descrip-) 456.01 641 T -(tion, use) 108 628 T -1 F -(XkbGetK) 151.67 628 T -(e) 195.24 628 T -(yActions) 200.21 628 T -2 F -(.) 241.54 628 T -2 11 Q -(Status) 108 607.67 T -3 F -(XkbGetK) 137.65 607.67 T -(eyActions) 183.21 607.67 T -2 F -(\050) 229.03 607.67 T -1 F -(dpy) 232.7 607.67 T -2 F -(,) 247.87 607.67 T -1 F -( \336r) 250.62 607.67 T -(st) 263.03 607.67 T -2 F -(,) 270.37 607.67 T -1 F -(num) 275.87 607.67 T -2 F -(,) 294.81 607.67 T -1 F -( xkb) 297.56 607.67 T -2 F -(\051) 315.58 607.67 T -(Display *) 126 594.67 T -1 F -(dpy) 234 594.67 T -2 F -(;) 249.88 594.67 T -(/* connection to X serv) 279 594.67 T -(er */) 381.49 594.67 T -(unsigned int) 126 581.67 T -1 F -(\336r) 234 581.67 T -(st) 243.67 581.67 T -2 F -(;) 251.01 581.67 T -(/* k) 279 581.67 T -(e) 295.7 581.67 T -(ycode of \336rst k) 300.42 581.67 T -(e) 366.6 581.67 T -(y of interest */) 371.32 581.67 T -(unsigned int) 126 568.67 T -1 F -(num) 234 568.67 T -2 F -(;) 252.94 568.67 T -(/* number of k) 279 568.67 T -(e) 343.97 568.67 T -(ys desired */) 348.68 568.67 T -(XkbDescPtr) 126 555.67 T -1 F -(xkb) 234 555.67 T -2 F -(;) 249.27 555.67 T -(/* pointer to k) 279 555.67 T -(e) 340.92 555.67 T -(yboard description where result is stored */) 345.64 555.67 T -1 12 Q -(XkbGetK) 108 536 T -(e) 151.57 536 T -(yActions) 156.54 536 T -2 F -( sends a request to the server to obtain the actions for) 197.87 536 T -1 F -(num) 455.82 536 T -2 F -( keys on the) 476.48 536 T -(keyboard starting with key) 108 523 T -1 F -(first) 239.32 523 T -2 F -(. It waits for a reply and returns the actions in the) 258.66 523 T -1 F --0.25 (server) 108 510 P -2 F --0.25 (->) 137.99 510 P -1 F --0.25 (key_acts) 148.75 510 P -2 F --0.25 ( field of) 190.07 510 P -1 F --0.25 (xkb) 230.31 510 P -2 F --0.25 (. If successful,) 246.97 510 P -1 F --0.25 (XkbGetK) 318.54 510 P --0.25 (e) 362.11 510 P --0.25 (yActions) 367.08 510 P -2 F --0.25 ( returns) 408.4 510 P -5 F --0.55 -0.6 (Success) 447.23 510 B -2 F --0.25 (. The) 493.43 510 P -1 F --0.25 (xkb) 520.59 510 P -2 F -(parameter must be a pointer to a valid Xkb keyboard description.) 108 497 T --0.29 (If the) 108 476 P -1 F --0.29 (server) 136.07 476 P -2 F --0.29 ( map in the) 166.06 476 P -1 F --0.29 (xkb) 221.55 476 P -2 F --0.29 ( parameter has not been allocated,) 238.21 476 P -1 F --0.29 (XkbGetK) 402.73 476 P --0.29 (e) 446.3 476 P --0.29 (yActions) 451.27 476 P -2 F --0.29 ( allocates) 492.6 476 P -(and initializes it before obtaining the actions.) 108 463 T --0.38 (If the server does not have a compatible version of Xkb, or the Xkb extension has not been) 108 442 P -(properly initialized,) 108 429 T -1 F -(XkbGetK) 205.66 429 T -(e) 249.23 429 T -(yActions) 254.2 429 T -2 F -( returns) 295.52 429 T -5 F --0.6 (BadAccess) 334.85 429 S -2 F -(. If) 394.25 429 T -1 F -(num) 411.24 429 T -2 F -( is less than 1 or) 431.9 429 T -(greater than) 108 416 T -5 F --0.6 (XkbMaxKeyCount) 167.98 416 S -2 F -(,) 260.38 416 T -1 F -(XkbGetK) 266.38 416 T -(e) 309.95 416 T -(yActions) 314.92 416 T -2 F -( returns) 356.25 416 T -5 F --0.6 (BadValue) 395.57 416 S -2 F -(. If any allocation) 448.37 416 T -(errors occur,) 108 403 T -1 F -(XkbGetK) 171.64 403 T -(e) 215.21 403 T -(yActions) 220.18 403 T -2 F -( returns) 261.5 403 T -5 F --0.6 (BadAlloc) 300.83 403 S -2 F -(.) 353.63 403 T -0 F -(16.1.16) 72 378 T -(Changing the Number of Actions Bound to a K) 112.03 378 T -(e) 377.2 378 T -(y) 383.69 378 T -2 F -(T) 108 358 T -(o change the number of actions bound to a k) 114.37 358 T -(e) 327.22 358 T -(y) 332.36 358 T -(, use) 337.58 358 T -1 F -(XkbResizeK) 362.58 358 T -(e) 419.48 358 T -(yAction) 424.45 358 T -2 F -(.) 461.11 358 T -2 11 Q -(XkbAction *) 108 337.67 T -3 F -(XkbResizeK) 165.13 337.67 T -(eyActions) 223.52 337.67 T -2 F -(\050) 269.35 337.67 T -1 F -(xkb) 273.01 337.67 T -2 F -(,) 288.28 337.67 T -1 F -( k) 291.03 337.67 T -(e) 298.55 337.67 T -(y) 303.11 337.67 T -2 F -(,) 307.28 337.67 T -1 F -( needed) 310.03 337.67 T -2 F -(\051) 343.93 337.67 T -(XkbDescRec *) 126 324.67 T -1 F -(xkb) 234 324.67 T -2 F -(;) 249.27 324.67 T -(/* k) 306 324.67 T -(e) 322.7 324.67 T -(yboard description to change */) 327.42 324.67 T -(int) 126 311.67 T -1 F -(k) 234 311.67 T -(e) 238.77 311.67 T -(y) 243.33 311.67 T -2 F -(;) 248.21 311.67 T -(/* k) 306 311.67 T -(e) 322.7 311.67 T -(ycode of k) 327.42 311.67 T -(e) 373.74 311.67 T -(y to change */) 378.46 311.67 T -(int) 126 298.67 T -1 F -(needed) 234 298.67 T -2 F -(;) 265.15 298.67 T -(/* ne) 306 298.67 T -(w number of actions required */) 327.42 298.67 T -2 12 Q --0.23 (The) 108 279 P -1 F --0.23 (xkb) 129.43 279 P -2 F --0.23 ( parameter points to the keyboard description containing the) 146.09 279 P -1 F --0.23 (key) 435.62 279 P -2 F --0.23 ( whose number of) 451.61 279 P -(actions is to be changed. The) 108 266 T -1 F -(key) 250.31 266 T -2 F -( parameter is the keycode of the key to change, and) 266.29 266 T -1 F -(needed) 108 253 T -2 F -( specifies the new number of actions required for the key.) 141.98 253 T -1 F --0.32 (XkbResizeK) 108 232 P --0.32 (e) 164.9 232 P --0.32 (yActions) 169.87 232 P -2 F --0.32 ( reserves the space needed for the actions and returns a pointer to the) 211.2 232 P -(beginning of the new array that holds the actions. It can change the) 108 219 T -1 F -(acts) 432.6 219 T -2 F -(,) 451.93 219 T -1 F -(num_acts) 457.93 219 T -2 F -(, and) 503.93 219 T -1 F -(size_acts) 108 206 T -2 F -( fields of) 151.33 206 T -1 F -(xkb) 196.99 206 T -2 F -(->) 213.65 206 T -1 F -(server) 224.41 206 T -2 F -( if it is necessary to reallocate the) 254.4 206 T -1 F -(acts) 417.7 206 T -2 F -(array.) 440.03 206 T --0.25 (If) 108 185 P -1 F --0.25 (needed) 118.75 185 P -2 F --0.25 ( is greater than the current number of keysyms for the key,) 152.73 185 P -1 F --0.25 (XkbResizeK) 434.05 185 P --0.25 (e) 490.95 185 P --0.25 (yActions) 495.92 185 P -2 F -(initializes all new actions in the array to) 108 172 T -5 F --0.6 (NoAction) 302.64 172 S -2 F -(.) 355.44 172 T -(Because the number of actions needed by a key is normally computed as width * number) 108 151 T --0.49 (of groups, and) 108 138 P -1 F --0.49 (XkbResizeK) 178.52 138 P --0.49 (e) 235.43 138 P --0.49 (yActions) 240.4 138 P -2 F --0.49 ( does not modify either the width or number of groups) 281.73 138 P -(for the key, a discrepancy exists on return from) 108 125 T -1 F -(XkbResizeK) 337.94 125 T -(e) 394.85 125 T -(yActions) 399.82 125 T -2 F -( between the space) 441.14 125 T --0.06 (allocated for the actions and the number required. The unused entries in the list of actions) 108 112 P -(returned by) 108 99 T -1 F -(XkbResizeK) 165.98 99 T -(e) 222.89 99 T -(yActions) 227.86 99 T -2 F -( are not preserved across future calls to any of the map) 269.18 99 T -(editing functions, so you must update the key actions \050which updates the width and num-) 108 86 T -FMENDPAGE -%%EndPage: "160" 172 -%%Page: "161" 173 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(161) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(16 Xkb Serv) 382.36 744.87 T -(er K) 443.3 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -2 12 Q -(ber of groups for the key\051 before calling another allocator function. A call to) 108 712 T -1 F -(XkbChang) 477.58 712 T -(e-) 528.12 712 T -(T) 108 699 T -(ypesOfK) 113.78 699 T -(e) 154.69 699 T -(y) 159.66 699 T -2 F -( updates these.) 164.99 699 T -(If any allocation errors occur while resizing the number of actions bound to the key,) 108 678 T -1 F -(XkbResizeK) 108 665 T -(e) 164.9 665 T -(yActions) 169.87 665 T -2 F -( returns) 211.2 665 T -5 F --0.6 (NULL) 250.52 665 S -2 F -(.) 276.92 665 T -0 F -(Note) 126 644.67 T -2 11 Q --0.3 (A change to the number of actions bound to a k) 162 644.67 P --0.3 (e) 367.85 644.67 P --0.3 (y should be accompanied by a change) 372.57 644.67 P --0.32 (in the number of symbols bound to a k) 162 632.67 P --0.32 (e) 329.25 632.67 P --0.32 (y) 333.97 632.67 P --0.32 (. Refer to section 15.3.7 for more information) 338.75 632.67 P -(on changing the number of symbols bound to a k) 162 620.67 T -(e) 377.29 620.67 T -(y) 382.01 620.67 T -(.) 386.8 620.67 T -0 12 Q -(16.2) 72 596 T -(K) 108 596 T -(e) 116.48 596 T -(y Beha) 122.98 596 T -(vior) 162.14 596 T -2 F -(Key behavior refers to the demeanor of a key. For example, the expected behavior of the) 108 576 T -4 11 Q -(CapsLoc) 108 563 T -(k) 151.19 563 T -2 12 Q -( key is that it logically locks when pressed, and then logically unlocks when) 156.69 563 T -(pressed again.) 108 550 T -0 F -(16.2.1) 72 525 T -(Radio Gr) 108 525 T -(oups) 158.44 525 T -2 F -(Keys that belong to the same radio group have the) 108 505 T -5 F --0.6 (XkbKB_RadioGroup) 351.96 505 S -2 F -( type in the) 457.56 505 T -1 F -(type) 514.23 505 T -2 F -(field and the radio group index specified in the) 108 492 T -1 F -(data) 335.63 492 T -2 F -( field in the) 356.96 492 T -5 F --0.6 (XkbBehavior) 414.96 492 S -2 F -( structure.) 487.56 492 T -(If the radio group has a name in the) 108 479 T -5 F --0.6 (XkbNamesRec) 281.63 479 S -2 F -( structure, the radio group index is the) 354.23 479 T --0.11 (index into the) 108 466 P -1 F --0.11 (radio_group) 176.67 466 P -2 F --0.11 ( array in the) 237.34 466 P -5 F --0.24 -0.6 (XkbNamesRec) 297.55 466 B -2 F --0.11 ( structure. A radio group key when) 370.15 466 P --0.23 (pressed stays logically down until another key in the radio group is pressed, when the first) 108 453 P -(key becomes logically up and the new key becomes logically down. Setting the) 108 440 T -5 F --0.75 -0.6 (XkbKB_RGAllowNone) 108 427 B -2 F --0.34 ( bit in the behavior for all of the keys of the radio group means that) 220.2 427 P -(pressing the logically down member of the radio group causes it to logically release, in) 108 414 T -(which case none of the keys of the radio group would be logically down. If) 108 401 T -5 F --0.61 -0.6 (XkbKB_RGAllowNone) 108 388 B -2 F --0.28 ( is not set, there is no way to release the logically down member of) 220.2 388 P -(the group.) 108 375 T -(The low five bits of the) 108 354 T -1 F -(data) 223.32 354 T -2 F -( field of the) 244.66 354 T -5 F --0.6 (XkbBehavior) 303.31 354 S -2 F -( structure are the group number,) 375.91 354 T -(the high three bits are flags. The only flag currently defined is:) 108 341 T -2 11 Q -(#de\336ne) 108 315.67 T -(XkbRG_Allo) 162 315.67 T -(wNone) 221 315.67 T -(0x80) 306 315.67 T -0 12 Q -(16.2.2) 72 290 T -(The XkbBeha) 108 290 T -(vior Structure) 183.84 290 T -2 F --0.12 (The) 108 270 P -1 F --0.12 (behaviors) 129.54 270 P -2 F --0.12 ( field of the server map is an array of) 176.87 270 P -5 F --0.27 -0.6 (XkbBehavior) 356.24 270 B -2 F --0.12 ( structures, indexed by) 428.85 270 P -(keycode, and contains the behavior for each key. The) 108 257 T -5 F --0.6 (XkbBehavior) 366.92 257 S -2 F -( structure is defined) 439.52 257 T -(as follows:) 108 244 T -2 11 Q -(typedef struct _XkbBeha) 126 223.67 T -(vior {) 235.76 223.67 T -(unsigned char type;) 144 210.67 T -(/* beha) 270 210.67 T -(vior type + optional) 301.86 210.67 T -5 F --0.33 (XkbKB_Permanent) 391.78 210.67 S -2 F -( bit */) 485.83 210.67 T -(unsigned char data;) 144 197.67 T -(}) 126 184.67 T -3 F -(XkbBeha) 134.03 184.67 T -(vior) 177.77 184.67 T -2 F -(;) 196.71 184.67 T -2 12 Q -(The) 108 165 T -1 F -(type) 129.66 165 T -2 F -( field specifies the Xkb behavior, and the value of the) 149.65 165 T -1 F -(data) 409.6 165 T -2 F -( field depends on the) 430.93 165 T -1 F -(type) 108 152 T -2 F -(. Xkb supports the key behaviors shown in Table 16.20.) 127.99 152 T -3 F -(T) 261.56 132 T -(able 16.20 K) 268.46 132 T -(ey Beha) 334.83 132 T -(viors) 374.86 132 T -1 F -(T) 109 112 T -(ype) 114.78 112 T -(Ef) 217 112 T -(fect) 227.45 112 T -5 11 Q --0.33 (XkbKB_Default) 109 97.67 S -2 F --0.05 (Press and release e) 217 97.67 P --0.05 (v) 299.34 97.67 P --0.05 (ents are processed normally) 304.67 97.67 P --0.05 (. The) 426.3 97.67 P -1 F --0.05 (data) 451.54 97.67 P -2 F --0.05 ( \336eld is unused.) 471.1 97.67 P -108 124 540 124 2 L -V -0.5 H -0 Z -N -108 107 540 107 2 L -V -N -FMENDPAGE -%%EndPage: "161" 173 -%%Page: "162" 174 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(162) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(16 Xkb Serv) 382.36 744.87 T -(er K) 443.3 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -2 12 Q -(Xkb also provides the mask,) 108 405 T -5 F --0.6 (XkbKB_Permanent) 247.32 405 S -2 F -( to specify whether the key behavior) 346.32 405 T -(type should be simulated by Xkb or whether the key behavior describes an unalterable) 108 392 T -(physical, electrical, or software aspect of the keyboard. If the) 108 379 T -5 F --0.6 (XkbKB_Permanent) 404.24 379 S -2 F -( bit is) 503.25 379 T -(not set in the) 108 366 T -1 F -(type) 172.67 366 T -2 F -( field, Xkb simulates the behavior in software. Otherwise, Xkb relies) 192.66 366 T -(upon the keyboard to implement the behavior.) 108 353 T -0 F -(16.2.3) 72 328 T -(Obtaining K) 108 328 T -(e) 175.82 328 T -(y Beha) 182.32 328 T -(vior) 221.48 328 T -(s f) 243.31 328 T -(or K) 257.08 328 T -(e) 280.9 328 T -(ys fr) 287.39 328 T -(om the Ser) 312.49 328 T -(ver) 374.63 328 T -2 F -(T) 108 308 T -(o obtain the beha) 114.37 308 T -(viors \050the) 196.45 308 T -1 F -(behaviors) 245.11 308 T -2 F -( array\051 for a subset of the k) 292.44 308 T -(e) 421.94 308 T -(ys in a k) 427.09 308 T -(e) 467.3 308 T -(yboard) 472.45 308 T -(description from the serv) 108 295 T -(er) 228.13 295 T -(, use) 236.98 295 T -1 F -(XkbGetK) 261.97 295 T -(e) 305.54 295 T -(yBehavior) 310.51 295 T -(s) 359.71 295 T -2 F -(:) 364.38 295 T -2 11 Q -(Status) 108 274.67 T -3 F -(XkbGetK) 137.65 274.67 T -(eyBeha) 183.21 274.67 T -(viors) 217.15 274.67 T -2 F -(\050) 240.37 274.67 T -1 F -(dpy) 244.04 274.67 T -2 F -(,) 259.21 274.67 T -1 F -( \336r) 261.96 274.67 T -(st) 274.38 274.67 T -2 F -(,) 281.71 274.67 T -1 F -( num) 284.46 274.67 T -2 F -(,) 306.15 274.67 T -1 F -( xkb) 308.9 274.67 T -2 F -(\051) 326.92 274.67 T -(Display *) 126 261.67 T -1 F -(dpy) 234 261.67 T -2 F -(;) 249.88 261.67 T -(/* connection to serv) 306 261.67 T -(er */) 397.8 261.67 T -(unsigned int) 126 248.67 T -1 F -(\336r) 234 248.67 T -(st) 243.67 248.67 T -2 F -(;) 251.01 248.67 T -(/* k) 306 248.67 T -(e) 322.7 248.67 T -(ycode of \336rst k) 327.42 248.67 T -(e) 393.6 248.67 T -(y to get */) 398.32 248.67 T -(unsigned int) 126 235.67 T -1 F -(num) 234 235.67 T -2 F -(;) 252.94 235.67 T -(/* number of k) 306 235.67 T -(e) 370.97 235.67 T -(ys for which beha) 375.68 235.67 T -(viors are desired */) 453.97 235.67 T -(XkbDescPtr) 126 222.67 T -1 F -(xkb) 234 222.67 T -2 F -(;) 249.27 222.67 T -(/* Xkb description to contain the result */) 306 222.67 T -1 12 Q --0.31 (XkbGetK) 108 203 P --0.31 (e) 151.57 203 P --0.31 (yBehavior) 156.54 203 P --0.31 (s) 205.74 203 P -2 F --0.31 (sends a request to the server to obtain the behaviors for) 213.1 203 P -1 F --0.31 (num) 477.28 203 P -2 F --0.31 ( keys on) 497.94 203 P -(the keyboard starting with the key whose keycode is) 108 190 T -1 F -(\336r) 362.29 190 T -(st) 372.84 190 T -2 F -(. It waits for a reply and returns) 380.84 190 T -(the behaviors in the) 108 177 T -1 F -(server) 205.32 177 T -2 F -(->) 235.31 177 T -1 F -(behaviors) 246.07 177 T -2 F -( field of) 293.4 177 T -1 F -(xkb) 334.39 177 T -2 F -(. If successful,) 351.05 177 T -1 F -(XkbGetK) 423.36 177 T -(e) 466.93 177 T -(yBehavior) 471.9 177 T -(s) 521.1 177 T -2 F -(returns) 108 164 T -5 F --0.6 (Success) 144.32 164 S -2 F -(.) 190.52 164 T -(If the) 108 143 T -1 F -(server) 136.66 143 T -2 F -( map in the) 166.64 143 T -1 F -(xkb) 223.31 143 T -2 F -( parameter has not been allocated,) 239.96 143 T -1 F -(XkbGetK) 406.25 143 T -(e) 449.82 143 T -(yBehavior) 454.79 143 T -(s) 503.99 143 T -2 F -( allo-) 508.66 143 T -(cates and initializes it before obtaining the actions.) 108 130 T --0.38 (If the server does not have a compatible version of Xkb, or the Xkb extension has not been) 108 109 P -(properly initialized,) 108 96 T -1 F -(XkbGetK) 205.66 96 T -(e) 249.23 96 T -(yBehavior) 254.2 96 T -(s) 303.4 96 T -2 F -( returns) 308.06 96 T -5 F --0.6 (BadAccess) 347.39 96 S -2 F -(. If) 406.79 96 T -1 F -(num) 423.78 96 T -2 F -( is less than 1 or) 444.45 96 T -(greater than) 108 83 T -5 F --0.6 (XkbMaxKeyCount) 167.98 83 S -2 F -(,) 260.38 83 T -1 F -(XkbGetK) 266.38 83 T -(e) 309.95 83 T -(yBehavior) 314.92 83 T -(s) 364.12 83 T -2 F -( returns) 368.79 83 T -5 F --0.6 (BadValue) 408.11 83 S -2 F -(. If any alloca-) 460.91 83 T -(tion errors occur,) 108 70 T -1 F -(XkbGetK) 193.31 70 T -(e) 236.88 70 T -(yBehavior) 241.85 70 T -(s) 291.05 70 T -2 F -( returns) 295.72 70 T -5 F --0.6 (BadAlloc) 335.04 70 S -2 F -(.) 387.84 70 T -5 11 Q --0.33 (XkbKB_Lock) 109 677.67 S -2 F -(If a k) 217 677.67 T -(e) 240.1 677.67 T -(y is logically up \050that is, the corresponding bit of the core k) 244.82 677.67 T -(e) 505.32 677.67 T -(y map) 510.04 677.67 T --0.19 (is cleared\051 when it is pressed, the k) 217 666.67 P --0.19 (e) 369.51 666.67 P --0.19 (y press is processed normally and the) 374.23 666.67 P -(corresponding release is ignored. If the k) 217 655.67 T -(e) 396.82 655.67 T -(y is logically do) 401.54 655.67 T -(wn when) 471.85 655.67 T -(pressed, the k) 217 644.67 T -(e) 277.07 644.67 T -(y press is ignored b) 281.79 644.67 T -(ut the corresponding release is pro-) 367.12 644.67 T -(cessed normally) 217 633.67 T -(. The) 287.47 633.67 T -1 F -(data) 312.82 633.67 T -2 F -( \336eld is unused.) 332.38 633.67 T -5 F --0.33 (XkbKB_RadioGroup) 109 619.67 S -2 F -(If another member of the radio group is logically do) 217 619.67 T -(wn \050all members of) 445.55 619.67 T -(the radio group ha) 217 608.67 T -(v) 297.12 608.67 T -(e the same inde) 302.46 608.67 T -(x, speci\336ed in) 370.42 608.67 T -1 F -(data) 434.58 608.67 T -2 F -(\051 when a k) 454.14 608.67 T -(e) 500.15 608.67 T -(y is) 504.87 608.67 T -(pressed, the serv) 217 597.67 T -(er synthesizes a k) 289.84 597.67 T -(e) 367.02 597.67 T -(y release for the member that is logi-) 371.74 597.67 T -(cally do) 217 586.67 T -(wn and then processes the ne) 251.86 586.67 T -(w k) 379.58 586.67 T -(e) 395.66 586.67 T -(y press e) 400.38 586.67 T -(v) 438.6 586.67 T -(ent normally) 443.93 586.67 T -(.) 499.13 586.67 T -(If the k) 217 571.67 T -(e) 248.66 571.67 T -(y itself is logically do) 253.38 571.67 T -(wn when pressed, the k) 348.44 571.67 T -(e) 451.28 571.67 T -(y press e) 456 571.67 T -(v) 494.21 571.67 T -(ent is) 499.55 571.67 T -(ignored, b) 217 560.67 T -(ut the processing of the corresponding k) 261.39 560.67 T -(e) 437.86 560.67 T -(y release depends on) 442.58 560.67 T -(the v) 217 549.67 T -(alue of the) 238.42 549.67 T -5 F --0.33 (Xkb_RGAllowNone) 287.6 549.67 S -2 F -( bit in) 381.65 549.67 T -1 F -(flags) 410.07 549.67 T -2 F -(. If it is set, the k) 431.47 549.67 T -(e) 505.3 549.67 T -(y) 510.02 549.67 T -(release is processed normally; otherwise, the k) 217 538.67 T -(e) 421.88 538.67 T -(y release is also ignored.) 426.59 538.67 T -(All other k) 217 523.67 T -(e) 264.55 523.67 T -(y release e) 269.27 523.67 T -(v) 315.42 523.67 T -(ents are ignored.) 320.75 523.67 T -5 F --0.33 (XkbKB_Overlay1) 109 509.67 S -2 F --0.23 (If the) 217 509.67 P -5 F --0.52 -0.33 (Overlay1) 242.81 509.67 B -2 F --0.23 ( control is enabled \050see section 10.4\051,) 292.97 509.67 P -1 F --0.23 (data) 457.88 509.67 P -2 F --0.23 ( is interpreted) 477.44 509.67 P -(as a k) 217 498.67 T -(e) 241.94 498.67 T -(ycode, and e) 246.66 498.67 T -(v) 301.67 498.67 T -(ents from this k) 307 498.67 T -(e) 375.64 498.67 T -(y are reported as if the) 380.36 498.67 T -(y came from) 478.86 498.67 T -1 F -(data) 217 487.67 T -2 F -(\325) 236.56 487.67 T -(s k) 239.62 487.67 T -(e) 252.04 487.67 T -(ycode. Otherwise, press and release e) 256.75 487.67 T -(v) 421.12 487.67 T -(ents are processed nor-) 426.45 487.67 T -(mally) 217 476.67 T -(.) 241.34 476.67 T -5 F --0.33 (XkbKB_Overlay2) 109 462.67 S -2 F --0.23 (If the) 217 462.67 P -5 F --0.52 -0.33 (Overlay2) 242.81 462.67 B -2 F --0.23 ( control is enabled \050see section 10.4\051,) 292.97 462.67 P -1 F --0.23 (data) 457.88 462.67 P -2 F --0.23 ( is interpreted) 477.44 462.67 P -(as a k) 217 451.67 T -(e) 241.94 451.67 T -(ycode, and e) 246.66 451.67 T -(v) 301.67 451.67 T -(ents from this k) 307 451.67 T -(e) 375.64 451.67 T -(y are reported as if the) 380.36 451.67 T -(y came from) 478.86 451.67 T -1 F -(data) 217 440.67 T -2 F -(\325) 236.56 440.67 T -(s k) 239.62 440.67 T -(e) 252.04 440.67 T -(ycode. Otherwise, press and release e) 256.75 440.67 T -(v) 421.12 440.67 T -(ents are processed nor-) 426.45 440.67 T -(mally) 217 429.67 T -(.) 241.34 429.67 T -3 12 Q -(T) 261.56 712 T -(able 16.20 K) 268.46 712 T -(ey Beha) 334.83 712 T -(viors) 374.86 712 T -1 F -(T) 109 692 T -(ype) 114.78 692 T -(Ef) 217 692 T -(fect) 227.45 692 T -108 704 540 704 2 L -V -0.5 H -0 Z -N -108 687 540 687 2 L -V -N -FMENDPAGE -%%EndPage: "162" 174 -%%Page: "163" 175 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(163) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(16 Xkb Serv) 382.36 744.87 T -(er K) 443.3 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -0 12 Q -(16.3) 72 712 T -(Explicit Components\321A) 108 712 T -(v) 247.54 712 T -(oiding A) 253.85 712 T -(utomatic Remapping b) 301.49 712 T -(y the Ser) 430.6 712 T -(ver) 481.4 712 T -2 F -(Whenever a client remaps the keyboard using core protocol requests, Xkb examines the) 108 692 T -(map to determine likely default values for the components that cannot be specified using) 108 679 T --0.42 (the core protocol \050see section 17.1.2 for more information on how Xkb chooses the default) 108 666 P -(values\051.) 108 653 T --0.54 (This automatic remapping might replace definitions explicitly requested by an application,) 108 632 P -(so the Xkb keyboard description defines an explicit components mask for each key. Any) 108 619 T -(aspects of the automatic remapping listed in the explicit components mask for a key are) 108 606 T -(not changed by the automatic keyboard mapping.) 108 593 T --0.27 (The explicit components masks are held in the) 108 572 P -1 F --0.27 (explicit) 331.81 572 P -2 F --0.27 ( field of the server map, which is an) 367.14 572 P --0.24 (array indexed by keycode. Each entry in this array is a mask that is a bitwise inclusive OR) 108 559 P -(of the values shown in Table 16.21.) 108 546 T -0 F -(16.3.1) 72 258 T -(Obtaining Explicit Components f) 108 258 T -(or K) 293.78 258 T -(e) 317.6 258 T -(ys fr) 324.1 258 T -(om the Ser) 349.2 258 T -(ver) 411.34 258 T -2 F --0.42 (T) 108 238 P --0.42 (o obtain the e) 114.37 238 P --0.42 (xplicit components \050the) 177.92 238 P -1 F --0.42 (explicit) 292.98 238 P -2 F --0.42 ( array\051 for a subset of the k) 328.31 238 P --0.42 (e) 454.86 238 P --0.42 (ys in a k) 460 238 P --0.42 (e) 498.95 238 P --0.42 (yboard) 504.1 238 P -(description, use) 108 225 T -1 F -(XkbGetK) 186.32 225 T -(e) 229.9 225 T -(yExplicitComponents) 234.86 225 T -2 F -(.) 337.52 225 T -2 11 Q -(Status) 108 204.67 T -3 F -(XkbGetK) 137.65 204.67 T -(eyExplicitComponents) 183.21 204.67 T -2 F -(\050) 289.54 204.67 T -1 F -(dpy) 293.21 204.67 T -2 F -(,) 308.38 204.67 T -1 F -( \336r) 311.13 204.67 T -(st) 323.55 204.67 T -2 F -(,) 330.88 204.67 T -1 F -( num) 333.63 204.67 T -2 F -(,) 355.32 204.67 T -1 F -( xkb) 358.07 204.67 T -2 F -(\051) 376.09 204.67 T -(Display *) 126 191.67 T -1 F -(dpy) 234 191.67 T -2 F -(;) 249.88 191.67 T -(/* connection to serv) 306 191.67 T -(er */) 397.8 191.67 T -(unsigned int) 126 178.67 T -1 F -(\336r) 234 178.67 T -(st) 243.67 178.67 T -2 F -(;) 251.01 178.67 T -(/* k) 306 178.67 T -(e) 322.7 178.67 T -(ycode of \336rst k) 327.42 178.67 T -(e) 393.6 178.67 T -(y to fetch */) 398.32 178.67 T -(unsigned int) 126 165.67 T -1 F -(num) 234 165.67 T -2 F -(;) 252.94 165.67 T -(/* number of k) 306 165.67 T -(e) 370.97 165.67 T -(ys for which to get e) 375.68 165.67 T -(xplicit info */) 465.64 165.67 T -(XkbDescPtr) 126 152.67 T -1 F -(xkb) 234 152.67 T -2 F -(;) 249.27 152.67 T -(/* Xkb description in which to put results */) 306 152.67 T -1 12 Q -(XkbGetK) 108 133 T -(e) 151.57 133 T -(yExplicitComponents) 156.54 133 T -2 F -( sends a request to the server to obtain the explicit compo-) 259.2 133 T -(nents for) 108 120 T -1 F -(num) 153.32 120 T -2 F -( keys on the keyboard starting with key) 173.99 120 T -1 F -(first) 365.96 120 T -2 F -(. It waits for a reply and returns) 385.31 120 T -(the explicit components in the) 108 107 T -1 F -(server) 255.66 107 T -2 F -(->) 285.65 107 T -1 F -(explicit) 296.41 107 T -2 F -( array of) 331.74 107 T -1 F -(xkb) 375.38 107 T -2 F -(. If successful,) 392.04 107 T -1 F -(XkbGetK) 464.35 107 T -(e) 507.92 107 T -(yEx-) 512.89 107 T -(plicitComponents) 108 94 T -2 F -( returns) 192.67 94 T -5 F --0.6 (Success) 232 94 S -2 F -(. The) 278.2 94 T -1 F -(xkb) 305.86 94 T -2 F -( parameter must be a pointer to a valid Xkb) 322.51 94 T -(keyboard description.) 108 81 T -3 F -(T) 224.59 526 T -(able 16.21 Explicit Component Masks) 231.49 526 T -1 F -(Bit in Explicit Mask) 109 506 T -(V) 226 506 T -(alue) 232 506 T -(Pr) 271 506 T -(otects Against) 282.46 506 T -5 11 Q --0.33 (ExplicitKeyType1) 109 491.67 S --0.33 (\0501<<0\051) 226 491.67 S -2 F -(Automatic determination of the k) 271 491.67 T -(e) 417.54 491.67 T -(y type associated with) 422.26 491.67 T -5 F --0.33 (Group1.) 271 480.67 S --0.33 (ExplicitKeyType2) 109 466.67 S --0.33 (\0501<<1\051) 226 466.67 S -2 F -(Automatic determination of the k) 271 466.67 T -(e) 417.54 466.67 T -(y type associated with) 422.26 466.67 T -5 F --0.33 (Group2.) 271 455.67 S --0.33 (ExplicitKeyType3) 109 441.67 S --0.33 (\0501<<2\051) 226 441.67 S -2 F -(Automatic determination of the k) 271 441.67 T -(e) 417.54 441.67 T -(y type associated with) 422.26 441.67 T -5 F --0.33 (Group3.) 271 430.67 S --0.33 (ExplicitKeyType4) 109 416.67 S --0.33 (\0501<<3\051) 226 416.67 S -2 F -(Automatic determination of the k) 271 416.67 T -(e) 417.54 416.67 T -(y type associated with) 422.26 416.67 T -5 F --0.33 (Group4.) 271 405.67 S --0.33 (ExplicitInterpret) 109 391.67 S --0.33 (\0501<<4\051) 226 391.67 S -2 F -(Application of an) 271 391.67 T -(y of the \336elds of a symbol interpretation) 347.82 391.67 T -(to the k) 271 380.67 T -(e) 303.89 380.67 T -(y in question.) 308.61 380.67 T -5 F --0.33 (ExplicitAutoRepeat) 109 366.67 S --0.33 (\0501<<5\051) 226 366.67 S -2 F -(Automatic determination of auto-repeat status for the k) 271 366.67 T -(e) 513.15 366.67 T -(y) 517.87 366.67 T -(,) 522.66 366.67 T -(as speci\336ed in a symbol interpretation.) 271 355.67 T -5 F --0.33 (ExplicitBehavior) 109 341.67 S --0.33 (\0501<<6\051) 226 341.67 S -2 F --0.44 (Automatic assignment of the) 271 341.67 P -5 F --1 -0.33 (XkbKB_Lock) 398.79 341.67 B -2 F --0.44 ( beha) 461.49 341.67 P --0.44 (vior to the) 484.35 341.67 P -(k) 271 330.67 T -(e) 276.39 330.67 T -(y) 281.11 330.67 T -(, if the) 285.89 330.67 T -5 F --0.33 (XkbSI_LockingKey) 317.06 330.67 S -2 F -( \337ag is set in a symbol) 417.38 330.67 T -(interpretation.) 271 319.67 T -5 F --0.33 (ExplicitVModMap) 109 305.67 S --0.33 (\0501<<7\051) 226 305.67 S -2 F -(Automatic determination of the virtual modi\336er map for) 271 305.67 T -(the k) 271 294.67 T -(e) 292.58 294.67 T -(y based on the actions assigned to the k) 297.3 294.67 T -(e) 470.73 294.67 T -(y and the) 475.45 294.67 T -(symbol interpretations that match the k) 271 283.67 T -(e) 442.91 283.67 T -(y) 447.63 283.67 T -(.) 452.41 283.67 T -108 518 531 518 2 L -V -0.5 H -0 Z -N -108 501 531 501 2 L -V -N -FMENDPAGE -%%EndPage: "163" 175 -%%Page: "164" 176 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(164) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(16 Xkb Serv) 382.36 744.87 T -(er K) 443.3 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -2 12 Q -(If the) 108 712 T -1 F -(server) 136.66 712 T -2 F -( map in the) 166.64 712 T -1 F -(xkb) 223.31 712 T -2 F -( parameter has not been allocated,) 239.96 712 T -1 F -(XkbGetK) 406.25 712 T -(e) 449.82 712 T -(yExplicitCompo-) 454.79 712 T -(nents) 108 699 T -2 F -( allocates and initializes it before obtaining the actions.) 133.33 699 T --0.38 (If the server does not have a compatible version of Xkb, or the Xkb extension has not been) 108 678 P --0.53 (properly initialized,) 108 665 P -1 F --0.53 (XkbGetK) 204.6 665 P --0.53 (e) 248.17 665 P --0.53 (yExplicitComponents) 253.13 665 P -2 F --0.53 ( returns) 355.8 665 P -5 F --1.17 -0.6 (BadMatch) 394.06 665 B -2 F --0.53 (. If) 446.86 665 P -1 F --0.53 (num) 462.79 665 P -2 F --0.53 ( is less than) 483.45 665 P -(1 or greater than) 108 652 T -5 F --0.6 (XkbMaxKeyCount) 189.97 652 S -2 F -(,) 282.37 652 T -1 F -(XkbGetK) 288.37 652 T -(e) 331.95 652 T -(yExplicitComponents) 336.91 652 T -2 F -( returns) 439.57 652 T -5 F --0.6 (BadValue) 478.9 652 S -2 F -(.) 531.7 652 T -(If any allocation errors occur,) 108 639 T -1 F -(XkbGetK) 253.28 639 T -(e) 296.86 639 T -(yExplicitComponents) 301.82 639 T -2 F -( returns) 404.48 639 T -5 F --0.6 (BadAlloc) 443.81 639 S -2 F -(.) 496.61 639 T -0 F -(16.4) 72 614 T -(Vir) 108 614 T -(tual Modi\336er Mapping) 124.25 614 T -2 F -(The) 108 594 T -1 F -(vmods) 129.66 594 T -2 F -( member of the server map is a fixed-length array containing) 160.32 594 T -5 F --0.6 (XkbNumVir-) 454.58 594 S --0.6 (tualMods) 108 581 S -2 F -( entries. Each entry corresponds to a virtual modifier and provides the binding) 160.8 581 T -(of the virtual modifier to the real modifier bits. Each entry in the) 108 568 T -1 F -(vmods) 420.62 568 T -2 F -( array is a bitwise) 451.28 568 T -(inclusive OR of the legal modifier masks:) 108 555 T -5 F --0.6 (ShiftMask) 139.68 534 S --0.6 (LockMask) 139.68 520 S --0.6 (ControlMask) 139.68 506 S --0.6 (Mod1Mask) 139.68 492 S --0.6 (Mod2Mask) 139.68 478 S --0.6 (Mod3Mask) 139.68 464 S --0.6 (Mod4Mask) 139.68 450 S --0.6 (Mod5Mask) 139.68 436 S -2 F --0.09 (The) 108 416 P -1 F --0.09 (vmodmap) 129.57 416 P -2 F --0.09 ( member of the server map is similar to the) 176.22 416 P -1 F --0.09 (modmap) 384.6 416 P -2 F --0.09 ( array of the client map) 425.92 416 P --0.43 (\050see section 15.4\051, but is used to define the virtual modifier mapping for each key. Like the) 108 403 P -1 F -(modmap) 108 390 T -2 F -( member, it is indexed by keycode, and each entry is a mask representing the vir-) 149.33 390 T -(tual modifiers bound to the corresponding key:) 108 377 T -2 11 Q -(\245) 126 356.67 T -(Each of the bits in a) 139.68 356.67 T -1 F -(vmodmap) 230.11 356.67 T -2 F -( entry represents an inde) 272.88 356.67 T -(x into the) 380.24 356.67 T -1 F -(vmods) 424.55 356.67 T -2 F -( member) 452.65 356.67 T -(. That) 490.84 356.67 T --0.19 (is, bit 0 of a) 139.68 344.67 P -1 F --0.19 (vmodmap) 193.73 344.67 P -2 F --0.19 ( entry refers to inde) 236.5 344.67 P --0.19 (x 0 of the) 321.71 344.67 P -1 F --0.19 (vmods) 365.55 344.67 P -2 F --0.19 ( array) 393.66 344.67 P --0.19 (, bit 1 refers to inde) 418.1 344.67 P --0.19 (x 1,) 503.13 344.67 P -(and so on.) 139.68 332.67 T -(\245) 126 320.67 T --0.2 (If a bit is set in the) 139.68 320.67 P -1 F --0.2 (vmodmap) 222.91 320.67 P -2 F --0.2 ( entry for a k) 265.68 320.67 P --0.2 (e) 321.59 320.67 P --0.2 (y) 326.3 320.67 P --0.2 (, that k) 331.09 320.67 P --0.2 (e) 360.83 320.67 P --0.2 (y is bound to the corresponding vir-) 365.55 320.67 P -(tual modi\336er in the) 139.68 308.67 T -1 F -(vmods) 226.46 308.67 T -2 F -( array) 254.56 308.67 T -(.) 279.19 308.67 T -2 12 Q -(The) 108 290 T -1 F -(vmodmap) 129.66 290 T -2 F -( and) 176.32 290 T -1 F -(vmods) 199.64 290 T -2 F -( members of the server map are the \322master\323 virtual modifier) 230.3 290 T -(definitions. Xkb automatically propagates any changes to these fields to all other fields) 108 277 T -(that use virtual modifier mappings.) 108 264 T -FMENDPAGE -%%EndPage: "164" 176 -%%Page: "165" 177 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(165) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(16 Xkb Serv) 382.36 744.87 T -(er K) 443.3 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -2 12 Q -(The overall relationship of fields dealing with virtual modifiers in an Xkb keyboard) 108 712 T -(description are shown in Figure 16.2.) 108 699 T -3 F -(Figur) 204.04 320.75 T -(e 16.2 V) 232.49 320.75 T -(irtual Modi\336er Relationships) 273.04 320.75 T -0 F -(16.4.1) 72 292.75 T -(Obtaining Vir) 108 292.75 T -(tual Modi\336er Bindings fr) 183.59 292.75 T -(om the Ser) 321.36 292.75 T -(ver) 383.5 292.75 T -2 F --0.29 (T) 108 272.75 P --0.29 (o obtain a subset of the virtual modi\336er bindings \050the) 114.37 272.75 P -1 F --0.29 (vmods) 369.47 272.75 P -2 F --0.29 ( array\051 in a k) 400.13 272.75 P --0.29 (e) 460.16 272.75 P --0.29 (yboard descrip-) 465.31 272.75 P -(tion, use) 108 259.75 T -1 F -(XkbGetV) 151.67 259.75 T -(irtualMods) 194.1 259.75 T -2 F -(:) 247.44 259.75 T -2 11 Q -(Status) 108 239.42 T -3 F -(XkbGetV) 137.65 239.42 T -(irtualMods) 182.46 239.42 T -2 F -(\050) 235.02 239.42 T -1 F -(dpy) 238.68 239.42 T -2 F -(,) 253.85 239.42 T -1 F -( whic) 256.6 239.42 T -(h) 279.96 239.42 T -2 F -(,) 285.46 239.42 T -1 F -( xkb) 288.21 239.42 T -2 F -(\051) 306.23 239.42 T -(Display *) 126 226.42 T -1 F -(dpy) 234 226.42 T -2 F -(;) 249.88 226.42 T -(/* connection to serv) 306 226.42 T -(er */) 397.8 226.42 T -(unsigned int) 126 213.42 T -1 F -(whic) 234 213.42 T -(h) 254.61 213.42 T -2 F -(;) 260.11 213.42 T -(/* mask indicating virtual modi\336er bindings to get */) 306 213.42 T -(XkbDescPtr) 126 200.42 T -1 F -(xkb) 234 200.42 T -2 F -(;) 249.27 200.42 T -(/* Xkb description where results will be placed */) 306 200.42 T -1 12 Q --0.36 (XkbGetV) 108 180.75 P --0.36 (irtualMods) 150.43 180.75 P -2 F --0.36 ( sends a request to the server to obtain the) 203.77 180.75 P -1 F --0.36 (vmods) 404.15 180.75 P -2 F --0.36 ( entries for the virtual) 434.81 180.75 P --0.2 (modifiers specified in the mask,) 108 167.75 P -1 F --0.2 (which) 263.63 167.75 P -2 F --0.2 (, and waits for a reply. See section 7.1 for a descrip-) 292.3 167.75 P -(tion of how to determine the virtual modifier mask. For each bit set in) 108 154.75 T -1 F -(which) 446.3 154.75 T -2 F -(,) 474.97 154.75 T -1 F -(XkbGetV) 480.97 154.75 T -(ir-) 523.4 154.75 T -(tualMods) 108 141.75 T -2 F -( updates the corresponding virtual modifier definition in the) 153.34 141.75 T -1 F -(server->vmods) 443.64 141.75 T -2 F -(array of) 108 128.75 T -1 F -(xkb) 148.64 128.75 T -2 F -(. The) 165.3 128.75 T -1 F -(xkb) 192.96 128.75 T -2 F -( parameter must be a pointer to a valid Xkb keyboard description. If) 209.62 128.75 T -(successful,) 108 115.75 T -1 F -(XkbGetV) 163.32 115.75 T -(irtualMods) 205.75 115.75 T -2 F -( returns) 259.09 115.75 T -5 F --0.6 (Success) 298.42 115.75 S -2 F -(.) 344.62 115.75 T -(If the) 108 94.75 T -1 F -(server) 136.66 94.75 T -2 F -( map has not been allocated in the) 166.64 94.75 T -1 F -(xkb) 332.62 94.75 T -2 F -( parameter,) 349.27 94.75 T -1 F -(XkbGetV) 406.25 94.75 T -(irtualMods) 448.68 94.75 T -2 F -( allo-) 502.02 94.75 T -(cates and initializes it before obtaining the virtual modifier bindings.) 108 81.75 T -85.5 341.75 526.5 695 C -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -221.62 522.04 302.62 650.71 R -0.5 H -0 Z -0 X -0 0 0 1 0 0 0 K -N -221.88 496.54 302.88 514.54 R -7 X -V -2 10 Q -0 X -(XkbServerMapRec) 223.78 507.87 T -221.62 578.29 302.62 578.29 2 L -7 X -V -0 X -N -221.62 560.29 302.62 560.29 2 L -7 X -V -0 X -N -221.62 542.29 302.62 542.29 2 L -7 X -V -0 X -N -(...) 239.24 566.29 T -(vmods[15]) 239.24 549.29 T -(vmodmap) 239.24 531.29 T -221.38 615.04 302.38 615.04 2 L -7 X -V -0 X -N -221.62 597.04 302.62 597.04 2 L -7 X -V -0 X -N -221.62 633.04 302.62 633.04 2 L -7 X -V -0 X -N -(vmods[0]) 239.24 621.04 T -(vmods[1]) 239.24 603.04 T -(vmods[2]) 239.08 586.48 T -(...) 238.96 638.35 T -207.84 636.96 207.84 639.93 218.22 636.96 207.84 633.98 4 Y -N -207.84 636.96 207.84 639.93 218.22 636.96 207.84 633.98 4 Y -V -170.38 520.38 194.25 520.38 194.25 636.96 207.59 636.96 4 L -N -(KeyCode) 296.99 677.54 T -319.12 603.96 319.12 606.85 329.22 603.96 319.12 601.07 4 Y -N -319.12 603.96 319.12 606.85 329.22 603.96 319.12 601.07 4 Y -V -303.13 532.71 316.62 532.71 316.62 603.96 318.88 603.96 4 L -N -346.12 604.79 427.12 622.79 R -7 X -V -0 X -N -342.12 601.04 423.12 619.04 R -7 X -V -0 X -N -337.88 597.54 418.88 615.54 R -7 X -V -0 X -N -328.38 539.29 432.62 585.04 R -7 X -V -0 X -(unsigned short) 351.2 578.37 T -(\050one per key\051) 353.85 568.37 T --0.22 (Defines virtual modifiers) 330.23 558.37 P -(for each key.) 354.54 548.37 T -333.88 593.79 414.88 611.79 R -7 X -V -0 X -N -327.59 616.21 327.59 619.18 337.97 616.21 327.59 613.23 4 Y -8 X -N -327.59 616.21 327.59 619.18 337.97 616.21 327.59 613.23 4 Y -V -314.88 668.71 314.88 616.21 327.34 616.21 3 L -N -87.88 454.54 168.88 546.46 R -0 X -N -87.12 430.79 168.12 448.79 R -7 X -V -0 X -(XkbDescRec) 101.25 442.12 T -87.88 474.04 168.88 474.04 2 L -7 X -V -0 X -N -(...) 105.49 462.04 T -87.62 510.79 168.62 510.79 2 L -7 X -V -0 X -N -87.87 492.79 168.87 492.79 2 L -7 X -V -0 X -N -87.87 528.79 168.87 528.79 2 L -7 X -V -0 X -N -(serv) 105.49 516.79 T -(er) 122 516.79 T -(...) 105.49 498.79 T -(names) 105.33 482.23 T -(...) 105.21 534.1 T -442.63 363.29 523.63 491.96 R -N -442.88 337.79 523.88 355.79 R -7 X -V -0 X -(XkbNamesRec) 453.11 349.12 T -442.63 419.54 523.63 419.54 2 L -7 X -V -0 X -N -442.63 401.54 523.63 401.54 2 L -7 X -V -0 X -N -442.63 383.54 523.63 383.54 2 L -7 X -V -0 X -N -(...) 460.24 407.54 T -(vmods[15]) 460.24 390.54 T -(...) 460.24 372.54 T -442.38 456.29 523.38 456.29 2 L -7 X -V -0 X -N -442.63 438.29 523.63 438.29 2 L -7 X -V -0 X -N -442.63 474.29 523.63 474.29 2 L -7 X -V -0 X -N -(vmods[0]) 460.24 462.29 T -(vmods[1]) 460.24 444.29 T -(vmods[2]) 460.08 427.73 T -(...) 459.96 479.6 T -431.75 447.46 431.75 449.82 439.97 447.46 431.75 445.1 4 Y -8 X -N -431.75 447.46 431.75 449.82 439.97 447.46 431.75 445.1 4 Y -V -418.38 610.96 429.62 610.96 429.62 447.46 431.5 447.46 4 L -N -208.94 604.46 208.94 607.43 219.32 604.46 208.94 601.48 4 Y -N -208.94 604.46 208.94 607.43 219.32 604.46 208.94 601.48 4 Y -V -428.25 489.71 204.75 489.71 204.75 604.46 208.69 604.46 4 L -N -102.37 567.66 172.87 611.91 R -7 X -V -0 X -(Define real) 115.27 605.25 T --0.08 (modifiers bound) 104.71 595.25 P -(to virtual) 119.43 585.25 T -(modifier) 120.4 575.25 T -209.5 604.25 209.5 607.14 219.59 604.25 209.5 601.36 4 Y -N -209.5 604.25 209.5 607.14 219.59 604.25 209.5 601.36 4 Y -V -207 604.25 209.25 604.25 2 L -N -327.98 616.12 327.98 618.99 337.97 616.12 327.98 613.26 4 Y -N -327.98 616.12 327.98 618.99 337.97 616.12 327.98 613.26 4 Y -V -325.5 616.12 327.73 616.12 2 L -N -431.5 448.18 431.58 450.89 440.97 447.9 431.42 445.46 4 Y -N -431.5 448.18 431.58 450.89 440.97 447.9 431.42 445.46 4 Y -V -429.13 448.25 431.25 448.19 2 L -N -189 634.5 M - 168 633.79 187.5 599.03 177 588.39 D -N -189 542.75 M - 168 543.46 187.5 578.22 177 588.86 D -N -426.84 482.79 426.84 485.76 437.22 482.79 426.84 479.81 4 Y -N -426.84 482.79 426.84 485.76 437.22 482.79 426.84 479.81 4 Y -V -169.5 482.79 426.59 482.79 2 L -7 X -V -0 X -N -0 0 612 792 C -FMENDPAGE -%%EndPage: "165" 177 -%%Page: "166" 178 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(166) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(16 Xkb Serv) 382.36 744.87 T -(er K) 443.3 744.87 T -(e) 462.26 744.87 T -(yboard Mapping) 466.98 744.87 T -2 12 Q --0.38 (If the server does not have a compatible version of Xkb, or the Xkb extension has not been) 108 712 P -(properly initialized,) 108 699 T -1 F -(XkbGetV) 205.66 699 T -(irtualMods) 248.09 699 T -2 F -( returns) 301.43 699 T -5 F --0.6 (BadMatch) 340.75 699 S -2 F -(. Any errors in allocation) 393.55 699 T -(cause) 108 686 T -1 F -(XkbGetV) 137.65 686 T -(irtualMods) 180.08 686 T -2 F -(to return) 236.42 686 T -5 F --0.6 (BadAlloc) 280.42 686 S -2 F -(.) 333.22 686 T -0 F -(16.4.2) 72 661 T -(Obtaining P) 108 661 T -(er) 174.98 661 T -(-K) 186.08 661 T -(e) 198.56 661 T -(y Vir) 205.06 661 T -(tual Modi\336er Mappings fr) 231.31 661 T -(om the Ser) 373.75 661 T -(ver) 435.89 661 T -2 F -(T) 108 641 T -(o obtain the virtual modi\336er map \050the) 114.37 641 T -1 F -(vmodmap) 297.36 641 T -2 F -( array\051 for a subset of the k) 344.02 641 T -(e) 473.52 641 T -(ys in a k) 478.67 641 T -(e) 518.88 641 T -(y-) 524.03 641 T -(board description, use) 108 628 T -1 F -(XkbGetK) 216.65 628 T -(e) 260.22 628 T -(yV) 265.19 628 T -(irtualModMap) 276.96 628 T -2 F -(:) 347.63 628 T -2 11 Q -(Status) 108 607.67 T -3 F -(XkbGetK) 137.65 607.67 T -(eyV) 183.21 607.67 T -(irtualModMap) 201.13 607.67 T -2 F -(\050) 271.4 607.67 T -1 F -(dpy) 275.07 607.67 T -2 F -(,) 290.24 607.67 T -1 F -( \336r) 292.99 607.67 T -(st) 305.41 607.67 T -2 F -(,) 312.74 607.67 T -1 F -( num) 315.49 607.67 T -2 F -(,) 337.18 607.67 T -1 F -( xkb) 339.93 607.67 T -2 F -(\051) 357.95 607.67 T -(Display *) 126 594.67 T -1 F -(dpy) 234 594.67 T -2 F -(;) 249.88 594.67 T -(/* connection to serv) 306 594.67 T -(er */) 397.8 594.67 T -(unsigned int) 126 581.67 T -1 F -(\336r) 234 581.67 T -(st) 243.67 581.67 T -2 F -(;) 251.01 581.67 T -(/* k) 306 581.67 T -(e) 322.7 581.67 T -(ycode of \336rst k) 327.42 581.67 T -(e) 393.6 581.67 T -(y to fetch */) 398.32 581.67 T -(unsigned int) 126 568.67 T -1 F -(num) 234 568.67 T -2 F -(;) 252.94 568.67 T -(/* # k) 306 568.67 T -(e) 330.95 568.67 T -(ys for which virtual mod maps are desired */) 335.67 568.67 T -(XkbDescPtr) 126 555.67 T -1 F -(xkb) 234 555.67 T -2 F -(;) 249.27 555.67 T -(/* Xkb description where results will be placed */) 306 555.67 T -1 12 Q -(XkbGetK) 108 536 T -(e) 151.57 536 T -(yV) 156.54 536 T -(irutalModmap) 168.31 536 T -2 F -(sends a request to the server to obtain the virtual modifier) 240.65 536 T -(mappings for) 108 523 T -1 F -(num) 174.66 523 T -2 F -( keys on the keyboard starting with key) 195.32 523 T -1 F -(first) 387.3 523 T -2 F -(. It waits for a reply and) 406.64 523 T --0.03 (returns the virtual modifier mappings in the) 108 510 P -1 F --0.03 (server) 320.14 510 P -2 F --0.03 (->) 350.12 510 P -1 F --0.03 (vmodmap) 360.89 510 P -2 F --0.03 ( array of) 407.54 510 P -1 F --0.03 (xkb) 451.11 510 P -2 F --0.03 (. If successful,) 467.77 510 P -1 F -(XkbGetK) 108 497 T -(e) 151.57 497 T -(yV) 156.54 497 T -(irtualModMap) 168.31 497 T -2 F -( returns) 238.98 497 T -5 F --0.6 (Success) 278.3 497 S -2 F -(. The) 324.51 497 T -1 F -(xkb) 352.17 497 T -2 F -( parameter must be a pointer to a) 368.82 497 T -(valid Xkb keyboard description) 108 484 T --0.02 (If the) 108 463 P -1 F --0.02 (server) 136.62 463 P -2 F --0.02 ( map in the) 166.61 463 P -1 F --0.02 (xkb) 223.2 463 P -2 F --0.02 ( parameter has not been allocated,) 239.86 463 P -1 F --0.02 (XkbGetK) 406.04 463 P --0.02 (e) 449.61 463 P --0.02 (yV) 454.58 463 P --0.02 (irtualModMap) 466.35 463 P -2 F -(allocates and initializes it before obtaining the virtual modifier mappings.) 108 450 T --0.38 (If the server does not have a compatible version of Xkb, or the Xkb extension has not been) 108 429 P -(properly initialized,) 108 416 T -1 F -(XkbGetK) 205.66 416 T -(e) 249.23 416 T -(yV) 254.2 416 T -(irtualModMap) 265.97 416 T -2 F -( returns) 336.64 416 T -5 F --0.6 (BadMatch) 375.96 416 S -2 F -(. If) 428.76 416 T -1 F -(num) 445.75 416 T -2 F -( is less than 1) 466.42 416 T -(or greater than) 108 403 T -5 F --0.6 (XkbMaxKeyCount) 180.97 403 S -2 F -(,) 273.37 403 T -1 F -(XkbGetK) 279.37 403 T -(e) 322.95 403 T -(yV) 327.91 403 T -(irtualModMap) 339.69 403 T -2 F -( returns) 410.35 403 T -5 F --0.6 (BadValue) 449.68 403 S -2 F -(. If any) 502.48 403 T -(allocation errors occur,) 108 390 T -1 F -(XkbGetK) 221.96 390 T -(e) 265.54 390 T -(yV) 270.5 390 T -(irtualModMap) 282.28 390 T -2 F -( returns) 352.94 390 T -5 F --0.6 (BadAlloc) 392.27 390 S -2 F -(.) 445.07 390 T -FMENDPAGE -%%EndPage: "166" 178 -%%Page: "167" 179 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(167) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(17 The Xkb Compatibility Map) 395.16 744.87 T -0 14 Q -(17) 72 710.67 T -(The Xkb Compatibility Map) 108 710.67 T -2 12 Q --0.19 (As shown in Figure 17.1, the X server is normally dealing with more than one client, each) 108 688 P -(of which may be receiving events from the keyboard, and each of which may issue) 108 675 T --0.33 (requests to modify the keyboard in some manner. Each client may be either Xkb-unaware,) 108 662 P -(Xkb-capable, or Xkb-aware. The server itself may be either Xkb-aware or Xkb-unaware.) 108 649 T -(If the server is Xkb-unaware, Xkb state and keyboard mappings are not involved in any) 108 636 T -(manner, and Xkb-aware clients may not issue Xkb requests to the server. If the server is) 108 623 T --0.21 (Xkb-aware, the server must be able to deliver events and accept requests in which the key-) 108 610 P -(board state and mapping are compatible with the mode in which the client is operating.) 108 597 T -(Consequently, for some situations, conversions must be made between Xkb state / key-) 108 584 T -(board mappings and core protocol state / keyboard mappings, and vice versa.) 108 571 T -3 F -(Figur) 180.23 258 T -(e 17.1 Ser) 208.68 258 T -(v) 258.22 258 T -(er Interaction with T) 264.1 258 T -(ypes of Clients) 370.86 258 T -2 F --0.06 (In addition to these situations involving a single server, there are cases where a client that) 108 230 P -(deals with multiple servers may need to configure keyboards on different servers to be) 108 217 T -(similar and the different servers may not all be Xkb-aware. Finally, a client may be deal-) 108 204 T -(ing with descriptions of keyboards \050files, and so on\051 that are based on core protocol and) 108 191 T -(therefore may need to be able to map these descriptions to Xkb descriptions.) 108 178 T --0.42 (An Xkb-aware server maintains keyboard state and mapping as an Xkb keyboard state and) 108 157 P -(an Xkb keyboard mapping plus a compatibility map used to convert from Xkb compo-) 108 144 T --0.1 (nents to core components and vice versa. In addition, the server also maintains a core key-) 108 131 P -(board mapping that approximates the Xkb keyboard mapping. The core keyboard) 108 118 T -(mapping may be updated piecemeal, on a per-key basis. When the server receives a core) 108 105 T -(protocol) 108 92 T -5 F --0.6 (ChangeKeyboardMapping) 151 92 S -2 F -( or) 289.6 92 T -5 F --0.6 (SetModifierMapping) 305.6 92 S -2 F -( request, it updates its) 424.4 92 T --0.05 (core keyboard mapping, then uses the compatibility map to update its Xkb keyboard map-) 108 79 P -70.31 279 541.69 567 C -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -453.81 495 520.31 504 R -7 X -0 0 0 1 0 0 0 K -V -2 10 Q -0 X -(Core protocol) 459.43 497.33 T -227.79 496.4 397.31 541.71 R -7 X -V -0 X -(Xkb-aware) 290.34 535.04 T -(Server) 299.5 525.04 T -(Maintains Xkb State and Mapping,) 242.41 515.04 T -(core kb mapping, but not core kb state) 235.89 505.04 T -89.37 288 197.37 343 R -7 X -V -0.5 H -0 Z -0 X -N -92.42 292.3 194.31 338.7 R -7 X -V -0 X -(Xkb-unaware) 116.16 332.04 T -(Client) 131.14 322.04 T -(Core kb Xlib) 117.26 312.04 T -(Xkb-unaware App) 106.3 302.04 T -272.33 479.02 270.23 481.12 279.67 486.36 274.44 476.92 4 Y -N -272.33 479.02 270.23 481.12 279.67 486.36 274.44 476.92 4 Y -V -136.31 343 272.16 478.84 2 L -N -153.29 350.98 155.4 348.88 145.95 343.64 151.19 353.08 4 Y -N -153.29 350.98 155.4 348.88 145.95 343.64 151.19 353.08 4 Y -V -289.31 487 153.47 351.16 2 L -N -470.33 350.98 472.44 353.08 477.67 343.64 468.23 348.88 4 Y -N -470.33 350.98 472.44 353.08 477.67 343.64 468.23 348.88 4 Y -V -334.31 487 470.16 351.16 2 L -N -351.29 479.02 349.19 476.92 343.95 486.36 353.4 481.12 4 Y -N -351.29 479.02 349.19 476.92 343.95 486.36 353.4 481.12 4 Y -V -487.31 343 351.47 478.84 2 L -N -101.83 506.99 159.58 522.99 R -7 X -V -0 X -N -209.97 516 209.97 518.98 220.34 516 209.97 513.02 4 Y -N -209.97 516 209.97 518.98 220.34 516 209.97 513.02 4 Y -V -161.31 516 209.72 516 2 L -N -307.31 354.28 310.29 354.28 307.31 343.9 304.34 354.28 4 Y -N -307.31 354.28 310.29 354.28 307.31 343.9 304.34 354.28 4 Y -V -307.31 487 307.31 354.53 2 L -N -316.31 475.72 313.34 475.72 316.31 486.1 319.29 475.72 4 Y -N -316.31 475.72 313.34 475.72 316.31 486.1 319.29 475.72 4 Y -V -316.31 343 316.31 475.47 2 L -N -222.8 489.68 402.3 548.43 R -N -258.31 288 366.31 342 R -7 X -V -0 X -N -261.37 292.22 363.26 337.78 R -7 X -V -0 X -(Xkb-capable) 286.77 331.11 T -(Client) 300.09 321.11 T -(Xkb-aware Xlib) 279.96 311.11 T -(Xkb-unaware App) 275.24 301.11 T -429.31 288 537.31 342 R -7 X -V -0 X -N -432.37 292.22 534.26 337.78 R -7 X -V -0 X -(Xkb-aware) 461.1 331.11 T -(Client) 471.09 321.11 T -(Xkb-aware Xlib) 450.96 311.11 T -(Xkb-aware App) 451.24 301.11 T -184.5 406.75 197.25 419.5 6.38 RR -V -N -212.45 434.59 210.37 436.71 219.85 441.86 214.54 432.46 4 Y -N -212.45 434.59 210.37 436.71 219.85 441.86 214.54 432.46 4 Y -V -190.75 413.25 212.28 434.41 2 L -N -409.96 452.88 407.85 450.78 402.64 460.23 412.07 454.97 4 Y -N -409.96 452.88 407.85 450.78 402.64 460.23 412.07 454.97 4 Y -V -428 434.75 410.14 452.7 2 L -N -(config) 174 427.25 T -480.5 357.5 493.25 370.25 6.38 RR -V -N -468.48 382.27 466.38 380.17 461.14 389.61 470.58 384.37 4 Y -N -468.48 382.27 466.38 380.17 461.14 389.61 470.58 384.37 4 Y -V -486.75 364 468.66 382.09 2 L -N -(config) 476.75 378.75 T -202.25 381.5 215 394.25 6.38 RR -V -N -187.68 367.53 189.76 365.41 180.27 360.26 185.59 369.65 4 Y -N -187.68 367.53 189.76 365.41 180.27 360.26 185.59 369.65 4 Y -V -208.5 388 187.85 367.71 2 L -N -(state) 199.25 368.25 T -441.06 495 453.81 507.75 6.38 RR -V -N -320 357.25 332.75 370 6.38 RR -V -N -326.25 388.46 323.27 388.46 326.25 398.84 329.23 388.46 4 Y -N -326.25 388.46 323.27 388.46 326.25 398.84 329.23 388.46 4 Y -V -326.25 363.75 326.25 388.21 2 L -N -(config) 332 375.5 T -(config) 422.25 448.25 T -404.11 367.86 423.61 386.24 R -N -(Xkb) 405.25 373.87 T -439.31 352.89 441.39 355.02 446.73 345.63 437.23 350.76 4 Y -N -439.31 352.89 441.39 355.02 446.73 345.63 437.23 350.76 4 Y -V -424.13 367.75 439.13 353.07 2 L -N -(state) 405.5 354 T -291.56 363.04 294.54 363.04 291.56 352.66 288.59 363.04 4 Y -N -291.56 363.04 294.54 363.04 291.56 352.66 288.59 363.04 4 Y -V -291.56 378.75 291.56 363.29 2 L -N -(state) 267.56 366.93 T -453.81 473.25 520.31 482.25 R -7 X -V -0 X -(Xkb protocol) 460.54 475.58 T -331.24 462.75 343.99 475.5 6.38 RR -V -N -352.96 453.54 355.08 455.63 360.24 446.14 350.84 451.45 4 Y -N -352.96 453.54 355.08 455.63 360.24 446.14 350.84 451.45 4 Y -V -337.49 469.25 352.78 453.72 2 L -N -(kb) 330.99 450 T -287.24 442.75 299.99 455.5 6.38 RR -V -N -293.49 429.03 296.47 429.03 293.49 418.65 290.52 429.03 4 Y -N -293.49 429.03 296.47 429.03 293.49 418.65 290.52 429.03 4 Y -V -293.49 449.25 293.49 429.28 2 L -N -(mapping) 318.24 441.47 T -259.24 443.25 271.99 456 6.38 RR -V -N -244.64 428.44 246.77 426.36 237.38 421.02 242.52 430.52 4 Y -N -244.64 428.44 246.77 426.36 237.38 421.02 242.52 430.52 4 Y -V -265.49 449.75 244.82 428.62 2 L -N -(kb) 262.74 430.5 T -(mapping) 249.99 421.97 T -(kb) 365.62 407.12 T -(mapping) 352.87 398.6 T -393.76 404.46 395.89 406.54 400.99 397.02 391.62 402.39 4 Y -N -393.76 404.46 395.89 406.54 400.99 397.02 391.62 402.39 4 Y -V -378.88 419.75 393.58 404.64 2 L -N -359.62 419.06 379.12 437.44 R -N -(Xkb) 360.77 425.08 T -434.63 468.56 454.13 486.94 R -N -(Xkb) 435.77 474.58 T -427.88 416.06 447.38 434.44 R -N -(Xkb) 429.02 422.08 T -281.62 378.69 301.12 397.06 R -N -(Xkb) 282.77 384.7 T -(Keyboard) 111 510.5 T -(Keycode) 168.95 523.5 T -0 0 612 792 C -FMENDPAGE -%%EndPage: "167" 179 -%%Page: "168" 180 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(168) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(17 The Xkb Compatibility Map) 395.16 744.87 T -2 12 Q -(ping. When the server receives an) 108 712 T -5 F --0.6 (XkbSetMap) 273.61 712 S -2 F -( request, it updates those portions of its) 333.01 712 T --0.26 (Xkb keyboard mapping specified by the request, then uses its compatibility map to update) 108 699 P -(the corresponding parts of its core keyboard map. Consequently, the server\325s Xkb key-) 108 686 T --0.02 (board map and also its core keyboard map may contain components that were set directly) 108 673 P -(and others that were computed. Figure 17.2 illustrates these relationships.) 108 660 T -0 F -(Note) 126 639.67 T -2 11 Q -(The core k) 162 639.67 T -(e) 208.93 639.67 T -(yboard map is contained only in the serv) 213.65 639.67 T -(er) 392.21 639.67 T -(, not in an) 400.32 639.67 T -(y client-side data) 444.15 639.67 T -(structures.) 162 627.67 T -3 12 Q -(Figur) 119.05 360.75 T -(e 17.2 Ser) 147.5 360.75 T -(v) 197.03 360.75 T -(er Deri) 202.91 360.75 T -(v) 239.11 360.75 T -(ation of State and K) 244.99 360.75 T -(eyboard Mapping Components) 347.36 360.75 T -2 F -(There are three kinds of compatibility transformations made by the server:) 108 332.75 T -3 F -(1.) 108 311.75 T -(Xkb State to Core State) 126 311.75 T -2 F --0.19 (Keyboard state information reported to a client in the state field of various core events) 126 290.75 P -(may be translated from the Xkb keyboard state maintained by the server, which) 126 277.75 T -(includes a group number, to core protocol state, which does not.) 126 264.75 T -(In addition, whenever the Xkb state is retrieved, the) 126 243.75 T -1 F -(compat_state) 377.62 243.75 T -2 F -(,) 441.61 243.75 T -1 F -(compat_grab_mods) 126 230.75 T -2 F -(, and) 221.33 230.75 T -1 F -(compat_lookup_mods) 247.66 230.75 T -2 F -( fields of the) 352.98 230.75 T -5 F --0.6 (XkbStateRec) 416.3 230.75 S -2 F -( returned) 488.9 230.75 T -(indicate the result of applying the compatibility map to the current Xkb state in the) 126 217.75 T -(server.) 126 204.75 T -3 F -(2.) 108 183.75 T -(Core Keyboard Mapping to Xkb Keyboard Mapping) 126 183.75 T -2 F -(After core protocol requests received by the server to change the keyboard mapping) 126 162.75 T -(\050) 126 149.75 T -5 F --0.6 (ChangeKeyboardMapping) 130 149.75 S -2 F -( and) 268.6 149.75 T -5 F --0.6 (SetModifierMapping) 291.93 149.75 S -2 F -(\051 have been applied to the) 410.73 149.75 T -(server\325s core keyboard map, the results must be transformed to achieve an equivalent) 126 136.75 T -(change of the Xkb keyboard mapping maintained by the server.) 126 123.75 T -3 F -(3.) 108 102.75 T -(Xkb Keyboard Mapping to Core Keyboard Mapping) 126 102.75 T -2 F -(After Xkb protocol requests received by the server to change the keyboard mapping) 126 81.75 T -(\050) 126 68.75 T -5 F --0.6 (XkbSetMap) 130 68.75 S -2 F -(\051 have been applied to the server\325s Xkb keyboard map, the results are) 189.4 68.75 T -69.05 381.75 542.95 624 C -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -78.05 507 204.05 589.53 R -7 X -0 0 0 1 0 0 0 K -V -2 10 Q -0 X -(Base Modifiers and Group) 87.86 582.86 T -(Locked Modifiers and Group) 82.59 572.86 T -(Latched Modifiers and Group) 81.48 562.86 T -(Core Pointer Button State) 89.52 552.86 T -(ServerInternalModifiers) 92.73 532.86 T -(IgnoreLocksModifiers) 96.06 522.86 T -(IgnoreGroupLock) 104.95 512.86 T -78.05 471 537.05 615 R -0.5 H -0 Z -N -78.05 435 257.55 462 R -N -154.01 394 258.05 421 R -N -349.37 394.95 438.87 421.95 R -N -240.05 557.95 294.05 588 R -7 X -V -0 X -(Effective) 248.72 581.33 T -(Modifiers) 247.33 571.33 T -(and Group) 245.8 561.33 T -415.8 550.88 533.55 580.93 R -7 X -V -0 X -(Compatibility State) 435.64 574.26 T -(Compatibility Lookup State) 418.83 564.26 T -(Compatibility Grab State) 424.39 554.26 T -204.75 586.25 213 586.25 213 566 204.75 566 4 L -N -227.97 575.75 227.97 578.72 238.34 575.75 227.97 572.77 4 Y -N -227.97 575.75 227.97 578.72 238.34 575.75 227.97 572.77 4 Y -V -204.75 575.75 227.72 575.75 2 L -N -204.5 535.5 212.75 535.5 212.75 515.25 204.5 515.25 4 L -N -205.25 525.75 303.75 525.75 2 L -N -294.75 575.75 303.75 575.75 303.75 525.5 3 L -N -313.47 550.25 313.47 553.22 323.85 550.25 313.47 547.27 4 Y -N -313.47 550.25 313.47 553.22 323.85 550.25 313.47 547.27 4 Y -V -300 550.25 313.22 550.25 2 L -N -204.75 538.25 300 538.25 300 574.25 294.38 574.25 4 L -N -404.22 577.62 404.22 580.6 414.6 577.62 404.22 574.65 4 Y -N -404.22 577.62 404.22 580.6 414.6 577.62 404.22 574.65 4 Y -V -294.75 577.62 403.97 577.62 2 L -N -403.84 567.5 403.84 570.47 414.22 567.5 403.84 564.52 4 Y -N -403.84 567.5 403.84 570.47 414.22 567.5 403.84 564.52 4 Y -V -393 549.12 393 567.5 403.59 567.5 3 L -N -403.84 556.25 403.84 559.22 414.22 556.25 403.84 553.27 4 Y -N -403.84 556.25 403.84 559.22 414.22 556.25 403.84 553.27 4 Y -V -390.38 540.12 397.5 540.12 397.5 556.25 403.59 556.25 4 L -N -313.84 537.12 313.84 540.1 324.22 537.12 313.84 534.15 4 Y -N -313.84 537.12 313.84 540.1 324.22 537.12 313.84 534.15 4 Y -V -303.75 537.12 313.59 537.12 2 L -N -336.72 411.12 336.72 414.1 347.1 411.12 336.72 408.15 4 Y -N -336.72 411.12 336.72 414.1 347.1 411.12 336.72 408.15 4 Y -V -258.38 411.12 336.47 411.12 2 L -N -269.29 406.25 269.29 403.27 258.91 406.25 269.29 409.22 4 Y -N -269.29 406.25 269.29 403.27 258.91 406.25 269.29 409.22 4 Y -V -348 406.25 269.54 406.25 2 L -N -(Xkb State) 286.45 600 T -3 12 Q -(.) 211.55 524.66 T -(.) 385.92 576.53 T -(.) 391.8 548.41 T -(.) 389.17 539.28 T -(.) 289.05 405.28 T -(.) 310.3 409.9 T -(.) 302.55 536.16 T -(.) 299.05 549.28 T -(.) 212.05 574.79 T -2 10 Q -(LookupState) 327.75 547 T -(Grab State) 330.75 533.87 T -383.25 549.62 393 549.62 2 L -N -393 549.62 393 454.62 2 L -N -393 454.5 258 454.5 2 L -N -383.63 540.25 390.75 540.25 2 L -N -390.38 540.25 390.38 457.62 2 L -N -390.38 457.5 258.38 457.5 2 L -N -258.75 460.12 387.38 460.12 2 L -N -387 460.25 387 577.75 2 L -N -(Compatibility Map) 129.62 451.77 T -(Explicit Override Controls) 114.5 438.49 T -(Core Keyboard Map) 353.05 404 T -(Xkb Keyboard Map) 166.06 403.05 T -258.75 448.75 290.63 448.75 2 L -N -311.5 451.62 311.5 411.12 2 L -N -258.75 451.75 312 451.75 2 L -N -290.38 448.62 290.38 406.25 2 L -N -3 12 Q -(.) 289.17 439.53 T -258.75 440.37 290.25 440.37 2 L -N -0 0 612 792 C -FMENDPAGE -%%EndPage: "168" 180 -%%Page: "169" 181 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(169) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(17 The Xkb Compatibility Map) 395.16 744.87 T -2 12 Q --0.14 (transformed to achieve an approximately equivalent change to the core keyboard map-) 126 712 P -(ping maintained by the server.) 126 699 T --0.05 (This chapter discusses how a client may modify the compatibility map so that subsequent) 108 678 P -(transformations have a particular result.) 108 665 T -0 F -(17.1) 72 640 T -(The XkbCompatMap Structure) 108 640 T -2 F -(All configurable aspects of mapping Xkb state and configuration to and from core proto-) 108 620 T -(col state and configuration are defined by a compatibility map, contained in an) 108 607 T -5 F --0.6 (XkbCom-) 488.6 607 S --0.6 (patMap) 108 594 S -2 F -( structure; plus a set of explicit override controls used to prevent particular) 147.6 594 T -(components of type 2 \050core-to-Xkb keyboard mapping\051 transformations from automati-) 108 581 T --0.5 (cally occurring. These explicit override controls are maintained in a separate data structure) 108 568 P -(discussed in section 16.3.) 108 555 T -(The) 108 534 T -1 F -(compat) 129.66 534 T -2 F -( member of an Xkb keyboard description \050) 164.99 534 T -5 F --0.6 (XkbDescRec) 369.28 534 S -2 F -(\051 points to the) 435.28 534 T -5 F --0.6 (XkbCompatMap) 108 521 S -2 F -( structure:) 187.2 521 T -2 11 Q -(typedef struct _XkbCompatMapRec {) 126 500.67 T -(XkbSymInterpretPtr) 144 487.67 T -(sym_interpret;) 252.75 487.67 T -(/* symbol based k) 342 487.67 T -(e) 421.64 487.67 T -(y semantics*/) 426.36 487.67 T -(XkbModsRec) 144 474.67 T -(groups[XkbNumKbdGroups];) 252.75 474.67 T -(/* group => modi\336er map */) 414 474.67 T -(unsigned short) 144 461.67 T -(num_si;) 252.75 461.67 T -(/* # structures used in) 342 461.67 T -1 F -(sym_interpret) 441.3 461.67 T -2 F -( */) 502.4 461.67 T -(unsigned short) 144 448.67 T -(size_si;) 252.75 448.67 T -(/* # structures allocated in) 342 448.67 T -1 F -(sym_interpret) 460.84 448.67 T -2 F -( */) 521.95 448.67 T -(}) 126 435.67 T -3 F -(XkbCompatMapRec) 134.03 435.67 T -2 F -(, *XkbCompatMapPtr;) 231.8 435.67 T -3 12 Q -(Figur) 192.1 191 T -(e 17.3 Xkb Compatibility Data Structur) 220.55 191 T -(es) 423.66 191 T -2 F -(The subsections that follow discuss how the compatibility map and explicit override con-) 108 163 T -(trols are used in each of the three cases where compatibility transformations are made.) 108 150 T -0 F -(17.1.1) 72 125 T -(Xkb State to Core Pr) 108 125 T -(otocol State T) 223.79 125 T -(ransf) 302.17 125 T -(ormation) 331.27 125 T -2 F -(As shown in Figure 17.3, there are four) 108 105 T -1 F -(gr) 299.96 105 T -(oup compatibility maps) 310.09 105 T -2 F -( \050contained in) 422.76 105 T -1 F -(groups) 491.75 105 T -2 F --0.19 ([0..3]\051 in the) 108 92 P -5 F --0.42 -0.6 (XkbCompatMapRec) 170.42 92 B -2 F --0.19 ( structure, one per possible Xkb group. Each group com-) 269.42 92 P -(patibility map is a modifier definition \050see section 7.2 for a description of modifier defini-) 108 79 T -87.38 212 524.62 412 C -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -222.88 262.75 303.88 280.75 R -7 X -0 0 0 1 0 0 0 K -V -2 10 Q -0 X -(num_si) 248.65 274.08 T -222.38 266.75 303.38 266.75 2 L -0.5 H -0 Z -N -222.38 244.75 303.38 262.75 R -7 X -V -0 X -(size_si) 249.26 256.08 T -303.38 301.75 375.38 346.75 R -7 X -V -0 X -(Group) 326.6 340.08 T -(compatibility) 312.7 330.08 T -(maps) 328.82 320.08 T -222.88 334.75 303.88 352.75 R -7 X -V -0 X -(groups[0]) 243.93 346.08 T -222.38 338.75 303.38 338.75 2 L -N -222.88 316.75 303.88 334.75 R -7 X -V -0 X -(groups[1]) 243.93 328.08 T -222.38 320.75 303.38 320.75 2 L -N -222.88 298.75 303.88 316.75 R -7 X -V -0 X -(groups[2]) 243.93 310.08 T -222.38 302.75 303.38 302.75 2 L -N -222.88 280.75 303.88 298.75 R -7 X -V -0 X -(groups[3]) 243.93 292.08 T -222.38 284.75 303.38 284.75 2 L -N -114.38 377.75 195.38 395.75 R -7 X -V -0 X -(compat) 140.15 389.08 T -114.38 320.75 195.38 410.75 R -N -114.38 381.75 195.38 381.75 2 L -N -114.38 399.75 195.38 399.75 2 L -N -114.38 293.75 195.38 311.75 R -7 X -V -0 X -(XkbDescRec) 128.49 305.08 T -221.88 352.75 302.88 370.75 R -7 X -V -0 X -(sym_interpret) 234.6 364.08 T -221.88 247.75 302.88 374.75 R -N -221.88 356.75 302.88 356.75 2 L -N -221.88 374.75 302.88 374.75 2 L -N -208.38 226.75 316.38 244.75 R -7 X -V -0 X -(XkbCompatMapRec) 220.99 238.08 T -393.38 238.75 474.38 346.75 R -N -375.38 213.75 492.38 231.75 R -7 X -V -0 X -(XkbSymInterpretRec\050s\051) 385.83 225.08 T -258.38 386.04 261.35 386.04 258.38 375.66 255.4 386.04 4 Y -N -258.38 386.04 261.35 386.04 258.38 375.66 255.4 386.04 4 Y -V -195.38 392.75 258.38 392.75 258.38 386.29 3 L -N -429.38 358.04 432.35 358.04 429.38 347.66 426.4 358.04 4 Y -N -429.38 358.04 432.35 358.04 429.38 347.66 426.4 358.04 4 Y -V -303.38 364.75 429.38 364.75 429.38 358.29 3 L -N -393.38 328.75 474.38 328.75 2 L -N -393.38 310.75 474.38 310.75 2 L -N -393.38 292.75 474.38 292.75 2 L -N -393.38 274.75 474.38 274.75 2 L -N -393.38 256.75 474.38 256.75 2 L -N -(0) 384.38 328.75 T -(num_si - 1) 344.38 274.75 T -(size_si - 1) 346.38 240.75 T -0 0 612 792 C -FMENDPAGE -%%EndPage: "169" 181 -%%Page: "170" 182 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(170) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(17 The Xkb Compatibility Map) 395.16 744.87 T -2 12 Q --0.02 (tions\051. The) 108 712 P -1 F --0.02 (mask) 162.96 712 P -2 F --0.02 ( component of the definition specifies which real modifiers should be set) 187.62 712 P -(in the core protocol state field when the corresponding group is active. Because only one) 108 699 T -(group is active at any one time, only one of the four possible transformations is ever) 108 686 T --0.23 (applied at any one point in time. If the device described by the) 108 673 P -5 F --0.5 -0.6 (XkbDescRec) 407.68 673 B -2 F --0.23 ( does not sup-) 473.68 673 P -(port four groups, the extra groups fields are present, but undefined.) 108 660 T --0.35 (Normally, the Xkb-aware server reports keyboard state in the) 108 639 P -1 F --0.35 (state) 402.11 639 P -2 F --0.35 ( member of events such) 424.77 639 P -(as a) 108 626 T -5 F --0.6 (KeyPress) 129.32 626 S -2 F -( event and) 182.12 626 T -5 F --0.6 (ButtonPress) 234.45 626 S -2 F -( event, encoded as follows:) 307.05 626 T -(bits) 126 605 T -(meaning) 216 605 T -(15) 126 592 T -(0) 216 592 T -(13-14) 126 579 T -(Group index) 216 579 T -(8-12) 126 566 T -(Pointer Buttons) 216 566 T -(0-7) 126 553 T -(Modifiers) 216 553 T -(For Xkb-unaware clients, only core protocol keyboard information may be reported.) 108 534 T --0.22 (Because core protocol does not define the group index, the group index is mapped to mod-) 108 521 P -(ifier bits as specified by the) 108 508 T -1 F -(groups) 243.31 508 T -2 F -([group index] field of the compatibility map \050the bits) 276.65 508 T -(set in the compatibility map are ORed into bits 0-7 of the state\051, and bits 13-14 are) 108 495 T -(reported in the event as zero.) 108 482 T -0 F -(17.1.2) 72 457 T -(Core K) 108 457 T -(e) 147.16 457 T -(yboar) 153.65 457 T -(d Mapping to Xkb K) 186.08 457 T -(e) 297.91 457 T -(yboar) 304.4 457 T -(d Mapping T) 336.84 457 T -(ransf) 406.55 457 T -(ormation) 435.65 457 T -2 F -(When a core protocol keyboard mapping request is received by the server, the server\325s) 108 437 T --0.2 (core keyboard map is updated, and then the Xkb map maintained by the server is updated.) 108 424 P --0.46 (Because a client may have explicitly configured some of the Xkb keyboard mapping in the) 108 411 P -(server, this automatic regeneration of the Xkb keyboard mapping from the core protocol) 108 398 T --0.07 (keyboard mapping should not modify any components of the Xkb keyboard mapping that) 108 385 P --0.27 (were explicitly set by a client. The client must set explicit override controls to prevent this) 108 372 P -(from happening \050see section 16.3\051. The core-to-Xkb mapping is done as follows:) 108 359 T -(1.) 108 338 T -(Map the symbols from the keys in the core keyboard map to groups and symbols on) 125.25 338 T --0.04 (keys in the Xkb keyboard map. The core keyboard mapping is of fixed width, so each) 126 325 P -(key in the core mapping has the same number of symbols associated with it. The Xkb) 126 312 T -(mapping allows a different number of symbols to be associated with each key; those) 126 299 T --0.35 (symbols may be divided into a different number of groups \0501-4\051 for each key. For each) 126 286 P --0.2 (key, this process therefore involves partitioning the fixed number of symbols from the) 126 273 P -(core mapping into a set of variable-length groups with a variable number of symbols) 126 260 T -(in each group. For example, if the core protocol map is of width five, the partition for) 126 247 T -(one key might result in one group with two symbols and another with three symbols.) 126 234 T -(A different key might result in two groups with two symbols plus a third group with) 126 221 T -(one symbol. The core protocol map requires at least two symbols in each of the first) 126 208 T -(two groups.) 126 195 T -(1a.) 126 174 T --0.49 (For each changed key, determine the number of groups represented in the new core) 144 174 P --0.15 (keyboard map. This results in a tentative group count for each key in the Xkb map.) 144 161 P -(1b.) 126 140 T -(For each changed key, determine the number of symbols in each of the groups) 144 140 T --0.04 (found in step 1a. There is one explicit override control associated with each of the) 144 127 P -(four possible groups for each Xkb key,) 144 114 T -5 F --0.6 (ExplicitKeyType1) 333.96 114 S -2 F -( through) 439.56 114 T -5 F --0.77 -0.6 (ExplicitKeyType4) 144 101 B -2 F --0.35 (. If no explicit override control is set for a group, the number) 249.6 101 P -(of symbols used for that group from the core map is two. If the explicit override) 144 88 T -(control is set for a group on the key, the number of symbols used for that Xkb) 144 75 T -FMENDPAGE -%%EndPage: "170" 182 -%%Page: "171" 183 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(171) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(17 The Xkb Compatibility Map) 395.16 744.87 T -2 12 Q -(group from the core map is the width of the Xkb group with one exception:) 144 712 T --0.46 (because of the core protocol requirement for at least two symbols in each of groups) 144 699 P --0.1 (one and two, the number of symbols used for groups one and two is the maximum) 144 686 P -(of 2 or the width of the Xkb group.) 144 673 T -(1c.) 126 652 T --0.31 (For each changed key, assign the symbols in the core map to the appropriate group) 144 652 P --0.35 (on the key. If the total number of symbols required by the Xkb map for a particular) 144 639 P -(key needs more symbols than the core protocol map contains, the additional sym-) 144 626 T --0.16 (bols are taken to be) 144 613 P -5 F --0.35 -0.6 (NoSymbol) 239.51 613 B -2 F --0.16 ( keysyms appended to the end of the core set. If the) 292.31 613 P -(core map contains more symbols than are needed by the Xkb map, trailing sym-) 144 600 T --0.18 (bols in the core map are discarded. In the absence of an explicit override for group) 144 587 P -(one or two, symbols are assigned in order by group; the first symbols in the core) 144 574 T -(map are assigned to group one, in order, followed by group two, and so on. For) 144 561 T -(example, if the core map contained eight symbols per key, and a particular Xkb) 144 548 T -(map contained 2 symbols for G1 and G2 and three for G3, the symbols would be) 144 535 T -(assigned as \050G is group, L is shift level\051:) 144 522 T -(G1L1 G1L2 G2L1 G2L2 G3L1 G3L2 G3L3) 226.01 501 T -(If an explicit override control is set for group one or two, the symbols are taken) 144 480 T -(from the core set in a somewhat different order. The first four symbols from the) 144 467 T -(core set are assigned to G1L1, G1L2, G2L1, G2L2, respectively. If group one) 144 454 T -(requires more symbols, they are taken next, and then any additional symbols) 144 441 T -(needed by group two. Group three and four symbols are taken in complete) 144 428 T -(sequence after group two. For example, a key with four groups and three symbols) 144 415 T -(in each group would take symbols from the core set in the following order:) 144 402 T -(G1L1 G1L2 G2L1 G2L2 G1L3 G2L3 G3L1 G3L2 G3L3 G4L1 G4L2 G4L3) 148.52 381 T -(As previously noted, the core protocol map requires at lease two symbols in) 144 360 T --0.16 (groups one and two. Because of this, if an explicit override control for an Xkb key) 144 347 P -(is set and group one and / or group two is of width one, it is not possible to gener-) 144 334 T -(ate the symbols taken from the core protocol set and assigned to position G1L2) 144 321 T -(and / or G2L2.) 144 308 T -(1d.) 126 287 T --0.44 (For each group on each changed key, assign a key type appropriate for the symbols) 144 287 P -(in the group.) 144 274 T -(1e.) 126 253 T -(For each changed key, remove any empty or redundant groups.) 144 253 T --0.02 (At this point, the groups and their associated symbols have been assigned to the corre-) 126 232 P -(sponding key definitions in the Xkb map.) 126 219 T -(2.) 108 198 T -(Apply symbol interpretations to modify key operation. This phase is completely) 126 198 T --0.44 (skipped if the) 126 185 P -5 F --0.97 -0.6 (ExplicitInterpret) 195.56 185 B -2 F --0.44 ( override control bit is set in the explicit controls) 307.76 185 P -(mask for the Xkb key \050see section 16.3\051.) 126 172 T -(2a.) 126 151 T --0.16 (For each symbol on each changed key, attempt to match the symbol and modifiers) 144 151 P -(from the Xkb map to a symbol interpretation describing how to generate the sym-) 144 138 T -(bol.) 144 125 T -(2b.) 126 104 T -(When a match is found in step 2a, apply the symbol interpretation to change the) 144 104 T -(semantics associated with the symbol in the Xkb key map. If no match is found,) 144 91 T -(apply a default interpretation.) 144 78 T -FMENDPAGE -%%EndPage: "171" 183 -%%Page: "172" 184 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(172) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(17 The Xkb Compatibility Map) 395.16 744.87 T -2 12 Q -(The symbol interpretations used in step 2 are configurable and may be specified using) 108 712 T -5 F --0.6 (XkbSymInterpretRec) 108 699 S -2 F -( structures referenced by the) 226.8 699 T -1 F -(sym_interpret) 365.75 699 T -2 F -( field of an) 432.41 699 T -5 F --0.6 (XkbCom-) 487.73 699 S --0.6 (patMapRec) 108 686 S -2 F -( \050see Figure 17.3\051.) 167.4 686 T -0 11 Q -(Symbol Interpretations \321 the XkbSymInterpretRec Structure) 108 663.67 T -2 12 Q --0.33 (Symbol interpretations are used to guide the X server when it modifies the Xkb keymap in) 108 645 P -(step 2. An initial set of symbol interpretations is loaded by the server when it starts. A cli-) 108 632 T -(ent may add new ones using) 108 619 T -1 F -(XkbSetCompatMap) 246.65 619 T -2 F -( \050see section 17.4\051.) 339.97 619 T -(Symbol interpretations result in key semantics being set. When a symbol interpretation is) 108 598 T --0.4 (applied, the following components of server key event processing may be modified for the) 108 585 P -(particular key involved:) 108 572 T -(Virtual modifier map) 216 551 T -(Auto repeat) 216 538 T -(Key behavior \050may be set to) 216 525 T -5 F --0.6 (XkbKB_Lock) 354.64 525 S -2 F -(\051) 420.64 525 T -(Key action \050see section 16.1\051) 216 512 T -(The) 108 493 T -5 F --0.6 (XkbSymInterpretRec) 129.66 493 S -2 F -( structure specifies a symbol interpretation:) 248.46 493 T -2 11 Q -(typedef struct {) 126 472.67 T -(K) 144 459.67 T -(e) 151.67 459.67 T -(ySym) 156.39 459.67 T -(sym;) 234 459.67 T -(/* k) 297 459.67 T -(e) 313.7 459.67 T -(ysym of interest or) 318.42 459.67 T -5 12 Q --0.6 (NULL) 403.96 459.67 S -2 11 Q -( */) 430.36 459.67 T -(unsigned char) 144 446.67 T -(\337ags;) 234 446.67 T -(/*) 297 446.67 T -5 F --0.33 (XkbSI_AutoRepeat, XkbSI_LockingKey) 308.31 446.67 S -0 1 1 0 1 0 0 K -0 0 0 1 0 0 0 K -2 F -(*/) 524.24 446.67 T -(unsigned char) 144 433.67 T -(match;) 234 433.67 T -(/* speci\336es ho) 297 433.67 T -(w mods is interpreted */) 359.67 433.67 T -(unsigned char) 144 420.67 T -(mods;) 234 420.67 T -(/* modi\336er bits, correspond to eight real modi\336ers */) 297 420.67 T -(unsigned char) 144 407.67 T -(virtual_mod;) 234 407.67 T -(/* 1 modi\336er to add to k) 297 407.67 T -(e) 403.23 407.67 T -(y virtual mod map */) 407.95 407.67 T -(XkbAn) 144 394.67 T -(yAction) 176.22 394.67 T -(act;) 234 394.67 T -(/* action to bind to symbol position on k) 297 394.67 T -(e) 475.35 394.67 T -(y */) 480.07 394.67 T -(}) 126 381.67 T -3 F -(XkbSymInter) 134.03 381.67 T -(pr) 198.7 381.67 T -(etRec) 209.5 381.67 T -2 F -(,*XkbSymInterpretPtr;) 235.76 381.67 T -2 12 Q --0.13 (If) 108 362 P -1 F --0.13 (sym) 118.86 362 P -2 F --0.13 ( is not) 137.52 362 P -5 F --0.28 -0.6 (NULL) 169.48 362 B -2 F --0.13 (, it limits the symbol interpretation to keys on which that particular key-) 195.88 362 P -(sym is selected by the modifiers matching the criteria specified by) 108 349 T -1 11 Q -(mods) 428.95 349 T -2 12 Q -( and) 452.17 349 T -1 11 Q -(match) 475.5 349 T -2 12 Q -(. If) 502.39 349 T -1 11 Q -(sym) 519.38 349 T -2 12 Q --0.08 (is) 108 336 P -5 F --0.19 -0.6 (NULL) 118.92 336 B -2 F --0.08 (, the interpretation may be applied to any symbol selected on a key when the mod-) 145.32 336 P -(ifiers match the criteria specified by) 108 323 T -1 11 Q -(mods) 283.96 323 T -2 12 Q -( and) 307.18 323 T -1 11 Q -(match) 330.51 323 T -2 12 Q -(.) 357.39 323 T -1 11 Q --0.04 (match) 108 302 P -2 12 Q --0.05 ( must be one of the values shown in Table 17.1 and specifies how the real modifiers) 134.88 302 P -(specified in) 108 289 T -1 11 Q -(mods) 166.66 289 T -2 12 Q -( are to be interpreted.) 189.88 289 T --0.39 (In addition to the above bits,) 108 98 P -1 F --0.39 (match) 245.99 98 P -2 F --0.39 ( may contain the) 275.32 98 P -5 F --0.86 -0.6 (XkbSI_LevelOneOnly) 356.42 98 B -2 F --0.39 ( bit, in which) 475.22 98 P --0.13 (case the modifier match criteria specified by) 108 85 P -1 11 Q --0.12 (mods) 323.39 85 P -2 12 Q --0.13 ( and) 346.61 85 P -1 11 Q --0.12 (match) 369.69 85 P -2 12 Q --0.13 ( applies only if) 396.57 85 P -1 11 Q --0.12 (sym) 470.73 85 P -2 12 Q --0.13 ( is in level) 487.84 85 P -3 F -(T) 204.86 269 T -(able 17.1 Symbol Inter) 211.76 269 T -(pr) 330.64 269 T -(etation Match Criteria) 342.43 269 T -1 F -(Matc) 109 249 T -(h Criteria) 133.48 249 T -(V) 235 249 T -(alue) 241 249 T -(Ef) 277.75 249 T -(fect) 288.2 249 T -5 11 Q --0.33 (XkbSI_NoneOf) 109 234.67 S -2 F -(\0500\051) 235 234.67 T -2 12 Q -(None of the bits that are on in) 277.75 234.67 T -1 11 Q -(mods) 423.73 234.67 T -2 12 Q -( can be set, b) 446.95 234.67 T -(ut) 509.03 234.67 T -(other bits can be.) 277.75 223.67 T -5 11 Q --0.33 (XkbSI_AnyOfOrNone) 109 209.67 S -2 F -(\0501\051) 235 209.67 T -2 12 Q -(Zero or more of the bits that are on in) 277.75 209.67 T -1 11 Q -(mods) 461.05 209.67 T -2 12 Q -( can be set,) 484.27 209.67 T -(as well as others) 277.75 198.67 T -2 11 Q -(.) 356.73 198.67 T -5 F --0.33 (XkbSI_AnyOf) 109 184.67 S -2 F -(\0502\051) 235 184.67 T -(One or more of the bits that are on in) 277.75 184.67 T -1 F -(mods) 443.33 184.67 T -2 F -( can be set, as) 466.55 184.67 T -(well as an) 277.75 173.67 T -(y others.) 321.57 173.67 T -5 F --0.33 (XkbSI_AllOf) 109 159.67 S -2 F -(\0503\051) 235 159.67 T -2 12 Q -(All of the bits that are on in) 277.75 159.67 T -1 11 Q -(mods) 413.07 159.67 T -2 12 Q -( must be set, but oth-) 436.29 159.67 T -(ers may be set as well) 277.75 148.67 T -2 11 Q -(.) 382.73 148.67 T -5 F --0.33 (XkbSI_Exactly) 109 134.67 S -2 F -(\0504\051) 235 134.67 T -2 12 Q -(All of the bits that are on in) 277.75 134.67 T -1 11 Q -(mods) 413.07 134.67 T -2 12 Q -( must be set, and no) 436.29 134.67 T -(other bits may be set) 277.75 123.67 T -2 11 Q -(.) 377.07 123.67 T -108 261 541.5 261 2 L -V -0.5 H -0 Z -N -108 244 541.5 244 2 L -V -N -FMENDPAGE -%%EndPage: "172" 184 -%%Page: "173" 185 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(173) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(17 The Xkb Compatibility Map) 395.16 744.87 T -2 12 Q -(one of its group; otherwise,) 108 712 T -1 11 Q -(mods) 242.65 712 T -2 12 Q -( and) 265.87 712 T -1 11 Q -(match) 289.2 712 T -2 12 Q -( are ignored and the symbol matches a condi-) 316.08 712 T -(tion where no modifiers are set.) 108 699 T -2 11 Q -(#de\336ne XkbSI_Le) 126 678.67 T -(v) 206.68 678.67 T -(elOneOnly) 212.02 678.67 T -(\0500x80\051) 270 678.67 T -(/* use mods + match only if sym is le) 306 678.67 T -(v) 470.52 678.67 T -(el 1 */) 475.85 678.67 T -2 12 Q -(If no matching symbol interpretation is found, the server uses a default interpretation) 108 659 T -(where:) 108 646 T -1 F -(sym) 126 625 T -2 F -( =) 144.66 625 T -(0) 216 625 T -1 F -(\337a) 126 612 T -(gs) 137.88 612 T -2 F -( =) 148.55 612 T -5 F --0.6 (XkbSI_AutoRepeat) 216 612 S -1 F -(matc) 126 599 T -(h) 149.15 599 T -2 F -( =) 155.15 599 T -5 F --0.6 (XkbSI_AnyOfOrNone) 216 599 S -1 F -(mods) 126 586 T -2 F -( =) 151.33 586 T -(0) 216 586 T -1 F -(virtual_mod) 126 573 T -2 F -( =) 184.67 573 T -5 F --0.6 (XkbNoModifier) 216 573 S -1 F -(act) 126 560 T -2 F -( =) 140.66 560 T -5 F --0.6 (SA_NoAction) 216 560 S -2 F --0.17 (When a matching symbol interpretation is found in step 2a, the interpretation is applied to) 108 541 P -(modify the Xkb map as follows.) 108 528 T -(The) 108 507 T -1 11 Q -(act) 129.66 507 T -2 12 Q -( field specifies a single action to be bound to the symbol position; any key event) 143.1 507 T -(that selects the symbol causes the action to be taken. Valid actions are defined in section) 108 494 T -(16.1.) 108 481 T --0.37 (If the Xkb keyboard map for the key does not have its) 108 460 P -5 F --0.82 -0.6 (ExplicitVModMap) 365.49 460 B -2 F --0.37 ( control set, the) 464.49 460 P -5 F --0.6 (XkbSI_LevelOneOnly) 108 447 S -2 F -( bit and symbol position are examined. If the) 226.8 447 T -5 F --0.6 (XkbSI_LevelOneOnly) 108 434 S -2 F -( bit is not set in) 226.8 434 T -1 11 Q -(match) 303.48 434 T -2 12 Q -( or the symbol is in position G1L1, the) 330.37 434 T -1 11 Q --0.34 (virtual_mod) 108 421 P -2 12 Q --0.37 ( field is examined. If) 161.78 421 P -1 11 Q --0.34 (virtual_mod) 262.56 421 P -2 12 Q --0.37 ( is not) 316.33 421 P -5 F --0.82 -0.6 (XkbNoModifier) 347.55 421 B -2 F --0.37 (,) 433.36 421 P -1 11 Q --0.34 (virtual_mod) 438.98 421 P -2 12 Q --0.37 ( specifies) 492.76 421 P --0.17 (a single virtual modifier to be added to the virtual modifier map for the key.) 108 408 P -1 11 Q --0.15 ( virtual_mod) 469.95 408 P -2 12 Q --0.17 ( is) 526.33 408 P -(specified as an index in the range [0..15].) 108 395 T -(If the matching symbol is in position G1L1 of the key, two bits in the flags field poten-) 108 374 T -(tially specify additional behavior modifications:) 108 361 T -2 11 Q -(#de\336ne) 126 340.67 T -(XkbSI_AutoRepeat) 171 340.67 T -(\0501<<0\051) 270 340.67 T -(/* k) 306 340.67 T -(e) 322.7 340.67 T -(y repeats if sym is in position G1L1 */) 327.42 340.67 T -(#de\336ne) 126 327.67 T -(XkbSI_LockingK) 171 327.67 T -(e) 249.55 327.67 T -(y) 254.27 327.67 T -(\0501<<1\051) 270 327.67 T -(/* set) 306 327.67 T -5 F --0.33 (KB_Lock) 332.28 327.67 S -2 F -( beha) 376.17 327.67 T -(vior if sym is in psn G1L1 */) 399.47 327.67 T -2 12 Q -(If the Xkb keyboard map for the key does not have its) 108 308 T -5 F --0.6 (ExplicitAutoRepeat) 369.95 308 S -2 F -( control) 488.75 308 T -(set, its auto repeat behavior is set based on the value of the) 108 295 T -5 F --0.6 (XkbSI_AutoRepeat) 392.62 295 S -2 F -( bit. If) 498.22 295 T --0.18 (the) 108 282 P -5 F --0.4 -0.6 (XkbSI_AutoRepeat) 125.48 282 B -2 F --0.18 ( bit is set, the auto-repeat behavior of the key is turned on; other-) 231.08 282 P -(wise, it is turned off.) 108 269 T -(If the Xkb keyboard map for the key does not have its) 108 248 T -5 F --0.6 (ExplicitBehavior) 369.95 248 S -2 F -( control set,) 475.55 248 T -(its locking behavior is set based on the value of the) 108 235 T -5 F --0.6 (XkbSI_LockingKey) 356.3 235 S -2 F -( bit. If) 461.91 235 T -5 F --0.9 -0.6 (XkbSI_LockingKey) 108 222 B -2 F --0.41 ( is set, the key behavior is set to) 213.6 222 P -5 F --0.9 -0.6 (KB_Lock) 365.92 222 B -2 F --0.41 (; otherwise, it is turned off) 412.12 222 P -(\050see section 16.3\051.) 108 209 T -0 F -(17.1.3) 72 184 T -(Xkb K) 108 184 T -(e) 141.83 184 T -(yboar) 148.32 184 T -(d Mapping to Core K) 180.76 184 T -(e) 297.91 184 T -(yboar) 304.4 184 T -(d Mapping T) 336.84 184 T -(ransf) 406.55 184 T -(ormations) 435.65 184 T -2 F -(Whenever the server processes Xkb requests to change the keyboard mapping, it discards) 108 164 T --0.37 (the affected portion of its core keyboard mapping and regenerates it based on the new Xkb) 108 151 P -(mapping.) 108 138 T -(When the Xkb mapping for a key is transformed to a core protocol mapping, the symbols) 108 117 T -(for the core map are taken in the following order from the Xkb map:) 108 104 T -(G1L1 G1L2 G2L1 G2L2 G1L3-n G2L3-n G3L1-n G4L1-n) 108 83 T -FMENDPAGE -%%EndPage: "173" 185 -%%Page: "174" 186 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(174) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(17 The Xkb Compatibility Map) 395.16 744.87 T -2 12 Q --0.02 (If group one is of width one in the Xkb map, G1L2 is taken to be NoSymbol; similarly, if) 108 712 P -(group two is of width one in the Xkb map, G2L2 is taken to be NoSymbol.) 108 699 T --0.07 (If the Xkb key map for a particular key has fewer groups than the core keyboard, the sym-) 108 678 P -(bols for group one are repeated to fill in the missing core components. For example, an) 108 665 T -(Xkb key with a single width-three group would be mapped to a core mapping counting) 108 652 T -(three groups as:) 108 639 T -(G1L1 G1L2 G1L1 G1L2 G1L3 G1L3 G1L1 G1L2 G1L3) 108 618 T -(When a core keyboard map entry is generated from an Xkb keyboard map entry, a modi-) 108 597 T -(fier mapping is generated as well. The modifier mapping contains all of the modifiers) 108 584 T -(affected by any of the actions associated with the key combined with all of the real modi-) 108 571 T -(fiers associated with any of the virtual modifiers bound to the key. In addition, if any of) 108 558 T --0.14 (the actions associated with the key affect any component of the keyboard group, all of the) 108 545 P -(modifiers in the) 108 532 T -1 F -(mask) 187 532 T -2 F -( field of all of the group compatibility maps are added to the modi-) 211.66 532 T -(fier mapping as well. While an) 108 519 T -5 F --0.6 (XkbSA_ISOLock) 258.97 519 S -2 F -( action can theoretically affect any mod-) 344.77 519 T -(ifier, if the Xkb mapping for a key specifies an) 108 506 T -5 F --0.6 (XkbSA_ISOLock) 335.62 506 S -2 F -( action, only the) 421.42 506 T -(modifiers or group that are set by default are added to the modifier mapping.) 108 493 T -0 F -(17.2) 72 468 T -(Getting Compatibility Map Components Fr) 108 468 T -(om the Ser) 348.44 468 T -(ver) 410.58 468 T -2 F -(Use) 108 448 T -1 F -(XkbGetCompatMap) 129.66 448 T -2 F -( to fetch any combination of the current compatibility map com-) 225.65 448 T -(ponents from the server. When another client modifies the compatibility map, you are) 108 435 T -(notified if you have selected for) 108 422 T -5 F --0.6 (XkbCompatMapNotify) 263.96 422 S -2 F -( events \050see section 17.5\051.) 382.77 422 T -1 F -(Xkb-) 509.74 422 T -(GetCompatMap) 108 409 T -2 F -( is particularly useful when you receive an event of this type, as it allows) 185.33 409 T --0.09 (you to update your program\325s version of the compatibility map to match the modified ver-) 108 396 P -(sion now in the server. If your program is dealing with multiple servers and needs to con-) 108 383 T -(figure them all in a similar manner, the updated compatibility map may be used to) 108 370 T -(reconfigure other servers.) 108 357 T -0 F -(Note) 126 336.67 T -2 11 Q --0.4 (T) 162 336.67 P --0.4 (o mak) 167.84 336.67 P --0.4 (e a complete matching con\336guration you must also update the e) 194.53 336.67 P --0.4 (xplicit o) 470.86 336.67 P --0.4 (v) 506.66 336.67 P --0.4 (erride) 511.99 336.67 P -(components of the serv) 162 324.67 T -(er state.) 264.18 324.67 T -(Status) 108 304.67 T -3 F -(XkbGetCompatMap) 137.65 304.67 T -2 F -(\050) 234.81 304.67 T -1 F -(display) 238.47 304.67 T -(, whic) 269.64 304.67 T -(h, xkb) 295.76 304.67 T -2 F -(\051) 322.03 304.67 T -(Display *) 126 291.67 T -1 F -(display) 234 291.67 T -2 F -(;) 265.78 291.67 T -(/* connection to serv) 306 291.67 T -(er */) 397.8 291.67 T -(unsigned int) 126 278.67 T -1 F -(whic) 234 278.67 T -(h) 254.61 278.67 T -2 F -(;) 260.11 278.67 T -(/* mask of compatibility map components to fetch */) 306 278.67 T -(XkbDescRec *) 126 265.67 T -1 F -(xkb) 234 265.67 T -2 F -(;) 249.27 265.67 T -(/* k) 306 265.67 T -(e) 322.7 265.67 T -(yboard description where results placed */) 327.42 265.67 T -1 F -(XkbGetCompatMap) 108 246 T -2 12 Q -( fetches the components of the compatibility map specified in) 195.99 246 T -1 F -(whic) 494.62 246 T -(h) 517.11 246 T -2 F -(from the server specified by) 108 233 T -1 F -(display) 245.63 233 T -2 F -( and places them in the) 280.3 233 T -1 F -(compat) 393.61 233 T -2 F -( structure of the key-) 428.94 233 T -(board description) 108 220 T -1 F -(xkb) 194.65 220 T -2 F -(. Valid values for) 211.31 220 T -1 F -(whic) 297.62 220 T -(h) 320.11 220 T -2 F -( are an inclusive OR of the values shown in) 326.11 220 T -(Table 17.2.) 108 207 T -(If no compatibility map structure is allocated in) 108 99 T -1 F -(xkb) 339.31 99 T -2 F -( upon entry,) 355.97 99 T -1 11 Q -(XkbGetCompatMap) 416.63 99 T -2 12 Q -( allo-) 504.62 99 T -(cates one. If one already exists, its contents are overwritten with the returned results.) 108 86 T -3 F -(T) 175.92 187 T -(able 17.2 Compatibility Map Component Masks) 182.82 187 T -1 F -(Mask) 109 167 T -(V) 244 167 T -(alue) 250 167 T -(Af) 307 167 T -(fecting) 317.45 167 T -5 11 Q --0.33 (XkbSymInterpMask) 109 152.67 S -2 F -(\0501<<0\051) 244 152.67 T -(Symbol interpretations) 307 152.67 T -5 F --0.33 (XkbGroupCompatMask) 109 138.67 S -2 F -(\0501<<1\051) 244 138.67 T -(Group maps) 307 138.67 T -5 F --0.33 (XkbAllCompatMask) 109 124.67 S -2 F -(\0500x3\051) 244 124.67 T -(All compatibility map components) 307 124.67 T -108 179 486 179 2 L -V -0.5 H -0 Z -N -108 162 486 162 2 L -V -N -FMENDPAGE -%%EndPage: "174" 186 -%%Page: "175" 187 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(175) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(17 The Xkb Compatibility Map) 395.16 744.87 T -1 12 Q --0.21 (XkbGetCompatMap) 108 712 P -2 F --0.21 ( fetches compatibility map information for the device specified by the) 203.99 712 P -1 F -(device_spec) 108 699 T -2 F -( field of) 165.97 699 T -1 F -(xkb) 206.96 699 T -2 F -(. Unless you have specifically modified this field, it is the default) 223.62 699 T -(keyboard device.) 108 686 T -1 F -(XkbGetCompatMap) 192.97 686 T -2 F -( returns) 288.96 686 T -5 F --0.6 (Success) 328.28 686 S -2 F -( if successful,) 374.48 686 T -5 F --0.6 (BadAlloc) 443.14 686 S -2 F -( if it is) 495.94 686 T --0.36 (unable to obtain necessary storage for either the return values or work space,) 108 673 P -5 F --0.79 -0.6 (BadMatch) 474.58 673 B -2 F --0.36 ( if) 527.38 673 P -(the) 108 660 T -1 F -(dpy) 125.66 660 T -2 F -( field of the) 142.99 660 T -1 F -(xkb) 201.65 660 T -2 F -( argument is non-) 218.3 660 T -5 F --0.6 (NULL) 302.63 660 S -2 F -( and does not match the) 329.03 660 T -1 F -(display) 445.68 660 T -2 F -( argument,) 480.35 660 T -(and) 108 647 T -5 F --0.6 (BadLength) 128.33 647 S -2 F -( under certain conditions caused by server or Xkb implementation errors.) 187.73 647 T -0 F -(17.3) 72 622 T -(Using the Compatibility Map) 108 622 T -2 F -(Xkb provides several functions that make it easier to apply the compatibility map to con-) 108 602 T --0.25 (figure a client-side Xkb keyboard mapping, given a core protocol representation of part or) 108 589 P -(all of a keyboard mapping. Obtain a core protocol representation of a keyboard mapping) 108 576 T --0.22 (from an actual server \050by using) 108 563 P -1 F --0.22 (XGetK) 259.34 563 P --0.22 (e) 291.58 563 P --0.22 (yboar) 296.55 563 P --0.22 (dMapping) 324.1 563 P -2 F --0.22 (, for example\051, a data file, or some) 373.43 563 P -(other source.) 108 550 T -(To update a local Xkb keyboard map to reflect the mapping expressed by a core format) 108 529 T -(mapping by calling the function) 108 516 T -1 F -(XkbUpdateMapF) 264.32 516 T -(r) 346.98 516 T -(omCor) 351.11 516 T -(e) 384 516 T -2 F -(.) 389.33 516 T -2 11 Q -(Bool) 108 495.67 T -3 F -(XkbUpdateMapFr) 132.15 495.67 T -(omCor) 219.95 495.67 T -(e) 252.74 495.67 T -2 F -(\050) 257.62 495.67 T -1 F -(xkb) 261.29 495.67 T -2 F -(,) 276.55 495.67 T -1 F -( \336r) 279.3 495.67 T -(st_k) 291.72 495.67 T -(e) 309.33 495.67 T -(y) 313.89 495.67 T -2 F -(,) 318.06 495.67 T -1 F -( num_k) 320.81 495.67 T -(e) 352.77 495.67 T -(ys) 357.33 495.67 T -2 F -(,) 366.49 495.67 T -1 F -( map_width) 369.24 495.67 T -2 F -(,) 420.88 495.67 T -1 F -( cor) 423.63 495.67 T -(e_k) 440.64 495.67 T -(e) 455.8 495.67 T -(ysyms) 460.35 495.67 T -2 F -(,) 486.62 495.67 T -1 F -( c) 489.37 495.67 T -(hang) 496.84 495.67 T -(es) 518.73 495.67 T -2 F -(\051) 527.89 495.67 T -(XkbDescPtr) 126 482.67 T -1 F -(xkb) 234 482.67 T -2 F -(;) 249.27 482.67 T -(/* k) 306 482.67 T -(e) 322.7 482.67 T -(yboard description to update */) 327.42 482.67 T -(K) 126 469.67 T -(e) 133.67 469.67 T -(yCode) 138.39 469.67 T -1 F -(\336r) 234 469.67 T -(st_k) 243.67 469.67 T -(e) 261.28 469.67 T -(y) 265.83 469.67 T -2 F -(;) 270.72 469.67 T -(/* k) 306 469.67 T -(e) 322.7 469.67 T -(ycode of \336rst k) 327.42 469.67 T -(e) 393.6 469.67 T -(y description to update */) 398.32 469.67 T -(int) 126 456.67 T -1 F -(num_k) 234 456.67 T -(e) 263.22 456.67 T -(ys) 267.77 456.67 T -2 F -(;) 276.93 456.67 T -(/* number of k) 306 456.67 T -(e) 370.97 456.67 T -(y descriptions to update */) 375.68 456.67 T -(int) 126 443.67 T -1 F -(map_width) 234 443.67 T -2 F -(;) 282.89 443.67 T -(/* width of core protocol k) 306 443.67 T -(e) 423.51 443.67 T -(ymap */) 428.23 443.67 T -(K) 126 430.67 T -(e) 133.67 430.67 T -(ySym *) 138.39 430.67 T -1 F -(cor) 234 430.67 T -(e_k) 248.26 430.67 T -(e) 263.41 430.67 T -(ysyms) 267.97 430.67 T -2 F -(;) 294.24 430.67 T -(/* symbols in core protocol k) 306 430.67 T -(e) 434.52 430.67 T -(ymap */) 439.24 430.67 T -(XkbChangesPtr) 126 417.67 T -1 F -(c) 234 417.67 T -(hang) 238.72 417.67 T -(es) 260.61 417.67 T -2 F -(;) 269.77 417.67 T -(/* back\336lled with changes made to Xkb */) 306 417.67 T -1 12 Q -(XkbUpdateMapF) 108 398 T -(r) 190.66 398 T -(omCor) 194.78 398 T -(e) 227.68 398 T -2 F -( interprets input argument information representing a keyboard) 233 398 T -(map in core format to update the Xkb keyboard description passed in) 108 385 T -1 F -(xkb) 442.61 385 T -2 F -(. Only a portion) 459.26 385 T -(of the Xkb map is updated \321 the portion corresponding to keys with keycodes in the) 108 372 T --0.28 (range) 108 359 P -1 F --0.28 (\336r) 137.38 359 P --0.28 (st_k) 147.92 359 P --0.28 (e) 167.13 359 P --0.28 (y) 172.1 359 P -2 F --0.28 ( through) 177.43 359 P -1 F --0.28 (\336r) 220.21 359 P --0.28 (st_k) 230.76 359 P --0.28 (e) 249.97 359 P --0.28 (y) 254.94 359 P -2 F --0.28 ( +) 260.27 359 P -1 F --0.28 (num_k) 272.48 359 P --0.28 (e) 304.35 359 P --0.28 (ys) 309.32 359 P -2 F --0.28 ( - 1. If) 319.32 359 P -1 11 Q --0.25 (XkbUpdateMapF) 351.2 359 P --0.25 (r) 426.96 359 P --0.25 (omCor) 430.75 359 P --0.25 (e) 460.9 359 P -2 12 Q --0.28 ( is being called) 465.78 359 P -(in response to a) 108 346 T -5 F --0.6 (MappingNotify) 185.74 346 S -2 F -(event) 274.29 346 T -1 F -(, \336r) 300.28 346 T -(st_k) 316.83 346 T -(e) 336.04 346 T -(y) 341.01 346 T -2 F -( and) 346.34 346 T -1 F -(num_k) 369.67 346 T -(e) 401.54 346 T -(ys) 406.51 346 T -2 F -( are reported in the) 416.5 346 T -5 F --0.6 (Map-) 510.14 346 S --0.6 (pingNotify) 108 333 S -2 F -( event.) 174 333 T -1 F -(cor) 208.99 333 T -(e_k) 224.54 333 T -(e) 241.08 333 T -(ysyms) 246.05 333 T -2 F -( contains the keysyms corresponding to the keycode) 274.7 333 T --0.12 (range being updated, in core keyboard description order.) 108 320 P -1 F --0.12 (map_width) 381.62 320 P -2 F --0.12 ( is the number of key-) 434.96 320 P -(syms per key in) 108 307 T -1 F -(cor) 186.66 307 T -(e_k) 202.21 307 T -(e) 218.75 307 T -(ysyms) 223.72 307 T -2 F -(. Thus, the first) 252.37 307 T -1 F -(map_width) 328.37 307 T -2 F -( entries in) 381.71 307 T -1 F -(cor) 432.04 307 T -(e_k) 447.59 307 T -(e) 464.12 307 T -(ysyms) 469.09 307 T -2 F -( are for) 497.75 307 T --0.34 (the key with keycode) 108 294 P -1 F --0.34 (\336r) 211.94 294 P --0.34 (st_k) 222.49 294 P --0.34 (e) 241.7 294 P --0.34 (y) 246.67 294 P -2 F --0.34 (, the next) 252 294 P -1 F --0.34 (map_width) 298.3 294 P -2 F --0.34 ( entries are for key) 351.64 294 P -1 F --0.34 (\336r) 442.89 294 P --0.34 (st_k) 453.44 294 P --0.34 (e) 472.65 294 P --0.34 (y) 477.62 294 P -2 F --0.34 ( + 1, and so) 482.95 294 P -(on.) 108 281 T -(In addition to modifying the Xkb keyboard mapping in) 108 260 T -1 F -(xkb) 374.99 260 T -2 F -(,) 391.64 260 T -1 F -(XkbUpdateMapF) 397.64 260 T -(r) 480.3 260 T -(omCor) 484.43 260 T -(e) 517.32 260 T -2 F -(backfills the changes structure whose address is passed in) 108 247 T -1 F -(c) 387.61 247 T -(hang) 392.76 247 T -(es) 416.64 247 T -2 F -( to indicate the modifi-) 426.64 247 T -(cations that were made. You may then use) 108 234 T -1 F -(c) 314.29 234 T -(hang) 319.44 234 T -(es) 343.32 234 T -2 F -( in subsequent calls such as) 353.32 234 T -1 F -(XkbSet-) 487.97 234 T -(Map) 108 221 T -2 F -(, to propagate the local modifications to a server.) 130 221 T -FMENDPAGE -%%EndPage: "175" 187 -%%Page: "176" 188 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(176) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(17 The Xkb Compatibility Map) 395.16 744.87 T -2 12 Q -(When dealing with core keyboard mappings or descriptions, it is sometimes necessary to) 108 712 T -(determine the Xkb key types appropriate for the symbols bound to a key in a core key-) 108 699 T -(board mapping. Use) 108 686 T -1 F -(XkbKeyTypesForCoreSymbols) 207.98 686 T -2 F -( for this purpose:) 355.3 686 T -2 11 Q -(int) 108 665.67 T -3 F -(XkbK) 122.37 665.67 T -(eyT) 150.82 665.67 T -(ypesF) 167.73 665.67 T -(orCor) 194.96 665.67 T -(eSymbols) 223.47 665.67 T -2 F -(\050) 268.08 665.67 T -1 F -(map_width) 271.75 665.67 T -2 F -(,) 320.64 665.67 T -1 F -( cor) 323.39 665.67 T -(e_syms) 340.4 665.67 T -2 F -(,) 372.17 665.67 T -1 F -( pr) 374.92 665.67 T -(otected, types_inout,) 386.95 665.67 T -(xkb_syms_rtrn) 252 652.67 T -2 F -(\051) 316.77 652.67 T -(XkbDescPtr) 126 639.67 T -1 F -(xkb) 189 639.67 T -2 F -(;) 204.27 639.67 T -(/* k) 261.75 639.67 T -(e) 278.45 639.67 T -(yboard description in which to place symbols*/) 283.17 639.67 T -(int) 126 626.67 T -1 F -(map_width) 189 626.67 T -2 F -(;) 237.9 626.67 T -(/* width of core protocol k) 261.75 626.67 T -(e) 379.26 626.67 T -(ymap in) 383.98 626.67 T -1 F -(xkb_syms_rtrn) 422.48 626.67 T -2 F -( */) 487.25 626.67 T -(K) 126 613.67 T -(e) 133.67 613.67 T -(ySym *) 138.39 613.67 T -1 F -(cor) 189 613.67 T -(e_syms) 203.26 613.67 T -2 F -(;) 235.02 613.67 T -(/* core protocol format array of K) 261.75 613.67 T -(e) 411.15 613.67 T -(ySyms */) 415.87 613.67 T -(unsigned int) 126 600.67 T -1 F -(pr) 189 600.67 T -(otected) 198.28 600.67 T -2 F -(;) 230.05 600.67 T -(/* e) 261.75 600.67 T -(xplicit k) 277.78 600.67 T -(e) 314.03 600.67 T -(y types */) 318.75 600.67 T -(int *) 126 587.67 T -1 F -(types_inout;) 189 587.67 T -2 F --0.01 (/* back\336lled with the canonical types bound to groups one and) 261.75 587.67 P -(tw) 270.75 574.67 T -(o for the k) 281.64 574.67 T -(e) 327.05 574.67 T -(y */) 331.77 574.67 T -(K) 126 561.67 T -(e) 133.67 561.67 T -(ySym *) 138.39 561.67 T -1 F -(xkb_syms_rtrn) 189 561.67 T -2 F -(;) 253.77 561.67 T -(/* back\336lled with symbols bound to the k) 261.75 561.67 T -(e) 444.06 561.67 T -(y in the Xkb) 448.78 561.67 T -(mapping */) 273 548.67 T -1 12 Q --0.28 (XkbK) 108 529 P --0.28 (e) 134.24 529 P --0.28 (yT) 139.21 529 P --0.28 (ypesF) 150.32 529 P --0.28 (orCor) 177.72 529 P --0.28 (eSymbols) 206.62 529 P -2 F --0.28 ( expands the symbols in) 251.94 529 P -1 F --0.28 (cor) 368.87 529 P --0.28 (e_syms) 384.42 529 P -2 F --0.28 ( and types in) 419.08 529 P -1 F --0.28 (types_inout) 481.95 529 P -2 F -(according to the rules specified in section 12 of the core protocol, then chooses canonical) 108 516 T -(key types \050canonical key types are defined in section 15.2.1\051 for groups 1 and 2 using the) 108 503 T -(rules specified by the Xkb protocol and places them in) 108 490 T -1 F -(xkb_syms_rtrn) 372.62 490 T -2 F -(, which will be) 443.28 490 T -(non-) 108 477 T -5 F --0.6 (NULL) 130 477 S -2 F -(.) 156.4 477 T -(A core keymap is a two-dimensional array of keysyms. It has) 108 456 T -1 F -(map_width) 405.28 456 T -2 F -( columns and) 458.62 456 T -1 F -(max_k) 108 443 T -(e) 139.2 443 T -(y_code) 144.17 443 T -2 F -( rows.) 178.15 443 T -1 F -(XkbK) 210.48 443 T -(e) 236.72 443 T -(yT) 241.69 443 T -(ypesF) 252.8 443 T -(orCor) 280.2 443 T -(eSymbols) 309.1 443 T -2 F -( takes a single row from a core key-) 354.42 443 T -(map, determines the number of groups associated with it, the type of each group, and the) 108 430 T -(symbols bound to each group. The return value is the number of groups,) 108 417 T -1 F -(types_inout) 457.62 417 T -2 F -( has) 512.95 417 T --0.16 (the types for each group, and) 108 404 P -1 F --0.16 (xkb_syms_rtrn) 249.32 404 P -2 F --0.16 ( has the symbols in Xkb order \050that is, groups) 319.98 404 P -(are contiguous, regardless of size\051.) 108 391 T -1 F -(pr) 108 370 T -(otected) 118.13 370 T -2 F -( contains the explicitly protected key types. There is one explicit override con-) 152.78 370 T -(trol associated with each of the four possible groups for each Xkb key,) 108 357 T -5 F --0.6 (ExplicitKeyType1) 108 344 S -2 F -( through) 213.6 344 T -5 F --0.6 (ExplicitKeyType4) 256.93 344 S -1 F -(; pr) 362.54 344 T -(otected) 379.66 344 T -2 F -(is an inclusive OR of) 417.32 344 T -(these controls.) 108 331 T -1 F -(map_width) 180.32 331 T -2 F -( is the width of the core keymap and is not dependent on any) 233.66 331 T -(Xkb definitions.) 108 318 T -1 F -(types_inout) 189 318 T -2 F -( is an array of four type indices. On input,) 244.33 318 T -1 F -(types_inout) 448.3 318 T -2 F -( con-) 503.63 318 T -(tains the indices of any types already assigned to the key, in case they are explicitly pro-) 108 305 T -(tected from change.) 108 292 T -(Upon return,) 108 271 T -1 F -(types_inout) 172.32 271 T -2 F -( contains any automatically selected \050that is, canonical\051 types) 227.65 271 T -(plus any protected types. Canonical types are assigned to all four groups if there are) 108 258 T --0.35 (enough symbols to do so. The four entries in) 108 245 P -1 F --0.35 (types_inout) 322.16 245 P -2 F --0.35 ( correspond to the four groups for) 377.49 245 P -(the key in question.) 108 232 T -(If the groups mapping does not change, but the symbols assigned to an Xkb keyboard) 108 211 T --0.41 (compatibility map do change, the semantics of the key may be modified. To apply the new) 108 198 P -(compatibility mapping to an individual key to get its semantics updated, use) 108 185 T -1 F -(XkbApply-) 476.33 185 T -(CompatMapT) 108 172 T -(oK) 173.57 172 T -(e) 187.15 172 T -(y) 192.12 172 T -2 F -(.) 197.45 172 T -2 11 Q -(Bool) 108 151.67 T -3 F -(XkbA) 132.15 151.67 T -(pplyCompatMapT) 159.99 151.67 T -(oK) 246.99 151.67 T -(ey) 260.77 151.67 T -2 F -(\050) 271.15 151.67 T -1 F -(xkb) 274.82 151.67 T -2 F -(,) 290.08 151.67 T -1 F -( k) 292.83 151.67 T -(e) 300.36 151.67 T -(y) 304.91 151.67 T -2 F -(,) 309.08 151.67 T -1 F -( c) 311.83 151.67 T -(hang) 319.3 151.67 T -(es) 341.19 151.67 T -2 F -(\051) 350.35 151.67 T -( XkbDescPtr) 126 138.67 T -1 F -(xkb;) 234 138.67 T -2 F -(/* k) 306 138.67 T -(e) 322.7 138.67 T -(yboard description to be updated */) 327.42 138.67 T -( K) 126 125.67 T -(e) 139.17 125.67 T -(yCode) 143.89 125.67 T -1 F -(k) 234 125.67 T -(e) 238.77 125.67 T -(y) 243.33 125.67 T -2 F -(;) 248.21 125.67 T -(/* k) 306 125.67 T -(e) 322.7 125.67 T -(y to be updated */) 327.42 125.67 T -( XkbChangesPtr) 126 112.67 T -1 F -(c) 234 112.67 T -(hang) 238.72 112.67 T -(es) 260.61 112.67 T -2 F -(;) 269.77 112.67 T -(/* notes changes to the Xkb k) 306 112.67 T -(e) 436.04 112.67 T -(yboard description */) 440.76 112.67 T -1 12 Q --0.49 (XkbApplyCompatMapT) 108 93 P --0.49 (oK) 220.22 93 P --0.49 (e) 233.81 93 P --0.49 (y) 238.78 93 P -2 F --0.49 ( essentially performs the operation described in section 17.1.2) 244.1 93 P -(to a specific key. This updates the behavior, actions, repeat status, and virtual modifier) 108 80 T -(bindings of the key.) 108 67 T -FMENDPAGE -%%EndPage: "176" 188 -%%Page: "177" 189 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(177) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(17 The Xkb Compatibility Map) 395.16 744.87 T -0 12 Q -(17.4) 72 712 T -(Changing the Ser) 108 712 T -(ver\325) 207.47 712 T -(s Compatibility Map) 228.1 712 T -2 F -(To modify the server\325s compatibility map, first modify a local copy of the Xkb compati-) 108 692 T -(bility map, then call) 108 679 T -1 F -(XkbSetCompatMap) 207 679 T -2 F -(. You may allocate a new compatibility map for) 300.32 679 T -(this purpose using) 108 666 T -1 F -(XkbAllocCompatMap) 198.34 666 T -2 F -( \050see section 17.6\051. You may also use a compati-) 302.33 666 T -(bility map from another server, although you need to adjust the) 108 653 T -1 F -(device_spec) 413.96 653 T -2 F -( field in the) 471.94 653 T -5 F --0.6 (XkbDescRec) 108 640 S -2 F -( accordingly. Note that symbol interpretations in a compatibility map) 174 640 T -(\050) 108 627 T -1 F -(sym_interpret) 112 627 T -2 F -(, the vector of) 178.66 627 T -5 F --0.6 (XkbSymInterpretRec) 248.3 627 S -2 F -( structures\051 are also allocated using) 367.11 627 T -(this same function.) 108 614 T -2 11 Q -(Bool) 108 593.67 T -3 F -(XkbSetCompatMap) 132.15 593.67 T -2 F -(\050) 226.87 593.67 T -1 F -(display) 230.53 593.67 T -(, whic) 261.7 593.67 T -(h, xkb, update_actions) 287.82 593.67 T -2 F -(\051) 386.81 593.67 T -(Display *) 126 580.67 T -1 F -(display) 234 580.67 T -2 F -(;) 265.78 580.67 T -(/* connection to serv) 306 580.67 T -(er */) 397.8 580.67 T -(unsigned int) 126 567.67 T -1 F -(whic) 234 567.67 T -(h) 254.61 567.67 T -2 F -(;) 260.11 567.67 T -(/* mask of compat map components to set */) 306 567.67 T -(XkbDescPtr) 126 554.67 T -1 F -(xkb) 234 554.67 T -2 F -(;) 249.27 554.67 T -(/* source for compat map components */) 306 554.67 T -(Bool) 126 541.67 T -1 F -(update_actions) 234 541.67 T -2 F -(;) 301.22 541.67 T -(/*) 306 541.67 T -5 12 Q --0.6 (True) 317.31 541.67 S -2 11 Q -( => apply to serv) 343.71 541.67 T -(er\325) 418.28 541.67 T -(s k) 429.88 541.67 T -(e) 442.3 541.67 T -(yboard map */) 447.02 541.67 T -1 12 Q -(XkbSetCompatMap) 108 522 T -2 F -( copies compatibility map information from the keyboard description) 201.32 522 T --0.37 (in) 108 509 P -1 F --0.37 (xkb) 119.96 509 P -2 F --0.37 ( to the server specified in) 136.62 509 P -1 F --0.37 (display) 258.37 509 P -2 F --0.37 (\325s compatibility map for the device specified by the) 293.04 509 P -1 F -(device_spec) 108 496 T -2 F -( field of) 165.97 496 T -1 F -(xkb) 206.96 496 T -2 F -(. Unless you have specifically modified this field, it is the default) 223.62 496 T -(keyboard device.) 108 483 T -1 F -( whic) 189.97 483 T -(h) 215.46 483 T -2 F -( specifies the compatibility map components to be set, and is an) 221.46 483 T -(inclusive OR of the bits shown in Table 17.2.) 108 470 T -(After updating its compatibility map for the specified device, if) 108 449 T -1 F -(update_actions) 414.96 449 T -2 F -( is) 488.29 449 T -5 F --0.6 (True,) 502.3 449 S -2 F --0.19 (the server applies the new compatibility map to its entire keyboard for the device to gener-) 108 436 P -(ate a new set of key semantics, compatibility state, and a new core keyboard map. If) 108 423 T -1 F --0.23 (update_actions) 108 410 P -2 F --0.23 ( is) 181.33 410 P -5 F --0.5 -0.6 (False) 194.88 410 B -2 F --0.23 (, the new compatibility map is not used to generate any modifica-) 227.88 410 P -(tions to the current device semantics, state, or core keyboard map. One reason for not) 108 397 T --0.07 (applying the compatibility map immediately would be if one server was being configured) 108 384 P -(to match another on a piecemeal basis; the map should not be applied until everything is) 108 371 T -(updated. To force an update at a later time, use) 108 358 T -1 F -(XkbSetCompatMap) 335.94 358 T -2 F -( specifying) 429.26 358 T -1 F -(whic) 485.26 358 T -(h) 507.74 358 T -2 F -( as) 513.74 358 T -(zero and) 108 345 T -1 F -(update_actions) 151.98 345 T -2 F -( as) 225.31 345 T -5 F --0.6 (True) 241.31 345 S -2 F -(.) 267.71 345 T -1 F --0.36 (XkbSetCompatMap) 108 324 P -2 F --0.36 ( returns) 201.32 324 P -5 F --0.79 -0.6 (True) 239.93 324 B -2 F --0.36 ( if successful and) 266.33 324 P -5 F --0.79 -0.6 (False) 350.87 324 B -2 F --0.36 ( if unsuccessful. The server may) 383.87 324 P -(report problems it encounters when processing the request subsequently via protocol) 108 311 T -(errors.) 108 298 T --0.16 (To add a symbol interpretation to the list of symbol interpretations in an) 108 277 P -5 F --0.34 -0.6 (XkbCompatRec) 454.95 277 B -2 F --0.16 (,) 534.16 277 P -(use) 108 264 T -1 F -(XkbAddSymInterpret) 127 264 T -2 F -(.) 227.64 264 T -(XkbSymInterpretPtr) 108 243.67 T -3 11 Q -(XkbAddSymInter) 208.74 243.67 T -(pr) 293.58 243.67 T -(et) 304.39 243.67 T -2 F -(\050) 312.93 243.67 T -1 F -(xkb, si, updateMap, c) 316.6 243.67 T -(hang) 410.53 243.67 T -(es) 432.42 243.67 T -2 F -(\051) 441.58 243.67 T -2 12 Q -(XkbDescPtr) 126 230.67 T -1 11 Q -(xkb) 234 230.67 T -2 F -(;) 249.27 230.67 T -(/* k) 306 230.67 T -(e) 322.7 230.67 T -(yboard description to be updated */) 327.42 230.67 T -2 12 Q -(XkbSymInterpretPtr) 126 217.67 T -1 11 Q -(si) 234 217.67 T -2 F -(;) 241.34 217.67 T -(/* symbol interpretation to be added */) 306 217.67 T -(Bool) 126 204.67 T -1 F -(updateMap) 234 204.67 T -2 F -(;) 284.11 204.67 T -(/*) 306 204.67 T -5 12 Q --0.6 (True) 317.31 204.67 S -2 11 Q -(=>apply compatibility map to k) 343.71 204.67 T -(e) 483.12 204.67 T -(ys */) 487.84 204.67 T -2 12 Q -(XkbChangesPtr) 126 191.67 T -1 11 Q -(c) 234 191.67 T -(hang) 238.72 191.67 T -(es) 260.61 191.67 T -2 F -(;) 269.77 191.67 T -(/* changes are put here */) 306 191.67 T -1 12 Q -(XkbAddSymInterpret) 108 172 T -2 F -( adds) 208.64 172 T -1 F -(si) 236.64 172 T -2 F -( to the list of symbol interpretations in) 244.64 172 T -1 F -(xkb) 431.32 172 T -2 F -(. If) 447.97 172 T -1 F -(updateMap) 464.96 172 T -2 F -( is) 519.62 172 T -5 F --0.4 -0.6 (True) 108 159 B -2 F --0.18 (, it \050re\051applies the compatibility map to all of the keys on the keyboard. If) 134.4 159 P -1 F --0.18 (c) 487.33 159 P --0.18 (hang) 492.48 159 P --0.18 (es) 516.36 159 P -2 F --0.18 ( is) 526.35 159 P -(non-) 108 146 T -5 F --0.6 (NULL) 130 146 S -2 F -(, it reports the parts of the keyboard that were affected \050unless) 156.4 146 T -1 F -(updateMap) 456.65 146 T -2 F -( is) 511.31 146 T -5 F --0.9 -0.6 (True) 108 133 B -2 F --0.41 (, not much changes\051.) 134.4 133 P -1 F --0.41 (XkbAddSymInterpret) 235.41 133 P -2 F --0.41 ( returns a pointer to the actual new symbol) 336.05 133 P -(interpretation in the list or) 108 120 T -5 F --0.6 (NULL) 236.33 120 S -2 F -( if it failed.) 262.73 120 T -FMENDPAGE -%%EndPage: "177" 189 -%%Page: "178" 190 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(178) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(17 The Xkb Compatibility Map) 395.16 744.87 T -0 12 Q -(17.5) 72 712 T -(T) 108 712 T -(rac) 114.37 712 T -(king Chang) 132.14 712 T -(es to the Compatibility Map) 197.6 712 T -2 F --0.04 (The server automatically generates) 108 692 P -5 F --0.09 -0.6 (MappingNotify) 278.46 692 B -2 F --0.04 ( events when the keyboard mapping) 364.26 692 P --0.12 (changes. If you wish to be notified of changes to the compatibility map, you should select) 108 679 P -(for) 108 666 T -5 F --0.6 (XkbCompatMapNotify) 124.99 666 S -2 F -( events. If you select for) 243.79 666 T -5 F --0.6 (XkbMapNotify) 362.76 666 S -2 F -( events, you no) 441.96 666 T -(longer receive the automatically generated) 108 653 T -5 F --0.6 (MappingNotify) 314.94 653 S -2 F -( events. If you subsequently) 400.74 653 T -(deselect) 108 640 T -5 F --0.6 (XkbMapNotifyEvent) 149.65 640 S -2 F -( delivery, you again receive) 261.85 640 T -5 F --0.6 (MappingNotify) 397.81 640 S -2 F -( events.) 483.62 640 T -(To receive) 108 619 T -5 F --0.6 (XkbCompatMapNotify) 161.98 619 S -2 F -( events under all possible conditions, use) 280.78 619 T -1 F -(XkbSelect-) 480.1 619 T -(Events) 108 606 T -2 F -( \050see section 4.3\051 and pass) 139.99 606 T -5 F --0.6 (XkbCompatMapNotifyMask) 268.3 606 S -2 F -( in both) 413.5 606 T -1 F -(bits_to_c) 453.17 606 T -(hang) 496.99 606 T -(e) 520.88 606 T -2 F -(and) 108 593 T -1 F -(values_for_bits) 128.33 593 T -2 F -(.) 202.33 593 T -(To receive) 108 572 T -5 F --0.6 (XkbCompatMapNotify) 161.98 572 S -2 F -( events only under certain conditions, use) 280.78 572 T -1 F -(XkbSelect-) 482.75 572 T -(EventDetails) 108 559 T -2 F -( using) 169.99 559 T -5 F --0.6 (XkbCompatMapNotify) 202 559 S -2 F -( as the) 320.8 559 T -1 F -(e) 354.46 559 T -(vent_type) 359.61 559 T -2 F -( and specifying the desired) 405.59 559 T -(map changes in) 108 546 T -1 F -(bits_to_c) 185.65 546 T -(hang) 229.48 546 T -(e) 253.36 546 T -2 F -( and) 258.68 546 T -1 F -(values_for_bits) 282.01 546 T -2 F -( using mask bits from Table 17.2.) 356.02 546 T --0.43 (Note that you are notified of changes you make yourself, as well as changes made by other) 108 525 P -(clients.) 108 512 T -(The structure for the) 108 491 T -5 F --0.6 (XkbCompatMapNotifyEvent) 209.3 491 S -2 F -( is:) 361.11 491 T -2 11 Q -(typedef struct {) 126 470.67 T -(int) 144 457.67 T -(type;) 234 457.67 T -(/* Xkb e) 306 457.67 T -(xtension base e) 343.72 457.67 T -(v) 410.65 457.67 T -(ent code */) 415.99 457.67 T -(unsigned long) 144 444.67 T -(serial;) 234 444.67 T -(/* X serv) 306 444.67 T -(er serial number for e) 346.16 444.67 T -(v) 440.57 444.67 T -(ent */) 445.91 444.67 T -(Bool) 144 431.67 T -(send_e) 234 431.67 T -(v) 264.27 431.67 T -(ent;) 269.61 431.67 T -(/*) 306 431.67 T -5 12 Q --0.6 (True) 317.31 431.67 S -2 11 Q -( => synthetically generated */) 343.71 431.67 T -(Display *) 144 418.67 T -(display;) 234 418.67 T -(/* serv) 306 418.67 T -(er connection where e) 335.47 418.67 T -(v) 432.02 418.67 T -(ent generated */) 437.35 418.67 T -(T) 144 405.67 T -(ime) 150.34 405.67 T -(time;) 234 405.67 T -(/* serv) 306 405.67 T -(er time when e) 335.47 405.67 T -(v) 400.26 405.67 T -(ent generated */) 405.59 405.67 T -(int) 144 392.67 T -(xkb_type;) 234 392.67 T -(/*) 306 392.67 T -5 F --0.33 (XkbCompatMapNotify) 317.31 392.67 S -2 F -( */) 430.17 392.67 T -(int) 144 379.67 T -(de) 234 379.67 T -(vice;) 244.11 379.67 T -(/* Xkb de) 306 379.67 T -(vice ID, will not be) 349.11 379.67 T -5 F --0.33 (XkbUseCoreKbd) 437.1 379.67 S -2 F -( */) 518.61 379.67 T -(unsigned int) 144 366.67 T -(changed_groups;) 234 366.67 T -(/* number of group maps changed */) 309.15 366.67 T -(int) 144 353.67 T -(\336rst_si;) 234 353.67 T -(/* inde) 306 353.67 T -(x to 1st changed symbol interpretation */) 336.08 353.67 T -(int) 144 340.67 T -(num_si;) 234 340.67 T -(/* number of changed symbol interpretations */) 306 340.67 T -(int) 144 327.67 T -(num_total_si;) 234 327.67 T -(/* total number of v) 306 327.67 T -(alid symbol interpretations */) 393.11 327.67 T -(}) 126 314.67 T -3 F -(XkbCompatMapNotifyEv) 134.03 314.67 T -(ent) 256.14 314.67 T -2 F -(;) 270.8 314.67 T -1 12 Q --0.07 (changed_groups) 108 295 P -2 F --0.07 ( is the number of group compatibility maps that have changed. If you are) 187.99 295 P -(maintaining a corresponding copy of the compatibility map, or get a fresh copy from the) 108 282 T -(server using) 108 269 T -1 F -(XkbGetCompatMap) 169.32 269 T -2 F -(,) 265.31 269 T -1 F -(c) 271.31 269 T -(hang) 276.46 269 T -(ed_gr) 300.34 269 T -(oups) 327.79 269 T -2 F -( references) 350.46 269 T -1 F -(groups) 108 256 T -2 F -([0..) 141.34 256 T -1 F -(changed_groups) 157.33 256 T -2 F -(-1] in the) 237.32 256 T -5 F --0.6 (XkbCompatMapRec) 284.32 256 S -2 F -( structure.) 383.32 256 T -1 F -(first_si) 108 235 T -2 F -( is the index of the first changed symbol interpretation,) 141.35 235 T -1 F -(num_si) 407.65 235 T -2 F -( is the number of) 442.32 235 T -(changed symbol interpretations, and) 108 222 T -1 F -(num_total_si) 284.98 222 T -2 F -( is the total number of valid symbol) 347.65 222 T -(interpretations. If you are maintaining a corresponding copy of the compatibility map, or) 108 209 T -(get a fresh copy from the server using) 108 196 T -1 F -(XkbGetCompatMap) 292.62 196 T -2 F -(,) 388.61 196 T -1 F -(first_si) 394.61 196 T -2 F -(,) 427.96 196 T -1 F -(num_si) 433.96 196 T -2 F -(, and) 468.62 196 T -1 F -(num_total_si) 108 183 T -2 F -( are appropriate for use with the) 170.68 183 T -1 F -(compat.sym_interpret) 326.96 183 T -2 F -( vector in this struc-) 431.95 183 T -(ture.) 108 170 T -FMENDPAGE -%%EndPage: "178" 190 -%%Page: "179" 191 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(179) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(17 The Xkb Compatibility Map) 395.16 744.87 T -0 12 Q -(17.6) 72 712 T -(Allocating and Freeing the Compatibility Map) 108 712 T -2 F --0.22 (If you are modifying the compatibility map, you need to allocate a new compatibility map) 108 692 P -(if you do not already have one available. To do so, use) 108 679 T -1 F -(XkbAllocCompatMap) 373.28 679 T -2 F -(.) 477.28 679 T -2 11 Q -(Status) 108 658.67 T -3 F -(XkbAllocCompatMap) 137.65 658.67 T -2 F -(\050) 242.15 658.67 T -1 F -(xkb, whic) 245.81 658.67 T -(h, num_si) 287.19 658.67 T -2 F -(\051) 329.97 658.67 T -(XkbDescPtr) 126 645.67 T -1 F -(xkb) 189 645.67 T -2 F -(;) 204.27 645.67 T -(/* k) 252 645.67 T -(e) 268.7 645.67 T -(yboard description in which to allocate compat map */) 273.42 645.67 T -(unsigned int) 126 632.67 T -1 F -(whic) 189 632.67 T -(h) 209.61 632.67 T -2 F -(;) 215.11 632.67 T -(/* mask of compatibility map components to allocate */) 252 632.67 T -(unsigned int) 126 619.67 T -1 F -(num_si) 189 619.67 T -2 F -(;) 220.78 619.67 T -(/* number of symbol interpretations to allocate */) 252 619.67 T -1 12 Q -(xkb) 108 600 T -2 F -( specifies the keyboard description for which compatibility maps are to be allocated.) 124.66 600 T -(The compatibility map is the) 108 587 T -1 F -(compat) 249 587 T -2 F -( field in this structure.) 284.33 587 T -1 F -(whic) 108 566 T -(h) 130.49 566 T -2 F -( specifies the compatibility map components to be allocated \050see) 136.49 566 T -1 F -(XkbGetCompat-) 449.11 566 T -(Map) 108 553 T -2 F -(, in section 17.2\051.) 130 553 T -1 F -(whic) 216.32 553 T -(h) 238.81 553 T -2 F -( is an inclusive OR of the bits shown in Table 17.2.) 244.81 553 T -1 F --0.14 (num_si) 108 532 P -2 F --0.14 ( specifies the total number of entries to allocate in the symbol interpretation vector) 142.67 532 P -(\050) 108 519 T -1 F -(xkb) 112 519 T -(.compat.sym_interpr) 128.17 519 T -(et) 227.05 519 T -2 F -(\051.) 235.72 519 T --0.09 (Note that symbol interpretations in a compatibility map \050the) 108 498 P -1 F --0.09 (sym_interpret) 398.21 498 P -2 F --0.09 ( vector of) 464.87 498 P -5 F --0.19 -0.6 (Xkb-) 513.6 498 B --0.85 -0.6 (SymInterpretRec) 108 485 B -2 F --0.38 ( structures\051 are also allocated using this same function. To ensure that) 207 485 P -(there is sufficient space in the symbol interpretation vector for entries to be added, use) 108 472 T -1 F -(XkbAllocCompatMap) 108 459 T -2 F -( specifying) 211.99 459 T -1 F -(whic) 267.98 459 T -(h) 290.47 459 T -2 F -( as) 296.47 459 T -5 F --0.6 (XkbSymInterpretMask) 312.47 459 S -2 F -( and the number of) 437.87 459 T -(free symbol interpretations needed in) 108 446 T -1 F -(num_si) 289.63 446 T -2 F -(.) 324.3 446 T -1 F -(XkbAllocCompatMap) 108 425 T -2 F -( returns) 211.99 425 T -5 F --0.6 (Success) 251.32 425 S -2 F -( if successful,) 297.52 425 T -5 F --0.6 (BadMatch) 366.17 425 S -2 F -( if) 418.97 425 T -1 F -(xkb) 432.3 425 T -2 F -( is) 448.96 425 T -5 F --0.6 (NULL) 462.96 425 S -2 F -(, or) 489.36 425 T -5 F --0.6 (Bad-) 508.36 425 S --0.6 (Alloc) 108 412 S -2 F -( if errors are encountered when attempting to allocate storage.) 141 412 T -(To free an entire compatibility map or selected portions of one, use) 108 391 T -1 F -(XkbF) 433.61 391 T -(r) 458.94 391 T -(eeCompatMap) 463.16 391 T -2 F -(.) 533.82 391 T -2 11 Q -(v) 108 370.67 T -(oid) 113.28 370.67 T -3 F -(XkbFr) 130.09 370.67 T -(eeCompatMap) 161.67 370.67 T -2 F -(\050) 231.32 370.67 T -1 F -(xkb, whic) 234.98 370.67 T -(h, fr) 276.37 370.67 T -(ee_map) 294.3 370.67 T -2 F -(\051) 328.51 370.67 T -(XkbDescPtr) 126 357.67 T -1 F -(xkb) 189 357.67 T -2 F -(;) 204.27 357.67 T -(/* Xkb description in which to free compatibility map */) 252 357.67 T -(unsigned int) 126 344.67 T -1 F -(whic) 189 344.67 T -(h) 209.61 344.67 T -2 F -(;) 215.11 344.67 T -(/* mask of compatibility map components to free */) 252 344.67 T -(Bool) 126 331.67 T -1 F -(fr) 189 331.67 T -(ee_map) 195.93 331.67 T -2 F -(;) 230.14 331.67 T -(/*) 252 331.67 T -5 12 Q --0.6 (True) 263.31 331.67 S -2 11 Q -( => free) 289.71 331.67 T -5 F --0.33 (XkbCompatMap) 327.46 331.67 S -2 F -( structure itself */) 402.7 331.67 T -1 12 Q --0.4 (whic) 108 312 P --0.4 (h) 130.49 312 P -2 F --0.4 ( specifies the compatibility map components to be freed \050see) 136.49 312 P -1 F --0.4 (XkbGetCompatMap) 426.47 312 P -2 F --0.4 (, in) 522.46 312 P -(section 17.2\051.) 108 299 T -1 F -(whic) 175.99 299 T -(h) 198.48 299 T -2 F -( is an inclusive OR of the bits shown in Table 17.2) 204.48 299 T -1 F -(fr) 108 278 T -(ee_map) 115.56 278 T -2 F -( indicates whether the) 152.88 278 T -5 F --0.6 (XkbCompatMap) 260.86 278 S -2 F -( structure itself should be freed. If) 340.06 278 T -1 F -(fr) 108 265 T -(ee_map) 115.56 265 T -2 F -( is) 152.88 265 T -5 F --0.6 (True) 166.88 265 S -2 F -(,) 193.29 265 T -1 F -(whic) 199.29 265 T -(h) 221.77 265 T -2 F -( is ignored, all non-) 227.77 265 T -5 F --0.6 (NULL) 321.43 265 S -2 F -( compatibility map components are) 347.83 265 T -(freed, and the) 108 252 T -1 F -(compat) 176.64 252 T -2 F -( field in the) 211.97 252 T -5 F --0.6 (XkbDescRec) 269.96 252 S -2 F -( referenced by) 335.96 252 T -1 F -(xkb) 407.59 252 T -2 F -( is set to) 424.25 252 T -5 F --0.6 (NULL) 466.92 252 S -2 F -(.) 493.32 252 T -FMENDPAGE -%%EndPage: "179" 191 -%%Page: "180" 192 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(180) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(18 Symbolic Names) 445.28 744.87 T -0 14 Q -(18) 72 710.67 T -(Symbolic Names) 108 710.67 T -2 12 Q --0.28 (The core protocol does not provide any information to clients other than that actually used) 108 688 P -(to interpret events. This makes it difficult to write an application that presents the key-) 108 675 T -(board to a user in an easy-to-understand way. Such applications have to examine the ven-) 108 662 T -(dor string and keycodes to determine the type of keyboard connected to the server and) 108 649 T -(then examine keysyms and modifier mappings to determine the effects of most modifiers) 108 636 T --0.04 (\050the) 108 623 P -5 F --0.08 -0.6 (Shift) 129.62 623 B -2 F --0.04 (,) 162.62 623 P -5 F --0.08 -0.6 (Lock) 168.59 623 B -2 F --0.04 ( and) 194.99 623 P -5 F --0.08 -0.6 (Control) 218.24 623 B -2 F --0.04 ( modifiers are defined by the core protocol but no seman-) 264.44 623 P -(tics are implied for any other modifiers\051.) 108 610 T -(To make it easier for applications to present a keyboard to the user, Xkb supports sym-) 108 589 T -(bolic names for most components of the keyboard extension. Most of these symbolic) 108 576 T -(names are grouped into the) 108 563 T -1 F -(names) 240.97 563 T -2 F -( component of the keyboard description.) 271.63 563 T -0 F -(18.1) 72 538 T -(The XkbNamesRec Structure) 108 538 T -2 F -(The names component of the keyboard description is defined as follows:) 108 518 T -2 11 Q -(#de\336ne) 108 492.67 T -(XkbK) 162 492.67 T -(e) 188.61 492.67 T -(yNameLength) 193.33 492.67 T -(4) 306 492.67 T -(#de\336ne) 108 479.67 T -(XkbK) 162 479.67 T -(e) 188.61 479.67 T -(yNumV) 193.33 479.67 T -(irtualMods) 228.11 479.67 T -(16) 306 479.67 T -(#de\336ne) 108 466.67 T -(XkbK) 162 466.67 T -(e) 188.61 466.67 T -(yNumIndicators) 193.33 466.67 T -(32) 306 466.67 T -(#de\336ne) 108 453.67 T -(XkbK) 162 453.67 T -(e) 188.61 453.67 T -(yNumKbdGroups) 193.33 453.67 T -(4) 306 453.67 T -(#de\336ne) 108 440.67 T -(XkbMaxRadioGroups) 162 440.67 T -(32) 306 440.67 T -(typedef struct {) 108 420.67 T -(char) 126 407.67 T -(name[XkbK) 207 407.67 T -(e) 261.1 407.67 T -(yNameLength];) 265.82 407.67 T -(/* symbolic k) 342 407.67 T -(e) 401.79 407.67 T -(y names */) 406.5 407.67 T -(}) 108 394.67 T -3 F -(XkbK) 116.03 394.67 T -(eyNameRec) 144.49 394.67 T -2 F -(,*XkbK) 200.07 394.67 T -(e) 234.93 394.67 T -(yNamePtr;) 239.65 394.67 T -(typedef struct {) 108 374.67 T -(char) 126 361.67 T -(real[XkbK) 207 361.67 T -(e) 253.76 361.67 T -(yNameLength];) 258.48 361.67 T -(/* this k) 342 361.67 T -(e) 377.34 361.67 T -(y name must be in the k) 382.06 361.67 T -(e) 487.06 361.67 T -(ys array */) 491.78 361.67 T -(char) 126 348.67 T -(alias[XkbK) 207 348.67 T -(e) 257.43 348.67 T -(yNameLength];) 262.15 348.67 T -(/* symbolic k) 342 348.67 T -(e) 401.79 348.67 T -(y name as alias for the k) 406.5 348.67 T -(e) 513.31 348.67 T -(y */) 518.03 348.67 T -(}) 108 335.67 T -3 F -(XkbK) 116.03 335.67 T -(eyAliasRec) 144.49 335.67 T -2 F -(,*XkbK) 196.42 335.67 T -(e) 231.28 335.67 T -(yAliasPtr;) 236 335.67 T -(typedef struct _XkbNamesRec {) 108 315.67 T -(Atom) 126 302.67 T -(k) 207 302.67 T -(e) 212.39 302.67 T -(ycodes;) 217.11 302.67 T -(/* identi\336es range and meaning of k) 279 302.67 T -(e) 437.15 302.67 T -(ycodes */) 441.87 302.67 T -(Atom) 126 289.67 T -(geometry;) 207 289.67 T -(/* identi\336es ph) 279 289.67 T -(ysical location, size, and shape of k) 344.34 289.67 T -(e) 500.03 289.67 T -(ys */) 504.75 289.67 T -(Atom) 126 276.67 T -(symbols;) 207 276.67 T -(/*) 279 276.67 T -2 12 Q -(identifies the symbols logically bound to the keys) 290.31 276.67 T -2 11 Q -( */) 528.64 276.67 T -(Atom) 126 263.67 T -(types;) 207 263.67 T -(/*) 279 263.67 T -2 12 Q -(identifies the set of key types */) 290.31 263.67 T -2 11 Q -(Atom) 126 250.67 T -(compat;) 207 250.67 T -(/*) 279 250.67 T -2 12 Q -(identifies actions for keys using core protocol */) 290.31 250.67 T -2 11 Q -(Atom) 126 237.67 T -(vmods[XkbNumV) 207 237.67 T -(irtualMods];) 288.22 237.67 T -(/*) 345.97 237.67 T -2 12 Q -(symbolic names) 357.28 237.67 T -2 11 Q -( for virtual modi\336ers */) 434.95 237.67 T -(Atom) 126 224.67 T -(indicators[XkbNumIndicators];) 207 224.67 T -(/*) 348.45 224.67 T -2 12 Q -(symbolic names) 359.76 224.67 T -2 11 Q -( for indicators */) 437.42 224.67 T -(Atom) 126 211.67 T -(groups[XkbNumKbdGroups];) 207 211.67 T --0.61 (/*) 342.34 211.67 P -2 12 Q --0.67 (symbolic names for keyboard groups */) 353.04 211.67 P -2 11 Q -(XkbK) 126 198.67 T -(e) 152.61 198.67 T -(yNamePtr) 157.33 198.67 T -(k) 207 198.67 T -(e) 212.39 198.67 T -(ys;) 217.11 198.67 T -(/*) 279 198.67 T -2 12 Q -(symbolic key name) 290.31 198.67 T -(array) 386.38 198.67 T -2 11 Q -(*/) 414.03 198.67 T -(XkbK) 126 185.67 T -(e) 152.61 185.67 T -(yAliasPtr) 157.33 185.67 T -(k) 207 185.67 T -(e) 212.39 185.67 T -(y_aliases;) 217.11 185.67 T -(/* real/alias symbolic name pairs array */) 279 185.67 T -(Atom *) 126 172.67 T -(radio_groups;) 207 172.67 T -(/* radio group name array */) 279 172.67 T -(Atom) 126 159.67 T -(ph) 207 159.67 T -(ys_symbols;) 217.95 159.67 T -(/*) 279 159.67 T -2 12 Q -(identifies the symbols engraved on the keyboard) 290.31 159.67 T -2 11 Q -( */) 522.94 159.67 T -(unsigned char) 126 146.67 T -(num_k) 207 146.67 T -(e) 237.45 146.67 T -(ys;) 242.17 146.67 T -(/* number of k) 279 146.67 T -(e) 343.97 146.67 T -(ys in the) 348.68 146.67 T -1 12 Q -(k) 388.71 146.67 T -(e) 393.92 146.67 T -(ys) 398.89 146.67 T -2 11 Q -( array */) 408.89 146.67 T -(unsigned char) 126 133.67 T -(num_k) 207 133.67 T -(e) 237.45 133.67 T -(y_aliases;) 242.17 133.67 T -(/* number of k) 285.55 133.67 T -(e) 350.52 133.67 T -(ys in the) 355.24 133.67 T -1 12 Q -(k) 395.27 133.67 T -(e) 400.47 133.67 T -(y_aliases) 405.44 133.67 T -2 11 Q -( array */) 450.11 133.67 T -(unsigned short) 126 120.67 T -(num_r) 207 120.67 T -(g;) 235.52 120.67 T -(/* number of radio groups */) 279 120.67 T -(}) 108 107.67 T -3 F -(XkbNamesRec) 116.03 107.67 T -2 F -(,*XkbNamesPtr;) 185.68 107.67 T -(/*) 259.32 107.67 T -2 12 Q -(The) 108 88 T -1 F -(keycodes) 129.66 88 T -2 F -( name identifies the range and meaning of the keycodes returned by the key-) 172.97 88 T --0.09 (board in question. The) 108 75 P -1 F --0.09 (geometry) 218.62 75 P -2 F --0.09 ( name, on the other hand, identifies the physical location,) 263.28 75 P -FMENDPAGE -%%EndPage: "180" 192 -%%Page: "181" 193 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(181) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(18 Symbolic Names) 445.28 744.87 T -2 12 Q --0.18 (size and shape of the various keys on the keyboard. As an example to distinguish between) 108 712 P -(these two names, consider function keys on PC-compatible keyboards. Function keys are) 108 699 T -(sometimes above the main keyboard and sometimes to the left of the main keyboard, but) 108 686 T -(the same keycode is used for the key that is logically F1 regardless of physical position.) 108 673 T --0.15 (Thus, all PC-compatible keyboards share a similar keycodes name but may have different) 108 660 P -(geometry names.) 108 647 T -0 F -(Note) 126 626.67 T -2 11 Q -(The k) 162 626.67 T -(e) 187.24 626.67 T -(ycodes name is intended to be a v) 191.96 626.67 T -(ery general description of the k) 339.97 626.67 T -(e) 477.02 626.67 T -(ycodes) 481.74 626.67 T --0.16 (returned by a k) 162 614.67 P --0.16 (e) 227.68 614.67 P --0.16 (yboard; a single k) 232.4 614.67 P --0.16 (e) 310.32 614.67 P --0.16 (ycodes name might co) 315.04 614.67 P --0.16 (v) 413.07 614.67 P --0.16 (er k) 418.4 614.67 P --0.16 (e) 434.92 614.67 P --0.16 (yboards with dif) 439.64 614.67 P --0.16 (fering) 511.14 614.67 P -(numbers of k) 162 602.67 T -(e) 219.94 602.67 T -(ys pro) 224.66 602.67 T -(vided all k) 251.68 602.67 T -(e) 298.02 602.67 T -(ys ha) 302.73 602.67 T -(v) 325.43 602.67 T -(e the same semantics when present. F) 330.76 602.67 T -(or e) 495.87 602.67 T -(xam-) 512.5 602.67 T -(ple, 101 and 102 k) 162 590.67 T -(e) 243.47 590.67 T -(y PC k) 248.18 590.67 T -(e) 278.03 590.67 T -(yboards might use the same name. In these cases, applica-) 282.75 590.67 T -(tions can use the k) 162 578.67 T -(e) 243.16 578.67 T -(yboard) 247.88 578.67 T -1 F -(geometry) 281.17 578.67 T -2 F -( name to determine which subset of the named) 322.11 578.67 T -(k) 162 566.67 T -(e) 167.39 566.67 T -(ycodes is in use.) 172.11 566.67 T -2 12 Q -(The) 108 546 T -1 F -(symbols) 129.66 546 T -2 F -( name identifies the symbols logically bound to the keys. The symbols name) 168.32 546 T -(is a human or application-readable description of the intended locale or usage of the key-) 108 533 T -(board with these symbols. The) 108 520 T -1 F -(phys_symbols) 257.99 520 T -2 F -( name, on the other hand, identifies the sym-) 324.65 520 T -(bols actually engraved on the keyboard. Given this, the) 108 507 T -1 F -(symbols) 375.62 507 T -2 F -( name and) 414.29 507 T -1 F -(phys_symbols) 466.61 507 T -2 F --0.37 (names might be different. For example, the description for a keyboard that has English US) 108 494 P -(engravings, but that is using Swiss German symbols might have a) 108 481 T -1 F -(phys_symbols) 426.66 481 T -2 F -( name of) 493.32 481 T -(\322en_US\323 and a) 108 468 T -1 F -(symbols) 182.98 468 T -2 F -( name of \322de_CH.\323) 221.64 468 T -(The) 108 447 T -1 F -(types) 129.66 447 T -2 F -( name provides some information about the set of key types \050see section 15.2\051) 154.32 447 T --0.07 (that can be associated with the keyboard. In addition, each key type can have a name, and) 108 434 P -(each shift level of a type can have a name. Although these names are stored in the map) 108 421 T -(description with each of the types, they are accessed using the same methods as the other) 108 408 T -(symbolic names.) 108 395 T -(The) 108 374 T -1 F -(compat) 129.66 374 T -2 F -( name provides some information about the rules used to bind actions to keys) 164.99 374 T -(that are changed using core protocol requests.) 108 361 T --0.06 (Xkb provides symbolic names for each of the 4 keyboard groups, 16 virtual modifiers, 32) 108 340 P -(keyboard indicators, and 4 keyboard groups. These names are held in the) 108 327 T -1 F -(vmods) 461.26 327 T -2 F -(,) 491.92 327 T -1 F -(indica-) 497.92 327 T -(tors) 108 314 T -2 F -(, and) 126.67 314 T -1 F -(groups) 153 314 T -2 F -( fixed-length arrays.) 186.34 314 T -(Each key has a four-byte symbolic name. All of the symbolic key names are held in the) 108 293 T -1 F --0.21 (keys) 108 280 P -2 F --0.21 ( array, and) 128.65 280 P -1 F --0.21 (num_keys) 182.01 280 P -2 F --0.21 ( reports the number of entries that are in the keys array. For each) 229.32 280 P -(key, the key name links keys with similar functions or in similar positions on keyboards) 108 267 T -(that report different keycodes. For example, the) 108 254 T -4 11 Q -(F1) 339.61 254 T -2 12 Q -( key may emit keycode 23 on one key-) 352.45 254 T -(board and keycode 86 on another. By naming this key \322FK01\323 on both keyboards, the) 108 241 T --0.17 (keyboard layout designer can reuse parts of keyboard descriptions for different keyboards.) 108 228 P -(Key aliases allow the keyboard layout designer to assign multiple key names to a single) 108 207 T --0.39 (key. This allows the keyboard layout designer to refer to keys using either their position or) 108 194 P -(their \322function.\323 For example, a keyboard layout designer may wish to refer to the left) 108 181 T --0.29 (arrow key on a PC keyboard using the ISO9995-5 positional specification of A31 or using) 108 168 P -(the functional specification of LEFT. The) 108 155 T -1 F -(key_aliases) 310.97 155 T -2 F -( field holds a variable-length array) 366.29 155 T --0.16 (of real and alias key name pairs, and the total number of entries in the) 108 142 P -1 F --0.16 (key_aliases) 443.51 142 P -2 F --0.16 ( array is) 498.83 142 P --0.13 (held in) 108 129 P -1 F --0.13 (num_key_aliases) 143.74 129 P -2 F --0.13 (. For each real and alias key name pair, the) 225.72 129 P -1 F --0.13 (real) 433.02 129 P -2 F --0.13 ( field refers to the) 452.35 129 P -(a name in the keys array, and the) 108 116 T -1 F -(alias) 268.96 116 T -2 F -( field refers to the alias for that key. Using the pre-) 292.3 116 T -(vious example, the keyboard designer may use the name A31 in the keys array, but also) 108 103 T -(define the name LEFT as an alias for A31 in the) 108 90 T -1 F -(key_aliases) 342.29 90 T -2 F -( array.) 397.61 90 T -FMENDPAGE -%%EndPage: "181" 193 -%%Page: "182" 194 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(182) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(18 Symbolic Names) 445.28 744.87 T -0 12 Q -(Note) 126 712.67 T -2 11 Q -(K) 162 712.67 T -(e) 169.67 712.67 T -(y aliases de\336ned in the geometry component of a k) 174.39 712.67 T -(e) 398.21 712.67 T -(yboard mapping \050see Chapter) 402.93 712.67 T -(13\051 o) 162 700.67 T -(v) 184.75 700.67 T -(erride those de\336ned in the k) 190.08 700.67 T -(e) 312.48 700.67 T -(ycodes component of the serv) 317.2 700.67 T -(er database, which) 448.4 700.67 T -(are stored in the) 162 688.67 T -5 12 Q --0.6 (XkbNamesRec) 235.32 688.67 S -2 11 Q -( \050) 307.92 688.67 T -1 12 Q -(xkb->names) 314.33 688.67 T -2 11 Q -(\051. Therefore, consider the k) 373.74 688.67 T -(e) 493.37 688.67 T -(y aliases) 498.08 688.67 T -(de\336ned by the geometry before considering k) 162 676.67 T -(e) 361.68 676.67 T -(y aliases supplied by the) 366.4 676.67 T -5 12 Q --0.6 (XkbNames-) 476.7 676.67 S --0.6 (Rec) 162 664.67 S -2 11 Q -(.) 181.8 664.67 T -2 12 Q --0.14 (A radio group is a set of keys whose behavior simulates a set of radio buttons. Once a key) 108 644 P -(in a radio group is pressed, it stays logically depressed until another key in the group is) 108 631 T -(pressed, at which point the previously depressed key is logically released. Consequently,) 108 618 T -(at most one key in a radio group can be logically depressed at one time.) 108 605 T -(Each radio group in the keyboard description can have a name. These names are held in) 108 584 T -(the variable-length array) 108 571 T -1 F -(radio_groups) 228.96 571 T -2 F -(, and) 294.3 571 T -1 F -(num_rg) 320.63 571 T -2 F -( tells how many elements are in the) 357.96 571 T -1 F -(radio_groups) 108 558 T -2 F -( array.) 173.34 558 T -0 F -(18.2) 72 533 T -(Symbolic Names Masks) 108 533 T -2 F -(Xkb provides several functions that work with symbolic names. Each of these functions) 108 513 T -(uses a mask to specify individual fields of the structures described above. These masks) 108 500 T -(and their relationships to the fields in a keyboard description are shown in Table 18.1.) 108 487 T -3 F -(T) 241.47 467 T -(able 18.1 Symbolic Names Masks) 248.37 467 T -1 F -(Mask Bit) 109 440 T -(V) 268.75 440 T -(alue) 274.75 440 T -(K) 321.25 447 T -(e) 328.83 447 T -(yboar) 333.8 447 T -(d) 361.35 447 T -(Component) 321.25 433 T -(F) 392.5 440 T -(ield) 399.29 440 T -2 11 Q -(XkbK) 109 418.67 T -(e) 135.61 418.67 T -(ycodesNameMask) 140.33 418.67 T -(\0501<<0\051) 268.75 418.67 T -(Xkb->names) 321.25 418.67 T -(k) 392.5 418.67 T -(e) 397.89 418.67 T -(ycodes) 402.61 418.67 T -(XkbGeometryNameMask) 109 404.67 T -(\0501<<1\051) 268.75 404.67 T -(Xkb->names) 321.25 404.67 T -(geometry) 392.5 404.67 T -(XkbSymbolsNameMask) 109 390.67 T -(\0501<<2\051) 268.75 390.67 T -(Xkb->names) 321.25 390.67 T -(symbols) 392.5 390.67 T -(XkbPh) 109 376.67 T -(ysSymbolsNameMask) 139.5 376.67 T -(\0501<<3\051) 268.75 376.67 T -(Xkb->names) 321.25 376.67 T -(ph) 392.5 376.67 T -(ys_symbols) 403.45 376.67 T -(XkbT) 109 362.67 T -(ypesNameMask) 133.78 362.67 T -(\0501<<4\051) 268.75 362.67 T -(Xkb->names) 321.25 362.67 T -(type) 392.5 362.67 T -(XkbCompatNameMask) 109 348.67 T -(\0501<<5\051) 268.75 348.67 T -(Xkb->names) 321.25 348.67 T -(compat) 392.5 348.67 T -(XkbK) 109 334.67 T -(e) 135.61 334.67 T -(yT) 140.33 334.67 T -(ypeNamesMask) 151.67 334.67 T -(\0501<<6\051) 268.75 334.67 T -(Xkb->map) 321.25 334.67 T -(type[*].name) 392.5 334.67 T -(XkbKTLe) 109 320.67 T -(v) 153.93 320.67 T -(elNamesMask) 159.27 320.67 T -(\0501<<7\051) 268.75 320.67 T -(Xkb->map) 321.25 320.67 T -(type[*].lvl_names[*]) 392.5 320.67 T -(XkbIndicatorNamesMask) 109 306.67 T -(\0501<<8\051) 268.75 306.67 T -(Xkb->names) 321.25 306.67 T -(indicators[*]) 392.5 306.67 T -(XkbK) 109 292.67 T -(e) 135.61 292.67 T -(yNamesMask) 140.33 292.67 T -(\0501<<9\051) 268.75 292.67 T -(Xkb->names) 321.25 292.67 T -(k) 392.5 292.67 T -(e) 397.89 292.67 T -(ys[*], num_k) 402.61 292.67 T -(e) 461.16 292.67 T -(ys) 465.88 292.67 T -(XkbK) 109 278.67 T -(e) 135.61 278.67 T -(yAliasesMask) 140.33 278.67 T -(\0501<<10\051) 268.75 278.67 T -(Xkb->names) 321.25 278.67 T -(k) 392.5 278.67 T -(e) 397.89 278.67 T -(y_aliases[*], num_k) 402.61 278.67 T -(e) 491.71 278.67 T -(y_aliases) 496.43 278.67 T -(XkbV) 109 264.67 T -(irtualModNamesMask) 135.22 264.67 T -(\0501<<11\051) 268.75 264.67 T -(Xkb->names) 321.25 264.67 T -(vmods[*]) 392.5 264.67 T -(XkbGroupNamesMask) 109 250.67 T -(\0501<<12\051) 268.75 250.67 T -(Xkb->names) 321.25 250.67 T -(groups[*]) 392.5 250.67 T -(XkbRGNamesMask) 109 236.67 T -(\0501<<13\051) 268.75 236.67 T -(Xkb->names) 321.25 236.67 T -(radio_groups[*], num_r) 392.5 236.67 T -(g) 497.4 236.67 T -(XkbComponentNamesMask) 109 222.67 T -(\0500x3f\051) 268.75 222.67 T -(Xkb->names) 321.25 222.67 T -2 12 Q -(keycodes,) 392.5 222 T -(geometry,) 392.5 210 T -(symbols,) 392.5 198 T -(physical symbols,) 392.5 186 T -(types, and) 392.5 174 T -(compatibility map) 392.5 162 T -5 F --0.6 (XkbAllNamesMask) 109 147 S -2 11 Q -(\0500x3f) 268.75 147.67 T -(f) 292.3 147.67 T -(f\051) 295.69 147.67 T -(Xkb->names) 321.25 147.67 T -(all name components) 392.5 147.67 T -108 459 540.75 459 2 L -V -0.5 H -0 Z -N -108 428 540.75 428 2 L -V -N -FMENDPAGE -%%EndPage: "182" 194 -%%Page: "183" 195 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(183) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(18 Symbolic Names) 445.28 744.87 T -0 12 Q -(18.3) 72 712 T -(Getting Symbolic Names Fr) 108 712 T -(om the Ser) 264.47 712 T -(ver) 326.6 712 T -2 F -(To obtain symbolic names from the server, use) 108 692 T -1 F -(XkbGetNames) 336.3 692 T -2 F -(.) 404.95 692 T -2 11 Q -(Status) 108 671.67 T -3 F -(XkbGetNames) 137.65 671.67 T -2 F -(\050) 206.69 671.67 T -1 F -(dpy) 210.35 671.67 T -(, whic) 225.63 671.67 T -(h, Xkb) 251.75 671.67 T -2 F -(\051) 279.85 671.67 T -(Display *) 126 658.67 T -1 F -(dpy) 189 658.67 T -2 F -(;) 204.88 658.67 T -(/* connection to the X serv) 234 658.67 T -(er */) 352.68 658.67 T -(unsigned int) 126 645.67 T -1 F -(whic) 189 645.67 T -(h) 209.61 645.67 T -2 F -(;) 215.11 645.67 T -(/* mask of names or map components to be updated */) 234 645.67 T -(XkbDescPtr) 126 632.67 T -1 F -(xkb) 189 632.67 T -2 F -(/* k) 234 632.67 T -(e) 250.7 632.67 T -(yboard description to be updated */) 255.42 632.67 T -1 12 Q -(XkbGetNames) 108 613 T -2 F -( retrieves symbolic names for the components of the keyboard extension) 176.65 613 T -(from the X server. The) 108 600 T -1 F -(whic) 220.63 600 T -(h) 243.12 600 T -2 F -( parameter specifies the name components to be updated in) 249.12 600 T --0.19 (the) 108 587 P -1 F --0.19 (xkb) 125.47 587 P -2 F --0.19 ( parameter, and is the bitwise inclusive OR of the valid names mask bits defined in) 142.13 587 P -(Table 18.1.) 108 574 T -(If the) 108 553 T -1 F -(names) 136.66 553 T -2 F -( field of the keyboard description) 167.32 553 T -1 F -(xkb) 329.95 553 T -2 F -( is) 346.61 553 T -5 F --0.6 (NULL) 360.61 553 S -2 F -(,) 387.01 553 T -1 F -(XkbGetNames) 393.01 553 T -2 F -( allocates and) 461.66 553 T -(initializes the) 108 540 T -1 F -(names) 175.33 540 T -2 F -( component of the keyboard description before obtaining the values) 205.99 540 T --0.38 (specified by) 108 527 P -1 F --0.38 (whic) 168.55 527 P --0.38 (h) 191.04 527 P -2 F --0.38 (. If the) 197.04 527 P -1 F --0.38 (names) 230.54 527 P -2 F --0.38 ( field of) 261.2 527 P -1 F --0.38 (xkb) 301.04 527 P -2 F --0.38 ( is not) 317.69 527 P -5 F --0.85 -0.6 (NULL) 348.88 527 B -2 F --0.38 (,) 375.28 527 P -1 F --0.38 (XkbGetNames) 380.89 527 P -2 F --0.38 ( obtains the values) 449.55 527 P -(specified by) 108 514 T -1 F -(which) 169.32 514 T -2 F -( and copies them into the keyboard description) 197.99 514 T -1 F -(Xkb) 425.29 514 T -2 F -(.) 443.95 514 T -(If the) 108 493 T -1 F -(map) 136.66 493 T -2 F -( component of the) 157.32 493 T -1 F -(xkb) 247.31 493 T -2 F -( parameter is) 263.96 493 T -5 F --0.6 (NULL) 328.94 493 S -2 F -(,) 355.34 493 T -1 F -(XkbGetNames) 361.34 493 T -2 F -( does not retrieve type) 430 493 T -(or shift level names, even if) 108 480 T -5 F --0.6 (XkbKeyTypeNamesMask) 244.31 480 S -2 F -( or) 369.71 480 T -5 F --0.6 (XkbKTLevelNamesMask) 385.71 480 S -2 F -( are) 511.11 480 T -(set in) 108 467 T -1 F -(whic) 136.67 467 T -(h) 159.16 467 T -2 F -(.) 165.16 467 T -1 F -(XkbGetNames) 108 446 T -2 F -( can return) 176.65 446 T -5 F --0.6 (Success) 230.96 446 S -2 F -(, or) 277.17 446 T -5 F --0.6 (BadAlloc) 296.16 446 S -2 F -(,) 348.96 446 T -5 F --0.6 (BadLength) 354.96 446 S -2 F -(,) 414.36 446 T -5 F --0.6 (BadMatch) 420.36 446 S -2 F -(, and) 473.16 446 T -5 F --0.6 (BadIm-) 499.49 446 S --0.6 (plementation) 108 433 S -2 F -( errors.) 187.2 433 T -(To free symbolic names, use) 108 412 T -1 F -(XkbF) 248.64 412 T -(r) 273.97 412 T -(eeNames) 278.2 412 T -2 F -( \050see section 18.6\051) 321.52 412 T -0 F -(18.4) 72 387 T -(Changing Symbolic Names on the Ser) 108 387 T -(ver) 324.84 387 T -2 F -(To change the symbolic names in the server, first modify a local copy of the keyboard) 108 367 T -(description and then use either) 108 354 T -1 F -(XkbSetNames,) 257.64 354 T -2 F -( or, to save network traffic, use a) 326.63 354 T -5 F --0.6 (XkbNa-) 487.25 354 S --0.6 (meChangesRec) 108 341 S -2 F -(structure and call) 187.2 341 T -1 F -(XkbChang) 272.85 341 T -(eNames) 323.39 341 T -2 F -( to download the changes to the) 361.38 341 T -(server.) 108 328 T -1 F -(XkbSetNames) 143.32 328 T -2 F -( and) 209.3 328 T -1 F -(XkbChang) 232.63 328 T -(eNames) 283.18 328 T -2 F -( can generate) 321.17 328 T -5 F --0.6 (BadAlloc) 387.47 328 S -2 F -(,) 440.27 328 T -5 F --0.6 (BadAtom) 446.27 328 S -2 F -(,) 492.47 328 T -5 F --0.6 (BadLength) 108 315 S -2 F -(,) 167.4 315 T -5 F --0.6 (BadMatch,) 173.4 315 S -2 F -( and) 232.8 315 T -5 F --0.6 (BadImplementation) 256.13 315 S -2 F -( errors.) 368.33 315 T -2 11 Q -(Bool) 108 294.67 T -3 F -(XkbSetNames) 132.15 294.67 T -2 F -(\050) 198.75 294.67 T -1 F -(dpy) 202.41 294.67 T -(, whic) 217.69 294.67 T -(h, \336r) 243.81 294.67 T -(st_type) 264.48 294.67 T -(, num_types, xkb) 295.53 294.67 T -2 F -(\051) 368.84 294.67 T -(Display *) 126 281.67 T -1 F -(dpy) 189 281.67 T -2 F -(;) 204.88 281.67 T -(/* connection to the X serv) 252 281.67 T -(er */) 370.68 281.67 T -(unsigned int) 126 268.67 T -1 F -(whic) 189 268.67 T -(h) 209.61 268.67 T -2 F -(;) 215.11 268.67 T -(/* mask of names or map components to be changed */) 252 268.67 T -(unsigned int) 126 255.67 T -1 F -(\336r) 189 255.67 T -(st_type) 198.67 255.67 T -2 F -(;) 234 255.67 T -(/* \336rst type whose name is to be changed */) 252 255.67 T -(unsigned int) 126 242.67 T -1 F -(num_types) 189 242.67 T -2 F -(;) 236.05 242.67 T -(/* number of types for which names are to be changed */) 252 242.67 T -(XkbDescPtr) 126 229.67 T -1 F -(xkb) 189 229.67 T -2 F -(;) 204.27 229.67 T -(/* k) 252 229.67 T -(e) 268.7 229.67 T -(yboard description from which names are to be tak) 273.42 229.67 T -(en */) 496.93 229.67 T -2 12 Q --0.11 (Use) 108 210 P -1 F --0.11 ( XkbSetNames) 126.66 210 P -2 F --0.11 ( to change many names at the same time. For each bit set in) 195.54 210 P -1 F --0.11 (whic) 482.96 210 P --0.11 (h) 505.45 210 P -2 F --0.11 (,) 511.45 210 P -1 F --0.11 (Xkb-) 517.34 210 P -(SetNames) 108 197 T -2 F -( takes the corresponding value \050or values in the case of arrays\051 from the key-) 155.33 197 T -(board description) 108 184 T -1 F -(xkb) 194.65 184 T -2 F -( and sends it to the server.) 211.31 184 T -(The) 108 163 T -1 F -(\336r) 129.66 163 T -(st_type) 140.21 163 T -2 F -( and) 174.2 163 T -1 F -(num_types) 197.53 163 T -2 F -( arguments are used only if) 248.86 163 T -5 F --0.6 (XkbKeyTypeNamesMask) 382.16 163 S -2 F -( or) 507.57 163 T -5 F --0.6 (XkbKTLevelNamesMask) 108 150 S -2 F -( is set in) 233.4 150 T -1 F -(whic) 276.08 150 T -(h) 298.56 150 T -2 F -( and specify a subset of the types for which the) 304.56 150 T --0.09 (corresponding names are to be changed. If either or both of these mask bits are set but the) 108 137 P -(specified types are illegal,) 108 124 T -1 F -(XkbSetNames) 236.3 124 T -2 F -( returns) 302.29 124 T -5 F --0.6 (False) 341.62 124 S -2 F -( and does not update any of the) 374.62 124 T -(names specified in) 108 111 T -1 F -(whic) 200.32 111 T -(h) 222.8 111 T -2 F -(. The specified types are illegal if) 228.8 111 T -1 F -(xkb) 392.1 111 T -2 F -( does not include a map) 408.76 111 T -(component or if) 108 98 T -1 F -(\336r) 187.66 98 T -(st_type) 198.2 98 T -2 F -( and) 232.2 98 T -1 F -(num_types) 255.53 98 T -2 F -( specify types that are not defined in the key-) 306.85 98 T -(board description.) 108 85 T -FMENDPAGE -%%EndPage: "183" 195 -%%Page: "184" 196 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(184) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(18 Symbolic Names) 445.28 744.87 T -0 F -(The XkbNameChangesRec Structure) 108 712.67 T -2 12 Q -(The) 108 694 T -5 F --0.6 (XkbNameChangesRec) 129.66 694 S -2 F -( allows applications to identify small modifications to the) 241.86 694 T -(symbolic names and effectively reduces the amount of traffic sent to the server:) 108 681 T -2 11 Q -(typedef struct _XkbNameChanges {) 108 660.67 T -(unsigned int) 126 647.67 T -(changed;) 192 647.67 T -(/*) 268.5 647.67 T -2 12 Q -(name components that have changed) 279.81 647.67 T -2 11 Q -( */) 456.44 647.67 T -(unsigned char) 126 634.67 T -(\336rst_type;) 192 634.67 T -(/* \336rst k) 268.5 634.67 T -(e) 305.06 634.67 T -(y type with a ne) 309.78 634.67 T -(w name */) 379.78 634.67 T -(unsigned char) 126 621.67 T -(num_types;) 192 621.67 T -(/* number of types with ne) 268.5 621.67 T -(w names */) 386.46 621.67 T -(unsigned char) 126 608.67 T -(\336rst_lvl;) 192 608.67 T -(/* \336rst k) 268.5 608.67 T -(e) 305.06 608.67 T -(y type with ne) 309.78 608.67 T -(w le) 372.14 608.67 T -(v) 390.5 608.67 T -(el names */) 395.84 608.67 T -(unsigned char) 126 595.67 T -(num_lvls;) 192 595.67 T -(/* number of k) 268.5 595.67 T -(e) 333.47 595.67 T -(y types with ne) 338.18 595.67 T -(w le) 404.82 595.67 T -(v) 423.18 595.67 T -(el names */) 428.52 595.67 T -(unsigned char) 126 582.67 T -(num_aliases;) 192 582.67 T -(/* if k) 268.5 582.67 T -(e) 294.67 582.67 T -(y aliases changed, total number of k) 299.39 582.67 T -(e) 457.83 582.67 T -(y aliases */) 462.55 582.67 T -(unsigned char) 126 569.67 T -(num_r) 192 569.67 T -(g;) 220.52 569.67 T -(/* if radio groups changed, total number of radio groups */) 268.5 569.67 T -(unsigned char) 126 556.67 T -(\336rst_k) 192 556.67 T -(e) 220.01 556.67 T -(y;) 224.73 556.67 T -(/* \336rst k) 268.5 556.67 T -(e) 305.06 556.67 T -(y with a ne) 309.78 556.67 T -(w name */) 358.08 556.67 T -(unsigned char) 126 543.67 T -(num_k) 192 543.67 T -(e) 222.45 543.67 T -(ys;) 227.17 543.67 T -(/* number of k) 268.5 543.67 T -(e) 333.47 543.67 T -(ys with ne) 338.18 543.67 T -(w names */) 383.13 543.67 T -(unsigned short) 126 530.67 T -(changed_vmods;) 192 530.67 T --0.06 (/* mask of virtual modi\336ers for which names ha) 268.5 530.67 P --0.06 (v) 479.2 530.67 P --0.06 (e changed */) 484.53 530.67 P -(unsigned long) 126 517.67 T -(changed_indicators;) 192 517.67 T -(/* mask of indicators for which names were changed */) 280.59 517.67 T -(unsigned char) 126 504.67 T -(changed_groups;) 192 504.67 T -(/* mask of groups for which names were changed */) 268.5 504.67 T -(}) 108 491.67 T -3 F -(XkbNameChangesRec) 116.03 491.67 T -2 F -(, *XkbNameChangesPtr) 221.74 491.67 T -2 12 Q -(The) 108 472 T -1 F -(changed) 129.66 472 T -2 F -( field specifies the name components that have changed and is the bitwise) 170.32 472 T -(inclusive OR of the valid names mask bits defined in Table 18.1. The rest of the fields in) 108 459 T -(the structure specify the ranges that have changed for the various kinds of symbolic) 108 446 T -(names, as shown in Table 18.2.) 108 433 T -1 F -(XkbChangeNames) 108 186 T -2 F -( provides a more flexible method for changing symbolic names than) 196.66 186 T -1 F -(XkbSetNames) 108 173 T -2 F -( and requires the use of an) 173.99 173 T -5 F --0.6 (XkbNameChangesRec) 302.95 173 S -2 F -( structure.) 415.15 173 T -2 11 Q -(Bool) 108 152.67 T -3 F -(XkbChangeNames) 132.15 152.67 T -2 F -(\050) 220.15 152.67 T -1 F -(dpy) 223.81 152.67 T -(, xkb, c) 239.09 152.67 T -(hang) 270.07 152.67 T -(es) 291.96 152.67 T -2 F -(\051) 301.13 152.67 T -(Display *) 126 139.67 T -1 F -(dpy) 228.75 139.67 T -2 F -(;) 244.63 139.67 T -(/* connection to the X serv) 275.25 139.67 T -(er */) 393.93 139.67 T -(XkbDescPtr) 126 126.67 T -1 F -(xkb) 228.75 126.67 T -2 F -(;) 244.02 126.67 T --0.19 (/* k) 275.25 126.67 P --0.19 (e) 291.76 126.67 P --0.19 (yboard description from which names are to be tak) 296.48 126.67 P --0.19 (en */) 518.49 126.67 P -(XkbNameChangesPtr) 126 113.67 T -1 F -(c) 228.75 113.67 T -(hang) 233.47 113.67 T -(es) 255.36 113.67 T -2 F -(;) 264.52 113.67 T -(/* names map components to be updated on the serv) 275.25 113.67 T -(er */) 505.14 113.67 T -1 12 Q --0.14 (XkbChang) 108 94 P --0.14 (eNames) 158.54 94 P -2 F --0.14 ( copies any names specified by) 196.54 94 P -1 F --0.14 (c) 347.69 94 P --0.14 (hang) 352.83 94 P --0.14 (es) 376.71 94 P -2 F --0.14 ( from the keyboard description,) 386.71 94 P -1 F -(xkb) 108 81 T -2 F -(, to the X server specified by) 124.66 81 T -1 F -(dpy) 265.96 81 T -2 F -(.) 283.28 81 T -1 F -( XkbChang) 286.28 81 T -(eNames) 339.83 81 T -2 F -( aborts and returns) 377.82 81 T -5 F --0.6 (False) 469.8 81 S -2 F -( if any) 502.8 81 T -(illegal type names or type shift level names are specified by) 108 68 T -1 F -(c) 398.28 68 T -(hang) 403.43 68 T -(es) 427.31 68 T -2 F -(.) 437.3 68 T -3 F -(T) 226.42 413 T -(able 18.2 XkbNameChanges Fields) 233.32 413 T -1 F -(Mask) 111 392 T -(F) 244.5 392 T -(ields) 251.29 392 T -(Component) 339.75 392 T -(F) 418.5 392 T -(ield) 425.29 392 T -2 11 Q -(XkbK) 111 373.67 T -(e) 137.61 373.67 T -(yT) 142.33 373.67 T -(ypeNamesMask) 153.67 373.67 T -(\336rst_type,) 244.5 373.67 T -(num_types) 244.5 362.67 T -(Xkb->map) 339.75 373.67 T -(type[*].name) 418.5 373.67 T -(XkbKTLe) 111 344.67 T -(v) 155.93 344.67 T -(elNamesMask) 161.27 344.67 T -(\336rst_lvl,) 244.5 344.67 T -(num_lvls) 244.5 333.67 T -(Xkb->map) 339.75 344.67 T -(type[*].lvl_names[*]) 418.5 344.67 T -(XkbK) 111 315.67 T -(e) 137.61 315.67 T -(yAliasesMask) 142.33 315.67 T -(num_aliases) 244.5 315.67 T -(Xkb->names) 339.75 315.67 T -(k) 418.5 315.67 T -(e) 423.89 315.67 T -(y_aliases[*]) 428.61 315.67 T -(XkbRGNamesMask) 111 297.67 T -(num_r) 244.5 297.67 T -(g) 273.02 297.67 T -(Xkb->names) 339.75 297.67 T -(radio_groups[*]) 418.5 297.67 T -(XkbK) 111 279.67 T -(e) 137.61 279.67 T -(yNamesMask) 142.33 279.67 T -(\336rst_k) 244.5 279.67 T -(e) 272.51 279.67 T -(y) 277.23 279.67 T -(,) 282.01 279.67 T -(num_k) 244.5 268.67 T -(e) 274.95 268.67 T -(ys) 279.67 268.67 T -(Xkb->names) 339.75 279.67 T -(k) 418.5 279.67 T -(e) 423.89 279.67 T -(ys[*]) 428.61 279.67 T -(XkbV) 111 250.67 T -(irtualModNamesMask) 137.22 250.67 T -(changed_vmods) 244.5 250.67 T -(Xkb->names) 339.75 250.67 T -(vmods[*]) 418.5 250.67 T -(XkbIndicatorNamesMask) 111 232.67 T -(changed_indicators) 244.5 232.67 T -(Xkb->names) 339.75 232.67 T -(indicators[*]) 418.5 232.67 T -(XkbGroupNamesMask) 111 214.67 T -(changed_groups) 244.5 214.67 T -(Xkb->names) 339.75 214.67 T -(groups[*]) 418.5 214.67 T -108 405 519 405 2 L -V -0.5 H -0 Z -N -108 384 519 384 2 L -V -N -FMENDPAGE -%%EndPage: "184" 196 -%%Page: "185" 197 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(185) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(18 Symbolic Names) 445.28 744.87 T -0 12 Q -(18.5) 72 712 T -(T) 108 712 T -(rac) 114.37 712 T -(king Name Chang) 132.14 712 T -(es) 233.62 712 T -2 F --0.3 (Whenever a symbolic name changes in the server\325s keyboard description, the server sends) 108 692 P -(a) 108 679 T -5 F --0.6 (XkbNamesNotify) 116.33 679 S -2 F -( event to all interested clients. To receive name notify events, use) 208.73 679 T -1 F -(XkbSelectEvents) 108 666 T -2 F -( \050see section 4.3\051 with) 187.31 666 T -5 F --0.6 (XkbNamesNotifyMask) 295.96 666 S -2 F -( in both the) 414.76 666 T -1 F -(bits_to_c) 108 653 T -(hang) 151.82 653 T -(e) 175.7 653 T -2 F -( and) 181.03 653 T -1 F -(values_for_bits) 204.36 653 T -2 F -( parameters.) 278.36 653 T -(To receive events for only specific names, use) 108 632 T -1 F -(XkbSelectEventDetails) 332.94 632 T -2 F -(. Set the) 442.25 632 T -1 F -(e) 484.25 632 T -(vent_type) 489.4 632 T -2 F -(parameter to) 108 619 T -5 F --0.6 (XkbNamesNotify) 171.31 619 S -2 F -(, and set both the) 263.71 619 T -1 F -(bits_to_c) 348.37 619 T -(hang) 392.2 619 T -(e) 416.08 619 T -2 F -(and) 424.41 619 T -1 F -( values_for_bits) 441.73 619 T -2 F -(detail parameter to a mask composed of a bitwise OR of masks in Table 18.1.) 108 606 T -(The structure for the) 108 585 T -5 F --0.6 (XkbNamesNotify) 209.3 585 S -2 F -( event is defined as follows:) 301.71 585 T -2 11 Q -(typedef struct {) 108 564.67 T -(int) 126 551.67 T -(type;) 189.75 551.67 T -(/* Xkb e) 269.25 551.67 T -(xtension base e) 306.97 551.67 T -(v) 373.9 551.67 T -(ent code */) 379.24 551.67 T -(unsigned long) 126 538.67 T -(serial;) 189.75 538.67 T -(/* X serv) 269.25 538.67 T -(er serial number for e) 309.41 538.67 T -(v) 403.82 538.67 T -(ent */) 409.16 538.67 T -(Bool) 126 525.67 T -(send_e) 189.75 525.67 T -(v) 220.02 525.67 T -(ent;) 225.36 525.67 T -(/*) 269.25 525.67 T -5 12 Q --0.6 (True) 280.56 525.67 S -2 11 Q -( => synthetically generated */) 306.96 525.67 T -(Display *) 126 512.67 T -(display;) 189.75 512.67 T -(/* serv) 269.25 512.67 T -(er connection where e) 298.72 512.67 T -(v) 395.27 512.67 T -(ent generated */) 400.6 512.67 T -(T) 126 499.67 T -(ime) 132.34 499.67 T -(time;) 189.75 499.67 T -(/* serv) 269.25 499.67 T -(er time when e) 298.72 499.67 T -(v) 363.51 499.67 T -(ent generated */) 368.84 499.67 T -(int) 126 486.67 T -(xkb_type;) 189.75 486.67 T -(/*) 269.25 486.67 T -5 F --0.33 (XkbNamesNotify) 280.56 486.67 S -2 F -( */) 368.34 486.67 T -(int) 126 473.67 T -(de) 189.75 473.67 T -(vice;) 199.86 473.67 T -(/* Xkb de) 269.25 473.67 T -(vice ID, will not be) 312.36 473.67 T -5 F --0.33 (XkbUseCoreKbd) 400.35 473.67 S -2 F -( */) 481.86 473.67 T -(unsigned int) 126 460.67 T -(changed;) 189.75 460.67 T -(/* mask of) 269.25 460.67 T -2 12 Q -(name components that have changed) 318.44 460.67 T -2 11 Q -( */) 495.07 460.67 T -(int) 126 447.67 T -(\336rst_type;) 189.75 447.67 T -(/* \336rst k) 269.25 447.67 T -(e) 305.81 447.67 T -(y type with a ne) 310.53 447.67 T -(w name */) 380.53 447.67 T -(int) 126 434.67 T -(num_types;) 189.75 434.67 T -(/* number of types with ne) 269.25 434.67 T -(w names */) 387.21 434.67 T -(int) 126 421.67 T -(\336rst_lvl;) 189.75 421.67 T -(/* \336rst k) 269.25 421.67 T -(e) 305.81 421.67 T -(y type with ne) 310.53 421.67 T -(w le) 372.89 421.67 T -(v) 391.25 421.67 T -(el names */) 396.59 421.67 T -(int) 126 408.67 T -(num_lvls;) 189.75 408.67 T -(/* number of k) 269.25 408.67 T -(e) 334.22 408.67 T -(y types with ne) 338.93 408.67 T -(w le) 405.57 408.67 T -(v) 423.93 408.67 T -(el names */) 429.27 408.67 T -(int) 126 395.67 T -(num_aliases;) 189.75 395.67 T -(/* if k) 269.25 395.67 T -(e) 295.42 395.67 T -(y aliases changed, total number of k) 300.14 395.67 T -(e) 458.58 395.67 T -(y aliases */) 463.3 395.67 T -(int) 126 382.67 T -(num_radio_groups;) 189.75 382.67 T -(/* if radio groups changed, total number of radio groups */) 275.91 382.67 T -(unsigned int) 126 369.67 T -(changed_vmods;) 189.75 369.67 T --0.14 (/* mask of virtual modi\336ers for which names ha) 269.25 369.67 P --0.14 (v) 479.35 369.67 P --0.14 (e changed */) 484.68 369.67 P -(unsigned int) 126 356.67 T -(changed_groups;) 189.75 356.67 T -(/* mask of groups for which names were changed */) 269.25 356.67 T -(unsigned int) 126 343.67 T -(changed_indicators;) 189.75 343.67 T -(/* mask of indicators for which names were changed */) 278.34 343.67 T -(int) 126 330.67 T -(\336rst_k) 189.75 330.67 T -(e) 217.76 330.67 T -(y;) 222.48 330.67 T -(/* \336rst k) 269.25 330.67 T -(e) 305.81 330.67 T -(y with a ne) 310.53 330.67 T -(w name */) 358.83 330.67 T -(int) 126 317.67 T -(num_k) 189.75 317.67 T -(e) 220.2 317.67 T -(ys;) 224.92 317.67 T -(/* number of k) 269.25 317.67 T -(e) 334.22 317.67 T -(ys with ne) 338.93 317.67 T -(w names */) 383.88 317.67 T -(}) 108 304.67 T -3 F -(XkbNamesNotifyEv) 116.03 304.67 T -(ent) 210.02 304.67 T -2 F -(;) 224.69 304.67 T -2 12 Q -(The) 108 285 T -1 F -(c) 129.66 285 T -(hang) 134.81 285 T -(ed) 158.69 285 T -2 F -( field specifies the name components that have changed and is the bitwise) 170.02 285 T -(inclusive OR of the valid names mask bits defined in Table 18.1. The other fields in this) 108 272 T -(event are interpreted as the like-named fields in an) 108 259 T -5 F --0.6 (XkbNameChangesRec) 353.6 259 S -2 F -(, as previously) 465.81 259 T -(defined.) 108 246 T -(When your application receives a X) 108 225 T -5 F --0.6 (kbNamesNotify) 280.28 225 S -2 F -( event, you can note the changed) 366.09 225 T -(names in a changes structure using) 108 212 T -1 F -(XkbNoteNameChanges) 277.97 212 T -2 F -(.) 389.29 212 T -2 11 Q -(v) 108 191.67 T -(oid) 113.28 191.67 T -3 F -(XkbNoteNameChanges) 130.09 191.67 T -2 F -(\050) 240.08 191.67 T -1 F -(old) 243.74 191.67 T -2 F -(,) 257.8 191.67 T -1 F -( ne) 260.55 191.67 T -(w) 273.52 191.67 T -2 F -(,) 280.14 191.67 T -1 F -( wanted) 282.89 191.67 T -2 F -(\051) 317.42 191.67 T -(XkbNameChangesPtr) 126 178.67 T -1 F -(old) 234 178.67 T -2 F -(;) 248.06 178.67 T -(/*) 279 178.67 T -5 F --0.33 (XkbNameChanges) 290.31 178.67 S -2 F -( structure to be updated */) 378.09 178.67 T -(XkbNamesNotifyEv) 126 165.67 T -(ent *) 216.27 165.67 T -1 F -(ne) 237.96 165.67 T -(w) 248.18 165.67 T -2 F -(;) 255.51 165.67 T -(/* e) 279 165.67 T -(v) 294.92 165.67 T -(ent from which changes are to be copied */) 300.25 165.67 T -(unsigned int) 126 152.67 T -1 F -(wanted) 234 152.67 T -2 F -(;) 265.78 152.67 T -(/* types of names for which changes are to be noted */) 279 152.67 T -2 12 Q -(The) 108 133 T -1 F -(wanted) 129.66 133 T -2 F -( parameter is the bitwise inclusive OR of the valid names mask bits shown in) 164.33 133 T --0.02 (Table 18.1.) 108 120 P -1 F --0.02 (XkbNoteNameChang) 165.28 120 P --0.02 (es) 266.49 120 P -2 F --0.02 ( copies any changes that are reported in) 276.48 120 P -1 F --0.02 (ne) 468.91 120 P --0.02 (w) 480.06 120 P -2 F --0.02 ( and speci-) 488.06 120 P -(fied in) 108 107 T -1 F -(wanted) 142 107 T -2 F -( into the changes record specified by) 176.66 107 T -1 F -(old) 355.62 107 T -2 F -(.) 370.96 107 T -FMENDPAGE -%%EndPage: "185" 197 -%%Page: "186" 198 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(186) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(18 Symbolic Names) 445.28 744.87 T -2 12 Q -(To update the local copy of the keyboard description with the actual values, pass to) 108 712 T -1 F -(Xkb-) 510.6 712 T -(GetNameChanges) 108 699 T -2 F -( the results of one or more calls to) 195.32 699 T -1 F -(XkbNoteNameChanges) 361.63 699 T -2 F -(.) 472.96 699 T -2 11 Q -(Status) 108 678.67 T -3 F -(XkbGetNameChanges) 137.65 678.67 T -2 F -(\050) 242.75 678.67 T -1 F -(dpy) 246.41 678.67 T -2 F -(,) 261.58 678.67 T -1 F -( xkb) 264.33 678.67 T -2 F -(,) 282.35 678.67 T -1 F -( c) 285.1 678.67 T -(hang) 292.57 678.67 T -(es) 314.46 678.67 T -2 F -(\051) 323.62 678.67 T -(Display *) 126 665.67 T -1 F -(dpy) 234 665.67 T -2 F -(;) 249.88 665.67 T -(/* connection to the X serv) 279 665.67 T -(er */) 397.68 665.67 T -(XkbDescPtr) 126 652.67 T -1 F -(xkb) 234 652.67 T -2 F -(;) 249.27 652.67 T -(/* k) 279 652.67 T -(e) 295.7 652.67 T -(yboard description to which names are copied */) 300.42 652.67 T -(XkbNameChangesPtr) 126 639.67 T -1 F -(c) 234 639.67 T -(hang) 238.72 639.67 T -(es) 260.61 639.67 T -2 F -(;) 269.77 639.67 T -(/* names components to be obtained from the serv) 279 639.67 T -(er */) 500.64 639.67 T -1 12 Q -(XkbGetNameChang) 108 620 T -(es) 203.87 620 T -2 F -( examines the) 213.86 620 T -1 F -(c) 282.85 620 T -(hang) 288 620 T -(es) 311.88 620 T -2 F -( parameter, retrieves the necessary informa-) 321.88 620 T -(tion from the server, and places the results into the) 108 607 T -1 F -(xkb) 353.63 607 T -2 F -( keyboard description.) 370.28 607 T -1 F --0.22 (XkbGetNamesChang) 108 586 P --0.22 (es) 208.54 586 P -2 F --0.22 ( can generate) 218.53 586 P -5 F --0.49 -0.6 (BadAlloc) 284.16 586 B -2 F --0.22 (,) 336.96 586 P -5 F --0.49 -0.6 (BadImplementation,) 342.74 586 B -2 F --0.22 ( and) 461.54 586 P -5 F --0.49 -0.6 (BadMatch) 484.42 586 B -2 F -(errors.) 108 573 T -0 F -(18.6) 72 548 T -(Allocating and Freeing Symbolic Names) 108 548 T -2 F -(Most applications do not need to directly allocate symbolic names structures. Do not allo-) 108 528 T -(cate a names structure directly using) 108 515 T -1 F -(malloc) 285.96 515 T -2 F -( or) 318.62 515 T -1 F -(Xmalloc) 334.62 515 T -2 F -( if your application changes the) 374.62 515 T -(number of key aliases or radio groups or constructs a symbolic names structure without) 108 502 T -(loading the necessary components from the X server. Instead use) 108 489 T -1 F -(XkbAllocNames) 422.93 489 T -2 F -(.) 499.58 489 T -2 11 Q -(Status) 108 468.67 T -3 F -(XkbAllocNames) 137.65 468.67 T -2 F -(\050) 214.03 468.67 T -1 F -(xkb, whic) 217.69 468.67 T -(h, num_r) 259.07 468.67 T -(g) 298.39 468.67 T -(, num_k) 303.78 468.67 T -(e) 338.49 468.67 T -(y_aliases\051) 343.05 468.67 T -2 F -(XkbDescPtr) 126 455.67 T -1 F -(xkb;) 189 455.67 T -2 F -(/* k) 234 455.67 T -(e) 250.7 455.67 T -(yboard description for which names are to be allocated */) 255.42 455.67 T -(unsigned int) 126 442.67 T -1 F -(whic) 189 442.67 T -(h;) 209.61 442.67 T -2 F -(/* mask of names to be allocated */) 234 442.67 T -(int) 126 429.67 T -1 F -(num_r) 189 429.67 T -(g;) 217.31 429.67 T -2 F -(/* total number of radio group names needed */) 234 429.67 T -(int) 126 416.67 T -1 F -(num_k) 189 416.67 T -(e) 218.22 416.67 T -(y_aliases;) 222.77 416.67 T -2 F -(/* total number of k) 267.38 416.67 T -(e) 354.65 416.67 T -(y aliases needed */) 359.37 416.67 T -1 12 Q -(XkbAllocNames) 108 397 T -2 F -( can return) 184.66 397 T -5 F --0.6 (BadAlloc) 238.97 397 S -2 F -(,) 291.77 397 T -5 F --0.6 (BadMatch,) 297.77 397 S -2 F -( and) 357.17 397 T -5 F --0.6 (BadValue) 380.5 397 S -2 F -( errors.) 433.3 397 T -(The) 470.28 397 T -1 F -(whic) 491.94 397 T -(h) 514.43 397 T -2 F -(parameter is the bitwise inclusive OR of the valid names mask bits defined in Table 18.1.) 108 384 T -(Do not free symbolic names structures directly using) 108 363 T -1 F -(fr) 364.63 363 T -(ee) 372.19 363 T -2 F -( or) 382.85 363 T -1 F -(XF) 398.84 363 T -(r) 412.85 363 T -(ee) 417.07 363 T -2 F -(. Use) 427.73 363 T -1 F -(XkbF) 455.39 363 T -(r) 480.72 363 T -(eeNames) 484.94 363 T -2 F -(instead.) 108 350 T -2 11 Q -(v) 108 329.67 T -(oid) 113.28 329.67 T -3 F -(XkbFr) 130.09 329.67 T -(eeNames) 161.67 329.67 T -2 F -(\050) 203.21 329.67 T -1 F -(xkb, whic) 206.87 329.67 T -(h, fr) 248.25 329.67 T -(ee_map\051) 266.18 329.67 T -2 F -(XkbDescPtr) 126 316.67 T -1 F -(xkb) 189 316.67 T -2 F -(;) 204.27 316.67 T -(/* k) 243 316.67 T -(e) 259.7 316.67 T -(yboard description for which names are to be freed */) 264.42 316.67 T -(unsigned int) 126 303.67 T -1 F -(whic) 189 303.67 T -(h) 209.61 303.67 T -2 F -(;) 215.11 303.67 T -(/* mask of names components to be freed */) 243 303.67 T -(Bool) 126 290.67 T -1 F -(fr) 189 290.67 T -(ee_map) 195.93 290.67 T -2 F -(;) 230.14 290.67 T -(/*) 243 290.67 T -5 12 Q --0.6 (True) 254.31 290.67 S -2 11 Q -( => XkbNamesRec structure itself should be freed */) 280.71 290.67 T -2 12 Q -(The) 108 271 T -1 F -(whic) 129.66 271 T -(h) 152.15 271 T -2 F -( parameter is the bitwise inclusive OR of the valid names mask bits defined in) 158.15 271 T -(Table 18.1.) 108 258 T -FMENDPAGE -%%EndPage: "186" 198 -%%Page: "187" 199 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(187) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(19 Replacing a K) 363.25 744.87 T -(e) 445.16 744.87 T -(yboard \322On the Fly\323) 449.88 744.87 T -0 14 Q -(19) 72 710.67 T -(Replacing a K) 108 710.67 T -(e) 200.37 710.67 T -(yboar) 207.95 710.67 T -(d \322On the Fl) 245.79 710.67 T -(y\323) 325.7 710.67 T -2 12 Q -(Some operating system and X server implementations allow \322hot plugging\323 of input) 108 688 T -(devices. When using these implementations, input devices can be unplugged and new) 108 675 T -(ones plugged in without restarting the software that is using those devices. There is no) 108 662 T -(provision in the standard X server for notification of client programs if input devices are) 108 649 T -(unplugged and/or new ones plugged in. In the case of the X keyboard, this could result in) 108 636 T -(the X server having a keymap that does not match the new keyboard.) 108 623 T -(If the X server implementation supports the X input device extension, a client program) 108 602 T -(may also change the X keyboard programmatically. The) 108 589 T -1 F -(XChangeKeyboardDevice) 380.94 589 T -2 F -(input) 509.24 589 T --0.19 (extension request allows a client to designate an input extension keyboard device as the X) 108 576 P -(keyboard, in which case the old X keyboard device becomes inaccessible except via the) 108 563 T --0.09 (input device extension. In this case, core protocol) 108 550 P -5 F --0.19 -0.6 (XMappingNotify) 347.94 550 B -2 F --0.09 ( and input extension) 440.34 550 P -5 F --0.6 (XChangeDeviceNotify) 108 537 S -2 F -( events are generated to notify all clients that a new keyboard) 233.4 537 T -(with a new keymap has been designated.) 108 524 T -(When a client opens a connection to the X server, the server reports the minimum and) 108 503 T --0.1 (maximum keycodes. The server keeps track of the minimum and maximum keycodes last) 108 490 P -(reported to each client. When delivering events to a particular client, the server filters out) 108 477 T -(any events that fall outside of the valid range for the client.) 108 464 T -(Xkb provides an) 108 443 T -5 F --0.6 (XkbNewKeyboardNotify) 190.32 443 S -2 F -( event that reports a change in keyboard) 322.32 443 T -(geometry and/or the range of supported keycodes. The server can generate an) 108 430 T -5 F --0.6 (XkbNewKeyboardNotify) 108 417 S -2 F -( event when it detects a new keyboard or in response to an) 240 417 T -1 F -(XkbGetK) 108 404 T -(e) 151.57 404 T -(yboar) 156.54 404 T -(dByName) 184.09 404 T -2 F -( request that loads a new keyboard description. Selecting for) 230.75 404 T -5 F --0.6 (XkbNewKeyboardNotify) 108 391 S -2 F -( events allows Xkb-aware clients to be notified whenever a) 240 391 T -(keyboard change occurs that may affect the keymap.) 108 378 T -(When a client requests) 108 357 T -5 F --0.6 (XkbNewKeyboardNotify) 219.97 357 S -2 F -( events, the server compares the range) 351.98 357 T --0.07 (of keycodes for the current keyboard to the range of keycodes that are valid for the client.) 108 344 P --0.27 (If they are not the same, the server immediately sends the client an) 108 331 P -5 F --0.59 -0.6 (XkbNewKeyboardNo-) 427.8 331 B --0.6 (tify) 108 318 S -2 F -( event. Even if the \322new\323 keyboard is not new to the server, it is new to this particu-) 134.4 318 T -(lar client.) 108 305 T -(When the server sends an) 108 284 T -5 F --0.6 (XkbNewKeyboardNotify) 233.63 284 S -2 F -( event to a client to inform it of a) 365.63 284 T -(new keycode range, it resets the stored range of legal keycodes for the client to the key-) 108 271 T --0.36 (code range reported in the event; it does not reset this range for the client if it does not sent) 108 258 P -(an) 108 245 T -5 F --0.6 (XkbNewKeyboardNotify) 122.33 245 S -2 F -( event to a client. Because Xkb-unaware clients and) 254.33 245 T -(Xkb-aware clients that do not request) 108 232 T -5 F --0.6 (XkbNewKeyboardNotify) 290.63 232 S -2 F -( events are never sent) 422.63 232 T -(these events, the server\325s notion of the legal keycode range never changes, and these cli-) 108 219 T -(ents never receive events from keys that fall outside of their notion of the legal keycode) 108 206 T -(range.) 108 193 T -(Clients that have not selected to receive) 108 172 T -5 F --0.6 (XkbNewKeyboardNotify) 301.63 172 S -2 F -( events do, however,) 433.64 172 T --0.42 (receive the) 108 159 P -5 F --0.92 -0.6 (XkbNewKeyboardNotify) 162.47 159 B -2 F --0.42 ( event when a keyboard change occurs. Clients that) 294.48 159 P -(have not selected to receive this event also receive numerous other events detailing the) 108 146 T -(individual changes that occur when a keyboard change occurs.) 108 133 T --0.33 (Clients wishing to track changes in) 108 112 P -1 F --0.33 (min_key_code) 277.36 112 P -2 F --0.33 ( and) 346 112 P -1 F --0.33 (max_key_code) 368.68 112 P -2 F --0.33 ( must watch for both) 439.31 112 P -5 F --0.6 (XkbNewKeyboardNotify) 108 99 S -2 F -( and) 240 99 T -5 F --0.6 (XkbMapNotify) 263.33 99 S -2 F -( events, because a simple mapping) 342.53 99 T --0.15 (change causes an) 108 86 P -5 F --0.33 -0.6 (XkbMapNotify) 193.18 86 B -2 F --0.15 ( event and may change the range of valid keycodes, but) 272.38 86 P -(does not cause an) 108 73 T -5 F --0.6 (XkbNewKeyboardNotify) 195.31 73 S -2 F -( event. If a client does not select for) 327.32 73 T -FMENDPAGE -%%EndPage: "187" 199 -%%Page: "188" 200 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(188) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(19 Replacing a K) 363.25 744.87 T -(e) 445.16 744.87 T -(yboard \322On the Fly\323) 449.88 744.87 T -5 12 Q --0.6 (XkbNewKeyboardNotify) 108 712 S -2 F -( events, the server restricts the range of keycodes reported to) 240 712 T -(the client.) 108 699 T -(In addition to filtering out-of-range key events, Xkb:) 108 678 T -2 11 Q -(\245) 126 657.67 T -(Adjusts core protocol) 139.68 657.67 T -5 12 Q --0.6 (MappingNotify) 237.14 657.67 S -2 11 Q -( e) 322.94 657.67 T -(v) 330.3 657.67 T -(ents to refer only to k) 335.64 657.67 T -(e) 429.93 657.67 T -(ys that match the) 434.65 657.67 T -(stored le) 139.68 645.67 T -(g) 177.09 645.67 T -(al range.) 182.54 645.67 T -(\245) 126 633.67 T -(Reports k) 139.68 633.67 T -(e) 182.04 633.67 T -(yboard mappings for k) 186.76 633.67 T -(e) 286.55 633.67 T -(ys that match the stored le) 291.27 633.67 T -(g) 406.29 633.67 T -(al range to clients that) 411.73 633.67 T -(issue a core protocol) 139.68 621.67 T -5 12 Q --0.6 (GetKeyboardMapping) 233.16 621.67 S -2 11 Q -( request.) 351.96 621.67 T -(\245) 126 609.67 T -(Reports modi\336er mappings only for k) 139.68 609.67 T -(e) 305.48 609.67 T -(ys that match the stored le) 310.2 609.67 T -(g) 425.22 609.67 T -(al range to clients) 430.66 609.67 T -(that issue a core protocol) 139.68 597.67 T -5 12 Q --0.6 (GetModifierMapping) 252.41 597.67 S -2 11 Q -( request.) 371.21 597.67 T -(\245) 126 585.67 T -(Restricts the core protocol) 139.68 585.67 T -5 12 Q --0.6 (ChangeKeyboardMapping) 258.22 585.67 S -2 11 Q -( and) 396.82 585.67 T -5 12 Q --0.6 (SetModifierMap-) 418.2 585.67 S --0.6 (ping) 139.68 573.67 S -2 11 Q -( requests to k) 166.08 573.67 T -(e) 224.33 573.67 T -(ys that f) 229.04 573.67 T -(all inside the stored le) 264.38 573.67 T -(g) 360.76 573.67 T -(al range.) 366.2 573.67 T -2 12 Q -(In short, Xkb does everything possible to hide from Xkb-unaware clients the fact that the) 108 555 T --0.3 (range of legal keycodes has changed, because such clients cannot be expected to deal with) 108 542 P -(them. Xkb events and requests are not modified in this manner; all Xkb events report the) 108 529 T --0.15 (full range of legal keycodes. No requested Xkb events are discarded, and no Xkb requests) 108 516 P -(have their keycode range clamped.) 108 503 T -(The structure for the) 108 482 T -5 F --0.6 (XkbNewKeyboardNotify) 209.3 482 S -2 F -( event is defined as follows:) 341.31 482 T -2 11 Q -(typedef struct _XkbNe) 126 461.67 T -(wK) 225.92 461.67 T -(e) 241.53 461.67 T -(yboardNotify {) 246.25 461.67 T -(int) 144 448.67 T -(type;) 234 448.67 T -(/* Xkb e) 333 448.67 T -(xtension base e) 370.72 448.67 T -(v) 437.65 448.67 T -(ent code */) 442.99 448.67 T -(unsigned long) 144 435.67 T -(serial;) 234 435.67 T -(/* X serv) 333 435.67 T -(er serial number for e) 373.16 435.67 T -(v) 467.57 435.67 T -(ent*/) 472.91 435.67 T -(Bool) 144 422.67 T -(send_e) 234 422.67 T -(v) 264.27 422.67 T -(ent;) 269.61 422.67 T -(/*) 333 422.67 T -5 12 Q --0.6 (True) 344.31 422.67 S -2 11 Q -( => synthetically generated */) 370.71 422.67 T -(Display *) 144 409.67 T -(display;) 234 409.67 T -(/* serv) 333 409.67 T -(er connection where e) 362.47 409.67 T -(v) 459.02 409.67 T -(ent generated */) 464.35 409.67 T -(T) 144 396.67 T -(ime) 150.34 396.67 T -(time;) 234 396.67 T -(/* serv) 333 396.67 T -(er time when e) 362.47 396.67 T -(v) 427.26 396.67 T -(ent generated */) 432.59 396.67 T -(int) 144 383.67 T -(xkb_type;) 234 383.67 T -(/*) 333 383.67 T -5 F --0.33 (XkbNewKeyboardNotify) 344.31 383.67 S -2 F -( */) 469.71 383.67 T -(int) 144 370.67 T -(de) 234 370.67 T -(vice;) 244.11 370.67 T -(/* de) 333 370.67 T -(vice ID of ne) 354.42 370.67 T -(w k) 411.87 370.67 T -(e) 427.95 370.67 T -(yboard */) 432.67 370.67 T -(int) 144 357.67 T -(old_de) 234 357.67 T -(vice;) 263.67 357.67 T -(/* de) 333 357.67 T -(vice ID of old k) 354.42 357.67 T -(e) 423.96 357.67 T -(yboard */) 428.68 357.67 T -(int) 144 344.67 T -(min_k) 234 344.67 T -(e) 262.01 344.67 T -(y_code;) 266.73 344.67 T -(/* min k) 333 344.67 T -(e) 369.56 344.67 T -(ycode of ne) 374.28 344.67 T -(w k) 425.32 344.67 T -(e) 441.4 344.67 T -(yboard */) 446.12 344.67 T -(int) 144 331.67 T -(max_k) 234 331.67 T -(e) 263.83 331.67 T -(y_code;) 268.55 331.67 T -(/* max k) 333 331.67 T -(e) 371.39 331.67 T -(ycode of ne) 376.11 331.67 T -(w k) 427.15 331.67 T -(e) 443.23 331.67 T -(yboard */) 447.95 331.67 T -(int) 144 318.67 T -(old_min_k) 234 318.67 T -(e) 281.56 318.67 T -(y_code;) 286.28 318.67 T -(/* min k) 333 318.67 T -(e) 369.56 318.67 T -(ycode of old k) 374.28 318.67 T -(e) 437.41 318.67 T -(yboard */) 442.13 318.67 T -(int) 144 305.67 T -(old_max_k) 234 305.67 T -(e) 283.39 305.67 T -(y_code;) 288.11 305.67 T -(/* max k) 333 305.67 T -(e) 371.39 305.67 T -(ycode of old k) 376.11 305.67 T -(e) 439.24 305.67 T -(yboard */) 443.96 305.67 T -(unsigned int) 144 292.67 T -(changed;) 234 292.67 T -(/* changed aspects - see masks belo) 333 292.67 T -(w */) 490.36 292.67 T -(char) 144 279.67 T -(req_major;) 234 279.67 T -(/* major request that caused change */) 333 279.67 T -(char) 144 266.67 T -(req_minor;) 234 266.67 T -(/* minor request that caused change */) 333 266.67 T -(}) 126 253.67 T -3 F -(XkbNewK) 134.03 253.67 T -(eyboardNotifyEv) 183.26 253.67 T -(ent) 263.81 253.67 T -2 F -(;) 278.47 253.67 T -2 12 Q -(To receive name notify events, use) 108 234 T -1 F -(XkbSelectEvents) 278.29 234 T -2 F -( \050see section 4.3\051 with) 357.6 234 T -5 F --0.6 (XkbNewKey-) 466.25 234 S --0.6 (boardNotifyMask) 108 221 S -2 F -( in both the) 207 221 T -1 F -(bits_to_c) 264.34 221 T -(hang) 308.16 221 T -(e) 332.04 221 T -2 F -( and) 337.37 221 T -1 F -(values_for_bits) 360.7 221 T -2 F -( parameters. To) 434.7 221 T -(receive events for only specific names, use) 108 208 T -1 F -(XkbSelectEventDetails) 316.61 208 T -2 F -(. Set the) 425.92 208 T -1 F -(e) 467.92 208 T -(vent_type) 473.06 208 T -2 F -(parameter to) 108 195 T -5 F --0.6 (XkbNewKeyboardNotify) 171.31 195 S -2 F -(, and set both the) 303.32 195 T -1 F -(bits_to_c) 387.98 195 T -(hang) 431.8 195 T -(e) 455.68 195 T -2 F -(and) 464.01 195 T -1 F -(values_for_bits) 108 182 T -2 F -( detail parameter to a mask composed of a bitwise OR of masks in Table) 182 182 T -(19.1.) 108 169 T -3 F -(T) 203.81 149 T -(able 19.1 XkbNewK) 210.71 149 T -(eyboardNotifyEv) 315.74 149 T -(ent Details) 403.62 149 T -1 F -(XkbNe) 109 129 T -(wK) 140.81 129 T -(e) 156.4 129 T -(yboar) 161.37 129 T -(dNotify) 188.92 129 T -(Event Details) 109 115 T -(V) 253 122 T -(alue) 259 122 T -(Cir) 307 122 T -(cumstances) 322.56 122 T -5 11 Q --0.33 (XkbNKN_KeycodesMask) 109 100.67 S --0.33 (\0501L<<0\051) 253 100.67 S -2 F -(Noti\336cation of k) 307 100.67 T -(e) 379.61 100.67 T -(ycode range changes w) 384.33 100.67 T -(anted) 486.54 100.67 T -5 F --0.33 (XkbNKN_GeometryMask) 109 86.67 S --0.33 (\0501L<<1\051) 253 86.67 S -2 F -(Noti\336cation of geometry changes w) 307 86.67 T -(anted) 464.53 86.67 T -5 F --0.33 (XkbNKN_DeviceIDMask) 109 72.67 S --0.33 (\0501L<<2\051) 253 72.67 S -2 F -(Noti\336cation of de) 307 72.67 T -(vice ID changes w) 384.33 72.67 T -(anted) 465.77 72.67 T -108 141 540 141 2 L -V -0.5 H -0 Z -N -108 110 540 110 2 L -V -N -FMENDPAGE -%%EndPage: "188" 200 -%%Page: "189" 201 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(189) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(19 Replacing a K) 363.25 744.87 T -(e) 445.16 744.87 T -(yboard \322On the Fly\323) 449.88 744.87 T -2 12 Q --0.2 (The) 108 639 P -1 F --0.2 (req_major) 129.46 639 P -2 F --0.2 ( and) 180.13 639 P -1 F --0.2 (req_minor) 203.06 639 P -2 F --0.2 ( fields indicate what type of keyboard change has occurred.) 253.72 639 P -(If) 108 618 T -1 F -(req_major) 118.99 618 T -2 F -( and) 169.66 618 T -1 F -(req_minor) 192.98 618 T -2 F -( are zero, the device change was not caused by a software) 243.65 618 T -(request to the server \321 a spontaneous change has occurred, such as hot-plugging a new) 108 605 T --0.2 (device. In this case,) 108 592 P -1 F --0.2 (device) 204.51 592 P -2 F --0.2 ( is the device identifier for the new, current X keyboard device,) 235.15 592 P -(but no implementation-independent guarantee can be made about) 108 579 T -1 F -(old_device) 424.61 579 T -2 F -(.) 476.59 579 T -1 F -(old_device) 482.59 579 T -2 F --0.33 (may be identical to) 108 566 P -1 F --0.33 (device) 201.35 566 P -2 F --0.33 ( \050an implementor is permitted to reuse the device specifier when) 231.99 566 P --0.35 (the device changes\051; or it may be different. Note that) 108 553 P -1 F --0.35 (req_major) 360.78 553 P -2 F --0.35 ( and) 411.44 553 P -1 F --0.35 (req_minor) 434.07 553 P -2 F --0.35 ( being zero) 484.73 553 P -(do not necessarily mean that the physical keyboard device has changed; rather, they only) 108 540 T -(imply a spontaneous change outside of software control \050some systems have keyboards) 108 527 T -(that can change personality at the press of a key\051.) 108 514 T -(If the keyboard change is the result of an X Input Extension) 108 493 T -5 F --0.6 (ChangeKeyboardDevice) 397.94 493 S -2 F --0.5 (request,) 108 480 P -1 F --0.5 (req_major) 148.16 480 P -2 F --0.5 ( contains the input extension major opcode, and) 198.82 480 P -1 F --0.5 (req_minor) 427.16 480 P -2 F --0.5 ( contains the) 477.83 480 P --0.38 (input extension request number for) 108 467 P -5 F --0.83 -0.6 (X_ChangeKeyboardDevice) 277.09 467 B -2 F --0.38 (. In this case,) 422.3 467 P -1 F --0.38 (device) 486.78 467 P -2 F --0.38 ( and) 517.42 467 P -1 F -(old_device) 108 454 T -2 F -( are different, with) 159.98 454 T -1 F -(device) 252.29 454 T -2 F -( being the identifier for the new, current X keyboard) 282.94 454 T -(device, and) 108 441 T -1 F -(old_device) 165.65 441 T -2 F -( being the identifier for the former device.) 217.63 441 T -(If the keyboard change is the result of an) 108 420 T -1 F -(XkbGetK) 306.95 420 T -(e) 350.52 420 T -(yboar) 355.49 420 T -(dByName) 383.04 420 T -2 F -( function call, which) 429.7 420 T -(generates an) 108 407 T -5 F --0.6 (X_kbGetKbdByName) 170.64 407 S -2 F -( request,) 276.24 407 T -1 F -(req_major) 319.9 407 T -2 F -( contains the) 370.56 407 T -2 11 Q -(Xkb e) 434.22 407 T -(xtension base) 460.63 407 T -(e) 108 394 T -(v) 112.61 394 T -(ent code) 117.94 394 T -2 12 Q -( \050see section 2.4\051, and) 154.9 394 T -1 F -(req_minor) 262.54 394 T -2 F -( contains the event code for the Xkb extension) 313.21 394 T --0.51 (request) 108 381 P -5 F --1.13 -0.6 (X_kbGetKbdByName) 145.14 381 B -2 F --0.51 (.) 250.74 381 P -1 F --0.51 (device) 256.23 381 P -2 F --0.51 ( contains the device identifier for the new device, but) 286.88 381 P -(nothing definitive can be said for) 108 368 T -1 F -(old_device) 269.98 368 T -2 F -(; it may be identical to) 321.96 368 T -1 F -(device) 432.62 368 T -2 F -(, or it may be) 463.27 368 T -(different, depending on the implementation.) 108 355 T -5 11 Q --0.33 (XkbNKN_AllChangesMask) 109 663.67 S --0.33 (\0500x7\051) 253 663.67 S -2 F -(Includes all of the abo) 307 663.67 T -(v) 404.59 663.67 T -(e masks) 409.93 663.67 T -3 12 Q -(T) 203.81 712 T -(able 19.1 XkbNewK) 210.71 712 T -(eyboardNotifyEv) 315.74 712 T -(ent Details) 403.62 712 T -1 F -(XkbNe) 109 692 T -(wK) 140.81 692 T -(e) 156.4 692 T -(yboar) 161.37 692 T -(dNotify) 188.92 692 T -(Event Details) 109 678 T -(V) 253 685 T -(alue) 259 685 T -(Cir) 307 685 T -(cumstances) 322.56 685 T -108 704 540 704 2 L -V -0.5 H -0 Z -N -108 673 540 673 2 L -V -N -FMENDPAGE -%%EndPage: "189" 201 -%%Page: "190" 202 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(190) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(20 Serv) 333.18 744.87 T -(er Database of K) 372.43 744.87 T -(e) 446.37 744.87 T -(yboard Components) 451.09 744.87 T -0 14 Q -(20) 72 710.67 T -(Ser) 108 710.67 T -(ver Database of K) 130.71 710.67 T -(e) 248.76 710.67 T -(yboar) 256.33 710.67 T -(d Components) 294.17 710.67 T -2 12 Q -(The X server maintains a database of keyboard components, identified by component) 108 688 T -(type. The database contains all the information necessary to build a complete keyboard) 108 675 T -(description for a particular device, as well as to assemble partial descriptions. Table 20.1) 108 662 T -(identifies the component types and the type of information they contain.) 108 649 T -(While a keymap is a database entry for a complete keyboard description, and therefore) 108 320 T -(logically different from the individual component database entries, the rules for process-) 108 307 T -(ing keymap entries are identical to those for the individual components. In the discussion) 108 294 T --0.13 (that follows, the term component is used to refer to either individual components or a key-) 108 281 P -(map.) 108 268 T -(There may be multiple entries for each of the component types. An entry may be either) 108 247 T -1 F -(complete) 108 234 T -2 F -( or) 151.32 234 T -1 F -(partial) 167.32 234 T -2 F -(. Partial entries describe only a piece of the corresponding keyboard) 199.99 234 T --0.05 (component and are designed to be combined with other entries of the same type to form a) 108 221 P -(complete entry.) 108 208 T -(For example, a partial symbols map might describe the differences between a common) 108 187 T -(ASCII keyboard and some national layout. Such a partial map is not useful on its own) 108 174 T -(because it does not include those symbols that are the same on both the ASCII and) 108 161 T --0.33 (national layouts \050such as function keys\051. On the other hand, this partial map can be used to) 108 148 P -(configure) 108 135 T -1 F -(any) 156.98 135 T -2 F -( ASCII keyboard to use a national layout.) 174.31 135 T --0.04 (When a keyboard description is built, the components are processed in the order in which) 108 114 P -(they appear in Table 20.1; later definitions override earlier ones.) 108 101 T -3 F -(T) 198.87 629 T -(able 20.1 Ser) 205.77 629 T -(v) 274.31 629 T -(er Database K) 280.19 629 T -(eyboard Components) 353.21 629 T -1 F -(Component) 105.4 609 T -(T) 105.4 595 T -(ype) 111.18 595 T -(Component Primary Contents) 177.4 602 T -(May also contain) 364.6 602 T -2 11 Q -(K) 105.4 580.67 T -(e) 113.07 580.67 T -(ymap) 117.79 580.67 T -(Complete k) 177.4 580.67 T -(e) 228.32 580.67 T -(yboard description) 233.04 580.67 T -(Normally assembled using a complete) 177.4 569.67 T -(component from each of the other types) 177.4 558.67 T -(K) 105.4 544.67 T -(e) 113.07 544.67 T -(ycodes) 117.79 544.67 T -(Symbolic name for each k) 177.4 544.67 T -(e) 292.77 544.67 T -(y) 297.49 544.67 T -(Minimum and maximum le) 177.4 533.67 T -(g) 297.94 533.67 T -(al k) 303.38 533.67 T -(e) 319.46 533.67 T -(ycodes) 324.18 533.67 T -(Aliases for some k) 364.6 544.67 T -(e) 446.67 544.67 T -(ys) 451.39 544.67 T -(Symbolic names for indicators) 364.6 533.67 T -(Description of indicators ph) 364.6 522.67 T -(ysically) 487.67 522.67 T -(present) 364.6 511.67 T -(T) 105.4 497.67 T -(ypes) 111.24 497.67 T -(K) 177.4 497.67 T -(e) 185.07 497.67 T -(y types) 189.79 497.67 T -(Real modi\336er bindings and symbolic) 364.6 497.67 T -(names for some virtual modi\336ers) 364.6 486.67 T -(Compatibility) 105.4 472.67 T -(Rules used to assign actions to k) 177.4 472.67 T -(e) 320.29 472.67 T -(ysyms) 325.01 472.67 T -(Maps for some indicators) 364.6 472.67 T -(Real modi\336er bindings and symbolic) 364.6 461.67 T -(names for some virtual modi\336ers) 364.6 450.67 T -(Symbols) 105.4 436.67 T -(Symbol mapping for k) 177.4 436.67 T -(e) 276.6 436.67 T -(yboard k) 281.32 436.67 T -(e) 320 436.67 T -(ys) 324.72 436.67 T -(Modi\336er mapping) 177.4 425.67 T -(Symbolic names for groups) 177.4 414.67 T -(Explicit actions and beha) 364.6 436.67 T -(viors for some) 475.28 436.67 T -(k) 364.6 425.67 T -(e) 369.99 425.67 T -(ys) 374.71 425.67 T -(Real modi\336er bindings and symbolic) 364.6 414.67 T -(names for some virtual modi\336ers) 364.6 403.67 T -(Geometry) 105.4 389.67 T -(Layout of the k) 177.4 389.67 T -(e) 244.81 389.67 T -(yboard) 249.53 389.67 T -(Aliases for some k) 364.6 389.67 T -(e) 446.67 389.67 T -(ys; o) 451.39 389.67 T -(v) 472.31 389.67 T -(errides k) 477.65 389.67 T -(e) 515.72 389.67 T -(y-) 520.44 389.67 T -(codes component aliases) 364.6 378.67 T -(Symbolic names for some indicators) 364.6 367.67 T -(Description of indicators ph) 364.6 356.67 T -(ysically) 487.67 356.67 T -(present) 364.6 345.67 T -104.4 621 543.6 621 2 L -V -0.5 H -0 Z -N -104.4 590 543.6 590 2 L -V -N -FMENDPAGE -%%EndPage: "190" 202 -%%Page: "191" 203 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(191) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(20 Serv) 333.18 744.87 T -(er Database of K) 372.43 744.87 T -(e) 446.37 744.87 T -(yboard Components) 451.09 744.87 T -0 12 Q -(20.1) 72 712 T -(Component Names) 108 712 T -2 F -(Component names have the form \322) 108 692 T -1 F -(class\050member\051) 275.64 692 T -2 F -(\323 where) 346.28 692 T -1 F -(class) 386.93 692 T -2 F -( describes a subset of the) 410.93 692 T -(available components for a particular type and the optional) 108 679 T -1 F -(member) 393.61 679 T -2 F -( identifies a specific) 432.26 679 T -(component from that subset. For example, the name \322atlantis\050acme\051\323 for a symbols com-) 108 666 T -(ponent might specify the symbols used for the atlantis national keyboard layout by the) 108 653 T -(vendor \322acme.\323 Each class has an optional) 108 640 T -1 F -(default) 315.28 640 T -2 F -( member \321 references that specify a) 348.61 640 T -(class but not a member refer to the default member of the class, if one exists. Xkb places) 108 627 T -(no constraints on the interpretation of the class and member names used in component) 108 614 T -(names.) 108 601 T -(The) 108 580 T -1 F -(class) 129.66 580 T -2 F -( and) 153.66 580 T -1 F -(member) 176.99 580 T -2 F -( names are both specified using characters from the Latin-1 charac-) 215.64 580 T -(ter set. Xkb implementations must accept all alphanumeric characters, minus \050\324-\325\051 and) 108 567 T --0.35 (underscore \050\324_\325\051 in class or member names, and must not accept parentheses, plus, vertical) 108 554 P -(bar, percent sign, asterisk, question mark, or white space. The use of other characters is) 108 541 T -(implementation-dependent.) 108 528 T -0 F -(20.2) 72 503 T -(Listing the Kno) 108 503 T -(wn K) 195.16 503 T -(e) 223.64 503 T -(yboar) 230.14 503 T -(d Components) 262.57 503 T -2 F -(You may ask the server for a list of components for one or more component types. The) 108 483 T -(request takes the form of a set of patterns, one pattern for each of the component types,) 108 470 T -(including a pattern for the complete keyboard description. To obtain this list, use) 108 457 T -1 F -(XkbList-) 498.96 457 T -(Components) 108 444 T -2 F -(.) 168 444 T -2 11 Q -(XkbComponentListPtr) 108 423.67 T -3 F -( XkbListComponents) 208.23 423.67 T -2 F -(\050) 308.77 423.67 T -1 F -(dpy) 312.43 423.67 T -2 F -(,) 327.6 423.67 T -1 F -(de) 333.1 423.67 T -(vice_spec) 343.32 423.67 T -2 F -(,) 386.08 423.67 T -1 F -(ptrns) 391.58 423.67 T -2 F -(,) 414.2 423.67 T -1 F -(max_inout) 419.7 423.67 T -2 F -(\051) 466.14 423.67 T -(Display *) 126 410.67 T -1 F -(dpy) 252 410.67 T -2 F -(;) 267.88 410.67 T -(/* connection to X serv) 342 410.67 T -(er */) 444.49 410.67 T -(unsigned int) 126 397.67 T -1 F -(de) 252 397.67 T -(vice_spec) 262.22 397.67 T -2 F -(;) 304.98 397.67 T -(/* de) 342 397.67 T -(vice ID, or) 363.42 397.67 T -5 F --0.55 (XkbUseCoreKbd) 413.51 397.67 S -2 F -( */) 492.16 397.67 T -(XkbComponentNamesPtr) 126 384.67 T -1 F -(ptrns) 252 384.67 T -2 F -(;) 274.62 384.67 T -(/* namelist for components of interest */) 342 384.67 T -(int *) 126 371.67 T -1 F -(max_inout) 252 371.67 T -2 F -(;) 298.44 371.67 T -(/* max # returned names, # left o) 342 371.67 T -(v) 487.26 371.67 T -(er */) 492.59 371.67 T -1 12 Q -(XkbListComponents) 108 352 T -2 F -( queries the server for a list of component names matching the pat-) 204.67 352 T -(terns specified in) 108 339 T -1 F -(ptrns) 192.98 339 T -2 F -(. It waits for a reply and returns the matching component names in) 217.66 339 T --0.5 (an) 108 326 P -5 F --1.1 -0.6 (XkbComponentListRec) 121.83 326 B -2 F --0.5 ( structure. When you are done using the structure, you should) 247.23 326 P -(free it using) 108 313 T -1 F -(XkbF) 168.32 313 T -(r) 193.66 313 T -(eeComponentList) 197.88 313 T -2 F -(.) 281.88 313 T -1 F -(de) 287.88 313 T -(vice_spec) 299.03 313 T -2 F -( indicates a particular device in which) 345.67 313 T -(the caller is interested. A server is allowed \050but not required\051 to restrict its reply to por-) 108 300 T -(tions of the database that are relevant for that particular device.) 108 287 T -1 F --0.05 (ptrns) 108 266 P -2 F --0.05 ( is a pointer to an) 132.67 266 P -5 F --0.1 -0.6 (XkbComponentNamesRec) 218.4 266 B -2 F --0.05 (, described below. Each of the fields in) 350.4 266 P -1 F -(ptrns) 108 253 T -2 F -( contains a pattern naming the components of interest. Each of the patterns is com-) 132.67 253 T --0.2 (posed of characters from the ISO) 108 240 P -5 F --0.45 -0.6 (Latin1) 268.73 240 B -2 F --0.2 ( encoding, but can contain only parentheses, the) 308.33 240 P --0.19 (wildcard characters \324) 108 227 P -5 F --0.43 -0.6 (?) 208.23 227 B -2 F --0.19 (\325 and \324) 214.83 227 P -5 F --0.43 -0.6 (*) 245.76 227 B -2 F --0.19 (\325, and characters permitted in a component class or member) 252.36 227 P -(name \050see section 20.1\051. A pattern may be) 108 214 T -5 F --0.6 (NULL) 313.28 214 S -2 F -(, in which case no components for that) 339.68 214 T -(type is returned. Pattern matches with component names are case sensitive. The \324) 108 201 T -5 F --0.6 (?) 497.26 201 S -2 F -(\325 wild-) 503.86 201 T -(card matches any single character, except a left or right parenthesis; the \324) 108 188 T -5 F --0.6 (*) 458.23 188 S -2 F -(\325 wildcard) 464.83 188 T --0.14 (matches any number of characters, except a left or right parenthesis. If an implementation) 108 175 P -(allows additional characters in a component class or member name other than those) 108 162 T -(required by the Xkb extension \050see section 20.1\051, the result of comparing one of the addi-) 108 149 T -(tional characters to either of the wildcard characters is implementation-dependent.) 108 136 T -(If a pattern contains illegal characters, the illegal characters are ignored. The matching) 108 115 T -(process is carried out as if the illegal characters were omitted from the pattern.) 108 102 T -1 F --0.29 (max_inout) 108 81 P -2 F --0.29 ( is used to throttle the amount of data passed to and from the server. On input, it) 158.66 81 P -(specifies the maximum number of names to be returned \050the total number of names in all) 108 68 T -FMENDPAGE -%%EndPage: "191" 203 -%%Page: "192" 204 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(192) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(20 Serv) 333.18 744.87 T -(er Database of K) 372.43 744.87 T -(e) 446.37 744.87 T -(yboard Components) 451.09 744.87 T -2 12 Q -(component categories\051. Upon return from) 108 712 T -1 F -(XkbListComponents) 310.62 712 T -2 F -(,) 407.29 712 T -1 F -(max_inout) 413.29 712 T -2 F -( contains the) 463.96 712 T -(number of names that matched the request but were not returned because of the limit.) 108 699 T -(The component name patterns used to describe the request are passed to) 108 678 T -1 F -(XkbListCompo-) 456.59 678 T -(nents) 108 665 T -2 F -( using an) 133.33 665 T -5 F --0.6 (XkbComponentNamesRec) 179.66 665 S -2 F -( structure. This structure has no special alloca-) 311.67 665 T -(tion constraints or interrelationships with other structures; allocate and free this structure) 108 652 T -(using standard) 108 639 T -1 F -(malloc) 180.66 639 T -2 F -( and) 213.32 639 T -1 F -(fr) 236.65 639 T -(ee) 244.21 639 T -2 F -( calls or their equivalent:) 254.87 639 T -2 11 Q -(typedef struct _XkbComponentNames {) 126 618.67 T -(char *) 144 605.67 T -(k) 270 605.67 T -(e) 275.39 605.67 T -(ymap;) 280.11 605.67 T -(/* k) 342 605.67 T -(e) 358.7 605.67 T -(ymap names */) 363.42 605.67 T -(char *) 144 592.67 T -(k) 270 592.67 T -(e) 275.39 592.67 T -(ycodes;) 280.11 592.67 T -(/* k) 342 592.67 T -(e) 358.7 592.67 T -(ycode names */) 363.42 592.67 T -(char *) 144 579.67 T -(types;) 270 579.67 T -(/* type names */) 342 579.67 T -(char *) 144 566.67 T -(compat;) 270 566.67 T -(/* compatibility map names */) 342 566.67 T -(char *) 144 553.67 T -(symbols;) 270 553.67 T -(/* symbol names */) 342 553.67 T -(char *) 144 540.67 T -(geometry;) 270 540.67 T -(/* geometry names */) 342 540.67 T -(}) 126 527.67 T -3 F -(XkbComponentNamesRec) 134.03 527.67 T -2 F -(, *XkbComponentNamesPtr;) 258.68 527.67 T -1 12 Q -(XkbListComponents) 108 508 T -2 F -( returns a pointer to an) 204.67 508 T -5 F --0.6 (XkbComponentListRec) 315.98 508 S -2 F -(:) 441.39 508 T -2 11 Q -(typedef struct _XkbComponentList {) 126 487.67 T -(int) 144 474.67 T -(num_k) 270 474.67 T -(e) 300.45 474.67 T -(ymaps;) 305.17 474.67 T -(/* number of entries in k) 342 474.67 T -(e) 450.35 474.67 T -(ymap */) 455.07 474.67 T -(int) 144 461.67 T -(num_k) 270 461.67 T -(e) 300.45 461.67 T -(ycodes;) 305.17 461.67 T -(/* number of entries in k) 342 461.67 T -(e) 450.35 461.67 T -(ycodes */) 455.07 461.67 T -(int) 144 448.67 T -(num_types;) 270 448.67 T -(/* number of entries in types */) 342 448.67 T -(int) 144 435.67 T -(num_compat;) 270 435.67 T -(/* number of entries in compat */) 342 435.67 T -(int) 144 422.67 T -(num_symbols;) 270 422.67 T -(/* number of entries in symbols */) 342 422.67 T -(int) 144 409.67 T -(num_geometry;) 270 409.67 T -(/* number of entries in geometry;) 342 409.67 T -(XkbComponentNamePtr) 144 396.67 T -(k) 270 396.67 T -(e) 275.39 396.67 T -(ymap;) 280.11 396.67 T -(/* k) 342 396.67 T -(e) 358.7 396.67 T -(ymap names */) 363.42 396.67 T -(XkbComponentNamePtr) 144 383.67 T -(k) 270 383.67 T -(e) 275.39 383.67 T -(ycodes;) 280.11 383.67 T -(/* k) 342 383.67 T -(e) 358.7 383.67 T -(ycode names */) 363.42 383.67 T -(XkbComponentNamePtr) 144 370.67 T -(types;) 270 370.67 T -(/* type names */) 342 370.67 T -(XkbComponentNamePtr) 144 357.67 T -(compat;) 270 357.67 T -(/* compatibility map names */) 342 357.67 T -(XkbComponentNamePtr) 144 344.67 T -(symbols;) 270 344.67 T -(/* symbol names */) 342 344.67 T -(XkbComponentNamePtr) 144 331.67 T -(geometry;) 270 331.67 T -(/* geometry names */) 342 331.67 T -(}) 126 318.67 T -3 F -(XkbComponentListRec) 134.03 318.67 T -2 F -(, *XkbComponentListPtr;) 245.25 318.67 T -(typedef struct _XkbComponentName {) 126 298.67 T -(unsigned short) 144 285.67 T -(\337ags;) 270 285.67 T -(/* hints re) 342 285.67 T -(g) 385.83 285.67 T -(arding component name */) 391.28 285.67 T -(char *) 144 272.67 T -(name;) 270 272.67 T -(/* name of component */) 342 272.67 T -(}) 126 259.67 T -3 F -(XkbComponentNameRec) 134.03 259.67 T -2 F -(, *XkbComponentNamePtr;) 254.4 259.67 T -2 12 Q -(Note that the structure used to specify patterns on input is an) 108 240 T -5 F --0.6 (XkbComponentNamesRec) 401.96 240 S -2 F -(,) 533.97 240 T --0.01 (and that used to hold the individual component names upon return is an) 108 227 P -5 F --0.02 -0.6 (XkbComponent-) 454.2 227 B --0.6 (NameRec) 108 214 S -2 F -( \050no trailing \324s\325 in Name\051.) 154.2 214 T -(When you are done using the structure returned by) 108 193 T -1 F -(XkbListComponents) 354.28 193 T -2 F -(, free it using) 450.95 193 T -1 F -(XkbF) 108 180 T -(r) 133.33 180 T -(eeComponentList) 137.56 180 T -2 F -(.) 221.56 180 T -2 11 Q -(v) 108 159.67 T -(oid) 113.28 159.67 T -3 F -(XkbFr) 130.09 159.67 T -(eeComponentList) 161.67 159.67 T -2 F -(\050list\051) 244.77 159.67 T -(XkbComponentListPtr) 126 146.67 T -( list;) 252 146.67 T -(/* pointer to) 306 146.67 T -5 F --0.33 (XkbComponentListRec) 362.53 146.67 S -2 F -( to free */) 481.66 146.67 T -0 12 Q -(20.3) 72 121 T -(Component Hints) 108 121 T -2 F -(A set of flags is associated with each component; these flags provide additional hints) 108 101 T -(about the component\325s use. These hints are designated by bit masks in the flags field of) 108 88 T -(the) 108 75 T -5 F --0.6 (XkbComponentNameRec) 125.66 75 S -2 F -( structures contained in the) 251.07 75 T -5 F --0.6 (XkbComponentListRec) 383.38 75 S -FMENDPAGE -%%EndPage: "192" 204 -%%Page: "193" 205 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(193) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(20 Serv) 333.18 744.87 T -(er Database of K) 372.43 744.87 T -(e) 446.37 744.87 T -(yboard Components) 451.09 744.87 T -2 12 Q -(returned from) 108 712 T -5 F --0.6 (XkbListComponents) 177.31 712 S -2 F -(. The least significant byte of the flags field has the) 289.51 712 T -(same meaning for all types of keyboard components; the interpretation of the most signif-) 108 699 T --0.27 (icant byte is dependent on the type of component. The flags bits are defined in Table 20.2.) 108 686 P -(The symbols hints in Table 20.2 apply only to partial symbols components \050those with) 108 673 T -5 F --0.6 (XkbLC_Partial) 108 660 S -2 F -( also set\051; full symbols components are assumed to specify all of the) 193.8 660 T -(pieces.) 108 647 T -(The alphanumeric, modifier, keypad or function keys symbols hints should describe the) 108 626 T -(primary intent of the component designer and should not be simply an exhaustive list of) 108 613 T -(the kinds of keys that are affected. For example, national keyboard layouts affect prima-) 108 600 T -(rily alphanumeric keys, but many affect a few modifier keys as well; such mappings) 108 587 T -(should set only the) 108 574 T -5 F --0.6 (XkbLC_AlphanumericKeys) 201.34 574 S -2 F -( hint. In general, symbols components) 346.54 574 T -(should set only one of the four flags \050) 108 561 T -5 F --0.6 (XkbLC_AlternateGroup) 287.98 561 S -2 F -( may be combined with) 419.98 561 T -(any of the other flags\051.) 108 548 T -0 F -(20.4) 72 264 T -(Building a K) 108 264 T -(e) 177.83 264 T -(yboar) 184.32 264 T -(d Description Using the Ser) 216.76 264 T -(ver Database) 374.24 264 T -2 F -(A client may request that the server fetch one or more components from its database and) 108 244 T -(use those components to build a new server keyboard description. The new keyboard) 108 231 T --0.31 (description may be built from scratch, or it may be built starting with the current keyboard) 108 218 P -(description for a particular device. Once the keyboard description is built, all or part of it) 108 205 T -(may be returned to the client. The parts returned to the client need not include all of the) 108 192 T -(parts used to build the description. At the time it requests the server to build a new key-) 108 179 T -(board description, a client may also request that the server use the new description inter-) 108 166 T -(nally to replace the current keyboard description for a specific device, in which case the) 108 153 T -(behavior of the device changes accordingly.) 108 140 T -3 F -(T) 213.85 528 T -(able 20.2 XkbComponentNameRec Flags Bits) 220.76 528 T -1 F -(Component) 109 508 T -(T) 109 494 T -(ype) 114.78 494 T -(Component Hints) 183.85 508 T -(\050\337a) 183.85 494 T -(gs\051) 199.73 494 T -(Meaning) 328.3 501 T -(V) 504.55 501 T -(alue) 510.55 501 T -2 11 Q -(All Components) 109 479.67 T -5 F --0.33 (XkbLC_Hidden) 183.85 479.67 S -2 F -(Do not present to user) 328.3 479.67 T -(\0501L<<0\051) 504.55 479.67 T -5 F --0.33 (XkbLC_Default) 183.85 465.67 S -2 F -(Def) 328.3 465.67 T -(ault member of class) 344.68 465.67 T -(\0501L<<1\051) 504.55 465.67 T -5 F --0.33 (XkbLC_Partial) 183.85 451.67 S -2 F -(P) 328.3 451.67 T -(artial component) 334.25 451.67 T -(\0501L<<2\051) 504.55 451.67 T -(K) 109 437.67 T -(e) 116.67 437.67 T -(ymap) 121.39 437.67 T -(none) 183.85 437.67 T -(K) 109 423.67 T -(e) 116.67 423.67 T -(ycodes) 121.39 423.67 T -(none) 183.85 423.67 T -(T) 109 409.67 T -(ypes) 114.84 409.67 T -(none) 183.85 409.67 T -(Compatibility) 109 395.67 T -(none) 183.85 395.67 T -(Symbols) 109 381.67 T -5 F --0.33 (XkbLC_AlphanumericKeys) 183.85 381.67 S -2 F -(Bindings primarily for alphanumeric) 328.3 381.67 T -(k) 328.3 370.67 T -(e) 333.69 370.67 T -(yboard section) 338.41 370.67 T -(\0501L<<8\051) 504.55 381.67 T -5 F --0.33 (XkbLC_ModifierKeys) 183.85 356.67 S -2 F -(Bindings primarily for modi\336er k) 328.3 356.67 T -(e) 475.47 356.67 T -(ys) 480.19 356.67 T -(\0501L<<9\051) 504.55 356.67 T -5 F --0.33 (XkbLC_KeypadKeys) 183.85 342.67 S -2 F -(Bindings primarily for numeric k) 328.3 342.67 T -(e) 474.24 342.67 T -(ypad) 478.96 342.67 T -(k) 328.3 331.67 T -(e) 333.69 331.67 T -(ys) 338.41 331.67 T -(\0501L<<10\051) 504.55 342.67 T -5 F --0.33 (XkbLC_FunctionKeys) 183.85 317.67 S -2 F -(Bindings primarily for function k) 328.3 317.67 T -(e) 474.85 317.67 T -(ys) 479.57 317.67 T -(\0501L<<11\051) 504.55 317.67 T -5 F --0.33 (XkbLC_AlternateGroup) 183.85 303.67 S -2 F -(Bindings for an alternate group) 328.3 303.67 T -(\0501L<<12\051) 504.55 303.67 T -(Geometry) 109 289.67 T -(none) 183.85 289.67 T -108 520 548.85 520 2 L -V -0.25 H -0 Z -N -108 489 548.85 489 2 L -V -N -FMENDPAGE -%%EndPage: "193" 205 -%%Page: "194" 206 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(194) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(20 Serv) 333.18 744.87 T -(er Database of K) 372.43 744.87 T -(e) 446.37 744.87 T -(yboard Components) 451.09 744.87 T -2 12 Q -(To build a new keyboard description from a set of named components, and to optionally) 108 712 T -(have the server use the resulting description to replace an active one, use) 108 699 T -1 F -(XkbGetK) 459.91 699 T -(e) 503.48 699 T -(y-) 508.45 699 T -(boar) 108 686 T -(dByName) 130.22 686 T -2 F -(.) 176.88 686 T -2 11 Q -(XkbDescPtr) 108 665.67 T -3 F -(XkbGetK) 164.52 665.67 T -(eyboardByName) 210.08 665.67 T -2 F -(\050) 288.91 665.67 T -1 F -(dpy) 292.57 665.67 T -2 F -(,) 307.74 665.67 T -1 F -(de) 313.24 665.67 T -(vice_spec) 323.46 665.67 T -2 F -(,) 366.21 665.67 T -1 F -(names) 371.71 665.67 T -2 F -(,) 399.82 665.67 T -1 F -(want) 405.32 665.67 T -2 F -(,) 426.71 665.67 T -1 F -(need) 432.21 665.67 T -2 F -(,) 452.98 665.67 T -1 F -(load) 458.48 665.67 T -2 F -(\051) 478.04 665.67 T -(Display *) 126 652.67 T -1 F -(dpy) 252 652.67 T -2 F -(;) 267.88 652.67 T -(/* connection to X serv) 342 652.67 T -(er */) 444.49 652.67 T -(unsigned int) 126 639.67 T -1 F -(de) 252 639.67 T -(vice_spec) 262.22 639.67 T -2 F -(;) 304.98 639.67 T -(/* de) 342 639.67 T -(vice ID, or) 363.42 639.67 T -5 F --0.55 (XkbUseCoreKbd) 413.51 639.67 S -2 F -( */) 492.16 639.67 T -(XkbComponentNamesPtr) 126 626.67 T -1 F -(names) 252 626.67 T -2 F -(;) 280.11 626.67 T -(/* names of components to fetch */) 342 626.67 T -(unsigned int) 126 613.67 T -1 F -(want) 252 613.67 T -2 F -(;) 273.39 613.67 T -(/* desired structures in returned record */) 342 613.67 T -(unsigned int) 126 600.67 T -1 F -(need) 252 600.67 T -2 F -(;) 272.77 600.67 T -(/* mandatory structures in returned record */) 342 600.67 T -(Bool) 126 587.67 T -1 F -(load) 252 587.67 T -2 F -(;) 271.56 587.67 T -(/*) 342 587.67 T -5 12 Q --0.6 (True) 353.31 587.67 S -2 11 Q -( => load into) 379.71 587.67 T -1 F -(de) 439.17 587.67 T -(vice_spec) 449.39 587.67 T -2 F -( */) 492.15 587.67 T -1 12 Q --0.43 (names) 108 568 P -2 F --0.43 ( contains a set of expressions describing the keyboard components the server should) 138.66 568 P --0.43 (use to build the new keyboard description.) 108 555 P -1 F --0.43 (want) 311.61 555 P -2 F --0.43 ( and) 334.95 555 P -1 F --0.43 (need) 357.41 555 P -2 F --0.43 ( are bit fields describing the parts) 380.06 555 P --0.05 (of the resulting keyboard description that should be present in the returned) 108 542 P -5 F --0.1 -0.6 (XkbDescRec) 468.05 542 B -2 F --0.05 (.) 534.05 542 P -(The individual fields in) 108 521 T -1 F -(names) 223.33 521 T -2 F -( are) 253.99 521 T -1 F -(component e) 274.64 521 T -(xpr) 335.39 521 T -(essions) 350.94 521 T -2 F -( composed of keyboard compo-) 385.61 521 T -(nent names \050no wildcarding as may be used in) 108 508 T -1 F -(XkbListComponents) 332.96 508 T -2 F -(\051, the special compo-) 429.64 508 T -(nent name symbol \324%\325, and the special operator characters \324) 108 495 T -5 F --0.6 (+) 395.92 495 S -2 F -(\325 and \324) 402.52 495 T -5 F --0.6 (|) 433.84 495 S -2 F -(\325. A component) 440.44 495 T -(expression is parsed left to right, as follows:) 108 482 T -2 11 Q -(\245) 126 461.67 T -(The special component name \322) 139.68 461.67 T -5 12 Q --0.6 (computed) 275.93 461.67 S -2 11 Q -(\323 may be used in) 328.73 461.67 T -5 12 Q --0.6 (keycodes) 405.41 461.67 S -2 11 Q -( component) 458.21 461.67 T -(e) 139.68 449.67 T -(xpressions and refers to a component consisting of a set of k) 144.4 449.67 T -(e) 409.77 449.67 T -(ycodes computed auto-) 414.49 449.67 T -(matically by the serv) 139.68 437.67 T -(er as needed.) 231.48 437.67 T -(\245) 126 425.67 T -(The special component name \322) 139.68 425.67 T -5 12 Q --0.6 (canonical) 275.93 425.67 S -2 11 Q -(\323 may be used in) 335.33 425.67 T -5 12 Q --0.6 (types) 412.01 425.67 S -2 11 Q -( component) 445.01 425.67 T -(e) 139.68 413.67 T -(xpressions and refers to a partial component de\336ning the four standard k) 144.4 413.67 T -(e) 462.93 413.67 T -(y types:) 467.64 413.67 T -5 12 Q --0.6 (ALPHABETIC) 139.68 401.67 S -2 11 Q -(,) 205.68 401.67 T -5 12 Q --0.6 (ONE_LEVEL) 211.18 401.67 S -2 11 Q -(,) 270.58 401.67 T -5 12 Q --0.6 (TWO_LEVEL) 276.08 401.67 S -2 11 Q -(, and) 335.48 401.67 T -5 12 Q --0.6 (KEYPAD) 359.62 401.67 S -2 11 Q -(.) 399.22 401.67 T -(\245) 126 389.67 T --0.17 (The special component name \324) 139.68 389.67 P -5 12 Q --0.41 -0.6 (%) 274.03 389.67 B -2 11 Q --0.17 (\325 refers to the k) 280.63 389.67 P --0.17 (e) 347.04 389.67 P --0.17 (yboard description for the de) 351.76 389.67 P --0.17 (vice spec-) 477.88 389.67 P -(i\336ed in) 139.68 377.67 T -1 12 Q -(de) 173.3 377.67 T -(vice_spec) 184.44 377.67 T -2 11 Q -( or the k) 231.09 377.67 T -(e) 267.33 377.67 T -(ymap names component. If a k) 272.05 377.67 T -(e) 407.58 377.67 T -(ymap names component) 412.3 377.67 T -(is speci\336ed that does not be) 139.68 365.67 T -(gin with \324+\325 or \324|\325 and does not contain \324) 260.81 365.67 T -5 12 Q --0.6 (%) 437.55 365.67 S -2 11 Q -(\325, then \324) 444.15 365.67 T -5 12 Q --0.6 (%) 478.67 365.67 S -2 11 Q -(\325 refers) 485.27 365.67 T -(to the description generated by the k) 139.68 353.67 T -(e) 299.65 353.67 T -(ymap names component. Otherwise, it refers to) 304.37 353.67 T -(the k) 139.68 341.67 T -(e) 161.26 341.67 T -(yboard description for) 165.98 341.67 T -1 12 Q -(de) 266.49 341.67 T -(vice_spec) 277.64 341.67 T -2 11 Q -(.) 324.28 341.67 T -(\245) 126 329.67 T --0.05 (The \324) 139.68 329.67 P -5 12 Q --0.12 -0.6 (+) 163.15 329.67 B -2 11 Q --0.05 (\325 operator speci\336es that the follo) 169.75 329.67 P --0.05 (wing component should) 311.89 329.67 P -1 12 Q --0.05 (o) 420.21 329.67 P --0.05 (verride) 426.09 329.67 P -2 11 Q --0.05 ( the currently) 460.75 329.67 P -(assembled description; an) 139.68 317.67 T -(y de\336nitions that are present in both components are tak) 253.17 317.67 T -(en) 499.61 317.67 T -(from the second.) 139.68 305.67 T -(\245) 126 293.67 T -(The \324) 139.68 293.67 T -5 12 Q --0.6 (|) 163.2 293.67 S -2 11 Q -(\325 operator speci\336es that the ne) 169.8 293.67 T -(xt speci\336ed component should) 301.91 293.67 T -1 12 Q -(augment) 438.79 293.67 T -2 11 Q -( the cur-) 480.12 293.67 T -(rently assembled description; an) 139.68 281.67 T -(y de\336nitions that are present in both components are) 281.58 281.67 T -(tak) 139.68 269.67 T -(en from the \336rst.) 153.01 269.67 T -(\245) 126 257.67 T -(If the component e) 139.68 257.67 T -(xpression be) 222.3 257.67 T -(gins with an operator) 277.43 257.67 T -(, a leading \324) 370.17 257.67 T -5 12 Q --0.6 (%) 422.11 257.67 S -2 11 Q -(\325 is implied.) 428.7 257.67 T -(\245) 126 245.67 T -(If an) 139.68 245.67 T -(y unkno) 159.98 245.67 T -(wn or ille) 195.45 245.67 T -(g) 237.45 245.67 T -(al characters appear an) 242.89 245.67 T -(ywhere in the e) 343.2 245.67 T -(xpression, the entire) 410.54 245.67 T -(e) 139.68 233.67 T -(xpression is in) 144.4 233.67 T -(v) 207.52 233.67 T -(alid and is ignored.) 212.74 233.67 T -2 12 Q -(For example, if) 108 215 T -1 F -(names->symbols) 184.66 215 T -2 F -( contained the expression \322+de\323, it specifies that the) 266.08 215 T -(default member of the \322de\323 class of symbols should be applied to the current keyboard) 108 202 T -(mapping, overriding any existing definitions \050it could also be written \322+de\050default\051\323\051.) 108 189 T -(Here is a slightly more involved example: the expression) 108 168 T -(\322acme\050ascii\051+de\050basic\051|iso9995-3\323 constructs a German \050de\051 mapping for the ASCII key-) 108 155 T --0.09 (board supplied by the \322acme\323 vendor. The new definition begins with the symbols for the) 108 142 P -(ASCII keyboard for Acme \050) 108 129 T -1 F -(acme\050ascii\051) 242.63 129 T -2 F -(\051, overrides them with definitions for the basic) 298.61 129 T --0.02 (German keyboard \050) 108 116 P -1 F --0.02 (de\050basic\051) 201.26 116 P -2 F --0.02 (\051, and then applies the definitions from the default iso9995-3) 245.91 116 P -(keyboard \050) 108 103 T -1 F -(iso9995-3) 159.65 103 T -2 F -(\051 to any undefined keys or groups of keys \050part three of the iso9995) 207.65 103 T -(standard defines a common set of bindings for the secondary group, but allows national) 108 90 T -(layouts to override those definitions where necessary\051.) 108 77 T -FMENDPAGE -%%EndPage: "194" 206 -%%Page: "195" 207 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(195) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(20 Serv) 333.18 744.87 T -(er Database of K) 372.43 744.87 T -(e) 446.37 744.87 T -(yboard Components) 451.09 744.87 T -0 12 Q -(Note) 126 712.67 T -2 11 Q -(The interpretation of the abo) 162 712.67 T -(v) 287.7 712.67 T -(e e) 293.03 712.67 T -(xpression components \050acme, ascii, de, basic,) 305.39 712.67 T -(iso9995-3\051 is not de\336ned by Xkb; only the operations and their ordering are.) 162 700.67 T -2 12 Q -(Note that the presence of a keymap) 108 680 T -1 F -(names) 280.28 680 T -2 F -( component that does not contain \324) 310.94 680 T -5 F --0.6 (%) 476.93 680 S -2 F -(\325 \050either) 483.53 680 T -(explicit or implied by virtue of an expression starting with an operator\051 indicates a) 108 667 T -(description that is independent of the keyboard description for the device specified in) 108 654 T -1 F --0.43 (de) 108 641 P --0.43 (vice_spec) 119.15 641 P -2 F --0.43 (. The same is true of requests in which the keymap names component is empty) 165.79 641 P -(and all five other names components contain expressions void of references to \324) 108 628 T -5 F --0.6 (%) 490.58 628 S -2 F -(\325.) 497.18 628 T -(Requests of this form allow you to deal with keyboard definitions independent of any) 108 615 T -(actual device.) 108 602 T --0.18 (The server parses all non-) 108 581 P -5 F --0.39 -0.6 (NULL) 231.25 581 B -2 F --0.18 ( fields in) 257.65 581 P -1 F --0.18 (names) 302.12 581 P -2 F --0.18 ( and uses them to build a keyboard descrip-) 332.78 581 P -(tion. However, before parsing the expressions in) 108 568 T -1 F -(names) 343.62 568 T -2 F -(, the server ORs the bits in) 374.28 568 T -1 F -(want) 504.94 568 T -2 F -(and) 108 555 T -1 F -(need) 128.33 555 T -2 F -( together and examines the result in relationship to the expressions in) 150.98 555 T -1 F -(names) 485.62 555 T -2 F -(.) 516.28 555 T --0.27 (Table 20.3 identifies the components that are required for each of the possible bits in) 108 542 P -1 F --0.27 (want) 513.93 542 P -2 F -(or) 108 529 T -1 F -(need) 121 529 T -2 F -(. If a required component has not been specified in the) 143.65 529 T -1 F -(names) 407.59 529 T -2 F -( structure \050the corre-) 438.25 529 T -(sponding field is) 108 516 T -5 F --0.6 (NULL) 191 516 S -2 F -(\051, the server substitutes the expression \322) 217.4 516 T -5 F --0.6 (%) 408.37 516 S -2 F -(\323, resulting in the compo-) 414.97 516 T --0.37 (nent values being taken from) 108 503 P -1 F --0.37 (de) 248.48 503 P --0.37 (vice_spec) 259.63 503 P -2 F --0.37 (. In addition, if) 306.27 503 P -1 F --0.37 (load) 379.47 503 P -2 F --0.37 ( is) 400.81 503 P -5 F --0.8 -0.6 (True) 414.08 503 B -2 F --0.37 (, the server modifies) 440.48 503 P -1 F -(names) 108 490 T -2 F -( if necessary \050again using a \322) 138.66 490 T -5 F --0.6 (%) 277.28 490 S -2 F -(\323 entry\051 to ensure all of the following fields are) 283.88 490 T -(non-) 108 477 T -5 F --0.6 (NULL) 130 477 S -2 F -(:) 156.4 477 T -1 F -(types) 162.73 477 T -2 F -(,) 187.39 477 T -1 F -(keycodes) 193.39 477 T -2 F -(,) 236.7 477 T -1 F -(symbols) 242.7 477 T -2 F -(, and) 281.36 477 T -1 F -(compat) 307.69 477 T -2 F -(.) 343.02 477 T -1 F -(need) 108 258 T -2 F -( specifies a set of keyboard components that the server must be able to resolve in) 130.66 258 T --0.18 (order for) 108 245 P -1 F --0.18 (XkbGetK) 152.95 245 P --0.18 (e) 196.52 245 P --0.18 (yboar) 201.49 245 P --0.18 (dByName) 229.04 245 P -2 F --0.18 ( to succeed; if any of the components specified in) 275.7 245 P -1 F --0.18 (need) 514.52 245 P -2 F -(cannot be successfully resolved,) 108 232 T -1 F -(XkbGetK) 265.63 232 T -(e) 309.2 232 T -(yboar) 314.17 232 T -(dByName) 341.72 232 T -2 F -( fails.) 388.38 232 T -1 F --0.13 (want) 108 211 P -2 F --0.13 ( specifies a set of keyboard components that the server should attempt to resolve, but) 131.34 211 P --0.28 (that are not mandatory. If the server is unable to resolve any of these components,) 108 198 P -1 F --0.28 (XkbGet-) 500.02 198 P --0.41 (K) 108 185 P --0.41 (e) 115.58 185 P --0.41 (yboar) 120.55 185 P --0.41 (dByName) 148.1 185 P -2 F --0.41 ( still succeeds. Bits specified in) 194.76 185 P -1 F --0.41 (want) 345.97 185 P -2 F --0.41 ( that are also specified in) 369.31 185 P -1 F --0.41 (need) 489.5 185 P -2 F --0.41 ( have) 512.16 185 P -(no effect in the context of) 108 172 T -1 F -(want) 234.64 172 T -2 F -(.) 257.98 172 T -(If) 108 151 T -1 F -(load) 118.99 151 T -2 F -( is) 140.33 151 T -5 F --0.6 (True) 154.33 151 S -2 F -(, the server updates its keyboard description for) 180.73 151 T -1 F -(de) 411.68 151 T -(vice_spec) 422.83 151 T -2 F -( to match the) 469.48 151 T -(result of the keyboard description just built. If load is) 108 138 T -5 F --0.6 (False) 366.31 138 S -2 F -(, the server\325s description for) 399.31 138 T -(device) 108 125 T -1 F -(de) 142.32 125 T -(vice_spec) 153.47 125 T -2 F -( is not updated. In all cases, the parts specified by) 200.11 125 T -1 F -(want) 441.07 125 T -2 F -( and) 464.41 125 T -1 F -(need) 487.74 125 T -2 F -( from) 510.4 125 T -(the just-built keyboard description are returned.) 108 112 T -(The) 108 91 T -1 F -(names) 129.66 91 T -2 F -( structure in an) 160.32 91 T -5 F --0.6 (XkbDescRec) 234.97 91 S -2 F -( keyboard description record \050see Chapter 18\051) 300.97 91 T -(contains one field for each of the five component types used to build a keyboard descrip-) 108 78 T -3 F -(T) 127.58 457 T -(able 20.3 W) 134.48 457 T -(ant and Need Mask Bits and Requir) 197.04 457 T -(ed Names Components) 380.84 457 T -1 F -(want or need mask bit) 123.4 437 T -(Requir) 285.4 437 T -(ed names Components) 317.62 437 T -(value) 447.4 437 T -2 11 Q -(XkbGBN_T) 123.4 422.67 T -(ypesMask) 176.9 422.67 T -(T) 285.4 422.67 T -(ypes) 291.24 422.67 T -(\0501L<<0\051) 447.4 422.67 T -(XkbGBN_CompatMapMask) 123.4 408.67 T -(Compat) 285.4 408.67 T -(\0501L<<1\051) 447.4 408.67 T -(XkbGBN_ClientSymbolsMask) 123.4 394.67 T -(T) 285.4 394.67 T -(ypes + Symbols + K) 291.24 394.67 T -(e) 380.99 394.67 T -(ycodes) 385.71 394.67 T -(\0501L<<2\051) 447.4 394.67 T -(XkbGBN_Serv) 123.4 380.67 T -(erSymbolsMask) 191.06 380.67 T -(T) 285.4 380.67 T -(ypes + Symbols + K) 291.24 380.67 T -(e) 380.99 380.67 T -(ycodes) 385.71 380.67 T -(\0501L<<3\051) 447.4 380.67 T -(XkbGBN_SymbolsMask) 123.4 366.67 T -(Symbols) 285.4 366.67 T -(\0501L<<1\051) 447.4 366.67 T -(XkbGBN_IndicatorMapMask) 123.4 352.67 T -(Compat) 285.4 352.67 T -(\0501L<<4\051) 447.4 352.67 T -(XkbGBN_K) 123.4 338.67 T -(e) 178.73 338.67 T -(yNamesMask) 183.45 338.67 T -(K) 285.4 338.67 T -(e) 293.07 338.67 T -(ycodes) 297.79 338.67 T -(\0501L<<5\051) 447.4 338.67 T -(XkbGBN_GeometryMask) 123.4 324.67 T -(Geometry) 285.4 324.67 T -(\0501L<<6\051) 447.4 324.67 T -(XkbGBN_OtherNamesMask) 123.4 310.67 T -(T) 285.4 310.67 T -(ypes + Symbols + K) 291.24 310.67 T -(e) 380.99 310.67 T -(ycodes +) 385.71 310.67 T -(Compat + Geometry) 286.15 297.67 T -(\0501L<<7\051) 447.4 310.67 T -(XkbGBN_AllComponentsMask) 123.4 283.67 T -(\0500xf) 447.4 283.67 T -(f\051) 465.45 283.67 T -122.4 449 489.6 449 2 L -V -0.5 H -0 Z -N -122.4 432 489.6 432 2 L -V -N -FMENDPAGE -%%EndPage: "195" 207 -%%Page: "196" 208 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(196) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(20 Serv) 333.18 744.87 T -(er Database of K) 372.43 744.87 T -(e) 446.37 744.87 T -(yboard Components) 451.09 744.87 T -2 12 Q -(tion. When a keyboard description is built from a set of database components, the corre-) 108 712 T -(sponding fields in this) 108 699 T -1 F -(names) 217.34 699 T -2 F -( structure are set to match the expressions used to build the) 248 699 T -(component.) 108 686 T -(The entire process of building a new keyboard description from the server database of) 108 665 T -(components and returning all or part of it is diagrammed in Figure 20.1:) 108 652 T -3 F -(Figur) 117.88 149 T -(e 20.1 Building a New K) 146.33 149 T -(eyboard Description fr) 269.38 149 T -(om the Ser) 385.81 149 T -(v) 441.01 149 T -(er Database) 446.89 149 T -2 F -(The information returned to the client in the) 108 121 T -5 F --0.6 (XkbDescRec) 321.97 121 S -2 F -( is essentially the result of a) 387.97 121 T -(series of calls to extract information from a fictitious device whose description matches) 108 108 T -83.06 170 528.94 648 C -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -255.81 180.96 353.31 238.71 R -0.5 H -0 Z -0 X -0 0 0 1 0 0 0 K -N -252.81 257.18 356.31 307.43 R -N -260.31 374.61 348.81 424.86 R -N -253.94 569 355.19 627.5 R -N -259.19 572 349.94 624.5 R -7 X -V -2 10 Q -0 X -(Augment names to) 266.79 617.83 T -(supply component) 267.76 607.83 T -(names required by) 267.63 597.83 T --0.26 (want and need but not) 260.4 587.83 P -(supplied in request) 266.79 577.83 T -264.44 378.73 344.69 420.73 R -7 X -V -0 X -(Build keyboard) 273.59 414.06 T -(description from) 271.37 404.06 T -(expressions in) 276.09 394.06 T -(names) 291.79 384.06 T -259.19 183.89 349.94 235.79 R -7 X -V -0 X -(Build keyboard) 273.59 229.13 T -(description for client) 262.9 219.13 T -(by extracting struc-) 265.68 209.13 T --0.56 (tures specified in want) 259.43 199.13 P -(and need) 286.65 189.13 T -256.94 261.3 352.19 303.3 R -7 X -V -0 X -(Replace device_spec) 262.77 296.64 T -(active keyboard) 272.77 286.64 T --0.23 (description with newly) 258.73 276.64 P -(built description) 271.92 266.64 T -(Keyboard Description) 416.36 290.85 T -(for device_spec) 416.36 279.79 T -(Keyboard) 435.31 479.47 T -(Component) 435.31 468.41 T -(Database) 435.31 457.34 T -(New Keyboard) 428.99 409.21 T -(Description) 428.99 398.14 T -(Keyboard) 438.27 219.87 T -(Description) 438.27 208.81 T -(returned to) 438.27 197.74 T -(Initial Request:) 113.7 498.31 T -(device_spec) 113.7 487.51 T -(names) 113.7 476.71 T -(want) 113.7 465.91 T -(need) 113.7 455.11 T -(load) 113.7 444.3 T -253.94 443.32 355.19 501.82 R -N -259.19 446.32 349.94 498.82 R -7 X -V -0 X -(Augment names to) 266.79 492.15 T -(supply required com-) 261.79 482.15 T -(ponent names not sup-) 259.43 472.15 T -(plied in request) 273.73 462.15 T -(load) 295.49 532.03 T -278.63 536.04 305.34 551.79 332.06 536.04 305.34 520.29 4 Y -N -241.14 587.93 238.68 589.61 246.99 596.5 243.59 586.25 4 Y -N -241.14 587.93 238.68 589.61 246.99 596.5 243.59 586.25 4 Y -V -174.18 489.94 176.64 488.26 168.33 481.37 171.72 491.62 4 Y -N -174.18 489.94 176.64 488.26 168.33 481.37 171.72 491.62 4 Y -V -240.99 587.73 174.32 490.14 2 L -N -180.98 478.75 180.98 475.77 170.6 478.75 180.98 481.72 4 Y -N -180.98 478.75 180.98 475.77 170.6 478.75 180.98 481.72 4 Y -V -236.22 478.75 236.22 481.72 246.6 478.75 236.22 475.77 4 Y -N -236.22 478.75 236.22 481.72 246.6 478.75 236.22 475.77 4 Y -V -181.23 478.75 235.97 478.75 2 L -N -238.55 423.74 240.36 426.1 246.78 417.42 236.74 421.38 4 Y -N -238.55 423.74 240.36 426.1 246.78 417.42 236.74 421.38 4 Y -V -166.88 478.75 238.35 423.89 2 L -N -408.72 402.25 408.72 405.23 419.1 402.25 408.72 399.27 4 Y -N -408.72 402.25 408.72 405.23 419.1 402.25 408.72 399.27 4 Y -V -359.25 402.25 408.47 402.25 2 L -N -366.88 417.45 368.32 414.84 357.8 412.44 365.45 420.05 4 Y -N -366.88 417.45 368.32 414.84 357.8 412.44 365.45 420.05 4 Y -V -418.88 446.12 367.1 417.57 2 L -N -372.67 307.3 375.17 305.69 367.06 298.57 370.17 308.91 4 Y -N -372.67 307.3 375.17 305.69 367.06 298.57 370.17 308.91 4 Y -V -417.19 376.56 372.8 307.51 2 L -N -391.65 288.25 391.65 291.23 402.03 288.25 391.65 285.27 4 Y -N -391.65 288.25 391.65 291.23 402.03 288.25 391.65 285.27 4 Y -V -366.94 288.25 391.4 288.25 2 L -N -366.8 239.52 369.48 238.22 362.28 230.18 364.13 240.82 4 Y -N -366.8 239.52 369.48 238.22 362.28 230.18 364.13 240.82 4 Y -V -430.13 370.13 366.91 239.74 2 L -N -416.59 221.31 416.59 224.29 426.97 221.31 416.59 218.34 4 Y -N -416.59 221.31 416.59 224.29 426.97 221.31 416.59 218.34 4 Y -V -364.88 221.31 416.34 221.31 2 L -N -109.69 439.9 179.07 509.46 R -N -430.5 451.62 486.75 491.94 R -N -425.16 381.27 493.6 421.58 R -N -411.88 274.16 509.38 303.22 R -N -434.69 181.24 490.19 231.87 R -N -305.01 562.22 307.98 562.22 305.01 551.84 302.03 562.22 4 Y -N -305.01 562.22 307.98 562.22 305.01 551.84 302.03 562.22 4 Y -V -305.01 568.75 305.01 562.47 2 L -N -305.51 512.97 308.48 512.97 305.51 502.59 302.53 512.97 4 Y -N -305.51 512.97 308.48 512.97 305.51 502.59 302.53 512.97 4 Y -V -305.51 519.5 305.51 513.22 2 L -N -305.81 367.83 308.79 367.83 305.81 357.45 302.84 367.83 4 Y -N -305.81 367.83 308.79 367.83 305.81 357.45 302.84 367.83 4 Y -V -305.81 374.36 305.81 368.08 2 L -N -305.06 318.58 308.04 318.58 305.06 308.2 302.09 318.58 4 Y -N -305.06 318.58 308.04 318.58 305.06 308.2 302.09 318.58 4 Y -V -305.06 325.11 305.06 318.83 2 L -N -303.31 249.15 306.29 249.15 303.31 238.77 300.34 249.15 4 Y -N -303.31 249.15 306.29 249.15 303.31 238.77 300.34 249.15 4 Y -V -303.31 255.68 303.31 249.4 2 L -N -304.44 436.04 307.42 436.04 304.44 425.66 301.46 436.04 4 Y -N -304.44 436.04 307.42 436.04 304.44 425.66 301.46 436.04 4 Y -V -304.44 442.57 304.44 436.29 2 L -N -315.04 433.12 315.04 430.14 304.66 433.12 315.04 436.1 4 Y -N -315.04 433.12 315.04 430.14 304.66 433.12 315.04 436.1 4 Y -V -333.76 536.25 382.51 536.25 382.51 433.12 315.29 433.12 4 L -N -292.66 250.62 292.66 253.59 303.04 250.62 292.66 247.64 4 Y -N -292.66 250.62 292.66 253.59 303.04 250.62 292.66 247.64 4 Y -V -277.69 341.99 225.63 341.99 225.63 250.62 292.41 250.62 4 L -N -(True) 310.32 510.93 T -(True) 310.82 315.74 T -(False) 337.57 543.06 T -(False) 250.88 350.37 T -(load) 295.05 337.47 T -278.19 341.47 304.91 357.22 331.63 341.47 304.91 325.72 4 Y -N -(\050Temporary\051) 428.99 387.08 T -(Client) 438.56 186.68 T -109.5 473.38 179.25 473.38 2 L -N -109.87 484.19 179.05 484.19 2 L -N -109.95 462.56 179.14 462.56 2 L -N -110.12 451.75 179.31 451.75 2 L -N -110.04 495 179.23 495 2 L -N -243.94 231.63 246.76 232.57 247.22 221.79 241.11 230.69 4 Y -N -243.94 231.63 246.76 232.57 247.22 221.79 241.11 230.69 4 Y -V -165 468.43 243.86 231.87 2 L -N -246.04 213.56 248.79 214.69 249.97 203.95 243.29 212.43 4 Y -N -246.04 213.56 248.79 214.69 249.97 203.95 243.29 212.43 4 Y -V -146.25 457.18 245.95 213.79 2 L -N -0 0 612 792 C -FMENDPAGE -%%EndPage: "196" 208 -%%Page: "197" 209 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(197) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(20 Serv) 333.18 744.87 T -(er Database of K) 372.43 744.87 T -(e) 446.37 744.87 T -(yboard Components) 451.09 744.87 T -2 12 Q -(the one just built. The calls corresponding to each of the mask bits are summarized in) 108 712 T -(Table 20.4, together with the) 108 699 T -5 F --0.6 (XkbDescRec) 249.65 699 S -2 F -( components that are filled in.) 315.65 699 T -(There is no way to determine which components specified in) 108 398 T -1 F -(want) 403.28 398 T -2 F -( \050but not in) 426.62 398 T -1 F -(need) 482.63 398 T -2 F -(\051 were) 505.28 398 T -(actually fetched, other than breaking the call into successive calls to) 108 385 T -1 F -(XkbGetK) 437.27 385 T -(e) 480.84 385 T -(yboar) 485.81 385 T -(d-) 513.36 385 T -(ByName) 108 372 T -2 F -( and specifying individual components.) 148.66 372 T -1 F -(XkbGetK) 108 351 T -(e) 151.57 351 T -(yboar) 156.54 351 T -(dByName) 184.09 351 T -2 F -( always sets) 230.75 351 T -1 F -(min_key_code) 291.07 351 T -2 F -( and) 359.71 351 T -1 F -(max_key_code) 383.04 351 T -2 F -( in the returned) 453.67 351 T -5 F --0.6 (XkbDescRec) 108 338 S -2 F -( structure.) 174 338 T -1 F -0 (XkbGetK) 108 317 P -0 (e) 151.57 317 P -0 (yboar) 156.54 317 P -0 (dByName) 184.09 317 P -2 F -0 ( is synchronous; it sends the request to the server to build a new) 230.75 317 P -(keyboard description and waits for the reply. If successful, the return value is non-) 108 304 T -5 F --0.6 (NULL) 503.58 304 S -2 F -(.) 529.98 304 T -1 F -(XkbGetK) 108 291 T -(e) 151.57 291 T -(yboar) 156.54 291 T -(dByName) 184.09 291 T -2 F -( generates a) 230.75 291 T -5 F --0.6 (BadMatch) 290.39 291 S -2 F -( protocol error if errors are encountered) 343.19 291 T -(when building the keyboard description.) 108 278 T -(If you simply want to obtain information about the current keyboard device, rather than) 108 257 T -(generating a new keyboard description from elements in the server database, use) 108 244 T -1 F -(XkbGet-) 497.57 244 T -(K) 108 231 T -(e) 115.58 231 T -(yboar) 120.55 231 T -(d) 148.1 231 T -2 F -( \050see section 6.2\051.) 154.1 231 T -2 11 Q -(XkbDescPtr) 108 210.67 T -3 F -(XkbGetK) 164.52 210.67 T -(eyboard) 210.08 210.67 T -2 F -(\050) 248.58 210.67 T -1 F -(dpy) 252.24 210.67 T -2 F -(,) 267.41 210.67 T -1 F -(whic) 272.91 210.67 T -(h) 293.53 210.67 T -2 F -(,) 299.03 210.67 T -1 F -(de) 304.53 210.67 T -(vice_spec) 314.74 210.67 T -2 F -(\051) 357.5 210.67 T -(Display *) 126 197.67 T -1 F -(dpy) 200.25 197.67 T -2 F -(;) 216.13 197.67 T -(/* connection to X serv) 306 197.67 T -(er */) 408.49 197.67 T -(unsigned int) 126 184.67 T -1 F -(whic) 200.25 184.67 T -(h) 220.86 184.67 T -2 F -(;) 226.36 184.67 T --0.23 (/* mask of components of) 306 184.67 P -5 F --0.51 -0.55 (XkbDescRec) 421.85 184.67 B -2 F --0.23 ( of interest */) 482.35 184.67 P -(unsigned int) 126 171.67 T -1 F -(de) 200.25 171.67 T -(vice_spec) 210.47 171.67 T -2 F -(;) 253.23 171.67 T -(/* de) 306 171.67 T -(vice ID */) 327.42 171.67 T -1 12 Q -(XkbGetK) 108 152 T -(e) 151.57 152 T -(yboar) 156.54 152 T -(d) 184.09 152 T -2 F -( is used to read the current description for one or more components of a) 190.09 152 T -(keyboard device. It calls) 108 139 T -1 F -(XkbGetK) 228.3 139 T -(e) 271.87 139 T -(yboar) 276.84 139 T -(dByName) 304.39 139 T -2 F -( as follows:) 351.05 139 T -1 F -(XkbGetK) 108 118 T -(e) 151.57 118 T -(yboar) 156.54 118 T -(dByName) 184.09 118 T -2 F -(\050) 230.75 118 T -1 11 Q -(dpy) 234.74 118 T -2 12 Q -(,) 250.63 118 T -1 11 Q -(de) 256.63 118 T -(vice_spec) 266.85 118 T -2 12 Q -(,) 309.6 118 T -5 F --0.6 (NULL) 315.6 118 S -2 F -(,) 342 118 T -1 11 Q -(whic) 348 118 T -(h) 368.62 118 T -2 12 Q -(,) 374.12 118 T -1 11 Q -(whic) 380.12 118 T -(h) 400.73 118 T -2 12 Q -(,) 406.23 118 T -5 F --0.6 (False) 412.23 118 S -2 F -(\051.) 445.23 118 T -3 F -(T) 127.96 679 T -(able 20.4 XkbDescRec Components Retur) 134.86 679 T -(ned f) 351.99 679 T -(or V) 377.36 679 T -(alues of W) 399.25 679 T -(ant & Needs) 452.47 679 T -1 F -(Request \050want+need\051) 53.2 659 T -(F) 200.8 659 T -(ills in Xkb components) 207.59 659 T -(Equivalent Function Call) 326.8 659 T -2 11 Q -(XkbGBN_T) 53.2 644.67 T -(ypesMask) 106.7 644.67 T -(map.types) 200.8 644.67 T -(XkbGetUpdatedMap\050dp) 326.8 644.67 T -(y) 433.61 644.67 T -(, XkbT) 438.39 644.67 T -(ypesMask, Xkb\051) 468.68 644.67 T -(XkbGBN_Serv) 53.2 630.67 T -(erSymbolsMask) 120.86 630.67 T -(serv) 200.8 630.67 T -(er) 218.96 630.67 T -(XkbGetUpdatedMap\050dp) 326.8 630.67 T -(y) 433.61 630.67 T -(, XkbAllClientInfoMask, Xkb\051) 438.39 630.67 T -(XkbGBN_ClientSymbolsMask) 53.2 616.67 T -(map, including map.types) 200.8 616.67 T -(XkbGetUpdatedMap\050dp) 326.8 616.67 T -(y) 433.61 616.67 T -(, XkbAllServ) 438.39 616.67 T -(erInfoMask, Xkb\051) 496.89 616.67 T -(XkbGBN_IndicatorMaps) 53.2 602.67 T -(indicators) 200.8 602.67 T -(XkbGetIndicatorMap\050dp) 326.8 602.67 T -(y) 436.05 602.67 T -(, XkbAllIndicators, Xkb\051) 440.84 602.67 T -(XkbGBN_CompatMapMask) 53.2 588.67 T -(compat) 200.8 588.67 T -(XkbGetCompatMap\050dp) 326.8 588.67 T -(y) 431.18 588.67 T -(, XkbAllCompatMask, Xkb\051) 435.96 588.67 T -(XkbGBN_GeometryMask) 53.2 574.67 T -(geom) 200.8 574.67 T -(XkbGetGeometry\050dp) 326.8 574.67 T -(y) 420.17 574.67 T -(, Xkb\051) 424.95 574.67 T -(XkbGBN_K) 53.2 560.67 T -(e) 108.53 560.67 T -(yNamesMask) 113.25 560.67 T -(names.k) 200.8 560.67 T -(e) 237.04 560.67 T -(ys) 241.76 560.67 T -(names.k) 200.8 549.67 T -(e) 237.04 549.67 T -(y_aliases) 241.76 549.67 T -(XkbGetNames\050dp) 326.8 560.67 T -(y) 406.73 560.67 T -(,) 411.51 560.67 T -2 12 Q -(XkbKeyNamesMask |) 417.01 560.67 T -(XkbKeyAliasesMask) 335.8 547.67 T -2 11 Q -(, Xkb\051) 438.45 547.67 T -(XkbGBN_OtherNamesMask) 53.2 533.67 T -(names.k) 200.8 533.67 T -(e) 237.04 533.67 T -(ycodes) 241.76 533.67 T -(names.geometry) 200.8 522.67 T -(names.symbols) 200.8 511.67 T -(names.types) 200.8 500.67 T -(map.types[*].lvl_names[*]) 200.8 489.67 T -(names.compat) 200.8 478.67 T -(names.vmods) 200.8 467.67 T -(names.indicators) 200.8 456.67 T -(names.groups) 200.8 445.67 T -(names.radio_groups) 200.8 434.67 T -(names.ph) 200.8 423.67 T -(ys_symbols) 242.6 423.67 T -(XkbGetNames\050dp) 326.8 533.67 T -(y) 406.73 533.67 T -(, XkbAllNamesMask &) 411.51 533.67 T -(~\050) 335.8 520.67 T -2 12 Q -(XkbKeyNamesMask | XkbKeyAliasesMask) 345.41 520.67 T -2 11 Q -(\051,) 557.11 520.67 T -(Xkb\051) 335.8 507.67 T -52.2 671 577.8 671 2 L -V -0.5 H -0 Z -N -52.2 654 577.8 654 2 L -V -N -FMENDPAGE -%%EndPage: "197" 209 -%%Page: "198" 210 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(198) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T --0.28 (21 Attaching Xkb Actions to X Input Extension) 323.98 744.87 P -0 14 Q -(21) 72 710.67 T -(Attac) 108 710.67 T -(hing Xkb Actions to X Input Extension De) 142.86 710.67 T -(vices) 418.03 710.67 T -2 12 Q -(The X input extension allows an X server to support multiple keyboards, as well as other) 108 688 T -(input devices, in addition to the core X keyboard and pointer. The input extension catego-) 108 675 T --0.07 (rizes devices by grouping them into classes. Keyboards and other input devices with keys) 108 662 P -(are classified as) 108 649 T -5 F -(KeyClass) 186.97 649 T -2 F -( devices by the input extension. Other types of devices sup-) 244.57 649 T -(ported by the input extension include, but are not limited to: mice, tablets, touchscreens,) 108 636 T --0.27 (barcode readers, button boxes, trackballs, identifier devices, data gloves, and eye trackers.) 108 623 P --0.23 (Xkb provides additional control over all X input extension devices, whether they are) 108 610 P -5 F --0.51 -0.6 (Key-) 513.6 610 B --0.6 (Class) 108 597 S -2 F -( devices or not, as well as the core keyboard and pointer.) 141 597 T -(If an X server implements support for both the input extension and Xkb, the server imple-) 108 576 T -(mentor determines whether interaction between Xkb and the input extension is allowed.) 108 563 T -(Implementors are free to restrict the effects of Xkb to only the core X keyboard device or) 108 550 T -(allow interaction between Xkb and the input extension.) 108 537 T -(Several types of interaction between Xkb and the input extension are defined by Xkb.) 108 516 T -(Some or all may be allowed by the X server implementation.) 108 503 T --0.1 (Regardless of whether the server allows interaction between Xkb and the input extension,) 108 482 P -(the following access is provided:) 108 469 T -2 11 Q -(\245) 126 448.67 T -(Xkb functionality for the core X k) 139.68 448.67 T -(e) 289.87 448.67 T -(yboard de) 294.59 448.67 T -(vice and its mapping is accessed via the) 338 448.67 T -(functions described in the other chapters of this speci\336cation.) 139.68 436.67 T -(\245) 126 424.67 T -(Xkb functionality for the core X pointer de) 139.68 424.67 T -(vice is accessed via the) 328.51 424.67 T -1 F -(XkbGetDe) 433.28 424.67 T -(viceInfo) 478.93 424.67 T -2 F -(and) 139.68 412.67 T -1 F -(XkbSetDe) 158.31 412.67 T -(viceInfo) 201.52 412.67 T -2 F -( functions described in this chapter) 236.95 412.67 T -(.) 390.02 412.67 T -2 12 Q -(If all types of interaction are allowed between Xkb and the input extension, the following) 108 394 T -(additional access is provided:) 108 381 T -2 11 Q -(\245) 126 360.67 T --0.05 (If allo) 139.68 360.67 P --0.05 (wed, Xkb functionality for additional) 165.93 360.67 P -5 F --0.12 -0.33 (KeyClass) 332.49 360.67 B -2 F --0.05 ( de) 382.65 360.67 P --0.05 (vices supported by the input) 395.46 360.67 P -(e) 139.68 348.67 T -(xtension is accessed via those same functions.) 144.4 348.67 T -(\245) 126 336.67 T --0.12 (If allo) 139.68 336.67 P --0.12 (wed, Xkb functionality for non-) 165.86 336.67 P -5 F --0.28 -0.33 (KeyClass) 305.6 336.67 B -2 F --0.12 ( de) 355.76 336.67 P --0.12 (vices supported by the input e) 368.49 336.67 P --0.12 (xten-) 499.39 336.67 P -(sion is also accessed via the) 139.68 324.67 T -1 F -(XkbGetDe) 264.94 324.67 T -(viceInfo) 310.59 324.67 T -2 F -(and) 348.77 324.67 T -(X) 367.4 324.67 T -1 F -(kbSetDe) 375.34 324.67 T -(viceInfo) 411.83 324.67 T -2 F -(functions) 450.01 324.67 T -(described in this chapter) 139.68 312.67 T -(.) 246.3 312.67 T -2 12 Q --0.22 (Each device has an X Input Extension device ID. Each device may have several classes of) 108 294 P --0.04 (feedback. For example, there are two types of feedbacks that can generate bells: bell feed-) 108 281 P -(back and keyboard feedback \050) 108 268 T -5 F --0.6 (BellFeedbackClass) 251.94 268 S -2 F -( and) 364.14 268 T -5 F --0.6 (KbdFeedbackClass) 387.47 268 S -2 F -(\051. A) 493.07 268 T -(device can have more than one feedback of each type; the feedback ID identifies the par-) 108 255 T -(ticular feedback within its class.) 108 242 T -(A keyboard feedback has:) 108 221 T -2 11 Q -(\245) 126 200.67 T -(Auto-repeat status \050global and per k) 139.68 200.67 T -(e) 297.51 200.67 T -(y\051) 302.23 200.67 T -(\245) 126 188.67 T -(32 LEDs) 139.68 188.67 T -(\245) 126 176.67 T -(A bell) 139.68 176.67 T -2 12 Q -(An indicator feedback has:) 108 158 T -2 11 Q -(\245) 126 137.67 T -(Up to 32 LEDs) 139.68 137.67 T -2 12 Q -(If the input extension is present and the server allows interaction between the input exten-) 108 119 T --0.35 (sion and Xkb, then the core keyboard, the core keyboard indicators, and the core keyboard) 108 106 P --0.17 (bells may each be addressed using an appropriate device spec, class, and ID. The constant) 108 93 P -5 F --0.6 (XkbXIDfltID) 108 80 S -2 F -( may be used as the device ID to specify the core keyboard indicators for) 180.6 80 T -(the core indicator feedback. The particular device ID corresponding to the core keyboard) 108 67 T -FMENDPAGE -%%EndPage: "198" 210 -%%Page: "199" 211 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(199) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T --0.28 (21 Attaching Xkb Actions to X Input Extension) 323.98 744.87 P -2 12 Q -(feedback and the core indicator feedback may be obtained by calling) 108 712 T -1 F -(XkbGetDe) 440.9 712 T -(viceInfo) 490.7 712 T -2 F -(and specifying) 108 699 T -5 F --0.6 (XkbUseCoreKbd) 181.32 699 S -2 F -( as the) 267.12 699 T -1 F -(de) 300.78 699 T -(vice_spec) 311.93 699 T -2 F -(; the values will be returned in) 358.57 699 T -1 F -(dflt_kbd_id) 108 686 T -2 F -( and) 162.67 686 T -1 F -(dflt_led_id) 186 686 T -2 F -(.) 238.01 686 T --0.14 (If the server does not allow Xkb access to input extension) 108 665 P -5 F --0.31 -0.6 (KeyClass) 386.76 665 B -2 F --0.14 ( devices, attempts to) 439.56 665 P -(use Xkb requests with those devices fail with a) 108 652 T -5 F -(Bad) 336.3 652 T --0.6 (Keyboard) 357.9 652 S -2 F -( error. Attempts to access) 410.7 652 T -(non-) 108 639 T -5 F --0.6 (KeyClass) 130 639 S -2 F -( input extension devices via) 182.8 639 T -1 F -(XkbGetDeviceInfo) 319.12 639 T -2 F -( and) 407.75 639 T -1 F -(XkbSetDeviceInfo) 431.08 639 T -2 F -( fail) 517.04 639 T -(silently if Xkb access to those devices is not supported by the X server.) 108 626 T -0 F -(21.1) 72 601 T -(XkbDe) 108 601 T -(viceInf) 145.16 601 T -(oRec) 182.94 601 T -2 F -(Information about X Input Extension devices is transferred between a client program and) 108 581 T -(the Xkb extension in an) 108 568 T -5 F --0.6 (XkbDeviceInfoRec) 224.99 568 S -2 F -( structure:) 330.59 568 T -2 11 Q -(typedef struct {) 126 547.67 T -(char *) 144 534.67 T -(name;) 234 534.67 T -(/* name for de) 297 534.67 T -(vice */) 360.57 534.67 T -(Atom) 144 521.67 T -(type;) 234 521.67 T -(/* name for class of de) 297 521.67 T -(vices */) 396.62 521.67 T -(unsigned short) 144 508.67 T -(de) 234 508.67 T -(vice_spec;) 244.11 508.67 T -(/* de) 297 508.67 T -(vice of interest */) 318.42 508.67 T -(Bool) 144 495.67 T -(has_o) 234 495.67 T -(wn_state;) 259.39 495.67 T -(/*) 301.55 495.67 T -5 12 Q --0.6 (True) 312.86 495.67 S -2 11 Q -(=>this de) 339.26 495.67 T -(vice has its o) 380.42 495.67 T -(wn state */) 437.28 495.67 T -(unsigned short) 144 482.67 T -(supported;) 234 482.67 T -(/* bits indicating supported capabilities */) 297 482.67 T -(unsigned short) 144 469.67 T -(unsupported;) 234 469.67 T -(/* bits indicating unsupported capabilities */) 297 469.67 T -(unsigned short) 144 456.67 T -(num_btns;) 234 456.67 T -(/* number of entries in) 297 456.67 T -1 F -(btn_acts) 399.96 456.67 T -2 F -( */) 437.24 456.67 T -(XkbAction *) 144 443.67 T -(btn_acts;) 234 443.67 T -(/* b) 297 443.67 T -(utton actions */) 313.59 443.67 T -(unsigned short) 144 430.67 T -(sz_leds;) 234 430.67 T -(/* total number of entries in LEDs v) 297 430.67 T -(ector */) 456.02 430.67 T -(unsigned short) 144 417.67 T -(num_leds;) 234 417.67 T -(/* number of v) 297 417.67 T -(alid entries in LEDs v) 361.8 417.67 T -(ector */) 458.18 417.67 T -(unsigned short) 144 404.67 T -(d\337t_kbd_fb;) 234 404.67 T -(/* input e) 297 404.67 T -(xtension ID of def) 338.39 404.67 T -(ault \050core kbd\051 indicator */) 418.63 404.67 T -(unsigned short) 144 391.67 T -(d\337t_led_fb;) 234 391.67 T -(/* input e) 297 391.67 T -(xtension ID of def) 338.39 391.67 T -(ault indicator feedback */) 418.63 391.67 T -(XkbDe) 144 378.67 T -(viceLedInfoPtr) 175.49 378.67 T -(leds;) 244.84 378.67 T -(/* LED descriptions */) 297 378.67 T -(}) 126 365.67 T -3 F -(XkbDe) 134.03 365.67 T -(viceInf) 166.87 365.67 T -(oRec) 198.97 365.67 T -2 F -(, *XkbDe) 222.18 365.67 T -(viceInfoPtr;) 264.68 365.67 T -(typedef struct {) 126 345.67 T -(unsigned short) 144 332.67 T -(led_class;) 243 332.67 T -(/* class for this LED de) 324 332.67 T -(vice*/) 427.91 332.67 T -(unsigned short) 144 319.67 T -(led_id;) 243 319.67 T -(/* ID for this LED de) 324 319.67 T -(vice */) 418.13 319.67 T -(unsigned int) 144 306.67 T -(ph) 243 306.67 T -(ys_indicators;) 253.95 306.67 T -(/* bits for which LEDs ph) 324 306.67 T -(ysically present */) 438.52 306.67 T -(unsigned int) 144 293.67 T -(maps_present;) 243 293.67 T -(/* bits for which LEDs ha) 324 293.67 T -(v) 437.74 293.67 T -(e maps in) 443.08 293.67 T -1 F -(maps) 487.99 293.67 T -2 F -( */) 511.21 293.67 T -(unsigned int) 144 280.67 T -(names_present;) 243 280.67 T -(/* bits for which LEDs are in) 324 280.67 T -1 F -(names) 455.07 280.67 T -2 F -( */) 483.17 280.67 T -(unsigned int) 144 267.67 T -(state;) 243 267.67 T -(/* 1 bit => corresponding LED is on */) 324 267.67 T -(Atom) 144 254.67 T -(names[XkbNumIndicators]) 243 254.67 T -(;) 363.36 254.67 T -(/* names for LEDs */) 387 254.67 T -(XkbIndicatorMapRec) 144 241.67 T -(maps;) 243 241.67 T -(/* indicator maps for each LED */) 324 241.67 T -(}) 126 228.67 T -3 F -(XkbDe) 134.03 228.67 T -(viceLedInf) 166.87 228.67 T -(oRec) 217.31 228.67 T -2 F -(, *XkbDe) 240.52 228.67 T -(viceLedInfoPtr;) 283.01 228.67 T -(The) 108 209 T -1 F -(type) 127.86 209 T -2 F -( \336eld is a re) 146.18 209 T -(gistered symbolic name for a class of de) 197.34 209 T -(vices \050for e) 373.95 209 T -(xample, \322T) 423.26 209 T -(ABLET\323\051. If a) 471.73 209 T -(de) 108 196 T -(vice is a k) 118.11 196 T -(e) 162.3 196 T -(yboard \050that is, is a member of) 167.01 196 T -5 12 Q --0.6 (KeyClass) 304.49 196 S -2 11 Q -(\051, it has its o) 357.29 196 T -(wn state, and) 411.11 196 T -1 F -(has_own_state) 471.6 196 T -2 F -(is) 108 183 T -5 12 Q --0.6 (True) 118.09 183 S -2 11 Q -(. If) 144.49 183 T -1 F -(has_own_state) 160.06 183 T -2 F -( is) 225.46 183 T -5 12 Q --0.6 (False) 238.3 183 S -2 11 Q -(, the state of the core k) 271.3 183 T -(e) 371.08 183 T -(yboard is used.) 375.8 183 T -2 12 Q -( The) 442.09 183 T -1 11 Q -(supported) 466.75 183 T -2 12 Q -( and) 510.75 183 T -1 11 Q -(unsupported) 108 170 T -2 12 Q -( fields are masks where each bit indicates a capability. The meaning of the) 163 170 T -(mask bits is listed in Table 21.1, together with the fields in the) 108 157 T -5 F --0.6 (XkbDeviceInfoRec) 410.33 157 S -2 F --0.04 (structure that are associated with the capability represented by each bit. The same bits are) 108 144 P --0.12 (used to indicate the specific information desired in many of the functions described subse-) 108 131 P -(quently in this section.) 108 118 T -FMENDPAGE -%%EndPage: "199" 211 -%%Page: "200" 212 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(200) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T --0.28 (21 Attaching Xkb Actions to X Input Extension) 323.98 744.87 P -2 12 Q --0.37 (The) 108 316 P -1 11 Q --0.34 (name) 129.29 316 P -2 12 Q --0.37 (,) 153.12 316 P -1 11 Q --0.34 (type) 158.75 316 P -2 12 Q --0.37 (,) 177.07 316 P -1 11 Q --0.34 (has_own_state) 182.71 316 P -2 12 Q --0.37 (,) 248.1 316 P -1 11 Q --0.34 (supported) 253.73 316 P -2 12 Q --0.37 (, and) 297.73 316 P -1 11 Q --0.34 (unsupported) 323.32 316 P -2 12 Q --0.37 ( fields are always filled in when a) 378.32 316 P --0.32 (valid reply is returned from the server involving an) 108 303 P -5 F --0.71 -0.6 (XkbDeviceInfoRec) 353.37 303 B -2 F --0.32 (. All of the other) 458.97 303 P -(fields are modified only if the particular function asks for them.) 108 290 T -0 F -(21.2) 72 265 T -(Quer) 108 265 T -(ying Xkb Features f) 136.13 265 T -(or Non-K) 246.59 265 T -(e) 297.73 265 T -(yClass Input Extension De) 304.22 265 T -(vices) 454.75 265 T -2 F -(To determine whether the X server allows Xkb access to particular capabilities of input) 108 245 T -(devices other than the core X keyboard, or to determine the status of indicator maps, indi-) 108 232 T -(cator names or button actions on a non-) 108 219 T -5 F --0.6 (KeyClass) 297.64 219 S -2 F -( extension device, use) 350.44 219 T -1 F -(XkbGetDevice-) 458.75 219 T -(Info) 108 206 T -2 F -(.) 127.33 206 T -2 11 Q -(XkbDe) 108 185.67 T -(viceInfoPtr) 139.49 185.67 T -3 F -(XkbGetDe) 191.73 185.67 T -(viceInf) 241.67 185.67 T -(o) 273.78 185.67 T -2 F -(\050) 279.28 185.67 T -1 F -(dpy) 282.94 185.67 T -2 F -(,) 298.11 185.67 T -1 F -(whic) 303.61 185.67 T -(h, de) 324.23 185.67 T -(vice_spec, ind_class, ind_id) 345.45 185.67 T -2 F -(\051) 468.88 185.67 T -(Display *) 126 172.67 T -1 F -(dpy) 234 172.67 T -2 F -(;) 249.88 172.67 T -(/* connection to X serv) 306 172.67 T -(er */) 408.49 172.67 T -(unsigned int) 126 159.67 T -1 F -(whic) 234 159.67 T -(h) 254.61 159.67 T -2 F -(;) 260.11 159.67 T -(/* mask indicating information to return */) 306 159.67 T -(unsigned int) 126 146.67 T -1 F -(de) 234 146.67 T -(vice_spec) 244.22 146.67 T -2 F -(;) 286.98 146.67 T -(/* de) 306 146.67 T -(vice ID, or) 327.42 146.67 T -5 F --0.55 (XkbUseCoreKbd) 377.51 146.67 S -2 F -( */) 456.16 146.67 T -(unsigned int) 126 133.67 T -1 F -(ind_class) 234 133.67 T -2 F -(;) 275.56 133.67 T -(/* feedback class for indicator requests */) 306 133.67 T -(unsigned int) 126 120.67 T -1 F -(ind_id;) 234 120.67 T -2 F -(/* feedback ID for indicator requests */) 306 120.67 T -1 12 Q -(XkbGetDe) 108 101 T -(viceInfo) 157.8 101 T -2 F -( returns information about the input device specified by) 196.45 101 T -1 F -(device_spec) 466.08 101 T -2 F -(.) 524.05 101 T --0.23 (Unlike the) 108 88 P -1 F --0.23 (de) 160.87 88 P --0.23 (vice_spec) 172.02 88 P -2 F --0.23 ( parameter of most Xkb functions,) 218.66 88 P -1 F --0.23 (de) 384.93 88 P --0.23 (vice_spec) 396.08 88 P -2 F --0.23 ( does not need to be) 442.72 88 P -3 F -(T) 245.84 692 T -(able 21.1 XkbDe) 252.74 692 T -(viceInf) 339.89 692 T -(oRec Mask Bits) 374.92 692 T -1 F -(Name) 109 665 T --0.11 (XkbDe) 271 672 P --0.11 (viceInfoRec) 303.47 672 P -(F) 271 658 T -(ields Ef) 277.79 658 T -(fected) 313.91 658 T -(V) 364 665 T -(alue) 370 665 T -(Capability If Set) 418 665 T -2 11 Q -(XkbXI_K) 109 643.67 T -(e) 152.71 643.67 T -(yboardsMask) 157.43 643.67 T -(\0501L << 0\051) 364 643.67 T --0.17 (Clients can use all Xkb requests and) 418 643.67 P -(e) 418 632.67 T -(v) 422.61 632.67 T -(ents with) 427.94 632.67 T -5 F --0.33 (KeyClass) 470.72 632.67 S -2 F -( de) 520.88 632.67 T -(vices sup-) 533.74 632.67 T -(ported by the input de) 418 621.67 T -(vice e) 514.27 621.67 T -(xten-) 540.07 621.67 T -(sion.) 418 610.67 T -(XkbXI_ButtonActionsMask) 109 596.67 T -(num_btns) 271 596.67 T -(btn_acts) 271 585.67 T -(\0501L <<1\051) 364 596.67 T -(Clients can assign k) 418 596.67 T -(e) 505.58 596.67 T -(y actions to) 510.3 596.67 T -(b) 418 585.67 T -(uttons on non-) 423.28 585.67 T -5 F --0.33 (KeyClass) 486.84 585.67 S -2 F -( input) 537 585.67 T -(e) 418 574.67 T -(xtension de) 422.72 574.67 T -(vices.) 472.86 574.67 T -(XkbXI_IndicatorNamesMask) 109 560.67 T -(leds->names) 271 560.67 T -(\0501L <<2\051) 364 560.67 T -(Clients can assign names to indica-) 418 560.67 T -(tors on non-) 418 549.67 T -5 F --0.33 (KeyClass) 471.16 549.67 S -2 F -( input e) 521.32 549.67 T -(xten-) 554.16 549.67 T -(sion de) 418 538.67 T -(vices.) 449.2 538.67 T -(XkbXI_IndicatorMapsMask) 109 524.67 T -(leds->maps) 271 524.67 T -(\0501L <<3\051) 364 524.67 T --0.05 (Clients can assign indicator maps to) 418 524.67 P -(indicators on non-) 418 513.67 T -5 F --0.33 (KeyClass) 498.05 513.67 S -2 F -( input) 548.21 513.67 T -(e) 418 502.67 T -(xtension de) 422.72 502.67 T -(vices.) 472.86 502.67 T -(XkbXI_IndicatorStateMask) 109 488.67 T -(leds->state) 271 488.67 T -(\0501L <<4\051) 364 488.67 T -(Clients can request the status of) 418 488.67 T -(indicators on non-) 418 477.67 T -5 F --0.33 (KeyClass) 498.05 477.67 S -2 F -( input) 548.21 477.67 T -(e) 418 466.67 T -(xtension de) 422.72 466.67 T -(vices.) 472.86 466.67 T -(XkbXI_IndicatorsMask) 109 452.67 T -(sz_leds) 271 452.67 T -(num_leds) 271 441.67 T -(leds->*) 271 430.67 T -(\0500x1c\051) 364 452.67 T -(XkbXI_IndicatorNamesMask |) 418 452.67 T -(XkbXI_IndicatorMapsMask |) 418 441.67 T -(XkbXI_IndicatorStateMask) 418 430.67 T -(XkbXI_UnsupportedFeaturesMask) 109 416.67 T -(unsupported) 271 416.67 T -(\0501L <<15\051) 364 416.67 T -(XkbXI_AllDe) 109 402.67 T -(viceFeaturesMask) 171.66 402.67 T -(Those selected by) 271 402.67 T -(V) 271 391.67 T -(alue column masks) 277.72 391.67 T -(\0500x1e\051) 364 402.67 T -(XkbXI_IndicatorsMask |) 418 402.67 T -(XkbSI_ButtonActionsMask) 418 391.67 T -(XkbXI_AllFeaturesMask) 109 377.67 T -(Those selected by) 271 377.67 T -(V) 271 366.67 T -(alue column masks) 277.72 366.67 T -(\0500x1f\051) 364 377.67 T -(XkbSI_AllDe) 418 377.67 T -(viceFeaturesMask |) 478.83 377.67 T -(XkbSI_K) 418 366.67 T -(e) 459.89 366.67 T -(yboardsMask) 464.61 366.67 T -(XkbXI_AllDetailsMask) 109 352.67 T -(Those selected by) 271 352.67 T -(V) 271 341.67 T -(alue column masks) 277.72 341.67 T -(\0500x801f\051) 364 352.67 T -(XkbXI_AllFeaturesMask |) 418 352.67 T -(XkbXI_UnsupportedFeaturesMask) 418 341.67 T -108 684 579 684 2 L -V -0.5 H -0 Z -N -108 653 579 653 2 L -V -N -FMENDPAGE -%%EndPage: "200" 212 -%%Page: "201" 213 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(201) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T --0.28 (21 Attaching Xkb Actions to X Input Extension) 323.98 744.87 P -2 12 Q -(a keyboard device. It must, however, indicate either the core keyboard or a valid X Input) 108 712 T -(Extension device.) 108 699 T -(The) 108 678 T -1 F -(which) 129.66 678 T -2 F -(parameter) 161.33 678 T -(is a mask specifying optional information to be returned. It is an) 212.3 678 T -(inclusive OR of one or more of the values from Table 21.1 and causes the returned) 108 665 T -5 F --0.6 (XkbDeviceInfoRec) 108 652 S -2 F -( to contain values for the corresponding fields specified in the table.) 213.6 652 T -(The) 108 631 T -5 F --0.6 (XkbDeviceInfoRec) 129.66 631 S -2 F -( returned by) 235.26 631 T -1 F -(XkbGetDe) 296.25 631 T -(viceInfo) 346.05 631 T -2 F -( always has values for) 384.7 631 T -1 F -(name) 493.67 631 T -2 F -(\050may be a null string, \322\323\051,) 108 618 T -1 F -(type) 233.98 618 T -2 F -(,) 253.97 618 T -1 F -(supported) 259.97 618 T -2 F -(,) 307.97 618 T -1 F -(unsupported) 313.97 618 T -2 F -(,) 373.97 618 T -1 F -(has_own_state) 379.97 618 T -2 F -(,) 451.31 618 T -1 F -(dflt_kbd_fd) 457.31 618 T -2 F -(, and) 511.98 618 T -1 F -(dflt_kbd_fb) 108 605 T -2 F -(. Other fields are filled in as specified by) 162.67 605 T -1 F -(whic) 361.3 605 T -(h) 383.78 605 T -2 F -(.) 389.78 605 T -(Upon return, the) 108 584 T -1 F -(supported) 189.98 584 T -2 F -( field will be set to the inclusive OR of zero or more bits from) 237.98 584 T -(Table 21.1; each bit set indicates an optional Xkb extension device feature supported by) 108 571 T -(the server implementation, and a client may modify the associated behavior.) 108 558 T -(If the) 108 537 T -5 F --0.6 (XkbButtonActionsMask) 136.66 537 S -2 F -( bit is set in) 268.66 537 T -1 F -(whic) 327 537 T -(h) 349.49 537 T -2 F -(, the) 355.49 537 T -5 F --0.6 (XkbDeviceInfoRec) 379.15 537 S -2 F -( returned) 484.76 537 T -(will have the button actions \050) 108 524 T -1 F -(btn_acts) 247.66 524 T -2 F -( field\051 filled in for all buttons.) 288.32 524 T -(If) 108 503 T -1 F -(whic) 118.99 503 T -(h) 141.48 503 T -2 F -( includes one of the bits in) 147.48 503 T -5 F -(XkbXI_IndicatorsMask) 277.14 503 T -2 F -(, the feedback class of) 421.14 503 T -(the indicators must be specified in) 108 490 T -1 F -(ind_class) 275.32 490 T -2 F -(, and the feedback ID of the indicators must) 320.65 490 T -(be specified in) 108 477 T -1 F -(ind_id) 180.98 477 T -2 F -(. If the request does not include any of the bits in) 211.66 477 T -5 F --0.47 (XkbXI_IndicatorsMask) 108 464 P -2 F --0.19 (, the) 252 464 P -1 F --0.19 (ind_class) 275.27 464 P -2 F --0.19 ( and) 320.61 464 P -1 F --0.19 (ind_id) 343.55 464 P -2 F --0.19 ( parameters are ignored. The class) 374.22 464 P -(and ID can be obtained via the input device extension) 108 451 T -1 F -(XListInputDevices) 368.62 451 T -2 F -( request.) 457.27 451 T -(If any of the) 108 430 T -5 F --0.6 (XkbXI_IndicatorsMask) 169.98 430 S -2 F -( bits are set in) 301.98 430 T -1 F -(whic) 371.64 430 T -(h) 394.13 430 T -2 F -(, the) 400.13 430 T -5 F --0.6 (XkbDeviceInfoRec) 423.8 430 S -2 F --0.28 (returned will have filled in the portions of the) 108 417 P -1 F --0.28 (leds) 327.08 417 P -2 F --0.28 ( structure corresponding to the indicator) 346.41 417 P -(feedback identified by) 108 404 T -1 F -(ind_class) 218.3 404 T -2 F -( and) 263.64 404 T -1 F -(ind_id) 286.97 404 T -2 F -(. The) 317.64 404 T -1 F -(leds) 345.3 404 T -2 F -( vector of the) 364.63 404 T -5 F --0.6 (XkbDeviceInfoRec) 431.28 404 S -2 F -(is allocated if necessary and) 108 391 T -1 F -(sz_leds) 245.63 391 T -2 F -( and) 280.3 391 T -1 F -(num_leds) 303.62 391 T -2 F -( filled in. The) 349.62 391 T -1 F -(led_class) 417.95 391 T -2 F -(,) 462.61 391 T -1 F -(led_id) 468.61 391 T -2 F -( and) 498.61 391 T -1 F -(phys_indicators) 108 378 T -2 F -( fields of the) 184.67 378 T -1 F -(leds) 247.99 378 T -2 F -( entry corresponding to) 267.32 378 T -1 F -(ind_class) 381.97 378 T -2 F -( and) 427.31 378 T -1 F -(ind_id) 450.64 378 T -2 F -( are always) 481.31 378 T -(filled in. If) 108 365 T -1 F -(whic) 162.66 365 T -(h) 185.15 365 T -2 F -( contains) 191.15 365 T -5 F --0.6 (XkbXI_IndicatorNamesMask) 237.14 365 S -2 F -(, the) 395.55 365 T -1 F -(names_present) 419.21 365 T -2 F -( and) 491.2 365 T -1 F -(names) 108 352 T -2 F -( fields of the) 138.66 352 T -1 F -(leds) 201.98 352 T -2 F -( structure corresponding to) 221.32 352 T -1 F -(ind_class) 353.29 352 T -2 F -( and) 398.63 352 T -1 F -(ind_id) 421.96 352 T -2 F -( are returned.) 452.63 352 T -(If) 522.86 352 T -1 F --0.21 (whic) 108 339 P --0.21 (h) 130.49 339 P -2 F --0.21 ( contains) 136.49 339 P -5 F --0.46 -0.6 (XkbXI_IndicatorStateMask) 182.07 339 B -1 F --0.21 (,) 340.47 339 P -2 F --0.21 ( the corresponding) 343.47 339 P -1 F --0.21 (state) 435.17 339 P -2 F --0.21 ( field is updated.) 457.84 339 P -(If) 108 326 T -1 F -(whic) 118.99 326 T -(h) 141.48 326 T -2 F -( contains) 147.48 326 T -5 F --0.6 (XkbXI_IndicatorMapsMask) 193.48 326 S -2 F -(, the) 345.28 326 T -1 F -(maps_present) 368.94 326 T -2 F -( and) 435.6 326 T -1 F -(maps) 458.93 326 T -2 F -( fields are) 484.26 326 T -(updated.) 108 313 T -(Xkb provides convenience functions to request subsets of the information available via) 108 292 T -1 F -(XkbGetDe) 108 279 T -(viceInfo) 157.8 279 T -2 F -(. These convenience functions mirror some of the mask bits. The func-) 196.45 279 T -(tions all take an) 108 266 T -5 F --0.6 (XkbDeviceInfoPtr) 186.66 266 S -2 F -( as an input argument and operate on the X Input) 292.26 266 T -(Extension device specified by the) 108 253 T -1 F -(device_spec) 272.3 253 T -2 F -( field of the structure. Only the parts of the) 330.28 253 T -(structure indicated in the function description are updated. The) 108 240 T -5 F --0.6 (XkbDeviceInfo) 412.61 240 S -2 F -(Rec) 498.41 240 T -(structure used in the function call can be obtained by calling) 108 227 T -1 F -(XkbGetDeviceInfo) 400.28 227 T -2 F -( or can be) 488.92 227 T -(allocated by calling) 108 214 T -1 F -(XkbAllocDeviceInfo) 204.98 214 T -2 F -( \050see section 21.3\051.) 301.62 214 T -(These convenience functions are described as follows.) 108 193 T -(To query the button actions associated with an X Input Extension device, use) 108 172 T -1 F -(XkbGetDe-) 481.28 172 T -(viceButtonActions.) 108 159 T -2 11 Q -(Status) 108 138.67 T -3 F -(XkbGetDe) 137.65 138.67 T -(viceButtonActions) 187.59 138.67 T -2 F -(\050) 273.75 138.67 T -1 F -(dpy) 277.41 138.67 T -(, de) 292.69 138.67 T -(vice_info, all_b) 308.41 138.67 T -(uttons, \336r) 376.63 138.67 T -(st_b) 418.7 138.67 T -(utton, num_b) 436.81 138.67 T -(uttons) 494.65 138.67 T -2 F -(\051) 521.54 138.67 T -(Display *) 126 125.67 T -1 F -(dpy) 234 125.67 T -2 F -(;) 249.88 125.67 T -(/* connection to X serv) 306 125.67 T -(er */) 408.49 125.67 T -(XkbDe) 126 112.67 T -(viceInfoPtr) 157.49 112.67 T -1 F -(de) 234 112.67 T -(vice_info) 244.22 112.67 T -2 F -(;) 284.55 112.67 T -(/* structure to update with results */) 306 112.67 T -(Bool) 126 99.67 T -1 F -(all_b) 234 99.67 T -(uttons) 256.4 99.67 T -2 F -(;) 283.29 99.67 T -(/*) 306 99.67 T -5 12 Q --0.6 (True) 317.31 99.67 S -2 11 Q -( => get information for all b) 343.71 99.67 T -(uttons */) 467.11 99.67 T -(unsigned int) 126 86.67 T -1 F -(\336r) 234 86.67 T -(st_b) 243.67 86.67 T -(utton) 261.79 86.67 T -2 F -(;) 284.4 86.67 T -(/* number of \336rst b) 306 86.67 T -(utton for which info is desired */) 390.72 86.67 T -(unsigned int) 126 73.67 T -1 F -(num_b) 234 73.67 T -(uttons) 263.72 73.67 T -2 F -(;) 290.62 73.67 T -(/* number of b) 306 73.67 T -(uttons for which info is desired */) 370.86 73.67 T -FMENDPAGE -%%EndPage: "201" 213 -%%Page: "202" 214 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(202) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T --0.28 (21 Attaching Xkb Actions to X Input Extension) 323.98 744.87 P -1 12 Q -(XkbGetDe) 108 712 T -(viceButtonActions) 157.8 712 T -2 F -( queries the server for the desired button information for the) 245.12 712 T -(device indicated by the) 108 699 T -1 F -(device_spec) 221.98 699 T -2 F -( field of) 279.95 699 T -1 F -(de) 320.94 699 T -(vice_info) 332.09 699 T -2 F -( and waits for a reply. If success-) 376.08 699 T -(ful,) 108 686 T -1 F -(XkbGetDe) 127.08 686 T -(viceButtonActions) 176.88 686 T -2 F -( backfills the button actions \050) 264.21 686 T -1 F -(btn_acts) 403.86 686 T -2 F -( field of) 444.53 686 T -1 F --0.15 (de) 108 673 P --0.15 (vice_info) 119.15 673 P -2 F --0.15 (\051 for only the requested buttons, updates the) 163.14 673 P -1 F --0.15 (name) 375.61 673 P -2 F --0.15 (,) 401.6 673 P -1 F --0.15 (type) 407.45 673 P -2 F --0.15 (,) 427.45 673 P -1 F --0.15 (supported) 433.3 673 P -2 F --0.15 (, and) 481.3 673 P -1 F --0.15 (unsup-) 507.34 673 P -(ported) 108 660 T -2 F -( fields, and returns) 139.33 660 T -5 F --0.6 (Success) 231.65 660 S -2 F -(.) 277.85 660 T -1 F -(all_buttons) 108 639 T -2 F -(,) 162.01 639 T -1 F -(first_button) 168.01 639 T -2 F -( and) 224.03 639 T -1 F -(num_buttons) 247.36 639 T -2 F -( specify the device buttons for which actions) 309.36 639 T -(should be returned. Setting) 108 626 T -1 F -(all_buttons) 240.32 626 T -2 F -( to) 294.34 626 T -5 F --0.6 (True) 309.67 626 S -2 F -( requests actions for all device buttons; if) 336.07 626 T -1 F -(all_buttons) 108 613 T -2 F -( is) 162.01 613 T -5 F --0.6 (False) 176.02 613 S -2 F -(,) 209.02 613 T -1 F -(first_button) 215.02 613 T -2 F -( and) 271.03 613 T -1 F -(num_buttons) 294.36 613 T -2 F -( specify a range of buttons for which) 356.36 613 T -(actions are requested.) 108 600 T -(If a compatible version of Xkb is not available in the server or the Xkb extension has not) 108 579 T -(been properly initialized,) 108 566 T -1 F -(XkbGetDeviceButtonActions) 231.31 566 T -2 F -( returns) 368.62 566 T -5 F --0.6 (BadAccess) 407.94 566 S -2 F -(. If allocation) 467.34 566 T -(errors occur, a) 108 553 T -5 F --0.6 (BadAlloc) 179.96 553 S -2 F -( status is returned. If the specified device) 232.76 553 T -(\050) 108 540 T -1 F -(de) 112 540 T -(vice_info) 123.14 540 T -2 F -(->) 167.14 540 T -1 F -(device_spec) 177.9 540 T -2 F -(\051 is invalid, a) 235.87 540 T -5 F -(BadKeyboard) 301.54 540 T -2 F -( status is returned. If the device) 380.74 540 T -(has no buttons, a) 108 527 T -5 F -(Bad) 191.66 527 T --0.6 (Match) 213.26 527 S -2 F -( status is returned. If) 246.26 527 T -1 F -(first_button) 347.58 527 T -2 F -( and) 403.6 527 T -1 F -(num_buttons) 426.92 527 T -2 F -( specify) 488.93 527 T -(illegal buttons, a) 108 514 T -5 F -(Bad) 190.67 514 T --0.6 (Value) 212.27 514 S -2 F -( status is returned.) 245.27 514 T -(To query the indicator names, maps, and state associated with an LED feedback of an) 108 493 T -(input extension device, use) 108 480 T -1 F -(XkbGetDeviceLedInfo.) 240.98 480 T -2 11 Q -(Status) 108 459.67 T -3 F -(XkbGetDe) 137.65 459.67 T -(viceLedInf) 187.59 459.67 T -(o) 238.03 459.67 T -2 F -(\050) 243.53 459.67 T -1 F -(dpy) 247.19 459.67 T -(, de) 262.47 459.67 T -(vice_info, led_class, led_id, whic) 278.19 459.67 T -(h) 424.07 459.67 T -2 F -(\051) 429.57 459.67 T -(Display *) 126 446.67 T -1 F -(dpy) 234 446.67 T -2 F -(;) 249.88 446.67 T -(/* connection to X serv) 306 446.67 T -(er */) 408.49 446.67 T -(XkbDe) 126 433.67 T -(viceInfoPtr) 157.49 433.67 T -1 F -(de) 234 433.67 T -(vice_info) 244.22 433.67 T -2 F -(;) 284.55 433.67 T -(/* structure to update with results */) 306 433.67 T -(unsigned int) 126 420.67 T -1 F -(led_class) 234 420.67 T -2 F -(;) 274.94 420.67 T --0.14 (/* LED feedback class assigned by input e) 306 420.67 P --0.14 (xtension */) 491.55 420.67 P -(unsigned int) 126 407.67 T -1 F -(led_id) 234 407.67 T -2 F -(;) 261.5 407.67 T -(/* LED feedback ID assigned by input e) 306 407.67 T -(xtension */) 482.71 407.67 T -(unsigned int) 126 394.67 T -1 F -(whic) 234 394.67 T -(h) 254.61 394.67 T -2 F -(;) 260.11 394.67 T -(/* mask indicating desired information */) 306 394.67 T -1 12 Q --0.36 (XkbGetDe) 108 375 P --0.36 (viceLedInfo) 157.8 375 P -2 F --0.36 ( queries the server for the desired LED information for the feedback) 214.45 375 P -(specified by) 108 362 T -1 F -(led_class) 169.32 362 T -2 F -( and) 213.98 362 T -1 F -(led_id) 237.31 362 T -2 F -( for the X input extension device indicated by) 267.31 362 T -1 F --0.22 (device_spec) 108 349 P -2 F --0.22 (->) 165.97 349 P -1 F --0.22 (de) 176.74 349 P --0.22 (vice_info) 187.88 349 P -2 F --0.22 ( and waits for a reply. If successful,) 231.88 349 P -1 F --0.22 (XkbGetDe) 404.11 349 P --0.22 (viceLedInfo) 453.91 349 P -2 F --0.22 ( back-) 510.56 349 P -(fills the relevant fields of) 108 336 T -1 F -(de) 231.65 336 T -(vice_info) 242.8 336 T -2 F -( as determined by) 286.79 336 T -1 F -(whic) 374.77 336 T -(h) 397.26 336 T -2 F -( with the results and returns) 403.26 336 T -5 F --0.6 (Success) 108 323 S -2 F -(. Valid values for) 154.2 323 T -1 F -(whic) 240.52 323 T -(h) 263.01 323 T -2 F -( are the inclusive OR of any of) 269.01 323 T -5 F --0.6 (XkbXI_IndicatorNamesMask) 108 310 S -2 F -(,) 266.4 310 T -5 F --0.6 (XkbXI_IndicatorMapsMask) 272.4 310 S -2 F -(, and) 424.21 310 T -5 F --0.6 (XkbXI_IndicatorStateMask) 108 297 S -2 F -(.) 266.4 297 T -(The fields of) 108 276 T -1 F -(de) 172.32 276 T -(vice_info) 183.47 276 T -2 F -( that are filled in when this request succeeds are) 227.46 276 T -1 F -(name, type, sup-) 460.07 276 T --0.33 (ported) 108 263 P -2 F --0.33 (, and) 139.33 263 P -1 F --0.33 (unsupported) 165 263 P -2 F --0.33 (, and portions of the) 225 263 P -1 F --0.33 (leds) 322.68 263 P -2 F --0.33 ( structure corresponding to) 342.01 263 P -1 F --0.33 (led_class) 472.67 263 P -2 F --0.33 ( and) 517.33 263 P -1 F -(led_id) 108 250 T -2 F -( as indicated by the bits set in) 138 250 T -1 F -(whic) 282.66 250 T -(h) 305.15 250 T -2 F -(. The) 311.15 250 T -1 F -(device_info->leds) 338.81 250 T -2 F -( vector is allocated if) 425.56 250 T -(necessary and) 108 237 T -1 F -(sz_leds) 177.97 237 T -2 F -( and) 212.64 237 T -1 F -(num_leds) 235.97 237 T -2 F -( filled in. The) 281.96 237 T -1 F -(led_class) 350.29 237 T -2 F -(,) 394.96 237 T -1 F -(led_id) 400.96 237 T -2 F -( and) 430.96 237 T -1 F -(phys_indicators) 454.28 237 T -2 F -(fields of the) 108 224 T -1 F -(de) 168.32 224 T -(vice_info) 179.47 224 T -2 F -(->) 223.46 224 T -1 F -(leds) 234.23 224 T -2 F -( entry corresponding to) 253.56 224 T -1 F -(led_class) 368.21 224 T -2 F -( and) 412.87 224 T -1 F -(led_id) 436.2 224 T -2 F -( are always) 466.2 224 T -(filled in.) 108 211 T -(If) 108 190 T -1 F -(whic) 118.99 190 T -(h) 141.48 190 T -2 F -( contains) 147.48 190 T -5 F --0.6 (XkbXI_IndicatorNamesMask) 193.48 190 S -2 F -(, the) 351.88 190 T -1 F -(names_present) 375.54 190 T -2 F -( and) 447.53 190 T -1 F -(names) 470.86 190 T -2 F -( fields) 501.52 190 T -(of the) 108 177 T -1 F -(de) 138.66 177 T -(vice_info) 149.81 177 T -2 F -(->) 193.8 177 T -1 F -(leds) 204.56 177 T -2 F -( structure corresponding to) 223.9 177 T -1 F -(led_class) 355.87 177 T -2 F -( and) 400.54 177 T -1 F -(led_id) 423.86 177 T -2 F -( are updated, if) 453.86 177 T -1 F --0.21 (whic) 108 164 P --0.21 (h) 130.49 164 P -2 F --0.21 ( contains) 136.49 164 P -5 F --0.46 -0.6 (XkbXI_IndicatorStateMask) 182.07 164 B -1 F --0.21 (,) 340.47 164 P -2 F --0.21 ( the corresponding) 343.47 164 P -1 F --0.21 (state) 435.17 164 P -2 F --0.21 ( field is updated,) 457.84 164 P -(and if) 108 151 T -1 F -(whic) 138.66 151 T -(h) 161.15 151 T -2 F -( contains) 167.15 151 T -5 F --0.6 (XkbXI_IndicatorMapsMask) 213.14 151 S -2 F -(, the) 364.95 151 T -1 F -(maps_present) 388.61 151 T -2 F -( and) 455.27 151 T -1 F -(maps) 478.6 151 T -2 F -( fields) 503.93 151 T -(are updated.) 108 138 T -(If a compatible version of Xkb is not available in the server or the Xkb extension has not) 108 117 T -(been properly initialized,) 108 104 T -1 F -(XkbGetDe) 231.31 104 T -(viceLedInfo) 281.11 104 T -2 F -( returns) 337.76 104 T -5 F --0.6 (BadAccess) 377.09 104 S -2 F -(. If allocation errors) 436.49 104 T --0.12 (occur, a BadAlloc status is returned. If the device has no indicators, a) 108 91 P -5 F --0.28 (BadMatch) 442.43 91 P -2 F --0.12 ( error is) 500.03 91 P -(returned. If) 108 78 T -1 F -(ledClass) 164.98 78 T -2 F -( or) 206.32 78 T -1 F -(ledID) 222.31 78 T -2 F -( have illegal values, a) 249.64 78 T -5 F -(Bad) 356.28 78 T --0.6 (Value) 377.88 78 S -2 F -( error is returned. If they) 410.88 78 T -FMENDPAGE -%%EndPage: "202" 214 -%%Page: "203" 215 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(203) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T --0.28 (21 Attaching Xkb Actions to X Input Extension) 323.98 744.87 P -2 12 Q --0.04 (have legal values but do not specify a feedback that contains LEDs and is associated with) 108 712 P -(the specified device, a) 108 699 T -5 F -(Bad) 217.63 699 T --0.6 (Match) 239.23 699 S -2 F -( error is returned.) 272.23 699 T -0 F -(21.3) 72 674 T -(Allocating, Initializing, and Freeing the XkbDe) 108 674 T -(viceInf) 367.88 674 T -(oRec Structure) 405.66 674 T -2 F -(To obtain an) 108 654 T -5 F --0.6 (XkbDeviceInfoRec) 171.66 654 S -2 F -( structure, use) 277.26 654 T -1 F -(XkbGetDeviceInfo) 347.25 654 T -2 F -( or) 435.88 654 T -1 F -(XkbAllocDevice-) 451.87 654 T -(Info) 108 641 T -2 F -(.) 127.33 641 T -2 11 Q -(XkbDe) 108 620.67 T -(viceInfoPtr) 139.49 620.67 T -3 F -(XkbAllocDe) 191.73 620.67 T -(viceInf) 249.01 620.67 T -(o) 281.12 620.67 T -2 F -(\050) 286.62 620.67 T -1 F -(de) 290.28 620.67 T -(vice_spec, n_b) 300.5 620.67 T -(uttons, sz_leds) 365.04 620.67 T -2 F -(\051) 429.21 620.67 T -(unsigned int) 126 607.67 T -1 F -(de) 234 607.67 T -(vice_spec) 244.22 607.67 T -2 F -(;) 286.98 607.67 T -(/* de) 306 607.67 T -(vice ID with which structure will be used */) 327.42 607.67 T -(unsigned int) 126 594.67 T -1 F -(n_b) 234 594.67 T -(uttons) 250.28 594.67 T -2 F -(;) 277.17 594.67 T -(/* number of b) 306 594.67 T -(utton actions to allocate space for*/) 370.86 594.67 T -(unsigned int) 126 581.67 T -1 F -(sz_leds) 234 581.67 T -2 F -(;) 265.78 581.67 T -(/* number of LED feedbacks to allocate space for */) 306 581.67 T -1 12 Q -(XkbAllocDe) 108 562 T -(viceInfo) 165.8 562 T -2 F -( allocates space for an) 204.46 562 T -5 F --0.6 (XkbDeviceInfoRec) 313.42 562 S -2 F -( structure and initializes) 419.02 562 T -(that structure\325s) 108 549 T -1 F -(device_spec) 182.65 549 T -2 F -( field with the device ID specified by) 240.62 549 T -1 F -(device_spec) 421.92 549 T -2 F -(. If) 479.89 549 T -1 F -(n_b) 108 536 T -(uttons) 125.76 536 T -2 F -( is nonzero,) 155.1 536 T -1 F -(n_b) 213.76 536 T -(uttons) 231.52 536 T -5 F --0.6 (XkbActions) 263.86 536 S -2 F -( are linked into the) 329.86 536 T -5 F --0.6 (XkbDeviceInfoRec) 422.85 536 S -2 F -(structure and initialized to zero. If) 108 523 T -1 F -(sz_leds) 274.3 523 T -2 F -( is nonzero,) 308.96 523 T -1 F -(sz_leds) 367.62 523 T -5 F --0.6 (XkbDeviceLedInfoRec) 405.29 523 S -2 F -(structures are also allocated and linked into the) 108 510 T -5 F --0.6 (XkbDeviceInfoRec) 336.62 510 S -2 F -( structure. If you) 442.23 510 T -(request) 108 497 T -5 F --0.6 (XkbDeviceLedInfoRec) 145.66 497 S -2 F -( structures be allocated using this request, you must ini-) 271.06 497 T -(tialize them explicitly.) 108 484 T -(To obtain an) 108 463 T -5 F --0.6 (XkbDeviceLedInfoRec) 171.66 463 S -2 F -( structure, use) 297.06 463 T -1 F -(XkbAllocDeviceLedInfo) 367.05 463 T -2 F -(.) 481.68 463 T -2 11 Q -(Status) 108 442.67 T -3 F -(XkbAllocDe) 137.65 442.67 T -(viceLedInf) 194.92 442.67 T -(o) 245.37 442.67 T -2 F -(\050) 250.87 442.67 T -1 F -(de) 254.53 442.67 T -(vi, num_needed) 264.75 442.67 T -2 F -(\051) 333.79 442.67 T -(XkbDe) 126 429.67 T -(viceInfoPtr) 157.49 429.67 T -1 F -(de) 234 429.67 T -(vice_info) 244.22 429.67 T -2 F -(;) 284.55 429.67 T -(/* structure in which to allocate LED space */) 306 429.67 T -(int) 126 416.67 T -1 12 Q -(num_needed) 234 416.67 T -2 11 Q -(;) 294.65 416.67 T -(/* number of indicators to allocate space for */) 306 416.67 T -1 12 Q -(XkbAllocDe) 108 397 T -(viceLedInfo) 165.8 397 T -2 F -( allocates space for an) 222.46 397 T -5 F --0.6 (XkbDeviceLedInfoRec) 331.42 397 S -2 F -( and places it in) 456.82 397 T -1 F -(de) 108 384 T -(vice_info) 119.15 384 T -2 F -(. If) 163.14 384 T -1 F -(num_needed) 180.13 384 T -2 F -( is nonzero,) 240.78 384 T -1 F -(num_needed) 299.44 384 T -5 F --0.6 (XkbIndicatorMapRec) 363.08 384 S -2 F -( structures) 481.89 384 T -(are also allocated and linked into the) 108 371 T -5 F --0.6 (XkbDeviceLedInfoRec) 286.97 371 S -2 F -( structure. If you request) 412.37 371 T -5 F --0.6 (XkbIndicatorMapRec) 108 358 S -2 F -( structures be allocated using this request, you must initialize) 226.8 358 T -(them explicitly. All other fields are initialized to zero.) 108 345 T -(To initialize an) 108 324 T -5 F --0.6 (XkbDeviceLedInfoRec) 183.66 324 S -2 F -( structure, use) 309.06 324 T -1 F -(XkbAddDeviceLedInfo) 379.05 324 T -2 F -(.) 487.68 324 T -2 11 Q -(XkbDe) 108 303.67 T -(viceLedInfoPtr) 139.49 303.67 T -3 F -(XkbAddDe) 208.84 303.67 T -(viceLedInf) 261.85 303.67 T -(o) 312.29 303.67 T -2 F -(\050) 317.79 303.67 T -1 F -(de) 321.45 303.67 T -(vice_info, led_class, led_id) 331.67 303.67 T -2 F -(\051) 451.44 303.67 T -(XkbDe) 126 290.67 T -(viceInfoPtr) 157.49 290.67 T -1 F -(de) 234 290.67 T -(vice_info) 244.22 290.67 T -2 F -(;) 284.55 290.67 T -(/* structure in which to add LED info */) 306 290.67 T -(unsigned int) 126 277.67 T -1 12 Q -(led_class) 234 277.67 T -2 11 Q -(;) 278.66 277.67 T -(/* input e) 306 277.67 T -(xtension class for LED de) 347.39 277.67 T -(vice of interest */) 461.38 277.67 T -(unsigned int) 126 264.67 T -1 12 Q -(led_id) 234 264.67 T -2 11 Q -(;) 264 264.67 T -(/* input e) 306 264.67 T -(xtension ID for LED de) 347.39 264.67 T -(vice of interest */) 451.6 264.67 T -1 12 Q --0.03 (XkbAddDe) 108 245 P --0.03 (viceLedInfo) 159.8 245 P -2 F --0.03 ( first checks to see whether an entry matching) 216.46 245 P -1 F --0.03 (led_class) 439.11 245 P -2 F --0.03 ( and) 483.77 245 P -1 F --0.03 (led_id) 507.03 245 P -2 F -(already exists in the) 108 232 T -1 F -(de) 206.65 232 T -(vice_info->leds) 217.8 232 T -2 F -( array. If it finds a matching entry, it returns a) 293.22 232 T -(pointer to that entry. Otherwise, it checks to be sure there is at least one empty entry in) 108 219 T -1 F -(de) 108 206 T -(vice_info) 119.15 206 T -2 F -(->) 163.14 206 T -1 F -(leds) 173.9 206 T -2 F -( and extends it if there is not enough room. It then increments) 193.24 206 T -1 F -(de) 108 193 T -(vice_info) 119.15 193 T -2 F -(->) 163.14 193 T -1 F -(num_leds) 173.9 193 T -2 F -( and fills in the next available entry in) 219.9 193 T -1 F -(de) 404.88 193 T -(vice_info) 416.03 193 T -2 F -(->) 460.02 193 T -1 F -(leds) 470.78 193 T -2 F -( with) 490.12 193 T -1 F -(led_class) 108 180 T -2 F -( and) 152.66 180 T -1 F -(led_id) 175.99 180 T -2 F -(.) 205.99 180 T -(If successful,) 108 159 T -1 F -(XkbAddDe) 174.31 159 T -(viceLedInfo) 226.12 159 T -2 F -( returns a pointer to the) 282.77 159 T -5 F --0.6 (XkbDeviceLedInfoRec) 397.42 159 S -2 F -(structure that was initialized. If unable to allocate sufficient storage, or if) 108 146 T -1 F -(de) 460.6 146 T -(vice_info) 471.74 146 T -2 F -(points to an invalid) 108 133 T -5 F --0.6 (XkbDeviceInfoRec) 203.34 133 S -2 F -( structure, or if) 308.94 133 T -1 F -(led_class) 383.26 133 T -2 F -( or) 427.92 133 T -1 F -(led_id) 443.92 133 T -2 F -( are inappro-) 473.92 133 T -(priate,) 108 120 T -1 F -(XkbAddDe) 141.32 120 T -(viceLedInfo) 193.13 120 T -2 F -( returns) 249.78 120 T -5 F --0.6 (NULL) 289.1 120 S -2 F -(.) 315.5 120 T -FMENDPAGE -%%EndPage: "203" 215 -%%Page: "204" 216 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(204) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T --0.28 (21 Attaching Xkb Actions to X Input Extension) 323.98 744.87 P -2 12 Q -(To allocate additional space for button actions in an) 108 712 T -5 F --0.6 (XkbDeviceInfoRec) 359.63 712 S -2 F -( structure, use) 465.23 712 T -1 F -(XkbResizeDeviceButtonActions) 108 699 T -2 F -(.) 258.64 699 T -2 11 Q -(Status) 108 678.67 T -3 F -(XkbResizeDe) 137.65 678.67 T -(viceButtonActions) 200.41 678.67 T -2 F -(\050) 286.57 678.67 T -1 F -(de) 290.24 678.67 T -(vice_info, ne) 300.46 678.67 T -(w_total) 356.5 678.67 T -2 F -(\051) 389.51 678.67 T -(XkbDe) 126 665.67 T -(viceInfoPtr) 157.49 665.67 T -1 F -(de) 234 665.67 T -(vice_info) 244.22 665.67 T -2 F -(;) 284.55 665.67 T -(/* structure in which to allocate b) 306 665.67 T -(utton actions */) 453.04 665.67 T -(unsigned int) 126 652.67 T -1 12 Q -(ne) 234 652.67 T -(w_total) 245.15 652.67 T -2 11 Q -(;) 281.16 652.67 T -(/* ne) 306 652.67 T -(w total number of b) 327.42 652.67 T -(utton actions needed */) 413.96 652.67 T -1 12 Q -(XkbResizeDe) 108 633 T -(viceButton) 171.13 633 T -2 F -( reallocates space, if necessary, to make sure there is room for a) 222.46 633 T -(total of) 108 620 T -1 F -(ne) 145.33 620 T -(w_total) 156.48 620 T -2 F -( button actions in the) 192.49 620 T -1 F -(de) 296.16 620 T -(vice_info) 307.31 620 T -2 F -( structure. Any new entries allocated) 351.3 620 T -(are zeroed. If successful,) 108 607 T -1 F -(XkbResizeDe) 229.94 607 T -(viceButton) 293.08 607 T -2 F -( returns) 344.4 607 T -5 F -(Success) 383.72 607 T -2 F -(. If) 434.12 607 T -1 F -(new_total) 451.12 607 T -2 F -( is zero,) 498.46 607 T -(all button actions are deleted,) 108 594 T -1 F -(de) 251.98 594 T -(vice_info) 263.12 594 T -2 F -(->) 307.12 594 T -1 F -(num_btns) 317.88 594 T -2 F -( is set to zero, and) 364.55 594 T -1 F --0.04 (de) 108 581 P --0.04 (vice_info) 119.15 581 P -2 F --0.04 (->) 163.14 581 P -1 F --0.04 (btn_acts) 173.9 581 P -2 F --0.04 ( is set to) 214.57 581 P -5 F --0.1 -0.6 (NULL) 257.07 581 B -2 F --0.04 (. If) 283.47 581 P -1 F --0.04 (device_info) 300.37 581 P -2 F --0.04 ( is invalid or) 355.69 581 P -1 F --0.04 (new_total) 418.86 581 P -2 F --0.04 ( is greater than) 466.2 581 P -(255,) 108 568 T -5 F -(BadValue) 132 568 T -2 F -( is returned. If a memory allocation failure occurs, a) 189.6 568 T -5 F --0.6 (BadAlloc) 442.2 568 S -2 F -( is) 495 568 T -(returned.) 108 555 T -(To free an) 108 534 T -5 F --0.6 (XkbDeviceInfoRec) 160.31 534 S -2 F -( structure, use) 265.91 534 T -1 F -(XkbFreeDeviceInfo) 335.89 534 T -2 F -(.) 429.85 534 T -2 11 Q -(v) 108 513.67 T -(oid) 113.28 513.67 T -3 F -(XkbFr) 130.09 513.67 T -(eeDe) 161.67 513.67 T -(viceInf) 184.1 513.67 T -(o) 216.21 513.67 T -2 F -(\050) 221.71 513.67 T -1 F -(de) 225.37 513.67 T -(vice_info, whic) 235.59 513.67 T -(h, fr) 302.03 513.67 T -(ee_all) 319.96 513.67 T -2 F -(\051) 346.84 513.67 T -(XkbDe) 126 500.67 T -(viceInfoPtr) 157.49 500.67 T -1 F -(de) 213 500.67 T -(vice_info) 223.22 500.67 T -2 F -(;) 263.55 500.67 T --0.06 (/* pointer to) 273.75 500.67 P -5 F --0.15 -0.33 (XkbDeviceInfoRec) 330.08 500.67 B -2 F --0.06 ( in which to free items */) 430.4 500.67 P -(unsigned int) 126 487.67 T -1 F -(whic) 213 487.67 T -(h) 233.61 487.67 T -2 F -(;) 239.11 487.67 T -(/* mask of components of) 273.75 487.67 T -1 F -(de) 390.77 487.67 T -(vice_info) 400.99 487.67 T -2 F -( to free */) 441.31 487.67 T -(Bool) 126 474.67 T -1 F -(fr) 213 474.67 T -(ee_all) 219.93 474.67 T -2 F -(;) 246.81 474.67 T -(/*) 273.75 474.67 T -5 12 Q --0.6 (True) 285.06 474.67 S -2 11 Q -( => free e) 311.46 474.67 T -(v) 353.82 474.67 T -(erything, including de) 359.15 474.67 T -(vice_info */) 455.73 474.67 T -2 12 Q -(If) 108 455 T -1 F -(free_all) 118.99 455 T -2 F -( is) 156.32 455 T -5 F --0.6 (True) 170.33 455 S -2 F -(, the) 196.73 455 T -1 F -(XkbF) 220.39 455 T -(r) 245.72 455 T -(eeDe) 249.95 455 T -(viceInfo) 274.42 455 T -2 F -( frees all components of) 313.07 455 T -1 F -(de) 431.38 455 T -(vice_info) 442.52 455 T -2 F -( and the) 486.52 455 T -5 F --0.6 (XkbDeviceInfoRec) 108 442 S -2 F -( structure pointed to by) 213.6 442 T -1 F -(de) 327.93 442 T -(vice_info) 339.07 442 T -2 F -( itself. If) 383.07 442 T -1 F -(free_all) 427.06 442 T -2 F -( is) 464.39 442 T -5 F --0.6 (False) 478.39 442 S -2 F -(, the) 511.39 442 T -(value of) 108 429 T -1 F -(which) 149.99 429 T -2 F -( determines which subcomponents are freed.) 178.66 429 T -1 F -(which) 395.6 429 T -2 F -(is an inclusive OR of) 427.27 429 T -(one or more of the values from Table 21.1. If) 108 416 T -1 F -(which) 327.95 416 T -2 F -( contains) 356.62 416 T -5 F -(XkbXI_ButtonActionsMask) 108 403 T -2 F -(, all button actions associated with) 273.6 403 T -1 F -(de) 441.92 403 T -(vice_info) 453.07 403 T -2 F -( are) 497.06 403 T -(freed,) 108 390 T -1 F -(de) 138.65 390 T -(vice_info) 149.8 390 T -2 F -(->) 193.79 390 T -1 F -(btn_acts) 204.55 390 T -2 F -( is set to) 245.22 390 T -5 F --0.6 (NULL) 287.89 390 S -2 F -(, and) 314.29 390 T -1 F -(de) 340.62 390 T -(vice_info) 351.77 390 T -2 F -(->) 395.76 390 T -1 F -(num_btns) 406.52 390 T -2 F -( is set to zero. If) 453.19 390 T -1 F -(which) 108 377 T -2 F -( contains all bits in) 136.67 377 T -5 F -(XkbXI_IndicatorsMask) 230.34 377 T -1 F -(,) 374.34 377 T -2 F -(all) 380.34 377 T -5 F --0.6 (XkbDeviceLedInfoRec) 395.34 377 S -2 F -(structures associated with) 108 364 T -1 F -(de) 234.31 364 T -(vice_info) 245.46 364 T -2 F -( are freed,) 289.45 364 T -1 F -(de) 340.75 364 T -(vice_info) 351.9 364 T -2 F -(->) 395.89 364 T -1 F -(leds) 406.66 364 T -2 F -( is set to) 425.99 364 T -5 F --0.6 (NULL) 468.66 364 S -2 F -(, and) 495.06 364 T -1 F -(de) 108 351 T -(vice_info) 119.15 351 T -2 F -(->) 163.14 351 T -1 F -(sz_leds) 173.9 351 T -2 F -( and) 208.57 351 T -1 F -(de) 231.9 351 T -(vice_info) 243.05 351 T -2 F -(->) 287.04 351 T -1 F -(num_leds) 297.8 351 T -2 F -( are set to zero. If) 343.8 351 T -1 F -(which) 430.76 351 T -2 F -( contains) 459.43 351 T -5 F -(XkbXI_IndicatorMapsMask) 108 338 T -1 F -(,) 273.6 338 T -2 F -(all indicator maps associated with) 279.6 338 T -1 F -(de) 445.25 338 T -(vice_info) 456.4 338 T -2 F -( are) 500.39 338 T -(cleared, but the number of LEDs and the leds structures themselves are preserved. If) 108 325 T -1 F -(which) 108 312 T -2 F -( contains) 136.67 312 T -5 F -(XkbXI_IndicatorNamesMask) 182.66 312 T -1 F -(,) 355.46 312 T -2 F -(all indicator names associated with) 361.46 312 T -(device_info are cleared, but the number of LEDs and the leds structures themselves are) 108 299 T -(preserved. If) 108 286 T -1 F -(which) 171.64 286 T -2 F -( contains) 200.3 286 T -5 F -(XkbXI_IndicatorStateMask) 246.3 286 T -1 F -(,) 419.1 286 T -2 F -(the indicator state asso-) 425.1 286 T --0.24 (ciated with the) 108 273 P -1 F --0.24 (de) 180.94 273 P --0.24 (vice_info) 192.09 273 P -2 F --0.24 ( leds are set to zeros but the number of LEDs and the leds struc-) 236.08 273 P -(tures themselves are preserved.) 108 260 T -0 F -(21.4) 72 235 T -(Setting Xkb Features f) 108 235 T -(or Non-K) 234.46 235 T -(e) 285.6 235 T -(yClass Input Extension De) 292.09 235 T -(vices) 442.62 235 T -2 F -(The Xkb extension allows clients to assign any key action to either core pointer or input) 108 215 T -(extension device buttons. This makes it possible to control the keyboard or generate key-) 108 202 T -(board key events from extension devices or from the core pointer.) 108 189 T -(Key actions assigned to core X pointer buttons or input extension device buttons cause) 108 168 T -(key events to be generated as if they had originated from the core X keyboard.) 108 155 T -(Xkb implementations are required to support key actions for the buttons of the core) 108 134 T -(pointer device, but support for actions on extension devices is optional. Implementations) 108 121 T -(that do not support button actions for extension devices must not set the) 108 108 T -5 F --0.6 (XkbXI_ButtonActionsMask) 108 95 S -2 F -( bit in the) 259.8 95 T -1 F -(supported) 308.48 95 T -2 F -( field of an) 356.48 95 T -5 F --0.6 (XkbDeviceInfoRec) 411.8 95 S -2 F -(structure.) 108 82 T -FMENDPAGE -%%EndPage: "204" 216 -%%Page: "205" 217 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(205) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T --0.28 (21 Attaching Xkb Actions to X Input Extension) 323.98 744.87 P -2 12 Q -(If a client attempts to modify valid characteristics of a device using an implementation) 108 712 T -(that does not support modification of those characteristics, no protocol error is generated.) 108 699 T --0.11 (Instead, the server reports a failure for the request; it also sends an) 108 686 P -5 F --0.25 -0.6 (XkbExtensionDevi-) 427.8 686 B --0.6 (ceNotify) 108 673 S -2 F -( event to the client that issued the request if the client has selected to receive) 160.8 673 T -(these events.) 108 660 T --0.35 (To change characteristics of an X Input Extension device in the server, first modify a local) 108 639 P -(copy of the device structure and then use either) 108 626 T -1 F -(XkbSetDe) 337.61 626 T -(viceInfo,) 384.74 626 T -2 F -( or, to save network) 426.4 626 T -(traffic, use an) 108 613 T -5 F --0.6 (XkbDeviceChangesRec) 176.64 613 S -2 F -( structure \050see section 21.6\051 and call) 302.04 613 T -1 F -(XkbChang) 108 600 T -(eDe) 158.54 600 T -(viceInfo) 177.68 600 T -2 F -( to download the changes to the server.) 216.34 600 T -(To modify some or all of the characteristics of an X Input Extension device, use) 108 579 T -1 F -(XkbSet-) 495.26 579 T -(DeviceInfo) 108 566 T -2 F -(.) 160.64 566 T -2 11 Q -(Bool) 108 545.67 T -3 F -(XkbSetDe) 132.15 545.67 T -(viceInf) 179.64 545.67 T -(o) 211.75 545.67 T -2 F -(\050) 217.25 545.67 T -1 F -(dpy) 220.91 545.67 T -2 F -(,) 236.08 545.67 T -1 F -(whic) 241.58 545.67 T -(h, de) 262.2 545.67 T -(vice_info) 283.42 545.67 T -2 F -(\051) 323.74 545.67 T -(Display *) 126 532.67 T -1 F -(dpy) 234 532.67 T -2 F -(;) 249.88 532.67 T -(/* connection to X serv) 306 532.67 T -(er */) 408.49 532.67 T -(unsigned int) 126 519.67 T -1 F -(whic) 234 519.67 T -(h) 254.61 519.67 T -2 F -(;) 260.11 519.67 T -(/* mask indicating characteristics to modify */) 306 519.67 T -(XkbDe) 126 506.67 T -(viceInfoPtr) 157.49 506.67 T -1 F -(de) 234 506.67 T -(vice_info) 244.22 506.67 T -2 F -(;) 284.55 506.67 T -(/* structure de\336ning the de) 306 506.67 T -(vice and modi\336cations */) 423.66 506.67 T -1 12 Q -(XkbSetDe) 108 487 T -(viceInfo) 155.14 487 T -2 F -( sends a request to the server to modify the characteristics of the device) 193.79 487 T --0.52 (specified in the) 108 474 P -1 F --0.52 (de) 182.76 474 P --0.52 (vice_info) 193.91 474 P -2 F --0.52 ( structure. The particular characteristics modified are identified) 237.9 474 P -(by the bits set in) 108 461 T -1 F -(whic) 189.67 461 T -(h) 212.16 461 T -2 F -( and take their values from the relevant fields in) 218.16 461 T -1 F -(de) 450.78 461 T -(vice_info) 461.93 461 T -2 F -( \050see) 505.92 461 T -(Table 21.1\051.) 108 448 T -1 F -(XkbSetDe) 169.32 448 T -(viceInfo) 216.46 448 T -2 F -( returns) 255.11 448 T -5 F --0.6 (True) 294.43 448 S -2 F -( if the request was successfully sent to the) 320.83 448 T -(server. If the X server implementation does not allow interaction between the X input) 108 435 T -(extension and the Xkb Extension, the function does nothing and returns) 108 422 T -5 F --0.6 (False) 454.63 422 S -2 F -(.) 487.63 422 T --0.06 (The) 108 401 P -1 F --0.06 (which) 129.6 401 P -2 F --0.06 ( parameter specifies which aspects of the device should be changed and is a bit-) 158.27 401 P -(mask composed of an inclusive OR or one or more of the following bits:) 108 388 T -5 F --0.6 (XkbXI_ButtonActionsMask) 108 375 S -2 F -(,) 259.8 375 T -5 F --0.6 (XkbXI_IndicatorNamesMask) 265.8 375 S -2 F -(,) 424.21 375 T -5 F --0.6 (XkbXI_IndicatorMapsMask) 108 362 S -2 F -(. If the features requested to be manipulated in) 259.8 362 T -1 F -(whic) 485.75 362 T -(h) 508.24 362 T -2 F -( are) 514.24 362 T -(valid for the device, but the server does not support assignment of one or more of them,) 108 349 T -(that particular portion of the request is ignored.) 108 336 T --0.22 (If the device specified in) 108 315 P -1 F --0.22 (de) 228.55 315 P --0.22 (vice_info) 239.7 315 P -2 F --0.22 (->) 283.69 315 P -1 F --0.22 (device_spec) 294.45 315 P -2 F --0.22 ( does not contain buttons and a request) 352.42 315 P --0.26 (affecting buttons is made, or the device does not contain indicators and a request affecting) 108 302 P -(indicators is made, a) 108 289 T -5 F --0.6 (BadMatch) 209.65 289 S -2 F -( protocol error results.) 262.45 289 T --0.15 (If the) 108 268 P -5 F --0.32 -0.6 (XkbXI_ButtonActionsMask) 136.36 268 B -2 F --0.15 ( bit is set in the) 288.17 268 P -1 F --0.15 (supported) 363.29 268 P -2 F --0.15 (mask returned by) 414.14 268 P -1 F --0.15 (XkbGet-) 500.02 268 P -(DeviceInfo) 108 255 T -2 F -(, the Xkb extension allows applications to assign key actions to buttons on) 160.64 255 T -(input extension devices other than the core keyboard device. If the) 108 242 T -5 F --0.6 (XkbXI_ButtonActionsMask) 108 229 S -2 F -( is set in) 259.8 229 T -1 F -(which) 302.48 229 T -2 F -(, the actions for all buttons specified in) 331.14 229 T -1 F -(device_info) 108 216 T -2 F -( are set to the) 163.32 216 T -5 F --0.6 (XkbAction) 230.3 216 S -2 F -(s specified in) 289.7 216 T -1 F -(de) 356.03 216 T -(vice_info) 367.18 216 T -2 F -(->) 411.17 216 T -1 F -(btn_acts) 421.93 216 T -2 F -(. If the number) 462.6 216 T -(of buttons requested to be updated is not valid for the device,) 108 203 T -1 F -(XkbSetDe) 404.29 203 T -(viceInfo) 451.43 203 T -2 F -( returns) 490.08 203 T -5 F --0.6 (False) 108 190 S -2 F -( and a) 141 190 T -5 F --0.6 (BadValue) 172.66 190 S -2 F -( protocol error results.) 225.46 190 T -(If the) 108 169 T -5 F --0.6 (XkbXI_IndicatorMaps) 136.66 169 S -2 F -( and / or) 262.06 169 T -5 F --0.6 (XkbXI_IndicatorNamesMask) 304.72 169 S -2 F -( bit is set in the) 463.12 169 T -1 F -(supported) 108 156 T -2 F -(mask returned by) 159 156 T -1 F -(XkbGetDeviceInfo) 245.32 156 T -2 F -(, the Xkb extension allows applications to) 333.95 156 T -(assign maps and / or names to the indicators of nonkeyboard extension devices. If sup-) 108 143 T -(ported, maps and / or names can be assigned to all extension device indicators, whether) 108 130 T -(they are part of a keyboard feedback or part of an indicator feedback.) 108 117 T --0.15 (If the) 108 96 P -5 F --0.33 -0.6 (XkbXI_IndicatorMapsMask) 136.35 96 B -2 F --0.15 ( and / or) 288.15 96 P -5 F --0.33 -0.6 (XkbXI_IndicatorNamesMask) 330.21 96 B -2 F --0.15 ( flag is set) 488.61 96 P -(in) 108 83 T -1 F -(which) 120.34 83 T -2 F -(, the indicator maps and / or names for all) 149 83 T -1 F -(de) 351.97 83 T -(vice_info) 363.12 83 T -2 F -(->) 407.11 83 T -1 F -(num_leds) 417.88 83 T -2 F -( indicator) 463.87 83 T -(devices specified in) 108 70 T -1 F -(de) 205.64 70 T -(vice_info) 216.79 70 T -2 F -(->) 260.78 70 T -1 F -(leds) 271.55 70 T -2 F -( are set to the maps and / or names specified in) 290.88 70 T -FMENDPAGE -%%EndPage: "205" 217 -%%Page: "206" 218 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(206) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T --0.28 (21 Attaching Xkb Actions to X Input Extension) 323.98 744.87 P -1 12 Q -(de) 108 712 T -(vice_info) 119.15 712 T -2 F -(->) 163.14 712 T -1 F -(leds) 173.9 712 T -2 F -(.) 193.24 712 T -1 F -(de) 199.24 712 T -(vice_info) 210.38 712 T -2 F -(->) 254.38 712 T -1 F -(leds) 265.14 712 T -2 F -(->) 284.47 712 T -1 F -(led_class) 295.24 712 T -2 F -( and) 339.9 712 T -1 F -(led_id) 363.23 712 T -2 F -( specify the input extension) 393.23 712 T -(class and device ID for each indicator device to modify; if they have invalid values, a) 108 699 T -5 F --0.6 (BadValue) 108 686 S -2 F -( protocol error results and) 160.8 686 T -1 F -(XkbSetDe) 287.77 686 T -(viceInfo) 334.91 686 T -2 F -( returns) 373.56 686 T -5 F --0.6 (False) 412.89 686 S -2 F -(. If they have legal) 445.89 686 T --0.39 (values but do not specify a keyboard or indicator class feedback for the device in question,) 108 673 P --0.42 (a) 108 660 P -5 F --0.92 -0.6 (BadMatch) 115.91 660 B -2 F --0.42 ( error results. If any of the values in) 168.71 660 P -1 F --0.42 (device_info) 339.59 660 P -2 F --0.42 (->) 394.91 660 P -1 F --0.42 (leds) 405.68 660 P --0.42 (->) 425.01 660 P --0.42 (names) 437.1 660 P -2 F --0.42 ( are not a valid) 467.76 660 P -(Atom or) 108 647 T -5 F --0.6 (None) 151.33 647 S -2 F -(, a) 177.73 647 T -5 F --0.6 (BadAtom) 192.06 647 S -2 F -( protocol error results.) 238.26 647 T -(Xkb provides convenience functions to modify subsets of the information accessible via) 108 626 T -1 F --0.03 (XkbSetDe) 108 613 P --0.03 (viceInfo) 155.14 613 P -2 F --0.03 (. Only the parts of the structure indicated in the function description are) 193.79 613 P -(modified. These convenience functions are described as follows.) 108 600 T -(To change only the button actions for an input extension device, use) 108 579 T -1 F -(XkbSetDeviceBut-) 438.29 579 T -(tonActions) 108 566 T -2 F -(.) 159.34 566 T -2 11 Q -(Bool) 108 545.67 T -3 F -(XkbSetDe) 132.15 545.67 T -(viceButtonActions) 179.64 545.67 T -2 F -(\050) 265.81 545.67 T -1 F -(dpy) 269.47 545.67 T -2 F -(,) 284.64 545.67 T -1 F -(de) 290.14 545.67 T -(vice) 300.36 545.67 T -(, \336r) 317.96 545.67 T -(st_b) 333.13 545.67 T -(utton, num_b) 351.24 545.67 T -(uttons, actions) 409.08 545.67 T -2 F -(\051) 473.26 545.67 T -(Display *) 126 532.67 T -1 F -(dpy) 234 532.67 T -2 F -(;) 249.88 532.67 T -(/* connection to X serv) 306 532.67 T -(er */) 408.49 532.67 T -(XkbDe) 126 519.67 T -(viceInfoPtr) 157.49 519.67 T -1 F -(de) 234 519.67 T -(vice_info) 244.22 519.67 T -2 F -(;) 284.55 519.67 T -(/* structure de\336ning the de) 306 519.67 T -(vice and modi\336cations */) 423.66 519.67 T -(unsigned int) 126 506.67 T -1 F -(\336r) 234 506.67 T -(st_b) 243.67 506.67 T -(utton) 261.79 506.67 T -2 F -(;) 284.4 506.67 T -(/* number of \336rst b) 306 506.67 T -(utton to update, 0 relati) 390.72 506.67 T -(v) 492.8 506.67 T -(e */) 498.14 506.67 T -(unsigned int) 126 493.67 T -1 F -(num_b) 234 493.67 T -(uttons) 263.72 493.67 T -2 F -(;) 290.62 493.67 T -(/* number of b) 306 493.67 T -(uttons to update */) 370.86 493.67 T -1 12 Q -(XkbSetDe) 108 474 T -(viceButtonActions) 155.14 474 T -2 F -( assigns actions to the buttons of the device specified in) 242.46 474 T -1 F -(device_info) 108 461 T -2 F -(->) 163.32 461 T -1 F -(device_spec.) 174.08 461 T -2 F -(Actions are assigned to) 238.06 461 T -1 F -(num_b) 352.7 461 T -(uttons) 385.13 461 T -2 F -( buttons beginning with) 414.47 461 T -1 F -(\336r) 108 448 T -(st_b) 118.55 448 T -(utton) 138.31 448 T -2 F -( and are taken from the actions specified in) 162.98 448 T -1 F -(de) 372.6 448 T -(vice_info) 383.75 448 T -2 F -(->) 427.74 448 T -1 F -(btn_acts) 438.5 448 T -2 F -(.) 479.17 448 T --0.12 (If the server does not support assignment of Xkb actions to extension device buttons,) 108 427 P -1 F --0.12 (Xkb-) 517.34 427 P --0.36 (SetDe) 108 414 P --0.36 (viceButtonActions) 136.48 414 P -2 F --0.36 ( has no effect and returns) 223.8 414 P -5 F --0.79 -0.6 (False) 345.6 414 B -2 F --0.36 (. If the device has no buttons or if) 378.6 414 P -1 F -(first_button) 108 401 T -2 F -( or) 164.02 401 T -1 F -(num_buttons) 180.01 401 T -2 F -( specify buttons outside of the valid range as determined by) 242.02 401 T -1 F -(de) 108 388 T -(vice_info) 119.15 388 T -2 F -(->) 163.14 388 T -1 F -(num_btns) 173.9 388 T -2 F -(, the function has no effect and returns) 220.57 388 T -5 F --0.6 (False) 408.19 388 S -2 F -(. Otherwise,) 441.19 388 T -1 F -(XkbSet-) 502.51 388 T -(De) 108 375 T -(viceButtonActions) 121.81 375 T -2 F -( sends a request to the server to change the actions for the specified) 209.14 375 T -(buttons and returns) 108 362 T -5 F --0.6 (True) 202.99 362 S -2 F -(.) 229.39 362 T --0.22 (If the actual request sent to the server involved illegal button numbers, a) 108 341 P -5 F --0.48 -0.6 (BadValue) 455.09 341 B -2 F --0.22 ( proto-) 507.89 341 P -(col error is generated. If an invalid device identifier is specified in) 108 328 T -1 F -(device_info) 108 315 T -2 F -(->) 163.32 315 T -1 F -(device_spec) 174.08 315 T -2 F -(, a) 232.06 315 T -5 F -(BadKeyboard) 246.38 315 T -2 F -( protocol error results. If the actual device) 325.58 315 T -(specified in) 108 302 T -1 F -(de) 166.66 302 T -(vice_info) 177.8 302 T -2 F -(->) 221.8 302 T -1 F -(device_spec) 232.56 302 T -2 F -( does not contain buttons and a request affecting) 290.53 302 T -(buttons is made, a) 108 289 T -5 F --0.6 (BadMatch) 197.66 289 S -2 F -( protocol error is generated.) 250.46 289 T -0 F -(21.5) 72 264 T -(XkbExtensionDe) 108 264 T -(viceNotify Event) 202.51 264 T -2 F -(The Xkb extension generates) 108 244 T -5 F --0.6 (XkbExtensionDeviceNotify) 250.63 244 S -2 F -( events when the status of) 409.04 244 T --0.44 (an input extension device changes or when an attempt is made to use an Xkb feature that is) 108 231 P -(not supported by a particular device.) 108 218 T -0 F -(Note) 126 197.67 T -2 11 Q -(Ev) 162 197.67 T -(ents indicating an attempt to use an unsupported feature are deli) 174.06 197.67 T -(v) 454.84 197.67 T -(ered only to the) 460.18 197.67 T -(client requesting the e) 162 185.67 T -(v) 258.57 185.67 T -(ent.) 263.9 185.67 T -2 12 Q -(To track changes to the status of input extension devices or attempts to use unsupported) 108 165 T -(features of a device, select to receive) 108 152 T -5 F --0.6 (XkbExtensionDeviceNotify) 287.93 152 S -2 F -( events by calling) 446.33 152 T -(either) 108 139 T -1 F -(XkbSelectEvents) 138.32 139 T -2 F -( or) 217.63 139 T -1 F -(XkbSelectEventDetails) 233.63 139 T -2 F -( \050see section 4.3\051.) 342.94 139 T -(To receive) 108 118 T -5 F --0.6 (XkbExtensionDeviceNotify) 161.98 118 S -2 F -( events under all possible conditions, call) 320.38 118 T -1 F -(XkbSelectEvents) 108 105 T -2 F -( and pass) 187.31 105 T -5 F --0.6 (XkbExtensionDeviceNotifyMask) 234.3 105 S -2 F -( in both) 419.1 105 T -1 F -(bits_to_c) 458.78 105 T -(hang) 502.6 105 T -(e) 526.48 105 T -2 F -(and) 108 92 T -1 F -(values_for_bits) 128.33 92 T -2 F -(.) 202.33 92 T -FMENDPAGE -%%EndPage: "206" 218 -%%Page: "207" 219 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(207) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T --0.28 (21 Attaching Xkb Actions to X Input Extension) 323.98 744.87 P -2 12 Q -(The) 108 712 T -5 F --0.6 (XkbExtensionDeviceNotify) 129.66 712 S -2 F -( event has no event details. However, you can call) 288.06 712 T -1 F --0.17 (XkbSelectEventDetails) 108 699 P -2 F --0.17 ( using) 217.31 699 P -5 F --0.36 -0.6 (XkbExtensionDeviceNotify) 248.98 699 B -2 F --0.17 ( as the) 407.39 699 P -1 F --0.17 (e) 440.55 699 P --0.17 (vent_type) 445.7 699 P -2 F --0.17 ( and spec-) 491.68 699 P -(ifying) 108 686 T -5 F --0.6 (XkbAllExtensionDeviceMask) 139.67 686 S -2 F -( in) 304.67 686 T -1 F -(bits_to_c) 320.01 686 T -(hang) 363.83 686 T -(e) 387.71 686 T -2 F -( and) 393.04 686 T -1 F -(values_for_bits.) 416.37 686 T -2 F -( This has) 493.37 686 T -(the same effect as a call to) 108 673 T -1 F -(XkbSelectEvents) 237.62 673 T -2 F -(.) 316.93 673 T -(The structure for) 108 652 T -5 F --0.6 (XkbExtensionDeviceNotify) 191.64 652 S -2 F -( e) 350.04 652 T -(v) 358.07 652 T -(ents is:) 363.89 652 T -2 11 Q -(typedef struct {) 108 631.67 T -(int) 126 618.67 T -(type;) 225 618.67 T -(/* Xkb e) 306 618.67 T -(xtension base e) 343.72 618.67 T -(v) 410.65 618.67 T -(ent code */) 415.99 618.67 T -(unsigned long) 126 605.67 T -(serial;) 225 605.67 T -(/* X serv) 306 605.67 T -(er serial number for e) 346.16 605.67 T -(v) 440.57 605.67 T -(ent */) 445.91 605.67 T -(Bool) 126 592.67 T -(send_e) 225 592.67 T -(v) 255.27 592.67 T -(ent;) 260.61 592.67 T -(/*) 306 592.67 T -5 12 Q --0.6 (True) 317.31 592.67 S -2 11 Q -( => synthetically generated*/) 343.71 592.67 T -(Display *) 126 579.67 T -(display;) 225 579.67 T -(/* serv) 306 579.67 T -(er connection where e) 335.47 579.67 T -(v) 432.02 579.67 T -(ent generated */) 437.35 579.67 T -(T) 126 566.67 T -(ime) 132.34 566.67 T -(time;) 225 566.67 T -(/* serv) 306 566.67 T -(er time when e) 335.47 566.67 T -(v) 400.26 566.67 T -(ent generated */) 405.59 566.67 T -(int) 126 553.67 T -(xkb_type;) 225 553.67 T -(/*) 306 553.67 T -5 F --0.33 (XkbExtensionDeviceNotifyEvent) 317.31 553.67 S -2 F -( */) 499.14 553.67 T -(int) 126 540.67 T -(de) 225 540.67 T -(vice;) 235.11 540.67 T -(/* Xkb de) 306 540.67 T -(vice ID, will not be) 349.11 540.67 T -5 F --0.33 (XkbUseCoreKbd) 437.1 540.67 S -2 F -( */) 518.61 540.67 T -(unsigned int) 126 527.67 T -(reason;) 225 527.67 T -(/* reason for the e) 306 527.67 T -(v) 385.14 527.67 T -(ent */) 390.48 527.67 T -(unsigned int) 126 514.67 T -(supported;) 225 514.67 T -(/* mask of supported features */) 306 514.67 T -(unsigned int) 126 501.67 T -(unsupported;) 225 501.67 T --0.16 (/* unsupported features this client attempted to use */) 306 501.67 P -(int) 126 488.67 T -(\336rst_btn;) 225 488.67 T -(/* \336rst b) 306 488.67 T -(utton that changed */) 342.45 488.67 T -(int) 126 475.67 T -(num_btns;) 225 475.67 T -(/* number of b) 306 475.67 T -(uttons that changed */) 370.86 475.67 T -(unsigned int) 126 462.67 T -(leds_de\336ned;) 225 462.67 T -(/* indicators with names or maps */) 306 462.67 T -(unsigned int) 126 449.67 T -(led_state;) 225 449.67 T -(/* current state of the indicators */) 306 449.67 T -(int) 126 436.67 T -(led_class;) 225 436.67 T -(/* feedback class for LED changes */) 306 436.67 T -(int) 126 423.67 T -(led_id;) 225 423.67 T -(/* feedback ID for LED changes */) 306 423.67 T -(}) 108 410.67 T -3 F -(XkbExtensionDe) 116.03 410.67 T -(viceNotifyEv) 195.32 410.67 T -(ent) 255.7 410.67 T -2 F -(;) 270.36 410.67 T -2 12 Q -(The) 108 391 T -5 F --0.6 (XkbExtensionDeviceNotify) 129.66 391 S -2 F -( event has fields enabling it to report changes in the) 288.06 391 T -(state \050on/off\051 of all of the buttons for a device, but only for one LED feedback associated) 108 378 T -(with a device. You will get multiple events when more than one LED feedback changes) 108 365 T -(state or configuration.) 108 352 T -0 F -(21.6) 72 327 T -(T) 108 327 T -(rac) 114.37 327 T -(king Chang) 132.14 327 T -(es to Extension De) 197.6 327 T -(vices) 304.79 327 T -2 F -(Changes to an Xkb extension device may be tracked by listening to) 108 307 T -5 F --0.6 (XkbDeviceExten-) 433.96 307 S --0.09 -0.6 (sionNotify) 108 294 B -2 F --0.04 ( events and accumulating the changes in an) 174 294 P -5 F --0.09 -0.6 (XkbDeviceChangesRec) 384.31 294 B -2 F --0.04 ( struc-) 509.71 294 P -(ture. The changes noted in the structure may then be used in subsequent operations to) 108 281 T -(update either a server configuration or a local copy of an Xkb extension device configura-) 108 268 T -(tion. The changes structure is defined as follows:) 108 255 T -2 11 Q -(typedef struct _XkbDe) 108 234.67 T -(viceChanges {) 207.92 234.67 T -(unsigned int) 126 221.67 T -(changed;) 225 221.67 T -(/* bits indicating what has changed */) 306 221.67 T -(unsigned short) 126 208.67 T -(\336rst_btn;) 225 208.67 T -(/* number of \336rst b) 306 208.67 T -(utton which changed, if an) 390.72 208.67 T -(y */) 507.56 208.67 T -(unsigned short) 126 195.67 T -(num_btns;) 225 195.67 T -(/* number of b) 306 195.67 T -(uttons that ha) 370.86 195.67 T -(v) 429.92 195.67 T -(e changed */) 435.25 195.67 T -(XkbDe) 126 182.67 T -(viceLedChangesRec leds;) 157.49 182.67 T -(}) 108 169.67 T -3 F -(XkbDe) 116.03 169.67 T -(viceChangesRec) 148.87 169.67 T -2 F -(,*XkbDe) 225.24 169.67 T -(viceChangesPtr;) 264.98 169.67 T -(typedef struct _XkbDe) 108 149.67 T -(viceLedChanges {) 207.92 149.67 T -(unsigned short) 126 136.67 T -(led_class;) 225 136.67 T -(/* class of this indicator feedback b) 306 136.67 T -(undle */) 461.58 136.67 T -(unsigned short) 126 123.67 T -(led_id;) 225 123.67 T -(/* ID of this indicator feedback b) 306 123.67 T -(undle */) 451.8 123.67 T -(unsigned int) 126 110.67 T -(names;) 225 110.67 T -(/* bits indicating which names ha) 306 110.67 T -(v) 453.36 110.67 T -(e changed */) 458.69 110.67 T -(unsigned int) 126 97.67 T -(maps;) 225 97.67 T -(/* bits indicating which maps ha) 306 97.67 T -(v) 448.47 97.67 T -(e changed */) 453.81 97.67 T -(struct _XkbDe) 126 84.67 T -(viceLedChanges *ne) 190.18 84.67 T -(xt;) 281.97 84.67 T -(/* link to indicator change record for ne) 306 84.67 T -(xt set */) 480.88 84.67 T -(}) 108 71.67 T -3 F -(XkbDe) 116.03 71.67 T -(viceLedChangesRec) 148.87 71.67 T -2 F -(,*XkbDe) 243.57 71.67 T -(viceLedChangesPtr;) 283.32 71.67 T -FMENDPAGE -%%EndPage: "207" 219 -%%Page: "208" 220 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(208) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T --0.28 (21 Attaching Xkb Actions to X Input Extension) 323.98 744.87 P -2 12 Q --0.17 (A local description of the configuration and state of a device may be kept in an) 108 712 P -5 F --0.38 -0.6 (XkbDevi-) 487.2 712 B --0.67 -0.6 (ceInfoRec) 108 699 B -2 F --0.31 ( structure. The actual state or configuration of the device may change because) 167.4 699 P --0.26 (of) 108 686 P -1 F --0.26 (XkbSetDeviceInfo) 120.73 686 P -2 F --0.26 ( and) 206.7 686 P -1 F --0.26 (XkbSetButtonActions) 229.5 686 P -2 F --0.26 ( requests made by clients or by user interac-) 330.83 686 P -(tion with the device. The X server sends an) 108 673 T -5 F -(XkbExtensionDeviceNotify) 318.62 673 T -2 F -( event to) 491.42 673 T --0.16 (all interested clients when the state of any buttons or indicators or the configuration of the) 108 660 P -(buttons or indicators on the core keyboard or any input extension device changes. The) 108 647 T -(event reports the state of indicators for a single indicator feedback, and the state of up to) 108 634 T -(128 buttons. If more than 128 buttons or more than one indicator feedback are changed,) 108 621 T --0.13 (the additional buttons and indicator feedbacks are reported in subsequent events. Xkb pro-) 108 608 P --0.29 (vides functions with which you can track changes to input extension devices by noting the) 108 595 P -(changes that were made and then requesting the changed information from the server.) 108 582 T -(To note device changes reported in an) 108 561 T -5 F --0.6 (XkbExtensionDeviceNotify) 293.62 561 S -2 F -( event, use) 452.02 561 T -1 F -(XkbNoteDeviceChanges) 108 548 T -2 F -(.) 224.64 548 T -2 11 Q -(v) 108 527.67 T -(oid) 113.28 527.67 T -3 F -(XkbNoteDe) 130.09 527.67 T -(viceChanges) 184.91 527.67 T -2 F -( \050) 243.57 527.67 T -1 F -(old, ne) 249.99 527.67 T -(w) 279.77 527.67 T -(, wanted) 286.29 527.67 T -2 F -(\051) 323.57 527.67 T -(XkbDe) 126 514.67 T -(viceChangesPtr) 157.49 514.67 T -1 F -(old) 306 514.67 T -2 F -(;) 320.06 514.67 T -(/* structure tracking state changes */) 378 514.67 T -(XkbExtensionDe) 126 501.67 T -(viceNotifyEv) 201.49 501.67 T -(ent) 260.6 501.67 T -( *) 274.04 501.67 T -1 F -(ne) 306 501.67 T -(w) 316.22 501.67 T -2 F -(;) 323.56 501.67 T -(/* e) 378 501.67 T -(v) 393.92 501.67 T -(ent indicating state changes */) 399.25 501.67 T -(unsigned int) 126 488.67 T -1 F -(wanted) 306 488.67 T -2 F -(;) 337.78 488.67 T -(/* mask indicating changes to note) 378 488.67 T -(*/) 234 475.67 T -2 12 Q --0.23 (The) 108 456 P -1 F --0.23 (wanted) 129.43 456 P -2 F --0.23 ( field specifies the changes that should be noted in) 164.1 456 P -1 F --0.23 (old) 406.4 456 P -2 F --0.23 (, and is composed of the) 421.74 456 P --0.33 (bitwise inclusive OR of one or more of the masks from Table 21.1) 108 443 P -1 F --0.33 (.) 423 443 P -2 F --0.33 ( The) 426 443 P -1 F --0.33 (reason) 450 443 P -2 F --0.33 ( field of the) 482.66 443 P --0.37 (event in) 108 430 P -1 F --0.37 (ne) 148.59 430 P --0.37 (w) 159.74 430 P -2 F --0.37 ( indicates the types of changes the event is reporting.) 167.74 430 P -1 F --0.37 (XkbNoteDe) 421.03 430 P --0.37 (viceChang) 476.17 430 P --0.37 (es) 527.37 430 P -2 F -(updates the) 108 417 T -5 F --0.6 (XkbDeviceChangesRec) 165.32 417 S -2 F -( specified by) 290.73 417 T -1 F -(old) 355.05 417 T -2 F -( with the changes that are both) 370.38 417 T -(specified in) 108 404 T -1 F -(wanted) 166.66 404 T -2 F -( and contained in) 201.32 404 T -1 F -(ne) 286.64 404 T -(w) 297.79 404 T -2 F -(->) 305.8 404 T -1 F -(reason) 316.56 404 T -2 F -(.) 349.22 404 T -(To update a local copy of the state and configuration of an X input extension device with) 108 383 T -(the changes previously noted in an) 108 370 T -5 F --0.6 (XkbDeviceChangesRec) 277.31 370 S -2 F -( structure, use) 402.71 370 T -1 F -(XkbGetDevi-) 472.7 370 T -(ceInfoChanges) 108 357 T -2 F -(.) 179.99 357 T --0.11 (To query the changes that have occurred in the button actions or indicator names and indi-) 108 336 P -(cator maps associated with an input extension device, use) 108 323 T -1 F -(XkbGetDeviceInfoChanges.) 387.29 323 T -2 11 Q -(Status) 108 302.67 T -3 F -(XkbGetDe) 137.65 302.67 T -(viceInf) 187.59 302.67 T -(oChanges) 219.69 302.67 T -2 F -(\050) 265.53 302.67 T -1 F -(dpy) 269.19 302.67 T -2 F -(,) 284.36 302.67 T -1 F -(de) 289.86 302.67 T -(vice_info, c) 300.08 302.67 T -(hang) 350.63 302.67 T -(es) 372.52 302.67 T -2 F -(\051) 381.68 302.67 T -(Display *) 126 289.67 T -1 F -(dpy) 234 289.67 T -2 F -(;) 249.88 289.67 T -(/* connection to X serv) 306 289.67 T -(er */) 408.49 289.67 T -(XkbDe) 126 276.67 T -(viceInfoPtr) 157.49 276.67 T -1 F -(de) 234 276.67 T -(vice_info) 244.22 276.67 T -2 F -(;) 284.55 276.67 T -(/* structure to update with results */) 306 276.67 T -(XkbDe) 126 263.67 T -(viceChangesPtr) 157.49 263.67 T -1 F -(c) 234 263.67 T -(hang) 238.72 263.67 T -(es) 260.61 263.67 T -2 F -(;) 269.77 263.67 T -(/* contains notes of changes that ha) 306 263.67 T -(v) 462.2 263.67 T -(e occurred */) 467.54 263.67 T -2 12 Q -(The) 108 244 T -1 F -(changes->changed) 129.66 244 T -2 F -(field indicates which attributes of the device specified in) 224.74 244 T -1 F -(c) 108 231 T -(hang) 113.15 231 T -(es) 137.03 231 T -2 F -(->) 147.02 231 T -1 F -(device) 157.79 231 T -2 F -( have changed. The parameters describing the changes are contained in) 188.44 231 T -(the other fields of) 108 218 T -1 F -(c) 195.98 218 T -(hang) 201.13 218 T -(es) 225.01 218 T -2 F -(.) 235.01 218 T -1 F -(XkbGetDe) 241.01 218 T -(viceInfoChang) 290.81 218 T -(es) 361.34 218 T -2 F -( uses that information to call) 371.34 218 T -1 F -(Xkb-) 511.33 218 T -(GetDeviceInfo) 108 205 T -2 F -( to obtain the current status of those attributes that have changed. It then) 177.97 205 T -(updates the local description of the device in) 108 192 T -1 F -(de) 325.3 192 T -(vice_info) 336.44 192 T -2 F -( with the new information.) 380.44 192 T --0.14 (To update the server\325s description of a device with the changes noted in an) 108 171 P -5 F --0.33 (XkbDevice-) 468 171 P -(ChangesRec) 108 158 T -2 F -(, use) 180 158 T -1 F -(XkbChangeDeviceInfo) 205 158 T -2 F -(.) 313.63 158 T -2 11 Q -(Bool) 108 137.67 T -3 F -(XkbChangeDe) 132.15 137.67 T -(viceInf) 201.04 137.67 T -(o) 233.15 137.67 T -2 F -( \050) 238.65 137.67 T -1 F -(dpy) 245.06 137.67 T -(, de) 260.34 137.67 T -(vice_info, c) 276.06 137.67 T -(hang) 326.6 137.67 T -(es) 348.49 137.67 T -2 F -(\051) 357.66 137.67 T -(Display *) 126 124.67 T -1 F -(dpy) 234 124.67 T -2 F -(;) 249.88 124.67 T -(/* connection to X serv) 306 124.67 T -(er */) 408.49 124.67 T -(XkbDe) 126 111.67 T -(viceInfoPtr) 157.49 111.67 T -1 F -(de) 234 111.67 T -(vice_info) 244.22 111.67 T -2 F -(;) 284.55 111.67 T -(/* local cop) 306 111.67 T -(y of de) 357.22 111.67 T -(vice state and con\336guration */) 387.49 111.67 T -(XkbDe) 126 98.67 T -(viceChangesPtr) 157.49 98.67 T -1 F -(c) 234 98.67 T -(hang) 238.72 98.67 T -(es) 260.61 98.67 T -2 F -(;) 269.77 98.67 T -(/* note specifying changes in) 306 98.67 T -1 F -(de) 437.07 98.67 T -(vice_info) 447.28 98.67 T -2 F -( */) 487.61 98.67 T -FMENDPAGE -%%EndPage: "208" 220 -%%Page: "209" 221 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(209) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T --0.28 (21 Attaching Xkb Actions to X Input Extension) 323.98 744.87 P -1 12 Q -(XkbChang) 108 712 T -(eDe) 158.54 712 T -(viceInfo) 177.68 712 T -2 F -( updates the server\325s description of the device specified in) 216.34 712 T -1 F -(de) 108 699 T -(vice_info) 119.15 699 T -2 F -(->) 163.14 699 T -1 F -(device_spec) 173.9 699 T -2 F -( with the changes specified in) 231.88 699 T -1 F -(c) 377.18 699 T -(hang) 382.33 699 T -(es) 406.21 699 T -2 F -( and contained in) 416.21 699 T -1 F -(de) 108 686 T -(vice_info) 119.15 686 T -2 F -(. The update is made by an) 163.14 686 T -1 F -(XkbSetDeviceInfo) 295.12 686 T -2 F -( request.) 381.08 686 T -FMENDPAGE -%%EndPage: "209" 221 -%%Page: "210" 222 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(210) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(22 Deb) 448.56 744.87 T -(ugging Aids) 485.91 744.87 T -0 14 Q -(22) 72 710.67 T -(Deb) 108 710.67 T -(ug) 134.17 710.67 T -(ging Aids) 151.13 710.67 T -2 12 Q -(The debugging aids are intended for use primarily by Xkb implementors and are optional) 108 688 T -(in any implementation.) 108 675 T -(There are two bitmasks that may be used to control debugging. One bitmask controls the) 108 654 T -(output of debugging information, and the other controls behavior. Both bitmasks are ini-) 108 641 T -(tially all zeros.) 108 628 T -(To change the values of any of the debug controls, use) 108 607 T -1 F -(XkbSetDebuggingFlags) 372.61 607 T -2 F -(.) 486.6 607 T -2 11 Q -(Bool) 108 586.67 T -3 F -(XkbSetDeb) 132.15 586.67 T -(uggingFlags) 185.7 586.67 T -2 F -(\050) 242.55 586.67 T -1 F -(display) 246.21 586.67 T -(, mask, \337a) 277.39 586.67 T -(gs, msg) 321.88 586.67 T -(, ctrls_mask, ctrls, r) 354.77 586.67 T -(et_\337a) 442.37 586.67 T -(gs, r) 466.7 586.67 T -(et_ctrls) 485.85 586.67 T -2 F -(\051) 518.85 586.67 T -(Display *) 126 573.67 T -1 F -(display) 234 573.67 T -2 F -(;) 265.78 573.67 T -(/* connection to X serv) 306 573.67 T -(er */) 408.49 573.67 T -(unsigned int) 126 560.67 T -1 F -(mask) 234 560.67 T -2 F -(;) 256.61 560.67 T -(/* mask selecting deb) 306 560.67 T -(ug output \337ags to change */) 400.8 560.67 T -(unsigned int) 126 547.67 T -1 F -(\337a) 234 547.67 T -(gs) 244.89 547.67 T -2 F -(;) 254.67 547.67 T -(/* v) 306 547.67 T -(alues for deb) 322.53 547.67 T -(ug output \337ags selected by) 379.13 547.67 T -1 F -(mask) 499.2 547.67 T -2 F -( */) 521.81 547.67 T -(char *) 126 534.67 T -1 F -(msg) 234 534.67 T -2 F -(;) 251.72 534.67 T -(/* message to print right no) 306 534.67 T -(w */) 426.42 534.67 T -(unsigned int) 126 521.67 T -1 F -(ctrls_mask) 234 521.67 T -2 F -(;) 281.66 521.67 T -(/* mask selecting deb) 306 521.67 T -(ug controls to change */) 400.8 521.67 T -(unsigned int) 126 508.67 T -1 F -(ctrls) 234 508.67 T -2 F -(;) 253.56 508.67 T --0.25 (/* v) 306 508.67 P --0.25 (alues for deb) 322.29 508.67 P --0.25 (ug controls selected by) 378.39 508.67 P -1 F --0.25 (ctrls_mask) 481.27 508.67 P -2 F --0.25 ( */) 528.94 508.67 P -(unsigned int *) 126 495.67 T -1 F -(r) 234 495.67 T -(et_\337a) 237.87 495.67 T -(gs) 262.2 495.67 T -2 F -(;) 271.98 495.67 T -(/* resulting state of all deb) 306 495.67 T -(ug output \337ags */) 422.8 495.67 T -(unsigned int *) 126 482.67 T -1 F -(r) 234 482.67 T -(et_ctrls) 237.87 482.67 T -2 F -(;) 270.87 482.67 T -(/* resulting state of all deb) 306 482.67 T -(ug controls */) 422.8 482.67 T -1 12 Q -(XkbSetDeb) 108 463 T -(ug) 161.08 463 T -(gingFla) 172.96 463 T -(gs) 210.84 463 T -2 F -( modifies the debug output flags as specified by) 221.51 463 T -1 F -(mask) 453.82 463 T -2 F -( and) 478.48 463 T -1 F -(\337a) 501.8 463 T -(gs) 513.68 463 T -2 F -(,) 524.35 463 T -(modifies the debug controls flags as specified by) 108 450 T -1 F -(ctrls_mask) 345.3 450 T -2 F -( and) 397.3 450 T -1 F -(ctrls) 420.62 450 T -2 F -(, prints the message) 441.96 450 T -1 F -(msg) 108 437 T -2 F -(, and backfills) 127.33 437 T -1 F -(r) 197.99 437 T -(et_\337a) 202.21 437 T -(gs) 228.76 437 T -2 F -( and) 239.42 437 T -1 F -(r) 262.75 437 T -(et_ctrls) 266.98 437 T -2 F -( with the resulting debug output and debug con-) 302.98 437 T -(trols flags.) 108 424 T -(When bits are set in the debug output masks,) 108 403 T -1 F -(mask) 325.98 403 T -2 F -( and) 350.64 403 T -1 F -(\337a) 373.97 403 T -(gs) 385.85 403 T -2 F -(, Xkb prints debug informa-) 396.52 403 T -(tion corresponding to each bit at appropriate points during its processing. The device to) 108 390 T --0.05 (which the output is written is implementation-dependent, but is normally the same device) 108 377 P -(to which X server error messages are directed; thus the bits that can be set in) 108 364 T -1 F -(mask) 478.58 364 T -2 F -( and) 503.24 364 T -1 F -(\337a) 108 351 T -(gs) 119.88 351 T -2 F -( is implementation-specific. To turn on a debug output selection, set the bit for the) 130.55 351 T --0.01 (output in the) 108 338 P -1 F --0.01 (mask) 171.65 338 P -2 F --0.01 ( parameter and set the corresponding bit in the) 196.3 338 P -1 F --0.01 (\337a) 421.85 338 P --0.01 (gs) 433.73 338 P -2 F --0.01 ( parameter. To turn) 444.4 338 P --0.17 (off event selection for an event, set the bit for the output in the) 108 325 P -1 F --0.17 (mask) 408.56 325 P -2 F --0.17 ( parameter and do not) 433.22 325 P -(set the corresponding bit in the) 108 312 T -1 F -(\337a) 259.32 312 T -(gs) 271.2 312 T -2 F -( parameter.) 281.87 312 T -(When bits are set in the debug controls masks,) 108 291 T -1 F -(ctrls_mask) 333.97 291 T -2 F -( and) 385.97 291 T -1 F -(ctrls) 409.3 291 T -2 F -(, Xkb modifies its) 430.63 291 T -(behavior according to each controls bit.) 108 278 T -1 F -(ctrls_mask) 300.96 278 T -2 F -( and) 352.96 278 T -1 F -(ctrls) 376.28 278 T -2 F -( are related in the same way) 397.62 278 T -(that) 108 265 T -1 F -(mask) 129 265 T -2 F -( and) 153.66 265 T -1 F -(\337a) 176.99 265 T -(gs) 188.87 265 T -2 F -( are. The valid controls bits are defined in Table 22.1.) 199.54 265 T -1 F -(XkbSetDeb) 108 185 T -(ug) 161.08 185 T -(gingFla) 172.96 185 T -(gs) 210.84 185 T -2 F -( returns) 221.51 185 T -5 F --0.6 (True) 260.83 185 S -2 F -( if successful and) 287.23 185 T -5 F --0.6 (False) 373.21 185 S -2 F -( otherwise. The only proto-) 406.21 185 T -(col error it may generate is) 108 172 T -5 F --0.6 (BadAlloc) 239.96 172 S -2 F -(, if for some reason it is unable to allocate storage.) 292.77 172 T -1 F --0.5 (XkbSetDeb) 108 151 P --0.5 (ug) 161.08 151 P --0.5 (gingFla) 172.96 151 P --0.5 (gs) 210.84 151 P -2 F --0.5 ( is intended for developer use and may be disabled in production X) 221.51 151 P -(servers. If it is disabled,) 108 138 T -1 F -(XkbSetDeb) 225.65 138 T -(ug) 278.72 138 T -(gingFla) 290.6 138 T -(gs) 328.49 138 T -2 F -( has no effect and does not generate any) 339.16 138 T -(protocol errors.) 108 125 T --0.22 (The message in) 108 104 P -1 F --0.22 (msg) 184.99 104 P -2 F --0.22 ( is written immediately. The device to which it is written is implemen-) 204.32 104 P -(tation dependent but is normally the same device where X server error messages are) 108 91 T -(directed.) 108 78 T -3 F -(T) 245.65 245 T -(able 22.1 Deb) 252.55 245 T -(ug Contr) 324.31 245 T -(ol Masks) 370.43 245 T -1 F -(Deb) 138.81 225 T -(ug Contr) 158.56 225 T -(ol Mask) 201.03 225 T -(V) 278.31 225 T -(alue) 284.31 225 T -(Meaning) 341.31 225 T -2 11 Q -(Xkb) 138.81 210.67 T -2 12 Q -(DF_DisableLocks) 157.75 210.67 T -2 11 Q -(\0501 << 0\051) 278.31 210.67 T -(Disable actions that lock modi\336ers) 341.31 210.67 T -137.81 237 510.19 237 2 L -V -0.5 H -0 Z -N -137.81 220 510.19 220 2 L -V -N -FMENDPAGE -%%EndPage: "210" 222 -%%Page: "211" 223 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(211) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -( Glossary) 492.64 744.87 T -0 14 Q -(Glossar) 72 710.67 T -(y) 124.28 710.67 T -3 12 Q -(Allocator) 72 688 T -2 F -(Xkb provides functions, known as allocators, to create and initialize Xkb data structures.) 108 673 T -3 F -(Audible Bell) 72 652 T -2 F --0.25 (An audible bell is the sound generated by whatever bell is associated with the keyboard or) 108 637 P -(input extension device, as opposed to any other audible sound generated elsewhere in the) 108 624 T -(system.) 108 611 T -3 F -(Autoreset Controls) 72 590 T -2 F -(The autoreset controls configure the boolean controls to automatically be enabled or) 108 575 T -(disabled at the time a program exits.) 108 562 T -3 F -(Base Group) 72 541 T -2 F --0.26 (The group in effect as a result of all actions other than a previous lock or latch request; the) 108 526 P -(base group is transient. For example, the user pressing and holding a group shift key that) 108 513 T -(shifts to Group2 would result in the base group being group 2 at that point in time.) 108 500 T -(Initially, base group is always Group1.) 108 487 T -3 F -(Base Modifiers) 72 466 T -2 F -(Modifiers that are turned on as a result of some actions other than previous lock or latch) 108 451 T -(requests; base modifiers are transient. For example, the user pressing and holding a key) 108 438 T -(bound to the Shift modifier would result in Shift being a base modifier at that point in) 108 425 T -(time.) 108 412 T -3 F -(Base Event Code) 72 391 T -2 F --0.18 (A number assigned by the X server at run time that is assigned to the extension to identify) 108 376 P -(events from that extension.) 108 363 T -3 F -(Base State) 72 342 T -2 F -(The base group and base modifiers represent keys that are physically or logically down;) 108 327 T -(these constitute the base state.) 108 314 T -3 F -(Boolean Controls) 72 293 T -2 F -(Global keyboard controls that may be selectively enabled and disabled under program) 108 278 T -(control and that may be automatically set to an on or off condition upon client program) 108 265 T -(exit.) 108 252 T -3 F -(Canonical Key Types) 72 231 T -2 F --0.15 (The canonical key types are predefined key types that describe the types of keys available) 108 212 P -(on most keyboards. The definitions for the canonical key types are held in the first) 108 199 T -5 F --1.05 -0.6 (XkbNumRequiredTypes) 108 186 B -2 F --0.48 ( entries of the) 233.4 186 P -1 F --0.48 (types) 300.15 186 P -2 F --0.48 ( field of the client map and are indexed using) 324.81 186 P -(the following constants:) 108 173 T -5 F --0.6 (XkbOneLevelIndex) 139.68 152 S --0.6 (XkbTwoLevelIndex) 139.68 138 S --0.6 (XkbAlphabeticIndex) 139.68 124 S --0.6 (XkbKeypadIndex) 139.68 110 S -3 F -(Client Map) 72 88 T -2 F -(The key mapping information needed to convert arbitrary keycodes to symbols.) 108 73 T -FMENDPAGE -%%EndPage: "211" 223 -%%Page: "212" 224 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(212) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -( Glossary) 492.64 744.87 T -3 12 Q -(Compat Name) 72 712 T -2 F -(The) 108 697 T -1 F -(compat) 129.66 697 T -2 F -( name is a string that provides some information about the rules used to bind) 164.99 697 T -(actions to keys that are changed using core protocol requests.) 108 684 T -3 F -(Compatibility State) 72 663 T -2 F -(When an Xkb-extended X server connects to an Xkb-unaware client, the compatibility) 108 648 T -(state remaps the keyboard group into a core modifier whenever possible.) 108 635 T -3 F -(Compatibility Grab State) 72 614 T -2 F -(The grab state that results from applying the compatibility map to the Xkb grab state.) 108 599 T -3 F -(Compatibility Map) 72 578 T -2 F -(The definition of how to map core protocol keyboard state to Xkb keyboard state.) 108 563 T -3 F -(Component Expression) 72 542 T -2 F -(An expression used to describe server keyboard database components to be loaded. It) 108 527 T -(describes the order in which the components should be loaded and the rules by which) 108 514 T -(duplicate attributes should be resolved.) 108 501 T -3 F -(Compose Processing) 72 480 T -2 F -(The process of mapping a series of keysyms to a string is known as compose processing.) 108 465 T -3 F -(Consumed Modifier) 72 444 T -2 F -(Xkb normally consumes modifiers in determining the appropriate symbol for an event,) 108 429 T --0.12 (that is, the modifiers are not considered during any of the later stages of event processing.) 108 416 P -(For those rare occasions when a modifier) 108 403 T -340.96 401.8 308.95 401.8 2 L -V -0.6 H -0 Z -N -(should) 308.95 403 T -( be considered despite having been used) 340.96 403 T -(to look up a symbol, key types include an optional) 108 390 T -1 F -(pr) 352.99 390 T -(eserve) 363.22 390 T -2 F -( field.) 393.86 390 T -3 F -(Core Event) 72 369 T -2 F -(An event created from the core X server.) 108 354 T -3 F -(Detectable Auto-Repeat) 72 333 T -2 F -(Detectable auto-repeat allows a client to detect an auto-repeating key. If a client requests) 108 318 T -(and the server supports detectable auto-repeat, Xkb generates) 108 305 T -5 F --0.6 (KeyRelease) 405.58 305 S -2 F -( events only) 471.58 305 T -(when the key is physically released. Thus the client receives a number of) 108 292 T -5 F --0.6 (KeyPress) 461.26 292 S -2 F -(events for that key without intervening) 108 279 T -5 F --0.6 (KeyRelease) 297.31 279 S -2 F -( events until the key is finally) 363.31 279 T -(released, when a) 108 266 T -5 F --0.6 (KeyRelease) 190.63 266 S -2 F -( event is received.) 256.63 266 T -3 F -(Effective Group) 72 245 T -2 F -(The effective group is the arithmetic sum of the locked, latched, and base groups. The) 108 230 T --0.1 (effective keyboard group is always brought back into range depending on the value of the) 108 217 P -5 F --0.6 (GroupsWrap) 108 204 S -2 F -( control for the keyboard. If an event occurs with an effective group that is) 174 204 T -(legal for the keyboard as a whole, but not for the key in question, the group) 108 191 T -539.59 189.8 472.61 189.8 2 L -V -N -(for that event) 472.61 191 T -129.34 176.8 108 176.8 2 L -V -N -(only) 108 178 T -( is normalized using the algorithm specified by the) 129.34 178 T -1 F -(gr) 375.65 178 T -(oup_info) 385.78 178 T -2 F -( member of the key) 428.45 178 T -(symbol map \050) 108 165 T -5 F --0.6 (XkbSymMapRec) 174 165 S -2 F -(\051.) 253.2 165 T -3 F -(Effective Mask) 72 144 T -2 F -(An Xkb modifier definition consists of a set of bit masks corresponding to the eight real) 108 129 T -(modifiers; a similar set of bitmasks corresponding to the 16 named virtual modifiers; and) 108 116 T -(an effective mask. The effective mask represents the set of all real modifiers that can) 108 103 T -(logically be set either by setting any of the real modifiers or by setting any of the virtual) 108 90 T -(modifiers in the definition.) 108 77 T -FMENDPAGE -%%EndPage: "212" 224 -%%Page: "213" 225 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(213) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -( Glossary) 492.64 744.87 T -3 12 Q -(Effective Modifier) 72 712 T -2 F -(The effective modifiers are the bitwise union of the base, latched and locked modifiers.) 108 697 T -3 F -(Extension Device) 72 676 T -2 F -(Any keyboard or other input device recognized by the X input extension.) 108 661 T -3 F -(Global Keyboard Controls) 72 640 T -2 F -(Controls that affect the way Xkb generates key events. The controls affect all keys, as) 108 625 T -(opposed to per-key controls that are for a single key. Global controls include) 108 612 T -2 11 Q -(\245) 126 597.67 T -(RepeatK) 139.68 597.67 T -(e) 177.89 597.67 T -(ys Control) 182.61 597.67 T -(\245) 126 585.67 T -(DetectableAuto-repeat) 139.68 585.67 T -(\245) 126 573.67 T -(Slo) 139.68 573.67 T -(wK) 154.08 573.67 T -(e) 169.69 573.67 T -(ys) 174.41 573.67 T -(\245) 126 561.67 T -(BounceK) 139.68 561.67 T -(e) 180.95 561.67 T -(ys) 185.67 561.67 T -(\245) 126 549.67 T -(Stick) 139.68 549.67 T -(yK) 162.13 549.67 T -(e) 175.3 549.67 T -(ys) 180.02 549.67 T -(\245) 126 537.67 T -(MouseK) 139.68 537.67 T -(e) 177.29 537.67 T -(ys) 182.01 537.67 T -(\245) 126 525.67 T -(MouseK) 139.68 525.67 T -(e) 177.29 525.67 T -(ysAccel) 182.01 525.67 T -(\245) 126 513.67 T -(AccessXK) 139.68 513.67 T -(e) 186.44 513.67 T -(ys) 191.16 513.67 T -(\245) 126 501.67 T -(AccessXT) 139.68 501.67 T -(imeout) 185.11 501.67 T -(\245) 126 489.67 T -(AccessXFeedback) 139.68 489.67 T -(\245) 126 477.67 T -(Ov) 139.68 477.67 T -(erlay1) 152.96 477.67 T -(\245) 126 465.67 T -(Ov) 139.68 465.67 T -(erlay2) 152.96 465.67 T -(\245) 126 453.67 T -(EnabledControls) 139.68 453.67 T -3 12 Q -(Grab State) 72 433 T -2 F -(The grab state is the state used when matching events to passive grabs. It consists of the) 108 418 T -(grab group and the grab modifiers.) 108 405 T -3 F -(Group) 72 384 T -2 F -(See Keysym Group) 108 369 T -3 F -(Group Index) 72 348 T -2 F -(A number used as the internal representation for a group number. Group1 through Group) 108 333 T -(4 have indices of 0 through 3.) 108 320 T -3 F -(Groups Wrap Control) 72 299 T -2 F -(If a group index exceeds the maximum number of groups permitted for the specified) 108 284 T -(keyboard, it is wrapped or truncated back into range as specified by the global) 108 271 T -5 F --0.6 (GroupsWrap) 108 258 S -2 F -(control.) 177 258 T -5 F --0.6 (GroupsWrap) 217 258 S -2 F -( can have the following values:) 283 258 T -5 11 Q -(WrapIntoRange) 126 243.67 T -(ClampIntoRange) 126 230.67 T -(RedirectIntoRange) 126 217.67 T -3 12 Q -(Key Type) 72 196 T -2 F -(An attribute of a key that identifies which modifiers affect the shift level of a key and the) 108 181 T -(number of groups on the key.) 108 168 T -3 F -(Key Width) 72 147 T -2 F -(The maximum number of shift levels in any group for the key type associated with a key.) 108 132 T -FMENDPAGE -%%EndPage: "213" 225 -%%Page: "214" 226 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(214) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -( Glossary) 492.64 744.87 T -3 12 Q -(Keysym Group) 72 712 T -2 F -(A keysym group is a logical state of the keyboard providing access to a collection of) 108 697 T -(characters. A group usually contains a set of characters that logically belong together and) 108 684 T --0.24 (that may be arranged on several shift levels within that group. For example, Group1 could) 108 671 P -(be the English alphabet, and Group2 could be Greek. Xkb supports up to four different) 108 658 T -(groups for an input device or keyboard. Groups are in the range 1-4 \050Group1 - Group4\051,) 108 645 T -(and are often referred to as G1 - G4 and indexed as 0 - 3.) 108 632 T -3 F -(Indicator) 72 611 T -2 F -(An indicator is a feedback mechanism such as an LED on an input device. Using Xkb, a) 108 596 T --0.51 (client application can determine the names of the various indicators, determine and control) 108 583 P -(the way that the individual indicators should be updated to reflect keyboard changes, and) 108 570 T -(determine which of the 32 keyboard indicators reported by the protocol are actually) 108 557 T -(present on the keyboard.) 108 544 T -3 F -(Indicator Feedback) 72 523 T -2 F --0.1 (An indicator feedback describes the state of a bank of up to 32 lights. It has a mask where) 108 508 P --0.33 (each bit corresponds to a light and an associated value mask that specifies which lights are) 108 495 P -(on or off.) 108 482 T -3 F -(Indicator Map) 72 461 T -2 F -(An indicator has its own set of attributes that specify whether clients can explicitly set its) 108 446 T --0.02 (state and whether it tracks the keyboard state. The indicator map is the collection of these) 108 433 P -(attributes for each indicator and is held in the) 108 420 T -1 F -(maps) 328.3 420 T -2 F -( array, which is an array of) 353.63 420 T -5 F --0.6 (XkbIndicatorRec) 108 407 S -2 F -( structures.) 207 407 T -3 F -(Input Extension) 72 386 T -2 F --0.39 (An extension to the core X protocol that allows an X server to support multiple keyboards,) 108 371 P --0.09 (as well as other input devices, in addition to the core X keyboard and pointer. Other types) 108 358 P -(of devices supported by the input extension include, but are not limited to: mice, tablets,) 108 345 T -(touchscreens, barcode readers, button boxes, trackballs, identifier devices, data gloves,) 108 332 T -(and eye trackers.) 108 319 T -3 F -(Key Action) 72 298 T -2 F -(A key action consists of an operator and some optional data. Once the server has applied) 108 283 T --0.22 (the global controls and per-key behavior and has decided to process a key event, it applies) 108 270 P -(key actions to determine the effects of the key on the internal state of the server. Xkb) 108 257 T -(supports actions that do the following:) 108 244 T -2 11 Q -(\245) 126 229.67 T -(Change base, latched, or lock) 139.68 229.67 T -(ed modi\336ers or group) 269.1 229.67 T -(\245) 126 217.67 T -(Mo) 139.68 217.67 T -(v) 154.79 217.67 T -(e the core pointer or simulate core pointer b) 160.13 217.67 T -(utton e) 352.36 217.67 T -(v) 382.34 217.67 T -(ents) 387.67 217.67 T -(\245) 126 205.67 T -(Change most aspects of k) 139.68 205.67 T -(e) 252 205.67 T -(yboard beha) 256.72 205.67 T -(vior) 310.57 205.67 T -(\245) 126 193.67 T -(T) 139.68 193.67 T -(erminate or suspend the serv) 145.63 193.67 T -(er) 271.33 193.67 T -(\245) 126 181.67 T -(Send a message to interested clients) 139.68 181.67 T -(\245) 126 169.67 T -(Simulate e) 139.68 169.67 T -(v) 186.15 169.67 T -(ents on other k) 191.49 169.67 T -(e) 256.46 169.67 T -(ys) 261.17 169.67 T -3 12 Q -(Key Alias) 72 149 T -2 F --0.31 (A key alias is a symbolic name for a specific physical key. Key aliases allow the keyboard) 108 134 P -(layout designer to assign multiple key names to a single key. This allows the keyboard) 108 121 T -(layout designer to refer to keys using either their position or their \322function.\323 Key aliases) 108 108 T -(can be specified both in the symbolic names component and in the keyboard geometry.) 108 95 T -FMENDPAGE -%%EndPage: "214" 226 -%%Page: "215" 227 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(215) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -( Glossary) 492.64 744.87 T -2 12 Q -(Both sets of aliases are always valid, but key alias definitions in the keyboard geometry) 108 712 T -(have priority; if both symbolic names and geometry include aliases, you should consider) 108 699 T -(the definitions from the geometry before considering the definitions from the symbolic) 108 686 T -(names section.) 108 673 T -3 F -(Key Behavior) 72 652 T -2 F -(The) 108 637 T -1 F -(behaviors) 129.66 637 T -2 F -( field of the server map is an array of) 176.99 637 T -5 F --0.6 (XkbBehavior) 357.6 637 S -2 F -(, indexed by keycode,) 430.2 637 T -(and contains the behavior for each key. The X server uses key behavior to determine) 108 624 T -(whether to process or filter out any given key event; key behavior is independent of) 108 611 T -(keyboard modifier or group state. Each key has exactly one behavior.) 108 598 T -(Key behaviors include:) 108 583 T -2 11 Q -(\245) 126 568.67 T -(XkbKB_Def) 139.68 568.67 T -(ault) 195.78 568.67 T -(\245) 126 556.67 T -(XkbKB_Lock) 139.68 556.67 T -(\245) 126 544.67 T -(XkbKB_RadioGroup) 139.68 544.67 T -(\245) 126 532.67 T -(XkbKB_Ov) 139.68 532.67 T -(erlay1) 192.68 532.67 T -(\245) 126 520.67 T -(XkbKB_Ov) 139.68 520.67 T -(erlay2) 192.68 520.67 T -3 12 Q -(Key Symbol Map) 72 500 T -2 F -(A key symbol map describes the symbols bound to a key and the rules to be used to) 108 485 T -(interpret those symbols. It is an array of) 108 472 T -5 F --0.6 (XkbSymMapRec) 302.3 472 S -2 F -( structures indexed by keycode.) 381.51 472 T -3 F -(Key Type) 72 451 T -2 F -(Key types are used to determine the shift level of a key given the current state of the) 108 436 T --0.07 (keyboard. There is one key type for each group for a key. Key types are defined using the) 108 423 P -5 F --0.6 (XkbKeyTypeRec) 108 410 S -2 F -( and) 193.8 410 T -5 F --0.6 (XkbKTMapEntryRec) 217.13 410 S -2 F -( structures. Xkb allows up to) 322.73 410 T -5 F --0.6 (XkbMaxKeyTypes) 108 397 S -2 F -( \050255\051 key types to be defined, but requires at least) 200.4 397 T -5 F --0.6 (XkbNumRequiredTypes) 108 384 S -2 F -( \0504\051 predefined types to be in a key map.) 233.4 384 T -3 F -(Keyboard Bells) 72 363 T -2 F -(The sound the default bell makes when rung is the system bell or the default keyboard) 108 348 T -(bell. Some input devices may have more than one bell, identified by) 108 335 T -1 F -(bell_class) 437.96 335 T -2 F -( and) 485.96 335 T -1 F -(bell_id) 108 322 T -2 F -(.) 141.34 322 T -3 F -(Keyboard Components) 72 301 T -2 F -(There are five types of components stored in the X server database of keyboard) 108 286 T -(components. They correspond to the) 108 273 T -1 F -(symbols, g) 285.97 273 T -(eometry) 336.52 273 T -(, k) 374.51 273 T -(e) 385.72 273 T -(ycodes, compat,) 390.68 273 T -2 F -(and) 470.66 273 T -1 F -( types) 487.99 273 T -2 F -(symbolic names associated with a keyboard.) 108 260 T -3 F -(Keyboard Feedback) 72 239 T -2 F -(A keyboard feedback includes the following:) 108 224 T -(Keyclick volume) 144 209 T -(Bell volume) 144 194 T -(Bell pitch) 144 179 T -(Bell duration) 144 164 T -(Global auto-repeat) 144 149 T -(Per key auto-repeat) 144 134 T -(32 LEDs) 144 119 T -3 F -(Key Width, Key Type Width) 72 98 T -2 F -(The maximum number of shift levels for a type is referred to as the width of a key type.) 108 83 T -FMENDPAGE -%%EndPage: "215" 227 -%%Page: "216" 228 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(216) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -( Glossary) 492.64 744.87 T -3 12 Q -(Keyboard Geometry) 72 712 T -2 F -(Keyboard geometry describes the physical appearance of the keyboard, including the) 108 697 T --0.28 (shape, location, and color of all keyboard keys or other visible keyboard components such) 108 684 P --0.18 (as indicators and is stored in a) 108 671 P -5 F --0.4 -0.6 (XkbGeometryRec) 254.38 671 B -2 F --0.18 ( structure. The information contained in) 346.78 671 P -(a keyboard geometry is sufficient to allow a client program to draw an accurate) 108 658 T -(two-dimensional image of the keyboard.) 108 645 T -3 F -(Keyboard Geometry Name) 72 624 T -2 F -(The keyboard geometry name describes the physical location, size, and shape of the) 108 609 T -(various keys on the keyboard and is part of the) 108 596 T -5 F --0.6 (XkbNamesRec) 335.29 596 S -2 F -( structure.) 407.89 596 T -3 F -(Keyboard State) 72 575 T -2 F --0.02 (Keyboard state encompasses all of the transitory information necessary to map a physical) 108 560 P -(key press or release to an appropriate event.) 108 547 T -3 F -(Keycode) 72 526 T -2 F --0.27 (A numeric value returned to the X server when a key on a keyboard is pressed or released,) 108 511 P --0.32 (indicating which key is being modulated. Keycode numbers are in the range 1 <= keycode) 108 498 P -(<= max, where max is the number of physical keys on the device.) 108 485 T -3 F -(Keycode Name) 72 464 T -2 F -(The keycode name describes the range and meaning of the keycodes returned by the) 108 449 T -(keyboard and is part of the) 108 436 T -5 F --0.6 (XkbNamesRec) 239.3 436 S -2 F -( structure.) 311.9 436 T -3 F -(Latched Group) 72 415 T -2 F --0.11 (A latched group is a group index that is combined with the base and locked group to form) 108 400 P --0.35 (the effective group. It applies only to the next key event that does not change the keyboard) 108 387 P --0.22 (state. The latched group can be changed by keyboard activity or via Xkb extension library) 108 374 P -(functions.) 108 361 T -3 F -(Latched Modifier) 72 340 T -2 F -(Latched modifiers are the set of modifiers that are combined with the base modifiers and) 108 325 T -(the locked modifiers to form the effective modifiers. It applies only to the next key event) 108 312 T -(that does not change the keyboard state.) 108 299 T -3 F -(LED) 72 278 T -2 F -(A light emitting diode. However, for the purposes of the X keyboard extension) 108 263 T -(specification, a LED is any form of visual two-state indicator that is either on or off.) 108 250 T -3 F -(Locked Group) 72 229 T -2 F --0.11 (A locked group is a group index that is combined with the base and latched group to form) 108 214 P --0.02 (the effective group. When a group is locked, it supersedes any previous locked group and) 108 201 P --0.37 (remains the locked group for all future key events, until a new group is locked. The locked) 108 188 P -(group can be changed by keyboard activity or via Xkb extension library functions.) 108 175 T -3 F -(Locked Modifiers) 72 154 T -2 F -(Locked modifiers are the set of modifiers that are combined with the base modifiers and) 108 139 T -(the latched modifiers to form the effective modifiers. A locked modifier applies to all) 108 126 T -(future key events until it is explicitly unlocked.) 108 113 T -FMENDPAGE -%%EndPage: "216" 228 -%%Page: "217" 229 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(217) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -( Glossary) 492.64 744.87 T -3 12 Q -(Lookup State) 72 712 T -2 F -(The lookup state is composed of the lookup group and the lookup modifiers, and it is the) 108 697 T -(state an Xkb-capable or Xkb-aware client should use to map a keycode to a keysym.) 108 684 T -3 F -(Modifier) 72 663 T -2 F --0.12 (A modifier is a logical condition that is either set or unset. The modifiers control the Shift) 108 648 P -(Level selected when a key event occurs. Xkb supports the core protocol eight modifiers) 108 635 T --0.28 (\050) 108 622 P -5 F --0.61 -0.6 (Shift) 112 622 B -2 F --0.28 (,) 145 622 P -5 F --0.61 -0.6 (Lock) 150.72 622 B -2 F --0.28 (,) 177.12 622 P -5 F --0.61 -0.6 (Control) 182.85 622 B -2 F --0.28 (, and) 229.05 622 P -5 F --0.61 -0.6 (Mod1) 254.82 622 B -2 F --0.28 ( through) 281.22 622 P -5 F --0.61 -0.6 (Mod5) 324 622 B -2 F --0.28 (\051, called the) 350.4 622 P -1 F --0.28 (r) 408.89 622 P --0.28 (eal) 413.11 622 P -2 F --0.28 ( modifiers. In addition,) 427.78 622 P -(Xkb extends modifier flexibility by providing a set of sixteen named virtual modifiers,) 108 609 T -(each of which can be bound to any set of the eight real modifiers.) 108 596 T -3 F -(Modifier Key) 72 575 T -2 F --0.33 (A modifier key is a key whose operation has no immediate effect, but that, for as long as it) 108 560 P -(is held down, modifies the effect of other keys. A modifier key may be, for example, a) 108 547 T -(shift key or a control key.) 108 534 T -3 F -(Modifier Definition) 72 513 T -2 F --0.1 (An Xkb modifier definition, held in an) 108 498 P -5 F --0.22 -0.6 (XkbModsRec) 295.94 498 B -2 F --0.1 (, consists of a set of real modifiers, a) 361.94 498 P --0.25 (set of virtual modifiers, and an effective mask. The mask is the union of the real modifiers) 108 485 P -(and the set of real modifiers to which the virtual modifiers map; the mask cannot be) 108 472 T -(explicitly changed.) 108 459 T -3 F -(Nonkeyboard Extension Device) 72 438 T -2 F -(An input extension device that is not a keyboard. Other types of devices supported by the) 108 423 T -(input extension include, but are not limited to: mice, tablets, touchscreens, barcode) 108 410 T -(readers, button boxes, trackballs, identifier devices, data gloves, and eye trackers.) 108 397 T -3 F -(Outlines) 72 376 T -2 F --0.42 (An outline is a list of one or more points that describes a single closed polygon, used in the) 108 361 P -(geometry specification for a keyboard.) 108 348 T -3 F -(Physical Indicator Mask) 72 327 T -2 F -(The physical indicator mask is a field in the) 108 312 T -5 F --0.6 (XkbIndicatorRec) 320.98 312 S -2 F -( that indicates which) 419.98 312 T -(indicators are bound to physical LEDs on the keyboard; if a bit is set in) 108 299 T -1 F -(phys_indicator) 452.96 299 T -(s) 524.84 299 T -2 F -(,) 529.51 299 T --0.22 (then the associated indicator has a physical LED associated with it. This field is necessary) 108 286 P -(because some indicators may not have corresponding physical LEDs on the keyboard.) 108 273 T -3 F -(Physical Symbol Keyboard Name) 72 252 T -2 F -(The) 108 237 T -1 F -(symbols) 129.66 237 T -2 F -( keyboard name identifies the symbols logically bound to the keys. The) 168.32 237 T -(symbols name is a human or application-readable description of the intended locale or) 108 224 T --0.42 (usage of the keyboard with these symbols. The) 108 211 P -1 F --0.42 (phys_symbols) 332.91 211 P -2 F --0.42 ( keyboard name, on the other) 399.57 211 P -(hand, identifies the symbols actually engraved on the keyboard.) 108 198 T -3 F -(Preserved Modifier) 72 177 T -2 F -(Xkb normally consumes modifiers in determining the appropriate symbol for an event,) 108 162 T --0.12 (that is, the modifiers are not considered during any of the later stages of event processing.) 108 149 P -(For those rare occasions when a modifier) 108 136 T -340.96 134.8 308.95 134.8 2 L -V -0.6 H -0 Z -N -(should) 308.95 136 T -( be considered despite having been used) 340.96 136 T -(to look up a symbol, key types include an optional) 108 123 T -1 F -(pr) 352.99 123 T -(eserve) 363.22 123 T -2 F -( field. If a modifier is present) 393.86 123 T -(in the) 108 110 T -1 F -(pr) 138 110 T -(eserve) 148.22 110 T -2 F -( list, it is a preserved modifier.) 178.87 110 T -FMENDPAGE -%%EndPage: "217" 229 -%%Page: "218" 230 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(218) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -( Glossary) 492.64 744.87 T -3 12 Q -(Radio Group) 72 712 T -2 F --0.14 (A radio group is a set of keys whose behavior simulates a set of radio buttons. Once a key) 108 693 P -(in a radio group is pressed, it stays logically depressed until another key in the group is) 108 680 T -(pressed, at which point the previously depressed key is logically released. Consequently,) 108 667 T -(at most one key in a radio group can be logically depressed at one time.) 108 654 T -3 F -(Real Modifier) 72 633 T -2 F -(Xkb supports the eight core protocol modifiers \050) 108 618 T -5 F --0.6 (Shift) 339.64 618 S -2 F -(,) 372.64 618 T -5 F --0.6 (Lock) 378.64 618 S -2 F -(,) 405.04 618 T -5 F --0.6 (Control) 411.04 618 S -2 F -(, and) 457.24 618 T -5 F --0.6 (Mod1) 483.57 618 S -2 F --0.06 (through) 108 605 P -5 F --0.12 -0.6 (Mod5) 148.28 605 B -2 F --0.06 (\051; these are called the) 174.68 605 P -1 F --0.06 (r) 279.36 605 P --0.06 (eal) 283.59 605 P -2 F --0.06 ( modifiers, as opposed to the set of sixteen named) 298.25 605 P -(virtual modifiers that can be bound to any set of the eight real modifiers.) 108 592 T -3 F -(Server Internal Modifiers) 72 571 T -2 F -(Modifiers that the server uses to determine the appropriate symbol for an event; internal) 108 556 T -(modifiers are normally consumed by the server.) 108 543 T -3 F -(Shift Level) 72 522 T -2 11 Q --0.1 (One of se) 108 507 P --0.1 (v) 149.68 507 P --0.1 (eral states \050normally 2 or 3\051 go) 155.02 507 P --0.1 (v) 289.92 507 P --0.1 (erning which graphic character is produced when a k) 295.25 507 P --0.1 (e) 527.13 507 P --0.1 (y) 531.85 507 P -(is actuated.) 108 494 T -3 12 Q -(Symbol Keyboard Name) 72 473 T -2 F -(The) 108 458 T -1 F -(symbols) 129.66 458 T -2 F -( keyboard name identifies the symbols logically bound to the keys. The) 168.32 458 T -(symbols name is a human or application-readable description of the intended locale or) 108 445 T --0.42 (usage of the keyboard with these symbols. The) 108 432 P -1 F --0.42 (phys_symbols) 332.91 432 P -2 F --0.42 ( keyboard name, on the other) 399.57 432 P -(hand, identifies the symbols actually engraved on the keyboard.) 108 419 T -3 F -(Symbolic Name) 72 398 T -2 F -(Xkb supports symbolic names for most components of the keyboard extension. Most of) 108 383 T --0.02 (these symbolic names are grouped into the) 108 370 P -1 F --0.02 (names) 315.48 370 P -2 F --0.02 ( component of the keyboard description.) 346.14 370 P -3 F -(State Field) 72 349 T -2 F --0.02 (The portion of a client-side core protocol event that holds the modifier, group, and button) 108 334 P -(state information pertaining to the event.) 108 321 T -3 F -(Types Name) 72 300 T -2 F -(The) 108 285 T -1 F -(types) 129.66 285 T -2 F -( name provides some information about the set of key types that can be) 154.32 285 T -(associated with the keyboard. In addition, each key type can have a name, and each shift) 108 272 T -(level of a type can have a name.) 108 259 T -3 F -(Valuator) 72 238 T -2 F -(A valuator reports a range of values for some entity, like a mouse axis, a slider, or a dial.) 108 223 T -3 F -(Virtual Modifier) 72 202 T -2 F -(Xkb provides a set of sixteen named virtual modifiers that can be bound to any set of the) 108 187 T -(eight real modifiers. Each virtual modifier can be bound to any set of the real modifiers) 108 174 T -(\050) 108 161 T -5 F --0.6 (Shift) 112 161 S -2 F -(,) 145 161 T -5 F --0.6 (Lock) 151 161 S -2 F -(,) 177.4 161 T -5 F --0.6 (Control,) 183.4 161 S -2 F -( and) 236.2 161 T -5 F --0.6 (Mod1) 259.53 161 S -2 F -(-) 285.93 161 T -5 F --0.6 (Mod5) 289.92 161 S -2 F -(\051.) 316.32 161 T -3 F -(Virtual Modifier Mapping) 72 140 T -2 F -(Xkb maintains a virtual modifier mapping, which lists the virtual modifiers associated) 108 125 T -(with each key.) 108 112 T -FMENDPAGE -%%EndPage: "218" 230 -%%Page: "219" 231 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(219) 523.5 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -( Glossary) 492.64 744.87 T -3 12 Q -(Xkb-aware Client) 72 712 T -2 F -(A client application that initializes Xkb extension and is consequently bound to an Xlib) 108 697 T -(that includes the Xkb extension.) 108 684 T -3 F -(Xkb-capable Client) 72 663 T -2 F -(A client application that makes no Xkb extension Xlib calls but is bound to an Xlib that) 108 648 T -(includes the Xkb extension.) 108 635 T -3 F -(Xkb-unaware Client) 72 614 T -2 F -(A client application that makes no Xkb extension Xlib calls and is bound to an Xlib that) 108 599 T -(does not include the Xkb extension.) 108 586 T -0 0 0 1 0 0 0 K -FMENDPAGE -%%EndPage: "219" 231 -%%Page: "220" 232 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(Inde) 494.95 40.62 T -(x-220) 514.34 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(Inde) 515.12 744.87 T -(x) 534.5 744.87 T -3 9 Q -(A) 72 714 T -2 F -(AccessX enable/disable bits, table) 72 703 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(75) 197.98 703 T -(AccessXFeedback) 72 693 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(53) 141.47 693 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 150.47 693 T -0 0 0 1 0 0 0 K -2 9 Q -(63) 156.47 693 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 165.47 693 T -0 0 0 1 0 0 0 K -2 9 Q -(72) 171.47 693 T -(AccessXK) 72 683 T -(e) 110.26 683 T -(ys) 114.12 683 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(53) 125.12 683 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 134.12 683 T -0 0 0 1 0 0 0 K -2 9 Q -(72) 140.12 683 T -(AccessXNotify) 72 673 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(64) 130.49 673 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 139.49 673 T -0 0 0 1 0 0 0 K -2 9 Q -(66) 145.49 673 T -(AccessXT) 72 663 T -(imeout) 109.17 663 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(53) 137.17 663 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 146.17 663 T -0 0 0 1 0 0 0 K -2 9 Q -(62) 152.17 663 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 161.17 663 T -0 0 0 1 0 0 0 K -2 9 Q -(72) 167.17 663 T -(Action modi\336ers) 72 653 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(144) 135.75 653 T -(Actions) 72 643 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(141) 103 643 T -(changing number of actions bound to k) 81 633 T -(e) 221.9 633 T -(y) 225.76 633 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(160) 233.26 633 T -(controls action types, table) 81 623 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(154) 180.49 623 T -(detecting k) 81 613 T -(e) 120.65 613 T -(y action messages) 124.51 613 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(155) 192.5 613 T -(de) 81 603 T -(vice b) 89.27 603 T -(utton action types) 110.83 603 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(158) 177.83 603 T -(for changing acti) 81 593 T -(v) 141.76 593 T -(e screen) 146.12 593 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(153) 178.36 593 T -(for changing b) 81 583 T -(utton number simulated by mouse k) 133.31 583 T -(e) 262.47 583 T -(ys) 266.33 583 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(149) 277.33 583 T -(for changing current group state) 81 573 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(145) 199.47 573 T -(for changing state of boolean controls) 81 563 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(154) 220.22 563 T -(for changing the state of modi\336ers) 81 553 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(143) 207.73 553 T -(for generating a dif) 81 543 T -(ferent k) 150 543 T -(e) 177.65 543 T -(ycode for k) 181.51 543 T -(e) 222.41 543 T -(y) 226.27 543 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(156) 233.77 543 T --0.75 (for generating De) 81 533 P --0.75 (viceButtonPress and De) 142.75 533 P --0.75 (viceButtonRelease) 227.51 533 P -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(158) 99 523 T -(for generating messages) 81 513 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(155) 170.98 513 T -(for locking modi\336ers and group) 81 503 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(150) 198.49 503 T -(for mo) 81 493 T -(ving the pointer) 105.11 493 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(147) 165.11 493 T -(for simulating e) 81 483 T -(v) 137.77 483 T -(ents from de) 142.14 483 T -(vice v) 186.9 483 T -(aluators) 208.42 483 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(159) 239.92 483 T -(for simulating pointer b) 81 473 T -(utton press and release) 166.07 473 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(148) 250.8 473 T -(group action \337ags, table) 81 463 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(146) 170.49 463 T -(group action types, table) 81 453 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(146) 172.49 453 T -(ISO action \337ags, table) 81 443 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(151) 163.99 443 T -(message action \337ags, table) 81 433 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(155) 179.99 433 T -(modi\336er action \337ags, table) 81 423 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(145) 179.99 423 T -(modi\336er action types, table) 81 413 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(144) 181.99 413 T -(obtaining actions for k) 81 403 T -(e) 162.15 403 T -(ys from serv) 166.01 403 T -(er) 210.87 403 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(160) 220.86 403 T -(pointer action types, table) 81 393 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(147) 176.99 393 T -(ponter b) 81 383 T -(utton action \337ags, table) 110.57 383 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(149) 197.56 383 T -(ponter b) 81 373 T -(utton action types, table) 110.57 373 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(149) 199.56 373 T -(switch screen action \337ags, table) 81 363 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(153) 198.23 363 T -(Allocator) 72 353 T -(, glossary entry) 105.63 353 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(211) 163.88 353 T -(Al) 72 343 T -(w) 80.91 343 T -(aysConsumeShiftAndLock) 87.32 343 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(83) 187.82 343 T -(Audible Bell, glossary entry) 72 333 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(211) 176.49 333 T -(AudibleBell) 72 323 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(48) 119 323 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 128 323 T -0 0 0 1 0 0 0 K -2 9 Q -(53) 134 323 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 143 323 T -0 0 0 1 0 0 0 K -2 9 Q -(56) 149 323 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 158 323 T -0 0 0 1 0 0 0 K -2 9 Q -(72) 164 323 T -(AutoReset) 72 313 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(53) 113 313 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 122 313 T -0 0 0 1 0 0 0 K -2 9 Q -(55) 128 313 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 137 313 T -0 0 0 1 0 0 0 K -2 9 Q -(72) 143 313 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 152 313 T -0 0 0 1 0 0 0 K -2 9 Q -(81) 158 313 T -(Autoreset Controls, glossary entry) 72 303 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(211) 198.49 303 T -(AX_BounceK) 72 293 T -(e) 123.26 293 T -(yReject) 127.12 293 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(48) 157.62 293 T -(AX_FeatureChange) 72 283 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(48) 146.98 283 T -(AX_FeatureOf) 72 273 T -(f) 125.76 273 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(48) 131.75 273 T -(AX_FeatureOn) 72 263 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(48) 130.49 263 T -(AX_IndicatorChange) 72 253 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(48) 152.48 253 T -(AX_IndicatorOf) 72 243 T -(f) 131.26 243 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(48) 137.25 243 T -(AX_IndicatorOn) 72 233 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(48) 135.98 233 T -(ax_options) 72 223 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(75) 114.5 223 T -(ax_options v) 72 213 T -(alues) 118.03 213 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(63) 139.52 213 T -(AX_Slo) 72 203 T -(wK) 101.28 203 T -(e) 114.05 203 T -(yAccept) 117.91 203 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(48) 150.9 203 T -(AX_Slo) 72 193 T -(wK) 101.28 193 T -(e) 114.05 193 T -(yPress) 117.91 193 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(48) 144.41 193 T -(AX_Slo) 72 183 T -(wK) 101.28 183 T -(e) 114.05 183 T -(yReject) 117.91 183 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(48) 148.4 183 T -(AX_Slo) 72 173 T -(wK) 101.28 173 T -(e) 114.05 173 T -(yRelease) 117.91 173 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(48) 153.4 173 T -(AX_Slo) 72 163 T -(wK) 101.28 163 T -(e) 114.05 163 T -(ysW) 117.91 163 T -(arning) 133.69 163 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(48) 159.68 163 T -(AX_Stick) 72 153 T -(yLatch) 107.86 153 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(48) 135.86 153 T -(AX_Stick) 72 143 T -(yLock) 107.86 143 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(48) 133.86 143 T -(AX_Stick) 72 133 T -(yUnlock) 107.86 133 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(48) 141.86 133 T -3 F -(B) 72 113 T -2 F -(BadAccess) 72 102 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(9) 114.99 102 T -(BadAlloc) 72 92 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(9) 109.5 92 T -(BadAtom) 72 82 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(9) 110 82 T -(BadClass) 72 72 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(9) 109 72 T -(BadDe) 315 714 T -(vice) 339.77 714 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(9) 357.76 714 T -(BadId) 315 704 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(9) 340 704 T -(BadImplementation) 315 694 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(9) 389.5 694 T -(BadK) 315 684 T -(e) 335.77 684 T -(yboard) 339.63 684 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(4) 367.63 684 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 372.13 684 T -0 0 0 1 0 0 0 K -2 9 Q -(9) 378.13 684 T -(BadMatch) 315 674 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(9) 355.49 674 T -(BadV) 315 664 T -(alue) 335 664 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(9) 352.99 664 T -(Base error code) 315 654 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(7) 374.48 654 T -(Base e) 315 644 T -(v) 338.52 644 T -(ent code) 342.88 644 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(7) 376.12 644 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 380.62 644 T -0 0 0 1 0 0 0 K -2 9 Q -(14) 386.62 644 T -(Base Ev) 315 634 T -(ent Code, glossary entry) 344.61 634 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(211) 435.1 634 T -(Base group) 315 624 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(20) 358.74 624 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 367.74 624 T -0 0 0 1 0 0 0 K -2 9 Q -(211) 373.74 624 T -(Base Group, glossary entry) 315 614 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(211) 415.98 614 T -(Base modi\336ers) 315 604 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(20) 371.75 604 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 380.75 604 T -0 0 0 1 0 0 0 K -2 9 Q -(211) 386.75 604 T -(Base Modi\336ers, glossary entry) 315 594 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(211) 427.99 594 T -(Base State, glossary entry) 315 584 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(211) 410.99 584 T -(BeepOnComposeF) 315 574 T -(ail) 383.36 574 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(84) 395.36 574 T -(Beha) 315 564 T -(vior) 333.32 564 T -(k) 324 554 T -(e) 328.41 554 T -(y beha) 332.27 554 T -(viors, table) 355.83 554 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(161) 398.83 554 T -(k) 324 544 T -(e) 328.41 544 T -(ys) 332.27 544 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(161) 343.27 544 T -(obtaining k) 324 534 T -(e) 364.66 534 T -(y beha) 368.52 534 T -(viors from the serv) 392.08 534 T -(er) 460.19 534 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(162) 470.18 534 T -(BellFeedbackClass) 315 524 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(48) 386.99 524 T -(Bells) 315 514 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(47) 336.5 514 T -(audible) 324 504 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(48) 353.5 504 T -(BeepOnComposeF) 324 494 T -(ail) 392.36 494 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(84) 404.36 494 T -(bell_class and bell_id) 324 484 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(48) 404.99 484 T -(detecting) 324 474 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(51) 359.99 474 T -(\336x) 324 464 T -(ed pitch bell only) 333.37 464 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(64) 399.12 464 T -(forcing a serv) 324 454 T -(er) 373.35 454 T -(-generated bell) 380.16 454 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(51) 436.89 454 T -(generating bell e) 324 444 T -(v) 383.76 444 T -(ents) 388.12 444 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(49) 405.62 444 T -(generating named bell e) 324 434 T -(v) 410 434 T -(ents) 414.37 434 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(50) 431.87 434 T -(high and lo) 324 424 T -(w pitched beeps, rising and f) 364.27 424 T -(alling tones) 467.67 424 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(63) 512.42 424 T -(names) 324 414 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(47) 349.99 414 T -(prede\336ned) 324 404 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(48) 364.99 404 T -(sounding) 324 394 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(49) 360 394 T -(Boolean controls) 315 384 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(53) 379.24 384 T -(actions for changing the state of) 324 374 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(154) 442.23 374 T -(Boolean Controls, glossary entry) 315 364 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(211) 436.49 364 T -(BounceK) 315 354 T -(e) 348.77 354 T -(ys) 352.63 354 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(53) 363.63 354 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 372.63 354 T -0 0 0 1 0 0 0 K -2 9 Q -(66) 378.63 354 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 387.63 354 T -0 0 0 1 0 0 0 K -2 9 Q -(72) 393.63 354 T -(debounce_delay) 324 344 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(75) 385.48 344 T -(delay) 324 334 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(66) 346.49 334 T -(Bounds) 315 324 T -(computing bounding box of a ro) 324 314 T -(w) 440.02 314 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(106) 449.52 314 T -(computing bounding box of a section) 324 304 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(106) 461.24 304 T -(computing bounding box of a shape) 324 294 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(105) 456.24 294 T -(k) 324 284 T -(e) 328.41 284 T -(yboard geometry) 332.27 284 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(93) 396.51 284 T -(sections) 324 274 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(95) 356 274 T -(shapes) 324 264 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(94) 350.99 264 T -(Buttons, pointer) 315 254 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(20) 376.01 254 T -3 F -(C) 315 234 T -2 F -(Canonical k) 315 223 T -(e) 358.15 223 T -(y types) 362.02 223 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(129) 390.77 223 T -(initializing) 324 213 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(131) 366.01 213 T -(used in compatiblity map) 324 203 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(176) 418.25 203 T -(Canonical K) 315 193 T -(e) 360.02 193 T -(y T) 363.88 193 T -(ypes, glossary entry) 375.41 193 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(211) 450.15 193 T -(Changes data structures) 315 183 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(12) 403.48 183 T -(ClampIntoRange) 315 173 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(69) 379.5 173 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 388.5 173 T -0 0 0 1 0 0 0 K -2 9 Q -(74) 394.5 173 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 403.5 173 T -0 0 0 1 0 0 0 K -2 9 Q -(134) 409.5 173 T -(Client map) 315 163 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(2) 357.75 163 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 362.25 163 T -0 0 0 1 0 0 0 K -2 9 Q -(116) 368.25 163 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 381.75 163 T -0 0 0 1 0 0 0 K -2 9 Q -(126) 387.75 163 T -(allocating and freeing) 324 153 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(123) 405.48 153 T -(k) 324 143 T -(e) 328.41 143 T -(y symbol map) 332.27 143 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(133) 386.27 143 T -(Client Map, glossary entry) 315 133 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(211) 413.99 133 T -(Client types) 315 123 T -(Xkb-a) 324 113 T -(w) 346.36 113 T -(are) 352.76 113 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(3) 366.75 113 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 371.25 113 T -0 0 0 1 0 0 0 K -2 9 Q -(21) 377.25 113 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 386.25 113 T -0 0 0 1 0 0 0 K -2 9 Q -(167) 392.25 113 T -(Xkb-capable) 324 103 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(3) 372.98 103 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 377.48 103 T -0 0 0 1 0 0 0 K -2 9 Q -(21) 383.48 103 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 392.48 103 T -0 0 0 1 0 0 0 K -2 9 Q -(167) 398.48 103 T -(Xkb-una) 324 93 T -(w) 355.36 93 T -(are) 361.76 93 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(3) 375.75 93 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 380.25 93 T -0 0 0 1 0 0 0 K -2 9 Q -(21) 386.25 93 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 395.25 93 T -0 0 0 1 0 0 0 K -2 9 Q -(167) 401.25 93 T -(Colors) 315 83 T -(k) 324 73 T -(e) 328.41 73 T -(yboard, k) 332.27 73 T -(e) 366.17 73 T -(y label) 370.04 73 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(93) 397.28 73 T -0 0 0 1 0 0 0 K -FMENDPAGE -%%EndPage: "220" 232 -%%Page: "221" 233 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(Inde) 494.95 40.62 T -(x-221) 514.34 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(Inde) 515.12 744.87 T -(x) 534.5 744.87 T -2 9 Q -(listed in geometry description) 81 714 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(93) 191.24 714 T -(Compat Name, glossary entry) 72 704 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(212) 182.49 704 T -(Compatibility) 72 694 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(3) 125.01 694 T -(allocating and freeing maps) 81 684 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(179) 183.73 684 T -(changing the serv) 81 674 T -(er\325) 144.35 674 T -(s map) 153.85 674 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(177) 178.1 674 T -(core k) 81 664 T -(e) 103.15 664 T -(yboard mapping to Xkb k) 107.01 664 T -(e) 199.41 664 T -(yboard mapping transfor-) 203.27 664 T -(mation) 99 654 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(170) 127 654 T -(data structure) 81 644 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(169) 132.74 644 T -(data structures, diagram) 81 634 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(169) 170.23 634 T -(determining library) 81 624 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(6) 153.74 624 T -(diagram) 81 614 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(168) 113.49 614 T -(getting map components from serv) 81 604 T -(er) 206.35 604 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(174) 216.35 604 T -(group maps) 81 594 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(169) 126.25 594 T -(map) 81 584 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(167) 99.5 584 T -(setting e) 81 574 T -(xplicit component controls) 111.11 574 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(170) 210.61 574 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 224.11 574 T -0 0 0 1 0 0 0 K -2 9 Q -(171) 230.11 574 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 243.61 574 T -0 0 0 1 0 0 0 K -2 9 Q -(176) 249.61 574 T -(states) 81 564 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(22) 104 564 T -(symbol interpretation match criteria, table) 81 554 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(172) 235.23 554 T -(symbol interpretations) 81 544 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(172) 164.75 544 T -(tracking changes to the map) 81 534 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(178) 184.98 534 T -(types of transformations) 81 524 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(168) 171.49 524 T -(using the compatibility map) 81 514 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(175) 184.76 514 T -(with the core protocol) 81 504 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(4) 163.24 504 T -(Xkb k) 81 494 T -(e) 103.16 494 T -(yboard mapping to core k) 107.02 494 T -(e) 199.41 494 T -(yboard mapping transfor-) 203.27 494 T -(mations) 99 484 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(173) 130.5 484 T -(Xkb state to core protocol state transformation) 81 474 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(169) 251.47 474 T -(Compatibility Grab State, glossary entry) 72 464 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(212) 220.75 464 T -(Compatibility Map, glossary entry) 72 454 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(212) 199 454 T -(Compatibility State, glossary entry) 72 444 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(212) 200.51 444 T -(Component Expression, glossary entry) 72 434 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(212) 214.49 434 T -(Components, e) 72 424 T -(xplicit) 125.86 424 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(163) 151.87 424 T -(Compose processing controls) 72 414 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(83) 180.99 414 T -(Compose Processing, glossary entry) 72 404 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(212) 205.49 404 T -(ComposeLED) 72 394 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(84) 126.5 394 T -(Composing) 72 384 T -(BeepOnComposeF) 81 374 T -(ail) 149.36 374 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(84) 161.36 374 T -(ComposeLED) 81 364 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(84) 135.5 364 T -(ConsumeK) 81 354 T -(e) 121.28 354 T -(ysOnComposeF) 125.14 354 T -(ail) 183.01 354 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(83) 195.01 354 T -(Consumed Modi\336er) 72 344 T -(, glossary entry) 143.89 344 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(212) 202.13 344 T -(ConsumeK) 72 334 T -(e) 112.28 334 T -(ysOnComposeF) 116.14 334 T -(ail) 174.01 334 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(83) 186.01 334 T -(ConsumeLookupMods) 72 324 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(82) 157.5 324 T -(Controls) 72 314 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(2) 106 314 T -(AccessXFeedback) 81 304 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(63) 150.47 304 T -(AccessXT) 81 294 T -(imeout) 118.17 294 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(62) 146.17 294 T -(actions for changing the state of) 81 284 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(154) 199.23 284 T -(af) 81 274 T -(fecting compose processing) 87.77 274 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(83) 190.75 274 T -(af) 81 264 T -(fecting k) 87.77 264 T -(e) 119.42 264 T -(ycode to string translation) 123.28 264 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(82) 220.03 264 T -(allocating and freeing data structure) 81 254 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(80) 213.46 254 T -(Al) 81 244 T -(w) 89.91 244 T -(aysConsumeShiftAndLock) 96.32 244 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(83) 196.82 244 T -(AudibleBell) 81 234 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(56) 128 234 T -(AutoReset) 81 224 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(55) 122 224 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 131 224 T -0 0 0 1 0 0 0 K -2 9 Q -(81) 137 224 T -(BeepOnComposeF) 81 214 T -(ail) 149.36 214 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(84) 161.36 214 T -(bell beha) 81 204 T -(vior) 113.56 204 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(56) 131.06 204 T -(boolean) 81 194 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(53) 112.49 194 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 121.49 194 T -0 0 0 1 0 0 0 K -2 9 Q -(82) 127.49 194 T -(BounceK) 81 184 T -(e) 114.77 184 T -(ys) 118.63 184 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(66) 129.63 184 T -(changing) 81 174 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(77) 116.99 174 T -(changing the state of library controls) 81 164 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(85) 216.23 164 T -(cleaning up on e) 81 154 T -(xit) 140.1 154 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(55) 152.61 154 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 161.61 154 T -0 0 0 1 0 0 0 K -2 9 Q -(81) 167.61 154 T -(ComposeLED) 81 144 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(84) 135.5 144 T -(ConsumeK) 81 134 T -(e) 121.28 134 T -(ysOnComposeF) 125.14 134 T -(ail) 183.01 134 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(83) 195.01 134 T -(ConsumeLookupMods) 81 124 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(82) 166.5 124 T -(controls action types, table) 81 114 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(154) 180.49 114 T -(data structure) 81 104 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(71) 132.74 104 T -(DetectableAutorepeat) 81 94 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(57) 162.47 94 T -(determining the state of libarary controls) 81 84 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(85) 230.73 84 T -(determining which library controls are implemented) 81 74 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(85) 271.72 74 T -(ef) 324 714 T -(fecting e) 330.77 714 T -(v) 361.78 714 T -(ent deli) 366.15 714 T -(v) 392.67 714 T -(ery) 397.04 714 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(84) 411.53 714 T -(EnabledControls) 324 704 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(54) 387.5 704 T -(enabling and diabling other controls) 324 694 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(54) 456.99 694 T -(for general k) 324 684 T -(e) 369.89 684 T -(yboard mapping) 373.75 684 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(68) 435.49 684 T -(F) 324 674 T -(orceLatin1Lookup) 328.87 674 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(82) 398.86 674 T -(GroupsWrap) 324 664 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(69) 373.48 664 T -(IgnoreGroupLock) 324 654 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(70) 391.98 654 T -(IgnoreLockMods) 324 644 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(69) 389.49 644 T -(IgnoreNe) 324 634 T -(wK) 357.76 634 T -(e) 370.53 634 T -(yboards) 374.39 634 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(84) 405.89 634 T -(InternalMods) 324 624 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(70) 375.49 624 T -(k) 324 614 T -(e) 328.41 614 T -(yboard) 332.27 614 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(53) 360.26 614 T -(k) 324 604 T -(e) 328.41 604 T -(yboard use for ph) 332.27 604 T -(ysically-impaired persons) 395.46 604 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(61) 491.2 604 T -(library controls masks) 324 594 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(85) 406.99 594 T -(MouseK) 324 584 T -(e) 354.77 584 T -(ys) 358.63 584 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(59) 369.63 584 T -(MouseK) 324 574 T -(e) 354.77 574 T -(ysAccel) 358.63 574 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(59) 390.62 574 T -(o) 324 564 T -(v) 328.36 564 T -(erlays) 332.73 564 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(58) 357.22 564 T -(PerK) 324 554 T -(e) 342.27 554 T -(yRepeat) 346.13 554 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(56) 378.62 554 T -(querying) 324 544 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(77) 358.99 544 T -(repeat k) 324 534 T -(e) 352.65 534 T -(y beha) 356.51 534 T -(vior) 380.07 534 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(56) 397.57 534 T -(RepeatK) 324 524 T -(e) 355.27 524 T -(ys) 359.13 524 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(56) 370.13 524 T -(Slo) 324 514 T -(wK) 335.78 514 T -(e) 348.55 514 T -(ys) 352.41 514 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(65) 363.41 514 T -(Stick) 324 504 T -(yK) 342.37 504 T -(e) 353.14 504 T -(ys) 357 504 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(67) 368 504 T -(table listing all) 324 494 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(72) 380.51 494 T -(tracking changes to k) 324 484 T -(e) 400.64 484 T -(yboard controls) 404.51 484 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(79) 463.75 484 T -(using the mouse from the k) 324 474 T -(e) 422.15 474 T -(yboard) 426.02 474 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(59) 454.01 474 T -(X library) 324 464 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(82) 359.74 464 T -(Core Ev) 315 454 T -(ent, glossary entry) 344.61 454 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(212) 413.85 454 T -3 F -(D) 315 434 T -2 F -(Data structures) 315 423 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(11) 372.23 423 T -(editing) 324 413 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(11) 352 413 T -(enlar) 324 403 T -(ging) 341.83 403 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(11) 360.83 403 T -(freeing) 324 393 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(13) 352.49 393 T -(debounce_delay) 315 383 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(75) 376.48 383 T -(Deb) 315 373 T -(ugging) 329.81 373 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(210) 357.82 373 T -(Detectable Auto-repeat, glossary entry) 315 363 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(212) 456.96 363 T -(DetectableAutorepeat) 315 353 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(53) 396.47 353 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 405.47 353 T -0 0 0 1 0 0 0 K -2 9 Q -(57) 411.47 353 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 420.47 353 T -0 0 0 1 0 0 0 K -2 9 Q -(72) 426.47 353 T -(De) 315 343 T -(vice feedback, types) 325.27 343 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(198) 401.49 343 T -(De) 315 333 T -(vice identi\336er) 325.27 333 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(10) 378.01 333 T -(De) 315 323 T -(vice speci\336cations, matching with display speci\336cations) 325.27 323 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(9) 530.26 323 T -(De) 315 313 T -(vices) 325.27 313 T -(actions for generating De) 324 303 T -(viceButtonPress and De) 415 303 T -(viceBut-) 501.26 303 T -(tonRelease) 342 293 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(158) 384.49 293 T -(actions simulating e) 324 283 T -(v) 395.77 283 T -(ents from de) 400.14 283 T -(vice v) 444.91 283 T -(aluators) 466.42 283 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(159) 497.92 283 T -(allocating, initializing and freeing data structures) 324 273 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(203) 503.47 273 T -(attaching Xkb actions to) 324 263 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(198) 414.74 263 T -(querying features for non-K) 324 253 T -(e) 424.49 253 T -(yClass de) 428.36 253 T -(vices) 462.88 253 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(200) 484.37 253 T -(querying for b) 324 243 T -(utton actions) 375.31 243 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(201) 424.56 243 T -(querying indicator information) 324 233 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(202) 437.99 233 T -(setting features for non-K) 324 223 T -(e) 416.5 223 T -(yClass de) 420.36 223 T -(vices) 454.89 223 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(204) 476.38 223 T -(tracking changes to) 324 213 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(207) 396.98 213 T -(Display) 315 203 T -(, actions for changing acti) 342.41 203 T -(v) 435.42 203 T -(e screen) 439.79 203 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(153) 472.02 203 T -(Doodads) 315 193 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(93) 349.99 193 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 358.99 193 T -0 0 0 1 0 0 0 K -2 9 Q -(96) 364.99 193 T -(in sections) 324 183 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(95) 365.25 183 T -(indicator) 324 173 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(96) 358.99 173 T -(logo) 324 163 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(96) 343 163 T -(outline) 324 153 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(96) 352 153 T -(priority) 324 143 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(96) 354 143 T -(solid) 324 133 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(96) 344.51 133 T -(te) 324 123 T -(xt) 330.36 123 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(96) 340.36 123 T -(types) 324 113 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(96) 346 113 T -(Dra) 315 103 T -(wing a k) 328.36 103 T -(e) 359.26 103 T -(yboard representation) 363.12 103 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(97) 444.35 103 T -(DumbBells) 315 93 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(64) 359 93 T -0 0 0 1 0 0 0 K -FMENDPAGE -%%EndPage: "221" 233 -%%Page: "222" 234 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(Inde) 494.95 40.62 T -(x-222) 514.34 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(Inde) 515.12 744.87 T -(x) 534.5 744.87 T -3 9 Q -(E) 72 714 T -2 F -(Ef) 72 703 T -(fecti) 80.27 703 T -(v) 96.04 703 T -(e group) 100.4 703 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(20) 130.65 703 T -(Ef) 72 693 T -(fecti) 80.27 693 T -(v) 96.04 693 T -(e Group, glossary entry) 100.4 693 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(212) 187.89 693 T -(Ef) 72 683 T -(fecti) 80.27 683 T -(v) 96.04 683 T -(e mask) 100.4 683 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(31) 128.65 683 T -(Ef) 72 673 T -(fecti) 80.27 673 T -(v) 96.04 673 T -(e Mask, glossary entry) 100.4 673 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(212) 184.89 673 T -(Ef) 72 663 T -(fecti) 80.27 663 T -(v) 96.04 663 T -(e modi\336er mask) 100.4 663 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(31) 161.4 663 T -(Ef) 72 653 T -(fecti) 80.27 653 T -(v) 96.04 653 T -(e Modi\336er) 100.4 653 T -(, glossary entry) 137.79 653 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(213) 196.03 653 T -(Ef) 72 643 T -(fecti) 80.27 643 T -(v) 96.04 643 T -(e modi\336ers) 100.4 643 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(20) 143.65 643 T -(enabled_ctrls) 72 633 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(74) 122.99 633 T -(EnabledControls) 72 623 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(53) 135.5 623 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 144.5 623 T -0 0 0 1 0 0 0 K -2 9 Q -(54) 150.5 623 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 159.5 623 T -0 0 0 1 0 0 0 K -2 9 Q -(72) 165.5 623 T -(Errors, protocol) 72 613 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(9) 131.99 613 T -(Ev) 72 603 T -(ents) 81.86 603 T -(AccessXNotify) 81 593 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(64) 139.49 593 T -(base e) 81 583 T -(v) 103.01 583 T -(ent code) 107.38 583 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(14) 140.62 583 T -(data structures) 81 573 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(15) 136.24 573 T -(interpreting k) 81 563 T -(e) 129.65 563 T -(y e) 133.51 563 T -(v) 144.04 563 T -(ents) 148.4 563 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(87) 165.9 563 T -(MouseK) 81 553 T -(e) 111.77 553 T -(ys) 115.63 553 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(65) 126.63 553 T -(o) 81 543 T -(v) 85.36 543 T -(ervie) 89.73 543 T -(w) 107.5 543 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(14) 116.99 543 T -(RepeatK) 81 533 T -(e) 112.27 533 T -(ys) 116.13 533 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(65) 127.13 533 T -(selecting for) 81 523 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(15) 128.74 523 T -(Stick) 81 513 T -(yK) 99.37 513 T -(e) 110.14 513 T -(ys) 114 513 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(65) 125 513 T -(types) 81 503 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(14) 103 503 T -(types, table) 81 493 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(14) 125 493 T -(Explicit component masks, table) 72 483 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(163) 192.49 483 T -(Explicit components) 72 473 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(163) 149.25 473 T -(ExplicitAutoRepeat) 72 463 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(163) 146.5 463 T -(ExplicitBeha) 72 453 T -(vior) 118.82 453 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(163) 136.32 453 T -(ExplicitInterpret) 72 443 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(163) 134.49 443 T -(ExplicitK) 72 433 T -(e) 106.78 433 T -(yT) 110.64 433 T -(ype1) 119.92 433 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(163) 140.41 433 T -(ExplicitK) 72 423 T -(e) 106.78 423 T -(yT) 110.64 423 T -(ype2) 119.92 423 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(163) 140.41 423 T -(ExplicitK) 72 413 T -(e) 106.78 413 T -(yT) 110.64 413 T -(ype3) 119.92 413 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(163) 140.41 413 T -(ExplicitK) 72 403 T -(e) 106.78 403 T -(yT) 110.64 403 T -(ype4) 119.92 403 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(163) 140.41 403 T -(ExplicitVModMap) 72 393 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(163) 143.5 393 T -(Extension De) 72 383 T -(vice, glossary entry) 120.52 383 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(213) 193.76 383 T -3 F -(F) 72 363 T -2 F -(Feedback, types) 72 352 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(198) 132.99 352 T -(F) 72 342 T -(onts, k) 76.87 342 T -(e) 100.78 342 T -(y label) 104.64 342 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(93) 131.89 342 T -(F) 72 332 T -(orceLatin1Lookup) 76.87 332 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(82) 146.86 332 T -3 F -(G) 72 312 T -2 F -(Geometry) 72 301 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(3) 110.99 301 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 115.49 301 T -0 0 0 1 0 0 0 K -2 9 Q -(92) 121.49 301 T -(adding elements to) 81 291 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(106) 151.99 291 T -(allocating and freeing components) 81 281 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(110) 208.23 281 T -(bounds, k) 81 271 T -(e) 115.91 271 T -(yboard) 119.77 271 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(93) 147.76 271 T -(bounds, sections) 81 261 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(95) 143.5 261 T -(bounds, shapes) 81 251 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(94) 138.49 251 T -(computing the bounding box of a ro) 81 241 T -(w) 210.27 241 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(106) 219.76 241 T -(computing the bounding box of a section) 81 231 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(106) 231.49 231 T -(computing the bounding box of a shape) 81 221 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(105) 226.49 221 T -(data structures) 81 211 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(98) 136.24 211 T -(data structures, diagram) 81 201 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(98) 170.23 201 T -(doodad types) 81 191 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(96) 131.74 191 T -(doodads) 81 181 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(93) 114 181 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 123 181 T -0 0 0 1 0 0 0 K -2 9 Q -(96) 129 181 T -(doodads in sections) 81 171 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(95) 154.5 171 T -(dra) 81 161 T -(wing a k) 92.36 161 T -(e) 123.26 161 T -(yboard representation) 127.12 161 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(97) 208.35 161 T -(\336nding the o) 81 151 T -(v) 126.37 151 T -(erlay for a k) 130.73 151 T -(e) 174.38 151 T -(y) 178.24 151 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(106) 185.74 151 T -(functions for using) 81 141 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(105) 151.99 141 T -(getting from serv) 81 131 T -(er) 142.86 131 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(104) 152.85 131 T -(k) 81 121 T -(e) 85.41 121 T -(y aliases) 89.27 121 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(93) 123.01 121 T -(k) 81 111 T -(e) 85.41 111 T -(y dra) 89.27 111 T -(wing order) 107.38 111 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(95) 149.62 111 T -(k) 81 101 T -(e) 85.41 101 T -(y label color) 89.27 101 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(93) 137.26 101 T -(k) 81 91 T -(e) 85.41 91 T -(y label font) 89.27 91 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(93) 133.27 91 T -(k) 81 81 T -(e) 85.41 81 T -(yboard color) 89.27 81 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(93) 138.01 81 T -(k) 81 71 T -(e) 85.41 71 T -(yboard with four sections, diagram) 89.27 71 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(94) 218 71 T -(k) 324 714 T -(e) 328.41 714 T -(ys) 332.27 714 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(95) 343.27 714 T -(list of colors) 324 704 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(93) 372 704 T -(outlines) 324 694 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(94) 355.5 694 T -(outlines, diagram) 324 684 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(105) 389.5 684 T -(o) 324 674 T -(v) 328.36 674 T -(erlay k) 332.73 674 T -(e) 357.38 674 T -(ys) 361.24 674 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(96) 372.24 674 T -(o) 324 664 T -(v) 328.36 664 T -(erlay ro) 332.73 664 T -(ws) 360.24 664 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(96) 373.24 664 T -(o) 324 654 T -(v) 328.36 654 T -(erlays) 332.73 654 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(95) 357.22 654 T -(priority) 324 644 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(92) 354 644 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 363 644 T -0 0 0 1 0 0 0 K -2 9 Q -(95) 369 644 T -(priority) 324 634 T -(, doodads) 350.42 634 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(96) 387.91 634 T -(properties) 324 624 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(93) 362.99 624 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 371.99 624 T -0 0 0 1 0 0 0 K -2 9 Q -(106) 377.99 624 T -(rotated k) 324 614 T -(e) 355.65 614 T -(yboard sections) 359.51 614 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(92) 418.76 614 T -(rotated k) 324 604 T -(e) 355.65 604 T -(yboard sections, diagram) 359.51 604 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(92) 452.75 604 T -(ro) 324 594 T -(ws) 331.27 594 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(95) 344.27 594 T -(ro) 324 584 T -(ws in a section, diagram) 331.27 584 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(95) 421.51 584 T -(sections) 324 574 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(93) 356 574 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 365 574 T -0 0 0 1 0 0 0 K -2 9 Q -(95) 371 574 T -(shapes) 324 564 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(93) 350.99 564 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 359.99 564 T -0 0 0 1 0 0 0 K -2 9 Q -(94) 365.99 564 T -(top-le) 324 554 T -(v) 344.77 554 T -(el geometry description) 349.14 554 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(92) 437.12 554 T -(Global K) 315 544 T -(e) 348.02 544 T -(yboard Controls, glossary entry) 351.88 544 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(213) 468.37 544 T -(Grab group) 315 534 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(21) 359.24 534 T -(Grab modi\336ers) 315 524 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(21) 372.24 524 T -(Grab state) 315 514 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(21) 354.74 514 T -(Grab State, glossary entry) 315 504 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(213) 411.48 504 T -(Grabs) 315 494 T -(passi) 324 484 T -(v) 341.77 484 T -(e, ignoring group locks) 346.14 484 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(70) 432.63 484 T -(Group Inde) 315 474 T -(x, glossary entry) 356.1 474 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(213) 418.85 474 T -(Group, glossary entry) 315 464 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(213) 396.24 464 T -(Groups) 315 454 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(20) 344.5 454 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 353.5 454 T -0 0 0 1 0 0 0 K -2 9 Q -(116) 359.5 454 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 373 454 T -0 0 0 1 0 0 0 K -2 9 Q -(117) 379 454 T -(bindings for alternate group hints) 324 444 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(193) 446.99 444 T -(changing) 324 434 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(23) 359.99 434 T -(changing current state via k) 324 424 T -(e) 423.39 424 T -(y actions) 427.25 424 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(145) 462.49 424 T -(compatibility maps) 324 414 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(169) 396.26 414 T -(group action \337ags, table) 324 404 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(146) 413.49 404 T -(group action types, table) 324 394 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(146) 415.49 394 T -(group inde) 324 384 T -(x constants) 362.61 384 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(137) 405.86 384 T -(handling ille) 324 374 T -(g) 369.12 374 T -(al groups) 373.57 374 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(69) 409.82 374 T -(locking via actions) 324 364 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(150) 394.99 364 T -(normalizing groups into range) 324 354 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(20) 435.74 354 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 444.74 354 T -0 0 0 1 0 0 0 K -2 9 Q -(134) 450.74 354 T -(per) 324 344 T -(-k) 335.31 344 T -(e) 342.72 344 T -(y group information) 346.58 344 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(134) 422.08 344 T -(symbolic group names) 324 334 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(23) 408.49 334 T -(treatment of out-of-range groups) 324 324 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(134) 444.72 324 T -(Groups Wrap Control, glossary entry) 315 314 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(213) 451.73 314 T -(GroupsWrap) 315 304 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(53) 364.48 304 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 373.48 304 T -0 0 0 1 0 0 0 K -2 9 Q -(68) 379.48 304 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 388.48 304 T -0 0 0 1 0 0 0 K -2 9 Q -(69) 394.48 304 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 403.48 304 T -0 0 0 1 0 0 0 K -2 9 Q -(72) 409.48 304 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 418.48 304 T -0 0 0 1 0 0 0 K -2 9 Q -(74) 424.48 304 T -3 F -(H) 315 284 T -2 F -(Header \336les) 315 273 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(6) 361.24 273 T -3 F -(I) 315 253 T -2 F -(IgnoreGroupLock) 315 242 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(54) 382.98 242 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 391.98 242 T -0 0 0 1 0 0 0 K -2 9 Q -(68) 397.98 242 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 406.98 242 T -0 0 0 1 0 0 0 K -2 9 Q -(70) 412.98 242 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 421.98 242 T -0 0 0 1 0 0 0 K -2 9 Q -(72) 427.98 242 T -(IgnoreLockMods) 315 232 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(54) 380.49 232 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 389.49 232 T -0 0 0 1 0 0 0 K -2 9 Q -(68) 395.49 232 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 404.49 232 T -0 0 0 1 0 0 0 K -2 9 Q -(69) 410.49 232 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 419.49 232 T -0 0 0 1 0 0 0 K -2 9 Q -(72) 425.49 232 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 434.49 232 T -0 0 0 1 0 0 0 K -2 9 Q -(74) 440.49 232 T -(IgnoreNe) 315 222 T -(wK) 348.76 222 T -(e) 361.53 222 T -(yboards) 365.39 222 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(84) 396.89 222 T -(Implicit support) 315 212 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(87) 375.75 212 T -(Indicator feedback) 315 202 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(198) 385.22 202 T -(Indicator Feedback, glossary entry) 315 192 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(214) 442.47 192 T -(Indicator map) 315 182 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(35) 368.24 182 T -(Indicator Map, glossary entry) 315 172 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(214) 424.48 172 T -(Indicator) 315 162 T -(, glossary entry) 347.13 162 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(214) 405.37 162 T -(Indicators) 315 152 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(3) 353.99 152 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 358.49 152 T -0 0 0 1 0 0 0 K -2 9 Q -(34) 364.49 152 T -(allocating and freeing maps) 324 142 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(45) 426.73 142 T -(changing maps) 324 132 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(42) 381.24 132 T -(changing maps and state) 324 122 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(41) 415.24 122 T -(ComposeLED) 324 112 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(84) 378.5 112 T -(data structures) 324 102 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(34) 379.24 102 T -(ef) 324 92 T -(fects of e) 330.77 92 T -(xplicit changes on) 363.62 92 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(41) 432.11 92 T -(geometry) 324 82 T -(, colors when lit and dark) 357.41 82 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(96) 451.89 82 T -(getting information about from serv) 324 72 T -(er) 452.85 72 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(39) 462.85 72 T -0 0 0 1 0 0 0 K -FMENDPAGE -%%EndPage: "222" 234 -%%Page: "223" 235 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(Inde) 494.95 40.62 T -(x-223) 514.34 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(Inde) 515.12 744.87 T -(x) 534.5 744.87 T -2 9 Q -(getting information by inde) 81 714 T -(x) 179.61 714 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(40) 187.11 714 T -(getting information by name) 81 704 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(40) 186.74 704 T -(getting the state of) 81 694 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(40) 150.74 694 T -(ho) 81 684 T -(w controls af) 89.78 684 T -(fect) 136.54 684 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(39) 153.03 684 T -(ho) 81 674 T -(w groups af) 89.78 674 T -(fect) 132.04 674 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(36) 148.53 674 T -(ho) 81 664 T -(w modi\336ers af) 89.78 664 T -(fect) 141.54 664 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(37) 158.03 664 T -(indicator dri) 81 654 T -(v) 125.02 654 T -(es k) 129.38 654 T -(e) 143.54 654 T -(yboard) 147.4 654 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(35) 175.4 654 T -(k) 81 644 T -(e) 85.41 644 T -(yboard dri) 89.27 644 T -(v) 126.29 644 T -(es indicator) 130.65 644 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(35) 175.4 644 T -(maps) 81 634 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(35) 103 634 T -(names) 81 624 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(34) 107 624 T -(querying names, maps and state) 81 614 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(202) 198.73 614 T -(tracking changes to state or map) 81 604 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(44) 200.23 604 T -(Initializing Xkb) 72 594 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(7) 132.25 594 T -(Input e) 72 584 T -(xtension) 97.11 584 T -(attaching Xkb actions to de) 81 574 T -(vices) 179.26 574 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(198) 200.76 574 T -(Input Extension, glossary entry) 72 564 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(214) 187.49 564 T -(InternalMods) 72 554 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(54) 123.49 554 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 132.49 554 T -0 0 0 1 0 0 0 K -2 9 Q -(68) 138.49 554 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 147.49 554 T -0 0 0 1 0 0 0 K -2 9 Q -(70) 153.49 554 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 162.49 554 T -0 0 0 1 0 0 0 K -2 9 Q -(72) 168.49 554 T -(ISO9995 standard) 72 544 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(116) 140.24 544 T -3 F -(K) 72 524 T -2 F -(KbdFeedbackClass) 72 513 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(48) 144.49 513 T -(K) 72 503 T -(e) 78.27 503 T -(y Action, glossary entry) 82.13 503 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(214) 171.62 503 T -(K) 72 493 T -(e) 78.27 493 T -(y actions) 82.13 493 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(141) 117.38 493 T -(independence of modi\336er state) 81 483 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(117) 194.73 483 T -(K) 72 473 T -(e) 78.27 473 T -(y Alias, glossary entry) 82.13 473 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(214) 166.12 473 T -(K) 72 463 T -(e) 78.27 463 T -(y aliases) 82.13 463 T -(geometry) 81 453 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(93) 117.99 453 T -(names array) 81 443 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(181) 127.73 443 T -(K) 72 433 T -(e) 78.27 433 T -(y Beha) 82.13 433 T -(vior) 107.2 433 T -(, glossary entry) 121.34 433 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(215) 179.58 433 T -(K) 72 423 T -(e) 78.27 423 T -(y e) 82.13 423 T -(v) 92.65 423 T -(ents) 97.02 423 T -(interpreting) 81 413 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(87) 125.99 413 T -(Xkb \336ltering out-of-range k) 81 403 T -(e) 181.14 403 T -(ycodes) 185 403 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(188) 213 403 T -(K) 72 393 T -(e) 78.27 393 T -(y symbol map) 82.13 393 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(133) 136.14 393 T -(K) 72 383 T -(e) 78.27 383 T -(y Symbol Map, glossary entry) 82.13 383 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(215) 193.88 383 T -(K) 72 373 T -(e) 78.27 373 T -(y T) 82.13 373 T -(ype, glossary entry) 93.66 373 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(213) 164.9 373 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 178.4 373 T -0 0 0 1 0 0 0 K -2 9 Q -(215) 184.4 373 T -(K) 72 363 T -(e) 78.27 363 T -(y types) 82.13 363 T -(ALPHABETIC) 81 353 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(130) 140 353 T -(and shift le) 81 343 T -(v) 120.77 343 T -(els) 125.14 343 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(117) 138.13 343 T -(canonical) 81 333 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(129) 118.49 333 T -(canonical k) 81 323 T -(e) 122.15 323 T -(y types, initializing) 126.01 323 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(131) 198.26 323 T -(canonical, used in compatibility map) 81 313 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(176) 216.74 313 T -(changing the number of le) 81 303 T -(v) 175.26 303 T -(els in) 179.62 303 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(132) 201.87 303 T -(cop) 81 293 T -(ying k) 93.91 293 T -(e) 116.57 293 T -(y type data structures) 120.43 293 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(132) 200.16 293 T -(getting from the serv) 81 283 T -(er) 156.1 283 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(131) 166.1 283 T -(KEYP) 81 273 T -(AD) 103.67 273 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(130) 119.67 273 T -(names) 81 263 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(128) 107 263 T -(of) 81 253 T -(fset in symbol map) 88.27 253 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(135) 160.02 253 T -(ONE_LEVEL) 81 243 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(129) 135.49 243 T -(per) 81 233 T -(-k) 92.31 233 T -(e) 99.72 233 T -(y k) 103.58 233 T -(e) 114.74 233 T -(y types indices) 118.6 233 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(133) 175.1 233 T -(TW) 81 223 T -(O_LEVEL) 94.9 223 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(129) 137.4 223 T -(width \050number of shift le) 81 213 T -(v) 170.77 213 T -(els\051) 175.13 213 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(135) 191.13 213 T -(K) 72 203 T -(e) 78.27 203 T -(y types, e) 82.13 203 T -(xample) 116.24 203 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(128) 145.74 203 T -(K) 72 193 T -(e) 78.27 193 T -(y W) 82.13 193 T -(idth, glossary entry) 97.02 193 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(213) 169.27 193 T -(K) 72 183 T -(e) 78.27 183 T -(y W) 82.13 183 T -(idth, K) 97.02 183 T -(e) 121.8 183 T -(y T) 125.66 183 T -(ype W) 137.19 183 T -(idth, glossary entry) 160.57 183 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(215) 232.82 183 T -(K) 72 173 T -(e) 78.27 173 T -(yboard) 82.13 173 T -(components, serv) 81 163 T -(er database) 143.86 163 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(190) 187.09 163 T -(feedback) 81 153 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(198) 116.48 153 T -(geometry) 81 143 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(92) 117.99 143 T -(geometry sections) 81 133 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(93) 149.24 133 T -(IgnoreNe) 81 123 T -(wK) 114.76 123 T -(e) 127.53 123 T -(yboards) 131.39 123 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(84) 162.88 123 T -(names) 81 113 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(180) 107 113 T -(replacing on the \337y) 81 103 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(187) 153.74 103 T -(symbolic name) 81 93 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(93) 138.75 93 T -(unresponsi) 81 83 T -(v) 119.77 83 T -(eness because of Slo) 124.14 83 T -(wK) 198.14 83 T -(e) 210.91 83 T -(ys) 214.78 83 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(62) 225.78 83 T -(K) 72 73 T -(e) 78.27 73 T -(yboard Bells, glossary entry) 82.13 73 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(215) 186.12 73 T -(K) 315 714 T -(e) 321.27 714 T -(yboard Components, glossary entry) 325.13 714 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(215) 456.12 714 T -(K) 315 704 T -(e) 321.27 704 T -(yboard controls) 325.13 704 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(53) 384.38 704 T -(for ph) 324 694 T -(ysically-impaired persons) 345.7 694 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(61) 441.43 694 T -(tracking changes) 324 684 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(79) 387.73 684 T -(K) 315 674 T -(e) 321.27 674 T -(yboard description) 325.13 674 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(2) 395.37 674 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 399.87 674 T -0 0 0 1 0 0 0 K -2 9 Q -(27) 405.87 674 T -(allocating and freeing) 324 664 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(28) 405.48 664 T -(b) 324 654 T -(uilding from serv) 328.32 654 T -(er database) 390.68 654 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(193) 433.91 654 T -(changing) 324 644 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(12) 359.99 644 T -(getting from serv) 324 634 T -(er) 385.86 634 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(28) 395.85 634 T -(updating library description) 324 624 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(90) 426.99 624 T -(K) 315 614 T -(e) 321.27 614 T -(yboard Feedback, glossary entry) 325.13 614 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(215) 445.11 614 T -(K) 315 604 T -(e) 321.27 604 T -(yboard Geometry Name, glossary entry) 325.13 604 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(216) 470.35 604 T -(K) 315 594 T -(e) 321.27 594 T -(yboard Geometry) 325.13 594 T -(, glossary entry) 387.78 594 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(216) 446.02 594 T -(K) 315 584 T -(e) 321.27 584 T -(yboard mapping) 325.13 584 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(116) 386.88 584 T -(client map) 324 574 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(116) 364.75 574 T -(serv) 324 564 T -(er map) 338.86 564 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(116) 366.6 564 T -(shift le) 324 554 T -(v) 348.52 554 T -(els and groups, diagram) 352.89 554 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(117) 441.88 554 T -(K) 315 544 T -(e) 321.27 544 T -(yboard state) 325.13 544 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(19) 371.87 544 T -(base group) 324 534 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(20) 366.24 534 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 375.24 534 T -0 0 0 1 0 0 0 K -2 9 Q -(211) 381.24 534 T -(base modi\336ers) 324 524 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(20) 379.24 524 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 388.24 524 T -0 0 0 1 0 0 0 K -2 9 Q -(211) 394.24 524 T -(compatibility states) 324 514 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(22) 397.25 514 T -(description) 324 504 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(19) 367 504 T -(determining) 324 494 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(23) 370.5 494 T -(ef) 324 484 T -(fecti) 330.77 484 T -(v) 346.54 484 T -(e group) 350.9 484 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(20) 381.14 484 T -(ef) 324 474 T -(fecti) 330.77 474 T -(v) 346.54 474 T -(e modi\336ers) 350.9 474 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(20) 394.15 474 T -(grab state) 324 464 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(21) 361.74 464 T -(k) 324 454 T -(e) 328.41 454 T -(ysym groups) 332.27 454 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(20) 381.52 454 T -(lookup state) 324 444 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(21) 370.75 444 T -(modi\336ers) 324 434 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(20) 361 434 T -(tracking) 324 424 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(24) 356.49 424 T -(K) 315 414 T -(e) 321.27 414 T -(yboard State, glossary entry) 325.13 414 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(216) 428.62 414 T -(K) 315 404 T -(e) 321.27 404 T -(yClass) 325.13 404 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(10) 352.14 404 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 361.14 404 T -0 0 0 1 0 0 0 K -2 9 Q -(157) 367.14 404 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 380.64 404 T -0 0 0 1 0 0 0 K -2 9 Q -(198) 386.64 404 T -(K) 315 394 T -(e) 321.27 394 T -(ycode Name, glossary entry) 325.13 394 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(216) 428.61 394 T -(K) 315 384 T -(e) 321.27 384 T -(ycode to string translation) 325.13 384 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(82) 421.88 384 T -(K) 315 374 T -(e) 321.27 374 T -(ycode, glossary entry) 325.13 374 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(216) 404.87 374 T -(K) 315 364 T -(e) 321.27 364 T -(ycodes) 325.13 364 T -(actions for generating a dif) 324 354 T -(ferent k) 420.75 354 T -(e) 448.4 354 T -(ycode for k) 452.26 354 T -(e) 493.15 354 T -(y) 497.02 354 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(156) 504.52 354 T -(\336nding k) 324 344 T -(e) 356.17 344 T -(ysym bound to) 360.03 344 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(89) 416.53 344 T -(k) 324 334 T -(e) 328.41 334 T -(ys which report more than one k) 332.27 334 T -(e) 448.66 334 T -(ycode) 452.52 334 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(58) 477.01 334 T -(translating k) 324 324 T -(e) 368.66 324 T -(ycode to symbol and modi\336ers) 372.52 324 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(91) 486.52 324 T -(Xkb \336ltering out-of-range k) 324 314 T -(e) 424.14 314 T -(y e) 428 314 T -(v) 438.52 314 T -(ents) 442.89 314 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(188) 460.39 314 T -(K) 315 304 T -(e) 321.27 304 T -(ymap) 325.13 304 T -(allocating and freeing) 324 294 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(123) 405.48 294 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 418.98 294 T -0 0 0 1 0 0 0 K -2 9 Q -(124) 424.98 294 T -(changing map components) 324 284 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(120) 423.49 284 T -(client map) 324 274 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(126) 364.75 274 T -(functions) 324 264 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(89) 360.5 264 T -(getting map components from the serv) 324 254 T -(er) 462.6 254 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(118) 472.59 254 T -(getting partial map components from the serv) 324 244 T -(er) 487.85 244 T -(, table) 494.48 244 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(118) 519.47 244 T -(tracking changes to) 324 234 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(122) 396.98 234 T -(K) 315 224 T -(e) 321.27 224 T -(ys) 325.13 224 T -(actions) 324 214 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(141) 352.5 214 T -(aliases) 324 204 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(93) 350.99 204 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 359.99 204 T -0 0 0 1 0 0 0 K -2 9 Q -(181) 365.99 204 T -(beha) 324 194 T -(vior) 340.81 194 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(118) 358.31 194 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 371.81 194 T -0 0 0 1 0 0 0 K -2 9 Q -(161) 377.81 194 T -(beha) 324 184 T -(viors, table) 340.81 184 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(161) 383.81 184 T -(bindings hints) 324 174 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(193) 377.76 174 T -(changing number of actions bound to k) 324 164 T -(e) 464.89 164 T -(y) 468.76 164 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(160) 476.26 164 T -(changing number of groups and types for) 324 154 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(137) 475.47 154 T -(changing the number of symbols bound to) 324 144 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(138) 478.99 144 T -(\336nding k) 324 134 T -(e) 356.17 134 T -(ysym bound to) 360.03 134 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(89) 416.53 134 T -(\336nding symbol for k) 324 124 T -(e) 397.67 124 T -(y with a particular state) 401.53 124 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(89) 489.01 124 T -(for generating a dif) 324 114 T -(ferent k) 393 114 T -(e) 420.65 114 T -(ycode for k) 424.51 114 T -(e) 465.41 114 T -(y) 469.27 114 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(156) 476.77 114 T -(geometry) 324 104 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(95) 360.99 104 T -(geometry) 324 94 T -(, dra) 357.41 94 T -(wing order) 373.27 94 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(95) 415.51 94 T -(getting per) 324 84 T -(-k) 362.57 84 T -(e) 369.97 84 T -(y modi\336er map from serv) 373.83 84 T -(er) 465.69 84 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(139) 475.68 84 T -(getting the symbol map from the serv) 324 74 T -(er) 458.86 74 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(136) 468.85 74 T -0 0 0 1 0 0 0 K -FMENDPAGE -%%EndPage: "223" 235 -%%Page: "224" 236 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(Inde) 494.95 40.62 T -(x-224) 514.34 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(Inde) 515.12 744.87 T -(x) 534.5 744.87 T -2 9 Q -(label font and color) 81 714 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(93) 154.24 714 T -(obtaining k) 81 704 T -(e) 121.66 704 T -(y actions for k) 125.52 704 T -(e) 177.17 704 T -(ys from serv) 181.04 704 T -(er) 225.89 704 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(160) 235.88 704 T -(obtaining k) 81 694 T -(e) 121.66 694 T -(y beha) 125.52 694 T -(viors from the serv) 149.09 694 T -(er) 217.19 694 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(162) 227.18 694 T -(of) 81 684 T -(fset in symbol map) 88.27 684 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(135) 160.02 684 T -(o) 81 674 T -(v) 85.36 674 T -(erlay geometry) 89.73 674 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(96) 146.96 674 T -(per) 81 664 T -(-k) 92.31 664 T -(e) 99.72 664 T -(y group information) 103.58 664 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(134) 179.08 664 T -(per) 81 654 T -(-k) 92.31 654 T -(e) 99.72 654 T -(y modi\336er map) 103.58 654 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(138) 161.58 654 T -(symbolic names) 81 644 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(181) 142.25 644 T -(types) 81 634 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(127) 103 634 T -(width \050number of shift le) 81 624 T -(v) 170.77 624 T -(els\051) 175.13 624 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(135) 191.13 624 T -(K) 72 614 T -(e) 78.27 614 T -(ysym group) 82.13 614 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(20) 127.88 614 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 136.88 614 T -0 0 0 1 0 0 0 K -2 9 Q -(116) 142.88 614 T -(K) 72 604 T -(e) 78.27 604 T -(ysym Group, glossary entry) 82.13 604 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(214) 185.12 604 T -(K) 72 594 T -(e) 78.27 594 T -(ysyms) 82.13 594 T -(\336nding modi\336er set bound to k) 81 584 T -(e) 192.17 584 T -(ysym) 196.03 584 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(89) 218.53 584 T -(\336nding symbol for k) 81 574 T -(e) 154.66 574 T -(y with a particular state) 158.53 574 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(89) 246.01 574 T -(to string translation control) 81 564 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(83) 181.75 564 T -(translating k) 81 554 T -(e) 125.66 554 T -(ycode to symbol and modi\336ers) 129.52 554 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(91) 243.52 554 T -3 F -(L) 72 534 T -2 F -(Latched Group, glossary entry) 72 523 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(216) 184.48 523 T -(Latched Modi\336er) 72 513 T -(, glossary entry) 134.38 513 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(216) 192.62 513 T -(LatchT) 72 503 T -(oLock) 97.27 503 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(68) 123.27 503 T -(Latin1 character set lookup) 72 493 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(82) 173.23 493 T -(LED, glossary entry) 72 483 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(216) 147.74 483 T -(Le) 72 473 T -(v) 81.27 473 T -(els) 85.64 473 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(116) 98.63 473 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 112.13 473 T -0 0 0 1 0 0 0 K -2 9 Q -(117) 118.13 473 T -(and k) 81 463 T -(e) 100.66 463 T -(y types) 104.52 463 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(117) 133.27 463 T -(changing the number in a k) 81 453 T -(e) 179.15 453 T -(y type) 183.01 453 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(132) 208.25 453 T -(k) 81 443 T -(e) 85.41 443 T -(y types) 89.27 443 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(127) 118.02 443 T -(names) 81 433 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(128) 107 433 T -(Linking with the Xkb e) 72 423 T -(xtension) 155.86 423 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(6) 189.36 423 T -(Lock) 72 413 T -(ed Group, glossary entry) 90.4 413 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(216) 182.39 413 T -(Lock) 72 403 T -(ed Modi\336ers, glossary entry) 90.4 403 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(216) 194.39 403 T -(Lookup group) 72 393 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(21) 126.25 393 T -(Lookup modi\336ers) 72 383 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(21) 139.25 383 T -(Lookup state) 72 373 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(21) 121.75 373 T -(Lookup State, glossary entry) 72 363 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(217) 178.49 363 T -3 F -(M) 72 343 T -2 F -(Major opcode) 72 332 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(7) 125.24 332 T -(map) 72 322 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(3) 90.5 322 T -(MappingNotify) 72 312 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(84) 131 312 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 140 312 T -0 0 0 1 0 0 0 K -2 9 Q -(87) 146 312 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 155 312 T -0 0 0 1 0 0 0 K -2 9 Q -(88) 161 312 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 170 312 T -0 0 0 1 0 0 0 K -2 9 Q -(175) 176 312 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 189.5 312 T -0 0 0 1 0 0 0 K -2 9 Q -(178) 195.5 312 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 209 312 T -0 0 0 1 0 0 0 K -2 9 Q -(188) 215 312 T -(Messages) 72 302 T -(actions for generating) 81 292 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(155) 162.48 292 T -(detecting k) 81 282 T -(e) 120.65 282 T -(y action messages) 124.51 282 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(155) 192.5 282 T -(Modi\336er De\336nition, glossary entry) 72 272 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(217) 200.5 272 T -(Modi\336er K) 72 262 T -(e) 112.02 262 T -(y) 115.88 262 T -(, glossary entry) 119.8 262 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(217) 178.04 262 T -(Modi\336er) 72 252 T -(, glossary entry) 103.14 252 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(217) 161.38 252 T -(Modi\336ers) 72 242 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(20) 110 242 T -(action \337ags) 81 232 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(145) 125.25 232 T -(action types, table) 81 222 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(144) 149.24 222 T -(actions for changing the state of) 81 212 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(143) 199.23 212 T -(bindings for modi\336er k) 81 202 T -(e) 164.16 202 T -(ys hints) 168.02 202 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(193) 198.78 202 T -(changing the state via k) 81 192 T -(e) 165.9 192 T -(y actions) 169.76 192 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(144) 205.01 192 T -(consume lookup modi\336ers control) 81 182 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(82) 207.25 182 T -(ef) 81 172 T -(fecti) 87.77 172 T -(v) 103.54 172 T -(e mask) 107.9 172 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(31) 136.15 172 T -(\336nding modi\336er set bound to k) 81 162 T -(e) 192.17 162 T -(ysym) 196.03 162 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(89) 218.53 162 T -(forcing shift and lock to be consumed) 81 152 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(83) 219.98 152 T -(getting per) 81 142 T -(-k) 119.57 142 T -(e) 126.97 142 T -(y map from serv) 130.83 142 T -(er) 189.94 142 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(139) 199.93 142 T -(in actions to generate dif) 81 132 T -(ferent k) 169.76 132 T -(e) 197.41 132 T -(ycode for k) 201.27 132 T -(e) 242.16 132 T -(y) 246.02 132 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(157) 253.52 132 T -(inacti) 81 122 T -(v) 100.77 122 T -(e virtual modi\336ers) 105.14 122 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(32) 174.13 122 T -(k) 81 112 T -(e) 85.41 112 T -(y action independent of) 89.27 112 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(117) 177.01 112 T -(k) 81 102 T -(e) 85.41 102 T -(y types containing) 89.27 102 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(127) 158.27 102 T -(locking via actions) 81 92 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(150) 151.99 92 T -(masks) 81 82 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(22) 106.5 82 T -(modi\336er de\336nition) 81 72 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(30) 151.26 72 T -(names and masks) 324 714 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(30) 389.99 714 T -(per) 324 704 T -(-k) 335.31 704 T -(e) 342.72 704 T -(y modi\336er map) 346.58 704 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(138) 404.58 704 T -(preserv) 324 694 T -(e \336eld) 350.35 694 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(128) 375.6 694 T -(pre) 324 684 T -(v) 335.27 684 T -(enting from being consumed) 339.63 684 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(128) 445.87 684 T -(real) 324 674 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(30) 340.49 674 T -(specifying which should be consumed by serv) 324 664 T -(er) 489.84 664 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(70) 499.84 664 T -(translating k) 324 654 T -(e) 368.66 654 T -(ycode to symbol and modi\336ers) 372.52 654 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(91) 486.52 654 T -(virtual) 324 644 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(30) 350.5 644 T -(virtual modi\336er serv) 324 634 T -(er mapping) 397.36 634 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(164) 441.1 634 T -(MotionNotify) 315 624 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(147) 368 624 T -(Mouse) 315 614 T -(using from the k) 324 604 T -(e) 383.16 604 T -(yboard) 387.02 604 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(59) 415.01 604 T -(MouseK) 315 594 T -(e) 345.77 594 T -(ys) 349.63 594 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(53) 360.63 594 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 369.63 594 T -0 0 0 1 0 0 0 K -2 9 Q -(59) 375.63 594 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 384.63 594 T -0 0 0 1 0 0 0 K -2 9 Q -(72) 390.63 594 T -(acceleration, diagram) 324 584 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(61) 404.47 584 T -(changing b) 324 574 T -(utton number simulated by mouse k) 363.56 574 T -(e) 492.72 574 T -(ys) 496.58 574 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(149) 507.58 574 T -(MouseK) 315 564 T -(e) 345.77 564 T -(ysAccel) 349.63 564 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(53) 381.62 564 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 390.62 564 T -0 0 0 1 0 0 0 K -2 9 Q -(59) 396.62 564 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 405.62 564 T -0 0 0 1 0 0 0 K -2 9 Q -(73) 411.62 564 T -(absolute pointer motion) 324 554 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(60) 412.5 554 T -(\336elds, table) 324 544 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(59) 368.5 544 T -(relati) 324 534 T -(v) 342.27 534 T -(e pointer motion) 346.64 534 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(60) 409.13 534 T -3 F -(N) 315 514 T -2 F -(Names) 315 503 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(3) 342.99 503 T -(allocating and freeing symbolic names) 324 493 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(186) 465.98 493 T -(changing symbolic names on serv) 324 483 T -(er) 445.85 483 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(183) 455.84 483 T -(getting k) 324 473 T -(e) 355.66 473 T -(yboard description by component e) 359.52 473 T -(xpression) 486.37 473 T -(names) 342 463 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(194) 367.99 463 T -(getting symbolic names from serv) 324 453 T -(er) 446.36 453 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(183) 456.35 453 T -(shift le) 324 443 T -(v) 348.52 443 T -(el) 352.89 443 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(128) 362.39 443 T -(symbolic) 324 433 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(180) 360 433 T -(symbolic k) 324 423 T -(e) 363.66 423 T -(yboard) 367.52 423 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(93) 395.52 423 T -(symbolic names masks, table) 324 413 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(182) 431.99 413 T -(tracking changes) 324 403 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(185) 387.73 403 T -(types) 324 393 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(128) 346 393 T -(Ne) 315 383 T -(wK) 325.27 383 T -(e) 338.04 383 T -(yboardNotify) 341.9 383 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(84) 393.39 383 T -(Non-k) 315 373 T -(e) 337.9 373 T -(yboard Extension De) 341.77 373 T -(vice, glossary entry) 417.53 373 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(217) 490.76 373 T -(Normalizing groups) 315 363 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(20) 390.24 363 T -3 F -(O) 315 343 T -2 F -(Outlines) 315 332 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(94) 348.5 332 T -(approximation) 324 322 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(94) 379.5 322 T -(primary) 324 312 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(94) 355.49 312 T -(Outlines, glossary entry) 315 302 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(217) 403.74 302 T -(Ov) 315 292 T -(erlays) 325.86 292 T -(controls) 324 282 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(58) 356 282 T -(geometry k) 324 272 T -(e) 364.65 272 T -(ys) 368.51 272 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(96) 379.52 272 T -(geometry ro) 324 262 T -(ws) 367.52 262 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(96) 380.51 262 T -(geometry) 324 252 T -(, \336nding the o) 357.41 252 T -(v) 407.28 252 T -(erlay for a k) 411.64 252 T -(e) 455.28 252 T -(y) 459.14 252 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(106) 466.64 252 T -(in geometry sections) 324 242 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(95) 401.49 242 T -(Ov) 324 232 T -(erlay1 and Ov) 334.86 232 T -(erlay2 controls) 385.71 232 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(53) 442.45 232 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 451.45 232 T -0 0 0 1 0 0 0 K -2 9 Q -(73) 457.45 232 T -3 F -(P) 315 212 T -2 F -(PerK) 315 201 T -(e) 333.27 201 T -(yRepeat) 337.13 201 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(53) 369.62 201 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 378.62 201 T -0 0 0 1 0 0 0 K -2 9 Q -(56) 384.62 201 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 393.62 201 T -0 0 0 1 0 0 0 K -2 9 Q -(73) 399.62 201 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 408.62 201 T -0 0 0 1 0 0 0 K -2 9 Q -(76) 414.62 201 T -(Ph) 315 191 T -(ysical Indicator Mask, glossary entry) 324.46 191 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(217) 460.69 191 T -(Ph) 315 181 T -(ysical Symbol K) 324.46 181 T -(e) 384.24 181 T -(yboard Name, glossary entry) 388.1 181 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(217) 495.08 181 T -(Pointer) 315 171 T -(b) 324 161 T -(uttons) 328.32 161 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(20) 353.33 161 T -(changing b) 324 151 T -(utton number simulated by mouse k) 363.56 151 T -(e) 492.72 151 T -(ys) 496.58 151 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(149) 507.58 151 T -(motion, absolute) 324 141 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(60) 387 141 T -(motion, relati) 324 131 T -(v) 372.28 131 T -(e) 376.64 131 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(60) 383.64 131 T -(mo) 324 121 T -(ving via actions) 335.37 121 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(147) 395.36 121 T -(pointer action types, table) 324 111 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(147) 419.99 111 T -(pointer b) 324 101 T -(utton action \337ags, table) 356.07 101 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(149) 443.06 101 T -(pointer b) 324 91 T -(utton action types, table) 356.07 91 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(149) 445.06 91 T -(simulating pointer b) 324 81 T -(uttons via k) 396.32 81 T -(e) 438.24 81 T -(y actions) 442.1 81 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(148) 477.35 81 T -(Preserv) 315 71 T -(ed Modi\336er) 341.86 71 T -(, glossary entry) 383.74 71 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(217) 441.98 71 T -0 0 0 1 0 0 0 K -FMENDPAGE -%%EndPage: "224" 236 -%%Page: "225" 237 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(Inde) 494.95 40.62 T -(x-225) 514.34 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(Inde) 515.12 744.87 T -(x) 534.5 744.87 T -2 9 Q -(Preserving modi\336ers from being consumed) 72 714 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(128) 230.48 714 T -(Priority) 72 704 T -(doodads) 81 694 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(96) 114 694 T -(geometry) 81 684 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(92) 117.99 684 T -(sections) 81 674 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(95) 113 674 T -(Properties) 72 664 T -(geometry) 81 654 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(106) 117.99 654 T -(Protocol errors) 72 644 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(9) 128.74 644 T -(added by Xkb) 81 634 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(4) 134.49 634 T -3 F -(R) 72 614 T -2 F -(Radio Group, glossary entry) 72 603 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(218) 176.99 603 T -(Radio groups) 72 593 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(3) 123.25 593 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 127.75 593 T -0 0 0 1 0 0 0 K -2 9 Q -(161) 133.75 593 T -(names) 81 583 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(182) 107 583 T -(Real Modi\336er) 72 573 T -(, glossary entry) 121.89 573 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(218) 180.13 573 T -(Real modi\336ers) 72 563 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(30) 127.75 563 T -(RedirectIntoRange) 72 553 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(69) 142.99 553 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 151.99 553 T -0 0 0 1 0 0 0 K -2 9 Q -(74) 157.99 553 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 166.99 553 T -0 0 0 1 0 0 0 K -2 9 Q -(134) 172.99 553 T -(Remapping) 72 543 T -(a) 81 533 T -(v) 84.82 533 T -(oiding automatic by serv) 89.14 533 T -(er) 178.24 533 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(163) 188.24 533 T -(repeat_delay) 72 523 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(75) 120.98 523 T -(repeat_interv) 72 513 T -(al) 119.26 513 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(75) 128.76 513 T -(Repeating k) 72 503 T -(e) 115.15 503 T -(ys) 119.02 503 T -(controls) 81 493 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(56) 113 493 T -(detecting) 81 483 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(57) 116.99 483 T -(RepeatK) 72 473 T -(e) 103.27 473 T -(ys) 107.13 473 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(53) 118.13 473 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 127.13 473 T -0 0 0 1 0 0 0 K -2 9 Q -(56) 133.13 473 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 142.13 473 T -0 0 0 1 0 0 0 K -2 9 Q -(73) 148.13 473 T -(Ro) 72 463 T -(ws) 82.28 463 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(95) 95.28 463 T -(geometry) 81 453 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(95) 117.99 453 T -(o) 81 443 T -(v) 85.36 443 T -(erlay) 89.73 443 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(96) 110.72 443 T -3 F -(S) 72 423 T -2 F -(Sections) 72 412 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(93) 105.5 412 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 114.5 412 T -0 0 0 1 0 0 0 K -2 9 Q -(95) 120.5 412 T -(doodads in) 81 402 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(95) 123.25 402 T -(o) 81 392 T -(v) 85.36 392 T -(erlays) 89.73 392 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(95) 114.22 392 T -(priority) 81 382 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(95) 111 382 T -(Serv) 72 372 T -(er) 88.36 372 T -(a) 81 362 T -(v) 84.82 362 T -(oiding automatic remapping by) 89.14 362 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(163) 204.88 362 T -(Serv) 72 352 T -(er database) 88.36 352 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(190) 131.59 352 T -(changing map components) 81 342 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(120) 180.49 342 T -(class\050member\051 form) 81 332 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(191) 156.73 332 T -(complete and partial entries) 81 322 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(190) 183.73 322 T -(component hints) 81 312 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(192) 143.75 312 T -(component names) 81 302 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(191) 149.24 302 T -(getting k) 81 292 T -(e) 112.66 292 T -(y types) 116.52 292 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(131) 145.27 292 T -(getting map components from) 81 282 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(118) 192.24 282 T -(getting partial map components from, table) 81 272 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(118) 239.48 272 T -(listing k) 81 262 T -(e) 110.17 262 T -(yboard components) 114.03 262 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(191) 187.77 262 T -(obtaining virtual modi\336er bindings from) 81 252 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(165) 229.5 252 T -(virtual modi\336er de\336nitions) 81 242 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(164) 180.51 242 T -(Serv) 72 232 T -(er interaction with clients, diagram) 88.36 232 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(167) 217.09 232 T -(Serv) 72 222 T -(er Internal Modi\336ers, glossary entry) 88.36 222 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(218) 221.09 222 T -(Serv) 72 212 T -(er map) 88.36 212 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(2) 116.1 212 T -(allocating and freeing) 81 202 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(124) 162.48 202 T -(k) 81 192 T -(e) 85.41 192 T -(yboard mapping) 89.27 192 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(116) 151.01 192 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 164.51 192 T -0 0 0 1 0 0 0 K -2 9 Q -(140) 170.51 192 T -(Shapes) 72 182 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(93) 100.5 182 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 109.5 182 T -0 0 0 1 0 0 0 K -2 9 Q -(94) 115.5 182 T -(Shift Le) 72 172 T -(v) 101.03 172 T -(el, glossary entry) 105.39 172 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(218) 170.13 172 T -(Shift le) 72 162 T -(v) 98.03 162 T -(els) 102.39 162 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(116) 115.39 162 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 128.89 162 T -0 0 0 1 0 0 0 K -2 9 Q -(117) 134.89 162 T -(and k) 81 152 T -(e) 100.66 152 T -(y types) 104.52 152 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(117) 133.27 152 T -(changing the number of in a k) 81 142 T -(e) 188.89 142 T -(y type) 192.75 142 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(132) 218 142 T -(k) 81 132 T -(e) 85.41 132 T -(y types) 89.27 132 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(127) 118.02 132 T -(names) 81 122 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(128) 107 122 T -(Slo) 72 112 T -(wK) 83.78 112 T -(e) 96.55 112 T -(ys) 100.41 112 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(53) 111.41 112 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 120.41 112 T -0 0 0 1 0 0 0 K -2 9 Q -(65) 126.41 112 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 135.41 112 T -0 0 0 1 0 0 0 K -2 9 Q -(73) 141.41 112 T -(acceptance delay) 81 102 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(65) 145.22 102 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 154.22 102 T -0 0 0 1 0 0 0 K -2 9 Q -(75) 160.22 102 T -(Standard, ISO9995) 72 92 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(116) 143.99 92 T -(State Field, glossary entry) 72 82 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(218) 169 82 T -(Stick) 72 72 T -(yK) 90.37 72 T -(e) 101.14 72 T -(ys) 105 72 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(53) 116 72 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 125 72 T -0 0 0 1 0 0 0 K -2 9 Q -(67) 131 72 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 140 72 T -0 0 0 1 0 0 0 K -2 9 Q -(73) 146 72 T -(automatically turning of) 324 714 T -(f) 410.77 714 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(68) 416.77 714 T -(locking a modi\336er) 324 704 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(68) 393 704 T -(Symbol K) 315 694 T -(e) 351.53 694 T -(yboard Name, glossary entry) 355.39 694 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(218) 462.37 694 T -(Symbolic Name, glossary entry) 315 684 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(218) 431.49 684 T -(Symbolic names) 315 674 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(180) 377.75 674 T -3 F -(T) 315 654 T -2 F -(T) 315 643 T -(ranslating) 320.18 643 T -(series of k) 324 633 T -(e) 360.9 633 T -(ysyms to string) 364.76 633 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(82) 422.77 633 T -(single k) 324 623 T -(e) 352.16 623 T -(ycode to string) 356.02 623 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(82) 412.52 623 T -(T) 315 613 T -(w) 319.78 613 T -(oK) 326.19 613 T -(e) 336.96 613 T -(ys) 340.82 613 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(68) 351.82 613 T -3 F -(V) 315 593 T -2 F -(V) 315 582 T -(aluator) 320.5 582 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(159) 348.49 582 T -(V) 315 572 T -(aluator action) 320.5 572 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(159) 372.74 572 T -(V) 315 562 T -(aluator) 320.5 562 T -(, glossary entry) 345.13 562 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(218) 403.37 562 T -(V) 315 552 T -(ersion, determining) 320.5 552 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(6) 393.49 552 T -(V) 315 542 T -(irtual Modi\336er Mapping, glossary entry) 320.96 542 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(218) 466.7 542 T -(V) 315 532 T -(irtual Modi\336er) 320.96 532 T -(, glossary entry) 373.35 532 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(218) 431.59 532 T -(V) 315 522 T -(irtual modi\336ers) 320.96 522 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(30) 379.21 522 T -(con) 324 512 T -(v) 336.64 512 T -(entions for names) 341 512 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(32) 407.99 512 T -(data structure relationships, diagram) 324 502 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(165) 457.98 502 T -(ef) 324 492 T -(fecti) 330.77 492 T -(v) 346.54 492 T -(e mask) 350.9 492 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(31) 379.15 492 T -(e) 324 482 T -(xample) 327.86 482 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(32) 357.36 482 T -(inacti) 324 472 T -(v) 343.77 472 T -(e) 348.14 472 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(32) 355.13 472 T -(k) 324 462 T -(e) 328.41 462 T -(y mapping) 332.27 462 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(31) 373.52 462 T -(master modi\336er de\336nitions) 324 452 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(31) 424 452 T -(modi\336er de\336nition) 324 442 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(30) 394.26 442 T -(names and masks) 324 432 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(30) 389.99 432 T -(obtaining bindings from serv) 324 422 T -(er) 428.11 422 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(165) 438.11 422 T -(serv) 324 412 T -(er mapping) 338.86 412 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(164) 382.6 412 T -(V) 315 402 T -(isual bells, generating) 320.96 402 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(47) 402.7 402 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 411.7 402 T -0 0 0 1 0 0 0 K -2 9 Q -(52) 417.7 402 T -3 F -(W) 315 382 T -2 F -(W) 315 371 T -(ant and need components, table) 322.78 371 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(195) 439.01 371 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 452.51 371 T -0 0 0 1 0 0 0 K -2 9 Q -(197) 458.51 371 T -(WrapIntoRange) 315 361 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(69) 375.48 361 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 384.48 361 T -0 0 0 1 0 0 0 K -2 9 Q -(74) 390.48 361 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 399.48 361 T -0 0 0 1 0 0 0 K -2 9 Q -(134) 405.48 361 T -3 F -(X) 315 341 T -2 F -(X library controls) 315 330 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(82) 381.99 330 T -(X library functions af) 315 320 T -(fected by Xkb) 392.51 320 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(88) 446.49 320 T -(X serv) 315 310 T -(er v) 338.61 310 T -(ersion required) 352.21 310 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(1) 409.45 310 T -(XChangeDe) 315 300 T -(viceNotify) 359.26 300 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(187) 400.76 300 T -(XEv) 315 290 T -(ent) 331.36 290 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(18) 345.36 290 T -(Xkb) 315 280 T -(attaching actions to input e) 324 270 T -(xtension de) 420.86 270 T -(vices) 461.88 270 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(198) 483.38 270 T -(changes data structures) 324 260 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(12) 410.48 260 T -(compatibility map) 324 250 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(167) 392.75 250 T -(e) 324 240 T -(xtension components) 327.86 240 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(1) 407.11 240 T -(e) 324 230 T -(xtension library functions) 327.86 230 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(4) 423.35 230 T -(groups and shift le) 324 220 T -(v) 390.52 220 T -(els) 394.88 220 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(117) 407.88 220 T -(implicit support) 324 210 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(87) 384.26 210 T -(k) 324 200 T -(e) 328.41 200 T -(yboard e) 332.27 200 T -(xtension support for k) 363.38 200 T -(e) 442.53 200 T -(yboards) 446.39 200 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(1) 477.89 200 T -(k) 324 190 T -(e) 328.41 190 T -(yboard mapping) 332.27 190 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(116) 394.01 190 T -(o) 324 180 T -(v) 328.36 180 T -(erall structure, diagram) 332.73 180 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(2) 419.46 180 T -(o) 324 170 T -(v) 328.36 170 T -(ervie) 332.73 170 T -(w) 350.5 170 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(1) 359.99 170 T -(state, diagram) 324 160 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(19) 377.49 160 T -(X library functions af) 324 150 T -(fected) 401.51 150 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(88) 426.49 150 T -(Xkb client map, diagram) 315 140 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(126) 407.49 140 T -(Xkb e) 315 130 T -(v) 336.52 130 T -(ents) 340.88 130 T -(base e) 324 120 T -(v) 346.01 120 T -(ent code) 350.38 120 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(14) 383.62 120 T -(data structures) 324 110 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(15) 379.24 110 T -(o) 324 100 T -(v) 328.36 100 T -(ervie) 332.73 100 T -(w) 350.5 100 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(14) 359.99 100 T -(selecting for) 324 90 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(15) 371.74 90 T -(types) 324 80 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(14) 346 80 T -(types, table) 324 70 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(14) 367.99 70 T -0 0 0 1 0 0 0 K -FMENDPAGE -%%EndPage: "225" 237 -%%Page: "226" 238 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(Inde) 494.95 40.62 T -(x-226) 514.34 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(Inde) 515.12 744.87 T -(x) 534.5 744.87 T -2 9 Q -(Xkb e) 72 714 T -(xtension) 93.61 714 T -(disabling) 81 704 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(8) 117 704 T -(name) 81 694 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(6) 103.49 694 T -(Xkb serv) 72 684 T -(er map, diagram) 104.61 684 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(140) 166.34 684 T -(XKB.h) 72 674 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(6) 100.75 674 T -(Xkb_RGAllo) 72 664 T -(wNone) 120.28 664 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(162) 149.27 664 T -(XkbAccessXNotify) 72 654 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(15) 145.98 654 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 154.98 654 T -0 0 0 1 0 0 0 K -2 9 Q -(64) 160.98 654 T -(XkbAccessXNotifyEv) 72 644 T -(ent) 152.85 644 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(18) 166.85 644 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 175.85 644 T -0 0 0 1 0 0 0 K -2 9 Q -(64) 181.85 644 T -(XkbAction data structure) 72 634 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(143) 165.98 634 T -(XkbActionCtrls macro) 72 624 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(155) 157.24 624 T -(XkbActionMessage) 72 614 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(15) 146.49 614 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 155.49 614 T -0 0 0 1 0 0 0 K -2 9 Q -(155) 161.49 614 T -(XkbActionMessageEv) 72 604 T -(ent) 153.35 604 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(18) 167.35 604 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 176.35 604 T -0 0 0 1 0 0 0 K -2 9 Q -(156) 182.35 604 T -(XkbAddDe) 72 594 T -(viceLedInfo\050 \051) 113.26 594 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(203) 168.49 594 T -(XkbAddGeomColor\050 \051) 72 584 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(107) 156.74 584 T -(XkbAddGeomDoodad\050 \051) 72 574 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(109) 164.73 574 T -(XkbAddGeomK) 72 564 T -(e) 131.26 564 T -(y\050 \051) 135.13 564 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(108) 150.87 564 T -(XkbAddGeomK) 72 554 T -(e) 131.26 554 T -(yAlias\050 \051) 135.13 554 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(107) 169.87 554 T -(XkbAddGeomOutline\050 \051) 72 544 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(107) 163.24 544 T -(XkbAddGeomOv) 72 534 T -(erlay\050 \051) 135.85 534 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(109) 165.09 534 T -(XkbAddGeomOv) 72 524 T -(erlayK) 135.85 524 T -(e) 160.12 524 T -(y\050 \051) 163.98 524 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(109) 179.72 524 T -(XkbAddGeomOv) 72 514 T -(erlayRo) 135.85 514 T -(w\050 \051) 164.12 514 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(109) 181.87 514 T -(XkbAddGeomProperty\050 \051) 72 504 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(107) 167.23 504 T -(XkbAddGeomRo) 72 494 T -(w\050 \051) 135.27 494 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(108) 153.01 494 T -(XkbAddGeomSection\050 \051) 72 484 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(108) 163.24 484 T -(XkbAddGeomShape\050 \051) 72 474 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(108) 158.23 474 T -(XkbAddSymInterpret\050 \051) 72 464 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(177) 161.73 464 T -(XkbAllocClientMap\050 \051) 72 454 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(123) 157.24 454 T -(XkbAllocCompatMap\050 \051) 72 444 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(179) 163.74 444 T -(XkbAllocControls\050 \051) 72 434 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(80) 149.74 434 T -(XkbAllocDe) 72 424 T -(viceInfo\050 \051) 117.76 424 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(203) 159 424 T -(XkbAllocDe) 72 414 T -(viceLedInfo\050 \051) 117.76 414 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(203) 172.99 414 T -(XkbAllocGeomColors\050 \051) 72 404 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(111) 164.74 404 T -(XkbAllocGeomDoodads\050 \051) 72 394 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(114) 172.73 394 T -(XkbAllocGeometry\050 \051) 72 384 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(115) 154.73 384 T -(XkbAllocGeomK) 72 374 T -(e) 135.76 374 T -(yAliases\050 \051) 139.63 374 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(111) 181.87 374 T -(XkbAllocGeomK) 72 364 T -(e) 135.76 364 T -(ys\050 \051) 139.63 364 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(110) 158.87 364 T -(XkbAllocGeomOutlines\050 \051) 72 354 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(110) 171.24 354 T -(XkbAllocGeomOv) 72 344 T -(erlayK) 140.35 344 T -(e) 164.62 344 T -(ys\050 \051) 168.48 344 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(114) 187.73 344 T -(XkbAllocGeomOv) 72 334 T -(erlayRo) 140.35 334 T -(ws\050 \051) 168.62 334 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(114) 189.87 334 T -(XkbAllocGeomOv) 72 324 T -(erlays\050 \051) 140.35 324 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(113) 173.09 324 T -(XkbAllocGeomPoints\050 \051) 72 314 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(112) 163.24 314 T -(XkbAllocGeomProps\050 \051) 72 304 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(110) 161.24 304 T -(XkbAllocGeomRo) 72 294 T -(ws\050 \051) 139.77 294 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(113) 161.01 294 T -(XkbAllocGeomSectionDoodads\050 \051) 72 284 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(114) 199.73 284 T -(XkbAllocGeomSections\050 \051) 72 274 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(112) 171.24 274 T -(XkbAllocGeomShapes\050 \051) 72 264 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(112) 166.23 264 T -(XkbAllocIndicatorMaps\050 \051) 72 254 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(45) 171.23 254 T -(XkbAllocK) 72 244 T -(e) 113.77 244 T -(yboard\050 \051) 117.63 244 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(28) 153.87 244 T -(XkbAllocNames\050 \051) 72 234 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(186) 143.73 234 T -(XkbAllocServ) 72 224 T -(erMap\050 \051) 123.86 224 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(124) 158.59 224 T -(XkbAlphabeticInde) 72 214 T -(x canonical k) 142.85 214 T -(e) 190.75 214 T -(y type) 194.61 214 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(129) 219.85 214 T -(XkbAn) 72 204 T -(yAction data structure) 98.36 204 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(143) 181.34 204 T -(XkbAn) 72 194 T -(yEv) 98.36 194 T -(ent) 112.72 194 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(15) 126.72 194 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 135.72 194 T -0 0 0 1 0 0 0 K -2 9 Q -(18) 141.72 194 T -(XkbApplyCompatMapT) 72 184 T -(oK) 159.78 184 T -(e) 170.55 184 T -(y\050 \051) 174.41 184 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(176) 190.15 184 T -(Xkb-a) 72 174 T -(w) 94.36 174 T -(are client) 100.76 174 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(3) 137 174 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 141.5 174 T -0 0 0 1 0 0 0 K -2 9 Q -(21) 147.5 174 T -(Xkb-a) 72 164 T -(w) 94.36 164 T -(are Client, glossary entry) 100.76 164 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(219) 194.25 164 T -(XkbAX_An) 72 154 T -(yFeedback macro) 115.86 154 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(76) 182.59 154 T -(XkbAX_DumbBellFBMask) 72 144 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(64) 176.5 144 T -(XkbAX_NeedFeedback macro) 72 134 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(76) 186.21 134 T -(XkbAX_NeedOption macro) 72 124 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(76) 176.73 124 T -(XkbAXN_AXKW) 72 114 T -(arning) 138.76 114 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(65) 164.76 114 T -(XkbAXN_BKAccept) 72 104 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(65) 152.48 104 T -(XkbAXN_BKReject) 72 94 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(65) 149.99 94 T -(XkbAXN_SKAccept) 72 84 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(64) 151.48 84 T -(XkbAXN_SKPress) 72 74 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(64) 144.99 74 T -(XkbAXN_SKReject) 315 714 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(64) 391.99 714 T -(XkbAXN_SKRelease) 315 704 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(64) 396.98 704 T -(XkbBeha) 315 694 T -(vior data structure) 348.81 694 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(161) 417.3 694 T -(XkbBell\050 \051) 315 684 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(49) 356.74 684 T -(XkbBellEv) 315 674 T -(ent\050 \051) 355.36 674 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(50) 377.61 674 T -(XkbBellNotify) 315 664 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(14) 372 664 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 381 664 T -0 0 0 1 0 0 0 K -2 9 Q -(47) 387 664 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 396 664 T -0 0 0 1 0 0 0 K -2 9 Q -(64) 402 664 T -(XkbBellNotifyEv) 315 654 T -(ent) 378.86 654 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(18) 392.86 654 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 401.86 654 T -0 0 0 1 0 0 0 K -2 9 Q -(52) 407.86 654 T -(XkbBoundsRec) 315 644 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(101) 375 644 T -(Xkb-capable client) 315 634 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(3) 386.23 634 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 390.73 634 T -0 0 0 1 0 0 0 K -2 9 Q -(21) 396.73 634 T -(Xkb-capable Client, glossary entry) 315 624 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(219) 443.48 624 T -(XkbChangeControls\050 \051) 315 614 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(78) 400.24 614 T -(XkbChangeDe) 315 604 T -(viceInfo\050 \051) 368.26 604 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(208) 409.49 604 T -(XkbChangeEnabledControls\050 \051) 315 594 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(54) 429.73 594 T -(XkbChangeIndicators\050 \051) 315 584 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(44) 405.23 584 T -(XkbChangeMap\050 \051) 315 574 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(121) 385.73 574 T -(XkbChangeNames\050 \051) 315 564 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(184) 394.23 564 T -(XkbChangeT) 315 554 T -(ypesOfK) 362.77 554 T -(e) 395.04 554 T -(y\050 \051) 398.9 554 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(137) 414.64 554 T -(XkbClampIntoRange) 315 544 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(69) 394.99 544 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 403.99 544 T -0 0 0 1 0 0 0 K -2 9 Q -(74) 409.99 544 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 418.99 544 T -0 0 0 1 0 0 0 K -2 9 Q -(134) 424.99 544 T -(XkbClientMapRec) 315 534 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(127) 385.99 534 T -(XkbColorRec) 315 524 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(101) 367.99 524 T -(XkbCompatMapNotify) 315 514 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(14) 402 514 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 411 514 T -0 0 0 1 0 0 0 K -2 9 Q -(174) 417 514 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 430.5 514 T -0 0 0 1 0 0 0 K -2 9 Q -(178) 436.5 514 T -(XkbCompatMapNotifyEv) 315 504 T -(ent) 408.86 504 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(18) 422.86 504 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 431.86 504 T -0 0 0 1 0 0 0 K -2 9 Q -(178) 437.86 504 T -(XkbCompatMapRec) 315 494 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(169) 392.49 494 T -(XkbComponentListRec) 315 484 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(192) 403.5 484 T -(XkbComponentNameRec) 315 474 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(192) 410.99 474 T -(XkbComponentNamesRec) 315 464 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(192) 414.49 464 T -(XkbComputeRo) 315 454 T -(wBounds\050 \051) 373.78 454 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(106) 419.02 454 T -(XkbComputeSectionBounds\050 \051) 315 444 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(106) 429.25 444 T -(XkbComputeShapeBounds\050 \051) 315 434 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(105) 424.24 434 T -(XkbComputeShapeT) 315 424 T -(op\050 \051) 390.28 424 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(105) 410.52 424 T -(XkbControlsChangesRec) 315 414 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(78) 409.49 414 T -(XkbControlsNotify) 315 404 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(14) 388 404 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 397 404 T -0 0 0 1 0 0 0 K -2 9 Q -(62) 403 404 T -(XkbControlsNotifyEv) 315 394 T -(ent) 394.87 394 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(18) 408.86 394 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 417.86 394 T -0 0 0 1 0 0 0 K -2 9 Q -(79) 423.86 394 T -(XkbControlsRec) 315 384 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(72) 378.5 384 T -(allocating and freeing) 324 374 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(80) 405.48 374 T -(XkbCop) 315 364 T -(yK) 345.41 364 T -(e) 356.18 364 T -(yT) 360.05 364 T -(ype\050 \051) 369.32 364 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(132) 393.56 364 T -(XkbCop) 315 354 T -(yK) 345.41 354 T -(e) 356.18 354 T -(yT) 360.05 354 T -(ypes\050 \051) 369.32 354 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(133) 397.07 354 T -(XkbCtrlsAction data structure) 315 344 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(154) 426.49 344 T -(XkbDescRec) 315 334 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(27) 365.48 334 T -(component references) 324 324 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(27) 406.22 324 T -(XkbDe) 315 314 T -(viceBell\050 \051) 340.77 314 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(49) 382.01 314 T -(XkbDe) 315 304 T -(viceBellEv) 340.77 304 T -(ent\050 \051) 380.63 304 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(50) 402.87 304 T -(XkbDe) 315 294 T -(viceBtnAction data structure) 340.77 294 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(158) 447.25 294 T -(XkbDe) 315 284 T -(viceChangesRec) 340.77 284 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(207) 403.75 284 T -(XkbDe) 315 274 T -(viceInfoRec) 340.77 274 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(199) 387.75 274 T -(XkbDe) 315 264 T -(viceLedChangesRec) 340.77 264 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(207) 417.75 264 T -(XkbDe) 315 254 T -(viceLedInfoRec) 340.77 254 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(199) 401.74 254 T -(XkbDe) 315 244 T -(viceV) 340.77 244 T -(aluatorAction data structure) 361.26 244 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(159) 464.74 244 T -(XkbDoodadRec) 315 234 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(103) 375.99 234 T -(XkbEv) 315 224 T -(ent uni\336ed e) 340.36 224 T -(v) 384.63 224 T -(ent type) 389 224 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(18) 420.74 224 T -(XkbExtensionDe) 315 214 T -(viceNotify) 376.77 214 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(15) 418.26 214 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 427.26 214 T -0 0 0 1 0 0 0 K -2 9 Q -(205) 433.26 214 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 446.76 214 T -0 0 0 1 0 0 0 K -2 9 Q -(206) 452.76 214 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 466.26 214 T -0 0 0 1 0 0 0 K -2 9 Q -(208) 472.26 214 T -(XkbExtensionDe) 315 204 T -(viceNotifyEv) 376.77 204 T -(ent) 425.12 204 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(18) 439.12 204 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 448.12 204 T -0 0 0 1 0 0 0 K -2 9 Q -(207) 454.12 204 T -(XkbFindOv) 315 194 T -(erlayF) 357.87 194 T -(orK) 380.73 194 T -(e) 394.5 194 T -(y\050 \051) 398.36 194 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(106) 414.1 194 T -(XkbF) 315 184 T -(orceBell\050 \051) 335.37 184 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(51) 377.1 184 T -(XkbF) 315 174 T -(orceDe) 335.37 174 T -(viceBell\050 \051) 361.12 174 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(51) 402.37 174 T -(XkbFreeClientMap\050 \051) 315 164 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(124) 396.24 164 T -(XkbFreeCompatMap\050 \051) 315 154 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(179) 402.73 154 T -(XkbFreeComponentList\050 \051) 315 144 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(192) 413.74 144 T -(XkbFreeControls\050 \051) 315 134 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(81) 388.74 134 T -(XkbFreeDe) 315 124 T -(viceInfo\050 \051) 356.76 124 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(204) 397.99 124 T -(XkbFreeGeomColors\050 \051) 315 114 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(112) 403.73 114 T -(XkbFreeGeomDoodads\050 \051) 315 104 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(115) 411.73 104 T -(XkbFreeGeometry\050 \051) 315 94 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(115) 393.73 94 T -(XkbFreeGeomK) 315 84 T -(e) 374.76 84 T -(yAliases\050 \051) 378.62 84 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(111) 420.86 84 T -(XkbFreeGeomK) 315 74 T -(e) 374.76 74 T -(ys\050 \051) 378.62 74 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(110) 397.87 74 T -0 0 0 1 0 0 0 K -FMENDPAGE -%%EndPage: "226" 238 -%%Page: "227" 239 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(Inde) 494.95 40.62 T -(x-227) 514.34 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(Inde) 515.12 744.87 T -(x) 534.5 744.87 T -2 9 Q -(XkbFreeGeomOutlines\050 \051) 72 714 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(110) 167.23 714 T -(XkbFreeGeomOv) 72 704 T -(erlayK) 136.35 704 T -(e) 160.61 704 T -(ys\050 \051) 164.48 704 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(114) 183.72 704 T -(XkbFreeGeomOv) 72 694 T -(erlayRo) 136.35 694 T -(ws\050 \051) 164.62 694 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(114) 185.86 694 T -(XkbFreeGeomOv) 72 684 T -(erlays\050 \051) 136.35 684 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(113) 169.09 684 T -(XkbFreeGeomPoints\050 \051) 72 674 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(112) 159.24 674 T -(XkbFreeGeomProperties\050 \051) 72 664 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(111) 173.23 664 T -(XkbFreeGeomRo) 72 654 T -(ws\050 \051) 135.76 654 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(113) 157.01 654 T -(XkbFreeGeomSections\050 \051) 72 644 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(113) 167.23 644 T -(XkbFreeGeomShapes\050 \051) 72 634 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(112) 162.23 634 T -(XkbFreeIndicatorMaps\050 \051) 72 624 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(46) 167.22 624 T -(XkbFreeK) 72 614 T -(e) 109.76 614 T -(yboard\050 \051) 113.62 614 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(29) 149.86 614 T -(XkbFreeNames\050 \051) 72 604 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(186) 139.73 604 T -(XkbFreeServ) 72 594 T -(erMap\050 \051) 119.85 594 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(125) 154.59 594 T -(XKBgeom.h) 72 584 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(6) 120.75 584 T -(XkbGeometryRec) 72 574 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(101) 140.48 574 T -(XkbGetAccessXT) 72 564 T -(imeout\050 \051) 137.66 564 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(62) 173.91 564 T -(XkbGetAutoRepeatRate\050 \051) 72 554 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(57) 171.23 554 T -(XkbGetAutoResetControls\050 \051) 72 544 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(55) 180.74 544 T -(XkbGetBounceK) 72 534 T -(e) 134.26 534 T -(ysDelay\050 \051) 138.12 534 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(66) 178.86 534 T -(XkbGetCompatMap\050 \051) 72 524 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(174) 156.74 524 T -(XkbGetControls\050 \051) 72 514 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(77) 142.74 514 T -(XkbGetControlsChanges\050 \051) 72 504 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(80) 173.74 504 T -(XkbGetDetectableAutorepeat\050 \051) 72 494 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(58) 190.21 494 T -(XkbGetDe) 72 484 T -(viceButtonActions\050 \051) 110.76 484 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(201) 189.51 484 T -(XkbGetDe) 72 474 T -(viceInfo\050 \051) 110.76 474 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(200) 151.99 474 T -(XkbGetDe) 72 464 T -(viceInfoChanges\050 \051) 110.76 464 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(208) 182.99 464 T -(XkbGetDe) 72 454 T -(viceLedInfo\050 \051) 110.76 454 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(202) 165.99 454 T -(XkbGetGeometry\050 \051) 72 444 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(104) 147.73 444 T -(XkbGetIndicatorChanges\050 \051) 72 434 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(45) 175.22 434 T -(XkbGetIndicatorMap\050 \051) 72 424 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(40) 160.73 424 T -(XkbGetIndicatorState\050 \051) 72 414 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(40) 162.23 414 T -(XkbGetK) 72 404 T -(e) 106.77 404 T -(yActions\050 \051) 110.63 404 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(160) 154.37 404 T -(XkbGetK) 72 394 T -(e) 106.77 394 T -(yBeha) 110.63 394 T -(viors\050 \051) 133.44 394 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(162) 162.69 394 T -(XkbGetK) 72 384 T -(e) 106.77 384 T -(yboard\050 \051) 110.63 384 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(28) 146.87 384 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 155.87 384 T -0 0 0 1 0 0 0 K -2 9 Q -(197) 161.87 384 T -(XkbGetK) 72 374 T -(e) 106.77 374 T -(yboardByName\050 \051) 110.63 374 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(194) 178.86 374 T -(XkbGetK) 72 364 T -(e) 106.77 364 T -(yExplicitComponents\050 \051) 110.63 364 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(163) 200.38 364 T -(XkbGetK) 72 354 T -(e) 106.77 354 T -(yModi\336erMap\050 \051) 110.63 354 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(139) 174.37 354 T -(XkbGetK) 72 344 T -(e) 106.77 344 T -(ySyms\050 \051) 110.63 344 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(136) 146.38 344 T -(XkbGetK) 72 334 T -(e) 106.77 334 T -(yT) 110.63 334 T -(ypes\050 \051) 119.91 334 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(131) 147.65 334 T -(XkbGetK) 72 324 T -(e) 106.77 324 T -(yV) 110.63 324 T -(irtualModMap\050 \051) 121.09 324 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(166) 184.83 324 T -(XkbGetMap\050 \051) 72 314 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(118) 128.24 314 T -(XkbGetNameChanges\050 \051) 72 304 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(186) 164.23 304 T -(XkbGetNamedGeometry\050 \051) 72 294 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(105) 173.72 294 T -(XkbGetNamedIndicator\050 \051) 72 284 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(41) 170.22 284 T -(XkbGetNames\050 \051) 72 274 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(183) 136.73 274 T -(XkbGetPerClientControls\050 \051) 72 264 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(81) 176.74 264 T -(XkbGetSlo) 72 254 T -(wK) 112.28 254 T -(e) 125.05 254 T -(ysDelay\050 \051) 128.91 254 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(66) 169.64 254 T -(XkbGetState\050 \051) 72 244 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(24) 129.74 244 T -(XkbGetStick) 72 234 T -(yK) 118.86 234 T -(e) 129.64 234 T -(ysOptions\050 \051) 133.5 234 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(68) 181.24 234 T -(XkbGetUpdatedMap\050 \051) 72 224 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(119) 158.73 224 T -(XkbGetV) 72 214 T -(irtualMods\050 \051) 106.45 214 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(165) 157.2 214 T -(XkbGetXlibControls\050 \051) 72 204 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(85) 158.74 204 T -(XkbGroupAction data structure) 72 194 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(146) 188.98 194 T -(XkbIgnoreExtension\050 \051) 72 184 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(8) 158.23 184 T -(XkbIM_LEDDri) 72 174 T -(v) 132.26 174 T -(esKB) 136.63 174 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(35) 159.63 174 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 168.63 174 T -0 0 0 1 0 0 0 K -2 9 Q -(41) 174.63 174 T -(XkbIM_NoAutomatic) 72 164 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(35) 154.99 164 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 163.99 164 T -0 0 0 1 0 0 0 K -2 9 Q -(42) 169.99 164 T -(XkbIM_NoExplicit) 72 154 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(35) 145.5 154 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 154.5 154 T -0 0 0 1 0 0 0 K -2 9 Q -(41) 160.5 154 T -(XkbIM_UseBase) 72 144 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(37) 137.49 144 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 146.49 144 T -0 0 0 1 0 0 0 K -2 9 Q -(38) 152.49 144 T -(XkbIM_UseCompat) 72 134 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(38) 148.49 134 T -(XkbIM_UseEf) 72 124 T -(fecti) 125.26 124 T -(v) 141.03 124 T -(e) 145.4 124 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(37) 152.39 124 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 161.39 124 T -0 0 0 1 0 0 0 K -2 9 Q -(38) 167.39 124 T -(XkbIM_UseLatched) 72 114 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(37) 148.98 114 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 157.98 114 T -0 0 0 1 0 0 0 K -2 9 Q -(38) 163.98 114 T -(XkbIM_UseLock) 72 104 T -(ed) 135.4 104 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(37) 146.89 104 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 155.89 104 T -0 0 0 1 0 0 0 K -2 9 Q -(38) 161.89 104 T -(XkbIM_UseNone) 72 94 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(37) 139.49 94 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 148.49 94 T -0 0 0 1 0 0 0 K -2 9 Q -(38) 154.49 94 T -(XkbIndicatorChangesRec) 72 84 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(43) 167.98 84 T -(XkbIndicatorDoodadRec) 72 74 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(104) 165.48 74 T -(XkbIndicatorMapNotify) 315 714 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(14) 405.98 714 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 414.98 714 T -0 0 0 1 0 0 0 K -2 9 Q -(44) 420.98 714 T -(XkbIndicatorMapRec) 315 704 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(35) 396.48 704 T -(XkbIndicatorNotifyEv) 315 694 T -(ent) 396.35 694 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(18) 410.35 694 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 419.35 694 T -0 0 0 1 0 0 0 K -2 9 Q -(44) 425.35 694 T -(XkbIndicatorRec) 315 684 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(34) 379.98 684 T -(XkbIndicatorStateNotify) 315 674 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(14) 407.49 674 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 416.49 674 T -0 0 0 1 0 0 0 K -2 9 Q -(44) 422.49 674 T -(XkbInitCanonicalK) 315 664 T -(e) 385.77 664 T -(yT) 389.63 664 T -(ypes\050 \051) 398.91 664 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(131) 426.65 664 T -(XkbISO) 315 654 T -(Action data structure) 344.68 654 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(151) 423.17 654 T -(XkbKB_Def) 315 644 T -(ault) 360.9 644 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(161) 377.4 644 T -(XkbKB_Lock) 315 634 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(162) 368.99 634 T -(XkbKB_Ov) 315 624 T -(erlay1) 358.36 624 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(162) 383.85 624 T -(XkbKB_Ov) 315 614 T -(erlay2) 358.36 614 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(162) 383.85 614 T -(XkbKB_Permanent) 315 604 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(162) 388.99 604 T -(XkbKB_RadioGroup) 315 594 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(162) 394.99 594 T -(XkbK) 315 584 T -(e) 336.77 584 T -(yAction macro) 340.63 584 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(142) 397.37 584 T -(XkbK) 315 574 T -(e) 336.77 574 T -(yActionEntry macro) 340.63 574 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(142) 417.37 574 T -(XkbK) 315 564 T -(e) 336.77 564 T -(yActionsPtr macro) 340.63 564 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(142) 411.38 564 T -(XkbK) 315 554 T -(e) 336.77 554 T -(yAliasRec) 340.63 554 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(101) 381.13 554 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 394.63 554 T -0 0 0 1 0 0 0 K -2 9 Q -(180) 400.63 554 T -(XkbK) 315 544 T -(e) 336.77 544 T -(ycodeT) 340.63 544 T -(oK) 366.9 544 T -(e) 377.68 544 T -(ysym\050 \051) 381.54 544 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(89) 412.28 544 T -(XkbK) 315 534 T -(e) 336.77 534 T -(yGroupInfo macro) 340.63 534 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(135) 410.86 534 T -(XkbK) 315 524 T -(e) 336.77 524 T -(yGroupsW) 340.63 524 T -(idth macro) 379.76 524 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(135) 421.51 524 T -(XkbK) 315 514 T -(e) 336.77 514 T -(yGroupW) 340.63 514 T -(idth macro) 376.26 514 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(136) 418.01 514 T -(XkbK) 315 504 T -(e) 336.77 504 T -(yHasActions macro) 340.63 504 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(141) 414.87 504 T -(XkbK) 315 494 T -(e) 336.77 494 T -(yNameRec) 340.63 494 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(180) 383.62 494 T -(XkbK) 315 484 T -(e) 336.77 484 T -(yNumActions macro) 340.63 484 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(141) 418.87 484 T -(XkbK) 315 474 T -(e) 336.77 474 T -(yNumGroups macro) 340.63 474 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(135) 417.37 474 T -(XkbK) 315 464 T -(e) 336.77 464 T -(yNumSyms macro) 340.63 464 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(136) 410.88 464 T -(XkbK) 315 454 T -(e) 336.77 454 T -(ypadInde) 340.63 454 T -(x canonical k) 373.99 454 T -(e) 421.88 454 T -(y type) 425.74 454 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(129) 450.99 454 T -(XkbK) 315 444 T -(e) 336.77 444 T -(yRec) 340.63 444 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(102) 362.13 444 T -(XkbK) 315 434 T -(e) 336.77 434 T -(ySymEntry macro) 340.63 434 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(136) 409.38 434 T -(XkbK) 315 424 T -(e) 336.77 424 T -(ySymsOf) 340.63 424 T -(fset macro) 374.41 424 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(136) 415.15 424 T -(XkbK) 315 414 T -(e) 336.77 414 T -(ySymsPtr macro) 340.63 414 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(136) 403.38 414 T -(XkbK) 315 404 T -(e) 336.77 404 T -(ysymT) 340.63 404 T -(oModi\336ers\050 \051) 364.91 404 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(89) 415.66 404 T -(XkbK) 315 394 T -(e) 336.77 394 T -(yT) 340.63 394 T -(ype macro) 349.91 394 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(134) 390.65 394 T -(XkbK) 315 384 T -(e) 336.77 384 T -(yT) 340.63 384 T -(ypeInde) 349.91 384 T -(x macro) 378.77 384 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(134) 411.01 384 T -(XkbK) 315 374 T -(e) 336.77 374 T -(yT) 340.63 374 T -(ypeRec) 349.91 374 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(127) 379.9 374 T -(XkbK) 315 364 T -(e) 336.77 364 T -(yT) 340.63 364 T -(ypesF) 349.91 364 T -(orCoreSymbols\050 \051) 371.28 364 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(176) 439.02 364 T -(XkbKTMapEntryRec) 315 354 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(127) 395.98 354 T -(XkbLatchGroup\050 \051) 315 344 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(23) 385.23 344 T -(XkbLatchModi\336ers\050 \051) 315 334 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(22) 397.24 334 T -(XkbLC_AllControls) 315 324 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(85) 392.01 324 T -(XkbLC_AlphanumericK) 315 314 T -(e) 404.26 314 T -(ys) 408.12 314 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(193) 419.12 314 T -(XkbLC_AlternateGroup) 315 304 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(193) 405.98 304 T -(XkbLC_Al) 315 294 T -(w) 355.41 294 T -(aysConsumeShiftAndLock) 361.82 294 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(85) 462.32 294 T -(XkbLC_BeepOnComposeF) 315 284 T -(ail) 414.86 284 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(85) 426.86 284 T -(XkbLC_ComposeLED) 315 274 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(85) 401 274 T -(XkbLC_ConsumeK) 315 264 T -(e) 386.77 264 T -(ysOnComposeF) 390.64 264 T -(ail) 448.51 264 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(85) 460.51 264 T -(XkbLC_ConsumeLookupMods) 315 254 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(85) 432 254 T -(XkbLC_Def) 315 244 T -(ault) 359.9 244 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(193) 376.4 244 T -(XkbLC_F) 315 234 T -(orceLatin1Lookup) 351.37 234 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(85) 421.36 234 T -(XkbLC_FunctionK) 315 224 T -(e) 384.78 224 T -(ys) 388.64 224 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(193) 399.64 224 T -(XkbLC_Hidden) 315 214 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(193) 376 214 T -(XkbLC_IgnoreNe) 315 204 T -(wK) 380.26 204 T -(e) 393.03 204 T -(yboards) 396.89 204 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(85) 428.39 204 T -(XkbLC_K) 315 194 T -(e) 352.77 194 T -(ypadK) 356.63 194 T -(e) 380.4 194 T -(ys) 384.26 194 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(193) 395.27 194 T -(XkbLC_Modi\336erK) 315 184 T -(e) 384.27 184 T -(ys) 388.13 184 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(193) 399.14 184 T -(XkbLC_P) 315 174 T -(artial) 351.37 174 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(193) 372.86 174 T -(XKBlib) 315 164 T -(.h) 343.14 164 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(6) 352.89 164 T -(XkbLibraryV) 315 154 T -(ersion\050 \051) 362.99 154 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(6) 396.23 154 T -(XkbListComponents\050 \051) 315 144 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(191) 401.25 144 T -(XkbLockGroup\050 \051) 315 134 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(23) 383.23 134 T -(XkbLockModi\336ers\050 \051) 315 124 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(22) 395.24 124 T -(XkbLogoDoodadRec) 315 114 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(104) 394.99 114 T -(XkbLookupK) 315 104 T -(e) 364.77 104 T -(yBinding\050 \051) 368.63 104 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(90) 413.38 104 T -(XkbLookupK) 315 94 T -(e) 364.77 94 T -(ySym\050 \051) 368.63 94 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(89) 400.88 94 T -(XkbMapChangesRec) 315 84 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(121) 394.99 84 T -(XkbMapNotify) 315 74 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(14) 373.49 74 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 382.49 74 T -0 0 0 1 0 0 0 K -2 9 Q -(87) 388.49 74 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 397.49 74 T -0 0 0 1 0 0 0 K -2 9 Q -(88) 403.49 74 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 412.49 74 T -0 0 0 1 0 0 0 K -2 9 Q -(122) 418.49 74 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 431.99 74 T -0 0 0 1 0 0 0 K -2 9 Q -(178) 437.99 74 T -0 0 0 1 0 0 0 K -FMENDPAGE -%%EndPage: "227" 239 -%%Page: "228" 240 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(Inde) 494.95 40.62 T -(x-228) 514.34 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(Inde) 515.12 744.87 T -(x) 534.5 744.87 T -2 9 Q -(XkbMapNotifyEv) 72 714 T -(ent) 137.36 714 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(18) 151.36 714 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 160.36 714 T -0 0 0 1 0 0 0 K -2 9 Q -(122) 166.36 714 T -(XkbMessageAction data structure) 72 704 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(155) 197.47 704 T -(XkbModAction data structure) 72 694 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(144) 182.98 694 T -(XkbModActionVMods macro) 72 684 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(145) 183.74 684 T -(XkbNameChangesRec) 72 674 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(184) 156.98 674 T -(XkbNamesNotify) 72 664 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(14) 138.99 664 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 147.99 664 T -0 0 0 1 0 0 0 K -2 9 Q -(185) 153.99 664 T -(XkbNamesNotifyEv) 72 654 T -(ent) 145.85 654 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(18) 159.85 654 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 168.85 654 T -0 0 0 1 0 0 0 K -2 9 Q -(185) 174.85 654 T -(XkbNamesRec) 72 644 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(180) 129.49 644 T -(XkbNe) 72 634 T -(wK) 97.77 634 T -(e) 110.54 634 T -(yboardNotify) 114.4 634 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(14) 165.89 634 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 174.89 634 T -0 0 0 1 0 0 0 K -2 9 Q -(87) 180.89 634 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 189.89 634 T -0 0 0 1 0 0 0 K -2 9 Q -(187) 195.89 634 T -(XkbNe) 72 624 T -(wK) 97.77 624 T -(e) 110.54 624 T -(yboardNotifyEv) 114.4 624 T -(ent) 172.76 624 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(18) 186.75 624 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 195.75 624 T -0 0 0 1 0 0 0 K -2 9 Q -(188) 201.75 624 T -(XkbNoteControlsChanges\050 \051) 72 614 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(80) 178.24 614 T -(XkbNoteDe) 72 604 T -(viceChanges\050 \051) 115.26 604 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(208) 172.5 604 T -(XkbNoteIndicatorChanges\050 \051) 72 594 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(45) 179.72 594 T -(XkbNoteNameChanges\050 \051) 72 584 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(185) 168.73 584 T -(XkbOneLe) 72 574 T -(v) 111.76 574 T -(elInde) 116.13 574 T -(x canonical k) 138.48 574 T -(e) 186.38 574 T -(y type) 190.24 574 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(129) 215.49 574 T -(XkbOpenDisplay\050 \051) 72 564 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(8) 146.24 564 T -(XkbOutlineRec) 72 554 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(101) 131.49 554 T -(XkbOutOfRangeGroupInfo macro) 72 544 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(135) 199.22 544 T -(XkbOutOfRangeGroupNumber macro) 72 534 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(135) 213.72 534 T -(XkbOv) 72 524 T -(erlayK) 98.36 524 T -(e) 122.62 524 T -(yRec) 126.49 524 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(102) 147.98 524 T -(XkbOv) 72 514 T -(erlayRec) 98.36 514 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(102) 133.35 514 T -(XkbOv) 72 504 T -(erlayRo) 98.36 504 T -(wRec) 126.63 504 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(102) 150.12 504 T -(XkbPointRec) 72 494 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(101) 123.5 494 T -(XkbPropertyRec) 72 484 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(101) 135.49 484 T -(XkbPtrAction data structure) 72 474 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(147) 176.48 474 T -(XkbPtrActionX macro) 72 464 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(148) 156.74 464 T -(XkbPtrActionY macro) 72 454 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(148) 156.74 454 T -(XkbPtrBtnAction data structure) 72 444 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(148) 189.49 444 T -(XkbPtrD\337tAction data structure) 72 434 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(150) 190.49 434 T -(XkbQueryExtension\050 \051) 72 424 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(7) 157.23 424 T -(XkbRedirectIntoRange) 72 414 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(69) 158.48 414 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 167.48 414 T -0 0 0 1 0 0 0 K -2 9 Q -(74) 173.48 414 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 182.48 414 T -0 0 0 1 0 0 0 K -2 9 Q -(134) 188.48 414 T -(XkbRedirectK) 72 404 T -(e) 124.26 404 T -(yAction data structure) 128.12 404 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(156) 211.11 404 T -(XkbRefreshK) 72 394 T -(e) 121.76 394 T -(yboardMapping\050 \051) 125.62 394 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(90) 194.36 394 T -(XkbResizeDe) 72 384 T -(viceButtonActions\050 \051) 121.76 384 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(204) 200.51 384 T -(XkbResizeK) 72 374 T -(e) 117.76 374 T -(yActions\050 \051) 121.63 374 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(160) 165.37 374 T -(XkbResizeK) 72 364 T -(e) 117.76 364 T -(ySyms\050 \051) 121.63 364 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(138) 157.38 364 T -(XkbResizeK) 72 354 T -(e) 117.76 354 T -(yT) 121.63 354 T -(ype\050 \051) 130.9 354 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(132) 155.15 354 T -(XkbRo) 72 344 T -(wRec) 97.78 344 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(102) 121.27 344 T -(XkbSA_ActionMessage) 72 334 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(143) 162.49 334 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 175.99 334 T -0 0 0 1 0 0 0 K -2 9 Q -(155) 181.99 334 T -(XkbSA_Af) 72 324 T -(fectD\337tBtn) 112.77 324 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(149) 156.27 324 T -(XkbSA_ClearLocks) 72 314 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(145) 147.99 314 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 161.49 314 T -0 0 0 1 0 0 0 K -2 9 Q -(146) 167.49 314 T -(XkbSA_De) 72 304 T -(viceBtn) 113.77 304 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(143) 144.77 304 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 158.27 304 T -0 0 0 1 0 0 0 K -2 9 Q -(158) 164.27 304 T -(XkbSA_De) 72 294 T -(viceV) 113.77 294 T -(aluator) 134.26 294 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(143) 162.26 294 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 175.76 294 T -0 0 0 1 0 0 0 K -2 9 Q -(159) 181.76 294 T -(XkbSA_D\337tBtnAbsolute) 72 284 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(150) 166.01 284 T -(XkbSA_GroupAbsolute) 72 274 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(146) 161.99 274 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 175.49 274 T -0 0 0 1 0 0 0 K -2 9 Q -(151) 181.49 274 T -(XkbSA_IgnoreV) 72 264 T -(al) 132.49 264 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(159) 141.99 264 T -(XkbSA_ISOD\337tIsGroup) 72 254 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(151) 164.5 254 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 178 254 T -0 0 0 1 0 0 0 K -2 9 Q -(152) 184 254 T -(XkbSA_ISODNoAf) 72 244 T -(fectMods) 144.76 244 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(152) 181.76 244 T -(XkbSA_ISOLock) 72 234 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(143) 139.49 234 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 152.99 234 T -0 0 0 1 0 0 0 K -2 9 Q -(151) 158.99 234 T -(XkbSA_ISONoAf) 72 224 T -(fectCtrls) 138.27 224 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(151) 172.26 224 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 185.76 224 T -0 0 0 1 0 0 0 K -2 9 Q -(152) 191.76 224 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 205.26 224 T -0 0 0 1 0 0 0 K -2 9 Q -(153) 211.26 224 T -(XkbSA_ISONoAf) 72 214 T -(fectGroup) 138.27 214 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(151) 177.75 214 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 191.25 214 T -0 0 0 1 0 0 0 K -2 9 Q -(152) 197.25 214 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 210.75 214 T -0 0 0 1 0 0 0 K -2 9 Q -(153) 216.75 214 T -(XkbSA_ISONoAf) 72 204 T -(fectMods) 138.27 204 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(151) 175.26 204 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 188.76 204 T -0 0 0 1 0 0 0 K -2 9 Q -(152) 194.76 204 T -(XkbSA_ISONoAf) 72 194 T -(fectPtr) 138.27 194 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(151) 165.26 194 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 178.76 194 T -0 0 0 1 0 0 0 K -2 9 Q -(152) 184.76 194 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 198.26 194 T -0 0 0 1 0 0 0 K -2 9 Q -(153) 204.26 194 T -(XkbSA_LatchGroup) 72 184 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(143) 149.99 184 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 163.49 184 T -0 0 0 1 0 0 0 K -2 9 Q -(146) 169.49 184 T -(XkbSA_LatchMods) 72 174 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(143) 147.49 174 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 160.99 174 T -0 0 0 1 0 0 0 K -2 9 Q -(144) 166.99 174 T -(XkbSA_LatchT) 72 164 T -(oLock) 128.77 164 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(145) 154.77 164 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 168.27 164 T -0 0 0 1 0 0 0 K -2 9 Q -(146) 174.27 164 T -(XkbSA_LockControls) 72 154 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(143) 156 154 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 169.5 154 T -0 0 0 1 0 0 0 K -2 9 Q -(154) 175.5 154 T -(XKbSA_LockDe) 72 144 T -(viceBtn) 134.26 144 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(143) 165.26 144 T -(XkbSA_LockDe) 72 134 T -(viceBtn) 132.26 134 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(158) 163.26 134 T -(XkbSA_LockGroup) 72 124 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(143) 147.99 124 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 161.49 124 T -0 0 0 1 0 0 0 K -2 9 Q -(146) 167.49 124 T -(XkbSA_LockMods) 72 114 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(143) 145.5 114 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 159 114 T -0 0 0 1 0 0 0 K -2 9 Q -(144) 165 114 T -(XkbSA_LockNoLock) 72 104 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(145) 154.49 104 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 167.99 104 T -0 0 0 1 0 0 0 K -2 9 Q -(149) 173.99 104 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 187.49 104 T -0 0 0 1 0 0 0 K -2 9 Q -(152) 193.49 104 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 206.99 104 T -0 0 0 1 0 0 0 K -2 9 Q -(154) 212.99 104 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 226.49 104 T -0 0 0 1 0 0 0 K -2 9 Q -(158) 232.49 104 T -(XkbSA_LockNoUnlock) 72 94 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(145) 162.49 94 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 175.99 94 T -0 0 0 1 0 0 0 K -2 9 Q -(149) 181.99 94 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 195.49 94 T -0 0 0 1 0 0 0 K -2 9 Q -(152) 201.49 94 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 214.99 94 T -0 0 0 1 0 0 0 K -2 9 Q -(154) 220.99 94 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 234.49 94 T -0 0 0 1 0 0 0 K -2 9 Q -(159) 240.49 94 T -(XkbSA_LockPtrBtn) 72 84 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(143) 148.5 84 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 162 84 T -0 0 0 1 0 0 0 K -2 9 Q -(149) 168 84 T -(XkbSA_MessageGenK) 72 74 T -(e) 156.26 74 T -(yEv) 160.12 74 T -(ent) 174.48 74 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(155) 188.48 74 T -(XkbSA_MessageOnPress) 315 714 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(155) 410.99 714 T -(XkbSA_MessageOnRelease) 315 704 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(155) 419.98 704 T -(XkbSA_Mo) 315 694 T -(v) 358.87 694 T -(eAbsoluteX) 363.23 694 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(147) 409.22 694 T -(XkbSA_Mo) 315 684 T -(v) 358.87 684 T -(eAbsoluteY) 363.23 684 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(148) 409.22 684 T -(XkbSA_Mo) 315 674 T -(v) 358.87 674 T -(ePtr) 363.23 674 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(143) 380.73 674 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 394.23 674 T -0 0 0 1 0 0 0 K -2 9 Q -(147) 400.23 674 T -(XkbSA_NoAcceleration) 315 664 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(147) 406.48 664 T -(XkbSA_NoAction) 315 654 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(143) 385 654 T -(XKbSA_PtrBtn) 315 644 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(143) 375.01 644 T -(XkbSA_PtrBtn) 315 634 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(149) 373.01 634 T -(XkbSA_RedirectK) 315 624 T -(e) 383.27 624 T -(y) 387.13 624 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(143) 394.63 624 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 408.13 624 T -0 0 0 1 0 0 0 K -2 9 Q -(156) 414.13 624 T -(XkbSA_SetControls) 315 614 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(143) 392.01 614 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 405.51 614 T -0 0 0 1 0 0 0 K -2 9 Q -(154) 411.51 614 T -(XkbSA_SetGroup) 315 604 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(143) 384 604 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 397.5 604 T -0 0 0 1 0 0 0 K -2 9 Q -(146) 403.5 604 T -(XkbSA_SetMods) 315 594 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(143) 381.5 594 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 395 594 T -0 0 0 1 0 0 0 K -2 9 Q -(144) 401 594 T -(XkbSA_SetPtrD\337t) 315 584 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(143) 385.51 584 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 399.01 584 T -0 0 0 1 0 0 0 K -2 9 Q -(149) 405.01 584 T -(XkbSA_SetV) 315 574 T -(alAbsolute) 363.5 574 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(159) 405.5 574 T -(XkbSA_SetV) 315 564 T -(alCenter) 363.5 564 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(159) 396.99 564 T -(XkbSA_SetV) 315 554 T -(alMax) 363.5 554 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(159) 389.5 554 T -(XkbSA_SetV) 315 544 T -(alMin) 363.5 544 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(159) 388 544 T -(XkbSA_SetV) 315 534 T -(alRelati) 363.5 534 T -(v) 391.27 534 T -(e) 395.64 534 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(159) 402.64 534 T -(XkbSA_SwitchAbsolute) 315 524 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(153) 407 524 T -(XkbSA_SwitchApplication) 315 514 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(153) 417 514 T -(XkbSA_SwitchScreen) 315 504 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(143) 398.99 504 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 412.49 504 T -0 0 0 1 0 0 0 K -2 9 Q -(153) 418.49 504 T -(XkbSA_UseD\337tButton) 315 494 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(149) 402.01 494 T -(XkbSA_UseModMapMods) 315 484 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(145) 417.49 484 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 430.99 484 T -0 0 0 1 0 0 0 K -2 9 Q -(152) 436.99 484 T -(XkbSAActionSetCtrls macro) 315 474 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(155) 423.25 474 T -(XkbSA) 315 464 T -(Group macro) 341.64 464 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(147) 392.38 464 T -(XkbSAPtrD\337tV) 315 454 T -(alue macro) 372.01 454 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(150) 414.74 454 T -(XkbSARedirectSetVMods macro) 315 444 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(157) 438.73 444 T -(XkbSARedirectSetVModsMask macro) 315 434 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(157) 458.73 434 T -(XkbSARedirectVMods macro) 315 424 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(157) 427.23 424 T -(XkbSARedirectVModsMask macro) 315 414 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(157) 447.23 414 T -(XkbSAScreen macro) 315 404 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(153) 394.23 404 T -(XkbSASetGroup macro) 315 394 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(147) 404.24 394 T -(XkbSASetPtrD\337tV) 315 384 T -(alue macro) 383.51 384 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(150) 426.24 384 T -(XkbSASetScreen macro) 315 374 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(154) 405.73 374 T -(XkbSectionRec) 315 364 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(103) 374.49 364 T -(XkbSelectEv) 315 354 T -(entDetails\050 \051) 362.36 354 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(17) 410.1 354 T -(XkbSelectEv) 315 344 T -(ents mask constants) 362.36 344 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(17) 436.85 344 T -(XkbSelectEv) 315 334 T -(ents\050 \051) 362.36 334 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(16) 388.1 334 T -(XkbServ) 315 324 T -(erMapRec) 346.86 324 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(141) 387.35 324 T -(XkbSetAccessXT) 315 314 T -(imeout\050 \051) 379.17 314 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(63) 415.42 314 T -(XkbSetAutoRepeatRate\050 \051) 315 304 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(57) 412.73 304 T -(XkbSetAutoResetControls\050 \051) 315 294 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(55) 422.25 294 T -(XkbSetBounceK) 315 284 T -(e) 375.77 284 T -(ysDelay\050 \051) 379.63 284 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(67) 420.37 284 T -(XkbSetCompatMap\050 \051) 315 274 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(177) 398.24 274 T -(XkbSetControls\050 \051) 315 264 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(77) 384.25 264 T -(XkbSetDeb) 315 254 T -(uggingFlags\050 \051) 356.81 254 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(210) 412.56 254 T -(XkbSetDetectableAutorepeat\050 \051) 315 244 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(58) 431.71 244 T -(XkbSetDe) 315 234 T -(viceButtonActions\050 \051) 352.27 234 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(206) 431.01 234 T -(XkbSetDe) 315 224 T -(viceInfo\050 \051) 352.27 224 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(205) 393.5 224 T -(XkbSetIgnoreLockMods\050 \051) 315 214 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(70) 415.73 214 T -(XkbSetIndicatorMap\050 \051) 315 204 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(42) 402.23 204 T -(XkbSetMap\050 \051) 315 194 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(120) 369.74 194 T -(XkbSetModActionVMods macro) 315 184 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(145) 438.24 184 T -(XkbSetNamedIndicator\050 \051) 315 174 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(43) 411.73 174 T -(XkbSetNames\050 \051) 315 164 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(183) 378.24 164 T -(XkbSetPerClientControls\050 \051) 315 154 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(81) 418.25 154 T -(XkbSetPtrActionX macro) 315 144 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(148) 411.24 144 T -(XkbSetPtrActionY macro) 315 134 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(148) 411.24 134 T -(XkbSetServ) 315 124 T -(erInternalMods\050 \051) 358.36 124 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(71) 425.09 124 T -(XkbSetSlo) 315 114 T -(wK) 353.78 114 T -(e) 366.55 114 T -(ysDelay\050 \051) 370.41 114 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(66) 411.15 114 T -(XkbSetStick) 315 104 T -(yK) 360.37 104 T -(e) 371.14 104 T -(ysOptions\050 \051) 375 104 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(68) 422.75 104 T -(XkbSetXlibControls\050 \051) 315 94 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(85) 400.25 94 T -(XkbShapeDoodadRec) 315 84 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(103) 397.98 84 T -(XkbShapeRec) 315 74 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(101) 369.49 74 T -0 0 0 1 0 0 0 K -FMENDPAGE -%%EndPage: "228" 240 -%%Page: "229" 241 -612 792 0 FMBEGINPAGE -[0 0 0 1 0 0 0] -[ 0 1 1 0 1 0 0] -[ 1 0 1 0 0 1 0] -[ 1 1 0 0 0 0 1] -[ 1 0 0 0 0 1 1] -[ 0 1 0 0 1 0 1] -[ 0 0 1 0 1 1 0] - 7 FrameSetSepColors -FrameNoSep -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -72 54 540 54 2 L -0.25 H -2 Z -0 X -0 0 0 1 0 0 0 K -N -2 11 Q -(No) 72 40.62 T -(v) 85.28 40.62 T -(ember 10, 1997) 90.61 40.62 T -(Library V) 209.59 40.62 T -(ersion 1.0/Document Re) 252.05 40.62 T -(vision 1.1) 359.01 40.62 T -(Inde) 494.95 40.62 T -(x-229) 514.34 40.62 T -72 738 540 738 2 L -1 H -N -(The X K) 72 744.87 T -(e) 110.21 744.87 T -(yboard Extension) 114.93 744.87 T -(Inde) 515.12 744.87 T -(x) 534.5 744.87 T -2 9 Q -(XkbSI_AllOf) 72 714 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(172) 124 714 T -(XkbSI_An) 72 704 T -(yOf) 110.86 704 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(172) 127.86 704 T -(XkbSI_An) 72 694 T -(yOfOrNone) 110.86 694 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(172) 156.85 694 T -(XkbSI_Exactly) 72 684 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(172) 130.49 684 T -(XkbSI_NoneOf) 72 674 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(172) 131.99 674 T -(XkbStateNotify) 72 664 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(14) 132 664 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 141 664 T -0 0 0 1 0 0 0 K -2 9 Q -(24) 147 664 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 156 664 T -0 0 0 1 0 0 0 K -2 9 Q -(65) 162 664 T -(XkbStateNotify e) 72 654 T -(v) 135.02 654 T -(ent detail masks) 139.38 654 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(24) 200.38 654 T -(XkbStateNotifyEv) 72 644 T -(ent) 138.86 644 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(18) 152.86 644 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 161.86 644 T -0 0 0 1 0 0 0 K -2 9 Q -(25) 167.86 644 T -(XkbStateRec) 72 634 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(24) 122.49 634 T -(Xkbstr) 72 624 T -(.h) 96 624 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(6) 105.75 624 T -(XkbSwitchScreenAction data structure) 72 614 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(153) 215.47 614 T -(XkbSymInterpretRec) 72 604 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(172) 151.99 604 T -(XkbSymMapRec) 72 594 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(133) 137.5 594 T -(XkbT) 72 584 T -(e) 92.37 584 T -(xtDoodadRec) 96.23 584 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(104) 148.72 584 T -(XkbT) 72 574 T -(ranslateK) 92.68 574 T -(e) 126.94 574 T -(yCode\050 \051) 130.81 574 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(91) 165.55 574 T -(XkbT) 72 564 T -(ranslateK) 92.68 564 T -(e) 126.94 564 T -(ySym\050 \051) 130.81 564 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(90) 163.06 564 T -(XkbT) 72 554 T -(w) 92.28 554 T -(oLe) 98.68 554 T -(v) 112.46 554 T -(elInde) 116.82 554 T -(x canonical k) 139.18 554 T -(e) 187.07 554 T -(y type) 190.93 554 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(129) 216.18 554 T -(Xkb-una) 72 544 T -(w) 103.36 544 T -(are client) 109.76 544 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(4) 146 544 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 150.5 544 T -0 0 0 1 0 0 0 K -2 9 Q -(21) 156.5 544 T -(Xkb-una) 72 534 T -(w) 103.36 534 T -(are Client, glossary entry) 109.76 534 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(219) 203.25 534 T -(XkbUpdateMapFromCore\050 \051) 72 524 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(175) 178.23 524 T -(XkbUseCoreKbd) 72 514 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(10) 137.49 514 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 146.49 514 T -0 0 0 1 0 0 0 K -2 9 Q -(15) 152.49 514 T -(XkbV) 72 504 T -(irtualModsT) 93.46 504 T -(oReal\050 \051) 137.74 504 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(32) 169.98 504 T -(XkbWrapIntoRange) 72 494 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(69) 147.98 494 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 156.98 494 T -0 0 0 1 0 0 0 K -2 9 Q -(74) 162.98 494 T -0 0 0 1 0 0 0 K -2 12 Q -(,) 171.98 494 T -0 0 0 1 0 0 0 K -2 9 Q -(134) 177.98 494 T -(XkbXID\337tID) 72 484 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(198) 123.49 484 T -(XkbXlibControlsImplemented\050 \051) 72 474 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(85) 193.24 474 T -(XK) 72 464 T -(e) 84.77 464 T -(ycodeT) 88.63 464 T -(oK) 114.9 464 T -(e) 125.68 464 T -(ysym\050 \051, Xkb modi\336cations) 129.54 464 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(88) 231.54 464 T -(XK) 72 454 T -(e) 84.77 454 T -(ysymT) 88.63 454 T -(oK) 112.91 454 T -(e) 123.69 454 T -(ycode\050 \051, Xkb modi\336cations) 127.55 454 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(88) 231.54 454 T -(Xlib v) 72 444 T -(ersion required) 94.62 444 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(1) 151.85 444 T -(XLookupK) 72 434 T -(e) 112.77 434 T -(ysym\050 \051, Xkb modi\336cations) 116.63 434 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(88) 218.63 434 T -(XLookupString\050 \051) 72 424 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(82) 139.75 424 T -(function which is equi) 81 414 T -(v) 161.02 414 T -(alent, XkbLookupK) 165.29 414 T -(e) 237.06 414 T -(yBinding\050 \051) 240.92 414 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(90) 285.67 414 T -(Xkb modi\336cations) 81 404 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(88) 150.75 404 T -(XMappingNotify) 72 394 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(187) 137.5 394 T -(XRebindK) 72 384 T -(e) 110.77 384 T -(ysym\050 \051, Xkb modi\336cations) 114.63 384 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(89) 216.63 384 T -(XRefreshK) 72 374 T -(e) 112.76 374 T -(yboardMapping\050 \051) 116.62 374 T -(function which is equi) 81 364 T -(v) 161.02 364 T -(alent, XkbRefreshK) 165.29 364 T -(e) 237.05 364 T -(yboardMap-) 240.91 364 T -(ping\050 \051) 99 354 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(90) 126.25 354 T -(Xkb modi\336cations) 81 344 T -0 0 0 1 0 0 0 K -0 0 0 1 0 0 0 K -(88) 150.75 344 T -0 0 0 1 0 0 0 K -FMENDPAGE -%%EndPage: "229" 241 -%%Trailer -%%BoundingBox: 0 0 612 792 -%%PageOrder: Ascend -%%Pages: 241 -%%DocumentFonts: Helvetica-Bold -%%+ Times-Italic -%%+ Times-Roman -%%+ Times-Bold -%%+ Helvetica -%%+ Courier -%%+ Symbol -%%+ Times-BoldItalic -%%EOF diff --git a/doc/xorg-docs/specs/XKB/XKBlib/allchaps.toc b/doc/xorg-docs/specs/XKB/XKBlib/allchaps.toc deleted file mode 100644 index e3c197c68d42733a360171ec86a6f7a8cf265541..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57344 zcmeIbd7PX@@dw;J{mf=Exqt)^5@djICrf6pWZ4+mTo6b|$nJ!MLz(POl9An+Wp*|Y ze!rjMg*VDA2*`abpnw8iKtMzkR1Q%+!^NSzDLC6elY}yVN347!G68(qq zvAp=v{r3xDKkL>BaS%iCMN;|c6x`Vl@!s-=|0r~keoF}Z`NS3>>_>hLXleb-!tAe5 z$V-ZDd?tZ+BC!TnI!Wo#HT_Sh#8@y)EiRX}$XAQy(yDx=NX6~982FWn82QP_ zlRPH*MBNj~zmf#*gEyHOXh{78v-o$v@OB zF!1Y=f2><*;NMFAscxZx-;jK^ZjpiClzgskk%o(pB%iNatl{Fg04 z?@GQ@cd&tXCtt2R#K6}j|6F&7fp19urEZCVe=PY*-4cSQUmf>M`c zgtyH5Kd(>hv1XpPOpXI=%G~LF`AWVt(0g?DkV3w@SXzJVJo10U9!doS`0et_= zJ{=nhg(~=0*Y@<&C6zH#Ugto%$^)h9ynS~7e%d=yl4nkuJAK_iPtQ8UZdOkoR?+IM zmgJculWUD6r<|$fCJmEbYv_AcHqbcy-#ZE_n6RQ!u9jC8HWvHg@-U5T{j3x4>}Wh2 zx3Jt5dXhypV}y4Mo{e9MdiEctTAQ;Cv$Bg8L-xzOV9D%GT~NU>3u{_z(pFe ze*8{Ik=OeZ?`TI!o28773_cj10)!x@vD0LT45WhH|5@HFZ{EuDzsL*Z1%l#PI9d8v#A7`E&VmgOgaY zT8K(q*4O1P)_L|*E%-e=V}#D9Rgv-)h}HdqP!zv(0& zt4>Y41DMILkAByy&n3{=w6Oeoz>Zg+XPC*cQozMt>I;cGfCt@Dn%;-6ebpBew*$ry zT@HDv`V!|s&ygq(`EB)OmtPTmefb^r6^3OPO_bo*@_Xtug|^P;NBMqAeU+ML^e;G( z|BFwnuPGV8#EyV{MxCyp8H-1aiuj^BLxI@xqkP4e)R_tZi^s0?Wp$Q9yY5kbl&GEj ziaJ}tL#$p(J%F92&Y_N|w}Ft52=A-vT!l6>g!eV|b%i$8!Zu`pcaAzwp?$J2K!mtJ zov+Ye@<>)BvIDQGF5vQNkXR3Y^9Iy~T;Ay#cv2Oxjp`zXQ5_YFZ%;ND5< zV%E#sbf=TINnOG)3xNN7C#y@DHt3lP?|;-~3_Hgn0`Gs-Zetky-zM)Ibvx$)|F_9ISKYxdH;=EY%`txGsXJq^^VMA} z3;f?E?;GmJjAsG(^)66%GYtN3lXs!|3BxEdn&e%i?qL`)wXkohpK=~HAOP-NtnOtz z_`glwCF*AkqcMa@-lgj245L1;gnRm#h0(2k?KJyerf%7?1j=CV5w?Uowow zOBQyO`W4G(0r>T%y*AkHl!drG68G zeOvuD2D?E$8k6Nl^;j(5o7CeBbIbM}^}86q@2cO&U^lBLVtL%6o{Yh6RZp@0TpfH* zJsrdQzIrAG`+@oc!(91(sQws}Q{u;Gq zZaMB!FU4R#Rxii$xLf_1@!b0TiTXWvuQuhg3{*aPaV80^W~@4EDS? zDVFaG-ZqTq`ofFewlUaC-gXRg_4l$jIVRtqy(ux;zj)in@LutDU_7_HfAw~Z!T#ob zAO?HY+bQPffA@CgJY4x+^QOjR`G+?x#_x4+ml*5~?}IU!-}H8k)zMpCCWiO6w;RLU zvc2Q&9)tbU+am`1mp47e@88~@G1z~+y<)UmyuG8ar118M(k7+1ZwxQt?H7Y7Z~tg{ zlb$ythL`kaM)jAh^Xg-;G2Q_&+LSjd1{>>Tnbxt%WZG+p;f?beW3cgFQ!L*JUULjK z(QAq2G0B@9gKgu@iP~CnTdy^i?{?mS40C0k?6t-CP4VW&VB32iVwhvQ$sN3TF}xkU z56ANTfOin%IkuME$!m|ncJ}7S_)YZ|#PFth3uCZdyhSnC2ff8He!F@H$K=a+hs5x9 z^LQrSb7kJ$J2XbShj&;k-|5~`hPk@h(_0qHV=wRU813HP@)&F%Z$%8YuXjX@-+tao zhPnCf?{&oRW_X=3*i0`MgVlShVz2|eBV({x-fD)e2{KM*y)`ks2JfgCtkF9PXSRQR&R}41S>yE{o4|#=H zzVp0wG1?D%>tnJUowUVjX4DP}kjgF?Qw3^N=kLkM;_W;mj-<(T1!(yqV^M-+Ah zW;mj-m6+im7(O;7J21l$&7%`D9E4|)@SDtGh9gS53Nsu8bM5L#%y2|ut1-h7g{|>E z8G{|=eJUo)(U{F}JPK10xnK6rcmYf;JK>2(~ zgkO(5Lpo!5qKojmRo){HaQUsmJXA7k*WKl>G4pu3|9mHTrhJ3$qz@af^?C?^`1ts= zN~o&<&qIms@ktv0*UvDAjRnHwY=fz3XjBd!iGup9+70zYOOw%jG{ID8>e42};*+6#{o9?F2sy}#~DbG|dLPqv~f?4|=re{(j*SE=K7L0WUUg$OVlJ^M&^?0hHeybdpAh{BM00Y>UlRBY+x1fvj z0=bMI*TPREJ1n2XG|i9iUl_lH`Hnm6pN4l19Nz@*8w0+RSK0C=T>O#f_k4N2dYQ@& zy^vfkz0PozJU^yiJb~9l@zY!Wvvog-`0IHQ{f^0X3i_zQ!9=h6oT8d2PD?&N?eOx( z0xv3MXU)iDTU%#OOTI8IwY0dllCNyatSVG!-8M5V`QkLJ+)hirG;OL{HuV7d!s_in zZ=qDp*kxJ*0`p~HW~U|p%$O+xYJW_;`p7EQcQ8A)r~F1NPH4?g`Ca_6TefVq{Ko$^ zF*JBVr2O=tZg5bjTn=&K3u<@Vn>Z25M>E(Pt5k1r4E5s|#R;USTqCiAZ^&<`zc_w2 z-Pm)WhkfLQL+e4f_^b!{bx2av&-}Q`!UE|c)rF@>KcFSi5FK*FW+%_}3Bwg>J(9#0+`yF#ImXdg3gX z1;^JLsh;T*(dSHgiK(ZHEe!=eM6U>b;!9f|M{|5Wp80LAp`d!RFvJ#}rm=a0S2?s7GwpQHno=EH zDG&7ZXY!@)Ovi@ex@u-=VPm1EKh>C4pB0A=Ug^+Y!n8XPtuDz*>`^LbGzSm}v3l?d z2meyW-!WU?r1jTRr1;jksjoonsjAiuUhd#u#`p(h>zj?fd;74pZEdlqSlyI4vRK`a zsctA_xEgFFq?*$38&Ms+%;9sn%E7Mo%+|LspZ4zVB5fkc_XKsfs8T6c`a!)#d}{Dg zhxQ7VVXticY^DwLYGe4~ff8>?A!2db;3W?2m7ta4gP=9K`(4G*;Ow4W(&AN;06cMa3+)L?2iC_C-`0R9Yd|KLRq{-DZX zJHU(vV}}b1*xdmENkpqHvPQoSwXly5Ug+?+mh-G{FgD_AfS6EiTgM6uk+uilvM-oy>xK4?GM!cii$<#}>Y=I{ru5*TJZ11KC!bqXE}Ifln~eYY*e3L4o6_)qdD`Ha4$ZA9*Ev<}+2phloI|`C zo6}3=1%qcewBJ)X_S8T_(CcZbULnNuK6>^%5IhxSgDQ#Xh`nuqiYQ^uw= z0!U)!mZzNhxJz~Ba$;|49Xrvh>Fw)5Enxu z)q|gNc>YA?`ZHp2i_xPWBW!3e(Z|=RV?h*_ov;D!iFJdgI=t`UI%;n*dUj$gbqVQ1 zq0)wu+J#7g?Z(8WEx&W>;HRn+{y&v^8J$yC6)V*NH1dIoHO@*S!X!RF_*qAmdr{7m zm|=StQK}3z)4C_8T^LN(W}umkX3*FRlmE*?V7y=wc1hkKA#srM*q>Hf zAJZozU?%7)mj4=gg{7b|aiuqgKN9(`mRGC4LH_lb!(#M0zpu-yO?~_MjYlhlHYYOH z;`dCvN)co=$HdT)_J1Qb_J(5aY4!2;mTlbhZxhFo9FRD6c2o<{$M^f~wT@Y)>D@C*nAN#n zzJnV57JQMu!FSxf{D|am@#(%{^_k2Ezv>8W%glf8Gs{d9@VyAU-XS@`_j=?*d>JK* z&-VxXeefg}C6`_9W)Zayj@^8V$SeeCFZLp<>46 z2G}tq3U~x_XJT&$ee7=4|o(T|H0*ZY}(w>dxwT z!rGH`fyHX@dIvMX-@zO{eS3+m@C)R-1J0vIg-UNP@@A)IEJIqy^ z{KIu8jsnMb!29N4?s^j9q4s~buBkMdhf^22&_{#%O_C_!F&T5?@PE$J!5>N8-6C&M ze@5Mr??>r%e#gjLObkNZ=|nLen&Ms5r8m>Bp!kmQf#j|^_`6XuO2H|Rq>x=&zZGw-7FXSOy%=}nX^vj{!6k{8bO` zD!!9Dg5mg89SO|UAM{W0(Y-6;){RRee5>+y@V!mmfwf%vCcfJLqxc2UD(-@e1jn!8 zD>$Dx-vN0C_}(rzgD-s(U&I6?DxZr_@)BQy2Ye;x6W7B=xfy)#kavRb9rDLk5Ac7I z%f%;oNe=`M^dQ92Q-rv3>M?@mQ|Y7AiSo|GRLFT3>-R2s4_@Sg9uR|~_}(en*DeJi z`6IRCI-Ml%0*^Z()fxEy3G>LnP+no5b@9DZ1j}{rDQ%JZ*d%`p9(T#R!DBPNNpC+8 z0`Y>%;o?*Iem(XnhU3@N$IGlo7f;J}vb-C7p)c_LF)YZ~4<3@HILNrb%f`tO=f` zcEfc`8Lt{HU;8o4M=j~b>wc9&@a8Pu^3_jh)`;HowRrQ=p)o`OZ!&el|M7OMeG4$< zywb8$n{0KA@Biir-W!Ci!f$mN!{;s3;RZb%)b|-` z75rx`FMKsDS&a$FZSX93ex_Q5IHR9u@qD$|IrRK2wF-8Y%4BC`8Xn+793@t6N*IDXmYCu5DQa8lULDQ}Y^c7BHZMa<4I*TULk3cLmS zfNZkV^h@su;^+fwN7N&G)PH^^@X5{}kiW37$yFidPLJV_#Lj;uf2CfBox}fQ^qT!y z@>j;r{rtw`iHQRlNMhw9u-6X=_=OYQ%ZOeC-hFjra&#Zid8$+1KdQKP@r4&Vb$m87 z^d|BUfu8g@nafFW&Ek`uqj7DQrN#a#ov)zZO^-x1zjTo@eO*2nt7{*ZF7P(*uVr%x zgm=x*PS>vM^MFrv{cHK4rI~yN?&Iy}Nb34w`LKEebwmDNJHPYg!=|qN{Kn72@M9o` z&vnf*)vRld9PocDHQr)GUAMQH`)FOCkJqT%Mpf76w@h*B`Ww*DoAjn+peL$pDK=`I`f zfB73~^oAO;{*q;# zJlm|7FFFaQwDc5+wH?D#{6?=Z(T%q=J0aJUIlR_kc0n~p<&|1zOGl=CZF!(-ca5-~utplK z>qn5k6ezDo;4Kc=5O?n~wVOV~{5+W`l>R z%SG$fVf4{Y4bP&J`g)38#j3w80b4PB-q@RyO~XPXGChv{2W3%D{37eRKBbl_(2{YN zpj^LGxy(vIpH;B`#9b2&*ir4JnwrzJwiNU& zyYcpMC)Uv>wQ_uzU!c7)O|xs%#nUQ>^IUdlH8o3^CL{noqOWIEt}8EgYBjaiKG0pn z;b_X16b?9M)#1Grg_=qHiCdlePMBB$!XxoK}xV@_w0V_X4d62fFaQ z36zayeqlp?W3gOGHS4W;jxPSJa*Zj$w2s`yG@01XIY#>z_Wzm4S68`TOxk_Avd~w6 zHmQH$W?zWN{tE2o39&cvaPnVKsDRM0a0CF~2>oB#=J#a!KyR87Ecye*wWPZvw10#A z%ftapt4lyS*JejHK-#b9V)!x`rv|6Mo?cbC)_SoNe9Wd&V|<}qxEb2ii|u&*nSIPv zmTk=3G+06V_f0j=Nt?CRAdkPR-28%QLmqY`sy1-WBiC=Y6D=zb^cR8+D%KxT&8=zp zf291cVeix++nn9jMCE4|Vb!&!W3>NZz3)r%7^@4>ws&_ev!1*LiQ=a?tAy zu_4=;j~)md&PtylZvFikG({^mZ0av|VXGqAf9&EcRuE2LEdA6SZpo%W5y|Hb-cLyO z?QRXy3|EIr*%E6b-^AXQyr44LtwHRQEX?Z8VsC-^MAkAuj`2BCP-kzc9L}zynBZ>% zBA?duiwlMBwb(cqFo?B_Z>!uuRqVm^+OiDo;pJ*^-6k81Tbj}oJE-r1Ph|Y^1?+_3 zzNPfXFSJ&RdXM4{Gq%LuoX0R0dPLEl8Yq>DN+~=xmS2>=jqS&uFGPN$#)f>4;ood~ zN5AlYk)0Kjhf(C0 z6PV!abTmHy2Ys_<(EwV#`8?#Ox=HT|92LDO9tpO@`X*caIBmCzkqmkt;*mI5FOZ=% zDnCx$$aNLi5AAT6XqT)nAv!NDcO8$xaS-QQZ0E+;J5K1x!M?~3?XWnYX9?oSVOrCtYq1=;Qp~G`2N@6#%V zM!a)k^*J_>D`@tY75mX-_2f&4>iyKF%a{2gyz7)vn=dk<%-2~pJs_FdRV?So|H4Paz z(ZPQx1#}a!Z#^US;rz4`+j~w#?*?TdYJP2}z0^&fm70U0qdtQypr5328w!Xk_64LG zI^eg4(3`<~57hia3B)NP$2KZ={4)3^_?U7V2`DHoFBu+-^Ti$_hW|(Cw?!MSkLwqllg^0UnC=cGAJnTWR5}g$S2ZQ)^h<=!)9-N zp$D^Ll}(g+B=0GR#Z$#@#KV+T$H2o2)PR_Gy=ut3J@YZak1 zcr(TtEoO-*1@iBpayW;vop_kM-L2tAZYXwbh_T7!@p2lvX*~sciL}t2n$w)_ityc0 zJZ^v}_4M{!egqJ09KdX&p%#s1)-lwL@=xH{Yo z<=#$g4>~QcIfxj@&FKXZ+}*hbb_TB2(8}_OdX|vl5)nl3_fWY-8^sjhYad-$E_de< zds|!ZE>8q^I@*sc`ZM;WAv1)`_<2}>&MP`@#|cllVxOo7z3zoBtmIE5V|LyYzyKOA zc)@FRgVP$b?Y+=HuA)!bX!?a#;jwpvTIZy(8iN$r^WLog*`U?^Av-;5gILCAwm9;p zMRrybmI)$bNt`-GQJQ4Y{Ubdbj&Vz6XEmocL}b|)?N}au0b8Icq}){V#@Qkrw0NDw z(TkM~yjtL=hkzSCkuld-Fv8JeE`Q8I?=ehW6vH2G%=H`jdyIb`3t8U}EeU&lw)r#eSHNS%kQay3qZ_A^Lc>5)e9r_lmQ#(w)pNg>T(A+h292 zTG3XMN9h;je4DTXm29>pJ+&hu#|*^ER?LanmJR`t-GJw7I{AIla!+~vCcOU`^R1a^ zYjYUmf!6PjxUHb}r!3xN<4o}tl)oPFuo3MH(FPIGZ$KlY0o?(x;U3WhI!$H$359f2 z6wC_Q_Yv_{9QqTK0$#H)My-fO@QSpY5oY0clyG!^8UZ)LE6eR)J@GQS=tO&mC=XsW zM-jv(!lOausvGdWyT8O>U$!(1=rzu;Xn4=EA&qxjCC8jdUhv*lh_Wed z{68pDi<7^uty=j9?=i4~(;Tbq_DcM)Y?e+M$xz5j?c^khOiK75L=;lmeZ#v3)~k zf4o4sF36Y4C7M^HUWZTLnnoCk(9eah^@=RhhrP|Gj5`_@#`U^IAjgNe>}|{^;%U?= z)PH4wdcFGS19~Trn;{l1mBpGi@d}r1o*5rd*>qhlDEIM1fiD|VM&sRwxjmi+S+pdC ztv7e^B3rhxF^&FbIIn})FZUrD;wVG2BQrRXC)7*~)^w12pKmX$Z!`GytcA`PM;Ow3+aAikEx!OTPZ zg3F_$*lXu443EtGfoc^a=@l5R=mFMB95s;d$6NeZAdkn$BX};go%w5jaQXXsBZrRU zVDiQ^Mz*On9krj8n8)bFc{)^fJ*si}(li(q-meb!VOD4=i^X*E|FAAQV2>ry!u<58 z#^o21lOA9{RYw=jj=+f(Sn-bV>O_2L#vBXVsu|_fGM4$}GE`UcXJW0%*wt#ct}zP+ zp4w(?Z{6YP>^xY8ioqXJLOamhoc3tM;qqC<QYqZJHF?er*E zwxrS5=M>oCk(d))D~`}St)<`aIaA0SlO^i{=XD_HP>K2oIkdIuzh2>$h%l+Lk68O)rAGvUfrD2>>~HRc#}~o+tP@? zipM$#%6^>6wRfR^g*=SC1+v%3Z)+up#nwFQbuaMN0U)+P*6(&;nLZ-dTFg^d!~&v? z$ra;ccJkIzYjYavj_~eMxt3YtFy^i6J1Dd5WySI^vewE2tIGKd=Rp>x=U2M<%$7Z~ z`oIv=f8iMi)R8$N4J=V9cD5s^lLG5)pRBtYjNT8;=;W&)3Ynu_(skn4I=06T6TQ(L zjX(8T0s6zC1KA9iSJ0eM1y+jT|6Ha(uJz1!Df88OV^%QeP%o1D+>~Jq9?itACc80s z1Lv`f^Uzjbla(#TFnQ3iNX9H3{S-Nm`N%_;!uGPYf}PrNXNY3ct+Qh``!V#NXf4~W zqz7A%Vw@otI*Aee9?x<$gI@bfs3)Vl>^O_77B8Io6XDgv>mswkOE-|UmX|3u)Z#WL zjcxQ1e!YlAC2=75nVx6u&7(uHG*%k;M+s-AWyH=|>JN5K)dMWVF4~HTN{g>cmvJUz z6=Mp!(cE|x<45K~K#U2hi2QxrkKY~iy3WHnVqnW>Xkj%sLU#h%<8_!njBWsr(8sI; zt1;1iYB)JOSMJ69AvOi`bh=-^5oTubOV>D*(U`{QCn8rr)@Cc1OO0&|CXLt))1Ylm zW8ywSTg6=R3YKH5bs3flyjskPud^2zCz^L2RuD6@dNVMVMtbsQYpd^?4=vY=d5e2C zJq#|h&3G@cg^j$QxS>JsQ#E5#dJkYN#ws+=Bq z)tZg1S)YVuje|uaXtZ6>i!gR5c37!=VrhuXv+211Z({$a{B`8=rOh0IF&)er3vN-r zI+^YAV9;orm_JbL;r85FSaHw43Svq`PvG9@kLd#4{tu7+=QZd(812<+zH0-OkD{vW z#ZtV+q*5Pt?D>a4V5=vcibz7o<|+P{mV(3w8=TffW7EVGZ7ab+%27Z1Keoc9pwW8v z_vw%zi?JJ)4o&3V#o^@=&6O>{pE~XzQmTeoaPp{6d>rHBf>?<>wElw`-x*+Jj_O3= zXYdHq&gD|bf)Jq+I4x|$tXRM16R@)maTxN^b%vL8*k;~sQJT`2U5ohWDH!7va8{?C zEdX!7ZnUWGQgo^TOKx4qM|gY^d&Zk#+xB49T5W*O)UWV{S(r=4_?l8+N1sxib6RlT zCe)gk7N9Cz+~vB(jCJeZXEM_^!=ZdPx3ehrp)y289Y=*fz!~QHu+t_0DO(7 zag#oq%f;ujpm>Zz;|w>^y|n&sAK<-Eyz_^>M>>VhVZm8YUs21vlf{1Alm%hNuMv9= z%d^um85}JB+_Z6Wru>jRP)rDq!;tYz$^d^AL9ZWrOAG5b&lp}ku(CKcNwDuER~FZA zsG@fq!#efmU(W&>-E#OgNsH=H&taB#F-bHJrlVw7H>G9vY^b#Syyt+XmF;Q?ly zMI>%hyQpnMM`@v^iF|YJo3*6!pvc4UEjaB4i1a)U1xq9n7#(vmuWyF2{X5D*rYx=o zd-KcPdSAIkOVnrVW$1S_^4+dasE^5~qfCgca}$@3ATQyABeI~!EX5g|A#gsv>-5>m zxC+uxk`q1B=8@_4j`vIURLaPXQ`R!mjO-tRAa#q&WlRy1On!pw!724VlrC8I=hl%1 zgxu*oe#S7q3VkIu^R1*RhFvI?WX0(%4k66oCb5Rz)fI_UvMvDP#p4CoFlzpiy9);< z>|;7W^r18XpE3B+rKq*AXA_(rM)Xaf8YyuX15pn4L+G0-327^KUb7r9ZnB9I z%tA9T-%%Mu{=FGUI3vqs8KQG;55mSLz%FacEPu%2>MVT#HP{I{ZE(( z@+OT98v`1x4O5;ZhZLs^nZXe;d<~n%b$b3l4-N~a4a7pH2^wNnWHn5ehh|f)Pg1o} z%g?qE(Z8mNeJAb#=n#SO9BayBDkx-gVKTB4K*Byrc{U%ktIk_Y)IEhlH(pD{>V{9h z-603g&CE0ZOZ(5OKc*_`42~|(Sm4?Z*$jQ;d5C`_EYD9lFNwdjh)$f2g$yB{L!_F% zN#&t_F8#_3^t!aLK92+aW1gC@5d?@Pk<6p9se74DCc(+ZZ-#8$rsxl6d7*ZlWTkRi znYSTVpq73CZC1vMWz5xn4duPHWw)gy-cCyVjBi4+bJ4dhd#$!-lH<4wuxs1N1(zf( z)dzjZcd6~6G#WksoGD=I2aQJ0Bx~5#CxTqJKh)+3K7-Hd{8Hp$ugSOcb;7h!xX%bV z(T7jrvzRr`6iMd;>FWV`GGAAP1pY;Q-Gl26I_1prl+XFsB0+7B$v1&sJFd}p$WV)p zmoCh?5diy1_W-pG&>4ahN8B_Tz23)!(5r0^nHYJy48zwoeU8XT7E=yBdre=TC(^+& zAt6pfTQSf^7&Go?j$IJAh2vFLa&Je=pAJJkb9-@ipK{fxpTHoJ;vy-a=QZgAk*KUg05WgmW?@f8if!G{aSZzT80 zb$=1{fPp(UU8m`X%#v@AZX4t$S{5YoN#=U5RGiz*8es}`Xg}qKL2qC=4!vR2NS-Py$;tYd`6?| z2Y}E0m}OzvN8OJ>dv0aNVUo5V(-7&%i0wl?nR#>b+?h#*dNWj>>G)83H)VPdbnvWq z(Kkz`#iFn$2B!hS&Qyp>mG6e6jWJseMU48^mIp7)^o z!nM;+m~8q93ji;gm`E{Hn0^A$W?dGm!|&NfJBnlhwm(DtM4M{KX`e-Y6OS+e^?%%Z ztACm!3EES)&esWD=elim+DfO+F_#N^YYVIRn(NA`bK5u6@Vgj?>>}yZd9A+TTHthx zN%l>&_R4x%tpd59qR(2)%n6;HO&`*>5Wh?QfU{y0tc-o%vnNokUN>_C?2qjsw(B zv2nmY9gVD*4MuwJae(Z=#sT7ZDRHGwMi@KL*MS|#8g@W93!MH?Vi-GMp2OII&Ud`E zgNWycZGeJ;)~kpliUXWR7+)V{WaxGLd-E@eIc#^lo3c^Ch@*eB%rw_RbwG*QVoIa2 zg~x#3LADT?_Zg;t5o;5u-u1i>>Ha+7byN#|fax^0<3Q5_6CO!UGDqd6XCoamJWjYI zcSP62$W1hnxrKxo4@|4Kg}QEq|w+qt>1Q{4D{!$-EqJ$HiMFe`<at}Y}9hEy778!i&uv2pb_BPg% z)5a6A8Hgj8n}5p4>9>JgIr=>8q8I38oE(mXZ>%m)YkO?T`~Iv(wq@EH~kz8D!3j)i%E0>HjEfQ2$sd4*9D}}+v6JEL zIl6{3&RN4@rv4Y%Npx=9!_(2&$sd`U6Z4Fmqt!E!x$QZBC~Ka)LB8jY;a0-yUKi;Pd2PWaY+GCqe* zdJXy^h}_vwM?|ElC-R{zuh8f|3N&r%m1K^k5yt4}m=L;-^hazzA;uT#8EU=B&eO;Y zW-b;M^Yo{i!}Mew`tR@%E~R%9N1kWOcpMo<=b(!Ap@RMhB-ZmUp|EY|G-_G3UiTp1 z9BJS01tWK~JsjSy!*WAwruAcn{FTbuD6VCt_->Qc%V_NSMG(KgZ4F72YP3>X*|xE5 zjo;n`JwQdRJLdmfAGLHGhel}Q)Nh+laof&!86SN&@zC|rV2xOcI=v!n#S_W-2VQ~3 z2PvozTPN?v=3i#cC_}_gZQc4A2NxsqQ{B1;L{?twpY$Y!582LWbpB@|B%Mdb48zMC zj^UIi$wI#}gOVIayt*^jut6_4$d zC&@y2;+xk#6zz|x$Jij~kz>CcBlurbic4{4$D8&6mt};u{|XbK49A7bFk0K6fJ_I# zOP3)$XF~Hj8m@*|SG99zDIqg?XU@dVm(~MbZ{|zK;=13g57FG28o`{&d6BuZ(1dC1 zS@M1I$-fFp@4rt55s)+RzsMe3TcAFR_05sCL4N~{j_a^f$ELU52Gtltn0W#? zuXZ!_zzP_)9#GZc7?1vp{_8lLxt^oQtQ_c}G2M2H57f_a$Pz}R=mBQ{h5Y!T_LM%9 z-c6hO52i#NOdFN_pbGcL&?bl4s0nud76ESp1|`rI z6DkVd)UtWgz0y7%kR;wvOK}Ie$=!AAVe;W^KDsY<_`OL%w)$!)|1>5WMNhn`mT6h- zx`;s>Ue>T}IAi75CaTfsbSOFBQirpga4M@)4yD8Nvw#!Tsk_&BT}U6b z+vqdee;utpCH&uwcUxOyc(3u{9RxPA*Qm_H=$2?AbMx-OT*>~{X}#; zlz;tGEeG=G{OhP1^MgWcd)OjsJ}x>m*_u)-S{LB@+L6 z-{Qo`_H{?}$G0rgW>O$N2Qg@ z`6bv82}3*@&>?;hiPP5}CVmil$i5S(W0J+}{o}urNHKuMkK^pT58m+lXGjqED1@c4 zvn_|UiP4k+Z{tx;u`&!ZKNv3qxH#i@QwA&y)k`tXu0Ws+p(2=GM~|U(pK)0>lTPqC z$bAyKRtZ}M8)t|JY4l~_zZr`>d7p8(9_-9ktui1#I^~c2-c2mV=8=^_sZ}6FJw(b7 z<>~M@bK+rJ!idrS#a9Pa_wTHoxDQ4nqxU|`h`&1Pin8@S=;o2>G5Nm9Sl7{4=o+Df zCRUG7#=7@S#&k!yQXP?;))z+OS7Z3E^ui{mnD}P=YIvKBj{hd`L1nyB(;rdkkhMNK zou=M5o$@-tNh6hVH2NHC+lz>gkG8!)q*;-#(DF;)hL8iXE>j$bEu7`U4gFH}*^hl* z<5%G?QV?dWO&G15l&5YJu(2Vd|NgIT*HScVv>t~U;9X-NIf;6n?{QvNjeEc3FLc#t z)1Vo&%frpsm4`ao(ol~=39YzS1tM&Eh-!r!wLCK93l>-iGb&?V#V&KOiu z>f;QF|7PRGg7NnNbN!w*;nOZBN~!t9>eBq$LQk|m=+nVJYS4{YkjLpw`15Je@(^8h zVEjdDPoIwFT5NvfvAY+4zot~>m8ys?{5<#aXP@14rf95f0;^e0aJ={9O_rnm1T z+PufkFRs@I5>d(h`Chsa;>0~J=3liB)6zIwIC7_O*!YHgf3ZJ02BSRp-T9Fx)xN&W z)V|w1C$1bQ&0JE-1S`Kom3cp(-YqkB5|q}j%|p-5*l)|0*P1Bb;zxTItNob{XM~89 zQ?C=37V(m0z6a+Av9^~-%e##@MVEJm{^9bD_3LR{`|jAPe5FW#tdS3yi0EubtFxI} zXT%BbYumC<_d2JY9VUXFAlVr;V>2f11Ku=ZTN-ywTV(K|N2PKO;~qbmP>au6!RAZYX+eu}J87 zCzpQGlG4UvKmEO0&A}UzzR@qQOJC<_?AVFbG0WXllWx4G%XIX@pKHZ{$rnvNT4A0B z^<&q;Z2ekVz4f+6d6~AQCha(rFNXowwyn%Fwp(|An(fo3#{@CUl5esarR{G5D)sw1cVS*3FhJ zZ>{v>&OD}z#+~t?tCmghsbx=_y3U!W(1$g7(p;w1&Dak72{x}>Dr-i(r<+fgo z#a_4mu1c{Fkup{%zHZwiv=lTDl{yCc@HbAGx-J?g-$ab#Hf283M%$D+)1XXn^+Zfb zPizMZ{5(T;(23KeGYb$ZB6aHPcOlb7^*go`2h;OebTp$9q4mqT$j?*jhy=oFqK)NF zNFE>MLHTohTnrvZ>yeSJBUaX!m4$BYvyr@sj@$i%IdAeix7|52Un z{plKQz!d*YFxO$7yhCl_66O)r*%)h%wen_}5B2j7$!z;7Q5}&oS?0rhI*KttA1o4+ z2%qy=>f=*BTgB%(z$%>43AIrHzEghUO^Nv*?&A;3pKTK>CZ;VS+YI>Eke~f_1@pIS z5CMJ-d0746PVL>E{!ct42PI-%%4kXcKGDv3#91<*PY2%J`TKu2~;7 z=6o1`)yVPLo{seKL-r(JPb`ve!{2qh;`M$$HG7h-d;i;g{s!KQ3qRk^rw0K}t2570 zB0nAEU&*&{$@KI*p`)zjk4N$y_qic+o-;w1KI7(}*cLSWK5Xs$6H{XRyM#E!WCV$5 zPTA+r;KkmJ-kshp0_};$^KK+~VvR&!Sa_W{w32QKhHdjV(Knu9tRm``6}pQ9y#!!d ze0$%~&l7ZFOx?or0J>%b!R$9D@4NH^dfE@11n;injXxZupWker)6dvd_=}SnBLF|f zS91I0p2=N!4-?rZ$u;JltN1D9QHKw4q+cy_BDp=TsMaQ-r2G%hO!96{yq;J?|M;D- z1d)_4qK@k+ncUIJX7%LV ztpA~SHwLm{U5X8x#7f|l9%3iDzj#SVwsY4untOViDj`}=Etz}5SB|Vi?TLloo8aSb z+d-#5;ZI28P}DsAp-vt}X_-lGl$(>z+1&U)$>ayP9I$g+4*wZ067Sghrfi7?^`xZj zPEEW2{=`2~-+En4iY0viFLRG$3jKTXf92d$CZ2P@MvOP&XV7b>B9QFE%kL$38kzhu zB)?Gx*@Tv#nPv84r;Z_nKy?6* zF+N7l73f@TAPjnc7Ipt`->x6^?+aog_l&#BJ^Jrok^ghvHh-e8?Q4nTR4bErlld3e z^G&`zV=B@38p`SWTHyCTLJqFqza%E`@xnMDnTK%Pb>?~{J#F1K6Uk{-CK8;qqkoN_ zhOo_)M(Tll|AGJihi@hA^Y!m1n3L1An#jr`DY+^6h2;O5I4qN!5=Sf41=1KZ*#R$r zc2CBa6eQJnI$7IlpP&6t;#fnIUfx$IWtQ~!59sJlkB3Ng?R7`gEf!->MJpmN$K4gl zCz4OD*3cjbT1Gux~)FQx^^dF1tV3+t{<{xSI{ z8x8@xv2Ib_HOXg_&jm2?(YnQTgURQUFGxk&Weu;bJGk!JKKKYmAD@MLGiDDuzQi*?s3fE0{nQg&EVb4BBi^qqb8)UhC=WdCk z`g%kXe~8$B*$fYfo_P>rsvYA6*f2&2bPIvQ&k2SRrj2UFlHr4k>(J8Ry8O?hh5wde3ffSXDtKDy{6F=iS5Iu8EOs%uGpUQ9AJ zaU6c@)?m+1`9#g+J$=(`0^V`MDfBZ};_qpc{%yG7>_UPqsp8<7E(6;}!{%d<9)jC( zCFJs_EYkt5p`Lh1p=TrhQgT;*CUG#(u|CuQ$TJ2i#o)Nl?R|`yhvzGm@`+5Y{U0-< z(WlI2Thu2`A2ys4@P53Pit~qX3x28UGSmm)>+V3Cty?5^QPFZs3v3Gv=tc!1{yZ&!?_V4_O z*IG`Vof-Jdxz{fI@u_!rtY|&(whw&#&~xwj_tNbz5|3VdMD7=_KQi`$A0Aga{rG$K zShD?}KDNULcRn<|<2&Mv*DkvE8z()s!~REheC+c2zPBGcd;eoUyamtFXOhn=wZ%I{A) x^_QpY`uE2cWuL$Kq33$9*rV@~Ik|;Tobb%$YW$*Ko_5x;KfCCn1*cOb{XdR2{;&W5 diff --git a/doc/xorg-docs/specs/XKB/XKBlib/fonts.fm5 b/doc/xorg-docs/specs/XKB/XKBlib/fonts.fm5 deleted file mode 100644 index 6223af9c49f4ca86643ea8fbdb3ab101ac81059f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45056 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 diff --git a/doc/xorg-docs/specs/XKB/XKBlib/title.fm5 b/doc/xorg-docs/specs/XKB/XKBlib/title.fm5 deleted file mode 100644 index 7ee5108508ccd9c17903bc8af6668fe6c144159c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22528 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 + + + + + + + X Logical Font Description Conventions + X Consortium Standard + Version 1.5 + + + JimFlowers + +Digital Equipment Corporation + + + + edited by + Stephen Gildea + + + X Consortium Standard + 1988,1994X Consortium + + 1988,1994 + Digital Equipment Corporation + + X Consortium + X Version 11, Release 6.8 + + + + +X Window System is a trademark of The Open Group. + + +Helvetica and Times are registered trademarks of Linotype Company. + + +ITC Avant Garde Gothic is a registered trademark of International +Typeface Corporation. + + +Times Roman is a registered trademark of Monotype Corporation. + + +Bitstream Amerigo is a registered trademark of Bitstream Inc. + + +Stone is a registered trademark of Adobe Systems Inc. + + + +Copyright 1988, 1994 X Consortium + + + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + + +Except as contained in this notice, the name of the X Consortium shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from the X Consortium. + + +Copyright 1988, 1989 +Digital Equipment Corporation, Maynard MA. All rights reserved. + + +Permission to use, copy, modify, and distribute this documentation +for any purpose and without fee is hereby granted, provided +that the above copyright notice and this permission +notice appear in all copies. +Digital Equipment Corporation makes no representations +about the +suitability for any purpose of the information in this document. +This documentation is provided as is without express or implied warranty. + + + + + +Introduction + + + + +It is a requirement that X client applications must be portable across server +implementations, with very different file systems, naming conventions, and +font libraries. +However, font access requests, +as defined by the X Window System Protocol, +neither specify server-independent conventions for font names +nor provide adequate font properties for logically describing typographic fonts. + + +X clients must be able to dynamically determine the fonts available +on any given server so that understandable information can be presented +to the user or so that intelligent font fallbacks can be chosen. +It is desirable for the most common queries to be accomplished +without the overhead of opening each font and inspecting font properties, +by means of simple +ListFonts +requests. +For example, if a user selected a Helvetica typeface family, +a client application should be able to query the server +for all Helvetica fonts and present only those setwidths, weights, slants, +point sizes, and character sets available for that family. + + +This document gives a standard logical font description +(hereafter referred to as XLFD) and the conventions to be used +in the core protocol so that clients can query and access screen type libraries +in a consistent manner across all X servers. +In addition to completely specifying a given font by means of its +FontName, +the XLFD also provides for a standard set of key +FontProperties +that describe the font in more detail. + + + +The XLFD provides an adequate set of typographic font properties, +such as CAP_HEIGHT, X_HEIGHT, +and RELATIVE_SETWIDTH, +for publishing and other applications to do intelligent font matching +or substitution when handling documents created on some foreign server +that use potentially unknown fonts. +In addition, +this information is required by certain clients +to position subscripts automatically and determine small capital heights, +recommended leading, word-space values, and so on. + + + + +Requirements and Goals + + + + +The XLFD meets the short-term and long-term goals to have a +standard logical font description that: + + + + +Provides unique, descriptive font names that support simple pattern +matching + + + + +Supports multiple font vendors, arbitrary character sets, and encodings + + + + +Supports naming and instancing of scalable and polymorphic fonts + + + + +Supports transformations and subsetting of fonts + + + + +Is independent of X server and operating or file system implementations + + + + +Supports arbitrarily complex font matching or substitution + + + + +Is extensible + + + + + +Provide Unique and Descriptive Font Names + + + + +It should be possible to have font names that are long enough and +descriptive enough to have a reasonable probability of being unique +without inventing a new registration organization. +Resolution and size-dependent font masters, multivendor font libraries, +and so on must be anticipated and handled by the font name alone. + + + +The name itself should be structured to be amenable to simple pattern +matching and parsing, thus allowing X clients to restrict font queries to +some subset of all possible fonts in the server. + + + + +Support Multiple Font Vendors and Character Sets + + + + + +The font name and properties should distinguish between fonts +that were supplied by different font vendors +but that possibly share the same name. +We anticipate a highly competitive font market where users will be able to +buy fonts from many sources according to their particular requirements. + + + +A number of font vendors deliver each font with all glyphs designed for that +font, where charset mappings are defined by encoding vectors. +Some server implementations may force these mappings to proprietary +or standard charsets statically in the font data. +Others may desire to perform the mapping dynamically in the server. +Provisions must be made in the font name +that allows a font request to specify or identify specific charset mappings +in server environments where multiple charsets are supported. + + + + +Support Scalable and Polymorphic Fonts + + + + + +If a font source can be scaled to an arbitrary size or varied in other +ways, it should be possible for an application to determine +that fact from the font name, and the +application should be able to construct a font name for any specific +instance. + + + + +Support Transformations and Subsetting of Fonts + + + + + +Arbitrary two-dimensional linear transformations of fonts should be +able to be requested by applications. Since such transformed fonts +may be used for special effects requiring a few characters from each +of many differently transformed fonts, it should be possible to +request only a few characters from a font for efficiency. + + + + +Be Independent of X Server and Operating or File System Implementations + + + + + +X client applications that require a particular font should be able to use +the descriptive name without knowledge of the file system or other +repository in use by the server. +However, +it should be possible for servers to translate a given font name +into a file name syntax that it knows how to deal with, +without compromising the uniqueness of the font name. +This algorithm should be reversible (exactly how this translation is done is +implementation dependent). + + + + +Support Arbitrarily Complex Font Matching and Substitution + + + + + +In addition to the font name, +the XLFD should define a standard list of descriptive font properties, +with agreed-upon fallbacks for all fonts. +This allows client applications to derive font-specific formatting +or display data and to perform font matching or substitution +when asked to handle potentially unknown fonts, as required. + + + + +Be Extensible + + + + + +The XLFD must be extensible so that new and/or private descriptive font +properties can be added to conforming fonts without making existing +X client or server implementations obsolete. + + + + + +X Logical Font Description + + + + + +XLFD is divided into two basic components: +the +FontName, +which gives all font information needed to uniquely identify a font +in X protocol requests (for example, +OpenFont, +ListFonts, +and so on) and a variable list of optional +FontProperties, +which describe a font in more detail. + + + +The +FontName +is used in font queries and is returned as data in certain X protocol requests. +It is also specified as the data value for the +FONT +item in the X Consortium Character Bitmap Distribution Format Standard +(BDF V2.1). + + + +The +FontProperties +are supplied on a font-by-font basis and are returned +as data in certain X protocol requests as part of the +XFontStruct +data structure. +The names and associated data values for each of the +FontProperties +may also appear as items of the +STARTPROPERTIES...ENDPROPERTIESlist +in the BDF V2.1 specification. + + +FontName + + + + + +Each +FontName +is logically composed of two strings: a +FontNameRegistry +prefix that is followed by a +FontNameSuffix. +The +FontName +uses the ISO 8859-1 encoding. +The +FontNameRegistry +is an + +x-registered-name (a name that has been registered with the X Consortium) +that identifies the registration authority that owns the specified +FontNameSuffix +syntax and semantics. + + + +All font names that conform to this specification are to use a +FontNameRegistry +prefix, which is defined to be the string "-" +(HYPHEN). +All +FontNameRegistry +prefixes of the form: +version-, +where the specified version indicates some future XLFD specification, +are reserved by the X Consortium for future extensions to XLFD font names. +If required, extensions to the current XLFD font name shall be constructed +by appending new fields to the current structure, +each delimited by the existing field delimiter. +The availability of other +FontNameRegistry +prefixes or fonts that support other registries +is server implementation dependent. + + + +In the X protocol specification, +the +FontName +is required to be a string; +hence, numeric field values are represented in the name as string equivalents. +All +FontNameSuffix +fields are also defined as +FontProperties; +numeric property values are represented as signed or unsigned integers, +as appropriate. + + + +FontName Syntax + + + + + +The +FontName +is a structured, parsable string (of type STRING8) +whose Backus-Naur Form syntax description is as follows: + + + + + + + + + + FontName ::= + +XFontNameRegistry XFontNameSuffix | +PrivFontNameRegistry PrivFontNameSuffix + + + + XFontNameRegistry ::= + XFNDelim | XFNExtPrefix Version XFNDelim + + + XFontNameSuffix ::= + +FOUNDRY XFNDelim FAMILY_NAME XFNDelim WEIGHT_NAME +XFNDelim SLANT XFNDelim SETWIDTH_NAME XFNDelim ADD_STYLE_NAME +XFNDelim PIXEL_SIZE XFNDelim POINT_SIZE +XFNDelim RESOLUTION_X XFNDelim RESOLUTION_Y XFNDelim +SPACING XFNDelim AVERAGE_WIDTH XFNDelim CHARSET_REGISTRY +XFNDelim CHARSET_ENCODING + + + + Version ::= + +STRING8 - the XLFD version that defines an extension +to the font name syntax (for example, "1.4") + + + + XFNExtPrefix ::= + OCTET - "+" (PLUS) + + + XFNDelim ::= + OCTET - "-" (HYPHEN) + + + PrivFontNameRegistry ::= + STRING8 - other than those strings reserved by XLFD + + + PrivFontNameSuffix ::= + STRING8 + + + + + + + +Field values are constructed as strings of ISO 8859-1 graphic characters, +excluding the following: + + + + +'-' (HYPHEN), the XLFD font name delimiter character + + + + +'?' (QUESTION MARK) and "*" (ASTERISK), the X protocol +font name wildcard characters + + + + +',' (COMMA), used by Xlib to separate XLFD font names in a font set. + + + + +'"' (QUOTATION MARK), used by some commercial products to quote a +font name. + + + + + + +Alphabetic case distinctions are allowed but are for human readability +concerns only. +Conforming X servers will perform matching on font name query or open requests +independent of case. +The entire font name string must have no more than 255 characters. +It is recommended that clients construct font name query patterns +by explicitly including all field delimiters to avoid unexpected results. +Note that SPACE is a valid character of a +FontName +field; for example, the string "ITC Avant Garde Gothic" might be a +FAMILY_NAME. + + + + +FontName Field Definitions + + + + + +This section discusses the +FontName: + + + + +FOUNDRY field + + + + +FAMILY_NAME field + + + + +WEIGHT_NAME field + + + + +SLANT field + + + + +SETWIDTH_NAME field + + + + +ADD_STYLE_NAME field + + + + +PIXEL_SIZE field + + + + +POINT_SIZE field + + + + +RESOLUTION_X and RESOLUTION_Y fields + + + + +SPACING field + + + + +AVERAGE_WIDTH field + + + + +CHARSET_REGISTRY and CHARSET_ENCODING fields + + + + + +FOUNDRY Field + + + + + +FOUNDRY is an x-registered-name, +the name or identifier of the digital type foundry +that digitized and supplied the font data, +or if different, the identifier of the organization that last modified +the font shape or metric information. + + + +The reason this distinction is necessary is +that a given font design may be licensed from one source (for example, ITC) +but digitized and sold by any number of different type suppliers. +Each digital version of the original design, in general, will be somewhat +different in metrics and shape from the idealized original font data, +because each font foundry, for better or for worse, has its own standards +and practices for tweaking a typeface for a particular generation +of output technologies or has its own perception of market needs. + + + +It is up to the type supplier to register with the X Consortium a +suitable name for this +FontName +field according to the registration procedures defined by the Consortium. + + + +The X Consortium shall define procedures for registering foundry +and other names and shall maintain and publish, +as part of its public distribution, +a registry of such registered names for use in XLFD font names and properties. + + + + + + + +FAMILY_NAME Field + + + + + +FAMILY_NAME is a string that identifies the range or family of +typeface designs that are all variations of one basic typographic style. +This must be spelled out in full, +with words separated by spaces, as required. +This name must be human-understandable and suitable for presentation to a +font user to identify the typeface family. + + + +It is up to the type supplier to supply and maintain a suitable string for +this field and font property, to secure the proper legal title to a given +name, and to guard against the infringement of other's copyrights or +trademarks. +By convention, FAMILY_NAME is not translated. +FAMILY_NAME may include an indication of design ownership +if considered a valid part of the +typeface family name. + + + +The following are examples of FAMILY_NAME: + + + + +Helvetica + + + + +ITC Avant Garde Gothic + + + + +Times + + + + +Times Roman + + + + +Bitstream Amerigo + + + + +Stone + + + + + + +WEIGHT_NAME Field + + + + + +WEIGHT_NAME is a string that identifies the font's typographic weight, +that is, the nominal blackness of the font, +according to the FOUNDRY's judgment. +This name must be human-understandable and suitable for presentation to a +font user. +The value "0" is used to indicate a polymorphic font (see ). + + + +The interpretation of this field is somewhat problematic +because the typographic judgment of weight has traditionally +depended on the overall design of the typeface family in question; +that is, it is possible that the DemiBold weight of one font could be +almost equivalent in typographic feel to a Bold font from another family. + + + +WEIGHT_NAME is captured as an arbitrary string +because it is an important part of a font's complete human-understandable name. +However, it should not be used for font matching or substitution. +For this purpose, +X client applications should use the weight-related font properties +(RELATIVE_WEIGHT and WEIGHT) that give the coded relative weight +and the calculated weight, respectively. + + + + +SLANT Field + + + + + +SLANT is a code-string that indicates the overall posture of the +typeface design used in the font. +The encoding is as follows: + + + + + + + + + + Code + English Translation + Description + + + + + "R" + Roman + Upright design + + + "I" + Italic + Italic design, slanted clockwise from the vertical + + + "O" + Oblique + Obliqued upright design, slanted clockwise from the vertical + + + "RI" + Reverse Italic + Italic design, slanted counterclockwise from the vertical + + + "RO" + Reverse Oblique + Obliqued upright design, slanted counterclockwise from the vertical + + + "OT" + Other + Other + + + numeric + Polymorphic + See . + + + + + + +The SLANT codes are for programming convenience only and usually are +converted into their equivalent human-understandable form before being +presented to a user. + + + + +SETWIDTH_NAME Field + + + + + +SETWIDTH_NAME is a string that gives the font's typographic +proportionate width, that is, the nominal width per horizontal unit of the +font, according to the FOUNDRY's judgment. +The value "0" is used to indicate a polymorphic font (see ). + + + +As with WEIGHT_NAME, the interpretation of this field or font property is +somewhat problematic, because the designer's judgment of setwidth has +traditionally depended on the overall design of the typeface family in +question. +For purposes of font matching or substitution, +X client applications should either use the RELATIVE_SETWIDTH font property +that gives the relative coded proportionate width or calculate +the proportionate width. + + + +The following are examples of SETWIDTH_NAME: + + + + + +Normal + + + + +Condensed + + + + +Narrow + + + + +Double Wide + + + + + + +ADD_STYLE_NAME Field + + + + + +ADD_STYLE_NAME is a string that identifies additional typographic +style information that is not captured by other fields but is needed +to identify the particular font. +The character "[" anywhere in the field is used to indicate a +polymorphic font (see ). + + + +ADD_STYLE_NAME is not a typeface classification field +and is only used for uniqueness. +Its use, as such, is not limited to typographic style distinctions. + + + +The following are examples of ADD_STYLE_NAME: + + + + +Serif + + + + +Sans Serif + + + + +Informal + + + + +Decorated + + + + + + +PIXEL_SIZE Field + + + + + +PIXEL_SIZE +gives the body size of the font at a particular +POINT_SIZE and RESOLUTION_Y. +PIXEL_SIZE is either an integer-string or a string beginning +with "[". A string beginning with "[" represents a matrix +(see ). +PIXEL_SIZE usually incorporates additional vertical spacing +that is considered part of the font design. +(Note, however, that this value is not necessarily equivalent to the height +of the font bounding box.) +Zero is used to indicate a scalable font (see ). + + + +PIXEL_SIZE usually is used by X client applications that need to +query fonts according to device-dependent size, +regardless of the point size or vertical resolution +for which the font was designed. + + + + +SN POINT_SIZE Field + + + + + +POINT_SIZE gives the body size +for which the font was designed. +POINT_SIZE is either an integer-string or a string beginning +with "[". A string beginning with "[" represents a matrix +(see ). +This field usually incorporates additional vertical spacing +that is considered part of the font design. +(Note, however, that POINT_SIZE is not necessarily equivalent to the height +of the font bounding box.) +POINT_SIZE is expressed in decipoints (where points are as defined +in the X protocol or 72.27 points equal 1 inch). +Zero is used to indicate a scalable font (see ). + + + +POINT_SIZE and RESOLUTION_Y are used by X clients to query fonts +according to device-independent size to maintain constant text +size on the display regardless of the PIXEL_SIZE used for the font. + + + + +RESOLUTION_X and RESOLUTION_Y Fields + + + + + +RESOLUTION_X and RESOLUTION_Y are unsigned integer-strings that give +the horizontal and vertical resolution, +measured in pixels or dots per inch (dpi), +for which the font was designed. +Zero is used to indicate a scalable font (see ). +Horizontal and vertical values are required +because a separate bitmap font must be designed +for displays with very different aspect ratios +(for example, 1:1, 4:3, 2:1, and so on). + + + +The separation of pixel or point size and resolution is necessary +because X allows for servers with very different video characteristics +(for example, horizontal and vertical resolution, screen and pixel size, +pixel shape, and so on) to potentially access the same font library. +The font name, for example, must differentiate between a 14-point font designed +for 75 dpi (body size of about 14 pixels) or a 14-point font designed +for 150 dpi (body size of about 28 pixels). +Further, in servers that implement some or all fonts as continuously scaled +and scan-converted outlines, +POINT_SIZE and RESOLUTION_Y will help the server to differentiate +between potentially separate font masters for text, title, +and display sizes or for other typographic considerations. + + + + +SPACING Field + + + + + +SPACING is a code-string that indicates the escapement class of the font, +that is, monospace (fixed pitch), proportional (variable pitch), +or charcell (a special monospaced font that conforms to the traditional +data-processing character cell font model). +The encoding is as follows: + + + + + + + + + + Code + English Translation + Description + + + + + "P" + Proportional + +A font whose logical character widths vary for each glyph. +Note that no other restrictions are placed on the metrics +of a proportional font. + + + + "M" + Monospaced + +A font whose logical character widths are constant +(that is, every glyph in the font has the same logical width). +No other restrictions are placed on the metrics of a monospaced font. + + + + "C" + CharCell + +A monospaced font that follows the standard typewriter character cell model +(that is, the glyphs of the font can be modeled by X clients as "boxes" +of the same width and height that are imaged side-by-side +to form text strings or top-to-bottom to form text lines). +By definition, +all glyphs have the same logical character width, +and no glyphs have "ink" outside of the character cell. +There is no kerning (that is, on a per-character basis with positive metrics: +0 <= left-bearing <= right-bearing <= width; +with negative metrics: width <= left-bearing <= right-bearing <= zero). +Also, the vertical extents of the font do not exceed the vertical spacing +(that is, on a per-character basis: +ascent <= font-ascent and descent <= font-descent). +The cell height = font-descent + font-ascent, and the width = AVERAGE_WIDTH. + + + + + + + + +AVERAGE_WIDTH Field + + + + + +AVERAGE_WIDTH is an integer-string typographic metric value +that gives the unweighted arithmetic mean of the absolute value of the +width of each glyph in the font +(measured in tenths of pixels), multiplied by -1 if the dominant +writing direction for the font is right-to-left. +A leading "~" (TILDE) indicates a negative value. +For monospaced and character cell fonts, +this is the width of all glyphs in the font. +Zero is used to indicate a scalable font (see ). + + + + +CHARSET_REGISTRY and CHARSET_ENCODING Fields + + + + + +The character set used to encode the glyphs of the font (and implicitly +the font's glyph repertoire), as maintained by the X Consortium character +set registry. +CHARSET_REGISTRY is an x-registered-name that identifies +the registration authority that owns the specified encoding. +CHARSET_ENCODING is a registered name that identifies the coded character set +as defined by that registration authority +and, optionally, a subsetting hint. + + + +Although the X protocol does not explicitly have any knowledge about +character set encodings, +it is expected that server implementors will prefer to embed knowledge +of certain proprietary or standard charsets into their font library +for reasons of performance and convenience. +The CHARSET_REGISTRY and CHARSET_ENCODING fields or properties allow +an X client font request to specify a specific charset mapping +in server environments where multiple charsets are supported. +The availability of any particular +character set is font and server implementation dependent. + + + +To prevent collisions when defining character set names, +it is recommended that CHARSET_REGISTRY and CHARSET_ENCODING name pairs +be constructed according to the following conventions: + + + + + + + + + + CharsetRegistry ::= + StdCharsetRegistryName | PrivCharsetRegistryName + + + CharsetEncoding ::= + StdCharsetEncodingName | PrivCharsetEncodingName + + + StdCharsetRegistryName ::= + StdOrganizationId StdNumber | StdOrganizationId StdNumber Dot Year + + + PrivCharsetRegistryName ::= + OrganizationId STRING8 + + + StdCharsetEncodingName ::= + STRING8-numeric part number of referenced standard + + + PrivCharsetEncodingName ::= + STRING8 + + + StdOrganizationId ::= + STRING8-the registered name or acronym of the referenced standard organization + + + StdNumber ::= + STRING8-referenced standard number + + + OrganizationId ::= + STRING8-the registered name or acronym of the organization + + + Dot ::= + OCTET-"." (FULL STOP) + + + Year ::= + STRING8-numeric year (for example, 1989) + + + + + + + +The X Consortium shall maintain and publish a registry +of such character set names for use in X protocol font names and properties +as specified in XLFD. + + + +The ISO Latin-1 character set shall be registered by the X Consortium as the +CHARSET_REGISTRY-CHARSET_ENCODING value pair: "ISO8859-1". + + + +If the CHARSET_ENCODING contains a "[" (LEFT SQUARE BRACKET), +the "[" and the characters after it up to a "]" (RIGHT SQUARE +BRACKET) are a +subsetting hint telling the font source that the client is interested +only in a subset of the characters of the font. +The font source can, optionally, return a font that +contains only those characters or any superset of those characters. The +client can expect to obtain valid glyphs and metrics only for those +characters, and not for any other characters in the font. +The font properties may optionally be calculated by considering only +the characters in the subset. + + + +The BNF for the subsetting hint is + + + + + + + + + Subset ::= + LeftBracket RangeList RightBracket + + + RangeList ::= + Range | Range Space RangeList + + + Range ::= + Number | Number Underscore Number + + + Number ::= + "0x" HexNumber | DecNumber + + + HexNumber ::= + HexDigit | HexDigit HexNumber + + + DecNumber ::= + DecDigit | DecDigit DecNumber + + + DecDigit ::= + "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" + + + HexDigit ::= + DecDigit | "a" | "b" | "c" | "d" | "e" | "f" + + + LeftBracket ::= + "[" (LEFT SQUARE BRACKET) + + + RightBracket ::= + "]" (RIGHT SQUARE BRACKET) + + + Space ::= + "\0" (SPACE) + + + Underscore ::= + "_" (LOW LINE) + + + + + + + +Each Range specifies characters that are to be part of the subset +included in the font. +A Range containing two Numbers specifies the first and last character, +inclusively, of a range of characters. +A Range that is a single Number specifies a single character to be +included in the font. +A HexNumber is interpreted as a hexadecimal number. +A DecNumber is interpreted as a decimal number. +The font consists of the union of all the Ranges in the +RangeList. + + + +For example, + + + + + + -misc-fixed-medium-r-normal--0-0-0-0-c-0-iso8859-1[65 70 80_90] + + + + + +tells the font source that the client is interested only in characters +65, 70, and 80-90. + + + + + +Examples + + + + + +The following examples of font names are derived from the screen fonts +shipped with the X Consortium distribution. + + + + + + + + + + + Font + X FontName + + + + + 75-dpi Fonts + + + Charter 12 pt + -Bitstream-Charter-Medium-R-Normal--12-120-75-75-P-68-ISO8859-1 + + + Charter Bold 12 pt + -Bitstream-Charter-Bold-R-Normal--12-120-75-75-P-76-ISO8859-1 + + + Charter Bold Italic 12 pt + -Bitstream-Charter-Bold-I-Normal--12-120-75-75-P-75-ISO8859-1 + + + Charter Italic 12 pt + -Bitstream-Charter-Medium-I-Normal--12-120-75-75-P-66-ISO8859-1 + + + Courier 8 pt + -Adobe-Courier-Medium-R-Normal--8-80-75-75-M-50-ISO8859-1 + + + Courier 10 pt + -Adobe-Courier-Medium-R-Normal--10-100-75-75-M-60-ISO8859-1 + + + Courier 12 pt + -Adobe-Courier-Medium-R-Normal--12-120-75-75-M-70-ISO8859-1 + + + Courier 24 pt + -Adobe-Courier-Medium-R-Normal--24-240-75-75-M-150-ISO8859-1 + + + Courier Bold 10 pt + -Adobe-Courier-Bold-R-Normal--10-100-75-75-M-60-ISO8859-1 + + + Courier Bold Oblique 10 pt + -Adobe-Courier-Bold-O-Normal--10-100-75-75-M-60-ISO8859-1 + + + Courier Oblique 10 pt + -Adobe-Courier-Medium-O-Normal--10-100-75-75-M-60-ISO8859-1 + + + 100-dpi Fonts + + + Symbol 10 pt + -Adobe-Symbol-Medium-R-Normal--14-100-100-100-P-85-Adobe-FONTSPECIFIC + + + Symbol 14 pt + -Adobe-Symbol-Medium-R-Normal--20-140-100-100-P-107-Adobe-FONTSPECIFIC + + + Symbol 18 pt + -Adobe-Symbol-Medium-R-Normal--25-180-100-100-P-142-Adobe-FONTSPECIFIC + + + Symbol 24 pt + -Adobe-Symbol-Medium-R-Normal--34-240-100-100-P-191-Adobe-FONTSPECIFIC + + + Times Bold 10 pt + -Adobe-Times-Bold-R-Normal--14-100-100-100-P-76-ISO8859-1 + + + Times Bold Italic 10 pt + -Adobe-Times-Bold-I-Normal--14-100-100-100-P-77-ISO8859-1 + + + Times Italic 10 pt + -Adobe-Times-Medium-I-Normal--14-100-100-100-P-73-ISO8859-1 + + + Times Roman 10 pt + -Adobe-Times-Medium-R-Normal--14-100-100-100-P-74-ISO8859-1 + + + + + + + + +Font Properties + + + + + +All font properties are optional but will generally include the +font name fields and, on a font-by-font basis, any other useful font +descriptive and use information that may be required to use the font +intelligently. +The XLFD specifies an extensive set of standard X font properties, +their interpretation, and fallback rules when the property is not defined +for a given font. +The goal is to provide client applications with enough font information +to be able to make automatic formatting and display decisions +with good typographic results. + + + +Font property names use the ISO 8859-1 encoding. + + + +Additional standard X font property definitions may be defined in the +future and private properties may exist in X fonts at any time. +Private font properties should be defined to conform to the general mechanism +defined in the X protocol to prevent overlap of name space and ambiguous +property names, that is, private font property names are of the form: +"_" (LOW LINE), +followed by the organizational identifier, followed by "_" (LOW LINE), +and terminated with the property name. + + + +The Backus-Naur Form syntax description of X font properties is as follows: + + + + + + + + + + + Properties ::= + OptFontPropList + + + OptFontPropList ::= + NULL | OptFontProp OptFontPropList + + + OptFontProp ::= + PrivateFontProp | XFontProp + + + PrivateFontProp ::= + STRING8 | Underscore OrganizationId Underscore STRING8 + + + XFontProp ::= + +FOUNDRY | FAMILY_NAME | WEIGHT_NAME | SLANT | SETWIDTH_NAME | ADD_STYLE_NAME +| PIXEL_SIZE | POINT_SIZE | RESOLUTION_X | RESOLUTION_Y | SPACING | +AVERAGE_WIDTH | CHARSET_REGISTRY | CHARSET_ENCODING | QUAD_WIDTH | +RESOLUTION | MIN_SPACE | NORM_SPACE | MAX_SPACE | END_SPACE | SUPERSCRIPT_X | +SUPERSCRIPT_Y | SUBSCRIPT_X | SUBSCRIPT_Y | UNDERLINE_POSITION | +UNDERLINE_THICKNESS | STRIKEOUT_ASCENT | STRIKEOUT_DESCENT | ITALIC_ANGLE +| X_HEIGHT | WEIGHT | FACE_NAME | +FULL_NAME | FONT | +COPYRIGHT | AVG_CAPITAL_WIDTH | +AVG_LOWERCASE_WIDTH | RELATIVE_SETWIDTH | RELATIVE_WEIGHT | CAP_HEIGHT | +SUPERSCRIPT_ SIZE | FIGURE_WIDTH | SUBSCRIPT_SIZE | SMALL_CAP_SIZE | +NOTICE | DESTINATION +| FONT_TYPE | FONT_VERSION | RASTERIZER_NAME | RASTERIZER_VERSION | +RAW_ASCENT | RAW_DESCENT | RAW_* | AXIS_NAMES | AXIS_LIMITS | +AXIS_TYPES + + + Underscore ::= + OCTET-"_" (LOW LINE) + + + OrganizationId ::= + STRING8-the registered name of the organization + + + + + + +FOUNDRY + + + + + +FOUNDRY is as defined in the +FontName +except that the property type is ATOM. + + + +FOUNDRY cannot be calculated or defaulted if not supplied as a font property. + + + + +FAMILY_NAME + + + + + +FAMILY_NAME is as defined in the +FontName +except that the property type is ATOM. + + + +FAMILY_NAME cannot be calculated or defaulted if not supplied as a font +property. + + + + +WEIGHT_NAME + + + + + +WEIGHT_NAME is as defined in the +FontName +except that the property type is ATOM. + + + +WEIGHT_NAME can be defaulted if not supplied as a font property, as follows: + + + +if (WEIGHT_NAME undefined) then + WEIGHT_NAME = ATOM("Medium") + + + + +SLANT + + + + + +SLANT is as defined in the +FontName +except that the property type is ATOM. + + + +SLANT can be defaulted if not supplied as a font property, as follows: + + + +if (SLANT undefined) then + SLANT = ATOM("R") + + + + +SETWIDTH_NAME + + + + + +SETWIDTH_NAME is as defined in the +FontName +except that the property type is ATOM. + + + +SETWIDTH_NAME can be defaulted if not supplied as a font property, as follows: + + + +if (SETWIDTH_NAME undefined) then + SETWIDTH_NAME = ATOM("Normal") + + + + +ADD_STYLE_NAME + + + + + +ADD_STYLE_NAME is as defined in the +FontName +except that the property type is ATOM. + + + +ADD_STYLE_NAME can be defaulted if not supplied as a font property, as follows: + + + +if (ADD_STYLE_NAME undefined) then + ADD_STYLE_NAME = ATOM("") + + + + +PIXEL_SIZE + + + + + +PIXEL_SIZE is as defined in the +FontName +except that the property type is INT32. + + + +X clients requiring pixel values for the various typographic fixed +spaces (em space, en space, and thin space) can use the following +algorithm for computing these values from other properties specified +for a font: + + + + DeciPointsPerInch = 722.7 + EMspace = ROUND ((RESOLUTION_X * POINT_SIZE) / DeciPointsPerInch) + ENspace = ROUND (EMspace / 2) + THINspace = ROUND (EMspace / 3)\fP + + + + +where a slash (/) denotes real division, +an asterisk (*) denotes real multiplication, +and ROUND denotes a function that rounds its real argument +a up or down +to the next integer. +This rounding is done according to X = FLOOR ( +a + 0.5), +where FLOOR is a function that rounds its real argument down to the +nearest integer. + + + +PIXEL_SIZE can be approximated if not supplied as a font property, +according to the following algorithm: + + + +DeciPointsPerInch = 722.7 +if (PIXEL_SIZE undefined) then + PIXEL_SIZE = ROUND ((RESOLUTION_Y * POINT_SIZE) / DeciPointsPerInch) + + + + + +POINT_SIZE + + + + + +POINT_SIZE is as defined in the +FontName +except that the property type is INT32. + + + +X clients requiring device-independent values for em space, +en space, and thin space can use the following algorithm: + + + EMspace = ROUND (POINT_SIZE / 10) + ENspace = ROUND (POINT_SIZE / 20) + THINspace = ROUND (POINT_SIZE / 30) + + + + +Design POINT_SIZE cannot be calculated or approximated. + + + + +RESOLUTION_X + + + + + +RESOLUTION_X is as defined in the +FontName +except that the property type is CARD32. + + + +RESOLUTION_X cannot be calculated or approximated. + + + + +RESOLUTION_Y + + + + + +RESOLUTION_Y is as defined in the +FontName +except that the property type is CARD32. + + + +RESOLUTION_X cannot be calculated or approximated. + + + + +SPACING + + + + + +SPACING is as defined in the +FontName +except that the property type is ATOM. + + + +SPACING can be calculated if not supplied as a font property, +according to the definitions given above for the +FontName. + + + + +AVERAGE_WIDTH + + + + + +AVERAGE_WIDTH is as defined in the +FontName +except that the property type is INT32. + + + +AVERAGE_WIDTH can be calculated if not provided as a font property, +according to the following algorithm: + + + +if (AVERAGE_WIDTH undefined) then + AVERAGE_WIDTH = ROUND (MEAN (ABS (width of each glyph in font)) * 10) + * (if (dominant writing direction L-to-R) then 1 else -1) + + + + +where MEAN is a function that returns the arithmetic mean of its arguments. + + + +X clients that require values for the number of characters per inch (pitch) +of a monospaced font can use the following algorithm using the +AVERAGE_WIDTH and RESOLUTION_X font properties: + + + +if (SPACING not proportional) then + CharPitch = (RESOLUTION_X * 10) / AVERAGE_WIDTH + + + + +CHARSET_REGISTRY + + + + + +CHARSET_REGISTRY is as defined in the +FontName +except that the property type is ATOM. + + + +CHARSET_REGISTRY cannot be defaulted if not supplied as a font property. + + + + +CHARSET_ENCODING + + + + + +CHARSET_ENCODING is as defined in the +FontName +except that the property type is ATOM. + + + +CHARSET_ENCODING cannot be defaulted if not supplied as a font property. + + + + +MIN_SPACE + + + + + +MIN_SPACE is an integer value (of type INT32) +that gives the recommended minimum word-space value to be used with this font. + + + +MIN_SPACE can be approximated if not provided as a font property, +according to the following algorithm: + + + +if (MIN_SPACE undefined) then + MIN_SPACE = ROUND(0.75 * NORM_SPACE) + + + + +NORM_SPACE + + + + + +NORM_SPACE is an integer value (of type INT32) +that gives the recommended normal word-space value to be used with this font. + + + +NORM_SPACE can be approximated if not provided as a font property, +according to the following algorithm: + + + +DeciPointsPerInch = 722.7 +if (NORM_SPACE undefined) then + if (SPACE glyph exists) then + NORM_SPACE = width of SPACE + else NORM_SPACE = ROUND((0.33 * RESOLUTION_X * POINT_SIZE)/ DeciPointsPerInch) + + + + +MAX_SPACE + + + + + +MAX_SPACE is an integer value (of type INT32) +that gives the recommended maximum word-space value to be used with this font. + + + +MAX_SPACE can be approximated if not provided as a font property, +according to the following algorithm: + + + +if (MAX_SPACE undefined) then + MAX_SPACE = ROUND(1.5 * NORM_SPACE) + + + + +END_SPACE + + + + + +END_SPACE is an integer value (of type INT32) +that gives the recommended spacing at the end of sentences. + + + +END_SPACE can be approximated if not provided as a font property, +according to the following algorithm: + + + +if (END_SPACE undefined) then + END_SPACE = NORM_SPACE + + + + +AVG_CAPITAL_WIDTH + + + + + +AVG_CAPITAL_WIDTH is an integer value (of type INT32) +that gives the unweighted arithmetic mean of the absolute value of the +width of each capital glyph in the font, in tenths of pixels, +multiplied by -1 if the dominant +writing direction for the font is right-to-left. +This property applies to both Latin and non-Latin fonts. +For Latin fonts, +capitals are the glyphs A through Z. +This property is usually used for font matching or substitution. + + + +AVG_CAPITAL_WIDTH can be calculated if not provided as a font property, +according to the following algorithm: + + + +if (AVG_CAPITAL_WIDTH undefined) then + if (capitals exist) then + AVG_CAPITAL_WIDTH = ROUND (MEAN + (ABS (width of each capital glyph)) * 10) + * (if (dominant writing direction L-to-R) then 1 else -1) + else AVG_CAPITAL_WIDTH undefined + + + + +AVG_LOWERCASE_WIDTH + + + + + +AVG_LOWERCASE_WIDTH is an integer value (of type INT32) +that gives the unweighted arithmetic mean width of the absolute value +of the width of each lowercase glyph in the font in tenths of pixels, +multiplied by -1 if the dominant +writing direction for the font is right-to-left. +For Latin fonts, +lowercase are the glyphs a through z. +This property is usually used for font matching or substitution. + + + +Where appropriate, +AVG_LOWERCASE_WIDTH can be approximated if not provided as a font property, +according to the following algorithm: + + + +if (AVG_LOWERCASE_WIDTH undefined) then + if (lowercase exists) then + AVG_LOWERCASE_WIDTH = ROUND (MEAN + (ABS (width of each lowercase glyph)) * 10) + * (if (dominant writing direction L-to-R) then 1 else -1) + else AVG_LOWERCASE_WIDTH undefined + + + + +QUAD_WIDTH + + + + + +QUAD_WIDTH is an integer typographic metric (of type INT32) +that gives the width of a quad (em) space. + + + + +Because all typographic fixed spaces (em, en, and thin) are constant +for a given font size (that is, they do not vary according to setwidth), +the use of this font property has been deprecated. +X clients that require typographic fixed space values are encouraged +to discontinue use of QUAD_WIDTH and compute these values +from other font properties (for example, PIXEL_SIZE). +X clients that require a font-dependent width value should use either +the FIGURE_WIDTH or one of the average character width font properties +(AVERAGE_WIDTH, AVG_CAPITAL_WIDTH or AVG_LOWERCASE_WIDTH). + + + + + + +FIGURE_WIDTH + + + + + +FIGURE_WIDTH is an integer typographic metric (of type INT32) +that gives the width of the tabular figures and the dollar sign, +if suitable for tabular setting (all widths equal). +For Latin fonts, these tabular figures are the Arabic numerals 0 through 9. + + + +FIGURE_WIDTH can be approximated if not supplied as a font property, +according to the following algorithm: + + + +if (numerals and DOLLAR sign are defined & widths are equal) then + FIGURE_WIDTH = width of DOLLAR +else FIGURE_WIDTH property undefined + + + + +SUPERSCRIPT_X + + + + + +SUPERSCRIPT_X is an integer value (of type INT32) +that gives the recommended horizontal offset in pixels +from the position point to the X origin of synthetic superscript text. +If the current position point is at [X,Y], +then superscripts should begin at [X + SUPERSCRIPT_X, Y - SUPERSCRIPT_Y]. + + + +SUPERSCRIPT_X can be approximated if not provided as a font property, +according to the following algorithm: + + + +if (SUPERSCRIPT_X undefined) then + if (TANGENT(ITALIC_ANGLE) defined) then + SUPERSCRIPT_X = ROUND((0.40 * CAP_HEIGHT) / TANGENT(ITALIC_ANGLE)) + else SUPERSCRIPT_X = ROUND(0.40 * CAP_HEIGHT) + + + + +where TANGENT is a trigonometric function that returns the tangent of +its argument, which is in 1/64 degrees. + + + + +SUPERSCRIPT_Y + + + + + +SUPERSCRIPT_Y is an integer value (of type INT32) +that gives the recommended vertical offset in pixels +from the position point to the Y origin of synthetic superscript text. +If the current position point is at [X,Y], +then superscripts should begin at [X + SUPERSCRIPT_X, Y - SUPERSCRIPT_Y]. + + + +SUPERSCRIPT_Y can be approximated if not provided as a font property, +according to the following algorithm: + + +if (SUPERSCRIPT_Y undefined) then + SUPERSCRIPT_Y = ROUND(0.40 * CAP_HEIGHT) + + + + +SUBSCRIPT_X + + + + + +SUBSCRIPT_X is an integer value (of type INT32) +that gives the recommended horizontal offset in pixels +from the position point to the X origin of synthetic subscript text. +If the current position point is at [X,Y], +then subscripts should begin at [X + SUBSCRIPT_X, Y + SUBSCRIPT_Y]. + + + +SUBSCRIPT_X can be approximated if not provided as a font property, +according to the following algorithm: + + + +if (SUBSCRIPT_X undefined) then + if (TANGENT(ITALIC_ANGLE) defined) then + SUBSCRIPT_X = ROUND((0.40 * CAP_HEIGHT) / TANGENT(ITALIC_ANGLE)) + else SUBSCRIPT_X = ROUND(0.40 * CAP_HEIGHT) + + + + +SUBSCRIPT_Y + + + + + +SUBSCRIPT_Y is an integer value (of type INT32) +that gives the recommended vertical offset in pixels +from the position point to the Y origin of synthetic subscript text. +If the current position point is at [X,Y], +then subscripts should begin at [X + SUBSCRIPT_X, Y + SUBSCRIPT_Y]. + + + +SUBSCRIPT_Y can be approximated if not provided as a font property, +according to the following algorithm: + + + +if (SUBSCRIPT_Y undefined) then + SUBSCRIPT_Y = ROUND(0.40 * CAP_HEIGHT) + + + + +SUPERSCRIPT_SIZE + + + + + +SUPERSCRIPT_SIZE is an integer value (of type INT32) +that gives the recommended body size of synthetic superscripts +to be used with this font, in pixels. +This will generally be smaller than the size of the current font; +that is, superscripts are imaged from a smaller font +offset according to SUPERSCRIPT_X and SUPERSCRIPT_Y. + + + +SUPERSCRIPT_SIZE can be approximated if not provided as a font property, +according to the following algorithm: + + + +if (SUPERSCRIPT_SIZE undefined) then + SUPERSCRIPT_SIZE = ROUND(0.60 * PIXEL_SIZE) + + + + +SUBSCRIPT_SIZE + + + + + +SUBSCRIPT_SIZE is an integer value (of type INT32) +that gives the recommended body size of synthetic subscripts +to be used with this font, in pixels. +As with SUPERSCRIPT_SIZE, +this will generally be smaller than the size of the current font; +that is, subscripts are imaged from a smaller +font offset according to SUBSCRIPT_X and SUBSCRIPT_Y. + + + +SUBSCRIPT_SIZE can be approximated if not provided as a font property, +according to the algorithm: + + + +if (SUBSCRIPT_SIZE undefined) then + SUBSCRIPT_SIZE = ROUND(0.60 * PIXEL_SIZE) + + + + +SMALL_CAP_SIZE + + + + + +SMALL_CAP_SIZE is an integer value (of type INT32) +that gives the recommended body size of synthetic small capitals +to be used with this font, in pixels. +Small capitals are generally imaged from a smaller font +of slightly more weight. +No offset [X,Y] is necessary. + + + +SMALL_CAP_SIZE can be approximated if not provided as a font property, +according to the following algorithm: + + + +if (SMALL_CAP_SIZE undefined) then + SMALL_CAP_SIZE = ROUND(PIXEL_SIZE * ((X_HEIGHT + + ((CAP_HEIGHT - X_HEIGHT) / 3)) / CAP_HEIGHT)) + + + + +UNDERLINE_POSITION + + + + + +UNDERLINE_POSITION is an integer value (of type INT32) +that gives the recommended vertical offset in pixels +from the baseline to the top of the underline. +If the current position point is at [X,Y], +the top of the baseline is given by [X, Y + UNDERLINE_POSITION]. + + + +UNDERLINE_POSITION can be approximated if not provided as a font +property, according to the following algorithm: + + + +if (UNDERLINE_POSITION undefined) then + UNDERLINE_POSITION = ROUND((maximum descent) / 2) + + +where maximum descent +is the maximum descent (below the baseline) +in pixels of any glyph in the font. + + + + +UNDERLINE_THICKNESS + + + + + +UNDERLINE_THICKNESS is an integer value (of type INT32) +that gives the recommended underline thickness, in pixels. + + + +UNDERLINE_THICKNESS can be approximated if not provided as a font property, +according to the following algorithm: + + + +CapStemWidth = average width of the stems of capitals +if (UNDERLINE_THICKNESS undefined) then + UNDERLINE_THICKNESS = CapStemWidth + + + + +STRIKEOUT_ASCENT + + + + + +STRIKEOUT_ASCENT is an integer value (of type INT32) +that gives the vertical ascent for boxing or voiding glyphs in this font. +If the current position is at [X,Y] and the string extent is EXTENT, +the upper-left corner of the strikeout box is at [X, Y - STRIKEOUT_ASCENT] +and the lower-right corner of the box is at [X + EXTENT, Y + STRIKEOUT_DESCENT]. + + + +STRIKEOUT_ASCENT can be approximated if not provided as a font property, +according to the following algorithm: + + + +if (STRIKEOUT_ASCENT undefined) + STRIKEOUT_ASCENT = maximum ascent + + +where maximum ascent +is the maximum ascent (above the baseline) +in pixels of any glyph in the font. + + + + +STRIKEOUT_DESCENT + + + + + +STRIKEOUT_DESCENT is an integer value (of type INT32) +that gives the vertical descent for boxing or voiding glyphs in this font. +If the current position is at [X,Y] and the string extent is EXTENT, +the upper-left corner of the strikeout box is at [X, Y - STRIKEOUT_ASCENT] +and the lower-right corner of the box is at +[X + EXTENT, Y + STRIKEOUT_DESCENT]. + + + +STRIKEOUT_DESCENT can be approximated if not provided as a font property, +according to the following algorithm: + + + +if (STRIKEOUT_DESCENT undefined) + STRIKEOUT_DESCENT = maximum descent + + + +where maximum descent is the maximum +descent (below the baseline) +in pixels of any glyph in the font. + + + + +ITALIC_ANGLE + + + + + +ITALIC_ANGLE is an integer value (of type INT32) +that gives the nominal posture angle of the typeface design, in 1/64 degrees, +measured from the glyph origin counterclockwise from the three o'clock position. + + + +ITALIC_ANGLE can be defaulted if not provided as a font property, +according to the following algorithm: + + +if (ITALIC_ANGLE undefined) then + ITALIC_ANGLE = (90 * 64) + + + + +CAP_HEIGHT + + + + + +CAP_HEIGHT is an integer value (of type INT32) +that gives the nominal height of the capital letters contained in the font, +as specified by the FOUNDRY or typeface designer. + + + +Certain clients require CAP_HEIGHT to compute scale factors and +positioning offsets for synthesized glyphs where this +information or designed glyphs are not explicitly provided by the font +(for example, small capitals, superiors, inferiors, and so on). +CAP_HEIGHT is also a critical factor in font matching and substitution. + + + +CAP_HEIGHT can be approximated if not provided as a font property, +according to the following algorithm: + + + +if (CAP_HEIGHT undefined) then + if (Latin font) then + CAP_HEIGHT = XCharStruct.ascent[glyph X] + else if (capitals exist) then + CAP_HEIGHT = XCharStruct.ascent[some unaccented capital glyph] + else CAP_HEIGHT undefined + + + + +X_HEIGHT + + + + + +X_HEIGHT is an integer value (of type INT32) +that gives the nominal height above the baseline of the lowercase glyphs +contained in the font, +as specified by the FOUNDRY or typeface designer. + + + +As with CAP_HEIGHT, +X_HEIGHT is required by certain clients to compute scale factors +for synthesized small capitals where this information is not explicitly +provided by the font resource. +X_HEIGHT is a critical factor in font matching and substitution. + + + +X_HEIGHT can be approximated if not provided as a font property, +according to the following algorithm: + + + +if (X_HEIGHT undefined) then + if (Latin font) then + X_HEIGHT = XCharStruct.ascent[glyph x] + else if (lowercase exists) then + X_HEIGHT = XCharStruct.ascent[some unaccented lc glyph without an ascender] + else X_HEIGHT undefined + + + + +RELATIVE_SETWIDTH + + + + + +RELATIVE_SETWIDTH is an unsigned integer value (of type CARD32) +that gives the coded proportionate width of the font, +relative to all known fonts of the same typeface family, +according to the type designer's or FOUNDRY's judgment. + + + +RELATIVE_SETWIDTH ranges from 10 to 90 or is 0 if undefined or unknown. +The following reference values are defined: + + + + + + + + + Code + English Translation + Description + + + + + 0 + Undefined + Undefined or unknown + + + 10 + UltraCondensed + The lowest ratio of average width to height + + + 20 + ExtraCondensed + + + 30 + Condensed + Condensed, Narrow, Compressed, ... + + + 40 + SemiCondensed + + + 50 + Medium + Medium, Normal, Regular, ... + + + 60 + SemiExpanded + SemiExpanded, DemiExpanded, ... + + + 70 + Expanded + + + 80 + ExtraExpanded + ExtraExpanded, Wide, ... + + + 90 + UltraExpanded + The highest ratio of average width to height + + + + + + + +RELATIVE_SETWIDTH can be defaulted if not provided as a font property, +according to the following algorithm: + + + +if (RELATIVE_SETWIDTH undefined) then + RELATIVE_SETWIDTH = 50 + + + + +For polymorphic fonts, RELATIVE_SETWIDTH is not necessarily a +linear function of the font's setwidth axis. + + + +X clients that want to obtain a calculated proportionate width of the +font (that is, a font-independent way of identifying the proportionate +width across all fonts and all font vendors) can use the following algorithm: + + + +SETWIDTH = AVG_CAPITAL_WIDTH / (CAP_HEIGHT * 10) + + + + +where SETWIDTH is a real number with zero being the narrowest +calculated setwidth. + + + + +RELATIVE_WEIGHT + + + + + +RELATIVE_WEIGHT is an unsigned integer value (of type CARD32) +that gives the coded weight of the font, +relative to all known fonts of the same typeface family, +according to the type designer's or FOUNDRY's judgment. + + + +RELATIVE_WEIGHT ranges from 10 to 90 or is 0 if undefined or unknown. +The following reference values are defined: + + + + + + + + + Code + English Translation + Description + + + + + 0 + Undefined + Undefined or unknown + + + 10 + UltraLight + The lowest ratio of stem width to height + + + 20 + ExtraLight + + + 30 + Light + + + 40 + SemiLight + SemiLight, Book, ... + + + 50 + Medium + Medium, Normal, Regular,... + + + 60 + SemiBold + SemiBold, DemiBold, ... + + + 70 + Bold + + + 80 + ExtraBold + ExtraBold, Heavy, ... + + + 90 + UltraBold + +UltraBold, Black, ..., the highest ratio of stem width to height + + + + + + + + +RELATIVE_WEIGHT can be defaulted if not provided as a font property, +according to the following algorithm: + + + +if (RELATIVE_WEIGHT undefined) then + RELATIVE_WEIGHT = 50 + + + + +For polymorphic fonts, RELATIVE_WEIGHT is not necessarily a +linear function of the font's weight axis. + + + + +WEIGHT + + + + + +Calculated WEIGHT is an unsigned integer value (of type CARD32) +that gives the calculated weight of the font, +computed as the ratio of capital stem width to CAP_HEIGHT, +in the range 0 to 1000, where 0 is the lightest weight. + + + +WEIGHT can be calculated if not supplied as a font property, +according to the following algorithm: + + + +CapStemWidth = average width of the stems of capitals +if (WEIGHT undefined) then + WEIGHT = ROUND ((CapStemWidth * 1000) / CAP_HEIGHT) + + + + +A calculated value for weight is necessary when matching fonts from +different families because both the RELATIVE_WEIGHT and the WEIGHT_NAME are +assigned by the typeface supplier, according to its tradition and practice, +and therefore, are somewhat subjective. +Calculated WEIGHT provides a font-independent way of identifying +the weight across all fonts and all font vendors. + + + + +RESOLUTION + + + + + +RESOLUTION is an integer value (of type INT32) +that gives the resolution for which this font was created, +measured in 1/100 pixels per point. + + + +As independent horizontal and vertical design resolution components +are required to accommodate displays with nonsquare aspect ratios, +the use of this font property has been deprecated, +and independent RESOLUTION_X and RESOLUTION_Y font name fields/properties +have been defined (see sections 3.1.2.9 and 3.1.2.10). +X clients are encouraged to discontinue use of the RESOLUTION property +and are encouraged to use the appropriate X,Y resolution properties, +as required. + + + + + +FONT + + + + + +FONT is a string (of type ATOM) that gives the full XLFD name of the +font-that is, the value can be used to open another +instance of the same font. + + + +If not provided, the FONT property cannot be calculated. + + + + +FACE_NAME + + + + + +FACE_NAME is a human-understandable string (of type ATOM) +that gives the full device-independent typeface name, +including the owner, weight, slant, set, and so on +but not the resolution, size, and so on. +This property may be used as feedback during font selection. + + + +FACE_NAME cannot be calculated or approximated if not provided as a font +property. + + + + +FULL_NAME + + + + + +FULL_NAME is the same as FACE_NAME. +Its use is deprecated, but it is found on some old fonts. + + + + +COPYRIGHT + + + + + +COPYRIGHT is a human-understandable string (of type ATOM) +that gives the copyright information of the legal owner +of the digital font data. + + + +This information is a required component of a font +but is independent of the particular format used to represent it +(that is, it cannot be captured as a comment that could later +be thrown away for efficiency reasons). + + + +COPYRIGHT cannot be calculated or approximated if not provided as a font +property. + + + + +NOTICE + + + + + +NOTICE is a human-understandable string (of type ATOM) +that gives the copyright information of the legal owner of the font design +or, if not applicable, the trademark information for the typeface FAMILY_NAME. + + + +Typeface design and trademark protection laws vary from country to country, +the USA having no design copyright protection currently +while various countries in Europe offer both design and typeface family name +trademark protection. +As with COPYRIGHT, +this information is a required component of a font +but is independent of the particular format used to represent it. + + + +NOTICE cannot be calculated or approximated if not provided as +a font property. + + + + +DESTINATION + + + + + +DESTINATION is an unsigned integer code (of type CARD32) +that gives the font design destination, +that is, whether it was designed as a screen proofing font to match +printer font glyph widths (WYSIWYG), as an optimal video font (possibly with +corresponding printer font) for extended screen viewing (video text), and so on. + + + +The font design considerations are very different, +and at current display resolutions, +the readability and legibility of these two kinds of screen fonts +are very different. +DESTINATION allows publishing clients that use X to model the printed page +and video text clients, such as on-line documentation browsers, +to query for X screen fonts that suit their particular requirements. + + + +The encoding is as follows: + + + + + + + + + Code + English Translation + Description + + + + + 0 + WYSIWYG + +The font is optimized to match the typographic design and metrics of an +equivalent printer font. + + + + 1 + Video text + +The font is optimized for screen legibility and readability. + + + + + + + + +FONT_TYPE + + + + + +FONT_TYPE is a human-understandable string (of type ATOM) that +describes the format of +the font data as they are read from permanent storage by the current font source. +It is a static attribute of the source data. It can be used +by clients to select a type of bitmap or outline font +without regard to the rasterizer used to render the font. + + + +Predefined values are as follows: + + + + + + + + Value + When applicable + + + + + "Bitmap" + +Hand-tuned bitmap fonts. Some attempt has been made to optimize the visual +appearance of the font for the requested size and resolution. + + + + "Prebuilt" + +All bitmap format fonts that cannot be described as "Bitmap", that is, +handtuned. +For example, a bitmap format font that was generated mechanically using +a scalable font rasterizer would be considered "Prebuilt", not "Bitmap". + + + + "Type 1" + Any Type 1 font. + + + "TrueType" + Any TrueType font. + + + "Speedo" + Any Speedo font. + + + "F3" + Any F3 font. + + + + + +Other values may be registered with the X Consortium. + + + + +FONT_VERSION + + + + + +FONT_VERSION is a human-understandable string (of type ATOM) +that describes the formal or informal version of the font. +None is a valid value. + + + + +RASTERIZER_NAME + + + + + +RASTERIZER_NAME is a human-understandable string (of type ATOM) +that is the specific name of the +rasterizer that has performed some rasterization operation +(such as scaling from outlines) on this font. + + + +To define a RASTERIZER_NAME, the following format is +recommended: + + + + + + + + RasterizerName ::= + OrganizationId Space Rasterizer + + + OrganizationId ::= + +STRING8—the X Registry ORGANIZATION name of the rasterizer +implementor or maintainer. + + + + Rasterizer ::= + +the case-sensitive, human-understandable product name of the rasterizer. +Words within this name should be separated by a single SPACE. + + + + Space ::= + OCTET−" " (SPACE) + + + + + + + + +Examples: + + + + X Consortium Bit Scaler + X Consortium Type 1 Rasterizer + X Consortium Speedo Rasterizer + Adobe Type Manager + Sun TypeScaler + + + + +If RASTERIZER_NAME is not defined, or is None, no +rasterization operation has been applied to the FONT_TYPE. + + + + +RASTERIZER_VERSION + + + + + +RASTERIZER_VERSION is a human-understandable string (of type +ATOM) that represents the formal or informal version of a +font rasterizer. +The RASTERIZER_VERSION should match the corresponding +product version number known to users, when applicable. + + + + +RAW_ASCENT + + + + + +For a font with a transformation matrix, RAW_ASCENT is the font ascent +in 1000 pixel metrics +(see ). + + + + +RAW_DESCENT + + + + + +For a font with a transformation matrix, RAW_DESCENT is the font +descent in 1000 pixel metrics +(see ). + + + + +RAW_* + + + + + +For a font with a transformation matrix, +all font properties that represent horizontal or vertical sizes or +displacements will be accompanied by a new property, named as the +original except prefixed with "RAW_", that is computed as +described in . + + + + +AXIS_NAMES + + + + + +AXIS_NAMES is a list of all the +names of the axes for a polymorphic font, separated by a null (0) byte. +These names are suitable for presentation in a user interface +(see section 6). + + + + +AXIS_LIMITS + + + + + +AXIS_LIMITS is a list of integers, two for each axis, +giving the minimum and maximum allowable values for that axis of a +polymorphic font +(see ). + + + + +AXIS_TYPES + + + + + +AXIS_TYPES is like AXIS_NAMES, +but can be registered as having specific semantics +(see section 6). + + + + + +Built-in Font Property Atoms + + + + + +The following font property atom definitions were predefined in the initial +version of the core protocol: + + + + + + + + + Font Property/Atom Name + Property Type + + + + + MIN_SPACE + INT32 + + + NORM_SPACE + INT32 + + + MAX_SPACE + INT32 + + + END_SPACE + INT32 + + + SUPERSCRIPT_X + INT32 + + + SUPERSCRIPT_Y + INT32 + + + SUBSCRIPT_X + INT32 + + + SUBSCRIPT_Y + INT32 + + + UNDERLINE_POSITION + INT32 + + + UNDERLINE_THICKNESS + INT32 + + + STRIKEOUT_ASCENT + INT32 + + + STRIKEOUT_DESCENT + INT32 + + + FONT_ASCENT + INT32 + + + FONT_DESCENT + INT32 + + + ITALIC_ANGLE + INT32 + + + X_HEIGHT + INT32 + + + QUAD_WIDTH + INT32 −deprecated + + + WEIGHT + CARD32 + + + POINT_SIZE + INT32 + + + RESOLUTION + CARD32 −deprecated + + + COPYRIGHT + ATOM + + + FULL_NAME + ATOM −deprecated + + + FAMILY_NAME + ATOM + + + DEFAULT_CHAR + CARD32 + + + + + + + + + +Matrix Transformations + + + + + +An XLFD name presented to the server can have the POINT_SIZE or PIXEL_SIZE +field begin with the character "[". If the first character of the field +is "[", the character must be followed with ASCII representations of +four floating point numbers and a trailing "]", with white space +separating the numbers and optional white space separating the numbers +from the "[" and "]" characters. Numbers use standard floating point +syntax but use the character "~" to represent a minus sign in the mantissa +or exponent. + + + +The BNF for a matrix transformation string is as follows: + + + + + + + MatrixString ::= + +LeftBracket OptionalSpace Float Space Float Space +Float Space Float OptionalSpace RightBracket + + + + OptionalSpace ::= + "" | Space + + + Space ::= + SpaceChar | SpaceChar Space + + + Float ::= + Mantissa | Mantissa Exponent + + + Mantissa ::= + Sign Number | Number + + + Sign ::= + Plus | Tilde + + + Number ::= + Integer | Integer Dot Integer | Dot Integer + + + Integer ::= + Digit | Digit Integer + + + Digit ::= + +"0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" + + + + Exponent ::= + "e" SignedInteger | "E" SignedInteger + + + SignedInteger ::= + Sign Integer | Integer + + + LeftBracket ::= + OCTET − "[" (LEFT SQUARE BRACKET) + + + RightBracket ::= + OCTET − "]" (RIGHT SQUARE BRACKET) + + + SpaceChar ::= + OCTET − " " (SPACE) + + + Tilde ::= + OCTET − "˜" (TILDE) + + + Plus ::= + OCTET − "+" (PLUS) + + + Dot ::= + OCTET − "." (FULL STOP) + + + + + + + +The string "[a b c d]" represents a graphical transformation of the glyphs +in the font by the matrix + + + + + + + [ a b 0 ] + + + [ c d 0 ] + + + [ 0 0 1 ] + + + + + + +All transformations occur around the origin of the glyph. The +relationship between the current scalar values and the matrix +transformation values is that the scalar value "N" in the POINT_SIZE field +produces the same glyphs as the matrix "[N/10 0 0 N/10]" in that field, +and the scalar value "N" in the PIXEL_SIZE field produces the same glyphs +as the matrix "[N*RESOLUTION_X/RESOLUTION_Y 0 0 N]" in that field. + + + +If matrices are specified for both the POINT_SIZE and PIXEL_SIZE, they +must bear the following relationship to each other within an +implementation-specific tolerance: + +
+ + PIXEL_SIZE_MATRIX = [Sx 0 0 Sy] * POINT_SIZE_MATRIX + +
+ +where + +
+ + Sx = RESOLUTION_X / 72.27 + + + Sy = RESOLUTION_Y / 72.27 + +
+ + +If either the POINT_SIZE or PIXEL_SIZE field is unspecified (either "0" or +wildcarded), the preceding formulas can be used to compute one from the +other. + + + +Metrics and Font Properties + + + + + +In this section, the phrase "1000 pixel metrics" means the +metrics that would be obtained if the rasterizer took the base untransformed +design used to generate the transformed font and scaled it linearly to a +height of 1000 pixels, with no rotation component. Note that there may be no +way for the application to actually request this font since the rasterizer +may use different outlines or rasterization techniques at that size from the +ones used to generate the transformed font. + + + +Notes on properties and metrics: + + + +The per-char ink metrics (lbearing, rbearing, ascent, and descent) +represent the ink extent of the transformed glyph around its origin. + + + +The per-char width is the x component of the transformed character width. + + + +The font ascent and descent are the y component of the transformed font +ascent or descent. + + + +The FONT property returns a name reflecting the matrix being +used-that is, the name returned can be used to open another +instance of the same font. The returned name is not necessarily an +exact copy of the requested name. If, for example, the user +requests + + + + + + -misc-fixed-medium-r-normal--0-[2e1 0 0.0 +10.0]-72-72-c-0-iso8859-1 + + + + + +the resulting FONT property might be + + + + + + -misc-fixed-medium-r-normal--[19.9 0 0 10]-[20 0 0 10]-72-72-c-0-iso8859-1 + + + + + +The FONT property will always include matrices in both the PIXEL_SIZE +and the POINT_SIZE fields. + + + +To allow accurate client positioning of transformed characters, the +attributes field of the XCharInfo contains the width of the character in +1000 pixel metrics. This attributes field should be interpreted as a signed +integer. + + + +There will always be 2 new font properties defined, RAW_ASCENT and +RAW_DESCENT, that hold the ascent and descent in 1000 pixel metrics. + + + +All font properties that represent horizontal widths or displacements +have as their value the x component of the transformed width or +displacement. All font properties that represent vertical heights or +displacements have as their value the y component of the transformed +height or displacement. Each such property will be accompanied by a new +property, named as the original except prefixed with "RAW_", that gives +the value of the width, height, or displacement in 1000 pixel metrics. + + +
+ + +Scalable Fonts + + + + + +The XLFD is designed to support scalable fonts. A scalable font is a +font source from which instances of arbitrary size can be derived. +A scalable font source might be one or more outlines +together with zero or more hand-tuned bitmap fonts at specific sizes and +resolutions, or it might be a programmatic description together with +zero or more bitmap fonts, or some other format +(perhaps even just a single bitmap font). + + + +The following definitions are useful for discussing scalable fonts: + + + +Well-formed XLFD pattern + + + + + +Well-formed XLFD pattern + + +A pattern string containing 14 hyphens, one of which is +the first character of the pattern. Wildcard characters are permitted +in the fields of a well-formed XLFD pattern. + + + + + + +Scalable font name + + +A well-formed XLFD pattern containing no wildcards and containing the +digit "0" in the PIXEL_SIZE, POINT_SIZE, and AVERAGE_WIDTH fields. + + + + + + +Scalable fields + + +The XLFD fields PIXEL_SIZE, POINT_SIZE, RESOLUTION_X, +RESOLUTION_Y, and AVERAGE_WIDTH. + + + + + + +Derived instance + + +The result of replacing the scalable fields of a font name +with values to yield a font name that could actually be +produced from the font source. A scaling engine is +permitted, but not required, to interpret the scalable +fields in font names to support anamorphic scaling. + + + + + + +Global list + + +The list of names that would be returned by an X server for a +ListFonts +protocol request on the pattern "*" if there were no protocol +restrictions on the total number of names returned. + + + + + + +The global list consists of font names derived from font sources. +If a single font source can support multiple character sets (specified +in the CHARSET_REGISTRY and CHARSET_ENCODING fields), each such character +set should be used to form a separate font name in the list. +For a nonscalable font source, the simple font name +for each character set is included in the global list. +For a scalable font source, a scalable font name for each character set +is included in the list. In addition to the scalable font name, +specific derived instance names may also be included in the list. +The relative order of derived instances with respect to the scalable +font name is not constrained. Finally, font name aliases may also be included +in the list. The relative order of aliases +with respect to the real font name is not constrained. + + + +The values of the RESOLUTION_X and RESOLUTION_Y fields of a scalable font name +are implementation dependent, +but to maximize backward compatibility, they +should be reasonable nonzero values, for example, a resolution close to that +provided by the screen (in a single-screen server). +Because some existing +applications rely on seeing a collection of point and pixel sizes, +server vendors are strongly encouraged in the near term to +provide a mechanism for including, for each scalable font name, +a set of specific derived instance names. For font sources that contain +a collection of hand-tuned bitmap fonts, including names of these instances +in the global list is recommended and sufficient. + + + +The X protocol request +OpenFont +on a scalable font name returns a font corresponding to an +implementation-dependent derived instance of that font name. + + + +The X protocol request +ListFonts +on a well-formed XLFD pattern returns the following. +Starting with the global list, if the actual pattern argument +has values containing no wildcards in scalable fields, +then substitute each such field into the corresponding +field in each scalable font name in the list. For each resulting font name, +if the remaining scalable fields cannot be replaced with values to produce a +derived instance, remove the font name from the list. Now take the modified +list, and perform a simple pattern match against the pattern argument. +ListFonts +returns the resulting list. + + +For example, given the global list: + + +-Linotype-Times-Bold-I-Normal--0-0-100-100-P-0-ISO8859-1 +-Linotype-Times-Bold-R-Normal--0-0-100-100-P-0-ISO8859-1 +-Linotype-Times-Medium-I-Normal--0-0-100-100-P-0-ISO8859-1 +-Linotype-Times-Medium-R-Normal--0-0-100-100-P-0-ISO8859-1 + + + +a ListFonts request with the pattern: + + + +-*-Times-*-R-Normal--*-120-100-100-P-*-ISO8859-1 + + + +would return: + + + +-Linotype-Times-Bold-R-Normal--0-120-100-100-P-0-ISO8859-1 +-Linotype-Times-Medium-R-Normal--0-120-100-100-P-0-ISO8859-1 + + + +ListFonts +on a pattern containing wildcards that is not a well-formed XLFD +pattern is only required to return the list obtained by performing +a simple pattern match against the global list. +X servers are permitted, but not required, +to use a more sophisticated matching algorithm. + + + + +Polymorphic Fonts + + + + + +Fonts that can be varied in ways other than size or resolution are called +polymorphic fonts. Multiple Master Type 1 font programs are one type of +a polymorphic font. Current examples of axes along which the fonts can be +varied are width, weight, and optical size; others might include formality +or x-height. + + +To support polymorphic fonts, special values indicating variability are +defined for the following XLFD fields: + +
+ + + WEIGHT_NAME + + + SLANT + + + SETWIDTH_NAME + + + ADD_STYLE_NAME + +
+ + +The string "0" is the special polymorphic value. In the +WEIGHT_NAME, SLANT, or SETWIDTH_NAME field, "0" must be the +entire field. +There may be multiple polymorphic values +in the ADD_STYLE_NAME field. +They are surrounded by "[" and "]" and separated by a Space, +as "[0\00]". The polymorphic values may coexist with +other data in the field. +It is recommended that the polymorphic values +be at the end of the ADD_STYLE_NAME field. + + + +The font-matching algorithms for a font with polymorphic fields are +identical to the matching algorithms for a font with scalable fields. + + + +There are three new font properties to describe the axes of variation, +AXIS_NAMES, AXIS_LIMITS, and AXIS_TYPES. AXIS_NAMES is a list of all the +names of the axes for the font, separated by a null (0) byte. +These names are suitable for presentation in +a user interface. AXIS_LIMITS is a list of integers, two for each axis, +giving the minimum and maximum allowable values for that axis. +AXIS_TYPES is like AXIS_NAMES, +but can be registered as having specific semantics. + + + +The axes are listed in the properties in the same order as they +appear in the font name. They are matched with font name fields by +looking for the special polymorphic values in the font name. + + + +Examples: + + + +The Adobe Myriad MM font program has width and weight axes. Weight can +vary from 215 to 830, and width from 300 to 700. + + +Name: + -Adobe-Myriad MM-0-R-0--0-0-0-0-P-0-ISO8859-1 +AXIS_NAMES: + Weight, Width +AXIS_LIMITS: + 215, 830, 300, 700 +AXIS_TYPES: + Adobe-Weight, Adobe-Width +Sample derived instance: + -Adobe-Myriad MM-412-R-575--*-120-100-100-P-*-ISO8859-1 + + + +The Adobe Minion MM Italic font program has width, weight, and optical +size axes. + + + +Name: + -Adobe-Minion MM-0-I-0-[0]-0-0-0-0-P-0-ISO8859-1 +AXIS_NAMES: + Weight, Width, Optical size +AXIS_LIMITS: + 345, 620, 450, 600, 6, 72 +AXIS_TYPES: + Adobe-Weight, Adobe-Width, Adobe-OpticalSize +Sample derived instance: + -Adobe-Minion MM-550-I-480-[18]-*-180-100-100-P-*-ISO8859-1 + + + +The Adobe Minion MM Swash Italic font program has the same axes and +values. This shows how "[0]" in the ADD_STYLE_NAME field can +coexist with other words. + + + +Name: + -Adobe-Minion MM-0-I-0-Swash[0]-0-0-0-0-P-0-ISO8859-1 +AXIS_NAMES: + Weight, Width, Optical size +AXIS_LIMITS: + 345, 620, 450, 600, 6, 72 +AXIS_TYPES: + Adobe-Weight, Adobe-Width, Adobe-OpticalSize +Sample derived instance: + -Adobe-Minion MM-550-I-480-Swash[18]-*-180-100-100-P-*-ISO8859-1 + + + +The XYZ Abc font, a hypothetical font, has optical size and x-height axes. +This shows how there can be more than one polymorphic value in the +ADD_STYLE_NAME field. + + + +Name: + -XYZ-Abc-Medium-R-Normal-[0 0]-0-0-0-0-P-0-ISO8859-1 +AXIS_NAMES: + Optical size, X-height +AXIS_LIMITS: + 6, 72, 400, 600 +AXIS_TYPES: + XYZ-OpticalSize, XYZ-Xheight +Sample derived instance: + -XYZ-Abc-Medium-R-Normal-[14 510]-*-140-100-100-P-*-ISO8859-1 + + + +If an axis allows negative values, a client requests a negative value by +using "~" (TILDE) as a minus sign. + + +Axis types can be registered with the X Consortium, along with their +semantics. + + +If a font name that contains the polymorphic value or a wildcard in a +polymorphic field is presented to a font source, the font source is free +to substitute any value that is convenient. However, font sources should +try to use a value that would be considered +normal or +medium for the +particular font. For example, if an optical size variable is unresolved, +the font source should provide a value appropriate to the size of the +font. + + + +The result of specifying an out-of-range value for a polymorphic field is +undefined. The font source may treat this as a +BadName error, treat the +value as if it were the closest legal value, or extrapolate to try to +accommodate the value. + +
+ + +Affected Elements of Xlib and the X Protocol + + + + + +The following X protocol requests must support the XLFD conventions: + + + + + +OpenFont +- for the name argument + + + + +ListFonts +- for the pattern argument + + + + +ListFontsWithInfo +- for the pattern argument + + + + + +In addition, +the following Xlib functions must support the XLFD conventions: + + + + +XLoadFont +- for the name argument + + + + +XListFontsWithInfo +- for the pattern argument + + + + +XLoadQueryFont +- for the name argument + + + + +XListFonts +- for the pattern argument + + + + + + +BDF Conformance + + + + + +The bitmap font distribution and interchange format adopted by the +X Consortium (BDF V2.1) provides a general mechanism for identifying the +font name of an X font and a variable list of font properties, +but it does not mandate the syntax or semantics of the font name +or the semantics of the font properties that might be provided in a BDF font. +This section identifies the requirements for BDF fonts that conform to XLFD. + + + +XLFD Conformance Requirements + + + + + +A BDF font conforms to the XLFD specification if and only if the +following conditions are satisfied: + + + + + +The value for the BDF item FONT conforms to the syntax +and semantic definition of a XLFD +FontName +string. + + + + +The +FontName +begins with the X +FontNameRegistry +prefix: "-". + + + + +All XLFD +FontName +fields are defined. + + + + +Any FontProperties provided conform in name and semantics to the XLFD +FontProperty +definitions. + + + + + +A simple method of testing for conformance would entail verifying that the +FontNameRegistry +prefix is the string "-", +that the number of field delimiters in the string and coded field values +are valid, +and that each font property name either matches a standard XLFD property name +or follows the definition of a private property. + + + + +FONT_ASCENT, FONT_DESCENT, and DEFAULT_CHAR + + + + + +FONT_ASCENT, FONT_DESCENT, and DEFAULT_CHAR are provided in the BDF +specification as properties that are moved to the +XFontStruct +by the BDF font compiler in generating the X server-specific +binary font encoding. +If present, +these properties shall comply with the following semantic definitions. + + + +FONT_ASCENT + + + + + +FONT_ASCENT is an integer value (of type INT32) +that gives the recommended typographic ascent above the baseline +for determining interline spacing. +Specific glyphs of the font may extend beyond this. +If the current position point for line n is at [X,Y], +then the origin of the next line m = n + 1 +(allowing for a possible font change) is +[X, Y + FONT_DESCENTn + FONT_ASCENTm]. + + + +FONT_ASCENT can be approximated if not provided as a font property, +according to the following algorithm: + + + +if (FONT_ASCENT undefined) then + FONT_ASCENT = maximum ascent + + +where maximum ascent is the maximum ascent (above the baseline) +in pixels of any glyph in the font. + + + + +FONT_DESCENT + + + + + +FONT_DESCENT is an integer value (of type INT32) +that gives the recommended typographic descent below the baseline +for determining interline spacing. +Specific glyphs of the font may extend beyond this. +If the current position point for line +n is at [X,Y], +then the origin of the next line m = n+1 +(allowing for a possible font change) is +[X, Y + FONT_DESCENTn + FONT_ASCENTm]. + + +The logical extent of the font is inclusive between the Y-coordinate values: +Y - FONT_ASCENT and Y + FONT_DESCENT + 1. + + +FONT_DESCENT can be approximated if not provided as a font property, +according to the following algorithm: + + +if (FONT_DESCENT undefined) then + FONT_DESCENT = maximum descent + + +where maximum descent is the maximum descent (below the baseline) +in pixels of any glyph in the font. + + + + +DEFAULT_CHAR + + + + + +The DEFAULT_CHAR is an unsigned integer value (of type CARD32) +that specifies the index +of the default character to be used by the X server when an attempt +is made to display an undefined or nonexistent character in the font. +(For a font using a 2-byte matrix format, +the index bytes are encoded in the integer as byte1 * 65536 + byte2.) +If the DEFAULT_CHAR itself specifies an undefined or nonexistent character +in the font, +then no display is performed. + + + +DEFAULT_CHAR cannot be approximated if not provided as a font property. + + + + + + + + + + +
diff --git a/doc/xorg-docs/specs/XPRINT/xp_library.book b/doc/xorg-docs/specs/XPRINT/xp_library.book deleted file mode 100644 index 21864894c98ee76765611b6ac6ff339820bba3ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23552 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 diff --git a/doc/xorg-docs/specs/XPRINT/xp_library.mif b/doc/xorg-docs/specs/XPRINT/xp_library.mif deleted file mode 100644 index 0fb1f95ca..000000000 --- a/doc/xorg-docs/specs/XPRINT/xp_library.mif +++ /dev/null @@ -1,34917 +0,0 @@ - # Generated by FrameMaker xm5.0P3f -# Options: -# Paragraph Text -# Paragraph Tags -# Paragraph Formats -# Font Information -# Markers -# Anchored Frames -# Tables -# Graphics and TextRect Layout -# Master Page Items -# Condition Catalog -# Table Catalogs -# Font Catalog -# Paragraph Catalog -# Document Template -# Document Dictionary -# Variables -# - - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - > # end of Color - - - - - - > # end of Color - - - - - - > # end of Color - - - - - - > # end of Color -> # end of ColorCatalog - - - - - - > # end of Condition - - - - - - > # end of Condition - - - - - - > # end of Condition -> # end of ConditionCatalog - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - \\t'> - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .. \\t'> - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - ... \\t'> - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - )'> - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - . '> - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - . '> - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf -> # end of PgfCatalog - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font -> # end of FontCatalog - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling -> # end of RulingCatalog - - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat - - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat - - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat - - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat -> # end of TblCatalog - - - > # end of View - - - - - - - - > # end of View - - - - > # end of View - - - > # end of View - - - > # end of View - - - > # end of View -> # end of Views - - '> - > # end of VariableFormat - - <$daynum\>, <$year\>'> - > # end of VariableFormat - - /<$daynum\>/<$shortyear\>'> - > # end of VariableFormat - - <$daynum\>, <$year\> <$hour\>:<$minute00\> <$ampm\>'> - > # end of VariableFormat - - <$daynum\>, <$year\>'> - > # end of VariableFormat - - , <$monthname\> <$daynum01\>, <$year\>'> - > # end of VariableFormat - - /<$daynum\>/<$shortyear\>'> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - - > # end of VariableFormat - - of <$tblsheetcount\>)'> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat -> # end of VariableFormats - - \xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - '> - > # end of XRefFormat - - \xd3 on page\x11 <$pagenum\>.'> - > # end of XRefFormat - - , \xd2 <$paratext\>,\xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - , \xd2 <$paratext\>,\xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - on page\x11 <$pagenum\>'> - > # end of XRefFormat - - on page\x11 <$pagenum\>'> - > # end of XRefFormat - - , \xd2 <$paratext\>,\xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - '> - > # end of XRefFormat - - '> - > # end of XRefFormat - - '> - > # end of XRefFormat - - \xd3 '> - > # end of XRefFormat -> # end of XRefFormats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -> # end of Document -xp_library.mifIOM.doc'> - - - - - -> # end of BookComponent -xp_library.mifIX.doc'> - - - - - -> # end of BookComponent -xp_library.mifTC.doc'> - - - - - - - -> # end of BookComponent - # end of InitialAutoNums - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -> # end of Dictionary - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - > # end of Ellipse - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - > # end of TextLine - - - - - - - > # end of Rectangle - - - - - - > # end of Rectangle - - - - - - > # end of Rectangle - - - - - - - - > # end of TextLine - - - - - - - - > # end of TextLine - - - - - > # end of Group - - - - - - - - > # end of TextLine - - - - - - - - - > # end of RoundRect - - - - - - - > # end of RoundRect - - - - - - - - > # end of TextLine - - - - - - - - > # end of TextLine - - - - - > # end of Group - - - - - > # end of Group - - - - - > # end of Group - - - - - > # end of Group - - - - - - - > # end of Ellipse - - - - - - - - > # end of TextLine - - - - - > # end of Group - - - - - - > # end of Ellipse - - - - - - - - > # end of TextLine - - - - - > # end of Group - - - - - - - - - - - - - - > # end of ArrowStyle - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - - - > # end of Font - - > # end of TextLine - - - - - - - - > # end of TextLine - - - - - - - - > # end of TextLine - - - - - - - - > # end of TextLine - - - - - - - - > # end of TextLine - - - - - > # end of Group - - - - - - - - > # end of TextLine - - - - - - - - > # end of TextLine - - - - - - - - > # end of TextLine - - - - - - - - - - - - - - > # end of Font - > # end of TextLine - - - - - - - > # end of TextLine - - - - - > # end of Group - - - - - - - - - - - > # end of PolyLine - - - - - - - - - > # end of Font - - > # end of TextLine - - - - - > # end of Group - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - > # end of TextLine - - - - - - - - - > # end of Font - - - - - > # end of Font - - > # end of TextLine - - - - - - - - - > # end of Font - - - - - > # end of Font - - > # end of TextLine - - - - - - - - - > # end of Font - - - - - > # end of Font - - > # end of TextLine - - - - - > # end of Group - - - - - - - - - - > # end of PolyLine - - - - - - - - - - > # end of Font - - > # end of TextLine - - - - - - - - > # end of TextLine - - - - - > # end of Group - - - - - > # end of Group - - - - - > # end of Group - - - - > # end of Group - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - - - - - > # end of ArrowStyle - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - - > # end of Rectangle - - - - - - - - - > # end of Rectangle - - - - - - - > # end of Rectangle - - - - - - - - - > # end of Font - - > # end of TextLine - - - - - - - - > # end of TextLine - - - - - - - - > # end of Ellipse - - - - - - - - > # end of TextLine - - - - - - - > # end of Rectangle - - - - - - - - - - > # end of Rectangle - - - - - - - - - > # end of Rectangle - - - - - - - > # end of Rectangle - - - - - - - - > # end of Ellipse - - - - - - - - > # end of TextLine - - - - - - - - - - > # end of Font - - > # end of TextLine - - - - - - - - > # end of TextLine - - - - - - - - > # end of TextLine - - - - - - - - > # end of TextLine - - - - - - - - > # end of TextLine - - - - - - - - > # end of TextLine - - - - - - - - > # end of TextLine - - - - - - > # end of Ellipse - - - - - - - - - > # end of Font - - > # end of TextLine - - - - - - - - > # end of PolyLine - - - - - > # end of Group - - - - - > # end of Group - - - - - > # end of Group - - - - - > # end of Group - - - - - > # end of Group - - - - - > # end of Group - - - - - > # end of Group - - - - - > # end of Group - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of Ellipse - - - - - - - - - - > # end of Font - - > # end of TextLine - - - - - - > # end of Ellipse - - - - - - - - > # end of TextLine - - - - - > # end of Group - - - - - > # end of Group - - - - - - > # end of Ellipse - - - - - - - - > # end of TextLine - - - - - > # end of Group - - - - - - > # end of Ellipse - - - - - - - - > # end of TextLine - - - - - > # end of Group - - - - - - > # end of Ellipse - - - - - - - - > # end of TextLine - - - - - > # end of Group - - - - - > # end of Group - - - - - > # end of Group - - - - > # end of Group - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame -> # end of AFrames - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - > # end of PolyLine - - - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect - - - - - - - - > # end of PolyLine -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - > # end of PolyLine - - - - - - - - - - - - - - - > # end of TextRect - - - - - - - - > # end of PolyLine - - - - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - > # end of PolyLine - - - - - - - - - - - - - - - > # end of TextRect - - - - - - - - > # end of PolyLine - - - - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - > # end of PolyLine - - - - - - - - - - - - - - - > # end of TextRect - - - - - - - - > # end of PolyLine - - - - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - > # end of TextLine - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - > # end of TextLine - - - - - - - - - - - - - - - - - > # end of PolyLine - > # end of Frame -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - > # end of TextLine -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - > # end of TextLine -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - > # end of TextLine -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - > # end of TextLine -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - > # end of Variable - - - - > # end of Variable - - - - > # end of Variable - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - - > # end of TabStop - > # end of Pgf - - - - - - - > # end of Font - - - > # end of Variable - - - > # end of Font - - - - - - - > # end of Font - - - > # end of Variable - - - > # end of Variable - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - > # end of TabStop - > # end of Pgf - - - - - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - > # end of TabStop - > # end of Pgf - - - - > # end of Variable - - - > # end of Variable - - - - > # end of Variable - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - > # end of TabStop - > # end of Pgf - - - - > # end of Variable - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - > # end of TabStop - > # end of Pgf - - - - > # end of Variable - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of Pgf - - '> - - '> - - '> - > - > # end of Para - - - - - - - - - - > # end of TabStop - - - - > # end of TabStop - > # end of Pgf - '> - - '> - - '> - > - > # end of Para - - - - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of Pgf - '> - - '> - - '> - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - - - - > # end of Pgf - - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - - - > - > # end of Para - - - > # end of Pgf - <$numerics\><$alphabetics\>'> - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - '> - > - > # end of Para - - - > # end of Pgf - - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of Pgf - - '> - - '> - - '> - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - > # end of Pgf - - '> - - '> - - '> - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - > - - > - - > - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - - > - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - > - - > - > # end of Para - - - - - - > - - > - > # end of Para - - - - - > - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - > - - > - > # end of Para - - - - - - > - - > - - > - > # end of Para - - - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - - - - > # end of Font - - - - > # end of Font - - > - - > - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - - > - - > - > # end of Para - - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - < \>< \>-< \>< \>.\\t'> - - - - - - - > # end of TabStop - - - - > # end of Pgf - - - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - > - - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - > - - > - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - > - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - - > - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - > - - - - > # end of Font - - > - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - > - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - > - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - > - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - > - - > - - - > - - > - > # end of Para - - - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - < \>< \>-< \>< \>.\\t'> - - - - - - - > # end of TabStop - - - - > # end of Pgf - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - - - > - - - > - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - > - - - > # end of Font - - - - - > # end of Font - - - > - - - > # end of Font - - - > - - - > - - - > - - - > # end of Font - - - - > # end of Font - - - > - - - > - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - > - - - - - > # end of Font - - - > - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - > - - - - > # end of Font - - - > - - - > - - - > - - - > # end of Font - - - - > # end of Font - - - > - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - > - - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - - - > - - - > - - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - > - - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - - - > - - - > - - - > - - - - - > # end of Font - - - > - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - > - - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - > - - > - > # end of Para - - - - - - - - - > # end of Font - - - - > # end of Font - - - > - - > - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - > - - > - - > - > # end of Para - - - - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - > - - - - > # end of Font - - > - - > - > # end of Para - - - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - > - - > - - > - - > - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - > - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > - - - > - - > - - > - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - - > - > # end of Para - - - - - > - - > - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - library calls;<$startrange\>calls, library'> - - - > # end of Marker - > - > # end of Para - - - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > # end of Pgf - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Marker - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - > - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - > - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - > - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - > - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - > - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - > - - - - > # end of Font - - - - > # end of Font - - > - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Marker - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - > - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - > - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Marker - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Marker - - - - - > # end of Marker - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - > - - > - - > - > # end of Para - - - - - - - - > # end of Font - - > - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Marker - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - - - - - > # end of Marker - - - > # end of Font - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Marker - - - - - > # end of Marker - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Font - - > - - > - - > - - > - - - - > # end of Font - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Marker - - - - - > # end of Marker - - - - - > # end of Marker - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - > - - - - > # end of Font - - - - - > # end of Font - - - > - - - > - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - > - - - - > # end of Font - - - - - > # end of Font - - > - - - - > # end of Font - > - > # end of Para - - - - > - > # end of Para - - - - > - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - > - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Marker - - - - - > # end of Marker - - - - - > # end of Marker - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Font - - > - - > - - - - > # end of Font - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Marker - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - .'> - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Marker - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Marker - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - > - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Marker - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - '> - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - > # end of Pgf - - - - - - - - - > - - - - - - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Marker - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Marker - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - > - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Marker - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - - > - > # end of Para - - - - - - - > # end of Font - - - - > # end of Font - - > - - > - - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - > - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Marker - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - > - - - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - > - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - > - - - - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - > - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - > - - - - > # end of Font - > - > # end of Para - - - as:'> - > - > # end of Para - - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - as:'> - > - > # end of Para - - - - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - - - > - - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - - - - > # end of Font - '> - - - > # end of Font - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - > - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - - > # end of Font - - > - > # end of Para - - - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Marker - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - > - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Marker - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Marker - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - > - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Marker - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - > - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - :'> - > - > # end of Para - - - - - - - - - > - > # end of Para - - - - - - - - - - - - - > - > # end of Para - - - - - - - - - - - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - :'> - > - > # end of Para - - - - - - - - - - - - > - > # end of Para - - - - - - - - - - - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Marker - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of TabStop - > # end of Pgf - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - - - > # end of TabStop - > # end of Pgf - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - - - > # end of TabStop - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Marker - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - '> - - - > # end of Font - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - > # end of Font - - > - - - - > # end of Font - - > - - > - > # end of Para - - - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - - - > - - - - > # end of Font - - - - > # end of Font - - - > - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Marker - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Marker - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - '> - - - > # end of Font - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - '> - - - > # end of Font - - > - > # end of Para - - - - - - - - > - > # end of Para - - - - - - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - > - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - > - - > - - > - - - - > # end of Font - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - - - > # end of Font - - > - - > - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - - > - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - > - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - > # end of Marker - - - - - - > # end of Marker - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Marker - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - > - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - '> - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Marker - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Marker - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - > - - - - > # end of Font - - - > - - > - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Marker - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - > - - > - > # end of Para - - - - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Marker - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - > - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - > - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Marker - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - > - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Font - - > - - > - - - > - - - - > # end of Font - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - - - > # end of Font - - - - - - > # end of Marker - - - > # end of Font - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - > # end of Pgf - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Marker - - - - > # end of Font - - > - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - > - - > - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - > - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - > - - - - > # end of Font - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - > - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - > - - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - > - - - > - - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - - > - > # end of Para - - - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - - - - - > # end of Marker - - - > # end of Font - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > # end of Pgf - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Marker - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - - - > # end of Font - - - - > # end of Font - - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - > - - > - - - - - > # end of Font - - - - > # end of Font - - - > - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - > - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - > - - - - > # end of Font - - - > - - - > - - - - > # end of Font - > - > # end of Para - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - '> - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of TabStop - > # end of Pgf - - - - > # end of Font - - - - - > - - - - > # end of Font - - - - - > - - - - - > # end of Font - - - - > # end of Font - - - - - > - - - - - > - - - - - > - - - - > - > # end of Para - - - - > - - - calls, library;<$endrange\>library calls'> - - - > # end of Marker - > - > # end of Para - - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > # end of Pgf - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Marker - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para -> # end of TextFlow -# End of MIFFile diff --git a/doc/xorg-docs/specs/XPRINT/xp_libraryIX.doc b/doc/xorg-docs/specs/XPRINT/xp_libraryIX.doc deleted file mode 100644 index b03946a02183264e9bc12753c7f08e566bb1485d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29696 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 S+AmZe{L2sb?6{3;_J0877i5zF diff --git a/doc/xorg-docs/specs/XPRINT/xp_libraryTOC.doc b/doc/xorg-docs/specs/XPRINT/xp_libraryTOC.doc deleted file mode 100644 index 9d7e3ddf7a87b87ea5ab487b7c238d87944e9864..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19456 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 diff --git a/doc/xorg-docs/specs/XPRINT/xp_library_cov.mif b/doc/xorg-docs/specs/XPRINT/xp_library_cov.mif deleted file mode 100644 index 3067fffda..000000000 --- a/doc/xorg-docs/specs/XPRINT/xp_library_cov.mif +++ /dev/null @@ -1,3473 +0,0 @@ - # Generated by FrameMaker xm5.0P3f -# Options: -# Paragraph Text -# Paragraph Tags -# Paragraph Formats -# Font Information -# Markers -# Anchored Frames -# Tables -# Graphics and TextRect Layout -# Master Page Items -# Condition Catalog -# Table Catalogs -# Font Catalog -# Paragraph Catalog -# Document Template -# Document Dictionary -# Variables -# - - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color -> # end of ColorCatalog - - - - - - > # end of Condition -> # end of ConditionCatalog - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - : '> - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf -> # end of PgfCatalog - - - - > # end of Font - - - - > # end of Font -> # end of FontCatalog - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling -> # end of RulingCatalog - - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat - - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat -> # end of TblCatalog - - - > # end of View - - - - - - - - > # end of View - - - - > # end of View - - - > # end of View - - - > # end of View - - - > # end of View -> # end of Views - - '> - > # end of VariableFormat - - <$daynum\>, <$year\>'> - > # end of VariableFormat - - /<$daynum\>/<$shortyear\>'> - > # end of VariableFormat - - <$daynum\>, <$year\> <$hour\>:<$minute00\> <$ampm\>'> - > # end of VariableFormat - - /<$daynum\>/<$shortyear\>'> - > # end of VariableFormat - - <$daynum\>, <$year\>'> - > # end of VariableFormat - - /<$daynum\>/<$shortyear\>'> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - - > # end of VariableFormat - - of <$tblsheetcount\>)'> - > # end of VariableFormat -> # end of VariableFormats - - \xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - '> - > # end of XRefFormat - - \xd3 on page\x11 <$pagenum\>.'> - > # end of XRefFormat - - , \xd2 <$paratext\>,\xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - , \xd2 <$paratext\>,\xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - on page\x11 <$pagenum\>'> - > # end of XRefFormat -> # end of XRefFormats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -> # end of Document -anncovTOC.doc'> - - - - - - -> # end of BookComponent - # end of InitialAutoNums - # end of Dictionary - # end of AFrames - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - > # end of TextLine - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - - - - - - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - - - > # end of Frame - - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - - - - - - - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - > # end of TextLine - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - - - - - - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - - - > # end of Frame - - - - - - - > # end of TextLine -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - - - > - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - - - > - - - > - - - > - - - > - - - > - - > - - - > - - > - - > - - > - - > - - - > - - - > - - > - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - - > # end of Pgf - - > - > # end of Para - - - - > # end of Pgf - - > # end of Para - - - - > # end of Pgf - - > # end of Para - - - - > # end of Pgf - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - - - > - - - > - - - > - - - > - - - > - - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - - > - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - - > - - > - - > - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para -> # end of TextFlow -# End of MIFFile diff --git a/doc/xorg-docs/specs/XPRINT/xp_proto.book b/doc/xorg-docs/specs/XPRINT/xp_proto.book deleted file mode 100644 index c9b76e4c9daca5b5166c8de3019b23c56d31de0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22528 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 diff --git a/doc/xorg-docs/specs/XPRINT/xp_proto.mif b/doc/xorg-docs/specs/XPRINT/xp_proto.mif deleted file mode 100644 index 3ff4705da..000000000 --- a/doc/xorg-docs/specs/XPRINT/xp_proto.mif +++ /dev/null @@ -1,73304 +0,0 @@ - # Generated by FrameMaker xm5.0P3f -# Options: -# Paragraph Text -# Paragraph Tags -# Paragraph Formats -# Font Information -# Markers -# Anchored Frames -# Tables -# Graphics and TextRect Layout -# Master Page Items -# Condition Catalog -# Table Catalogs -# Font Catalog -# Paragraph Catalog -# Document Template -# Document Dictionary -# Variables -# - - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - > # end of Color - - - - - - > # end of Color -> # end of ColorCatalog - - - - - - > # end of Condition - - - - - - > # end of Condition - - - - - - > # end of Condition -> # end of ConditionCatalog - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - \\t'> - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .. \\t'> - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - ... \\t'> - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - )'> - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - . '> - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - . '> - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf -> # end of PgfCatalog - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font -> # end of FontCatalog - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling -> # end of RulingCatalog - - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat - - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat - - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat - - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat -> # end of TblCatalog - - - > # end of View - - - - - - - - > # end of View - - - - > # end of View - - - > # end of View - - - > # end of View - - - > # end of View -> # end of Views - - '> - > # end of VariableFormat - - <$daynum\>, <$year\>'> - > # end of VariableFormat - - /<$daynum\>/<$shortyear\>'> - > # end of VariableFormat - - <$daynum\>, <$year\> <$hour\>:<$minute00\> <$ampm\>'> - > # end of VariableFormat - - <$daynum\>, <$year\>'> - > # end of VariableFormat - - , <$monthname\> <$daynum01\>, <$year\>'> - > # end of VariableFormat - - /<$daynum\>/<$shortyear\>'> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - - > # end of VariableFormat - - of <$tblsheetcount\>)'> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat -> # end of VariableFormats - - \xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - '> - > # end of XRefFormat - - \xd3 on page\x11 <$pagenum\>.'> - > # end of XRefFormat - - , \xd2 <$paratext\>,\xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - , \xd2 <$paratext\>,\xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - on page\x11 <$pagenum\>'> - > # end of XRefFormat - - on page\x11 <$pagenum\>'> - > # end of XRefFormat - - , \xd2 <$paratext\>,\xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - '> - > # end of XRefFormat - - '> - > # end of XRefFormat - - '> - > # end of XRefFormat - - \xd3 '> - > # end of XRefFormat -> # end of XRefFormats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -> # end of Document -xp_proto.mifIOM.doc'> - - - - - -> # end of BookComponent -xp_proto.mifIX.doc'> - - - - - -> # end of BookComponent -xp_proto.mifTC.doc'> - - - - - - - -> # end of BookComponent - # end of InitialAutoNums - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -> # end of Dictionary - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame -> # end of AFrames - - - - - - > # end of TblColumnH - - - > # end of Pgf - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - - > # end of Pgf - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - > # end of TblFormat - - - - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - > # end of TblColumnH - - - > # end of Pgf - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - - > # end of Pgf - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - > # end of TblFormat - - - - - - - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - > # end of TblColumnH - - - > # end of Pgf - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - - > # end of Pgf - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - > # end of TblFormat - - - - - - - - - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - > # end of TblColumnH - - - > # end of Pgf - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - - > # end of Pgf - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - > # end of TblFormat - - - - - - - - - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - - > - - > - - > - - > - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - > - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - > - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblTitlePgf1 - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblTitlePgf1 - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl -> # end of Tbls - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - > # end of PolyLine - - - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect - - - - - - - - > # end of PolyLine -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - > # end of PolyLine - - - - - - - - - - - - - - - > # end of TextRect - - - - - - - - > # end of PolyLine - - - - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - > # end of PolyLine - - - - - - - - - - - - - - - > # end of TextRect - - - - - - - - > # end of PolyLine - - - - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - > # end of PolyLine - - - - - - - - - - - - - - - > # end of TextRect - - - - - - - - > # end of PolyLine - - - - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - > # end of TextLine - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - > # end of TextLine - - - - - - - - - - - - - - - - - > # end of PolyLine - > # end of Frame -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - > # end of TextLine -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - > # end of TextLine -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - > # end of TextLine -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - > # end of TextLine -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - > # end of Variable - - - - > # end of Variable - - - - > # end of Variable - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - - > # end of TabStop - > # end of Pgf - - - - - - - > # end of Font - - - > # end of Variable - - - > # end of Font - - - - - - - > # end of Font - - - > # end of Variable - - - > # end of Variable - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - > # end of TabStop - > # end of Pgf - - - - - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - > # end of TabStop - > # end of Pgf - - - - > # end of Variable - - - > # end of Variable - - - - > # end of Variable - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - > # end of TabStop - > # end of Pgf - - - - > # end of Variable - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - > # end of TabStop - > # end of Pgf - - - - > # end of Variable - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of Pgf - - '> - - '> - - '> - > - > # end of Para - - - - - - - - - - > # end of TabStop - - - - > # end of TabStop - > # end of Pgf - '> - - '> - - '> - > - > # end of Para - - - - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of Pgf - '> - - '> - - '> - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - - - - > # end of Pgf - - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - - - > - > # end of Para - - - > # end of Pgf - <$numerics\><$alphabetics\>'> - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - '> - > - > # end of Para - - - > # end of Pgf - - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of Pgf - - '> - - '> - - '> - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - > # end of Pgf - - '> - - '> - - '> - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - - - > - > # end of Para - - - - > - - > - > # end of Para - - - - > - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - > - - > - > # end of Para - - - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - - > - > # end of Para - - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - > - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - - - > # end of Font - - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - - - > # end of Font - - - > - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - > - > # end of Para - - - - > - - > - > # end of Para - - - - > - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - - - > - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - > - > # end of Para - - - - - > - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > # end of Pgf - - > - > # end of Para - - - - - - > # end of Pgf - - - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - > - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - > - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - > - > # end of Para - - - - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - - > - - - - > # end of Font - - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - > - - > - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - > - > # end of Para - - - - > - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - > - - - - > # end of Font - - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - > - > # end of Para - - - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - > - > # end of Para - - - - > - - - > - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - > - > # end of Para - - - - > # end of Pgf - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - > - > # end of Para - - - - - > - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - - - - - - > # end of XRef - - - - - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - > - > # end of Para - - - - - > - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - - - - - - > # end of XRef - - - - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - - - - > # end of Font - - > - - > - > # end of Para - - - - > # end of Pgf - - - - - - - > # end of Marker - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - > - - > - - - - > # end of Font - - - > - - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - - - > # end of Marker - - - - - - - > # end of Marker - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - > - > # end of Para - - - - > - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - > - - > - - > - > # end of Para - - - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - > # end of Font - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - > - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Marker - - - attributes'> - - - > # end of Marker - > - > # end of Para - - - - - > - - > - - > - > # end of Para - - - - > - - > - - > - - - > - - > - > # end of Para - - - - - - - - - - - - > # end of Pgf - - > - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - > # end of Pgf - - > - - > - - > - > # end of Para - - - > - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - > - > # end of Para - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - - > - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - > - - > - - > - - > - - - > - - > - - > - - > - > # end of Para - - - - - - - - > # end of Marker - - - - - - > # end of Marker - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - > - - > - > # end of Para - - - - > - > # end of Para - - - - > - - > - - > - - > - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - > - - > - - - - > # end of Font - - - > - - - - > # end of Font - - > - > # end of Para - - - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - > - - - - > # end of Font - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - - - - - > # end of Marker - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Marker - - > - - > - - > - > # end of Para - - - - - - - - > # end of Marker - - - - - - > # end of Marker - > - > # end of Para - - - - > - > # end of Para - - - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Marker - - > - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - - - - > # end of Font - - - - - - - > # end of XRef - - - > - - - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - - > - - > - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - - > - - > - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - > - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - > - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - > - - > - - > - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - - > - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - - - - - > # end of Font - - > - - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - - > - - > - - > - > # end of Para - - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Marker - - - - - - > # end of Marker - > - > # end of Para - - - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - > - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - > - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - - > - - > - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Marker - - - - - - > # end of Marker - > - > # end of Para - - - - > - > # end of Para - - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - > - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - > - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - - > - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - > # end of Font - - - - > # end of Font - - > - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - > - - > - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - > - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - > - - > - > # end of Para - - - - > - > # end of Para - - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - > - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - > - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - > # end of Font - - - - > # end of Font - - > - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - > - - > - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - > - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - attributes'> - - - > # end of Marker - > - > # end of Para - - - - - - - - - - > # end of Marker - > - > # end of Para - - - - > - - > - > # end of Para - - - - - > - - > - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - - > - - > - > # end of Para - - - - > - > # end of Para - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - > # end of TabStop - - > # end of Pgf - - - > - > # end of Para - - - - - - > # end of Font - - - > - - - - > # end of Font - - > - > # end of Para - - - - > # end of Pgf - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - > - - > - > # end of Para - - - - > # end of Pgf - - > - > # end of Para - - - - - > - - > - > # end of Para - - - - > - - > - > # end of Para - - - - > # end of Pgf - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - - > - > # end of Para - - - > # end of Para - - - - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - > # end of Pgf - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - - > - > # end of Para - - - - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - > # end of Marker - - - - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - > # end of Marker - - - - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - > # end of Pgf - - > # end of Para - - - - - - - > # end of Marker - - - - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - > # end of Pgf - - > # end of Para - - - - - - - > # end of Marker - - - - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - > # end of Pgf - - > # end of Para - - - - - - - > # end of Marker - - - - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - > # end of Font - - - - - > # end of Marker - - - - > # end of Font - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - - - > # end of Font - - - - - > # end of Font - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - - - > # end of Font - - - - - > # end of Marker - - - - > # end of Font - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - - - > # end of Font - - - - - > # end of Font - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - > # end of Pgf - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - - - > # end of Marker - - - - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - > # end of Marker - - - - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - - - - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - > # end of Pgf - - > # end of Para - - - > # end of Para - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - - > # end of Marker - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - > # end of Para -> # end of TextFlow -# End of MIFFile diff --git a/doc/xorg-docs/specs/XPRINT/xp_protoIX.doc b/doc/xorg-docs/specs/XPRINT/xp_protoIX.doc deleted file mode 100644 index af3efa19c2340d9bec7f36b2cbe1b1b86f008670..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34816 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 IoJ@NB9|v--D*ylh diff --git a/doc/xorg-docs/specs/XPRINT/xp_protoTOC.doc b/doc/xorg-docs/specs/XPRINT/xp_protoTOC.doc deleted file mode 100644 index 7154da37c568799e0c42b346f4afec05d137f465..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19456 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 Kd4C5<;eP?qd=?%6 diff --git a/doc/xorg-docs/specs/XPRINT/xp_proto_cov.mif b/doc/xorg-docs/specs/XPRINT/xp_proto_cov.mif deleted file mode 100644 index cdc13107e..000000000 --- a/doc/xorg-docs/specs/XPRINT/xp_proto_cov.mif +++ /dev/null @@ -1,3467 +0,0 @@ - # Generated by FrameMaker xm5.0P3f -# Options: -# Paragraph Text -# Paragraph Tags -# Paragraph Formats -# Font Information -# Markers -# Anchored Frames -# Tables -# Graphics and TextRect Layout -# Master Page Items -# Condition Catalog -# Table Catalogs -# Font Catalog -# Paragraph Catalog -# Document Template -# Document Dictionary -# Variables -# - - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color -> # end of ColorCatalog - - - - - - > # end of Condition -> # end of ConditionCatalog - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - : '> - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf -> # end of PgfCatalog - - - - > # end of Font - - - - > # end of Font -> # end of FontCatalog - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling -> # end of RulingCatalog - - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat - - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat -> # end of TblCatalog - - - > # end of View - - - - - - - - > # end of View - - - - > # end of View - - - > # end of View - - - > # end of View - - - > # end of View -> # end of Views - - '> - > # end of VariableFormat - - <$daynum\>, <$year\>'> - > # end of VariableFormat - - /<$daynum\>/<$shortyear\>'> - > # end of VariableFormat - - <$daynum\>, <$year\> <$hour\>:<$minute00\> <$ampm\>'> - > # end of VariableFormat - - /<$daynum\>/<$shortyear\>'> - > # end of VariableFormat - - <$daynum\>, <$year\>'> - > # end of VariableFormat - - /<$daynum\>/<$shortyear\>'> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - - > # end of VariableFormat - - of <$tblsheetcount\>)'> - > # end of VariableFormat -> # end of VariableFormats - - \xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - '> - > # end of XRefFormat - - \xd3 on page\x11 <$pagenum\>.'> - > # end of XRefFormat - - , \xd2 <$paratext\>,\xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - , \xd2 <$paratext\>,\xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - on page\x11 <$pagenum\>'> - > # end of XRefFormat -> # end of XRefFormats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -> # end of Document -anncovTOC.doc'> - - - - - - -> # end of BookComponent - # end of InitialAutoNums - # end of Dictionary - # end of AFrames - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - > # end of TextLine - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - - - - - - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - - - > # end of Frame - - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - - - - - - - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - > # end of TextLine - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - - - - - - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - - - > # end of Frame - - - - - - - > # end of TextLine -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - - - > - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - - - > - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - - - > - - - > - - - > - - - > - - - > - - > - - - > - - > - - > - - > - - > - - - > - - - > - - > - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - - > # end of Pgf - - > - > # end of Para - - - - > # end of Pgf - - > # end of Para - - - - > # end of Pgf - - > # end of Para - - - - > # end of Pgf - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - - - > - - - > - - - > - - - > - - - > - - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - - > - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - - > - - > - - > - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para -> # end of TextFlow -# End of MIFFile diff --git a/doc/xorg-docs/specs/XProtocol/X11.encoding b/doc/xorg-docs/specs/XProtocol/X11.encoding deleted file mode 100644 index 5233c2a79..000000000 --- a/doc/xorg-docs/specs/XProtocol/X11.encoding +++ /dev/null @@ -1,4434 +0,0 @@ -.\" $Xorg: X11.encoding,v 1.3 2000/08/17 19:42:23 cpqbld Exp $ -.\" $XFree86$ -\& -.sp 1 -.ps 11 -.nr PS 11 -.XS -Appendix B \- Protocol Encoding -.XE -.ce 3 -\s+1\fBAppendix B\fP\s-1 - -\s+1\fBProtocol Encoding\fP\s-1 -.sp 2 -.LP -.\"The sections in this appendix correspond to their number counterparts -.\"in the protocol document. -.SH -Syntactic Conventions -.LP -All numbers are in decimal, -unless prefixed with #x, in which case they are in hexadecimal (base 16). -.LP -The general syntax used to describe requests, replies, errors, events, and -compound types is: -.LP -.ps 9 -.nr PS 9 -.Ds -.R -.PN NameofThing - encode-form - ... - encode-form -.De -.ps 11 -.nr PS 11 -.LP -Each encode-form describes a single component. -.LP -For components described in the protocol as: -.LP -.ps 9 -.nr PS 9 -.Ds -.R -name: TYPE -.De -.ps 11 -.nr PS 11 -.LP -the encode-form is: -.LP -.ps 9 -.nr PS 9 -.Ds -.TA 1i 1.5i 2.5i -.ta 1i 1.5i 2.5i -.R -N TYPE name -.De -.ps 11 -.nr PS 11 -.LP -N is the number of bytes occupied in the data stream, -and TYPE is the interpretation of those bytes. -For example, -.LP -.ps 9 -.nr PS 9 -.Ds -.TA 1i 1.5i -.ta 1i 1.5i -.R -depth: CARD8 -.De -.ps 11 -.nr PS 11 -.LP -becomes: -.LP -.ps 9 -.nr PS 9 -.Ds -.R -.TA 1i 1.5i 2.5i -.ta 1i 1.5i 2.5i -1 CARD8 depth -.De -.ps 11 -.nr PS 11 -.LP -For components with a static numeric value the encode-form is: -.LP -.ps 9 -.nr PS 9 -.Ds -.TA 1i 1.5i 2.5i -.ta 1i 1.5i 2.5i -.R -N value name -.De -.ps 11 -.nr PS 11 -.LP -The value is always interpreted as an N-byte unsigned integer. -For example, -the first two bytes of a -.PN Window -error are always zero (indicating an -error in general) and three (indicating the -.PN Window -error in particular): -.LP -.ps 9 -.nr PS 9 -.Ds -.TA 1i 1.5i 2.5i -.ta 1i 1.5i 2.5i -.R -1 0 Error -1 3 code -.De -.ps 11 -.nr PS 11 -.LP -For components described in the protocol as: -.RS -.ps 9 -.nr PS 9 -.LP -name: -.Pn { Name1 ,..., -.PN NameI } -.RE -.ps 11 -.nr PS 11 -.LP -the encode-form is: -.LP -.ps 9 -.nr PS 9 -.Ds -.TA 1i 1.5i 2.5i -.ta 1i 1.5i 2.5i -.R -N name - value1 Name1 - ... - valueI NameI -.De -.ps 11 -.nr PS 11 -.LP -The value is always interpreted as an N-byte unsigned integer. -Note that the size of N is sometimes larger than that strictly required -to encode the values. -For example: -.RS -.ps 9 -.nr PS 9 -.LP -class: -.Pn { InputOutput , -.PN InputOnly , -.PN CopyFromParent } -.RE -.ps 11 -.nr PS 11 -.LP -becomes: -.LP -.ps 9 -.nr PS 9 -.Ds -.TA 1i 1.5i 2.5i 3i -.ta 1i 1.5i 2.5i 3i -.R -2 class - 0 CopyFromParent - 1 InputOutput - 2 InputOnly -.De -.ps 11 -.nr PS 11 -.LP -For components described in the protocol as: -.RS -.ps 9 -.nr PS 9 -.LP -NAME: TYPE or -.PN Alternative1 ...or -.PN AlternativeI -.RE -.ps 11 -.nr PS 11 -.LP -the encode-form is: -.LP -.ps 9 -.nr PS 9 -.Ds -.TA 1i 1.5i 2i 2.5i 3i -.ta 1i 1.5i 2i 2.5i 3i -.R -N TYPE NAME - value1 Alternative1 - ... - valueI AlternativeI -.De -.ps 11 -.nr PS 11 -.LP -The alternative values are guaranteed not to conflict with the encoding -of TYPE. -For example: -.RS -.ps 9 -.nr PS 9 -.LP -destination: WINDOW or -.PN PointerWindow -or -.PN InputFocus -.RE -.ps 11 -.nr PS 11 -.LP -becomes: -.LP -.ps 9 -.nr PS 9 -.Ds -.TA 1i 1.5i 2.5i -.ta 1i 1.5i 2.5i -.R -4 WINDOW destination - 0 PointerWindow - 1 InputFocus -.De -.ps 11 -.nr PS 11 -.LP -For components described in the protocol as: -.LP -.ps 9 -.nr PS 9 -.Ds -.TA 1i 1.5i -.ta 1i 1.5i -.R -value-mask: BITMASK -.De -.ps 11 -.nr PS 11 -.LP -the encode-form is: -.LP -.ps 9 -.nr PS 9 -.Ds -.TA 1i 1.5i 2i 2.5i -.ta 1i 1.5i 2i 2.5i -.R -N BITMASK value-mask - mask1 mask-name1 - ... - maskI mask-nameI -.De -.ps 11 -.nr PS 11 -.LP -The individual bits in the mask are specified and named, -and N is 2 or 4. -The most-significant bit in a BITMASK is reserved for use in defining -chained (multiword) bitmasks, as extensions augment existing core requests. -The precise interpretation of this bit is not yet defined here, -although a probable mechanism is that a 1-bit indicates that another N bytes -of bitmask follows, with bits within the overall mask still interpreted -from least-significant to most-significant with an N-byte unit, with N-byte units -interpreted in stream order, and with the overall mask being byte-swapped -in individual N-byte units. -.LP -For LISTofVALUE encodings, the request is followed by a section of the form: -.LP -.ps 9 -.nr PS 9 -.Ds -.TA 1i 1.5i -.ta 1i 1.5i -.R -VALUEs - encode-form - ... - encode-form -.De -.ps 11 -.nr PS 11 -.LP -listing an encode-form for each VALUE. -The NAME in each encode-form keys to the corresponding BITMASK bit. -The encoding of a VALUE always occupies four bytes, -but the number of bytes specified in the encoding-form indicates how -many of the least-significant bytes are actually used; -the remaining bytes are unused and their values do not matter. -.LP -In various cases, the number of bytes occupied by a component will be specified -by a lowercase single-letter variable name instead of a specific numeric -value, and often some other component will have its value specified as a -simple numeric expression involving these variables. -Components specified with such expressions are always interpreted -as unsigned integers. -The scope of such variables is always just the enclosing request, reply, -error, event, or compound type structure. -For example: -.LP -.ps 9 -.nr PS 9 -.Ds -.TA 1i 1.5i 2i 2.5i -.ta 1i 1.5i 2i 2.5i -.R -2 3+n request length -4n LISTofPOINT points -.De -.ps 11 -.nr PS 11 -.LP -For unused bytes (the values of the bytes are undefined and do no matter), -the encode-form is: -.LP -.ps 9 -.nr PS 9 -.Ds -.R -.TA 1i 1.5i 2i 2.5i -.ta 1i 1.5i 2i 2.5i -N unused -.De -.ps 11 -.nr PS 11 -.LP -If the number of unused bytes is variable, the encode-form typically is: -.LP -.ps 9 -.nr PS 9 -.Ds -.TA 1i 1.5i 2i 2.5i -.ta 1i 1.5i 2i 2.5i -.R -p unused, p=pad(E) -.De -.ps 11 -.nr PS 11 -.LP -where E is some expression, -and pad(E) is the number of bytes needed to round E up to a multiple of four. -.LP -.ps 9 -.nr PS 9 -.Ds -.TA 1i 1.5i 2i 2.5i -.ta 1i 1.5i 2i 2.5i -.R -pad(E) = (4 - (E mod 4)) mod 4 -.De -.ps 11 -.nr PS 11 -.SH -Common Types -.ps 9 -.nr PS 9 -.LP -LISTofFOO -.ps 11 -.nr PS 11 -.IP -In this document the LISTof notation strictly means some number of repetitions -of the FOO encoding; -the actual length of the list is encoded elsewhere. -.ps 9 -.nr PS 9 -.LP -SETofFOO -.ps 11 -.nr PS 11 -.IP -A set is always represented by a bitmask, with a 1-bit indicating presence in -the set. -.ps 9 -.nr PS 9 -.LP -BITMASK: CARD32 -.LP -WINDOW: CARD32 -.LP -PIXMAP: CARD32 -.LP -CURSOR: CARD32 -.LP -FONT: CARD32 -.LP -GCONTEXT: CARD32 -.LP -COLORMAP: CARD32 -.LP -DRAWABLE: CARD32 -.LP -FONTABLE: CARD32 -.LP -ATOM: CARD32 -.LP -VISUALID: CARD32 -.LP -BYTE: 8-bit value -.LP -INT8: 8-bit signed integer -.LP -INT16: 16-bit signed integer -.LP -INT32: 32-bit signed integer -.LP -CARD8: 8-bit unsigned integer -.LP -CARD16: 16-bit unsigned integer -.LP -CARD32: 32-bit unsigned integer -.LP -TIMESTAMP: CARD32 -.LP -.Ds 0 -.TA .75i 1.75i -.ta .75i 1.75i -.R -BITGRAVITY - 0 Forget - 1 NorthWest - 2 North - 3 NorthEast - 4 West - 5 Center - 6 East - 7 SouthWest - 8 South - 9 SouthEast - 10 Static -.De -.LP -.Ds 0 -.TA .75i 1.75i -.ta .75i 1.75i -.R -WINGRAVITY - 0 Unmap - 1 NorthWest - 2 North - 3 NorthEast - 4 West - 5 Center - 6 East - 7 SouthWest - 8 South - 9 SouthEast - 10 Static -.De -.LP -.Ds 0 -.TA .75i 1.75i -.ta .75i 1.75i -.R -BOOL - 0 False - 1 True -.De -.LP -.Ds 0 -.TA .75i 1.75i -.ta .75i 1.75i -.R -SETofEVENT - #x00000001 KeyPress - #x00000002 KeyRelease - #x00000004 ButtonPress - #x00000008 ButtonRelease - #x00000010 EnterWindow - #x00000020 LeaveWindow - #x00000040 PointerMotion - #x00000080 PointerMotionHint - #x00000100 Button1Motion - #x00000200 Button2Motion - #x00000400 Button3Motion - #x00000800 Button4Motion - #x00001000 Button5Motion - #x00002000 ButtonMotion - #x00004000 KeymapState - #x00008000 Exposure - #x00010000 VisibilityChange - #x00020000 StructureNotify - #x00040000 ResizeRedirect - #x00080000 SubstructureNotify - #x00100000 SubstructureRedirect - #x00200000 FocusChange - #x00400000 PropertyChange - #x00800000 ColormapChange - #x01000000 OwnerGrabButton - #xFE000000 unused but must be zero -.De -.LP -.Ds 0 -.TA .75i 1.75i -.ta .75i 1.75i -.R -SETofPOINTEREVENT - encodings are the same as for SETofEVENT, except with - #xFFFF8003 unused but must be zero -.De -.LP -.Ds 0 -.TA .75i 1.75i -.ta .75i 1.75i -.R -SETofDEVICEEVENT - encodings are the same as for SETofEVENT, except with - #xFFFFC0B0 unused but must be zero -.De -KEYSYM: CARD32 -.LP -KEYCODE: CARD8 -.LP -BUTTON: CARD8 -.LP -.Ds 0 -.TA .75i 1.75i -.ta .75i 1.75i -.R -SETofKEYBUTMASK - #x0001 Shift - #x0002 Lock - #x0004 Control - #x0008 Mod1 - #x0010 Mod2 - #x0020 Mod3 - #x0040 Mod4 - #x0080 Mod5 - #x0100 Button1 - #x0200 Button2 - #x0400 Button3 - #x0800 Button4 - #x1000 Button5 - #xE000 unused but must be zero -.De -.LP -.Ds 0 -.TA .75i 1.75i -.ta .75i 1.75i -.R -SETofKEYMASK - encodings are the same as for SETofKEYBUTMASK, except with - #xFF00 unused but must be zero -.De -.LP -STRING8: LISTofCARD8 -.LP -STRING16: LISTofCHAR2B -.LP -.Ds 0 -.TA .2i .5i 1.5i -.ta .2i .5i 1.5i -.R -CHAR2B - 1 CARD8 byte1 - 1 CARD8 byte2 -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i -.ta .2i .5i 1.5i -.R -POINT - 2 INT16 x - 2 INT16 y -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i -.ta .2i .5i 1.5i -.R -RECTANGLE - 2 INT16 x - 2 INT16 y - 2 CARD16 width - 2 CARD16 height -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i -.ta .2i .5i 1.5i -.R -ARC - 2 INT16 x - 2 INT16 y - 2 CARD16 width - 2 CARD16 height - 2 INT16 angle1 - 2 INT16 angle2 -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -HOST - 1 family - 0 Internet - 1 DECnet - 2 Chaos - 5 ServerInterpreted - 6 InternetV6 - 1 unused - 2 n length of address - n LISTofBYTE address - p unused, p=pad(n) -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -STR - 1 n length of name in bytes - n STRING8 name -.De -.ps 11 -.nr PS 11 -.SH -Errors -.LP -.ps 9 -.nr PS 9 -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN Request - 1 0 Error - 1 1 code - 2 CARD16 sequence number - 4 unused - 2 CARD16 minor opcode - 1 CARD8 major opcode - 21 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN Value - 1 0 Error - 1 2 code - 2 CARD16 sequence number - 4 <32-bits> bad value - 2 CARD16 minor opcode - 1 CARD8 major opcode - 21 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN Window - 1 0 Error - 1 3 code - 2 CARD16 sequence number - 4 CARD32 bad resource id - 2 CARD16 minor opcode - 1 CARD8 major opcode - 21 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN Pixmap - 1 0 Error - 1 4 code - 2 CARD16 sequence number - 4 CARD32 bad resource id - 2 CARD16 minor opcode - 1 CARD8 major opcode - 21 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN Atom - 1 0 Error - 1 5 code - 2 CARD16 sequence number - 4 CARD32 bad atom id - 2 CARD16 minor opcode - 1 CARD8 major opcode - 21 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN Cursor - 1 0 Error - 1 6 code - 2 CARD16 sequence number - 4 CARD32 bad resource id - 2 CARD16 minor opcode - 1 CARD8 major opcode - 21 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN Font - 1 0 Error - 1 7 code - 2 CARD16 sequence number - 4 CARD32 bad resource id - 2 CARD16 minor opcode - 1 CARD8 major opcode - 21 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN Match - 1 0 Error - 1 8 code - 2 CARD16 sequence number - 4 unused - 2 CARD16 minor opcode - 1 CARD8 major opcode - 21 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN Drawable - 1 0 Error - 1 9 code - 2 CARD16 sequence number - 4 CARD32 bad resource id - 2 CARD16 minor opcode - 1 CARD8 major opcode - 21 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN Access - 1 0 Error - 1 10 code - 2 CARD16 sequence number - 4 unused - 2 CARD16 minor opcode - 1 CARD8 major opcode - 21 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN Alloc - 1 0 Error - 1 11 code - 2 CARD16 sequence number - 4 unused - 2 CARD16 minor opcode - 1 CARD8 major opcode - 21 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN Colormap - 1 0 Error - 1 12 code - 2 CARD16 sequence number - 4 CARD32 bad resource id - 2 CARD16 minor opcode - 1 CARD8 major opcode - 21 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN GContext - 1 0 Error - 1 13 code - 2 CARD16 sequence number - 4 CARD32 bad resource id - 2 CARD16 minor opcode - 1 CARD8 major opcode - 21 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN IDChoice - 1 0 Error - 1 14 code - 2 CARD16 sequence number - 4 CARD32 bad resource id - 2 CARD16 minor opcode - 1 CARD8 major opcode - 21 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN Name - 1 0 Error - 1 15 code - 2 CARD16 sequence number - 4 unused - 2 CARD16 minor opcode - 1 CARD8 major opcode - 21 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN Length - 1 0 Error - 1 16 code - 2 CARD16 sequence number - 4 unused - 2 CARD16 minor opcode - 1 CARD8 major opcode - 21 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN Implementation - 1 0 Error - 1 17 code - 2 CARD16 sequence number - 4 unused - 2 CARD16 minor opcode - 1 CARD8 major opcode - 21 unused -.De -.ps 11 -.nr PS 11 -.SH -Keyboards -.LP -KEYCODE values are always greater than 7 (and less than 256). -.LP -KEYSYM values with the bit #x10000000 set are reserved as vendor-specific. -.LP -The names and encodings of the standard KEYSYM values are contained in -Appendix A, Keysym Encoding. -.SH -Pointers -.LP -BUTTON values are numbered starting with one. -.SH -Predefined Atoms -.LP -.ps 9 -.nr PS 9 -.Ds 0 -.TA 1.75i 3i 4.75i -.ta 1.75i 3i 4.75i -PRIMARY 1 WM_NORMAL_HINTS 40 -SECONDARY 2 WM_SIZE_HINTS 41 -ARC 3 WM_ZOOM_HINTS 42 -ATOM 4 MIN_SPACE 43 -BITMAP 5 NORM_SPACE 44 -CARDINAL 6 MAX_SPACE 45 -COLORMAP 7 END_SPACE 46 -CURSOR 8 SUPERSCRIPT_X 47 -CUT_BUFFER0 9 SUPERSCRIPT_Y 48 -CUT_BUFFER1 10 SUBSCRIPT_X 49 -CUT_BUFFER2 11 SUBSCRIPT_Y 50 -CUT_BUFFER3 12 UNDERLINE_POSITION 51 -CUT_BUFFER4 13 UNDERLINE_THICKNESS 52 -CUT_BUFFER5 14 STRIKEOUT_ASCENT 53 -CUT_BUFFER6 15 STRIKEOUT_DESCENT 54 -CUT_BUFFER7 16 ITALIC_ANGLE 55 -DRAWABLE 17 X_HEIGHT 56 -FONT 18 QUAD_WIDTH 57 -INTEGER 19 WEIGHT 58 -PIXMAP 20 POINT_SIZE 59 -POINT 21 RESOLUTION 60 -RECTANGLE 22 COPYRIGHT 61 -RESOURCE_MANAGER 23 NOTICE 62 -RGB_COLOR_MAP 24 FONT_NAME 63 -RGB_BEST_MAP 25 FAMILY_NAME 64 -RGB_BLUE_MAP 26 FULL_NAME 65 -RGB_DEFAULT_MAP 27 CAP_HEIGHT 66 -RGB_GRAY_MAP 28 WM_CLASS 67 -RGB_GREEN_MAP 29 WM_TRANSIENT_FOR 68 -RGB_RED_MAP 30 -STRING 31 -VISUALID 32 -WINDOW 33 -WM_COMMAND 34 -WM_HINTS 35 -WM_CLIENT_MACHINE 36 -WM_ICON_NAME 37 -WM_ICON_SIZE 38 -WM_NAME 39 -.De -.ps 11 -.nr PS 11 -.SH -Connection Setup -.LP -For TCP connections, -displays on a given host are numbered starting from 0, -and the server for display N listens and accepts connections on port 6000 + N. -For DECnet connections, -displays on a given host are numbered starting from 0, -and the server for display N listens and accepts connections on the object -name obtained by concatenating ``X$X'' with the decimal representation of N, -for example, X$X0 and X$X1. -.LP -Information sent by the client at connection setup: -.LP -.ps 9 -.nr PS 9 -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - 1 byte-order - #x42 MSB first - #x6C LSB first - 1 unused - 2 CARD16 protocol-major-version - 2 CARD16 protocol-minor-version - 2 n length of authorization-protocol-name - 2 d length of authorization-protocol-data - 2 unused - n STRING8 authorization-protocol-name - p unused, p=pad(n) - d STRING8 authorization-protocol-data - q unused, q=pad(d) -.De -.ps 11 -.nr PS 11 -.LP -Except where explicitly noted in the protocol, -all 16-bit and 32-bit quantities sent by the client must be transmitted -with the specified byte order, -and all 16-bit and 32-bit quantities returned by the server will be transmitted -with this byte order. -.LP -Information received by the client if the connection is refused: -.LP -.ps 9 -.nr PS 9 -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - 1 0 Failed - 1 n length of reason in bytes - 2 CARD16 protocol-major-version - 2 CARD16 protocol-minor-version - 2 (n+p)/4 length in 4-byte units of ``additional data'' - n STRING8 reason - p unused, p=pad(n) -.De -.ps 11 -.nr PS 11 -.LP -Information received by the client if further authentication is required: -.LP -.ps 9 -.nr PS 9 -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - 1 2 Authenticate - 5 unused - 2 (n+p)/4 length in 4-byte units of ``additional data'' - n STRING8 reason - p unused, p=pad(n) -.De -.ps 11 -.nr PS 11 -.LP -Information received by the client if the connection is accepted: -.LP -.ps 9 -.nr PS 9 -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - 1 1 Success - 1 unused - 2 CARD16 protocol-major-version - 2 CARD16 protocol-minor-version - 2 8+2n+(v+p+m)/4 length in 4-byte units of ``additional data'' - 4 CARD32 release-number - 4 CARD32 resource-id-base - 4 CARD32 resource-id-mask - 4 CARD32 motion-buffer-size - 2 v length of vendor - 2 CARD16 maximum-request-length - 1 CARD8 number of SCREENs in roots - 1 n number for FORMATs in pixmap-formats - 1 image-byte-order - 0 LSBFirst - 1 MSBFirst - 1 bitmap-format-bit-order - 0 LeastSignificant - 1 MostSignificant - 1 CARD8 bitmap-format-scanline-unit - 1 CARD8 bitmap-format-scanline-pad - 1 KEYCODE min-keycode - 1 KEYCODE max-keycode - 4 unused - v STRING8 vendor - p unused, p=pad(v) - 8n LISTofFORMAT pixmap-formats - m LISTofSCREEN roots (m is always a multiple of 4) -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -FORMAT - 1 CARD8 depth - 1 CARD8 bits-per-pixel - 1 CARD8 scanline-pad - 5 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -SCREEN - 4 WINDOW root - 4 COLORMAP default-colormap - 4 CARD32 white-pixel - 4 CARD32 black-pixel - 4 SETofEVENT current-input-masks - 2 CARD16 width-in-pixels - 2 CARD16 height-in-pixels - 2 CARD16 width-in-millimeters - 2 CARD16 height-in-millimeters - 2 CARD16 min-installed-maps - 2 CARD16 max-installed-maps - 4 VISUALID root-visual - 1 backing-stores - 0 Never - 1 WhenMapped - 2 Always - 1 BOOL save-unders - 1 CARD8 root-depth - 1 CARD8 number of DEPTHs in allowed-depths - n LISTofDEPTH allowed-depths (n is always a multiple of 4) -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -DEPTH - 1 CARD8 depth - 1 unused - 2 n number of VISUALTYPES in visuals - 4 unused - 24n LISTofVISUALTYPE visuals -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -VISUALTYPE - 4 VISUALID visual-id - 1 class - 0 StaticGray - 1 GrayScale - 2 StaticColor - 3 PseudoColor - 4 TrueColor - 5 DirectColor - 1 CARD8 bits-per-rgb-value - 2 CARD16 colormap-entries - 4 CARD32 red-mask - 4 CARD32 green-mask - 4 CARD32 blue-mask - 4 unused -.De -.ps 11 -.nr PS 11 -.SH -Requests -.LP -.ps 9 -.nr PS 9 -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN CreateWindow - 1 1 opcode - 1 CARD8 depth - 2 8+n request length - 4 WINDOW wid - 4 WINDOW parent - 2 INT16 x - 2 INT16 y - 2 CARD16 width - 2 CARD16 height - 2 CARD16 border-width - 2 class - 0 CopyFromParent - 1 InputOutput - 2 InputOnly - 4 VISUALID visual - 0 CopyFromParent - 4 BITMASK value-mask (has n bits set to 1) - #x00000001 background-pixmap - #x00000002 background-pixel - #x00000004 border-pixmap - #x00000008 border-pixel - #x00000010 bit-gravity - #x00000020 win-gravity - #x00000040 backing-store - #x00000080 backing-planes - #x00000100 backing-pixel - #x00000200 override-redirect - #x00000400 save-under - #x00000800 event-mask - #x00001000 do-not-propagate-mask - #x00002000 colormap - #x00004000 cursor - 4n LISTofVALUE value-list -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - VALUEs - 4 PIXMAP background-pixmap - 0 None - 1 ParentRelative - 4 CARD32 background-pixel - 4 PIXMAP border-pixmap - 0 CopyFromParent - 4 CARD32 border-pixel - 1 BITGRAVITY bit-gravity - 1 WINGRAVITY win-gravity - 1 backing-store - 0 NotUseful - 1 WhenMapped - 2 Always - 4 CARD32 backing-planes - 4 CARD32 backing-pixel - 1 BOOL override-redirect - 1 BOOL save-under - 4 SETofEVENT event-mask - 4 SETofDEVICEEVENT do-not-propagate-mask - 4 COLORMAP colormap - 0 CopyFromParent - 4 CURSOR cursor - 0 None -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ChangeWindowAttributes - 1 2 opcode - 1 unused - 2 3+n request length - 4 WINDOW window - 4 BITMASK value-mask (has n bits set to 1) - encodings are the same as for CreateWindow - 4n LISTofVALUE value-list - encodings are the same as for CreateWindow -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN GetWindowAttributes - 1 3 opcode - 1 unused - 2 2 request length - 4 WINDOW window -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 backing-store - 0 NotUseful - 1 WhenMapped - 2 Always - 2 CARD16 sequence number - 4 3 reply length - 4 VISUALID visual - 2 class - 1 InputOutput - 2 InputOnly - 1 BITGRAVITY bit-gravity - 1 WINGRAVITY win-gravity - 4 CARD32 backing-planes - 4 CARD32 backing-pixel - 1 BOOL save-under - 1 BOOL map-is-installed - 1 map-state - 0 Unmapped - 1 Unviewable - 2 Viewable - 1 BOOL override-redirect - 4 COLORMAP colormap - 0 None - 4 SETofEVENT all-event-masks - 4 SETofEVENT your-event-mask - 2 SETofDEVICEEVENT do-not-propagate-mask - 2 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN DestroyWindow - 1 4 opcode - 1 unused - 2 2 request length - 4 WINDOW window -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN DestroySubwindows - 1 5 opcode - 1 unused - 2 2 request length - 4 WINDOW window -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ChangeSaveSet - 1 6 opcode - 1 mode - 0 Insert - 1 Delete - 2 2 request length - 4 WINDOW window -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ReparentWindow - 1 7 opcode - 1 unused - 2 4 request length - 4 WINDOW window - 4 WINDOW parent - 2 INT16 x - 2 INT16 y -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN MapWindow - 1 8 opcode - 1 unused - 2 2 request length - 4 WINDOW window -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN MapSubwindows - 1 9 opcode - 1 unused - 2 2 request length - 4 WINDOW window -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN UnmapWindow - 1 10 opcode - 1 unused - 2 2 request length - 4 WINDOW window -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN UnmapSubwindows - 1 11 opcode - 1 unused - 2 2 request length - 4 WINDOW window -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ConfigureWindow - 1 12 opcode - 1 unused - 2 3+n request length - 4 WINDOW window - 2 BITMASK value-mask (has n bits set to 1) - #x0001 x - #x0002 y - #x0004 width - #x0008 height - #x0010 border-width - #x0020 sibling - #x0040 stack-mode - 2 unused - 4n LISTofVALUE value-list -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - VALUEs - 2 INT16 x - 2 INT16 y - 2 CARD16 width - 2 CARD16 height - 2 CARD16 border-width - 4 WINDOW sibling - 1 stack-mode - 0 Above - 1 Below - 2 TopIf - 3 BottomIf - 4 Opposite -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN CirculateWindow - 1 13 opcode - 1 direction - 0 RaiseLowest - 1 LowerHighest - 2 2 request length - 4 WINDOW window -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN GetGeometry - 1 14 opcode - 1 unused - 2 2 request length - 4 DRAWABLE drawable -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 CARD8 depth - 2 CARD16 sequence number - 4 0 reply length - 4 WINDOW root - 2 INT16 x - 2 INT16 y - 2 CARD16 width - 2 CARD16 height - 2 CARD16 border-width - 10 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN QueryTree - 1 15 opcode - 1 unused - 2 2 request length - 4 WINDOW window -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 n reply length - 4 WINDOW root - 4 WINDOW parent - 0 None - 2 n number of WINDOWs in children - 14 unused - 4n LISTofWINDOW children -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN InternAtom - 1 16 opcode - 1 BOOL only-if-exists - 2 2+(n+p)/4 request length - 2 n length of name - 2 unused - n STRING8 name - p unused, p=pad(n) -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 0 reply length - 4 ATOM atom - 0 None - 20 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN GetAtomName - 1 17 opcode - 1 unused - 2 2 request length - 4 ATOM atom -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 (n+p)/4 reply length - 2 n length of name - 22 unused - n STRING8 name - p unused, p=pad(n) -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ChangeProperty - 1 18 opcode - 1 mode - 0 Replace - 1 Prepend - 2 Append - 2 6+(n+p)/4 request length - 4 WINDOW window - 4 ATOM property - 4 ATOM type - 1 CARD8 format - 3 unused - 4 CARD32 length of data in format units - (= n for format = 8) - (= n/2 for format = 16) - (= n/4 for format = 32) - n LISTofBYTE data - (n is a multiple of 2 for format = 16) - (n is a multiple of 4 for format = 32) - p unused, p=pad(n) -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN DeleteProperty - 1 19 opcode - 1 unused - 2 3 request length - 4 WINDOW window - 4 ATOM property -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN GetProperty - 1 20 opcode - 1 BOOL delete - 2 6 request length - 4 WINDOW window - 4 ATOM property - 4 ATOM type - 0 AnyPropertyType - 4 CARD32 long-offset - 4 CARD32 long-length -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 CARD8 format - 2 CARD16 sequence number - 4 (n+p)/4 reply length - 4 ATOM type - 0 None - 4 CARD32 bytes-after - 4 CARD32 length of value in format units - (= 0 for format = 0) - (= n for format = 8) - (= n/2 for format = 16) - (= n/4 for format = 32) - 12 unused - n LISTofBYTE value - (n is zero for format = 0) - (n is a multiple of 2 for format = 16) - (n is a multiple of 4 for format = 32) - p unused, p=pad(n) -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ListProperties - 1 21 opcode - 1 unused - 2 2 request length - 4 WINDOW window -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 n reply length - 2 n number of ATOMs in atoms - 22 unused - 4n LISTofATOM atoms -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN SetSelectionOwner - 1 22 opcode - 1 unused - 2 4 request length - 4 WINDOW owner - 0 None - 4 ATOM selection - 4 TIMESTAMP time - 0 CurrentTime -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN GetSelectionOwner - 1 23 opcode - 1 unused - 2 2 request length - 4 ATOM selection -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 0 reply length - 4 WINDOW owner - 0 None - 20 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ConvertSelection - 1 24 opcode - 1 unused - 2 6 request length - 4 WINDOW requestor - 4 ATOM selection - 4 ATOM target - 4 ATOM property - 0 None - 4 TIMESTAMP time - 0 CurrentTime -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN SendEvent - 1 25 opcode - 1 BOOL propagate - 2 11 request length - 4 WINDOW destination - 0 PointerWindow - 1 InputFocus - 4 SETofEVENT event-mask - 32 event - standard event format (see the Events section) -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN GrabPointer - 1 26 opcode - 1 BOOL owner-events - 2 6 request length - 4 WINDOW grab-window - 2 SETofPOINTEREVENT event-mask - 1 pointer-mode - 0 Synchronous - 1 Asynchronous - 1 keyboard-mode - 0 Synchronous - 1 Asynchronous - 4 WINDOW confine-to - 0 None - 4 CURSOR cursor - 0 None - 4 TIMESTAMP time - 0 CurrentTime -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 status - 0 Success - 1 AlreadyGrabbed - 2 InvalidTime - 3 NotViewable - 4 Frozen - 2 CARD16 sequence number - 4 0 reply length - 24 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN UngrabPointer - 1 27 opcode - 1 unused - 2 2 request length - 4 TIMESTAMP time - 0 CurrentTime -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN GrabButton - 1 28 opcode - 1 BOOL owner-events - 2 6 request length - 4 WINDOW grab-window - 2 SETofPOINTEREVENT event-mask - 1 pointer-mode - 0 Synchronous - 1 Asynchronous - 1 keyboard-mode - 0 Synchronous - 1 Asynchronous - 4 WINDOW confine-to - 0 None - 4 CURSOR cursor - 0 None - 1 BUTTON button - 0 AnyButton - 1 unused - 2 SETofKEYMASK modifiers - #x8000 AnyModifier -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN UngrabButton - 1 29 opcode - 1 BUTTON button - 0 AnyButton - 2 3 request length - 4 WINDOW grab-window - 2 SETofKEYMASK modifiers - #x8000 AnyModifier - 2 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ChangeActivePointerGrab - 1 30 opcode - 1 unused - 2 4 request length - 4 CURSOR cursor - 0 None - 4 TIMESTAMP time - 0 CurrentTime - 2 SETofPOINTEREVENT event-mask - 2 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN GrabKeyboard - 1 31 opcode - 1 BOOL owner-events - 2 4 request length - 4 WINDOW grab-window - 4 TIMESTAMP time - 0 CurrentTime - 1 pointer-mode - 0 Synchronous - 1 Asynchronous - 1 keyboard-mode - 0 Synchronous - 1 Asynchronous - 2 unused -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 status - 0 Success - 1 AlreadyGrabbed - 2 InvalidTime - 3 NotViewable - 4 Frozen - 2 CARD16 sequence number - 4 0 reply length - 24 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN UngrabKeyboard - 1 32 opcode - 1 unused - 2 2 request length - 4 TIMESTAMP time - 0 CurrentTime -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.PN GrabKey - 1 33 opcode - 1 BOOL owner-events - 2 4 request length - 4 WINDOW grab-window - 2 SETofKEYMASK modifiers - #x8000 AnyModifier - 1 KEYCODE key - 0 AnyKey - 1 pointer-mode - 0 Synchronous - 1 Asynchronous - 1 keyboard-mode - 0 Synchronous - 1 Asynchronous - 3 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN UngrabKey - 1 34 opcode - 1 KEYCODE key - 0 AnyKey - 2 3 request length - 4 WINDOW grab-window - 2 SETofKEYMASK modifiers - #x8000 AnyModifier - 2 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN AllowEvents - 1 35 opcode - 1 mode - 0 AsyncPointer - 1 SyncPointer - 2 ReplayPointer - 3 AsyncKeyboard - 4 SyncKeyboard - 5 ReplayKeyboard - 6 AsyncBoth - 7 SyncBoth - 2 2 request length - 4 TIMESTAMP time - 0 CurrentTime -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN GrabServer - 1 36 opcode - 1 unused - 2 1 request length -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN UngrabServer - 1 37 opcode - 1 unused - 2 1 request length -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN QueryPointer - 1 38 opcode - 1 unused - 2 2 request length - 4 WINDOW window -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 BOOL same-screen - 2 CARD16 sequence number - 4 0 reply length - 4 WINDOW root - 4 WINDOW child - 0 None - 2 INT16 root-x - 2 INT16 root-y - 2 INT16 win-x - 2 INT16 win-y - 2 SETofKEYBUTMASK mask - 6 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN GetMotionEvents - 1 39 opcode - 1 unused - 2 4 request length - 4 WINDOW window - 4 TIMESTAMP start - 0 CurrentTime - 4 TIMESTAMP stop - 0 CurrentTime -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 2n reply length - 4 n number of TIMECOORDs in events - 20 unused - 8n LISTofTIMECOORD events -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - TIMECOORD - 4 TIMESTAMP time - 2 INT16 x - 2 INT16 y -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN TranslateCoordinates - 1 40 opcode - 1 unused - 2 4 request length - 4 WINDOW src-window - 4 WINDOW dst-window - 2 INT16 src-x - 2 INT16 src-y -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 BOOL same-screen - 2 CARD16 sequence number - 4 0 reply length - 4 WINDOW child - 0 None - 2 INT16 dst-x - 2 INT16 dst-y - 16 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN WarpPointer - 1 41 opcode - 1 unused - 2 6 request length - 4 WINDOW src-window - 0 None - 4 WINDOW dst-window - 0 None - 2 INT16 src-x - 2 INT16 src-y - 2 CARD16 src-width - 2 CARD16 src-height - 2 INT16 dst-x - 2 INT16 dst-y -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN SetInputFocus - 1 42 opcode - 1 revert-to - 0 None - 1 PointerRoot - 2 Parent - 2 3 request length - 4 WINDOW focus - 0 None - 1 PointerRoot - 4 TIMESTAMP time - 0 CurrentTime -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN GetInputFocus - 1 43 opcode - 1 unused - 2 1 request length -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 revert-to - 0 None - 1 PointerRoot - 2 Parent - 2 CARD16 sequence number - 4 0 reply length - 4 WINDOW focus - 0 None - 1 PointerRoot - 20 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN QueryKeymap - 1 44 opcode - 1 unused - 2 1 request length -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 2 reply length - 32 LISTofCARD8 keys -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN OpenFont - 1 45 opcode - 1 unused - 2 3+(n+p)/4 request length - 4 FONT fid - 2 n length of name - 2 unused - n STRING8 name - p unused, p=pad(n) -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN CloseFont - 1 46 opcode - 1 unused - 2 2 request length - 4 FONT font -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN QueryFont - 1 47 opcode - 1 unused - 2 2 request length - 4 FONTABLE font -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 7+2n+3m reply length - 12 CHARINFO min-bounds - 4 unused - 12 CHARINFO max-bounds - 4 unused - 2 CARD16 min-char-or-byte2 - 2 CARD16 max-char-or-byte2 - 2 CARD16 default-char - 2 n number of FONTPROPs in properties - 1 draw-direction - 0 LeftToRight - 1 RightToLeft - 1 CARD8 min-byte1 - 1 CARD8 max-byte1 - 1 BOOL all-chars-exist - 2 INT16 font-ascent - 2 INT16 font-descent - 4 m number of CHARINFOs in char-infos - 8n LISTofFONTPROP properties - 12m LISTofCHARINFO char-infos -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - FONTPROP - 4 ATOM name - 4 <32-bits> value -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - CHARINFO - 2 INT16 left-side-bearing - 2 INT16 right-side-bearing - 2 INT16 character-width - 2 INT16 ascent - 2 INT16 descent - 2 CARD16 attributes -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN QueryTextExtents - 1 48 opcode - 1 BOOL odd length, True if p = 2 - 2 2+(2n+p)/4 request length - 4 FONTABLE font - 2n STRING16 string - p unused, p=pad(2n) -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 draw-direction - 0 LeftToRight - 1 RightToLeft - 2 CARD16 sequence number - 4 0 reply length - 2 INT16 font-ascent - 2 INT16 font-descent - 2 INT16 overall-ascent - 2 INT16 overall-descent - 4 INT32 overall-width - 4 INT32 overall-left - 4 INT32 overall-right - 4 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ListFonts - 1 49 opcode - 1 unused - 2 2+(n+p)/4 request length - 2 CARD16 max-names - 2 n length of pattern - n STRING8 pattern - p unused, p=pad(n) -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 (n+p)/4 reply length - 2 CARD16 number of STRs in names - 22 unused - n LISTofSTR names - p unused, p=pad(n) -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ListFontsWithInfo - 1 50 opcode - 1 unused - 2 2+(n+p)/4 request length - 2 CARD16 max-names - 2 n length of pattern - n STRING8 pattern - p unused, p=pad(n) -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> (except for last in series) - 1 1 Reply - 1 n length of name in bytes - 2 CARD16 sequence number - 4 7+2m+(n+p)/4 reply length - 12 CHARINFO min-bounds - 4 unused - 12 CHARINFO max-bounds - 4 unused - 2 CARD16 min-char-or-byte2 - 2 CARD16 max-char-or-byte2 - 2 CARD16 default-char - 2 m number of FONTPROPs in properties - 1 draw-direction - 0 LeftToRight - 1 RightToLeft - 1 CARD8 min-byte1 - 1 CARD8 max-byte1 - 1 BOOL all-chars-exist - 2 INT16 font-ascent - 2 INT16 font-descent - 4 CARD32 replies-hint - 8m LISTofFONTPROP properties - n STRING8 name - p unused, p=pad(n) -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - FONTPROP - encodings are the same as for QueryFont - - CHARINFO - encodings are the same as for QueryFont -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> (last in series) - 1 1 Reply - 1 0 last-reply indicator - 2 CARD16 sequence number - 4 7 reply length - 52 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN SetFontPath - 1 51 opcode - 1 unused - 2 2+(n+p)/4 request length - 2 CARD16 number of STRs in path - 2 unused - n LISTofSTR path - p unused, p=pad(n) -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN GetFontPath - 1 52 opcode - 1 unused - 2 1 request list -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 (n+p)/4 reply length - 2 CARD16 number of STRs in path - 22 unused - n LISTofSTR path - p unused, p=pad(n) -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN CreatePixmap - 1 53 opcode - 1 CARD8 depth - 2 4 request length - 4 PIXMAP pid - 4 DRAWABLE drawable - 2 CARD16 width - 2 CARD16 height -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN FreePixmap - 1 54 opcode - 1 unused - 2 2 request length - 4 PIXMAP pixmap -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN CreateGC - 1 55 opcode - 1 unused - 2 4+n request length - 4 GCONTEXT cid - 4 DRAWABLE drawable - 4 BITMASK value-mask (has n bits set to 1) - #x00000001 function - #x00000002 plane-mask - #x00000004 foreground - #x00000008 background - #x00000010 line-width - #x00000020 line-style - #x00000040 cap-style - #x00000080 join-style - #x00000100 fill-style - #x00000200 fill-rule - #x00000400 tile - #x00000800 stipple - #x00001000 tile-stipple-x-origin - #x00002000 tile-stipple-y-origin - #x00004000 font - #x00008000 subwindow-mode - #x00010000 graphics-exposures - #x00020000 clip-x-origin - #x00040000 clip-y-origin - #x00080000 clip-mask - #x00100000 dash-offset - #x00200000 dashes - #x00400000 arc-mode - 4n LISTofVALUE value-list -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - VALUEs - 1 function - 0 Clear - 1 And - 2 AndReverse - 3 Copy - 4 AndInverted - 5 NoOp - 6 Xor - 7 Or - 8 Nor - 9 Equiv - 10 Invert - 11 OrReverse - 12 CopyInverted - 13 OrInverted - 14 Nand - 15 Set - 4 CARD32 plane-mask - 4 CARD32 foreground - 4 CARD32 background - 2 CARD16 line-width - 1 line-style - 0 Solid - 1 OnOffDash - 2 DoubleDash - 1 cap-style - 0 NotLast - 1 Butt - 2 Round - 3 Projecting - 1 join-style - 0 Miter - 1 Round - 2 Bevel - 1 fill-style - 0 Solid - 1 Tiled - 2 Stippled - 3 OpaqueStippled - 1 fill-rule - 0 EvenOdd - 1 Winding - 4 PIXMAP tile - 4 PIXMAP stipple - 2 INT16 tile-stipple-x-origin - 2 INT16 tile-stipple-y-origin - 4 FONT font - 1 subwindow-mode - 0 ClipByChildren - 1 IncludeInferiors - 1 BOOL graphics-exposures - 2 INT16 clip-x-origin - 2 INT16 clip-y-origin - 4 PIXMAP clip-mask - 0 None - 2 CARD16 dash-offset - 1 CARD8 dashes - 1 arc-mode - 0 Chord - 1 PieSlice -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ChangeGC - 1 56 opcode - 1 unused - 2 3+n request length - 4 GCONTEXT gc - 4 BITMASK value-mask (has n bits set to 1) - encodings are the same as for CreateGC - 4n LISTofVALUE value-list - encodings are the same as for CreateGC -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN CopyGC - 1 57 opcode - 1 unused - 2 4 request length - 4 GCONTEXT src-gc - 4 GCONTEXT dst-gc - 4 BITMASK value-mask - encodings are the same as for CreateGC -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN SetDashes - 1 58 opcode - 1 unused - 2 3+(n+p)/4 request length - 4 GCONTEXT gc - 2 CARD16 dash-offset - 2 n length of dashes - n LISTofCARD8 dashes - p unused, p=pad(n) -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN SetClipRectangles - 1 59 opcode - 1 ordering - 0 UnSorted - 1 YSorted - 2 YXSorted - 3 YXBanded - 2 3+2n request length - 4 GCONTEXT gc - 2 INT16 clip-x-origin - 2 INT16 clip-y-origin - 8n LISTofRECTANGLE rectangles -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN FreeGC - 1 60 opcode - 1 unused - 2 2 request length - 4 GCONTEXT gc -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ClearArea - 1 61 opcode - 1 BOOL exposures - 2 4 request length - 4 WINDOW window - 2 INT16 x - 2 INT16 y - 2 CARD16 width - 2 CARD16 height -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN CopyArea - 1 62 opcode - 1 unused - 2 7 request length - 4 DRAWABLE src-drawable - 4 DRAWABLE dst-drawable - 4 GCONTEXT gc - 2 INT16 src-x - 2 INT16 src-y - 2 INT16 dst-x - 2 INT16 dst-y - 2 CARD16 width - 2 CARD16 height -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN CopyPlane - 1 63 opcode - 1 unused - 2 8 request length - 4 DRAWABLE src-drawable - 4 DRAWABLE dst-drawable - 4 GCONTEXT gc - 2 INT16 src-x - 2 INT16 src-y - 2 INT16 dst-x - 2 INT16 dst-y - 2 CARD16 width - 2 CARD16 height - 4 CARD32 bit-plane -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN PolyPoint - 1 64 opcode - 1 coordinate-mode - 0 Origin - 1 Previous - 2 3+n request length - 4 DRAWABLE drawable - 4 GCONTEXT gc - 4n LISTofPOINT points -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN PolyLine - 1 65 opcode - 1 coordinate-mode - 0 Origin - 1 Previous - 2 3+n request length - 4 DRAWABLE drawable - 4 GCONTEXT gc - 4n LISTofPOINT points -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN PolySegment - 1 66 opcode - 1 unused - 2 3+2n request length - 4 DRAWABLE drawable - 4 GCONTEXT gc - 8n LISTofSEGMENT segments -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - SEGMENT - 2 INT16 x1 - 2 INT16 y1 - 2 INT16 x2 - 2 INT16 y2 -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN PolyRectangle - 1 67 opcode - 1 unused - 2 3+2n request length - 4 DRAWABLE drawable - 4 GCONTEXT gc - 8n LISTofRECTANGLE rectangles -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN PolyArc - 1 68 opcode - 1 unused - 2 3+3n request length - 4 DRAWABLE drawable - 4 GCONTEXT gc - 12n LISTofARC arcs -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN FillPoly - 1 69 opcode - 1 unused - 2 4+n request length - 4 DRAWABLE drawable - 4 GCONTEXT gc - 1 shape - 0 Complex - 1 Nonconvex - 2 Convex - 1 coordinate-mode - 0 Origin - 1 Previous - 2 unused - 4n LISTofPOINT points -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN PolyFillRectangle - 1 70 opcode - 1 unused - 2 3+2n request length - 4 DRAWABLE drawable - 4 GCONTEXT gc - 8n LISTofRECTANGLE rectangles -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN PolyFillArc - 1 71 opcode - 1 unused - 2 3+3n request length - 4 DRAWABLE drawable - 4 GCONTEXT gc - 12n LISTofARC arcs -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN PutImage - 1 72 opcode - 1 format - 0 Bitmap - 1 XYPixmap - 2 ZPixmap - 2 6+(n+p)/4 request length - 4 DRAWABLE drawable - 4 GCONTEXT gc - 2 CARD16 width - 2 CARD16 height - 2 INT16 dst-x - 2 INT16 dst-y - 1 CARD8 left-pad - 1 CARD8 depth - 2 unused - n LISTofBYTE data - p unused, p=pad(n) -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN GetImage - 1 73 opcode - 1 format - 1 XYPixmap - 2 ZPixmap - 2 5 request length - 4 DRAWABLE drawable - 2 INT16 x - 2 INT16 y - 2 CARD16 width - 2 CARD16 height - 4 CARD32 plane-mask -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 CARD8 depth - 2 CARD16 sequence number - 4 (n+p)/4 reply length - 4 VISUALID visual - 0 None - 20 unused - n LISTofBYTE data - p unused, p=pad(n) -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN PolyText8 - 1 74 opcode - 1 unused - 2 4+(n+p)/4 request length - 4 DRAWABLE drawable - 4 GCONTEXT gc - 2 INT16 x - 2 INT16 y - n LISTofTEXTITEM8 items - p unused, p=pad(n) (p is always 0 or 1) -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - TEXTITEM8 - 1 m length of string (cannot be 255) - 1 INT8 delta - m STRING8 string - or - 1 255 font-shift indicator - 1 font byte 3 (most-significant) - 1 font byte 2 - 1 font byte 1 - 1 font byte 0 (least-significant) -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN PolyText16 - 1 75 opcode - 1 unused - 2 4+(n+p)/4 request length - 4 DRAWABLE drawable - 4 GCONTEXT gc - 2 INT16 x - 2 INT16 y - n LISTofTEXTITEM16 items - p unused, p=pad(n) (p must be 0 or 1) -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - TEXTITEM16 - 1 m number of CHAR2Bs in string (cannot be 255) - 1 INT8 delta - 2m STRING16 string - or - 1 255 font-shift indicator - 1 font byte 3 (most-significant) - 1 font byte 2 - 1 font byte 1 - 1 font byte 0 (least-significant) -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ImageText8 - 1 76 opcode - 1 n length of string - 2 4+(n+p)/4 request length - 4 DRAWABLE drawable - 4 GCONTEXT gc - 2 INT16 x - 2 INT16 y - n STRING8 string - p unused, p=pad(n) -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ImageText16 - 1 77 opcode - 1 n number of CHAR2Bs in string - 2 4+(2n+p)/4 request length - 4 DRAWABLE drawable - 4 GCONTEXT gc - 2 INT16 x - 2 INT16 y - 2n STRING16 string - p unused, p=pad(2n) -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN CreateColormap - 1 78 opcode - 1 alloc - 0 None - 1 All - 2 4 request length - 4 COLORMAP mid - 4 WINDOW window - 4 VISUALID visual -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN FreeColormap - 1 79 opcode - 1 unused - 2 2 request length - 4 COLORMAP cmap -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN CopyColormapAndFree - 1 80 opcode - 1 unused - 2 3 request length - 4 COLORMAP mid - 4 COLORMAP src-cmap -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN InstallColormap - 1 81 opcode - 1 unused - 2 2 request length - 4 COLORMAP cmap -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN UninstallColormap - 1 82 opcode - 1 unused - 2 2 request length - 4 COLORMAP cmap -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ListInstalledColormaps - 1 83 opcode - 1 unused - 2 2 request length - 4 WINDOW window -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 n reply length - 2 n number of COLORMAPs in cmaps - 22 unused - 4n LISTofCOLORMAP cmaps -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN AllocColor - 1 84 opcode - 1 unused - 2 4 request length - 4 COLORMAP cmap - 2 CARD16 red - 2 CARD16 green - 2 CARD16 blue - 2 unused -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 0 reply length - 2 CARD16 red - 2 CARD16 green - 2 CARD16 blue - 2 unused - 4 CARD32 pixel - 12 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN AllocNamedColor - 1 85 opcode - 1 unused - 2 3+(n+p)/4 request length - 4 COLORMAP cmap - 2 n length of name - 2 unused - n STRING8 name - p unused, p=pad(n) -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 0 reply length - 4 CARD32 pixel - 2 CARD16 exact-red - 2 CARD16 exact-green - 2 CARD16 exact-blue - 2 CARD16 visual-red - 2 CARD16 visual-green - 2 CARD16 visual-blue - 8 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN AllocColorCells - 1 86 opcode - 1 BOOL contiguous - 2 3 request length - 4 COLORMAP cmap - 2 CARD16 colors - 2 CARD16 planes -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 n+m reply length - 2 n number of CARD32s in pixels - 2 m number of CARD32s in masks - 20 unused - 4n LISTofCARD32 pixels - 4m LISTofCARD32 masks -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN AllocColorPlanes - 1 87 opcode - 1 BOOL contiguous - 2 4 request length - 4 COLORMAP cmap - 2 CARD16 colors - 2 CARD16 reds - 2 CARD16 greens - 2 CARD16 blues -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 n reply length - 2 n number of CARD32s in pixels - 2 unused - 4 CARD32 red-mask - 4 CARD32 green-mask - 4 CARD32 blue-mask - 8 unused - 4n LISTofCARD32 pixels -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN FreeColors - 1 88 opcode - 1 unused - 2 3+n request length - 4 COLORMAP cmap - 4 CARD32 plane-mask - 4n LISTofCARD32 pixels -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN StoreColors - 1 89 opcode - 1 unused - 2 2+3n request length - 4 COLORMAP cmap - 12n LISTofCOLORITEM items -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - COLORITEM - 4 CARD32 pixel - 2 CARD16 red - 2 CARD16 green - 2 CARD16 blue - 1 do-red, do-green, do-blue - #x01 do-red (1 is True, 0 is False) - #x02 do-green (1 is True, 0 is False) - #x04 do-blue (1 is True, 0 is False) - #xF8 unused - 1 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN StoreNamedColor - 1 90 opcode - 1 do-red, do-green, do-blue - #x01 do-red (1 is True, 0 is False) - #x02 do-green (1 is True, 0 is False) - #x04 do-blue (1 is True, 0 is False) - #xF8 unused - 2 4+(n+p)/4 request length - 4 COLORMAP cmap - 4 CARD32 pixel - 2 n length of name - 2 unused - n STRING8 name - p unused, p=pad(n) -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN QueryColors - 1 91 opcode - 1 unused - 2 2+n request length - 4 COLORMAP cmap - 4n LISTofCARD32 pixels -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 2n reply length - 2 n number of RGBs in colors - 22 unused - 8n LISTofRGB colors -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - RGB - 2 CARD16 red - 2 CARD16 green - 2 CARD16 blue - 2 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN LookupColor - 1 92 opcode - 1 unused - 2 3+(n+p)/4 request length - 4 COLORMAP cmap - 2 n length of name - 2 unused - n STRING8 name - p unused, p=pad(n) -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 0 reply length - 2 CARD16 exact-red - 2 CARD16 exact-green - 2 CARD16 exact-blue - 2 CARD16 visual-red - 2 CARD16 visual-green - 2 CARD16 visual-blue - 12 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN CreateCursor - 1 93 opcode - 1 unused - 2 8 request length - 4 CURSOR cid - 4 PIXMAP source - 4 PIXMAP mask - 0 None - 2 CARD16 fore-red - 2 CARD16 fore-green - 2 CARD16 fore-blue - 2 CARD16 back-red - 2 CARD16 back-green - 2 CARD16 back-blue - 2 CARD16 x - 2 CARD16 y -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN CreateGlyphCursor - 1 94 opcode - 1 unused - 2 8 request length - 4 CURSOR cid - 4 FONT source-font - 4 FONT mask-font - 0 None - 2 CARD16 source-char - 2 CARD16 mask-char - 2 CARD16 fore-red - 2 CARD16 fore-green - 2 CARD16 fore-blue - 2 CARD16 back-red - 2 CARD16 back-green - 2 CARD16 back-blue -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN FreeCursor - 1 95 opcode - 1 unused - 2 2 request length - 4 CURSOR cursor -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN RecolorCursor - 1 96 opcode - 1 unused - 2 5 request length - 4 CURSOR cursor - 2 CARD16 fore-red - 2 CARD16 fore-green - 2 CARD16 fore-blue - 2 CARD16 back-red - 2 CARD16 back-green - 2 CARD16 back-blue -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN QueryBestSize - 1 97 opcode - 1 class - 0 Cursor - 1 Tile - 2 Stipple - 2 3 request length - 4 DRAWABLE drawable - 2 CARD16 width - 2 CARD16 height -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 0 reply length - 2 CARD16 width - 2 CARD16 height - 20 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN QueryExtension - 1 98 opcode - 1 unused - 2 2+(n+p)/4 request length - 2 n length of name - 2 unused - n STRING8 name - p unused, p=pad(n) -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 0 reply length - 1 BOOL present - 1 CARD8 major-opcode - 1 CARD8 first-event - 1 CARD8 first-error - 20 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ListExtensions - 1 99 opcode - 1 unused - 2 1 request length -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 CARD8 number of STRs in names - 2 CARD16 sequence number - 4 (n+p)/4 reply length - 24 unused - n LISTofSTR names - p unused, p=pad(n) -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ChangeKeyboardMapping - 1 100 opcode - 1 n keycode-count - 2 2+nm request length - 1 KEYCODE first-keycode - 1 m keysyms-per-keycode - 2 unused - 4nm LISTofKEYSYM keysyms -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN GetKeyboardMapping - 1 101 opcode - 1 unused - 2 2 request length - 1 KEYCODE first-keycode - 1 m count - 2 unused -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 n keysyms-per-keycode - 2 CARD16 sequence number - 4 nm reply length (m = count field from the request) - 24 unused - 4nm LISTofKEYSYM keysyms -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ChangeKeyboardControl - 1 102 opcode - 1 unused - 2 2+n request length - 4 BITMASK value-mask (has n bits set to 1) - #x0001 key-click-percent - #x0002 bell-percent - #x0004 bell-pitch - #x0008 bell-duration - #x0010 led - #x0020 led-mode - #x0040 key - #x0080 auto-repeat-mode - 4n LISTofVALUE value-list -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - VALUEs - 1 INT8 key-click-percent - 1 INT8 bell-percent - 2 INT16 bell-pitch - 2 INT16 bell-duration - 1 CARD8 led - 1 led-mode - 0 Off - 1 On - 1 KEYCODE key - 1 auto-repeat-mode - 0 Off - 1 On - 2 Default -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN GetKeyboardControl - 1 103 opcode - 1 unused - 2 1 request length -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 global-auto-repeat - 0 Off - 1 On - 2 CARD16 sequence number - 4 5 reply length - 4 CARD32 led-mask - 1 CARD8 key-click-percent - 1 CARD8 bell-percent - 2 CARD16 bell-pitch - 2 CARD16 bell-duration - 2 unused - 32 LISTofCARD8 auto-repeats -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN Bell - 1 104 opcode - 1 INT8 percent - 2 1 request length -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ChangePointerControl - 1 105 opcode - 1 unused - 2 3 request length - 2 INT16 acceleration-numerator - 2 INT16 acceleration-denominator - 2 INT16 threshold - 1 BOOL do-acceleration - 1 BOOL do-threshold -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN GetPointerControl - 1 106 opcode - 1 unused - 2 1 request length -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 0 reply length - 2 CARD16 acceleration-numerator - 2 CARD16 acceleration-denominator - 2 CARD16 threshold - 18 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN SetScreenSaver - 1 107 opcode - 1 unused - 2 3 request length - 2 INT16 timeout - 2 INT16 interval - 1 prefer-blanking - 0 No - 1 Yes - 2 Default - 1 allow-exposures - 0 No - 1 Yes - 2 Default - 2 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN GetScreenSaver - 1 108 opcode - 1 unused - 2 1 request length -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 0 reply length - 2 CARD16 timeout - 2 CARD16 interval - 1 prefer-blanking - 0 No - 1 Yes - 1 allow-exposures - 0 No - 1 Yes - 18 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ChangeHosts - 1 109 opcode - 1 mode - 0 Insert - 1 Delete - 2 2+(n+p)/4 request length - 1 family - 0 Internet - 1 DECnet - 2 Chaos - 1 unused - 2 n length of address - n LISTofCARD8 address - p unused, p=pad(n) -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ListHosts - 1 110 opcode - 1 unused - 2 1 request length -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 mode - 0 Disabled - 1 Enabled - 2 CARD16 sequence number - 4 n/4 reply length - 2 CARD16 number of HOSTs in hosts - 22 unused - n LISTofHOST hosts (n always a multiple of 4) -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN SetAccessControl - 1 111 opcode - 1 mode - 0 Disable - 1 Enable - 2 1 request length -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN SetCloseDownMode - 1 112 opcode - 1 mode - 0 Destroy - 1 RetainPermanent - 2 RetainTemporary - 2 1 request length -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN KillClient - 1 113 opcode - 1 unused - 2 2 request length - 4 CARD32 resource - 0 AllTemporary -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN RotateProperties - 1 114 opcode - 1 unused - 2 3+n request length - 4 WINDOW window - 2 n number of properties - 2 INT16 delta - 4n LISTofATOM properties -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ForceScreenSaver - 1 115 opcode - 1 mode - 0 Reset - 1 Activate - 2 1 request length -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN SetPointerMapping - 1 116 opcode - 1 n length of map - 2 1+(n+p)/4 request length - n LISTofCARD8 map - p unused, p=pad(n) -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 status - 0 Success - 1 Busy - 2 CARD16 sequence number - 4 0 reply length - 24 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN GetPointerMapping - 1 117 opcode - 1 unused - 2 1 request length -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 n length of map - 2 CARD16 sequence number - 4 (n+p)/4 reply length - 24 unused - n LISTofCARD8 map - p unused, p=pad(n) -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN SetModifierMapping - 1 118 opcode - 1 n keycodes-per-modifier - 2 1+2n request length - 8n LISTofKEYCODE keycodes -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 status - 0 Success - 1 Busy - 2 Failed - 2 CARD16 sequence number - 4 0 reply length - 24 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN GetModifierMapping - 1 119 opcode - 1 unused - 2 1 request length -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - \(-> - 1 1 Reply - 1 n keycodes-per-modifier - 2 CARD16 sequence number - 4 2n reply length - 24 unused - 8n LISTofKEYCODE keycodes -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN NoOperation - 1 127 opcode - 1 unused - 2 1+n request length - 4n unused -.De -.ps 11 -.nr PS 11 -.SH -Events -.LP -.ps 9 -.nr PS 9 -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN KeyPress - 1 2 code - 1 KEYCODE detail - 2 CARD16 sequence number - 4 TIMESTAMP time - 4 WINDOW root - 4 WINDOW event - 4 WINDOW child - 0 None - 2 INT16 root-x - 2 INT16 root-y - 2 INT16 event-x - 2 INT16 event-y - 2 SETofKEYBUTMASK state - 1 BOOL same-screen - 1 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN KeyRelease - 1 3 code - 1 KEYCODE detail - 2 CARD16 sequence number - 4 TIMESTAMP time - 4 WINDOW root - 4 WINDOW event - 4 WINDOW child - 0 None - 2 INT16 root-x - 2 INT16 root-y - 2 INT16 event-x - 2 INT16 event-y - 2 SETofKEYBUTMASK state - 1 BOOL same-screen - 1 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ButtonPress - 1 4 code - 1 BUTTON detail - 2 CARD16 sequence number - 4 TIMESTAMP time - 4 WINDOW root - 4 WINDOW event - 4 WINDOW child - 0 None - 2 INT16 root-x - 2 INT16 root-y - 2 INT16 event-x - 2 INT16 event-y - 2 SETofKEYBUTMASK state - 1 BOOL same-screen - 1 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ButtonRelease - 1 5 code - 1 BUTTON detail - 2 CARD16 sequence number - 4 TIMESTAMP time - 4 WINDOW root - 4 WINDOW event - 4 WINDOW child - 0 None - 2 INT16 root-x - 2 INT16 root-y - 2 INT16 event-x - 2 INT16 event-y - 2 SETofKEYBUTMASK state - 1 BOOL same-screen - 1 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN MotionNotify - 1 6 code - 1 detail - 0 Normal - 1 Hint - 2 CARD16 sequence number - 4 TIMESTAMP time - 4 WINDOW root - 4 WINDOW event - 4 WINDOW child - 0 None - 2 INT16 root-x - 2 INT16 root-y - 2 INT16 event-x - 2 INT16 event-y - 2 SETofKEYBUTMASK state - 1 BOOL same-screen - 1 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN EnterNotify - 1 7 code - 1 detail - 0 Ancestor - 1 Virtual - 2 Inferior - 3 Nonlinear - 4 NonlinearVirtual - 2 CARD16 sequence number - 4 TIMESTAMP time - 4 WINDOW root - 4 WINDOW event - 4 WINDOW child - 0 None - 2 INT16 root-x - 2 INT16 root-y - 2 INT16 event-x - 2 INT16 event-y - 2 SETofKEYBUTMASK state - 1 mode - 0 Normal - 1 Grab - 2 Ungrab - 1 same-screen, focus - #x01 focus (1 is True, 0 is False) - #x02 same-screen (1 is True, 0 is False) - #xFC unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN LeaveNotify - 1 8 code - 1 detail - 0 Ancestor - 1 Virtual - 2 Inferior - 3 Nonlinear - 4 NonlinearVirtual - 2 CARD16 sequence number - 4 TIMESTAMP time - 4 WINDOW root - 4 WINDOW event - 4 WINDOW child - 0 None - 2 INT16 root-x - 2 INT16 root-y - 2 INT16 event-x - 2 INT16 event-y - 2 SETofKEYBUTMASK state - 1 mode - 0 Normal - 1 Grab - 2 Ungrab - 1 same-screen, focus - #x01 focus (1 is True, 0 is False) - #x02 same-screen (1 is True, 0 is False) - #xFC unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN FocusIn - 1 9 code - 1 detail - 0 Ancestor - 1 Virtual - 2 Inferior - 3 Nonlinear - 4 NonlinearVirtual - 5 Pointer - 6 PointerRoot - 7 None - 2 CARD16 sequence number - 4 WINDOW event - 1 mode - 0 Normal - 1 Grab - 2 Ungrab - 3 WhileGrabbed - 23 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN FocusOut - 1 10 code - 1 detail - 0 Ancestor - 1 Virtual - 2 Inferior - 3 Nonlinear - 4 NonlinearVirtual - 5 Pointer - 6 PointerRoot - 7 None - 2 CARD16 sequence number - 4 WINDOW event - 1 mode - 0 Normal - 1 Grab - 2 Ungrab - 3 WhileGrabbed - 23 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN KeymapNotify - 1 11 code - 31 LISTofCARD8 keys (byte for keycodes 0\-7 is omitted) -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN Expose - 1 12 code - 1 unused - 2 CARD16 sequence number - 4 WINDOW window - 2 CARD16 x - 2 CARD16 y - 2 CARD16 width - 2 CARD16 height - 2 CARD16 count - 14 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN GraphicsExposure - 1 13 code - 1 unused - 2 CARD16 sequence number - 4 DRAWABLE drawable - 2 CARD16 x - 2 CARD16 y - 2 CARD16 width - 2 CARD16 height - 2 CARD16 minor-opcode - 2 CARD16 count - 1 CARD8 major-opcode - 11 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN NoExposure - 1 14 code - 1 unused - 2 CARD16 sequence number - 4 DRAWABLE drawable - 2 CARD16 minor-opcode - 1 CARD8 major-opcode - 21 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN VisibilityNotify - 1 15 code - 1 unused - 2 CARD16 sequence number - 4 WINDOW window - 1 state - 0 Unobscured - 1 PartiallyObscured - 2 FullyObscured - 23 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN CreateNotify - 1 16 code - 1 unused - 2 CARD16 sequence number - 4 WINDOW parent - 4 WINDOW window - 2 INT16 x - 2 INT16 y - 2 CARD16 width - 2 CARD16 height - 2 CARD16 border-width - 1 BOOL override-redirect - 9 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN DestroyNotify - 1 17 code - 1 unused - 2 CARD16 sequence number - 4 WINDOW event - 4 WINDOW window - 20 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN UnmapNotify - 1 18 code - 1 unused - 2 CARD16 sequence number - 4 WINDOW event - 4 WINDOW window - 1 BOOL from-configure - 19 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN MapNotify - 1 19 code - 1 unused - 2 CARD16 sequence number - 4 WINDOW event - 4 WINDOW window - 1 BOOL override-redirect - 19 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN MapRequest - 1 20 code - 1 unused - 2 CARD16 sequence number - 4 WINDOW parent - 4 WINDOW window - 20 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ReparentNotify - 1 21 code - 1 unused - 2 CARD16 sequence number - 4 WINDOW event - 4 WINDOW window - 4 WINDOW parent - 2 INT16 x - 2 INT16 y - 1 BOOL override-redirect - 11 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ConfigureNotify - 1 22 code - 1 unused - 2 CARD16 sequence number - 4 WINDOW event - 4 WINDOW window - 4 WINDOW above-sibling - 0 None - 2 INT16 x - 2 INT16 y - 2 CARD16 width - 2 CARD16 height - 2 CARD16 border-width - 1 BOOL override-redirect - 5 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ConfigureRequest - 1 23 code - 1 stack-mode - 0 Above - 1 Below - 2 TopIf - 3 BottomIf - 4 Opposite - 2 CARD16 sequence number - 4 WINDOW parent - 4 WINDOW window - 4 WINDOW sibling - 0 None - 2 INT16 x - 2 INT16 y - 2 CARD16 width - 2 CARD16 height - 2 CARD16 border-width - 2 BITMASK value-mask - #x0001 x - #x0002 y - #x0004 width - #x0008 height - #x0010 border-width - #x0020 sibling - #x0040 stack-mode - 4 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN GravityNotify - 1 24 code - 1 unused - 2 CARD16 sequence number - 4 WINDOW event - 4 WINDOW window - 2 INT16 x - 2 INT16 y - 16 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ResizeRequest - 1 25 code - 1 unused - 2 CARD16 sequence number - 4 WINDOW window - 2 CARD16 width - 2 CARD16 height - 20 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN CirculateNotify - 1 26 code - 1 unused - 2 CARD16 sequence number - 4 WINDOW event - 4 WINDOW window - 4 WINDOW unused - 1 place - 0 Top - 1 Bottom - 15 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN CirculateRequest - 1 27 code - 1 unused - 2 CARD16 sequence number - 4 WINDOW parent - 4 WINDOW window - 4 unused - 1 place - 0 Top - 1 Bottom - 15 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN PropertyNotify - 1 28 code - 1 unused - 2 CARD16 sequence number - 4 WINDOW window - 4 ATOM atom - 4 TIMESTAMP time - 1 state - 0 NewValue - 1 Deleted - 15 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN SelectionClear - 1 29 code - 1 unused - 2 CARD16 sequence number - 4 TIMESTAMP time - 4 WINDOW owner - 4 ATOM selection - 16 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN SelectionRequest - 1 30 code - 1 unused - 2 CARD16 sequence number - 4 TIMESTAMP time - 0 CurrentTime - 4 WINDOW owner - 4 WINDOW requestor - 4 ATOM selection - 4 ATOM target - 4 ATOM property - 0 None - 4 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN SelectionNotify - 1 31 code - 1 unused - 2 CARD16 sequence number - 4 TIMESTAMP time - 0 CurrentTime - 4 WINDOW requestor - 4 ATOM selection - 4 ATOM target - 4 ATOM property - 0 None - 8 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ColormapNotify - 1 32 code - 1 unused - 2 CARD16 sequence number - 4 WINDOW window - 4 COLORMAP colormap - 0 None - 1 BOOL new - 1 state - 0 Uninstalled - 1 Installed - 18 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ClientMessage - 1 33 code - 1 CARD8 format - 2 CARD16 sequence number - 4 WINDOW window - 4 ATOM type - 20 data -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN MappingNotify - 1 34 code - 1 unused - 2 CARD16 sequence number - 1 request - 0 Modifier - 1 Keyboard - 2 Pointer - 1 KEYCODE first-keycode - 1 CARD8 count - 25 unused -.De -.ps 11 -.nr PS 11 -.bp diff --git a/doc/xorg-docs/specs/XProtocol/X11.keysyms b/doc/xorg-docs/specs/XProtocol/X11.keysyms deleted file mode 100644 index a894c61de..000000000 --- a/doc/xorg-docs/specs/XProtocol/X11.keysyms +++ /dev/null @@ -1,1283 +0,0 @@ -.\" $Xorg: $ -\& -.sp 1 -.ps 11 -.nr PS 11 -.XS -Appendix A \- KEYSYM Encoding -.XE -.ce 3 -\s+1\fBAppendix A\fP\s-1 - -\s+1\fBKEYSYM Encoding\fP\s-1 -.sp 2 -.LP -KEYSYM values are 32-bit integers that encode the symbols on the -keycaps of a keyboard. The three most significant bits are always -zero, which leaves a 29-bit number space. For convenience, KEYSYM -values can be viewed as split into four bytes: -.IP \(bu 5 -Byte 1 is the most significant eight bits (three zero bits and -the most-significant five bits of the 29-bit effective value) -.IP \(bu 5 -Byte 2 is the next most-significant eight bits -.IP \(bu 5 -Byte 3 is the next most-significant eight bits -.IP \(bu 5 -Byte 4 is the least-significant eight bits -.LP -There are six categories of KEYSYM values. -.SH -A.1 Special KEYSYMs -.LP -There are two special values: -.PN NoSymbol -and -.PN VoidSymbol . -They are used to indicate the absence of symbols (see section 5). -.TS -l l l l l lw(1i) -n n n n l lw(1i). -_ -.sp 6p -.B -Byte 1 Byte 2 Byte 3 Byte 4 Hex. value Name -.sp 6p -_ -.sp 6p -.R -0 0 0 0 #x00000000 T{ -.PN NoSymbol -T} -0 255 255 255 #x00FFFFFF T{ -.PN VoidSymbol -T} -.sp 6p -_ -.TE -.SH -A.2 Latin-1 KEYSYMs -.LP -The Latin-1 KEYSYMs occupy the range #x0020 to #x007E and #x00A0 to -#00FF and represent the ISO 10646 / Unicode characters U+0020 to -U+007E and U+00A0 to U+00FF, respectively. -.SH -A.3 Unicode KEYSYMs -.LP -These occupy the range #x01000100 to #x0110FFFF and represent the ISO -10646 / Unicode characters U+0100 to U+10FFFF, respectively. The -numeric value of a Unicode KEYSYM is the Unicode position of the -corresponding character plus #x01000000. In the interest of backwards -compatibility, clients should be able to process both the Unicode -KEYSYM and the Legacy KEYSYM for those characters where both exist. -.LP -Dead keys, which place an accent on the next character entered, shall -be encoded as Function KEYSYMs, and not as the Unicode KEYSYM -corresponding to an equivalent combining character. Where a keycap -indicates a specific function with a graphical symbol that is also -available in Unicode (e.g., an upwards arrow for the cursor up -function), the appropriate Function KEYSYM should be used, and not -the Unicode KEYSYM corresponding to the depicted symbol. -.SH -A.4 Function KEYSYMs -.LP -These represent keycap symbols that do not directly represent elements -of a coded character set. Instead, they typically identify a software -function, mode, or operation (e.g., cursor up, caps lock, insert) that -can be activated using a dedicated key. Function KEYSYMs have zero -values for bytes 1 and 2. Byte 3 distinguishes between several 8-bit -sets within which byte 4 identifies the individual function key. -.TS -l l -n l. -_ -.sp 6p -.B -Byte 3 Byte 4 -.sp 6p -_ -.sp 6p -.R -255 Keyboard -254 Keyboard (XKB) Extension -253 3270 -.sp 6p -_ -.TE -Within a national market, keyboards tend to be comparatively standard -with respect to the character keys, but they can differ significantly -on the miscellaneous function keys. Some have function keys left over -from early timesharing days, others were designed for a specific -application, such as text processing, web browsing, or accessing -audiovisual data. The symbols on the keycaps can differ significantly -between manufacturers and national markets, even where they denote the -same software function (e.g., Ctrl in the U.S. versus Strg in Germany) -.LP -There are two ways of thinking about how to define KEYSYMs for such a -world: -.IP \(bu 5 -The Engraving approach -.IP \(bu 5 -The Common approach -.LP -The Engraving approach is to create a KEYSYM for every unique key -engraving. This is effectively taking the union of all key engravings -on all keyboards. For example, some keyboards label function keys -across the top as F1 through Fn, and others label them as PF1 through -PFn. These would be different keys under the Engraving -approach. Likewise, Lock would differ from Shift Lock, which is -different from the up-arrow symbol that has the effect of changing -lowercase to uppercase. There are lots of other aliases such as Del, -DEL, Delete, Remove, and so forth. The Engraving approach makes it -easy to decide if a new entry should be added to the KEYSYM set: if it -does not exactly match an existing one, then a new one is created. -.LP -The Common approach tries to capture all of the keys present on an -interesting number of keyboards, folding likely aliases into the same -KEYSYM. For example, Del, DEL, and Delete are all merged into a single -KEYSYM. Vendors can augment the KEYSYM set (using the vendor-specific -encoding space) to include all of their unique keys that were not -included in the standard set. Each vendor decides which of its keys -map into the standard KEYSYMs, which presumably can be overridden by a -user. It is more difficult to implement this approach, because -judgment is required about when a sufficient set of keyboards -implements an engraving to justify making it a KEYSYM in the standard -set and about which engravings should be merged into a single -KEYSYM. -.LP -Although neither scheme is perfect or elegant, the Common approach has -been selected because it makes it easier to write a portable -application. Having the Delete functionality merged into a single -KEYSYM allows an application to implement a deletion function and -expect reasonable bindings on a wide set of workstations. Under the -Common approach, application writers are still free to look for and -interpret vendor-specific KEYSYMs, but because they are in the -extended set, the application developer is more conscious that they -are writing the application in a nonportable fashion. -.LP -The Keyboard set is a miscellaneous collection of commonly occurring -keys on keyboards. Within this set, the numeric keypad symbols are -generally duplicates of symbols found on keys on the main part of the -keyboard, but they are distinguished here because they often have a -distinguishable semantics associated with them. -.LP -.ps 9 -.nr PS 9 -.vs 10 -.nr VS 10 -.TS H -lw(.25i) lw(4i) lw(.6i). -_ -.sp 6p -.B -KEYSYM Name Set -value -.sp 6p -_ -.sp 6p -.TH -.R -#xFF08 BACKSPACE, BACK SPACE, BACK CHAR Keyboard -#xFF09 TAB Keyboard -#xFF0A LINEFEED, LF Keyboard -#xFF0B CLEAR Keyboard -#xFF0D RETURN, ENTER Keyboard -#xFF13 PAUSE, HOLD Keyboard -#xFF14 SCROLL LOCK Keyboard -#xFF15 SYS REQ, SYSTEM REQUEST Keyboard -#xFF1B ESCAPE Keyboard -#xFF20 MULTI-KEY CHARACTER PREFACE Keyboard -#xFF21 KANJI, KANJI CONVERT Keyboard -#xFF22 MUHENKAN Keyboard -#xFF23 HENKAN MODE Keyboard -#xFF24 ROMAJI Keyboard -#xFF25 HIRAGANA Keyboard -#xFF26 KATAKANA Keyboard -#xFF27 HIRAGANA/KATAKANA TOGGLE Keyboard -#xFF28 ZENKAKU Keyboard -#xFF29 HANKAKU Keyboard -#xFF2A ZENKAKU/HANKAKU TOGGLE Keyboard -#xFF2B TOUROKU Keyboard -#xFF2C MASSYO Keyboard -#xFF2D KANA LOCK Keyboard -#xFF2E KANA SHIFT Keyboard -#xFF2F EISU SHIFT Keyboard -#xFF30 EISU TOGGLE Keyboard -#xFF31 HANGUL START/STOP (TOGGLE) Keyboard -#xFF32 HANGUL START Keyboard -#xFF33 HANGUL END, ENGLISH START Keyboard -#xFF34 START HANGUL/HANJA CONVERSION Keyboard -#xFF35 HANGUL JAMO MODE Keyboard -#xFF36 HANGUL ROMAJA MODE Keyboard -#xFF37 HANGUL CODE INPUT Keyboard -#xFF38 HANGUL JEONJA MODE Keyboard -#xFF39 HANGUL BANJA MODE Keyboard -#xFF3A HANGUL PREHANJA CONVERSION Keyboard -#xFF3B HANGUL POSTHANJA CONVERSION Keyboard -#xFF3C HANGUL SINGLE CANDIDATE Keyboard -#xFF3D HANGUL MULTIPLE CANDIDATE Keyboard -#xFF3E HANGUL PREVIOUS CANDIDATE Keyboard -#xFF3F HANGUL SPECIAL SYMBOLS Keyboard -#xFF50 HOME Keyboard -#xFF51 LEFT, MOVE LEFT, LEFT ARROW Keyboard -#xFF52 UP, MOVE UP, UP ARROW Keyboard -#xFF53 RIGHT, MOVE RIGHT, RIGHT ARROW Keyboard -#xFF54 DOWN, MOVE DOWN, DOWN ARROW Keyboard -#xFF55 PRIOR, PREVIOUS, PAGE UP Keyboard -#xFF56 NEXT, PAGE DOWN Keyboard -#xFF57 END, EOL Keyboard -#xFF58 BEGIN, BOL Keyboard -#xFF60 SELECT, MARK Keyboard -#xFF61 PRINT Keyboard -#xFF62 EXECUTE, RUN, DO Keyboard -#xFF63 INSERT, INSERT HERE Keyboard -#xFF65 UNDO, OOPS Keyboard -#xFF66 REDO, AGAIN Keyboard -#xFF67 MENU Keyboard -#xFF68 FIND, SEARCH Keyboard -#xFF69 CANCEL, STOP, ABORT, EXIT Keyboard -#xFF6A HELP Keyboard -#xFF6B BREAK Keyboard -#xFF7E MODE SWITCH, SCRIPT SWITCH, CHARACTER SET SWITCH Keyboard -#xFF7F NUM LOCK Keyboard -#xFF80 KEYPAD SPACE Keyboard -#xFF89 KEYPAD TAB Keyboard -#xFF8D KEYPAD ENTER Keyboard -#xFF91 KEYPAD F1, PF1, A Keyboard -#xFF92 KEYPAD F2, PF2, B Keyboard -#xFF93 KEYPAD F3, PF3, C Keyboard -#xFF94 KEYPAD F4, PF4, D Keyboard -#xFF95 KEYPAD HOME Keyboard -#xFF96 KEYPAD LEFT Keyboard -#xFF97 KEYPAD UP Keyboard -#xFF98 KEYPAD RIGHT Keyboard -#xFF99 KEYPAD DOWN Keyboard -#xFF9A KEYPAD PRIOR, PAGE UP Keyboard -#xFF9B KEYPAD NEXT, PAGE DOWN Keyboard -#xFF9C KEYPAD END Keyboard -#xFF9D KEYPAD BEGIN Keyboard -#xFF9E KEYPAD INSERT Keyboard -#xFF9F KEYPAD DELETE Keyboard -#xFFAA KEYPAD MULTIPLICATION SIGN, ASTERISK Keyboard -#xFFAB KEYPAD PLUS SIGN Keyboard -#xFFAC KEYPAD SEPARATOR, COMMA Keyboard -#xFFAD KEYPAD MINUS SIGN, HYPHEN Keyboard -#xFFAE KEYPAD DECIMAL POINT, FULL STOP Keyboard -#xFFAF KEYPAD DIVISION SIGN, SOLIDUS Keyboard -#xFFB0 KEYPAD DIGIT ZERO Keyboard -#xFFB1 KEYPAD DIGIT ONE Keyboard -#xFFB2 KEYPAD DIGIT TWO Keyboard -#xFFB3 KEYPAD DIGIT THREE Keyboard -#xFFB4 KEYPAD DIGIT FOUR Keyboard -#xFFB5 KEYPAD DIGIT FIVE Keyboard -#xFFB6 KEYPAD DIGIT SIX Keyboard -#xFFB7 KEYPAD DIGIT SEVEN Keyboard -#xFFB8 KEYPAD DIGIT EIGHT Keyboard -#xFFB9 KEYPAD DIGIT NINE Keyboard -#xFFBD KEYPAD EQUALS SIGN Keyboard -#xFFBE F1 Keyboard -#xFFBF F2 Keyboard -#xFFC0 F3 Keyboard -#xFFC1 F4 Keyboard -#xFFC2 F5 Keyboard -#xFFC3 F6 Keyboard -#xFFC4 F7 Keyboard -#xFFC5 F8 Keyboard -#xFFC6 F9 Keyboard -#xFFC7 F10 Keyboard -#xFFC8 F11, L1 Keyboard -#xFFC9 F12, L2 Keyboard -#xFFCA F13, L3 Keyboard -#xFFCB F14, L4 Keyboard -#xFFCC F15, L5 Keyboard -#xFFCD F16, L6 Keyboard -#xFFCE F17, L7 Keyboard -#xFFCF F18, L8 Keyboard -#xFFD0 F19, L9 Keyboard -#xFFD1 F20, L10 Keyboard -#xFFD2 F21, R1 Keyboard -#xFFD3 F22, R2 Keyboard -#xFFD4 F23, R3 Keyboard -#xFFD5 F24, R4 Keyboard -#xFFD6 F25, R5 Keyboard -#xFFD7 F26, R6 Keyboard -#xFFD8 F27, R7 Keyboard -#xFFD9 F28, R8 Keyboard -#xFFDA F29, R9 Keyboard -#xFFDB F30, R10 Keyboard -#xFFDC F31, R11 Keyboard -#xFFDD F32, R12 Keyboard -#xFFDE F33, R13 Keyboard -#xFFDF F34, R14 Keyboard -#xFFE0 F35, R15 Keyboard -#xFFE1 LEFT SHIFT Keyboard -#xFFE2 RIGHT SHIFT Keyboard -#xFFE3 LEFT CONTROL Keyboard -#xFFE4 RIGHT CONTROL Keyboard -#xFFE5 CAPS LOCK Keyboard -#xFFE6 SHIFT LOCK Keyboard -#xFFE7 LEFT META Keyboard -#xFFE8 RIGHT META Keyboard -#xFFE9 LEFT ALT Keyboard -#xFFEA RIGHT ALT Keyboard -#xFFEB LEFT SUPER Keyboard -#xFFEC RIGHT SUPER Keyboard -#xFFED LEFT HYPER Keyboard -#xFFEE RIGHT HYPER Keyboard -#xFFFF DELETE, RUBOUT Keyboard -.sp 6p -_ -.TE -.LP -.ps 11 -.nr PS 11 -.vs 12 -.nr VS 12 -.LP -The Keyboard (XKB) Extension set, which provides among other things -a range of dead keys, is defined in ``The X Keyboard Extension: -Protocol Specification'', Appendix C. -.LP -The 3270 set defines additional keys that are specific to IBM 3270 -terminals. -.LP -.ps 9 -.nr PS 9 -.vs 10 -.nr VS 10 -.TS H -lw(.25i) lw(4i) lw(.6i). -_ -.sp 6p -.B -KEYSYM Name Set -value -.sp 6p -_ -.sp 6p -.TH -.R -#xFD01 3270 DUPLICATE 3270 -#xFD02 3270 FIELDMARK 3270 -#xFD03 3270 RIGHT2 3270 -#xFD04 3270 LEFT2 3270 -#xFD05 3270 BACKTAB 3270 -#xFD06 3270 ERASEEOF 3270 -#xFD07 3270 ERASEINPUT 3270 -#xFD08 3270 RESET 3270 -#xFD09 3270 QUIT 3270 -#xFD0A 3270 PA1 3270 -#xFD0B 3270 PA2 3270 -#xFD0C 3270 PA3 3270 -#xFD0D 3270 TEST 3270 -#xFD0E 3270 ATTN 3270 -#xFD0F 3270 CURSORBLINK 3270 -#xFD10 3270 ALTCURSOR 3270 -#xFD11 3270 KEYCLICK 3270 -#xFD12 3270 JUMP 3270 -#xFD13 3270 IDENT 3270 -#xFD14 3270 RULE 3270 -#xFD15 3270 COPY 3270 -#xFD16 3270 PLAY 3270 -#xFD17 3270 SETUP 3270 -#xFD18 3270 RECORD 3270 -#xFD19 3270 CHANGESCREEN 3270 -#xFD1A 3270 DELETEWORD 3270 -#xFD1B 3270 EXSELECT 3270 -#xFD1C 3270 CURSORSELECT 3270 -#xFD1D 3270 PRINTSCREEN 3270 -#xFD1E 3270 ENTER 3270 -.sp 6p -_ -.TE -.LP -.ps 11 -.nr PS 11 -.vs 12 -.nr VS 12 -.LP -.SH -A.5 Vendor KEYSYMs -.LP -The KEYSYM number range #x10000000 to #x1FFFFFFF is available for -vendor-specific extentions. Among these, the range #x11000000 to -#x1100FFFF is designated for keypad KEYSYMs. -.SH -A.6 Legacy KEYSYMs -.LP -These date from the time before ISO 10646 / Unicode was -available. They represent characters from a number of different older -8-bit coded character sets and have zero values for bytes 1 and -2. Byte 3 indicates a coded character set and byte 4 is the 8-bit -value of the particular character within that set. -.TS -l lw(1.5i) l lw(1i) -n lw(1.5i) n lw(1i). -_ -.sp 6p -.B -Byte 3 Byte 4 Byte 3 Byte 4 -.sp 6p -_ -.sp 6p -.R -1 Latin-2 11 APL -2 Latin-3 12 Hebrew -3 Latin-4 13 Thai -4 Kana 14 Korean -5 Arabic 15 Latin-5 -6 Cyrillic 16 Latin-6 -7 Greek 17 Latin-7 -8 Technical 18 Latin-8 -9 Special 19 Latin-9 -10 Publishing 32 Currency -.sp 6p -_ -.TE -Each character set contains gaps where codes have been removed that -were duplicates with codes in previous character sets (that is, -character sets with lesser byte 3 value). -.LP -The Latin, Arabic, Cyrillic, Greek, Hebrew, and Thai sets were taken -from the early drafts of the relevant ISO 8859 parts available at the -time. However, in the case of the Cyrillic and Greek sets, these -turned out differently in the final versions of the ISO standard. The -Technical, Special, and Publishing sets are based on Digital Equipment -Corporation standards, as no equivalent international standards were -available at the time. -.LP -The table below lists all standardized Legacy KEYSYMs, along with the -name used in the source document. Where there exists an unambiguous -equivalent in Unicode, as it is the case with all ISO 8859 characters, -it is given in the second column as a cross reference. Where there is -no Unicode number provided, the exact semantics of the KEYSYM may have -been lost and a Unicode KEYSYM should be used instead, if available. -.LP -As support of Unicode KEYSYMs increases, some or all of the Legacy -KEYSYMs may be phased out and withdrawn in future versions of this -standard. Most KEYSYMs in the sets Technical, Special, Publishing, APL -and Currency (with the exception of #x20AC) were probably never used -in practice, and were not supported by pre-Unicode fonts. In -particular, the Currency set, which was copied from Unicode, has -already been deprecated by the introduction of the Unicode KEYSYMs. -.LP -.ps 9 -.nr PS 9 -.vs 10 -.nr VS 10 -.TS H -lw(.25i) lw(.25i) lw(3.5i) lw(.6i). -_ -.sp 6p -.B -KEYSYM Unicode Name Set -value value -.sp 6p -_ -.sp 6p -.TH -.R -#x01A1 U+0104 LATIN CAPITAL LETTER A WITH OGONEK Latin-2 -#x01A2 U+02D8 BREVE Latin-2 -#x01A3 U+0141 LATIN CAPITAL LETTER L WITH STROKE Latin-2 -#x01A5 U+013D LATIN CAPITAL LETTER L WITH CARON Latin-2 -#x01A6 U+015A LATIN CAPITAL LETTER S WITH ACUTE Latin-2 -#x01A9 U+0160 LATIN CAPITAL LETTER S WITH CARON Latin-2 -#x01AA U+015E LATIN CAPITAL LETTER S WITH CEDILLA Latin-2 -#x01AB U+0164 LATIN CAPITAL LETTER T WITH CARON Latin-2 -#x01AC U+0179 LATIN CAPITAL LETTER Z WITH ACUTE Latin-2 -#x01AE U+017D LATIN CAPITAL LETTER Z WITH CARON Latin-2 -#x01AF U+017B LATIN CAPITAL LETTER Z WITH DOT ABOVE Latin-2 -#x01B1 U+0105 LATIN SMALL LETTER A WITH OGONEK Latin-2 -#x01B2 U+02DB OGONEK Latin-2 -#x01B3 U+0142 LATIN SMALL LETTER L WITH STROKE Latin-2 -#x01B5 U+013E LATIN SMALL LETTER L WITH CARON Latin-2 -#x01B6 U+015B LATIN SMALL LETTER S WITH ACUTE Latin-2 -#x01B7 U+02C7 CARON Latin-2 -#x01B9 U+0161 LATIN SMALL LETTER S WITH CARON Latin-2 -#x01BA U+015F LATIN SMALL LETTER S WITH CEDILLA Latin-2 -#x01BB U+0165 LATIN SMALL LETTER T WITH CARON Latin-2 -#x01BC U+017A LATIN SMALL LETTER Z WITH ACUTE Latin-2 -#x01BD U+02DD DOUBLE ACUTE ACCENT Latin-2 -#x01BE U+017E LATIN SMALL LETTER Z WITH CARON Latin-2 -#x01BF U+017C LATIN SMALL LETTER Z WITH DOT ABOVE Latin-2 -#x01C0 U+0154 LATIN CAPITAL LETTER R WITH ACUTE Latin-2 -#x01C3 U+0102 LATIN CAPITAL LETTER A WITH BREVE Latin-2 -#x01C5 U+0139 LATIN CAPITAL LETTER L WITH ACUTE Latin-2 -#x01C6 U+0106 LATIN CAPITAL LETTER C WITH ACUTE Latin-2 -#x01C8 U+010C LATIN CAPITAL LETTER C WITH CARON Latin-2 -#x01CA U+0118 LATIN CAPITAL LETTER E WITH OGONEK Latin-2 -#x01CC U+011A LATIN CAPITAL LETTER E WITH CARON Latin-2 -#x01CF U+010E LATIN CAPITAL LETTER D WITH CARON Latin-2 -#x01D0 U+0110 LATIN CAPITAL LETTER D WITH STROKE Latin-2 -#x01D1 U+0143 LATIN CAPITAL LETTER N WITH ACUTE Latin-2 -#x01D2 U+0147 LATIN CAPITAL LETTER N WITH CARON Latin-2 -#x01D5 U+0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE Latin-2 -#x01D8 U+0158 LATIN CAPITAL LETTER R WITH CARON Latin-2 -#x01D9 U+016E LATIN CAPITAL LETTER U WITH RING ABOVE Latin-2 -#x01DB U+0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE Latin-2 -#x01DE U+0162 LATIN CAPITAL LETTER T WITH CEDILLA Latin-2 -#x01E0 U+0155 LATIN SMALL LETTER R WITH ACUTE Latin-2 -#x01E3 U+0103 LATIN SMALL LETTER A WITH BREVE Latin-2 -#x01E5 U+013A LATIN SMALL LETTER L WITH ACUTE Latin-2 -#x01E6 U+0107 LATIN SMALL LETTER C WITH ACUTE Latin-2 -#x01E8 U+010D LATIN SMALL LETTER C WITH CARON Latin-2 -#x01EA U+0119 LATIN SMALL LETTER E WITH OGONEK Latin-2 -#x01EC U+011B LATIN SMALL LETTER E WITH CARON Latin-2 -#x01EF U+010F LATIN SMALL LETTER D WITH CARON Latin-2 -#x01F0 U+0111 LATIN SMALL LETTER D WITH STROKE Latin-2 -#x01F1 U+0144 LATIN SMALL LETTER N WITH ACUTE Latin-2 -#x01F2 U+0148 LATIN SMALL LETTER N WITH CARON Latin-2 -#x01F5 U+0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE Latin-2 -#x01F8 U+0159 LATIN SMALL LETTER R WITH CARON Latin-2 -#x01F9 U+016F LATIN SMALL LETTER U WITH RING ABOVE Latin-2 -#x01FB U+0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE Latin-2 -#x01FE U+0163 LATIN SMALL LETTER T WITH CEDILLA Latin-2 -#x01FF U+02D9 DOT ABOVE Latin-2 -.sp 2 -#x02A1 U+0126 LATIN CAPITAL LETTER H WITH STROKE Latin-3 -#x02A6 U+0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX Latin-3 -#x02A9 U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE Latin-3 -#x02AB U+011E LATIN CAPITAL LETTER G WITH BREVE Latin-3 -#x02AC U+0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX Latin-3 -#x02B1 U+0127 LATIN SMALL LETTER H WITH STROKE Latin-3 -#x02B6 U+0125 LATIN SMALL LETTER H WITH CIRCUMFLEX Latin-3 -#x02B9 U+0131 LATIN SMALL LETTER DOTLESS I Latin-3 -#x02BB U+011F LATIN SMALL LETTER G WITH BREVE Latin-3 -#x02BC U+0135 LATIN SMALL LETTER J WITH CIRCUMFLEX Latin-3 -#x02C5 U+010A LATIN CAPITAL LETTER C WITH DOT ABOVE Latin-3 -#x02C6 U+0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX Latin-3 -#x02D5 U+0120 LATIN CAPITAL LETTER G WITH DOT ABOVE Latin-3 -#x02D8 U+011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX Latin-3 -#x02DD U+016C LATIN CAPITAL LETTER U WITH BREVE Latin-3 -#x02DE U+015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX Latin-3 -#x02E5 U+010B LATIN SMALL LETTER C WITH DOT ABOVE Latin-3 -#x02E6 U+0109 LATIN SMALL LETTER C WITH CIRCUMFLEX Latin-3 -#x02F5 U+0121 LATIN SMALL LETTER G WITH DOT ABOVE Latin-3 -#x02F8 U+011D LATIN SMALL LETTER G WITH CIRCUMFLEX Latin-3 -#x02FD U+016D LATIN SMALL LETTER U WITH BREVE Latin-3 -#x02FE U+015D LATIN SMALL LETTER S WITH CIRCUMFLEX Latin-3 -.sp 2 -#x03A2 U+0138 LATIN SMALL LETTER KRA Latin-4 -#x03A3 U+0156 LATIN CAPITAL LETTER R WITH CEDILLA Latin-4 -#x03A5 U+0128 LATIN CAPITAL LETTER I WITH TILDE Latin-4 -#x03A6 U+013B LATIN CAPITAL LETTER L WITH CEDILLA Latin-4 -#x03AA U+0112 LATIN CAPITAL LETTER E WITH MACRON Latin-4 -#x03AB U+0122 LATIN CAPITAL LETTER G WITH CEDILLA Latin-4 -#x03AC U+0166 LATIN CAPITAL LETTER T WITH STROKE Latin-4 -#x03B3 U+0157 LATIN SMALL LETTER R WITH CEDILLA Latin-4 -#x03B5 U+0129 LATIN SMALL LETTER I WITH TILDE Latin-4 -#x03B6 U+013C LATIN SMALL LETTER L WITH CEDILLA Latin-4 -#x03BA U+0113 LATIN SMALL LETTER E WITH MACRON Latin-4 -#x03BB U+0123 LATIN SMALL LETTER G WITH CEDILLA Latin-4 -#x03BC U+0167 LATIN SMALL LETTER T WITH STROKE Latin-4 -#x03BD U+014A LATIN CAPITAL LETTER ENG Latin-4 -#x03BF U+014B LATIN SMALL LETTER ENG Latin-4 -#x03C0 U+0100 LATIN CAPITAL LETTER A WITH MACRON Latin-4 -#x03C7 U+012E LATIN CAPITAL LETTER I WITH OGONEK Latin-4 -#x03CC U+0116 LATIN CAPITAL LETTER E WITH DOT ABOVE Latin-4 -#x03CF U+012A LATIN CAPITAL LETTER I WITH MACRON Latin-4 -#x03D1 U+0145 LATIN CAPITAL LETTER N WITH CEDILLA Latin-4 -#x03D2 U+014C LATIN CAPITAL LETTER O WITH MACRON Latin-4 -#x03D3 U+0136 LATIN CAPITAL LETTER K WITH CEDILLA Latin-4 -#x03D9 U+0172 LATIN CAPITAL LETTER U WITH OGONEK Latin-4 -#x03DD U+0168 LATIN CAPITAL LETTER U WITH TILDE Latin-4 -#x03DE U+016A LATIN CAPITAL LETTER U WITH MACRON Latin-4 -#x03E0 U+0101 LATIN SMALL LETTER A WITH MACRON Latin-4 -#x03E7 U+012F LATIN SMALL LETTER I WITH OGONEK Latin-4 -#x03EC U+0117 LATIN SMALL LETTER E WITH DOT ABOVE Latin-4 -#x03EF U+012B LATIN SMALL LETTER I WITH MACRON Latin-4 -#x03F1 U+0146 LATIN SMALL LETTER N WITH CEDILLA Latin-4 -#x03F2 U+014D LATIN SMALL LETTER O WITH MACRON Latin-4 -#x03F3 U+0137 LATIN SMALL LETTER K WITH CEDILLA Latin-4 -#x03F9 U+0173 LATIN SMALL LETTER U WITH OGONEK Latin-4 -#x03FD U+0169 LATIN SMALL LETTER U WITH TILDE Latin-4 -#x03FE U+016B LATIN SMALL LETTER U WITH MACRON Latin-4 -.sp 2 -#x047E U+203E OVERLINE Kana -#x04A1 U+3002 KANA FULL STOP Kana -#x04A2 U+300C KANA OPENING BRACKET Kana -#x04A3 U+300D KANA CLOSING BRACKET Kana -#x04A4 U+3001 KANA COMMA Kana -#x04A5 U+30FB KANA CONJUNCTIVE Kana -#x04A6 U+30F2 KANA LETTER WO Kana -#x04A7 U+30A1 KANA LETTER SMALL A Kana -#x04A8 U+30A3 KANA LETTER SMALL I Kana -#x04A9 U+30A5 KANA LETTER SMALL U Kana -#x04AA U+30A7 KANA LETTER SMALL E Kana -#x04AB U+30A9 KANA LETTER SMALL O Kana -#x04AC U+30E3 KANA LETTER SMALL YA Kana -#x04AD U+30E5 KANA LETTER SMALL YU Kana -#x04AE U+30E7 KANA LETTER SMALL YO Kana -#x04AF U+30C3 KANA LETTER SMALL TSU Kana -#x04B0 U+30FC PROLONGED SOUND SYMBOL Kana -#x04B1 U+30A2 KANA LETTER A Kana -#x04B2 U+30A4 KANA LETTER I Kana -#x04B3 U+30A6 KANA LETTER U Kana -#x04B4 U+30A8 KANA LETTER E Kana -#x04B5 U+30AA KANA LETTER O Kana -#x04B6 U+30AB KANA LETTER KA Kana -#x04B7 U+30AD KANA LETTER KI Kana -#x04B8 U+30AF KANA LETTER KU Kana -#x04B9 U+30B1 KANA LETTER KE Kana -#x04BA U+30B3 KANA LETTER KO Kana -#x04BB U+30B5 KANA LETTER SA Kana -#x04BC U+30B7 KANA LETTER SHI Kana -#x04BD U+30B9 KANA LETTER SU Kana -#x04BE U+30BB KANA LETTER SE Kana -#x04BF U+30BD KANA LETTER SO Kana -#x04C0 U+30BF KANA LETTER TA Kana -#x04C1 U+30C1 KANA LETTER CHI Kana -#x04C2 U+30C4 KANA LETTER TSU Kana -#x04C3 U+30C6 KANA LETTER TE Kana -#x04C4 U+30C8 KANA LETTER TO Kana -#x04C5 U+30CA KANA LETTER NA Kana -#x04C6 U+30CB KANA LETTER NI Kana -#x04C7 U+30CC KANA LETTER NU Kana -#x04C8 U+30CD KANA LETTER NE Kana -#x04C9 U+30CE KANA LETTER NO Kana -#x04CA U+30CF KANA LETTER HA Kana -#x04CB U+30D2 KANA LETTER HI Kana -#x04CC U+30D5 KANA LETTER FU Kana -#x04CD U+30D8 KANA LETTER HE Kana -#x04CE U+30DB KANA LETTER HO Kana -#x04CF U+30DE KANA LETTER MA Kana -#x04D0 U+30DF KANA LETTER MI Kana -#x04D1 U+30E0 KANA LETTER MU Kana -#x04D2 U+30E1 KANA LETTER ME Kana -#x04D3 U+30E2 KANA LETTER MO Kana -#x04D4 U+30E4 KANA LETTER YA Kana -#x04D5 U+30E6 KANA LETTER YU Kana -#x04D6 U+30E8 KANA LETTER YO Kana -#x04D7 U+30E9 KANA LETTER RA Kana -#x04D8 U+30EA KANA LETTER RI Kana -#x04D9 U+30EB KANA LETTER RU Kana -#x04DA U+30EC KANA LETTER RE Kana -#x04DB U+30ED KANA LETTER RO Kana -#x04DC U+30EF KANA LETTER WA Kana -#x04DD U+30F3 KANA LETTER N Kana -#x04DE U+309B VOICED SOUND SYMBOL Kana -#x04DF U+309C SEMIVOICED SOUND SYMBOL Kana -.sp 2 -#x05AC U+060C ARABIC COMMA Arabic -#x05BB U+061B ARABIC SEMICOLON Arabic -#x05BF U+061F ARABIC QUESTION MARK Arabic -#x05C1 U+0621 ARABIC LETTER HAMZA Arabic -#x05C2 U+0622 ARABIC LETTER ALEF WITH MADDA ABOVE Arabic -#x05C3 U+0623 ARABIC LETTER ALEF WITH HAMZA ABOVE Arabic -#x05C4 U+0624 ARABIC LETTER WAW WITH HAMZA ABOVE Arabic -#x05C5 U+0625 ARABIC LETTER ALEF WITH HAMZA BELOW Arabic -#x05C6 U+0626 ARABIC LETTER YEH WITH HAMZA ABOVE Arabic -#x05C7 U+0627 ARABIC LETTER ALEF Arabic -#x05C8 U+0628 ARABIC LETTER BEH Arabic -#x05C9 U+0629 ARABIC LETTER TEH MARBUTA Arabic -#x05CA U+062A ARABIC LETTER TEH Arabic -#x05CB U+062B ARABIC LETTER THEH Arabic -#x05CC U+062C ARABIC LETTER JEEM Arabic -#x05CD U+062D ARABIC LETTER HAH Arabic -#x05CE U+062E ARABIC LETTER KHAH Arabic -#x05CF U+062F ARABIC LETTER DAL Arabic -#x05D0 U+0630 ARABIC LETTER THAL Arabic -#x05D1 U+0631 ARABIC LETTER REH Arabic -#x05D2 U+0632 ARABIC LETTER ZAIN Arabic -#x05D3 U+0633 ARABIC LETTER SEEN Arabic -#x05D4 U+0634 ARABIC LETTER SHEEN Arabic -#x05D5 U+0635 ARABIC LETTER SAD Arabic -#x05D6 U+0636 ARABIC LETTER DAD Arabic -#x05D7 U+0637 ARABIC LETTER TAH Arabic -#x05D8 U+0638 ARABIC LETTER ZAH Arabic -#x05D9 U+0639 ARABIC LETTER AIN Arabic -#x05DA U+063A ARABIC LETTER GHAIN Arabic -#x05E0 U+0640 ARABIC TATWEEL Arabic -#x05E1 U+0641 ARABIC LETTER FEH Arabic -#x05E2 U+0642 ARABIC LETTER QAF Arabic -#x05E3 U+0643 ARABIC LETTER KAF Arabic -#x05E4 U+0644 ARABIC LETTER LAM Arabic -#x05E5 U+0645 ARABIC LETTER MEEM Arabic -#x05E6 U+0646 ARABIC LETTER NOON Arabic -#x05E7 U+0647 ARABIC LETTER HEH Arabic -#x05E8 U+0648 ARABIC LETTER WAW Arabic -#x05E9 U+0649 ARABIC LETTER ALEF MAKSURA Arabic -#x05EA U+064A ARABIC LETTER YEH Arabic -#x05EB U+064B ARABIC FATHATAN Arabic -#x05EC U+064C ARABIC DAMMATAN Arabic -#x05ED U+064D ARABIC KASRATAN Arabic -#x05EE U+064E ARABIC FATHA Arabic -#x05EF U+064F ARABIC DAMMA Arabic -#x05F0 U+0650 ARABIC KASRA Arabic -#x05F1 U+0651 ARABIC SHADDA Arabic -#x05F2 U+0652 ARABIC SUKUN Arabic -.sp 2 -#x06A1 U+0452 CYRILLIC SMALL LETTER DJE Cyrillic -#x06A2 U+0453 CYRILLIC SMALL LETTER GJE Cyrillic -#x06A3 U+0451 CYRILLIC SMALL LETTER IO Cyrillic -#x06A4 U+0454 CYRILLIC SMALL LETTER UKRAINIAN IE Cyrillic -#x06A5 U+0455 CYRILLIC SMALL LETTER DZE Cyrillic -#x06A6 U+0456 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I Cyrillic -#x06A7 U+0457 CYRILLIC SMALL LETTER YI Cyrillic -#x06A8 U+0458 CYRILLIC SMALL LETTER JE Cyrillic -#x06A9 U+0459 CYRILLIC SMALL LETTER LJE Cyrillic -#x06AA U+045A CYRILLIC SMALL LETTER NJE Cyrillic -#x06AB U+045B CYRILLIC SMALL LETTER TSHE Cyrillic -#x06AC U+045C CYRILLIC SMALL LETTER KJE Cyrillic -#x06AD U+0491 CYRILLIC SMALL LETTER GHE WITH UPTURN Cyrillic -#x06AE U+045E CYRILLIC SMALL LETTER SHORT U Cyrillic -#x06AF U+045F CYRILLIC SMALL LETTER DZHE Cyrillic -#x06B0 U+2116 NUMERO SIGN Cyrillic -#x06B1 U+0402 CYRILLIC CAPITAL LETTER DJE Cyrillic -#x06B2 U+0403 CYRILLIC CAPITAL LETTER GJE Cyrillic -#x06B3 U+0401 CYRILLIC CAPITAL LETTER IO Cyrillic -#x06B4 U+0404 CYRILLIC CAPITAL LETTER UKRAINIAN IE Cyrillic -#x06B5 U+0405 CYRILLIC CAPITAL LETTER DZE Cyrillic -#x06B6 U+0406 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I Cyrillic -#x06B7 U+0407 CYRILLIC CAPITAL LETTER YI Cyrillic -#x06B8 U+0408 CYRILLIC CAPITAL LETTER JE Cyrillic -#x06B9 U+0409 CYRILLIC CAPITAL LETTER LJE Cyrillic -#x06BA U+040A CYRILLIC CAPITAL LETTER NJE Cyrillic -#x06BB U+040B CYRILLIC CAPITAL LETTER TSHE Cyrillic -#x06BC U+040C CYRILLIC CAPITAL LETTER KJE Cyrillic -#x06BD U+0490 CYRILLIC CAPITAL LETTER GHE WITH UPTURN Cyrillic -#x06BE U+040E CYRILLIC CAPITAL LETTER SHORT U Cyrillic -#x06BF U+040F CYRILLIC CAPITAL LETTER DZHE Cyrillic -#x06C0 U+044E CYRILLIC SMALL LETTER YU Cyrillic -#x06C1 U+0430 CYRILLIC SMALL LETTER A Cyrillic -#x06C2 U+0431 CYRILLIC SMALL LETTER BE Cyrillic -#x06C3 U+0446 CYRILLIC SMALL LETTER TSE Cyrillic -#x06C4 U+0434 CYRILLIC SMALL LETTER DE Cyrillic -#x06C5 U+0435 CYRILLIC SMALL LETTER IE Cyrillic -#x06C6 U+0444 CYRILLIC SMALL LETTER EF Cyrillic -#x06C7 U+0433 CYRILLIC SMALL LETTER GHE Cyrillic -#x06C8 U+0445 CYRILLIC SMALL LETTER HA Cyrillic -#x06C9 U+0438 CYRILLIC SMALL LETTER I Cyrillic -#x06CA U+0439 CYRILLIC SMALL LETTER SHORT I Cyrillic -#x06CB U+043A CYRILLIC SMALL LETTER KA Cyrillic -#x06CC U+043B CYRILLIC SMALL LETTER EL Cyrillic -#x06CD U+043C CYRILLIC SMALL LETTER EM Cyrillic -#x06CE U+043D CYRILLIC SMALL LETTER EN Cyrillic -#x06CF U+043E CYRILLIC SMALL LETTER O Cyrillic -#x06D0 U+043F CYRILLIC SMALL LETTER PE Cyrillic -#x06D1 U+044F CYRILLIC SMALL LETTER YA Cyrillic -#x06D2 U+0440 CYRILLIC SMALL LETTER ER Cyrillic -#x06D3 U+0441 CYRILLIC SMALL LETTER ES Cyrillic -#x06D4 U+0442 CYRILLIC SMALL LETTER TE Cyrillic -#x06D5 U+0443 CYRILLIC SMALL LETTER U Cyrillic -#x06D6 U+0436 CYRILLIC SMALL LETTER ZHE Cyrillic -#x06D7 U+0432 CYRILLIC SMALL LETTER VE Cyrillic -#x06D8 U+044C CYRILLIC SMALL LETTER SOFT SIGN Cyrillic -#x06D9 U+044B CYRILLIC SMALL LETTER YERU Cyrillic -#x06DA U+0437 CYRILLIC SMALL LETTER ZE Cyrillic -#x06DB U+0448 CYRILLIC SMALL LETTER SHA Cyrillic -#x06DC U+044D CYRILLIC SMALL LETTER E Cyrillic -#x06DD U+0449 CYRILLIC SMALL LETTER SHCHA Cyrillic -#x06DE U+0447 CYRILLIC SMALL LETTER CHE Cyrillic -#x06DF U+044A CYRILLIC SMALL LETTER HARD SIGN Cyrillic -#x06E0 U+042E CYRILLIC CAPITAL LETTER YU Cyrillic -#x06E1 U+0410 CYRILLIC CAPITAL LETTER A Cyrillic -#x06E2 U+0411 CYRILLIC CAPITAL LETTER BE Cyrillic -#x06E3 U+0426 CYRILLIC CAPITAL LETTER TSE Cyrillic -#x06E4 U+0414 CYRILLIC CAPITAL LETTER DE Cyrillic -#x06E5 U+0415 CYRILLIC CAPITAL LETTER IE Cyrillic -#x06E6 U+0424 CYRILLIC CAPITAL LETTER EF Cyrillic -#x06E7 U+0413 CYRILLIC CAPITAL LETTER GHE Cyrillic -#x06E8 U+0425 CYRILLIC CAPITAL LETTER HA Cyrillic -#x06E9 U+0418 CYRILLIC CAPITAL LETTER I Cyrillic -#x06EA U+0419 CYRILLIC CAPITAL LETTER SHORT I Cyrillic -#x06EB U+041A CYRILLIC CAPITAL LETTER KA Cyrillic -#x06EC U+041B CYRILLIC CAPITAL LETTER EL Cyrillic -#x06ED U+041C CYRILLIC CAPITAL LETTER EM Cyrillic -#x06EE U+041D CYRILLIC CAPITAL LETTER EN Cyrillic -#x06EF U+041E CYRILLIC CAPITAL LETTER O Cyrillic -#x06F0 U+041F CYRILLIC CAPITAL LETTER PE Cyrillic -#x06F1 U+042F CYRILLIC CAPITAL LETTER YA Cyrillic -#x06F2 U+0420 CYRILLIC CAPITAL LETTER ER Cyrillic -#x06F3 U+0421 CYRILLIC CAPITAL LETTER ES Cyrillic -#x06F4 U+0422 CYRILLIC CAPITAL LETTER TE Cyrillic -#x06F5 U+0423 CYRILLIC CAPITAL LETTER U Cyrillic -#x06F6 U+0416 CYRILLIC CAPITAL LETTER ZHE Cyrillic -#x06F7 U+0412 CYRILLIC CAPITAL LETTER VE Cyrillic -#x06F8 U+042C CYRILLIC CAPITAL LETTER SOFT SIGN Cyrillic -#x06F9 U+042B CYRILLIC CAPITAL LETTER YERU Cyrillic -#x06FA U+0417 CYRILLIC CAPITAL LETTER ZE Cyrillic -#x06FB U+0428 CYRILLIC CAPITAL LETTER SHA Cyrillic -#x06FC U+042D CYRILLIC CAPITAL LETTER E Cyrillic -#x06FD U+0429 CYRILLIC CAPITAL LETTER SHCHA Cyrillic -#x06FE U+0427 CYRILLIC CAPITAL LETTER CHE Cyrillic -#x06FF U+042A CYRILLIC CAPITAL LETTER HARD SIGN Cyrillic -.sp 2 -#x07A1 U+0386 GREEK CAPITAL LETTER ALPHA WITH TONOS Greek -#x07A2 U+0388 GREEK CAPITAL LETTER EPSILON WITH TONOS Greek -#x07A3 U+0389 GREEK CAPITAL LETTER ETA WITH TONOS Greek -#x07A4 U+038A GREEK CAPITAL LETTER IOTA WITH TONOS Greek -#x07A5 U+03AA GREEK CAPITAL LETTER IOTA WITH DIALYTIKA Greek -#x07A7 U+038C GREEK CAPITAL LETTER OMICRON WITH TONOS Greek -#x07A8 U+038E GREEK CAPITAL LETTER UPSILON WITH TONOS Greek -#x07A9 U+03AB GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA Greek -#x07AB U+038F GREEK CAPITAL LETTER OMEGA WITH TONOS Greek -#x07AE U+0385 GREEK DIALYTIKA TONOS Greek -#x07AF U+2015 HORIZONTAL BAR Greek -#x07B1 U+03AC GREEK SMALL LETTER ALPHA WITH TONOS Greek -#x07B2 U+03AD GREEK SMALL LETTER EPSILON WITH TONOS Greek -#x07B3 U+03AE GREEK SMALL LETTER ETA WITH TONOS Greek -#x07B4 U+03AF GREEK SMALL LETTER IOTA WITH TONOS Greek -#x07B5 U+03CA GREEK SMALL LETTER IOTA WITH DIALYTIKA Greek -#x07B6 U+0390 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS Greek -#x07B7 U+03CC GREEK SMALL LETTER OMICRON WITH TONOS Greek -#x07B8 U+03CD GREEK SMALL LETTER UPSILON WITH TONOS Greek -#x07B9 U+03CB GREEK SMALL LETTER UPSILON WITH DIALYTIKA Greek -#x07BA U+03B0 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS Greek -#x07BB U+03CE GREEK SMALL LETTER OMEGA WITH TONOS Greek -#x07C1 U+0391 GREEK CAPITAL LETTER ALPHA Greek -#x07C2 U+0392 GREEK CAPITAL LETTER BETA Greek -#x07C3 U+0393 GREEK CAPITAL LETTER GAMMA Greek -#x07C4 U+0394 GREEK CAPITAL LETTER DELTA Greek -#x07C5 U+0395 GREEK CAPITAL LETTER EPSILON Greek -#x07C6 U+0396 GREEK CAPITAL LETTER ZETA Greek -#x07C7 U+0397 GREEK CAPITAL LETTER ETA Greek -#x07C8 U+0398 GREEK CAPITAL LETTER THETA Greek -#x07C9 U+0399 GREEK CAPITAL LETTER IOTA Greek -#x07CA U+039A GREEK CAPITAL LETTER KAPPA Greek -#x07CB U+039B GREEK CAPITAL LETTER LAMDA Greek -#x07CC U+039C GREEK CAPITAL LETTER MU Greek -#x07CD U+039D GREEK CAPITAL LETTER NU Greek -#x07CE U+039E GREEK CAPITAL LETTER XI Greek -#x07CF U+039F GREEK CAPITAL LETTER OMICRON Greek -#x07D0 U+03A0 GREEK CAPITAL LETTER PI Greek -#x07D1 U+03A1 GREEK CAPITAL LETTER RHO Greek -#x07D2 U+03A3 GREEK CAPITAL LETTER SIGMA Greek -#x07D4 U+03A4 GREEK CAPITAL LETTER TAU Greek -#x07D5 U+03A5 GREEK CAPITAL LETTER UPSILON Greek -#x07D6 U+03A6 GREEK CAPITAL LETTER PHI Greek -#x07D7 U+03A7 GREEK CAPITAL LETTER CHI Greek -#x07D8 U+03A8 GREEK CAPITAL LETTER PSI Greek -#x07D9 U+03A9 GREEK CAPITAL LETTER OMEGA Greek -#x07E1 U+03B1 GREEK SMALL LETTER ALPHA Greek -#x07E2 U+03B2 GREEK SMALL LETTER BETA Greek -#x07E3 U+03B3 GREEK SMALL LETTER GAMMA Greek -#x07E4 U+03B4 GREEK SMALL LETTER DELTA Greek -#x07E5 U+03B5 GREEK SMALL LETTER EPSILON Greek -#x07E6 U+03B6 GREEK SMALL LETTER ZETA Greek -#x07E7 U+03B7 GREEK SMALL LETTER ETA Greek -#x07E8 U+03B8 GREEK SMALL LETTER THETA Greek -#x07E9 U+03B9 GREEK SMALL LETTER IOTA Greek -#x07EA U+03BA GREEK SMALL LETTER KAPPA Greek -#x07EB U+03BB GREEK SMALL LETTER LAMDA Greek -#x07EC U+03BC GREEK SMALL LETTER MU Greek -#x07ED U+03BD GREEK SMALL LETTER NU Greek -#x07EE U+03BE GREEK SMALL LETTER XI Greek -#x07EF U+03BF GREEK SMALL LETTER OMICRON Greek -#x07F0 U+03C0 GREEK SMALL LETTER PI Greek -#x07F1 U+03C1 GREEK SMALL LETTER RHO Greek -#x07F2 U+03C3 GREEK SMALL LETTER SIGMA Greek -#x07F3 U+03C2 GREEK SMALL LETTER FINAL SIGMA Greek -#x07F4 U+03C4 GREEK SMALL LETTER TAU Greek -#x07F5 U+03C5 GREEK SMALL LETTER UPSILON Greek -#x07F6 U+03C6 GREEK SMALL LETTER PHI Greek -#x07F7 U+03C7 GREEK SMALL LETTER CHI Greek -#x07F8 U+03C8 GREEK SMALL LETTER PSI Greek -#x07F9 U+03C9 GREEK SMALL LETTER OMEGA Greek -.sp 2 -#x08A1 U+23B7 LEFT RADICAL Technical -#x08A2 \- TOP LEFT RADICAL Technical -#x08A3 \- HORIZONTAL CONNECTOR Technical -#x08A4 U+2320 TOP INTEGRAL Technical -#x08A5 U+2321 BOTTOM INTEGRAL Technical -#x08A6 \- VERTICAL CONNECTOR Technical -#x08A7 U+23A1 TOP LEFT SQUARE BRACKET Technical -#x08A8 U+23A3 BOTTOM LEFT SQUARE BRACKET Technical -#x08A9 U+23A4 TOP RIGHT SQUARE BRACKET Technical -#x08AA U+23A6 BOTTOM RIGHT SQUARE BRACKET Technical -#x08AB U+239B TOP LEFT PARENTHESIS Technical -#x08AC U+239D BOTTOM LEFT PARENTHESIS Technical -#x08AD U+239E TOP RIGHT PARENTHESIS Technical -#x08AE U+23A0 BOTTOM RIGHT PARENTHESIS Technical -#x08AF U+23A8 LEFT MIDDLE CURLY BRACE Technical -#x08B0 U+23AC RIGHT MIDDLE CURLY BRACE Technical -#x08B1 \- TOP LEFT SUMMATION Technical -#x08B2 \- BOTTOM LEFT SUMMATION Technical -#x08B3 \- TOP VERTICAL SUMMATION CONNECTOR Technical -#x08B4 \- BOTTOM VERTICAL SUMMATION CONNECTOR Technical -#x08B5 \- TOP RIGHT SUMMATION Technical -#x08B6 \- BOTTOM RIGHT SUMMATION Technical -#x08B7 \- RIGHT MIDDLE SUMMATION Technical -#x08BC U+2264 LESS THAN OR EQUAL SIGN Technical -#x08BD U+2260 NOT EQUAL SIGN Technical -#x08BE U+2265 GREATER THAN OR EQUAL SIGN Technical -#x08BF U+222B INTEGRAL Technical -#x08C0 U+2234 THEREFORE Technical -#x08C1 U+221D VARIATION, PROPORTIONAL TO Technical -#x08C2 U+221E INFINITY Technical -#x08C5 U+2207 NABLA, DEL Technical -#x08C8 U+223C IS APPROXIMATE TO Technical -#x08C9 U+2243 SIMILAR OR EQUAL TO Technical -#x08CD U+21D4 IF AND ONLY IF Technical -#x08CE U+21D2 IMPLIES Technical -#x08CF U+2261 IDENTICAL TO Technical -#x08D6 U+221A RADICAL Technical -#x08DA U+2282 IS INCLUDED IN Technical -#x08DB U+2283 INCLUDES Technical -#x08DC U+2229 INTERSECTION Technical -#x08DD U+222A UNION Technical -#x08DE U+2227 LOGICAL AND Technical -#x08DF U+2228 LOGICAL OR Technical -#x08EF U+2202 PARTIAL DERIVATIVE Technical -#x08F6 U+0192 FUNCTION Technical -#x08FB U+2190 LEFT ARROW Technical -#x08FC U+2191 UPWARD ARROW Technical -#x08FD U+2192 RIGHT ARROW Technical -#x08FE U+2193 DOWNWARD ARROW Technical -.sp 2 -#x09DF \- BLANK Special -#x09E0 U+25C6 SOLID DIAMOND Special -#x09E1 U+2592 CHECKERBOARD Special -#x09E2 U+2409 ``HT'' Special -#x09E3 U+240C ``FF'' Special -#x09E4 U+240D ``CR'' Special -#x09E5 U+240A ``LF'' Special -#x09E8 U+2424 ``NL'' Special -#x09E9 U+240B ``VT'' Special -#x09EA U+2518 LOWER-RIGHT CORNER Special -#x09EB U+2510 UPPER-RIGHT CORNER Special -#x09EC U+250C UPPER-LEFT CORNER Special -#x09ED U+2514 LOWER-LEFT CORNER Special -#x09EE U+253C CROSSING-LINES Special -#x09EF U+23BA HORIZONTAL LINE, SCAN 1 Special -#x09F0 U+23BB HORIZONTAL LINE, SCAN 3 Special -#x09F1 U+2500 HORIZONTAL LINE, SCAN 5 Special -#x09F2 U+23BC HORIZONTAL LINE, SCAN 7 Special -#x09F3 U+23BD HORIZONTAL LINE, SCAN 9 Special -#x09F4 U+251C LEFT ``T'' Special -#x09F5 U+2524 RIGHT ``T'' Special -#x09F6 U+2534 BOTTOM ``T'' Special -#x09F7 U+252C TOP ``T'' Special -#x09F8 U+2502 VERTICAL BAR Special -.sp 2 -#x0AA1 U+2003 EM SPACE Publish -#x0AA2 U+2002 EN SPACE Publish -#x0AA3 U+2004 3/EM SPACE Publish -#x0AA4 U+2005 4/EM SPACE Publish -#x0AA5 U+2007 DIGIT SPACE Publish -#x0AA6 U+2008 PUNCTUATION SPACE Publish -#x0AA7 U+2009 THIN SPACE Publish -#x0AA8 U+200A HAIR SPACE Publish -#x0AA9 U+2014 EM DASH Publish -#x0AAA U+2013 EN DASH Publish -#x0AAC \- SIGNIFICANT BLANK SYMBOL Publish -#x0AAE U+2026 ELLIPSIS Publish -#x0AAF U+2025 DOUBLE BASELINE DOT Publish -#x0AB0 U+2153 VULGAR FRACTION ONE THIRD Publish -#x0AB1 U+2154 VULGAR FRACTION TWO THIRDS Publish -#x0AB2 U+2155 VULGAR FRACTION ONE FIFTH Publish -#x0AB3 U+2156 VULGAR FRACTION TWO FIFTHS Publish -#x0AB4 U+2157 VULGAR FRACTION THREE FIFTHS Publish -#x0AB5 U+2158 VULGAR FRACTION FOUR FIFTHS Publish -#x0AB6 U+2159 VULGAR FRACTION ONE SIXTH Publish -#x0AB7 U+215A VULGAR FRACTION FIVE SIXTHS Publish -#x0AB8 U+2105 CARE OF Publish -#x0ABB U+2012 FIGURE DASH Publish -#x0ABC \- LEFT ANGLE BRACKET Publish -#x0ABD \- DECIMAL POINT Publish -#x0ABE \- RIGHT ANGLE BRACKET Publish -#x0ABF \- MARKER Publish -#x0AC3 U+215B VULGAR FRACTION ONE EIGHTH Publish -#x0AC4 U+215C VULGAR FRACTION THREE EIGHTHS Publish -#x0AC5 U+215D VULGAR FRACTION FIVE EIGHTHS Publish -#x0AC6 U+215E VULGAR FRACTION SEVEN EIGHTHS Publish -#x0AC9 U+2122 TRADEMARK SIGN Publish -#x0ACA \- SIGNATURE MARK Publish -#x0ACB \- TRADEMARK SIGN IN CIRCLE Publish -#x0ACC \- LEFT OPEN TRIANGLE Publish -#x0ACD \- RIGHT OPEN TRIANGLE Publish -#x0ACE \- EM OPEN CIRCLE Publish -#x0ACF \- EM OPEN RECTANGLE Publish -#x0AD0 U+2018 LEFT SINGLE QUOTATION MARK Publish -#x0AD1 U+2019 RIGHT SINGLE QUOTATION MARK Publish -#x0AD2 U+201C LEFT DOUBLE QUOTATION MARK Publish -#x0AD3 U+201D RIGHT DOUBLE QUOTATION MARK Publish -#x0AD4 U+211E PRESCRIPTION, TAKE, RECIPE Publish -#x0AD6 U+2032 MINUTES Publish -#x0AD7 U+2033 SECONDS Publish -#x0AD9 U+271D LATIN CROSS Publish -#x0ADA \- HEXAGRAM Publish -#x0ADB \- FILLED RECTANGLE BULLET Publish -#x0ADC \- FILLED LEFT TRIANGLE BULLET Publish -#x0ADD \- FILLED RIGHT TRIANGLE BULLET Publish -#x0ADE \- EM FILLED CIRCLE Publish -#x0ADF \- EM FILLED RECTANGLE Publish -#x0AE0 \- EN OPEN CIRCLE BULLET Publish -#x0AE1 \- EN OPEN SQUARE BULLET Publish -#x0AE2 \- OPEN RECTANGULAR BULLET Publish -#x0AE3 \- OPEN TRIANGULAR BULLET UP Publish -#x0AE4 \- OPEN TRIANGULAR BULLET DOWN Publish -#x0AE5 \- OPEN STAR Publish -#x0AE6 \- EN FILLED CIRCLE BULLET Publish -#x0AE7 \- EN FILLED SQUARE BULLET Publish -#x0AE8 \- FILLED TRIANGULAR BULLET UP Publish -#x0AE9 \- FILLED TRIANGULAR BULLET DOWN Publish -#x0AEA \- LEFT POINTER Publish -#x0AEB \- RIGHT POINTER Publish -#x0AEC U+2663 CLUB Publish -#x0AED U+2666 DIAMOND Publish -#x0AEE U+2665 HEART Publish -#x0AF0 U+2720 MALTESE CROSS Publish -#x0AF1 U+2020 DAGGER Publish -#x0AF2 U+2021 DOUBLE DAGGER Publish -#x0AF3 U+2713 CHECK MARK, TICK Publish -#x0AF4 U+2717 BALLOT CROSS Publish -#x0AF5 U+266F MUSICAL SHARP Publish -#x0AF6 U+266D MUSICAL FLAT Publish -#x0AF7 U+2642 MALE SYMBOL Publish -#x0AF8 U+2640 FEMALE SYMBOL Publish -#x0AF9 U+260E TELEPHONE SYMBOL Publish -#x0AFA U+2315 TELEPHONE RECORDER SYMBOL Publish -#x0AFB U+2117 PHONOGRAPH COPYRIGHT SIGN Publish -#x0AFC U+2038 CARET Publish -#x0AFD U+201A SINGLE LOW QUOTATION MARK Publish -#x0AFE U+201E DOUBLE LOW QUOTATION MARK Publish -#x0AFF \- CURSOR Publish -.sp 2 -#x0BA3 \- LEFT CARET APL -#x0BA6 \- RIGHT CARET APL -#x0BA8 \- DOWN CARET APL -#x0BA9 \- UP CARET APL -#x0BC0 \- OVERBAR APL -#x0BC2 U+22A5 DOWN TACK APL -#x0BC3 \- UP SHOE (CAP) APL -#x0BC4 U+230A DOWN STILE APL -#x0BC6 \- UNDERBAR APL -#x0BCA U+2218 JOT APL -#x0BCC U+2395 QUAD APL -#x0BCE U+22A4 UP TACK APL -#x0BCF U+25CB CIRCLE APL -#x0BD3 U+2308 UP STILE APL -#x0BD6 \- DOWN SHOE (CUP) APL -#x0BD8 \- RIGHT SHOE APL -#x0BDA \- LEFT SHOE APL -#x0BDC U+22A2 LEFT TACK APL -#x0BFC U+22A3 RIGHT TACK APL -.sp 2 -#x0CDF U+2017 DOUBLE LOW LINE Hebrew -#x0CE0 U+05D0 HEBREW LETTER ALEF Hebrew -#x0CE1 U+05D1 HEBREW LETTER BET Hebrew -#x0CE2 U+05D2 HEBREW LETTER GIMEL Hebrew -#x0CE3 U+05D3 HEBREW LETTER DALET Hebrew -#x0CE4 U+05D4 HEBREW LETTER HE Hebrew -#x0CE5 U+05D5 HEBREW LETTER VAV Hebrew -#x0CE6 U+05D6 HEBREW LETTER ZAYIN Hebrew -#x0CE7 U+05D7 HEBREW LETTER HET Hebrew -#x0CE8 U+05D8 HEBREW LETTER TET Hebrew -#x0CE9 U+05D9 HEBREW LETTER YOD Hebrew -#x0CEA U+05DA HEBREW LETTER FINAL KAF Hebrew -#x0CEB U+05DB HEBREW LETTER KAF Hebrew -#x0CEC U+05DC HEBREW LETTER LAMED Hebrew -#x0CED U+05DD HEBREW LETTER FINAL MEM Hebrew -#x0CEE U+05DE HEBREW LETTER MEM Hebrew -#x0CEF U+05DF HEBREW LETTER FINAL NUN Hebrew -#x0CF0 U+05E0 HEBREW LETTER NUN Hebrew -#x0CF1 U+05E1 HEBREW LETTER SAMEKH Hebrew -#x0CF2 U+05E2 HEBREW LETTER AYIN Hebrew -#x0CF3 U+05E3 HEBREW LETTER FINAL PE Hebrew -#x0CF4 U+05E4 HEBREW LETTER PE Hebrew -#x0CF5 U+05E5 HEBREW LETTER FINAL TSADI Hebrew -#x0CF6 U+05E6 HEBREW LETTER TSADI Hebrew -#x0CF7 U+05E7 HEBREW LETTER QOF Hebrew -#x0CF8 U+05E8 HEBREW LETTER RESH Hebrew -#x0CF9 U+05E9 HEBREW LETTER SHIN Hebrew -#x0CFA U+05EA HEBREW LETTER TAV Hebrew -.sp 2 -#x0DA1 U+0E01 THAI CHARACTER KO KAI Thai -#x0DA2 U+0E02 THAI CHARACTER KHO KHAI Thai -#x0DA3 U+0E03 THAI CHARACTER KHO KHUAT Thai -#x0DA4 U+0E04 THAI CHARACTER KHO KHWAI Thai -#x0DA5 U+0E05 THAI CHARACTER KHO KHON Thai -#x0DA6 U+0E06 THAI CHARACTER KHO RAKHANG Thai -#x0DA7 U+0E07 THAI CHARACTER NGO NGU Thai -#x0DA8 U+0E08 THAI CHARACTER CHO CHAN Thai -#x0DA9 U+0E09 THAI CHARACTER CHO CHING Thai -#x0DAA U+0E0A THAI CHARACTER CHO CHANG Thai -#x0DAB U+0E0B THAI CHARACTER SO SO Thai -#x0DAC U+0E0C THAI CHARACTER CHO CHOE Thai -#x0DAD U+0E0D THAI CHARACTER YO YING Thai -#x0DAE U+0E0E THAI CHARACTER DO CHADA Thai -#x0DAF U+0E0F THAI CHARACTER TO PATAK Thai -#x0DB0 U+0E10 THAI CHARACTER THO THAN Thai -#x0DB1 U+0E11 THAI CHARACTER THO NANGMONTHO Thai -#x0DB2 U+0E12 THAI CHARACTER THO PHUTHAO Thai -#x0DB3 U+0E13 THAI CHARACTER NO NEN Thai -#x0DB4 U+0E14 THAI CHARACTER DO DEK Thai -#x0DB5 U+0E15 THAI CHARACTER TO TAO Thai -#x0DB6 U+0E16 THAI CHARACTER THO THUNG Thai -#x0DB7 U+0E17 THAI CHARACTER THO THAHAN Thai -#x0DB8 U+0E18 THAI CHARACTER THO THONG Thai -#x0DB9 U+0E19 THAI CHARACTER NO NU Thai -#x0DBA U+0E1A THAI CHARACTER BO BAIMAI Thai -#x0DBB U+0E1B THAI CHARACTER PO PLA Thai -#x0DBC U+0E1C THAI CHARACTER PHO PHUNG Thai -#x0DBD U+0E1D THAI CHARACTER FO FA Thai -#x0DBE U+0E1E THAI CHARACTER PHO PHAN Thai -#x0DBF U+0E1F THAI CHARACTER FO FAN Thai -#x0DC0 U+0E20 THAI CHARACTER PHO SAMPHAO Thai -#x0DC1 U+0E21 THAI CHARACTER MO MA Thai -#x0DC2 U+0E22 THAI CHARACTER YO YAK Thai -#x0DC3 U+0E23 THAI CHARACTER RO RUA Thai -#x0DC4 U+0E24 THAI CHARACTER RU Thai -#x0DC5 U+0E25 THAI CHARACTER LO LING Thai -#x0DC6 U+0E26 THAI CHARACTER LU Thai -#x0DC7 U+0E27 THAI CHARACTER WO WAEN Thai -#x0DC8 U+0E28 THAI CHARACTER SO SALA Thai -#x0DC9 U+0E29 THAI CHARACTER SO RUSI Thai -#x0DCA U+0E2A THAI CHARACTER SO SUA Thai -#x0DCB U+0E2B THAI CHARACTER HO HIP Thai -#x0DCC U+0E2C THAI CHARACTER LO CHULA Thai -#x0DCD U+0E2D THAI CHARACTER O ANG Thai -#x0DCE U+0E2E THAI CHARACTER HO NOKHUK Thai -#x0DCF U+0E2F THAI CHARACTER PAIYANNOI Thai -#x0DD0 U+0E30 THAI CHARACTER SARA A Thai -#x0DD1 U+0E31 THAI CHARACTER MAI HAN-AKAT Thai -#x0DD2 U+0E32 THAI CHARACTER SARA AA Thai -#x0DD3 U+0E33 THAI CHARACTER SARA AM Thai -#x0DD4 U+0E34 THAI CHARACTER SARA I Thai -#x0DD5 U+0E35 THAI CHARACTER SARA II Thai -#x0DD6 U+0E36 THAI CHARACTER SARA UE Thai -#x0DD7 U+0E37 THAI CHARACTER SARA UEE Thai -#x0DD8 U+0E38 THAI CHARACTER SARA U Thai -#x0DD9 U+0E39 THAI CHARACTER SARA UU Thai -#x0DDA U+0E3A THAI CHARACTER PHINTHU Thai -#x0DDF U+0E3F THAI CURRENCY SYMBOL BAHT Thai -#x0DE0 U+0E40 THAI CHARACTER SARA E Thai -#x0DE1 U+0E41 THAI CHARACTER SARA AE Thai -#x0DE2 U+0E42 THAI CHARACTER SARA O Thai -#x0DE3 U+0E43 THAI CHARACTER SARA AI MAIMUAN Thai -#x0DE4 U+0E44 THAI CHARACTER SARA AI MAIMALAI Thai -#x0DE5 U+0E45 THAI CHARACTER LAKKHANGYAO Thai -#x0DE6 U+0E46 THAI CHARACTER MAIYAMOK Thai -#x0DE7 U+0E47 THAI CHARACTER MAITAIKHU Thai -#x0DE8 U+0E48 THAI CHARACTER MAI EK Thai -#x0DE9 U+0E49 THAI CHARACTER MAI THO Thai -#x0DEA U+0E4A THAI CHARACTER MAI TRI Thai -#x0DEB U+0E4B THAI CHARACTER MAI CHATTAWA Thai -#x0DEC U+0E4C THAI CHARACTER THANTHAKHAT Thai -#x0DED U+0E4D THAI CHARACTER NIKHAHIT Thai -#x0DF0 U+0E50 THAI DIGIT ZERO Thai -#x0DF1 U+0E51 THAI DIGIT ONE Thai -#x0DF2 U+0E52 THAI DIGIT TWO Thai -#x0DF3 U+0E53 THAI DIGIT THREE Thai -#x0DF4 U+0E54 THAI DIGIT FOUR Thai -#x0DF5 U+0E55 THAI DIGIT FIVE Thai -#x0DF6 U+0E56 THAI DIGIT SIX Thai -#x0DF7 U+0E57 THAI DIGIT SEVEN Thai -#x0DF8 U+0E58 THAI DIGIT EIGHT Thai -#x0DF9 U+0E59 THAI DIGIT NINE Thai -.sp 2 -#x0EA1 \- HANGUL KIYEOG Korean -#x0EA2 \- HANGUL SSANG KIYEOG Korean -#x0EA3 \- HANGUL KIYEOG SIOS Korean -#x0EA4 \- HANGUL NIEUN Korean -#x0EA5 \- HANGUL NIEUN JIEUJ Korean -#x0EA6 \- HANGUL NIEUN HIEUH Korean -#x0EA7 \- HANGUL DIKEUD Korean -#x0EA8 \- HANGUL SSANG DIKEUD Korean -#x0EA9 \- HANGUL RIEUL Korean -#x0EAA \- HANGUL RIEUL KIYEOG Korean -#x0EAB \- HANGUL RIEUL MIEUM Korean -#x0EAC \- HANGUL RIEUL PIEUB Korean -#x0EAD \- HANGUL RIEUL SIOS Korean -#x0EAE \- HANGUL RIEUL TIEUT Korean -#x0EAF \- HANGUL RIEUL PHIEUF Korean -#x0EB0 \- HANGUL RIEUL HIEUH Korean -#x0EB1 \- HANGUL MIEUM Korean -#x0EB2 \- HANGUL PIEUB Korean -#x0EB3 \- HANGUL SSANG PIEUB Korean -#x0EB4 \- HANGUL PIEUB SIOS Korean -#x0EB5 \- HANGUL SIOS Korean -#x0EB6 \- HANGUL SSANG SIOS Korean -#x0EB7 \- HANGUL IEUNG Korean -#x0EB8 \- HANGUL JIEUJ Korean -#x0EB9 \- HANGUL SSANG JIEUJ Korean -#x0EBA \- HANGUL CIEUC Korean -#x0EBB \- HANGUL KHIEUQ Korean -#x0EBC \- HANGUL TIEUT Korean -#x0EBD \- HANGUL PHIEUF Korean -#x0EBE \- HANGUL HIEUH Korean -#x0EBF \- HANGUL A Korean -#x0EC0 \- HANGUL AE Korean -#x0EC1 \- HANGUL YA Korean -#x0EC2 \- HANGUL YAE Korean -#x0EC3 \- HANGUL EO Korean -#x0EC4 \- HANGUL E Korean -#x0EC5 \- HANGUL YEO Korean -#x0EC6 \- HANGUL YE Korean -#x0EC7 \- HANGUL O Korean -#x0EC8 \- HANGUL WA Korean -#x0EC9 \- HANGUL WAE Korean -#x0ECA \- HANGUL OE Korean -#x0ECB \- HANGUL YO Korean -#x0ECC \- HANGUL U Korean -#x0ECD \- HANGUL WEO Korean -#x0ECE \- HANGUL WE Korean -#x0ECF \- HANGUL WI Korean -#x0ED0 \- HANGUL YU Korean -#x0ED1 \- HANGUL EU Korean -#x0ED2 \- HANGUL YI Korean -#x0ED3 \- HANGUL I Korean -#x0ED4 \- HANGUL JONG SEONG KIYEOG Korean -#x0ED5 \- HANGUL JONG SEONG SSANG KIYEOG Korean -#x0ED6 \- HANGUL JONG SEONG KIYEOG SIOS Korean -#x0ED7 \- HANGUL JONG SEONG NIEUN Korean -#x0ED8 \- HANGUL JONG SEONG NIEUN JIEUJ Korean -#x0ED9 \- HANGUL JONG SEONG NIEUN HIEUH Korean -#x0EDA \- HANGUL JONG SEONG DIKEUD Korean -#x0EDB \- HANGUL JONG SEONG RIEUL Korean -#x0EDC \- HANGUL JONG SEONG RIEUL KIYEOG Korean -#x0EDD \- HANGUL JONG SEONG RIEUL MIEUM Korean -#x0EDE \- HANGUL JONG SEONG RIEUL PIEUB Korean -#x0EDF \- HANGUL JONG SEONG RIEUL SIOS Korean -#x0EE0 \- HANGUL JONG SEONG RIEUL TIEUT Korean -#x0EE1 \- HANGUL JONG SEONG RIEUL PHIEUF Korean -#x0EE2 \- HANGUL JONG SEONG RIEUL HIEUH Korean -#x0EE3 \- HANGUL JONG SEONG MIEUM Korean -#x0EE4 \- HANGUL JONG SEONG PIEUB Korean -#x0EE5 \- HANGUL JONG SEONG PIEUB SIOS Korean -#x0EE6 \- HANGUL JONG SEONG SIOS Korean -#x0EE7 \- HANGUL JONG SEONG SSANG SIOS Korean -#x0EE8 \- HANGUL JONG SEONG IEUNG Korean -#x0EE9 \- HANGUL JONG SEONG JIEUJ Korean -#x0EEA \- HANGUL JONG SEONG CIEUC Korean -#x0EEB \- HANGUL JONG SEONG KHIEUQ Korean -#x0EEC \- HANGUL JONG SEONG TIEUT Korean -#x0EED \- HANGUL JONG SEONG PHIEUF Korean -#x0EEE \- HANGUL JONG SEONG HIEUH Korean -#x0EEF \- HANGUL RIEUL YEORIN HIEUH Korean -#x0EF0 \- HANGUL SUNKYEONGEUM MIEUM Korean -#x0EF1 \- HANGUL SUNKYEONGEUM PIEUB Korean -#x0EF2 \- HANGUL PAN SIOS Korean -#x0EF3 \- HANGUL KKOGJI DALRIN IEUNG Korean -#x0EF4 \- HANGUL SUNKYEONGEUM PHIEUF Korean -#x0EF5 \- HANGUL YEORIN HIEUH Korean -#x0EF6 \- HANGUL ARAE A Korean -#x0EF7 \- HANGUL ARAE AE Korean -#x0EF8 \- HANGUL JONG SEONG PAN SIOS Korean -#x0EF9 \- HANGUL JONG SEONG KKOGJI DALRIN IEUNG Korean -#x0EFA \- HANGUL JONG SEONG YEORIN HIEUH Korean -#x0EFF \- KOREAN WON Korean -.sp 2 -#x13BC U+0152 LATIN CAPITAL LIGATURE OE Latin-9 -#x13BD U+0153 LATIN SMALL LIGATURE OE Latin-9 -#x13BE U+0178 LATIN CAPITAL LETTER Y WITH DIAERESIS Latin-9 -.sp 2 -#x20A0 \- CURRENCY ECU SIGN Currency -#x20A1 \- CURRENCY COLON SIGN Currency -#x20A2 \- CURRENCY CRUZEIRO SIGN Currency -#x20A3 \- CURRENCY FRENCH FRANC SIGN Currency -#x20A4 \- CURRENCY LIRA SIGN Currency -#x20A5 \- CURRENCY MILL SIGN Currency -#x20A6 \- CURRENCY NAIRA SIGN Currency -#x20A7 \- CURRENCY PESETA SIGN Currency -#x20A8 \- CURRENCY RUPEE SIGN Currency -#x20A9 \- CURRENCY WON SIGN Currency -#x20AA \- CURRENCY NEW SHEQEL SIGN Currency -#x20AB \- CURRENCY DONG SIGN Currency -#x20AC U+20AC CURRENCY EURO SIGN Currency -.sp 6p -_ -.TE -.bp diff --git a/doc/xorg-docs/specs/XProtocol/X11.protocol b/doc/xorg-docs/specs/XProtocol/X11.protocol deleted file mode 100644 index 8d2f3edfb..000000000 --- a/doc/xorg-docs/specs/XProtocol/X11.protocol +++ /dev/null @@ -1,10551 +0,0 @@ -.\" $Xorg: X11.protocol,v 1.4 $ -.\" $XdotOrg: xc/doc/specs/XProtocol/X11.protocol,v 1.2 2004/04/23 18:42:18 eich Exp $ -.\" -.\" -.\" -.\" -.\" $XFree86: xc/doc/specs/XProtocol/X11.protocol,v 1.4 2003/07/09 15:27:26 tsi Exp $ -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.ps 11 -.nr PS 11 -\& -.sp 8 -.ce 4 -\s+2\fBX Window System Protocol\fP\s-2 - -\s+1\fBX Consortium Standard\fP\s-1 - -\s+1\fBX Version 11, Release 6.8\fP\s-1 -.sp 6 -.ce 5 -\s-1Robert W. Scheifler -.sp 6p -X Consortium, Inc. -.bp -\& -.ps 9 -.nr PS 9 -.sp 8 -.LP -X Window System is a trademark of The Open Group. -.LP -Copyright \(co 1986, 1987, 1988, 1994, 2004 The Open Group -.LP -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -.LP -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -.LP -Except as contained in this notice, the name of the Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the Open Group. -.ps 11 -.nr PS 11 -.bp -.XS iii -Acknowledgments -.XE -\& -.sp 1 -.ce 3 -\s+1\fBAcknowledgments\fP\s-1 -.sp 2 -.na -.LP -The primary contributers to the X11 protocol are: -.LP -.Ds -Dave Carver (Digital HPW) -Branko Gerovac (Digital HPW) -Jim Gettys (MIT/Project Athena, Digital) -Phil Karlton (Digital WSL) -Scott McGregor (Digital SSG) -Ram Rao (Digital UEG) -David Rosenthal (Sun) -Dave Winchell (Digital UEG) -.De -.LP -The implementors of initial server who provided useful -input are: -.LP -.Ds -Susan Angebranndt (Digital) -Raymond Drewry (Digital) -Todd Newman (Digital) -.De -.LP -The invited reviewers who provided useful input are: -.LP -.Ds -Andrew Cherenson (Berkeley) -Burns Fisher (Digital) -Dan Garfinkel (HP) -Leo Hourvitz (Next) -Brock Krizan (HP) -David Laidlaw (Stellar) -Dave Mellinger (Interleaf) -Ron Newman (MIT) -John Ousterhout (Berkeley) -Andrew Palay (ITC CMU) -Ralph Swick (MIT) -Craig Taylor (Sun) -Jeffery Vroom (Stellar) -.De -.LP -Thanks go to Al Mento of Digital's UEG Documentation Group for -formatting this document. -.LP -This document does not attempt to provide the rationale or pragmatics required -to fully understand the protocol or to place it in perspective within a -complete system. -.LP -The protocol contains many management mechanisms that are not intended for -normal applications. -Not all mechanisms are needed to build a particular user interface. -It is important to keep in mind that the protocol is intended to -provide mechanism, not policy. -.LP -.Ds 0 -Robert W. Scheifler -X Consortium, Inc. -.De -.bp 1 -.EH '\fBX Protocol\fP''\fBX11, Release 6.8\fP' -.OH '\fBX Protocol\fP''\fBX11, Release 6.8\fP' -.EF ''\fB % \fP'' -.OF ''\fB % \fP'' -.NH 1 -Protocol Formats -.XS -\*(SN Protocol Formats -.XE -.SH -Request Format -.LP -Every request contains an 8-bit major opcode and a 16-bit length field -expressed in units of four bytes. -Every request consists of four bytes of a header -(containing the major opcode, the length field, and a data byte) -followed by zero or more additional bytes of data. -The length field defines the total length of the request, including the header. -The length field in a request must equal the minimum length required to contain -the request. -If the specified length is smaller or larger than the required length, -an error is generated. -Unused bytes in a request are not required to be zero. -Major opcodes 128 through 255 are reserved for extensions. -Extensions are intended to contain multiple requests, -so extension requests typically have an additional minor opcode encoded -in the second data byte in the request header. -However, the placement and interpretation of this minor opcode and of all -other fields in extension requests are not defined by the core protocol. -Every request on a given connection is implicitly assigned a sequence number, -starting with one, that is used in replies, errors, and events. -.SH -Reply Format -.LP -Every reply contains a 32-bit length field expressed in units of four bytes. -Every reply consists of 32 bytes followed by zero or more additional bytes of -data, as specified in the length field. -Unused bytes within a reply are not guaranteed to be zero. -Every reply also contains the least significant 16 bits of the sequence number -of the corresponding request. -.SH -Error Format -.LP -Error reports are 32 bytes long. -Every error includes an 8-bit error code. -Error codes 128 through 255 are reserved for extensions. -Every error also includes the major and minor opcodes of the failed request -and the least significant 16 bits of the sequence number of the request. -For the following errors (see section 4), -the failing resource ID is also returned: -.PN Colormap , -.PN Cursor , -.PN Drawable , -.PN Font , -.PN GContext , -.PN IDChoice , -.PN Pixmap , -and -.PN Window . -For -.PN Atom -errors, the failing atom is returned. -For -.PN Value -errors, the failing value is returned. -Other core errors return no additional data. -Unused bytes within an error are not guaranteed to be zero. -.SH -Event Format -.LP -Events are 32 bytes long. -Unused bytes within an event are not guaranteed to be zero. -Every event contains an 8-bit type code. -The most significant bit in this code is set if the event was generated from a -.PN SendEvent -request. -Event codes 64 through 127 are reserved for extensions, although the core -protocol does not define a mechanism for selecting interest in such events. -Every core event (with the exception of -.PN KeymapNotify ) -also contains the least significant 16 bits of the sequence number of the last -request issued by the client that was (or is currently being) processed by -the server. -.NH 1 -Syntactic Conventions -.XS -\*(SN Syntactic Conventions -.XE -.LP -The rest of this document uses the following syntactic conventions. -.IP \(bu 5 -The syntax {...} encloses a set of alternatives. -.IP \(bu 5 -The syntax [...] encloses a set of structure components. -.IP \(bu 5 -In general, TYPEs are in uppercase and -.PN AlternativeValues -are capitalized. -.IP \(bu 5 -Requests in section 9 are described in the following format: -.IP -.Ds 0 -.TA .75i -.ta .75i -.PN RequestName - \fIarg1\fP\^: type1 - ... - \fIargN\fP\^: typeN - \(-> - result1: type1 - ... - resultM: typeM - - Errors: kind1, ..., kindK - - Description. -.De -.IP -If no \(-> is present in the description, -then the request has no reply (it is asynchronous), -although errors may still be reported. -If \(->+ is used, -then one or more replies can be generated for a single request. -.IP \(bu 5 -Events in section 11 are described in the following format: -.IP -.Ds 0 -.TA .75i -.ta .75i -.PN EventName - \fIvalue1\fP\^: type1 - ... - \fIvalueN\fP\^: typeN - - Description. -.De -.NH 1 -Common Types -.XS -\*(SN Common Types -.XE -.LP -.TS H -lw(1.25i) lw(4.5i). -_ -.sp 6p -.B -Name Value -.sp 6p -_ -.sp 6p -.TH -.R -.IN "Types" "LISTofFOO" "@DEF@" -LISTofFOO T{ -A type name of the form LISTofFOO means a counted list of elements of type -FOO. -The size of the length field may vary (it is not necessarily the same -size as a FOO), and in some cases, it may be implicit. -It is fully specified in Appendix B. -Except where explicitly noted, -zero-length lists are legal. -T} -.sp 3p -.IN "Types" "BITMASK" "@DEF@" -T{ -BITMASK -.br -.ns -.IN "Types" "LISTofVALUE" "@DEF@" -LISTofVALUE -T} T{ -The types BITMASK and LISTofVALUE are somewhat special. -Various requests contain arguments of the form: -.br -\fIvalue-mask\fP\^: BITMASK -.br -\fIvalue-list\fP\^: LISTofVALUE -.br -These are used to allow the client to specify a subset of a heterogeneous -collection of optional arguments. -The value-mask specifies which arguments are to be provided; -each such argument is assigned a unique bit position. -The representation of the BITMASK will typically contain more bits than -there are defined arguments. -The unused bits in the value-mask must be zero (or the server generates a -.PN Value -error). -The value-list contains one value for each bit set to 1 in the mask, -from least significant to most significant bit in the mask. -Each value is represented with four bytes, -but the actual value occupies only the least significant bytes as required. -The values of the unused bytes do not matter. -T} -.sp 3p -.IN "Types" "OR" "@DEF@" -OR T{ -A type of the form ``T1 or ... or Tn'' means the union of the indicated types. -A single-element type is given as the element without enclosing braces. -T} -.IN "Types" "WINDOW" "@DEF@" -WINDOW 32-bit value (top three bits guaranteed to be zero) -.IN "Types" "PIXMAP" "@DEF@" -PIXMAP 32-bit value (top three bits guaranteed to be zero) -.IN "Types" "CURSOR" "@DEF@" -CURSOR 32-bit value (top three bits guaranteed to be zero) -.IN "Types" "FONT" "@DEF@" -FONT 32-bit value (top three bits guaranteed to be zero) -.IN "Types" "GCONTEXT" "@DEF@" -GCONTEXT 32-bit value (top three bits guaranteed to be zero) -.IN "Types" "COLORMAP" "@DEF@" -COLORMAP 32-bit value (top three bits guaranteed to be zero) -.IN "Types" "DRAWABLE" "@DEF@" -DRAWABLE WINDOW or PIXMAP -.IN "Types" "FONTABLE" "@DEF@" -FONTABLE FONT or GCONTEXT -.IN "Types" "ATOM" "@DEF@" -ATOM 32-bit value (top three bits guaranteed to be zero) -.IN "Types" "VISUALID" "@DEF@" -VISUALID 32-bit value (top three bits guaranteed to be zero) -.IN "Types" "VALUE" "@DEF@" -VALUE 32-bit quantity (used only in LISTofVALUE) -.IN "Types" "BYTE" "@DEF@" -BYTE 8-bit value -.IN "Types" "INT8" "@DEF@" -INT8 8-bit signed integer -.IN "Types" "INT16" "@DEF@" -INT16 16-bit signed integer -.IN "Types" "INT32" "@DEF@" -INT32 32-bit signed integer -.IN "Types" "CARD8" "@DEF@" -CARD8 8-bit unsigned integer -.IN "Types" "CARD16" "@DEF@" -CARD16 16-bit unsigned integer -.IN "Types" "CARD32" "@DEF@" -CARD32 32-bit unsigned integer -.IN "Types" "TIMESTAMP" "@DEF@" -TIMESTAMP CARD32 -.IN "Types" "BITGRAVITY" "@DEF@" -BITGRAVITY T{ -.Pn { Forget , -.PN Static , -.PN NorthWest , -.PN North , -.PN NorthEast , -.PN West , -.PN Center , -.br -\ -.PN East , -.PN SouthWest , -.PN South , -.PN SouthEast } -T} -.IN "Types" "WINGRAVITY" "@DEF@" -WINGRAVITY T{ -.Pn { Unmap , -.PN Static , -.PN NorthWest , -.PN North , -.PN NorthEast , -.PN West , -.PN Center , -.br -\ -.PN East , -.PN SouthWest , -.PN South , -.PN SouthEast } -T} -.IN "Types" "BOOL" "@DEF@" -BOOL T{ -.Pn { True , -.PN False } -T} -.IN "Types" "EVENT" "@DEF@" -EVENT T{ -.Pn { KeyPress , -.PN KeyRelease , -.PN OwnerGrabButton , -.PN ButtonPress , -.br -\ -.PN ButtonRelease , -.PN EnterWindow , -.PN LeaveWindow , -.PN PointerMotion , -.br -\ -.PN PointerMotionHint , -.PN Button1Motion , -.PN Button2Motion , -.br -\ -.PN Button3Motion , -.PN Button4Motion , -.PN Button5Motion , -.PN ButtonMotion , -.br -\ -.PN Exposure , -.PN VisibilityChange , -.PN StructureNotify , -.PN ResizeRedirect , -.br -\ -.PN SubstructureNotify , -.PN SubstructureRedirect , -.PN FocusChange , -.br -\ -.PN PropertyChange , -.PN ColormapChange , -.PN KeymapState } -T} -.IN "Types" "POINTEREVENT" "@DEF@" -POINTEREVENT T{ -.Pn { ButtonPress , -.PN ButtonRelease , -.PN EnterWindow , -.PN LeaveWindow , -.br -\ -.PN PointerMotion , -.PN PointerMotionHint , -.PN Button1Motion , -.br -\ -.PN Button2Motion , -.PN Button3Motion , -.PN Button4Motion , -.PN Button5Motion , -.br -\ -.PN ButtonMotion , -.PN KeymapState } -T} -.IN "Types" "DEVICEEVENT" "@DEF@" -DEVICEEVENT T{ -.Pn { KeyPress , -.PN KeyRelease , -.PN ButtonPress , -.PN ButtonRelease , -.br -\ -.PN PointerMotion , -.PN Button1Motion , -.PN Button2Motion , -.PN Button3Motion , -.br -\ -.PN Button4Motion , -.PN Button5Motion , -.PN ButtonMotion } -T} -.IN "Types" "KEYSYM" "@DEF@" -KEYSYM 32-bit value (top three bits guaranteed to be zero) -.IN "Types" "KEYCODE" "@DEF@" -KEYCODE CARD8 -.IN "Types" "BUTTON" "@DEF@" -BUTTON CARD8 -.IN "Types" "KEYMASK" "@DEF@" -KEYMASK T{ -.Pn { Shift , -.PN Lock , -.PN Control , -.PN Mod1 , -.PN Mod2 , -.PN Mod3 , -.PN Mod4 , -.PN Mod5 } -T} -.IN "Types" "BUTMASK" "@DEF@" -BUTMASK T{ -.Pn { Button1 , -.PN Button2 , -.PN Button3 , -.PN Button4 , -.PN Button5 } -T} -.IN "Types" "KEYBUTMASK" "@DEF@" -KEYBUTMASK KEYMASK or BUTMASK -.IN "Types" "STRING8" "@DEF@" -STRING8 LISTofCARD8 -.IN "Types" "STRING16" "@DEF@" -STRING16 LISTofCHAR2B -.IN "Types" "CHAR2B" "@DEF@" -CHAR2B [byte1, byte2: CARD8] -.IN "Types" "POINT" "@DEF@" -POINT [x, y: INT16] -.IN "Types" "RECTANGLE" "@DEF@" -RECTANGLE T{ -[x, y: INT16, -.br -\ width, height: CARD16] -T} -.IN "Types" "ARC" "@DEF@" -ARC T{ -[x, y: INT16, -.br -\ width, height: CARD16, -.br -\ angle1, angle2: INT16] -T} -.IN "Types" "HOST" "@DEF@" -HOST T{ -[family: -.Pn { Internet , -.PN InternetV6 , -.PN ServerInterpreted , -.PN DECnet , -.PN Chaos } -T} - T{ -\ address: LISTofBYTE] -T} -.TE -.LP -The [x,y] coordinates of a RECTANGLE specify the upper-left corner. -.LP -The primary interpretation of large characters in a STRING16 is that they -are composed of two bytes used to index a two-dimensional matrix, -hence, the use of CHAR2B rather than CARD16. -This corresponds to the JIS/ISO method of indexing 2-byte characters. -It is expected that most large fonts will be defined with 2-byte -matrix indexing. -For large fonts constructed with linear indexing, -a CHAR2B can be interpreted as a 16-bit number by treating byte1 as -the most significant byte. -This means that clients should always transmit such -16-bit character values most significant byte first, as the server will never -byte-swap CHAR2B quantities. -.LP -The length, format, and interpretation of a HOST address are specific to the -family (see -.PN ChangeHosts -request). -.NH 1 -Errors -.XS -\*(SN Errors -.XE -.LP -In general, when a request terminates with an error, -the request has no side effects (that is, there is no partial execution). -The only requests for which this is not true are -.PN ChangeWindowAttributes , -.PN ChangeGC , -.PN PolyText8 , -.PN PolyText16 , -.PN FreeColors , -.PN StoreColors , -and -.PN ChangeKeyboardControl . -.LP -The following error codes result from various requests as follows: -.TS H -lw(1.5i) lw(4.25i). -_ -.sp 6p -.B -Error Description -.sp 6p -_ -.sp 6p -.TH -.R -.IN "Error Codes" "Access" "@DEF@" -T{ -.PN Access -T} T{ -An attempt is made to grab a key/button combination already grabbed by another -client. -.sp 6p -An attempt is made to free a colormap entry not allocated by the client -or to free an entry in a colormap that was created with all entries writable. -.sp 6p -An attempt is made to store into a read-only or an unallocated colormap entry. -.sp 6p -An attempt is made to modify the access control list from other than the local -host (or otherwise authorized client). -.sp 6p -An attempt is made to select an event type that only one client can -select at a time when another client has already selected it. -T} -.sp 6p -.IN "Error Codes" "Alloc" "@DEF@" -T{ -.PN Alloc -T} T{ -The server failed to allocate the requested resource. -Note that the explicit listing of -.PN Alloc -errors in request only covers allocation errors at a very coarse level -and is not intended to cover all cases -of a server running out of allocation space in the middle of service. -The semantics when a server runs out of allocation space are left unspecified, -but a server may generate an -.PN Alloc -error on any request for this reason, -and clients should be prepared to receive such errors and handle -or discard them. -T} -.sp 6p -.IN "Error Codes" "Atom" "@DEF@" -T{ -.PN Atom -T} T{ -A value for an ATOM argument does not name a defined ATOM. -T} -.sp 6p -.IN "Error Codes" "Colormap" "@DEF@" -T{ -.PN Colormap -T} T{ -A value for a COLORMAP argument does not name a defined COLORMAP. -T} -.sp 6p -.IN "Error Codes" "Cursor" "@DEF@" -T{ -.PN Cursor -T} T{ -A value for a CURSOR argument does not name a defined CURSOR. -T} -.sp 6p -.IN "Error Codes" "Drawable" "@DEF@" -T{ -.PN Drawable -T} T{ -A value for a DRAWABLE argument does not name a defined WINDOW or -PIXMAP. -T} -.sp 6p -.IN "Error Codes" "Font" "@DEF@" -T{ -.PN Font -T} T{ -A value for a FONT argument does not name a defined FONT. -.sp 6p -A value for a FONTABLE argument does not name a defined FONT or a -defined GCONTEXT. -T} -.sp 6p -.IN "Error Codes" "GContext" "@DEF@" -T{ -.PN GContext -T} T{ -A value for a GCONTEXT argument does not name a defined GCONTEXT. -T} -.sp 6p -.IN "Error Codes" "IDChoice" "@DEF@" -T{ -.PN IDChoice -T} T{ -The value chosen for a resource identifier either is not included -in the range assigned to the client or is already in use. -T} -.sp 6p -.IN "Error Codes" "Implementation" "@DEF@" -T{ -.PN Implementation -T} T{ -The server does not implement some aspect of the request. -A server that generates this error for a core request is deficient. -As such, this error is not listed for any of the requests, -but clients should be prepared to receive such errors -and handle or discard them. -T} -.sp 6p -.IN "Error Codes" "Length" "@DEF@" -T{ -.PN Length -T} T{ -The length of a request is shorter or longer than that required -to minimally contain the arguments. -.sp 6p -The length of a request exceeds the maximum length accepted by the -server. -T} -.sp 6p -.IN "Error Codes" "Match" "@DEF@" -T{ -.PN Match -T} T{ -An -.PN InputOnly -window is used as a DRAWABLE. -.sp 6p -In a graphics request, the GCONTEXT argument does not have the same -root and depth as the destination DRAWABLE argument. -.sp 6p -Some argument (or pair of arguments) has the correct type and range, -but it fails to match in some other way required by the request. -T} -.sp 6p -.IN "Error Codes" "Name" "@DEF@" -T{ -.PN Name -T} T{ -A font or color of the specified name does not exist. -T} -.sp 6p -.IN "Error Codes" "Pixmap" "@DEF@" -T{ -.PN Pixmap -T} T{ -A value for a PIXMAP argument does not name a defined PIXMAP. -T} -.sp 6p -.IN "Error Codes" "Request" "@DEF@" -T{ -.PN Request -T} T{ -The major or minor opcode does not specify a valid request. -T} -.sp 6p -.IN "Error Codes" "Value" "@DEF@" -T{ -.PN Value -T} T{ -Some numeric value falls outside the range of values accepted by the request. -Unless a specific range is specified for an argument, -the full range defined by the argument's type is accepted. -Any argument defined as a set of alternatives typically can generate -this error (due to the encoding). -T} -.sp 6p -.IN "Error Codes" "Window" "@DEF@" -T{ -.PN Window -T} T{ -A value for a WINDOW argument does not name a defined WINDOW. -T} -.sp 6p -_ -.TE -.NT Note -The -.PN Atom , -.PN Colormap , -.PN Cursor , -.PN Drawable , -.PN Font , -.PN GContext , -.PN Pixmap , -and -.PN Window -errors are also used when the argument type is extended by union with a -set of fixed alternatives, for example, . -.NE -.NH 1 -Keyboards -.XS -\*(SN Keyboards -.XE -.LP -A KEYCODE represents a physical (or logical) key. -Keycodes lie in the inclusive range [8,255]. -A keycode value carries no intrinsic information, -although server implementors may attempt to encode geometry information -(for example, matrix) to be interpreted in a server-dependent fashion. -The mapping between keys and keycodes cannot be changed using the -protocol. -.LP -A KEYSYM is an encoding of a symbol on the cap of a key. -The set of defined KEYSYMs include the character sets Latin-1, Latin-2, -Latin-3, Latin-4, Kana, Arabic, Cyrillic, Greek, Tech, Special, Publish, APL, -Hebrew, Thai, and Korean as well as a set of symbols common on keyboards -(Return, Help, Tab, -and so on). -KEYSYMs with the most significant bit (of the 29 bits) set are reserved -as vendor-specific. -.LP -A list of KEYSYMs is associated with each KEYCODE. -The list is intended to convey the set of symbols on the corresponding key. -If the list (ignoring trailing -.PN NoSymbol -entries) is a single KEYSYM ``\fIK\fP'', -then the list is treated as if it were -the list ``\fIK\fP NoSymbol \fIK\fP NoSymbol''. -If the list (ignoring trailing NoSymbol entries) is a pair of KEYSYMs -``\fIK1 K2\fP'', then the list is treated as if it were the list -``\fIK1 K2 K1 K2\fP''. -If the list (ignoring trailing -.PN NoSymbol -entries) is -a triple of KEYSYMs ``\fIK1 K2 K3\fP'', -then the list is treated as if it were the list ``\fIK1 K2 K3\fP NoSymbol''. -When an explicit ``void'' element is desired in the list, -the value -.PN VoidSymbol -can be used. -.LP -The first four elements of the list are split into two groups of KEYSYMs. -Group 1 contains the first and second KEYSYMs, Group 2 contains the third and -fourth KEYSYMs. -Within each group, -if the second element of the group is -.PN NoSymbol , -then the group should be treated as if the second element were the -same as the first element, except when the first element is an alphabetic -KEYSYM ``\fIK\fP'' for which both lowercase and uppercase forms are defined. -In that case, the group should be treated as if the first element were the -lowercase form of ``\fIK\fP'' and the second element were the uppercase form -of ``\fIK\fP''. -.LP -The standard rules for obtaining a KEYSYM from a -.PN KeyPress -event make use of only the Group 1 and Group 2 KEYSYMs; no interpretation of -other KEYSYMs in the list is defined. The modifier state determines which -group to use. Switching between groups is controlled by the KEYSYM named -MODE SWITCH, by attaching that KEYSYM to some KEYCODE and attaching that -KEYCODE to any one of the modifiers -.PN Mod1 -through -.PN Mod5 . -This modifier is -called the ``group modifier''. For any KEYCODE, Group 1 is used when the -group modifier is off, and Group 2 is used when the group modifier is on. -.LP -The -.PN Lock -modifier is interpreted as CapsLock when the KEYSYM named CAPS -LOCK is attached to some KEYCODE and that KEYCODE is attached to the -.PN Lock -modifier. The -.PN Lock -modifier is interpreted as ShiftLock when the KEYSYM -named SHIFT LOCK is attached to some KEYCODE and that KEYCODE is attached -to the -.PN Lock -modifier. If the -.PN Lock -modifier could be interpreted as both -CapsLock and ShiftLock, the CapsLock interpretation is used. -.LP -The operation of ``keypad'' keys is controlled by the KEYSYM named NUM LOCK, -by attaching that KEYSYM to some KEYCODE and attaching that KEYCODE to any -one of the modifiers -.PN Mod1 -through -.PN Mod5 . -This modifier is called the -``numlock modifier''. The standard KEYSYMs with the prefix KEYPAD in their -name are called ``keypad'' KEYSYMs; these are KEYSYMS with numeric value in -the hexadecimal range #xFF80 to #xFFBD inclusive. In addition, -vendor-specific KEYSYMS in the hexadecimal range #x11000000 to #x1100FFFF -are also keypad KEYSYMs. -.LP -Within a group, the choice of KEYSYM is determined by applying the first -rule that is satisfied from the following list: -.IP \(bu 5 -The numlock modifier is on and the second KEYSYM is a keypad KEYSYM. In -this case, if the -.PN Shift -modifier is on, or if the -.PN Lock -modifier is on and -is interpreted as ShiftLock, then the first KEYSYM is used; otherwise, the -second KEYSYM is used. -.IP \(bu 5 -The -.PN Shift -and -.PN Lock -modifiers are both off. In this case, the first -KEYSYM is used. -.IP \(bu 5 -The -.PN Shift -modifier is off, and the -.PN Lock -modifier is on and is -interpreted as CapsLock. In this case, the first KEYSYM is used, but if -that KEYSYM is lowercase alphabetic, then the corresponding uppercase -KEYSYM is used instead. -.IP \(bu 5 -The -.PN Shift -modifier is on, and the -.PN Lock -modifier is on and is interpreted -as CapsLock. In this case, the second KEYSYM is used, but if that KEYSYM -is lowercase alphabetic, then the corresponding uppercase KEYSYM is used -instead. -.IP \(bu 5 -The -.PN Shift -modifier is on, or the -.PN Lock -modifier is on and is interpreted -as ShiftLock, or both. In this case, the second KEYSYM is used. -.LP -The mapping between KEYCODEs and KEYSYMs is not used directly by the server; -it is merely stored for reading and writing by clients. -.NH 1 -Pointers -.XS -\*(SN Pointers -.XE -.LP -Buttons are always numbered starting with one. -.NH 1 -Predefined Atoms -.XS -\*(SN Predefined Atoms -.XE -.LP -Predefined atoms are not strictly necessary and may not be useful in all -environments, but they will eliminate many -.PN InternAtom -requests in most applications. -Note that they are predefined only in the sense of having numeric values, -not in the sense of having required semantics. -The core protocol imposes no semantics on these names, -but semantics are specified in other X Window System standards, -such as the \fIInter-Client Communication Conventions Manual\fP -and the \fIX Logical Font Description Conventions\fP. -.LP -The following names have predefined atom values. -Note that uppercase and lowercase matter. -.TS -lw(1.75i) l w(1.75i) lw(1.75i). -ARC ITALIC_ANGLE STRING -ATOM MAX_SPACE SUBSCRIPT_X -BITMAP MIN_SPACE SUBSCRIPT_Y -CAP_HEIGHT NORM_SPACE SUPERSCRIPT_X -CARDINAL NOTICE SUPERSCRIPT_Y -COLORMAP PIXMAP UNDERLINE_POSITION -COPYRIGHT POINT UNDERLINE_THICKNESS -CURSOR POINT_SIZE VISUALID -CUT_BUFFER0 PRIMARY WEIGHT -CUT_BUFFER1 QUAD_WIDTH WINDOW -CUT_BUFFER2 RECTANGLE WM_CLASS -CUT_BUFFER3 RESOLUTION WM_CLIENT_MACHINE -CUT_BUFFER4 RESOURCE_MANAGER WM_COMMAND -CUT_BUFFER5 RGB_BEST_MAP WM_HINTS -CUT_BUFFER6 RGB_BLUE_MAP WM_ICON_NAME -CUT_BUFFER7 RGB_COLOR_MAP WM_ICON_SIZE -DRAWABLE RGB_DEFAULT_MAP WM_NAME -END_SPACE RGB_GRAY_MAP WM_NORMAL_HINTS -FAMILY_NAME RGB_GREEN_MAP WM_SIZE_HINTS -FONT RGB_RED_MAP WM_TRANSIENT_FOR -FONT_NAME SECONDARY WM_ZOOM_HINTS -FULL_NAME STRIKEOUT_ASCENT X_HEIGHT -INTEGER STRIKEOUT_DESCENT -.TE -.LP -To avoid conflicts with possible future names for which semantics might be -imposed (either at the protocol level or in terms of higher level user -interface models), -names beginning with an underscore should be used for atoms -that are private to a particular vendor or organization. -To guarantee no conflicts between vendors and organizations, -additional prefixes need to be used. -However, the protocol does not define the mechanism for choosing such prefixes. -For names private to a single application or end user but stored in globally -accessible locations, -it is suggested that two leading underscores be used to avoid conflicts with -other names. -.NH 1 -Connection Setup -.XS -\*(SN Connection Setup -.XE -.LP -For remote clients, -the X protocol can be built on top of any reliable byte stream. -.SH -Connection Initiation -.LP -The client must send an initial byte of data to identify the byte order to be -employed. -The value of the byte must be octal 102 or 154. -The value 102 (ASCII uppercase B) means values are transmitted most significant -byte first, and value 154 (ASCII lowercase l) means values are transmitted -least significant byte first. -Except where explicitly noted in the protocol, -all 16-bit and 32-bit quantities sent by the client must be transmitted with -this byte order, -and all 16-bit and 32-bit quantities returned by the server will be transmitted -with this byte order. -.LP -Following the byte-order byte, -the client sends the following information at connection setup: -.IP -protocol-major-version: CARD16 -.br -protocol-minor-version: CARD16 -.br -authorization-protocol-name: STRING8 -.br -authorization-protocol-data: STRING8 -.LP -The version numbers indicate what version of the protocol the client -expects the server to implement. -.LP -The authorization name indicates what authorization (and authentication) -protocol the client -expects the server to use, and the data is specific to that protocol. -Specification of valid authorization mechanisms is not part of the core -X protocol. -A server that does not implement the protocol the client expects -or that only implements the host-based mechanism may simply ignore this -information. -If both name and data strings are empty, -this is to be interpreted as ``no explicit authorization.'' -.SH -Server Response -.LP -The client receives the following information at connection setup: -.IP -success: -.Pn { Failed , -.PN Success , -.PN Authenticate } -.LP -The client receives the following additional data if the returned success -value is -.PN Failed , -and the connection is not successfully established: -.IP -protocol-major-version: CARD16 -.br -protocol-minor-version: CARD16 -.br -reason: STRING8 -.LP -The client receives the following additional data if the returned success -value is -.PN Authenticate , -and further authentication negotiation is required: -.IP -reason: STRING8 -.LP -The contents of the reason string are specific to the authorization -protocol in use. The semantics of this authentication negotiation are -not constrained, except that the negotiation must eventually terminate -with a reply from the server containing a success value of -.PN Failed -or -.PN Success . -.LP -The client receives the following additional data if the returned success -value is -.PN Success , -and the connection is successfully established: -.IP -protocol-major-version: CARD16 -.br -protocol-minor-version: CARD16 -.br -vendor: STRING8 -.br -release-number: CARD32 -.br -resource-id-base, resource-id-mask: CARD32 -.br -image-byte-order: -.Pn { LSBFirst , -.PN MSBFirst } -.br -bitmap-scanline-unit: {8, 16, 32} -.br -bitmap-scanline-pad: {8, 16, 32} -.br -bitmap-bit-order: -.Pn { LeastSignificant , -.PN MostSignificant } -.br -pixmap-formats: LISTofFORMAT -.br -roots: LISTofSCREEN -.br -motion-buffer-size: CARD32 -.br -maximum-request-length: CARD16 -.br -min-keycode, max-keycode: KEYCODE -.IP -where: -.TS -rw(1.25i) lw(4i). -T{ -FORMAT: -T} T{ -[depth: CARD8, -.br -\ bits-per-pixel: {1, 4, 8, 16, 24, 32} -.br -\ scanline-pad: {8, 16, 32}] -T} -.sp -T{ -SCREEN: -T} T{ -[root: WINDOW -.br -\ width-in-pixels, height-in-pixels: CARD16 -.br -\ width-in-millimeters, height-in-millimeters: CARD16 -.br -\ allowed-depths: LISTofDEPTH -.br -\ root-depth: CARD8 -.br -\ root-visual: VISUALID -.br -\ default-colormap: COLORMAP -.br -\ white-pixel, black-pixel: CARD32 -.br -\ min-installed-maps, max-installed-maps: CARD16 -.br -\ backing-stores: -.Pn { Never , -.PN WhenMapped , -.PN Always } -.br -\ save-unders: BOOL -.br -\ current-input-masks: SETofEVENT] -T} -.sp -T{ -DEPTH: -T} T{ -[depth: CARD8 -.br -\ visuals: LISTofVISUALTYPE] -T} -.sp -T{ -VISUALTYPE: -T} T{ -[visual-id: VISUALID -.br -\ class: -.Pn { StaticGray , -.PN StaticColor , -.PN TrueColor , -.PN GrayScale , -.br -\ \ \ \ \ \ \ \ \ \ -.PN PseudoColor , -.PN DirectColor } -.br -\ red-mask, green-mask, blue-mask: CARD32 -.br -\ bits-per-rgb-value: CARD8 -.br -\ colormap-entries: CARD16] -T} -.TE -.SH -Server Information -.LP -The information that is global to the server is: -.LP -The protocol version numbers are an escape hatch in case future revisions of -the protocol are necessary. -In general, -the major version would increment for incompatible changes, -and the minor version would increment for small upward compatible changes. -Barring changes, -the major version will be 11, and the minor version will be 0. -The protocol version numbers returned indicate the protocol the server -actually supports. -This might not equal the version sent by the client. -The server can (but need not) refuse connections from clients that offer a -different version than the server supports. -A server can (but need not) support more than one version simultaneously. -.LP -The vendor string gives some identification of the owner of the server -implementation. -The vendor controls the semantics of the release number. -.LP -The resource-id-mask contains a single contiguous set of bits (at least 18). -The client allocates resource IDs for types WINDOW, PIXMAP, -CURSOR, FONT, GCONTEXT, and COLORMAP by choosing a value with only -some subset of these bits set and ORing it with resource-id-base. -Only values constructed in this way can be used to name newly created -resources over this connection. -Resource IDs never have the top three bits set. -The client is not restricted to linear or contiguous allocation -of resource IDs. -Once an ID has been freed, -it can be reused. -An ID must be unique with respect to the IDs of all other resources, -not just other resources of the same type. -However, note that the value spaces of resource identifiers, -atoms, visualids, and keysyms are distinguished by context, and -as such, are not required to be disjoint; for example, a given numeric value -might be both a valid window ID, a valid atom, and a valid keysym. -.LP -Although the server is in general responsible for byte-swapping data to -match the client, -images are always transmitted and received in formats (including byte order) -specified by the server. -The byte order for images is given by image-byte-order and applies to each -scanline unit in XY format (bitmap format) and to each pixel value in Z format. -.LP -A bitmap is represented in scanline order. -Each scanline is padded to a multiple of bits as given by bitmap-scanline-pad. -The pad bits are of arbitrary value. -The scanline is quantized in multiples of bits as given by bitmap-scanline-unit. -The bitmap-scanline-unit is always less than or equal to the -bitmap-scanline-pad. -Within each unit, -the leftmost bit in the bitmap is either the least significant -or most significant bit in the unit, as given by bitmap-bit-order. -If a pixmap is represented in XY format, -each plane is represented as a bitmap, and the planes appear from -most significant to least significant in bit order with no padding -between planes. -.LP -Pixmap-formats contains one entry for each depth value. -The entry describes the Z format used to represent images of that depth. -An entry for a depth is included if any screen supports that depth, -and all screens supporting that depth must support only that Z format for that -depth. -In Z format, -the pixels are in scanline order, left to right within a scanline. -The number of bits used to hold each pixel is given by bits-per-pixel. -Bits-per-pixel may be larger than strictly required by the depth, -in which case the least significant bits are used to hold -the pixmap data, and the values of the unused high-order bits are -undefined. -When the bits-per-pixel is 4, -the order of nibbles in the byte is the same as the image byte-order. -When the bits-per-pixel is 1, -the format is identical for bitmap format. -Each scanline is padded to a multiple of bits as given by scanline-pad. -When bits-per-pixel is 1, -this will be identical to bitmap-scanline-pad. -.LP -How a pointing device roams the screens is up to the server -implementation and is transparent to the protocol. -No geometry is defined among screens. -.LP -The server may retain the recent history of pointer motion and do so to a -finer granularity than is reported by -.PN MotionNotify -events. -The -.PN GetMotionEvents -request makes such history available. -The motion-buffer-size gives the approximate maximum number -of elements in the history buffer. -.LP -Maximum-request-length specifies the maximum length of a request -accepted by the server, in 4-byte units. -That is, length is the maximum value that can appear in the length field of a -request. -Requests larger than this maximum generate a -.PN Length -error, -and the server will read and simply discard the entire request. -Maximum-request-length will always be at least 4096 -(that is, requests of length up to and including 16384 bytes -will be accepted by all servers). -.LP -Min-keycode and max-keycode specify the smallest and largest keycode -values transmitted by the server. -Min-keycode is never less than 8, -and max-keycode is never greater than 255. -Not all keycodes in this range are required to have corresponding keys. -.SH -Screen Information -.LP -The information that applies per screen is: -.LP -The allowed-depths specifies what pixmap and window depths are supported. -Pixmaps are supported for each depth listed, -and windows of that depth are supported if at least one visual type is listed -for the depth. -A pixmap depth of one is always supported and listed, -but windows of depth one might not be supported. -A depth of zero is never listed, -but zero-depth -.PN InputOnly -windows are always supported. -.LP -Root-depth and root-visual specify the depth and visual type of the -root window. -Width-in-pixels and height-in-pixels specify the size of -the root window (which cannot be changed). -The class of the root window is always -.PN InputOutput . -Width-in-millimeters and height-in-millimeters can be used to determine the -physical size and the aspect ratio. -.LP -The default-colormap is the one initially associated with the root window. -Clients with minimal color requirements creating windows of -the same depth as the root may want to allocate from this map by -default. -.LP -Black-pixel and white-pixel can be used in implementing a monochrome -application. -These pixel values are for permanently allocated entries in the -default-colormap. -The actual RGB values may be settable on some screens -and, in any case, may not actually be black and white. -The names are intended to convey the expected relative intensity of the colors. -.LP -The border of the root window is initially a pixmap filled with the black-pixel. -The initial background of the root window is a pixmap filled with some -unspecified two-color pattern using black-pixel and white-pixel. -.LP -Min-installed-maps specifies the number of maps that can be guaranteed -to be installed simultaneously (with -.PN InstallColormap ), -regardless of the number of entries allocated in each map. -Max-installed-maps specifies the maximum number of maps that might possibly be -installed simultaneously, depending on their allocations. -Multiple static-visual colormaps with identical contents but differing in -resource ID should be considered as a single map for the purposes of this -number. -For the typical case of a single hardware colormap, both values will be 1. -.LP -Backing-stores indicates when the server supports backing stores for -this screen, although it may be storage limited in the number of -windows it can support at once. -If save-unders is -.PN True , -the server can support the save-under mode in -.PN CreateWindow -and -.PN ChangeWindowAttributes , -although again it may be storage limited. -.LP -The current-input-events is what -.PN GetWindowAttributes -would return for the all-event-masks for the root window. -.SH -Visual Information -.LP -The information that applies per visual-type is: -.LP -A given visual type might be listed for more than one depth or for -more than one screen. -.LP -For -.PN PseudoColor , -a pixel value indexes a colormap to produce independent RGB values; -the RGB values can be changed dynamically. -.PN GrayScale -is treated in the same way as -.PN PseudoColor -except which primary drives the screen is undefined; -thus, the client should always store the -same value for red, green, and blue in colormaps. -For -.PN DirectColor , -a pixel value is decomposed into separate RGB subfields, -and each subfield separately indexes the colormap for the corresponding value. -The RGB values can be changed dynamically. -.PN TrueColor -is treated in the same way as -.PN DirectColor -except the colormap has predefined read-only RGB values. -These values are server-dependent but provide linear or near-linear -increasing ramps in each primary. -.PN StaticColor -is treated in the same way as -.PN PseudoColor -except the colormap has predefined read-only RGB values, -which are server-dependent. -.PN StaticGray -is treated in the same way as -.PN StaticColor -except the red, green, and blue values are equal for any -single pixel value, resulting in shades of gray. -.PN StaticGray -with a two-entry colormap can be thought of as monochrome. -.LP -The red-mask, green-mask, and blue-mask are only defined for -.PN DirectColor -and -.PN TrueColor . -Each has one contiguous set of bits set to 1 with no intersections. -Usually each mask has the same number of bits set to 1. -.LP -The bits-per-rgb-value specifies the log base 2 of the number of -distinct color intensity values (individually) of red, green, and blue. -This number need not bear any relation to the number of colormap entries. -Actual RGB values are always passed in the protocol within a -16-bit spectrum, with 0 being minimum intensity and 65535 being the -maximum intensity. -On hardware that provides a linear zero-based intensity ramp, -the following relationship exists: -.LP -.RS -.DS -hw-intensity = protocol-intensity / (65536 / total-hw-intensities) -.DE -.RE -.LP -Colormap entries are indexed from 0. -The colormap-entries defines the number of available colormap entries in a -newly created colormap. -For -.PN DirectColor -and -.PN TrueColor , -this will usually be 2 to the power of the maximum number of bits set to 1 in -red-mask, green-mask, and blue-mask. -.NH 1 -Requests -.XS -\*(SN Requests -.XE -.EQ -delim %% -.EN -.LP -.sM -.IN "CreateWindow" "" "@DEF@" -.PN CreateWindow -.LP -.in +.2i -\fIwid\fP, \fIparent\fP\^: WINDOW -.br -\fIclass\fP\^: -.Pn { InputOutput , -.PN InputOnly , -.PN CopyFromParent } -.br -\fIdepth\fP\^: CARD8 -.br -\fIvisual\fP\^: VISUALID or -.PN CopyFromParent -.br -\fIx\fP, \fIy\fP\^: INT16 -.br -\fIwidth\fP, \fIheight\fP, \fIborder-width\fP\^: CARD16 -.br -\fIvalue-mask\fP\^: BITMASK -.br -\fIvalue-list\fP\^: LISTofVALUE -.in -.2i -.LP -.in +.2i -Errors: -.PN Alloc , -.PN Colormap , -.PN Cursor , -.PN IDChoice , -.PN Match , -.PN Pixmap , -.PN Value , -.PN Window -.in -.2i -.eM -.LP -This request creates an unmapped window and assigns the identifier wid to it. -.LP -A class of -.PN CopyFromParent -means the class is taken from the parent. -A depth of zero for class -.PN InputOutput -or -.PN CopyFromParent -means the depth is taken from the parent. -A visual of -.PN CopyFromParent -means the visual type is taken from the parent. -For class -.PN InputOutput , -the visual type and depth must be a combination supported for the screen -(or a -.PN Match -error results). -The depth need not be the same as the parent, -but the parent must not be of class -.PN InputOnly -(or a -.PN Match -error results). -For class -.PN InputOnly , -the depth must be zero (or a -.PN Match -error results), and the visual must be one supported for the screen (or a -.PN Match -error results). -However, the parent can have any depth and class. -.LP -The server essentially acts as if -.PN InputOnly -windows do not exist for the purposes of graphics requests, -exposure processing, and -.PN VisibilityNotify -events. -An -.PN InputOnly -window cannot be used as a drawable (as a source or destination for graphics -requests). -.PN InputOnly -and -.PN InputOutput -windows act identically in other respects\-properties, -grabs, input control, and so on. -.LP -The coordinate system has the X axis horizontal and the Y axis vertical -with the origin [0, 0] at the upper-left corner. -Coordinates are integral, -in terms of pixels, -and coincide with pixel centers. -Each window and pixmap has its own coordinate system. -For a window, -the origin is inside the border at the inside, upper-left corner. -.LP -The x and y coordinates -for the window are relative to the parent's origin -and specify the position of the upper-left outer corner of the window -(not the origin). -The width and height specify the inside size (not including the border) -and must be nonzero (or a -.PN Value -error results). -The border-width for an -.PN InputOnly -window must be zero (or a -.PN Match -error results). -.LP -The window is placed on top in the stacking order with respect to siblings. -.LP -The value-mask and value-list specify attributes of the window that are -to be explicitly initialized. -The possible values are: -.TS H -l lw(2.6i). -_ -.sp 6p -.B -Attribute Type -.sp 6p -_ -.TH -.R -.sp 6p -T{ -background-pixmap -T} T{ -PIXMAP or -.PN None -or -.PN ParentRelative -T} -T{ -background-pixel -T} T{ -CARD32 -T} -T{ -border-pixmap -T} T{ -PIXMAP or -.PN CopyFromParent -T} -T{ -border-pixel -T} T{ -CARD32 -T} -T{ -bit-gravity -T} T{ -BITGRAVITY -T} -T{ -win-gravity -T} T{ -WINGRAVITY -T} -T{ -backing-store -T} T{ -.Pn { NotUseful , -.PN WhenMapped , -.PN Always } -T} -T{ -backing-planes -T} T{ -CARD32 -T} -T{ -backing-pixel -T} T{ -CARD32 -T} -T{ -save-under -T} T{ -BOOL -T} -T{ -event-mask -T} T{ -SETofEVENT -T} -T{ -do-not-propagate-mask -T} T{ -SETofDEVICEEVENT -T} -T{ -override-redirect -T} T{ -BOOL -T} -T{ -colormap -T} T{ -COLORMAP or -.PN CopyFromParent -T} -T{ -cursor -T} T{ -CURSOR or -.PN None -T} -.sp 6p -_ -.TE -.LP -The default values when attributes are not explicitly initialized -are: -.TS H -l l. -_ -.sp 6p -.B -Attribute Default -.sp 6p -_ -.TH -.R -.sp 6p -T{ -background-pixmap -T} T{ -.PN None -T} -T{ -border-pixmap -T} T{ -.PN CopyFromParent -T} -T{ -bit-gravity -T} T{ -.PN Forget -T} -T{ -win-gravity -T} T{ -.PN NorthWest -T} -T{ -backing-store -T} T{ -.PN NotUseful -T} -T{ -backing-planes -T} T{ -all ones -T} -T{ -backing-pixel -T} T{ -zero -T} -T{ -save-under -T} T{ -.PN False -T} -T{ -event-mask -T} T{ -{} (empty set) -T} -T{ -do-not-propagate-mask -T} T{ -{} (empty set) -T} -T{ -override-redirect -T} T{ -.PN False -T} -T{ -colormap -T} T{ -.PN CopyFromParent -T} -T{ -cursor -T} T{ -.PN None -T} -.sp 6p -_ -.TE -.LP -Only the following attributes are defined for -.PN InputOnly -windows: -.IP \(bu 5 -win-gravity -.IP \(bu 5 -event-mask -.IP \(bu 5 -do-not-propagate-mask -.IP \(bu 5 -override-redirect -.IP \(bu 5 -cursor -.LP -It is a -.PN Match -error to specify any other attributes for -.PN InputOnly -windows. -.LP -If background-pixmap is given, -it overrides the default background-pixmap. -The background pixmap and the window must have the -same root and the same depth (or a -.PN Match -error results). -Any size pixmap can be used, although some sizes may be faster than others. -If background -.PN None -is specified, the window has no defined background. -If background -.PN ParentRelative -is specified, the parent's background is used, -but the window must have the same depth as the parent (or a -.PN Match -error results). -If the parent has background -.PN None , -then the window will also have background -.PN None . -A copy of the parent's background is not made. -The parent's background is reexamined each time the window background is -required. -If background-pixel is given, it overrides the default -background-pixmap and any background-pixmap given explicitly, -and a pixmap of undefined size filled with background-pixel is used for the -background. -Range checking is not performed on the background-pixel value; -it is simply truncated to the appropriate number of bits. -For a -.PN ParentRelative -background, -the background tile origin always aligns with the parent's background tile -origin. -Otherwise, the background tile origin is always the window origin. -.LP -When no valid contents are available for regions of a window -and the regions are either visible or the server is maintaining backing store, -the server automatically tiles the regions with the window's background -unless the window has a background of -.PN None . -If the background is -.PN None , -the previous screen contents from other windows of the same depth as the window -are simply left in place if the contents come from the parent of the window -or an inferior of the parent; -otherwise, the initial contents of the exposed regions are undefined. -Exposure events are then generated for the regions, even if the background is -.PN None . -.LP -The border tile origin is always the same as the background tile origin. -If border-pixmap is given, -it overrides the default border-pixmap. -The border pixmap and the window must have the same root -and the same depth (or a -.PN Match -error results). -Any size pixmap can be used, -although some sizes may be faster than others. -If -.PN CopyFromParent -is given, the parent's border pixmap is copied (subsequent changes to -the parent's border attribute do not affect the child), -but the window must have the same depth as the parent (or a -.PN Match -error results). -The pixmap might be copied by sharing the same pixmap object between the -child and parent or by making a complete copy of the pixmap contents. -If border-pixel is given, -it overrides the default border-pixmap and any border-pixmap given explicitly, -and a pixmap of undefined size filled with border-pixel is used for the border. -Range checking is not performed on the border-pixel value; -it is simply truncated to the appropriate number of bits. -.LP -Output to a window is always clipped to the inside of the window, -so that the border is never affected. -.LP -The bit-gravity defines which region of the window should be retained -if the window is resized, and win-gravity defines how the window should -be repositioned if the parent is resized (see -.PN ConfigureWindow -request). -.LP -A backing-store of -.PN WhenMapped -advises the server that maintaining contents of obscured regions -when the window is mapped would be beneficial. -A backing-store of -.PN Always -advises the server that maintaining contents even when the window is -unmapped would be beneficial. -In this case, -the server may generate an exposure event when the window is created. -A value of -.PN NotUseful -advises the server that maintaining contents is unnecessary, -although a server may still choose to maintain contents while the window -is mapped. -Note that if the server maintains contents, -then the server should maintain complete contents -not just the region within the parent boundaries, -even if the window is larger than its parent. -While the server maintains contents, -exposure events will not normally be generated, -but the server may stop maintaining contents at any time. -.LP -If save-under is -.PN True , -the server is advised that when this window is -mapped, saving the contents of windows it obscures would be beneficial. -.LP -When the contents of obscured regions of a window are being maintained, -regions obscured by noninferior windows are included in the -destination (and source, when the window is the source) of graphics -requests, but regions obscured by inferior windows are not included. -.LP -The backing-planes indicates (with bits set to 1) which bit planes -of the window hold dynamic data that must be preserved in backing-stores -and during save-unders. -The backing-pixel specifies what value to use in planes not -covered by backing-planes. -The server is free to save only the specified bit planes in the backing-store -or save-under and regenerate the remaining planes with the specified pixel -value. -Any bits beyond the specified depth of the window in these -values are simply ignored. -.LP -The event-mask defines which events the client is interested in for -this window (or for some event types, inferiors of the window). -The do-not-propagate-mask defines which events should not be propagated to -ancestor windows when no client has the event type selected in this -window. -.LP -The override-redirect specifies whether map and configure requests on this -window should override a -.PN SubstructureRedirect -on the parent, typically to inform a window manager not to tamper with -the window. -.LP -The colormap specifies the colormap that best reflects the true -colors of the window. -Servers capable of supporting multiple hardware colormaps may use this -information, and window managers may use it for -.PN InstallColormap -requests. -The colormap must have the same visual type and root as the window (or a -.PN Match -error results). -If -.PN CopyFromParent -is specified, -the parent's colormap is copied (subsequent changes to the parent's -colormap attribute do not affect the child). -However, the window must have the same visual type as the parent (or a -.PN Match -error results), and the parent must not have a colormap of -.PN None -(or a -.PN Match -error results). -For an explanation of -.PN None , -see -.PN FreeColormap -request. -The colormap is copied by sharing the colormap object between the child -and the parent, -not by making a complete copy of the colormap contents. -.LP -If a cursor is specified, -it will be used whenever the pointer is in the window. -If -.PN None -is specified, -the parent's cursor will be used when the pointer is in the window, -and any change in the parent's cursor will cause an immediate change -in the displayed cursor. -.LP -This request generates a -.PN CreateNotify -event. -.LP -The background and border pixmaps and the cursor may be freed -immediately if no further explicit references to them are to be made. -.LP -Subsequent drawing into the background or border pixmap has an -undefined effect on the window state. -The server might or might not make a copy of the pixmap. -.sp -.LP -.sM -.IN "ChangeWindowAttributes" "" "@DEF@" -.PN ChangeWindowAttributes -.LP -.in +.2i -\fIwindow\fP\^: WINDOW -.br -\fIvalue-mask\fP\^: BITMASK -.br -\fIvalue-list\fP\^: LISTofVALUE -.in -.2i -.LP -.in +.2i -Errors: -.PN Access , -.PN Colormap , -.PN Cursor , -.PN Match , -.PN Pixmap , -.PN Value , -.PN Window -.in -.2i -.eM -.LP -The value-mask and value-list specify which attributes are to be changed. -The values and restrictions are the same as for -.PN CreateWindow . -.LP -Setting a new background, whether by background-pixmap or -background-pixel, overrides any previous background. -Setting a new border, whether by border-pixel or border-pixmap, -overrides any previous border. -.LP -Changing the background does not cause the window contents to be changed. -Setting the border or changing the background such that the -border tile origin changes causes the border to be repainted. -Changing the background of a root window to -.PN None -or -.PN ParentRelative -restores the default background pixmap. -Changing the border of a root window to -.PN CopyFromParent -restores the default border pixmap. -.LP -Changing the win-gravity does not affect the current position of the -window. -.LP -Changing the backing-store of an obscured window to -.PN WhenMapped -or -.PN Always -or changing the backing-planes, backing-pixel, or save-under of -a mapped window may have no immediate effect. -.LP -Multiple clients can select input on the same window; -their event-masks are disjoint. -When an event is generated, -it will be reported to all interested clients. -However, only one client at a time can select for -.PN SubstructureRedirect , -only one client at a time can select for -.PN ResizeRedirect , -and only one client at a time can select for -.PN ButtonPress . -An attempt to violate these restrictions results in an -.PN Access -error. -.LP -There is only one do-not-propagate-mask for a window, not one per -client. -.LP -Changing the colormap of a window (by defining a new map, not by -changing the contents of the existing map) generates a -.PN ColormapNotify -event. -Changing the colormap of a visible window might have no immediate effect -on the screen (see -.PN InstallColormap -request). -.LP -Changing the cursor of a root window to -.PN None -restores the default cursor. -.LP -The order in which attributes are verified and altered is server-dependent. -If an error is generated, -a subset of the attributes may have been altered. -.sp -.LP -.sM -.IN "GetWindowAttributes" "" "@DEF@" -.PN GetWindowAttributes -.LP -.in +.2i -\fIwindow\fP\^: WINDOW -.in -.2i -.LP - \(-> -.LP -.in +.2i -visual: VISUALID -.br -class: -.Pn { InputOutput , -.PN InputOnly } -.br -bit-gravity: BITGRAVITY -.br -win-gravity: WINGRAVITY -.br -backing-store: -.Pn { NotUseful , -.PN WhenMapped , -.PN Always } -.br -backing-planes: CARD32 -.br -backing-pixel: CARD32 -.br -save-under: BOOL -.br -colormap: COLORMAP or -.PN None -.br -map-is-installed: BOOL -.br -map-state: -.Pn { Unmapped , -.PN Unviewable , -.PN Viewable } -.br -all-event-masks, your-event-mask: SETofEVENT -.br -do-not-propagate-mask: SETofDEVICEEVENT -.br -override-redirect: BOOL -.in -.2i -.LP -.in +.2i -Errors: -.PN Window -.in -.2i -.eM -.LP -This request returns the current attributes of the window. -A window is -.PN Unviewable -if it is mapped but some ancestor is unmapped. -All-event-masks is the inclusive-OR of all event masks selected on the window -by clients. -Your-event-mask is the event mask selected by the querying client. -.sp -.LP -.sM -.IN "DestroyWindow" "" "@DEF@" -.PN DestroyWindow -.LP -.in +.2i -\fIwindow\fP\^: WINDOW -.in -.2i -.LP -.in +.2i -Errors: -.PN Window -.in -.2i -.eM -.LP -If the argument window is mapped, -an -.PN UnmapWindow -request is performed automatically. -The window and all inferiors are then destroyed, and a -.PN DestroyNotify -event is generated for each window. -The ordering of the -.PN DestroyNotify -events is such that for any given window, -.PN DestroyNotify -is generated on all inferiors of the window before being generated on -the window itself. -The ordering among siblings and across subhierarchies is not otherwise -constrained. -.LP -Normal exposure processing on formerly obscured windows is performed. -.LP -If the window is a root window, -this request has no effect. -.sp -.LP -.sM -.IN "DestroySubwindows" "" "@DEF@" -.PN DestroySubwindows -.LP -.in +.2i -\fIwindow\fP\^: WINDOW -.in -.2i -.LP -.in +.2i -Errors: -.PN Window -.in -.2i -.eM -.LP -This request performs a -.PN DestroyWindow -request on all children of the window, in bottom-to-top stacking order. -.sp -.LP -.sM -.IN "ChangeSaveSet" "" "@DEF@" -.PN ChangeSaveSet -.LP -.in +.2i -\fIwindow\fP\^: WINDOW -.br -\fImode\fP\^: -.Pn { Insert , -.PN Delete } -.in -.2i -.LP -Errors: -.in +.2i -.PN Match , -.PN Value , -.PN Window -.in -.2i -.eM -.LP -This request adds or removes the specified window from the client's -save-set. -The window must have been created by some other client (or a -.PN Match -error results). -For further information about the use of the save-set, -see section 10. -.LP -When windows are destroyed, -the server automatically removes them from the save-set. -.sp -.LP -.sM -.IN "ReparentWindow" "" "@DEF@" -.PN ReparentWindow -.LP -.in +.2i -\fIwindow\fP\^, \fIparent\fP\^: WINDOW -.br -\fIx\fP\^, \fIy\fP\^: INT16 -.in -.2i -.LP -.in +.2i -Errors: -.PN Match , -.PN Window -.in -.2i -.eM -.LP -If the window is mapped, -an -.PN UnmapWindow -request is performed automatically first. -The window is then removed from its current position in the hierarchy -and is inserted as a child of the specified parent. -The x and y coordinates are relative to the parent's origin -and specify the new position of the upper-left outer corner of the -window. -The window is placed on top in the stacking order with respect -to siblings. -A -.PN ReparentNotify -event is then generated. -The override-redirect attribute of the window is passed on in this event; -a value of -.PN True -indicates that a window manager should not tamper with this window. -Finally, if the window was originally mapped, a -.PN MapWindow -request is performed automatically. -.LP -Normal exposure processing on formerly obscured windows is performed. -The server might not generate exposure events for regions from the -initial unmap that are immediately obscured by the final map. -.LP -A -.PN Match -error is generated if: -.IP \(bu 5 -The new parent is not on the same screen as the old parent. -.IP \(bu 5 -The new parent is the window itself or an inferior of the window. -.IP \(bu 5 -The new parent is -.PN InputOnly , -and the window is not. -.IP \(bu 5 -The window has a -.PN ParentRelative -background, and the new parent is not the same depth as the window. -.sp -.LP -.sM -.IN "MapWindow" "" "@DEF@" -.PN MapWindow -.LP -.in +.2i -\fIwindow\fP\^: WINDOW -.in -.2i -.LP -.in +.2i -Errors: -.PN Window -.in -.2i -.eM -.LP -If the window is already mapped, this request has no effect. -.LP -If the override-redirect attribute of the window is -.PN False -and some other client has selected -.PN SubstructureRedirect -on the parent, then a -.PN MapRequest -event is generated, but the window remains unmapped. -Otherwise, the window is mapped, -and a -.PN MapNotify -event is generated. -.LP -If the window is now viewable and its contents have been discarded, -the window is tiled with its background (if no background is defined, -the existing screen contents are not altered), and zero or more exposure -events are generated. -If a backing-store has been maintained while the window was unmapped, -no exposure events are generated. -If a backing-store will now be maintained, -a full-window exposure is always generated. -Otherwise, only visible regions may be reported. -Similar tiling and exposure take place for any newly viewable inferiors. -.sp -.LP -.sM -.IN "MapSubwindows" "" "@DEF@" -.PN MapSubwindows -.LP -.in +.2i -\fIwindow\fP\^: WINDOW -.in -.2i -.LP -.in +.2i -Errors: -.PN Window -.in -.2i -.eM -.LP -This request performs a -.PN MapWindow -request on all unmapped children of the window, -in top-to-bottom stacking order. -.sp -.LP -.sM -.IN "UnmapWindow" "" "@DEF@" -.PN UnmapWindow -.LP -.in +.2i -\fIwindow\fP\^: WINDOW -.in -.2i -.LP -.in +.2i -Errors: -.PN Window -.in -.2i -.eM -.LP -If the window is already unmapped, this request has no effect. -Otherwise, the window is unmapped, and an -.PN UnmapNotify -event is generated. -Normal exposure processing on formerly obscured windows is performed. -.sp -.LP -.sM -.IN "UnmapSubwindows" "" "@DEF@" -.PN UnmapSubwindows -.LP -.in +.2i -\fIwindow\fP\^: WINDOW -.in -.2i -.LP -.in +.2i -Errors: -.PN Window -.in -.2i -.eM -.LP -This request performs an -.PN UnmapWindow -request on all mapped children of the window, -in bottom-to-top stacking order. -.sp -.LP -.sM -.IN "ConfigureWindow" "" "@DEF@" -.PN ConfigureWindow -.LP -.in +.2i -\fIwindow\fP\^: WINDOW -.br -\fIvalue-mask\fP\^: BITMASK -.br -\fIvalue-list\fP\^: LISTofVALUE -.in -.2i -.LP -.in +.2i -Errors: -.PN Match , -.PN Value , -.PN Window -.in -.2i -.eM -.LP -This request changes the configuration of the window. -The value-mask and value-list specify which values are to be given. -The possible values are: -.TS H -l lw(3.1i). -_ -.sp 6p -.B -Attribute Type -.sp 6p -_ -.TH -.R -.sp 6p -T{ -x -T} T{ -INT16 -T} -T{ -y -T} T{ -INT16 -T} -T{ -width -T} T{ -CARD16 -T} -T{ -height -T} T{ -CARD16 -T} -T{ -border-width -T} T{ -CARD16 -T} -T{ -sibling -T} T{ -WINDOW -T} -T{ -stack-mode -T} T{ -.Pn { Above , -.PN Below , -.PN TopIf , -.PN BottomIf , -.PN Opposite } -T} -.sp 6p -_ -.TE -.LP -The x and y coordinates are relative to the parent's origin -and specify the position of the upper-left outer corner of the window. -The width and height specify the inside size, not including the border, and -must be nonzero (or a -.PN Value -error results). -Those values not specified are taken from the existing geometry of the window. -Note that changing just the border-width leaves the outer-left corner -of the window in a fixed position but moves the absolute position of the -window's origin. -It is a -.PN Match -error to attempt to make the border-width of an -.PN InputOnly -window nonzero. -.LP -If the override-redirect attribute of the window is -.PN False -and some other client has selected -.PN SubstructureRedirect -on the parent, a -.PN ConfigureRequest -event is generated, and no further processing is performed. -Otherwise, the following is performed: -.LP -If some other client has selected -.PN ResizeRedirect -on the window and the inside width or height of the window is being changed, -a -.PN ResizeRequest -event is generated, -and the current inside width and height are used instead. -Note that the override-redirect attribute of the window has no effect on -.PN ResizeRedirect -and that -.PN SubstructureRedirect -on the parent has precedence over -.PN ResizeRedirect -on the window. -.LP -The geometry of the window is changed as specified, -the window is restacked among siblings, and a -.PN ConfigureNotify -event is generated if the state of the window actually changes. -If the inside width or height of the window has actually changed, -then children of the window are affected, -according to their win-gravity. -Exposure processing is performed on formerly obscured windows -(including the window itself and its inferiors if regions of them were -obscured but now are not). -Exposure processing is also performed on any new regions of the window -(as a result of increasing the width or height) -and on any regions where window contents are lost. -.LP -If the inside width or height of a window is not changed -but the window is moved or its border is changed, -then the contents of the window are not lost but move with the window. -Changing the inside width or height of the window causes its contents to be -moved or lost, depending on the bit-gravity of the window. -It also causes children to be reconfigured, depending on their win-gravity. -For a change of width and height of W and H, -we define the [x, y] pairs as: -.TS H -l l. -_ -.sp 6p -.B -Direction Deltas -.sp 6p -_ -.TH -.R -.sp 6p -T{ -.PN NorthWest -T} T{ -[\^0, 0\^] -T} -T{ -.PN North -T} T{ -[\^W/2, 0\^] -T} -T{ -.PN NorthEast -T} T{ -[\^W, 0\^] -T} -T{ -.PN West -T} T{ -[\^0, H/2\^] -T} -T{ -.PN Center -T} T{ -[\^W/2, H/2\^] -T} -T{ -.PN East -T} T{ -[\^W, H/2\^] -T} -T{ -.PN SouthWest -T} T{ -[\^0, H\^] -T} -T{ -.PN South -T} T{ -[\^W/2, H\^] -T} -T{ -.PN SouthEast -T} T{ -[\^W, H\^] -T} -.sp 6p -_ -.TE -.LP -When a window with one of these bit-gravities is resized, -the corresponding pair defines the change in position of each pixel in the -window. -When a window with one of these win-gravities has its parent window resized, -the corresponding pair defines the change in position -of the window within the parent. -This repositioning generates a -.PN GravityNotify -event. -.PN GravityNotify -events are generated after the -.PN ConfigureNotify -event is generated. -.LP -A gravity of -.PN Static -indicates that the contents or origin should not move relative to the origin -of the root window. -If the change in size of the window is coupled with a change -in position of [X, Y], -then for bit-gravity the change in position of each pixel is [\-X, \-Y] and for -win-gravity the change in position of a child when its parent is so -resized is [\-X, \-Y]. -Note that -.PN Static -gravity still only takes effect when the width or height of the -window is changed, not when the window is simply moved. -.LP -A bit-gravity of -.PN Forget -indicates that the window contents are always discarded after a size change, -even if backing-store or save-under has been requested. -The window is tiled with its background (except, if no background is defined, -the existing screen contents are not altered) -and zero or more exposure events are generated. -.LP -The contents and borders of inferiors are not affected by their parent's -bit-gravity. -A server is permitted to ignore the specified bit-gravity and use -.PN Forget -instead. -.LP -A win-gravity of -.PN Unmap -is like -.PN NorthWest , -but the child is also unmapped when the parent is resized, -and an -.PN UnmapNotify -event is generated. -.PN UnmapNotify -events are generated after the -.PN ConfigureNotify -event is generated. -.LP -If a sibling and a stack-mode are specified, -the window is restacked as follows: -.TS -lw(1i) lw(4.75i). -T{ -.PN Above -T} T{ -The window is placed just above the sibling. -T} -.sp 6p -T{ -.PN Below -T} T{ -The window is placed just below the sibling. -T} -.sp 6p -T{ -.PN TopIf -T} T{ -If the sibling occludes the window, -then the window is placed at the top of the stack. -T} -.sp 6p -T{ -.PN BottomIf -T} T{ -If the window occludes the sibling, -then the window is placed at the bottom of the stack. -T} -.sp 6p -T{ -.PN Opposite -T} T{ -If the sibling occludes the window, -then the window is placed at the top of the stack. -Otherwise, if the window occludes the sibling, -then the window is placed at the bottom of the stack. -T} -.TE -.LP -If a stack-mode is specified but no sibling is specified, -the window is restacked as follows: -.TS -lw(1i) lw(4.75i). -T{ -.PN Above -T} T{ -The window is placed at the top of the stack. -T} -.sp 6p -T{ -.PN Below -T} T{ -The window is placed at the bottom of the stack. -T} -.sp 6p -T{ -.PN TopIf -T} T{ -If any sibling occludes the window, -then the window is placed at the top of the stack. -T} -.sp 6p -T{ -.PN BottomIf -T} T{ -If the window occludes any sibling, -then the window is placed at the bottom of the stack. -T} -.sp 6p -T{ -.PN Opposite -T} T{ -If any sibling occludes the window, -then the window is placed at the top of the stack. -Otherwise, if the window occludes any sibling, -then the window is placed at the bottom of the stack. -T} -.TE -.LP -It is a -.PN Match -error if a sibling is specified without a stack-mode -or if the window is not actually a sibling. -.LP -Note that the computations for -.PN BottomIf , -.PN TopIf , -and -.PN Opposite -are performed with respect to the window's final geometry (as controlled by -the other arguments to the request), not to its initial geometry. -.LP -Attempts to configure a root window have no effect. -.sp -.LP -.sM -.IN "CirculateWindow" "" "@DEF@" -.PN CirculateWindow -.LP -.in +.2i -\fIwindow\fP\^: WINDOW -.br -\fIdirection\fP\^: -.Pn { RaiseLowest , -.PN LowerHighest } -.in -.2i -.LP -.in +.2i -Errors: -.PN Value , -.PN Window -.in -.2i -.eM -.LP -If some other client has selected -.PN SubstructureRedirect -on the window, then a -.PN CirculateRequest -event is generated, and no further processing is performed. -Otherwise, the following is performed, and then a -.PN CirculateNotify -event is generated if the window is actually restacked. -.LP -For -.PN RaiseLowest , -.PN CirculateWindow -raises the lowest mapped child (if any) that is -occluded by another child to the top of the stack. -For -.PN LowerHighest , -.PN CirculateWindow -lowers the highest mapped child (if any) that occludes another child to -the bottom of the stack. -Exposure processing is performed on formerly obscured windows. -.sp -.LP -.sM -.IN "GetGeometry" "" "@DEF@" -.PN GetGeometry -.LP -.in +.2i -\fIdrawable\fP\^: DRAWABLE -.in -.2i -.LP - \(-> -.LP -.in +.2i -root: WINDOW -.br -depth: CARD8 -.br -x, y: INT16 -.br -width, height, border-width: CARD16 -.in -.2i -.LP -.in +.2i -Errors: -.PN Drawable -.in -.2i -.eM -.LP -This request returns the root and current geometry of the drawable. -The depth is the number of bits per pixel for the object. -The x, y, and border-width will always be zero for pixmaps. -For a window, -the x and y coordinates specify the upper-left outer corner of the window -relative to its parent's origin, -and the width and height specify the inside size, not including the border. -.LP -It is legal to pass an -.PN InputOnly -window as a drawable to this request. -.sp -.LP -.sM -.IN "QueryTree" "" "@DEF@" -.PN QueryTree -.LP -.in +.2i -\fIwindow\fP\^: WINDOW -.in -.2i -.LP - \(-> -.LP -.in +.2i -root: WINDOW -.br -parent: WINDOW or -.PN None -.br -children: LISTofWINDOW -.in -.2i -.LP -.in +.2i -Errors: -.PN Window -.in -.2i -.eM -.LP -This request returns the root, the parent, and the children of the window. -The children are listed in bottom-to-top stacking order. -.sp -.LP -.sM -.IN "InternAtom" "" "@DEF@" -.PN InternAtom -.LP -.in +.2i -\fIname\fP\^: STRING8 -.br -\fIonly-if-exists\fP\^: BOOL -.in -.2i -.LP - \(-> -.LP -.in +.2i -atom: ATOM or -.PN None -.in -.2i -.LP -.in +.2i -Errors: -.PN Alloc , -.PN Value -.in -.2i -.eM -.LP -This request returns the atom for the given name. -If only-if-exists is -.PN False , -then the atom is created if it does not exist. -The string should use the ISO Latin-1 encoding. -Uppercase and lowercase matter. -.LP -The lifetime of an atom is not tied to the interning client. -Atoms remain defined until server reset (see section 10). -.sp -.LP -.sM -.IN "GetAtomName" "" "@DEF@" -.PN GetAtomName -.LP -.in +.2i -\fIatom\fP\^: ATOM -.in -.2i -.LP - \(-> -.LP -.in +.2i -name: STRING8 -.in -.2i -.LP -.in +.2i -Errors: -.PN Atom -.in -.2i -.eM -.LP -This request returns the name for the given atom. -.sp -.LP -.sM -.IN "ChangeProperty" "" "@DEF@" -.PN ChangeProperty -.LP -.in +.2i -\fIwindow\fP\^: WINDOW -.br -\fIproperty\fP, \fItype\fP\^: ATOM -.br -\fIformat\fP\^: {8, 16, 32} -.br -\fImode\fP\^: -.Pn { Replace , -.PN Prepend , -.PN Append } -.br -\fIdata\fP\^: LISTofINT8 or LISTofINT16 or LISTofINT32 -.in -.2i -.LP -.in +.2i -Errors: -.PN Alloc , -.PN Atom , -.PN Match , -.PN Value , -.PN Window -.in -.2i -.eM -.LP -This request alters the property for the specified window. -The type is uninterpreted by the server. -The format specifies whether the data should be viewed as a list of 8-bit, -16-bit, or 32-bit quantities so that the server can correctly byte-swap -as necessary. -.LP -If the mode is -.PN Replace , -the previous property value is discarded. -If the mode is -.PN Prepend -or -.PN Append , -then the type and format must match the existing property value (or a -.PN Match -error results). -If the property is undefined, -it is treated as defined with the correct type -and format with zero-length data. -For -.PN Prepend , -the data is tacked on to the beginning of the existing data, and for -.PN Append , -it is tacked on to the end of the existing data. -.LP -This request generates a -.PN PropertyNotify -event on the window. -.LP -The lifetime of a property is not tied to the storing client. -Properties remain until explicitly deleted, until the window is destroyed, -or until server reset (see section 10). -.LP -The maximum size of a property is server-dependent and may vary dynamically. -.sp -.LP -.sM -.IN "DeleteProperty" "" "@DEF@" -.PN DeleteProperty -.LP -.in +.2i -\fIwindow\fP\^: WINDOW -.br -\fIproperty\fP\^: ATOM -.in -.2i -.LP -.in +.2i -Errors: -.PN Atom , -.PN Window -.in -.2i -.eM -.LP -This request deletes the property from the specified window -if the property exists and generates a -.PN PropertyNotify -event on the window unless the property does not exist. -.sp -.LP -.sM -.IN "GetProperty" "" "@DEF@" -.PN GetProperty -.LP -.in +.2i -\fIwindow\fP\^: WINDOW -.br -\fIproperty\fP\^: ATOM -.br -\fItype\fP\^: ATOM or -.PN AnyPropertyType -.br -\fIlong-offset\fP, \fIlong-length\fP\^: CARD32 -.br -\fIdelete\fP\^: BOOL -.in -.2i -.LP - \(-> -.LP -.in +.2i -type: ATOM or -.PN None -.br -format: {0, 8, 16, 32} -.br -bytes-after: CARD32 -.br -value: LISTofINT8 or LISTofINT16 or LISTofINT32 -.in -.2i -.LP -.in +.2i -Errors: -.PN Atom , -.PN Value , -.PN Window -.in -.2i -.eM -.LP -If the specified property does not exist for the specified window, -then the return type is -.PN None , -the format and bytes-after are zero, -and the value is empty. -The delete argument is ignored in this case. -If the specified property exists but its type does not match the specified type, -then the return type is the actual type of the property, -the format is the actual format of the property (never zero), -the bytes-after is the length of the property in bytes -(even if the format is 16 or 32), -and the value is empty. -The delete argument is ignored in this case. -If the specified property exists and either -.PN AnyPropertyType -is specified or the specified type matches the actual type of the property, -then the return type is the actual type of the property, -the format is the actual format of the property (never zero), -and the bytes-after and value are as follows, given: -.DS -N = actual length of the stored property in bytes -\ \ \ \ (even if the format is 16 or 32) -I = 4 * long-offset -T = N \- I -L = MINIMUM(T, 4 * long-length) -A = N \- (I + L) -.DE -.LP -The returned value starts at byte index I in the property (indexing from 0), -and its length in bytes is L. -However, it is a -.PN Value -error if long-offset is given such that L is negative. -The value of bytes-after is A, -giving the number of trailing unread bytes in the stored -property. -If delete is -.PN True -and the bytes-after is zero, -the property is also deleted from the window, -and a -.PN PropertyNotify -event is generated on the window. -.sp -.LP -.sM -.IN "RotateProperties" "" "@DEF@" -.PN RotateProperties -.LP -.in +.2i -\fIwindow\fP\^: WINDOW -.br -\fIdelta\fP\^: INT16 -.br -\fIproperties\fP\^: LISTofATOM -.in -.2i -.LP -.in +.2i -Errors: -.PN Atom , -.PN Match , -.PN Window -.in -.2i -.eM -.LP -If the property names in the list are viewed as being numbered starting -from zero, and there are N property names in the list, -then the value associated with property name I becomes the value -associated with property name (I + delta) mod N, for all I from zero to N \- 1. -The effect is to rotate the states by delta places around the virtual ring -of property names (right for positive delta, left for negative delta). -.LP -If delta mod N is nonzero, -a -.PN PropertyNotify -event is generated for each property in the order listed. -.LP -If an atom occurs more than once in the list or no property with that -name is defined for the window, -a -.PN Match -error is generated. -If an -.PN Atom -or -.PN Match -error is generated, no properties are changed. -.sp -.LP -.sM -.IN "ListProperties" "" "@DEF@" -.PN ListProperties -.LP -.in +.2i -\fIwindow\fP\^: WINDOW -.in -.2i -.LP - \(-> -.LP -.in +.2i -atoms: LISTofATOM -.in -.2i -.LP -.in +.2i -Errors: -.PN Window -.in -.2i -.eM -.LP -This request returns the atoms of properties currently defined on the window. -.sp -.LP -.sM -.IN "SetSelectionOwner" "" "@DEF@" -.PN SetSelectionOwner -.LP -.in +.2i -\fIselection\fP\^: ATOM -.br -\fIowner\fP\^: WINDOW or -.PN None -.br -\fItime\fP\^: TIMESTAMP or -.PN CurrentTime -.in -.2i -.LP -.in +.2i -Errors: -.PN Atom , -.PN Window -.in -.2i -.eM -.LP -This request changes the owner, owner window, -and last-change time of the specified selection. -This request has no effect if the specified time is earlier -than the current last-change time of the specified selection or is -later than the current server time. -Otherwise, the last-change time is set to the specified time -with -.PN CurrentTime -replaced by the current server time. -If the owner window is specified as -.PN None , -then the owner of the selection becomes -.PN None -(that is, no owner). -Otherwise, the owner of the selection becomes the client executing the request. -If the new owner (whether a client or -.PN None ) -is not the same as the current owner -and the current owner is not -.PN None , -then the current owner is sent a -.PN SelectionClear -event. -.LP -If the client that is the owner of a selection is later terminated -(that is, its connection is closed) or if the owner window it has -specified in the request is later destroyed, -then the owner of the selection automatically reverts to -.PN None , -but the last-change time is not affected. -.LP -The selection atom is uninterpreted by the server. -The owner window is returned by the -.PN GetSelectionOwner -request and is reported in -.PN SelectionRequest -and -.PN SelectionClear -events. -.LP -Selections are global to the server. -.sp -.LP -.sM -.IN "GetSelectionOwner" "" "@DEF@" -.PN GetSelectionOwner -.LP -.in +.2i -\fIselection\fP\^: ATOM -.in -.2i -.LP - \(-> -.LP -.in +.2i -owner: WINDOW or -.PN None -.in -.2i -.LP -.in +.2i -Errors: -.PN Atom -.in -.2i -.eM -.LP -This request returns the current owner window of the specified selection, -if any. -If -.PN None -is returned, then there is no owner for the selection. -.sp -.LP -.sM -.IN "ConvertSelection" "" "@DEF@" -.PN ConvertSelection -.LP -.in +.2i -\fIselection\fP, \fItarget\fP\^: ATOM -.br -\fIproperty\fP\^: ATOM or -.PN None -.br -\fIrequestor\fP\^: WINDOW -.br -\fItime\fP\^: TIMESTAMP or -.PN CurrentTime -.in -.2i -.LP -.in +.2i -Errors: -.PN Atom , -.PN Window -.in -.2i -.eM -.LP -If the specified selection has an owner, -the server sends a -.PN SelectionRequest -event to that owner. -If no owner for the specified selection exists, -the server generates a -.PN SelectionNotify -event to the requestor with property -.PN None . -The arguments are passed on unchanged in either of the events. -.sp -.LP -.sM -.IN "SendEvent" "" "@DEF@" -.PN SendEvent -.LP -.in +.2i -\fIdestination\fP\^: WINDOW or -.PN PointerWindow -or -.PN InputFocus -.br -\fIpropagate\fP\^: BOOL -.br -\fIevent-mask\fP\^: SETofEVENT -.br -\fIevent\fP\^: -.in -.2i -.LP -.in +.2i -Errors: -.PN Value , -.PN Window -.in -.2i -.eM -.LP -If -.PN PointerWindow -is specified, -destination is replaced with the window that the pointer is in. -If -.PN InputFocus -is specified and the focus window contains the pointer, -destination is replaced with the window that the pointer is in. -Otherwise, destination is replaced with the focus window. -.LP -If the event-mask is the empty set, -then the event is sent to the client that created the destination window. -If that client no longer exists, no event is sent. -.LP -If propagate is -.PN False , -then the event is sent to every client selecting -on destination any of the event types in event-mask. -.LP -If propagate is -.PN True -and no clients have selected on destination any -of the event types in event-mask, -then destination is replaced with the -closest ancestor of destination for which some client has selected a -type in event-mask and no intervening window has that type in its -do-not-propagate-mask. -If no such window exists or if the window is an ancestor of the focus window -and -.PN InputFocus -was originally specified as the destination, -then the event is not sent to any clients. -Otherwise, the event is reported to every client selecting on the final -destination any of the types specified in event-mask. -.LP -The event code must be one of the core events or one of the events -defined by an extension (or a -.PN Value -error results) so that the server can correctly byte-swap the -contents as necessary. -The contents of the event are otherwise unaltered and unchecked -by the server except to force on the most significant bit of the event code -and to set the sequence number in the event correctly. -.LP -Active grabs are ignored for this request. -.sp -.LP -.sM -.IN "GrabPointer" "" "@DEF@" -.PN GrabPointer -.LP -.in +.2i -\fIgrab-window\fP\^: WINDOW -.br -\fIowner-events\fP\^: BOOL -.br -\fIevent-mask\fP\^: SETofPOINTEREVENT -.br -\fIpointer-mode\fP, \fIkeyboard-mode\fP\^: -.Pn { Synchronous , -.PN Asynchronous } -.br -\fIconfine-to\fP\^: WINDOW or -.PN None -.br -\fIcursor\fP\^: CURSOR or -.PN None -.br -\fItime\fP\^: TIMESTAMP or -.PN CurrentTime -.in -.2i -.LP - \(-> -.LP -.in +.2i -status: -.Pn { Success , -.PN AlreadyGrabbed , -.PN Frozen , -.PN InvalidTime , -.PN NotViewable } -.in -.2i -.LP -.in +.2i -Errors: -.PN Cursor , -.PN Value , -.PN Window -.in -.2i -.eM -.LP -This request actively grabs control of the pointer. -Further pointer events are only reported to the grabbing client. -The request overrides any active pointer grab by this client. -.LP -If owner-events is -.PN False , -all generated pointer events are reported with respect to grab-window -and are only reported if selected by event-mask. -If owner-events is -.PN True -and a generated pointer event would normally be reported to this client, -it is reported normally. -Otherwise, the event is reported with respect to the grab-window and is -only reported if selected by event-mask. -For either value of owner-events, -unreported events are simply discarded. -.LP -If pointer-mode is -.PN Asynchronous , -pointer event processing continues normally. -If the pointer is currently frozen by this client, -then processing of pointer events is resumed. -If pointer-mode is -.PN Synchronous , -the state of the pointer (as seen by means of the protocol) appears to freeze, -and no further pointer events are generated by the server until the -grabbing client issues a releasing -.PN AllowEvents -request or until the pointer grab is released. -Actual pointer changes are not lost while the pointer is frozen. -They are simply queued for later processing. -.LP -If keyboard-mode is -.PN Asynchronous , -keyboard event processing is unaffected by activation of the grab. -If keyboard-mode is -.PN Synchronous , -the state of the keyboard (as seen by means of the protocol) appears to freeze, -and no further keyboard events are generated by the server until the grabbing -client issues a releasing -.PN AllowEvents -request or until the pointer grab is released. -Actual keyboard changes are not lost while the keyboard is frozen. -They are simply queued for later processing. -.LP -If a cursor is specified, -then it is displayed regardless of what window the pointer is in. -If no cursor is specified, -then when the pointer is in grab-window or one of its subwindows, -the normal cursor for that window is displayed. -Otherwise, the cursor for grab-window is displayed. -.LP -If a confine-to window is specified, -then the pointer will be restricted to stay contained in that window. -The confine-to window need have no relationship to the grab-window. -If the pointer is not initially in the confine-to window, -then it is warped automatically to the closest edge -(and enter/leave events are generated normally) just before the grab activates. -If the confine-to window is subsequently reconfigured, -the pointer will be warped automatically as necessary to -keep it contained in the window. -.LP -This request generates -.PN EnterNotify -and -.PN LeaveNotify -events. -.LP -The request fails with status -.PN AlreadyGrabbed -if the pointer is actively grabbed by some other client. -The request fails with status -.PN Frozen -if the pointer is frozen by an active grab of another client. -The request fails with status -.PN NotViewable -if grab-window or confine-to window is not viewable -or if the confine-to window lies completely outside the boundaries -of the root window. -The request fails with status -.PN InvalidTime -if the specified time is earlier than the last-pointer-grab time or later than -the current server time. -Otherwise, the last-pointer-grab time is set to the specified time, with -.PN CurrentTime -replaced by the current server time. -.sp -.LP -.sM -.IN "UngrabPointer" "" "@DEF@" -.PN UngrabPointer -.LP -.in +.2i -\fItime\fP\^: TIMESTAMP or -.PN CurrentTime -.in -.2i -.eM -.LP -This request releases the pointer if this client has it actively grabbed (from -either -.PN GrabPointer -or -.PN GrabButton -or from a normal button press) and releases any queued events. -The request has no effect if the specified time is earlier than -the last-pointer-grab time or is later than the current server time. -.LP -This request generates -.PN EnterNotify -and -.PN LeaveNotify -events. -.LP -An -.PN UngrabPointer -request is performed automatically if the event window or -confine-to window for an active pointer grab becomes not viewable -or if window reconfiguration causes the confine-to window to lie -completely outside the boundaries of the root window. -.sp -.LP -.sM -.IN "GrabButton" "" "@DEF@" -.PN GrabButton -.LP -.in +.2i -\fImodifiers\fP\^: SETofKEYMASK or -.PN AnyModifier -.br -\fIbutton\fP\^: BUTTON or -.PN AnyButton -.br -\fIgrab-window\fP\^: WINDOW -.br -\fIowner-events\fP\^: BOOL -.br -\fIevent-mask\fP\^: SETofPOINTEREVENT -.br -\fIpointer-mode\fP, \fIkeyboard-mode\fP\^: -.Pn { Synchronous , -.PN Asynchronous } -.br -\fIconfine-to\fP\^: WINDOW or -.PN None -.br -\fIcursor\fP\^: CURSOR or -.PN None -.in -.2i -.LP -.in +.2i -Errors: -.PN Access , -.PN Cursor , -.PN Value , -.PN Window -.in -.2i -.eM -.LP -This request establishes a passive grab. -In the future, -the pointer is actively grabbed as described in -.PN GrabPointer , -the last-pointer-grab time is set to the time at which the button was -pressed (as transmitted in the -.PN ButtonPress -event), and the -.PN ButtonPress -event is reported if all of the following conditions are true: -.IP \(bu 5 -The pointer is not grabbed and the specified button is logically pressed -when the specified modifier keys are logically down, -and no other buttons or modifier keys are logically down. -.IP \(bu 5 -The grab-window contains the pointer. -.IP \(bu 5 -The confine-to window (if any) is viewable. -.IP \(bu 5 -A passive grab on the same button/key combination does not exist -on any ancestor of grab-window. -.LP -The interpretation of the remaining arguments is the same as for -.PN GrabPointer . -The active grab is terminated automatically when -the logical state of the pointer has all buttons released, -independent of the logical state of modifier keys. -Note that the logical state of a device (as seen by means of the protocol) -may lag the physical state if device event processing is frozen. -.LP -This request overrides all previous passive grabs by the same client on -the same button/key combinations on the same window. -A modifier of -.PN AnyModifier -is equivalent to issuing the request for all possible modifier combinations -(including the combination of no modifiers). -It is not required that all specified modifiers have currently assigned -keycodes. -A button of -.PN AnyButton -is equivalent to issuing the request for all possible buttons. -Otherwise, it is not required that the button specified currently be assigned -to a physical button. -.LP -An -.PN Access -error is generated if some other client has already issued a -.PN GrabButton -request with the same button/key combination on the same window. -When using -.PN AnyModifier -or -.PN AnyButton , -the request fails completely (no grabs are established), and an -.PN Access -error is generated if there is a conflicting grab for any combination. -The request has no effect on an active grab. -.sp -.LP -.sM -.IN "UngrabButton" "" "@DEF@" -.PN UngrabButton -.LP -.in +.2i -\fImodifiers\fP\^: SETofKEYMASK or -.PN AnyModifier -.br -\fIbutton\fP\^: BUTTON or -.PN AnyButton -.br -\fIgrab-window\fP\^: WINDOW -.in -.2i -.LP -.in +.2i -Errors: -.PN Value , -.PN Window -.in -.2i -.eM -.LP -This request releases the passive button/key combination -on the specified window if it was grabbed by this client. -A modifiers argument of -.PN AnyModifier -is equivalent to issuing the request for all possible modifier -combinations (including the combination of no modifiers). -A button of -.PN AnyButton -is equivalent to issuing the request for all possible buttons. -The request has no effect on an active grab. -.sp -.LP -.sM -.IN "ChangeActivePointerGrab" "" "@DEF@" -.PN ChangeActivePointerGrab -.LP -.in +.2i -\fIevent-mask\fP\^: SETofPOINTEREVENT -.br -\fIcursor\fP\^: CURSOR or -.PN None -.br -\fItime\fP\^: TIMESTAMP or -.PN CurrentTime -.in -.2i -.LP -.in +.2i -Errors: -.PN Cursor , -.PN Value -.in -.2i -.eM -.LP -This request changes the specified dynamic parameters if the pointer is -actively grabbed by the client and the specified time is no earlier than the -last-pointer-grab time and no later than the current server time. -The interpretation of event-mask and cursor are the same as in -.PN GrabPointer . -This request has no effect on the parameters of any passive grabs established -with -.PN GrabButton . -.sp -.LP -.sM -.IN "GrabKeyboard" "" "@DEF@" -.PN GrabKeyboard -.LP -.in +.2i -\fIgrab-window\fP\^: WINDOW -.br -\fIowner-events\fP\^: BOOL -.br -\fIpointer-mode\fP, \fIkeyboard-mode\fP\^: -.Pn { Synchronous , -.PN Asynchronous } -.br -\fItime\fP\^: TIMESTAMP or -.PN CurrentTime -.in -.2i -.LP - \(-> -.LP -.in +.2i -status: -.Pn { Success , -.PN AlreadyGrabbed , -.PN Frozen , -.PN InvalidTime , -.PN NotViewable } -.in -.2i -.LP -.in +.2i -Errors: -.PN Value , -.PN Window -.in -.2i -.eM -.LP -This request actively grabs control of the keyboard. -Further key events are reported only to the grabbing client. -This request overrides any active keyboard grab by this client. -.LP -If owner-events is -.PN False , -all generated key events are reported with respect to grab-window. -If owner-events is -.PN True -and if a generated key event would normally be reported to this client, -it is reported normally. -Otherwise, the event is reported with respect to the grab-window. -Both -.PN KeyPress -and -.PN KeyRelease -events are always reported, -independent of any event selection made by the client. -.LP -If keyboard-mode is -.PN Asynchronous , -keyboard event processing continues normally. -If the keyboard is currently frozen by this client, -then processing of keyboard events is resumed. -If keyboard-mode is -.PN Synchronous , -the state of the keyboard (as seen by means of the protocol) appears to freeze. -No further keyboard events are generated by the server until the -grabbing client issues a releasing -.PN AllowEvents -request or until the keyboard grab is released. -Actual keyboard changes are not lost while the keyboard is frozen. -They are simply queued for later processing. -.LP -If pointer-mode is -.PN Asynchronous , -pointer event processing is unaffected by activation of the grab. -If pointer-mode is -.PN Synchronous , -the state of the pointer (as seen by means of the protocol) appears to freeze. -No further pointer events are generated by the server -until the grabbing client issues a releasing -.PN AllowEvents -request or until the keyboard grab is released. -Actual pointer changes are not lost while the pointer is frozen. -They are simply queued for later processing. -.LP -This request generates -.PN FocusIn -and -.PN FocusOut -events. -.LP -The request fails with status -.PN AlreadyGrabbed -if the keyboard is actively grabbed by some other client. -The request fails with status -.PN Frozen -if the keyboard is frozen by an active grab of another client. -The request fails with status -.PN NotViewable -if grab-window is not viewable. -The request fails with status -.PN InvalidTime -if the specified time is earlier than the last-keyboard-grab time -or later than the current server time. -Otherwise, the last-keyboard-grab time is set to the specified time with -.PN CurrentTime -replaced by the current server time. -.sp -.LP -.sM -.IN "UngrabKeyboard" "" "@DEF@" -.PN UngrabKeyboard -.LP -.in +.2i -\fItime\fP\^: TIMESTAMP or -.PN CurrentTime -.in -.2i -.eM -.LP -This request releases the keyboard if this client has it actively grabbed -(as a result of either -.PN GrabKeyboard -or -.PN GrabKey ) -and releases any queued events. -The request has no effect if the specified time is earlier than the -last-keyboard-grab time or is later than the current server time. -.LP -This request generates -.PN FocusIn -and -.PN FocusOut -events. -.LP -An -.PN UngrabKeyboard -is performed automatically if the event window for an active keyboard grab -becomes not viewable. -.sp -.LP -.sM -.IN "GrabKey" "" "@DEF@" -.PN GrabKey -.LP -.in +.2i -\fIkey\fP\^: KEYCODE or -.PN AnyKey -.br -\fImodifiers\fP\^: SETofKEYMASK or -.PN AnyModifier -.br -\fIgrab-window\fP\^: WINDOW -.br -\fIowner-events\fP\^: BOOL -.br -\fIpointer-mode\fP, \fIkeyboard-mode\fP\^: -.Pn { Synchronous , -.PN Asynchronous } -.in -.2i -.LP -.in +.2i -Errors: -.PN Access , -.PN Value , -.PN Window -.in -.2i -.eM -.LP -This request establishes a passive grab on the keyboard. -In the future, -the keyboard is actively grabbed as described in -.PN GrabKeyboard , -the last-keyboard-grab time is set to the time at which the key was pressed -(as transmitted in the -.PN KeyPress -event), and the -.PN KeyPress -event is reported if all of the following conditions are true: -.IP \(bu 5 -The keyboard is not grabbed and the specified key -(which can itself be a modifier key) is logically pressed -when the specified modifier keys are logically down, -and no other modifier keys are logically down. -.IP \(bu 5 -Either the grab-window is an ancestor of (or is) the focus window, -or the grab-window is a descendent of the focus window and contains the pointer. -.IP \(bu 5 -A passive grab on the same key combination does not exist -on any ancestor of grab-window. -.LP -The interpretation of the remaining arguments is the same as for -.PN GrabKeyboard . -The active grab is terminated automatically when the logical state -of the keyboard has the specified key released, -independent of the logical state of modifier keys. -Note that the logical state of a device (as seen by means of the protocol) -may lag the physical state if device event processing is frozen. -.LP -This request overrides all previous passive grabs by the same client -on the same key combinations on the same window. -A modifier of -.PN AnyModifier -is equivalent to issuing the request for all possible modifier combinations -(including the combination of no modifiers). -It is not required that all modifiers specified have -currently assigned keycodes. -A key of -.PN AnyKey -is equivalent to issuing the request for all possible keycodes. -Otherwise, the key must be in the range specified by min-keycode -and max-keycode in the connection setup (or a -.PN Value -error results). -.LP -An -.PN Access -error is generated if some other client has issued a -.PN GrabKey -with the same key combination on the same window. -When using -.PN AnyModifier -or -.PN AnyKey , -the request fails completely (no grabs are established), -and an -.PN Access -error is generated if there is a conflicting grab for any combination. -.sp -.LP -.sM -.IN "UngrabKey" "" "@DEF@" -.PN UngrabKey -.LP -.in +.2i -\fIkey\fP\^: KEYCODE or -.PN AnyKey -.br -\fImodifiers\fP\^: SETofKEYMASK or -.PN AnyModifier -.br -\fIgrab-window\fP\^: WINDOW -.in -.2i -.LP -.in +.2i -Errors: -.PN Value , -.PN Window -.in -.2i -.eM -.LP -This request releases the key combination on the specified window -if it was grabbed by this client. -A modifiers argument of -.PN AnyModifier -is equivalent to issuing the request for all possible modifier combinations -(including the combination of no modifiers). -A key of -.PN AnyKey -is equivalent to issuing the request for all possible keycodes. -This request has no effect on an active grab. -.sp -.LP -.sM -.IN "AllowEvents" "" "@DEF@" -.PN AllowEvents -.LP -.in +.2i -\fImode\fP: -.Pn { AsyncPointer , -.PN SyncPointer , -.PN ReplayPointer , -.PN AsyncKeyboard , -.br -\ \ \ \ \ \ \ \ \ \ -.PN SyncKeyboard , -.PN ReplayKeyboard , -.PN AsyncBoth , -.PN SyncBoth } -.br -\fItime\fP\^: TIMESTAMP or -.PN CurrentTime -.in -.2i -.LP -.in +.2i -Errors: -.PN Value -.in -.2i -.eM -.LP -This request releases some queued events if the client has caused a device to -freeze. -The request has no effect if the specified time is earlier -than the last-grab time of the most recent active grab for the client -or if the specified time is later than the current server time. -.LP -For -.PN AsyncPointer , -if the pointer is frozen by the client, -pointer event processing continues normally. -If the pointer is frozen twice by the client on behalf of two separate grabs, -.PN AsyncPointer -thaws for both. -.PN AsyncPointer -has no effect if the pointer is not frozen by the client, -but the pointer need not be grabbed by the client. -.LP -For -.PN SyncPointer , -if the pointer is frozen and actively grabbed by the client, -pointer event processing continues normally until the next -.PN ButtonPress -or -.PN ButtonRelease -event is reported to the client, -at which time the pointer again appears to freeze. -However, if the reported event causes the pointer grab to be released, -then the pointer does not freeze. -.PN SyncPointer -has no effect if the pointer is not frozen by the -client or if the pointer is not grabbed by the client. -.LP -For -.PN ReplayPointer , -if the pointer is actively grabbed by the client and -is frozen as the result of an event having been sent to the client -(either from the activation of a -.PN GrabButton -or from a previous -.PN AllowEvents -with mode -.PN SyncPointer -but not from a -.PN GrabPointer ), -then the pointer grab is released and that event is completely reprocessed, -this time ignoring any passive grabs at or above (towards the root) -the grab-window of the grab just released. -The request has no effect if the pointer is not grabbed by the client -or if the pointer is not frozen as the result of an event. -.LP -For -.PN AsyncKeyboard , -if the keyboard is frozen by the client, -keyboard event processing continues normally. -If the keyboard is frozen twice by the client on behalf of two separate grabs, -.PN AsyncKeyboard -thaws for both. -.PN AsyncKeyboard -has no effect if the keyboard is not frozen by the client, -but the keyboard need not be grabbed by the client. -.LP -For -.PN SyncKeyboard , -if the keyboard is frozen and actively grabbed by the client, -keyboard event processing continues normally until the next -.PN KeyPress -or -.PN KeyRelease -event is reported to the client, -at which time the keyboard again appears to freeze. -However, if the reported event causes the keyboard grab to be released, -then the keyboard does not freeze. -.PN SyncKeyboard -has no effect if the keyboard is not frozen by the client or -if the keyboard is not grabbed by the client. -.LP -For -.PN ReplayKeyboard , -if the keyboard is actively grabbed by the client -and is frozen as the result of an event having been sent to the client -(either from the activation of a -.PN GrabKey -or from a previous -.PN AllowEvents -with mode -.PN SyncKeyboard -but not from a -.PN GrabKeyboard ), -then the keyboard grab is released and that event is completely reprocessed, -this time ignoring any passive grabs at or above (towards the root) -the grab-window of the grab just released. -The request has no effect if the keyboard is not grabbed by the client -or if the keyboard is not frozen as the result of an event. -.LP -For -.PN SyncBoth , -if both pointer and keyboard are frozen by the client, -event processing (for both devices) continues normally until the next -.PN ButtonPress , -.PN ButtonRelease , -.PN KeyPress , -or -.PN KeyRelease -event is reported to the client for a grabbed device -(button event for the pointer, key event for the keyboard), -at which time the devices again appear to freeze. -However, if the reported event causes the grab to be released, -then the devices do not freeze (but if the other device is still -grabbed, then a subsequent event for it will still cause both devices -to freeze). -.PN SyncBoth -has no effect unless both pointer and keyboard are frozen by the client. -If the pointer or keyboard is frozen twice by the client on behalf -of two separate grabs, -.PN SyncBoth -thaws for both (but a subsequent freeze for -.PN SyncBoth -will only freeze each device once). -.LP -For -.PN AsyncBoth , -if the pointer and the keyboard are frozen by the client, -event processing for both devices continues normally. -If a device is frozen twice by the client on behalf of two separate grabs, -.PN AsyncBoth -thaws for both. -.PN AsyncBoth -has no effect unless both pointer and keyboard are frozen by the client. -.LP -.PN AsyncPointer , -.PN SyncPointer , -and -.PN ReplayPointer -have no effect on processing of keyboard events. -.PN AsyncKeyboard , -.PN SyncKeyboard , -and -.PN ReplayKeyboard -have no effect on processing of pointer events. -.LP -It is possible for both a pointer grab and a keyboard grab to be active -simultaneously (by the same or different clients). -When a device is frozen on behalf of either grab, -no event processing is performed for the device. -It is possible for a single device to be frozen because of both grabs. -In this case, the freeze must be released on behalf of both grabs -before events can again be processed. -If a device is frozen twice by a single client, then a single -.PN AllowEvents -releases both. -.sp -.LP -.sM -.IN "GrabServer" "" "@DEF@" -.PN GrabServer -.eM -.LP -This request disables processing of requests and close-downs on all -connections other than the one this request arrived on. -.sp -.LP -.sM -.IN "UngrabServer" "" "@DEF@" -.PN UngrabServer -.eM -.LP -This request restarts processing of requests and close-downs -on other connections. -.sp -.LP -.sM -.IN "QueryPointer" "" "@DEF@" -.PN QueryPointer -.LP -.in +.2i -\fIwindow\fP\^: WINDOW -.in -.2i -.LP - \(-> -.LP -.in +.2i -root: WINDOW -.br -child: WINDOW or -.PN None -.br -same-screen: BOOL -.br -root-x, root-y, win-x, win-y: INT16 -.br -mask: SETofKEYBUTMASK -.in -.2i -.LP -.in +.2i -Errors: -.PN Window -.in -.2i -.eM -.LP -The root window the pointer is logically on and the pointer coordinates -relative to the root's origin are returned. -If same-screen is -.PN False , -then the pointer is not on the same screen as the argument window, -child is -.PN None , -and win-x and win-y are zero. -If same-screen is -.PN True , -then win-x and win-y are the pointer coordinates relative to the -argument window's origin, and child is the child containing the -pointer, if any. -The current logical state of the modifier keys and the buttons -are also returned. -Note that the logical state of a device (as seen by means of the protocol) -may lag the physical state if device event processing is frozen. -.sp -.LP -.sM -.IN "GetMotionEvents" "" "@DEF@" -.PN GetMotionEvents -.LP -.in +.2i -\fIstart\fP, \fIstop\fP\^: TIMESTAMP or -.PN CurrentTime -.br -\fIwindow\fP\^: WINDOW -.in -.2i -.LP - \(-> -.LP -.in +.2i -events: LISTofTIMECOORD -.in -.2i -.LP -.in +.2i -where: -.TS -l l. -TIMECOORD: [x, y: INT16 -.br - \ time: TIMESTAMP] -.TE -.in -.2i -.LP -.in +.2i -Errors: -.PN Window -.in -.2i -.eM -.LP -This request returns all events in the motion history buffer that fall -between the specified start and stop times (inclusive) -and that have coordinates that lie within (including borders) -the specified window at its present placement. -The x and y coordinates are reported relative to the origin of the window. -.LP -If the start time is later than the stop time or if the start time is -in the future, no events are returned. -If the stop time is in the future, it is equivalent to specifying -.PN CurrentTime . -.sp -.LP -.sM -.IN "TranslateCoordinates" "" "@DEF@" -.PN TranslateCoordinates -.LP -.in +.2i -\fIsrc-window\fP, \fIdst-window\fP: WINDOW -.br -\fIsrc-x\fP, \fIsrc-y\fP\^: INT16 -.in -.2i -.LP - \(-> -.LP -.in +.2i -same-screen: BOOL -.br -child: WINDOW or -.PN None -.br -dst-x, dst-y: INT16 -.in -.2i -.LP -.in +.2i -Errors: -.PN Window -.in -.2i -.eM -.LP -The src-x and src-y coordinates are taken relative to src-window's -origin and are returned as dst-x and dst-y coordinates relative to -dst-window's origin. -If same-screen is -.PN False , -then src-window and dst-window are on different screens, -and dst-x and dst-y are zero. -If the coordinates are contained in a mapped child of dst-window, -then that child is returned. -.sp -.LP -.sM -.IN "WarpPointer" "" "@DEF@" -.PN WarpPointer -.LP -.in +.2i -\fIsrc-window\fP\^: WINDOW or -.PN None -.br -\fIdst-window\fP\^: WINDOW or -.PN None -.br -\fIsrc-x\fP, \fIsrc-y\fP\^: INT16 -.br -\fIsrc-width\fP, \fIsrc-height\fP\^: CARD16 -.br -\fIdst-x\fP, \fIdst-y\fP\^: INT16 -.in -.2i -.LP -.in +.2i -Errors: -.PN Window -.in -.2i -.eM -.LP -If dst-window is -.PN None , -this request moves the pointer by offsets [dst-x, dst-y] -relative to the current position of the pointer. -If dst-window is a window, -this request moves the pointer to [dst-x, dst-y] relative to dst-window's -origin. -However, if src-window is not -.PN None , -the move only takes place if src-window contains the pointer -and the pointer is contained in the specified rectangle of src-window. -.LP -The src-x and src-y coordinates are relative to src-window's origin. -If src-height is zero, -it is replaced with the current height of src-window minus src-y. -If src-width is zero, -it is replaced with the current width of src-window minus src-x. -.LP -This request cannot be used to move the pointer outside the confine-to -window of an active pointer grab. -An attempt will only move the pointer as far as the closest edge -of the confine-to window. -.LP -This request will generate events just as if the user had instantaneously -moved the pointer. -.sp -.LP -.sM -.IN "SetInputFocus" "" "@DEF@" -.PN SetInputFocus -.LP -.in +.2i -\fIfocus\fP\^: WINDOW or -.PN PointerRoot -or -.PN None -.br -\fIrevert-to\fP\^: -.Pn { Parent , -.PN PointerRoot , -.PN None } -.br -\fItime\fP\^: TIMESTAMP or -.PN CurrentTime -.in -.2i -.LP -.in +.2i -Errors: -.PN Match , -.PN Value , -.PN Window -.in -.2i -.eM -.LP -This request changes the input focus and the last-focus-change time. -The request has no effect if the specified time is earlier than the current -last-focus-change time or is later than the current server time. -Otherwise, the last-focus-change time is set to the specified time -with -.PN CurrentTime -replaced by the current server time. -.LP -If -.PN None -is specified as the focus, -all keyboard events are discarded until a new focus window is set. -In this case, the revert-to argument is ignored. -.LP -If a window is specified as the focus, -it becomes the keyboard's focus window. -If a generated keyboard event would normally be reported to -this window or one of its inferiors, the event is reported normally. -Otherwise, the event is reported with respect to the focus window. -.LP -If -.PN PointerRoot -is specified as the focus, -the focus window is dynamically taken to be the root window of whatever screen -the pointer is on at each keyboard event. -In this case, -the revert-to argument is ignored. -.LP -This request generates -.PN FocusIn -and -.PN FocusOut -events. -.LP -The specified focus window must be viewable at the time of the request (or a -.PN Match -error results). -If the focus window later becomes not viewable, -the new focus window depends on the revert-to argument. -If revert-to is -.PN Parent , -the focus reverts to the parent (or the closest viewable ancestor) -and the new revert-to value is taken to be -.PN None . -If revert-to is -.PN PointerRoot -or -.PN None , -the focus reverts to that value. -When the focus reverts, -.PN FocusIn -and -.PN FocusOut -events are generated, -but the last-focus-change time is not affected. -.sp -.LP -.sM -.IN "GetInputFocus" "" "@DEF@" -.PN GetInputFocus -.LP - \(-> -.LP -.in +.2i -focus: WINDOW or -.PN PointerRoot -or -.PN None -.br -revert-to: -.Pn { Parent , -.PN PointerRoot , -.PN None } -.in -.2i -.eM -.LP -This request returns the current focus state. -.sp -.LP -.sM -.IN "QueryKeymap" "" "@DEF@" -.PN QueryKeymap -.LP - \(-> -.LP -.in +.2i -keys: LISTofCARD8 -.in -.2i -.eM -.LP -This request returns a bit vector for the logical state of the keyboard. -Each bit set to 1 indicates that the corresponding key is currently pressed. -The vector is represented as 32 bytes. -Byte N (from 0) contains the bits for keys 8N to 8N + 7 -with the least significant bit in the byte representing key 8N. -Note that the logical state of a device (as seen by means of the protocol) -may lag the physical state if device event processing is frozen. -.sp -.LP -.sM -.IN "OpenFont" "" "@DEF@" -.PN OpenFont -.LP -.in +.2i -\fIfid\fP\^: FONT -.br -\fIname\fP\^: STRING8 -.in -.2i -.LP -.in +.2i -Errors: -.PN Alloc , -.PN IDChoice , -.PN Name -.in -.2i -.eM -.LP -This request loads the specified font, if necessary, -and associates identifier fid with it. -The font name should use the ISO Latin-1 encoding, -and uppercase and lowercase do not matter. -When the characters ``?'' and ``*'' are used in a font name, a -pattern match is performed and any matching font is used. -In the pattern, -the ``?'' character (octal value 77) will match any single character, -and the ``*'' character (octal value 52) will match any number -of characters. -A structured format for font names is specified in the -X.Org standard \fIX Logical Font Description Conventions\fP. -.LP -Fonts are not associated with a particular screen -and can be stored as a component of any graphics context. -.sp -.LP -.sM -.IN "CloseFont" "" "@DEF@" -.PN CloseFont -.LP -.in +.2i -\fIfont\fP\^: FONT -.in -.2i -.LP -.in +.2i -Errors: -.PN Font -.in -.2i -.eM -.LP -This request deletes the association between the resource ID and the font. -The font itself will be freed when no other resource references it. -.sp -.LP -.sM -.IN "QueryFont" "" "@DEF@" -.PN QueryFont -.LP -.in +.2i -\fIfont\fP\^: FONTABLE -.in -.2i -.LP - \(-> -.LP -.in +.2i -font-info: FONTINFO -.br -char-infos: LISTofCHARINFO -.in -.2i -.LP -.in +.2i -where: -.IP -.TS -l lw(3i). -T{ -FONTINFO: -T} T{ -[draw-direction: -.Pn { LeftToRight , -.PN RightToLeft } -T} - \ min-char-or-byte2, max-char-or-byte2: CARD16 - \ min-byte1, max-byte1: CARD8 - \ all-chars-exist: BOOL - \ default-char: CARD16 - \ min-bounds: CHARINFO - \ max-bounds: CHARINFO - \ font-ascent: INT16 - \ font-descent: INT16 - \ properties: LISTofFONTPROP] -FONTPROP: [name: ATOM - \ value: <32-bit-value>] -CHARINFO: [left-side-bearing: INT16 - \ right-side-bearing: INT16 - \ character-width: INT16 - \ ascent: INT16 - \ descent: INT16 - \ attributes: CARD16] -.TE -.in -.2i -.LP -.in +.2i -Errors: -.PN Font -.in -.2i -.eM -.LP -This request returns logical information about a font. -If a gcontext is given for font, -the currently contained font is used. -.LP -The draw-direction is just a hint -and indicates whether most char-infos have a positive, -.PN LeftToRight , -or a negative, -.PN RightToLeft , -character-width metric. -The core protocol defines no support for vertical text. -.LP -If min-byte1 and max-byte1 are both zero, -then min-char-or-byte2 specifies the linear character index corresponding -to the first element of char-infos, -and max-char-or-byte2 specifies the linear character index of the last element. -If either min-byte1 or max-byte1 are nonzero, -then both min-char-or-byte2 and max-char-or-byte2 will be less than 256, -and the 2-byte character index values corresponding to char-infos element N -(counting from 0) are: -.DS -byte1 = N/D + min-byte1 -byte2 = N\\\\D + min-char-or-byte2 -.DE -.LP -where: -.DS -D = max-char-or-byte2 \- min-char-or-byte2 + 1 -/ = integer division -\\\\ = integer modulus -.DE -.LP -If char-infos has length zero, -then min-bounds and max-bounds will be identical, -and the effective char-infos is one filled with this char-info, of length: -.DS -L = D * (max-byte1 \- min-byte1 + 1) -.DE -.LP -That is, -all glyphs in the specified linear or matrix range have the same information, -as given by min-bounds (and max-bounds). -If all-chars-exist is -.PN True , -then all characters in char-infos have nonzero bounding boxes. -.LP -The default-char specifies the character that will be used when an -undefined or nonexistent character is used. -Note that default-char is a CARD16, not CHAR2B. -For a font using 2-byte matrix format, -the default-char has byte1 in the most significant byte -and byte2 in the least significant byte. -If the default-char itself specifies an undefined or nonexistent character, -then no printing is performed for an undefined or nonexistent character. -.LP -The min-bounds and max-bounds contain the minimum and maximum values of -each individual CHARINFO component over all char-infos (ignoring -nonexistent characters). -The bounding box of the font (that is, the -smallest rectangle enclosing the shape obtained by superimposing all -characters at the same origin [x,y]) has its upper-left coordinate at: -.DS -[x + min-bounds.left-side-bearing, y \- max-bounds.ascent] -.DE -with a width of: -.DS -max-bounds.right-side-bearing \- min-bounds.left-side-bearing -.DE -.LP -and a height of: -.DS -max-bounds.ascent + max-bounds.descent -.DE -.LP -The font-ascent is the logical extent of the font above the baseline -and is used for determining line spacing. -Specific characters may extend beyond this. -The font-descent is the logical extent of the font at or below the baseline -and is used for determining line spacing. -Specific characters may extend beyond this. -If the baseline is at Y-coordinate y, -then the logical extent of the font is inclusive -between the Y-coordinate values (y \- font-ascent) and (y + font-descent \- 1). -.LP -A font is not guaranteed to have any properties. -The interpretation of the property value (for example, INT32, CARD32) -must be derived from \fIa priori\fP knowledge of the property. -A basic set of font properties is specified in the X.Org -standard \fIX Logical Font Description Conventions\fP. -.LP -For a character origin at [x,y], -the bounding box of a character (that is, -the smallest rectangle enclosing the character's shape), described in -terms of CHARINFO components, is a rectangle with its upper-left corner at: -.DS -[x + left-side-bearing, y \- ascent] -.DE -.LP -with a width of: -.DS -right-side-bearing \- left-side-bearing -.DE -.LP -and a height of: -.DS -ascent + descent -.DE -.LP -and the origin for the next character is defined to be: -.DS -[x + character-width, y] -.DE -.LP -Note that the baseline is logically viewed as being just below -nondescending characters (when descent is zero, only pixels with -Y-coordinates less than y are drawn) and that the origin is logically -viewed as being coincident with the left edge of a nonkerned character -(when left-side-bearing is zero, no pixels with X-coordinate less than -x are drawn). -.LP -Note that CHARINFO metric values can be negative. -.LP -A nonexistent character is represented with all CHARINFO components -zero. -.LP -The interpretation of the per-character attributes field is -server-dependent. -.sp -.LP -.sM -.IN "QueryTextExtents" "" "@DEF@" -.PN QueryTextExtents -.LP -.in +.2i -\fIfont\fP\^: FONTABLE -.br -\fIstring\fP\^: STRING16 -.in -.2i -.LP - \(-> -.LP -.in +.2i -draw-direction: -.Pn { LeftToRight , -.PN RightToLeft } -.br -font-ascent: INT16 -.br -font-descent: INT16 -.br -overall-ascent: INT16 -.br -overall-descent: INT16 -.br -overall-width: INT32 -.br -overall-left: INT32 -.br -overall-right: INT32 -.in -.2i -.LP -.in +.2i -Errors: -.PN Font -.in -.2i -.eM -.LP -This request returns the logical extents of the specified string of characters -in the specified font. -If a gcontext is given for font, -the currently contained font is used. -The draw-direction, font-ascent, and font-descent are the same as -described in -.PN QueryFont . -The overall-ascent is the maximum of the ascent metrics of all characters -in the string, and the overall-descent is the maximum of the descent metrics. -The overall-width is the sum of the character-width metrics of all characters -in the string. -For each character in the string, -let W be the sum of the character-width metrics of all characters preceding it -in the string, -let L be the left-side-bearing metric of the character plus W, -and let R be the right-side-bearing metric of the character plus W. -The overall-left is the minimum L of all characters in the string, -and the overall-right is the maximum R. -.LP -For fonts defined with linear indexing rather than 2-byte matrix indexing, -the server will interpret each CHAR2B as a 16-bit number that -has been transmitted most significant byte first (that is, byte1 of the -CHAR2B is taken as the most significant byte). -.LP -Characters with all zero metrics are ignored. -If the font has no defined default-char, -then undefined characters in the string are also ignored. -.sp -.LP -.sM -.IN "ListFonts" "" "@DEF@" -.PN ListFonts -.LP -.in +.2i -\fIpattern\fP\^: STRING8 -.br -\fImax-names\fP\^: CARD16 -.in -.2i -.LP - \(-> -.LP -.in +.2i -names: LISTofSTRING8 -.in -.2i -.eM -.LP -This request returns a list -of available font names (as controlled by the font search path; see -.PN SetFontPath -request) -that match the pattern. -At most, max-names names will be returned. -The pattern should use the ISO Latin-1 encoding, -and uppercase and lowercase do not matter. -In the pattern, -the ``?'' character (octal value 77) will match any single character, -and the ``*'' character (octal value 52) will match any number -of characters. -The returned names are in lowercase. -.sp -.LP -.sM -.IN "ListFontsWithInfo" "" "@DEF@" -.PN ListFontsWithInfo -.LP -.in +.2i -\fIpattern\fP\^: STRING8 -.br -\fImax-names\fP\^: CARD16 -.in -.2i -.LP - \(-> -.LP -.in +.2i -name: STRING8 -.br -info FONTINFO -.br -replies-hint: CARD32 -.in -.2i -.LP -.in +.2i -where: -.in -.2i -.LP -.in +.2i -FONTINFO: -.eM -.LP -This request is similar to -.PN ListFonts , -but it also returns information about each font. -The information returned for each font is identical to what -.PN QueryFont -would return except that the per-character metrics are not returned. -Note that this request can generate multiple replies. -With each reply, -replies-hint may provide an indication of how many more fonts will be returned. -This number is a hint only and may be larger or smaller than -the number of fonts actually returned. -A zero value does not guarantee that no more fonts will be returned. -After the font replies, -a reply with a zero-length name is sent to indicate the end of the reply -sequence. -.sp -.LP -.sM -.IN "SetFontPath" "" "@DEF@" -.PN SetFontPath -.LP -.in +.2i -\fIpath\fP\^: LISTofSTRING8 -.in -.2i -.LP -.in +.2i -Errors: -.PN Value -.in -.2i -.eM -.LP -This request defines the search path for font lookup. -There is only one search path per server, not one per client. -The interpretation of the strings is operating-system-dependent, -but the strings are intended to specify directories to be searched in the -order listed. -.LP -Setting the path to the empty list restores the default path defined -for the server. -.LP -As a side effect of executing this request, -the server is guaranteed to flush all cached information about fonts -for which there currently are no explicit resource IDs allocated. -.LP -The meaning of an error from this request is system specific. -.sp -.LP -.sM -.IN "GetFontPath" "" "@DEF@" -.PN GetFontPath -.LP - \(-> -.LP -.in +.2i -path: LISTofSTRING8 -.in -.2i -.eM -.LP -This request returns the current search path for fonts. -.sp -.LP -.sM -.IN "CreatePixmap" "" "@DEF@" -.PN CreatePixmap -.LP -.in +.2i -\fIpid\fP\^: PIXMAP -.br -\fIdrawable\fP\^: DRAWABLE -.br -\fIdepth\fP\^: CARD8 -.br -\fIwidth\fP, \fIheight\fP\^: CARD16 -.in -.2i -.LP -.in +.2i -Errors: -.PN Alloc , -.PN Drawable , -.PN IDChoice , -.PN Value -.in -.2i -.eM -.LP -This request creates a pixmap and assigns the identifier pid to it. -The width and height must be nonzero (or a -.PN Value -error results). -The depth must be one of the depths supported by the root of the specified -drawable (or a -.PN Value -error results). -The initial contents of the pixmap are undefined. -.LP -It is legal to pass an -.PN InputOnly -window as a drawable to this request. -.sp -.LP -.sM -.IN "FreePixmap" "" "@DEF@" -.PN FreePixmap -.LP -.in +.2i -\fIpixmap\fP\^: PIXMAP -.in -.2i -.LP -.in +.2i -Errors: -.PN Pixmap -.in -.2i -.eM -.LP -This request deletes the association between the resource ID and the pixmap. -The pixmap storage will be freed when no other resource references it. -.sp -.LP -.sM -.IN "CreateGC" "" "@DEF@" -.PN CreateGC -.LP -.in +.2i -\fIcid\fP\^: GCONTEXT -.br -\fIdrawable\fP\^: DRAWABLE -.br -\fIvalue-mask\fP\^: BITMASK -.br -\fIvalue-list\fP\^: LISTofVALUE -.in -.2i -.LP -.in +.2i -Errors: -.PN Alloc , -.PN Drawable , -.PN Font , -.PN IDChoice , -.PN Match , -.PN Pixmap , -.PN Value -.in -.2i -.eM -.LP -This request creates a graphics context -and assigns the identifier cid to it. -The gcontext can be used with any destination drawable having the same root -and depth as the specified drawable; -use with other drawables results in a -.PN Match -error. -.LP -The value-mask and value-list specify which components are to be -explicitly initialized. -The context components are: -.TS H -lw(1.5i) lw(4.25i). -_ -.sp 6p -.B -Component Type -.sp 6p -_ -.TH -.R -.sp 6p -T{ -function -T} T{ -.Pn { Clear , -.PN And , -.PN AndReverse , -.PN Copy , -.PN AndInverted , -.PN NoOp , -.PN Xor , -.br -\ -.PN Or , -.PN Nor , -.PN Equiv , -.PN Invert , -.PN OrReverse , -.PN CopyInverted , -.br -\ -.PN OrInverted , -.PN Nand , -.PN Set } -T} -T{ -plane-mask -T} T{ -CARD32 -T} -T{ -foreground -T} T{ -CARD32 -T} -T{ -background -T} T{ -CARD32 -T} -T{ -line-width -T} T{ -CARD16 -T} -T{ -line-style -T} T{ -.Pn { Solid , -.PN OnOffDash , -.PN DoubleDash } -T} -T{ -cap-style -T} T{ -.Pn { NotLast , -.PN Butt , -.PN Round , -.PN Projecting } -T} -T{ -join-style -T} T{ -.Pn { Miter , -.PN Round , -.PN Bevel } -T} -T{ -fill-style -T} T{ -.Pn { Solid , -.PN Tiled , -.PN OpaqueStippled , -.PN Stippled } -T} -T{ -fill-rule -T} T{ -.Pn { EvenOdd , -.PN Winding } -T} -T{ -arc-mode -T} T{ -.Pn { Chord , -.PN PieSlice } -T} -T{ -tile -T} T{ -PIXMAP -T} -T{ -stipple -T} T{ -PIXMAP -T} -T{ -tile-stipple-x-origin -T} T{ -INT16 -T} -T{ -tile-stipple-y-origin -T} T{ -INT16 -T} -T{ -font -T} T{ -FONT -T} -T{ -subwindow-mode -T} T{ -.Pn { ClipByChildren , -.PN IncludeInferiors } -T} -T{ -graphics-exposures -T} T{ -BOOL -T} -T{ -clip-x-origin -T} T{ -INT16 -T} -T{ -clip-y-origin -T} T{ -INT16 -T} -T{ -clip-mask -T} T{ -PIXMAP or -.PN None -T} -T{ -dash-offset -T} T{ -CARD16 -T} -T{ -dashes -T} T{ -CARD8 -T} -.sp 6p -_ -.TE -.LP -In graphics operations, -given a source and destination pixel, -the result is computed bitwise on corresponding bits of the pixels; -that is, a Boolean operation is performed in each bit plane. -The plane-mask restricts the operation to a subset of planes, -so the result is: -.LP -.DS -((src FUNC dst) AND plane-mask) OR (dst AND (NOT plane-mask)) -.DE -.LP -Range checking is not performed on the values for foreground, background, -or plane-mask. -They are simply truncated to the appropriate number of bits. -.LP -The meanings of the functions are: -.TS -lw(1.5i) lw(2i). -_ -.sp 6p -.B -Function Operation -.sp 6p -_ -.R -.sp 6p -T{ -.PN Clear -T} T{ -0 -T} -T{ -.PN And -T} T{ -src AND dst -T} -T{ -.PN AndReverse -T} T{ -src AND (NOT dst) -T} -T{ -.PN Copy -T} T{ -src -T} -T{ -.PN AndInverted -T} T{ -(NOT src) AND dst -T} -T{ -.PN NoOp -T} T{ -dst -T} -T{ -.PN Xor -T} T{ -src XOR dst -T} -T{ -.PN Or -T} T{ -src OR dst -T} -T{ -.PN Nor -T} T{ -(NOT src) AND (NOT dst) -T} -T{ -.PN Equiv -T} T{ -(NOT src) XOR dst -T} -T{ -.PN Invert -T} T{ -NOT dst -T} -T{ -.PN OrReverse -T} T{ -src OR (NOT dst) -T} -T{ -.PN CopyInverted -T} T{ -NOT src -T} -T{ -.PN OrInverted -T} T{ -(NOT src) OR dst -T} -T{ -.PN Nand -T} T{ -(NOT src) OR (NOT dst) -T} -T{ -.PN Set -T} T{ -1 -T} -.sp 6p -_ -.TE -.LP -The line-width is measured in pixels and can be greater than or equal to -one, a wide line, or the special value zero, a thin line. -.LP -Wide lines are drawn centered on the path described by the graphics request. -Unless otherwise specified by the join or cap style, -the bounding box of a wide line with endpoints [x1, y1], [x2, y2] and -width w is a rectangle with vertices at the following real coordinates: -.DS -[x1\-(w*sn/2), y1+(w*cs/2)], [x1+(w*sn/2), y1\-(w*cs/2)], -[x2\-(w*sn/2), y2+(w*cs/2)], [x2+(w*sn/2), y2\-(w*cs/2)] -.DE -.LP -The sn is the sine of the angle of the line and cs is the cosine of -the angle of the line. -A pixel is part of the line (and hence drawn) if the center of the pixel -is fully inside the bounding box, which is viewed as having infinitely thin -edges. -If the center of the pixel is exactly on the bounding box, -it is part of the line if and only if the interior is immediately to its right -(x increasing direction). -Pixels with centers on a horizontal edge are a special case and are part of -the line if and only if the interior or the boundary is immediately below -(y increasing direction) and if the interior or the boundary is immediately -to the right (x increasing direction). -Note that this description is a mathematical model describing the pixels -that are drawn for a wide line and does not imply that trigonometry is required -to implement such a model. -Real or fixed point arithmetic is recommended for computing the corners of the -line endpoints for lines greater than one pixel in width. -.LP -Thin lines (zero line-width) are nominally one pixel wide lines drawn using an -unspecified, device-dependent algorithm. -There are only two constraints on this algorithm. -First, if a line is drawn unclipped from [x1,y1] to [x2,y2] -and another line is drawn unclipped from [x1+dx,y1+dy] to [x2+dx,y2+dy], -then a point [x,y] is touched by drawing the first line if -and only if the point [x+dx,y+dy] is touched by drawing the second line. -Second, the effective set of points comprising a line cannot be affected -by clipping. -Thus, a point is touched in a clipped line if and only if the point lies -inside the clipping region and the point would be touched by the line -when drawn unclipped. -.LP -Note that a wide line drawn from [x1,y1] to [x2,y2] always draws the -same pixels as a wide line drawn from [x2,y2] to [x1,y1], not counting -cap-style and join-style. -Implementors are encouraged to make this property true for thin lines, -but it is not required. -A line-width of zero may differ from a line-width of one in which pixels -are drawn. -In general, -drawing a thin line will be faster than drawing a wide line of width one, -but thin lines may not mix well aesthetically with wide lines -because of the different drawing algorithms. -If it is desirable to obtain precise and uniform results across all displays, -a client should always use a line-width of one, rather than a line-width of -zero. -.LP -The line-style defines which sections of a line are drawn: -.TS -lw(1i) lw(4.75i). -T{ -.PN Solid -T} T{ -The full path of the line is drawn. -T} -.sp 6p -T{ -.PN DoubleDash -T} T{ -The full path of the line is drawn, -but the even dashes are filled differently than the odd dashes -(see fill-style), with -.PN Butt -cap-style used where even and odd dashes meet. -T} -.sp 6p -T{ -.PN OnOffDash -T} T{ -Only the even dashes are drawn, -and cap-style applies to all internal ends of the individual dashes -(except -.PN NotLast -is treated as -.PN Butt ). -T} -.TE -.LP -The cap-style defines how the endpoints of a path are drawn: -.TS -lw(1i) lw(4.75i). -T{ -.PN NotLast -T} T{ -The result is equivalent to -.PN Butt , -except that for a line-width of zero the final endpoint is not drawn. -T} -.sp 6p -T{ -.PN Butt -T} T{ -The result is square at the endpoint (perpendicular to the slope of the -line) with no projection beyond. -T} -.sp 6p -T{ -.PN Round -T} T{ -The result is a circular arc with its diameter equal to the line-width, -centered on the endpoint; it is equivalent to -.PN Butt -for line-width zero. -T} -.sp 6p -T{ -.PN Projecting -T} T{ -The result is square at the end, but the path continues beyond the -endpoint for a distance equal to half the line-width; -it is equivalent to -.PN Butt -for line-width zero. -T} -.TE -.LP -The join-style defines how corners are drawn for wide lines: -.TS -lw(1i) lw(4.75i). -T{ -.PN Miter -T} T{ -The outer edges of the two lines extend to meet at an angle. -However, if the angle is less than 11 degrees, a -.PN Bevel -join-style is used instead. -T} -.sp 6p -T{ -.PN Round -T} T{ -The result is a circular arc with a diameter equal to the line-width, -centered on the joinpoint. -T} -.sp 6p -T{ -.PN Bevel -T} T{ -The result is -.PN Butt -endpoint styles, and then the triangular notch is filled. -T} -.TE -.LP -For a line with coincident endpoints (x1=x2, y1=y2), when the cap-style -is applied to both endpoints, the semantics depends on the line-width -and the cap-style: -.TS -lw(1i) lw(.5i) lw(4.25i). -T{ -.PN NotLast -T} T{ -thin -T} T{ -This is device-dependent, but the desired effect is that nothing is drawn. -T} -.sp 6p -T{ -.PN Butt -T} T{ -thin -T} T{ -This is device-dependent, but the desired effect is that a single pixel is drawn. -T} -.sp 6p -T{ -.PN Round -T} T{ -thin -T} T{ -This is the same as -.PN Butt /thin. -T} -.sp 6p -T{ -.PN Projecting -T} T{ -thin -T} T{ -This is the same as -.PN Butt /thin. -T} -.sp 6p -T{ -.PN Butt -T} T{ -wide -T} T{ -Nothing is drawn. -T} -.sp 6p -T{ -.PN Round -T} T{ -wide -T} T{ -The closed path is a circle, centered at the endpoint and -with a diameter equal to the line-width. -T} -.sp 6p -T{ -.PN Projecting -T} T{ -wide -T} T{ -The closed path is a square, aligned with the coordinate axes, -centered at the endpoint and with sides equal to the line-width. -T} -.TE -.LP -For a line with coincident endpoints (x1=x2, y1=y2), -when the join-style is applied at one or both endpoints, -the effect is as if the line was removed from the overall path. -However, if the total path consists of (or is reduced to) a single point -joined with itself, -the effect is the same as when the cap-style is applied at both endpoints. -.LP -The tile/stipple represents an infinite two-dimensional plane -with the tile/stipple -replicated in all dimensions. When that plane is superimposed on -the drawable for use in a graphics operation, the upper-left corner -of some instance of the tile/stipple is at the coordinates within -the drawable specified by the tile/stipple origin. -The tile/stipple and clip origins are interpreted relative to the -origin of whatever destination drawable is specified in a graphics -request. -.LP -The tile pixmap must have the same root and depth as the gcontext (or a -.PN Match -error results). -The stipple pixmap must have depth one and must have the same root -as the gcontext (or a -.PN Match -error results). -For fill-style -.PN Stippled -(but not fill-style -.PN OpaqueStippled ), -the stipple pattern is tiled in a single plane -and acts as an additional clip mask to be ANDed with the clip-mask. -Any size pixmap can be used for tiling or stippling, -although some sizes may be faster to use than others. -.LP -The fill-style defines the contents of the source for line, text, and -fill requests. -For all text and fill requests (for example, -.PN PolyText8 , -.PN PolyText16 , -.PN PolyFillRectangle , -.PN FillPoly , -and -.PN PolyFillArc ) -as well as for line requests with line-style -.PN Solid , -(for example, -.PN PolyLine , -.PN PolySegment , -.PN PolyRectangle , -.PN PolyArc ) -and for the even dashes for line requests with line-style -.PN OnOffDash -or -.PN DoubleDash : -.TS -lw(1.25i) lw(4.5i). -T{ -.PN Solid -T} T{ -Foreground -T} -.sp 6p -T{ -.PN Tiled -T} T{ -Tile -T} -.sp 6p -T{ -.PN OpaqueStippled -T} T{ -A tile with the same width and height as stipple -but with background everywhere stipple has a zero -and with foreground everywhere stipple has a one -T} -.sp 6p -T{ -.PN Stippled -T} T{ -Foreground masked by stipple -T} -.TE -.LP -For the odd dashes for line requests with line-style -.PN DoubleDash : -.TS -lw(1.25i) lw(4.5i). -T{ -.PN Solid -T} T{ -Background -T} -.sp 6p -T{ -.PN Tiled -T} T{ -Same as for even dashes -T} -.sp 6p -T{ -.PN OpaqueStippled -T} T{ -Same as for even dashes -T} -.sp 6p -T{ -.PN Stippled -T} T{ -Background masked by stipple -T} -.TE -.LP -The dashes value allowed here is actually a simplified form of the more -general patterns that can be set with -.PN SetDashes . -Specifying a value of N here is equivalent to specifying -the two element list [N, N] in -.PN SetDashes . -The value must be nonzero (or a -.PN Value -error results). -The meaning of dash-offset and dashes are explained in the -.PN SetDashes -request. -.LP -The clip-mask restricts writes to the destination drawable. -Only pixels where the clip-mask has bits set to 1 are drawn. -Pixels are not drawn outside the area covered by the clip-mask -or where the clip-mask has bits set to 0. -The clip-mask affects all graphics requests, -but it does not clip sources. -The clip-mask origin is interpreted relative to the origin of whatever -destination drawable is specified in a graphics request. -If a pixmap is specified as the clip-mask, -it must have depth 1 and have the same root as the gcontext (or a -.PN Match -error results). -If clip-mask is -.PN None , -then pixels are always drawn, regardless of the clip origin. -The clip-mask can also be set with the -.PN SetClipRectangles -request. -.LP -For -.PN ClipByChildren , -both source and destination windows are additionally clipped by all viewable -.PN InputOutput -children. -For -.PN IncludeInferiors , -neither source nor destination window is clipped by inferiors. -This will result in including subwindow contents in the -source and drawing through subwindow boundaries of the destination. -The use of -.PN IncludeInferiors -with a source or destination window of one depth with mapped inferiors -of differing depth is not illegal, -but the semantics is undefined by the core protocol. -.LP -The fill-rule defines what pixels are inside (that is, are drawn) for -paths given in -.PN FillPoly -requests. -.PN EvenOdd -means a point is inside if an infinite ray with the point as origin crosses -the path an odd number of times. -For -.PN Winding , -a point is inside if an infinite ray with the point as origin crosses an -unequal number of clockwise and counterclockwise directed path segments. -A clockwise directed path segment is one that crosses the ray from left -to right as observed from the point. -A counter-clockwise segment is one that crosses the ray from right to left -as observed from the point. -The case where a directed line segment is coincident with the ray is -uninteresting because one can simply choose a different ray that is not -coincident with a segment. -.LP -For both fill rules, -a point is infinitely small and the path is an infinitely thin line. -A pixel is inside if the center point of the pixel is inside -and the center point is not on the boundary. -If the center point is on the boundary, -the pixel is inside if and only if the polygon interior is immediately -to its right (x increasing direction). -Pixels with centers along a horizontal edge are a special case -and are inside if and only if the polygon interior is immediately below -(y increasing direction). -.LP -The arc-mode controls filling in the -.PN PolyFillArc -request. -.LP -The graphics-exposures flag controls -.PN GraphicsExposure -event generation for -.PN CopyArea -and -.PN CopyPlane -requests (and any similar requests defined by extensions). -.LP -The default component values are: -.TS H -l lw(4i). -_ -.sp 6p -.B -Component Default -.sp 6p -_ -.TH -.R -.sp 6p -T{ -function -T} T{ -.PN Copy -T} -T{ -plane-mask -T} T{ -all ones -T} -T{ -foreground -T} T{ -0 -T} -T{ -background -T} T{ -1 -T} -T{ -line-width -T} T{ -0 -T} -T{ -line-style -T} T{ -.PN Solid -T} -T{ -cap-style -T} T{ -.PN Butt -T} -T{ -join-style -T} T{ -.PN Miter -T} -T{ -fill-style -T} T{ -.PN Solid -T} -T{ -fill-rule -T} T{ -.PN EvenOdd -T} -T{ -arc-mode -T} T{ -.PN PieSlice -T} -T{ -tile -T} T{ -Pixmap of unspecified size filled with foreground pixel -.br -(that is, client specified pixel if any, else 0) -.br -(subsequent changes to foreground do not affect this pixmap) -T} -T{ -stipple -T} T{ -Pixmap of unspecified size filled with ones -T} -T{ -tile-stipple-x-origin -T} T{ -0 -T} -T{ -tile-stipple-y-origin -T} T{ -0 -T} -T{ -font -T} T{ - -T} -T{ -subwindow-mode -T} T{ -.PN ClipByChildren -T} -T{ -graphics-exposures -T} T{ -.PN True -T} -T{ -clip-x-origin -T} T{ -0 -T} -T{ -clip-y-origin -T} T{ -0 -T} -T{ -clip-mask -T} T{ -.PN None -T} -T{ -dash-offset -T} T{ -0 -T} -T{ -dashes -T} T{ -4 (that is, the list [4, 4]) -T} -.sp 6p -_ -.TE -.LP -Storing a pixmap in a gcontext might or might not result in a copy -being made. -If the pixmap is later used as the destination for a graphics request, -the change might or might not be reflected in the gcontext. -If the pixmap is used simultaneously in a graphics request -as both a destination and as a tile or stipple, -the results are not defined. -.LP -It is quite likely that some amount of gcontext information will be -cached in display hardware and that such hardware can only cache a -small number of gcontexts. -Given the number and complexity of components, -clients should view switching between gcontexts with nearly -identical state as significantly more expensive than making minor -changes to a single gcontext. -.sp -.LP -.sM -.IN "ChangeGC" "" "@DEF@" -.PN ChangeGC -.LP -.in +.2i -\fIgc\fP\^: GCONTEXT -.br -\fIvalue-mask\fP\^: BITMASK -.br -\fIvalue-list\fP\^: LISTofVALUE -.in -.2i -.LP -.in +.2i -Errors: -.PN Alloc , -.PN Font , -.PN GContext , -.PN Match , -.PN Pixmap , -.PN Value -.in -.2i -.eM -.LP -This request changes components in gc. -The value-mask and value-list specify which components are to be changed. -The values and restrictions are the same -as for -.PN CreateGC . -.LP -Changing the clip-mask also overrides any previous -.PN SetClipRectangles -request on the context. -Changing dash-offset or dashes overrides any previous -.PN SetDashes -request on the context. -.LP -The order in which components are verified and altered is server-dependent. -If an error is generated, -a subset of the components may have been altered. -.sp -.LP -.sM -.IN "CopyGC" "" "@DEF@" -.PN CopyGC -.LP -.in +.2i -\fIsrc-gc\fP, \fIdst-gc\fP\^: GCONTEXT -.br -\fIvalue-mask\fP\^: BITMASK -.in -.2i -.LP -.in +.2i -Errors: -.PN Alloc , -.PN GContext , -.PN Match , -.PN Value -.in -.2i -.eM -.LP -This request copies components from src-gc to dst-gc. -The value-mask specifies which components to copy, as for -.PN CreateGC . -The two gcontexts must have the same root and the same depth (or a -.PN Match -error results). -.sp -.LP -.sM -.IN "SetDashes" "" "@DEF@" -.PN SetDashes -.LP -.in +.2i -\fIgc\fP\^: GCONTEXT -.br -\fIdash-offset\fP\^: CARD16 -.br -\fIdashes\fP\^: LISTofCARD8 -.in -.2i -.LP -.in +.2i -Errors: -.PN Alloc , -.PN GContext , -.PN Value -.in -.2i -.eM -.LP -This request sets dash-offset and dashes in gc for dashed line styles. -Dashes cannot be empty (or a -.PN Value -error results). -Specifying an odd-length list is equivalent to specifying the same list -concatenated with itself to produce an even-length list. -The initial and alternating elements of dashes are the even dashes; -the others are the odd dashes. -Each element specifies a dash length in pixels. -All of the elements must be nonzero (or a -.PN Value -error results). -The dash-offset defines the phase of the pattern, -specifying how many pixels into dashes the pattern should actually begin in -any single graphics request. -Dashing is continuous through path elements combined with a join-style -but is reset to the dash-offset between each sequence of joined lines. -.LP -The unit of measure for dashes is the same as in the ordinary -coordinate system. -Ideally, a dash length is measured along the slope of the line, -but implementations are only required to match this ideal -for horizontal and vertical lines. -Failing the ideal semantics, -it is suggested that the length be measured along the major axis of the line. -The major axis is defined as the x axis for lines drawn at an angle of -between \-45 and +45 degrees or between 135 and 225 degrees from the x axis. -For all other lines, the major axis is the y axis. -.LP -For any graphics primitive, the computation of the endpoint of an individual -dash only depends on the geometry of the primitive, the start position -of the dash, the direction of the dash, and the dash length. -.LP -For any graphics primitive, the total set of pixels used to render the -primitive (both even and odd numbered dash elements) with -.PN DoubleDash -line-style is the same as the set of pixels used to render the -primitive with -.PN Solid -line-style. -.LP -For any graphics primitive, if the primitive is drawn with -.PN OnOffDash -or -.PN DoubleDash -line-style unclipped at position [x,y] and again at position -[x+dx,y+dy], then a point [x1,y1] is included in a dash in the first -instance if and only if the point [x1+dx,y1+dy] is included in the dash in -the second instance. In addition, the effective set of points comprising a -dash cannot be affected by clipping. A point is included in a clipped dash -if and only if the point lies inside the clipping region and the point -would be included in the dash when drawn unclipped. -.sp -.LP -.sM -.IN "SetClipRectangles" "" "@DEF@" -.PN SetClipRectangles -.LP -.in +.2i -\fIgc\fP\^: GCONTEXT -.br -\fIclip-x-origin\fP, \fIclip-y-origin\fP\^: INT16 -.br -\fIrectangles\fP\^: LISTofRECTANGLE -.br -\fIordering\fP\^: -.Pn { UnSorted , -.PN YSorted , -.PN YXSorted , -.PN YXBanded } -.in -.2i -.LP -.in +.2i -Errors: -.PN Alloc , -.PN GContext , -.PN Match , -.PN Value -.in -.2i -.eM -.LP -This request changes clip-mask in gc to the specified list of rectangles -and sets the clip origin. -Output will be clipped to remain contained within the rectangles. -The clip origin is interpreted relative to the origin of -whatever destination drawable is specified in a graphics request. -The rectangle coordinates are interpreted relative to the clip origin. -The rectangles should be nonintersecting, or graphics results will be -undefined. -Note that the list of rectangles can be empty, -which effectively disables output. -This is the opposite of passing -.PN None -as the clip-mask in -.PN CreateGC -and -.PN ChangeGC . -.LP -If known by the client, -ordering relations on the rectangles can be specified with the ordering -argument. -This may provide faster operation by the server. -If an incorrect ordering is specified, -the server may generate a -.PN Match -error, but it is not required to do so. -If no error is generated, -the graphics results are undefined. -.PN UnSorted -means that the rectangles are in arbitrary order. -.PN YSorted -means that the rectangles are nondecreasing in their Y origin. -.PN YXSorted -additionally constrains -.PN YSorted -order in that all rectangles with an equal Y origin are -nondecreasing in their X origin. -.PN YXBanded -additionally constrains -.PN YXSorted -by requiring that, for every possible Y scanline, -all rectangles that include that scanline have identical Y origins and Y -extents. -.sp -.LP -.sM -.IN "FreeGC" "" "@DEF@" -.PN FreeGC -.LP -.in +.2i -\fIgc\fP\^: GCONTEXT -.in -.2i -.LP -.in +.2i -Errors: -.PN GContext -.in -.2i -.eM -.LP -This request deletes the association between the resource ID and the gcontext -and destroys the gcontext. -.sp -.LP -.sM -.IN "ClearArea" "" "@DEF@" -.PN ClearArea -.LP -.in +.2i -\fIwindow\fP\^: WINDOW -.br -\fIx\fP, \fIy\fP\^: INT16 -.br -\fIwidth\fP, \fIheight\fP: CARD16 -.br -\fIexposures\fP\^: BOOL -.in -.2i -.LP -.in +.2i -Errors: -.PN Match , -.PN Value , -.PN Window -.in -.2i -.eM -.LP -The x and y coordinates are relative to the window's origin -and specify the upper-left corner of the rectangle. -If width is zero, -it is replaced with the current width of the window minus x. -If height is zero, -it is replaced with the current height of the window minus y. -If the window has a defined background tile, -the rectangle is tiled with a plane-mask of all ones and function of -.PN Copy -and a subwindow-mode of -.PN ClipByChildren . -If the window has background -.PN None , -the contents of the window are not changed. -In either case, -if exposures is -.PN True , -then one or more exposure events are generated for regions of the rectangle -that are either visible or are being retained in a backing store. -.LP -It is a -.PN Match -error to use an -.PN InputOnly -window in this request. -.sp -.LP -.sM -.IN "CopyArea" "" "@DEF@" -.PN CopyArea -.LP -.in +.2i -\fIsrc-drawable\fP, \fIdst-drawable\fP\^: DRAWABLE -.br -\fIgc\fP\^: GCONTEXT -.br -\fIsrc-x\fP\^, \fIsrc-y\fP\^: INT16 -.br -\fIwidth\fP, \fIheight\fP\^: CARD16 -.br -\fIdst-x\fP, \fIdst-y\fP\^: INT16 -.in -.2i -.LP -.in +.2i -Errors: -.PN Drawable , -.PN GContext , -.PN Match -.in -.2i -.eM -.LP -This request combines the specified rectangle of src-drawable with the -specified rectangle of dst-drawable. -The src-x and src-y coordinates are relative to src-drawable's origin. -The dst-x and dst-y are relative to dst-drawable's origin, -each pair specifying the upper-left corner of the rectangle. -The src-drawable must have the same root and the same depth -as dst-drawable (or a -.PN Match -error results). -.LP -If regions of the source rectangle are obscured and have not been retained -in backing store -or if regions outside the boundaries of the source drawable are specified, -then those regions are not copied, -but the following occurs on all corresponding destination regions that are -either visible or are retained in backing-store. -If the dst-drawable is a window with a background other than -.PN None , -these corresponding destination regions are tiled -(with plane-mask of all ones and function -.PN Copy ) -with that background. -Regardless of tiling and whether the destination is a window or a pixmap, -if graphics-exposures in gc is -.PN True , -then -.PN GraphicsExposure -events for all corresponding destination regions are generated. -.LP -If graphics-exposures is -.PN True -but no -.PN GraphicsExposure -events are generated, -then a -.PN NoExposure -event is generated. -.LP -GC components: function, plane-mask, subwindow-mode, -graphics-exposures, clip-x-origin, clip-y-origin, clip-mask -.sp -.LP -.sM -.IN "CopyPlane" "" "@DEF@" -.PN CopyPlane -.LP -.in +.2i -\fIsrc-drawable\fP, \fIdst-drawable\fP\^: DRAWABLE -.br -\fIgc\fP\^: GCONTEXT -.br -\fIsrc-x\fP, \fIsrc-y\fP\^: INT16 -.br -\fIwidth\fP, \fIheight\fP\^: CARD16 -.br -\fIdst-x\fP, \fIdst-y\fP\^: INT16 -.br -\fIbit-plane\fP\^: CARD32 -.in -.2i -.LP -.in +.2i -Errors: -.PN Drawable , -.PN GContext , -.PN Match , -.PN Value -.in -.2i -.eM -.LP -The src-drawable must have the same root as dst-drawable (or a -.PN Match -error results), but it need not have the same depth. -The bit-plane must have exactly one bit set to 1 and the value of bit-plane -must be less than %2 sup n% where \fIn\fP is the depth of src-drawable (or a -.PN Value -error results). -Effectively, a pixmap of the same depth as dst-drawable and with size specified -by the source region is formed using the foreground/background pixels in gc -(foreground everywhere the bit-plane in src-drawable contains a bit set to 1, -background everywhere the bit-plane contains a bit set to 0), -and the equivalent of a -.PN CopyArea -is performed, with all the same exposure semantics. -This can also be thought of as using the specified region of the source -bit-plane as a stipple with a fill-style of -.PN OpaqueStippled -for filling a rectangular area of the destination. -.LP -GC components: function, plane-mask, foreground, background, -subwindow-mode, graphics-exposures, clip-x-origin, clip-y-origin, -clip-mask -.sp -.LP -.sM -.IN "PolyPoint" "" "@DEF@" -.PN PolyPoint -.LP -.in +.2i -\fIdrawable\fP\^: DRAWABLE -.br -\fIgc\fP\^: GCONTEXT -.br -\fIcoordinate-mode\fP\^: -.Pn { Origin , -.PN Previous } -.br -\fIpoints\fP\^: LISTofPOINT -.in -.2i -.LP -.in +.2i -Errors: -.PN Drawable , -.PN GContext , -.PN Match , -.PN Value -.in -.2i -.eM -.LP -This request combines the foreground pixel in gc with the pixel -at each point in the drawable. -The points are drawn in the order listed. -.LP -The first point is always relative to the drawable's origin. -The rest are relative either to that origin or the previous point, -depending on the coordinate-mode. -.LP -GC components: function, plane-mask, foreground, subwindow-mode, -clip-x-origin, clip-y-origin, clip-mask -.sp -.LP -.sM -.IN "PolyLine" "" "@DEF@" -.PN PolyLine -.LP -.in +.2i -\fIdrawable\fP\^: DRAWABLE -.br -\fIgc\fP\^: GCONTEXT -.br -\fIcoordinate-mode\fP\^: -.Pn { Origin , -.PN Previous } -.br -\fIpoints\fP\^: LISTofPOINT -.in -.2i -.LP -.in +.2i -Errors: -.PN Drawable , -.PN GContext , -.PN Match , -.PN Value -.in -.2i -.eM -.LP -This request draws lines between each pair of points (point[i], point[i+1]). -The lines are drawn in the order listed. -The lines join correctly at all intermediate points, -and if the first and last points coincide, -the first and last lines also join correctly. -.LP -For any given line, -no pixel is drawn more than once. -If thin (zero line-width) lines intersect, -the intersecting pixels are drawn multiple times. -If wide lines intersect, -the intersecting pixels are drawn only once, as though the entire -.PN PolyLine -were a single filled shape. -.LP -The first point is always relative to the drawable's origin. -The rest are relative either to that origin or the previous point, -depending on the coordinate-mode. -.LP -When either of the two lines involved in a -.PN Bevel -join is neither vertical -nor horizontal, then the slope and position of the line segment defining -the bevel join edge is implementation dependent. However, the computation -of the slope and distance (relative to the join point) only depends on -the line width and the slopes of the two lines. -.LP -GC components: function, plane-mask, line-width, line-style, -cap-style, join-style, fill-style, subwindow-mode, clip-x-origin, -clip-y-origin, clip-mask -.LP -GC mode-dependent components: foreground, background, tile, stipple, -tile-stipple-x-origin, tile-stipple-y-origin, dash-offset, dashes -.sp -.LP -.sM -.IN "PolySegment" "" "@DEF@" -.PN PolySegment -.LP -.in +.2i -\fIdrawable\fP\^: DRAWABLE -.br -\fIgc\fP\^: GCONTEXT -.br -\fIsegments\fP\^: LISTofSEGMENT -.in -.2i -.LP -.in +.2i -where: -.in -.2i -.LP -.in +.2i -SEGMENT: [x1, y1, x2, y2: INT16] -.in -.2i -.LP -.in +.2i -Errors: -.PN Drawable , -.PN GContext , -.PN Match -.in -.2i -.eM -.LP -For each segment, -this request draws a line between [x1, y1] and [x2, y2]. -The lines are drawn in the order listed. -No joining is performed at coincident endpoints. -For any given line, -no pixel is drawn more than once. -If lines intersect, -the intersecting pixels are drawn multiple times. -.LP -GC components: function, plane-mask, line-width, line-style, -cap-style, fill-style, subwindow-mode, clip-x-origin, clip-y-origin, -clip-mask -.LP -GC mode-dependent components: foreground, background, tile, stipple, -tile-stipple-x-origin, tile-stipple-y-origin, dash-offset, dashes -.sp -.LP -.sM -.IN "PolyRectangle" "" "@DEF@" -.PN PolyRectangle -.LP -.in +.2i -\fIdrawable\fP\^: DRAWABLE -.br -\fIgc\fP\^: GCONTEXT -.br -\fIrectangles\fP\^: LISTofRECTANGLE -.in -.2i -.LP -.in +.2i -Errors: -.PN Drawable , -.PN GContext , -.PN Match -.in -.2i -.eM -.LP -This request draws the outlines of the specified rectangles, as if a five-point -.PN PolyLine -were specified for each rectangle: -.LP -.DS -[x,y] [x+width,y] [x+width,y+height] [x,y+height] [x,y] -.DE -.LP -The x and y coordinates of each rectangle are relative to the drawable's origin -and define the upper-left corner of the rectangle. -.LP -The rectangles are drawn in the order listed. -For any given rectangle, -no pixel is drawn more than once. -If rectangles intersect, -the intersecting pixels are drawn multiple times. -.LP -GC components: function, plane-mask, line-width, line-style, -cap-style, join-style, fill-style, subwindow-mode, clip-x-origin, -clip-y-origin, clip-mask -.LP -GC mode-dependent components: foreground, background, tile, stipple, -tile-stipple-x-origin, tile-stipple-y-origin, dash-offset, dashes -.sp -.LP -.sM -.IN "PolyArc" "" "@DEF@" -.PN PolyArc -.LP -.in +.2i -\fIdrawable\fP\^: DRAWABLE -.br -\fIgc\fP\^: GCONTEXT -.br -\fIarcs\fP\^: LISTofARC -.in -.2i -.LP -.in +.2i -Errors: -.PN Drawable , -.PN GContext , -.PN Match -.in -.2i -.eM -.LP -This request draws circular or elliptical arcs. -Each arc is specified by a rectangle and two angles. -The angles are signed integers in degrees scaled by 64, -with positive indicating counterclockwise motion and -negative indicating clockwise motion. -The start of the arc is specified by angle1 relative to the three-o'clock -position from the center of the rectangle, -and the path and extent of the arc is specified by angle2 relative to the -start of the arc. -If the magnitude of angle2 is greater than 360 degrees, -it is truncated to 360 degrees. -The x and y coordinates of the rectangle are relative to the origin of -the drawable. -For an arc specified as [x,y,w,h,a1,a2], -the origin of the major and minor axes is at [x+(w/2),y+(h/2)], -and the infinitely thin path describing the entire circle/ellipse intersects -the horizontal axis at [x,y+(h/2)] and [x+w,y+(h/2)] and intersects the -vertical axis at [x+(w/2),y] and [x+(w/2),y+h]. -These coordinates are not necessarily integral; that is, -they are not truncated to discrete coordinates. -.LP -For a wide line with line-width lw, the ideal bounding outlines for filling -are given by the two infinitely thin paths consisting of all points whose -perpendicular distance from a tangent to the path of the circle/ellipse is -equal to lw/2 (which may be a fractional value). When the width and height -of the arc are not equal and both are nonzero, then the actual bounding -outlines are implementation dependent. However, the computation of the -shape and position of the bounding outlines (relative to the center of the -arc) only depends on the width and height of the arc and the -line-width. -.LP -The cap-style is applied the same as for a line corresponding to the -tangent of the circle/ellipse at the endpoint. When the angle of an arc -face is not an integral multiple of 90 degrees, and the width and height of -the arc are both are nonzero, then the shape and position of the cap at -that face is implementation dependent. However, for a -.PN Butt -cap, the face -is defined by a straight line, and the computation of the position -(relative to the center of the arc) and the slope of the line only -depends on the width and height of the arc and the angle of the arc face. -For other cap styles, the computation of the position (relative to the -center of the arc) and the shape of the cap only depends on the width -and height of the arc, the line-width, the angle of the arc face, and the -direction (clockwise or counter clockwise) of the arc from the endpoint. -.LP -The join-style is applied the same as for two lines corresponding to the -tangents of the circles/ellipses at the join point. When the width and -height of both arcs are nonzero, and the angle of either arc face is not an -integral multiple of 90 degrees, then the shape of the join is -implementation dependent. However, the computation of the shape only -depends on the width and height of each arc, the line-width, the angles of -the two arc faces, the direction (clockwise or counter clockwise) of the -arcs from the join point, and the relative orientation of the two arc -center points. -.LP -For an arc specified as [x,y,w,h,a1,a2], -the angles must be specified in the effectively skewed coordinate system of -the ellipse (for a circle, the angles and coordinate systems are identical). -The relationship between these angles and angles expressed in the normal -coordinate system of the screen (as measured with a protractor) is as -follows: -.DS -skewed-angle = atan(tan(normal-angle) * w/h) + adjust -.DE -.LP -The skewed-angle and normal-angle are expressed in radians (rather -than in degrees scaled by 64) in the range [0,2*PI). -The atan returns a value in the range [\-PI/2,PI/2]. -The adjust is: -.RS -.TS -l l. -0 for normal-angle in the range [0,PI/2) -PI for normal-angle in the range [PI/2,(3*PI)/2) -2*PI for normal-angle in the range [(3*PI)/2,2*PI) -.TE -.RE -.LP -The arcs are drawn in the order listed. -If the last point in one arc coincides with the first point in the following -arc, -the two arcs will join correctly. -If the first point in the first arc coincides with the last point -in the last arc, -the two arcs will join correctly. -For any given arc, -no pixel is drawn more than once. -If two arcs join correctly and the line-width is greater than zero -and the arcs intersect, -no pixel is drawn more than once. -Otherwise, the intersecting pixels of intersecting arcs are drawn multiple -times. -Specifying an arc with one endpoint and a clockwise extent draws the -same pixels as specifying the other endpoint and an equivalent -counterclockwise extent, except as it affects joins. -.LP -By specifying one axis to be zero, -a horizontal or vertical line can be drawn. -.LP -Angles are computed based solely on the coordinate system, -ignoring the aspect ratio. -.LP -GC components: function, plane-mask, line-width, line-style, -cap-style, join-style, fill-style, subwindow-mode, clip-x-origin, -clip-y-origin, clip-mask -.LP -GC mode-dependent components: foreground, background, tile, stipple, -tile-stipple-x-origin, tile-stipple-y-origin, dash-offset, dashes -.sp -.LP -.sM -.IN "FillPoly" "" "@DEF@" -.PN FillPoly -.LP -.in +.2in -\fIdrawable\fP\^: DRAWABLE -.br -\fIgc\fP\^: GCONTEXT -.br -\fIshape\fP\^: -.Pn { Complex , -.PN Nonconvex , -.PN Convex } -.br -\fIcoordinate-mode\fP\^: -.Pn { Origin , -.PN Previous } -.br -\fIpoints\fP\^: LISTofPOINT -.in -.2i -.LP -.in +.2i -Errors: -.PN Drawable , -.PN GContext , -.PN Match , -.PN Value -.in -.2i -.eM -.LP -This request fills the region closed by the specified path. -The path is closed automatically if the last point in the list does not -coincide with the first point. -No pixel of the region is drawn more than once. -.LP -The first point is always relative to the drawable's origin. -The rest are relative either to that origin or the previous point, -depending on the coordinate-mode. -.LP -The shape parameter may be used by the server to improve performance. -.PN Complex -means the path may self-intersect. -Contiguous coincident points in the path are not treated -as self-intersection. -.LP -.PN Nonconvex -means the path does not self-intersect, -but the shape is not wholly convex. -If known by the client, -specifying -.PN Nonconvex -over -.PN Complex -may improve performance. -If -.PN Nonconvex -is specified for a self-intersecting path, -the graphics results are undefined. -.LP -.PN Convex -means that for every pair of points inside the polygon, -the line segment connecting them does not intersect the path. -If known by the client, -specifying -.PN Convex -can improve performance. -If -.PN Convex -is specified for a path that is not convex, -the graphics results are undefined. -.LP -GC components: function, plane-mask, fill-style, fill-rule, -subwindow-mode, clip-x-origin, clip-y-origin, clip-mask -.LP -GC mode-dependent components: foreground, background, tile, stipple, -tile-stipple-x-origin, tile-stipple-y-origin -.sp -.LP -.sM -.IN "PolyFillRectangle" "" "@DEF@" -.PN PolyFillRectangle -.LP -.in +.2i -\fIdrawable\fP\^: DRAWABLE -.br -\fIgc\fP\^: GCONTEXT -.br -\fIrectangles\fP\^: LISTofRECTANGLE -.in -.2i -.LP -.in +.2i -Errors: -.PN Drawable , -.PN GContext , -.PN Match -.in -.2i -.eM -.LP -This request fills the specified rectangles, as if a four-point -.PN FillPoly -were specified for each rectangle: -.DS -[x,y] [x+width,y] [x+width,y+height] [x,y+height] -.DE -.LP -The x and y coordinates of each rectangle are relative to the drawable's origin -and define the upper-left corner of the rectangle. -.LP -The rectangles are drawn in the order listed. -For any given rectangle, -no pixel is drawn more than once. -If rectangles intersect, -the intersecting pixels are drawn multiple times. -.LP -GC components: function, plane-mask, fill-style, subwindow-mode, -clip-x-origin, clip-y-origin, clip-mask -.LP -GC mode-dependent components: foreground, background, tile, stipple, -tile-stipple-x-origin, tile-stipple-y-origin -.sp -.LP -.sM -.IN "PolyFillArc" "" "@DEF@" -.PN PolyFillArc -.LP -.in +.2i -\fIdrawable\fP\^: DRAWABLE -.br -\fIgc\fP\^: GCONTEXT -.br -\fIarcs\fP\^: LISTofARC -.in -.2i -.LP -.in +.2i -Errors: -.PN Drawable , -.PN GContext , -.PN Match -.in -.2i -.eM -.LP -For each arc, -this request fills the region closed by the infinitely thin path -described by the specified arc and one or two line segments, -depending on the arc-mode. -For -.PN Chord , -the single line segment joining the endpoints of the arc is used. -For -.PN PieSlice , -the two line segments joining the endpoints of the arc with the center point -are used. -.LP -For an arc specified as [x,y,w,h,a1,a2], the origin of the major and minor -axes is at [x+(w/2),y+(h/2)], and the infinitely thin path describing the -entire circle/ellipse intersects the horizontal axis at [x,y+(h/2)] and -[x+w,y+(h/2)] and intersects the vertical axis at [x+(w/2),y] and -[x+(w/2),y+h]. These coordinates are not necessarily integral; that is, -they are not truncated to discrete coordinates. -.LP -The arc angles are interpreted as specified in the -.PN PolyArc -request. When -the angle of an arc face is not an integral multiple of 90 degrees, then -the precise endpoint on the arc is implementation dependent. However, for -.PN Chord -arc-mode, the computation of the pair of endpoints (relative to the -center of the arc) only depends on the width and height of the arc and -the angles of the two arc faces. For -.PN PieSlice -arc-mode, the computation of -an endpoint only depends on the angle of the arc face for that -endpoint and the ratio of the arc width to arc height. -.LP -The arcs are filled in the order listed. -For any given arc, -no pixel is drawn more than once. -If regions intersect, -the intersecting pixels are drawn multiple times. -.LP -GC components: function, plane-mask, fill-style, arc-mode, -subwindow-mode, clip-x-origin, clip-y-origin, clip-mask -.LP -GC mode-dependent components: foreground, background, tile, stipple, -tile-stipple-x-origin, tile-stipple-y-origin -.sp -.LP -.sM -.IN "PutImage" "" "@DEF@" -.PN PutImage -.LP -.in +.2i -\fIdrawable\fP\^: DRAWABLE -.br -\fIgc\fP\^: GCONTEXT -.br -\fIdepth\fP\^: CARD8 -.br -\fIwidth\fP, \fIheight\fP\^: CARD16 -.br -\fIdst-x\fP, \fIdst-y\fP\^: INT16 -.br -\fIleft-pad\fP\^: CARD8 -.br -\fIformat\fP\^: -.Pn { Bitmap , -.PN XYPixmap , -.PN ZPixmap } -.br -\fIdata\fP\^: LISTofBYTE -.in -.2i -.LP -.in +.2i -Errors: -.PN Drawable , -.PN GContext , -.PN Match , -.PN Value -.in -.2i -.eM -.LP -This request combines an image with a rectangle of the drawable. -The dst-x and dst-y coordinates are relative to the drawable's origin. -.LP -If -.PN Bitmap -format is used, -then depth must be one (or a -.PN Match -error results), and the image must be in XY format. -The foreground pixel in gc defines the source for bits set to 1 in the image, -and the background pixel defines the source for the bits set to 0. -.LP -For -.PN XYPixmap -and -.PN ZPixmap , -the depth must match the depth of the drawable (or a -.PN Match -error results). -For -.PN XYPixmap , -the image must be sent in XY format. -For -.PN ZPixmap , -the image must be sent in the Z format defined for the given depth. -.LP -The left-pad must be zero for -.PN ZPixmap -format (or a -.PN Match -error results). -For -.PN Bitmap -and -.PN XYPixmap -format, -left-pad must be less than bitmap-scanline-pad as given in the server -connection setup information (or a -.PN Match -error results). -The first left-pad bits in every scanline are to be ignored by the server. -The actual image begins that many bits into the data. -The width argument defines the width of the actual image -and does not include left-pad. -.LP -GC components: function, plane-mask, subwindow-mode, clip-x-origin, -clip-y-origin, clip-mask -.LP -GC mode-dependent components: foreground, background -.sp -.LP -.sM -.IN "GetImage" "" "@DEF@" -.PN GetImage -.LP -.in +.2i -\fIdrawable\fP\^: DRAWABLE -.br -\fIx\fP, \fIy\fP\^: INT16 -.br -\fIwidth\fP, \fIheight\fP\^: CARD16 -.br -\fIplane-mask\fP\^: CARD32 -.br -\fIformat\fP\^: -.Pn { XYPixmap , -.PN ZPixmap } -.in -.2i -.LP - \(-> -.LP -.in +.2i -depth: CARD8 -.br -visual: VISUALID or -.PN None -.br -data: LISTofBYTE -.in -.2i -.LP -.in +.2i -Errors: -.PN Drawable , -.PN Match , -.PN Value -.in -.2i -.eM -.LP -This request returns the contents of the given rectangle of the drawable in the -given format. -The x and y coordinates are relative to the drawable's origin -and define the upper-left corner of the rectangle. -If -.PN XYPixmap -is specified, -only the bit planes specified in plane-mask are transmitted, -with the planes appearing from most significant to least significant -in bit order. -If -.PN ZPixmap -is specified, then bits in all planes not specified in plane-mask are -transmitted as zero. -Range checking is not performed on plane-mask; -extraneous bits are simply ignored. -The returned depth is as specified when the drawable was created -and is the same as a depth component in a FORMAT structure (in the connection -setup), not a bits-per-pixel component. -If the drawable is a window, -its visual type is returned. -If the drawable is a pixmap, -the visual is -.PN None . -.LP -If the drawable is a pixmap, -then the given rectangle must be wholly contained within the pixmap (or a -.PN Match -error results). -If the drawable is a window, -the window must be viewable, -and it must be the case that, -if there were no inferiors or overlapping windows, -the specified rectangle of the window would be fully visible on the screen -and wholly contained within the outside edges of the window (or a -.PN Match -error results). -Note that the borders of the window can be included and read with this request. -If the window has a backing store, -then the backing-store contents are returned for regions of the window -that are obscured by noninferior windows; -otherwise, the returned contents of such obscured regions are undefined. -Also undefined are the returned contents of visible -regions of inferiors of different depth than the specified window. -The pointer cursor image is not included in the contents returned. -.LP -This request is not general-purpose in the same sense as other -graphics-related requests. -It is intended specifically for rudimentary hardcopy support. -.sp -.LP -.sM -.IN "PolyText8" "" "@DEF@" -.PN PolyText8 -.LP -.in +.2i -\fIdrawable\fP\^: DRAWABLE -.br -\fIgc\fP\^: GCONTEXT -.br -\fIx\fP, \fIy\fP\^: INT16 -.br -\fIitems\fP\^: LISTofTEXTITEM8 -.in -.2i -.LP -.in +.2i -where: -.TS -r l. -TEXTITEM8: TEXTELT8 or FONT -.br -TEXTELT8: [delta: INT8 -.br - \ string: STRING8] -.TE -.in -.2i -.LP -.in +.2i -Errors: -.PN Drawable , -.PN Font , -.PN GContext , -.PN Match -.in -.2i -.eM -.LP -The x and y coordinates are relative to the drawable's origin -and specify the baseline starting position (the initial character origin). -Each text item is processed in turn. -A font item causes the font to be stored in gc -and to be used for subsequent text. -Switching among fonts does not affect the next character origin. -A text element delta specifies an additional change in the position -along the x axis before the string is drawn; -the delta is always added to the character origin. -Each character image, as defined by the font in gc, -is treated as an additional mask for a fill operation on the drawable. -.LP -All contained FONTs are always transmitted most significant byte first. -.LP -If a -.PN Font -error is generated for an item, -the previous items may have been drawn. -.LP -For fonts defined with 2-byte matrix indexing, -each STRING8 byte is interpreted as a byte2 value of a CHAR2B with a byte1 -value of zero. -.LP -GC components: function, plane-mask, fill-style, font, -subwindow-mode, clip-x-origin, clip-y-origin, clip-mask -.LP -GC mode-dependent components: foreground, background, tile, stipple, -tile-stipple-x-origin, tile-stipple-y-origin -.sp -.LP -.sM -.IN "PolyText16" "" "@DEF@" -.PN PolyText16 -.LP -.in +.2i -\fIdrawable\fP\^: DRAWABLE -.br -\fIgc\fP\^: GCONTEXT -.br -\fIx\fP, \fIy\fP\^: INT16 -.br -\fIitems\fP\^: LISTofTEXTITEM16 -.in -.2i -.LP -.in +.2i -where: -.TS -r l. -TEXTITEM16: TEXTELT16 or FONT -.br -TEXTELT16: [delta: INT8 -.br - \ string: STRING16] -.TE -.in -.2i -.LP -.in +.2i -Errors: -.PN Drawable , -.PN Font , -.PN GContext , -.PN Match -.in -.2i -.eM -.LP -This request is similar to -.PN PolyText8 , -except 2-byte (or 16-bit) characters are used. -For fonts defined with linear indexing rather than 2-byte matrix indexing, -the server will interpret each CHAR2B as a 16-bit number that -has been transmitted most significant byte first (that is, byte1 of the -CHAR2B is taken as the most significant byte). -.sp -.LP -.sM -.IN "ImageText8" "" "@DEF@" -.PN ImageText8 -.LP -.in +.2i -\fIdrawable\fP\^: DRAWABLE -.br -\fIgc\fP\^: GCONTEXT -.br -\fIx\fP, \fIy\fP\^: INT16 -.br -\fIstring\fP\^: STRING8 -.in -.2i -.LP -.in +.2i -Errors: -.PN Drawable , -.PN GContext , -.PN Match -.in -.2i -.eM -.LP -The x and y coordinates are relative to the drawable's origin -and specify the baseline starting position (the initial character origin). -The effect is first to fill a destination rectangle with the background -pixel defined in gc and then to paint the text with the foreground pixel. -The upper-left corner of the filled rectangle is at: -.DS -[x, y \- font-ascent] -.DE -.LP -the width is: -.DS -overall-width -.DE -.LP -and the height is: -.DS -font-ascent + font-descent -.DE -.LP -The overall-width, font-ascent, and font-descent are as -they would be returned by a -.PN QueryTextExtents -call using gc and string. -.LP -The function and fill-style defined in gc are ignored for this request. -The effective function is -.PN Copy , -and the effective fill-style -.PN Solid . -.LP -For fonts defined with 2-byte matrix indexing, -each STRING8 byte is interpreted as a byte2 value of a CHAR2B with a byte1 -value of zero. -.LP -GC components: plane-mask, foreground, background, font, -subwindow-mode, clip-x-origin, clip-y-origin, clip-mask -.sp -.LP -.sM -.IN "ImageText16" "" "@DEF@" -.PN ImageText16 -.LP -.in +.2i -\fIdrawable\fP\^: DRAWABLE -.br -\fIgc\fP\^: GCONTEXT -.br -\fIx\fP, \fIy\fP\^: INT16 -.br -\fIstring\fP\^: STRING16 -.in -.2i -.LP -.in +.2i -Errors: -.PN Drawable , -.PN GContext , -.PN Match -.in -.2i -.eM -.LP -This request is similar to -.PN ImageText8 , -except 2-byte (or 16-bit) characters are used. -For fonts defined with linear indexing rather than 2-byte matrix indexing, -the server will interpret each CHAR2B as a 16-bit number that -has been transmitted most significant byte first (that is, byte1 of the -CHAR2B is taken as the most significant byte). -.sp -.LP -.sM -.IN "CreateColormap" "" "@DEF@" -.PN CreateColormap -.LP -.in +.2i -\fImid\fP\^: COLORMAP -.br -\fIvisual\fP\^: VISUALID -.br -\fIwindow\fP\^: WINDOW -.br -\fIalloc\fP\^: -.Pn { None , -.PN All } -.in -.2i -.LP -.in +.2i -Errors: -.PN Alloc , -.PN IDChoice , -.PN Match , -.PN Value , -.PN Window -.in -.2i -.eM -.LP -This request creates a colormap of the specified visual type for the screen -on which the window resides and associates the identifier mid with it. -The visual type must be one supported by the screen (or a -.PN Match -error results). -The initial values of the colormap entries are undefined for classes -.PN GrayScale , -.PN PseudoColor , -and -.PN DirectColor . -For -.PN StaticGray , -.PN StaticColor , -and -.PN TrueColor , -the entries will have defined values, -but those values are specific to the visual and are not defined -by the core protocol. -For -.PN StaticGray , -.PN StaticColor , -and -.PN TrueColor , -alloc must be specified as -.PN None -(or a -.PN Match -error results). -For the other classes, if alloc is -.PN None , -the colormap initially has no allocated entries, -and clients can allocate entries. -.LP -If alloc is -.PN All , -then the entire colormap is allocated writable. -The initial values of all allocated entries are undefined. -For -.PN GrayScale -and -.PN PseudoColor , -the effect is as if an -.PN AllocColorCells -request returned all pixel values from zero to N \- 1, -where N is the colormap-entries value in the specified visual. -For -.PN DirectColor , -the effect is as if an -.PN AllocColorPlanes -request returned a pixel value of zero and red-mask, -green-mask, and blue-mask values containing the same bits as the -corresponding masks in the specified visual. -However, -in all cases, none of these entries can be freed with -.PN FreeColors . -.sp -.LP -.sM -.IN "FreeColormap" "" "@DEF@" -.PN FreeColormap -.LP -.in +.2i -\fIcmap\fP\^: COLORMAP -.in -.2i -.LP -.in +.2i -Errors: -.PN Colormap -.in -.2i -.eM -.LP -This request deletes the association between the resource ID and the colormap -and frees the colormap storage. -If the colormap is an installed map for a screen, -it is uninstalled (see -.PN UninstallColormap -request). -If the colormap is defined as the colormap for a window (by means of -.PN CreateWindow -or -.PN ChangeWindowAttributes ), -the colormap for the window is changed to -.PN None , -and a -.PN ColormapNotify -event is generated. -The protocol does not define the colors displayed for a window with a colormap of -.PN None . -.LP -This request has no effect on a default colormap for a screen. -.sp -.LP -.sM -.IN "CopyColormapAndFree" "" "@DEF@" -.PN CopyColormapAndFree -.LP -.in +.2i -\fImid\fP, \fIsrc-cmap\fP\^: COLORMAP -.in -.2i -.LP -.in +.2i -Errors: -.PN Alloc , -.PN Colormap , -.PN IDChoice -.in -.2i -.eM -.LP -This request creates a colormap of the same visual type -and for the same screen as src-cmap, -and it associates identifier mid with it. -It also moves all of the client's existing allocations from src-cmap -to the new colormap with their color values intact -and their read-only or writable characteristics intact, -and it frees those entries in src-cmap. -Color values in other entries in the new colormap are undefined. -If src-cmap was created by the client with alloc -.PN All -(see -.PN CreateColormap -request), -then the new colormap is also created with alloc -.PN All , -all color values for all entries are copied from src-cmap, -and then all entries in src-cmap are freed. -If src-cmap was not created by the client with alloc -.PN All , -then the allocations to be moved are all those pixels and planes that have -been allocated by the client using either -.PN AllocColor , -.PN AllocNamedColor , -.PN AllocColorCells , -or -.PN AllocColorPlanes -and that have not been freed since they were allocated. -.sp -.LP -.sM -.IN "InstallColormap" "" "@DEF@" -.PN InstallColormap -.LP -.in +.2i -\fIcmap\fP\^: COLORMAP -.in -.2i -.LP -.in +.2i -Errors: -.PN Colormap -.in -.2i -.eM -.LP -This request makes this colormap an installed map for its screen. -All windows associated with this colormap immediately display with true colors. -As a side effect, -additional colormaps might be implicitly installed -or uninstalled by the server. -Which other colormaps get installed or uninstalled is server-dependent -except that the required list must remain installed. -.LP -If cmap is not already an installed map, a -.PN ColormapNotify -event is generated on every window having cmap as an attribute. -In addition, -for every other colormap that is installed or uninstalled as a result -of the request, a -.PN ColormapNotify -event is generated on every window having that colormap as an attribute. -.LP -At any time, there is a subset of the installed maps that are viewed as an -ordered list and are called the required list. -The length of the required list is at most M, -where M is the min-installed-maps specified for the screen in the -connection setup. -The required list is maintained as follows. -When a colormap is an explicit argument to -.PN InstallColormap , -it is added to the head of the list; the list is truncated at the -tail, if necessary, to keep the length of the list to at most M. -When a colormap is an explicit argument to -.PN UninstallColormap -and it is in the required list, it is removed from the list. -A colormap is not added to the required list when it is installed implicitly -by the server, and the server cannot implicitly uninstall a colormap that is -in the required list. -.LP -Initially the default colormap for a screen is installed (but is not in -the required list). -.sp -.LP -.sM -.IN "UninstallColormap" "" "@DEF@" -.PN UninstallColormap -.LP -.in +.2i -\fIcmap\fP\^: COLORMAP -.in -.2i -.LP -.in +.2i -Errors: -.PN Colormap -.in -.2i -.eM -.LP -If cmap is on the required list for its screen (see -.PN InstallColormap -request), -it is removed from the list. -As a side effect, -cmap might be uninstalled, -and additional colormaps might be implicitly installed or uninstalled. -Which colormaps get installed or uninstalled is server-dependent -except that the required list must remain installed. -.LP -If cmap becomes uninstalled, a -.PN ColormapNotify -event is generated on every window having cmap as an attribute. -In addition, -for every other colormap that is installed or uninstalled as a result of -the request, a -.PN ColormapNotify -event is generated on every window having that colormap as an attribute. -.sp -.LP -.sM -.IN "ListInstalledColormaps" "" "@DEF@" -.PN ListInstalledColormaps -.LP -.in +.2i -\fIwindow\fP\^: WINDOW -.in -.2i -.LP - \(-> -.LP -.in +.2i -cmaps: LISTofCOLORMAP -.in -.2i -.LP -.in +.2i -Errors: -.PN Window -.in -.2i -.eM -.LP -This request returns a list of the currently installed colormaps for the -screen of the specified window. -The order of colormaps is not significant, -and there is no explicit indication of the required list (see -.PN InstallColormap -request). -.sp -.LP -.sM -.IN "AllocColor" "" "@DEF@" -.PN AllocColor -.LP -.in +.2i -\fIcmap\fP\^: COLORMAP -.br -\fIred\fP, \fIgreen\fP, \fIblue\fP\^: CARD16 -.in -.2i -.LP - \(-> -.LP -.in +.2i -pixel: CARD32 -.br -red, green, blue: CARD16 -.in -.2i -.LP -.in +.2i -Errors: -.PN Alloc , -.PN Colormap -.in -.2i -.eM -.LP -This request allocates a read-only colormap entry corresponding to the closest -RGB values provided by the hardware. -It also returns the pixel and the RGB values actually used. -Multiple clients requesting the same effective RGB values can be assigned -the same read-only entry, allowing entries to be shared. -.sp -.LP -.sM -.IN "AllocNamedColor" "" "@DEF@" -.PN AllocNamedColor -.LP -.in +.2i -\fIcmap\fP\^: COLORMAP -.br -\fIname\fP\^: STRING8 -.in -.2i -.LP - \(-> -.LP -.in +.2i -pixel: CARD32 -.br -exact-red, exact-green, exact-blue: CARD16 -.br -visual-red, visual-green, visual-blue: CARD16 -.in -.2i -.LP -.in +.2i -Errors: -.PN Alloc , -.PN Colormap , -.PN Name -.in -.2i -.eM -.LP -This request looks up the named color with respect to the screen associated -with the colormap. -Then, it does an -.PN AllocColor -on cmap. -The name should use the ISO Latin-1 encoding, -and uppercase and lowercase do not matter. -The exact RGB values specify the true values for the color, -and the visual values specify the values actually used in the colormap. -.sp -.LP -.sM -.IN "AllocColorCells" "" "@DEF@" -.PN AllocColorCells -.LP -.in +.2i -\fIcmap\fP\^: COLORMAP -.br -\fIcolors\fP, \fIplanes\fP\^: CARD16 -.br -\fIcontiguous\fP\^: BOOL -.in -.2i -.LP - \(-> -.LP -.in +.2i -pixels, masks: LISTofCARD32 -.in -.2i -.LP -.in +.2i -Errors: -.PN Alloc , -.PN Colormap , -.PN Value -.in -.2i -.eM -.LP -The number of colors must be positive, -and the number of planes must be nonnegative (or a -.PN Value -error results). -If C colors and P planes are requested, -then C pixels and P masks are returned. -No mask will have any bits in common with any other mask -or with any of the pixels. -By ORing together masks and pixels, -C*%2 sup P% distinct pixels can be produced; -all of these are allocated writable by the request. -For -.PN GrayScale -or -.PN PseudoColor , -each mask will have exactly one bit set to 1; for -.PN DirectColor , -each will have exactly three bits set to 1. -If contiguous is -.PN True -and if all masks are ORed together, -a single contiguous set of bits will be formed for -.PN GrayScale -or -.PN PseudoColor , -and three contiguous sets of bits (one within each pixel subfield) for -.PN DirectColor . -The RGB values of the allocated entries are undefined. -.sp -.LP -.sM -.IN "AllocColorPlanes" "" "@DEF@" -.PN AllocColorPlanes -.LP -.in +.2i -\fIcmap\fP\^: COLORMAP -.br -\fIcolors\fP, \fIreds\fP, \fIgreens\fP, \fIblues\fP\^: CARD16 -.br -\fIcontiguous\fP\^: BOOL -.in -.2i -.LP - \(-> -.LP -.in +.2i -pixels: LISTofCARD32 -.br -red-mask, green-mask, blue-mask: CARD32 -.in -.2i -.LP -.in +.2i -Errors: -.PN Alloc , -.PN Colormap , -.PN Value -.in -.2i -.eM -.LP -The number of colors must be positive, -and the reds, greens, and blues must be nonnegative (or a -.PN Value -error results). -If C colors, R reds, G greens, and B blues are requested, -then C pixels are returned, and the masks have R, G, and B bits set, -respectively. -If contiguous is -.PN True , -then each mask will have a contiguous set of bits. -No mask will have any bits in common with any other mask -or with any of the pixels. -For -.PN DirectColor , -each mask will lie within the corresponding pixel subfield. -By ORing together subsets of masks with pixels, -C*%2 sup R+G+B% distinct pixels can be produced; -all of these are allocated writable by the request. -The initial RGB values of the allocated entries are undefined. -In the colormap, -there are only C*%2 sup R% independent red entries, -C*%2 sup G% independent green entries, -and C*%2 sup B% independent blue entries. -This is true even for -.PN PseudoColor . -When the colormap entry for a pixel value is changed using -.PN StoreColors -or -.PN StoreNamedColor , -the pixel is decomposed according to the masks and the -corresponding independent entries are updated. -.sp -.LP -.sM -.IN "FreeColors" "" "@DEF@" -.PN FreeColors -.LP -.in +.2i -\fIcmap\fP\^: COLORMAP -.br -\fIpixels\fP\^: LISTofCARD32 -.br -\fIplane-mask\fP\^: CARD32 -.in -.2i -.LP -.in +.2i -Errors: -.PN Access , -.PN Colormap , -.PN Value -.in -.2i -.eM -.LP -The plane-mask should not have any bits in common with any of the -pixels. -The set of all pixels is produced by ORing together subsets of -plane-mask with the pixels. -The request frees all of these pixels that -were allocated by the client (using -.PN AllocColor , -.PN AllocNamedColor , -.PN AllocColorCells , -and -.PN AllocColorPlanes ). -Note that freeing an -individual pixel obtained from -.PN AllocColorPlanes -may not actually allow it to be reused until all of its related pixels -are also freed. -Similarly, a read-only entry is not actually freed until it has been -freed by all clients, and if a client allocates the same read-only entry -multiple times, it must free the entry that many times before the -entry is actually freed. -.LP -All specified pixels that are allocated by the client in cmap are freed, -even if one or more pixels produce an error. -A -.PN Value -error is generated if a specified pixel is not a valid index into cmap. -An -.PN Access -error is generated if a specified pixel is not allocated by the -client (that is, is unallocated or is only allocated by another client) -or if the colormap was created with all entries writable (using an alloc -value of -.PN All -in -.PN CreateColormap ). -If more than one pixel is in error, -it is arbitrary as to which pixel is reported. -.sp -.LP -.sM -.IN "StoreColors" "" "@DEF@" -.PN StoreColors -.LP -.in +.2i -\fIcmap\fP\^: COLORMAP -.br -\fIitems\fP\^: LISTofCOLORITEM -.in -.2i -.LP -.in +.2i -where: -.TS -l l. -COLORITEM: [pixel: CARD32 -.br - \ do-red, do-green, do-blue: BOOL -.br - \ red, green, blue: CARD16] -.TE -.in -.2i -.LP -.in +.2i -Errors: -.PN Access , -.PN Colormap , -.PN Value -.in -.2i -.eM -.LP -This request changes the colormap entries of the specified pixels. -The do-red, do-green, and do-blue fields indicate which components -should actually be changed. -If the colormap is an installed map for its screen, -the changes are visible immediately. -.LP -All specified pixels that are allocated writable in cmap (by any client) -are changed, even if one or more pixels produce an error. -A -.PN Value -error is generated if a specified pixel is not a valid index into cmap, and an -.PN Access -error is generated if a specified pixel is unallocated or is allocated -read-only. -If more than one pixel is in error, -it is arbitrary as to which pixel is reported. -.sp -.LP -.sM -.IN "StoreNamedColor" "" "@DEF@" -.PN StoreNamedColor -.LP -.in +.2i -\fIcmap\fP\^: COLORMAP -.br -\fIpixel\fP\^: CARD32 -.br -\fIname\fP\^: STRING8 -.br -\fIdo-red\fP, \fIdo-green\fP\^, \fIdo-blue\fP\^: BOOL -.in -.2i -.LP -.in +.2i -Errors: -.PN Access , -.PN Colormap , -.PN Name , -.PN Value -.in -.2i -.eM -.LP -This request looks up the named color with respect to the screen associated -with cmap and then does a -.PN StoreColors -in cmap. -The name should use the ISO Latin-1 encoding, -and uppercase and lowercase do not matter. -The -.PN Access -and -.PN Value -errors are the same as in -.PN StoreColors . -.sp -.LP -.sM -.IN "QueryColors" "" "@DEF@" -.PN QueryColors -.LP -.in +.2i -\fIcmap\fP\^: COLORMAP -.br -\fIpixels\fP\^: LISTofCARD32 -.in -.2i -.LP - \(-> -.LP -.in +.2i -colors: LISTofRGB -.in -.2i -.LP -.in +.2i -where: -.in -.2i -.LP -.in +.2i -RGB: [red, green, blue: CARD16] -.in -.2i -.LP -.in +.2i -Errors: -.PN Colormap , -.PN Value -.in -.2i -.eM -.LP -This request returns the hardware-specific color values stored in cmap for -the specified pixels. -The values returned for an unallocated entry are undefined. -A -.PN Value -error is generated if a pixel is not a valid index into cmap. -If more than one pixel is in error, -it is arbitrary as to which pixel is reported. -.sp -.LP -.sM -.IN "LookupColor" "" "@DEF@" -.PN LookupColor -.LP -.in +.2i -\fIcmap\fP\^: COLORMAP -.br -\fIname\fP\^: STRING8 -.in -.2i -.LP - \(-> -.LP -.in +.2i -exact-red, exact-green, exact-blue: CARD16 -.br -visual-red, visual-green, visual-blue: CARD16 -.in -.2i -.LP -.in +.2i -Errors: -.PN Colormap , -.PN Name -.in -.2i -.eM -.LP -This request looks up the string name of a color with respect to the screen -associated with cmap and returns both the exact color values and -the closest values provided by the hardware with respect to the visual -type of cmap. -The name should use the ISO Latin-1 encoding, -and uppercase and lowercase do not matter. -.sp -.LP -.sM -.IN "CreateCursor" "" "@DEF@" -.PN CreateCursor -.LP -.in +.2i -\fIcid\fP\^: CURSOR -.br -\fIsource\fP\^: PIXMAP -.br -\fImask\fP\^: PIXMAP or -.PN None -.br -\fIfore-red\fP, \fIfore-green\fP, \fIfore-blue\fP\^: CARD16 -.br -\fIback-red\fP, \fIback-green\fP, \fIback-blue\fP\^: CARD16 -.br -\fIx\fP, \fIy\fP\^: CARD16 -.in -.2i -.LP -.in +.2i -Errors: -.PN Alloc , -.PN IDChoice , -.PN Match , -.PN Pixmap -.in -.2i -.eM -.LP -This request creates a cursor and associates identifier cid with it. -The foreground and background RGB values must be specified, -even if the server only has a -.PN StaticGray -or -.PN GrayScale -screen. -The foreground is used for the bits set to 1 in the source, -and the background is used for the bits set to 0. -Both source and mask (if specified) must have depth one (or a -.PN Match -error results), but they can have any root. -The mask pixmap defines the shape of the cursor. -That is, -the bits set to 1 in the mask define which source pixels will be displayed, -and where the mask has bits set to 0, -the corresponding bits of the source pixmap are ignored. -If no mask is given, -all pixels of the source are displayed. -The mask, if present, must be the same size as the source (or a -.PN Match -error results). -The x and y coordinates define the hotspot relative to the source's origin -and must be a point within the source (or a -.PN Match -error results). -.LP -The components of the cursor may be transformed arbitrarily to meet -display limitations. -.LP -The pixmaps can be freed immediately if no further explicit references -to them are to be made. -.LP -Subsequent drawing in the source or mask pixmap has an undefined effect -on the cursor. -The server might or might not make a copy of the pixmap. -.sp -.LP -.sM -.IN "CreateGlyphCursor" "" "@DEF@" -.PN CreateGlyphCursor -.LP -.in +.2i -\fIcid\fP\^: CURSOR -.br -\fIsource-font\fP\^: FONT -.br -\fImask-font\fP\^: FONT or -.PN None -.br -\fIsource-char\fP, \fImask-char\fP\^: CARD16 -.br -\fIfore-red\fP, \fIfore-green\fP, \fIfore-blue\fP\^: CARD16 -.br -\fIback-red\fP, \fIback-green\fP, \fIback-blue\fP\^: CARD16 -.in -.2i -.LP -.in +.2i -Errors: -.PN Alloc , -.PN Font , -.PN IDChoice , -.PN Value -.in -.2i -.eM -.LP -This request is similar to -.PN CreateCursor , -except the source and mask bitmaps are obtained from the specified font glyphs. -The source-char must be a defined glyph in source-font, -and if mask-font is given, mask-char must be a defined glyph in mask-font -(or a -.PN Value -error results). -The mask font and character are optional. -The origins of the source and mask (if it is defined) glyphs -are positioned coincidently and define the hotspot. -The source and mask need not have the same bounding box metrics, -and there is no restriction on the placement of the hotspot relative -to the bounding boxes. -If no mask is given, -all pixels of the source are displayed. -Note that source-char and mask-char are CARD16, not CHAR2B. -For 2-byte matrix fonts, -the 16-bit value should be formed with byte1 in the most significant byte -and byte2 in the least significant byte. -.LP -The components of the cursor may be transformed arbitrarily to meet -display limitations. -.LP -The fonts can be freed immediately if no further explicit references to -them are to be made. -.sp -.LP -.sM -.IN "FreeCursor" "" "@DEF@" -.PN FreeCursor -.LP -.in +.2i -\fIcursor\fP\^: CURSOR -.in -.2i -.LP -.in +.2i -Errors: -.PN Cursor -.in -.2i -.eM -.LP -This request deletes the association between the resource ID and the cursor. -The cursor storage will be freed when no other resource references it. -.sp -.LP -.sM -.IN "RecolorCursor" "" "@DEF@" -.PN RecolorCursor -.LP -.in +.2i -\fIcursor\fP\^: CURSOR -.br -\fIfore-red\fP, \fIfore-green\fP, \fIfore-blue\fP\^: CARD16 -.br -\fIback-red\fP, \fIback-green\fP, \fIback-blue\fP\^: CARD16 -.in -.2i -.LP -.in +.2i -Errors: -.PN Cursor -.in -.2i -.eM -.LP -This request changes the color of a cursor. -If the cursor is being displayed on a screen, -the change is visible immediately. -.sp -.LP -.sM -.IN "QueryBestSize" "" "@DEF@" -.PN QueryBestSize -.LP -.in +.2i -\fIclass\fP: -.Pn { Cursor , -.PN Tile , -.PN Stipple } -.br -\fIdrawable\fP\^: DRAWABLE -.br -\fIwidth\fP, \fIheight\fP\^: CARD16 -.in -.2i -.LP - \(-> -.LP -.in +.2i -width, height: CARD16 -.in -.2i -.LP -.in +.2i -Errors: -.PN Drawable , -.PN Match , -.PN Value -.in -.2i -.eM -.LP -This request returns the best size that is closest to the argument size. -For -.PN Cursor , -this is the largest size that can be fully displayed. -For -.PN Tile , -this is the size that can be tiled fastest. -For -.PN Stipple , -this is the size that can be stippled fastest. -.LP -For -.PN Cursor , -the drawable indicates the desired screen. -For -.PN Tile -and -.PN Stipple , -the drawable indicates the screen and also possibly the window class and depth. -An -.PN InputOnly -window cannot be used as the drawable for -.PN Tile -or -.PN Stipple -(or a -.PN Match -error results). -.sp -.LP -.sM -.IN "QueryExtension" "" "@DEF@" -.PN QueryExtension -.LP -.in +.2i -\fIname\fP\^: STRING8 -.in -.2i -.LP - \(-> -.LP -.in +.2i -present: BOOL -.br -major-opcode: CARD8 -.br -first-event: CARD8 -.br -first-error: CARD8 -.in -.2i -.eM -.LP -This request determines if the named extension is present. -If so, -the major opcode for the extension is returned, if it has one. -Otherwise, zero is returned. -Any minor opcode and the request formats are specific to the extension. -If the extension involves additional event types, -the base event type code is returned. -Otherwise, zero is returned. -The format of the events is specific to the extension. -If the extension involves additional error codes, -the base error code is returned. -Otherwise, zero is returned. -The format of additional data in the errors is specific to the extension. -.LP -The extension name should use the ISO Latin-1 encoding, -and uppercase and lowercase matter. -.sp -.LP -.sM -.IN "ListExtensions" "" "@DEF@" -.PN ListExtensions -.LP - \(-> -.LP -.in +.2i -names: LISTofSTRING8 -.in -.2i -.eM -.LP -This request returns a list of all extensions supported by the server. -.LP -.sM -.IN "SetModifierMapping" "" "@DEF@" -.PN SetModifierMapping -.LP -.in +.2i -\fIkeycodes-per-modifier\fP\^: CARD8 -.br -\fIkeycodes\fP\^: LISTofKEYCODE -.in -.2i -.LP - \(-> -.LP -.in +.2i -status: -.Pn { Success , -.PN Busy , -.PN Failed } -.in -.2i -.LP -.in +.2i -Errors: -.PN Alloc , -.PN Value -.in -.2i -.eM -.LP -This request specifies the keycodes (if any) of the keys to be used as -modifiers. -The number of keycodes in the list must be 8*keycodes-per-modifier (or a -.PN Length -error results). -The keycodes are divided into eight sets, -with each set containing keycodes-per-modifier elements. -The sets are assigned to the modifiers -.PN Shift , -.PN Lock , -.PN Control , -.PN Mod1 , -.PN Mod2 , -.PN Mod3 , -.PN Mod4 , -and -.PN Mod5 , -in order. -Only nonzero keycode values are used within each set; -zero values are ignored. -All of the nonzero keycodes must be in the range specified by min-keycode -and max-keycode in the connection setup (or a -.PN Value -error results). -The order of keycodes within a set does not matter. -If no nonzero values are specified in a set, -the use of the corresponding modifier is disabled, -and the modifier bit will always be zero. -Otherwise, the modifier bit will be one whenever -at least one of the keys in the corresponding set is in the down -position. -.LP -A server can impose restrictions on how modifiers can be changed (for example, -if certain keys do not generate up transitions in hardware, -if auto-repeat cannot be disabled on certain keys, -or if multiple keys per modifier are not supported). -The status reply is -.PN Failed -if some such restriction is violated, -and none of the modifiers is changed. -.LP -If the new nonzero keycodes specified for a modifier differ from those -currently defined and any (current or new) keys for that modifier are -logically in the down state, then the status reply is -.PN Busy , -and none of the modifiers is changed. -.LP -This request generates a -.PN MappingNotify -event on a -.PN Success -status. -.sp -.LP -.sM -.IN "GetModifierMapping" "" "@DEF@" -.PN GetModifierMapping -.LP - \(-> -.LP -.in +.2i -keycodes-per-modifier: CARD8 -.br -keycodes: LISTofKEYCODE -.in -.2i -.eM -.LP -This request returns the keycodes of the keys being used as modifiers. -The number of keycodes in the list is 8*keycodes-per-modifier. -The keycodes are divided into eight sets, -with each set containing keycodes-per-modifier elements. -The sets are assigned to the modifiers -.PN Shift , -.PN Lock , -.PN Control , -.PN Mod1 , -.PN Mod2 , -.PN Mod3 , -.PN Mod4 , -and -.PN Mod5 , -in order. -The keycodes-per-modifier value is chosen arbitrarily by the server; -zeroes are used to fill in unused elements within each set. -If only zero values are given in a set, -the use of the corresponding modifier has been disabled. -The order of keycodes within each set is chosen arbitrarily by the server. -.sp -.LP -.sM -.IN "ChangeKeyboardMapping" "" "@DEF@" -.PN ChangeKeyboardMapping -.LP -.in +.2i -\fIfirst-keycode\fP\^: KEYCODE -.br -\fIkeysyms-per-keycode\fP\^: CARD8 -.br -\fIkeysyms\fP\^: LISTofKEYSYM -.in -.2i -.LP -.in +.2i -Errors: -.PN Alloc , -.PN Value -.in -.2i -.eM -.LP -This request defines the symbols for the specified number of keycodes, -starting with the specified keycode. -The symbols for keycodes outside this range remained unchanged. -The number of elements in the keysyms list must be a multiple of -keysyms-per-keycode (or a -.PN Length -error results). -The first-keycode must be greater than or equal to min-keycode as returned -in the connection setup (or a -.PN Value -error results) and: -.DS -first-keycode + (keysyms-length / keysyms-per-keycode) \- 1 -.DE -.LP -must be less than or equal to max-keycode as returned in the connection -setup (or a -.PN Value -error results). -KEYSYM number N (counting from zero) for keycode K has an index -(counting from zero) of: -.DS -(K \- first-keycode) * keysyms-per-keycode + N -.DE -.LP -in keysyms. -The keysyms-per-keycode can be chosen arbitrarily by the client -to be large enough to hold all desired symbols. -A special KEYSYM value of -.PN NoSymbol -should be used to fill in unused elements for individual keycodes. -It is legal for -.PN NoSymbol -to appear in nontrailing positions of the effective list for a keycode. -.LP -This request generates a -.PN MappingNotify -event. -.LP -There is no requirement that the server interpret this mapping; -it is merely stored for reading and writing by clients (see section 5). -.sp -.LP -.sM -.IN "GetKeyboardMapping" "" "@DEF@" -.PN GetKeyboardMapping -.LP -.in +.2i -\fIfirst-keycode\fP\^: KEYCODE -.br -\fIcount\fP\^: CARD8 -.in -.2i -.LP - \(-> -.LP -.in +.2i -keysyms-per-keycode: CARD8 -.br -keysyms: LISTofKEYSYM -.in -.2i -.LP -.in +.2i -Errors: -.PN Value -.in -.2i -.eM -.LP -This request returns the symbols for the specified number of keycodes, -starting with the specified keycode. -The first-keycode must be greater than or equal to -min-keycode as returned in the connection setup (or a -.PN Value -error results), and: -.DS -first-keycode + count \- 1 -.DE -.LP -must be less than or equal to max-keycode as returned in the connection setup -(or a -.PN Value -error results). -The number of elements in the keysyms list is: -.DS -count * keysyms-per-keycode -.DE -.LP -and KEYSYM number N (counting from zero) for keycode K has an index -(counting from zero) of: -.DS -(K \- first-keycode) * keysyms-per-keycode + N -.DE -.LP -in keysyms. -The keysyms-per-keycode value is chosen arbitrarily by the server -to be large enough to report all requested symbols. -A special KEYSYM value of -.PN NoSymbol -is used to fill in unused elements for individual keycodes. -.sp -.LP -.sM -.IN "ChangeKeyboardControl" "" "@DEF@" -.PN ChangeKeyboardControl -.LP -.in +.2i -\fIvalue-mask\fP\^: BITMASK -.br -\fIvalue-list\fP\^: LISTofVALUE -.in -.2i -.LP -.in +.2i -Errors: -.PN Match , -.PN Value -.in -.2i -.eM -.LP -This request controls various aspects of the keyboard. -The value-mask and value-list specify which controls are to be changed. -The possible values are: -.TS H -l l. -_ -.sp 6p -.B -Control Type -.sp 6p -_ -.TH -.R -.sp 6p -T{ -key-click-percent -T} T{ -INT8 -T} -T{ -bell-percent -T} T{ -INT8 -T} -T{ -bell-pitch -T} T{ -INT16 -T} -T{ -bell-duration -T} T{ -INT16 -T} -T{ -led -T} T{ -CARD8 -T} -T{ -led-mode -T} T{ -.Pn { On , -.PN Off } -T} -T{ -key -T} T{ -KEYCODE -T} -T{ -auto-repeat-mode -T} T{ -.Pn { On , -.PN Off , -.PN Default } -T} -.sp 6p -_ -.TE -.LP -The key-click-percent sets the volume for key clicks between 0 (off) and -100 (loud) inclusive, if possible. -Setting to \-1 restores the default. -Other negative values generate a -.PN Value -error. -.LP -The bell-percent sets the base volume for the bell between 0 (off) and 100 -(loud) inclusive, if possible. -Setting to \-1 restores the default. -Other negative values generate a -.PN Value -error. -.LP -The bell-pitch sets the pitch (specified in Hz) of the bell, if possible. -Setting to \-1 restores the default. -Other negative values generate a -.PN Value -error. -.LP -The bell-duration sets the duration of the bell (specified in milliseconds), -if possible. -Setting to \-1 restores the default. -Other negative values generate a -.PN Value -error. -.LP -If both led-mode and led are specified, -then the state of that LED is changed, if possible. -If only led-mode is specified, -then the state of all LEDs are changed, if possible. -At most 32 LEDs, numbered from one, are supported. -No standard interpretation of LEDs is defined. -It is a -.PN Match -error if an led is specified without an led-mode. -.LP -If both auto-repeat-mode and key are specified, -then the auto-repeat mode of that key is changed, if possible. -If only auto-repeat-mode is specified, -then the global auto-repeat mode for the entire keyboard is changed, -if possible, without affecting the per-key settings. -It is a -.PN Match -error if a key is specified without an auto-repeat-mode. -Each key has an individual mode of whether or not it should auto-repeat -and a default setting for that mode. -In addition, there is a global mode of whether auto-repeat should be -enabled or not and a default setting for that mode. -When the global mode is -.PN On , -keys should obey their individual auto-repeat modes. -When the global mode is -.PN Off , -no keys should auto-repeat. -An auto-repeating key generates alternating -.PN KeyPress -and -.PN KeyRelease -events. -When a key is used as a modifier, -it is desirable for the key not to auto-repeat, -regardless of the auto-repeat setting for that key. -.LP -A bell generator connected with the console but not directly on the -keyboard is treated as if it were part of the keyboard. -.LP -The order in which controls are verified and altered is server-dependent. -If an error is generated, -a subset of the controls may have been altered. -.sp -.LP -.sM -.IN "GetKeyboardControl" "" "@DEF@" -.PN GetKeyboardControl -.LP - \(-> -.LP -.in +.2i -key-click-percent: CARD8 -.br -bell-percent: CARD8 -.br -bell-pitch: CARD16 -.br -bell-duration: CARD16 -.br -led-mask: CARD32 -.br -global-auto-repeat: -.Pn { On , -.PN Off } -.br -auto-repeats: LISTofCARD8 -.in -.2i -.eM -.LP -This request returns the current control values for the keyboard. -For the LEDs, -the least significant bit of led-mask corresponds to LED one, -and each one bit in led-mask indicates an LED that is lit. -The auto-repeats is a bit vector; -each one bit indicates that auto-repeat is enabled for the corresponding key. -The vector is represented as 32 bytes. -Byte N (from 0) contains the bits for keys 8N to 8N + 7, -with the least significant bit in the byte representing key 8N. -.sp -.LP -.sM -.IN "Bell" "" "@DEF@" -.PN Bell -.LP -.in +.2i -\fIpercent\fP\^: INT8 -.in -.2i -.LP -.in +.2i -Errors: -.PN Value -.in -.2i -.eM -.LP -This request rings the bell on the keyboard at a volume relative to the -base volume for the keyboard, if possible. -Percent can range from \-100 to 100 inclusive (or a -.PN Value -error results). -The volume at which the bell is rung when percent is nonnegative is: -.DS -base \- [(base * percent) / 100] + percent -.DE -.LP -When percent is negative, it is: -.DS -base + [(base * percent) / 100] -.DE -.sp -.LP -.sM -.IN "SetPointerMapping" "" "@DEF@" -.PN SetPointerMapping -.LP -.in +.2i -\fImap\fP\^: LISTofCARD8 -.in -.2i -.LP - \(-> -.LP -.in +.2i -status: -.Pn { Success , -.PN Busy } -.in -.2i -.LP -.in +.2i -Errors: -.PN Value -.in -.2i -.eM -.LP -This request sets the mapping of the pointer. -Elements of the list are indexed starting from one. -The length of the list must be the same as -.PN GetPointerMapping -would return (or a -.PN Value -error results). -The index is a core button number, -and the element of the list defines the effective number. -.LP -A zero element disables a button. -Elements are not restricted in value by the number of physical buttons, -but no two elements can have the same nonzero value (or a -.PN Value -error results). -.LP -If any of the buttons to be altered are logically in the down state, -the status reply is -.PN Busy , -and the mapping is not changed. -.LP -This request generates a -.PN MappingNotify -event on a -.PN Success -status. -.sp -.LP -.sM -.IN "GetPointerMapping" "" "@DEF@" -.PN GetPointerMapping -.LP - \(-> -.LP -.in +.2i -map: LISTofCARD8 -.in -.2i -.eM -.LP -This request returns the current mapping of the pointer. -Elements of the list are indexed starting from one. -The length of the list indicates the number of physical buttons. -.LP -The nominal mapping for a pointer is the identity mapping: map[i]=i. -.sp -.LP -.sM -.IN "ChangePointerControl" "" "@DEF@" -.PN ChangePointerControl -.LP -.in +.2i -\fIdo-acceleration\fP, \fIdo-threshold\fP\^: BOOL -.br -\fIacceleration-numerator\fP, \fIacceleration-denominator\fP\^: INT16 -.br -\fIthreshold\fP\^: INT16 -.in -.2i -.LP -.in +.2i -Errors: -.PN Value -.in -.2i -.eM -.LP -This request defines how the pointer moves. -The acceleration is a multiplier for movement expressed as a fraction. -For example, -specifying 3/1 means the pointer moves three times as fast as normal. -The fraction can be rounded arbitrarily by the server. -Acceleration only takes effect if the pointer moves more than threshold -number of pixels at once and only applies to the amount beyond the threshold. -Setting a value to \-1 restores the default. -Other negative values generate a -.PN Value -error, as does a zero value for acceleration-denominator. -.sp -.LP -.sM -.IN "GetPointerControl" "" "@DEF@" -.PN GetPointerControl -.LP - \(-> -.LP -.in +.2i -acceleration-numerator, acceleration-denominator: CARD16 -.br -threshold: CARD16 -.in -.2i -.eM -.LP -This request returns the current acceleration and threshold for the pointer. -.sp -.LP -.sM -.IN "SetScreenSaver" "" "@DEF@" -.PN SetScreenSaver -.LP -.in +.2i -\fItimeout\fP, \fIinterval\fP\^: INT16 -.br -\fIprefer-blanking\fP\^: -.Pn { Yes , -.PN No , -.PN Default } -.br -\fIallow-exposures\fP\^: -.Pn { Yes , -.PN No , -.PN Default } -.in -.2i -.LP -.in +.2i -Errors: -.PN Value -.in -.2i -.eM -.LP -The timeout and interval are specified in seconds; -setting a value to \-1 restores the default. -Other negative values generate a -.PN Value -error. -If the timeout value is zero, -screen-saver is disabled (but an activated screen-saver is not deactivated). -If the timeout value is nonzero, -screen-saver is enabled. -Once screen-saver is enabled, -if no input from the keyboard or pointer is generated for timeout seconds, -screen-saver is activated. -For each screen, -if blanking is preferred and the hardware supports video blanking, -the screen will simply go blank. -Otherwise, -if either exposures are allowed or the screen can be regenerated without -sending exposure events to clients, -the screen is changed in a server-dependent fashion to avoid phosphor burn. -Otherwise, -the state of the screens does not change, and screen-saver is not activated. -At the next keyboard or pointer input or at the next -.PN ForceScreenSaver -with mode -.PN Reset , -screen-saver is deactivated, and all screen states are restored. -.LP -If the server-dependent screen-saver method is amenable to periodic change, -interval serves as a hint about how long the change period should be, -with zero hinting that no periodic change should be made. -Examples of ways to change the screen include scrambling the color map -periodically, moving an icon image about the screen periodically, or -tiling the screen with the root window background tile, -randomly reorigined periodically. -.sp -.LP -.sM -.IN "GetScreenSaver" "" "@DEF@" -.PN GetScreenSaver -.LP - \(-> -.LP -.in +.2i -timeout, interval: CARD16 -.br -prefer-blanking: -.Pn { Yes , -.PN No } -.br -allow-exposures: -.Pn { Yes , -.PN No } -.in -.2i -.eM -.LP -This request returns the current screen-saver control values. -.sp -.LP -.sM -.IN "ForceScreenSaver" "" "@DEF@" -.PN ForceScreenSaver -.LP -.in +.2i -\fImode\fP\^: -.Pn { Activate , -.PN Reset } -.in -.2i -.LP -.in +.2i -Errors: -.PN Value -.in -.2i -.eM -.LP -If the mode is -.PN Activate -and screen-saver is currently deactivated, -then screen-saver is activated (even if screen-saver has been disabled with -a timeout value of zero). -If the mode is -.PN Reset -and screen-saver is currently enabled, -then screen-saver is deactivated (if it was activated), -and the activation timer is reset to its initial state -as if device input had just been received. -.sp -.LP -.sM -.IN "ChangeHosts" "" "@DEF@" -.PN ChangeHosts -.LP -.in +.2i -\fImode\fP\^: -.Pn { Insert , -.PN Delete } -.br -\fIhost\fP: HOST -.in -.2i -.LP -.in +.2i -Errors: -.PN Access , -.PN Value -.in -.2i -.eM -.LP -This request adds or removes the specified host from the access control list. -When the access control mechanism is enabled and a client attempts to -establish a connection to the server, -the host on which the client resides must be in the access control list, -or the client must have been granted permission by a server-dependent -method, or the server will refuse the connection. -.LP -The client must reside on the same host as the server and/or have been granted -permission by a server-dependent method to execute this request (or an -.PN Access -error results). -.LP -An initial access control list can usually be specified, -typically by naming a file that the server reads at startup and reset. -.LP -The following address families are defined. -A server is not required to support these families -and may support families not listed here. -Use of an unsupported family, an improper address format, -or an improper address length within a supported family results in a -.PN Value -error. -.LP -For the Internet family, -the address must be four bytes long. -The address bytes are in standard IP order; -the server performs no automatic swapping on the address bytes. -The Internet family supports IP version 4 addresses only. -.LP -For the InternetV6 family, the address must be sixteen bytes -long. The address bytes are in standard IP order; the -server performs no automatic swapping on the address bytes. -The InternetV6 family supports IP version 6 addresses only. -.LP -For the DECnet family, -the server performs no automatic swapping on the address bytes. -A Phase IV address is two bytes long: -the first byte contains the least significant eight bits of the node number, -and the second byte contains the most significant two bits of the node number in -the least significant two bits of the byte and the area in the most -significant six bits of the byte. -.LP -For the Chaos family, -the address must be two bytes long. -The host number is always the first byte in the address, -and the subnet number is always the second byte. -The server performs no automatic swapping on the address bytes. -.LP -For the ServerInterpreted family, the address may be of any -length up to 65535 bytes. The address consists of two strings -of ASCII characters, separated by a byte with a value of 0. -The first string represents the type of address, and the second -string contains the address value. Address types and the syntax -for their associated values will be registered via the X.Org Registry. -Implementors who wish to add implementation specific types may register -a unique prefix with the X.Org registry to prevent namespace -collisions. -.LP -Use of a host address in the ChangeHosts request is deprecated. It is -only useful when a host has a unique, constant address, a requirement -that is increasingly unmet as sites adopt dynamically assigned -addresses, network address translation gateways, IPv6 link local -addresses, and various other technologies. It also assumes all users of -a host share equivalent access rights, and as such has never been -suitable for many multi-user machine environments. Instead, more -secure forms of authentication, such as those based on shared secrets -or public key encryption, are recommended. -.sp -.LP -.sM -.IN "ListHosts" "" "@DEF@" -.PN ListHosts -.LP - \(-> -.LP -.in +.2i -mode: -.Pn { Enabled , -.PN Disabled } -.br -hosts: LISTofHOST -.in -.2i -.eM -.LP -This request returns the hosts on the access control list -and whether use of the list at connection setup is currently -enabled or disabled. -.LP -Each HOST is padded to a multiple of four bytes. -.sp -.LP -.sM -.IN "SetAccessControl" "" "@DEF@" -.PN SetAccessControl -.LP -.in +.2i -\fImode\fP\^: -.Pn { Enable , -.PN Disable } -.in -.2i -.LP -.in +.2i -Errors: -.PN Access , -.PN Value -.in -.2i -.eM -.LP -This request enables or disables the use of the access control list -at connection setups. -.LP -The client must reside on the same host as the server -and/or have been granted permission by a server-dependent method -to execute this request (or an -.PN Access -error results). -.sp -.LP -.sM -.IN "SetCloseDownMode" "" "@DEF@" -.PN SetCloseDownMode -.LP -.in +.2i -\fImode\fP: -.Pn { Destroy , -.PN RetainPermanent , -.PN RetainTemporary } -.in -.2i -.LP -.in +.2i -Errors: -.PN Value -.in -.2i -.eM -.LP -This request defines what will happen to the client's resources -at connection close. -A connection starts in -.PN Destroy -mode. -The meaning of the close-down mode is described in section 10. -.sp -.LP -.sM -.IN "KillClient" "" "@DEF@" -.PN KillClient -.LP -.in +.2i -\fIresource\fP\^: CARD32 or -.PN AllTemporary -.in -.2i -.LP -.in +.2i -Errors: -.PN Value -.in -.2i -.eM -.LP -If a valid resource is specified, -.PN KillClient -forces a close-down of the client that created the resource. -If the client has already terminated in either -.PN RetainPermanent -or -.PN RetainTemporary -mode, all of the client's resources are destroyed (see section 10). -If -.PN AllTemporary -is specified, -then the resources of all clients that have terminated in -.PN RetainTemporary -are destroyed. -.sp -.LP -.sM -.IN "NoOperation" "" "@DEF@" -.PN NoOperation -.eM -.LP -This request has no arguments and no results, -but the request length field -allows the request to be any multiple of four bytes in length. -The bytes contained in the request are uninterpreted by the server. -.LP -This request can be used in its minimum four byte form as padding where -necessary by client libraries that find it convenient to force requests -to begin on 64-bit boundaries. -.NH 1 -Connection Close -.XS -\*(SN Connection Close -.XE -.LP -At connection close, -all event selections made by the client are discarded. -If the client has the pointer actively grabbed, an -.PN UngrabPointer -is performed. -If the client has the keyboard actively grabbed, an -.PN UngrabKeyboard -is performed. -All passive grabs by the client are released. -If the client has the server grabbed, an -.PN UngrabServer -is performed. -All selections (see -.PN SetSelectionOwner -request) -owned by the client are disowned. -If close-down mode (see -.PN SetCloseDownMode -request) is -.PN RetainPermanent -or -.PN RetainTemporary , -then all resources (including colormap entries) -allocated by the client are marked as permanent or temporary, -respectively (but this does not prevent other clients from explicitly -destroying them). -If the mode is -.PN Destroy , -all of the client's resources are destroyed. -.LP -When a client's resources are destroyed, -for each window in the client's save-set, -if the window is an inferior of a window created by the client, -the save-set window is reparented to the closest ancestor such that -the save-set window is not an inferior of a window created by the client. -If the save-set window is unmapped, a -.PN MapWindow -request is performed on it (even if it was not an inferior -of a window created by the client). -The reparenting leaves unchanged the absolute coordinates -(with respect to the root window) of the upper-left outer corner of the -save-set window. -After save-set processing, -all windows created by the client are destroyed. -For each nonwindow resource created by the client, -the appropriate -.PN Free -request is performed. -All colors and colormap entries allocated by the client are freed. -.LP -A server goes through a cycle of having no connections and having some -connections. -At every transition to the state of having no connections -as a result of a connection closing with a -.PN Destroy -close-down mode, -the server resets its state as if it had just been started. -This starts by destroying all lingering resources from clients -that have terminated in -.PN RetainPermanent -or -.PN RetainTemporary -mode. -It additionally includes deleting all but the predefined atom identifiers, -deleting all properties on all root windows, resetting all device maps and -attributes (key click, bell volume, acceleration), resetting the access -control list, restoring the standard root tiles and cursors, restoring -the default font path, and restoring the input focus to state -.PN PointerRoot . -.LP -Note that closing a connection with a close-down mode of -.PN RetainPermanent -or -.PN RetainTemporary -will not cause the server to reset. -.NH 1 -Events -.XS -\*(SN Events -.XE -.LP -When a button press is processed with the pointer in some window W -and no active pointer grab is in progress, -the ancestors of W are searched from the root down, -looking for a passive grab to activate. -If no matching passive grab on the button exists, -then an active grab is started automatically for the client receiving the event, -and the last-pointer-grab time is set to the current server time. -The effect is essentially equivalent to a -.PN GrabButton -with arguments: -.TS H -lw(2.25i) lw(3.25i). -_ -.sp 6p -.B -Argument Value -.sp 6p -_ -.TH -.R -.sp 6p -T{ -event-window -T} T{ -Event window -T} -T{ -event-mask -T} T{ -Client's selected pointer events on the event window -T} -T{ -pointer-mode and keyboard-mode -T} T{ -.PN Asynchronous -T} -T{ -owner-events -T} T{ -.PN True -if the client has -.PN OwnerGrabButton -selected on the event window, otherwise -.PN False -T} -T{ -confine-to -T} T{ -.PN None -T} -T{ -cursor -T} T{ -.PN None -T} -.sp 6p -_ -.TE -.LP -The grab is terminated automatically when the logical state of the pointer -has all buttons released. -.PN UngrabPointer -and -.PN ChangeActivePointerGrab -can both be used to modify the active grab. -.sp -.LP -.sM -.IN "KeyPress" "" "@DEF@" -.PN KeyPress -.br -.IN "KeyRelease" "" "@DEF@" -.PN KeyRelease -.br -.IN "ButtonPress" "" "@DEF@" -.PN ButtonPress -.br -.IN "ButtonRelease" "" "@DEF@" -.PN ButtonRelease -.br -.IN "MotionNotify" "" "@DEF@" -.PN MotionNotify -.LP -.in +.2i -\fIroot\fP, \fIevent\fP\^: WINDOW -.br -\fIchild\fP\^: WINDOW or -.PN None -.br -\fIsame-screen\fP\^: BOOL -.br -\fIroot-x\fP, \fIroot-y\fP, \fIevent-x\fP, \fIevent-y\fP\^: INT16 -.br -\fIdetail\fP\^: -.br -\fIstate\fP\^: SETofKEYBUTMASK -.br -\fItime\fP\^: TIMESTAMP -.in -.2i -.eM -.LP -These events are generated either when a key or button logically changes state -or when the pointer logically moves. -The generation of these logical changes may lag the physical changes -if device event processing is frozen. -Note that -.PN KeyPress -and -.PN KeyRelease -are generated for all keys, even those mapped to modifier bits. -The source of the event is the window the pointer is in. -The window the event is reported with respect to is called the event window. -The event window is found by starting with the source window and -looking up the hierarchy for the first window on which any client has selected -interest in the event (provided no intervening window prohibits event -generation by including the event type in its do-not-propagate-mask). -The actual window used for reporting can be modified by active grabs and, -in the case of keyboard events, can be modified by the focus window. -.LP -The root is the root window of the source window, -and root-x and root-y are the pointer coordinates relative to root's origin -at the time of the event. -Event is the event window. -If the event window is on the same screen as root, -then event-x and event-y are the pointer coordinates relative to the -event window's origin. -Otherwise, event-x and event-y are zero. -If the source window is an inferior of the event window, -then child is set to the child of the event window that is an -ancestor of (or is) the source window. -Otherwise, it is set to -.PN None . -The state component gives the logical state of the buttons and modifier keys -just before the event. -The detail component type varies with the event type: -.TS H -l l. -_ -.sp 6p -.B -Event Component -.sp 6p -_ -.TH -.R -.sp 6p -T{ -.PN KeyPress , -.PN KeyRelease -T} T{ -KEYCODE -T} -T{ -.PN ButtonPress , -.PN ButtonRelease -T} T{ -BUTTON -T} -T{ -.PN MotionNotify -T} T{ -.Pn { Normal , -.PN Hint } -T} -.sp 6p -_ -.TE -.LP -.PN MotionNotify -events are only generated when the motion begins and ends in the window. -The granularity of motion events is not guaranteed, -but a client selecting for motion events is guaranteed to get at least one -event when the pointer moves and comes to rest. -Selecting -.PN PointerMotion -receives events independent of the state of the pointer buttons. -By selecting some subset of -.PN Button[1-5]Motion -instead, -.PN MotionNotify -events will only be received when one or more of the -specified buttons are pressed. -By selecting -.PN ButtonMotion , -.PN MotionNotify -events will be received only when at least one button is pressed. -The events are always of type -.PN MotionNotify , -independent of the selection. -If -.PN PointerMotionHint -is selected, -the server is free to send only one -.PN MotionNotify -event (with detail -.PN Hint ) -to the client for the event window until -either the key or button state changes, -the pointer leaves the event window, -or the client issues a -.PN QueryPointer -or -.PN GetMotionEvents -request. -.sp -.LP -.sM -.IN "EnterNotify" "" "@DEF@" -.PN EnterNotify -.br -.IN "LeaveNotify" "" "@DEF@" -.PN LeaveNotify -.LP -.in +.2i -\fIroot\fP, \fIevent\fP\^: WINDOW -.br -\fIchild\fP\^: WINDOW or -.PN None -.br -\fIsame-screen\fP\^: BOOL -.br -\fIroot-x\fP, \fIroot-y\fP, \fIevent-x\fP, \fIevent-y\fP\^: INT16 -.br -\fImode\fP\^: -.Pn { Normal , -.PN Grab , -.PN Ungrab } -.br -\fIdetail\fP\^: -.Pn { Ancestor , -.PN Virtual , -.PN Inferior , -.PN Nonlinear , -.PN NonlinearVirtual } -.br -\fIfocus\fP\^: BOOL -.br -\fIstate\fP\^: SETofKEYBUTMASK -.br -\fItime\fP\^: TIMESTAMP -.in -.2i -.eM -.LP -If pointer motion or window hierarchy change causes the pointer to be -in a different window than before, -.PN EnterNotify -and -.PN LeaveNotify -events are generated instead of a -.PN MotionNotify -event. -Only clients selecting -.PN EnterWindow -on a window receive -.PN EnterNotify -events, and only clients selecting -.PN LeaveWindow -receive -.PN LeaveNotify -events. -The pointer position reported in the event is always the final position, -not the initial position of the pointer. -The root is the root window for this position, -and root-x and root-y are the pointer coordinates relative to root's -origin at the time of the event. -Event is the event window. -If the event window is on the same screen as root, -then event-x and event-y are the pointer coordinates relative -to the event window's origin. -Otherwise, event-x and event-y are zero. -In a -.PN LeaveNotify -event, if a child of the event window contains the initial position of the -pointer, then the child component is set to that child. -Otherwise, it is -.PN None . -For an -.PN EnterNotify -event, if a child of the event window contains the final pointer position, -then the child component is set to that child. -Otherwise, it is -.PN None . -If the event window is the focus window or an inferior of the focus window, -then focus is -.PN True . -Otherwise, focus is -.PN False . -.LP -Normal pointer motion events have mode -.PN Normal . -Pseudo-motion events when a grab activates have mode -.PN Grab , -and pseudo-motion events when a grab deactivates have mode -.PN Ungrab . -.LP -All -.PN EnterNotify -and -.PN LeaveNotify -events caused by a hierarchy change are generated after any hierarchy event -caused by that change (that is, -.PN UnmapNotify , -.PN MapNotify , -.PN ConfigureNotify , -.PN GravityNotify , -.PN CirculateNotify ), -but the ordering of -.PN EnterNotify -and -.PN LeaveNotify -events with respect to -.PN FocusOut , -.PN VisibilityNotify , -and -.PN Expose -events is not constrained. -.LP -Normal events are generated as follows: -.LP -When the pointer moves from window A to window B and A is an inferior -of B: -.IP \(bu 5 -.PN LeaveNotify -with detail -.PN Ancestor -is generated on A. -.IP \(bu 5 -.PN LeaveNotify -with detail -.PN Virtual -is generated on each window between A and B exclusive (in that order). -.IP \(bu 5 -.PN EnterNotify -with detail -.PN Inferior -is generated on B. -.LP -When the pointer moves from window A to window B and B is an inferior -of A: -.IP \(bu 5 -.PN LeaveNotify -with detail -.PN Inferior -is generated on A. -.IP \(bu 5 -.PN EnterNotify -with detail -.PN Virtual -is generated on each window between A and B exclusive (in that order). -.IP \(bu 5 -.PN EnterNotify -with detail -.PN Ancestor -is generated on B. -.LP -When the pointer moves from window A to window B and window C is -their least common ancestor: -.IP \(bu 5 -.PN LeaveNotify -with detail -.PN Nonlinear -is generated on A. -.IP \(bu 5 -.PN LeaveNotify -with detail -.PN NonlinearVirtual -is generated on each window between A and C exclusive (in that order). -.IP \(bu 5 -.PN EnterNotify -with detail -.PN NonlinearVirtual -is generated on each window between C and B exclusive (in that order). -.IP \(bu 5 -.PN EnterNotify -with detail -.PN Nonlinear -is generated on B. -.LP -When the pointer moves from window A to window B on different screens: -.IP \(bu 5 -.PN LeaveNotify -with detail -.PN Nonlinear -is generated on A. -.IP \(bu 5 -If A is not a root window, -.PN LeaveNotify -with detail -.PN NonlinearVirtual -is generated on each window above A up to and including its root (in order). -.IP \(bu 5 -If B is not a root window, -.PN EnterNotify -with detail -.PN NonlinearVirtual -is generated on each window from B's root down to but not including B -(in order). -.IP \(bu 5 -.PN EnterNotify -with detail -.PN Nonlinear -is generated on B. -.LP -When a pointer grab activates (but after any initial warp into a confine-to -window and before generating any actual -.PN ButtonPress -event that activates the grab), -G is the grab-window for the grab, and P is the window the pointer is in: -.IP \(bu 5 -.PN EnterNotify -and -.PN LeaveNotify -events with mode -.PN Grab -are generated (as for -.PN Normal -above) as if the pointer were to suddenly warp from its current -position in P to some position in G. -However, the pointer does not warp, -and the pointer position is used as both the initial -and final positions for the events. -.LP -When a pointer grab deactivates (but after generating any actual -.PN ButtonRelease -event that deactivates the grab), G is the grab-window for -the grab, and P is the window the pointer is in: -.IP \(bu 5 -.PN EnterNotify -and -.PN LeaveNotify -events with mode -.PN Ungrab -are generated (as for -.PN Normal -above) as if the pointer were to suddenly warp from -some position in G to its current position in P. -However, the pointer does not warp, -and the current pointer position is used as both the initial -and final positions for the events. -.sp -.LP -.sM -.IN "FocusIn" "" "@DEF@" -.PN FocusIn -.br -.IN "FocusOut" "" "@DEF@" -.PN FocusOut -.LP -.in +.2i -\fIevent\fP\^: WINDOW -.br -\fImode\fP\^: -.Pn { Normal , -.PN WhileGrabbed , -.PN Grab , -.PN Ungrab } -.br -\fIdetail\fP\^: -.Pn { Ancestor , -.PN Virtual , -.PN Inferior , -.PN Nonlinear , -.PN NonlinearVirtual , -.PN Pointer , -.br -\ \ \ \ \ \ \ \ \ \ \ -.PN PointerRoot , -.PN None } -.in -.2i -.eM -.LP -These events are generated when the input focus changes -and are reported to clients selecting -.PN FocusChange -on the window. -Events generated by -.PN SetInputFocus -when the keyboard is not grabbed have mode -.PN Normal . -Events generated by -.PN SetInputFocus -when the keyboard is grabbed have mode -.PN WhileGrabbed . -Events generated when a keyboard grab activates have mode -.PN Grab , -and events generated when a keyboard grab deactivates have mode -.PN Ungrab . -.LP -All -.PN FocusOut -events caused by a window unmap are generated after any -.PN UnmapNotify -event, but the ordering of -.PN FocusOut -with respect to generated -.PN EnterNotify , -.PN LeaveNotify , -.PN VisibilityNotify , -and -.PN Expose -events is not constrained. -.LP -.PN Normal -and -.PN WhileGrabbed -events are generated as follows: -.LP -When the focus moves from window A to window B, A is an inferior of B, -and the pointer is in window P: -.IP \(bu 5 -.PN FocusOut -with detail -.PN Ancestor -is generated on A. -.IP \(bu 5 -.PN FocusOut -with detail -.PN Virtual -is generated on each window between A and B exclusive (in order). -.IP \(bu 5 -.PN FocusIn -with detail -.PN Inferior -is generated on B. -.IP \(bu 5 -If P is an inferior of B -but P is not A or an inferior of A or an ancestor of A, -.PN FocusIn -with detail -.PN Pointer -is generated on each window below B down to and including P (in order). -.LP -When the focus moves from window A to window B, B is an inferior of A, -and the pointer is in window P: -.IP \(bu 5 -If P is an inferior of A -but P is not an inferior of B or an ancestor of B, -.PN FocusOut -with detail -.PN Pointer -is generated on each window from P up to but not including A (in order). -.IP \(bu 5 -.PN FocusOut -with detail -.PN Inferior -is generated on A. -.IP \(bu 5 -.PN FocusIn -with detail -.PN Virtual -is generated on each window between A and B exclusive (in order). -.IP \(bu 5 -.PN FocusIn -with detail -.PN Ancestor -is generated on B. -.LP -When the focus moves from window A to window B, window C is their -least common ancestor, and the pointer is in window P: -.IP \(bu 5 -If P is an inferior of A, -.PN FocusOut -with detail -.PN Pointer -is generated on each window from P up to but not including A (in order). -.IP \(bu 5 -.PN FocusOut -with detail -.PN Nonlinear -is generated on A. -.IP \(bu 5 -.PN FocusOut -with detail -.PN NonlinearVirtual -is generated on each window between A and C exclusive (in order). -.IP \(bu 5 -.PN FocusIn -with detail -.PN NonlinearVirtual -is generated on each window between C and B exclusive (in order). -.IP \(bu 5 -.PN FocusIn -with detail -.PN Nonlinear -is generated on B. -.IP \(bu 5 -If P is an inferior of B, -.PN FocusIn -with detail -.PN Pointer -is generated on each window below B down to and including P (in order). -.LP -When the focus moves from window A to window B on different screens -and the pointer is in window P: -.IP \(bu 5 -If P is an inferior of A, -.PN FocusOut -with detail -.PN Pointer -is generated on each window from P up to but not including A (in order). -.IP \(bu 5 -.PN FocusOut -with detail -.PN Nonlinear -is generated on A. -.IP \(bu 5 -If A is not a root window, -.PN FocusOut -with detail -.PN NonlinearVirtual -is generated on each window above A up to and including its root (in order). -.IP \(bu 5 -If B is not a root window, -.PN FocusIn -with detail -.PN NonlinearVirtual -is generated on each window from B's root down to but not including B -(in order). -.IP \(bu 5 -.PN FocusIn -with detail -.PN Nonlinear -is generated on B. -.IP \(bu 5 -If P is an inferior of B, -.PN FocusIn -with detail -.PN Pointer -is generated on each window below B down to and including P (in order). -.LP -When the focus moves from window A to -.PN PointerRoot -(or -.PN None ) -and the pointer is in window P: -.IP \(bu 5 -If P is an inferior of A, -.PN FocusOut -with detail -.PN Pointer -is generated on each window from P up to but not including A (in order). -.IP \(bu 5 -.PN FocusOut -with detail -.PN Nonlinear -is generated on A. -.IP \(bu 5 -If A is not a root window, -.PN FocusOut -with detail -.PN NonlinearVirtual -is generated on each window above A up to and including its root (in order). -.IP \(bu 5 -.PN FocusIn -with detail -.PN PointerRoot -(or -.PN None ) -is generated on all root windows. -.IP \(bu 5 -If the new focus is -.PN PointerRoot , -.PN FocusIn -with detail -.PN Pointer -is generated on each window from P's root down to and including P (in order). -.LP -When the focus moves from -.PN PointerRoot -(or -.PN None ) -to window A and the pointer is in window P: -.IP \(bu 5 -If the old focus is -.PN PointerRoot , -.PN FocusOut -with detail -.PN Pointer -is generated on each window from P up to and including P's root (in order). -.IP \(bu 5 -.PN FocusOut -with detail -.PN PointerRoot -(or -.PN None ) -is generated on all root windows. -.IP \(bu 5 -If A is not a root window, -.PN FocusIn -with detail -.PN NonlinearVirtual -is generated on each window from A's root down to but not including A -(in order). -.IP \(bu 5 -.PN FocusIn -with detail -.PN Nonlinear -is generated on A. -.IP \(bu 5 -If P is an inferior of A, -.PN FocusIn -with detail -.PN Pointer -is generated on each window below A down to and including P (in order). -.LP -When the focus moves from -.PN PointerRoot -to -.PN None -(or vice versa) and the pointer is in window P: -.IP \(bu 5 -If the old focus is -.PN PointerRoot , -.PN FocusOut -with detail -.PN Pointer -is generated on each window from P up to and including P's root (in order). -.IP \(bu 5 -.PN FocusOut -with detail -.PN PointerRoot -(or -.PN None ) -is generated on all root windows. -.IP \(bu 5 -.PN FocusIn -with detail -.PN None -(or -.PN PointerRoot ) -is generated on all root windows. -.IP \(bu 5 -If the new focus is -.PN PointerRoot , -.PN FocusIn -with detail -.PN Pointer -is generated on each window from P's root down to and including P (in order). -.LP -When a keyboard grab activates (but before generating any actual -.PN KeyPress -event that activates the grab), G is the grab-window for the grab, -and F is the current focus: -.IP \(bu 5 -.PN FocusIn -and -.PN FocusOut -events with mode -.PN Grab -are generated (as for -.PN Normal -above) as if the focus were to change from F to G. -.LP -When a keyboard grab deactivates (but after generating any actual -.PN KeyRelease -event that deactivates the grab), G is the grab-window for the grab, -and F is the current focus: -.IP \(bu 5 -.PN FocusIn -and -.PN FocusOut -events with mode -.PN Ungrab -are generated (as for -.PN Normal -above) as if the focus were to change from G to F. -.sp -.LP -.sM -.IN "KeymapNotify" "" "@DEF@" -.PN KeymapNotify -.LP -.in +.2i -\fIkeys\fP\^: LISTofCARD8 -.in -.2i -.eM -.LP -The value is a bit vector as described in -.PN QueryKeymap . -This event is reported to clients selecting -.PN KeymapState -on a window and is generated immediately after every -.PN EnterNotify -and -.PN FocusIn . -.sp -.LP -.sM -.IN "Expose" "" "@DEF@" -.PN Expose -.LP -.in +.2i -\fIwindow\fP\^: WINDOW -.br -\fIx\fP, \fIy\fP, \fIwidth\fP, \fIheight\fP\^: CARD16 -.br -\fIcount\fP\^: CARD16 -.in -.2i -.eM -.LP -This event is reported to clients selecting -.PN Exposure -on the window. -It is generated when no valid contents are available for regions of a window, -and either the regions are visible, the regions are viewable -and the server is (perhaps newly) maintaining backing store on the window, -or the window is not viewable but the server is (perhaps newly) honoring -window's backing-store attribute of -.PN Always -or -.PN WhenMapped . -The regions are decomposed into an arbitrary set of rectangles, -and an -.PN Expose -event is generated for each rectangle. -.LP -For a given action causing exposure events, -the set of events for a given window are guaranteed to be reported contiguously. -If count is zero, -then no more -.PN Expose -events for this window follow. -If count is nonzero, -then at least that many more -.PN Expose -events for this window follow (and possibly more). -.LP -The x and y coordinates are relative to window's origin -and specify the upper-left corner of a rectangle. -The width and height specify the extent of the rectangle. -.LP -.PN Expose -events are never generated on -.PN InputOnly -windows. -.LP -All -.PN Expose -events caused by a hierarchy change are generated after any -hierarchy event caused by that change (for example, -.PN UnmapNotify , -.PN MapNotify , -.PN ConfigureNotify , -.PN GravityNotify , -.PN CirculateNotify ). -All -.PN Expose -events on a given window are generated after any -.PN VisibilityNotify -event on that window, -but it is not required that all -.PN Expose -events on all windows be generated after all -.PN Visibilitity -events on all windows. -The ordering of -.PN Expose -events with respect to -.PN FocusOut , -.PN EnterNotify , -and -.PN LeaveNotify -events is not constrained. -.sp -.LP -.sM -.IN "GraphicsExposure" "" "@DEF@" -.PN GraphicsExposure -.LP -.in +.2i -\fIdrawable\fP\^: DRAWABLE -.br -\fIx\fP, \fIy\fP, \fIwidth\fP, \fIheight\fP\^: CARD16 -.br -\fIcount\fP\^: CARD16 -.br -\fImajor-opcode\fP\^: CARD8 -.br -\fIminor-opcode\fP\^: CARD16 -.in -.2i -.eM -.LP -This event is reported to a client using a graphics context -with graphics-exposures selected -and is generated when a destination region could not be computed due -to an obscured or out-of-bounds source region. -All of the regions exposed by a given graphics request -are guaranteed to be reported contiguously. -If count is zero then no more -.PN GraphicsExposure -events for this window follow. -If count is nonzero, -then at least that many more -.PN GraphicsExposure -events for this window follow (and possibly more). -.LP -The x and y coordinates are relative to drawable's origin -and specify the upper-left corner of a rectangle. -The width and height specify the extent of the rectangle. -.LP -The major and minor opcodes identify the graphics request used. -For the core protocol, -major-opcode is always -.PN CopyArea -or -.PN CopyPlane , -and minor-opcode is always zero. -.sp -.LP -.sM -.IN "NoExposure" "" "@DEF@" -.PN NoExposure -.LP -.in +.2i -\fIdrawable\fP\^: DRAWABLE -.br -\fImajor-opcode\fP\^: CARD8 -.br -\fIminor-opcode:\fP\^ CARD16 -.in -.2i -.eM -.LP -This event is reported to a client using a graphics context -with graphics-exposures selected -and is generated when a graphics request -that might produce -.PN GraphicsExposure -events does not produce any. -The drawable specifies the destination used for the graphics request. -.LP -The major and minor opcodes identify the graphics request used. -For the core protocol, -major-opcode is always -.PN CopyArea -or -.PN CopyPlane , -and the minor-opcode is always zero. -.sp -.LP -.sM -.IN "VisibilityNotify" "" "@DEF@" -.PN VisibilityNotify -.LP -.in +.2i -\fIwindow\fP\^: WINDOW -.br -\fIstate\fP\^: -.Pn { Unobscured , -.PN PartiallyObscured , -.PN FullyObscured } -.in -.2i -.eM -.LP -This event is reported to clients selecting -.PN VisibilityChange -on the window. -In the following, -the state of the window is calculated ignoring all of the window's subwindows. -When a window changes state from partially or fully obscured or -not viewable to viewable and completely unobscured, -an event with -.PN Unobscured -is generated. -When a window changes state from viewable and completely unobscured, -from viewable and completely obscured, -or from not viewable, to viewable and partially obscured, -an event with -.PN PartiallyObscured -is generated. -When a window changes state from viewable and completely unobscured, -from viewable and partially obscured, -or from not viewable to viewable and fully obscured, -an event with -.PN FullyObscured -is generated. -.LP -.PN VisibilityNotify -events are never generated on -.PN InputOnly -windows. -.LP -All -.PN VisibilityNotify -events caused by a hierarchy change are generated after any hierarchy event -caused by that change (for example, -.PN UnmapNotify , -.PN MapNotify , -.PN ConfigureNotify , -.PN GravityNotify , -.PN CirculateNotify ). -Any -.PN VisibilityNotify -event on a given window is generated before any -.PN Expose -events on that window, -but it is not required that all -.PN VisibilityNotify -events on all windows be generated before all -.PN Expose -events on all windows. -The ordering of -.PN VisibilityNotify -events with respect to -.PN FocusOut , -.PN EnterNotify , -and -.PN LeaveNotify -events is not constrained. -.sp -.LP -.sM -.IN "CreateNotify" "" "@DEF@" -.PN CreateNotify -.LP -.in +.2i -\fIparent\fP, \fIwindow\fP\^: WINDOW -.br -\fIx\fP, \fIy\fP\^: INT16 -.br -\fIwidth\fP, \fIheight\fP, \fIborder-width\fP\^: CARD16 -.br -\fIoverride-redirect\fP\^: BOOL -.in -.2i -.eM -.LP -This event is reported to clients selecting -.PN SubstructureNotify -on the parent -and is generated when the window is created. -The arguments are as in the -.PN CreateWindow -request. -.sp -.LP -.sM -.IN "DestroyNotify" "" "@DEF@" -.PN DestroyNotify -.LP -.in +.2i -\fIevent\fP, \fIwindow\fP\^: WINDOW -.in -.2i -.eM -.LP -This event is reported to clients selecting -.PN StructureNotify -on the window and to clients selecting -.PN SubstructureNotify -on the parent. -It is generated when the window is destroyed. -The event is the window on which the event was generated, -and the window is the window that is destroyed. -.LP -The ordering of the -.PN DestroyNotify -events is such that for any given window, -.PN DestroyNotify -is generated on all inferiors of the window -before being generated on the window itself. -The ordering among siblings and across subhierarchies is not -otherwise constrained. -.sp -.LP -.sM -.IN "UnmapNotify" "" "@DEF@" -.PN UnmapNotify -.LP -.in +.2i -\fIevent\fP, \fIwindow\fP\^: WINDOW -.br -\fIfrom-configure\fP\^: BOOL -.in -.2i -.eM -.LP -This event is reported to clients selecting -.PN StructureNotify -on the window and to clients selecting -.PN SubstructureNotify -on the parent. -It is generated when the window changes state from mapped to unmapped. -The event is the window on which the event was generated, -and the window is the window that is unmapped. -The from-configure flag is -.PN True -if the event was generated as a result of the window's parent being resized -when the window itself had a win-gravity of -.PN Unmap . -.sp -.LP -.sM -.IN "MapNotify" "" "@DEF@" -.PN MapNotify -.LP -.in +.2i -\fIevent\fP, \fIwindow\fP\^: WINDOW -.br -\fIoverride-redirect\fP\^: BOOL -.in -.2i -.eM -.LP -This event is reported to clients selecting -.PN StructureNotify -on the window and to clients selecting -.PN SubstructureNotify -on the parent. -It is generated when the window changes state from unmapped to mapped. -The event is the window on which the event was generated, -and the window is the window that is mapped. -The override-redirect flag is from the window's attribute. -.sp -.LP -.sM -.IN "MapRequest" "" "@DEF@" -.PN MapRequest -.LP -.in +.2i -\fIparent\fP, \fIwindow\fP\^: WINDOW -.in -.2i -.eM -.LP -This event is reported to the client selecting -.PN SubstructureRedirect -on the parent and is generated when a -.PN MapWindow -request is issued on an unmapped window with an override-redirect attribute of -.PN False . -.sp -.LP -.sM -.IN "ReparentNotify" "" "@DEF@" -.PN ReparentNotify -.LP -.in +.2i -\fIevent\fP, \fIwindow\fP, \fIparent\fP\^: WINDOW -.br -\fIx\fP, \fIy\fP\^: INT16 -.br -\fIoverride-redirect\fP\^: BOOL -.in -.2i -.eM -.LP -This event is reported to clients selecting -.PN SubstructureNotify -on either the old or the new parent and to clients selecting -.PN StructureNotify -on the window. -It is generated when the window is reparented. -The event is the window on which the event was generated. -The window is the window that has been rerooted. -The parent specifies the new parent. -The x and y coordinates are relative to the new parent's origin -and specify the position of the upper-left outer corner of the window. -The override-redirect flag is from the window's attribute. -.sp -.LP -.sM -.IN "ConfigureNotify" "" "@DEF@" -.PN ConfigureNotify -.LP -.in +.2i -\fIevent\fP, \fIwindow\fP\^: WINDOW -.br -\fIx\fP, \fIy\fP\^: INT16 -.br -\fIwidth\fP, \fIheight\fP, \fIborder-width\fP\^: CARD16 -.br -\fIabove-sibling\fP\^: WINDOW or -.PN None -.br -\fIoverride-redirect\fP\^: BOOL -.in -.2i -.eM -.LP -This event is reported to clients selecting -.PN StructureNotify -on the window and to clients selecting -.PN SubstructureNotify -on the parent. -It is generated when a -.PN ConfigureWindow -request actually changes the state of the window. -The event is the window on which the event was generated, -and the window is the window that is changed. -The x and y coordinates are relative to the new parent's origin -and specify the position of the upper-left outer corner of the window. -The width and height specify the inside size, not including the border. -If above-sibling is -.PN None , -then the window is on the bottom of the stack with respect to siblings. -Otherwise, the window is immediately on top of the specified sibling. -The override-redirect flag is from the window's attribute. -.sp -.LP -.sM -.IN "GravityNotify" "" "@DEF@" -.PN GravityNotify -.LP -.in +.2i -\fIevent\fP, \fIwindow\fP\^: WINDOW -.br -\fIx\fP, \fIy\fP\^: INT16 -.in -.2i -.eM -.LP -This event is reported to clients selecting -.PN SubstructureNotify -on the parent and to clients selecting -.PN StructureNotify -on the window. -It is generated when a window is moved because of a change in size -of the parent. -The event is the window on which the event was generated, -and the window is the window that is moved. -The x and y coordinates are relative to the new parent's origin -and specify the position of the upper-left outer corner of the window. -.sp -.LP -.sM -.IN "ResizeRequest" "" "@DEF@" -.PN ResizeRequest -.LP -.in +.2i -\fIwindow\fP\^: WINDOW -.br -\fIwidth\fP, \fIheight\fP\^: CARD16 -.in -.2i -.eM -.LP -This event is reported to the client selecting -.PN ResizeRedirect -on the window and is generated when a -.PN ConfigureWindow -request by some other client on the window attempts to change the size -of the window. -The width and height are the requested inside size, not including the border. -.sp -.LP -.sM -.IN "ConfigureRequest" "" "@DEF@" -.PN ConfigureRequest -.LP -.in +.2i -\fIparent\fP, \fIwindow\fP\^: WINDOW -.br -\fIx\fP, \fIy\fP\^: INT16 -.br -\fIwidth\fP, \fIheight\fP, \fIborder-width\fP\^: CARD16 -.br -\fIsibling\fP\^: WINDOW or -.PN None -.br -\fIstack-mode\fP\^: -.Pn { Above , -.PN Below , -.PN TopIf , -.PN BottomIf , -.PN Opposite } -.br -\fIvalue-mask\fP\^: BITMASK -.in -.2i -.eM -.LP -This event is reported to the client selecting -.PN SubstructureRedirect -on the parent and is generated when a -.PN ConfigureWindow -request is issued on the window by some other client. -The value-mask indicates which components were specified in the request. -The value-mask and the corresponding values are reported as given -in the request. -The remaining values are filled in from the current geometry of the window, -except in the case of sibling and stack-mode, -which are reported as -.PN None -and -.PN Above -(respectively) if not given in the request. -.sp -.LP -.sM -.IN "CirculateNotify" "" "@DEF@" -.PN CirculateNotify -.LP -.in +.2i -\fIevent\fP, \fIwindow\fP\^: WINDOW -.br -\fIplace\fP\^: -.Pn { Top , -.PN Bottom } -.in -.2i -.eM -.LP -This event is reported to clients selecting -.PN StructureNotify -on the window and to clients selecting -.PN SubstructureNotify -on the parent. -It is generated when the window is actually restacked from a -.PN CirculateWindow -request. -The event is the window on which the event was generated, -and the window is the window that is restacked. -If place is -.PN Top , -the window is now on top of all siblings. -Otherwise, it is below all siblings. -.sp -.LP -.sM -.IN "CirculateRequest" "" "@DEF@" -.PN CirculateRequest -.LP -.in +.2i -\fIparent\fP, \fIwindow\fP\^: WINDOW -.br -\fIplace\fP: -.Pn { Top , -.PN Bottom } -.in -.2i -.eM -.LP -This event is reported to the client selecting -.PN SubstructureRedirect -on the parent and is generated when a -.PN CirculateWindow -request is issued on the parent and a window actually needs to be restacked. -The window specifies the window to be restacked, -and the place specifies what the new position in the stacking order should be. -.sp -.LP -.sM -.IN "PropertyNotify" "" "@DEF@" -.PN PropertyNotify -.LP -.in +.2i -\fIwindow\fP\^: WINDOW -.br -\fIatom\fP\^: ATOM -.br -\fIstate\fP\^: -.Pn { NewValue , -.PN Deleted } -.br -\fItime\fP\^: TIMESTAMP -.in -.2i -.eM -.LP -This event is reported to clients selecting -.PN PropertyChange -on the window and is generated with state -.PN NewValue -when a property of the window is changed using -.PN ChangeProperty -or -.PN RotateProperties , -even when adding zero-length data using -.PN ChangeProperty -and when replacing all or part of a property with identical data using -.PN ChangeProperty -or -.PN RotateProperties . -It is generated with state -.PN Deleted -when a property of the -window is deleted using request -.PN DeleteProperty -or -.PN GetProperty . -The timestamp indicates the server time when the property was changed. -.sp -.LP -.sM -.IN "SelectionClear" "" "@DEF@" -.PN SelectionClear -.LP -.in +.2i -\fIowner\fP\^: WINDOW -.br -\fIselection\fP\^: ATOM -.br -\fItime\fP\^: TIMESTAMP -.in -.2i -.eM -.LP -This event is reported to the current owner of a selection -and is generated when a new owner is being defined by means of -.PN SetSelectionOwner . -The timestamp is the last-change time recorded for the selection. -The owner argument is the window that was specified by the current owner in its -.PN SetSelectionOwner -request. -.sp -.LP -.sM -.IN "SelectionRequest" "" "@DEF@" -.PN SelectionRequest -.LP -.in +.2i -\fIowner\fP\^: WINDOW -.br -\fIselection\fP\^: ATOM -.br -\fItarget\fP\^: ATOM -.br -\fIproperty\fP\^: ATOM or -.PN None -.br -\fIrequestor\fP\^: WINDOW -.br -\fItime\fP\^: TIMESTAMP or -.PN CurrentTime -.in -.2i -.eM -.LP -This event is reported to the owner of a selection -and is generated when a client issues a -.PN ConvertSelection -request. -The owner argument is the window that was specified in the -.PN SetSelectionOwner -request. -The remaining arguments are as in the -.PN ConvertSelection -request. -.LP -The owner should convert the selection based on the specified target type -and send a -.PN SelectionNotify -back to the requestor. -A complete specification for using selections is given in the X.Org -standard \fIInter-Client Communication Conventions Manual\fP. -.sp -.LP -.sM -.IN "SelectionNotify" "" "@DEF@" -.PN SelectionNotify -.LP -.in +.2i -\fIrequestor\fP\^: WINDOW -.br -\fIselection\fP, \fItarget\fP\^: ATOM -.br -\fIproperty\fP\^: ATOM or -.PN None -.br -\fItime\fP\^: TIMESTAMP or -.PN CurrentTime -.in -.2i -.eM -.LP -This event is generated by the server in response to a -.PN ConvertSelection -request when there is no owner for the selection. -When there is an owner, -it should be generated by the owner using -.PN SendEvent . -The owner of a selection should send this event to a requestor either -when a selection has been converted and stored as a property -or when a selection conversion could not be performed (indicated with property -.PN None ). -.sp -.LP -.sM -.IN "ColormapNotify" "" "@DEF@" -.PN ColormapNotify -.LP -.in +.2i -\fIwindow\fP\^: WINDOW -.br -\fIcolormap\fP\^: COLORMAP or -.PN None -.br -\fInew\fP\^: BOOL -.br -\fIstate\fP\^: -.Pn { Installed , -.PN Uninstalled } -.in -.2i -.eM -.LP -This event is reported to clients selecting -.PN ColormapChange -on the window. -It is generated with value -.PN True -for new when the colormap attribute of the window is changed -and is generated with value -.PN False -for new when the colormap of a window is installed or uninstalled. -In either case, -the state indicates whether the colormap is currently installed. -.sp -.LP -.sM -.IN "MappingNotify" "" "@DEF@" -.PN MappingNotify -.LP -.in +.2i -\fIrequest\fP: -.Pn { Modifier , -.PN Keyboard , -.PN Pointer } -.br -\fIfirst-keycode\fP, \fIcount\fP\^: CARD8 -.in -.2i -.eM -.LP -This event is sent to all clients. -There is no mechanism to express disinterest in this event. -The detail indicates the kind of change that occurred: -.PN Modifiers -for a successful -.PN SetModifierMapping , -.PN Keyboard -for a successful -.PN ChangeKeyboardMapping , -and -.PN Pointer -for a successful -.PN SetPointerMapping . -If the detail is -.PN Keyboard , -then first-keycode and count indicate the range of altered keycodes. -.sp -.LP -.sM -.IN "ClientMessage" "" "@DEF@" -.PN ClientMessage -.LP -.in +.2i -\fIwindow\fP\^: WINDOW -.br -\fItype\fP\^: ATOM -.br -\fIformat\fP\^: {8, 16, 32} -.br -\fIdata\fP\^: LISTofINT8 or LISTofINT16 or LISTofINT32 -.in -.2i -.eM -.LP -This event is only generated by clients using -.PN SendEvent . -The type specifies how the data is to be interpreted by the receiving client; -the server places no interpretation on the type or the data. -The format specifies whether the data should be viewed as a list of 8-bit, -16-bit, or 32-bit quantities, so that the server can correctly -byte-swap, as necessary. -The data always consists of either 20 8-bit values or 10 16-bit values -or 5 32-bit values, although particular message types might not make use -of all of these values. -.NH 1 -Flow Control and Concurrency -.XS -\*(SN Flow Control and Concurrency -.XE -.LP -Whenever the server is writing to a given connection, -it is permissible for the server to stop reading from that connection -(but if the writing would block, it must continue to service other connections). -The server is not required to buffer more than a single request per connection -at one time. -For a given connection to the server, -a client can block while reading from the connection -but should undertake to read (events and errors) when writing would block. -Failure on the part of a client to obey this rule could result -in a deadlocked connection, -although deadlock is probably unlikely unless either -the transport layer has very little buffering or the client attempts to -send large numbers of requests without ever reading replies or checking for -errors and events. -.LP -Whether or not a server is implemented with internal concurrency, -the overall effect must be as if individual requests are executed to completion -in some serial order, -and requests from a given connection must be executed in delivery order -(that is, the total execution order is a shuffle of the individual streams). -The execution of a request includes validating all arguments, -collecting all data for any reply, -and generating and queueing all required events. -However, -it does not include the actual transmission of the reply and the events. -In addition, the effect of any other cause that can generate multiple events -(for example, activation of a grab or pointer motion) must effectively generate -and queue all required events indivisibly with respect to all other causes -and requests. -For a request from a given client, -any events destined for that client that are caused by executing the request -must be sent to the client before any reply or error is sent. -.bp diff --git a/doc/xorg-docs/specs/XProtocol/glossary b/doc/xorg-docs/specs/XProtocol/glossary deleted file mode 100644 index c0977206a..000000000 --- a/doc/xorg-docs/specs/XProtocol/glossary +++ /dev/null @@ -1,1028 +0,0 @@ -.\" $Xorg: glossary,v 1.3 2000/08/17 19:42:25 cpqbld Exp $ -.ps 11 -.nr PS 11 -\& -.sp 1 -.XS -Glossary -.XE -.ce 1 -\s+1\fBGlossary\fP\s-1 -.sp 2 -.na -.LP -.KS -\fBAccess control list\fP -.IN "Access control list" "" "@DEF@" -.IP -X maintains a list of hosts from which client programs can be run. -By default, -only programs on the local host and hosts specified in an initial list read -by the server can use the display. -Clients on the local host can change this access control list. -Some server implementations can also implement other authorization mechanisms -in addition to or in place of this mechanism. -The action of this mechanism can be conditional based on the authorization -protocol name and data received by the server at connection setup. -.KE -.KS -.LP -\fBActive grab\fP -.IN "Active grab" "" "@DEF@" -.IP -A grab is active when the pointer or keyboard is actually owned by -the single grabbing client. -.KE -.KS -.LP -\fBAncestors\fP -.IN "Ancestors" "" "@DEF@" -.IP -If W is an inferior of A, then A is an ancestor of W. -.KE -.KS -.LP -\fBAtom\fP -.IN "Atom" "" "@DEF@" -.IP -An atom is a unique ID corresponding to a string name. -Atoms are used to identify properties, types, and selections. -.KE -.KS -.LP -\fBBackground\fP -.IN "Background" "" "@DEF@" -.IP -An -.PN InputOutput -window can have a background, which is defined as a pixmap. -When regions of the window have their contents lost or invalidated, -the server will automatically tile those regions with the background. -.KE -.KS -.LP -\fBBacking store\fP -.IN "Backing store" "" "@DEF@" -.IP -When a server maintains the contents of a window, -the pixels saved off screen are known as a backing store. -.KE -.KS -.LP -\fBBit gravity\fP -.IN "Bit" "gravity" "@DEF@" -.IP -When a window is resized, -the contents of the window are not necessarily discarded. -It is possible to request that the server relocate the previous contents -to some region of the window (though no guarantees are made). -This attraction of window contents for some location of -a window is known as bit gravity. -.KE -.KS -.LP -\fBBit plane\fP -.IN "Bit" "plane" "@DEF@" -.IP -When a pixmap or window is thought of as a stack of bitmaps, -each bitmap is called a bit plane or plane. -.KE -.KS -.LP -\fBBitmap\fP -.IN "Bitmap" "" "@DEF@" -.IP -A bitmap is a pixmap of depth one. -.KE -.KS -.LP -\fBBorder\fP -.IN "Border" "" "@DEF@" -.IP -An -.PN InputOutput -window can have a border of equal thickness on all four sides of the window. -A pixmap defines the contents of the border, -and the server automatically maintains the contents of the border. -Exposure events are never generated for border regions. -.KE -.KS -.LP -\fBButton grabbing\fP -.IN "Button" "grabbing" "@DEF@" -.IP -Buttons on the pointer may be passively grabbed by a client. -When the button is pressed, -the pointer is then actively grabbed by the client. -.KE -.KS -.LP -\fBByte order\fP -.IN "Byte order" "" "@DEF@" -.IP -For image (pixmap/bitmap) data, -the server defines the byte order, -and clients with different native byte ordering must swap bytes as necessary. -For all other parts of the protocol, -the client defines the byte order, -and the server swaps bytes as necessary. -.KE -.KS -.LP -\fBChildren\fP -.IN "Children" "" "@DEF@" -.IP -The children of a window are its first-level subwindows. -.KE -.KS -.LP -\fBClient\fP -.IN "Client" "" "@DEF@" -.IP -An application program connects to the window system server by some -interprocess communication path, such as a TCP connection or a -shared memory buffer. -This program is referred to as a client of the window system server. -More precisely, -the client is the communication path itself; -a program with multiple paths open to the server is viewed as -multiple clients by the protocol. -Resource lifetimes are controlled by connection lifetimes, -not by program lifetimes. -.KE -.KS -.LP -\fBClipping region\fP -.IN "Clipping region" "" "@DEF@" -.IP -In a graphics context, -a bitmap or list of rectangles can be specified -to restrict output to a particular region of the window. -The image defined by the bitmap or rectangles is called a clipping region. -.KE -.KS -.LP -\fBColormap\fP -.IN "Colormap" "" "@DEF@" -.IP -A colormap consists of a set of entries defining color values. -The colormap associated with a window is used to display the contents of -the window; each pixel value indexes the colormap to produce RGB values -that drive the guns of a monitor. -Depending on hardware limitations, -one or more colormaps may be installed at one time, -so that windows associated with those maps display with correct colors. -.KE -.KS -.LP -\fBConnection\fP -.IN "Connection" "" "@DEF@" -.IP -The interprocess communication path between the server and client -program is known as a connection. -A client program typically (but not necessarily) has one -connection to the server over which requests and events are sent. -.KE -.KS -.LP -\fBContainment\fP -.IN "Containment" "" "@DEF@" -.IP -A window ``contains'' the pointer if the window is viewable and the -hotspot of the cursor is within a visible region of the window or a -visible region of one of its inferiors. -The border of the window is included as part of the window for containment. -The pointer is ``in'' a window if the window contains the pointer -but no inferior contains the pointer. -.KE -.KS -.LP -\fBCoordinate system\fP -.IN "Coordinate system" "" "@DEF@" -.IP -The coordinate system has the X axis horizontal and the Y axis vertical, -with the origin [0, 0] at the upper left. -Coordinates are integral, -in terms of pixels, -and coincide with pixel centers. -Each window and pixmap has its own coordinate system. -For a window, -the origin is inside the border at the inside upper left. -.KE -.KS -.LP -\fBCursor\fP -.IN "Cursor" "" "@DEF@" -.IP -A cursor is the visible shape of the pointer on a screen. -It consists of a hot spot, a source bitmap, a shape bitmap, -and a pair of colors. -The cursor defined for a window controls the visible appearance -when the pointer is in that window. -.KE -.KS -.LP -\fBDepth\fP -.IN "Depth" "" "@DEF@" -.IP -The depth of a window or pixmap is the number of bits per pixel that it has. -The depth of a graphics context is the depth of the drawables it can be -used in conjunction with for graphics output. -.KE -.KS -.LP -\fBDevice\fP -.IN "Device" "" "@DEF@" -.IP -Keyboards, mice, tablets, track-balls, button boxes, and so on are all -collectively known as input devices. -The core protocol only deals with two devices, -``the keyboard'' and ``the pointer.'' -.KE -.KS -.LP -\fBDirectColor\fP -.IN "DirectColor" "" "@DEF@" -.IP -.PN DirectColor -is a class of colormap in which a pixel value is decomposed into three -separate subfields for indexing. -The first subfield indexes an array to produce red intensity values. -The second subfield indexes a second array to produce blue intensity values. -The third subfield indexes a third array to produce green intensity values. -The RGB values can be changed dynamically. -.KE -.KS -.LP -\fBDisplay\fP -.IN "Display" "" "@DEF@" -.IP -A server, together with its screens and input devices, is called a display. -.KE -.KS -.LP -\fBDrawable\fP -.IN "Drawable" "" "@DEF@" -.IP -Both windows and pixmaps can be used as sources and destinations in -graphics operations. -These windows and pixmaps are collectively known as drawables. -However, an -.PN InputOnly -window cannot be used as a source or destination in a graphics operation. -.KE -.KS -.LP -\fBEvent\fP -.IN "Event" "" "@DEF@" -.IP -Clients are informed of information asynchronously by means of events. -These events can be generated either asynchronously from devices -or as side effects of client requests. -Events are grouped into types. -The server never sends events to a client unless the -client has specificially asked to be informed of that type of event. -However, other clients can force events to be sent to other clients. -Events are typically reported relative to a window. -.KE -.KS -.LP -\fBEvent mask\fP -.IN "Event" "mask" "@DEF@" -.IP -Events are requested relative to a window. -The set of event types that a client requests relative to a window -is described by using an event mask. -.KE -.KS -.LP -\fBEvent synchronization\fP -.IN "Event" "synchronization" "@DEF@" -.IP -There are certain race conditions possible when demultiplexing device -events to clients (in particular deciding where pointer and keyboard -events should be sent when in the middle of window management -operations). -The event synchronization mechanism allows synchronous processing -of device events. -.KE -.KS -.LP -\fBEvent propagation\fP -.IN "Event" "propagation" "@DEF@" -.IP -Device-related events propagate from the source window to ancestor -windows until some client has expressed interest in handling that type -of event or until the event is discarded explicitly. -.KE -.KS -.LP -\fBEvent source\fP -.IN "Event" "source" "@DEF@" -.IP -The window the pointer is in is the source of a device-related -event. -.KE -.KS -.LP -\fBExposure event\fP -.IN "Event" "Exposure" "@DEF@" -.IP -Servers do not guarantee to preserve the contents of windows when -windows are obscured or reconfigured. -Exposure events are sent to clients to inform them when contents -of regions of windows have been lost. -.KE -.KS -.LP -\fBExtension\fP -.IN "Extension" "" "@DEF@" -.IP -Named extensions to the core protocol can be defined to extend the -system. -Extension to output requests, resources, and event types are -all possible and are expected. -.KE -.KS -.LP -\fBFocus window\fP -.IN "Focus window" "" ""@DEF@" -.IP -The focus window is another term for the input focus. -.KE -.KS -.LP -\fBFont\fP -.IN "Font" "" "@DEF@" -.IP -A font is a matrix of glyphs (typically characters). -The protocol does no translation or interpretation of character sets. -The client simply indicates values used to index the glyph array. -A font contains additional metric information to determine interglyph -and interline spacing. -.KE -.KS -.LP -\fBGC\fP, \fBGContext\fP -.IN "GC" "" "@DEF@" -.IN "GContext" "" "@DEF@" -.IP -GC and gcontext are abbreviations for graphics context. -.KE -.KS -.LP -\fBGlyph\fP -.IN "Glyph" "" "@DEF@" -.IP -A glyph is an image, typically of a character, in a font. -.KE -.KS -.LP -\fBGrab\fP -.IN "Grab" "" "@DEF@" -.IP -Keyboard keys, the keyboard, pointer buttons, the pointer, and the -server can be grabbed for exclusive use by a client. -In general, -these facilities are not intended to be used by normal applications -but are intended for various input and window managers to implement -various styles of user interfaces. -.KE -.KS -.LP -\fBGraphics context\fP -.IN "Graphics context" "" "@DEF@" -.IP -Various information for graphics output is stored in a graphics context -such as foreground pixel, background pixel, line width, clipping region, -and so on. -A graphics context can only be used with drawables that have the same root -and the same depth as the graphics context. -.KE -.KS -.LP -\fBGravity\fP -.IN "Gravity" "" "@DEF@" -.IP -See \fBbit gravity\fP and \fBwindow gravity\fP. -.KE -.KS -.LP -\fBGrayScale\fP -.IN "GrayScale" "" "@DEF@" -.IP -.PN GrayScale -can be viewed as a degenerate case of -.PN PseudoColor , -in which the red, green, and blue values in any given colormap entry are equal, -thus producing shades of gray. -The gray values can be changed dynamically. -.KE -.KS -.LP -\fBHotspot\fP -.IN "Hotspot" "" "@DEF@" -.IP -A cursor has an associated hotspot that defines the point in the -cursor corresponding to the coordinates reported for the pointer. -.KE -.KS -.LP -\fBIdentifier\fP -.IN "Identifier" "" "@DEF@" -.IP -An identifier is a unique value associated with a resource that clients use -to name that resource. -The identifier can be used over any connection. -.KE -.KS -.LP -\fBInferiors\fP -.IN "Inferiors" "" "@DEF@" -.IP -The inferiors of a window are all of the subwindows nested below it: -the children, the children's children, and so on. -.KE -.KS -.LP -\fBInput focus\fP -.IN "Input focus" "" "@DEF@" -.IP -The input focus is normally a window defining the scope for -processing of keyboard input. -If a generated keyboard event would normally be reported to this window -or one of its inferiors, -the event is reported normally. -Otherwise, the event is reported with respect to -the focus window. -The input focus also can be set such that all -keyboard events are discarded and such that the focus -window is dynamically taken to be the root window of whatever screen -the pointer is on at each keyboard event. -.KE -.KS -.LP -\fBInput manager\fP -.IN "Input manager" "" "@DEF@" -.IP -Control over keyboard input is typically provided by an input manager client. -.KE -.KS -.LP -\fBInputOnly window\fP -.IN "Window" "InputOnly" "@DEF@" -.IP -An -.PN InputOnly -window is a window that cannot be used for graphics requests. -.PN InputOnly -windows are invisible and can be used to control such things -as cursors, input event generation, and grabbing. -.PN InputOnly -windows cannot have -.PN InputOutput -windows as inferiors. -.KE -.KS -.LP -\fBInputOutput window\fP -.IN "Window" "InputOutput" "@DEF@" -.IP -An -.PN InputOutput -window is the normal kind of opaque window, used for both input and output. -.PN InputOutput -windows can have both -.PN InputOutput -and -.PN InputOnly -windows as inferiors. -.KE -.KS -.LP -\fBKey grabbing\fP -.IN "Key" "grabbing" "@DEF@" -.IP -Keys on the keyboard can be passively grabbed by a client. -When the key is pressed, -the keyboard is then actively grabbed by the client. -.KE -.KS -.LP -\fBKeyboard grabbing\fP -.IN "Keyboard" "grabbing" "@DEF@" -.IP -A client can actively grab control of the keyboard, and key events -will be sent to that client rather than the client the events would -normally have been sent to. -.KE -.KS -.LP -\fBKeysym\fP -.IN "Keysym" "" "@DEF@" -.IP -An encoding of a symbol on a keycap on a keyboard. -.KE -.KS -.LP -\fBMapped\fP -.IN "Mapped window" "" "@DEF@" -.IP -A window is said to be mapped if a map call has been performed on it. -Unmapped windows and their inferiors are never viewable or visible. -.KE -.KS -.LP -\fBModifier keys\fP -.IN "Modifier keys" "" "@DEF@" -.IP -Shift, Control, Meta, Super, Hyper, Alt, Compose, Apple, CapsLock, -ShiftLock, and similar keys are called modifier keys. -.KE -.KS -.LP -\fBMonochrome\fP -.IN "Monochrome" "" "@DEF@" -.IP -Monochrome is a special case of -.PN StaticGray -in which there are only two colormap entries. -.KE -.KS -.LP -\fBObscure\fP -.IN "Obscure" "" "@DEF@" -.IP -A window is obscured if some other window obscures it. -Window A obscures window B if both are viewable -.PN InputOutput -windows, A is higher in the global stacking order, -and the rectangle defined by the outside edges of A intersects -the rectangle defined by the outside edges of B. -Note the distinction between obscure and occludes. -Also note that window borders are included in the calculation -and that a window can be obscured and yet still have visible regions. -.KE -.KS -.LP -\fBOcclude\fP -.IN "Occlude" "" "@DEF@" -.IP -A window is occluded if some other window occludes it. -Window A occludes window B if both are mapped, A is higher in the global -stacking order, and the rectangle defined by the outside edges of A -intersects the rectangle defined by the outside edges of B. -Note the distinction between occludes and obscures. -Also note that window borders are included in the calculation. -.KE -.KS -.LP -\fBPadding\fP -.IN "Padding" "" "@DEF@" -.IP -Some padding bytes are inserted in the data stream to maintain -alignment of the protocol requests on natural boundaries. -This increases ease of portability to some machine architectures. -.KE -.KS -.LP -\fBParent window\fP -.IN "Window" "parent" "@DEF@" -.IP -If C is a child of P, then P is the parent of C. -.KE -.KS -.LP -\fBPassive grab\fP -.IN "Passive grab" "" "@DEF@" -.IP -Grabbing a key or button is a passive grab. -The grab activates when the key or button is actually pressed. -.KE -.KS -.LP -\fBPixel value\fP -.IN "Pixel value" "" "@DEF@" -.IP -A pixel is an N-bit value, where N is the number of bit planes used -in a particular window or pixmap (that is, -N is the depth of the window or pixmap). -For a window, -a pixel value indexes a colormap to derive an actual color to be displayed. -.KE -.KS -.LP -\fBPixmap\fP -.IN "Pixmap" "" "@DEF@" -.IP -A pixmap is a three-dimensional array of bits. -A pixmap is normally thought of as a two-dimensional array of pixels, -where each pixel can be a value from 0 to (2^N)-1 -and where N is the depth (z axis) of the pixmap. -A pixmap can also be thought of as a stack of N bitmaps. -.KE -.KS -.LP -\fBPlane\fP -.IN "Plane" "" "@DEF@" -.IP -When a pixmap or window is thought of as a stack of bitmaps, -each bitmap is called a plane or bit plane. -.KE -.KS -.LP -\fBPlane mask\fP -.IN "Plane" "mask" "@DEF@" -.IP -Graphics operations can be restricted to only affect a subset of bit -planes of a destination. -A plane mask is a bit mask describing which planes are to be modified. -The plane mask is stored in a graphics context. -.KE -.KS -.LP -\fBPointer\fP -.IN "Pointer" "" "@DEF@" -.IP -The pointer is the pointing device attached to the cursor -and tracked on the screens. -.KE -.KS -.LP -\fBPointer grabbing\fP -.IN "Pointer" "grabbing" "@DEF@" -.IP -A client can actively grab control of the pointer. -Then button and motion events will be sent to that client -rather than the client the events would normally have been sent to. -.KE -.KS -.LP -\fBPointing device\fP -.IN "Pointing device" "" "@DEF@" -.IP -A pointing device is typically a mouse, tablet, or some other -device with effective dimensional motion. -There is only one visible cursor defined by the core protocol, -and it tracks whatever pointing device is attached as the pointer. -.KE -.KS -.LP -\fBProperty\fP -.IN "Property" "" "@DEF@" -.IP -Windows may have associated properties, -which consist of a name, a type, a data format, and some data. -The protocol places no interpretation on properties. -They are intended as a general-purpose naming mechanism for clients. -For example, clients might use properties to share information such as resize -hints, program names, and icon formats with a window manager. -.KE -.KS -.LP -\fBProperty list\fP -.IN "Property list" "" "@DEF@" -.IP -The property list of a window is the list of properties that have -been defined for the window. -.KE -.KS -.LP -\fBPseudoColor\fP -.IN "PseudoColor" "" "@DEF@" -.IP -.PN PseudoColor -is a class of colormap in which a pixel value indexes the colormap to -produce independent red, green, and blue values; -that is, the colormap is viewed as an array of triples (RGB values). -The RGB values can be changed dynamically. -.KE -.KS -.LP -\fBRedirecting control\fP -.IN "Redirecting control" "" "@DEF@" -.IP -Window managers (or client programs) may want to enforce window layout -policy in various ways. -When a client attempts to change the size or position of a window, -the operation may be redirected to a specified client -rather than the operation actually being performed. -.KE -.KS -.LP -\fBReply\fP -.IN "Reply" "" "@DEF@" -.IP -Information requested by a client program is sent back to the client -with a reply. -Both events and replies are multiplexed on the same connection. -Most requests do not generate replies, -although some requests generate multiple replies. -.KE -.KS -.LP -\fBRequest\fP -.IN "Request" "" "@DEF@" -.IP -A command to the server is called a request. -It is a single block of data sent over a connection. -.KE -.KS -.LP -\fBResource\fP -.IN "Resource" "" "@DEF@" -.IP -Windows, pixmaps, cursors, fonts, graphics contexts, and colormaps are -known as resources. -They all have unique identifiers associated with them for naming purposes. -The lifetime of a resource usually is bounded by the lifetime of the connection -over which the resource was created. -.KE -.KS -.LP -\fBRGB values\fP -.IN "RGB values" "" "@DEF@" -.IP -Red, green, and blue (RGB) intensity values are used to define color. -These values are always represented as 16-bit unsigned numbers, -with 0 being the minimum intensity and 65535 being the maximum intensity. -The server scales the values to match the display hardware. -.KE -.KS -.LP -\fBRoot\fP -.IN "Root" "" "@DEF@" -.IP -The root of a pixmap, colormap, or graphics context is the same as the root of -whatever drawable was used when the pixmap, colormap, or graphics context was -created. -The root of a window is the root window under which the window was created. -.KE -.KS -.LP -\fBRoot window\fP -.IN "Window" "root" "@DEF@" -.IP -Each screen has a root window covering it. -It cannot be reconfigured or unmapped, -but it otherwise acts as a full-fledged window. -A root window has no parent. -.KE -.KS -.LP -\fBSave set\fP -.IN "Save set" "" "@DEF@" -.IP -The save set of a client is a list of other clients' windows that, -if they are inferiors of one of the client's windows at connection close, -should not be destroyed and that should be remapped if currently unmapped. -Save sets are typically used by window managers to avoid -lost windows if the manager terminates abnormally. -.KE -.KS -.LP -\fBScanline\fP -.IN "Scanline" "" "@DEF@" -.IP -A scanline is a list of pixel or bit values viewed as a horizontal -row (all values having the same y coordinate) of an image, with the -values ordered by increasing x coordinate. -.KE -.KS -.LP -\fBScanline order\fP -.IN "Scanline order" "" "@DEF@" -.IP -An image represented in scanline order contains scanlines ordered by -increasing y coordinate. -.KE -.KS -.LP -\fBScreen\fP -.IN "Screen" "" "@DEF@" -.IP -A server can provide several independent screens, -which typically have physically independent monitors. -This would be the expected configuration when there is only a single keyboard -and pointer shared among the screens. -.KE -.KS -.LP -\fBSelection\fP -.IN "Selection" "" "@DEF@" -.IP -A selection can be thought of as an indirect property with dynamic -type; that is, rather than having the property stored in the server, -it is maintained by some client (the ``owner''). -A selection is global in nature and is thought of as belonging to the user -(although maintained by clients), rather than as being private to a particular -window subhierarchy or a particular set of clients. -When a client asks for the contents of a selection, -it specifies a selection ``target type''. -This target type can be used to control the transmitted representation of the -contents. -For example, -if the selection is ``the last thing the user clicked on'' -and that is currently an image, then the target type might specify -whether the contents of the image should be sent in XY format or Z format. -The target type can also be used to control the class of contents transmitted; -for example, asking for the ``looks'' (fonts, line -spacing, indentation, and so on) of a paragraph selection rather than the -text of the paragraph. -The target type can also be used for other purposes. -The protocol does not constrain the semantics. -.KE -.KS -.LP -\fBServer\fP -.IN "Server" "" "@DEF@" -.IP -The server provides the basic windowing mechanism. -It handles connections from clients, -multiplexes graphics requests onto the screens, -and demultiplexes input back to the appropriate clients. -.KE -.KS -.LP -\fBServer grabbing\fP -.IN "Server" "grabbing" "@DEF@" -.IP -The server can be grabbed by a single client for exclusive use. -This prevents processing of any requests from other client connections until -the grab is completed. -This is typically only a transient state for -such things as rubber-banding, pop-up menus, or to execute requests -indivisibly. -.KE -.KS -.LP -\fBSibling\fP -.IN "Sibling" "" "@DEF@" -.IP -Children of the same parent window are known as sibling windows. -.KE -.KS -.LP -\fBStacking order\fP -.IN "Stacking order" "" "@DEF@" -.IP -Sibling windows may stack on top of each other. -Windows above other windows both obscure and occlude those lower windows. -This is similar to paper on a desk. -The relationship between sibling windows is known as the stacking order. -.KE -.KS -.LP -\fBStaticColor\fP -.IN "StaticColor" "" "@DEF@" -.IP -.PN StaticColor -can be viewed as a degenerate case of -.PN PseudoColor -in which the RGB values are predefined and read-only. -.KE -.KS -.LP -\fBStaticGray\fP -.IN "StaticGray" "" "@DEF@" -.IP -.PN StaticGray -can be viewed as a degenerate case of -.PN GrayScale -in which the gray values are predefined and read-only. -The values are typically linear or near-linear increasing ramps. -.KE -.KS -.LP -\fBStipple\fP -.IN "Stipple" "" "@DEF@" -.IP -A stipple pattern is a bitmap that is used to tile a region that will serve -as an additional clip mask for a fill operation with the foreground -color. -.KE -.KS -.LP -\fBString Equivalence\fP -.IN "String Equivalence" "" "@DEF@" -.IP -Two ISO Latin-1 STRING8 values are considered equal if they are the same -length and if corresponding bytes are either equal or are equivalent as -follows: decimal values 65 to 90 inclusive (characters ``A'' to ``Z'') are -pairwise equivalent to decimal values 97 to 122 inclusive -(characters ``a'' to ``z''), decimal values 192 to 214 inclusive -(characters ``A grave'' to ``O diaeresis'') are pairwise equivalent to decimal -values 224 to 246 inclusive (characters ``a grave'' to ``o diaeresis''), -and decimal values 216 to 222 inclusive (characters ``O oblique'' to ``THORN'') -are pairwise equivalent to decimal values 246 to 254 inclusive -(characters ``o oblique'' to ``thorn''). -.KE -.KS -.LP -\fBTile\fP -.IN "Tile" "" "@DEF@" -.IP -A pixmap can be replicated in two dimensions to tile a region. -The pixmap itself is also known as a tile. -.KE -.KS -.LP -\fBTimestamp\fP -.IN "Timestamp" "" "@DEF@" -.IP -A timestamp is a time value, expressed in milliseconds. -It typically is the time since the last -server reset. -Timestamp values wrap around (after about 49.7 days). -The server, given its current time is represented by timestamp T, -always interprets timestamps from clients by treating half of the -timestamp space as being earlier in time than T and half of the -timestamp space as being later in time than T. -One timestamp value (named -.PN CurrentTime ) -is never generated by the server. -This value is reserved for use in requests to represent the current -server time. -.KE -.KS -.LP -\fBTrueColor\fP -.IN "TrueColor" "" "@DEF@" -.IP -.PN TrueColor -can be viewed as a degenerate case of -.PN DirectColor -in which the subfields in the pixel value directly encode -the corresponding RGB values; that is, the colormap has predefined -read-only RGB values. -The values are typically linear or near-linear increasing ramps. -.KE -.KS -.LP -\fBType\fP -.IN "Type" "" "@DEF@" -.IP -A type is an arbitrary atom used to identify the interpretation of -property data. -Types are completely uninterpreted by the server -and are solely for the benefit of clients. -.KE -.KS -.LP -\fBViewable\fP -.IN "Viewable" "" "@DEF@" -.IP -A window is viewable if it and all of its ancestors are mapped. -This does not imply that any portion of the window is actually visible. -Graphics requests can be performed on a window when it is not viewable, -but output will not be retained unless the server is maintaining -backing store. -.KE -.KS -.LP -\fBVisible\fP -.IN "Visible" "" "@DEF@" -.IP -A region of a window is visible if someone looking at the screen can -actually see it; -that is, the window is viewable and the region is not occluded by any -other window. -.KE -.KS -.LP -\fBWindow gravity\fP -.IN "Window" "gravity" "@DEF@" -.IP -When windows are resized, -subwindows may be repositioned automatically relative to some position -in the window. -This attraction of a subwindow to some part of its parent is known -as window gravity. -.KE -.KS -.LP -\fBWindow manager\fP -.IN "Window" "manager" "@DEF@" -.IP -Manipulation of windows on the screen and much of the user interface -(policy) is typically provided by a window manager client. -.KE -.KS -.LP -\fBXYFormat\fP -.IN "XYFormat" "" "@DEF@" -.IP -The data for a pixmap is said to be in XY format if it is organized as -a set of bitmaps representing individual bit planes, with the planes -appearing from most-significant to least-significant in bit order. -.KE -.KS -.LP -\fBZFormat\fP -.IN "ZFormat" "" "@DEF@" -.IP -The data for a pixmap is said to be in Z format if it is organized as -a set of pixel values in scanline order. -.KE -.LP -.bp diff --git a/doc/xorg-docs/specs/XProtocol/indexmacros.t b/doc/xorg-docs/specs/XProtocol/indexmacros.t deleted file mode 100644 index 45dafff58..000000000 --- a/doc/xorg-docs/specs/XProtocol/indexmacros.t +++ /dev/null @@ -1,3 +0,0 @@ -.eh '\s+1\fBX Protocol\fP''\fBX11, Release 6.8\fP\s-1' -.oh '\s+1\fBX Protocol\fP''\fBX11, Release 6.8\fP\s-1' -.so index.pageno diff --git a/doc/xorg-docs/specs/XProtocol/postproc b/doc/xorg-docs/specs/XProtocol/postproc deleted file mode 100644 index 3b59b4e7b..000000000 --- a/doc/xorg-docs/specs/XProtocol/postproc +++ /dev/null @@ -1,14 +0,0 @@ -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.bp -\& -.XS -Index -.XE -.EQ -delim $$ -.EN -.tm .pn \n% -.PX diff --git a/doc/xorg-docs/specs/Xaw/AsciiSink b/doc/xorg-docs/specs/Xaw/AsciiSink deleted file mode 100644 index 56dc20ea6..000000000 --- a/doc/xorg-docs/specs/Xaw/AsciiSink +++ /dev/null @@ -1,77 +0,0 @@ -.\" $Xorg: AsciiSink,v 1.3 2000/08/17 19:42:25 cpqbld Exp $ -.LP -.NH 2 -Ascii Sink Object and Multi Sink Object -.LP -.XS - AsciiSink Object -.XE -.IN "AsciiSink object" "" "@DEF@" -.LP -.Ds 0 -.TA 2.0i -.ta 2.0i -Application Header file -.IN "AsciiSink.h" "" -Class Header file -.IN "AsciiSinkP.h" "" -Class asciiSinkObjectClass -.IN "asciiSinkObjectClass" "" -Class Name AsciiSink -.IN "AsciiSink object" "class name" -Superclass TextSink -.De -.LP -The AsciiSink or MultiSink object is used by a text widget to render the text. -Depending on its \fBinternational\fP resource, a -AsciiText widget will create one or the other of these when the AsciiText -itself is created. Both types are nearly identical; the following discussion -applies to both, with MultiSink differences noted only as they occur. -The AsciiSink -will display all printing characters in an 8 bit font, along with handling Tab -and Carriage Return. The name has been left as ``AsciiSink'' for compatibility. -\fIThe MultiSink will display all printing characters in a font set, along with -handling Tab and Carriage -Return.\fP The source object also reports the text window metrics to the -text widgets. -.NH 3 -Resources -.LP -When creating an AsciiSink object instance, the following resources are -retrieved from the argument list or from the resource database: -.LP -.IN "AsciiSink object" "resources" -.TS H -lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -background Background Pixel XtDefaultBackground -destroyCallback Callback XtCallbackList NULL -displayNonprinting Output Boolean True -echo Output Boolean True -font Font XFontStruct* XtDefaultFont -fontSet FontSet XFontSet XtDefaultFontSet -foreground Foreground Pixel XtDefaultForeground -.sp 3p -_ -.TE -.Bg Bold -This resource is retrieved by the AsciiSink instead of being copied -from the Text widget. -.Dc -.Sd Bold -.Sh Bold -.IP \fBfont\fP 1.5i -The text font to use when displaying the \fBstring\fP. -(This resource is present in the AsciiSink, but not the MultiSink.) -.IP \fBfontSet\fP 1.5i -The text font set to use when displaying the \fBstring\fP. -(This resource is present in the MultiSink, but not the AsciiSink.) - diff --git a/doc/xorg-docs/specs/Xaw/AsciiSource b/doc/xorg-docs/specs/Xaw/AsciiSource deleted file mode 100644 index 3dfe7ac6e..000000000 --- a/doc/xorg-docs/specs/Xaw/AsciiSource +++ /dev/null @@ -1,208 +0,0 @@ -.\" $Xorg: AsciiSource,v 1.3 2000/08/17 19:42:26 cpqbld Exp $ -.NH 2 -Ascii Source Object and Multi Source Object -.LP -.XS - AsciiSrc Object -.XE -.IN "AsciiSrc object" "" "@DEF@" -.LP -.Ds 0 -.TA 2.0i -.ta 2.0i -Application Header file or -.IN "AsciiSrc.h" "" -Class Header file or -.IN "AsciiSrcP.h" "" -Class asciiSrcObjectClass or multiSrcObjectClass -.IN "asciiSrcObjectClass" "" -Class Name AsciiSrc or MultiSrc -.IN "AsciiSrc object" "class name" -Superclass TextSource -.De -.LP -The AsciiSrc or MultiSrc object is used by a text widget to read the text from a -file or string in memory. Depending on its \fBinternational\fP resource, an -AsciiText widget will create one or the other of these when the AsciiText -itself is created. Both types are nearly identical; the following discussion -applies to both, with MultiSrc differences noted only as they occur. -.LP -The AsciiSrc understands all Latin1 characters plus Tab -and Carriage Return. \fIThe MultiSrc understands any set of character sets that -the underlying X implementation's internationalization handles.\fP -.LP -The AsciiSrc can be either of two types: \fBXawAsciiFile\fP -or \fBXawAsciiString\fP. -.LP -AsciiSrc objects of type \fBXawAsciiFile\fP read the text from a file and -store it -into an internal buffer. This buffer may then be modified, provided the -text widget is in the correct edit mode, just as if it were a source of -type \fBXawAsciiString\fP. Unlike R3 and earlier versions of the AsciiSrc, -it is now possible to specify an editable disk source. The file is not -updated, however, until a call to \fBXawAsciiSave\fP is made. When the -source is in this mode the \fBuseStringInPlace\fP resource is ignored. -.LP -AsciiSrc objects of type \fBXawAsciiString\fP have the text buffer -implemented as a string. -\fIMultiSrc objects of type \fBXawAsciiString\fP have the text buffer -implemented as a wide character string.\fP -The string owner is responsible for allocating and managing storage for the -string. -.LP -In the default case for AsciiSrc objects of type \fBXawAsciiString\fP, -the resource \fBuseStringInPlace\fP is false, -and the widget owns the string. The initial value of the -string resource, and any update made by the application -programmer to the string resource with \fBXtSetValues\fP, is copied -into memory private to the widget, and managed internally by the widget. -The application writer -does not need to worry about running out of buffer space -(subject to the total memory available to the application). -The performance does not decay linearly as the buffer grows -large, as is necessarily the case when the text buffer is used -in place. The application writer must use \fBXtGetValues\fP to -determine the contents of the text buffer, which will return -a copy of the widget's text buffer as -it existed at the time of the \fBXtGetValues\fP call. This copy -is not affected by subsequent updates to the text buffer, i.e., -it is not updated as the user types input into the text buffer. -This copy is freed upon the next call to XtGetValues to -retrieve the string resource; however, to conserve memory, -there is a convenience routine, \fBXawAsciiSourceFreeString\fP, allowing the -application programmer to direct the widget to free the copy. -.LP -When the resource \fBuseStringInPlace\fP is true and the AsciiSrc object -is of type \fBXawAsciiString\fP, the application -is the string owner. The widget will take the value -of the string resource as its own text buffer, and the \fBlength\fP -resource indicates the buffer size. In this case -the buffer contents change as the user types at the widget; -it is not necessary to call \fBXtGetValues\fP on the string -resource to determine the contents of the buffer\*-it will -simply return the address of the application's implementation -of the text buffer. -.NH 3 -Resources -.LP -When creating an AsciiSrc object instance, the following resources are -retrieved from the argument list or from the resource database: -.LP -.IN "AsciiSrc object" "resources" -.TS H -lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -callback Callback XtCallbackList NULL -dataCompression DataCompression Boolean True -destroyCallback Callback Callback NULL -editType EditType EditMode XawtextRead -length Length Int A length of \fBstring\fP -pieceSize PieceSize Int BUFSIZ -string String String NULL -type Type AsciiType XawAsciiString -useStringInPlace UseStringInPlace Boolean False -.sp 3p -_ -.TE -.Oc Bold -.Dc -.Od Bold -.Oe -.Ol Bold -.Op Bold -.Os Bold -.Ot Bold -.Ou Bold -.NH 3 -Convenience Routines -.LP -The AsciiSrc has a few convenience routines that allow the -application programmer quicker or easier access to some of the -commonly used functionality of the AsciiSrc. -.NH 4 -Conserving Memory -.LP -When the AsciiSrc widget is not in \fBuseStringInPlace\fP mode -space must be allocated whenever the file is saved, or the string is -requested with a call to \fBXtGetValues\fP. This memory is allocated on the -fly, and remains valid until the next time a string needs to be allocated. -You may save memory by freeing this string as soon as you are done -with it by calling \fBXawAsciiSourceFreeString\fP. -.FD 0 -void XawAsciiSourceFreeString(\fIw\fP) -.IN "XawAsciiSourceFreeString" "" @DEF@ -.br -Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the AsciiSrc object. -.LP -This function will free the memory that contains the string pointer returned -by \fBXtGetValues\fP. This will normally happen automatically when -the next call to \fBXtGetValues\fP occurs, or when the widget is destroyed. -.NH 4 -Saving Files -.LP -To save the changes made in the current text source into a file use -\fBXawAsciiSave\fP. -.FD 0 -Boolean XawAsciiSave(\fIw\fP) -.IN "XawAsciiSave" "" @DEF@ -.br -Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the AsciiSrc object. -.LP -\fBXawAsciiSave\fP returns \fBTrue\fP if the save was successful. -It will update the file named in the \fBstring\fP resource. -If the buffer has not been changed, no action will be taken. This function -only works on an AsciiSrc of type \fBXawAsciiFile\fP. -.LP -.sp 1 -To save the contents of the current text buffer into a named file use -\fBXawAsciiSaveAsFile\fP. -.FD 0 -Boolean XawAsciiSaveAsFile(\fIw\fP, \fIname\fP) -.IN "XawAsciiSaveAsFile" "" @DEF@ -.br -Widget \fIw\fP; -.br -String \fIname\fP; -.FN -.IP \fIw\fP 1i -Specifies the AsciiSrc object. -.IP \fIname\fP 1i -The name of the file to save the current buffer into. -.LP -This function returns \fBTrue\fP if the save was successful. -\fBXawAsciiSaveAsFile\fP will work with a buffer of either type -\fBXawAsciiString\fP or type \fBXawAsciiFile\fP. -.NH 4 -Seeing if the Source has Changed -.LP -To find out if the text buffer in an AsciiSrc object has changed -since the last time it was saved with \fBXawAsciiSave\fP or queried -.IN "XawAsciiSave" "" -use \fBXawAsciiSourceChanged\fP. -.FD 0 -Boolean XawAsciiSourceChanged(\fIw\fP) -.IN "XawAsciiSourceChanged" "" @DEF@ -.br -Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the AsciiSrc object. -.LP -This function will return \fBTrue\fP if the source has changed since -the last time it was saved or queried. The internal change flag is -reset whenever the string is queried via \fBXtGetValues\fP or the -buffer is saved via \fBXawAsciiSave\fP. diff --git a/doc/xorg-docs/specs/Xaw/AsciiText b/doc/xorg-docs/specs/Xaw/AsciiText deleted file mode 100644 index 430751dae..000000000 --- a/doc/xorg-docs/specs/Xaw/AsciiText +++ /dev/null @@ -1,166 +0,0 @@ -.\" $Xorg: AsciiText,v 1.3 2000/08/17 19:42:26 cpqbld Exp $ -.NH 2 -Ascii Text Widget -.LP -.XS - AsciiText Widget -.XE -.IN "AsciiText widget" "" "@DEF@" -.LP -.Ds 0 -.TA 2.0i -.ta 2.0i -Application Header file -.IN "AsciiText.h" "" -ClassHeader file -.IN "AsciiTextP.h" "" -Class asciiTextWidgetClass -.IN "asciiTextWidgetClass" "" -Class Name Text -.IN "AsciiText widget" "class name" -Superclass Text -Sink Name textSink -Source Name textSource -.De -.sp 1 -.LP -For the ease of internationalization, the AsciiText widget class name has not -been changed, although it is actually able to support non-ASCII locales. -The AsciiText widget is really a collection of smaller parts. It -includes the Text widget itself, a ``Source'' (which supports memory management), -and a ``Sink'' (which handles the display). There are currently two supported -sources, the AsciiSrc and MultiSrc, and two supported sinks, the AsciiSink and -.IN "AsciiSrc object" "" -.IN "AsciiSink object" "" -.IN "MultiSrc object" "" -.IN "MultiSink object" "" -MultiSink. Some of -the resources listed below are not actually resources of the -AsciiText, but belong to the associated source or sink. This is -is noted in the explanation of each resource where it applies. When -specifying these resources in a resource file it is necessary to use -\fI*AsciiText*resource_name\fP instead of -\fI*AsciiText.resource_name\fP, since they actually belong to the -children of the AsciiText widget, and not the AsciiText widget itself. -However, these resources may be set directly on the AsciiText widget at -widget creation time, or via \fBXtSetValues\fP. -.NH 3 -Resources -.LP -When creating an AsciiText widget instance, the following resources are -retrieved from the argument list or from the resource database: -.LP -.IN "AsciiText widget" "resources" -.TS H -expand; -lw(1i) lw(1i) lw(1.1i) lw(.5i) lw(1.9i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -accelerators Accelerators AcceleratorTable NULL -ancestorSensitive AncestorSensitive Boolean D True -autoFill AutoFill Boolean False -background Background Pixel XtDefaultBackground -backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderColor BorderColor Pixel XtDefaultForeground -borderPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderWidth BorderWidth Dimension 1 -bottomMargin Margin Position 2 -callback Callback XtCallbackList NULL -colormap Colormap Colormap Parent's Colormap -cursor Cursor Cursor XC_xterm -cursorName Cursor String NULL -dataCompression DataCompression Boolean True -depth Depth int C Parent's Depth -destroyCallback Callback XtCallbackList NULL -displayCaret Output Boolean True -displayNonprinting Output Boolean True -displayPosition TextPosition XawTextPosition 0 -echo Output Boolean True -editType EditType XawTextEditType XawtextRead -font Font XFontStruct* XtDefaultFont -fontSet FontSet XFontSet XtDefaultFontSet -foreground Foreground Pixel XtDefaultForeground -height Height Dimension A Font height + margins -insensitiveBorder Insensitive Pixmap GreyPixmap -insertPosition TextPosition int 0 -international International Boolean C False -leftMargin Margin Dimension 2 -length Length int A length of \fBstring\fP -mappedWhenManaged MappedWhenManaged Boolean True -pieceSize PieceSize XawTextPosition BUFSIZ -pointerColor Foreground Pixel XtDefaultForeground -pointerColorBackground Background Pixel XtDefaultBackground -resize Resize XawTextResizeMode XawtextResizeNever -rightMargin Margin Position 2 -screen Screen Screen R Parent's Screen -scrollHorizontal Scroll XawTextScrollMode XawtextScrollNever -scrollVertical Scroll XawTextScrollMode XawtextScrollNever -selectTypes SelectTypes XawTextSelectType* See above -sensitive Sensitive Boolean True -string String String NULL -textSink TextSink Widget An AsciiSink -textSource TextSource Widget An AsciiSrc -topMargin Margin Position 2 -translations Translations TranslationTable See above -type Type XawAsciiType XawAsciiString -useStringInPlace UseStringInPlace Boolean False -width Width Dimension 100 -wrap Wrap WrapMode XawtextWrapNever -x Position Position 0 -y Position Position 0 -.sp 3p -_ -.TE -.Ac -.As -.Af -.Bg -.Gp -.Bc -.Bp -.Bw -.Tm -.Oc AsciiText -.Cm -.Cu -.Cn -.Od AsciiText -.Dp -.Dc -.Tc -.Sd AsciiText -.Td -.Oe AsciiText -.Sh AsciiText -.Sf AsciiText -.Sn AsciiText -.Sg AsciiText -.Hw -.Ib -.Ti -.Ol AsciiText -.Mm -.Pf -.Pb -.Op AsciiText -.Tz -.Sc -.Ts -.St -.Se -.Os AsciiText -.To -.Tr -.Ot AsciiText -.Ou AsciiText -.Tw -.Xy - - diff --git a/doc/xorg-docs/specs/Xaw/Box b/doc/xorg-docs/specs/Xaw/Box deleted file mode 100644 index 5737a975b..000000000 --- a/doc/xorg-docs/specs/Xaw/Box +++ /dev/null @@ -1,139 +0,0 @@ -.\" $Xorg: Box,v 1.3 2000/08/17 19:42:26 cpqbld Exp $ -.NH 2 -Box Widget -.LP -.XS - Box Widget -.XE -.IN "Box widget" "" "@DEF@" -.Ds 0 -.TA 2.0i -.ta 2.0i -.sp -Application Header file -.IN "Box.h" "" -Class Header file -.IN "BoxP.h" "" -Class boxWidgetClass -.IN "boxWidgetClass" "" -Class Name Box -.IN "Box widget" "class name" -Superclass Composite -.sp -.De -.LP -The Box widget provides geometry management of arbitrary widgets in a -box of a specified dimension. The children are rearranged when -resizing events occur either on the Box or its children, or when -children are managed or unmanaged. The Box widget always attempts to -pack its children as tightly as possible within the geometry allowed by -its parent. -.LP -Box widgets are commonly used to manage a related set of buttons and -are often called ButtonBox widgets, but the children are not -limited to buttons. The Box's children are arranged on a background that -has its own specified dimensions and color. -.NH 3 -Resources -.LP -When creating a Box widget instance, the following resources are -retrieved from the argument list or from the resource database: -.LP -.IN "Box widget" "resources" -.TS H -expand; -lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -accelerators Accelerators AcceleratorTable NULL -ancestorSensitive AncestorSensitive Boolean D True -background Background Pixel XtDefaultBackground -backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderColor BorderColor Pixel XtDefaultForeground -borderPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderWidth BorderWidth Dimension 1 -children ReadOnly WidgetList R NULL -colormap Colormap Colormap Parent's Colormap -depth Depth int C Parent's Depth -destroyCallback Callback XtCallbackList NULL -height Height Dimension A see \fBLayout Semantics\fP -hSpace HSpace Dimension 4 -mappedWhenManaged MappedWhenManaged Boolean True -numChildren ReadOnly Cardinal R 0 -orientation Orientation Orientation XtorientVertical -screen Screen Screen R Parent's Screen -sensitive Sensitive Boolean True -vSpace VSpace Dimension 4 -translations Translations TranslationTable NULL -width Width Dimension A see \fBLayout Semantics\fP -x Position Position 0 -y Position Position 0 -.sp 3p -_ -.TE -.Ac -.As -.Bg -.Gp -.Bc -.Bp -.Bw -.Ch -.Cm -.Dp -.Dc -.Hw -.IP \fBhSpace\fP 1.5i -.br -.ns -.IP \fBvSpace\fP 1.5i -The amount of space, in pixels, to leave between the children. This -resource specifies the amount of space left between the outermost -children and the edge of the box. -.Mm -.Nc -.IP \fBorientation\fP 1.5i -Specifies whether the preferred shape of the box (i.e. the result -returned by the query_geometry class method) is tall and narrow -\fBXtorientVertical\fP or short and wide \fPXtorientHorizontal\fP. -.IN "XtorientVertical" "" -.IN "XtorientHorizontal" "" -.IN "conversions" "Orientation" -When the Box is a child of a parent which enforces width constraints, it -is usually better to specify \fBXtorientVertical\fP (the default). -When the parent enforces height constraints, it is usually better to -specify \fBXtorientHorizontal\fP. -.Rs "horizontal \fPand\fB vertical" -.Sc -.Se -.Tr -.Xy -.NH 3 -Layout Semantics -.IN "Box widget" "layout semantics" -.LP -Each time a child is managed or unmanaged, the Box widget will attempt -to reposition the remaining children to compact the box. Children are -positioned in order left to right, top to bottom. The packing -algorithm used depends on the \fBorientation\fP of the Box. -.IP \fBXtorientVertical\fP 1.5i -.IN "XtorientVertical" "" @DEF@ -When the next child does not fit on the current row, a new row is -started. If a child is wider than the width of the box, the box will -request a larger width from its parent and will begin the layout -process from the beginning if a new width is granted. -.IP \fBXtorientHorizontal\fP 1.5i -.IN "XtorientHorizontal" "" @DEF@ -When the next child does not fit on the current row, the Box widens if -possible (so as to keep children on a single row); otherwise a new row is -started. -.LP -After positioning all children, the Box widget attempts to shrink its -own size to the minimum dimensions required for the layout. diff --git a/doc/xorg-docs/specs/Xaw/CH1 b/doc/xorg-docs/specs/Xaw/CH1 deleted file mode 100644 index f0391ea2b..000000000 --- a/doc/xorg-docs/specs/Xaw/CH1 +++ /dev/null @@ -1,411 +0,0 @@ -.\" $Xorg: CH1,v 1.3 2000/08/17 19:42:26 cpqbld Exp $ -.ps 11 -.nr PS 11 -.ds LH \fBAthena Widget Set\fP -.ds CH -.ds RH \fBX11, Release 6.8\fP -.bp 1 -.af PN 1 -\& -.sp 1 -.ce 3 -\s+1\fBChapter 1\fP\s-1 - -\s+1\fBAthena Widgets and The Intrinsics\fP\s-1 -.sp 2 -.nr H1 1 -.if \n(GS .nr nh*hl 1 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.LP -.XS -Chapter 1 \- Athena Widgets and The \*(xI -.XE -The X Toolkit is made up of two distinct pieces, the Xt \*(xI and a -widget set. The Athena widget set is a sample implementation of a -widget set built upon the \*(xI. In the \*(tk, a widget is the -combination of an X window or subwindow and its associated input and -output semantics. -.LP -Because the \*(xI provide the same basic functionality to all widget -sets it may be possible to use widgets from the Athena widget set with -other widget sets based upon the \*(xI. Since widget sets may also -implement private protocols, all functionality may not be available when -mixing and matching widget sets. For information about the \*(xI, see -the \fI\*(xT\fP. -.LP -The Athena widget set is a library package layered on top of the \*(xI -and Xlib that provides a set of user interface tools sufficient to build -a wide variety of applications. This layer extends the basic -abstractions provided by X and provides the next layer of functionality -primarily by supplying a cohesive set of sample widgets. Although the -\*(xI are a Consortium standard, there is no standard widget set. -.LP -To the extent possible, the \*(xI are "policy-free". The application -environment and widget set, not the \*(xI, define, implement, and -enforce: -.IP \(bu 5 -Policy -.IP \(bu 5 -Consistency -.IP \(bu 5 -Style -.LP -Each individual widget implementation defines its own policy. The \*(tk -design allows for, but does not necessarily encourage, the free mixing -of radically differing widget implementations. -.NH 2 -Introduction to the \*(tk -.LP -.XS - Introduction to the \*(tk -.XE -.IN "introduction" "" "@DEF@" -The \*(tk provides tools that simplify the design of -application user interfaces in the X Window System programming environment. -It assists application programmers by providing a set of common -underlying user-interface functions. It also lets widget programmers -modify existing widgets, by subclassing, or add new widgets. By using -the \*(tk in their applications, programmers can present a similar -user interface across applications to all workstation users. -.LP -The \*(tk consists of: -.IP \(bu 5 -A set of \*(xI functions for building widgets -.IP \(bu 5 -An architectural model for constructing widgets -.IP \(bu 5 -A widget set for application programming -.LP -While the majority of the \*(xI functions are intended -for the widget programmer, -a subset of the \*(xI functions are to be used by application programmers -(see \fI\*(xT\fP). -The architectural model lets the widget programmer design new widgets -by using the \*(xI and by combining other widgets. -The application interface layers built on top of the \*(tk include a -coordinated set of widgets and composition policies. -Some of these widgets and policies are specific to a single -application domain, and others are common to a variety of -applications. -.LP -The remainder of this chapter discusses the \*(tk and Athena widget set: -.IP \(bu 5 -Terminology -.IP \(bu 5 -Model -.IP \(bu 5 -Conventions used in this manual -.IP \(bu 5 -Format of the Widget Reference Chapters -.NH 2 -Terminology -.LP -.XS - Terminology -.XE -.LP -In addition to the terms already defined for X programming (see \fI\*(xL\fP), -the following terms are specific to the \*(xI and Athena widget set -and used throughout this document. -.LP -\fBApplication programmer\fP -.IN "application programmer" "" "@DEF@" -.IP -A programmer who uses the \*(tk to produce an application user interface. -.LP -\fBChild\fP -.IN "child" "" "@DEF" -.IP -A widget that is contained within another "parent" widget. -.LP -\fBClass\fP -.IN "class" "" "@DEF@" -.IP -The general group to which a specific object belongs. -.LP -\fBClient\fP -.IN "client" "" "@DEF@" -.IP -A function that uses a widget in an application or for composing -other widgets. -.LP -\fBFullName\fP -.IN "FullName" "" "@DEF" -.IP -The name of a widget instance appended to the full name of its parent. -.LP -\fBInstance\fP -.IN "instance" "" "@DEF@" -.IP -A specific widget object as opposed to a general widget class. -.LP -\fBMethod\fP -.IN "method" "" "@DEF@" -.IP -A function or procedure implemented by a widget class. -.LP -\fBName\fP -.IN "name" "widget" "@DEF@" -.IP -The name that is specific to an instance of a widget for a given client. -This name is specified at creation time and cannot be modified. -.LP -\fBObject\fP -.IN "object" "" "@DEF@" -.IP -A data abstraction consisting of private data and private and public -functions that operate on the private data. -Users of the abstraction can interact with the object only through calls -to the object's public functions. -In the \*(tk, -some of the object's public functions are called directly by the application, -while others are called indirectly when the application calls the common -\*(xI functions. -In general, if a function is common to all widgets, -an application uses a single \*(xI function to invoke the function for all -types of widgets. -If a function is unique to a single widget type, -the widget exports the function. -.LP -\fBParent\fP -.IN "parent" "" "@DEF@" -.IP -A widget that contains at least one other ("child") widget. -A parent widget is also known as a composite widget. -.LP -\fBResource\fP -.IN "resource" "" "@DEF@" -.IP -A named piece of data in a widget that can be set by a client, -by an application, or by user defaults. -.LP -\fBSuperclass\fP -.IN "superclass" "" "@DEF@" -.IP -A larger class of which a specific class is a member. -All members of a class are also members of the superclass. -.LP -\fBUser\fP -.IN "user" "" "@DEF@" -.IP -A person interacting with a workstation. -.LP -\fBWidget\fP -.IN "widget" "" "@DEF@" -.IP -An object providing a user-interface abstraction (for example, a Scrollbar -widget). -.LP -\fBWidget class\fP -.IN "widget class" "" "@DEF@" -.IP -The general group to which a specific widget belongs, -otherwise known as the type of the widget. -.LP -\fBWidget programmer\fP -.IN "widget programmer" "" "@DEF@" -.IP -A programmer who adds new widgets to the \*(tk. -.NH 2 -Underlying Model -.LP -.XS - Underlying Model -.XE -.IN "underlying model" "" "@DEF@" -The underlying architectural model is based on the following premises: -.KS -.IP "Widgets are X windows" -.IP -Every user-interface widget is associated with an X window. -The X window ID for a widget is readily available from the widget. -Standard Xlib calls can be used by widgets for many of their input and -output operations. -.KE -.KS -.IP "Information hiding" -.IP -The data for every widget is private to the widget and its subclasses. -That is, the data is neither directly accessible -nor visible outside of the module implementing the widget. -All program interaction with the widget is performed by a set of operations -(methods) that are defined for the widget. -.KE -.KS -.IP "Widget semantics and widget layout geometry" -.IP -Widget semantics are clearly separated from widget layout geometry. -Widgets are concerned with implementing specific user-interface -semantics. They have little control over issues such as their size or -placement relative to other widget peers. Mechanisms are provided for -associating geometric managers with widgets and for widgets to make -suggestions about their own geometry. -.KE -.NH 2 -Conventions Used in this Manual -.IP \(bu 5 -.IN "conventions" "used in manual" "@DEF@" -All resources available to the widgets are listed with each widget. Many -of these are available to more than one widget class due to the object -oriented nature of the \*(xI. The new resources for each widget are -listed in bold text, and the inherited resources are listed in plain text. -.IP \(bu 5 -Global symbols are printed in \fBbold\fP and can be function names, -symbols defined in include files, or structure names. Arguments are -printed in \fIitalics\fP. -.IP \(bu 5 -Each function is introduced by a general discussion that distinguishes -it from other functions. The function declaration itself follows, and -each argument is specifically explained. General discussion of the -function, if any is required, follows the arguments. Where -applicable, the last paragraph of the explanation lists the return values -of the function. -.IP \(bu 5 -To eliminate any ambiguity between those arguments that you pass and -those that a function returns to you, the explanations for all -arguments that you pass start with the word \fIspecifies\fP or, in the -case of multiple arguments, the word \fIspecify\fP. The explanations -for all arguments that are returned to you start with the word -\fIreturns\fP or, in the case of multiple arguments, the word -\fIreturn\fP. The explanations for all arguments that you can pass -and are returned start with the words \fIspecifies and returns\fP. -.IP \(bu 5 -Any pointer to a structure that is used to return a value is -designated as such by the \fI_return\fP suffix as part of its name. -All other pointers passed to these functions are used for reading -only. A few arguments use pointers to structures that are used for -both input and output and are indicated by using the \fI_in_out\fP -suffix. -.IN "_return" "" "@DEF@" -.IN "_in_out" "" "@DEF@" -.NH 2 -Format of the Widget Reference Chapters -.LP -.IN "conventions" "chapter format" "@DEF@" -.IN "chapter format" "" "@DEF@" -The majority of this document is a reference guide for the Athena -widget set. Chapters three through six give the programmer all -information necessary to use the widgets. The layout of the chapters -follows a specific pattern to allow the programmer to easily find the -desired information. -.LP -The first few pages of every chapter give an overview of the widgets -in that section. Widgets are grouped into chapters by functionality. -.IP "Chapter 3" .75i -Simple Widgets -.IP "Chapter 4" .75i -Menus -.IP "Chapter 5" .75i -Text Widgets -.IP "Chapter 6" .75i -Composite and Constraint Widget -.LP -Following the introduction will be a description of each widget in that -chapter. When no functional grouping is obvious the widgets are listed -in alphabetical order, such as in chapters three and six. -.LP -The first section of each widget's description is a table that -contains general information about this widget class. Here is the -table for the Box widget, and an explanation of all the entries. -.Ds 0 -.TA 2.0i -.ta 2.0i -.sp -Application Header file -Class Header file -Class boxWidgetClass -Class Name Box -Superclass Composite -.sp -.De -.IP "\fBApplication Header File\fP" 2.0i -.IN "application header file" "" "@DEF@" -This file must be included when an application uses this widget. -It usually contains the class definition, and some resource macros. -This is often called the ``public'' header file. -.IN "class header file" "" "@DEF@" -.IP "\fBClass Header File\fP" 2.0i -This file will only be used by widget programmers. It will need to be -included by any widget that subclasses this widget. This is often -called the ``private'' header file. -.IN "class" "" "@DEF@" -.IP \fBClass\fP 2.0i -This is the widget class of this widget. This global symbol is passed to -\fBXtCreateWidget\fP so that the \*(xI will know which type of widget -to create. -.IN "class name" "" "@DEF@" -.IP "\fBClass Name\fP" 2.0i -This is the resource name of this class. This name can be used in -a resource file to match any widget of this class. -.IN "superclass" "" -.IP \fBSuperclass\fP 2.0i -This is the superclass that this widget class is descended from. If -you understand how the superclass works it will allow you to more quickly -understand what this widget does, since much of its functionality may be -inherited from its superclass. -.sp -.LP -After this table follows a general description of the default behavior of -this widget, as seen by the user. In many cases this functionality -may be overridden by the application programmer, or by the user. -.LP -The next section is a table showing the -name, class, type and default value of each resource that is available -to this widget. There is also a column containing notes describing -special restrictions placed upon individual resources. -.IN "notes" "" "@DEF@" -.IN "A, note" "" "@DEF@" -.IN "D, note" "" "@DEF@" -.IN "C, note" "" "@DEF@" -.IN "R, note" "" "@DEF@" -.IP A .5i -This resource may be automatically adjusted when another -resource is changed. -.IP C .5i -This resource is only settable at widget creation time, and may not -be modified with \fBXtSetValues\fP. -.IP D .5i -Do not modify this resource. While setting this resource will -work, it can cause unexpected behavior. When this symbol appears -there is another, preferred, interface provided by the \*(tk. -.IP R .5i -This resource is READ-ONLY, and may not be modified. -.LP -After the resource table is a detailed description of every resource -available to that widget. Many of these are redundant, but printing -them with each widget saves page flipping. The names of the resources -that are inherited are printed in plain text, while the names of the -resources that are new to this class are printed in \fBbold\fP. -If you have already read the description of the superclass you need -only pay attention to the resources printed in bold. -.LP -For each composite widget there is a section on layout semantics that -follows the resource description. This section will describe the -effect of constraint resources on the layout of the children, as well -as a general description of where it prefers to place its children. -.LP -Descriptions of default translations and action routines come next, for -widgets to which they apply. The last item in each widget's -documentation is the description of all convenience routines provided by -the widget. -.NH 2 -Input Focus -.XS - Input Focus -.XE -.IN "input focus" "" "@DEF@" -.IN "input" "" "@DEF@" -.IN "XtNinput" "" "@DEF@" -.LP -The \*(xI define a resource on all Shell widgets that interact with -the window manager called \fBinput\fP. This resource requests the -assistance of window manager in acquiring the input focus. The -resource defaults to \fBFalse\fP in the \*(xI, but is redefined to -default to \fBTrue\fP when an application is using the Athena widget -set. An application programmer may override this default and set the -resource back to \fBFalse\fP if the application does not need the window -manager to give it the input focus. See the \fI\*(xT\fP for details -on the \fIinput\fP resource. diff --git a/doc/xorg-docs/specs/Xaw/CH2 b/doc/xorg-docs/specs/Xaw/CH2 deleted file mode 100644 index d40adcb91..000000000 --- a/doc/xorg-docs/specs/Xaw/CH2 +++ /dev/null @@ -1,1103 +0,0 @@ -.\" $Xorg: CH2,v 1.3 2000/08/17 19:42:26 cpqbld Exp $ -.bp -\& -.sp 1 -.ce 3 -\s+1\fBChapter 2\fP\s-1 - -\s+1\fBUsing Widgets\fP\s-1 -.sp 2 -.nr H1 2 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.LP -.XS -Chapter 2 \- Using Widgets -.XE -.IN "using widgets" "" "@DEF@" -Widgets serve as the primary tools for building a user interface or -application environment. The Athena widget set consists of primitive -widgets that contain no children (for example, a command button) and -composite widgets which may contain one or more widget children (for -example, a Box widget). -.LP -The remaining chapters explain the widgets that are provided -by the Athena widget set. -These user-interface components serve as an interface for -application programmers who do not want to implement their own widgets. -In addition, they serve as a starting point -for those widget programmers who, using the \*(xI mechanisms, -want to implement alternative application programming interfaces. -.LP -This chapter is a brief introduction to widget programming. The -examples provided use the Athena widgets, though most of the concepts -will apply to all widget sets. Although there are several programming -interfaces to the \*(tk, only one is described here. A full -description of the programming interface is provided in the document -\fI\*(xT\fP. -.NH 2 -Setting the Locale -.LP -.XS - Setting the Locale -.XE -If it is desirable that the application take advantage of -internationalization (i18n), you must establish locale with -.PN XtSetLanguageProc -before \fBXtDisplayInitialize\fP or \fBXtAppInitialize\fP -is called. For full details, please refer to the document -\fI\*(xT\fP, section 2.2. However, the following simplest-case -call is sufficient in many or most applications. -.LP -.IN "internationalization" "" "" -.IN "XtSetLanguageProc" "" "@DEF@" -.IN "locale" "" "" -.Ds -.TA .5i 2i -.ta .5i 2i - XtSetLanguageProc(NULL, NULL, NULL); -.De -.LP -Most notably, this will affect the Standard C locale, determine which -resource files will be loaded, and what fonts will be required of FontSet -specifications. In many cases, the addition of this line is the only source change -required to internationalize Xaw programs, and will not disturb the function -of programs in the default "C" locale. -.NH 2 -Initializing the Toolkit -.LP -.XS - Initializing the Toolkit -.XE -You must call a toolkit initialization function before invoking any -other toolkit routines (besides locale setting, above). -.PN XtAppInitialize -opens the X server connection, parses the command line, -and creates an initial widget that will serve as the root of -a tree of widgets created by this application. -.IN "initialization" "" "@DEF@" -.IN "toolkit initialization" "" "@DEF@" -.IN "XtAppInitialize" "" "@DEF@" -.IN "fallback resources" "" "@DEF@" -.FD 0 -Widget XtAppInitialize(\fIapp_context_return\fP, \fIapplication_class\fP, \ -\fIoptions\fP, \fInum_options\fP, -.ta 2i - \fIargc_in_out\fP, \fIargv_in_out\fP, \fIfallback_resources\fP, \ -\fIargs\fP, \fInum_args\fP) -.br - XtAppContext *\fIapp_context_return\fP; -.br - String \fIapplication_class\fP; -.br - XrmOptionDescRec \fIoptions\fP[]; -.br - Cardinal \fInum_options\fP; -.br - int *\fIargc_in_out\fP; -.br - String *\fIargv_in_out\fP[]; -.br - String *\fIfallback_resources\fP; -.br - ArgList \fIargs\fP; -.br - Cardinal \fInum_args\fP; -.FN -.IP \fIapp_con_return\fP 1.5i -Returns the application context of this application, if non-NULL. -.IP \fIapplication_class\fP 1.5i -Specifies the class name of this application, -which is usually the generic name for all instances of this application. -A useful convention is to form the class name by capitalizing the -first letter of the application name. For example, the application named -``xman'' has a class name of ``Xman''. -.IP \fIoptions\fP 1.5i -Specifies how to parse the command line for any application-specific -resources. -The options argument is passed as a parameter to -.PN XrmParseCommand . -For further information, -see \fI\*(xL\fP. -.IP \fInum_options\fP 1.5i -Specifies the number of entries in the options list. -.IP \fIargc_in_out\fP 1.5i -Specifies a pointer to the number of command line parameters. -.IP \fIargv_in_out\fP 1.5i -Specifies the command line parameters. -.IP \fIfallback_resources\fP 1.5i -Specifies resource values to be used if the site-wide application class -defaults file cannot be opened, or NULL. -.IP \fIargs\fP 1.5i -Specifies the argument list to use when creating the Application shell. -.IP \fInum_args\fP 1.5i -Specifies the number of arguments in \fIargs\fP. -.LP -This function will remove the command line arguments that the toolkit -reads from \fIargc_in_out\fP, and \fIargv_in_out\fP. It will then -attempt to open the display. If the display cannot be opened, an error -message is issued and XtAppInitialize terminates the application. Once -the display is opened, all resources are read from the locations -specified by the \*(xI. This function returns an ApplicationShell -widget to be used as the root of the application's widget tree. -.NH 2 -Creating a Widget -.LP -.XS - Creating a Widget -.XE -.IN "widget creation" "" "@DEF@" -.IN "creating widgets" "" "@DEF@" -.IN "XtRealizeWidget" "" "" -Creating a widget is a three-step process. First, the widget instance -is allocated, and various instance-specific attributes are set by -using \fBXtCreateWidget\fP. Second, the widget's parent is informed -of the new child by using \fBXtManageChild\fP. Finally, X windows are -created for the parent and all its children by using \fBXtRealizeWidget\fP -and specifying the top-most widget. The first two steps can be -combined by using \fBXtCreateManagedWidget\fP. In addition, -\fBXtRealizeWidget\fP is automatically called when the child becomes -managed if the parent is already realized. -.LP -To allocate, initialize, and manage a widget, use -.PN XtCreateManagedWidget . -.IN "XtCreateManagedWidget" "" "@DEF@" -.FD 0 -Widget XtCreateManagedWidget(\fIname\fP, \fIwidget_class\fP, \fIparent\fP, \ -\fIargs\fP, \fInum_args\fP) -.br - String \fIname\fP; -.br - WidgetClass \fIwidget_class\fP; -.br - Widget \fIparent\fP; -.br - ArgList \fIargs\fP; -.br - Cardinal \fInum_args\fP; -.FN -.IP \fIname\fP 1i -Specifies the instance name for the created widget that is used for retrieving -widget resources. -.IP \fIwidget_class\fP 1i -Specifies the widget class pointer for the created widget. -.IP \fIparent\fP 1i -Specifies the parent widget ID. -.IP \fIargs\fP 1i -Specifies the argument list. The argument list is a variable-length -list composed of name and value pairs that contain information -pertaining to the specific widget instance being created. For further -information, see Section 2.7.2. -.IP \fInum_args\fP 1i -Specifies the number of arguments in the argument list. -If the num_args is zero, the argument list is never referenced. -.LP -When a widget instance is successfully created, the widget identifier -is returned to the application. If an error is encountered, the -.PN XtError -routine is invoked to inform the user of the error. -.IN "XtError" "" "" -.LP -For further information, see \fI\*(xT\fP. -.NH 2 -Common Resources -.XS - Common Resources -.XE -.IN "resource" "" -.LP -Although a widget can have unique arguments that it understands, all -widgets have common arguments that provide some regularity of operation. -The common arguments allow arbitrary widgets to be managed by -higher-level components without regard for the individual widget type. -Widgets will ignore any argument that they do not understand. -.LP -The following resources are retrieved from the argument list -or from the resource database by all of the Athena widgets: -.TS H -lw(1.5i) lw(1i) lw(1i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Default Value -.sp 3p -_ -.TH -.R -.sp 3p -accelerators Accelerators AcceleratorTable NULL -ancestorSensitive AncestorSensitive Boolean True -background Background Pixel XtDefaultBackground -backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderColor BorderColor Pixel XtDefaultForeground -borderPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderWidth BorderWidth Dimension 1 -colormap Colormap Colormap Parent's Colormap -depth Depth int Parent's Depth -destroyCallback Callback XtCallbackList NULL -height Height Dimension \fIwidget dependent\fP -mappedWhenManaged MappedWhenManaged Boolean True -screen Screen Screen Parent's Screen -sensitive Sensitive Boolean True -translations Translations TranslationTable \fIwidget dependent\fP -width Width Dimension \fIwidget dependent\fP -x Position Position 0 -y Position Position 0 -.sp 3p -_ -.TE -.IN "XtDefaultForeground" "" "" -.IN "XtDefaultBackground" "" "" -.LP -The following additional resources are retrieved from the argument list -or from the resource database by many of the Athena widgets: -.TS H -lw(1.5i) lw(1i) lw(1i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Default Value -.sp 3p -_ -.TH -.R -.sp 3p -callback Callback XtCallbackList NULL -cursor Cursor Cursor \fIwidget dependent\fP -foreground Foreground Pixel XtDefaultForeground -insensitiveBorder Insensitive Pixmap GreyPixmap -.sp 3p -_ -.TE -.IN "XtDefaultForeground" "" "" -.NH 2 -Resource Conversions -.XS - Resource Conversions -.XE -.IN "conversions" "" "@DEF@" -.IN "string conversions" "" "@DEF@" -.IN "type conversions" "" "@DEF@" -.LP -Most resources in the Athena widget set have a converter registered that -will translate the string in a resource file to the correct internal -representation. While some are obvious (string to integer, for example), -others need specific mention of the allowable values. Three general -converters are described here: -.IP \(bu 5 -Cursor -.IP \(bu 5 -Pixel -.IP \(bu 5 -Bitmap -.LP -Many widgets have defined special converters that apply only to that -widget. When these occur, the documentation section for that widget -will describe the converter. -.NH 3 -Cursor Conversion -.IN "conversions" "ColorCursor" "@DEF@" -.IN "conversions" "Cursor" "@DEF@" -.IN "cursor" "" "" -.LP -The value for the \fBcursorName\fP resource is specified in the resource -database as a string, and is of the following forms: -.IP \(bu 5 -A standard X cursor name from \fB< X11/cursorfont.h >\fP. -The names in \fBcursorfont.h\fP each describe a specific cursor. The -resource names for these cursors are exactly like the names in this file -except the \fBXC_\fP is not used. The cursor definition \fBXC_gumby\fP -has a resource name of \fBgumby\fP. -.IP \(bu 5 -Glyphs, as in \fIFONT font-name glyph-index [[ font-name ] glyph-index ]\fP. -The first font and glyph specify the cursor source pixmap. -The second font and glyph specify the cursor mask pixmap. -The mask font defaults to the source font, -and the mask glyph index defaults to the source glyph index. -.IP \(bu 5 -A relative or absolute file name. -If a relative or absolute file name is specified, that file is used to -create the source pixmap. Then the string "Mask" is appended to -locate the cursor mask pixmap. If the "Mask" file does not exist, the -suffix "msk" is tried. If "msk" fails, no cursor mask will be used. -If the filename does not start with '/' or './' the the bitmap -file path is used (see section 2.4.3). -.NH 3 -Pixel Conversion -.LP -.IN "conversions" "Pixel" "@DEF@" -.IN "pixel" "" "" -.IN "rgb.txt" "" "" -.IN "XtDefaultForeground" "" "" -.IN "XtDefaultBackground" "" "" -The string-to-pixel converter takes any name that is acceptable to -XParseColor (see \fI\*(xL\fP). In addition this routine understands -the special toolkit symbols `XtDefaultForeground' and -`XtDefaultBackground', described in \fI\*(xT\fP. In short the acceptable -pixel names are: -.IP \(bu 5 -Any color name for the rgb.txt file (typically in the directory -/usr/lib/X11 on POSIX systems). -.IP \(bu 5 -A numeric specification of the form # where these -numeric values are hexadecimal digits (both upper and lower case). -.IP \(bu 5 -The special strings `XtDefaultForeground' and `XtDefaultBackground' -.NH 3 -Bitmap Conversion -.IN "bitmap conversions" "" "@DEF@" -.IN "conversions" "Bitmap" "@DEF@" -.IN "bitmapFilePath" "" "@DEF@" -.IN "BitmapFilePath" "" "@DEF@" -.IN "/usr/include/X11/bitmaps" "" "" -.LP -The string-to-bitmap converter attempts to locate a file containing -bitmap data whose name is specified by the input string. If the file -name is relative (i.e. does not begin with / or ./), the directories to -be searched are specified in the \fBbitmapFilePath\fP resource--class -\fBBitmapFilePath\fP. This resource specifies a colon (:) separated -list of directories that will be searched for the named bitmap or -cursor glyph (see section 2.4.1). The \fBbitmapFilePath\fP resource is -global to the application, and may \fBnot\fP be specified differently -for each widget that wishes to convert a cursor to bitmap. In addition -to the directories specified in the \fBbitmapFilePath\fP resource a -default directory is searched. When using POSIX the default -directory is -.PN /usr/include/X11/bitmaps . -.NH 2 -Realizing a Widget -.LP -.XS - Realizing a Widget -.XE -.IN "realizing widgets" "" "@DEF@" -The -.PN XtRealizeWidget -function performs two tasks: -.IP \(bu 5 -Calculates the geometry constraints of all managed descendants -of this widget. The actual calculation is put off until realize time -for performance reasons. -.IP \(bu 5 -Creates an X window for the widget and, if it is a composite widget, -realizes each of its managed children. -.IN "XtRealizeWidget" "" "@DEF@" -.FD 0 -void XtRealizeWidget(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. -.LP -For further information about this function, -see the \fI\*(xT\fP. -.NH 2 -Processing Events -.LP -.XS - Processing Events -.XE -.IN "events" "" "" -.IN "XtAppInitialize" "" "" -Now that the application has created, managed and realized its -widgets, it is ready to process the events that will be delivered by the -X Server to this client. A function call that will process the -events is \fBXtAppMainLoop\fP. -.IN "XtAppMainLoop" "" "@DEF@" -.FD 0 -void XtAppMainLoop(\fIapp_context\fP) -.br - XtAppContext \fIapp_context\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context of this application. The value is -normally returned by \fBXtAppInitialize\fP. -.LP -This function never returns: it is an infinite loop that processes the -X events. User input can be handled through callback procedures and -application defined action routines. More details are provided in -\fI\*(xT\fP. -.NH 2 -Standard Widget Manipulation Functions -.XS - Standard Widget Manipulation Functions -.XE -.LP -After a widget has been created, a client can interact with that -widget by calling one of the standard widget manipulation routines -provided by the \*(xI, or a widget class-specific manipulation routine. -.LP -The \*(xI provide generic routines to give the application programmer -access to a set of standard widget functions. The common widget -routines let an application or composite widget perform the following -operations on widgets without requiring explicit knowledge of the widget -type. -.IP \(bu 5 -Control the mapping of widget windows -.IP \(bu 5 -Destroy a widget instance -.IP \(bu 5 -Obtain an argument value -.IP \(bu 5 -Set an argument value -.NH 3 -Mapping Widgets -.LP -By default, -widget windows are mapped (made viewable) automatically by -\fBXtRealizeWidget\fP. This behavior can be disabled by using -\fBXtSetMappedWhenManaged\fP, making the client responsible for calling -\fBXtMapWidget\fP to make the widget viewable. -.IN "XtSetMappedWhenManaged" "" "@DEF@" -.IN "XtMapWidget" "" "" -.IN "XtRealizeWidget" "" "" -.FD 0 -void XtSetMappedWhenManaged(\fIw\fP, \fImap_when_managed\fP) -.br - Widget \fIw\fP; -.br - Boolean \fImap_when_managed\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. -.IP \fImap_when_managed\fP 1i -Specifies the new value. -If map_when_managed is \fBTrue\fP, the widget is mapped automatically -when it is realized. If map_when_managed is \fBFalse\fP, the client -must call -.PN XtMapWidget -or make a second call to -.PN XtSetMappedWhenManaged -to cause the child window to be mapped. -.LP -.sp -The definition for -.PN XtMapWidget -is: -.IN "XtMapWidget" "" "@DEF@" -.FD 0 -void XtMapWidget(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. -.LP -When you are creating several children in sequence for a previously -realized common parent it is generally more efficient to construct a -list of children as they are created (using \fBXtCreateWidget\fP) and -then use \fBXtManageChildren\fP to request that their parent managed -them all at once. By managing a list of children at one time, the -parent can avoid wasteful duplication of geometry processing and the -associated ``screen flash''. -.IN "XtManageChildren" "" "@DEF@" -.IN "XtCreateWidget" "" "" -.FD 0 -void XtManageChildren(\fIchildren\fP, \fInum_children\fP) -.br - WidgetList \fIchildren\fP; -.br - Cardinal \fInum_children\fP; -.FN -.IP \fIchildren\fP 1i -Specifies a list of children to add. -.IP \fInum_children\fP 1i -Specifies the number of children to add. -.LP -If the parent is already visible on the screen, it is especially -important to batch updates so that the minimum amount of visible window -reconfiguration is performed. -.LP -For further information about these functions, -see the \fI\*(xT\fP. -.NH 3 -Destroying Widgets -.LP -To destroy a widget instance of any type, use -.PN XtDestroyWidget . -.IN "XtDestroyWidget" "" "@DEF@" -.FD 0 -void XtDestroyWidget(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. -.LP -.PN XtDestroyWidget -destroys the widget and recursively destroys any children that it may have, -including the windows created by its children. -After calling -.PN XtDestroyWidget , -no further references should be made to the widget or any children -that the destroyed widget may have had. -.NH 3 -Retrieving Widget Resource Values -.LP -To retrieve the current value of a resource attribute associated -with a widget instance, use -.PN XtGetValues . -.IN "XtGetValues" "" "@DEF@" -.FD 0 -void XtGetValues(\fIw\fP, \fIargs\fP, \fInum_args\fP) -.br - Widget \fIw\fP; -.br - ArgList \fIargs\fP; -.br - Cardinal \fInum_args\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. -.IP \fIargs\fP 1i -Specifies a variable-length argument list of name and \fBaddress\fP -pairs that contain the resource name and the address into which the -resource value is stored. -.IP \fInum_args\fP 1i -Specifies the number of arguments in the argument list. -.LP -The arguments and values passed in the argument list are dependent on -the widget. Note that the caller is responsible for providing space -into which the returned resource value is copied; the \fBArgList\fP -contains a pointer to this storage (e.g. x and y must be -allocated as Position). For further information, see the \fI\*(xT\fP. -.NH 3 -Modifying Widget Resource Values -.LP -To modify the current value of a resource attribute associated with a -widget instance, use -.PN XtSetValues . -.IN "XtSetValues" "" "@DEF@" -.FD 0 -void XtSetValues(\fIw\fP, \fIargs\fP, \fInum_args\fP) -.br - Widget \fIw\fP; -.br - ArgList \fIargs\fP; -.br - Cardinal \fInum_args\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. -.IP \fIargs\fP 1i -Specifies an array of name and \fBvalue\fP pairs that contain the -arguments to be modified and their new values. -.IP \fInum_args\fP 1i -Specifies the number of arguments in the argument list. -.LP -The arguments and values that are passed will depend on the widget -being modified. Some widgets may not allow certain resources to be -modified after the widget instance has been created or realized. -No notification is given if any part of a \fBXtSetValues\fP request is -ignored. -.LP -For further information about these functions, see the \fI\*(xT\fP. -.IN "XtGetValues" "" "" -.IN "XtSetValues" "" "" -.NT -The argument list entry for -.PN XtGetValues -specifies the address to which the caller wants the value copied. The -argument list entry for -.PN XtSetValues , -however, contains the new value itself, if the size of value is less than -sizeof(XtArgVal) (architecture dependent, but at least sizeof(long)); -otherwise, it is a pointer to the value. String resources are always -passed as pointers, regardless of the length of the string. -.NE -.NH 2 -Using the Client Callback Interface -.LP -.XS - Using the Client Callback Interface -.XE -.IN "callbacks" "" "" -Widgets can communicate changes in their state to their clients -by means of a callback facility. -The format for a client's callback handler is: -.IN "CallbackProc" "" "@DEF@" -.FD 0 -void \fICallbackProc\fP(\fIw\fP, \fIclient_data\fP, \fIcall_data\fP) -.br - Widget \fIw\fP; -.br - XtPointer \fIclient_data\fP; -.br - XtPointer \fIcall_data\fP; -.FN -.IP \fIw\fP 1i -Specifies widget for which the callback is registered. -.IP \fIclient_data\fP 1i -Specifies arbitrary client-supplied data that the widget should pass -back to the client when the widget executes the client's callback -procedure. This is a way for the client registering the callback to -also register client-specific data: a pointer to additional information -about the widget, a reason for invoking the callback, and so on. If no -additional information is necessary, NULL may be passed as this argument. -This field is also frequently known as the \fIclosure\fP. -.IP \fIcall_data\fP 1i -Specifies any callback-specific data the widget wants to pass to the client. -For example, when Scrollbar executes its \fBjumpProc\fP callback list, -it passes the current position of the thumb in \fIcall_data\fP. -.LP -Callbacks can be registered either by creating an argument containing -the callback list described below or by using the special convenience -routines \fBXtAddCallback\fP and \fBXtAddCallbacks\fP. When the widget -is created, a pointer to a list of callback procedure and data pairs can -be passed in the argument list to -.PN XtCreateWidget . -The list is of type -.PN XtCallbackList : -.IN "XtCallbackProc" -.IN "XtAddCallbacks" -.IN "XtAddCallback" -.IN "XtCallbackList" "" "@DEF@" -.IN "XtCallbackRec" "" "@DEF@" -.LP -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - XtCallbackProc callback; - XtPointer closure; -} XtCallbackRec, *XtCallbackList; -.De -.LP -The callback list must be allocated and initialized before calling -.PN XtCreateWidget . -.IN "XtCreateWidget" -The end of the list is identified by an entry containing NULL in -callback and closure. Once the widget is created, the client can change -or de-allocate this list; the widget itself makes no further reference -to it. The closure field contains the client_data passed to the -callback when the callback list is executed. -.LP -The second method for registering callbacks is to use -.PN XtAddCallback -after the widget has been created. -.IN "XtAddCallback" "" "@DEF@" -.FD 0 -void XtAddCallback(\fIw\fP, \fIcallback_name, \fP\fIcallback\fP, \ -\fIclient_data\fP) -.br - Widget \fIw\fP; -.br - String \fIcallback_name\fP; -.br - XtCallbackProc \fIcallback\fP; -.br - XtPointer \fIclient_data\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget to add the callback to. -.IP \fIcallback_name\fP 1i -Specifies the callback list within the widget to append to. -.IP \fIcallback\fP 1i -Specifies the callback procedure to add. -.IP \fIclient_data\fP 1i -Specifies the data to be passed to the callback when it is invoked. -.LP -.PN XtAddCallback -adds the specified callback to the list for the named widget. -.LP -All widgets provide a callback list named -.PN destroyCallback -.IN "destroyCallback" "" "@DEF@" -where clients can register procedures that are to be executed when the -widget is destroyed. The destroy callbacks are executed when the widget -or an ancestor is destroyed. The \fIcall_data\fP argument is unused for -destroy callbacks. -.NH 2 -Programming Considerations -.LP -.XS - Programming Considerations -.XE -This section provides some guidelines on how to set up an application -program that uses the \*(tk. -.NH 3 -Writing Applications -.LP -.IN "writing applications" -.IN "StringDefs.h" -.IN "Intrinsic.h" -When writing an application that uses the X Toolkit, -you should make sure that your application performs the following: -.IP 1. 5 -Include -.Pn < X11/Intrinsic.h > -in your application programs. -This header file automatically includes -.Pn < X11/Xlib.h >, -so all Xlib functions also are defined. -It may also be necessary to include \fB< X11/StringDefs.h >\fP when setting -up argument lists, as many of the XtN\fIsomething\fP definitions are -only defined in this file. -.IP 2. 5 -Include the widget-specific header files for each widget type -that you need to use. -For example, -.Pn < X11/Xaw/Label.h > -and -.Pn < X11/Xaw/Command.h >. -.IP 3. 5 -Call the -.PN XtAppInitialize -.IN "XtAppInitialize" -function before invoking any other toolkit or Xlib functions. -For further information, -see Section 2.1 and the \fI\*(xT\fP. -.IP 4. 5 -To pass attributes to the widget creation routines that will override -any site or user customizations, set up argument lists. In this -document, a list of valid argument names is provided in the discussion -of each widget. The names each have a global symbol defined that begins -with \fBXtN\fP to help catch spelling errors. For example, -\fBXtNlabel\fP is defined for the \fBlabel\fP resource of many widgets. -.IN "XtN" "" "@DEF@" -.IP -For further information, see Section 2.9.2.2. -.IP 5. 5 -When the argument list is set up, create the widget with the -\fBXtCreateManagedWidget\fP function. For further information, see -Section 2.2 and the \fI\*(xT\fP. -.IN "XtCreateManagedWidget" -.IP 6. 5 -If the widget has any callback routines, set by the -.PN XtNcallback -argument or the -.PN XtAddCallback -function, declare these routines within the application. -.IN "XtAddCallback" -.IP 7. 5 -After creating the initial widget hierarchy, windows must be created -for each widget by calling -.PN XtRealizeWidget -on the top level widget. -.IN "XtRealizeWidget" -.IP 8. 5 -Most applications now sit in a loop processing events using -.PN XtAppMainLoop , -for example: -.IN "XtAppMainLoop" -.IP -.Ds 0 -XtCreateManagedWidget(\fIname\fP, \fIclass\fP, \fIparent\fP, \fIargs\fP, \fInum_args\fP); -XtRealizeWidget(\fIshell\fP); -XtAppMainLoop(\fIapp_context\fP); -.De -.IP -For information about this function, see the \fI\*(xT\fP. -.IP 9. 5 -Link your application with -.PN libXaw -(the Athena widgets), -.PN libXmu -(miscellaneous utilities), -.PN libXt -(the \*(tk \*(xI), -.PN libSM -(Session Management), -.PN libICE -(Inter-Client Exchange), -.PN libXext -(the extension library needed for the shape extension code which allows -rounded Command buttons), and -.PN libX11 -(the core X library). -The following provides a sample command line: -.IN "libXaw" -.IN "libXmu" -.IN "libXt" -.IN "libSM" -.IN "libICE" -.IN "libXext" -.IN "libX11" -.IN "linking applications" -.IN "compiling applications" -.IP -.Ds 0 -cc -o \fIapplication\fP \fIapplication\fP.c \-lXaw \-lXmu \-lXt \ -\-lSM \-lICE \-lXext \-lX11 -.De -.NH 3 -Changing Resource Values -.IN "resource" "" -.LP -The \*(xI support two methods of changing the default resource -values; the resource manager, and an argument list passed into -XtCreateWidget. While resources values will get updated no matter -which method you use, the two methods provide slightly different -functionality. -.IP "Resource Manager" 1.5i -This method picks up resource definitions described in \fI\*(xL\fP from -many different locations at run time. The locations most important to -the application programmer are the \fIfallback resources\fP and the -\fIapp-defaults\fP file, (see \fI\*(xT\fP for the complete list). -Since these resource are loaded at run time, they can be overridden by -the user, allowing an application to be customized to fit the -particular needs of each individual user. These values can also be -modified without the need to rebuild the application, allowing rapid -prototyping of user interfaces. Application programmers should use -resources in preference to hard-coded values whenever possible. -.IP "Argument Lists" 1.5i -The values passed into the widget at creation time via an argument list -cannot be modified by the user, and allow no opportunity for -customization. It is used to set resources that cannot be specified as -strings (e.g. callback lists) or resources that should not be -overridden (e.g. window depth) by the user. -.NH 4 -Specifying Resources -.LP -It is important for all X Toolkit application programmers to -understand how to use the X Resource Manager to specify resources for -widgets in an X application. This section will describe the most common -methods used to specify these resources, and how to use the X Resource -manager. -.IN "xrdb" -.IP \fBXrdb\fP 1.5i -The \fBxrdb\fP utility may be used to load a file containing -resources into the X server. Once the resources are loaded, the -resources will affect any new applications started on the display that -they were loaded onto. -.IN "application defaults" -.IN "app-defaults" -.IN "/usr/lib/X11/app-defaults" -.IP "\fBApplication Defaults\fP" 1.5i -The application defaults (app-defaults) file (normally in -/usr/lib/X11/app-defaults/\fIclassname\fP) for an application is loaded -whenever the application is started. -.LP -The resource specification has two colon-separated parts, a name, and -a value. The \fIvalue\fP is a string whose format is dependent on the -resource specified by \fIname\fP. \fIName\fP is constructed by -appending a resource name to a full widget name. -.LP -The full widget name is a list of the name of every ancestor of the -desired widget separated by periods (.). Each widget also has a class -associated with it. A class is a type of widget (e.g. Label or -Scrollbar or Box). Notice that class names, by convention, begin with -capital letters and instance names begin with lower case letters. The -class of any widget may be used in place of its name in a resource -specification. Here are a few examples: -.IP xman.form.button1 1.5i -This is a fully specified resource name, and will affect only widgets -called button1 that are children of widgets called form that are -children of -applications named xman. (Note that while typically two widgets that -are siblings will have different names, it is not prohibited.) - -.IP Xman.Form.Command 1.5i -This will match any Command widget that is a child of a Form widget -that is itself a child of an application of class \fIXman\fP. -.IP Xman.Form.button1 1.5i -This is a mixed resource name with both widget names and classes specified. -.LP -This syntax allows an application programmer to specify any widget -in the widget tree. To match more than one widget (for example a user -may want to make all Command buttons blue), use an asterisk (*) -instead of a period. When an asterisk is used, any number of widgets -(including zero) may exist between the two widget names. For example: -.IP Xman*Command 1.5i -This matches all Command widgets in the Xman application. -.IP Foo*button1 1.5i -This matches any widget in the Foo application that is named \fIbutton1\fP. -.LP -The root of all application widget trees is the widget returned by -\fBXtAppInitialize\fP. Even though this is actually an -ApplicationShell widget, the toolkit replaces its widget class with the -class name of the application. The name of this widget is either -the name used to invoke the application (\fBargv[0]\fP) or the name of -the application specified using the standard \fI-name\fP command line -option supported by the \*(xI. -.LP -The last step in constructing the resource name is to append the name of -the resource with either a period or asterisk to the full or partial -widget name already constructed. -.IP *foreground:Blue 2.25i -Specifies that all widgets in all applications will have a foreground -color of blue. -.IP Xman*borderWidth:10 2.25i -Specifies that all widgets in an application whose class is Xman will -have a border width of 10 (pixels). -.IP xman.form.button1.label:Testing 2.25i -Specifies that a particular widget in the xman application will have a -label named \fITesting\fP. -.LP -An exclamation point (!) in the first column of a line indicates -that the rest of the line should be treated as a comment. -.LP -\fBFinal Words\fP -.LP -The Resource manager is a powerful tool that can be used very -effectively to customize \*(tk applications at run time by either the -application programmer or the user. Some final points to note: -.IP \(bu 5 -An application programmer may add new resources to their -application. These resources are associated with the global -application, and not any particular widget. The \*(tk function used for -adding the application resources is \fBXtGetApplicationResources\fP. -.IN "XtGetApplicationResources" -.IP \(bu 5 -Be careful when creating resource files. Since widgets will -ignore resources that they do not understand, any spelling -errors will cause a resource to have no effect. -.IP \(bu 5 -Only one resource line will match any given resource. There is a set -of precedence rules, which take the following general stance. -.ta 10n -.IP "" 5 -\(bu More specific overrides less specific, thus period always overrides asterisk. -.IP "" 5 -\(bu Names on the left are more specific and override names on the right. -.IP "" 5 -\(bu When resource specifications are exactly the same, user defaults -.br - will override program defaults. -.LP -For a complete explanation of the rules of precedence, and -other specific topics see \fI\*(xT\fP and \fI\*(xL\fP. -.NH 4 -Creating Argument Lists -.IN "argument lists" "" "@DEF@" -.LP -To set up an argument list for the inline specification of widget attributes, -you may use any of the four approaches discussed in this section. -Each resource name has a global symbol associated with it. This -global symbol has the form XtN\fIresource name\fP. For example, the -symbol for ``foreground'' is \fBXtNforeground\fP. For further information, -see the \fI\*(xT\fP. -.LP -Argument are specified by using the following structure: -.IN "ArgList" "" "@DEF@" -.IN "Arg" "" "@DEF@" -.LP -.Ds 0 -.TA .5i 1.5i -.ta .5i 1.5i -typedef struct { - String name; - XtArgVal value; -} Arg, *ArgList; -.De -.LP -The first approach is to statically initialize the argument list. -For example: -.LP -.Ds 0 -.TA .5i -.ta .5i -static Arg arglist[] = { - {XtNwidth, (XtArgVal) 400}, - {XtNheight, (XtArgVal) 300}, -}; -.De -.LP -This approach is convenient for lists that do not need to be computed -at runtime and makes adding or deleting new elements easy. -The -.IN "XtNumber" -.PN XtNumber -macro is used to compute the number of elements in the argument list, -preventing simple programming errors: -.LP -.Ds -XtCreateWidget(\fIname\fP, \fIclass\fP, \fIparent\fP, \fIarglist\fP, XtNumber(\fIarglist\fP)); -.De -.IN "XtSetArg" "" "@DEF@" -.LP -The second approach is to use the -.PN XtSetArg -macro. -For example: -.LP -.Ds 0 -.TA .5i -.ta .5i -Arg arglist[10]; -XtSetArg(arglist[1], XtNwidth, 400); -XtSetArg(arglist[2], XtNheight, 300); -.De -.LP -To make it easier to insert and delete entries, -you also can use a variable index: -.LP -.Ds 0 -.TA .5i -.ta .5i -Arg arglist[10]; -Cardinal i=0; -XtSetArg(arglist[i], XtNwidth, 400); i++; -XtSetArg(arglist[i], XtNheight, 300); i++; -.De -.LP -The i variable can then be used as the argument list count in the widget -create function. -In this example, -.IN "XtNumber" -.PN XtNumber -would return 10, not 2, and therefore is not useful. -.NT -You should not use auto-increment or auto-decrement -within the first argument to -.PN XtSetArg . -As it is currently implemented, -.PN XtSetArg -is a macro that dereferences the first argument twice. -.NE -.LP -The third approach is to individually set the elements of the -argument list array: -.LP -.Ds 0 -.TA .5i -.ta .5i -Arg arglist[10]; -arglist[0].name = XtNwidth; -arglist[0].value = (XtArgVal) 400; -arglist[1].name = XtNheight; -arglist[1].value = (XtArgVal) 300; -.De -.LP -Note that in this example, as in the previous example, -.IN "XtNumber" -.PN XtNumber -would return 10, not 2, and therefore would not be useful. -.LP -The fourth approach is to use a mixture of the first and third approaches: -you can statically define the argument list but modify some entries at runtime. -For example: -.LP -.Ds 0 -.TA .5i -.ta .5i -static Arg arglist[] = { - {XtNwidth, (XtArgVal) 400}, - {XtNheight, (XtArgVal) NULL}, -}; -arglist[1].value = (XtArgVal) 300; -.De -.LP -In this example, -.IN "XtNumber" -.PN XtNumber -can be used, as in the first approach, for easier code maintenance. -.NH 2 -Example Programs -.XS - Example Programs -.XE -.IN "examples" -.LP -The best way to understand how to use any programming library is by -trying some simple examples. A collection of example programs that -introduces each of the widgets in that Athena widget set, as well as many -important toolkit programming concepts, is available in the X11R6 -release as distributed by the X Consortium. It can be found in the -distribution directory \fBcontrib/examples/mit/Xaw\fP, but see your -site administrator for the exact location of these files on your system. -See the README file from that directory for a guide to the examples. - diff --git a/doc/xorg-docs/specs/Xaw/CH3.intro b/doc/xorg-docs/specs/Xaw/CH3.intro deleted file mode 100644 index 9040e02d5..000000000 --- a/doc/xorg-docs/specs/Xaw/CH3.intro +++ /dev/null @@ -1,67 +0,0 @@ -.bp -.if e .bp \" make sure we break on an odd page. -\& -.sp 1 -.ce 3 -\s+1\fBChapter 3\fP\s-1 - -\s+1\fBSimple Widgets\fP\s-1 -.IN "simple widgets" "" -.sp 2 -.nr H1 3 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.na -.LP -.XS -Chapter 3 - Simple Widgets -.XE -.LP -Each of these widgets performs a specific user interface function. They -are \fIsimple\fP because they cannot have widget children\(emthey may only -be used as leaves of the widget tree. These widgets display information or -take user input. -.sp -.IP \fBCommand\fP 1i -.IN "Command widget" "" -A push button that, when selected, may cause a specific action -to take place. This widget can display a multi-line string or a bitmap or pixmap image. -.IP \fBGrip\fP 1i -.IN "Grip widget" "" -A rectangle that, when selected, will cause an action to take place. -.IP \fBLabel\fP 1i -.IN "Label widget" "" -A rectangle that can display a multi-line string or a bitmap or pixmap image. -.IP \fBList\fP 1i -.IN "List widget" "" -A list of text strings presented in row column format that may be -individually selected. When an element is selected an action may take -place. -.IP \fBPanner\fP 1i -.IN "Panner widget" "" -A rectangular area containing a \fIslider\fP that may be moved in two -dimensions. Notification of movement may be continuous or discrete. -.IP \fBRepeater\fP 1i -.IN "Repeater widget" "" -A push button that triggers an action at an increasing rate when selected. -This widget can display a multi-line string or a bitmap or pixmap image. -.IP \fBScrollbar\fP -.IN "Scrollbar widget" "" -A rectangular area containing a \fIthumb\fP that when slid along one -dimension may cause a specific action to take place. The Scrollbar may -be oriented horizontally or vertically. -.IP \fBSimple\fP 1i -.IN "Simple widget" "" -The base class for most of the simple widgets. Provides a rectangular -area with a settable mouse cursor and special border. -.IP \fBStripChart\fP 1i -.IN "StripChart widget" "" -A real time data graph that will automatically update and scroll. -.IP \fBToggle\fP 1i -.IN "Toggle widget" "" -A push button that contains state information. Toggles -may also be used as ``radio buttons'' to implement a ``one of many'' or -``zero or one of many'' group -of buttons. This widget can display a multi-line string or a bitmap or pixmap image. diff --git a/doc/xorg-docs/specs/Xaw/CH4.intro b/doc/xorg-docs/specs/Xaw/CH4.intro deleted file mode 100644 index c11e42547..000000000 --- a/doc/xorg-docs/specs/Xaw/CH4.intro +++ /dev/null @@ -1,87 +0,0 @@ -.bp -\& -.sp 1 -.ce 3 -\s+1\fBChapter 4\fP\s-1 - -\s+1\fBMenus\fP\s-1 -.sp 2 -.nr H1 4 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.na -.LP -.XS -Chapter 4 - Menus -.XE -.IN "Menus" "" -.LP -The Athena widget set provides support for single paned non-hierarchical -popup and pulldown menus. Since menus are such a common user interface -tool, support for them must be provided in even the most basic widget -sets. In menuing as in other areas, the Athena Widget Set provides only -basic functionality. -.LP -Menus in the Athena widget set are implemented as a menu container (the -SimpleMenu widget) and a collection of objects that comprise the -menu entries. The SimpleMenu widget is itself a direct subclass of the -OverrideShell widget class, so no other shell is necessary when -creating a menu. The managed children of a SimpleMenu must be -subclasses of the Sme (Simple Menu Entry) object. -.LP -The Athena widget set provides three classes of Sme objects that may be -used to build menus. -.sp -.IP \fBSme\fP 1i -.IN "Sme object" "" -The base class of all menu entries. It may be used as a menu entry -itself to provide blank space in a menu. ``Sme'' means ``Simple Menu -Entry.'' -.IP \fBSmeBSB\fP 1i -.IN "SmeBSB object" "" -This menu entry provides a selectable entry containing a text string. -A bitmap may also be placed in the left and right margins. ``BSB'' means -``Bitmap String Bitmap.'' -.IP \fBSmeLine\fP 1i -.IN "SmeLine object" "" -This menu entry provides an unselectable entry containing a separator line. -.sp -.LP -The SimpleMenu widget informs the window manager that it should ignore -its window by setting the \fBOverride Redirect\fP flag. This is the -correct behavior for the press-drag-release style of menu operation. If -click-move-click or ``pinable''' menus are desired it is the -responsibility of the application programmer, using the SimpleMenu -resources, to inform the window manager of the menu. -.LP -To allow easy creation of pulldown menus, a MenuButton widget is -also provided as part of the Athena widget set. -.NH 2 -Using the Menus -.XS - Using the Menus -.XE -.IN "Menus" "using" -.LP -The default configuration for the menus is press-drag-release. -The menus will typically be -activated by clicking a pointer button while the pointer is over a -MenuButton, causing the menu to appear in a fixed location relative to -that button; this is a \fBpulldown\fP menu. Menus may also be activated -.IN "Menus" "pulldown" -when a specific pointer and/or key sequence is used anywhere in the -application; this is a \fBpopup\fP menu (e.g. clicking Ctrl- in the common application \fBxterm\fP). In this -case the menu should be positioned under -the cursor. Typically menus will be placed so the pointer cursor is on -the first menu entry, or the last entry selected by the user. -.LP -The menu remains on the screen as long as the pointer button is held -down. Moving the pointer will highlight different menu items. -If the pointer leaves the menu, or moves over an entry that cannot -be selected then no menu entry will highlighted. When the desired menu -entry has been highlighted, releasing the pointer button removes the menu, -and causes any mechanism associated with this entry to be invoked. diff --git a/doc/xorg-docs/specs/Xaw/CH5.intro b/doc/xorg-docs/specs/Xaw/CH5.intro deleted file mode 100644 index dafc31efe..000000000 --- a/doc/xorg-docs/specs/Xaw/CH5.intro +++ /dev/null @@ -1,292 +0,0 @@ -.\" $Xorg: CH5.intro,v 1.3 2000/08/17 19:42:26 cpqbld Exp $ -.LP -.bp -\& -.sp 1 -.ce 3 -\s+1\fBChapter 5\fP\s-1 - -\s+1\fBText Widgets\fP\s-1 -.sp 2 -.nr H1 5 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.na -.LP -.XS -Chapter 5 - Text Widgets. -.XE -.LP -The Text widget provides a window that will allow an application -to display and edit one or more lines of text. Options are provided to -allow the user to add Scrollbars to its window, search for a specific -string, and modify the text in the buffer. -.LP -The Text widget is made up of a number of pieces; it was modularized to -ease customization. The AsciiText widget class (actually not limited to -ASCII but so named for compatibility) is be general enough to most -needs. If more flexibility, special features, or extra functionality is -needed, they can be added by implementing a new TextSource or TextSink, or -by subclassing the Text Widget (See Section 5.8 for customization -details.) -.LP -The words \fIinsertion point\fP are used in this chapter to refer to the text -caret. This is the symbol that is displayed between two characters in -the file. The insertion point marks the location where any new characters -will be added to the file. To avoid confusion the pointer cursor will -always be referred to as the \fIpointer\fP. -.LP -The text widget supports three edit modes, controlling the types of -modifications a user is allowed to make: -.IN "Text widget" "edit modes" -.IP \(bu 5 -Append-only -.IP \(bu 5 -Editable -.IP \(bu 5 -Read-only -.LP -Read-only mode does not allow the user or the programmer to modify the text -in the widget. While the entire string may be reset in -read-only mode with \fBXtSetValues\fP, it cannot be modified via -with \fBXawTextReplace\fP. Append-only and editable modes allow -.IN "XawTextReplace" "" -the text at the insertion point to be modified. The only difference is -that text may only be added to or removed from the end of a buffer in -append-only mode. -.LP -.NH 2 -Text Widget for Users -.IN "Text widget" "User's Guide to the Text widget" -.XS - Text Widget for Users -.XE -.LP -The Text widget provides many of the common keyboard editing commands. -These commands allow users to move around and edit the buffer. If an -illegal operation is attempted, (such as deleting characters in a -read-only text widget), the X server will beep. -.NH 3 -Default Key Bindings -.IN "Text widget" "default key bindings" -.LP -The default key bindings are patterned after those in the EMACS text editor: -.sp -.Ds 0 -.TA 1.0i 3.0i 4.5i -.ta 1.0i 3.0i 4.5i -Ctrl-a Beginning Of Line Meta-b Backward Word -Ctrl-b Backward Character Meta-f Forward Word -Ctrl-d Delete Next Character Meta-i Insert File -Ctrl-e End Of Line Meta-k Kill To End Of Paragraph -Ctrl-f Forward Character Meta-q Form Paragraph -Ctrl-g Multiply Reset Meta-v Previous Page -Ctrl-h Delete Previous Character Meta-y Insert Current Selection -Ctrl-j Newline And Indent Meta-z Scroll One Line Down -Ctrl-k Kill To End Of Line Meta-d Delete Next Word -Ctrl-l Redraw Display Meta-D Kill Word -Ctrl-m Newline Meta-h Delete Previous Word -Ctrl-n Next Line Meta-H Backward Kill Word -Ctrl-o Newline And Backup Meta-< Beginning Of File -Ctrl-p Previous Line Meta-> End Of File -Ctrl-r Search/Replace Backward Meta-] Forward Paragraph -Ctrl-s Search/Replace Forward Meta-[ Backward Paragraph -Ctrl-t Transpose Characters -Ctrl-u Multiply by 4 Meta-Delete Delete Previous Word -Ctrl-v Next Page Meta-Shift Delete Kill Previous Word -Ctrl-w Kill Selection Meta-Backspace Delete Previous Word -Ctrl-y Unkill Meta-Shift Backspace Kill Previous Word -Ctrl-z Scroll One Line Up -Ctrl-\\ Reconnect to input method -Kanji Reconnect to input method -.De -.sp -.LP -In addition, the pointer may be used to cut and paste text: -.LP -.Ds -.TA .5i 2.0i -.ta .5i 2.0i - Button 1 Down Start Selection - Button 1 Motion Adjust Selection - Button 1 Up End Selection (cut) - - Button 2 Down Insert Current Selection (paste) - - Button 3 Down Extend Current Selection - Button 3 Motion Adjust Selection - Button 3 Up End Selection (cut) - -.De -.LP -Since all of these key and pointer bindings are set through the -translations and resource manager, the user and the application -programmer can modify them by changing the Text widget's -\fBtranslations\fP resource. -.\" -.NH 3 -Search and Replace -.IN "Text widget" "search" -.IN "Text widget" "query replace" -.LP -The Text widget provides a search popup that can be used to search for a -string within the current Text widget. The popup can be activated by -typing either \fIControl-r\fP or \fIControl-s\fP. If \fIControl-s\fP is -used the search will be forward in the file from the current location of the -insertion point; if \fIControl-r\fP is used the search will be backward. The -activated popup is placed under the pointer. It has a number of buttons -that allow both text searches and text replacements to be performed. -.LP -At the top of the search popup are two toggle buttons labeled -\fIbackward\fP and \fIforward\fP. One of these buttons will always be -highlighted; this is the direction in which the search will be -performed. The user can change the direction at any time by clicking on -the appropriate button. -.LP -Directly under the buttons there are two text areas, one labeled -\fISearch for:\fP and the other labeled \fIReplace with:\fP. If this is -a read-only Text widget the \fIReplace with:\fP field will be insensitive -and no replacements will be allowed. After each of these labels will be -a text field. This field will allow the user to enter a string to -search for and the string to replace it with. Only one of these text -fields will have a window border around it; this is the active text -field. Any key presses that occur when the focus in in the search popup -will be directed to the active text field. There are also a few special -key sequences: -.DS -.TA 1.75i -.ta 1.75i -\fBCarriage Return\fP: Execute the action, and pop down the search widget. -\fBTab\fP: Execute the action, then move to the next field. -\fBShift Carriage Return\fP: Execute the action, then move to the next field. -\fBControl-q Tab\fP: Enter a Tab into a text field. -\fBControl-c\fP: Pop down the search popup. -.DE -.LP -Using these special key sequences should allow simple -searches without ever removing one's hands from the keyboard. -.LP -Near the bottom of the search popup is a row of buttons. These buttons -allow the same actions to to be performed as the key sequences, but the -buttons will leave the popup active. This can be quite useful if many -searches are being performed, as the popup will be left on the display. -Since the search popup is a transient window, it may be picked -up with the window manager and pulled off to the side for use -at a later time. -.IP \fBSearch\fP 15 -Search for the specified string. -.IP \fBReplace\fP 15 -Replace the currently highlighted string with the string in the -\fIReplace with\fP text field, and move onto the next occurrence of the -\fISearch for\fP text field. The functionality is commonly referred to as -query-replace. -.IP \fBReplace-All\fP 15 -Replace all occurrences of the search string with the replace string from -the current insertion point position to the end (or beginning) of the -file. There is no key sequence to perform this action. -.IP \fBCancel\fP 15 -Remove the search popup from the screen. -.LP -Finally, when \fBinternational\fP resource is \fBtrue\fP, there may be a -pre-edit buffer below the button row, for composing input. Its presence -is determined by the X locale in use and the VendorShell's \fBpreeditType\fP -resource. -.LP -The widget hierarchy for the search popup is show below, all widgets -are listed by class and instance name. -.sp -.nf -.ta .5i 1.0i 1.5i 2.0i 2.5i -Text - TransientShell search - Form form - Label label1 - Label label2 - Toggle backwards - Toggle forwards - Label searchLabel - Text searchText - Label replaceLabel - Text replaceText - Command search - Command replaceOne - Command replaceAll - Command cancel -.fi -.NH 3 -File Insertion -.LP -.IN "Text widget" "file insertion" -To insert a file into a text widget, type the key sequence \fIMeta-i\fP, -which will activate the file insert popup. This popup will appear under -the pointer, and any text typed while the focus is in this popup will be -redirected to the text field used for the filename. When the desired -filename has been entered, click on \fIInsert File\fP, or type -\fICarriage Return\fP. The named file will then be inserted in the text -widget beginning at the insertion point position. If an error occurs when -opening the file, an error message will be printed, prompting the user -to enter the filename again. The file insert may be aborted by clicking -on \fICancel\fP. If \fIMeta-i\fP is typed at a text widget that is -read-only, it will beep, as no file insertion is allowed. -.LP -The widget hierarchy for the file insert popup is show below; all widgets -are listed by class and instance name. -.sp -.nf -.ta .5i 1.0i 1.5i 2.0i 2.5i -Text - TransientShell insertFile - Form form - Label label - Text text - Command insert - Command cancel -.fi -.NH 3 -Text Selections for Users -.LP -.IN "Text widget" "Text Selections for Users" -The text widgets have a text selection mechanism that allows -the user to copy pieces of the text into the \fBPRIMARY\fP selection, -and paste -into the text widget some text that another application (or text -widget) has put in the \fBPRIMARY\fP selection. -.LP -One method of selecting text is to press pointer button 1 -on the beginning of the text to be selected, drag the pointer until all -of the desired text is highlighted, and then release the button to -activate the selection. Another method is to click pointer button 1 at -one end of the text to be selected, then click pointer button 3 at the -other end. -.LP -To modify a currently active selection, press pointer button 3 near -either the end of the selection that you want to -adjust. This end of the selection may be moved while holding down pointer -button 3. When the proper area has been highlighted release the pointer -button to activate the selection. -.LP -The selected text may now be pasted into another application, and -will remain active until some other client makes a selection. -To paste text that some other application has -put into the \fBPRIMARY\fP selection use pointer button 2. -First place the insertion point where you would like the text to be inserted, -then click and release pointer button 2. -.LP -Rapidly clicking pointer button 1 the following number of times will adjust -the selection as described. -.IP \fBTwo\fP 1.0i -Select the word under the pointer. A word boundary is defined by the -Text widget to be a Space, Tab, or Carriage Return. -.IP \fBThree\fP 1.0i -Select the line under the pointer. -.IP \fBFour\fP 1.0i -Select the paragraph under the pointer. A paragraph boundary is -defined by the text widget as two Carriage Returns in a row with only -Spaces or Tabs between them. -.IP \fBFive\fP 1.0i -Select the entire text buffer. -.LP -To unset the text selection, click pointer button 1 -without moving it. diff --git a/doc/xorg-docs/specs/Xaw/CH6.intro b/doc/xorg-docs/specs/Xaw/CH6.intro deleted file mode 100644 index 655cf635a..000000000 --- a/doc/xorg-docs/specs/Xaw/CH6.intro +++ /dev/null @@ -1,84 +0,0 @@ -.LP -.bp -.if e .bp \" make sure we break on an odd page. -\& -.sp 1 -.ce 3 -\s+1\fBChapter 6\fP\s-1 - -\s+1\fBComposite and Constraint Widgets\fP\s-1 -.sp 2 -.nr H1 6 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.na -.LP -.XS -Chapter 6 - Composite and Constraint Widgets -.XE -.LP -These widgets may contain arbitrary widget children. They implement a -policy for the size and location of their children. -.IP \fBBox\fP 1i -.IN "Box widget" "" -This widget will pack its children as tightly as possible in -non-overlapping rows. -.IP \fBDialog\fP 1i -.IN "Dialog widget" "" -An implementation of a commonly used interaction semantic to prompt for -auxiliary input from the user, such as a filename. -.IP \fBForm\fP 1i -.IN "Form widget" "" -A more sophisticated layout widget that allows the children to specify -their positions relative to the other children, or to the edges of the Form. -.IP \fBPaned\fP 1i -.IN "Paned widget" "" -Allows children to be tiled vertically or horizontally. Controls are -also provided to allow the user to dynamically resize the individual panes. -.IP \fBPorthole\fP 1i -.IN "Porthole widget" "" -Allows viewing of a managed child which is as large as, or larger than its -parent, typically under control of a Panner widget. -.IP \fBTree\fP 1i -.IN "Tree widget" "" -Provides geometry management of widgets arranged in a directed, acyclic graph. -.IP \fBViewport\fP 1i -.IN "Viewport widget" "" -Consists of a frame, one or two scrollbars, and an inner window. The -inner window can contain all the data that is to be displayed. This inner -window will be clipped by the frame with the scrollbars controlling -which section of the inner window is currently visible. -.LP -.NH 3 -A Brief Note on Geometry Management -.IN "geometry management" "" -.LP -The geometry management semantics provided by the X Toolkit give full -control of the size and position of a widget to the parent of that -widget. While the children are allowed to request a certain size or -location, it is the parent who makes the final decision. Many of the -composite widgets here will deny any geometry request from their -children by default. If a child widget is not getting the expected size -or location, it is most likely the parent disallowing a request, or -implementing semantics slightly different than those expected by the -application programmer. -.LP -If the application wishes to change the size or location of -any widget it should make a call to \fBXtSetValues\fP. This will -.IN "XtSetValues" "" -allow the widget to ask its parent for the new size or location. -As noted above the parent is allowed to refuse this request, -and the child must live with the result. If the -application is unable to achieve the desired semantics, then perhaps it -should use a different composite widget. Under no circumstances -should an application programmer resort to \fBXtMoveWidget\fP or -.IN "XtMoveWidget" "" -\fBXtResizeWidget\fP; these functions are exclusively for the use of -.IN "XtResizeWidget" "" -Composite widget implementors. -.LP -For more information on geometry management consult the \fI\*(xT\fP. - - diff --git a/doc/xorg-docs/specs/Xaw/CH7.intro b/doc/xorg-docs/specs/Xaw/CH7.intro deleted file mode 100644 index 7aaa1896b..000000000 --- a/doc/xorg-docs/specs/Xaw/CH7.intro +++ /dev/null @@ -1,99 +0,0 @@ -.LP -.bp -.if e .bp \" make sure we break on an odd page. -\& -.sp 1 -.ce 5 -\s+1\fBChapter 7\fP\s-1 - -\s+1\fBCreating New Widgets (Subclassing)\fP\s-1 - -\s+1Written By: Ralph Swick\s-1 -.sp 2 -.nr H1 7 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.na -.LP -.XS -Chapter 7 - Creating New Widgets (Subclassing) -.XE -.IN "subclassing" "" "@DEF@" -.IN "creating new widgets" "" "@DEF@" -.LP -Although the task of creating a new widget may at first appear a little -daunting, there is a basic simple pattern that all widgets follow. The -Athena Widget library contains a special widget called the -\fITemplate\fP widget that is intended to assist the novice widget -programmer in writing a custom widget. -.LP -Reasons for wishing to write a custom widget include: -.IP \(bu 3 -Providing a graphical interface not currently supported by any existing -widget set. -.IP \(bu 3 -Convenient access to resource management procedures to obtain fonts, -colors, etc., even if user customization is not desired. -.IP \(bu 3 -Convenient access to user input dispatch and translation management procedures. -.IP \(bu 3 -Access to callback mechanism for building higher-level application libraries. -.IP \(bu 3 -Customizing the interface or behavior of an existing widget to suit a -special application need. -.IP \(bu 3 -Desire to allow user customization of resources such as fonts, colors, -etc., or to allow convenient re-binding of keys and buttons to internal -functions. -.IP \(bu 3 -Converting a non-Toolkit application to use the Toolkit. -.LP -In each of these cases, the operation needed to create a new widget is -to "subclass" an existing one. If the desired semantics of the new -widget are similar to an existing one, then the implementation of the -existing widget should be examined to see how much work would be -required to create a subclass that will then be -able to share the existing class methods. Much time will be saved in -writing the new widget if an existing widget class Expose, Resize and/or -GeometryManager method can be used by the subclass. -.LP -Note that some trivial uses of a ``bare-bones'' widget may be achieved by -simply creating an instance of the Core -widget. The class variable to use when creating a Core widget is -.PN widgetClass . -The geometry of the Core widget is determined entirely by the parent -widget. -.LP -It is very often the case than an application will have a special need -for a certain set of functions and that many copies of these functions -will be needed. For example, when converting an older application to use -the Toolkit, it may be desirable to have a "Window Widget" class that -might have the following semantics: -.IN "Window widget" -.IN "Core widget" -.IN "widgetClass" -.IP \(bu 3 -Allocate 2 drawing colors in addition to a background color. -.IP \(bu 3 -Allocate a text font. -.IP \(bu 3 -Execute an application-supplied function to handle exposure events. -.IP \(bu 3 -Execute an application-supplied function to handle user input events. -.LP -It is obvious that a completely general-purpose WindowWidgetClass could -be constructed that would export all class methods as callbacks lists, -but such a widget would be very large and would have to choose some -arbitrary number of resources such as colors to allocate. An application -that used many instances of the general-purpose widget would therefore -un-necessarily waste many resources. -.LP -.sp -In this section, an outline will be given of the procedure to follow to -construct a special-purpose widget to address the items listed above. -The reader should refer to the appropriate sections of the \fI\*(xT\fP -for complete details of the material outlined here. Section 1.4 of -the \fI\*(xI\fP should be read in conjunction with this section. -.LP diff --git a/doc/xorg-docs/specs/Xaw/Command b/doc/xorg-docs/specs/Xaw/Command deleted file mode 100644 index ec1019736..000000000 --- a/doc/xorg-docs/specs/Xaw/Command +++ /dev/null @@ -1,205 +0,0 @@ -.\" $Xorg: Command,v 1.3 2000/08/17 19:42:26 cpqbld Exp $ -.NH 2 -Command Widget -.XS - Command Widget -.XE -.IN "Command widget" "" "@DEF@" -.Ds 0 -.TA 2.0i -.ta 2.0i -.sp -Application header file -.IN "Command.h" "" -Class header file -.IN "CommandP.h" "" -Class commandWidgetClass -.IN "commandWidgetClass" "" -Class Name Command -.IN "Command widget" "class name" -Superclass Label -.sp -.De -.LP -The Command widget is an area, often rectangular, that contains text -or a graphical image. Command widgets are often referred to as -``push buttons.'' When the pointer is over a Command widget, the -widget becomes highlighted by drawing a rectangle around its perimeter. -This highlighting indicates that the widget is ready for selection. -When mouse button 1 is pressed, the Command widget indicates that -it has been selected by reversing its foreground and background colors. -When the mouse button is released, the Command widget's \fBnotify\fP -action is invoked, calling all functions on its callback list. If -the pointer is moved off of the widget before the pointer button is -released, the widget reverts to its normal foreground and background -colors, and releasing the pointer button has no effect. This behavior -allows the user to cancel an action. -.NH 3 -Resources -.LP -When creating a Command widget instance, the following resources are -retrieved from the argument list or from the resource database: -.LP -.IN "Command widget" "resources" -.TS H -expand; -lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -accelerators Accelerators AcceleratorTable NULL -ancestorSensitive AncestorSensitive Boolean D True -background Background Pixel XtDefaultBackground -backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap -bitmap Bitmap Pixmap None -borderColor BorderColor Pixel XtDefaultForeground -borderPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderWidth BorderWidth Dimension 1 -callback Callback XtCallbackList NULL -colormap Colormap Colormap Parent's Colormap -cornerRoundPercent CornerRoundPercent Dimension 25 -cursor Cursor Cursor None -cursorName Cursor String NULL -depth Depth int C Parent's Depth -destroyCallback Callback XtCallbackList NULL -encoding Encoding UnsignedChar XawTextEncoding8bit -font Font XFontStruct XtDefaultFont -foreground Foreground Pixel XtDefaultForeground -height Height Dimension A graphic height + 2 * \fBinternalHeight\fP -highlightThickness Thickness Dimension A 2 (0 if Shaped) -insensitiveBorder Insensitive Pixmap GreyPixmap -internalHeight Height Dimension 2 -internalWidth Width Dimension 4 -international International Boolean C False -justify Justify Justify XtJustifyCenter (center) -label Label String name of widget -leftBitmap LeftBitmap Bitmap None -mappedWhenManaged MappedWhenManaged Boolean True -pointerColor Foreground Pixel XtDefaultForeground -pointerColorBackground Background Pixel XtDefaultBackground -resize Resize Boolean True -screen Screen Screen R Parent's Screen -sensitive Sensitive Boolean True -shapeStyle ShapeStyle ShapeStyle Rectangle -translations Translations TranslationTable See below -width Width Dimension A graphic width + 2 * \fBinternalWidth\fP -x Position Position 0 -y Position Position 0 -.sp 3p -_ -.TE -\" Resource Descriptions -.Ac -.As -.Bg -.Gp -.Bm -.Bc -.Bp -.Bw -.Cb Bold -.Cm -.Cr Bold -.Cu -.Cn -.Dp -.Dc -.Le -.Lf -.Ls -.Lg -.Hw -.Ht Bold -.Ib -.Ih -.In -.Ju -.La -.Ll -.Mm -.Pf -.Pb -.Re -.Sc -.Se -.Ss Bold -.Tr -.Xy -.NH 3 -Command Actions -.IN "Command widget" "actions" -.LP -The Command widget supports the following actions: -.IP \(bu 5 -Switching the button's interior between the foreground and background -colors with \fBset\fP, \fBunset\fP, and \fBreset\fP. -.IP \(bu 5 -Processing application callbacks with \fBnotify\fP -.IP \(bu 5 -Switching the internal border between highlighted -and unhighlighted states with \fBhighlight\fP and \fBunhighlight\fP -.LP -.IN "Command widget" "translation bindings" -The following are the default translation bindings used by the -Command widget: -.LP -.Ds 0 -.TA .5i 2.25i -.ta .5i 2.25i - : highlight(\|) - : reset(\|) - : set(\|) - : notify(\|) unset(\|) -.De -.LP -The full list of actions supported by Command is: -.IP \fBhighlight\fP(\fIcondition\fP) 1.5i -Displays the internal highlight border in the color (\fBforeground\fP -or \fBbackground\fP ) that contrasts with the interior color of the -Command widget. The conditions \fBWhenUnset\fP and \fBAlways\fP are -understood by this action procedure. If no argument is passed, -\fBWhenUnset\fP is assumed. -.IP \fBunhighlight\fP(\|) 1.5i -Displays the internal highlight border in the color (\fBforeground\fP -or \fBbackground\fP ) that matches the interior color of the -Command widget. -.IP \fBset\fP(\|) 1.5i -Enters the \fIset\fP state, in which \fBnotify\fP is possible. This -action causes the button to display its interior in the -\fBforeground\fP color. The label or bitmap is displayed in the -\fBbackground\fP color. -.IP \fBunset\fP(\|) 1.5i -Cancels the \fIset\fP state and displays the interior of the button in the -\fBbackground\fP color. The label or bitmap is displayed in the -\fBforeground\fP color. -.IP \fBreset\fP(\|) 1.5i -Cancels any \fIset\fP or \fIhighlight\fP and displays the interior of the -button in the \fBbackground\fP color, with the label or bitmap displayed -in the \fBforeground\fP color. -.IP \fBnotify\fP(\|) 1.5i -When the button is in the \fBset\fP state this action calls all functions in -the callback list named by the \fBcallback\fP resource. The value of -the \fIcall_data\fP argument passed to these functions is undefined. -.LP -A very common alternative to registering callbacks is to augment a -Command's translations with an action performing the desired -function. This often takes the form of: -.LP -.Ds 0 -.TA .5i 2.25i -.ta .5i 2.25i -*Myapp*save.translations: #augment ,: Save() -.De -.LP -.NT -When a bitmap of depth greater that one (1) is specified the -\fIset\fP(), \fIunset\fP(), and \fIreset\fP() actions have no effect, -since there are no foreground and background colors used in a -multi-plane pixmap. -.NE diff --git a/doc/xorg-docs/specs/Xaw/Dialog b/doc/xorg-docs/specs/Xaw/Dialog deleted file mode 100644 index d948e3c11..000000000 --- a/doc/xorg-docs/specs/Xaw/Dialog +++ /dev/null @@ -1,280 +0,0 @@ -.\" $Xorg: Dialog,v 1.3 2000/08/17 19:42:26 cpqbld Exp $ -.NH 2 -Dialog Widget -.LP -.XS - Dialog Widget -.XE -.IN "Dialog widget" "" "@DEF@" -.Ds 0 -.TA 2.0i -.ta 2.0i -.sp -Application Header file -.IN "Dialog.h" "" -Class Header file -.IN "DialogP.h" "" -Class dialogWidgetClass -.IN "dialogWidgetClass" "" -Class Name Dialog -.IN "Dialog widget" "class name" -Superclass Form -.sp -.De -.LP -The Dialog widget implements a commonly used interaction semantic to -prompt for auxiliary input from a user. For example, you can use a -Dialog widget when an application requires a small piece of information, -such as a filename, from the user. A Dialog widget, which is simply a -special case of the Form widget, provides a convenient way to create a -preconfigured form. -.LP -The typical Dialog widget contains three areas. The first line -contains a description of the function of the Dialog widget, for -example, the string \fIFilename:\fP. The second line contains an area -into which the user types input. The third line can contain buttons -that let the user confirm or cancel the Dialog input. Any of these -areas may be omitted by the application. -.NH 3 -Resources -.LP -When creating a Dialog widget instance, the following resources are -retrieved from the argument list or the resource database: -.IN "Dialog widget" "resources" -.TS H -expand; -lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -accelerators Accelerators AcceleratorTable NULL -ancestorSensitive AncestorSensitive Boolean D True -background Background Pixel XtDefaultBackground -backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderColor BorderColor Pixel XtDefaultForeground -borderPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderWidth BorderWidth Dimension 1 -children ReadOnly WidgetList R NULL -colormap Colormap Colormap Parent's Colormap -defaultDistance Thickness int 4 -depth Depth int C Parent's Depth -destroyCallback Callback XtCallbackList NULL -height Height Dimension A Enough space to contain all children -icon Icon Bitmap None -label Label String "label" -mappedWhenManaged MappedWhenManaged Boolean True -numChildren ReadOnly Cardinal R 0 -screen Screen Screen R Parent's Screen -sensitive Sensitive Boolean True -translations Translations TranslationTable NULL -value Value String no value widget -width Width Dimension A Enough space to contain all children -x Position Position 0 -y Position Position 0 -.sp 3p -_ -.TE -.Ac -.As -.Bg -.Gp -.Bc -.Bp -.Bw -.Ch -.Cm -.Dd -.Dp -.Dc -.Hw -.IP \fBicon\fP 1.5i -A pixmap image to be displayed immediately to the left of the -Dialog widget's label. -.IP \fBlabel\fP 1.5i -A string to be displayed at the top of the Dialog widget. -.Mm -.Nc -.Sc -.Se -.Tr -.IP \fBvalue\fP 1.5i -An initial value for the string field that the user will enter text -into. By default, no text entry field is available to the user. -Specifying an initial value for \fBvalue\fP activates the text entry -field. If string input is desired, but no initial value is to be -specified then set this resource to "" (empty string). -.Xy -.NH 3 -Constraint Resources -.LP -.IN "Dialog widget" "constraint resources" -Each child of the Dialog widget may request special layout resources -be applied to it. These \fIconstraint\fP resources allow the Dialog -widget's children to specify individual layout requirements. -.LP -.TS H -lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -bottom Edge XawEdgeType XawRubber -fromHoriz Widget Widget NULL (left edge of Dialog) -fromVert Widget Widget NULL (top edge of Dialog) -horizDistance Thickness int \fBdefaultDistance\fP resource -left Edge XawEdgeType XawRubber -.IN "XawEdgeType" "" -resizable Boolean Boolean FALSE -right Edge XawEdgeType XawRubber -.IN "XawRubber" "" -top Edge XawEdgeType XawRubber -vertDistance Thickness int \fBdefaultDistance\fP resource -.sp 3p -_ -.TE -.Bt -.Fh -.Hd -.Rl -.NH 3 -Layout Semantics -.IN "Dialog widget" "layout semantics" -.LP -.Lt Dialog -.LP -.TS H -lw(1.5i) lw(1i) lw(3i). -_ -.sp 3p -.TB -Edge Type Resource Name Description -.sp 3p -_ -.TH -.R -.sp 3p -XawChainBottom ChainBottom Edge remains a fixed distance from bottom of Dialog -.IN "XawChainBottom" "" -XawChainLeft ChainLeft Edge remains a fixed distance from left of Dialog -.IN "XawChainLeft" "" -XawChainRight ChainRight Edge remains a fixed distance from right of Dialog -.IN "XawChainRight" "" -XawChainTop ChainTop Edge remains a fixed distance from top of Dialog -.IN "XawChainTop" "" -XawRubber Rubber Edges will move a proportional distance -.IN "XawRubber" "" -.sp 3p -_ -.TE -.NH 4 -Example -.LP -If you wish to force the Dialog to never resize one or more of its children -then set \fBleft\fP and \fBright\fP to \fBXawChainLeft\fP and -\fBtop\fP and \fBbottom\fP to \fBXawChainTop\fP. This will cause -the child to remain a fixed distance from the top and left -edges of the Dialog, and to never resize. -.NH 4 -Special Considerations -.IN "Dialog widget" "special considerations" -.LP -The Dialog widget automatically sets the \fBtop\fP and \fBbottom\fP -resources for all Children that are subclasses of the Command widget, -as well as the widget children that are used to contain the \fBlabel\fP, -\fBvalue\fP, and \fBicon\fP. This policy allows the buttons at the -bottom of the Dialog to interact correctly with the predefined children, -and makes it possible for a client to simply create and manage a new -Command button without having to specify its constraints. -.LP -The Dialog will also set \fBfromLeft\fP to the last button in the -.IN "fromLeft" "" -Dialog for each new button added to the Dialog widget. -.LP -The automatically added constraints cannot be overridden, as they are -policy decisions of the Dialog widget. If a more flexible Dialog is -desired, the application is free to use the Form widget to create its -own Dialog policy. -.NH 3 -Automatically Created Children. -.IN "Dialog widget" "automatically created children" -.LP -The Dialog uses Label widgets to contain the \fBlabel\fP and \fBicon\fP. -These widgets are named \fIlabel\fP and \fIicon\fP respectively. The -Dialog \fBvalue\fP is contained in an AsciiText widget whose name is -\fIvalue\fP. Using \fBXtNameToWidget\fP the application can change -.IN "XtNameToWidget" "" -those resources associated with each of these widgets that are not -available through the Dialog widget itself. -.LP -.NH 3 -Convenience Routines -.LP -To return the character string in the text field, use -.PN XawDialogGetValueString . -.IN "XawDialogGetValueString" "" "@DEF@" -.FD 0 -String XawDialogGetValueString(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the Dialog widget. -.LP -This function returns a copy of the value string of the Dialog -widget. This string is allocated by the AsciiText widget and will -remain valid and unchanged until another call to -\fBXawDialogGetValueString\fP or an \fBXtGetValues\fP call on the -\fBvalue\fP widget, when the string will be automatically freed, and -a new string is returned. This string may be freed earlier by calling -the function \fBXawAsciiSourceFreeString\fP. -.IN "XawAsciiSourceFreeString" "" -.LP -.sp -To add a new button to the Dialog widget use -\fBXawDialogAddButton\fP. -.IN "XawDialogAddButton" "" "@DEF@" -.FD 0 -void XawDialogAddButton(\fIw\fP, \fIname\fP, \fIfunc\fP, \fIclient_data\fP) -.br - Widget \fIw\fP; -.br - String \fIname\fP; -.br - XtCallbackProc \fIfunc\fP; -.br - XtPointer \fIclient_data\fP; -.FN -.IP \fIw\fP 1i -Specifies the Dialog widget. -.IP \fIname\fP 1i -Specifies the name of the new Command button to be added to the Dialog. -.IP \fIfunc\fP 1i -Specifies a callback function to be called when this button is activated. If -NULL is specified then no callback is added. -.IP \fIclient_data\fP 1i -Specifies the client_data to be passed to the \fIfunc\fP. -.LP -This function is merely a shorthand for the code sequence: -.sp -.Ds 0 -.SM -.TA 1i 2i -.ta 1i 2i -{ - Widget button = XtCreateManagedWidget(name, commandWidgetClass, w, NULL, ZERO); - XtAddCallback(button, XtNcallback, func, client_data); -} -.NL -.De -.sp diff --git a/doc/xorg-docs/specs/Xaw/Form b/doc/xorg-docs/specs/Xaw/Form deleted file mode 100644 index 9ada171dd..000000000 --- a/doc/xorg-docs/specs/Xaw/Form +++ /dev/null @@ -1,200 +0,0 @@ -.\" $Xorg: Form,v 1.3 2000/08/17 19:42:26 cpqbld Exp $ -.NH 2 -Form Widget -.LP -.XS - Form Widget -.XE -.IN "Form widget" "" "@DEF@" -.Ds 0 -.TA 2.0i -.ta 2.0i -.sp -Application Header file -.IN "Form.h" "" -Class Header file -.IN "FormP.h" "" -Class formWidgetClass -.IN "formWidgetClass" "" -Class Name Form -.IN "Form widget" "class name" -Superclass Constraint -.sp -.De -.LP -The Form widget can contain an arbitrary number of children or -subwidgets. The Form provides geometry management for its children, -which allows individual control of the position of each child. Any -combination of children can be added to a Form. The initial positions -of the children may be computed relative to the positions of previously -created children. When the Form is resized, it computes new positions and -sizes for its children. This computation is based upon information -provided when a child is added to the Form. -.LP -The default width of the Form is the minimum width needed to -enclose the children after computing their initial layout, with a -margin of \fBdefaultDistance\fP -at the right and bottom edges. If a width and height is assigned -to the Form that is too small for the layout, the children will -be clipped by the right and bottom edges of the Form. -.NH 3 -Resources -.LP -When creating a Form widget instance, the following resources are -retrieved from the argument list or from the resource database: -.LP -.IN "Form widget" "resources" -.TS H -expand; -lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -accelerators Accelerators AcceleratorTable NULL -ancestorSensitive AncestorSensitive Boolean D True -background Background Pixel XtDefaultBackground -backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderColor BorderColor Pixel XtDefaultForeground -borderPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderWidth BorderWidth Dimension 1 -children ReadOnly WidgetList R NULL -colormap Colormap Colormap Parent's Colormap -defaultDistance Thickness int 4 -depth Depth int C Parent's Depth -destroyCallback Callback XtCallbackList NULL -height Height Dimension A Enough space to contain all children -mappedWhenManaged MappedWhenManaged Boolean True -numChildren ReadOnly Cardinal R 0 -screen Screen Screen R Parent's Screen -sensitive Sensitive Boolean True -translations Translations TranslationTable NULL -width Width Dimension A Enough space to contain all children -x Position Position 0 -y Position Position 0 -.sp 3p -_ -.TE -.Ac -.As -.Bg -.Gp -.Bc -.Bp -.Bw -.Ch -.Cm -.Dd Bold -.Dp -.Dc -.Hw -.Mm -.Nc -.Sc -.Se -.Tr -.Xy -.NH 3 -Constraint Resources -.LP -.IN "Form widget" "constraint resources" -Each child of the Form widget may request special layout resources -be applied to it. These \fIconstraint\fP resources allow the Form -widget's children to specify individual layout requirements. -.LP -.LP -.TS H -lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -bottom Edge XawEdgeType XawRubber -fromHoriz Widget Widget NULL (left edge of Form) -fromVert Widget Widget NULL (top edge of Form) -horizDistance Thickness int \fBdefaultDistance\fP resource -left Edge XawEdgeType XawRubber -.IN "XawEdgeType" "" -resizable Boolean Boolean FALSE -right Edge XawEdgeType XawRubber -.IN "XawRubber" "" -top Edge XawEdgeType XawRubber -vertDistance Thickness int \fBdefaultDistance\fP resource -.sp 3p -_ -.TE -.Bt Bold -.Fh Bold -.Hd Bold -.Rl Bold -.NH 3 -Layout Semantics -.LP -.Lt Form -.LP -.TS H -lw(1.5i) lw(1i) lw(3i). -_ -.sp 3p -.TB -Edge Type Resource Name Description -.sp 3p -_ -.TH -.R -.sp 3p -XawChainBottom ChainBottom Edge remains a fixed distance from bottom of Form -.IN "XawChainBottom" "" -XawChainLeft ChainLeft Edge remains a fixed distance from left of Form -.IN "XawChainLeft" "" -XawChainRight ChainRight Edge remains a fixed distance from right of Form -.IN "XawChainRight" "" -XawChainTop ChainTop Edge remains a fixed distance from top of Form -.IN "XawChainTop" "" -XawRubber Rubber Edges will move a proportional distance -.IN "XawRubber" "" -.sp 3p -_ -.TE -.NH 4 -Example -.LP -If you wish to force the Form to never resize one or more of its -children, then set \fBleft\fP and \fBright\fP to \fBXawChainLeft\fP and -\fBtop\fP and \fBbottom\fP to \fBXawChainTop\fP. This will cause the -child to remain a fixed distance from the top and left edges of the -Form, and never to resize. -.NH 3 -Convenience Routines -.LP -To force or defer a re-layout of the Form, use -.PN XawFormDoLayout . -.IN "Form widget" "re-layout" -.IN "XawFormDoLayout" "" "@DEF@" -.FD 0 -void XawFormDoLayout(\fIw\fP, \fIdo_layout\fP) -.br - Widget \fIw\fP; -.br - Boolean \fIdo_layout\fP; -.FN -.IP \fIw\fP 1i -Specifies the Form widget. -.IP \fIdo_layout\fP 1i -Specifies whether the layout of the Form widget is enabled (\fBTrue\fP) -or disabled (\fBFalse\fP). -.LP -When making several changes to the children of a Form widget -after the Form has been realized, it is a good idea to disable -relayout until after all changes have been made. - diff --git a/doc/xorg-docs/specs/Xaw/Grip b/doc/xorg-docs/specs/Xaw/Grip deleted file mode 100644 index cdbcb0ee6..000000000 --- a/doc/xorg-docs/specs/Xaw/Grip +++ /dev/null @@ -1,157 +0,0 @@ -.\" $Xorg: Grip,v 1.3 2000/08/17 19:42:26 cpqbld Exp $ -.NH 2 -Grip Widget -.XS - Grip Widget -.XE -.IN "Grip widget" "" "@DEF@" -.Ds 0 -.TA 2.0i -.ta 2.0i -.sp -Application header file -.IN "Grip.h" "" -Class header file -.IN "GripP.h" "" -Class gripWidgetClass -.IN "gripWidgetClass" "" -Class Name Grip -.IN "Grip widget" "class name" -Superclass Simple -.sp -.De -.LP -The Grip widget provides a small rectangular region in which user input -events (such as ButtonPress or ButtonRelease) may be handled. The most -common use for the Grip widget is as an attachment point for visually -repositioning an object, such as the pane border in a Paned widget. -.NH 3 -Resources -.LP -When creating a Grip widget instance, the following resources are -retrieved from the argument list or from the resource database: -.LP -.IN "Grip widget" "resources" -.TS H -expand; -lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -accelerators Accelerators AcceleratorTable NULL -ancestorSensitive AncestorSensitive Boolean D True -background Background Pixel XtDefaultBackground -backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderColor BorderColor Pixel XtDefaultForeground -borderPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderWidth BorderWidth Dimension 0 -callback Callback Callback NULL -colormap Colormap Colormap Parent's Colormap -cursor Cursor Cursor None -cursorName Cursor String NULL -depth Depth int C Parent's Depth -destroyCallback Callback XtCallbackList NULL -foreground Foreground Pixel XtDefaultForeground -height Height Dimension 8 -insensitiveBorder Insensitive Pixmap GreyPixmap -international International Boolean C False -mappedWhenManaged MappedWhenManaged Boolean True -pointerColor Foreground Pixel XtDefaultForeground -pointerColorBackground Background Pixel XtDefaultBackground -screen Screen Screen R Parent's Screen -sensitive Sensitive Boolean True -translations Translations TranslationTable NULL -width Width Dimension 8 -x Position Position 0 -y Position Position 0 -.sp 3p -_ -.TE -.Ac -.As -.Bg -.Gp -.Bc -.Bp -.Bw -.IP \fBcallback\fP 1.5i -All routines on this list are called whenever the \fBGripAction\fP -action routine is invoked. The \fIcall_data\fP contains all -information passed to the action routine. A detailed description -is given below in the \fBGrip Actions\fP section. -.Cm -.Cu -.Cn -.Dp -.Dc -.IP \fBforeground\fP 1.5i -A pixel value which indexes the widget's colormap to derive the color -used to flood fill the entire Grip widget. -.Hw -.Ib -.Ix -.Mm -.Pf -.Pb -.Sc -.Se -.Tr -.Xy -.NH 3 -Grip Actions -.IN "Grip widget" "actions" -.LP -The Grip widget does not declare any default event translation bindings, -but it does declare a single action routine named \fBGripAction\fP. The -.IN "Grip widget" "GripAction routine" -client specifies an arbitrary event translation table, optionally giving -parameters to the \fBGripAction\fP routine. -.LP -The \fBGripAction\fP routine executes the callbacks on the -\fBcallback\fP list, passing as \fIcall_data\fP a pointer to a -\fBXawGripCallData\fP structure, defined in the Grip widget's application -header file. -.LP -.Ds 0 -.TA .5i 2.25i -.ta .5i 2.25i -.IN "XawGripCallData" "" "@DEF@" -.IN "XawGripCallDataRec" "" "@DEF@" -.sp -typedef struct _XawGripCallData { - XEvent *event; - String *params; - Cardinal num_params; -} XawGripCallDataRec, *XawGripCallData, - GripCallDataRec, *GripCallData; /* supported for R4 compatibility */ -.IN "XawGripCallDataRec" "" -.IN "XawGripCallData" "" -.IN "GripCallData" "" -.sp -.De -.LP -In this structure, the \fIevent\fP is a pointer to the input event that -triggered the action. \fIparams\fP and \fInum_params\fP give the string -parameters specified in the translation table for the particular event -binding. -.IN "Grip widget" "GripAction table" -.LP -The following is an example of a translation table that uses the GripAction: -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -.sp - : GripAction(press) - : GripAction(move) - : GripAction(release) -.sp -.De -For a complete description of the format of translation tables, see the -\fI\*(xT\fP. diff --git a/doc/xorg-docs/specs/Xaw/Label b/doc/xorg-docs/specs/Xaw/Label deleted file mode 100644 index 5c3a92d88..000000000 --- a/doc/xorg-docs/specs/Xaw/Label +++ /dev/null @@ -1,122 +0,0 @@ -.\" $Xorg: Label,v 1.3 2000/08/17 19:42:27 cpqbld Exp $ -.NH 2 -Label Widget -.XS - Label Widget -.XE -.IN "Label widget" "" "@DEF@" -.Ds 0 -.TA 2.0i -.ta 2.0i -.sp -Application header file -.IN "Label.h" "" -Class header file -.IN "LabelP.h" "" -Class labelWidgetClass -.IN "labelWidgetClass" "" -Class Name Label -.IN "Label widget" "class name" -Superclass Simple -.sp -.De -.LP -A Label widget holds a graphic displayed within a -rectangular region of the screen. The graphic may be a -text string containing multiple lines of characters in an -8 bit or 16 bit character set (to be displayed with a -\fIfont\fP), or in a multi-byte encoding (for use with a -\fIfontset\fP). The graphic may also be a bitmap or -pixmap. The Label widget will allow its graphic to be -left, right, or center justified. Normally, this widget -can be neither selected nor directly edited by the user. -It is intended for use as an output device only. -.NH 3 -Resources -.LP -When creating a Label widget instance, the following resources are -retrieved from the argument list or from the resource database: -.LP -.IN "Label widget" "resources" -.TS H -expand; -lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -accelerators Accelerators AcceleratorTable NULL -ancestorSensitive AncestorSensitive Boolean D True -background Background Pixel XtDefaultBackground -backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap -bitmap Bitmap Pixmap None -borderColor BorderColor Pixel XtDefaultForeground -borderPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderWidth BorderWidth Dimension 1 -colormap Colormap Colormap Parent's Colormap -cursor Cursor Cursor None -cursorName Cursor String NULL -depth Depth int C Parent's Depth -destroyCallback Callback XtCallbackList NULL -encoding Encoding UnsignedChar XawTextEncoding8bit -font Font XFontStruct XtDefaultFont -fontSet FontSet XFontSet XtDefaultFontSet -foreground Foreground Pixel XtDefaultForeground -height Height Dimension A graphic height + 2 * \fBinternalHeight\fP -insensitiveBorder Insensitive Pixmap GreyPixmap -internalHeight Height Dimension 2 -internalWidth Width Dimension 4 -international International Boolean C False -justify Justify Justify XtJustifyCenter (center) -label Label String name of widget -leftBitmap LeftBitmap Bitmap None -mappedWhenManaged MappedWhenManaged Boolean True -pointerColor Foreground Pixel XtDefaultForeground -pointerColorBackground Background Pixel XtDefaultBackground -resize Resize Boolean True -screen Screen Screen R Parent's Screen -sensitive Sensitive Boolean True -translations Translations TranslationTable See above -width Width Dimension A graphic width + 2 * \fBinternalWidth\fP -x Position Position 0 -y Position Position 0 -.sp 3p -_ -.TE -.Ac -.As -.Bg -.Gp -.Bm Bold -.Bc -.Bp -.Bw -.Cm -.Cu -.Cn -.Dp -.Dc -.Le Bold -.Lf Bold -.Ls Bold -.Lg Bold -.Hw -.Ib -.Ih Bold -.In -.Ju Bold -.La Bold -.Ll Bold -.Mm -.Pf -.Pb -.Re Bold -.Sc -.Se -.Tr -.Xy diff --git a/doc/xorg-docs/specs/Xaw/List b/doc/xorg-docs/specs/Xaw/List deleted file mode 100644 index 562ecbddf..000000000 --- a/doc/xorg-docs/specs/Xaw/List +++ /dev/null @@ -1,341 +0,0 @@ -.\" $Xorg: List,v 1.3 2000/08/17 19:42:27 cpqbld Exp $ -.NH 2 -List Widget -.LP -.XS - List Widget -.XE -.IN "List widget" "" "@DEF@" -.Ds 0 -.TA 2.0i -.ta 2.0i -.sp -Application header file -.IN "List.h" "" -Class header file -.IN "ListP.h" "" -Class listWidgetClass -.IN "listWidgetClass" "" -Class Name List -.IN "List widget" "class name" -Superclass Simple -.sp -.De -.LP - -The List widget contains a list of strings formatted into rows and -columns. When one of the strings is selected, it is highlighted, and the -List widget's \fBNotify\fP action is invoked, calling all routines on -its callback list. Only one string may be selected at a time. -.NH 3 -Resources -.LP -When creating a List widget instance, the following resources are -retrieved from the argument list or from the resource database: -.LP -.IN "List widget" "resources" -.TS H -expand; -lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -accelerators Accelerators AcceleratorTable NULL -ancestorSensitive AncestorSensitive Boolean D True -background Background Pixel XtDefaultBackground -backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderColor BorderColor Pixel XtDefaultForeground -borderPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderWidth BorderWidth Dimension 1 -callback Callback Callback NULL -colormap Colormap Colormap Parent's Colormap -columnSpacing Spacing Dimension 6 -cursor Cursor Cursor XC_left_ptr -cursorName Cursor String NULL -defaultColumns Columns int 2 -depth Depth int C Parent's Depth -destroyCallback Callback XtCallbackList NULL -font Font FontStruct XtDefaultFont -fontSet FontSet XFontSet XtDefaultFontSet -forceColumns Columns Boolean False -foreground Foreground Pixel XtDefaultForeground -height Height Dimension A Enough space to contain the list -insensitiveBorder Insensitive Pixmap GreyPixmap -internalHeight Height Dimension 2 -internalWidth Width Dimension 4 -international International Boolean C False -list List Pointer name of widget -longest Longest int A 0 -mappedWhenManaged MappedWhenManaged Boolean True -numberStrings NumberStrings int A computed for NULL terminated list -pasteBuffer Boolean Boolean False -pointerColor Foreground Pixel XtDefaultForeground -pointerColorBackground Background Pixel XtDefaultBackground -rowSpacing Spacing Dimension 2 -screen Screen Screen R Parent's Screen -sensitive Sensitive Boolean True -translations Translations TranslationTable See below -verticalList Boolean Boolean False -width Width Dimension A Enough space to contain the list -x Position Position 0 -y Position Position 0 -.sp 3p -_ -.TE -.Ac -.As -.Bg -.Gp -.Bc -.Bp -.Bw -.IP \fBcallback\fP 1.5i -All functions on this list are called whenever the \fBnotify\fP action is -invoked. The \fIcall_data\fP argument contains information about the element -selected and is described in detail in the \fBList Callbacks\fP section. -.Cm -.IP \fBcolumnSpacing\fP 1.5i -.br -.ns -.IP \fBrowSpacing\fP 1.5i -The amount of space, in pixels, between each of the rows and columns -in the list. -.Cu -.Cn -.IP \fBdefaultColumns\fP 1.5i -The default number of columns. This value is used when neither the -width nor the height of the List widget is specified or when -\fBforceColumns\fP is \fBTrue\fP. -.Dp -.Dc -.IP \fBfont\fP -The text font to use when displaying the \fBlist\fP, when the -\fBinternational\fP resource is \fBfalse\fP. -.IP \fBfontSet\fP -The text font set to use when displaying the \fBlist\fP, when the -\fBinternational\fP resource is \fBtrue\fP. -.IP \fBforceColumns\fP -Forces the default number of columns to be used regardless of the -List widget's current size. -.IP \fBforeground\fP 1.5i -A pixel value which indexes the widget's colormap to derive the color -used to paint the text of the list elements. -.Hw -.Ib -.IP \fPinternalHeight\fP 1.5i -.br -.ns -.IP \fPinternalWidth\fP 1.5i -The margin, in pixels, between the edges of the list and the -corresponding edge of the List widget's window. -.IP \fBlist\fP 1.5i -An array of text strings displayed in the List widget. If -\fBnumberStrings\fP is zero (the default) then the \fBlist\fP must be -NULL terminated. If a value is not specified for the \fBlist\fP, then -\fBnumberStrings\fP is set to 1, and the name of the widget is used as -the \fBlist\fP, and \fBlongest\fP is set to the length of the name of the -widget. The \fBlist\fP is used in place, and must be available -to the List widget for the lifetime of this widget, or until it is -changed with \fBXtSetValues\fP or \fBXawListChange\fP. -.In -.IP \fBlongest\fP -Specifies the width, in pixels, of the longest string in the current -list. The List widget will compute this value if zero (the default) -is specified. If this resource is set by hand, entries longer than this -will be clipped to fit. -.Mm -.IP \fBnumberStrings\fP 1.5i -The number of strings in the current list. If a value of zero (the -default) is specified, the List widget will compute it. When computing -the number of strings the List widget assumes that the \fBlist\fP is NULL -terminated. -.IP \fBpasteBuffer\fP 1.5i -If this resource is set to \fBTrue\fP then the name of the currently -selected list element will be put into \fBCUT_BUFFER_0\fP. -.Pf -.Pb -.Sc -.Se -.Tr -.IP \fBverticalList\fP 1.5i -If this resource is set to \fBTrue\fP then the list elements will be -presented in column major order. -.Xy -.NH 3 -List Actions -.IN "List widget" "actions" -.LP -The List widget supports the following actions: -.IP \(bu 5 -Highlighting and unhighlighting the list element under the -pointer with \fBSet\fP and \fBUnset\fP -.IP \(bu 5 -Processing application callbacks with \fBNotify\fP -.LP -The following is the default translation table used by the List Widget: -.IN "List widget" "default translation table" -.LP -.Ds -.TA .5i 2.25i -.ta .5i 2.25i -,: Set(\|) Notify(\|) -.sp -.De -.LP -The full list of actions supported by List widget is: -.IP \fBSet\fP(\|) 1.5i -\fISets\fP the list element that is currently under the pointer. To -inform the user that this element is currently set, it is drawn with -foreground and background colors reversed. If this action is called when -there is no list element under the cursor, the currently \fIset\fP -element will be \fIunset\fP. -.IP \fBUnset\fP(\|) 1.5i -Cancels the \fIset\fP state of the element under the pointer, -and redraws it with normal foreground and background colors. -.IP \fBNotify\fP(\|) 1.5i -Calls all callbacks on the List widget's callback list. Information -about the currently selected list element is passed in the -\fIcall_data\fP argument (see \fBList Callbacks\fP below). -.NH 3 -List Callbacks -.IN "List widget" "callbacks" -.LP -All procedures on the List widget's callback list will have a -\fBXawListReturnStruct\fP passed to them as \fIcall_data\fP. The -structure is defined in the List widget's application header file. -.LP -.Ds 0 -.TA .5i 2.25i -.ta .5i 2.25i -.IN "XawListReturnStruct" "" "@DEF@" -typedef struct _XawListReturnStruct { - String string; /* string shown in the list. */ - int list_index; /* index of the item selected. */ -} XawListReturnStruct; -.IN "XawListReturnStruct" "" -.NT -The \fIlist_index\fP item used to be called simply \fIindex\fP. -Unfortunately, this name collided with a global name defined on some -operating systems, and had to be changed. -.NE -.De -.NH 3 -Changing the List -.LP -To change the list that is displayed, use -.PN XawListChange . -.IN "XawListChange" "" "@DEF@" -.FD 0 -void XawListChange(\fIw\fP, \fIlist\fP, \fInitems\fP, \fIlongest\fP, \fIresize\fP) -.br - Widget \fIw\fP; -.br - String * \fIlist\fP; -.br - int \fInitems\fP, \fIlongest\fP; -.br - Boolean \fIresize\fP; -.FN -.IP \fIw\fP 1i -Specifies the List widget. -.IP \fIlist\fP 1i -Specifies the new list for the List widget to display. -.IP \fInitems\fP 1i -Specifies the number of items in the \fIlist\fP. If a value less than 1 -is specified, \fIlist\fP must be NULL terminated, and the number of -items will be calculated by the List widget. -.IP \fIlongest\fP 1i -Specifies the length of the longest item in the \fIlist\fP in pixels. -If a value less than 1 is specified, the List widget will calculate the -value. -.IP \fIresize\fP 1i -Specifies a Boolean value that if \fBTrue\fP indicates that the -List widget should try to resize itself after making the change. -The constraints of the List widget's parent are always enforced, -regardless of the value specified here. -.LP -.PN XawListChange -will \fIunset\fP all list elements that are currently \fBset\fP before -the list is actually changed. The \fIlist\fP is used in place, and must -remain usable for the lifetime of the List widget, or until \fIlist\fP -has been changed again with this function or with \fBXtSetValues\fP. -.NH 3 -Highlighting an Item -.LP -To highlight an item in the list, use -.PN XawListHighlight . -.IN "XawListHighlight" "" "@DEF@" -.FD 0 -void XawListHighlight(\fIw\fP, \fIitem\fP) -.br - Widget \fIw\fP; -.br - int \fIitem\fP; -.FN -.IP \fIw\fP 1i -Specifies the List widget. -.IP \fIitem\fP 1i -Specifies an index into the current list that indicates the item to be -highlighted. -.LP -Only one item can be highlighted at a time. -If an item is already highlighted when -.PN XawListHighlight -is called, -the highlighted item is unhighlighted before the new item is highlighted. -.NH 3 -Unhighlighting an Item -.LP -To unhighlight the currently highlighted item in the list, use -.PN XawListUnhighlight . -.IN "XawListUnhighlight" "" "@DEF@" -.FD 0 -void XawListUnhighlight(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the List widget. -.NH 3 -Retrieving the Currently Selected Item -.LP -To retrieve the list element that is currently \fIset\fP, use -.PN XawListShowCurrent . -.IN "XawListShowCurrent" "" "@DEF@" -.FD 0 -XawListReturnStruct *XawListShowCurrent(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the List widget. -.LP -.PN XawListShowCurrent -returns a pointer to an -.PN XawListReturnStruct -structure, -containing the currently highlighted item. -If the value of the index member is XAW_LIST_NONE, -.IN "XAW_LIST_NONE" -the string member is undefined, and no item is currently selected. -.NH 3 -Restrictions -.LP -Many programmers create a ``scrolled list'' by putting a List -widget with many entries as a child of a Viewport widget. The -List continues to create a window as big as its contents, but -that big window is only visible where it intersects the parent -Viewport's window. (I.e., it is ``clipped.'') -.LP -While this is a useful technique, there is a serious drawback. -X does not support windows above 32,767 pixels in width or -height, but this height limit will be exceeded by a List's -window when the List has many entries (i.e., with a 12 point -font, about 3000 entries would be too many.) -.LP diff --git a/doc/xorg-docs/specs/Xaw/MenuButton b/doc/xorg-docs/specs/Xaw/MenuButton deleted file mode 100644 index e89925ac6..000000000 --- a/doc/xorg-docs/specs/Xaw/MenuButton +++ /dev/null @@ -1,215 +0,0 @@ -.\" $Xorg: MenuButton,v 1.3 2000/08/17 19:42:27 cpqbld Exp $ -.NH 2 -MenuButton Widget -.XS - MenuButton Widget -.XE -.IN "MenuButton widget" "" "@DEF@" -.sp -.Ds 0 -.TA 2.0i -.ta 2.0i -Application Header file -.IN "MenuButton.h" "" -Class Header file -.IN "MenuButtonP.h" "" -Class menuButtonWidgetClass -.IN "menuButtonWidgetClass" "" -Class Name MenuButton -.IN "MenuButton widget" "class name" -Superclass Command -.De -.LP -.sp -The MenuButton widget is an area, often rectangular, -that displays a graphic. The graphic may be a text -string containing multiple lines of characters in an 8 -bit or 16 bit character set (to be displayed with a -\fIfont\fP), or in a multi-byte encoding (for use with -a \fIfontset\fP). The graphic may also be a bitmap or -pixmap. -.LP -When the pointer cursor is on a MenuButton widget, the -MenuButton becomes highlighted by drawing a rectangle -around its perimeter. This highlighting indicates -that the MenuButton is ready for selection. When a -pointer button is pressed, the MenuButton widget will -pop up the menu named in the \fBmenuName\fP resource. -.NH 3 -Resources -.LP -When creating a MenuButton widget instance, -the following resources are retrieved from the argument list -or from the resource database: -.LP -.IN "MenuButton widget" "resources" -.TS H -expand; -lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -accelerators Accelerators AcceleratorTable NULL -ancestorSensitive AncestorSensitive Boolean D True -background Background Pixel XtDefaultBackground -backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap -bitmap Bitmap Pixmap None -borderColor BorderColor Pixel XtDefaultForeground -borderPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderWidth BorderWidth Dimension 1 -callback Callback XtCallbackList NULL -colormap Colormap Colormap Parent's Colormap -cornerRoundPercent CornerRoundPercent Dimension 25 -cursor Cursor Cursor None -cursorName Cursor String None -depth Depth int C Parent's Depth -destroyCallback Callback XtCallbackList NULL -encoding Encoding UnsignedChar XawTextEncoding8bit -font Font XFontStruct XtDefaultFont -fontSet FontSet XFontSet XtDefaultFontSet -foreground Foreground Pixel XtDefaultForeground -height Height Dimension A graphic height + 2 * \fBinternalHeight\fP -highlightThickness Thickness Dimension A 2 (0 if Shaped) -insensitiveBorder Insensitive Pixmap GreyPixmap -internalHeight Height Dimension 2 -internalWidth Width Dimension 4 -international International Boolean C False -justify Justify Justify XtJustifyCenter (center) -label Label String name of widget -leftBitmap LeftBitmap Bitmap None -mappedWhenManaged MappedWhenManaged Boolean True -menuName MenuName String "menu" -pointerColor Foreground Pixel XtDefaultForeground -pointerColorBackground Background Pixel XtDefaultBackground -resize Resize Boolean True -screen Screen Screen R Parent's Screen -sensitive Sensitive Boolean True -shapeStype ShapeStyle ShapeStyle Rectangle -translations Translations TranslationTable See below -width Width Dimension A graphic width + 2 * \fBinternalWidth\fP -x Position Position 0 -y Position Position 0 -.sp 3p -_ -.TE -.Ac -.As -.Bg -.Gp -.Bm -.Bc -.Bp -.Bw -.Cb -.Cm -.Cr -.Cu -.Cn -.Dp -.Dc -.Lf -.Ls -.Lg -.Hw -.Ht -.Ib -.Ih -.In -.Ju -.La -.Mm -.IP \fBmenuName\fP 1.5i -The name of a popup shell to popup as a menu. The MenuButton -will search for this name using \fBXtNameToWidget\fP starting -with itself as the reference widget. If the search is -unsuccessful the widget will continue up the widget tree using -each of its ancestors as the reference widget passed to -\fBXtNameToWidget\fP. If no widget of called \fBmenuName\fP is -found by this algorithm, the widget will print a warning message -and give up. When the menu is found it will be popped up -exclusive and spring_loaded. The MenuButton widget does not -copy the value of this resource into newly allocated memory. The -application programmer must pass the resource value in -nonvolatile memory. -.Pf -.Pb -.Re -.Sc -.Se -.Ss -.Tr -.Xy -.NH 3 -MenuButton Actions -.IN "MenuButton widget" "actions" -.LP -The MenuButton widget supports the following actions: -.IP \(bu 5 -Switching the button between the foreground and background -colors with \fBset\fP and \fBunset\fP -.IP \(bu 5 -Processing application callbacks with \fBnotify\fP -.IP \(bu 5 -Switching the internal border between highlighted -and unhighlighted states with \fBhighlight\fP and \fBunhighlight\fP -.IP \(bu 5 -Popping up a menu with \fBPopupMenu\fP -.LP -The following are the default translation bindings used by the -MenuButton widget: -.LP -.sp -.Ds 0 -.TA .5i 2.25i -.ta .5i 2.25i - : highlight(\|) - : reset(\|) - : reset(\|) PopupMenu(\) -.De -.NH 3 -MenuButton Actions -.LP -The full list of actions supported by MenuButton is: -.IP \fBhighlight\fP(\fIcondition\fP) 1.5i -Displays the internal highlight border in the color (\fBforeground\fP -or \fBbackground\fP ) that contrasts with the interior color of the -Command widget. The conditions \fBWhenUnset\fP and \fBAlways\fP are -understood by this action procedure. If no argument is passed, -\fBWhenUnset\fP is assumed. -.IP \fBunhighlight\fP(\|) 1.5i -Displays the internal highlight border in the color (\fBXtNforeground\fP -or \fBbackground\fP ) that matches the interior color of the -MenuButton widget. -.IP \fBset\fP(\|) 1.5i -Enters the \fIset\fP state, in which \fBnotify\fP is possible. This -action causes the button to display its interior in the -\fBforeground\fP color. The label or bitmap is displayed in the -\fBbackground\fP color. -.IP \fBunset\fP(\|) 1.5i -Cancels the \fIset\fP state and displays the interior of the button in the -\fBbackground\fP color. The label or bitmap is displayed in the -\fBforeground\fP color. -.IP \fBreset\fP(\|) 1.5i -Cancels any \fBset\fP or \fBhighlight\fP and displays the interior of the -button in the \fBbackground\fP color, with the label displayed in the -\fBforeground\fP color. -.IP \fBnotify\fP(\|) 1.5i -When the button is in the \fBset\fP state this action calls all functions in -the callback list named by the \fBcallback\fP resource. The value of -the call_data argument in these callback functions is undefined. -.IP \fBPopupMenu\fP(\|) 1.5i -Pops up the menu specified by the \fBmenuName\fP resource. -.LP -The MenuButton widget does not place a server grab on itself. -Instead, PopupMenu is registered as a grab action. -As a result, clients which popup menus without using XtMenuPopup -or MenuPopup or PopupMenu in translations will fail to have a grab active. -They should make a call to XtRegisterGrabAction on the appropriate action -in the application initialization routine, or use a different translation. -.bp diff --git a/doc/xorg-docs/specs/Xaw/Paned b/doc/xorg-docs/specs/Xaw/Paned deleted file mode 100644 index eaa2b8d20..000000000 --- a/doc/xorg-docs/specs/Xaw/Paned +++ /dev/null @@ -1,492 +0,0 @@ -.\" $Xorg: Paned,v 1.3 2000/08/17 19:42:27 cpqbld Exp $ -.NH 2 -Paned Widget -.LP -.XS - Paned Widget -.XE -.IN "Paned widget" "" "@DEF@" -.Ds 0 -.TA 2.0i -.ta 2.0i -.sp -Application Header file -.IN "Paned.h" "" -Class Header file -.IN "PanedP.h" "" -Class panedWidgetClass -.IN "panedWidgetClass" "" -Class Name Paned -.IN "Paned widget" "class name" -Superclass Constraint -.sp -.De -.LP -The Paned widget manages children in a vertically or horizontally -tiled fashion. The panes may be dynamically resized by the user by -using the \fIgrips\fP that appear near the right or bottom edge of the -border between two panes. -.LP -The Paned widget may accept any widget class as a pane \fBexcept\fP -Grip. Grip widgets have a special meaning for the Paned widget, and -adding a Grip as its own pane will confuse the Paned widget. -.NH 3 -Using the Paned Widget -.IN "Paned widget" "using" -.LP -The grips allow the panes to be resized by the user. The semantics of -how these panes resize is somewhat complicated, and warrants further -explanation here. When the mouse pointer is positioned on a grip and -pressed, an arrow is displayed that indicates the pane that is to be to -be resized. While keeping the mouse button down, the user can move the -grip up and down (or left and right). This, in turn, changes the size -of the pane. The size of the Paned widget will not change. Instead, -it chooses another pane (or panes) to resize. For more details on which -pane it chooses to resize, see \fBLayout Semantics\fP. -.LP -One pointer binding allows the border between two panes to be moved, -without affecting any of the other panes. When this occurs the pointer -will change to an arrow that points along the pane border. -.LP -The default bindings for the Paned widget's grips are: -.TS H -lw(1i) lw(2i) lw(2i). -_ -.sp 3p -.TB -Mouse button Pane to Resize - Vertical Pane to Resize - Horizontal -.sp 3p -_ -.TH -.R -.sp 3p -1 (left) above the grip left of the grip -2 (middle) adjust border adjust border -3 (right) below the grip right of the grip -.sp 3p -_ -.TE -.NH 3 -Resources -.LP -When creating a Paned widget instance, the following resources are -retrieved from the argument list or the resource database: -.LP -.IN "Paned widget" "resources" -.TS H -expand; -lw(1i) lw(1i) lw(1i) lw(.4i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -accelerators Accelerators AcceleratorTable NULL -ancestorSensitive AncestorSensitive Boolean D True -background Background Pixel XtDefaultBackground -backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap -betweenCursor Cursor Cursor A Depends on orientation -borderColor BorderColor Pixel XtDefaultForeground -borderPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderWidth BorderWidth Dimension 1 -children ReadOnly WidgetList R NULL -colormap Colormap Colormap Parent's Colormap -cursor Cursor Cursor None -depth Depth int C Parent's Depth -destroyCallback Callback XtCallbackList NULL -gripCursor Cursor Cursor A Depends on orientation -gripIndent GripIndent Position 10 -gripTranslations Translations TranslationTable see below -height Height Dimension A Depends on orientation -horizontalBetweenCursor Cursor Cursor sb_up_arrow -horizontalGripCursor Cursor Cursor sb_h_double_arrow -internalBorderColor BorderColor Pixel XtDefaultForeground -internalBorderWidth BorderWidth Dimension 1 -leftCursor Cursor Cursor sb_left_arrow -lowerCursor Cursor Cursor sb_down_arrow -mappedWhenManaged MappedWhenManaged Boolean True -numChildren ReadOnly Cardinal R 0 -orientation Orientation Orientation XtorientVertical -refigureMode Boolean Boolean True -rightCursor Cursor Cursor sb_right_arrow -screen Screen Screen R Parent's Screen -sensitive Sensitive Boolean True -translations Translations TranslationTable NULL -upperCursor Cursor Cursor sb_up_arrow -verticalBetweenCursor Cursor Cursor sb_left_arrow -verticalGripCursor Cursor Cursor sb_v_double_arrow -width Width Dimension A Depends on orientation -x Paned Position 0 -y Paned Position 0 -.sp 3p -_ -.TE -.Ac -.As -.Bg -.Gp -.Bc -.Bp -.Bw -.Ch -.Cm -.IP \fBcursor\fP 1.5i -The cursor to use when the mouse pointer is over the Paned widget, but -not in any of its children (children may also inherit this cursor). It -should be noted that the internal borders are actually part of the Paned -widget, not the children. -.Dp -.Dc -.IP \fBgripCursor\fP 1.5i -The cursor to use when the grips are not active. The default value is -\fBverticalGripCursor\fP or \fBhorizontalGripCursor\fP depending on -the orientation of the Paned widget. -.IP \fBgripIndent\fP 1.5i -The amount of space left between the right (or bottom) edge of the -Paned widget and all the grips. -.IP \fBgripTranslation\fP 1.5i -Translation table that will be applied to all grips. -.Hw -.IP \fBhorizontalBetweenCursor\fP 1.5i -.br -.ns -.IP \fBverticalBetweenCursor\fP 1.5i -The cursor to be used for the grip when changing the boundary between -two panes. These resources allow the cursors to be different -depending on the orientation of the Paned widget. -.IP \fBhorizontalGripCursor\fP 1.5i -.br -.ns -.IP \fBverticalGripCursor\fP 1.5i -The cursor to be used for the grips when they are not active. These -resources allow the cursors to be different depending on the -orientation of the Paned widget. -.IP \fBinternalBorderColor\fP 1.5i -A pixel value which indexes the widget's colormap to derive the internal -border color of the widget's window. The class name of this resource -allows \fIPaned*BorderColor: blue\fP to set the internal border color -for the Paned widget. An optimization is invoked if -\fBinternalBorderColor\fP and \fBbackground\fP are the same, and the -internal borders are not drawn. \fBinternalBorderWidth\fP is still left -between the panes, however. -.IP \fBinternalBorderWidth\fP 1.5i -The width of the internal borders. This is the amount of space left -between the panes. The class name of this resource allows -\fIPaned*BorderWidth: 3\fP to set the internal border width for the -Paned widget. -.IP \fBleftCursor\fP 1.5i -.br -.ns -.IP \fBrightCursor\fP 1.5i -The cursor used to indicate which is the \fIimportant\fP pane to resize -when the Paned widget is oriented horizontally. -.IP \fBlowerCursor\fP 1.5i -.br -.ns -.IP \fBupperCursor\fP 1.5i -The cursor used to indicate which is the \fIimportant\fP pane to resize -when the Paned widget is oriented vertically. -.Mm -.Nc -This is not the same as the number of panes, since this also contains a -grip for some of the panes, use \fBXawPanedGetNumSub\fP to retrieve the -number of panes. -.IP \fBorientation\fP 1.5i -The orientation to stack the panes. This value can be either -\fBXtorientVertical\fP or \fBXtorientHorizontal\fP. -.IN "XtorientVertical" "" -.IN "XtorientHorizontal" "" -.IN "conversions" "Orientation" -.Rs "vertical \fPand\fB horizontal" -.IP \fBrefigureMode\fP 1.5i -This resource allows pane layout to be suspended. If this value is -\fBFalse\fP, then no layout actions will be taken. This may improve -efficiency when adding or removing more than one pane from the Paned -widget. -.Sc -.Se -.Tr -.Xy -.NH 3 -Constraint Resources -.LP -.IN "Paned widget" "constraint resources" -Each child of the Paned widget may request special layout resources -be applied to it. These \fIconstraint\fP resources allow the Paned -widget's children to specify individual layout requirements. -.LP -.TS H -lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -allowResize Boolean Boolean False -max Max Dimension Infinity -min Min Dimension Height of Grips -preferredPaneSize PreferredPaneSize Dimension ask child -resizeToPreferred Boolean Boolean False -showGrip ShowGrip Boolean True -skipAdjust Boolean Boolean False -.sp 3p -_ -.TE -.IP \fBallowResize\fP 1.5i -If this value is \fBFalse\fP the the Paned widget will disallow all -geometry requests from this child. -.IP \fBmax\fP 1.5i -.br -.ns -.IP \fBmin\fP 1.5i -The absolute maximum or minimum size for this pane. These values will -never be overridden by the Paned widget. This may cause some panes to be -pushed off the bottom (or right) edge of the paned widget. -.IP \fBpreferredPaneSize\fP 1.5i -Normally the paned widget makes a QueryGeometry call on a child to -determine the preferred size of the child's pane. There are times -when the application programmer or the user has a better idea of the -preferred size of a pane. Setting this resource causes the value -passed to be interpreted as the preferred size, in pixels, of this pane. -.IP \fBresizeToPreferred\fP 1.5i -Determines whether or not to resize each pane to its preferred size -when the Paned widget is resized. See \fBLayout Semantics\fP for details. -.IP \fBshowGrip\fP 1.5i -If \fBTrue\fP then a grip will be shown for this pane. The grip -associated with a pane is either below or to the right of the pane. No -grip is ever shown for the last pane. -.IP \fBskipAdjust\fP 1.5i -This resource is used to determine which pane is forced to be resized. -Setting this value to \fBTrue\fP makes this pane less likely to be -forced to be resized. See \fBLayout Semantics\fP for details. -.NH 3 -Layout Semantics -.LP -.IN "Paned widget" "layout semantics" -In order to make effective use of the Paned widget it is helpful to know -the rules it uses to determine which child will be resized in any given -situation. There are three rules used to determine which child is -resized. While these rules are always the same, the panes that are -searched can change depending upon what caused the relayout. -.LP -.sp -\fBLayout Rules\fP -.IP \fB1\fP .5i -Do not let a pane grow larger than its \fBmax\fP or smaller than its -\fBmin\fP. -.IP \fB2\fP .5i -Do not adjust panes with \fBskipAdjust\fP set. -.IP \fB3\fP .5i -Do not adjust panes away from their preferred size, although moving one -closer to its preferred size is fine. -.LP -When searching the children the Paned widget looks for panes that -satisfy all the rules, and if unsuccessful then it eliminates rule 3 -and then 2. Rule 1 is always enforced. -.LP -If the relayout is due to a resize or change in management then the -panes are searched from bottom to top. If the relayout is due to grip -movement then they are searched from the grip selected in the direction -opposite the pane selected. -.NH 4 -Resizing Panes from a Grip Action -.LP -The pane above the grip is resized by invoking the GripAction with -\fBUpLeftPane\fP specified. The panes below the grip are each checked -against all rules, then rules 2 and 1 and finally against rule 1 only. -No pane above the chosen pane will ever be resized. -.LP -The pane below the grip is resized by invoking the GripAction with -\fBLowRightPane\fP specified. The panes above the grip are each -checked in this case. No pane below the chosen pane will ever be resized. -.LP -Invoking GripAction with \fBThisBorderOnly\fP specified just moves the -border between the panes. No other panes are ever resized. -.NH 4 -Resizing Panes after the Paned widget is resized. -.LP -When the Pane widget is resized it must determine a new size for each -pane. There are two methods of doing this. The Paned widget can either -give each pane its preferred size and then resize the panes to fit, or -it can use the current sizes and then resize the panes to fit. The -\fBresizeToPreferred\fP resource allows the application to tell the -Paned widget whether to query the child about its preferred size -(subject to the the \fBpreferredPaneSize\fP) or to use the current size -when refiguring the pane locations after the pane has been resized. -.LP -There is one special case. All panes assume they should resize to -their preferred size until the Paned widget becomes visible to the user. -.NH 4 -Managing Children and Geometry Management -.LP -The Paned widget always resizes its children to their preferred sizes when -a new child is managed, or a geometry management request is honored. -The Paned widget will first attempt to resize itself to contain its -panes exactly. If this is not possible then it will hunt through the -children, from bottom to top (right to left), for a pane to resize. -.NH 4 -Special Considerations -.LP -When a user resizes a pane with the grips, the Paned widget assumes that -this new size is the preferred size of the pane. -.NH 3 -Grip Translations -.LP -The Paned widget has no action routines of its own, as all actions are -handled through the grips. The grips are each assigned a default -Translation table. -.LP -.sp -.Ds 0 -.TA .5i 2.25i -.ta .5i 2.25i - : GripAction(Start, UpLeftPane) -.IN "GripAction" "" - : GripAction(Start, ThisBorderOnly) - : GripAction(Start, LowRightPane) - : GripAction(Move, UpLeftPane) - : GripAction(Move, ThisBorderOnly) - : GripAction(Move, LowRightPane) - Any: GripAction(Commit) -.De -.sp -.LP -The Paned widget interprets the \fBGripAction\fP as taking two arguments. -.IN "GripAction" "" -The first argument may be any of the following: -.IP \fBStart\fP 1i -Sets up the Paned widget for resizing and changes the cursor of the -grip. The second argument determines which pane will be resized, and -can take on any of the three values shown above. -.IP \fBMove\fP 1i -The internal borders are drawn over the current pane locations to -animate where the borders would actually be placed if you were to move -this border as shown. The second argument must match the second argument -that was passed to the \fBStart\fP action, that began this process. If -these arguments are not passed, the behavior is undefined. -.IP \fBCommit\fP 1i -This argument causes the Paned widget to commit the changes selected -by the previously started action. The cursor is changed back to the -grip's inactive cursor. No second argument is needed in this case. -.NH 3 -Convenience Routines -.LP -.IN "Paned widget" "enable pane resizing" -.IN "Paned widget" "disable pane resizing" -To enable or disable a child's request for pane resizing, -use -.PN XawPanedAllowResize : -.IN "XawPanedAllowResize" "" "@DEF@" -.FD 0 -void XawPanedAllowResize(\fIw\fP, \fIallow_resize\fP) -.br - Widget \fIw\fP; -.br - Boolean \fIallow_resize\fP; -.FN -.IP \fIw\fP 1i -Specifies the child pane. -.IP \fIallow_resize\fP -Specifies whether or not resizing requests for this child will be -granted by the Paned widget. -.LP -If allow_resize is \fBTrue\fP, the Paned widget allows geometry -requests from the child to change the pane's height. If allow_resize -is \fBFalse\fP, the Paned widget ignores geometry requests from the -child to change the pane's height. The default state is \fBTrue\fP -before the Pane is realized and \fBFalse\fP after it is realized. -This procedure is equivalent to changing the \fBallowResize\fP -constraint resource for the child. -.LP -.sp -.IN "Paned widget" "change height settings" -To change the minimum and maximum height settings for a pane, use -.PN XawPanedSetMinMax : -.IN "XawPanedSetMinMax" "" "@DEF@" -.FD 0 -void XawPanedSetMinMax(\fIw\fP, \fImin\fP, \fImax\fP) -.br - Widget \fIw\fP; -.br - int \fImin\fP, \fImax\fP; -.FN -.IP \fIw\fP 1i -Specifies the child pane. -.IP \fImin\fP 1i -Specifies the new minimum height of the child, expressed in pixels. -.IP \fImax\fP 1i -Specifies new maximum height of the child, expressed in pixels. -.LP -This procedure is equivalent to setting the \fBmin\fP and \fBmax\fP -constraint resources for the child. -.LP -.sp -.IN "Paned widget" "get height settings" -To retrieve the minimum and maximum height settings for a pane, use -.PN XawPanedGetMinMax : -.IN "XawPanedGetMinMax" "" "@DEF@" -.FD 0 -void XawPanedGetMinMax(\fIw\fP, \fImin_return\fP, \fImax_return\fP) -.br - Widget \fIw\fP; -.br - int \fI*min_return\fP, \fI*max_return\fP; -.FN -.IP \fIw\fP 1i -Specifies the child pane. -.IP \fImin_return\fP 1i -Returns the minimum height of the child, expressed in pixels. -.IP \fImax_return\fP 1i -Returns the maximum height of the child, expressed in pixels. -.LP -This procedure is equivalent to getting the \fBmin\fP and \fBmax\fP -resources for this child child. -.LP -.sp -.IN "Paned widget" "enable auto-reconfiguring" -.IN "Paned widget" "disable auto-reconfiguring" -To enable or disable automatic recalculation of pane sizes and positions, -use -.PN XawPanedSetRefigureMode : -.IN "XawPanedSetRefigureMode" "" "@DEF@" -.FD 0 -void XawPanedSetRefigureMode(\fIw\fP, \fImode\fP) -.br - Widget \fIw\fP; -.br - Boolean \fImode\fP; -.FN -.IP \fIw\fP 1i -Specifies the Paned widget. -.IP \fImode\fP 1i -Specifies whether the layout of the Paned widget is enabled (\fBTrue\fP) -or disabled (\fBFalse\fP). -.LP -When making several changes to the children of a Paned widget -after the Paned has been realized, it is a good idea to disable -relayout until after all changes have been made. -.LP -.sp -.IN "Paned widget" "getting the number of children" -To retrieve the number of panes in a paned widget use -\fBXawPanedGetNumSub\fP: -.IN "XawPanedGetNumSub" "" "@DEF@" -.FD 0 -int XawPanedGetNumSub(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the Paned widget. -.LP -This function returns the number of panes in the Paned widget. This is -\fBnot\fP the same as the number of children, since the grips are also -children of the Paned widget. diff --git a/doc/xorg-docs/specs/Xaw/Panner b/doc/xorg-docs/specs/Xaw/Panner deleted file mode 100644 index d417b0bb8..000000000 --- a/doc/xorg-docs/specs/Xaw/Panner +++ /dev/null @@ -1,247 +0,0 @@ -.\" $Xorg: Panner,v 1.3 2000/08/17 19:42:27 cpqbld Exp $ -.NH 2 -Panner Widget -.LP -.XS - Panner Widget -.XE -.IN "Panner widget" "" "@DEF@" -.Ds 0 -.TA 2.0i -.ta 2.0i -.sp -Application header file -.IN "Panner.h" "" -Class header file -.IN "PannerP.h" "" -Class pannerWidgetClass -.IN "pannerWidgetClass" "" -Class Name Panner -.IN "Panner widget" "class name" -Superclass Simple -.sp -.De -.LP -A Panner widget is a rectangle, called the -``canvas,'' on which another rectangle, the ``slider,'' moves in two -dimensions. It is often used with a Porthole widget to move, or -``scroll,'' a third widget in two dimensions, in which case the -slider's size and position gives feedback as to what portion of -the third widget is visible. -.LP -The slider may be scrolled around the canvas by pressing, -dragging, and releasing Button1; the default translation also -enables scrolling via arrow keys and some other keys. While -scrolling is in progress, the application receives notification -through callback procedures. Notification may be done either -continuously whenever the slider moves or discretely whenever the -slider has been given a new location. -.NH 3 -Resources -.LP -When creating a Panner widget instance, the following resources are -retrieved from the argument list or from the resource database: -.LP -.IN "Panner widget" "resources" -.TS H -expand; -lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -accelerators Accelerators AcceleratorTable NULL -allowOff AllowOff Boolean False -ancestorSensitive AncestorSensitive Boolean D True -background Background Pixel XtDefaultBackground -backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap -backgroundStipple BackgroundStipple String NULL -borderColor BorderColor Pixel XtDefaultForeground -borderPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderWidth BorderWidth Dimension 1 -canvasHeight CanvasHeight Dimension 0 -canvasWidth CanvasWidth Dimension 0 -colormap Colormap Colormap Parent's Colormap -cursor Cursor Cursor None -cursorName Cursor String NULL -defaultScale DefaultScale Dimension 8 -depth Depth int C Parent's Depth -destroyCallback Callback XtCallbackList NULL -foreground Foreground Pixel XtDefaultForeground -height Height Dimension A depends on orientation -internalSpace InternalSpace Dimension 4 -international International Boolean C False -lineWidth LineWidth Dimension 0 -mappedWhenManaged MappedWhenManaged Boolean True -pointerColor Foreground Pixel XtDefaultForeground -pointerColorBackground Background Pixel XtDefaultBackground -reportCallback ReportCallback Callback NULL -resize Resize Boolean True -rubberBand RubberBand Boolean False -screen Screen Screen R Parent's Screen -sensitive Sensitive Boolean True -shadowColor ShadowColor Pixel XtDefaultForeground -shadowThickness ShadowThickness Dimension 2 -sliderX SliderX Position 0 -sliderY SliderY Position 0 -sliderHeight SliderHeight Dimension 0 -sliderWidth SliderWidth Dimension 0 -translations Translations TranslationTable See below -width Width Dimension A depends on orientation -x Position Position 0 -y Position Position 0 -.sp 3p -_ -.TE -.Ac -.IP \fBallowOff\fP 1.5i -Whether to allow the edges of the slider to go off the edges of the canvas. -.As -.Bg -.Gp -.IP \fBbackgroundStipple\fP 1.5i -The name of a bitmap pattern to be used as the background for -the area representing the canvas. -.Bc -.Bp -.Bw -.IP \fBcanvasHeight\fP 1.5i -.br -.ns -.IP \fBcanvasWidth\fP 1.5i -The size of the canvas. -.Cm -.Cu -.Cn -.IP \fBdefaultScale\fP 1.5i -The percentage size that the Panner widget should have relative -to the size of the canvas. -.Dp -.Dc -.IP \fBforeground\fP 1.5i -A pixel value which indexes the widget's colormap to derive the color -used to draw the slider. -.Hw -.IP \fBinternalSpace\fP 1.5i -The width of internal border in pixels between a slider representing the -full size of the canvas -and the edge of the Panner widget. -.Ix -.IP \fBlineWidth\fP 1.5i -The width of the lines in the rubberbanding rectangle when rubberbanding -is in effect instead of continuous scrolling. The default is 0. -.Mm -.Pf -.Pb -.IP \fBreportCallback\fP 1.5i -All functions on this callback list are called when the -\fBnotify\fP action is invoked. See the \fBPanner Actions\fP section -for details. -.IP \fBresize\fP 1.5i -Whether or not to resize the panner whenever the canvas size is changed so -that the \fBdefaultScale\fP is maintained. -.IP \fBrubberBand\fP 1.5i -Whether or not scrolling should be discrete (only moving a rubberbanded -rectangle until the scrolling is done) or continuous (moving the slider -itself). This controls whether or not the \fBmove\fP action procedure also -invokes the \fBnotify\fP action procedure. -.Sc -.Se -.IP \fBshadowColor\fP 1.5i -The color of the shadow underneath the slider. -.IP \fBshadowThickness\fP 1.5i -The width of the shadow underneath the slider. -.IP \fBsliderX\fP 1.5i -.br -.ns -.IP \fBsliderY\fP 1.5i -The location of the slider in the coordinates of the canvas. -.IP \fBsliderHeight\fP 1.5i -.br -.ns -.IP \fBsliderWidth\fP 1.5i -The size of the slider. -.Tr -.Xy -.NH 3 -Panner Actions -.IN "Panner widget" "actions" -.LP -The actions supported by the Panner widget are: -.IP \fBstart\fP() 1.5i -This action begins movement of the slider. -.IP \fBstop\fP() 1.5i -This action ends movement of the slider. -.IP \fBabort\fP() 1.5i -This action ends movement of the slider and restores it to the position it -held when the \fBstart\fP action was invoked. -.IP \fBmove\fP() 1.5i -This action moves the outline of the slider (if the \fBrubberBand\fP resource -is True) or the slider itself (by invoking the \fBnotify\fP -action procedure). -.IP \fBpage\fP(\fIxamount\fP,\fIyamount\fP) 1.5i -This action moves the slider by the specified amounts. The format -for the amounts is a signed or unsigned floating-point number (e.g., +1.0 -or \-.5) followed -by either \fBp\fP indicating pages (slider sizes), or \fBc\fP indicating -canvas sizes. Thus, \fIpage(+0,+.5p)\fP represents vertical movement down -one-half the height of the slider and \fIpage(0,0)\fP represents moving to -the upper left corner of the canvas. -.IP \fBnotify\fP() 1.5i -This action informs the application of the slider's current position by -invoking the \fBreportCallback\fP functions registered by the application. -.IP \fBset\fP(\fIwhat\fP,\fIvalue\fP) 1.5i -This action changes the behavior of the Panner. The \fIwhat\fP argument -must currently be the string \fBrubberband\fP and controls the value of -the \fBrubberBand\fP resource. The \fIvalue\fP argument -may have one of the values \fBon\fP, \fBoff\fP, or \fBtoggle\fP. -.LP -.sp -The default bindings for Panner are: -.IN "Panner widget" "default translation table" -.LP -.Ds 0 -.TA .5i 1.75i -.ta .5i 1.75i - : start(\|) - : move(\|) - : notify(\|) stop(\|) - : abort(\|) - KP_Enter: set(rubberband,toggle) - space: page(+1p,+1p) - Delete: page(\-1p,\-1p) - BackSpace: page(\-1p,\-1p) - Left: page(\-.5p,+0) - Right: page(+.5p,+0) - Up: page(+0,\-.5p) - Down: page(+0,+.5p) - Home: page(0,0) -.De -.NH 3 -Panner Callbacks -.IN "Panner widget" "callbacks" -.LP -The functions registered on the \fBreportCallback\fP list are invoked by -the \fBnotify\fP action as follows: -.IN "ReportProc" "" "@DEF@" -.FD 0 -void ReportProc(\fIpanner\fP, \fIclient_data\fP, \fIreport\fP) -.br - Widget \fIpanner\fP; -.br - XtPointer \fIclient_data\fP; -.br - XtPointer \fIreport\fP; /* (XawPannerReport *) */ -.FN -.IP \fIpanner\fP 1i -Specifies the Panner widget. -.IP \fIclient_data\fP 1i -Specifies the client data. -.IP \fIreport\fP 1i -Specifies a pointer to an \fBXawPannerReport\fP structure containing -the location and size of the slider and the size of the canvas. diff --git a/doc/xorg-docs/specs/Xaw/Porthole b/doc/xorg-docs/specs/Xaw/Porthole deleted file mode 100644 index ff428635c..000000000 --- a/doc/xorg-docs/specs/Xaw/Porthole +++ /dev/null @@ -1,125 +0,0 @@ -.\" $Xorg: Porthole,v 1.3 2000/08/17 19:42:27 cpqbld Exp $ -.NH 2 -Porthole Widget -.LP -.XS - Porthole Widget -.XE -.IN "Porthole widget" "" "@DEF@" -.Ds 0 -.TA 2.0i -.ta 2.0i -.sp -Application Header file -.IN "Porthole.h" "" -Class Header file -.IN "PortholeP.h" "" -Class portholeWidgetClass -.IN "portholeWidgetClass" "" -Class Name Porthole -.IN "Porthole widget" "class name" -Superclass Composite -.sp -.De -.LP -The Porthole widget provides geometry management of a list of arbitrary -widgets, only one of which may be managed at any particular time. -The managed child widget is reparented within the porthole and is moved around -by the application (typically under the control of a Panner widget). -.NH 3 -Resources -.LP -When creating a Porthole widget instance, the following resources are -retrieved from the argument list or from the resource database: -.LP -.IN "Porthole widget" "resources" -.TS H -expand; -lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -accelerators Accelerators AcceleratorTable NULL -ancestorSensitive AncestorSensitive Boolean D True -background Background Pixel XtDefaultBackground -backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderColor BorderColor Pixel XtDefaultForeground -borderPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderWidth BorderWidth Dimension 1 -children ReadOnly WidgetList R NULL -colormap Colormap Colormap Parent's Colormap -depth Depth int C Parent's Depth -destroyCallback Callback XtCallbackList NULL -height Height Dimension A see \fBLayout Semantics\fP -mappedWhenManaged MappedWhenManaged Boolean True -numChildren ReadOnly Cardinal R 0 -reportCallback ReportCallback Callback NULL -screen Screen Screen R Parent's Screen -sensitive Sensitive Boolean True -translations Translations TranslationTable NULL -width Width Dimension A see \fBLayout Semantics\fP -x Position Position 0 -y Position Position 0 -.sp 3p -_ -.TE -.Ac -.As -.Bg -.Gp -.Bc -.Bp -.Bw -.Ch -.Cm -.Dp -.Dc -.Hw -.Mm -.Nc -.IP \fBreportCallback\fP 1.5i -A list of functions to invoke whenever the managed child widget changes -size or position. -.Sc -.Se -.Tr -.Xy -.NH 3 -Layout Semantics -.IN "Porthole widget" "layout semantics" -.LP -The Porthole widget allows its managed child to request any size -that is as large -or larger than the Porthole itself and any location so long as the child -still obscures all of the Porthole. This widget typically is used with a -Panner widget. -.NH 3 -Porthole Callbacks -.IN "Porthole widget" "callbacks" -.LP -The functions registered on the \fBreportCallback\fP list are invoked whenever -the managed child changes size or position: -.IN "ReportProc" "" "@DEF@" -.FD 0 -void ReportProc(\fIporthole\fP, \fIclient_data\fP, \fIreport\fP) -.br - Widget \fIporthole\fP; -.br - XtPointer \fIclient_data\fP; -.br - XtPointer \fIreport\fP; /* (XawPannerReport *) */ -.FN -.IP \fIporthole\fP 1i -Specifies the Porthole widget. -.IP \fIclient_data\fP 1i -Specifies the client data. -.IP \fIreport\fP 1i -Specifies a pointer to an \fBXawPannerReport\fP structure containing -the location and size of the slider and the size of the canvas. - diff --git a/doc/xorg-docs/specs/Xaw/Repeater b/doc/xorg-docs/specs/Xaw/Repeater deleted file mode 100644 index 4c753a79a..000000000 --- a/doc/xorg-docs/specs/Xaw/Repeater +++ /dev/null @@ -1,184 +0,0 @@ -.\" $Xorg: Repeater,v 1.3 2000/08/17 19:42:27 cpqbld Exp $ -.NH 2 -Repeater Widget -.XS - Repeater Widget -.XE -.IN "Repeater widget" "" "@DEF@" -.Ds 0 -.TA 2.0i -.ta 2.0i -.sp -Application header file -.IN "Repeater.h" "" -Class header file -.IN "RepeaterP.h" "" -Class repeaterWidgetClass -.IN "repeaterWidgetClass" "" -Class Name Repeater -.IN "Repeater widget" "class name" -Superclass Command -.sp -.De -.LP -The Repeater widget is a subclass of the Command widget; see the -Command documentation for details. The difference is that the Repeater can call its -registered callbacks repeatedly, at an increasing rate. The default translation -does so for the duration the user holds down pointer button 1 while the pointer -is on the Repeater. -.NH 3 -Resources -.LP -When creating a Repeater widget instance, the following resources are -retrieved from the argument list or from the resource database: -.LP -.IN "Repeater widget" "resources" -.TS H -expand; -lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -accelerators Accelerators AcceleratorTable NULL -ancestorSensitive AncestorSensitive Boolean D True -background Background Pixel XtDefaultBackground -backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap -bitmap Bitmap Pixmap None -borderColor BorderColor Pixel XtDefaultForeground -borderPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderWidth BorderWidth Dimension 1 -callback Callback XtCallbackList NULL -colormap Colormap Colormap Parent's Colormap -cornerRoundPercent CornerRoundPercent Dimension 25 -cursor Cursor Cursor None -cursorName Cursor String NULL -decay Decay Int 5 -depth Depth int C Parent's Depth -destroyCallback Callback XtCallbackList NULL -encoding Encoding UnsignedChar XawTextEncoding8bit -flash Boolean Boolean False -font Font XFontStruct XtDefaultFont -fontSet FontSet XFontSet XtDefaultFontSet -foreground Foreground Pixel XtDefaultForeground -height Height Dimension A graphic height + 2 * \fBinternalHeight\fP -highlightThickness Thickness Dimension A 2 (0 if Shaped) -initialDelay Delay Int 200 -insensitiveBorder Insensitive Pixmap GreyPixmap -internalHeight Height Dimension 2 -internalWidth Width Dimension 4 -international International Boolean C False -justify Justify Justify XtJustifyCenter (center) -label Label String name of widget -leftBitmap LeftBitmap Bitmap None -mappedWhenManaged MappedWhenManaged Boolean True -minimumDelay MinimumDelay Int 10 -pointerColor Foreground Pixel XtDefaultForeground -pointerColorBackground Background Pixel XtDefaultBackground -repeatDelay Delay Int 50 -resize Resize Boolean True -screen Screen Pointer R Parent's Screen -sensitive Sensitive Boolean True -shapeStyle ShapeStyle ShapeStyle Rectangle -startCallback StartCallback Callback NULL -stopCallback StopCallback Callback NULL -translations Translations TranslationTable See below -width Width Dimension A graphic width + 2 * \fBinternalWidth\fP -x Position Position 0 -y Position Position 0 -.sp 3p -_ -.TE -\" Resource Descriptions -.Ac -.As -.Bg -.Gp -.Bm -.Bc -.Bp -.Bw -.Cb -.Cm -.Cr -.Cu -.Cn -.IP \fBdecay\fP 1.5i -The number of milliseconds that should be subtracted from each succeeding -interval while the Repeater button is being held down until the interval -has reached \fBminimumDelay\fP milliseconds. -.Dp -.Dc -.Le -.IP \fBflash\fP 1.5i -Whether or not to flash the Repeater button whenever the timer goes off. -.Lf -.Ls -.Lg -.Hw -.Ht -.IP \fBinitialDelay\fP 1.5i -The number of milliseconds between the beginning of the Repeater button -being held down and the first invocation of the \fBcallback\fP function. -.Ib -.Ih -.In -.Ju -.La -.Ll -.Mm -.IP \fBminimumDelay\fP 1.5i -The minimum time between callbacks in milliseconds. -.Pf -.Pb -.IP \fBrepeatDelay\fP 1.5i -The number of milliseconds between each callback after the first (minus an -increasing number of \fBdecay\fPs). -.Re -.Sc -.Se -.Ss -.IP \fBstartCallback\fP 1.5i -The list of functions to invoke by the \fBstart\fP action (typically -when the Repeater button is first pressed). The callback data parameter -is set to NULL. -.IP \fBstopCallback\fP 1.5i -The list of functions to invoke by the \fBstop\fP action (typically -when the Repeater button is released). The callback data parameter -is set to NULL. -.Tr -.Xy -.NH 3 -Repeater Actions -.IN "Repeater widget" "actions" -.LP -The Repeater widget supports the following actions beyond those of the Command -button: -.IP \fBstart\fP() 1.5i -This invokes the functions on the \fBstartCallback\fP and \fBcallback\fP lists -and sets a timer to go off in \fBinitialDelay\fP milliseconds. The timer -will cause the \fBcallback\fP functions to be invoked with increasing -frequency until the \fBstop\fP action occurs. -.IP \fBstop\fP() 1.5i -This invokes the functions on the \fBstopCallback\fP list and prevents any -further timers from occuring until the next \fBstart\fP action. -.LP -.sp -.IN "Repeater widget" "translation bindings" -The following are the default translation bindings used by the -Repeater widget: -.LP -.Ds 0 -.TA .5i 2.25i -.ta .5i 2.25i - : highlight(\|) - : unhighlight(\|) - : set(\|) start(\|) - : stop(\|) unset(\|) -.De -.LP diff --git a/doc/xorg-docs/specs/Xaw/Scrollbar b/doc/xorg-docs/specs/Xaw/Scrollbar deleted file mode 100644 index 87d9ca111..000000000 --- a/doc/xorg-docs/specs/Xaw/Scrollbar +++ /dev/null @@ -1,386 +0,0 @@ -.\" $Xorg: Scrollbar,v 1.3 2000/08/17 19:42:27 cpqbld Exp $ -.NH 2 -Scrollbar Widget -.LP -.XS - Scrollbar Widget -.XE -.IN "Scrollbar widget" "" "@DEF@" -.Ds 0 -.TA 2.0i -.ta 2.0i -.sp -Application header file -.IN "Scrollbar.h" "" -Class header file -.IN "ScrollbarP.h" "" -Class scrollbarWidgetClass -.IN "scrollbarWidgetClass" "" -Class Name Scrollbar -.IN "Scrollbar widget" "class name" -Superclass Simple -.sp -.De -.LP -A Scrollbar widget is a rectangle, called the ``canvas,'' on -which another rectangle, the ``thumb,'' moves in one -dimension, either vertically or horizontally. A Scrollbar -can be used alone, as a value generator, or it can be used -within a composite widget (for example, a Viewport). When a -Scrollbar is used to move, or ``scroll,'' the contents of -another widget, the size and the position of the thumb usually give -feedback as to what portion of the other widget's contents -are visible. -.LP -Each pointer button invokes a specific action. Pointer -buttons 1 and 3 do not move the thumb automatically. -Instead, they return the pixel position of the cursor on the -scroll region. When pointer button 2 is clicked, the thumb -moves to the current pointer position. When pointer button -2 is held down and the pointer is moved, the thumb follows -the pointer. -.LP -The pointer cursor in the scroll region changes depending on the current -action. When no pointer button is pressed, the cursor appears as a -double-headed arrow that points in the direction that scrolling can -occur. When pointer button 1 or 3 is pressed, the cursor appears as a -single-headed arrow that points in the logical direction that the thumb -will move. When pointer button 2 is pressed, the cursor -appears as an arrow that points to the top or the left of the thumb. -.LP -When the user scrolls, the application receives notification -through callback procedures. For both discrete scrolling actions, the -callback returns the Scrollbar widget, the client_data, and the pixel -position of the pointer when the button was released. For continuous -scrolling, the callback routine returns the scroll bar widget, the -client data, and the current relative position of the thumb. When the -thumb is moved using pointer button 2, the callback procedure is invoked -continuously. When either button 1 or 3 is pressed, the callback -procedure is invoked only when the button is released and the client -callback procedure is responsible for moving the thumb. -.NH 3 -Resources -.LP -When creating a Scrollbar widget instance, the following resources are -retrieved from the argument list or from the resource database: -.LP -.IN "Scrollbar widget" "resources" -.TS H -expand; -lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -accelerators Accelerators AcceleratorTable NULL -ancestorSensitive AncestorSensitive Boolean D True -background Background Pixel XtDefaultBackground -backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderColor BorderColor Pixel XtDefaultForeground -borderPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderWidth BorderWidth Dimension 1 -colormap Colormap Colormap parent's Colormap -cursor Cursor Cursor None -cursorName Cursor String NULL -depth Depth int C parent's Depth -destroyCallback Callback XtCallbackList NULL -foreground Foreground Pixel XtDefaultForeground -height Height Dimension A depends on orientation -insensitiveBorder Insensitive Pixmap GreyPixmap -international International Boolean C False -jumpProc Callback XtCallbackList NULL -length Length Dimension 1 -mappedWhenManaged MappedWhenManaged Boolean True -minimumThumb MinimumThumb Dimension 7 -orientation Orientation Orientation XtorientVertical (vertical) -pointerColor Foreground Pixel XtDefaultForeground -pointerColorBackground Background Pixel XtDefaultBackground -screen Screen Screen R parent's Screen -scrollDCursor Cursor Cursor XC_sb_down_arrow -scrollHCursor Cursor Cursor XC_sb_h_double_arrow -scrollLCursor Cursor Cursor XC_sb_left_arrow -scrollProc Callback XtCallbackList NULL -scrollRCursor Cursor Cursor XC_sb_right_arrow -scrollUCursor Cursor Cursor XC_sb_up_arrow -scrollVCursor Cursor Cursor XC_sb_v_arrow -sensitive Sensitive Boolean True -shown Shown Float 0.0 -thickness Thickness Dimension 14 -thumb Thumb Bitmap GreyPixmap -thumbProc Callback XtCallbackList NULL -topOfThumb TopOfThumb Float 0.0 -translations Translations TranslationTable See below -width Width Dimension A depends on orientation -x Position Position 0 -y Position Position 0 -.sp 3p -_ -.TE -.Ac -.As -.Bg -.Gp -.Bc -.Bp -.Bw -.Cm -.Cu -.Cn -.Dp -.Dc -.IP \fBforeground\fP 1.5i -A pixel value which indexes the widget's colormap to derive the color -used to draw the thumb. -.Hw -.Ib -.Ix -.IP \fBjumpProc\fP 1.5i -All functions on this callback list are called when the -\fBNotifyThumb\fP action is invoked. See the \fBScrollbar -Actions\fP section for details. -.IP \fBlength\fP 1.5i -The height of a vertical scrollbar or the width of a horizontal scrollbar. -.Mm -.IP \fBminimumThumb\fP 1.5i -The smallest size, in pixels, to which the thumb can shrink. -.IP \fBorientation\fP 1.5i -The orientation is the direction that the thumb will be allowed to move. -This value can be either \fBXtorientVertical\fP or -\fBXtorientHorizontal\fP. -.IN "XtorientVertical" "" -.IN "XtorientHorizontal" "" -.IN "conversions" "Orientation" -.Rs "vertical \fPand\fB horizontal" -.Pf -.Pb -.Sc -.IP \fBscrollDCursor\fP 1.5i -This cursor is used when scrolling backward in a vertical scrollbar. -.IP \fBscrollHCursor\fP 1.5i -This cursor is used when a horizontal scrollbar is inactive. -.IP \fBscrollLCursor\fP 1.5i -This cursor is used when scrolling forward in a horizontal scrollbar. -.IP \fBscrollProc\fP 1.5i -All functions on this callback list may be called when the -\fBNotifyScroll\fP action is invoked. See the \fBScrollbar -Actions\fP section for details. -.IP \fBscrollRCursor\fP 1.5i -This cursor is used when scrolling backward in a horizontal scrollbar, -or when thumbing a vertical scrollbar. -.IP \fBscrollUCursor\fP 1.5i -This cursor is used when scrolling forward in a vertical scrollbar, or when -thumbing a horizontal scrollbar. -.IP \fBscrollVCursor\fP 1.5i -This cursor is used when a vertical scrollbar is inactive. -.Se -.IP \fBshown\fP 1.5i -This is the size of the thumb, expressed as a percentage (0.0 - 1.0) -of the length of the scrollbar. -.IP \fBthickness\fP 1.5i -The width of a vertical scrollbar or the height of a horizontal scrollbar. -.IP \fBthumb\fP 1.5i -This pixmap is used to tile (or stipple) the thumb of the scrollbar. If -no tiling is desired, then set this resource to \fBNone\fP. This -resource will accept either a bitmap or a pixmap that is the same depth -as the window. The resource converter for this resource constructs -bitmaps from the contents of files. (See \fBConverting Bitmaps\fP for -details.) -.IP \fBtopOfThumb\fP 1.5i -The location of the top of the thumb, as a percentage (0.0 - 1.0) -of the length of the scrollbar. This resource was called \fBtop\fP in -previous versions of the Athena widget set. The name collided with the -a Form widget constraint resource, and had to be changed. -.Tr -.Xy -.NH 3 -Scrollbar Actions -.IN "Scrollbar widget" "actions" -.LP -The actions supported by the Scrollbar widget are: -.IP \fBStartScroll\fP(\fIvalue\fP) 1.5i -The possible \fIvalues\fP are Forward, Backward, or Continuous. -This must be the first action to begin a new movement. -.IP \fBNotifyScroll\fP(\fIvalue\fP) 1.5i -The possible \fIvalues\fP are Proportional or FullLength. If the -argument to StartScroll was Forward or Backward, NotifyScroll executes -the \fBscrollProc\fP callbacks and passes either; the position of the -pointer, if \fIvalue\fP is Proportional, or the full length of the -scroll bar, if \fIvalue\fP is FullLength. If the argument to -StartScroll was Continuous, NotifyScroll returns without executing any -callbacks. -.IP \fBEndScroll\fP(\^) 1.5i -This must be the last action after a movement is complete. -.IP \fBMoveThumb\fP(\^) 1.5i -Repositions the Scrollbar's thumb to the current pointer location. -.IP \fBNotifyThumb\fP(\^)\ \ \ 1.5i -Calls the -.PN jumpProc -callbacks and passes the relative position of the -pointer as a percentage of the scroll bar length. -.LP -.sp -The default bindings for Scrollbar are: -.IN "Scrollbar widget" "default translation table" -.LP -.Ds 0 -.TA .5i 1.75i -.ta .5i 1.75i - : StartScroll(Forward) - : StartScroll(Continuous) MoveThumb(\|) NotifyThumb(\|) - : StartScroll(Backward) - : MoveThumb(\|) NotifyThumb(\|) - : NotifyScroll(Proportional) EndScroll(\|) -.De -.LP -.sp -Examples of additional bindings a user might wish to specify in a -resource file are: -.LP -.Ds 0 -.TA .5i 2.25i -.ta .5i 2.25i -*Scrollbar.Translations: \\ - ~Metaspace: StartScroll(Forward) NotifyScroll(FullLength) \\n\\ - Metaspace: StartScroll(Backward) NotifyScroll(FullLength) \\n\\ - EndScroll(\|) -.De -.NH 3 -Scrollbar Callbacks -.IN "Scrollbar widget" "callbacks" -.LP -There are two callback lists provided by the Scrollbar widget. -The procedural interface for these functions is described here. -.LP -The calling interface to the \fBscrollProc\fP callback procedure is: -.IN "ScrollProc" "" "@DEF@" -.FD 0 -void ScrollProc(\fIscrollbar\fP, \fIclient_data\fP, \fIposition\fP) -.br - Widget \fIscrollbar\fP; -.br - XtPointer \fIclient_data\fP; -.br - XtPointer \fIposition\fP; /* int */ -.FN -.IP \fIscrollbar\fP 1i -Specifies the Scrollbar widget. -.IP \fIclient_data\fP 1i -Specifies the client data. -.IP \fIposition\fP 1i -Specifies a pixel position in integer form. -.LP -The \fBscrollProc\fP callback is used for incremental scrolling -and is called by the \fBNotifyScroll\fP action. -The position argument is a signed quantity and should be cast to an int -when used. Using the default button bindings, button 1 returns a -positive value, and button 3 returns a negative value. In both cases, -the magnitude of the value is the distance of the pointer in -pixels from the top (or left) of the Scrollbar. The value will never -be greater than the length of the Scrollbar. -.LP -.sp -The calling interface to the \fBjumpProc\fP callback procedure is: -.IN "jumpProc" "" "@DEF@" -.FD 0 -void JumpProc(\fIscrollbar\fP, \fIclient_data\fP, \fIpercent\fP) -.br - Widget \fIscrollbar\fP; -.br - XtPointer \fIclient_data\fP; -.br - XtPointer \fIpercent_ptr\fP; /* float* */ -.FN -.IP \fIscrollbar\fP 1i -Specifies the ID of the scroll bar widget. -.IP \fIclient_data\fP 1i -Specifies the client data. -.IP \fIpercent_ptr\fP 1i -Specifies the floating point position of the thumb (0.0 \- 1.0). -.LP -The \fBjumpProc\fP callback is used to implement smooth scrolling and -is called by the \fBNotifyThumb\fP action. Percent_ptr must be cast -to a pointer to float before use; i.e. -.LP -.Ds 0 -.TA .5i -.ta .5i - float percent = *(float*)percent_ptr; -.De -.LP -With the default button bindings, button 2 moves the thumb interactively, -and the \fBjumpProc\fP is called on each new position of the pointer, -while the pointer button remains down. The value specified by -\fIpercent_ptr\fP is the current location of the thumb (from the top or -left of the Scrollbar) expressed as a percentage of the length of the -Scrollbar. -.NH 3 -Convenience Routines -.LP -.IN "Scrollbar widget" "setting thumb values" -To set the position and length of a Scrollbar thumb, use -.PN XawScrollbarSetThumb . -.IN "XawScrollbarSetThumb" "" "@DEF@" -.FD 0 -void XawScrollbarSetThumb(\fIw\fP, \fItop\fP, \fIshown\fP) -.br - Widget \fIw\fP; -.br - float \fItop\fP; -.br - float \fIshown\fP; -.FN -.IP \fIw\fP 1i -Specifies the Scrollbar widget. -.IP \fItop\fP 1i -Specifies the position of the top of the thumb as a fraction of the -length of the Scrollbar. -.IP \fIshown\fP 1i -Specifies the length of the thumb as a fraction of the total length -of the Scrollbar. -.LP -.PN XawScrollbarThumb -moves the visible thumb to a new position (0.0 \- 1.0) and length (0.0 \- 1.0). -Either the top or shown arguments can be specified as \-1.0, -in which case the current value is left unchanged. -Values greater than 1.0 are truncated to 1.0. -.LP -If called from \fBjumpProc\fP, \fBXawScrollbarSetThumb\fP has no effect. -.NH 3 -Setting Float Resources -.IN "float resources" "setting" -.LP -The \fBshown\fP and \fBtopOfThumb\fP resources are of type -\fIfloat\fP. These resources can be difficult to get into an -argument list. The reason is that C performs an automatic cast of -the float value to an integer value, usually truncating the important -information. The following code fragment is one portable method of -getting a float into an argument list. -.sp -.Ds 0 -.SM -.TA 1i 2i -.ta 1i 2i - top = 0.5; - if (sizeof(float) > sizeof(XtArgVal)) { - /* - \ * If a float is larger than an XtArgVal then pass this - \ * resource value by reference. - \ */ - XtSetArg(args[0], XtNshown, &top); - } - else { - /* - \ * Convince C not to perform an automatic conversion, which - \ * would truncate 0.5 to 0. - \ */ - XtArgVal * l_top = (XtArgVal *) ⊤ - XtSetArg(args[0], XtNshown, *l_top); - } -.NL -.De -.sp diff --git a/doc/xorg-docs/specs/Xaw/Simple b/doc/xorg-docs/specs/Xaw/Simple deleted file mode 100644 index a030d4012..000000000 --- a/doc/xorg-docs/specs/Xaw/Simple +++ /dev/null @@ -1,95 +0,0 @@ -.\" $Xorg: Simple,v 1.3 2000/08/17 19:42:27 cpqbld Exp $ -.NH 2 -Simple Widget -.XS - Simple Widget -.XE -.IN "Simple widget" "" "@DEF@" -.Ds 0 -.TA 2.0i -.ta 2.0i -.sp -Application Header file -.IN "Simple.h" "" -Class Header file -.IN "SimpleP.h" "" -Class simpleWidgetClass -.IN "simpleWidgetClass" -Class Name Simple -.IN "Simple widget" "class name" -Superclass Core -.sp -.De -.LP -The Simple widget is not very useful by itself, as it has no semantics -of its own. It main purpose is to be used as a common superclass for -the other \fIsimple\fP Athena widgets. This widget adds six resources -to the resource list provided by the Core widget and its superclasses. -.NH 3 -Resources -.LP -When creating a Simple widget instance, the following resources are -retrieved from the argument list or from the resource database: -.LP -.IN "Simple widget" "resources" -.TS H -expand; -lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -accelerators Accelerators AcceleratorTable NULL -ancestorSensitive AncestorSensitive Boolean D True -background Background Pixel XtDefaultBackground -backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderColor BorderColor Pixel XtDefaultForeground -borderPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderWidth BorderWidth Dimension 1 -colormap Colormap Colormap Parent's Colormap -cursor Cursor Cursor None -cursorName Cursor String NULL -depth Depth int C Parent's Depth -destroyCallback Callback XtCallbackList NULL -height Height Dimension 0 -insensitiveBorder Insensitive Pixmap GreyPixmap -international International Boolean C False -mappedWhenManaged MappedWhenManaged Boolean True -pointerColor Foreground Pixel XtDefaultForeground -pointerColorBackground Background Pixel XtDefaultBackground -screen Screen Screen R Parent's Screen -sensitive Sensitive Boolean True -translations Translations TranslationTable NULL -width Width Dimension 0 -x Position Position 0 -y Position Position 0 -.sp 3p -_ -.TE -.Ac -.As -.Bg -.Gp -.Bc -.Bp -.Bw -.Cm -.Cu Bold -.Cn Bold -.Dp -.Dc -.Hw -.Ib Bold -.Ix Bold -.Mm -.Pf Bold -.Pb Bold -.Sc -.Se -.Tr -.Xy diff --git a/doc/xorg-docs/specs/Xaw/SimpleMenu b/doc/xorg-docs/specs/Xaw/SimpleMenu deleted file mode 100644 index b88585b64..000000000 --- a/doc/xorg-docs/specs/Xaw/SimpleMenu +++ /dev/null @@ -1,315 +0,0 @@ -.\" $Xorg: SimpleMenu,v 1.3 2000/08/17 19:42:27 cpqbld Exp $ -.NH 2 -SimpleMenu Widget -.XS - SimpleMenu Widget -.XE -.IN "SimpleMenu widget" "" "@DEF@" -.Ds 0 -.TA 2.0i -.ta 2.0i -.sp -Application Header file -.IN "SimpleMenu.h" "" -Class Header file -.IN "SimpleMenP.h" "" -Class simpleMenuWidgetClass -.IN "simpleMenuWidgetClass" "" -Class Name SimpleMenu -.IN "SimpleMenu widget" "class name" -Superclass OverrideShell -.sp -.De -.LP -The SimpleMenu widget is a container for the menu entries. It is a -direct subclass of shell, and is should be created with -\fBXtCreatePopupShell\fP, not \fBXtCreateManagedWidget\fP. This is the -only part of the menu that -actually is associated with a window. The SimpleMenu serves as the glue to bind -the individual menu entries together into a menu. -.NH 3 -Resources -.LP -.IN "SimpleMenu widget" "resources" -.LP -The resources associated with the SimpleMenu widget control aspects -that will affect the entire menu. -.TS H -lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -accelerators Accelerators AcceleratorTable NULL -ancestorSensitive AncestorSensitive Boolean D True -allowShellResize AllowShellResize Boolean True -background Background Pixel XtDefaultBackground -backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap -backingStore BackingStore BackingStore see below -borderColor BorderColor Pixel XtDefaultForeground -borderPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderWidth BorderWidth Dimension 1 -bottomMargin VerticalMargins Dimension 0 -children ReadOnly WidgetList R NULL -createPopupChildProc CreatePopupChildProc Function NULL -colormap Colormap Colormap Parent's Colormap -cursor Cursor Cursor None -depth Depth int C Parent's Depth -destroyCallback Callback XtCallbackList NULL -geometry Geometry String NULL -height Height Dimension Enough space to contain all entries -label Label String NULL -labelClass LabelClass Pointer SmeBSBObjectClass -mappedWhenManaged MappedWhenManaged Boolean True -menuOnScreen MenuOnScreen Boolean True -numChildren ReadOnly Cardinal R 0 -overrideRedirect OverrideRedirect Boolean True -popdownCallback Callback XtCallbackList NULL -popupCallback Callback XtCallbackList NULL -popupOnEntry PopupOnEntry Widget A Label or first entry -rowHeight RowHeight Dimension 0 -saveUnder SaveUnder Boolean False -screen Screen Screen R Parent's Screen -sensitive Sensitive Boolean True -topMargin VerticalMargins Dimension 0 -translations Translations TranslationTable See below -visual Visual Visual CopyFromParent -width Width Dimension Width of widest entry -x Position Position 0 -y Position Position 0 -.sp 3p -_ -.TE -.Ac -.As -.IP \fBbackingStore\fP 1.5i -.IN "conversions" "BackingStore" -Determines what type of backing store will be used for the menu. Legal -values for this resource are \fBNotUseful\fP, \fBWhenMapped\fP, and -\fBAlways\fP. These values are the backing-store integers defined in -. -.Rs "notUseful, whenMapped, always, \fPand\fP default" -If \fBdefault\fP is specified (the default behavior) the server will use -whatever it thinks is appropriate. -.Bg -.Gp -.Bc -.Bp -.Bw -.IP \fBbottomMargin\fP 1.5i -.br -.ns -.IP \fBtopMargin\fP 1.5i -The amount of space between the top or bottom of the menu and the menu entry -closest to that edge. -.Ch -.Cm -.IP \fBcursor\fP 1.5i -The shape of the mouse pointer whenever it is in this widget. -.Dp -.Dc -.IP geometry 1.5i -If this resource is specified it will override the x, y, width and -height of this widget. The format of this string is -[<\fIwidth\fP>x<\fIheight\fP>][{+ -} <\fIxoffset\fP> {+ -}<\fIyoffset\fP>]. -.Hw -.IP \fBlabel\fP 1.5i -This label will be placed at the top of the SimpleMenu, and may not be -highlighted. The name of the -label object is \fBmenuLabel\fP. Using this name it is possible to -modify the label's attributes through the resource database. When the label -is created, the \fBlabel\fP is hard coded to the value of \fBlabel\fP, and -\fBjustify\fP is hard coded as \fBXtJustifyCenter\fP. -.IP \fBlabelClass\fP 1.5i -Specifies the type of Sme object created as the menu label. -.Mm -.IP \fBmenuOnScreen\fP 1.5i -If the menu is automatically positioned under the cursor with the -\fBXawPositionSimpleMenu\fP action, and this resource is \fBTrue\fP, -then the menu will always be fully visible on the screen. -.Nc -.IP overrideRedirect 1.5i -Determines the value of the override_redirect attribute of the -SimpleMenu's window. The override_redirect attribute of a window -determines whether or not a window manager may interpose itself between -this window and the root window of the display. For more information -see the \fIInterclient Communications Conventions Manual\fP. -.IP popdownCallback 1.5i -.br -.ns -.IP popupCallback 1.5i -These callback functions are called by the Xt Intrinsics whenever the -shell is popped up or down (See \fI\*(xT\fP for details). -.IP \fBpopupOnEntry\fP 1.5i -The \fBXawPositionSimpleMenu\fP action will, by default, popup the -SimpleMenu with its label (or first entry) directly under the -pointer. To popup the menu under -another entry, set this resource to the menu entry that should be -under the pointer, when the menu is popped up. This allows the -application to offer the user a default menu entry that can be selected -with out moving the pointer. -.IP \fBrowHeight\fP 1.5i -If this resources is zero (the default) then each menu entry will be -given its desired height. If this resource has any other value then -all menu entries will be forced to be \fBrowHeight\fP pixels high. -.IP saveUnder 1.5i -If this is \fBTrue\fP then save unders will be active on the menu's window. -.Sc -.Se -.Tr -.Xy -.NH 3 -SimpleMenu Actions -.IN "SimpleMenu widget" "actions" -.LP -The SimpleMenu widget supports the following actions: -.IP \(bu 5 -Switching the entry under the mouse pointer between -the foreground and background colors with \fBhighlight\fP -and \fBunhighlight\fP -.IP \(bu 5 -Processing menu entry callbacks with \fBnotify\fP -.sp -.LP -.IN "SimpleMenu widget" "default translations" -The following are the default translation bindings used -by the SimpleMenu widget: -.LP -.sp -.Ds 0 -.TA .5i 2.25i -.ta .5i 2.25i - : highlight(\|) - : unhighlight(\|) - : highlight(\|) - : MenuPopdown(\|) notify(\|) unhighlight(\|) -.De -.sp -.LP -.IN "SimpleMenu widget" "MenuPopdown routine" -The user can pop down the menu without activating any of the callback -functions by releasing the pointer button when no menu item is -highlighted. -.sp -.LP -The full list of actions supported by SimpleMenu is: -.IP \fBhighlight\fP() 1.5i -Highlight the menu entry that is currently under the pointer. -Only a item that is highlighted will be notified when the \fBnotify\fP -action is invoked. The look of a highlighted entry is determined by -the menu entry. -.IP \fBunhighlight\fP(\|) 1.5i -Unhighlights the currently highlighted menu item, and returns it to -its normal look. -.IP \fBnotify\fP(\|) 1.5i -Notifies the menu entry that is currently highlighted that is has been -selected. It is the responsibility of the menu entry to take the -appropriate action. -.IP \fBMenuPopdown\fP(\fImenu\fP) -This action is defined in \fI\*(xT\fP. -.IN "SimpleMenu widget" "MenuPopdown routine" -.NH 3 -Positioning the SimpleMenu -.IN "XawPositionSimpleMenu" "" "@DEF@" -.IN "SimpleMenu widget" "positioning" "@DEF@" -.LP -If the SimpleMenu widget is to be used as a pulldown menu then the -MenuButton widget, or some other outside means should be used to place -the menu when it is popped up. -.LP -If popup menus are desired it will be necessary to add the -\fBXawPositionSimpleMenu\fP and \fBMenuPopup\fP actions to the -translation table of the widget that will be popping up the menu. The -\fBMenuPopup\fP action is described in \fI\*(xT\fP. -\fBXawPositionSimpleMenu\fP is a global action procedure registered by -the SimpleMenu widget when the first one is created or the convenience -routine \fBXawSimpleMenuAddGlobalActions\fP is called. -.LP -Translation writers should be aware that Xt does not register grabs on -``don't care'' modifiers, and therefore the left hand side of the -production should be written to exclude unspecified modifiers. -For example these are the translations needed to popup some of -\fBxterm's\fP menus: -.sp -.LP -.Ds 0 -.TA .5i 2.25i -.ta .5i 2.25i - !Ctrl: XawPositionSimpleMenu(xterm) MenuPopup(xterm) - !Ctrl: XawPositionSimpleMenu(modes) MenuPopup(modes) -.De -.sp 1 -.LP -.IP \fBXawPositionSimpleMenu\fP(\fImenu\fP) 2.25i -The \fBXawPositionSimpleMenu\fP routine will search for the menu name -passed to it using \fBXtNameToWidget\fP starting with the widget -invoking the action as the reference widget. If it is unsuccessful it -will continue up the widget tree using each of the invoking widget's -ancestors as the reference widget. If it is still unsuccessful it will -print a warning message and give up. \fBXawPositionSimpleMenu\fP will -position the menu directly under the pointer cursor. The menu will be -placed so that the pointer cursor is centered on the entry named by the -\fBpopupOnEntry\fP resource. If the \fBmenuOnScreen\fP resource is -\fBTrue\fP then the menu will always be fully visible on the screen. -.NH 3 -Convenience Routines -.NH 4 -Registering the Global Action Routines -.LP -.IN "XawPositionSimpleMenu" "" -The \fBXawPositionSimpleMenu\fP action routine may often be invoked -before any menus have been created. This can occur when an -application uses dynamic menu creation. In these cases an application will -need to register this global action routine by calling -\fBXawSimpleMenuAddGlobalActions\fP: -.IN "XawSimpleMenuAddGlobalActions" "" "@DEF@" -.FD 0 -void XawSimpleMenuAddGlobalActions(\fIapp_con\fP) -.br - XtAppContext \fIapp_con\fP; -.FN -.IP \fIapp_con\fP 1i -Specifies the application context in which this action should be registered. -.LP -This function need only be called once per application and must be -called before any widget that uses \fBXawPositionSimpleMenu\fP action -is realized. -.NH 4 -Getting and Clearing the Current Menu Entry -.LP -To get the currently highlighted menu entry use -\fBXawSimpleMenuGetActiveEntry\fP: -.IN "XawSimpleMenuGetActiveEntry" "" "@DEF@" -.FD 0 -Widget XawSimpleMenuGetActiveEntry(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the SimpleMenu widget. -.LP -This function returns the menu entry that is -currently highlighted, or NULL if no entry is highlighted. -.LP -.sp -To clear the SimpleMenu widget's internal information about the -currently highlighted menu entry use -\fBXawSimpleMenuClearActiveEntry\fP: -.IN "XawSimpleMenuClearActiveEntry" "" "@DEF@" -.FD 0 -Widget XawSimpleMenuClearActiveEntry(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the SimpleMenu widget. -.LP -This function unsets all internal references to the currently -highlighted menu entry. It does not \fIunhighlight\fP or otherwise -alter the appearance of the active entry. This function is primarily -for use by implementors of menu entries. diff --git a/doc/xorg-docs/specs/Xaw/Sme b/doc/xorg-docs/specs/Xaw/Sme deleted file mode 100644 index 51f235999..000000000 --- a/doc/xorg-docs/specs/Xaw/Sme +++ /dev/null @@ -1,106 +0,0 @@ -.\" $Xorg: Sme,v 1.3 2000/08/17 19:42:28 cpqbld Exp $ -.NH 2 -Sme Object -.LP -.XS - Sme Object -.XE -.IN "Sme object" "" "@DEF@" -.sp -.Ds 0 -.TA 2.0i -.ta 2.0i -Application Header file -.IN "Sme.h" "" -Class Header file -.IN "SmeP.h" "" -Class smeObjectClass -.IN "smeObjectClass" "" -Class Name Sme -.IN "Sme object" "class name" -Superclass RectObj -.De -.sp -.LP -The Sme object is the base class for all menu entries. While this -object is mainly intended to be subclassed, it may be used in a menu to -add blank space between menu entries. -.NH 3 -Resources -.IN "SmeLine object" "resources" -.LP -The resources associated with the SmeLine object are defined in this -section, and affect only the single menu entry specified by this object. -There are no new resources added for this class, as it picks up all its -resources from the RectObj class. -.TS H -lw(1.5i) lw(1i) lw(1i) lw(.5i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -ancestorSensitive AncestorSensitive Boolean True -callback Callback XtCallbackList NULL -destroyCallback Callback XtCallbackList NULL -height Height Dimension 0 -international International Boolean C False -sensitive Sensitive Boolean True -width Width Dimension 1 -.sp 3p -_ -.TE -.As -.Dc -.Hw -Keep in mind that the SimpleMenu widget will force all menu items to -be the width of the widest entry. -.Ix Bold -.Se -.NH 3 -Subclassing the Sme Object -.IN "Sme object" "subclassing" "@DEF" -.LP -.sp -To Create a new Sme object \fIclass\fP you will need to define three class methods. -These methods allow the SimpleMenu to highlight and unhighlight the -menu entry as the pointer cursor moves over it, as well as notify the -entry when the user has selected it. All of -these methods may be inherited from the Sme object, although the default -semantics are not very interesting. -.IP \fBHighlight\fP(\|) 1i -.IN "Sme object" "Highlight method" -Called to put the menu entry into the highlighted state. -.IP \fBUnhighlight\fP(\|) 1i -.IN "Sme object" "Unhighlight method" -Called to return the widget to its normal (unhighlighted) state. -.IP \fBNotify\fP(\|) -.IN "Sme object" "Notify method" -Called when the user selects this menu entry. -.LP -.sp -Other then these methods, creating a new object -is straight forward. Here is some information that may help you -avoid some common mistakes. -.IP 1) 3n -Objects can be zero pixels high. -.IP 2) 3n -Objects draw on their parent's window, therefore the Drawing dimensions -are different from those of widgets. For instance, y locations vary -from \fBy\fP to \fBy + height\fP, not \fB0\fP to \fBheight\fP. -.IP 3) 3n -XtSetValues calls may come from the application while the Sme is highlighted, -and if the SetValues method returns True, will result in an expose event. -The SimpleMenu may later call the menu entry's \fBunhighlight\fP -procedure. However, due to the asynchronous nature of -X, the expose event generated by \fBXtSetValues\fP will come \fIafter\fP -this unhighlight. -.IP 4) 3n -Remember that your subclass of the Sme does not own the -window. Share the space with other menu entries, and refrain -from drawing outside the subclass's own section of the menu. - diff --git a/doc/xorg-docs/specs/Xaw/SmeBSB b/doc/xorg-docs/specs/Xaw/SmeBSB deleted file mode 100644 index e1c83fc4d..000000000 --- a/doc/xorg-docs/specs/Xaw/SmeBSB +++ /dev/null @@ -1,125 +0,0 @@ -.\" $Xorg: SmeBSB,v 1.3 2000/08/17 19:42:28 cpqbld Exp $ -.NH 2 -SmeBSB Object -.LP -.XS - SmeBSB Object -.XE -.IN "SmeBSB object" "" "@DEF@" -.Ds 0 -.TA 2.0i -.ta 2.0i -.sp -Application Header file -.IN "SmeBSB.h" "" -Class Header file -.IN "SmeBSBP.h" "" -Class smeBSBObjectClass -.IN "smeBSBObjectClass" "" -Class Name SmeBSB -.IN "SmeBSB object" "class name" -Superclass Sme -.sp -.De -.LP -The SmeBSB object is used to create a menu entry that contains a string, -and optional bitmaps in its left and right margins. Since each menu -entry is an independent object, the application is able to change the -font, color, height, and other attributes of the menu entries, on an -entry by entry basis. The format of the string may either be the encoding -of the 8 bit \fBfont\fP utilized, or in a multi-byte encoding for use with a -\fBfontSet\fP. -.NH 3 -Resources -.IN "SmeBSB object" "resources" -.LP -The resources associated with the SmeBSB object are defined in this section, -and affect only the single menu entry specified by this object. -.TS H -lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -ancestorSensitive AncestorSensitive Boolean D True -callback Callback Callback NULL -destroyCallback Callback XtCallbackList NULL -font Font FontStruct XtDefaultFont -fontSet FontSet XFontSet XtDefaultFontSet -foreground Foreground Pixel XtDefaultForeground -height Height Dimension A Font height + \fBvertSpace\fP -international International Boolean C False -justify Justify Justify XtjustifyLeft -label Label String NULL -leftBitmap LeftBitmap Pixmap XtUnspecifiedPixmap -leftMargin leftMargin Dimension 4 -rightBitmap RightBitmap Pixmap XtUnspecifiedPixmap -rightMargin rightMargin Dimension 4 -sensitive Sensitive Boolean True -vertSpace VertSpace int 25 -width Width Dimension A TextWidth + margins -.sp 3p -_ -.TE -.As -.IP \fBcallback\fP 1.5i -All callback functions on this list are called when the SimpleMenu -\fInotifies\fP this entry that the user has selected it. -.Dc -.IP \fBfont\fP 1.5i -The text font to use when displaying the \fBlabel\fP, when the -\fBinternational\fP resource is \fBfalse\fP. -.IP \fBfontSet\fP 1.5i -The text font set to use when displaying the \fBlabel\fP, when the -\fBinternational\fP resource is \fBtrue\fP. -.IP \fBforeground\fP 1.5i -A pixel value which indexes the SimpleMenu's colormap to derive the -foreground color of the menu entry's window. This color is also -used to render all 1's in the left and right \fBbitmaps\fP. -.Hw -Keep in mind that the SimpleMenu widget will force the width of all -menu entries to be the width of the longest entry. -.In -.IP \fBjustify\fP 1.5i -How the label is to be rendered between the left and right margins when -the space is wider than the actual text. This resource may be -specified with the values \fBXtJustifyLeft\fP, \fBXtJustifyCenter\fP, -or \fBXtJustifyRight\fP. When specifying the justification from a -resource file the values \fBleft\fP, \fBcenter\fP, or \fBright\fP may be -used. -.IP \fBlabel\fP 1.5i -This is a the string that will be displayed in the menu entry. The -exact location of this string within the bounds of the menu entry is -controlled by the \fBleftMargin\fP, \fBrightMargin\fP, \fBvertSpace\fP, -and \fBjustify\fP resources. -.IP \fBleftBitmap\fP 1.5i -.br -.ns -.IP \fBrightBitmap\fP 1.5i -This is a name of a bitmap to display in the left or right margin of the -menu entry. All 1's in the bitmap will be rendered in the foreground -color, and all 0's will be drawn in the background color of the -SimpleMenu widget. It is the -programmers' responsibility to make sure that the menu entry is tall -enough, and the appropriate margin wide enough to accept the bitmap. -If care is not taken the bitmap may extend into another menu entry, or -into this entry's label. -.IP \fBleftMargin\fP 1.5i -.br -.ns -.IP \fBrightMargin\fP 1.5i -This is the amount of space (in pixels) that will be left between the -edge of the menu entry and the label string. -.Se -.IP \fBvertSpace\fP 1.5i -This is the amount of vertical padding, expressed as a percentage of -the height of the font, that is to be placed around the label of a -menu entry.. The label and bitmaps are always centered vertically -within the menu. The default value for this -resource (25) causes the default height to be 125% of the height of the -font. diff --git a/doc/xorg-docs/specs/Xaw/SmeLine b/doc/xorg-docs/specs/Xaw/SmeLine deleted file mode 100644 index 5b87cd9a5..000000000 --- a/doc/xorg-docs/specs/Xaw/SmeLine +++ /dev/null @@ -1,72 +0,0 @@ -.\" $Xorg: SmeLine,v 1.3 2000/08/17 19:42:28 cpqbld Exp $ -.NH 2 -SmeLine Object -.LP -.XS - SmeLine Object -.XE -.IN "SmeLine object" "" "@DEF@" -.sp -.Ds 0 -.TA 2.0i -.ta 2.0i -Application Header file -.IN "SmeLine.h" "" -Class Header file -.IN "SmeLineP.h" "" -Class smeLineObjectClass -.IN "smeLineObjectClass" "" -Class Name SmeLine -.IN "SmeLine object" "class name" -Superclass Sme -.De -.sp -.LP -The SmeLine object is used to add a horizontal line or menu separator to -a menu. Since each SmeLine is an independent object, the application -is able to change the color, height, and other attributes of the SmeLine -objects on an entry by entry basis. This object is not selectable, and -will not highlight when the pointer cursor is over it. -.NH 3 -Resources -.IN "SmeLine object" "resources" -.LP -The resources associated with the SmeLine object are defined in this section, -and affect only the single menu entry specified by this object. -.TS H -lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -destroyCallback Callback XtCallbackList NULL -foreground Foreground Pixel XtDefaultForeground -height Height Dimension \fBlineWidth\fP -international International Boolean C False -lineWidth LineWidth Dimension 1 -stipple Stipple Pixmap XtUnspecifiedPixmap -width Width Dimension 1 -.sp 3p -_ -.TE -.Dc -.IP \fBforeground\fP 1.5i -A pixel value which indexes the SimpleMenu's colormap to derive the -foreground color used to draw the separator line. -.Hw -Keep in mind that the SimpleMenu widget will force all menu items to -be the width of the widest entry. Thus, setting the width is generally not -very important. -.Ix -.IP \fBlineWidth\fP 1.5i -The width of the horizontal line that is to be displayed. -.IP \fBstipple\fP 1.5i -If a bitmap is specified for this resource, the line will be stippled -through it. This allows the menu separator to be rendered as something -more exciting than just a line. For instance, if you define a stipple -that is a chain link, then your menu separators will look like chains. diff --git a/doc/xorg-docs/specs/Xaw/StripChart b/doc/xorg-docs/specs/Xaw/StripChart deleted file mode 100644 index 42b0ca529..000000000 --- a/doc/xorg-docs/specs/Xaw/StripChart +++ /dev/null @@ -1,160 +0,0 @@ -.\" $Xorg: StripChart,v 1.3 2000/08/17 19:42:28 cpqbld Exp $ -.NH 2 -StripChart Widget -.XS - StripChart Widget -.XE -.IN "StripChart widget" "" "@DEF@" -.Ds 0 -.TA 2.0i -.ta 2.0i -.sp -Application Header file -.IN "StripChart.h" "" -Class Header file -.IN "StripCharP.h" "" -Class stripChartWidgetClass -.IN "stripChartWidgetClass" "" -Class Name StripChart -.IN "StripChart widget" "class name" -Superclass Simple -.sp -.De -.LP -The StripChart widget is used to provide a roughly real -time graphical chart of a single value. For example, -it is used by the common client program \fBxload\fP -to provide a graph of processor load. The StripChart -reads data from an application, and updates the chart -at the \fBupdate\fP interval specified. -.NH 3 -Resources -.LP -When creating a StripChart widget instance, the following resources are -retrieved from the argument list or from the resource database: -.LP -.IN "StripChart widget" "resources" -.TS H -expand; -lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -accelerators Accelerators AcceleratorTable NULL -ancestorSensitive AncestorSensitive Boolean D True -background Background Pixel XtDefaultBackground -backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderColor BorderColor Pixel XtDefaultForeground -borderPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderWidth BorderWidth Dimension 1 -colormap Colormap Colormap Parent's Colormap -cursor Cursor Cursor None -cursorName Cursor String NULL -depth Depth int C Parent's Depth -destroyCallback Callback XtCallbackList NULL -foreground Foreground Pixel XtDefaultForeground -getValue Callback XtCallbackList NULL -height Height Dimension 120 -highlight Foreground Pixel XtDefaultForeground -insensitiveBorder Insensitive Pixmap GreyPixmap -international International Boolean C False -jumpScroll JumpScroll int A half the width of the widget -mappedWhenManaged MappedWhenManaged Boolean True -minScale Scale int 1 -pointerColor Foreground Pixel XtDefaultForeground -pointerColorBackground Background Pixel XtDefaultBackground -screen Screen Pointer R Parent's Screen -sensitive Sensitive Boolean True -translations Translations TranslationTable NULL -update Interval int 10 -width Width Dimension 120 -x Position Position 0 -y Position Position 0 -.sp 3p -_ -.TE -.Ac -.As -.Bg -.Gp -.Bc -.Bp -.Bw -.Cm -.Cu -.Cn -.Dp -.Dc -.IP \fBforeground\fP 1.5i -A pixel value which indexes the widget's colormap to derive the color -that will be used to draw the graph. -.IP \fBgetValue\fP 1.5i -A list of callback functions to call every \fBupdate\fP seconds. -This list should contain one function, which returns the -value to be graphed by the StripChart widget. The following -section describes the procedural interface. Behavior when this list has -more than one function is undefined. -.Hw -.IP \fBhighlight\fP 1.5i -A pixel value which indexes the widget's colormap to derive the color -that will be used to draw the scale lines on the graph. -.Ib -.Ix -.IP \fBjumpScroll\fP 1.5i -When the graph reaches the right edge of the window it must be -scrolled to the left. This resource specifies the number of pixels -it will jump. Smooth scrolling can be achieved by setting this resource -to 1. -.Mm -.IP \fBminScale\fP 1.5i -The minimum scale for the graph. The number of divisions on the graph -will always be greater than or equal to this value. -.Pf -.Pb -.Sc -.Se -.Tr -.IP \fBupdate\fP -The number of seconds between graph updates. Each update is -represented on the graph as a 1 pixel wide line. Every \fBupdate\fP seconds -the \fBgetValue\fP procedure will be used to get a new graph point, -and this point will be added to the right end of the StripChart. -.Xy -.NH 3 -Getting the StripChart Value -.IN "StripChart widget" "getting the value" -.LP -The StripChart widget will call the application routine passed to it -as the \fBgetValue\fP callback function every \fBupdate\fP seconds to -obtain another point for the StripChart graph. -.LP -The calling interface for the \fBgetValue\fP callback is: -.IN "StripChart widget" "getValue callback" "@DEF@" -.FD 0 -void (*\fIgetValueProc\fP)(\fIw\fP, \fIclient_data\fP, \fIvalue\fP) -.br - Widget \fIw\fP; -.br - XtPointer \fIclient_data\fP; -.br - XtPointer \fIvalue\fP; /* double * */ -.FN -.IP \fIw\fP 1i -Specifies the StripChart widget. -.IP \fIclient_data\fP 1i -Specifies the client data. -.IP \fIvalue\fP 1i -Returns a pointer to a double. The application should set the address -pointed to by this argument to a double containing the value to be -graphed on the StripChart. -.LP -This function is used by the StripChart to call an application routine. -The routine will pass the value to be graphed back to the the StripChart -in the \fBvalue\fP field of this routine. - diff --git a/doc/xorg-docs/specs/Xaw/TPage_Credits b/doc/xorg-docs/specs/Xaw/TPage_Credits deleted file mode 100644 index 663f08c1f..000000000 --- a/doc/xorg-docs/specs/Xaw/TPage_Credits +++ /dev/null @@ -1,154 +0,0 @@ -.\" $Xorg: TPage_Credits,v 1.3 2000/08/17 19:42:28 cpqbld Exp $ -.\" $XdotOrg: xc/doc/specs/Xaw/TPage_Credits,v 1.2 2004/04/23 18:42:18 eich Exp $ -.ds CH -.ds CF -.ps 11 -.nr PS 11 -\& -.sp 8 -.ce 5 -\s+2\fB\*(xW\fP\s-2 - -\s+1\fBX Window System\fP\s-1 - -\s+1\fBX Version 11, Release 6.8\fP\s-1 - -.sp 6 -.ce 4 -Chris D. Peterson -.sp 6p -formerly MIT X Consortium -.bp -\& -.ps 9 -.nr PS 9 -.sp 8 -.LP -X Window System is a trademark of The Open Group. -.LP -Copyright \(co 1985, 1986, 1987, 1988, 1989, 1991, 1994 X Consortium -.LP -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -.LP -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -.LP -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. -.LP -Copyright \(co 1985, 1986, 1987, 1988, 1989, 1991 -Digital Equipment Corporation, Maynard, Massachusetts. -.LP -Permission to use, copy, modify and distribute this documentation for any -purpose and without fee is hereby granted, provided that the above copyright -notice appears in all copies and that both that copyright notice and this -permission notice appear in supporting documentation, and that the name of -Digital not be used in in advertising or publicity pertaining -to distribution of the software without specific, written prior permission. -Digital makes no representations about the suitability of the -software described herein for any purpose. -It is provided ``as is'' without express or implied warranty. -.ps 11 -.nr PS 11 -.bp 5 -.af PN i -.ds CF \fB\\n(PN\fP -.XS v -Acknowledgments -.XE -\& -.ce 3 -\s+1\fBAcknowledgments\fP\s-1 -.sp 2 -.na -.LP -Many thanks go to Ralph Swick (Project Athena / Digital) who has -contributed much time and effort to this widget set. Previous -versions of the widget set are largely due to his time and effort. -Many of the improvements that I have been able to make are because he -provided a solid foundation to build upon. While much of the effort -has been Ralph's, many other people have contributed to the code. -.LP -.Ds -Mark Ackerman (formerly Project Athena) -Donna Converse (MIT X Consortium) -Jim Fulton (formerly MIT X Consortium) -Loretta Guarino-Reid (Digital WSL) -Charles Haynes (Digital WSL) -Rich Hyde (Digital WSL) -Mary Larson (Digital UEG) -Joel McCormack (Digital WSL) -Ron Newman (formerly Project Athena) -Jeanne Rich (Digital WSL) -Terry Weissman (formerly Digital WSL) -.De -.LP -While not much remains of the X10 toolkit, many of the ideas for this -widget set come from that original version. The design and -implementation of the X10 toolkit were done by: -.LP -.Ds -Mike Gancarz (formerly Digital UEG) -Charles Haynes (Digital WSL) -Phil Karlton (formerly Digital WSL) -Kathleen Langone (Digital UEG) -Mary Larson (Digital UEG) -Ram Rao (Digital UEG) -Smokey Wallace (formerly Digital WSL) -Terry Weissman (formerly Digital WSL) -.De -.LP -I have used the formatting ideas, and some of the words from previous -versions of this document. The X11R3 Athena widget document was -written by: -.LP -.Ds -Ralph R. Swick (Project Athena/ Digital) -Terry Weissman (formerly Digital WSL) -Al Mento (Digital UEG) -.De -.LP -Putting this manual together was a major task in and of itself. I -would like to thank Ralph Swick, Donna Converse, and Jim Fulton for -taking the time to help convert my technical knowledge into legible -text. A special thanks to Jean Diaz (O'Reilly and Associates) for -spending nearly a month with me working out all the annoying little -details. -.sp -.Ds 0 -Chris D. Peterson -MIT X Consortium 1989 -.De -.LP -.sp -The R5 edition of this document has been edited by the research staff of -the MIT X Consortium, with significant contributions by Jim Fulton (NCD). -.sp -.Ds 0 -Donna Converse -MIT X Consortium 1991 -.De -.LP -.sp -The R6 edition of this document has been edited to reflect changes -brought about by research staff of the Omron Corporation, with special -recognition to Li Yuhong, Seiji Kuwari, and Hiroshi Kuribayashi for -the X11R5/contrib/lib/Xaw internationalization that inspired this version. -.sp -.Ds 0 -Frank Sheeran -Omron Corporation 1994 -.De diff --git a/doc/xorg-docs/specs/Xaw/Template b/doc/xorg-docs/specs/Xaw/Template deleted file mode 100644 index b5dc050b2..000000000 --- a/doc/xorg-docs/specs/Xaw/Template +++ /dev/null @@ -1,426 +0,0 @@ -.\" $Xorg: Template,v 1.3 2000/08/17 19:42:28 cpqbld Exp $ -All Athena widgets have three separate files associated with them: -.LP -.IP \(bu 3 -A \*Qpublic\*U header file containing declarations needed by -applications programmers -.IP \(bu 3 -A \*Qprivate\*U header file containing additional declarations needed by the -widget and any subclasses -.IP \(bu 3 -A source code file containing the implementation of the widget -.LP -This separation of functions into three files is suggested for all -widgets, but nothing in the Toolkit actually requires this format. In -particular, a private widget created for a single application may easily -combine the \*Qpublic\*U and \*Qprivate\*U header files into a single file, or -merge the contents into another application header file. Similarly, the -widget implementation can be merged into other application code. -.LP -.sp -In the following example, the public header file -.Pn < X11/Xaw/Template.h >, -the private header file -.Pn < X11/Xaw/TemplateP.h > -and the source code file -.Pn < X11/Xaw/Template.c > -will be modified to produce the \*QWindowWidget\*U described above. -In each case, the files have been designed so that a global string -replacement of ``Template'' and ``template'' -with the name of your new widget, using -the appropriate case, can be done. -.NH 2 -Public Header File -.LP -The public header file contains declarations that will be required by any -application module that needs to refer to the widget; whether to create -an instance of the class, to perform an -.PN XtSetValues -operation, or to call a public routine implemented by the widget class. -.LP -The contents of the Template public header file, -.Pn < X11/Xaw/Template.h >, -are: -.de CB -.sp -.Ds 0 -.SM -.vs 10 -.in +.25i -.TA .25i 1.4i 2.4i 2.75i 3.5i -.ta .25i 1.4i 2.4i 2.75i 3.5i -.. -.de CE -.NL -.vs 13 -.De -.\".in -.25i -.. -.CB -.\".so ../../lib/Xaw/Template.h -/* XConsortium: Template.h,v 1.2 88/10/25 17:22:09 swick Exp $ */ -/* Copyright (c) X Consortium 1987, 1988 */ - -#ifndef _Template_h -#define _Template_h - -/**************************************************************** - * - * Template widget - * - ****************************************************************/ - -/* Resources: - - Name Class RepType Default Value - ---- ----- ------- ------------- - background Background Pixel XtDefaultBackground - border BorderColor Pixel XtDefaultForeground - borderWidth BorderWidth Dimension 1 - destroyCallback Callback Pointer NULL - height Height Dimension 0 - mappedWhenManaged MappedWhenManaged Boolean True - sensitive Sensitive Boolean True - width Width Dimension 0 - x Position Position 0 - y Position Position 0 - -*/ - -/* define any special resource names here that are not in */ - -#define XtNtemplateResource "templateResource" - -#define XtCTemplateResource "TemplateResource" - -/* declare specific TemplateWidget class and instance datatypes */ - -typedef struct _TemplateClassRec* TemplateWidgetClass; -typedef struct _TemplateRec* TemplateWidget; - -/* declare the class constant */ - -extern WidgetClass templateWidgetClass; - -#endif /* _Template_h */ -.CE -.LP -.sp -You will notice that most of this file is documentation. The crucial -parts are the last 8 lines where macros for any private resource names -and classes are defined and where the widget class datatypes and class -record pointer are declared. -.LP -For the \*QWindowWidget\*U, we want 2 drawing colors, a callback list for -user input and an -\fBexposeCallback\fP callback list, and we will declare three -convenience procedures, so we need to add -.LP -.sp -.CB -/* Resources: - ... - callback Callback Callback NULL - drawingColor1 Color Pixel XtDefaultForeground - drawingColor2 Color Pixel XtDefaultForeground - exposeCallback Callback Callback NULL - font Font XFontStruct* XtDefaultFont - ... - */ - -#define XtNdrawingColor1 "drawingColor1" -#define XtNdrawingColor2 "drawingColor2" -#define XtNexposeCallback "exposeCallback" - -extern Pixel WindowColor1(\|/* Widget */\|); -extern Pixel WindowColor2(\|/* Widget */\|); -extern Font\ \ WindowFont(\|/* Widget */\|); -.CE -.LP -Note that we have chosen to call the input callback list by the generic -name, \fBcallback\fP, rather than a specific name. If widgets that define -a single user-input action all choose the same resource name then there -is greater possibility for an application to switch between widgets of -different types. -.NH 2 -Private Header File -.LP -The private header file contains the complete declaration of the class -and instance structures for the widget and any additional private data -that will be required by anticipated subclasses of the widget. -Information in the private header file is normally hidden from the -application and is designed to be accessed only through other public -procedures; e.g. -.PN XtSetValues . -.LP -The contents of the Template private header file, -.Pn < X11/Xaw/TemplateP.h >, -are: -.CB -.\".so ../../lib/Xaw/TemplateP.h -/* XConsortium: TemplateP.h,v 1.2 88/10/25 17:31:47 swick Exp $ */ - -/* Copyright (c) X Consortium 1987, 1988 - */ - -#ifndef _TemplateP_h -#define _TemplateP_h - -#include -/* include superclass private header file */ -#include - -/* define unique representation types not found in */ - -#define XtRTemplateResource "TemplateResource" - -typedef struct { - int empty; -} TemplateClassPart; - -typedef struct _TemplateClassRec { - CoreClassPart core_class; - TemplateClassPart template_class; -} TemplateClassRec; - -extern TemplateClassRec templateClassRec; - -typedef struct { - /* resources */ - char* resource; - /* private state */ -} TemplatePart; - -typedef struct _TemplateRec { - CorePart core; - TemplatePart template; -} TemplateRec; - -#endif /* _TemplateP_h */ -.CE -.LP -.sp -The private header file includes the private header file of its -superclass, thereby exposing the entire internal structure of the widget. -It may not always be advantageous to do this; your own project -development style will dictate the appropriate level of detail to expose -in each module. -.LP -The \*QWindowWidget\*U needs to declare two fields in its instance structure to -hold the drawing colors, a resource field for the font and a field for the -expose and user input callback lists: -.CB -typedef struct { - /* resources */ - Pixel color_1; - Pixel color_2; - XFontStruct* font; - XtCallbackList expose_callback; - XtCallbackList input_callback; - /* private state */ - /* (none) */ -} WindowPart; -.CE -.NH 2 -Widget Source File -.LP -The source code file implements the widget class itself. The unique -part of this file is the declaration and initialization of the -widget class record structure and the declaration of all resources and -action routines added by the widget class. -.LP -The contents of the Template implementation file, -.Pn < X11/Xaw/Template.c >, -are: -.CB -.\".so ../../lib/Xaw/Template.c -/* XConsortium: Template.c,v 1.2 88/10/25 17:40:25 swick Exp $ */ - -/* Copyright (c) X Consortium 1987, 1988 - */ - -#include -#include -#include "TemplateP.h" - -static XtResource resources[] = { -#define offset(field) XtOffsetOf(TemplateRec, template.field) - /* {name, class, type, size, offset, default_type, default_addr}, */ - { XtNtemplateResource, XtCTemplateResource, XtRTemplateResource, - sizeof(char*), offset(resource), XtRString, (XtPointer) "default" }, -#undef offset -}; - -static void TemplateAction(/* Widget, XEvent*, String*, Cardinal* */); - -static XtActionsRec actions[] = -{ - /* {name, procedure}, */ - {"template", TemplateAction}, -}; - -static char translations[] = -" : template(\|) \\n\\ -"; - -TemplateClassRec templateClassRec = { - { /* core fields */ - /* superclass */ (WidgetClass) &widgetClassRec, - /* class_name */ "Template", - /* widget_size */ sizeof(TemplateRec), - /* class_initialize */ NULL, - /* class_part_initialize */ NULL, - /* class_inited */ FALSE, - /* initialize */ NULL, - /* initialize_hook */ NULL, - /* realize */ XtInheritRealize, - /* actions */ actions, - /* num_actions */ XtNumber(actions), - /* resources */ resources, - /* num_resources */ XtNumber(resources), - /* xrm_class */ NULLQUARK, - /* compress_motion */ TRUE, - /* compress_exposure */ TRUE, - /* compress_enterleave */ TRUE, - /* visible_interest */ FALSE, - /* destroy */ NULL, - /* resize */ NULL, - /* expose */ NULL, - /* set_values */ NULL, - /* set_values_hook */ NULL, - /* set_values_almost */ XtInheritSetValuesAlmost, - /* get_values_hook */ NULL, - /* accept_focus */ NULL, - /* version */ XtVersion, - /* callback_private */ NULL, - /* tm_table */ translations, - /* query_geometry */ XtInheritQueryGeometry, - /* display_accelerator */ XtInheritDisplayAccelerator, - /* extension */ NULL - }, - { /* template fields */ - /* empty */ 0 - } -}; - -WidgetClass templateWidgetClass = (WidgetClass)&templateClassRec; - -.CE -The resource list for the \*QWindowWidget\*U might look like the following: -.CB -static XtResource resources[] = { -#define offset(field) XtOffsetOf(WindowWidgetRec, window.field) - /* {name, class, type, size, offset, default_type, default_addr}, */ - { XtNdrawingColor1, XtCColor, XtRPixel, sizeof(Pixel), - offset(color_1), XtRString, XtDefaultForeground }, - { XtNdrawingColor2, XtCColor, XtRPixel, sizeof(Pixel), - offset(color_2), XtRString, XtDefaultForeground }, - { XtNfont, XtCFont, XtRFontStruct, sizeof(XFontStruct*), - offset(font), XtRString, XtDefaultFont }, - { XtNexposeCallback, XtCCallback, XtRCallback, sizeof(XtCallbackList), - offset(expose_callback), XtRCallback, NULL }, - { XtNcallback, XtCCallback, XtRCallback, sizeof(XtCallbackList), - offset(input_callback), XtRCallback, NULL }, -#undef offset -}; -.CE -.LP -The user input callback will be implemented by an action procedure which -passes the event pointer as call_data. The action procedure -is declared as: -.CB -/* ARGSUSED */ -static void InputAction(w, event, params, num_params) - Widget w; - XEvent *event; - String *params; /* unused */ - Cardinal *num_params; /* unused */ -{ - XtCallCallbacks(w, XtNcallback, (XtPointer)event); -} - -static XtActionsRec actions[] = -{ - /* {name, procedure}, */ - {"input", InputAction}, -}; -.CE -.LP -and the default input binding will be to execute the input callbacks on -.PN KeyPress -and -.PN ButtonPress : -.LP -.CB -static char translations[] = -" : input(\|) \\n\\ - : input(\|) \\ -"; -.CE -.LP -In the class record declaration and initialization, the only field that -is different from the Template is the expose procedure: -.CB -/* ARGSUSED */ -static void Redisplay(w, event, region) - Widget w; - XEvent *event; /* unused */ - Region region; -{ - XtCallCallbacks(w, XtNexposeCallback, (XtPointer)region); -} - -WindowClassRec windowClassRec = { - - ... - - /* expose */ Redisplay, -.CE -.LP -.sp -The \*QWindowWidget\*U will also declare three public procedures to return the -drawing colors and the font id, saving the application the effort of -constructing an argument list for a call to -.PN XtGetValues : -.LP -.CB -Pixel WindowColor1(w) - Widget w; -{ - return ((WindowWidget)w)->window.color_1; -} - -Pixel WindowColor2(w) - Widget w; -{ - return ((WindowWidget)w)->window.color_2; -} - -Font WindowFont(w) - Widget w; -{ - return ((WindowWidget)w)->window.font->fid; -} -.CE -.LP -The \*QWindowWidget\*U is now complete. The application can retrieve the two -drawing colors from the widget instance by calling either -.PN XtGetValues , -or the \fBWindowColor\fP functions. The actual window created for the -\*QWindowWidget\*U is available by calling the -.PN XtWindow -function. -.ds LH -.ds CH -.ds RH -.nr PN +1 -.XS -Index -.XE -.tm .pn \n(PN -.nr PN -1 -.\" print Table of Contents -.if o .bp \" blank page to make count even -.bp 3 -.af PN i -.PX diff --git a/doc/xorg-docs/specs/Xaw/Text b/doc/xorg-docs/specs/Xaw/Text deleted file mode 100644 index bb8cae166..000000000 --- a/doc/xorg-docs/specs/Xaw/Text +++ /dev/null @@ -1,123 +0,0 @@ -.\" $Xorg: Text,v 1.3 2000/08/17 19:42:28 cpqbld Exp $ -.NH 2 -Text Widget -.LP -.XS - Text Widget -.XE -.IN "Text widget" "" "@DEF@" -.LP -.Ds 0 -.TA 2.0i -.ta 2.0i -Application Header file -.IN "Text.h" "" -Class Header file -.IN "TextP.h" "" -Class textWidgetClass -.IN "textWidgetClass" "" -Class Name Text -.IN "Text widget" "class name" -Superclass Simple -.De -.sp 1 -.LP -The Text widget is the glue that binds all the other pieces together, it -maintains the internal state of the displayed text, and acts as a -mediator between the source and sink. -.LP -This section lists the resources that are actually part of the -Text widget, and explains the functionality provided by each. -.NH 3 -Resources -.LP -When creating a Text widget instance, the following resources are -retrieved from the argument list or from the resource database: -.LP -.IN "Text widget" "resources" -.TS H -expand; -lw(1i) lw(1i) lw(1.1i) lw(.5i) lw(1.9i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -accelerators Accelerators AcceleratorTable NULL -ancestorSensitive AncestorSensitive Boolean D True -autoFill AutoFill Boolean False -background Background Pixel XtDefaultBackground -backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderColor BorderColor Pixel XtDefaultForeground -borderPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderWidth BorderWidth Dimension 1 -bottomMargin Margin Position 2 -colormap Colormap Colormap Parent's Colormap -cursor Cursor Cursor XC_xterm -cursorName Cursor String NULL -depth Depth int C Parent's Depth -destroyCallback Callback XtCallbackList NULL -displayCaret Output Boolean True -displayPosition TextPosition XawTextPosition 0 -height Height Dimension A Font height + margins -insensitiveBorder Insensitive Pixmap GreyPixmap -insertPosition TextPosition int 0 -leftMargin Margin Position 2 -mappedWhenManaged MappedWhenManaged Boolean True -pointerColor Foreground Pixel XtDefaultForeground -pointerColorBackground Background Pixel XtDefaultBackground -resize Resize XawTextResizeMode XawtextResizeNever -rightMargin Margin Position 4 -screen Screen Pointer R Parent's Screen -scrollHorizontal Scroll ScrollMode XawtextScrollNever -scrollVertical Scroll XawTextScrollMode XawtextScrollNever -selectTypes SelectTypes XawTextSelectType* See above -sensitive Sensitive Boolean True -textSink TextSink Widget NULL -textSource TextSource Widget NULL -topMargin Margin Position 2 -translations Translations TranslationTable See above -unrealizeCallback Callback XtCallbackList NULL -width Width Dimension 100 -wrap Wrap WrapMode XawtextWrapNever -x Position Position 0 -y Position Position 0 -.sp 3p -_ -.TE -.Ac -.As -.Af Bold -.Bg -.Gp -.Bc -.Bp -.Bw -.Tm Bold -.Cm -.Cu -.Cn -.Dp -.Dc -.Tc Bold -.Td Bold -.Hw -.Ib -.Ti Bold -.Mm -.Pf -.Pb -.Tz Bold -.Sc -.Ts Bold -.St Bold -.Se -.To Bold -.Tr -.Tw Bold -.Tu Bold -.Xy diff --git a/doc/xorg-docs/specs/Xaw/TextActions b/doc/xorg-docs/specs/Xaw/TextActions deleted file mode 100644 index aa76f4087..000000000 --- a/doc/xorg-docs/specs/Xaw/TextActions +++ /dev/null @@ -1,506 +0,0 @@ -.\" $Xorg: TextActions,v 1.3 2000/08/17 19:42:28 cpqbld Exp $ -.NH 2 -Text Widget Actions -.LP -.IN "Text widget" "actions" -.XS - Actions Supported by all Text Widgets -.XE -.IN "Text widget" "actions" "@DEF@" - -All editing functions are performed by translation manager actions that may -be specified through the \fBtranslations\fP resource in the Text widget. -.LP -.sp -.Ds 0 -.TA .5i 2.5i 3i -.ta .5i 2.5i 3i -Insert Point Movement Delete - forward-character delete-next-character - backward-character delete-previous-character - forward-word delete-next-word - backward-word delete-previous-word - forward-paragraph delete-selection - backward-paragraph - beginning-of-line - end-of-line Selection - next-line select-word - previous-line select-all - next-page select-start - previous-page select-adjust - beginning-of-file select-end - end-of-file extend-start - scroll-one-line-up extend-adjust - scroll-one-line-down extend-end - insert-selection - - -Miscellaneous New Line - redraw-display newline-and-indent - insert-file newline-and-backup - insert-char newline - insert-string - display-caret - focus-in Kill - focus-in kill-word - search backward-kill-word - multiply kill-selection - form-paragraph kill-to-end-of-line - transpose-characters kill-paragraph - no-op kill-to-end-of-paragraph - XawWMProtocols - reconnect-im -.De -.sp -.LP -Most of the actions take no arguments, and unless otherwise noted you -may assume this to be the case. -.LP -.NH 3 -Cursor Movement Actions\fP -.LP -.sp -.IP forward-character(\|) 2.0i -.br -.ns -.IP backward-character(\|) 2.0i -These actions move the insert point forward or backward one character in -the buffer. If the insert point is at the end or beginning of a line -this action will move the insert point to the next (or previous) line. -.IP forward-word(\|) 2.0i -.br -.ns -.IP backward-word(\|) 2.0i -These actions move the insert point to the next or previous word boundary. -A word boundary is defined as a Space, Tab or Carriage Return. -.IP forward-paragraph(\|) 2.0i -.br -.ns -.IP backward-paragraph(\|) 2.0i -These actions move the insert point to the next or previous paragraph boundary. -A paragraph boundary is defined as two Carriage Returns in a row with only -Spaces or Tabs between them. -.IP beginning-of-line(\|) 2.0i -.br -.ns -.IP end-of-line(\|) 2.0i -These actions move to the beginning or end of the current line. If the -insert point is already at the end or beginning of the line then no action is taken. -.IP next-line(\|) 2.0i -.br -.ns -.IP previous-line(\|) 2.0i -These actions move the insert point up or down one line. If the insert -point is currently N characters from the beginning of the line then it -will be N characters from the beginning of the next or previous line. -If N is past the end of the line, the insert point is placed at the end -of the line. -.IP next-page(\|) 2.0i -.br -.ns -.IP previous-page(\|) 2.0i -These actions move the insert point up or down one page in the file. -One page is defined as the current height of the text widget. The -insert point is always placed at the first character of the top line by -this action. -.IP beginning-of-file(\|) 2.0i -.br -.ns -.IP end-of-file(\|) 2.0i -These actions place the insert point at the beginning or end of the -current text buffer. The text widget is then scrolled the minimum -amount necessary to make the new insert point location visible. -.IP scroll-one-line-up(\|) 2.0i -.br -.ns -.IP scroll-one-line-down(\|) 2.0i -These actions scroll the current text field up or down by one line. -They do not move the insert point. Other than the scrollbars this is -the only way that the insert point may be moved off of the visible text -area. The widget will be scrolled so that the insert point is back on -the screen as soon as some other action is executed. -.NH 3 -Delete Actions -.LP -.sp -.IP delete-next-character(\|) 2.0i -.br -.ns -.IP delete-previous-character(\|) 2.0i -These actions remove the character immediately before or after the -insert point. If a Carriage Return is removed then the next line is -appended to the end of the current line. -.IP delete-next-word(\|) 2.0i -.br -.ns -.IP delete-previous-word(\|) 2.0i -These actions remove all characters between the insert point location and -the next word boundary. A word boundary is defined as a Space, Tab or -Carriage Return. -.IP delete-selection(\|) 2.0i -This action removes all characters in the current selection. -The selection can be set with the selection actions. -.NH 3 -Selection Actions -.LP -.sp -.IP select-word(\|) 2.0i -This action selects the word in which the insert point is currently located. -If the insert point is between words then it will select the previous word. -.IP select-all(\|) 2.0i -This action selects the entire text buffer. -.IP select-start(\|) 2.0i -This action sets the insert point to the current pointer location (if -triggered by a button event) or text cursor location (if triggered by -a key event). It -will then begin a selection at this location. If many of these -selection actions occur quickly in succession then the selection count -mechanism will be invoked (see the section titled \fBText Selections for -Application Programmers\fP for details). -.IP select-adjust(\|) 2.0i -This action allows a selection started with the \fIselect-start\fP -action to be modified, as described above. -.IP select-end(\fIname\fP[,\fIname\fP,...]) 2.0i -This action ends a text selection that began with the \fIselect-start\fP -action, and asserts ownership of the selection or selections specified. -A \fIname\fP can be a selection (e.g., \fBPRIMARY\fP) or a cut buffer -(e.g., \fBCUT_BUFFER0\fP). Note that case is important. If no -\fInames\fP are specified, \fBPRIMARY\fP is asserted. -.IP extend-start(\|) 2.0i -This action finds the nearest end of the current selection, and moves it -to the current pointer location (if triggered by a button event) or text -cursor location (if triggered by a key event). -.IP extend-adjust(\|) 2.0i -This action allows a selection started with an \fIextend-start\fP action -to be modified. -.IP extend-end(\fIname\fP[,\fIname\fP,...]) 2.0i -This action ends a text selection that began with the \fIextend-start\fP -action, and asserts ownership of the selection or selections specified. -A \fIname\fP can be a selection (e.g. \fBPRIMARY\fP) or a cut buffer -(e.g \fBCUT_BUFFER0\fP). Note that case is important. If no names are -given, \fBPRIMARY\fP is asserted. -.IP insert-selection(\fIname\fP[,\fIname\fP,...]) 2.0i -This action retrieves the value of the first (left-most) named selection -that exists or the cut buffer that is not empty and inserts it into the -Text widget at the current insert point location. A \fIname\fP can be a -selection (e.g. \fBPRIMARY\fP) or a cut buffer (e.g \fBCUT_BUFFER0\fP). -Note that case is important. -.NH 3 -The New Line Actions -.LP -.sp -.IP newline-and-indent(\|) 2.0i -This action inserts a newline into the text and adds spaces to -that line to indent it to match the previous line. -.IP newline-and-backup(\|) 2.0i -This action inserts a newline into the text \fIafter\fP the insert point. -.IP newline(\|) 2.0i -This action inserts a newline into the text \fIbefore\fP the insert point. -.NH 3 -Kill and Actions -.LP -.sp -.IP kill-word(\|) 2.0i -.br -.ns -.IP backward-kill-word(\|) 2.0i -These actions act exactly like the \fIdelete-next-word\fP and -\fIdelete-previous-word\fP actions, but they stuff the word that was -killed into the kill buffer (\fBCUT_BUFFER_1\fP). -.IP kill-selection(\|) 2.0i -This action deletes the current selection and stuffs the deleted text into -the kill buffer (\fBCUT_BUFFER_1\fP). -.IP kill-to-end-of-line(\|) 2.0i -This action deletes the entire line to the right of the insert point position, -and stuffs the deleted text into the kill buffer (\fBCUT_BUFFER_1\fP). -.IP kill-paragraph(\|) 2.0i -This action deletes the current paragraph, if between paragraphs it deletes -the paragraph above the insert point, and stuffs the deleted text into -the kill buffer (\fBCUT_BUFFER_1\fP). -.IP kill-to-end-of-paragraph(\|) 2.0i -This action deletes everything between the current insert point location and -the next paragraph boundary, and stuffs the deleted text into the kill -buffer (\fBCUT_BUFFER_1\fP). -.NH 3 -Miscellaneous Actions -.LP -.sp 1 -.IP redraw-display(\|) 2.0i -This action recomputes the location of all the text lines on the -display, scrolls the text to vertically center the line containing the insert point -on the screen, clears the entire screen, and redisplays it. -.IP insert-file([\fIfilename\fP]) 2.0i -This action activates the insert file popup. The \fIfilename\fP -option specifies the default filename to put in the filename buffer of -the popup. If no \fIfilename\fP is specified the buffer is empty -at startup. -.IP insert-char(\|) 2.0i -This action may only be attached to a key event. When the -\fBinternational\fP resource is \fBfalse\fP, this action -calls XLookupString to translate the event into a (rebindable) Latin-1 -character (sequence) and inserts it into the text at the -insert point. When the \fBinternational\fP resource is \fBtrue\fP, -characters are passed to the input method via XwcLookupString, and any -committed string returned is inserted into the text at the insert point. -.IP insert-string(\fIstring\fP[,\fIstring\fP,...]) 2.0i -This action inserts each \fIstring\fP into the text -at the insert point location. Any \fIstring\fP -beginning with the characters "0x" followed by an even -number of hexadecimal digits is -interpreted as a hexadecimal constant and the -corresponding string is inserted instead. This -hexadecimal string may represent up to 50 8-bit characters. - When the\fBinternational\fP resource is -\fBtrue\fP, a hexadecimal string is intrepeted as -being in a multi-byte encoding, and a hexadecimal -or regular string will result in an error message -if it is not legal in the current locale. -.IP display-caret(\fIstate\fP,\fIwhen\fP) 2.0i -This action allows the insert point to be turned on and off. -The \fIstate\fP argument specifies the desired state of the insert point. -This value may be any of the string -values accepted for Boolean resources (e.g. \fBon\fP, \fBTrue\fP, -\fBoff\fP, \fBFalse\fP, etc.). If no arguments are specified, the -default value is \fBTrue\fP. -The \fIwhen\fP argument specifies, for \fBEnterNotify\fP or \fBLeaveNotify\fP -events whether or not the focus field in the event is to be examined. -If the second argument is not specified, or specified as something other -than \fBalways\fP then if the action is bound to an \fBEnterNotify\fP -or \fBLeaveNotify\fP event, the action will be taken only if the focus -field is \fBTrue\fP. An augmented binding that might be useful is: -.LP -.Ds 0 -.TA 2.0i 2.5i 4.0i -.ta 2.0i 2.5i 4.0i - *Text.Translations: #override \\ - : display-caret(on) \\n\\ - : display-caret(off) -.De -.IP focus-in(\|) 2.0i -.br -.ns -.IP focus-out(\|) 2.0i -These actions do not currently do anything. -.IP search(\fIdirection\fP,[\fIstring\fP]) 2.0i -This action activates the search popup. The \fIdirection\fP must be -specified as either \fBforward\fP or \fBbackward\fP. The string is -optional and is used as an initial value for the \fISearch for\fP: string. -For further explanation of the search widget see the section on -\fBText Searches\fP. -.IP multiply(\fIvalue\fP) 2.0i -The multiply action allows the user to multiply the effects of many of -the text actions. Thus the following action sequence -\fImultiply(10) delete-next-word()\fP will delete 10 words. It does not -matter whether these actions take place in one event or many events. -Using the default translations the key sequence \fIControl-u, -Control-d\fP will delete 4 characters. -Multiply actions can be chained, thus \fImultiply(5) -multiply(5)\fP is the same as \fImultiply(25)\fP. If the string -\fBreset\fP is passed to the multiply action the effects of all previous -multiplies are removed and a beep is sent to the display. -.IP form-paragraph(\|) 2.0i -This action removes all the Carriage Returns from the current -paragraph and reinserts them so that each line is as long as possible, while -still fitting on the current screen. Lines are broken at word boundaries if -at all possible. This action currently works only on Text widgets -that use ASCII text. -.IP transpose-characters(\|) 2.0i -This action will swap the position of the character to the left of the -insert point with the character to the right of the insert point. The insert point will then -be advanced one character. -.IP no-op([\fIaction\fP]) 2.0i -The no-op action makes no change to the text widget, and is mainly used -to override translations. This action takes one optional argument. If -this argument is \fIRingBell\fP then a beep is sent to the display. -.IP XawWMProtocols([\fIwm_protocol_name\fP]) 2.0i -.IN "XawWMProtocols" -.sp -This action is written specifically for the file insertion and the search -and replace -dialog boxes. This action is attached to those shells by the Text widget, -in order to handle ClientMessage events with the WM_PROTOCOLS atom in the -detail field. This action supports WM_DELETE_WINDOW on the Text widget -popups, and may support other window manager protocols if necessary in -the future. The popup will be dismissed if the window manager sends -a WM_DELETE_WINDOW request and there are no parameters in the action -call, which is the default. The popup will also be dismissed if the -parameters include the string ``wm_delete_window,'' and the event is a -ClientMessage event requesting dismissal or is not a ClientMessage event. -This action is not sensitive to the case of the strings passed as parameters. -.IP reconnect-im() 2.0i -.IN "Input Method" -When the \fBinternational\fP resource is \fBtrue\fP, -input is usually passed to an input method, a separate -process, for composing. Sometimes the connection to -this process gets severed; this action will attempt to -reconnect it. Causes for severage include network -trouble, and the user explicitly killing one input -method and starting a new one. This action may also -establish first connection when the application is -started before the input method. -.NH 3 -Text Selections for Application Programmers -.IN "Text widget" "Text Selections for Application Programmers" -.LP -The default behavior of the text selection array is described in the -section called \fBText Selections for Users\fP. To modify the selections -a programmer must construct a \fBXawTextSelectType\fP array (called the -selection array), containing the selections desired, and pass this as -the new value for the \fBselectionTypes\fP resource. The selection -array may also be modified using the \fBXawTextSetSelectionArray\fP -.IN "XawTextSetSelectionArray" "" -function. All selection arrays must end with the value -\fBXawselectNull\fP. The \fBselectionTypes\fP resource has no converter -registered and cannot be modified through the resource manager. -.LP -The array contains a list of entries that will be called when the user -attempts to select text in rapid succession with the \fIselect-start\fP -action (usually by clicking a pointer button). The first entry in the -selection array will be used when the \fIselect-start\fP action is -initially called. The next entry will be used when \fIselect-start\fP -is called again, and so on. If a timeout value (1/10 of a second) is -exceeded, the the next \fIselect-start\fP action will begin at the top -of the selection array. When \fBXawselectNull\fP is reached the array -is recycled beginning with the first element. -.TS -lw(1.25i) lw(4.25i). -T{ -\fBXawselectAll\fP -.IN "XawselectAll" "" -T} T{ -Selects the contents of the entire buffer. -T} -.sp 6p -T{ -\fBXawselectChar\fP -.IN "XawselectChar" "" -T} T{ -Selects text characters as the pointer moves over them. -T} -.sp 6p -T{ -\fBXawselectLine\fP -.IN "XawselectLine" "" -T} T{ -Selects the entire line. -T} -.sp 6p -T{ -\fBXawselectNull\fP -.IN "XawselectNull" "" -T} T{ -Indicates the end of the selection array. -T} -.sp 6p -T{ -\fBXawselectParagraph\fP -.IN "XawselectParagraph" "" -T} T{ -Selects the entire paragraph. -T} -.sp 6p -T{ -\fBXawselectPosition\fP -.IN "XawselectPosition" "" -T} T{ -Selects the current pointer position. -T} -.sp 6p -T{ -\fBXawselectWord\fP -.IN "XawselectWord" "" -T} T{ -Selects whole words as the pointer moves onto them. -T} -.TE -.LP -The default selectType array is: -.LP -.sp -.Ds 0 -{XawselectPosition, XawselectWord, XawselectLine, XawselectParagraph, XawselectAll, XawselectNull} -.De -.sp -.LP -The selection array is not copied by the text widgets. The -application must allocate space for the array and cannot deallocate or -change it until the text widget is destroyed or until a new selection -array is set. -.NH 2 -Default Translation Bindings -.LP -.XS - Default Translation Bindings -.XE -.IN "Text widget" "default translations" -The following translations are defaults built into every Text widget. -They can be overridden, or replaced by specifying a new value for the -Text widget's \fBtranslations\fP resource. -.LP -.sp -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i - CtrlA: beginning-of-line(\|) \\n\\ - CtrlB: backward-character(\|) \\n\\ - CtrlD: delete-next-character(\|) \\n\\ - CtrlE: end-of-line(\|) \\n\\ - CtrlF: forward-character(\|) \\n\\ - CtrlG: multiply(Reset) \\n\\ - CtrlH: delete-previous-character(\|) \\n\\ - CtrlJ: newline-and-indent(\|) \\n\\ - CtrlK: kill-to-end-of-line(\|) \\n\\ - CtrlL: redraw-display(\|) \\n\\ - CtrlM: newline(\|) \\n\\ - CtrlN: next-line(\|) \\n\\ - CtrlO: newline-and-backup(\|) \\n\\ - CtrlP: previous-line(\|) \\n\\ - CtrlR: search(backward) \\n\\ - CtrlS: search(forward) \\n\\ - CtrlT: transpose-characters(\|) \\n\\ - CtrlU: multiply(4) \\n\\ - CtrlV: next-page(\|) \\n\\ - CtrlW: kill-selection(\|) \\n\\ - CtrlY: insert-selection(CUT_BUFFER1) \\n\\ - CtrlZ: scroll-one-line-up(\|) \\n\\ - Ctrl\\: reconnect-im(\|) \\n\\ - MetaB: backward-word(\|) \\n\\ - MetaF: forward-word(\|) \\n\\ - MetaI: insert-file(\|) \\n\\ - MetaK: kill-to-end-of-paragraph(\|) \\n\\ - MetaQ: form-paragraph(\|) \\n\\ - MetaV: previous-page(\|) \\n\\ - MetaY: insert-selection(PRIMARY, CUT_BUFFER0) \\n\\ - MetaZ: scroll-one-line-down(\|) \\n\\ - :Metad: delete-next-word(\|) \\n\\ - :MetaD: kill-word(\|) \\n\\ - :Metah: delete-previous-word(\|) \\n\\ - :MetaH: backward-kill-word(\|) \\n\\ - :Meta\\<: beginning-of-file(\|) \\n\\ - :Meta\\>: end-of-file(\|) \\n\\ - :Meta]: forward-paragraph(\|) \\n\\ - :Meta[: backward-paragraph(\|) \\n\\ - ~Shift MetaDelete: delete-previous-word(\|) \\n\\ - \ Shift MetaDelete: backward-kill-word(\|) \\n\\ - ~Shift MetaBackspace: delete-previous-word(\|) \\n\\ - \ Shift MetaBackspace: backward-kill-word(\|) \\n\\ - Right: forward-character(\|) \\n\\ - Left: backward-character(\|) \\n\\ - Down: next-line(\|) \\n\\ - Up: previous-line(\|) \\n\\ - Delete: delete-previous-character(\|) \\n\\ - BackSpace: delete-previous-character(\|) \\n\\ - Linefeed: newline-and-indent(\|) \\n\\ - Return: newline(\|) \\n\\ - : insert-char(\|) \\n\\ - Kanji: reconnect-im(\|) \\n\\ - : focus-in(\|) \\n\\ - : focus-out(\|) \\n\\ - : select-start(\|) \\n\\ - : extend-adjust(\|) \\n\\ - : extend-end(PRIMARY, CUT_BUFFER0) \\n\\ - : insert-selection(PRIMARY, CUT_BUFFER0) \\n\\ - : extend-start(\|) \\n\\ - : extend-adjust(\|) \\n\\ - : extend-end(PRIMARY, CUT_BUFFER0) \\n -.De diff --git a/doc/xorg-docs/specs/Xaw/TextCustom b/doc/xorg-docs/specs/Xaw/TextCustom deleted file mode 100644 index 0c8039280..000000000 --- a/doc/xorg-docs/specs/Xaw/TextCustom +++ /dev/null @@ -1,63 +0,0 @@ -.NH 2 -Customizing the Text Widget -.LP -.XS - Customizing the Text Widget -.XE -.IN "Text widget" "customizing" "@DEF@" -.LP -The remainder of this chapter will describe customizing the Text -widget. The Text widget may be customized by subclassing, or by -creating new sources and sinks. Subclassing is described in -detail in Chapter 7; this section will describe only those things that -are specific to the Text widget. Attributes of the Text widget base -class and creating new sources and sinks will be discussed. -.LP -The Text widget is made up of a number of different pieces, with the -Text widget as the base widget class. It and the AsciiText widget are -the only true "widgets" in the Text widget family. The other pieces -(sources and sinks) are X Toolkit objects and have no window -associated with them. No source or sink is useful unless assigned to -a Text widget. -.LP -Each of the following pieces of the Text widget has a specific purpose, -and will be, or has been, discussed in detail in this chapter: -.IN "Text widget" "" -.IP \fBText\fP 15 -This is the glue that binds everything else together. This widget reads -the text data from the source, and displays the information in the sink. -All translations and actions are handled in the Text widget itself. -.IN "TextSink object" "" -.IP \fBTextSink\fP 15 -This object is responsible for displaying and clearing the drawing area. -It also reports the configuration of the window that contains the -drawing area. The TextSink does not have its own window; instead it does -its drawing on the Text widget's window. -.IN "TextSrc object" "" -.IP \fBTextSrc\fP 15 -This object is responsible for reading, editing and searching through the -text buffer. -.IN "AsciiSink object" "" -.IP \fBAsciiSink\fP 15 -This object is a subclass of the TextSink and knows how to display -ASCII text. Support has been added to display any 8-bit character set, given -the font. -.IN "MultiSink object" "" -.IP \fBMultiSink\fP 15 -This object is a subclass of the TextSink and knows how to display -font sets. -.IN "AsciiSrc object" "" -.IP \fBAsciiSrc\fP 15 -This object is a subclass of the TextSrc and knows how to read strings -and files. -.IN "MultiSrc object" "" -.IP \fBMultiSrc\fP 15 -This object is a subclass of the TextSrc and knows how to read strings -and multibyte files, converting them to wide characters based on locale. -.IN "AsciiText widget" "" -.IP \fBAsciiText\fP 15 -This widget is a subclass of the Text widget. When created, the AsciiText -automatically creates and attaches either an AsciiSrc and AsciiSink, or a -MultiSrc and MultiSink, to itself. The AsciiText provides the simplest -interface to the Athena Text widgets. - diff --git a/doc/xorg-docs/specs/Xaw/TextFuncs b/doc/xorg-docs/specs/Xaw/TextFuncs deleted file mode 100644 index 0f641386a..000000000 --- a/doc/xorg-docs/specs/Xaw/TextFuncs +++ /dev/null @@ -1,397 +0,0 @@ -.\" $Xorg: TextFuncs,v 1.3 2000/08/17 19:42:28 cpqbld Exp $ -.NH 2 -Text Functions -.XS - Text Functions -.XE -.LP -The following functions are provided as convenience routines for use with -the Text widget. Although many of these actions can be performed by -modifying resources, these interfaces are frequently more efficient. -.LP -These data structures are defined in the Text widget's public header file, -. -.LP -.IN "XawTextPosition" "" "@DEF@" -typedef long XawTextPosition; -.sp -.LP -Character positions in the Text widget begin at 0 and end at n, where -n is the number of characters in the Text source widget. -.LP -.IN "XawTextBlock" "" "@DEF@" -.Ds 0 -.TA .5i 1.5i 2.25i -.ta .5i 1.5i 2.25i -typedef struct { - int \fIfirstPos\fP; - int \fIlength\fP; - char *\fIptr\fP; - unsigned long \fIformat\fP; -} XawTextBlock, *XawTextBlockPtr; -.De -.LP -.IN "XawTextBlockPtr" "" -.IP \fIfirstPos\fP 1.0i -The first position, or index, to use within the \fIptr\fP field. -The value is commonly zero. -.IP \fIlength\fP 1.0i -The number of characters to be used from the \fIptr\fP field. -The number of characters used is commonly the number of characters -in \fIptr\fP, and must not be greater than the length of the string -in \fIptr\fP. -.IP \fIptr\fP 1.0i -Contains the string to be referenced by the Text widget. -.IP \fIformat\fP 1.0i -This flag indicates whether the data pointed to by \fBptr\fP is char -or wchar_t. When the associated widget has \fBinternational\fP set -to \fBfalse\fP this field must be XawFmt8Bit. When the associated -widget has \fBinternational\fP set to \fBtrue\fP this field must be -either XawFmt8Bit or XawFmtWide. -.LP -Note: Previous versions of Xaw used -.PN FMT8BIT , -which has been retained for backwards compatibility. \fBFMT8BIT\fP is -deprecated and will eventually be removed from the implementation. -.NH 3 -Selecting Text -.LP -To select a piece of text, use -.PN XawTextSetSelection : -.IN "XawTextSetSelection" "" "@DEF@" -.FD 0 -void XawTextSetSelection(\fIw\fP, \fIleft\fP, \fIright\fP) -.br - Widget \fIw\fP; -.br - XawTextPosition \fIleft\fP, \fIright\fP; -.FN -.IP \fIw\fP 1i -Specifies the Text widget. -.IP \fIleft\fP 1i -Specifies the character position at which the selection begins. -.IP \fIright\fP 1i -Specifies the character position at which the selection ends. -.LP -See section 5.4 for a description of \fBXawTextPosition\fP. -If redisplay is enabled, this function highlights the text and -makes it the \fBPRIMARY\fP selection. This function does not have any -effect on \fBCUT_BUFFER0\fP. -.LP -.NH 3 -Unhighlighting Text -.LP -To unhighlight previously highlighted text in a widget, use -\fBXawTextUnsetSelection\fP: -.IN "XawTextUnsetSelection" "" "@DEF@" -.FD 0 -void XawTextUnsetSelection(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the Text widget. -.NH 3 -Getting Current Text Selection -.LP -To retrieve the text that has been selected by this -text widget use \fBXawTextGetSelectionPos\fP: -.IN "XawTextGetSelectionPos" "" "@DEF@" -.FD 0 -void XawTextGetSelectionPos(\fIw\fP, \fIbegin_return\fP, \fIend_return\fP) -.br - Widget \fIw\fP; -.br - XawTextPosition *\fIbegin_return\fP, *\fIend_return\fP; -.FN -.IP \fIw\fP 1i -Specifies the Text widget. -.IP \fIbegin_return\fP 1i -Returns the beginning of the text selection. -.IP \fIend_return\fP 1i -Returns the end of the text selection. -.LP -See section 5.4 for a description of \fBXawTextPosition\fP. -If the returned values are equal, no text is currently selected. -.NH 3 -Replacing Text -.LP -To modify the text in an editable Text widget use \fBXawTextReplace\fP: -.IN "XawTextReplace" "" "@DEF@" -.FD 0 -int XawTextReplace(\fIw\fP, \fIstart\fP, \fIend\fP, \fItext\fP) -.br - Widget \fIw\fP; -.br - XawTextPosition \fIstart\fP, \fIend\fP; -.br - XawTextBlock *\fItext\fP; -.FN -.IP \fIw\fP 1i -Specifies the Text widget. -.IP \fIstart\fP 1i -Specifies the starting character position of the text replacement. -.IP \fIend\fP 1i -Specifies the ending character position of the text replacement. -.IP \fItext\fP 1i -Specifies the text to be inserted into the file. -.LP -This function will not -be able to replace text in read-only text widgets. It will also only -be able to append text to an append-only text widget. -.LP -See section 5.4 for a description of \fBXawTextPosition\fP and -\fBXawTextBlock\fP. -.LP -This function may return the following values: -.IP \fBXawEditDone\fP 1.25i -.IN "XawEditDone" "" -The text replacement was successful. -.IP \fBXawPositionError\fP 1.25i -.IN "XawPositionError" "" -The edit mode is \fBXawtextAppend\fP and \fIstart\fP is not the position of -the last character of the source. -.IP \fBXawEditError\fP 1.25i -.IN "XawEditError" "" -Either the Source was read-only or the range to be deleted is larger -than the length of the Source. - -.LP -The \fBXawTextReplace\fP arguments \fIstart\fP and -\fIend\fP represent the text source character positions for the -existing text that is to be replaced by the text in the text block. -The characters from \fIstart\fP up to -but not including \fIend\fP are deleted, and the characters -specified on the text block are inserted in their place. If -\fIstart\fP and \fIend\fP are equal, no text is deleted and the new -text is inserted after \fIstart\fP. -.NH 3 -Searching for Text -.LP -To search for a string in the Text widget, use -\fBXawTextSearch\fP: -.IN "XawTextSearch" "" "@DEF@" -.FD 0 -XawTextPosition XawTextSearch(\fIw\fP, \fIdir\fP, \fItext\fP) -.br - Widget \fIw\fP; -.br - XawTextScanDirection \fIdir\fP; -.br - XawTextBlock * \fItext\fP; -.FN -.IP \fIw\fP 1i -Specifies the Text widget. -.IP \fIdir\fP 1i -Specifies the direction to search in. Legal values are -\fBXawsdLeft\fP and \fBXawsdRight\fP. -.IP \fItext\fP 1i -Specifies a text block structure that contains the text to search for. -.LP -See section 5.4 for a description of \fBXawTextPosition\fP and \fBXawTextBlock\fP. -The \fBXawTextSearch\fP function will begin at the insertion point -and search in the -direction specified for a string that matches the one passed in -\fItext\fP. If the string is found the location of the first -character in the string is returned. If the string could not be -found then the value \fBXawTextSearchError\fP is returned. -.NH 3 -Redisplaying Text -.LP -To redisplay a range of characters, use \fBXawTextInvalidate\fP: -.IN "XawTextInvalidate" "" "@DEF@" -.FD 0 -void XawTextInvalidate(\fIw\fP, \fIfrom\fP, \fIto\fP) -.br - Widget \fIw\fP; -.br - XawTextPosition \fIfrom\fP, \fIto\fP; -.FN -.IP \fIw\fP 1i -Specifies the Text widget. -.IP \fIfrom\fP 1i -Specifies the start of the text to redisplay. -.IP \fIto\fP 1i -Specifies the end of the text to redisplay. -.LP -See section 5.4 for a description of \fBXawTextPosition\fP. -The \fBXawTextInvalidate\fP -function causes the specified range of characters to be redisplayed -immediately if redisplay is enabled or the next time that redisplay is -enabled. -.LP -.sp 1 -To enable redisplay, use \fBXawTextEnableRedisplay\fP: -.IN "XawTextEnableRedisplay" "" "@DEF@" -.FD 0 -void XawTextEnableRedisplay(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the Text widget. -.LP -The \fBXawTextEnableRedisplay\fP function flushes any changes due to -batched updates when \fBXawTextDisableRedisplay\fP -was called and allows future changes to be reflected immediately. -.LP -.sp 1 -To disable redisplay while making several changes, use -\fBXawTextDisableRedisplay\fP. -.IN "XawTextDisableRedisplay" "" "@DEF@" -.FD 0 -void XawTextDisableRedisplay(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the Text widget. -.LP -The \fBXawTextDisableRedisplay\fP function causes all changes to be -batched until either \fBXawTextDisplay\fP or \fBXawTextEnableRedisplay\fP -is called. -.LP -.sp 1 -To display batched updates, use \fBXawTextDisplay\fP: -.IN "XawTextDisplay" "" "@DEF@" -.FD 0 -void XawTextDisplay(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the Text widget. -.LP -The \fBXawTextDisplay\fP function forces any accumulated updates to be -displayed. -.NH 3 -Resources Convenience Routines -.LP -To obtain the character position of the left-most character on the -first line displayed in the widget (the value of the -\fBdisplayPosition\fP resource), use \fBXawTextTopPosition\fP. -.IN "XawTextTopPosition" "" @DEF@" -.FD 0 -XawTextPosition XawTextTopPosition(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the Text widget. -.LP -.sp 1 -To assign a new selection array to a text widget use -\fBXawTextSetSelectionArray\fP: -.IN "XawTextSetSelectionArray" "" "@DEF@" -.FD 0 -void XawTextSetSelectionArray(\fIw\fP, \fIsarray\fP) -.br - Widget \fIw\fP; -.br - XawTextSelectType * \fIsarray\fP; -.FN -.IP \fIw\fP 1i -Specifies the Text widget. -.IP \fIsarray\fP 1i -Specifies a selection array as defined in the section called \fBText -Selections for Application Programmers\fP. -.LP -Calling this function is equivalent to setting the value of the -\fBselectionTypes\fP resource. -.LP -.sp 1 -To move the insertion point to the specified source position, use -\fBXawTextSetInsertionPoint\fP: -.IN "XawTextSetInsertionPoint" "" "@DEF@" -.FD 0 -void XawTextSetInsertionPoint(\fIw\fP, \fIposition\fP) -.br - Widget \fIw\fP; -.br - XawTextPosition \fIposition\fP; -.FN -.IP \fIw\fP 1i -Specifies the Text widget. -.IP \fIposition\fP 1i -Specifies the new position for the insertion point. -.LP -See section 5.4 for a description of \fBXawTextPosition\fP. -The text will be scrolled vertically if necessary to make the line -containing the insertion point visible. Calling this function is -equivalent to setting the \fBinsertPosition\fP resource. -.LP -.sp 1 -To obtain the current position of the insertion point, use -\fBXawTextGetInsertionPoint\fP: -.IN "XawTextGetInsertionPoint" "" "@DEF@" -.FD 0 -XawTextPosition XawTextGetInsertionPoint(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the Text widget. -.LP -See section 5.4 for a description of \fBXawTextPosition\fP. -The result is equivalent to retrieving the value of the -\fBinsertPosition\fP resource. -.LP -.sp 1 -To replace the text source in the specified widget, use -\fBXawTextSetSource\fP: -.IN "XawTextSetSource" "" "@DEF@" -.FD 0 -void XawTextSetSource(\fIw\fP, \fIsource\fP, \fIposition\fP) -.br - Widget \fIw\fP; -.br - Widget \fIsource\fP; -.br - XawTextPosition \fIposition\fP; -.FN -.IP \fIw\fP 1i -Specifies the Text widget. -.IP \fIsource\fP 1i -Specifies the text source object. -.IP \fIposition\fP 1i -Specifies character position that will become the upper left hand corner -of the displayed text. This is usually set to zero. -.LP -See section 5.4 for a description of \fBXawTextPosition\fP. -A display update will be performed if redisplay is enabled. -.LP -.sp 1 -To obtain the current text source for the specified widget, use -\fBXawTextGetSource\fP: -.IN "XawTextGetSource" "" "@DEF@" -.FD 0 -Widget XawTextGetSource(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the Text widget. -.LP -This function returns the text source that this Text widget is currently -using. -.LP -.sp -To enable and disable the insertion point, use -\fBXawTextDisplayCaret\fP: -.IN "XawTextDisplayCaret" "" "@DEF@" -.FD 0 -void XawTextDisplayCaret(\fIw\fP, \fIvisible\fP) -.br - Widget \fIw\fP; -.br - Boolean \fIvisible\fP; -.FN -.IP \fIw\fP 1i -Specifies the Text widget. -.IP \fIvisible\fP 1i -Specifies whether or not the caret should be displayed. -.LP -If \fIvisible\fP is \fBFalse\fP the insertion point will be disabled. -The marker is re-enabled either by setting \fIvisible\fP to \fBTrue\fP, by -calling \fBXtSetValues\fP, or by executing the \fIdisplay-caret\fP -action routine. diff --git a/doc/xorg-docs/specs/Xaw/TextSink b/doc/xorg-docs/specs/Xaw/TextSink deleted file mode 100644 index f316fed02..000000000 --- a/doc/xorg-docs/specs/Xaw/TextSink +++ /dev/null @@ -1,420 +0,0 @@ -.\" $Xorg: TextSink,v 1.3 2000/08/17 19:42:28 cpqbld Exp $ -.NH 2 -TextSink Object -.LP -.XS - TextSink Object -.XE -.IN "TextSink object" "" "@DEF@" -.LP -.Ds 0 -.TA 2.0i -.ta 2.0i -Application Header file -.IN "TextSink.h" "" -Class Header file -.IN "TextSinkP.h" "" -Class textSinkObjectClass -.IN "textSinkObjectClass" "" -Class Name TextSink -.IN "TextSink object" "class name" -Superclass Object -.De -.LP -The TextSink object is the root object for all text sinks. Any new text -sink objects should be subclasses of the TextSink Object. The TextSink -Class contains all methods that the Text widget expects a text sink to -export. -.LP -Since all text sinks will have some resources in common, the TextSink -defines a few new resources. -.NH 3 -Resources -.LP -When creating an TextSink object instance, the following resources are -retrieved from the argument list or from the resource database: -.LP -.IN "AsciiSink object" "resources" -.TS H -lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -background Background Pixel XtDefaultBackground -destroyCallback Callback XtCallbackList NULL -foreground Foreground Pixel XtDefaultForeground -.sp 3p -_ -.TE -.Bg Bold -.Dc -.Sg Bold -.NH 3 -Subclassing the TextSink -.IN "TextSink object" "subclassing" "@DEF@" -.LP -The only purpose of the TextSink Object is to be subclassed. It -contains the minimum set of class methods that all text sinks must have. -While all may be inherited, the direct descendant of TextSink \fBmust -specify\fP some of them as TextSink does contain enough information to -be a valid text sink by itself. Do not try to use -the TextSink as a valid sink for the Text widget; it is not intended -to be used as a sink by itself. -.TS H -lw(1i) lw(1.5i) lw(2i) lw(1i). -_ -.sp 3p -.TB -Function Inherit with Public Interface must specify -.sp 3p -_ -.TH -.R -.sp 3p -DisplayText XtInheritDisplayText XawTextSinkDisplayText yes -.IN "XtInheritDisplayText" "" -.IN "XawTextSinkDisplayText" "" -InsertCursor XtInheritInsertCursor XawTextSinkInsertCursor yes -.IN "XtInheritInsertCursor" "" -.IN "XawTextSinkInsertCursor" "" -ClearToBackground XtInheritClearToBackground XawTextSinkClearToBackground no -.IN "XtInheritClearToBackground" "" -.IN "XawTextSinkClearToBackground" "" -FindPosition XtInheritFindPosition XawTextSinkFindPosition yes -.IN "XtInheritFindPosition" "" -.IN "XawTextSinkFindPosition" "" -FindDistance XtInheritFindDistance XawTextSinkFindDistance yes -.IN "XtInheritFindDistance" "" -.IN "XawTextSinkFindDistance" "" -Resolve XtInheritResolve XawTextSinkResolve yes -.IN "XtInheritResolve" "" -.IN "XawTextSinkResolve" "" -MaxLines XtInheritMaxLines XawTextSinkMaxLines no -.IN "XtInheritMaxLines" "" -.IN "XawTextSinkMaxLines" "" -MaxHeight XtInheritMaxHeight XawTextSinkMaxHeight no -.IN "XtInheritMaxHeight" "" -.IN "XawTextSinkMaxHeight" "" -SetTabs XtInheritSetTabs XawTextSinkSetTabs no -.IN "XtInheritSetTabs" "" -.IN "XawTextSinkSetTabs" "" -GetCursorBounds XtInheritGetCursorBounds XawTextSinkGetCursorBounds yes -.IN "XtInheritGetCursorBounds" "" -.IN "XawTextSinkGetCursorBounds" "" -_ -.TE -.NH 4 -Displaying Text -.LP -To display a section of the text buffer contained in the text source -use the function \fBDisplayText\fP: -.IN "TextSink object" "DisplayText" "@DEF@" -.FD 0 -void DisplayText(\fIw\fP, \fIx\fP, \fIy\fP, \fIpos1\fP, \fIpos2\fP, \fIhighlight\fP) -.br - Widget \fIw\fP; -.br - Position \fIx\fP, \fIy\fP; -.br - XawTextPosition \fIpos1\fP, \fIpos2\fP; -.br - Boolean \fIhighlight\fP; -.FN -.IP \fIw\fP 1i -Specifies the TextSink object. -.IP \fIx\fP 1i -Specifies the x location to start drawing the text. -.IP \fIy\fP 1i -Specifies the y location to start drawing text. -.IP \fIpos1\fP 1i -Specifies the location within the text source of the first character -to be printed. -.IP \fIpos2\fP 1i -Specifies the location within the text source of the last character -to be printed. -.IP \fIhighlight\fP 1i -Specifies whether or not to paint the text region highlighted. -.LP -The Text widget will only pass one line at a time to the text sink, so -this function does not need to know how to line feed the text. It is -acceptable for this function to just ignore Carriage Returns. \fIx\fP -and \fIy\fP denote the upper left hand corner of the first character to -be displayed. -.NH 4 -Displaying the Insert Point -.LP -The function that controls the display of the text cursor is -\fBInsertCursor\fP. This function will be called whenever the text -widget desires to change the state of, or move the insert point. -.FD 0 -void InsertCursor(\fIw\fP, \fIx\fP, \fIy\fP, \fIstate\fP) -.IN "TextSink object" "InsertCursor" "@DEF@" -.br - Widget \fIw\fP; -.br - Position \fIx\fP, \fIy\fP; -.br - XawTextInsertState \fIstate\fP; -.FN -.IP \fIw\fP 1i -Specifies the TextSink object. -.IP \fIx\fP 1i -Specifies the x location of the cursor in Pixels. -.IP \fIy\fP 1i -Specifies the y location of the cursor in Pixels. -.IP \fIstate\fP 1i -Specifies the state of the cursor, may be one of \fBXawisOn\fP or -\fBXawisOff\fP. -.LP -\fIX\fP and \fIy\fP denote the upper left hand corner of the insert point. -.NH 4 -Clearing Portions of the Text window -.LP -To clear a portion of the Text window to its background color, the Text -widget will call \fBClearToBackground\fP. The TextSink object already -defines this function as calling \fBXClearArea\fP on the region passed. -This behavior will be used if you specify -\fBXtInheritClearToBackground\fP for this method. -.IN "XtInheritClearToBackground" "" -.IN "TextSink object" "ClearToBackground" "@DEF@" -.FD 0 -void ClearToBackground(\fIw\fP, \fIx\fP, \fIy\fP, \fIwidth\fP, \fIheight\fP) -.br - Widget \fIw\fP; -.br - Position \fIx\fP, \fIy\fP; -.br - Dimension \fIwidth\fP, \fIheight\fP; -.FN -.IP \fIw\fP 1i -Specifies the TextSink object. -.IP \fIx\fP 1i -Specifies the x location, in pixels, of the Region to clear. -.IP \fIy\fP 1i -Specifies the y location, in pixels, of the Region to clear. -.IP \fIwidth\fP 1i -Specifies the width, in pixels, of the Region to clear. -.IP \fIheight\fP 1i -Specifies the height, in pixels, of the Region to clear. -.LP -\fIX\fP and \fIy\fP denote the upper left hand corner of region to clear. -.NH 4 -Finding a Text Position Given Pixel Values -.LP -To find the text character position that will be rendered at a given x -location the Text widget uses the function \fBFindPosition\fP: -.IN "TextSink object" "FindPosition" "@DEF@" -.FD 0 -void FindPosition(\fIw\fP, \fIfromPos\fP, \fIfromX\fP, \fIwidth\fP, \fIstopAtWordBreak\fP, \fIpos_return\fP, \fIwidth_return\fP, \fIheight_return\fP) -.br - Widget \fIw\fP; -.br - XawTextPosition \fIfromPos\fP; -.br - int \fIfromX\fP, \fIwidth\fP; -.br - Boolean \fIstopAtWordBreak\fP; -.br - XawTextPosition \fI*pos_return\fP; -.br - int \fI*width_return\fP, \fI*height_return\fP; -.FN -.IP \fIw\fP 1.25i -Specifies the TextSink object. -.IP \fIfromPos\fP 1.25i -Specifies a reference position, usually the first character in this line. -This character is always to the left of the desired character location. -.IP \fIfromX\fP 1.25i -Specifies the distance that the left edge of \fIfromPos\fP is from the -left edge of the window. This is the reference x location for the -reference position. -.IP \fIwidth\fP 1.25i -Specifies the distance, in pixels, from the reference position to the -desired character position. -.IP \fIstopAtWordBreak\fP 1.25i -Specifies whether or not the position that is returned should be forced -to be on a word boundary. -.IP \fIpos_return\fP 1.25i -Returns the character position that corresponds to the location that has -been specified, or the work break immediately to the left of the -position if \fIstopAtWordBreak\fP is \fBTrue\fP. -.IP \fIwidth_return\fP 1.25i -Returns the actual distance between \fIfromPos\fP and \fIpos_return\fI. -.IP \fIheight_return\fP 1.25i -Returns the maximum height of the text between \fIfromPos\fP and -\fIpos_return\fI. -.LP -This function need make no attempt to deal with line feeds. The text -widget will only call it one line at a time. -.LP -.sp -Another means of finding a text position is provided by the \fBResolve\fP -function: -.IN "TextSink object" "Resolve" "@DEF@" -.FD 0 -void Resolve(\fIw\fP, \fIfromPos\fP, \fIfromX\fP, \fIwidth\fP, \fIpos_return\fP) -.br - Widget \fIw\fP; -.br - XawTextPosition \fIfromPos\fP; -.br - int \fIfromX\fP, \fIwidth\fP; -.br - XawTextPosition \fI*pos_return\fP; -.FN -.IP \fIw\fP 1i -Specifies the TextSink object. -.IP \fIfromPos\fP 1i -Specifies a reference position, usually the first character in this line. -This character is always to the left of the desired character location. -.IP \fIfromX\fP 1i -Specifies the distance that the left edge of \fIfromPos\fP is from the -left edge of the window. This is the reference x location for the -reference position. -.IP \fIwidth\fP 1i -Specifies the distance, in pixels, from the reference position to the -desired character position. -.IP \fIpos_return\fP 1i -Returns the character position that corresponds to the -location that has been specified, or the word break immediately to the left -if \fIstopAtWordBreak\fP is \fBTrue\fP. -.LP -This function need make no attempt to deal with line feeds. The text -widget will only call it one line at a time. This is a more convenient -interface to the \fBFindPosition\fP function, and provides a subset of its -functionality. -.IN "FindPosition" "" -.NH 4 -Finding the Distance Between two Text Positions -.LP -To find the distance in pixels between two text positions on the same -line use the function \fBFindDistance\fP. -.IN "TextSink object" "FindDistance" "@DEF@" -.FD 0 -void FindDistance(\fIw\fP, \fIfromPos\fP, \fIfromX\fP, \fItoPos\fP, \fIwidth_return\fP, \fIpos_return\fP, \fIheight_return\fP) -.br - Widget \fIw\fP; -.br - XawTextPosition \fIfromPos\fP, \fItoPos\fP; -.br - int \fIfromX\fP; -.br - XawTextPosition \fI*pos_return\fP; -.br - int \fI*width_return\fP, \fI*height_return\fP; -.FN -.IP \fIw\fP 1i -Specifies the TextSink object. -.IP \fIfromPos\fP 1i -Specifies the text buffer position, in characters, of the first position. -.IP \fIfromX\fP 1i -Specifies the distance that the left edge of \fIfromPos\fP is from the -left edge of the window. This is the reference x location for the -reference position. -.IP \fItoPos\fP 1i -Specifies the text buffer position, in characters, of the second position. -.IP \fIresWidth\fP 1i -Return the actual distance between \fIfromPos\fP -and \fIpos_return\fI. -.IP \fIresPos\fP 1i -Returns the character position that corresponds to the actual character -position used for \fItoPos\fP in the calculations. This may be -different than \fItoPos\fP, for example if \fIfromPos\fP and \fItoPos\fP -are on different lines in the file. -.IP \fIheight_return\fP 1i -Returns the maximum height of the text between \fIfromPos\fP and -\fIpos_return\fP. -.LP -This function need make no attempt to deal with line feeds. The Text -widget will only call it one line at a time. -.NH 4 -Finding the Size of the Drawing area -.LP -To find the maximum number of lines that will fit into the current Text -widget, use the function \fBMaxLines\fP. The TextSink already defines -this function to compute the maximum number of lines by using the height -of \fBfont\fP. -.IN "TextSink object" "MaxLines" "@DEF@" -.FD 0 -int MaxLines(\fIw\fP, \fIheight\fP) -.br - Widget \fIw\fP; -.br - Dimension \fIheight\fP; -.FN -.IP \fIw\fP 1i -Specifies the TextSink object. -.IP \fIheight\fP 1i -Specifies the height of the current drawing area. -.LP -Returns the maximum number of lines that will fit in \fIheight\fP. -.LP -.sp -To find the height required for a given number of text lines, use -the function \fBMaxHeight\fP. The TextSink already defines this -function to compute the maximum height of the window by using the -height of \fBfont\fP. -.IN "TextSink object" "MaxHeight" "@DEF@" -.FD 0 -int MaxHeight(\fIw\fP, \fIlines\fP) -.br - Widget \fIw\fP; -.br - int \fIlines\fP; -.FN -.IP \fIw\fP 1i -Specifies the TextSink object. -.IP \fIheight\fP 1i -Specifies the height of the current drawing area. -.LP -Returns the height that will be taken up by the number of lines passed. -.NH 4 -Setting the Tab Stops -.LP -To set the tab stops for a text sink use the \fBSetTabs\fP function. -The TextSink already defines this function to set the tab x location in -pixels to be the number of characters times the figure width of -\fBfont\fP. -.IN "TextSink object" "SetTabs" "@DEF@" -.FD 0 -void SetTabs(\fIw\fP, \fItab_count\fP, \fItabs\fP) -.br - Widget \fIw\fP; -.br - int \fItab_count\fP, \fI*tabs\fP; -.FN -.IP \fIw\fP 1i -Specifies the TextSink object. -.IP \fItab_count\fP 1i -Specifies the number of tabs passed in \fItabs\fP. -.IP \fItabs\fP 1i -Specifies the position, in characters, of the tab stops. -.LP -This function is responsible for the converting character positions passed -to it into whatever internal positions the TextSink uses for tab placement. -.NH 4 -Getting the Insert Point's Size and Location -.LP -To get the size and location of the insert point use the -\fBGetCursorBounds\fP function. -.IN "TextSink object" "GetCursorBounds" "@DEF@" -.FD 0 -void GetCursorBounds(\fIw\fP, \fIrect_return\fP) -.br -Widget \fIw\fP; -.br -XRectangle \fI*rect_return\fP; -.FN -.IP \fIw\fP 1i -Specifies the TextSinkObject. -.IP \fIrect_return\fP 1i -Returns the location and size of the insert point. -.LP -\fIRect\fP will be filled with the current size and location of the -insert point. diff --git a/doc/xorg-docs/specs/Xaw/TextSource b/doc/xorg-docs/specs/Xaw/TextSource deleted file mode 100644 index 41e439591..000000000 --- a/doc/xorg-docs/specs/Xaw/TextSource +++ /dev/null @@ -1,331 +0,0 @@ -.\" $Xorg: TextSource,v 1.3 2000/08/17 19:42:28 cpqbld Exp $ -.NH 2 -TextSrc Object -.LP -.XS - TextSrc Object -.XE -.IN "TextSrc object" "" "@DEF@" -.LP -.Ds 0 -.TA 2.0i -.ta 2.0i -Application Header file -.IN "TextSrc.h" "" -Class Header file -.IN "TextSrcP.h" "" -Class textSrcObjectClass -.IN "textSrcObjectClass" "" -Class Name TextSrc -.IN "TextSrc object" "class name" -Superclass Object -.De -.LP -The TextSrc object is the root object for all text sources. Any new text -source objects should be subclasses of the TextSrc Object. The -TextSrc Class contains all methods the Text widget expects a text -source to export. -.LP -Since all text sources will have some resources in common the -TextSrc defines a few new resources. -.NH 3 -Resources -.LP -When creating an TextSrc object instance, the following resources are -retrieved from the argument list or from the resource database: -.LP -.IN "TextSrc object" "resources" -.TS H -lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -destroyCallback Callback XtCallbackList NULL -editType EditType EditMode NULL -.sp 3p -_ -.TE -.Dc -.Oe Bold -.NH 3 -Subclassing the TextSrc -.IN "TextSrc object" "subclassing" "@DEF@" -.LP -The only purpose of the TextSrc Object is to be subclassed. It contains -the minimum set of class methods that all text sources must have. All -class methods of the TextSrc must be defined, as the Text widget uses -them all. While all may be inherited, the direct descendant of TextSrc -\fBmust\fP specify some of them as TextSrc does not contain enough -information to be a valid text source by itself. Do not try to use the -TextSrc as a valid source for the Text widget; it is not intended to be -used as a source by itself and bad things will probably happen. -.TS H -lw(1i) lw(1.5i) lw(2i) lw(1i). -_ -.sp 3p -.TB -Function Inherit with Public Interface must specify -.sp 3p -_ -.TH -.R -.sp 3p -Read XtInheritRead XawTextSourceRead yes -.IN "XtInheritRead" "" -.IN "XawTextSourceRead" "" -Replace XtInheritReplace XawTextSourceReplace no -.IN "XtInheritReplace" "" -.IN "XawTextSourceReplace" "" -Scan XtInheritScan XawTextSourceScan yes -.IN "XtInheritScan" "" -.IN "XawTextSourceScan" "" -Search XtInheritSearch XawTextSourceSearch no -.IN "XtInheritSearch" "" -.IN "XawTextSourceSearch" "" -SetSelection XtInheritSetSelection XawTextSourceSetSelection no -.IN "XtInheritSetSelection" "" -.IN "XawTextSourceSetSelection" "" -ConvertSelection XtInheritConvertSelection XawTextSourceConvertSelection no -.IN "XtInheritConvertSelection" "" -.IN "XawTextSourceConvertSelection" "" -_ -.TE -.NH 4 -Reading Text. -.LP -To read the text in a text source use the \fBRead\fP function: -.IN "TextSrc object" "Read" "@DEF@" -.FD 0 -XawTextPosition Read(\fIw\fP, \fIpos\fP, \fItext_return\fP, \fIlength\fP) -.br -Widget \fIw\fP; -.br -XawTextPosition \fIpos\fP; -.br -XawTextBlock \fI*text_return\fP; -.br -int \fIlength\fP; -.FN -.IP \fIw\fP 1i -Specifies the TextSrc object. -.IP \fIpos\fP 1i -Specifies the position of the first character to be read from the text buffer. -.IP \fItext\fP 1i -Returns the text read from the source. -.IP \fIlength\fP 1i -Specifies the maximum number of characters the TextSrc should -return to the application in \fItext_return\fP. -.LP -This function returns the text position immediately after the -characters read from the -text buffer. The function is not required to read \fIlength\fP -characters if that many characters are in the file, it may break at -any point that is convenient to the internal structure of the -source. It may take several calls to \fBRead\fP before the desired -portion of the text buffer is fully retrieved. -.NH 4 -Replacing Text. -.LP -To replace or edit the text in a text buffer use the \fBReplace\fP function: -.FD 0 -XawTextPosition Replace(\fIw\fP, \fIstart\fP, \fIend\fP, \fItext\fP) -.IN "TextSrc object" "Replace" @DEF@ -.br -Widget \fIw\fP; -.br -XawTextPosition \fIstart\fP, \fIend\fP; -.br -XawTextBlock \fI*text\fP; -.FN -.IP \fIw\fP 1i -Specifies the TextSrc object. -.IP \fIstart\fP 1i -Specifies the position of the first character to be removed from the text -buffer. This is also the location to begin inserting the new text. -.IP \fIend\fP 1i -Specifies the position immediately after the last character to be -removed from the text buffer. -.IP \fItext\fP 1i -Specifies the text to be added to the text source. -.LP -This function can return any of the following values: -.IP \fBXawEditDone\fP 1.25i -.IN "XawEditDone" "" -The text replacement was successful. -.IP \fBXawPositionError\fP 1.25i -.IN "XawPositionError" "" -The edit mode is \fBXawtextAppend\fP and \fIstart\fP is not the last -character of the source. -.IP \fBXawEditError\fP 1.25i -.IN "XawEditError" "" -Either the Source was read-only or the range to be deleted is larger -than the length of the Source. -.LP -The \fBReplace\fP arguments \fIstart\fP and \fIend\fP represent the -text source character positions for the existing text that is to be -replaced by the text in the text block. The characters from -\fIstart\fP up to but not including \fIend\fP are deleted, and the -buffer specified by the text block is inserted in their -place. If \fIstart\fP and \fIend\fP are equal, no text is deleted and -the new text is inserted after \fIstart\fP. -.NH 4 -Scanning the TextSrc -.LP -To search the text source for one of the predefined boundary types use -the \fBScan\fP function: -.FD 0 -XawTextPosition Scan(\fIw\fP, \fIposition\fP, \fItype\fP, \fIdir\fP, \fIcount\fP, \fIinclude\fP) -.IN "TextSrc object" "Scan" @DEF@ -.br -Widget \fIw\fP; -.br -XawTextPosition \fIposition\fP; -.br -XawTextScanType \fItype\fP; -.br -XawTextScanDirection \fIdir\fP; -.br -int \fIcount\fP; -.br -Boolean \fIinclude\fP; -.FN -.IP \fIw\fP 1i -Specifies the TextSrc object. -.IP \fIposition\fP 1i -Specifies the position to begin scanning the source. -.IP \fItype\fP 1i -Specifies the type of boundary to scan for, may be one of: -\fBXawstPosition\fP, \fBXawstWhiteSpace\fP, \fBXawstEOL\fP, -.IN "XawstPositions" "" -.IN "XawstWhiteSpace" "" -.IN "XawstEOL" "" -\fBXawstParagraph\fP, \fBXawstAll\fP. The exact meaning of these -.IN "XawstParagraph" "" -.IN "XawstAll" "" -boundaries is left up to the individual text source. -.IP \fIdir\fP 1i -Specifies the direction to scan, may be either \fBXawsdLeft\fP to search -.IN "XawsdLeft" "" -backward, or \fBXawsdRight\fP to search forward. -.IN "XawsdRight" "" -.IP \fIcount\fP 1i -Specifies the number of boundaries to scan for. -.IP \fIinclude\fP 1i -Specifies whether the boundary itself should be included in the scan. -.LP -The \fBScan\fP function returns the position in the text source of the desired -boundary. It is expected to return a valid address for -all calls made to it, thus if a particular request is made that would take -the text widget beyond the end of the source it must return the -position of that end. -.NH 4 -Searching through a TextSrc -.LP -To search for a particular string use the \fBSearch\fP function. -.FD 0 -XawTextPosition Search(\fIw\fP, \fIposition\fP, \fIdir\fP, \fItext\fP) -.IN "TextSrc object" "Search" @DEF@ -.br -Widget \fIw\fP; -.br -XawTextPosition \fIposition\fP; -.br -XawTextScanDirection \fIdir\fP; -.br -XawTextBlock \fI*text\fP; -.FN -.IP \fIw\fP 1i -Specifies the TextSrc object. -.IP \fIposition\fP 1i -Specifies the position to begin the search. -.IP \fIdir\fP 1i -Specifies the direction to search, may be either \fBXawsdLeft\fP to search -.IN "XawsdLeft" "" -backward, or \fBXawsdRight\fP to search forward. -.IN "XawsdRight" "" -.IP \fItext\fP 1i -Specifies a text block containing the text to search for. -.LP -This function will search through the text buffer attempting to find a -match for the string in the text block. If a match is found in the -direction specified, then the character location of the first character -in the string is returned. If no text was found then -\fBXawTextSearchError\fP is returned. -.IN "XawTextSearchError" "" -.NH 4 -Text Selections -.LP -While many selection types are handled by the Text widget, text sources -may have selection types unknown to the Text widget. When a selection -conversion is requested by the X server the Text widget will first call -the \fBConvertSelection\fP function, to attempt the selection -conversion. -.FD 0 -Boolean ConvertSelections(\fIw\fP, \fIselection\fP, \fItarget\fP, \fItype\fP, \fIvalue_return\fP, \fIlength_return\fP, \fIformat_return\fP) -.IN "Text widget" "ConvertSelection" @DEF@ -.br -Widget \fIw\fP; -.br -Atom \fI*selection\fP, \fI*target\fP, \fI*type\fP; -.br -caddr_t \fI*value_return\fP; -.br -unsigned long \fI*length_return\fP; -.br -int \fI*format_return\fP; -.FN -.IP \fIw\fP 1i -Specifies the TextSrc object. -.IP \fIselection\fP 1i -Specifies the type of selection that was requested (e.g. \fBPRIMARY\fP). -.IP \fItarget\fP 1i -Specifies the type of the selection that has been requested, which -indicates the desired information about the selection (e.g. Filename, -Text, Window). -.IP \fItype\fP 1i -Specifies a pointer to the atom into which the property type of the converted -value of the selection is to be stored. For instance, either file -name or text might have property type \fBXA_STRING\fP. -.IP \fIvalue_return\fP 1i -Returns a pointer into which a pointer to the converted value of the -selection -is to be stored. The selection owner is responsible for allocating -this storage. The memory is considered owned by the toolkit, and is -freed by XtFree when the Intrinsics selection mechanism is done with it. -.IP \fIlength_return\fP 1i -Returns a pointer into which the number of elements in value is to be stored. -The size of each element is determined by \fIformat\fP. -.IP \fIformat_return\fP 1i -Returns a pointer into which the size in bits of the data elements of the -selection value is to be stored. -.LP -If this function returns \fBTrue\fP then the Text widget will assume -that the source has taken care of converting the selection, Otherwise the -Text widget will attempt to convert the selection itself. -.LP -.sp -If the source needs to know when the text selection is modified it -should define a \fBSetSelection\fP procedure: -.FD 0 -void SetSelection(\fIw\fP, \fIstart\fP, \fIend\fP, \fIselection\fP) -Widget \fIw\fP; -.IN "SetSelection" "" @DEF@ -.br -XawTextPosition \fIstart\fP, \fIend\fP; -.br -Atom \fIselection\fP; -.FN -.IP \fIw\fP 1i -Specifies the TextSrc object. -.IP \fIstart\fP 1i -Specifies the character position of the beginning of the new text selection. -.IP \fIend\fP -Specifies the character position of the end of the new text selection. -.IP \fIselection\fP 1i -Specifies the type of selection that was requested (e.g. \fBPRIMARY\fP). diff --git a/doc/xorg-docs/specs/Xaw/Toggle b/doc/xorg-docs/specs/Xaw/Toggle deleted file mode 100644 index 7849e61cb..000000000 --- a/doc/xorg-docs/specs/Xaw/Toggle +++ /dev/null @@ -1,370 +0,0 @@ -.\" $Xorg: Toggle,v 1.3 2000/08/17 19:42:29 cpqbld Exp $ -.NH 2 -Toggle Widget -.XS - Toggle Widget -.XE -.IN "Toggle widget" "" "@DEF@" -.Ds 0 -.TA 2.0i -.ta 2.0i -.sp -Application Header file -.IN "Toggle.h" "" -Class Header file -.IN "ToggleP.h" "" -Class toggleWidgetClass -.IN "toggleWidgetClass" "" -Class Name Toggle -.IN "Toggle widget" "class name" -Superclass Command -.sp -.De -.LP -The Toggle widget is an area, often rectangular, -that displays a graphic. The graphic may be a text -string containing multiple lines of characters in an 8 -bit or 16 bit character set (to be displayed with a -\fIfont\fP), or in a multi-byte encoding (for use with -a \fIfontset\fP). The graphic may also be a bitmap or -pixmap. -.LP -This widget maintains a Boolean state (e.g. -True/False or On/Off) and changes state whenever it is selected. When -the pointer is on the Toggle widget, the Toggle widget may become highlighted by -drawing a rectangle around its perimeter. This highlighting indicates -that the Toggle widget is ready for selection. When pointer button 1 is -pressed and released, the Toggle widget indicates that it has changed -state by reversing its foreground and background colors, and its -\fBnotify\fP action is invoked, calling all functions on its callback -list. If the pointer is moved off of the widget before the pointer button is -released, the Toggle widget reverts to its previous foreground and background -colors, and releasing the pointer button has no effect. This behavior allows -the user to cancel the operation. -.LP -Toggle widgets may also be part of a ``radio group.'' A radio group is a -.IN "Radio groups" "" -.IN "Radio button" "" -.IN "Toggle widget" "used in radio groups" -list of at least two Toggle widgets in which no more than one Toggle may -be set at -any time. A radio group is identified by the widget ID of any one of -its members. The convenience routine \fBXawToggleGetCurrent\fP will -return information about the Toggle widget in the radio group. -.LP -Toggle widget state is preserved across changes in sensitivity. -.NH 3 -Resources -.LP -When creating a Toggle widget instance, the following resources are -retrieved from the argument list or from the resource database: -.LP -.IN "Toggle widget" "resources" -.TS H -expand; -lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -accelerators Accelerators AcceleratorTable NULL -ancestorSensitive AncestorSensitive Boolean D True -background Background Pixel XtDefaultBackground -backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap -bitmap Bitmap Pixmap None -borderColor BorderColor Pixel XtDefaultForeground -borderPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderWidth BorderWidth Dimension 1 -callback Callback XtCallbackList NULL -colormap Colormap Colormap Parent's Colormap -cornerRoundPercent CornerRoundPercent Dimension 25 -cursor Cursor Cursor None -cursorName Cursor String NULL -depth Depth int C Parent's Depth -destroyCallback Callback XtCallbackList NULL -encoding Encoding UnsignedChar XawTextEncoding8bit -font Font XFontStruct XtDefaultFont -fontSet FontSet XFontSet XtDefaultFontSet -foreground Foreground Pixel XtDefaultForeground -height Height Dimension A graphic height + 2 * \fBinternalHeight\fP -highlightThickness Thickness Dimension A 2 (0 if Shaped) -insensitiveBorder Insensitive Pixmap GreyPixmap -internalHeight Height Dimension 2 -internalWidth Width Dimension 4 -international International Boolean C False -justify Justify Justify XtJustifyCenter (center) -label Label String name of widget -leftBitmap LeftBitmap Bitmap None -mappedWhenManaged MappedWhenManaged Boolean True -pointerColor Foreground Pixel XtDefaultForeground -pointerColorBackground Background Pixel XtDefaultBackground -radioData RadioData Pointer Name of widget -radioGroup Widget Widget No radio group -resize Resize Boolean True -screen Screen Screen R Parent's Screen -sensitive Sensitive Boolean True -shapeStype ShapeStyle ShapeStyle Rectangle -state State Boolean Off -translations Translations TranslationTable See below -width Width Dimension A graphic width + 2 * \fBinternalWidth\fP -x Position Position 0 -y Position Position 0 -.sp 3p -_ -.TE -.Ac -.As -.Bg -.Gp -.Bm -.Bc -.Bp -.Bw -.Cb -.Cm -.Cr -.Cu -.Cn -.Dp -.Dc -.Le -.Lf -.Ls -.Lg -.Hw -.Ht -.Ib -.Ih -.In -.Ju -.La -.Ll -.Mm -.Pf -.Pb -.IP \fBradioData\fP 1.5i -Specifies the data that will be returned by \fBXawToggleGetCurrent\fP -when this is the currently \fIset\fP widget in the radio group. This -value is also used to identify the Toggle that will be set by a call to -\fBXawToggleSetCurrent\fP. The value NULL will be returned by -\fBXawToggleGetCurrent\fP if no widget in a radio group is currently -set. Programmers must not specify NULL (or Zero) as \fBradioData\fP. -.IP \fBradioGroup\fP 1.5i -Specifies another Toggle widget that is in the radio group to which this -Toggle widget should be added. A radio group is a group of at least two Toggle -widgets, only one of which may be \fIset\fP at a time. If this value is -NULL (the default) then the Toggle will not be part of any radio group -and can change state without affecting any other Toggle widgets. If the -widget specified in this resource is not already in a radio group then a -new radio group will be created containing these two Toggle widgets. No -Toggle widget can be in multiple radio groups. The behavior of a radio -group of one toggle is undefined. A converter is registered which will -convert widget names to widgets without caching. -.Re -.Sc -.Se -.Ss -.IP \fBstate\fP -Specifies whether the Toggle widget is set (\fBTrue\fP) or unset -(\fBFalse\fP). -.Tr -.Xy -.NH 3 -Toggle Actions -.IN "Toggle widget" "actions" -.LP -The Toggle widget supports the following actions: -.IP \(bu 5 -Switching the Toggle widget between the foreground and background -colors with \fBset\fP and \fBunset\fP and \fBtoggle\fP -.IP \(bu 5 -Processing application callbacks with \fBnotify\fP -.IP \(bu 5 -Switching the internal border between highlighted -and unhighlighted states with \fBhighlight\fP and \fBunhighlight\fP -.LP -The following are the default translation bindings used by the -Toggle widget: -.IN "Toggle widget" "default translation table" -.LP -.sp -.Ds 0 -.TA .5i 2.25i -.ta .5i 2.25i - : highlight(Always) - : unhighlight(\|) - ,: toggle(\|) notify(\|) -.De -.NH 3 -Toggle Actions -.LP -The full list of actions supported by Toggle is: -.IP \fBhighlight\fP(\fIcondition\fP) 1.5i -Displays the internal highlight border in the color (\fBforeground\fP -or \fBbackground\fP ) that contrasts with the interior color of the -Toggle widget. The conditions \fBWhenUnset\fP and \fBAlways\fP are -understood by this action procedure. If no argument is passed then -\fBWhenUnset\fP is assumed. -.IP \fBunhighlight\fP(\|) 1.5i -Displays the internal highlight border in the color (\fBforeground\fP -or \fBbackground\fP ) that matches the interior color of the -Toggle widget. -.IP \fBset\fP(\|) 1.5i -Enters the \fIset\fP state, in which \fBnotify\fP is possible. This -action causes the Toggle widget to display its interior in the -\fBforeground\fP color. The label or bitmap is displayed in the -\fBbackground\fP color. -.IP \fBunset\fP(\|) 1.5i -Cancels the \fIset\fP state and displays the interior of the Toggle widget in the -\fBbackground\fP color. The label or bitmap is displayed in the -\fBforeground\fP color. -.IP \fBtoggle\fP(\|) 1.5i -Changes the current state of the Toggle widget, causing to be set -if it was previously unset, and unset if it was previously set. -If the widget is to be set, and is in a radio group then this procedure may -unset another Toggle widget causing all routines on its callback list -to be invoked. The callback routines for the Toggle that -is to be unset will be called before the one that is to be set. -.IP \fBreset\fP(\|) 1.5i -Cancels any \fBset\fP or \fBhighlight\fP and displays the interior of the -Toggle widget in the \fBbackground\fP color, with the label displayed in the -\fBforeground\fP color. -.IP \fBnotify\fP(\|) 1.5i -When the Toggle widget is in the \fBset\fP state this action calls all functions in -the callback list named by the \fBcallback\fP resource. The value of -the call_data argument in these callback functions is undefined. -.LP -.NT -When a bitmap of depth greater that one (1) is specified the -\fIset\fP(), \fIunset\fP(), and \fIreset\fP() actions have no effect, -since there are no foreground and background colors used in a -multi-plane pixmap. -.NE -.NH 3 -Radio Groups -.IN "Radio groups" -.LP -There are typically two types of radio groups desired by applications. -The default translations for the Toggle widget implement a "zero or one -.IN "Radio groups" "zero or one of many" -of many" radio group. This means that there may be no more than one -Toggle widget active, but there need not be any Toggle widgets active. -.LP -The other type of radio group is "one of many" and has the more strict -.IN "Radio groups" "one of many" -policy that there will always be exactly one radio button active. -Toggle widgets can be used to provide this interface with a slight -modification to the translation table of each Toggle in the group. -.Ds 0 -.TA .5i 2.25i -.ta .5i 2.25i -.sp - : highlight(Always) - : unhighlight(\|) - ,: set(\|) notify(\|) -.sp -.De -This translation table will not allow any Toggle to be \fIunset\fP -except as a result of another Toggle becoming \fIset\fP. It is -the application programmer's responsibility to choose an initial -state for the radio group by setting the \fBstate\fP resource of one of -its member widgets to \fBTrue\fP. -.NH 3 -Convenience Routines -.LP -The following functions allow easy access to the Toggle widget's radio -group functionality. -.NH 4 -Changing the Toggle's Radio Group. -.LP -To enable an application to change the Toggle's radio group, add -the Toggle to a radio group, or remove the Toggle from a radio group, use -\fBXawToggleChangeRadioGroup\fP. -.IN "XawToggleChangeRadioGroup" "" "@DEF@" -.FD -void XawToggleChangeRadioGroup(\fIw\fP, \fIradio_group\fP) -.br - Widget \fIw\fP, \fIradio_group\fP; -.FN -.IP \fIw\fP 1i -Specifies the Toggle widget. -.IP \fIradio_group\fP 1i -Specifies any Toggle in the new radio group. If NULL then the Toggle -will be removed from any radio group of which it is a member. -.LP -If a Toggle is already \fIset\fP in the new radio group, -and the Toggle to be added is also \fIset\fP then the previously -\fIset\fP Toggle in the radio group is \fIunset\fP and its callback -procedures are invoked. -.SH -Finding the Currently selected Toggle in a radio group of Toggles -.LP -To find the currently selected Toggle in a radio group of Toggle widgets -use -\fBXawToggleGetCurrent\fP. -.IN "XawToggleGetCurrent" "" "@DEF@" -.FD -XtPointer XawToggleGetCurrent(\fIradio_group\fP); -.br - Widget \fIradio_group\fP; -.FN -.IP \fIradio_group\fP 1i -Specifies any Toggle widget in the radio group. -.LP -The value returned by this function is the -.PN radioData -of the Toggle in this radio group that is currently set. The default -value for -.PN radioData -is the name of that Toggle widget. If no Toggle is set in the radio -group specified then NULL is returned. -.SH -Changing the Toggle that is set in a radio group. -.LP -To change the Toggle that is currently set in a radio group use -\fBXawToggleSetCurrent\fP. -.IN "XawToggleSetCurrent" "" "@DEF@" -.FD -void XawToggleSetCurrent(\fIradio_group\fP, \fIradio_data\fP); -.br - Widget \fIradio_group\fP; - XtPointer \fIradio_data\fP; -.FN -.IP \fIradio_group\fP 1i -Specifies any Toggle widget in the radio group. -.IP \fIradio_data\fP 1i -Specifies the -.PN radioData -identifying the Toggle that should be set in the radio group specified -by the \fIradio_group\fP argument. -.LP -\fBXawToggleSetCurrent\fP locates the Toggle widget to be set by -matching \fIradio_data\fP against the \fBradioData\fP for each Toggle in -the radio group. If none match, \fBXawToggleSetCurrent\fP returns -without making any changes. If more than one Toggle matches, -\fBXawToggleSetCurrent\fP will choose a Toggle to set arbitrarily. If -this causes any Toggle widgets to change state, all routines in their -callback lists will be invoked. The callback routines for a Toggle that -is to be unset will be called before the one that is to be set. -.SH -Unsetting all Toggles in a radio group. -.LP -To unset all Toggle widgets in a radio group use -\fBXawToggleUnsetCurrent\fP. -.IN "XawToggleUnsetCurrent" "" "@DEF@" -.FD -void XawToggleUnsetCurrent(\fIradio_group\fP); -.br - Widget \fIradio_group\fP; -.FN -.IP \fIradio_group\fP 1i -Specifies any Toggle widget in the radio group. -.LP -If this causes a Toggle widget to change state, all routines on its -callback list will be invoked. - diff --git a/doc/xorg-docs/specs/Xaw/Tree b/doc/xorg-docs/specs/Xaw/Tree deleted file mode 100644 index ceefc22e7..000000000 --- a/doc/xorg-docs/specs/Xaw/Tree +++ /dev/null @@ -1,181 +0,0 @@ -.\" $Xorg: Tree,v 1.3 2000/08/17 19:42:29 cpqbld Exp $ -.NH 2 -Tree Widget -.LP -.XS - Tree Widget -.XE -.IN "Tree widget" "" "@DEF@" -.Ds 0 -.TA 2.0i -.ta 2.0i -.sp -Application Header file -.IN "Box.h" "" -Class Header file -.IN "TreeP.h" "" -Class treeWidgetClass -.IN "treeWidgetClass" "" -Class Name Tree -.IN "Tree widget" "class name" -Superclass Constraint -.sp -.De -.LP -The Tree widget provides geometry management of arbitrary widgets arranged -in a directed, acyclic graph (i.e., a tree). The hierarchy is constructed -by attaching a constraint resource called \fBtreeParent\fP to each widget -indicating which other node in the tree should be treated as the widget's -superior. The structure of the tree is shown by laying out the nodes -in the standard format for tree diagrams with lines drawn connecting each -node with its children. -.LP -The Tree sizes itself according to the needs of its children and is not -intended to be resized by its parent. Instead, it should be placed inside -another composite widget (such as the \fBPorthole\fP or \fBViewport\fP) -that can be used to scroll around in the tree. -.NH 3 -Resources -.LP -When creating a Tree widget instance, the following resources are -retrieved from the argument list or from the resource database: -.LP -.IN "Box widget" "resources" -.TS H -expand; -lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -accelerators Accelerators AcceleratorTable NULL -ancestorSensitive AncestorSensitive Boolean D True -autoReconfigure AutoReconfigure Boolean False -background Background Pixel XtDefaultBackground -backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderColor BorderColor Pixel XtDefaultForeground -borderPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderWidth BorderWidth Dimension 1 -children ReadOnly WidgetList R NULL -colormap Colormap Colormap Parent's Colormap -depth Depth int C Parent's Depth -destroyCallback Callback XtCallbackList NULL -foreground Foreground Pixel XtDefaultForeground -gravity Gravity XtGravity WestGravity -height Height Dimension A see \fBLayout Semantics\fP -hSpace HSpace Dimension 4 -lineWidth LineWidth Dimension 0 -mappedWhenManaged MappedWhenManaged Boolean True -numChildren ReadOnly Cardinal R 0 -screen Screen Screen R Parent's Screen -sensitive Sensitive Boolean True -vSpace VSpace Dimension 4 -translations Translations TranslationTable NULL -width Width Dimension A see \fBLayout Semantics\fP -x Position Position 0 -y Position Position 0 -.sp 3p -_ -.TE -.IP \fBautoReconfigure\fP 1.5i -Whether or not to layout the tree every time a node is added or removed. -.Bg -.Gp -.Bc -.Bp -.Bw -.Ch -.Cm -.Dp -.Dc -.Lg -.IP \fBgravity\fP 1.5i -.IN "conversions" "Gravity" -Specifies the side of the widget from which the tree should grow. Valid -values include \fBWestGravity\fP, \fBNorthGravity\fP, \fBEastGravity\fP, and -\fBSouthGravity\fP. -.Rs "\fP the legal values\fB" -.Hw -.IP \fBhSpace\fP 1.5i -.br -.ns -.IP \fBvSpace\fP 1.5i -The amount of space, in pixels, to leave between the children. This -resource specifies the amount of space left between the outermost -children and the edge of the box. -.IP \fBlineWidth\fP 1.5i -The width of the lines from nodes that do not have a \fBtreeGC\fP -constraint resource to their children. -.Mm -.Nc -.Sc -.Se -.Tr -.Xy -.NH 3 -Constraint Resources -.LP -.IN "Tree widget" "constraint resources" -Each child of the Tree widget must specify its superior node in the tree. In -addition, it may specify a GC to use when drawing a line between it and its -inferior nodes. -.TS H -lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -treeGC TreeGC GC NULL -treeParent TreeParent Widget NULL -.sp 3p -_ -.TE -.IP \fBtreeGC\fP 1.5i -This specifies the GC to use when drawing lines between this widget and its -inferiors in the tree. If this resource is not specified, the Tree's -\fBforeground\fP and \fBlineWidth\fP will be used. -.IP \fBtreeParent\fP 1.5i -This specifies the superior node in the tree for this widget. The default is -for the node to have no superior (and to therefore be at the top of the tree). -.NH 3 -Layout Semantics -.IN "Tree widget" "layout semantics" -.LP -Each time a child is managed or unmanaged, the Tree widget will attempt -to reposition the remaining children to fix the shape of the tree if the -.B autoReconfigure -resource is set. Children at the top (most superior) of the tree are -drawn at -the side specified by the -.B gravity -resource. -.LP -After positioning all children, the Tree widget attempts to shrink its -own size to the minimum dimensions required for the layout. -.NH 3 -Convenience Routines -.LP -.IN "Tree widget" "convenience routines" -The most efficient way to layout a tree is to set -.B autoReconfigure -to False and then use the -.B XawTreeForceLayout -routine to arrange the children. -.IN "XawTreeForceLayout" "" "@DEF@" -.FD 0 -void XawTreeForceLayout(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the Tree widget. diff --git a/doc/xorg-docs/specs/Xaw/Viewport b/doc/xorg-docs/specs/Xaw/Viewport deleted file mode 100644 index 0b599472a..000000000 --- a/doc/xorg-docs/specs/Xaw/Viewport +++ /dev/null @@ -1,156 +0,0 @@ -.\" $Xorg: Viewport,v 1.3 2000/08/17 19:42:29 cpqbld Exp $ -.NH 2 -Viewport Widget -.LP -.XS - Viewport Widget -.XE -.IN "Viewport widget" "" "@DEF@" -.Ds 0 -.TA 2.0i -.ta 2.0i -.sp -Application Header file -.IN "Viewport.h" "" -Class Header file -.IN "ViewportP.h" "" -Class viewportWidgetClass -.IN "viewportWidgetClass" "" -Class Name Viewport -.IN "Viewport widget" "class name" -Superclass Form -.sp -.De -.LP -The Viewport widget consists of a frame window, one or two Scrollbars, -and an inner window. The size of the frame window is determined by the -viewing size of the data that is to be displayed and the dimensions to -which the Viewport is created. The inner window is the full size of the -data that is to be displayed and is clipped by the frame window. The -Viewport widget controls the scrolling of the data directly. No -application callbacks are required for scrolling. -.LP -When the geometry of the frame window is equal in size to the inner -window, or when the data does not require scrolling, the Viewport widget -automatically removes any scrollbars. The \fBforceBars\fP option causes -the Viewport widget to display all scrollbars permanently. -.NH 3 -Resources -.LP -When creating a Viewport widget instance, the following resources are -retrieved from the argument list or the resource database: -.LP -.IN "Viewport widget" "resources" -.TS H -expand; -lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i). -_ -.sp 3p -.TB -Name Class Type Notes Default Value -.sp 3p -_ -.TH -.R -.sp 3p -accelerators Accelerators AcceleratorTable NULL -allowHoriz Boolean Boolean False -allowVert Boolean Boolean False -ancestorSensitive AncestorSensitive Boolean D True -background Background Pixel XtDefaultBackground -backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderColor BorderColor Pixel XtDefaultForeground -borderPixmap Pixmap Pixmap XtUnspecifiedPixmap -borderWidth BorderWidth Dimension 1 -children ReadOnly WidgetList R NULL -colormap Colormap Colormap Parent's Colormap -depth Depth int C Parent's Depth -destroyCallback Callback XtCallbackList NULL -forceBars Boolean Boolean False -height Height Dimension height of the child -mappedWhenManaged MappedWhenManaged Boolean True -numChildren ReadOnly Cardinal R 0 -reportCallback ReportCallback XtCallbackList NULL -screen Screen Screen R Parent's Screen -sensitive Sensitive Boolean True -translations Translations TranslationTable NULL -useBottom Boolean Boolean False -useRight Boolean Boolean False -width Width Dimension width of the child -x Position Position 0 -y Position Position 0 -.sp 3p -_ -.TE -.Ac -.IP \fBallowHoriz\fP 1.5i -.br -.ns -.IP \fBallowVert\fP 1.5i -If these resources are \fBFalse\fP then the Viewport will never create -a scrollbar in this direction. If it is \fBTrue\fP then the scrollbar will -only appear when it is needed, unless \fBforceBars\fP is \fBTrue\fP. -.As -.Bg -.Gp -.Bc -.Bp -.Bw -.Ch -.Cm -.Dp -.Dc -.IP \fBforceBars\fP 1.5i -When \fBTrue\fP the scrollbars that have been \fIallowed\fP will always be -visible on the screen. If \fBFalse\fP the scrollbars will be visible only -when the inner window is larger than the frame. -.Hw -.Mm -.Nc -.IP \fBreportCallback\fP 1.5i -These callbacks will be executed whenever the Viewport adjusts the viewed -area of the child. The call_data parameter is a pointer to an XawPannerReport -structure. -.Sc -.Se -.Tr -.IP \fBuseBottom\fP 1.5i -.br -.ns -.IP \fBuseRight\fP 1.5i -By default the scrollbars appear on the left and top of the screen. -These resources allow the vertical scrollbar to be placed on the right -edge of the Viewport, and the horizontal scrollbar on the bottom edge of -the Viewport. -.Xy -.NH 3 -Layout Semantics -.LP -.IN "Viewport widget" "layout semantics" -The Viewport widget manages a single child widget. When the size of the -child is larger than the size of the Viewport, the user can interactively -move the child within the Viewport by repositioning the scrollbars. -.LP -The default size of the Viewport before it is realized is the width and/or -height of the child. After it is realized, the Viewport will allow its -child to grow vertically or horizontally if \fBallowVert\fP or -\fBallowHoriz\fP are set, respectively. If the corresponding vertical -or horizontal scrollbar is not enabled, the Viewport will propagate the -geometry request to its own parent and the child will be allowed to change -size only if the Viewport's parent allows it. Regardless of whether or not -scrollbars are enabled in the corresponding direction, if the child requests -a new size smaller than the Viewport size, the change will be allowed only -if the parent of the Viewport allows the Viewport to shrink to the -appropriate dimension. -.LP -The scrollbar children of the Viewport are named \fBhorizontal\fP and -\fBvertical\fP. By using these names the programmer can specify resources -for the individual scrollbars. \fBXtSetValues\fP can be used to modify -the resources dynamically once the widget ID has been obtained with -\fBXtNameToWidget\fP. -.IN "XtNameToWidget" "" -.NT -Although the Viewport is a Subclass of the Form, no resources for the Form -may be supplied for any of the children of the Viewport. These constraints -are managed internally and are not meant for public consumption. -.NE diff --git a/doc/xorg-docs/specs/Xaw/Xtk.widg.front b/doc/xorg-docs/specs/Xaw/Xtk.widg.front deleted file mode 100644 index 6ffe090a3..000000000 --- a/doc/xorg-docs/specs/Xaw/Xtk.widg.front +++ /dev/null @@ -1,134 +0,0 @@ -.\" -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.ps 11 -.nr PS 11 -\& -.sp 8 -.ce 5 -\s+2\fB\*(xW\fP\s-2 - -\s+1\fBX Window System\fP\s-1 - -\s+1\fBX Version 11, Release 3+\fP\s-1 - -\s+1\fBDRAFT - not for Redistribution\fP\s-1 -.sp 6 -.ce 4 -\s-1Ralph R. Swick -.sp 6p -Digital Equipment Corporation -External Research Group -MIT Project Athena -.sp 2 -.ce 4 -Terry Weissman -.sp 6p -Digital Equipment Corporation -Western Software Laboratory\s+1 -.bp -\& -.ps 9 -.nr PS 9 -.sp 8 -.LP -X Window System is a trademark of X Consortium, Inc. -.LP -Copyright \(co 1985, 1986, 1987, 1988 -Digital Equipment Corporation, Maynard, Massachusetts. -.LP -Permission to use, copy, modify and distribute this documentation for any -purpose and without fee is hereby granted, provided that the above copyright -notice appears in all copies and that both that copyright notice and this -permission notice appear in supporting documentation, and that the name of -Digital not be used in in advertising or publicity pertaining -to distribution of the software without specific, written prior permission. -Digital makes no representations about the suitability of the -software described herein for any purpose. -It is provided ``as is'' without express or implied warranty. -Copyright \(co 1985, 1986, 1987, 1988 X Consortium -.LP -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -.LP -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -.LP -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. -.LP -.ps 11 -.nr PS 11 -.bp iii -.XS iii -Acknowledgments -.XE -\& -.sp 1 -.ce 3 -\s+1\fBAcknowledgments\fP\s-1 -.sp 2 -.na -.LP -The implementation of the Athena Widgets was the responsibility of -Ralph Swick, Ron Newman (Project Athena), -and Mark Ackerman (Project Athena). -Additional contributions to their implementation was made by: -.LP -.Ds -Rich Hyde (Digital WSL) -Terry Weissman (Digital WSL) -Mary Larson (Digital UEG) -Joel McCormack (Digital WSL) -Jeanne Rich (Digital WSL) -Charles Haynes (Digital WSL) -Loretta Guarino-Reid (Digital WSL) -.De -.LP -The contributors to the X10 toolkit also deserve much of the -credit for this work. -The Athena Widgets borrow heavily on the their counterparts in the X10 toolkit. -The design and implementation of the X10 toolkit were done by: -.LP -.Ds -Terry Weissman (Digital WSL) -Smokey Wallace (Digital WSL) -Phil Karlton (Digital WSL) -Charles Haynes (Digital WSL) -Ram Rao (Digital UEG) -Mary Larson (Digital UEG) -Mike Gancarz (Digital UEG) -Kathleen Langone (Digital UEG) -.De -.LP -Thanks go to Al Mento of Digital's UEG Documentation Group for -formatting and generally improving this document -and to Chris Peterson of Project Athena for testing the many versions -of the code and reviewing this document. -.LP -.sp -.Ds 0 -Ralph R. Swick -Digital Equipment Corporation -External Research Group -MIT Project Athena -.De -.bp 1 -.EH '\fBX Toolkit Athena Widgets\fP''\fBX11, Release 3+ DRAFT\fP' -.OH '\fBX Toolkit Athena Widgets\fP''\fBX11, Release 3+ DRAFT\fP' -.EF ''\fB % \fP'' -.OF ''\fB % \fP'' diff --git a/doc/xorg-docs/specs/Xaw/Xtk.widgets b/doc/xorg-docs/specs/Xaw/Xtk.widgets deleted file mode 100644 index d33c240cf..000000000 --- a/doc/xorg-docs/specs/Xaw/Xtk.widgets +++ /dev/null @@ -1,5960 +0,0 @@ -\& -.sp 1 -.ce 3 -\s+1\fBChapter 1\fP\s-1 - -\s+1\fBAthena Widgets and The Intrinsics\fP\s-1 -.sp 2 -.nr H1 1 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.LP -.XS -Chapter 1 \- Athena Widgets and The Intrinsics -.XE -The Athena widget set and the \*(xI make up the \*(tk. -In the \*(tk, -a widget is the combination of an X window or subwindow -and its associated input and output semantics. -The Athena widgets provide the base functionality necessary to build -a wide variety of application environments. -Because the \*(xI mask implementation details from the widget -and application programmer, -the Athena widgets and the application environments built with them are -fully compatible with the other widget sets built with the \*(xI. -For information about the \*(xI, -see the \fI\*(xT\fP. -.LP -The Athena widget set is a library package layered on top of the \*(xI -and Xlib. -This layer extends the basic abstractions provided by X -and provides the next layer of functionality primarily by supplying -a cohesive set of sample widgets. -.LP -To the extent possible, -the \*(tk is policy free. -The application environment, not the \*(tk, defines, implements, and enforces: -.IP \(bu 5 -Policy -.IP \(bu 5 -Consistency -.IP \(bu 5 -Style -.LP -Each individual widget implementation defines its own policy. -The \*(tk design allows for but does not necessarily encourage -the free mixing of radically differing widget implementations. -.NH 2 -Introduction to the \*(tk Library -.LP -.XS -\*(SN Introduction to the \*(tk Library -.XE -The \*(tk library provides tools that simplify the design of -application user interfaces in the X Window System programming environment. -It assists application programmers by providing a set of common -underlying user-interface functions. -It also lets widget programmers modify existing widgets -or add new widgets. -By using the \*(tk library in their applications, -programmers present a similar user interface across -applications to all workstation users. -.LP -The \*(tk consists of: -.IP \(bu 5 -A set of \*(xI functions for building widgets -.IP \(bu 5 -An architectural model for constructing widgets -.IP \(bu 5 -A sample interface (widget set) for programming -.LP -While the majority of the \*(xI functions are intended -for the widget programmer, -a subset of the \*(xI functions are to be used by application programmers -(see \fI\*(xT\fP). -The architectural model lets the widget programmer design new widgets -by using the \*(xI and by combining other widgets. -The application interface layers built on top of the \*(tk include a -coordinated set of widgets and composition policies. -Some of these widgets and policies are specific to an application domain, -and others are common across a number of application domains. -.LP -The \*(tk also can implement one or more application interface layers to: -.IP \(bu 5 -Verify the toolkit architecture -.IP \(bu 5 -Provide a base set of widgets and composition policies that -can be incorporated in other application interface layers -.IP \(bu 5 -Make the \*(tk immediately usable by those application -programmers who find that a supplied application interface layer -meets their needs -.LP -The remainder of this chapter discusses the \*(tk: -.IP \(bu 5 -Terminology -.IP \(bu 5 -Model -.IP \(bu 5 -Design principles and philosophy -.LE -.NH 2 -Terminology -.LP -.XS -\*(SN Terminology -.XE -.LP -In addition to the terms already defined for X programming (see \fI\*(xL\fP), -the following terms are specific to the \*(xI and used throughout this book. -.LP -\fBApplication programmer\fP -.IN "Application programmer" "" "@DEF@" -.IP -A programmer who uses the \*(tk to produce an application user interface. -.LP -.PN Child -.IP -A widget that is contained within another ("parent") widget. -.LP -\fBClass\fP -.IN "Class" "" "@DEF@" -.IP -The general group to which a specific object belongs. -.LP -\fBClient\fP -.IN "Client" "" "@DEF@" -.IP -A function that uses a widget in an application or for composing -other widgets. -.LP -.PN "Full\ name" -.IP -The name of a widget instance appended to the full name of its parent. -.LP -\fBInstance\fP -.IN "Instance" "" "@DEF@" -.IP -A specific widget object as opposed to a general widget class. -.LP -\fBMethod\fP -.IN "Method" "" "@DEF@" -.IP -The functions or procedures that a widget class implements. -.LP -\fBName\fP -.IN "Name" "" "@DEF@" -.IP -The name that is specific to an instance of a widget for a given client. -.LP -\fBObject\fP -.IN "Object" "" "@DEF@" -.IP -A software data abstraction consisting of private data and private and public -functions that operate on the private data. -Users of the abstraction can interact with the object only through calls -to the object's public functions. -In the \*(tk, -some of the object's public functions are called directly by the application, -while others are called indirectly when the application calls the common -\*(xI functions. -In general, if a function is common to all widgets, -an application uses a single \*(xI function to invoke the function for all -types of widgets. -If a function is unique to a single widget type, -the widget exports the function as another ``Xt'' function. -.LP -.PN Parent -.IP -A widget that contains at least one other ("child") widget. -A parent widget is also known as a composite widget. -.LP -\fBResource\fP -.IN "Resource" "" "@DEF@" -.IP -A named piece of data in a widget that can be set by a client, -by an application, or by user defaults. -.LP -.PN Superclass -.IP -A larger class of which a specific class is a member. -All members of a class are also members of the superclass. -.LP -\fBUser\fP -.IN "User" "" "@DEF@" -.IP -A person interacting with a workstation. -.LP -\fBWidget\fP -.IN "Widget" "" "@DEF@" -.IP -An object providing a user-interface abstraction (for example, a Scrollbar -widget). -.LP -\fBWidget class\fP -.IN "Widget class" "" "@DEF@" -.IP -The general group to which a specific widget belongs, -otherwise known as the type of the widget. -.LP -\fBWidget programmer\fP -.IN "Widget programmer" "" "@DEF@" -.IP -A programmer who adds new widgets to the \*(tk. -.NH 2 -Underlying Model -.LP -.XS -\*(SN Underlying Model -.XE -The underlying architectural model is based on the following premises: -.KS -.IP "Widgets are X windows" -.IP -Every user-interface widget is contained in a unique X window. -The X window ID for a widget is readily available from the widget ID, -so standard Xlib window manipulation procedures can operate on -widgets. -.KE -.KS -.IP "Information hiding" -.IP -The data for every widget is private to the widget and its subclasses. -That is, the data is neither directly accessible -nor visible outside of the module implementing the widget. -All program interaction with the widget is performed by a set of operations -(methods) that are defined for the widget. -.KE -.KS -.IP "Widget semantics and widget layout geometry" -.IP -Widget semantics are clearly separated from widget layout -geometry. -Widgets are concerned with implementing specific user-interface -semantics. -They have little control over issues such as their size or -placement relative to other widget peers. -Mechanisms are provided for associating geometric managers with widgets -and for widgets to make suggestions about their own geometry. -.KE -.NH 2 -Design Principles and Philosophy -.LP -.XS -\*(SN Design Principles and Philosophy -.XE -The \*(tk follows two design principles throughout, -which cover languages and language bindings as well as widget IDs. -.NH 3 -Languages and Language Bindings -.LP -The \*(tk facilitates access from objective languages. -However, the \*(tk library is conveniently usable by -application programs written in nonobjective languages. -Procedural interface guidelines are required when the -\*(tk is used with nonobjective languages. -.LP -The guidelines for the procedural interfaces are: -.IP \(bu 5 -Strings are passed as null-terminated character arrays. -.IP \(bu 5 -Most other arrays are passed using two parameters: a size and a pointer to -the first element. -.IP \(bu 5 -Most numeric arguments are passed by value. -.IP \(bu 5 -Structures as arguments are avoided, -unless a method for building them is provided for languages without pointers. -Pointers embedded in structures are allowed, -but they should be avoided if an equivalent alternative is available. -.IP \(bu 5 -Pointers are not recommended as return arguments, unless they will never -have to be dereferenced by the caller. -If they need to be dereferenced, -the caller should allocate storage and pass the address to the procedure -to fill in. -.IP \(bu 5 -Procedures can be passed as parameters. -.IP \(bu 5 -The ownership of dynamically allocated storage is determined on a -case-by-case basis. -The application is also permitted to replace the standard -memory allocation and freeing routines used by the library at build time. -.NH 3 -Widget IDs -.LP -All references to widgets use a unique identifier that is known as the widget ID. -The widget ID is returned to the client by the -.PN XtCreateWidget -function. -From an application programmer's perspective, -a widget ID is an opaque data type; -no particular interpretation can be assigned to it. -Given a widget ID, -you can retrieve the corresponding X window ID, the -.PN Display -and -.PN Screen -structures, and other information by using \*(xI functions. -.LP -From a widget programmer's perspective, -the widget ID actually is a pointer to a data structure -known as the widget instance record. -Several parts of the data structure are common to all widget types, -while other parts are unique to a particular widget type. -The widget's private data that is associated with a particular widget instance -normally is included directly in the widget instance record. -.bp -\& -.sp 1 -.ce 3 -\s+1\fBChapter 2\fP\s-1 - -\s+1\fBUsing Widgets\fP\s-1 -.sp 2 -.nr H1 2 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.LP -.XS -Chapter 2 \- Using Widgets -.XE -Widgets serve as the primary tools for building a user -interface or application environment. -The widget set consists of primitive widgets (for example, a command button) -and composite widgets (for example, a Dialog widget). -.LP -The remaining chapters of this guide explain the widgets and the geometry -managers that work together to provide a set of user-interface components. -These user-interface components serve as a default interface for -application programmers who do not want to implement their own widgets. -In addition, they serve as examples or a starting point -for those widget programmers who, using the \*(xI mechanisms, -want to implement alternative application programming interfaces. -.LP -This chapter discusses the common features of the \*(tk widgets. -.NH 2 -Initializing the Toolkit -.LP -.XS -\*(SN Initializing the Toolkit -.XE -You must invoke the toolkit initialization function -.PN XtInitialize -before invoking any other toolkit routines. -.PN XtInitialize -opens the X server connection, -parses standard parts of the command line, -and creates an initial widget that is to serve as the root of -a tree of widgets that will be created by this application. -.IN "XtInitialize" "" "@DEF@" -.FD 0 -Widget XtInitialize(\fIshell_name\fP, \fIapplication_class\fP, \fIoptions\fP, \ -\fInum_options\fP, \fIargc\fP, \fIargv\fP) -.br - String \fIshell_name\fP; -.br - String \fIapplication_class\fP; -.br - XrmOptionDescRec \fIoptions\fP[]; -.br - Cardinal \fInum_options\fP; -.br - Cardinal *\fIargc\fP; -.br - String \fIargv\fP[]; -.FN -.IP \fIshell_name\fP 1i -Specifies the name of the application shell widget instance, -which usually is something generic like ``main''. -.IP \fIapplication_class\ \ \ \fP 1i -Specifies the class name of this application, -which usually is the generic name for all instances of this application. -By convention, the class name is formed by reversing the case of the -application's first significant letter. -For example, -an application named ``xterm'' would have a class name of ``XTerm''. -.IP \fIoptions\fP 1i -Specifies how to parse the command line for any application-specific resources. -The options argument is passed as a parameter to -.PN XrmParseCommand . -For further information, -see \fI\*(xL\fP. -.IP \fInum_options\fP 1i -Specifies the number of entries in the options list. -.IP \fIargc\fP 1i -Specifies a pointer to the number of command line parameters. -.IP \fIargv\fP 1i -Specifies the command line parameters. -.LP -For further information about this function, -see the \fI\*(xI\fP. -.NH 2 -Creating a Widget -.LP -.XS -\*(SN Creating a Widget -.XE -Creating a widget is a three-step process. -First, the widget instance is allocated, -and various instance-specific attributes are set by using -.PN XtCreateWidget . -Second, the widget's parent is informed of the new child by using -.PN XtManageChild . -Finally, X windows are created for the parent and all its children by using -.PN XtRealizeWidget -and specifying the top-most widget. -The first two steps can be combined by using -.PN XtCreateManagedWidget . -In addition, -.PN XtRealizeWidget -is automatically called when the child becomes managed if the parent -is already realized. -.LP -To allocate and initialize a widget, use -.PN XtCreateWidget . -.IN "XtCreateWidget" "" "@DEF@" -.FD 0 -Widget XtCreateWidget(\fIname\fP, \fIwidget_class\fP, \fIparent\fP, \ -\fIargs\fP, \fInum_args\fP) -.br - String \fIname\fP; -.br - WidgetClass \fIwidget_class\fP; -.br - Widget \fIparent\fP; -.br - ArgList \fIargs\fP; -.br - Cardinal \fInum_args\fP; -.FN -.IP \fIname\fP 1i -Specifies the instance name for the created widget that is used for retrieving -widget resources. -.IP \fIwidget_class\fP 1i -Specifies the widget class pointer for the created widget. -.IP \fIparent\fP 1i -Specifies the parent widget ID. -.IP \fIargs\fP 1i -Specifies the argument list. -The argument list is a variable-length list composed of name -and value pairs that contain information pertaining to the specific widget -instance being created. -For further information, -see Section 2.7.2. -.IP \fInum_args\fP 1i -Specifies the number of arguments in the argument list. -When the num_args is zero, the argument list is never referenced. -.LP -When a widget instance is successfully created, -the widget identifier is returned to the application. -If an error is encountered, -the -.PN XtError -routine is invoked to inform the user of the error. -.LP -For further information, -see the \fI\*(xI\fP. -.NH 2 -Common Arguments in the Widget Argument List -.LP -Although a widget can have unique arguments that it understands, -all widgets have common arguments that provide some regularity of operation. -The common arguments allow arbitrary widgets to be -managed by higher-level components without regards to the individual -widget type. -All widgets ignore any argument that they do not understand. -.LP -The following resources are retrieved from the argument list -or from the resource database by all \*(tk widgets: -.ps 9 -.nr PS 9 -.vs 11 -.nr VS 11 -.TS H -lw(1.5i) lw(1i) lw(1i) lw(2i). -_ -.sp 3p -.TB -Name Type Default Description -.sp 3p -_ -.TH -.R -.sp 3p -XtNbackground Pixel XtDefaultBackground Window background color -XtNbackgroundPixmap Pixmap None Window background pixmap -XtNborderColor Pixel XtDefaultForeground Window border color -XtNborderPixmap Pixmap None Window border pixmap -XtNborderWidth Dimension 1 Width of the border in pixels -T{ -XtNdestroyCallback -T} T{ -XtCallbackList -T} T{ -NULL -T} T{ -Callback for -.PN XtDestroyWidget -T} -XtNheight Dimension Widget dependent Height of the widget -T{ -XtNmappedWhenManaged -T} T{ -Boolean -T} T{ -True -T} T{ -Whether -.PN XtMapWidget -is automatic -T} -XtNsensitive Boolean True Whether widget should receive input -XtNtranslations TranslationTable None Event-to-action translations -XtNwidth Dimension Widget dependent Width of the widget -XtNx Position 0 x coordinate within parent -XtNy Position 0 y coordinate within parent -.sp 3p -_ -.TE -.ps 11 -.nr PS 11 -.vs 13 -.nr VS 13 -.LP -The following additional resources are retrieved from the argument list -or from the resource database by many \*(tk widgets: -.ps 9 -.nr PS 9 -.vs 11 -.nr VS 11 -.TS H -lw(1.5i) lw(1i) lw(1i) lw(2i). -_ -.sp 3p -.TB -Name Type Default Description -.sp 3p -_ -.TH -.R -.sp 3p -XtNcallback XtCallbackList NULL Callback functions and client data -XtNcursor Cursor None Pointer cursor -XtNforeground Pixel XtDefaultForeground Foreground color -.sp 3p -_ -.TE -.ps 11 -.nr PS 11 -.vs 13 -.nr VS 13 -.LP -The value for the XtNcursor resource can be specified in the resource -database as a string, -which can be specified as one of the following: -.IP \(bu 5 -A standard X cursor name from -.Pn < X11/cursorfont.h > -.IP \(bu 5 -FONT font-name glyph-index [[ font-name ] glyph-index ] -.IP \(bu 5 -A relative or absolute file name -.LP -The first font and glyph specify the cursor source pixmap. -The second font and glyph specify the cursor mask pixmap. -The mask font defaults to the source font, -and the mask glyph index defaults to the source glyph index. -.LP -If a relative or absolute file name is specified, -that file is used to create the source pixmap. -Then the string "Mask" is appended to locate the cursor mask pixmap. -If the "Mask" file does not exist, -the suffix "msk" is tried. -If "msk" fails, -no cursor mask will be used. -If a relative file name is used, -the directory specified by the resource name -.PN bitmapFilePath -or class -.PN BitmapFilePath -is added to the beginning of the file name. -If the -.PN bitmapFilePath -resource is not defined, -the default directory on a UNIX-based system is -.PN /usr/include/X11/bitmaps . -.NH 2 -Realizing a Widget -.LP -.XS -\*(SN Realizing a Widget -.XE -The -.PN XtRealizeWidget -function performs two tasks: -.IP \(bu 5 -Creates an X window for the widget and, -if it is a composite widget, for each of its managed children. -.IP \(bu 5 -Maps each window onto the screen. -.IN "XtRealizeWidget" "" "@DEF@" -.FD 0 -void XtRealizeWidget(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. -.LP -For further information about this function, -see the \fI\*(xT\fP. -.NH 2 -Standard Widget Manipulation Functions -.LP -.XS -\*(SN Standard Widget Manipulation Functions -.XE -After a widget has been created, -a client can interact with that widget by calling either of the following: -.IP \(bu 5 -One of the standard widget manipulation routines that -provide functions that all widgets support -.IP \(bu 5 -A widget class-specific manipulation routine -.LP -The \*(tk provides generic routines to provide the -application programmer access to a set of standard widget functions. -These routines let an application or composite widget manipulate -widgets without requiring explicit knowledge of the widget type. -The standard widget manipulation functions let you: -.IP \(bu 5 -Control the location, size and mapping of widget windows -.IP \(bu 5 -Destroy a widget instance -.IP \(bu 5 -Obtain an argument value -.IP \(bu 5 -Set an argument value -.NH 3 -Mapping Widgets -.LP -By default, -widget windows automatically are mapped (made viewable) by -.PN XtRealizeWidget . -This behavior can be changed by using -.PN XtSetMappedWhenManaged , -and it then is the client's responsibility to use the -.PN XtMapWidget -function to make the widget viewable. -.IN "XtSetMappedWhenManaged" "" @DEF@" -.FD 0 -void XtSetMappedWhenManaged(\fIw\fP, \fImap_when_managed\fP) -.br - Widget \fIw\fP; -.br - Boolean \fImap_when_managed\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. -.IP \fImap_when_managed\fP 1i -Specifies the new value. -If map_when_managed is -.PN True , -the widget is mapped automatically when it is realized. -If map_when_managed is -.PN False , -the client must call -.PN XtMapWidget -or make a second call to -.PN XtSetMappedWhenManaged -to cause the child window to be mapped. -.LP -.sp -The definition for -.PN XtMapWidget -is: -.IN "XtMapWidget" "" "@DEF@" -.FD 0 -XtMapWidget(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. -.LP -When you create several children in sequence for a common parent -after it has been realized, -it is generally more efficient to construct a list of children as -they are created and use -.PN XtManageChildren -to inform their parent of them all at once, -instead of causing each child to be managed separately. -By managing a list of children at one time, -the parent can avoid wasteful duplication of geometry processing -and the associated "screen flash". -.IN "XtManageChildren" "" "@DEF@" -.FD 0 -void XtManageChildren(\fIchildren\fP, \fInum_children\fP) -.br - WidgetList \fIchildren\fP; -.br - Cardinal \fInum_children\fP; -.FN -.IP \fIchildren\fP 1i -Specifies a list of children to add. -.IP \fInum_children\fP 1i -Specifies the number of children to add. -.LP -If the parent is already visible on the screen, -it is especially important to batch updates so that the minimum amount -of visible window reconfiguration is performed. -.LP -For further information about these functions, -see the \fI\*(xI\fP. -.NH 3 -Destroying Widgets -.LP -To destroy a widget instance of any type, use -.PN XtDestroyWidget . -.IN "XtDestroyWidget" "" "@DEF@" -.FD 0 -void XtDestroyWidget(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. -.LP -.PN XtDestroyWidget -destroys the widget and recursively destroys any children that it may have, -including the windows created by its children. -After calling -.PN XtDestroyWidget , -no further references should be made to the widget or to the widget IDs -of any children that the destroyed widget may have had. -.NH 3 -Retrieving Widget Resource Values -.LP -To retrieve the current value of a resource attribute associated -with a widget instance, use -.PN XtGetValues . -.IN "XtGetValues" "" "@DEF@" -.FD 0 -void XtGetValues(\fIw\fP, \fIargs\fP, \fInum_args\fP) -.br - Widget \fIw\fP; -.br - ArgList \fIargs\fP; -.br - Cardinal \fInum_args\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. -.IP \fIargs\fP 1i -Specifies a variable-length argument list of name and address -pairs that contain the resource name and the address into which the resource value is stored. -.IP \fInum_args\fP 1i -Specifies the number of arguments in the argument list. -.LP -The arguments and values passed in the argument list are dependent on the widget. -Note that the caller is responsible for allocating space into which the returned -resource value is copied; the -.PN ArgList -contains a pointer to this storage. -The caller must allocate storage of the type as represented in the widget. -For example, x and y must be allocated as Position and so on. -For further information, -see the \fI\*(xT\fP. -.NH 3 -Modifying Widget Resource Values -.LP -To modify the current value of a resource attribute associated -with a widget instance, use -.PN XtSetValues . -.IN "XtSetValues" "" "@DEF@" -.FD 0 -void XtSetValues(\fIw\fP, \fIargs\fP, \fInum_args\fP) -.br - Widget \fIw\fP; -.br - ArgList \fIargs\fP; -.br - Cardinal \fInum_args\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. -.IP \fIargs\fP 1i -Specifies a variable-length argument list of name and value -pairs that contain the arguments to be modified and their new values. -.IP \fInum_args\fP 1i -Specifies the number of arguments in the argument list. -.LP -The arguments and values passed in the argument list depend on -the widget being modified. -Some widgets may not allow certain resources to be modified -after the widget instance has been created or realized. -No notification is given if any part of a -.PN XtSetValues -request is ignored. -.LP -For further information about these functions, -see the \fI\*(xI\fP. -.NT -The argument list entry for -.PN XtGetValues -specifies the address to which the caller wants the value copied. -The argument list entry for -.PN XtSetValues , -however, contains the new value itself if the size of value is less -than sizeof(XtArgVal) (architecture dependent, but at least sizeof(long)); -otherwise, it is a pointer to the value. -String resources are always passed as pointers, regardless of the -length of the string. -.NE -.NH 2 -Using the Client Callback Interface -.LP -.XS -\*(SN Using the Client Callback Interface -.XE -Widgets communicate changes in their state to their clients -by means of a callback facility. -The format for a client's callback handler is: -.IN "CallbackProc" "" "@DEF@" -.FD 0 -void \fICallbackProc\fP(\fIw\fP, \fIclient_data\fP, \fIcall_data\fP) -.br - Widget \fIw\fP; -.br - caddr_t \fIclient_data\fP; -.br - caddr_t \fIcall_data\fP; -.FN -.IP \fIw\fP 1i -Specifies widget for which the callback is registered. -.IP \fIclient_data\fP 1i -Specifies arbitrary client-supplied data that the widget should pass back -to the client when the widget executes the client's callback procedure. -This is a way for the client registering the callback to also register -client-specific data: -a pointer to additional information about the widget, -a reason for invoking the callback, and so on. -It is perfectly normal to have client_data of NULL -if all necessary information is in the widget. -This field is also frequently known as the \fIclosure\fP. -.IP \fIcall_data\fP 1i -Specifies any callback-specific data the widget wants to pass to the client. -For example, when Scrollbar executes its jumpProc callback list, -it passes the current position of the thumb in the call_data argument. -.LP -Callbacks can be registered with widgets in one of two ways. -When the widget is created, -a pointer to a list of callback procedure and data pairs can be passed in the -argument list to -.PN XtCreateWidget . -The list is of type -.PN XtCallbackList : -.IN "XtCallbackProc" -.IN "XtCallbackList" "" "@DEF@" -.LP -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - XtCallbackProc callback; - caddr_t closure; -} XtCallbackRec, *XtCallbackList; -.De -.LP -The callback list must be allocated and initialized before calling -.PN XtCreateWidget . -The end of the list is identified by an entry containing NULL in -callback and closure. -Once the widget is created, -the client can change or de-allocate this list; -The widget itself makes no further reference to it. -The closure field contains the client_data passed to the callback -when the callback list is executed. -.LP -The second method for registering callbacks is to use -.PN XtAddCallback -after the widget has been created. -.IN "XtAddCallback" "" "@DEF@" -.FD 0 -void XtAddCallback(\fIw\fP, \fIcallback_name, \fP\fIcallback\fP, \ -\fIclient_data\fP) -.br - Widget \fIw\fP; -.br - String \fIcallback_name\fP; -.br - XtCallbackProc \fIcallback\fP; -.br - caddr_t \fIclient_data\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget to add the callback to. -.IP \fIcallback_name\fP 1i -Specifies the callback list within the widget to append to. -.IP \fIcallback\fP 1i -Specifies the callback procedure to add. -.IP \fIclient_data\fP 1i -Specifies the data to be passed to the callback when it is invoked. -.LP -.PN XtAddCallback -adds the specified callback to the list for the named widget. -.LP -All widgets provide a callback list named -.PN XtNdestroyCallback -where clients can register procedures that are to be executed when the widget -is destroyed. -The destroy callbacks are executed when the widget or an ancestor is destroyed. -The call_data argument is unused for destroy callbacks. -.LP -The \*(tk \*(xI provide additional functions for further manipulating -a callback list. -For information about these functions, see -.PN XtCallCallbacks , -.PN XtRemoveCallback , -.PN XtRemoveCallbacks , -and -.PN XtRemoveAllCallbacks -in the \fI\*(xT\fP. -.NH 2 -Programming Considerations -.LP -.XS -\*(SN Programming Considerations -.XE -This section provides some guidelines to set up an application -program that uses the \*(tk. -This section discusses: -.IP \(bu 5 -Writing applications -.IP \(bu 5 -Creating argument lists -.NH 3 -Writing Applications -.LP -When writing an application that uses the toolkit, -you should make sure that your application performs the following: -.IP 1. 5 -Include -.Pn < X11/Intrinsic.h > -in your application programs. -This header file automatically includes -.Pn < X11/Xlib.h >, -so all Xlib functions also are defined. -.IP 2. 5 -Include the widget-specific header files for each widget type -that you need to use. -For example, -.Pn < X11/Label.h > -and -.Pn < X11/Command.h >. -.IP 3. 5 -Call the -.PN XtInitialize -function before invoking any other toolkit or Xlib functions. -For further information, -see Section 2.1 and the \fI\*(xT\fP. -.IP 4. 5 -To pass attributes to the widget creation routines -that will over-ride any site or user customizations, -set up argument lists. -In this document, -a list of valid argument names that start with -.PN XtN -is provided in the discussion of each widget. -.IP -For further information, -see Section 2.7.2. -.IP 5. 5 -When the argument list is set up, -create the widget by using the -.PN XtCreateWidget -function. -For further information, -see Section 2.2 and the \fI\*(xT\fP. -.IP 6. 5 -If the widget has any callback routines, which are usually defined by the -.PN XtNcallback -argument or the -.PN XtAddCallback -function, declare these routines within the application. -.IP 7. 5 -After a widget has been created, use -.PN XtManageChild -to manage it. -If there is no manipulation of the widget between -.PN XtCreateWidget -and -.PN XtManageChild, -you can do this in a single step by using -.PN XtCreateManagedWidget . -For further information about these functions, -see the \fI\*(xI\fP. -.IP 8. 5 -After creating the initial widget hierarchy, windows must be created -for each widget by calling -.PN XtRealizeWidget -on the top level widget. -.IP 9. 5 -Most applications now sit in a loop processing events using -.PN XtMainLoop , -for example: -.IP -.Ds 0 -XtCreateManagedWidget(\fIname\fP, \fIclass\fP, \fIparent\fP, \fIargs\fP, \fInum_args\fP); -XtRealizeWidget(\fIparent\fP); -XtMainLoop(\|); -.De -.IP -For information about this function, -see the \fI\*(xT\fP. -.IP 10. 5 -Link your application with -.PN libXaw.a -(the Athena widgets), -.PN libXmu.a -(miscellaneous utilities), -.PN libXt.a -(the \*(tk \*(xI), and -.PN libX11.a -(the core X library). -The following provides a sample command line: -.IP -.Ds 0 -cc -o \fIapplication\fP \fIapplication\fP.c \-lXaw \-lXmu \-lXt \-lX11 -.De -.NH 3 -Creating Argument Lists -.LP -To set up an argument list for the inline specification of widget attributes, -you can use one of the four approaches discussed in this section. -You should use whichever approach fits the needs of the application -and you are most comfortable with. -In general, -argument lists should be kept as short as possible to allow widget attributes -to be specified through the resource database. -Whenever a client inserts a specific attribute value in an argument list, -the user is prevented from customizing the behavior of the widget. -Resource names in the resource database, by convention, -correspond to their symbolic names that are used in argument list without the -.PN XtN -prefix. -For example, the resource name for -.PN XtNforeground -is ``foreground''. -For further information, -see the \fI\*(xI\fP. -.LP -The -.PN Arg -structure contains: -.IN "ArgList" "" "@DEF@" -.IN "Arg" "" "@DEF@" -.LP -.Ds 0 -.TA .5i 1.5i -.ta .5i 1.5i -typedef struct { - String name; - XtArgVal value; -} Arg, *ArgList; -.De -.LP -The first approach lets you statically initialize the argument list. -For example: -.LP -.Ds 0 -.TA .5i -.ta .5i -static Arg arglist[] = { - {XtNwidth, (XtArgVal) 400}, - {XtNheight, (XtArgVal) 300}, -}; -.De -.LP -This approach makes it easy to add or delete new -elements. -The -.PN XtNumber -macro can be used to compute the number of elements in the argument list, -thus preventing simple programming errors. -The following provides an example: -.LP -.Ds -XtCreateWidget(\fIname\fP, \fIclass\fP, \fIparent\fP, \fIarglist\fP, XtNumber(\fIarglist\fP)); -.De -.LP -The second approach lets you use the -.PN XtSetArg -macro. -For example: -.LP -.Ds 0 -.TA .5i -.ta .5i -Arg arglist[10]; -XtSetArg(arglist[1], XtNwidth, 400); -XtSetArg(arglist[2], XtNheight, 300); -.De -.LP -To make it easier to insert and delete entries, -you also can use a variable index, -as in this example: -.LP -.Ds 0 -.TA .5i -.ta .5i -Arg arglist[10]; -Cardinal i=0; -XtSetArg(arglist[i], XtNwidth, 400); i++; -XtSetArg(arglist[i], XtNheight, 300); i++; -.De -.LP -The i variable can then be used as the argument list count in the widget -create function. -In this example, -.PN XtNumber -would return 10, not 2, and therefore is not useful. -.NT -You should not use auto-increment or auto-decrement -within the first argument to -.PN XtSetArg . -As it is currently implemented, -.PN XtSetArg -is a macro that dereferences the first argument twice. -.NE -.LP -The third approach lets you individually set the elements of the argument list array, -one piece at a time. -For example: -.LP -.Ds 0 -.TA .5i -.ta .5i -Arg arglist[10]; -arglist[0].name = XtNwidth; -arglist[0].value = (XtArgVal) 400; -arglist[1].name = XtNheight; -arglist[1].value = (XtArgVal) 300; -.De -.LP -Note that in this example, as in the previous example, -.PN XtNumber -would return 10, not 2, and therefore is not useful. -.LP -The fourth approach lets you use a mixture of the first and third approaches: -you can statically define the argument list but modify some entries at runtime. -For example: -.LP -.Ds 0 -.TA .5i -.ta .5i -static Arg arglist[] = { - {XtNwidth, (XtArgVal) 400}, - {XtNheight, (XtArgVal) NULL}, -}; -arglist[1].value = (XtArgVal) 300; -.De -.LP -In this example, -.PN XtNumber -can be used, as in the first approach, for easier code maintenance. -.NH 3 -Sample Program -.LP -The following program creates one command button that, when pressed, -causes the program to exit. -This example is a complete program that illustrates: -.IP \(bu 5 -Toolkit initialization -.IP \(bu 5 -Optional command-line arguments -.IP \(bu 5 -Widget creation -.IP \(bu 5 -Callback routines -.LP -.bp -.ps 9 -.nr PS 9 -.Ds 0 -.TA .5i 2i -.ta .5i 2i -#include -#include -#include -.sp 6p -static XrmOptionDescRec options[] = { -{"\-label", "*button.label", XrmoptionSepArg, NULL} -}; -.sp 6p -Syntax(call) - char *call; -{ - fprintf(stderr, "Usage: %s\\n", call); -} -.sp 6p -void Activate(w, client_data, call_data) - Widget w; - caddr_t client_data; /* unused */ - caddr_t call_data; /* unused */ -{ - printf("button was activated.\\n"); - exit(0); -} -.sp 6p -void main(argc, argv) - unsigned int argc; - char **argv; -{ - Widget toplevel; - static XtCallbackRec callbacks[] = { - \ \ \ \ { Activate, NULL }, - \ \ \ \ { NULL, NULL }, - }; -.sp 6p - static Arg args[] = { - \ \ { XtNcallback, (XtArgVal)callbacks }, - }; -.sp 6p - toplevel = XtInitialize("main", "Demo", options, XtNumber(options), &argc, argv ); - if (argc != 1) Syntax(argv[0]); -.sp 6p - XtCreateManagedWidget("button",commandWidgetClass,toplevel,args,XtNumber(args)); -.sp 6p - XtRealizeWidget(toplevel); - XtMainLoop(\|); -} -.De -.ps 11 -.nr PS 11 -.bp -\& -.sp 1 -.ce 3 -\s+1\fBChapter 3\fP\s-1 - -\s+1\fBAthena Widget Set\fP\s-1 -.sp 2 -.nr H1 3 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.na -.LP -.XS -Chapter 3 - Athena Widget Set -.XE -.LP -This chapter describes the following Athena widgets: -.IP \(bu 5 -Command -.IP \(bu 5 -Label -.IP \(bu 5 -Text -.IP \(bu 5 -Scrollbar -.IP \(bu 5 -Viewport -.IP \(bu 5 -Box -.\".IP \(bu 5 -.\"MenuBox -.IP \(bu 5 -VPaned -.IP \(bu 5 -Form -.IP \(bu 5 -Dialog -.IP \(bu 5 -List -.IP \(bu 5 -Grip -.IP \(bu 5 -Toggle -.LE -.NH 2 -Command Widget -.LP -.XS -\*(SN Command Widget -.XE -.IN "Command widget" "" "@DEF@" -The Command widget is a rectangular button that contains a text or -pixmap label. -When the pointer cursor is on the button, -the button border is highlighted to indicate that the button is available -for selection. -Then, when a pointer button is pressed and released -the button is selected, -and the application's callback routine is invoked. -.LP -The class variable for the Command widget is -.PN commandWidgetClass . -.LP -When creating a Command widget instance, -the following resources are retrieved from the argument list -or from the resource database: -.IN "Command widget" "resources" -.ps 9 -.nr PS 9 -.vs 11 -.nr VS 11 -.TS H -lw(1.5i) lw(1i) lw(1i) lw(2i). -_ -.sp 3p -.TB -Name Type Default Description -.sp 3p -_ -.TH -.R -.sp 3p -XtNbackground Pixel XtDefaultBackground Window background color -XtNbackgroundPixmap Pixmap None Window background pixmap -T{ -XtNbitmap -T} T{ -Pixmap -T} T{ -None -T} T{ -Pixmap to display in place of the label -T} -XtNborderColor Pixel XtDefaultForeground Window border color -XtNborderPixmap Pixmap None Window border pixmap -XtNborderWidth Dimension 1 Width of button border -XtNcallback XtCallbackList NULL Callback for button select -XtNcursor Cursor None Pointer cursor -T{ -XtNdestroyCallback -T} T{ -XtCallbackList -T} T{ -NULL -T} T{ -Callbacks for -.PN XtDestroyWidget -T} -XtNfont XFontStruct* XtDefaultFont Label font -XtNforeground Pixel XtDefaultForeground Foreground color -XtNheight Dimension Text height Button height -T{ -XtNhighlightThickness -T} T{ -Dimension -T} T{ -2 -T} T{ -Width of border to be highlighted -T} -XtNinsensitiveBorder Pixmap Gray Border when not sensitive -T{ -XtNinternalHeight -T} T{ -Dimension -T} T{ -2 -T} T{ -Internal border height for highlighting -T} -T{ -XtNinternalWidth -T} T{ -Dimension -T} T{ -4 -T} T{ -Internal border width for highlighting -T} -XtNjustify XtJustify XtJustifyCenter Type of text alignment -XtNlabel String Button name Button label -T{ -XtNmappedWhenManaged -T} T{ -Boolean -T} T{ -True -T} T{ -Whether -.PN XtMapWidget -is automatic -T} -XtNresize Boolean True Whether to auto-resize in SetValues -XtNsensitive Boolean True Whether widget receives input -XtNtranslations TranslationTable see below Event-to-action translations -XtNwidth Dimension Text width Button width -XtNx Position 0 x coordinate -XtNy Position 0 y coordinate -.sp 3p -_ -.TE -.ps 11 -.nr PS 11 -.vs 13 -.nr VS 13 -.LP -The new resources associated with the Command widget are: -.TS -lw(1.5i) lw(4i). -T{ -.PN XtNbitmap -T} T{ -Specifies a bitmap to display in place of the text label. -See the description of this resource in the Label widget for -further details. -T} -.sp 6p -T{ -.PN XtNheight -T} T{ -Specifies the height of the Command widget. -The default value is the minimum height that will contain: -.br -XtNinternalheight + height of XtNlabel + XtNinternalHeight -.br -If the specified height is larger than the minimum, -the label string is centered vertically. -T} -.sp 6p -T{ -.PN XtNinternalHeight -T} T{ -Represents the distance in pixels between the top and bottom -of the label text or bitmap and the horizontal edges of the Command widget. -HighlightThickness can be larger or smaller than this value. -T} -.sp 6p -T{ -.PN XtNinternalWidth -T} T{ -Represents the distance in pixels between the ends of the label text -or bitmap and the vertical edges of the Command widget. -HighlightThickness can be larger or smaller than this value. -T} -.sp 6p -T{ -.PN XtNjustify -T} T{ -Specifies left, center, or right alignment of the label string -within the Command widget. -If it is specified within an -.PN ArgList , -one of the values -.PN XtJustifyLeft , -.PN XtJustifyCenter , -or -.PN XtJustifyRight -can be specified. -In a resource of type ``string'', -one of the values ``left'', ``center'', or ``right'' can be specified. -T} -.sp 6p -T{ -.PN XtNlabel -T} T{ -Specifies the text string that is to be displayed in the Command widget -if no bitmap is specified. -The default is the widget name of the Command widget. -T} -.sp 6p -T{ -.PN XtNresize -T} T{ -Specifies whether the Command widget should attempt to resize to its -preferred dimensions whenever -.PN XtSetValues -is called for it. -The default is -.PN True . -T} -.sp 6p -T{ -.PN XtNsensitive -T} T{ -If set to -.PN False , -the Command widget will change its window border to -.PN XtNinsensitiveBorder -and will stipple the label string. -T} -.sp 6p -T{ -.PN XtNwidth -T} T{ -Specifies the width of the Command widget. -The default value is the minimum width that will contain: -.br -XtNinternalWidth + width of XtNlabel + XtNinternalWidth -.br -If the width is larger or smaller than the minimum, -.PN XtNjustify -determines how the label string is aligned. -T} -.TE -.LP -The Command widget supports the following actions: -.IP \(bu 5 -Switching the button between the foreground and background -colors with \fBset\fP and \fBunset\fP -.IP \(bu 5 -Processing application callbacks with \fBnotify\fP -.IP \(bu 5 -Switching the internal border between highlighted -and unhighlighted states with \fBhighlight\fP and \fBunhighlight\fP -.LE -.LP -The following are the default translation bindings that are used -by the Command widget: -.LP -.Ds 0 -.TA .5i 2.25i -.ta .5i 2.25i - : highlight(\|) - : reset(\|) - : set(\|) - : notify(\|) unset(\|) -.De -.LP -With these bindings, the user can cancel the action before -releasing the button by moving the pointer out of the Command widget. -.NH 3 -Command Actions -.LP -The full list of actions supported by Command is: -.IP \fBhighlight\fP(\fIcondition\fP) 1.5i -Displays the internal highlight border in the color (\fBXtNforeground\fP -or -.PN XtNbackground ) -that contrasts with the interior color of the Command widget. -This action procedure takes one of the following conditions: WhenUnset and -Always. If no argument is passed then WhenUnset is assumed, this maintains -backwards compatibility. -.IP \fBunhighlight\fP(\|) 1.5i -Displays the internal highlight border in the color (\fBXtNforeground\fP -or -.PN XtNbackground ) -that matches the interior color of the Command widget. -.IP \fBset\fP(\|) 1.5i -Enters the "set" state, in which \fBnotify\fP is possible and displays the -interior of the button in the -.PN XtNforeground -color. The label is displayed -in the -.PN XtNbackground -color. -.IP \fBunset\fP(\|) 1.5i -Cancels the "set" state and displays the interior of the button in the -.PN XtNbackground -color. The label is displayed in the -.PN XtNforeground -color. -.IP \fBreset\fP(\|) 1.5i -Cancels any \fBset\fP or \fBhighlight\fP and displays the interior of the -button in the -.PN XtNbackground -color, with the label displayed in the -.PN XtNforeground -color. -.IP \fBnotify\fP(\|) 1.5i -Executes the -.PN XtNcallback -callback list if executed in the \fBset\fP state. The value of the call_data -argument is undefined. -.LP -.IN "Command widget" "creating" -.IN "Creating widgets" "Command" -To create a Command widget instance, use -.PN XtCreateWidget -and specify the class variable -.PN commandWidgetClass . -.LP -.IN "Command widget" "destroying" -.IN "Destroying widgets" "Command" -To destroy a Command widget instance, use -.PN XtDestroyWidget -and specify the widget ID of the button. -.LP -The Command widget supports two callback lists: -.PN XtNdestroyCallback -and -.PN XtNcallback . -The notify action executes the callbacks on the -.PN XtNcallback -list. -The call_data -argument is unused. -.NH 2 -Label Widget -.LP -.XS -\*(SN Label Widget -.XE -.IN "Label widget" "" "@DEF@" -A Label is an noneditable text string or pixmap that is displayed within a window. -The string is limited to one line and can be aligned to the left, right, -or center of its window. -A Label can neither be selected nor directly edited by the user. -.LP -The class variable for the Label widget is -.PN labelWidgetClass . -.LP -When creating a Label widget instance, -the following resources are retrieved from the argument list -or from the resource database: -.IN "Label widget" "resources" -.ps 9 -.nr PS 9 -.vs 11 -.nr VS 11 -.TS H -lw(1.5i) lw(1i) lw(1i) lw(2i). -_ -.sp 3p -.TB -Name Type Default Description -.sp 3p -_ -.TH -.R -.sp 3p -XtNbackground Pixel XtDefaultBackground Window background color -XtNbackgroundPixmap Pixmap None Window background pixmap -T{ -XtNbitmap -T} T{ -Pixmap -T} T{ -None -T} T{ -Pixmap to display in place of the label -T} -XtNborderColor Pixel XtDefaultForeground Window border color -XtNborderPixmap Pixmap None Window border pixmap -XtNborderWidth Dimension 1 Border width in pixels -XtNcursor Cursor None Pointer cursor -T{ -XtNdestroyCallback -T} T{ -XtCallbackList -T} T{ -NULL -T} T{ -Callbacks for -.PN XtDestroyWidget -T} -XtNfont XFontStruct* XtDefaultFont Label font -XtNforeground Pixel XtDefaultForeground Foreground color -XtNheight Dimension text height Height of widget -XtNinsensitiveBorder Pixmap Gray Border when not sensitive -XtNinternalHeight Dimension 2 See note -XtNinternalWidth Dimension 4 See note -XtNjustify XtJustify XtJustifyCenter Type of text alignment -XtNlabel String label name String to be displayed -T{ -XtNmappedWhenManaged -T} T{ -Boolean -T} T{ -True -T} T{ -Whether -.PN XtMapWidget -is automatic -T} -XtNresize Boolean True Whether to auto-resize in SetValues -XtNsensitive Boolean True Whether widget receives input -XtNwidth Dimension text width Width of widget -XtNx Position 0 x coordinate in pixels -XtNy Position 0 y coordinate in pixels -.sp 3p -_ -.TE -.ps 11 -.nr PS 11 -.vs 13 -.nr VS 13 -.LP -The new resources associated with Label are: -.TS -lw(1.5i) lw(4i). -T{ -.PN XtNbitmap -T} T{ -Specifies a bitmap to display in place of the text label. -The bitmap can be specified as a string in the resource data base. -The StringToPixmap converter will interpret the string as the name of a -file in the bitmap utility format that is to be loaded into a pixmap. -The string can be an absolute or a relative file name. -If a relative file name is used, -the directory specified by the resource name -.PN bitmapFilePath -or -the resource class -.PN BitmapFilePath -is add to the beginning of the -specified file name. -If the -.PN bitmapFilePath -resource is not defined, -the default directory on a UNIX-based system is -.PN /usr/include/X11/bitmaps . -T} -.sp 6p -T{ -.PN XtNheight -T} T{ -Specifies the height of the Label widget. -The default value is the minimum height that will contain: -.br -XtNinternalheight + height of XtNlabel + XtNinternalHeight -.br -If the specified height is larger than the minimum, -the label string is centered vertically. -T} -.sp 6p -T{ -.PN XtNinternalHeight -T} T{ -Represents the distance in pixels between the top and bottom -of the label text or bitmap and the horizontal edges of the Label widget. -T} -.sp 6p -T{ -.PN XtNinternalWidth -T} T{ -Represents the distance in pixels between the ends of the label text or bitmap -and the vertical edges of the Label widget. -T} -.sp 6p -T{ -.PN XtNjustify -T} T{ -Specifies left, center, or right alignment of the label string -within the Label widget. -If it is specified within an -.PN ArgList , -one of the values -.PN XtJustifyLeft , -.PN XtJustifyCenter , -or -.PN XtJustifyRight -can be specified. -In a resource of type ``string'', -one of the values ``left'', ``center'', or ``right'' can be specified. -T} -.sp 6p -T{ -.PN XtNlabel -T} T{ -Specifies the text string that is to be displayed in the button -if no bitmap is specified. -The default is the widget name of the Label widget. -T} -.sp 6p -T{ -.PN XtNresize -T} T{ -Specifies whether the Label widget should attempt to resize to its -preferred dimensions whenever -.PN XtSetValues -is called for it. -T} -.sp 6p -T{ -.PN XtNsensitive -T} T{ -If set to -.PN False , -the Label widget will change its window border to -.PN XtNinsensitiveBorder -and will stipple the label string. -T} -.sp 6p -T{ -.PN XtNwidth -T} T{ -Specifies the width of the Label widget. -The default value is the minimum width that will contain: -.br -XtNinternalWidth + width of XtNlabel + XtNinternalWidth -.br -If the width is larger or smaller than the minimum, -.PN XtNjustify -determines how the label string is aligned. -T} -.TE -.LP -.IN "Label widget" "creating" -.IN "Creating widgets" "Label" -To create a Label widget instance, use -.PN XtCreateWidget -and specify the class variable -.PN labelWidgetClass . -.LP -.IN "Label widget" "destroying" -.IN "Destroying widgets" "Label" -To destroy a Label widget instance, use -.PN XtDestroyWidget -and specify the widget ID of the label. -.LP -The Label widget supports only the -.PN XtNdestroyCallback -callback list. -.NH 2 -Text Widget -.LP -.XS -\*(SN Text Widget -.XE -.IN "Text widget" "" "@DEF@" -A Text widget is a window that provides a way for an application to display -one or more lines of text. -The displayed text can reside in a file on disk or in a string in memory. -An option also lets an application display a vertical Scrollbar -in the Text window, -letting the user scroll through the displayed text. -Other options allow an application to let the user modify the text -in the window. -.LP -The Text widget is divided into three parts: -.IP \(bu 5 -Source -.IP \(bu 5 -Sink -.IP \(bu 5 -Text widget -.LP -The idea is to separate the storage -of the text (source) from the painting of the text (sink). -The Text widget coordinates the sources and sinks. -Clients usually will use -.PN AsciiText -widgets that automatically create the source and sink for the client. -A client can, if it so chooses, explicitly create the source and sink -before creating the Text widget. -.LP -The source stores and manipulates the text. -The \*(tk provides string and disk file sources. -The source determines what editing functions may be performed on the text. -.LP -The sink obtains the fonts and the -colors in which to paint the text. -The sink also computes what text can fit on each line. -The \*(tk provides a single-font, single-color ASCII sink. -.LP -If a disk file is used to display the text, -two edit modes are available: -.IP \(bu 5 -Append -.IP \(bu 5 -Read-only -.LP -Append mode lets the user enter text into the window, -while read-only mode does not. -Text may only be entered if the insertion point is after the last -character in the window. -.LP -If a string in memory is used, -the application must allocate the amount of space needed. -If a string in memory is used to display text, -three types of edit mode are available: -.IN "Text widget" "edit modes" -.IP \(bu 5 -Append-only -.IP \(bu 5 -Read-only -.IP \(bu 5 -Editable -.LP -The first two modes are the same as displaying text from a disk file. -Editable mode lets the user place the cursor anywhere in the text and -modify the text at that position. -The text cursor position can be modified by using the -key strokes or pointer buttons defined by the event bindings. -.LE -Many standard keyboard editing facilities are supported by the -event bindings. -The following actions are supported: -.LP -.Ds 0 -.TA .5i 2.5i 3i -.ta .5i 2.5i 3i -Cursor Movement Delete - forward-character delete-next-character - backward-character delete-previous-character - forward-word delete-next-word - backward-word delete-previous-word - forward-paragraph delete-selection - backward-paragraph - beginning-of-line - end-of-line Selection - next-line select-word - previous-line select-all - next-page select-start - previous-page select-adjust - beginning-of-file select-end - end-of-file extend-start - scroll-one-line-up extend-adjust - scroll-one-line-down extend-end - -New Line Miscellaneous - newline-and-indent redraw-display - newline-and-backup insert-file - newline insert-char - insert-string - display-caret - do-nothing - -Kill Unkill - kill-word unkill - backward-kill-word stuff - kill-selection insert-selection - kill-to-end-of-line - kill-to-end-of-paragraph -.De -.NT Notes -.IP 1. 5 -A page corresponds to the size of the Text window. -For example, if the Text window is 50 lines in length, -scrolling forward one page is the same as scrolling forward 50 lines. -.IP 2. 5 -The \fBinsert-char\fP action may only be attached to a key event. It -calls XLookupString to translate the event into a (rebindable) Latin-1 -character (sequence) and inserts that sequence into the text at the -current position. The \fBinsert-string\fP action takes one or more -arguments and inserts the arguments into the text at the current position. -An argument beginning with the characters "0x" and containing only -valid hexadecimal digits in the remainder is interpreted as a hexadecimal -constant and the corresponding single character is inserted instead. -.IP 3. 5 -The \fBdelete\fP -action deletes a text item. -The \fBkill\fP -action deletes a text item and puts the item in the kill buffer -(X cut buffer 1). -.IP 4. 5 -The \fBunkill\fP -action inserts the contents of the kill buffer into the text at the current -position. -The \fBstuff\fP -action inserts the contents of the paste buffer (X cut buffer 0) into the -text at the current position. -The \fBinsert-selection\fP -action retrieves the value of a specified X selection or cut -buffer, with fall-back to alternative selections or cut buffers. -.IP 5. 5 -The \fBdisplay-caret\fP -action allows the insert position marker to be turned on and off. -The first argument specifies the desired state as any of the string -values accepted for Boolean resources (e.g. "on", "true", "off", "false", -etc.). If no arguments are specified, the default value is "on". -The second argument specifies, for -.PN EnterNotify or -.PN LeaveNotify -events whether or not the focus field in the event is to be examined. -If the second argument is not specified, or specified as something other -than "always" then if the action is bound to an -.PN EnterNotify or -.PN LeaveNotify -event, the action will be taken only if the focus field is \fBTrue\fP. -An augmented binding that might be useful is: -.LP -.Ds 0 -.TA .5i 2.25i -.ta .5i 2.25i -*Text.Translations: #override \\ - : display-caret(on) \\n\\ - : display-caret(off) -.De -.NE -.LP -The default event bindings for the Text widget are: -.IN "Text widget" "default bindings" -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -char defaultTextTranslations[] = ``\\ - CtrlF: forward-character(\|) \\n\\ - CtrlB: backward-character(\|) \\n\\ - CtrlD: delete-next-character(\|) \\n\\ - CtrlA: beginning-of-line(\|) \\n\\ - CtrlE: end-of-line(\|) \\n\\ - CtrlH: delete-previous-character(\|) \\n\\ - CtrlJ: newline-and-indent(\|) \\n\\ - CtrlK: kill-to-end-of-line(\|) \\n\\ - CtrlL: redraw-display(\|) \\n\\ - CtrlM: newline(\|) \\n\\ - CtrlN: next-line(\|) \\n\\ - CtrlO: newline-and-backup(\|) \\n\\ - CtrlP: previous-line(\|) \\n\\ - CtrlV: next-page(\|) \\n\\ - CtrlW: kill-selection(\|) \\n\\ - CtrlY: unkill(\|) \\n\\ - CtrlZ: scroll-one-line-up(\|) \\n\\ - MetaF: forward-word(\|) \\n\\ - MetaB: backward-word(\|) \\n\\ - MetaI: insert-file(\|) \\n\\ - MetaK: kill-to-end-of-paragraph(\|) \\n\\ - MetaV: previous-page(\|) \\n\\ - MetaY: stuff(\|) \\n\\ - MetaZ: scroll-one-line-down(\|) \\n\\ - :Metad: delete-next-word(\|) \\n\\ - :MetaD: kill-word(\|) \\n\\ - :Metah: delete-previous-word(\|) \\n\\ - :MetaH: backward-kill-word(\|) \\n\\ - :Meta\\<: beginning-of-file(\|) \\n\\ - :Meta\\>: end-of-file(\|) \\n\\ - :Meta]: forward-paragraph(\|) \\n\\ - :Meta[: backward-paragraph(\|) \\n\\ - ~Shift MetaDelete: delete-previous-word(\|) \\n\\ - \ Shift MetaDelete: backward-kill-word(\|) \\n\\ - ~Shift MetaBackspace: delete-previous-word(\|) \\n\\ - \ Shift MetaBackspace: backward-kill-word(\|) \\n\\ - Right: forward-character(\|) \\n\\ - Left: backward-character(\|) \\n\\ - Down: next-line(\|) \\n\\ - Up: previous-line(\|) \\n\\ - Delete: delete-previous-character(\|) \\n\\ - BackSpace: delete-previous-character(\|) \\n\\ - Linefeed: newline-and-indent(\|) \\n\\ - Return: newline(\|) \\n\\ - : insert-char(\|) \\n\\ - : focus-in(\|) \\n\\ - : focus-out(\|) \\n\\ - : select-start(\|) \\n\\ - : extend-adjust(\|) \\n\\ - : extend-end(PRIMARY, CUT_BUFFER0) \\n\\ - : insert-selection(PRIMARY, CUT_BUFFER0) \\n\\ - : extend-start(\|) \\n\\ - : extend-adjust(\|) \\n\\ - : extend-end(PRIMARY, CUT_BUFFER0) \\ -''; -.De -.LP -A user-supplied resource entry can use application-specific bindings, a subset -of the supplied default bindings, or both. -The following is an example of a user-supplied resource entry that uses a -subset of the default bindings: -.LP -.Ds 0 -.TA .5i 1.75i -.ta .5i 1.75i -Xmh*Text.Translations: \\ - Right: forward-character(\|) \\n\\ - Left: backward-character(\|) \\n\\ - MetaF: forward-word(\|) \\n\\ - MetaB: backward-word(\|) \\n\\ - :Meta]: forward-paragraph(\|) \\n\\ - :Meta[: backward-paragraph(\|) \\n\\ - : insert-char(\|) -.De -.LP -An augmented binding that is useful with the xclipboard -utility is: -.LP -.Ds 0 -.TA .5i 2.25i -.ta .5i 2.25i -*Text.Translations: #override \\ - Button1 : extend-end(CLIPBOARD) -.De -.LP -A Text widget lets both the user and the application -take control of the text being displayed. -The user takes control with the scroll bar or with key strokes -defined by the event bindings. -The scroll bar option places the scroll bar on the left side of the widget -and can be used with any editing mode. -The application takes control with procedure calls to the Text widget -to: -.IP \(bu 5 -Display text at a specified position -.IP \(bu 5 -Highlight specified text areas -.IP \(bu 5 -Replace specified text areas -.LE -.LP -The text that is selected within a Text widget may be assigned to an -X selection or copied into a cut buffer -and can be retrieved by the application with the Intrinsics -.PN XtGetSelectionValue -or the Xlib -.PN XFetchBytes -functions respectively. -Several standard selection schemes -(e.g. character/word/paragraph with multi-click) -are supported through the event bindings. -.LP -The class variable for the Text widget is -.PN textWidgetClass . -.LP -.IN "Text widget" "creating" -.IN "Creating widgets" "Text string" -To create a Text string widget, use -.PN XtCreateWidget -and specify the class variable -.PN asciiStringWidgetClass . -.LP -.IN "Creating widgets" "Text file" -To create a Text file widget, use -.PN XtCreateWidget -and specify the class variable -.PN asciiDiskWidgetClass . -.NT -If you want to create an instance of the class -.PN textWidgetClass , -you must provide a source and a sink when the widget is created. -The Text widget cannot be instantiated without both. -.NE -.LP -When creating a Text widget instance, -the following resources are retrieved from the argument list -or from the resource database: -.IN "Text widget" "resources" -.ps 9 -.nr PS 9 -.vs 11 -.nr VS 11 -.TS H -lw(1.5i) lw(1i) lw(1i) lw(2i). -_ -.sp 3p -.TB -Name Type Default Description -.sp 3p -_ -.TH -.R -.sp 3p -XtNbackground Pixel XtDefaultBackground Window background color -XtNbackgroundPixmap Pixmap None Window background pixmap -XtNborderColor Pixel XtDefaultForeground Window border color -XtNborderPixmap Pixmap None Window border pixmap -XtNborderWidth Dimension 4 Border width in pixels -XtNcursor Cursor XC_xterm Pointer cursor -XtNdialogHOffset int 10 Offset of insert file dialog -XtNdialogVOffset int 10 Offset of insert file dialog -T{ -XtNdestroyCallback -T} T{ -XtCallbackList -T} T{ -NULL -T} T{ -Callbacks for -.PN XtDestroyWidget -T} -XtNdisplayCaret Boolean True Display a marker at the insert position -XtNdisplayNonPrinting Boolean True Display control char as ^C -XtNdisplayPosition int 0 Character position of first line -XtNecho Boolean True Whether or not to display output -XtNeditType XtEditType XttextRead Edit mode (see note) -T{ -XtNfile -T} T{ -char* -T} T{ -tmpnam(\|) -T} T{ -File for -.PN asciiDiskWidgetClass -T} -XtNforeground Pixel Black Foreground color -XtNfont XFontStruct* Fixed Fontname -XtNheight Dimension Font height Height of widget -XtNinsertPosition int 0 Character position of caret -XtNleftMargin Dimension 2 Left margin in pixels -T{ -XtNlength -T} T{ -int -T} T{ -String length -T} T{ -Size of the string buffer -T} -T{ -XtNmappedWhenManaged -T} T{ -Boolean -T} T{ -True -T} T{ -Whether -.PN XtMapWidget -is automatic -T} -XtNselectTypes XtTextSelectType* See below Selection units for multi-click -XtNsensitive Boolean True Whether widget receives input -T{ -XtNstring -T} T{ -char* -T} T{ -Blank -T} T{ -String for -.PN asciiStringWidgetClass -T} -XtNtextOptions int None See below -XtNtextSink XtTextSink None See below -XtNtextSource XtTextSource None See below -XtNtranslations TranslationTable See above event-to-action translations -XtNwidth Dimension 100 Width of widget (pixels) -XtNx Position 0 x coordinate in pixels -XtNy Position 0 y coordinate in pixels -.sp 3p -_ -.TE -.ps 11 -.nr PS 11 -.vs 13 -.nr VS 13 -.NT Notes -.IP 1. 5 -You cannot use -.PN XtNeditType , -.PN XtNfile , -.PN XtNlength , -and -.PN XtNfont -with the -.PN XtTextSetValues -and the -.PN XtTextGetValues -calls. -.IP 2. 5 -The -.PN XtNeditType -attribute has one of the values -.PN XttextAppend , -.PN XttextEdit , -or -.PN XttextRead . -.IP 3. 5 -If -.PN asciiStringWidgetClass -is used, the resource -.PN XtNstring -specifies a buffer containing the text to be displayed and edited. -.PN AsciiStringWidget -does not copy this buffer but uses it in-place. -.IP 4. 5 -If -.PN XtNdisplayNonPrinting -is -.PN True -any control characters will be displayed as the two-character -sequence "^", "C" where "C" is the uppercase (printing) equivalent -of the control character. If the value is -.PN False -any control characters will be displayed as a single space character. -.IP 5. 5 -If -.PN XtNecho -is -.PN False -then no text is displayed. Text may still be selected and modified, -though invisibly. -.NE -.LP -The options for the -.PN XtNtextOptions -attribute are: -.TS H -lw(1.5i) lw(4.5i). -_ -.sp 3p -.TB -Option Description -.sp 3p -_ -.TH -.R -.sp 3p -T{ -.PN editable -T} T{ -Whether or not the user is allowed to modify the text. -T} -.sp 3p -T{ -.PN resizeHeight -T} T{ -Makes a request to the parent widget to lengthen the widget -if all the text cannot fit in the window. -T} -.sp 3p -T{ -.PN resizeWidth -T} T{ -Makes a request to the parent widget to widen the widget if the -text becomes too long to fit on one line. -T} -.\".sp 3p -.\"T{ -.\".PN scrollHorizontal -.\"T} T{ -.\"Puts a scroll bar on the top of the widget. -.\"T} -.sp 3p -T{ -.PN scrollOnOverflow -T} T{ -Automatically scrolls the text up when new text is entered -below the bottom (last) line. -T} -.sp 3p -T{ -.PN scrollVertical -T} T{ -Puts a scroll bar on the left side of the widget. -T} -.sp 3p -T{ -.PN wordBreak -T} T{ -Starts a new line when a word does not fit on the current line. -T} -.sp 3p -_ -.TE -.LP -These options can be ORed together to set more than one at the same time. -.LP -.PN XtNselectionTypes -is an array of entries of type -.PN XtTextSelectType -and is used for multiclick. -As the pointer button is clicked in rapid succession, -each click highlights the next ``type'' described in the array. -.TS -lw(1.25i) lw(4.25i). -T{ -XtselectAll -T} T{ -Selects the contents of the entire buffer. -T} -.sp 6p -T{ -XtselectChar -T} T{ -Selects text characters as the pointer moves over them. -T} -.sp 6p -T{ -XtselectLine -T} T{ -Selects the entire line. -T} -.sp 6p -T{ -XtselectNull -T} T{ -Indicates the end of the selection array. -T} -.sp 6p -T{ -XtselectParagraph -T} T{ -Selects the entire paragraph (delimited by newline characters). -T} -.sp 6p -T{ -XtselectPosition -T} T{ -Selects the current pointer position. -T} -.sp 6p -T{ -XtselectWord -T} T{ -Selects whole words (delimited by whitespace) as the pointer moves onto -them. -T} -.TE -.LP -The default selectType array is: -.LP -.Ds 0 -{XtselectPosition, XtselectWord, XtselectLine, XtselectParagraph, XtselectAll, XtselectNull} -.De -.LP -For the default case, -two rapid pointer clicks highlight the current word, three clicks -highlight the current line, -four clicks highlight the current paragraph, -and five clicks highlight the entire text. -If the timeout value is exceeded, the next pointer -click returns to the first entry in the selection array. -The selection array is not copied by the Text widget. -The client must allocate space for the array -and cannot deallocate or change it until the Text widget is destroyed -or until a new selection array is set. -.NH 3 -Selection Actions -.LP -The Text widget fully supports the X selection and cut buffer mechanisms. -The following actions can be used to specify button bindings that will cause Text -to assert ownership of one or more selections, to store the selected text into a -cut buffer, and to retrieve the value of a selection or cut buffer and insert it -into the text value. -.IP \fBinsert-selection\fP(\fIname\fP[,\fIname\fP,...]) 1i -Retrieves the value of the first (left-most) named selection that exists -or the cut buffer that is not empty and inserts it into the input stream. -The specified name can be that of any selection (for example, -.PN PRIMARY -or -.PN SECONDARY ) -or a cut buffer (i.e. -.PN CUT_BUFFER0 -through -.PN CUT_BUFFER7 ). -Note that case matters. -.IP \fBselect-start\fP(\^) 1i -Unselects any previously selected text and begins selecting new text. -.sp 6p -.IP \fBselect-adjust\fP(\^) 1i -.br -.ns -.IP \fBextend-adjust\fP(\^)\ \ \ 1i -Continues selecting text from the previous start position. -.sp 6p -.IP \fBstart-extend\fP(\^) 1i -Begins extending the selection from the farthest (left or right) edge. -.sp 6p -.IP \fBselect-end\fP(\fIname\fP[,\fIname\fP,...]) 1i -.br -.ns -.IP \fBextend-end\fP(\fIname\fP[,\fIname\fP,...]) 1i -Ends the text selection, asserts ownership of the specified -selection(s) -and stores the text in the specified cut buffer(s). -The specified name can be that of a selection (for example, -.PN PRIMARY -or -.PN SECONDARY ) -or a cut buffer (i.e. -.PN CUT_BUFFER0 -through -.PN CUT_BUFFER7 ). -Note that case is significant. If -.PN CUT_BUFFER0 -is listed, the cut buffers are rotated before storing into buffer 0. -.NH 3 -Selecting Text -.LP -To enable an application to select a piece of text, use -.PN XtTextSetSelection . -.IN "XtTextSetSelection" "" "@DEF@" -.FD 0 -typedef long XtTextPosition; -.sp 6p -void XtTextSetSelection(\fIw\fP, \fIleft\fP, \fIright\fP) -.br - Widget \fIw\fP; -.br - XtTextPosition \fIleft\fP, \fIright\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget ID. -.IP \fIleft\fP 1i -Specifies the character position at which the selection begins. -.IP \fIright\fP 1i -Specifies the character position at which the selection ends. -.LP -If redisplay is not disabled, -this function highlights the text and -makes it the PRIMARY selection. -.LP -.NH 3 -Unhighlighting Text -.LP -To unhighlight previously highlighted text in a widget, use -.PN XtTextUnsetSelection . -.IN "XtTextUnsetSelection" "" "@DEF@" -.FD 0 -void XtTextUnsetSelection(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.LP -.NH 3 -Getting Selected Text Character Positions -.LP -To enable the application to get the character positions of the -selected text, use -.PN XtTextGetSelectionPos . -.IN "XtTextGetSelectionPos" "" "@DEF@" -.FD 0 -void XtTextGetSelectionPos(\fIw\fP, \fIpos1\fP, \fIpos2\fP) -.br - Widget \fIw\fP; -.br - XtTextPosition *\fIpos1\fP, *\fIpos2\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget ID. -.IP \fIpos1\fP 1i -Specifies a pointer to the location to which the beginning character position -of the selection -is returned. -.IP \fIpos2\fP 1i -Specifies a pointer to the location to which the ending character position of -the selection is returned. -.LP -If the returned values are equal, -there is no current selection. -.NH 3 -Replacing Text -.LP -To enable an application to replace text, use -.PN XtTextReplace . -.IN "XtTextReplace" "" "@DEF@" -.FD 0 -int XtTextReplace(\fIw\fP, \fIstart_pos\fP, \fIend_pos\fP, \fItext\fP) -.br - Widget \fIw\fP; -.br - XtTextPosition \fIstart_pos\fP, \fIend_pos\fP; -.br - XtTextBlock *\fItext\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget ID. -.IP \fIstart_pos\fP 1i -Specifies the starting character position of the text replacement. -.IP \fIend_pos\fP 1i -Specifies the ending character position of the text replacement. -.IP \fItext\fP 1i -Specifies the text to be inserted into the file. -.LP -The -.PN XtTextReplace -function deletes text in the specified range (startPos, endPos) -and inserts the new text at startPos. -The return value is -.PN XawEditDone -if the replacement is successful, -.PN XawPositionError -if the edit mode is -.PN XttextAppend -and startPos is -not the last character of the source, -or -.PN XawEditError -if either the source was read-only -or the range to be deleted is larger than the length of the source. -.LP -The -.PN XtTextBlock -structure (defined in -.Pn < X11/Text.h > -contains: -.LP -.IN "XtTextBlock" "" "@DEF@" -.Ds 0 -.TA .5i 1.5i 2.25i -.ta .5i 1.5i 2.25i -typedef struct { - int firstPos; - int length; - char *ptr; - Atom format; -} XtTextBlock, *TextBlockPtr; -.De -.LP -The firstPos field is the starting point to use within the ptr field. -The value is usually zero. -The length field is the number of characters that are transferred from the -ptr field. -The number of characters transferred is usually the number of characters in -ptr. -This format field indicates whether the data pointed to by \fBptr\fP is -char or wchar_t. When the associated widget has \fBinternational\fP set -to \fBfalse\fP this field must be XawFmt8Bit. When the associated -widget has \fBinternational\fP set to \fBtrue\fP this field must be -either XawFmt8Bit or XawFmtWide. -.LP -Note: Previous versions of Xaw used -.PN FMT8BIT , -which has been retained for backwards compatibility. \fBFMT8BIT\fP is -deprecated and will eventually be removed from the implementation. -The -.PN XtTextReplace -arguments \fBstart_pos\fP and \fBend_pos\fP -represent the text source character positions for the existing text that is -to be replaced by the text in -the -.PN XtTextBlock -structure. -The characters from start_pos up to but not including end_pos are deleted, -and the characters that are specified by the text block are inserted in -their place. If start_pos and end_pos are equal, no text is -deleted and the new text is inserted after start_pos. -.NT -Only ASCII text is currently supported, and -only one font can be used for each Text widget. -.NE -.NH 3 -Redisplaying Text -.LP -To redisplay a range of characters, use -.PN XtTextInvalidate . -.IN "XtTextInvalidate" "" "@DEF@" -.FD 0 -void XtTextInvalidate(\fIw\fP, \fIfrom\fP, \fIto\fP) -.br - Widget \fIw\fP; -.br - XtTextPosition \fIfrom\fP, \fIto\fP; -.FN -The -.PN XtTextInvalidate -function causes the specified range of characters to be redisplayed immediately -if redisplay is enabled or the next time that redisplay is enabled. -.LP -.sp -To enable redisplay, use -.PN XtTextEnableRedisplay . -.IN "XtTextEnableRedisplay" "" "@DEF@" -.FD 0 -void XtTextEnableRedisplay(\fIw\fP) -.br - Widget \fIw\fP; -.FN -The -.PN XtTextEnableRedisplay -function flushes any changes due to batched updates when -.PN XtTextDisableRedisplay -was called and allows future changes to be reflected immediately. -.LP -.sp -To disable redisplay while making several changes, use -.PN XtTextDisableRedisplay . -.IN "XtTextDisableRedisplay" "" "@DEF@" -.FD 0 -void XtTextDisableRedisplay(\fIw\fP) -.br - Widget \fIw\fP; -.FN -The -.PN XtTextDisableRedisplay -function causes all changes to be batched until -.PN XtTextDisplay -or -.PN XtTextEnableRedisplay -is called. -.LP -.sp -To display batched updates, use -.PN XtTextDisplay . -.IN "XtTextDisplay" "" "@DEF@" -.FD 0 -void XtTextDisplay(\fIw\fP) -.br - Widget \fIw\fP; -.FN -The -.PN XtTextDisplay -function forces any accumulated updates to be displayed. -.LP -.sp -To notify the source that the length has been changed, use -.PN XtTextSetLastPos . -.IN "XtTextSetLastPos" "" "@DEF@" -.FD 0 -void XtTextSetLastPos(\fIw\fP, \fIlast\fP); -.br - Widget \fIw\fP; -.br - XtTextPosition \fIlast\fP; -.FN -.LP -The -.PN XtTextSetLastPos -function notifies the text source that data has been added to -or removed from the end of the source. -.NH 3 -Changing Resources -.LP -The following procedures are convenience procedures that replace calls to -.PN XtSetValues -or -.PN XtGetValues -when only a single resource is to be modified or retrieved. -.LP -.sp -To assigns a new value to XtNtextOptions resource, use -.PN XtTextChangeOptions . -.IN "XtTextChangeOptions" "" "@DEF@" -.FD 0 -void XtTextChangeOptions(\fIw\fP, \fIoptions\fP) -.br - Widget \fIw\fP; -.br - int \fIoptions\fP; -.FN -.LP -.sp -To obtain the current value of XtNtextOptions for the specified widget, use -.PN XtTextGetOptions . -.IN "XtTextGetOptions" "" "@DEF@" -.FD 0 -int XtTextGetOptions(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.LP -.sp -To obtain the character position of the left-most character on the -first line displayed in the widget (that is, the value of XtNdisplayPosition), use -.PN XtTextTopPosition . -.IN "XtTextTopPosition" "" @DEF@" -.FD 0 -XtTextPosition XtTextTopPosition(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.LP -.sp -To move the insertion caret to the specified source position, use -.PN XtTextSetInsertionPoint . -.IN "XtTextSetInsertionPoint" "" "@DEF@" -.FD 0 -void XtTextSetInsertionPoint(\fIw\fP, \fIposition\fP) -.br - Widget \fIw\fP; -.br - XtTextPosition \fIposition\fP; -.FN -.LP -The text will be scrolled vertically if necessary to make the line containing the -insertion point visible. -The result is equivalent to setting the XtNinsertPosition resource. -.LP -.sp -To obtain the current position of the insertion caret, use -.PN XtTextGetInsertionPoint . -.IN "XtTextGetInsertionPoint" "" "@DEF@" -.FD 0 -XtTextPosition XtTextGetInsertionPoint(\fIw\fP) -.br - Widget \fIw\fP; -.FN -The result is equivalent to retrieving the value of the XtNinsertPosition resource. -.LP -.sp -To replace the text source in the specified widget, use -.PN XtTextSetSource . -.IN "XtTextSetSource" "" "@DEF@" -.FD 0 -void XtTextSetSource(\fIw\fP, \fIsource\fP, \fIposition\fP) -.br - Widget \fIw\fP; -.br - XtTextSource \fIsource\fP; -.br - XtTextPosition \fIposition\fP; -.FN -A display update will be performed if redisplay has not been disabled. -.LP -.sp -To obtain the current text source for the specified widget, use -.PN XtTextGetSource . -.IN "XtTextGetSource" "" "@DEF@" -.FD 0 -XtTextSource XtTextGetSource(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.LP -.sp -To enable and disable the insert position marker, use -.PN XtTextDisplayCaret . -.IN "XtTextDisplayCaret" "" "@DEF@" -.FD 0 -void XtTextDisplayCaret(\fIw\fP, \fIvisible\fP) -.br - Widget \fIw\fP; -.br - Boolean \fIvisible\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget ID of the Text widget. -.IP \fIvisible\fP 1i -Specifies whether or not the caret should be displayed. -.LP -If visible is \fBFalse\fP the insert position marker will be disabled. -The marker is re-enabled either by setting visible to \fBTrue\fP, by -calling -.PN XtSetValues , -or by executing the \fBdisplay-caret\fP action routine. -.NH 3 -Creating Sources and Sinks -.LP -The following functions for creating and destroying text sources and sinks -are called automatically by -.PN AsciiStringWidget -and -.PN AsciiDiskWidget -and it is therefore only necessary for the client to use them when creating -an instance of -.PN textWidgetClass . -.LP -.sp -To create a new ASCII text sink, use -.PN XtAsciiSinkCreate . -.IN "XtAsciiSinkCreate" "" "@DEF@" -.FD 0 -XtTextSink XtAsciiSinkCreate(\fIw\fP, \fIargs\fP, \fInum_args\fP) -.br - Widget \fIw\fP; -.br - ArgList \fIargs\fP; -.br - Cardinal \fInum_args\fP; -.FN -.LP -The resources required by the sink are -qualified by the name and class of the parent and the sub-part name -.PN XtNtextSink -and class -.PN XtCTextSink . -.LP -.sp -To deallocate an ASCII text sink, use -.PN XtAsciiSinkDestroy . -.IN "XtAsciiSinkDestroy" "" "@DEF@" -.FD 0 -void XtAsciiSinkDestroy(\fIsink\fP) -.br - XtTextSink \fIsink\fP; -.FN -.LP -The sink must not be in use by any widget or an error will result. -.LP -.sp -To create a new text disk source, use -.PN XtDiskSourceCreate . -.IN "XtDiskSourceCreate" "" "@DEF@" -.FD 0 -XtTextSource XtDiskSourceCreate(\fIw\fP, \fIargs\fP, \fInum_args\fP) -.br - Widget \fIw\fP; -.br - ArgList \fIargs\fP; -.br - Cardinal \fInum_args\fP; -.FN -.LP -The resources required by the source are -qualified by the name and class of the parent and the sub-part name -.PN XtNtextSource -and class -.PN XtCTextSource . -.LP -.sp -To deallocate a text disk source, use -.PN XtDiskSourceDestroy . -.IN "XtDiskSourceDestroy" "" "@DEF@" -.FD 0 -void XtDiskSourceDestroy(\fIsource\fP) -.br - XtTextSource \fIsource\fP; -.FN -.LP -The source must not be in use by any widget or an error will result. -.LP -.sp -To create a new text string source, use -.PN XtStringSourceCreate . -.IN "XtStringSourceCreate" "" "@DEF@" -.FD 0 -XtTextSource XtStringSourceCreate(\fIw\fP, \fIargs\fP, \fInum_args\fP) -.br - Widget \fIw\fP; -.br - ArgList \fIargs\fP; -.br - Cardinal \fInum_args\fP; -.FN -.LP -The resources required by the source are -qualified by the name and class of the parent and the sub-part name -.PN XtNtextSource -and class -.PN XtCTextSource . -.LP -.sp -To deallocate a text string source, use -.PN XtStringSourceDestroy . -.IN "XtStringSourceDestroy" "" "@DEF@" -.FD 0 -void XtStringSourceDestroy(\fIsource\fP) -.br - XtTextSource \fIsource\fP; -.FN -.LP -The source must not be in use by any widget or an error will result. -.NH 2 -Scrollbar Widget -.LP -.XS -\*(SN Scrollbar Widget -.XE -.IN "Scrollbar widget" "" "@DEF@" -The Scrollbar widget is a rectangular area that contains a slide region and -a thumb (slide bar). -A Scrollbar can be used alone, as a valuator, or it can -be used within a composite widget (for example, a Viewport). -A Scrollbar can be aligned either vertically or horizontally. -.LP -When a Scrollbar is created, -it is drawn with the thumb in a contrasting color. -The thumb is normally used to scroll client data and to give visual -feedback on the percentage of the client data that is visible. -.LP -Each pointer button invokes a specific scroll bar action. -That is, given either a vertical or horizontal alignment, -the pointer button actions will scroll or return data as appropriate -for that alignment. -Pointer buttons 1 and 3 do not perform scrolling operations by default. -Instead, they return the pixel position of the cursor on the scroll region. -When pointer button 2 is clicked, -the thumb moves to the current pointer position. -When pointer button 2 is held down and the pointer pointer is moved, -the thumb follows the pointer. -.LP -The cursor in the scroll region changes depending on the current action. -When no pointer button is pressed, -the cursor appears as an arrow that points in the direction -that scrolling can occur. -When pointer button 1 or 3 is pressed, -the cursor appears as a single-headed arrow that points in the logical -direction that the client will move the data. -When pointer button 2 is pressed, -the cursor appears as an arrow that points to the thumb. -.LP -While scrolling is in progress, -the application receives notification from callback procedures. -For both scrolling actions, -the callback returns the Scrollbar widget ID, the client_data, -and the pixel position of the pointer when the button was released. -For smooth scrolling, -the callback routine returns the scroll bar widget, the client data, -and the current relative position of the thumb. -When the thumb is moved using pointer button 2, -the callback procedure is invoked continuously. -When either button 1 or 3 is pressed, -the callback procedure is invoked only when the button is released -and the client callback procedure is responsible for moving the thumb. -.LP -The class variable for the Scrollbar widget is -.PN scrollbarWidgetClass . -.LP -When creating a Scrollbar widget instance, -the following resources are retrieved from the argument list -or from the resource database: -.IN "Scrollbar widget" "resources" -.ps 9 -.nr PS 9 -.vs 11 -.nr VS 11 -.TS H -lw(1.5i) lw(1i) lw(1i) lw(2i). -_ -.sp 3p -.TB -Name Type Default Description -.sp 3p -_ -.TH -.R -.sp 3p -XtNbackground Pixel white Window background color -XtNbackgroundPixmap Pixmap None Window background pixmap -XtNborderColor Pixel XtDefaultForeground Window border color -XtNborderPixmap Pixmap None Window border pixmap -XtNborderWidth Dimension 1 Width of button border -T{ -XtNdestroyCallback -T} T{ -XtCallbackList -T} T{ -NULL -T} T{ -Callbacks for -.PN XtDestroyWidget -T} -XtNforeground Pixel black Thumb color -XtNheight Dimension See below Height of scroll bar -XtNjumpProc XtCallbackList NULL Callback for thumb select -XtNlength Dimension None Major dimension (height of XtorientVertical) -T{ -XtNmappedWhenManaged -T} T{ -Boolean -T} T{ -True -T} T{ -Whether -.PN XtMapWidget -is automatic -T} -T{ -XtNorientation -T} T{ -XtOrientation -T} T{ -XtorientVertical -T} T{ -Orientation (vertical or horizontal) -T} -T{ -XtNscrollDCursor -T} T{ -Cursor -T} T{ -XC_sb_down_arrow -T} T{ -Cursor for scrolling down -T} -T{ -XtNscrollHCursor -T} T{ -Cursor -T} T{ -XC_sb_h_double_arrow -T} T{ -Idle horizontal cursor -T} -T{ -XtNscrollLCursor -T} T{ -Cursor -T} T{ -XC_sb_left_arrow -T} T{ -Cursor for scrolling left -T} -XtNscrollProc XtCallbackList NULL Callback for the slide region -T{ -XtNscrollRCursor -T} T{ -Cursor -T} T{ -XC_sb_right_arrow -T} T{ -Cursor for scrolling right -T} -T{ -XtNscrollUCursor -T} T{ -Cursor -T} T{ -XC_sb_up_arrow -T} T{ -Cursor for scrolling up -T} -T{ -XtNscrollVCursor -T} T{ -Cursor -T} T{ -XC_sb_v_double_arrow -T} T{ -Idle vertical cursor -T} -XtNsensitive Boolean True Whether widget receives input -XtNshown float NULL Percentage the thumb covers -XtNthickness Dimension 14 Minor dimension (height if XtorientHorizontal) -XtNthumb Pixmap Grey Thump pixmap -XtNtop float NULL Position on scroll bar -XtNtranslations TranslationTable See below Event-to-action translations -XtNwidth Dimension See below Width of scroll bar -XtNx Position NULL x position of scroll bar -XtNy Position NULL y position of scroll bar -.sp 3p -_ -.TE -.ps 11 -.nr PS 11 -.vs 13 -.nr VS 13 -.LP -The class for all cursor resources is -.PN XtCCursor . -.LP -You can set the dimensions of the Scrollbar two ways. -As for all widgets, -you can use the -.PN XtNwidth -and -.PN XtNheight -resources. -In addition, -you can use an alternative method that is independent of the vertical -or horizontal orientation: -.TS -lw(1.5i) lw(4.5i). -T{ -.PN XtNlength -T} T{ -Specifies the height for a vertical Scrollbar -and the width for a horizontal Scrollbar. -T} -T{ -.PN XtNthickness -T} T{ -Specifies the width for a vertical Scrollbar -and the height for a horizontal Scrollbar. -T} -.TE -.LP -.IN "Scrollbar widget" "creating" -.IN "Creating widgets" "Scrollbar" -To create a Scrollbar widget instance, use -.PN XtCreateWidget -and specify the class variable -.PN scrollbarWidgetClass . -.LP -.IN "Scrollbar widget" "destroying" -.IN "Destroying widgets" "Scrollbar" -To destroy a Scrollbar widget instance, use -.PN XtDestroyWidget -and specify the widget ID for the Scrollbar. -.LP -.sp -The arguments to the -.PN XtNscrollProc -callback procedure are: -.IN "ScrollProc" "" "@DEF@" -.FD 0 -void \fIScrollProc\fP(\fIscrollbar\fP, \fIclient_data\fP, \fIposition\fP) -.br - Widget \fIscrollbar\fP; -.br - caddr_t \fIclient_data\fP; -.br - caddr_t \fIposition\fP; /* int */ -.FN -.IP \fIscrollbar\fP 1i -Specifies the ID of the Scrollbar. -.IP \fIclient_data\fP 1i -Specifies the client data. -.IP \fIposition\fP 1i -Returns the pixel position of the thumb in integer form. -.LP -The -.PN XtNscrollProc -callback is used for incremental scrolling -and is called by the \fBNotifyScroll\fP action. -The position argument is a signed quantity and should be cast to an int -when used. -Using the default button bindings, -button 1 returns a positive value, -and button 3 returns a negative value. -In both cases, -the magnitude of the value is the distance of the pointer in pixels from the -top (or left) of the Scrollbar. -The value will never be less than zero or greater than the length -of the Scrollbar. -.LP -.sp -The arguments to the -.PN XtNjumpProc -callback procedure are: -.IN "JumpProc" "" "@DEF@" -.FD 0 -void \fIJumpProc\fP(\fIscrollbar\fP, \fIclient_data\fP, \fIpercent\fP) -.br - Widget \fIscrollbar\fP; -.br - caddr_t \fIclient_data\fP; -.br - caddr_t \fIpercent_ptr\fP; /* float* */ -.FN -.IP \fIscrollbar\fP 1i -Specifies the ID of the scroll bar widget. -.IP \fIclient_data\fP 1i -Specifies the client data. -.IP \fIpercent_ptr\fP 1i -Specifies the floating point position of the thumb (0.0 \- 1.0). -.LP -The -.PN XtNjumpProc -callback is used to implement smooth scrolling and is called by the -\fBNotifyThumb\fP -action. Percent_ptr must be cast to a pointer to float before -use; i.e. -.LP -.Ds 0 -.TA .5i -.ta .5i - float percent = *(float*)percent_ptr; -.De -.LP -With the default button bindings, -button 2 moves the thumb interactively, -and the -.PN XtNjumpProc -is called on each new position of the pointer. -.NT -An older interface used -.PN XtNthumbProc -and passed the percentage by value rather than by reference. -This interface is not portable across machine architectures -and therefore is no longer supported but is still implemented -for those (non-portable) applications which used it. -.NE -.LP -.IN "Scrollbar widget" "setting thumb values" -To set the position and length of a Scrollbar thumb, use -.PN XtScrollbarSetThumb . -.IN "XtScrollbarSetThumb" "" "@DEF@" -.FD 0 -void XtScrollbarSetThumb(\fIw\fP, \fItop\fP, \fIshown\fP) -.br - Widget \fIw\fP; -.br - float \fItop\fP; -.br - float \fIshown\fP; -.FN -.IP \fIw\fP 1i -Specifies the Scrollbar widget ID. -.IP \fItop\fP 1i -Specifies the position of the top of the thumb as a fraction of the -length of the Scrollbar. -.IP \fIshown\fP 1i -Specifies the length of the thumb as a fraction of the total length -of the Scrollbar. -.LP -.PN XtScrollbarThumb -moves the visible thumb to position (0.0 \- 1.0) and length (0.0 \- 1.0). -Either the top or shown arguments can be specified as \-1.0, -in which case the current value is left unchanged. -Values greater than 1.0 are truncated to 1.0. -.LP -If called from -.PN XtNjumpProc , -.PN XtScrollbarSetThumb -has no effect. -.LP -.sp -The actions supported by the Scrollbar widget are: -.IP \fBStartScroll\fP(\fIvalue\fP) 1i -The possible values are Forward, Backward, or Continuous. -This must be the first action to begin a new movement. -.IP \fBNotifyScroll\fP(\fIvalue\fP) 1i -The possible values are Proportional or FullLength. -If the argument to StartScroll was Forward or Backward, -NotifyScroll executes the -.PN XtNscrollProc -callbacks -and passes either the position of the pointer if its argument is Proportional -or the full length of the scroll bar if its argument is FullLength. -If the argument to StartScroll was Continuous, -NotifyScroll returns without executing any callbacks. -.IP \fBEndScroll\fP(\^) 1i -This must be the last action after a movement is complete. -.IP \fBMoveThumb\fP(\^) 1i -Repositions the scroll bar thumb to the current pointer location. -.IP \fBNotifyThumb\fP(\^)\ \ \ 1i -Calls the -.PN XtNjumpProc -callbacks and passes the relative position of the -pointer as a percentage of the scroll bar length. -.LP -The default bindings for Scrollbar are: -.LP -.Ds 0 -.TA .5i 1.75i -.ta .5i 1.75i - : StartScroll(Forward) - : StartScroll(Continuous) MoveThumb(\|) NotifyThumb(\|) - : StartScroll(Backward) - : MoveThumb(\|) NotifyThumb(\|) - : NotifyScroll(Proportional) EndScroll(\|) -.De -.LP -Examples of additional bindings a user might wish to specify in a -resource file are: -.LP -.Ds 0 -.TA .5i 2.25i -.ta .5i 2.25i -*Scrollbar.Translations: \\ - ~Metaspace: StartScroll(Forward) NotifyScroll(FullLength) \\n\\ - Metaspace: StartScroll(Backward) NotifyScroll(FullLength) \\n\\ - EndScroll(\|) -.De -.NH 2 -Viewport Widget -.LP -.XS -\*(SN Viewport Widget -.XE -.IN "Viewport widget" "" "@DEF@" -The Viewport widget consists of a frame window, one or two Scrollbars, -and an inner window. -The frame window is determined by -the viewing size of the data that is to be displayed -and the dimensions to which the Viewport is created. -The inner window is the full size of the data that is to be displayed -and is clipped by the frame window. -The Viewport widget controls the scrolling of the data directly. -No application callbacks are required for scrolling. -.LP -When the geometry of the frame window is equal in size to the inner window, -or when the data does not require scrolling, -the Viewport widget automatically removes any scroll bars. -The -.PN forceBars -option causes the Viewport widget to display any scroll bar permanently. -.LP -The class variable for the Viewport widget is -.PN viewportWidgetClass . -.LP -When creating a Viewport widget instance, -the following resources are retrieved from the argument list -or from the resource database: -.IN "Viewport widget" "resources" -.ps 9 -.nr PS 9 -.vs 11 -.nr VS 11 -.TS H -lw(1.5i) lw(1i) lw(1i) lw(2i). -_ -.sp 3p -.TB -Name Type Default Description -.sp 3p -_ -.TH -.R -.sp 3p -XtNallowHoriz Boolean False Flag to allow horizontal scroll bars -XtNallowVert Boolean False Flag to allow vertical scroll bars -XtNbackground Pixel XtDefaultBackground Window background color -XtNbackgroundPixmap Pixmap None Window background pixmap -XtNborderColor Pixel XtDefaultForeground Window border color -XtNborderPixmap Pixmap None Window border pixmap -XtNborderWidth Dimension 1 Width of the border in pixels -T{ -XtNdestroyCallback -T} T{ -XtCallbackList -T} T{ -NULL -T} T{ -Callback for -.PN XtDestroyWidget -T} -XtNforceBars Boolean False Flag to force display of scroll bars -XtNheight Dimension height of child Height of the widget -T{ -XtNmappedWhenManaged -T} T{ -Boolean -T} T{ -True -T} T{ -Whether -.PN XtMapWidget -is automatic -T} -XtNsensitive Boolean True Whether widget should receive input -XtNtranslations TranslationTable None Event-to-action translations -XtNuseBottom Boolean False Flag to indicate bottom/top bars -XtNuseRight Boolean False Flag to indicate right/left bars -XtNwidth Dimension width of child Width of the widget -XtNx Position 0 x coordinate within parent -XtNy Position 0 y coordinate within parent -.sp 3p -_ -.TE -.ps 11 -.nr PS 11 -.vs 13 -.nr VS 13 -.LP -The Viewport widget manages a single child widget. -When the size of the child is larger than the size of the Viewport, -the user can interactively move the child within the Viewport -by repositioning the Scrollbars. -.LP -The default size of the Viewport before it is realized is the -width and/or height of the child. -After it is realized, the viewport will allow its -child to grow vertically or horizontally if -.PN XtNallowVert -or -.PN XtNallowHoriz -were set, respectively. If the corresponding vertical or horizontal -scrolling were not enabled, the viewport will propagate the -geometry request to its own parent and the child will be allowed -to change size only if the (grand) parent allows it. Regardless -of whether or not scrolling was enabled in the corresponding -direction, if the child requests a new size smaller than the -viewport size, the change will be allowed only if the parent of -the viewport allows the viewport to shrink to the appropriate dimension. -.LP -.IN "Viewport widget" "creating" -To create a Viewport widget instance, use -.PN XtCreateWidget -and specify the class variable -.PN viewportWidgetClass . -.LP -.IN "Viewport widget" "inserting a child" -To insert a child into a Viewport widget, use -.PN XtCreateWidget -and specify the widget ID of the previously created Viewport as the parent. -.LP -.IN "Viewport widget" "removing a child" -To remove a child from a Viewport widget, use -.PN XtUnmanageChild -or -.PN XtDestroyWidget -and specify the widget ID of the child. -.LP -.IN "Viewport widget" "destroying" -.IN "Destroying widgets" "Viewport" -To delete the inner window, any children, and the frame window, use -.PN XtDestroyWidget -and specify the widget ID of the Viewport widget. -.NH 2 -Box Widget -.LP -.XS -\*(SN Box Widget -.XE -.IN "Box widget" "" "@DEF@" -The Box widget provides geometry management of -arbitrary widgets in a box of a specified dimension. -The children are rearranged when resizing events occur either on the -Box or when children are added or deleted. -The Box widget always attempts to pack its children as closely as possible -within the geometry allowed by its parent. -.LP -Box widgets are commonly used to manage a related set of Command -widgets and are frequently called ButtonBox widgets, but the children are -not limited to buttons. -.LP -The children are arranged on a background that -has its own specified dimensions and color. -.LP -The class variable for the Box widget is -.PN boxWidgetClass . -.LP -When creating a Box widget instance, -the following resources are retrieved from the argument list -or from the resource database: -.IN "Box widget" "resources" -.ps 9 -.nr PS 9 -.vs 11 -.nr VS 11 -.TS H -lw(1.5i) lw(1i) lw(1i) lw(2i) . -_ -.sp 3p -.TB -Name Type Default Description -.sp 3p -_ -.TH -.R -.sp 3p -XtNbackground Pixel XtDefaultBackground Window background color -XtNbackgroundPixmap Pixmap None Window background pixmap -XtNborderColor Pixel XtDefaultForeground Window border color -XtNborderPixmap Pixmap None Window border pixmap -XtNborderWidth Dimension 1 Border width on button box -T{ -XtNdestroyCallback -T} T{ -XtCallbackList -T} T{ -NULL -T} T{ -Callbacks for -.PN XtDestroyWidget -T} -XtNhSpace Dimension 4 Pixel distance left and right of children -XtNheight Dimension see below Viewing height of inner window -T{ -XtNmappedWhenManaged -T} T{ -Boolean -T} T{ -True -T} T{ -Whether -.PN XtMapWidget -is automatic -T} -XtNtranslations TranslationTable None Event-to-action translations -XtNvSpace Dimension 4 Pixel distance top and bottom of children -XtNwidth Dimension width of widest child Viewing width of inner window -XtNx Position 0 Widget location x coordinate -XtNy Position 0 Widget location y coordinate -.sp 3p -_ -.TE -.ps 11 -.nr PS 11 -.vs 13 -.nr VS 13 -.LP -The Box widget positions its children in rows with -.PN XtNhSpace -pixels to the left and right of each child and -.PN XtNvSpace -pixels between rows. -If the Box width is not specified, -the Box widget uses the width of the widest child. -Each time a child is managed or unmanaged, the Box widget will -attempt to reposition the remaining children to compact the box. -Children are positioned in order left to right, top to bottom. -When the next child does not fit on the current row, a new row is -started. If a child is wider than the width of the box, the box -will request a larger width from it parent and will begin the -layout process from the beginning if a new width is granted. -After positioning all children, -the Box widget attempts to shrink its own size to the minimum dimensions -required for the layout. -.LP -.IN "Box widget" "creating" -.IN "Creating widgets" "Box" -To create a box widget instance, use -.PN XtCreateWidget -and specify the class variable -.PN boxWidgetClass . -.LP -.IN "Box widget" "adding children" -To add a child to the Box, use -.PN XtCreateWidget -and specify the widget ID of the Box as the parent of the new widget. -.LP -.IN "Box widget" "removing children" -To remove a child from the Box, use -.PN XtUnmanageChild -or -.PN XtDestroyWidget -and specify the widget ID of the child. -.LP -.IN "Box widget" "destroying" -.IN "Destroying widgets" "Box" -To destroy a Box widget instance, use -.PN XtDestroyWidget -and specify the widget ID of the Box widget. -All the children of this box are automatically destroyed at the same time. -.\".NH 2 -.\"MenuBox Widget -.\".LP -.\".XS -.\"\*(SN MenuBox Widget -.\".XE -.\".IN "MenuBox widget" "" "@DEF@" -.\"The MenuBox widget allows for menus of arbitrary complexity. -.\"A MenuBox consists of a main window and a number of entries that -.\"are added to it. -.\"Although these entries typically are Command widgets, -.\"any kind of widget can be added to a MenuBox. -.\".LP -.\"The class variable for the MenuBox widget is -.\".PN menuBoxWidgetClass . -.\".LP -.\"An application can use the MenuBox widget to create: -.\".IP \(bu 5 -.\"Pop-up menus -.\".IP \(bu 5 -.\"Pull-down menus -.\".IP \(bu 5 -.\"Cascading menus -.\".LP -.\"For example, to create a pop-up menu, -.\"use -.\".PN XtCreateWidget -.\"and specifies the class variable -.\".PN menuBoxWidgetClass . -.\"This creates an empty main window. -.\"Then, to create a menu item that is to be added to the MenuBox, -.\"specify the widget ID of this empty menu as the parent -.\"of each new item. -.\".LP -.\"The MenuBox can arrange its children either vertically or horizontally. -.\".LP -.\"The MenuBox widget automatically makes all items the same width -.\"(for vertical orientation) or the same height (for horizontal orientation) -.\"as the largest one passed to it. -.\"Then, to make the MenuBox visible, -.\"use -.\".PN XtRealize -.\"to map the MenuBox widget. -.\".LP -.\"When creating a MenuBox widget, -.\"the following resources are retrieved from the argument list -.\"or from the resource database: -.\".IN "MenuBox widget" "resources" -.\".ps 9 -.\".nr PS 9 -.\".vs 11 -.\".nr VS 11 -.\".TS H -.\"lw(1.5i) lw(1i) lw(1i) lw(2i). -.\"_ -.\".sp 3p -.\".TB -.\"Name Type Default Description -.\".sp 3p -.\"_ -.\".TH -.\".R -.\".sp 3p -.\"XtNbackgroundPixmap Pixmap None Window background pixmap -.\"XtNborderPixmap Pixmap None Window border pixmap -.\"XtNwidth Dimension 1 Menu window width -.\"XtNheight Dimension 1 Menu window height -.\"XtNorientation XtOrientation XtorientVertical Row/column layout -.\"XtNborderWidth Dimension 1 Menu window border width -.\"XtNborder Pixmap BlackPixmap Border color -.\"XtNbackground int WhitePixel Background color -.\"T{ -.\"XtNinternalWidth -.\"T} T{ -.\"int -.\"T} T{ -.\"2 -.\"T} T{ -.\"Space between first item and top -.\".br -.\"Space between last item and bottom -.\"T} -.\"XtNinternalHeight int 2 First menu item to window top -.\"XtNspace int 1 Space between menu items -.\"XtNtranslations TranslationTable None event-to-action translations -.\"XtNx Position 0 Widget location x coordinate -.\"XtNy Position 0 Widget location y coordinate -.\"XtNcallback XtCallbackList Dummy Callback function -.\".sp 3p -.\"_ -.\".TE -.\".ps 11 -.\".nr PS 11 -.\".vs 13 -.\".nr VS 13 -.\".LP -.\".IN "MenuBox widget" 'creating" -.\".IN "Creating widgets" "MenuBox" -.\"To create a MenuBox widget instance, use -.\".PN XtCreateWidget -.\"and specify the class variable -.\".PN menuBoxWidgetClass . -.\".LP -.\".IN "MenuBox widget" "adding entries" -.\"To add entries, -.\"specify the widget ID of the previously created MenuBox widget -.\"as the parent of each new entry. -.\".LP -.\".IN "MenuBox widget" "deleting entries" -.\"To delete an entry, use -.\".PN XtUnmanageChild -.\"or -.\".PN XtDestroyWidget -.\"and specify the widget ID of the entry. -.\".LP -.\"The MenuBox widget resides in whatever parent widget the application specifies. -.\"For example, it does not automatically create a pop-up widget. -.\"To create a pop-up menu, use -.\".PN XtCreatePopupShell -.\"and then create the MenuBox as a child of this newly created shell. -.\".LP -.\".IN "MenuBox widget" "over-riding geometry manager" -.\"The MenuBox widget has a built-in geometry manager that enables the menu to -.\"become as large as necessary. -.\"To override the built-in geometry manager, -.\"create your own geometry manager and call it -.\".PN XtMenuGeometryManager . -.\".IN "XtMenuGeometryManager" "" "@DEF@" -.\".FD 0 -.\"GeometryReturnCode XtMenuGeometryManager(\fIw\fP, \fIrequest\fP, \ -.\"\fIrequest_box\fP, \fIreply_box\fP) -.\".br -.\" Widget \fIw\fP; -.\".br -.\" int \fIrequest\fP; -.\".br -.\"XtWidgetGeometry *\fIrequest_box\fP, *\fIreply_box\fP; -.\".FN -.\".IP \fIw\fP 1i -.\"Specifies the widget ID. -.\".IP \fIrequest\fP 1i -.\"Specifies the geometry management request. -.\".IP \fIrequest_box\fP 1i -.\"Specifies the desired widget geometry. -.\".IP \fIreply_box\fP 1i -.\"Specifies an argument to which the allowed widget size is returned. -.\".LP -.\".IN "MenuBox widget" "destroying" -.\".IN "Destroying widgets" "MenuBox" -.\"To destroy a MenuBox widget instance, -.\"use -.\".PN XtDestroyWidget -.\"and specify the widget ID of the MenuBox widget. -.NH 2 -VPaned Widget -.LP -.XS -\*(SN VPaned Widget -.XE -.IN "VPaned widget" "" "@DEF@" -The VPaned widget manages children in a vertically tiled fashion. -A region, called a grip, appears on the border between each child. -When the pointer is positioned on a grip and pressed, -an arrow is displayed that indicates the significant pane that is -being resized. -While keeping the pointer button down, -the user can move the pointer up or down. -This, in turn, changes the window borders, causing one pane to shrink -and some other pane to grow. -The cursor indicates the pane that is of interest to the user; -some other pane in the opposite direction will be chosen to grow -or shrink an equal amount. The choice of alternate pane is a -function of the -.PN XtNmin , -.PN XtNmax -and -.PN XtNskipAdjust -constraints on the other panes. With the default bindings, -button 1 resizes the pane above the selected grip, button 3 -resizes the pane below the selected grip and button 2 repositions -the border between two panes only. -.LP -The class variable for the VPaned widget is -.PN vPanedWidgetClass . -.LP -When creating a VPaned widget instance, -the following resources are retrieved from the argument list -or from the resource database: -.IN "VPaned widget" "resources" -.ps 9 -.nr PS 9 -.vs 11 -.nr VS 11 -.TS H -lw(1.5i) lw(1i) lw(1i) lw(2i) . -_ -.sp 3p -.TB -Name Type Default Description -.sp 3p -_ -.TH -.R -.sp 3p -XtNbackground Pixel XtDefaultBackground Window background color -XtNbackgroundPixmap Pixmap None Window background pixmap -T{ -XtNbetweenCursor -T} T{ -Cursor -T} T{ -XC_sb_left_arrow -T} T{ -Cursor for changing the boundary between two panes -T} -XtNborderColor Pixel XtDefaultForeground Window border color -XtNborderPixmap Pixmap None Window border pixmap -XtNborderWidth Dimension 1 Border width (pixels) -T{ -XtNdestroyCallback -T} T{ -XtCallbackList -T} T{ -NULL -T} T{ -Callbacks for -.PN XtDestroyWidget -T} -XtNforeground Pixel Black Pixel value for the foreground color -XtNgripCursor Cursor XC_sb_v_double_arrow Cursor for grip when not active -XtNgripIndent Position 10 Offset of grip from margin (pixels) -XtNgripTranslations TranslationTable internal button bindings for grip -XtNheight Dimension sum of child heights Height of vPane -T{ -XtNlowerCursor -T} T{ -Cursor -T} T{ -XC_sb_down_arrow -T} T{ -Cursor for resizing pane below grip -T} -T{ -XtNmappedWhenManaged -T} T{ -Boolean -T} T{ -True -T} T{ -Whether -.PN XtMapWidget -is automatic -T} -XtNrefigureMode Boolean On Whether vPane should adjust children -XtNsensitive Boolean True Whether widget receives input -XtNtranslations TranslationTable None Event-to-action translations -T{ -XtNupperCursor -T} T{ -Cursor -T} T{ -XC_sb_up_arrow -T} T{ -Cursor for resizing pane above grip -T} -XtNwidth Dimension width of widest child Width of vPane -XtNx Position 0 x position of vPane -XtNy Position 0 y position of vPane -.sp 3p -_ -.TE -.ps 11 -.nr PS 11 -.vs 13 -.nr VS 13 -.LP -.IN "VPaned widget" "creating" -.IN "Creating widgets" "VPaned" -To create a VPaned widget instance, use -.PN XtCreateWidget -and specify the class variable -.PN vPanedWidgetClass . -.LP -Once the parent frame is created, -you then add panes to it. -Any type of widget can be paned. -.LP -.IN "VPaned widget" "adding pane" -To add a child pane to a VPaned frame, use -.PN XtCreateWidget -and specify the widget ID of the VPaned widget -as the parent of each new child pane. -.LP -During the creation of a child pane, -the following resources, -by which the VPaned widget controls the placement of the child, -can be specified in the argument list or retrieved from the resource database: -.IN "VPaned widget" "child resources" -.LP -.ps 9 -.nr PS 9 -.vs 11 -.nr VS 11 -.TS H -lw(1.5i) lw(1i) lw(1i) lw(2i) . -_ -.sp 3p -.TB -Name Type Default Description -.sp 3p -_ -.TH -.R -.sp 3p -T{ -XtNallowResize -T} T{ -Boolean -T} T{ -False -T} T{ -If False, ignore child resize requests -T} -XtNmax Dimension unlimited Maximum height for pane -XtNmin Dimension 1 Minimum height for pane -T{ -XtNskipAdjust -T} T{ -Boolean -T} T{ -False -T} T{ -True if VPaned widget should not automatically resize pane -T} -.sp 3p -_ -.TE -.ps 11 -.nr PS 11 -.vs 13 -.nr VS 13 -.LP -.IN "VPaned widget" "deleting pane" -To delete a pane from a vertically paned window frame, use -.PN XtUnmanageWidget -or -.PN XtDestroyWidget -and specify the widget ID of the child pane. -.LP -.IN "VPaned widget" "enable pane resizing" -.IN "VPaned widget" "disable pane resizing" -To enable or disable a child's request for pane resizing, -use -.PN XtPanedAllowResize . -.IN "XtPanedAllowResize" "" "@DEF@" -.FD 0 -void XtPanedAllowResize(\fIw\fP, \fIallow_resize\fP) -.br - Widget \fIw\fP; -.br - Boolean \fIallow_resize\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget ID of the child widget pane. -.IP \fIallow_resize\fP -Enables or disables a pane widget for resizing requests. -.LP -If allow_resize is -.PN True , -VPane allows geometry requests from the child to change the pane's height. -If allow_resize is -.PN False , -VPane ignores geometry requests from the child to change the pane's height. -The default state is -.PN True -before the VPane is realized and -.PN False -after it is realized. -This procedure is equivalent to changing the -.PN XtNallowResize -resource for the child. -.LP -.sp -.IN "VPaned widget" "change height settings" -To change the minimum and maximum height settings for a pane, use -.PN XtPanedSetMinMax . -.IN "XtPanedSetMinMax" "" "@DEF@" -.FD 0 -void XtPanedSetMinMax(\fIw\fP, \fImin\fP, \fImax\fP) -.br - Widget \fIw\fP; -.br - int \fImin\fP, \fImax\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget ID of the child widget pane. -.IP \fImin\fP 1i -New minimum height of the child, expressed in pixels. -.IP \fImax\fP 1i -New maximum height of the child, expressed in pixels. -.LP -This procedure is equivalent to setting the -.PN XtNmin -and -.PN XtNmax -resources for the child. -.LP -.sp -.IN "VPaned widget" "enable auto-reconfiguring" -.IN "VPaned widget" "disable auto-reconfiguring" -To enable or disable automatic recalculation of pane sizes and positions, -use -.PN XtPanedSetRefigureMode . -.IN "XtPanedSetRefigureMode" "" "@DEF@" -.FD 0 -void XtPanedSetRefigureMode(\fIw\fP, \fImode\fP) -.br - Widget \fIw\fP; -.br - Boolean \fImode\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget ID of the VPaned widget. -.IP \fImode\fP 1i -Enables or disables refiguration. -.LP -You should set the mode to FALSE if you add multiple panes to -or remove multiple panes from the parent frame after it has been realized, -unless you can arrange to manage all the panes at once using -.PN XtManageChildren . -After all the panes are added, set the mode to TRUE. -This avoids unnecessary geometry calculations and ``window dancing''. -.LP -.IN "VPaned widget" "destroying" -.IN "Destroying widgets" "VPaned" -To delete an entire VPaned widget and all associated data structures, -use -.PN XtDestroyWidget -and specify the widget ID of the VPaned widget. -All the children of the VPaned widget -are automatically destroyed at the same time. -.NH 2 -Form Widget -.LP -.XS -\*(SN Form Widget -.XE -.IN "Form widget" "" "@DEF@" -The Form widget can contain an arbitrary number of children or subwidgets. -The Form provides geometry management for its children, -which allows individual control of the position of each child. -Any combination of children can be added to a Form. -The initial positions of the children may be computed relative to -the positions of other children. -When the Form is resized, -it computes new positions and sizes for its children. -This computation is based upon information provided -when a child is added to the Form. -.LP -The class variable for a Form widget is -.PN formWidgetClass . -.LP -When creating a Form widget instance, -the following resources are retrieved from the argument list -or from the resource database: -.IN "Form widget" "resources" -.ps 9 -.nr PS 9 -.vs 11 -.nr VS 11 -.TS H -lw(1.5i) lw(1i) lw(1i) lw(2i). -_ -.sp 3p -.TB -Name Type Default Description -.sp 3p -_ -.TH -.R -.sp 3p -XtNbackground Pixel XtDefaultBackground Window background color -XtNbackgroundPixmap Pixmap None Window background pixmap -XtNborderColor Pixel XtDefaultForeground Window border color -XtNborderPixmap Pixmap None Window border pixmap -XtNborderWidth Dimension 1 Width of border in pixels -T{ -XtNdefaultDistance -T} T{ -int -T} T{ -4 -T} T{ -Default value for XtNhorizDistance -.br -and XtNvertDistance -T} -T{ -XtNdestroyCallback -T} T{ -XtCallbackList -T} T{ -NULL -T} T{ -Callbacks for -.PN XtDestroyWidget -T} -XtNheight Dimension computed at realize Height of form -T{ -XtNmappedWhenManaged -T} T{ -Boolean -T} T{ -True -T} T{ -Whether -.PN XtMapWidget -is automatic -T} -XtNsensitive Boolean True Whether widget receives input -XtNtranslations TranslationTable None Event-to-action translations -XtNwidth Dimension computed at realize Width of form -XtNx Position NULL x position of form -XtNy Position NULL y position of form -.sp 3p -_ -.TE -.ps 11 -.nr PS 11 -.vs 13 -.nr VS 13 -.LP -.IN "Form widget" "creating" -.IN "Creating widgets" "Form" -To create a Form widget instance, use -.PN XtCreateWidget -and specify the class variable -.PN formWidgetClass . -.LP -.IN "Form widget" "adding children" -To add a new child to a Form, use -.PN XtCreateWidget -and specify the widget ID of the previously created Form as the parent -of the child. -.LP -When creating children that are to be added to a Form, -the following additional resources are retrieved from the -argument list or from the resource database: -.IN "Form widget" "child resources" -.ps 9 -.nr PS 9 -.vs 11 -.nr VS 11 -.TS H -lw(1.5i) lw(1i) lw(1i) lw(2i). -_ -.sp 3p -.TB -Name Type Default Description -.sp 3p -_ -.TH -.R -.sp 3p -XtNbottom XtEdgeType XtRubber See text -XtNfromHoriz Widget NULL See text -XtNfromVert Widget NULL See text -XtNhorizDistance int XtdefaultDistance See text -XtNleft XtEdgeType XtRubber See text -XtNresizable Boolean FALSE TRUE if allowed to resize -XtNright XtEdgeType XtRubber See text -XtNtop XtEdgeType XtRubber See text -XtNvertDistance int XtdefaultDistance See text -.sp 3p -_ -.TE -.ps 11 -.nr PS 11 -.vs 13 -.nr VS 13 -.LP -When a widget is added to a Form, constraints -can be specified to the Form to indicate -where the child should be positioned within the Form. -.LP -The resources -.PN XtNhorizDistance -and -.PN XtNfromHoriz -let the -widget position itself a specified number of pixels horizontally -away from another -widget in the form. -As an example, -.PN XtNhorizDistance -could equal 10 and -.PN XtNfromHoriz -could be the widget ID of -another widget in the Form. -The new widget will be placed -10 pixels to the right of the -widget defined in -.PN XtNfromHoriz . -If -.PN XtNfromHoriz -equals NULL, then -.PN XtNhorizDistance -is measured from the left edge of the Form. -.LP -Similarly, the resources -.PN XtNvertDistance -and -.PN XtNfromVert -let -the widget position itself a specified number of pixels vertically -away from another widget in the Form. -If -.PN XtNfromVert -equals -NULL, then -.PN XtNvertDistance -is measured from the top of the Form. -Form provides a StringToWidget conversion procedure. Using this -procedure, the resource database may be used to specify the -.PN XtNfromHoriz -and -.PN XtNfromVert -resources by widget name rather than widget id. The string value -must be the name of a child of the same Form widget parent. -.LP -The -.PN XtNtop , -.PN XtNbottom , -.PN XtNleft , -and -.PN XtNright -resources tell the Form where to position the child when the Form is -resized. -.PN XtEdgeType -is defined in -.Pn < X11/Form.h > -and is one of -.IN "XtEdgeType" "" "@DEF@" -.PN XtChainTop , -.PN XtChainBottom , -.PN XtChainLeft , -.PN XtChainRight -or -.PN XtRubber . -.LP -The values -.PN XtChainTop , -.PN XtChainBottom , -.PN XtChainLeft , -and -.PN XtChainRight -specify that a constant distance from an edge of the child to -the top, bottom, left, and right edges respectively of the Form is to be -maintained. -The value -.PN XtRubber -specifies that a proportional distance from the edge of the child to -the left or top edge of the Form is to be maintained when the -form is resized. The proportion is determined from the initial -position of the child and the initial size of the Form. -Form provides a StringToEdgeType conversion procedure to allow the resize -constraints to be easily specified in a resource file. -.LP -The default width of the Form is the minimum width needed to -enclose the children after computing their initial layout, with a -margin of -.PN XtNdefaultDistance -at the right and bottom edges. If a width and height is assigned -to the Form that is too small for the layout, the children will -be clipped by the right and bottom edges of the Form. -.LP -.IN "Form widget" "deleting children" -To remove a child from a Form, use -.PN XtUnmanageChild -or -.PN XtDestroyWidget -and specify the widget ID of the child widget. -.LP -.IN "Form widget" "destroying" -.IN "Destroying widgets" "Form" -To destroy a Form widget instance, use -.PN XtDestroyWidget -and specify the widget ID of the Form. -All children of the Form are automatically destroyed at the same -time. -.LP -When a new child becomes managed or an old child unmanaged, Form -will recalculate the positions of its children according to the -values of the -.PN XtNhorizDistance , -.PN XtNfromHoriz , -.PN XtNvertDistance -and -.PN XtNfromVert -constraints at the time the change is made. -No re-layout is performed when a child makes a -geometry request. -.LP -.sp -To force or defer a re-layout of the Form, use -.PN XtFormDoLayout . -.IN "Form widget" "re-layout" -.IN "XtFormDoLayout" "" "@DEF@" -.FD 0 -void XtFormDoLayout(\fIw\fP, \fIdo_layout\fP) -.br - Widget \fIw\fP; -.br - Boolean \fIdo_layout\fP; -.FN -.IP \fIw\fP 1i -Specifies the Form widget. -.IP \fIdo_layout\fP 1i -Enables (if -.PN True ) -or disables (if -.PN False ) -layout of the Form widget. -.LP -When making several changes to the children of a Form widget -after the Form has been realized, it is a good idea to disable -re-layout until all changes have been made, then allow the -layout. Form increments an internal count each time -.PN XtFormDoLayout -is called with do_layout -.PN False -and decrements the count when do_layout is -.PN True . -When the count reaches 0, Form performs a re-layout. -.NH 2 -Dialog Widget -.LP -.XS -\*(SN Dialog Widget -.XE -.IN "Dialog widget" "" "@DEF@" -The Dialog widget implements a commonly used interaction -semantic to prompt for auxiliary input from a user. -For example, you can use a Dialog widget when an application -requires a small piece of information, such as a file name, from the user. -A Dialog widget is simply a special case of the Form widget -that provides a convenient way to create a ``preconfigured form''. -.LP -The typical Dialog widget contains three areas. -The first line contains a -description of the function of the Dialog widget, -for example, the string ``Filename:''. -The second line contains an area into which the user types input. -The third line can contain buttons that let the user confirm -or cancel the Dialog input. -.LP -The class variable for the Dialog widget is -.PN dialogWidgetClass . -.LP -When creating a Dialog widget instance, -the following resources are retrieved from the argument list -or from the resource database: -.IN "Dialog widget" "resources" -.ps 9 -.nr PS 9 -.vs 11 -.nr VS 11 -.TS H -lw(1.5i) lw(1i) lw(1i) lw(2i). -_ -.sp 3p -.TB -Name Type Default Description -.sp 3p -_ -.TH -.R -XtNbackground Pixel XtDefaultBackground Window background color -XtNbackgroundPixmap Pixmap None Window background pixmap -XtNborderColor Pixel XtDefaultForeground Window border color -XtNborderPixmap Pixmap None Window border pixmap -XtNborderWidth Dimension 1 Width of border in pixels -T{ -XtNdestroyCallback -T} T{ -XtCallbackList -T} T{ -NULL -T} T{ -Callbacks for -.PN XtDestroyWidget -T} -XtNheight Dimension computed at create Height of dialog -XtNlabel String Label name String to be displayed -T{ -XtNmappedWhenManaged -T} T{ -Boolean -T} T{ -True -T} T{ -Whether -.PN XtMapWidget -is automatic -T} -XtNmaximumLength int 256 Length of input buffer -XtNsensitive Boolean True Whether widget receives input -XtNtranslations TranslationTable None Event-to-action translations -XtNvalue char* NULL Pointer to default value string -XtNwidth Dimension computed at create Width of dialog -XtNx Position NULL x position of dialog -XtNy Position NULL y position of dialog -.sp 3p -_ -.TE -.ps 11 -.nr PS 11 -.vs 13 -.nr VS 13 -.LP -The instance name of the label widget within the Dialog widget is ``label'', -and the instance name of the Dialog value widget is ``value''. -.LP -.IN "Dialog widget" "creating" -.IN "Creating widgets" "Dialog" -To create a Dialog widget instance, you can use -.PN XtCreateWidget -and specify the class variable -.PN dialogWidgetClass . -.LP -.IN "Dialog widget" "adding children" -To add a child button to the Dialog box, use -.PN XtCreateWidget -and specify widget ID of the previously created Dialog box as the parent -of each child. -When creating buttons, -you do not have to specify form constraints. -The Dialog box will automatically add the constraints. -.LP -.sp -To return the character string in the text field, use -.PN XtDialogGetValueString . -.IN "XtDialogGetValueString" "" "@DEF@" -.FD 0 -char *XtDialogGetValueString(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget ID of the Dialog box. -.LP -If a string was specified in the -.PN XtNvalue -resource, Dialog copy the string internally and will use it as the -initial (i.e. default) value for the input text. The value string -may be freed immediately after creating the Dialog widget. If the -length of the value string is greater than the maximumLength resource, -the larger value is used. -.LP -If no value resource is specified for the Dialog widget, the text user -input area is not displayed. In order to display a blank input area, -an empty string must be passed as the value resource. -.LP -.sp -.IN "Dialog widget" "removing children" -To remove a child button from the Dialog box, use -.PN XtUnmanageChild -or -.PN XtDestroyWidget -and specify the widget ID of the child. -.LP -.IN "Dialog widget" "destroying" -.IN "Destroying widgets" "Dialog" -To destroy a Dialog widget instance, use -.PN XtDestroyWidget -and specify the widget ID of the Dialog widget. -All children of the Dialog are automatically destroyed at the same time. -.NH 2 -List Widget -.LP -.XS -\*(SN List Widget -.XE -.IN "List widget" "" "@DEF@" -The List widget is a rectangle that contains a list of strings formatted -into rows and columns. -When one of the strings is selected, -it is highlighted, and an application callback routine is invoked. -.\"When the cursor pointer is clicked on one of the strings -.\"it is shown to be selected by highlighting and the application's -.\"callback routine is invoked. -.LP -The class variable for the List widget is -.PN listWidgetClass . -.LP -When creating a List widget instance, -the following resources are retrieved from the argument list -or from the resource database: -.IN "List widget" "resources" -.ps 9 -.nr PS 9 -.vs 11 -.nr VS 11 -.TS H -lw(1.5i) lw(1i) lw(1i) lw(2i). -_ -.sp 3p -.TB -Name Type Default Description -.sp 3p -_ -.TH -.R -.sp 3p -XtNbackground Pixel XtDefaultBackground Window background color -XtNbackgroundPixmap Pixmap None Window background pixmap -XtNborderColor Pixel XtDefaultForeground Window border color -XtNborderPixmap Pixmap None Window border pixmap -XtNborderWidth Dimension 1 Width of border -XtNcallback XtCallbackList NULL Selection callback function -XtNcolumnSpacing Dimension 6 Space between columns in the list -XtNcursor Cursor left_ptr Pointer cursor -XtNdefaultColumns int 2 Number of columns to use -T{ -XtNdestroyCallback -T} T{ -XtCallbackList -T} T{ -NULL -T} T{ -Callbacks for -.PN XtDestroyWidget -T} -XtNfont XFontStruct* XtDefaultFont Font for list text -XtNforceColumns Boolean False Force the use of XtNdefaultColumns -XtNforeground Pixel XtDefaultForeground Foreground (text) color -XtNheight Dimension Contains list exactly Height of widget -XtNinsensitiveBorder Pixmap Gray Border when not sensitive -T{ -XtNinternalHeight -T} T{ -Dimension -T} T{ -2 -T} T{ -Spacing between list and widget edges -T} -T{ -XtNinternalWidth -T} T{ -Dimension -T} T{ -4 -T} T{ -Spacing between list and widget edges -T} -XtNlist String * List name An array of strings that is the list -T{ -XtNlongest -T} T{ -int -T} T{ -Longest item -T} T{ -Length of the longest list item in pixels -T} -T{ -XtNmappedWhenManaged -T} T{ -Boolean -T} T{ -True -T} T{ -Whether -.PN XtMapWidget -is automatic -T} -T{ -XtNnumberStrings -T} T{ -int -T} T{ -Number of strings -T} T{ -Number of items in the list -T} -XtNpasteBuffer Boolean False Copy the selected item to cut buffer 0 -XtNrowSpacing Dimension 4 Space between rows in the list -XtNsensitive Boolean True Whether widget receives input -XtNtranslations TranslationTable None Event-to-action translations -XtNverticalList Boolean False Specify the layout of list items -XtNwidth Dimension Contains list exactly Width of widget -XtNx Position 0 Widget x coordinate -XtNy Position 0 Widget y coordinate -.sp 3p -_ -.TE -.ps 11 -.nr PS 11 -.vs 13 -.nr VS 13 -.LP -The new resources associated with the List widget are: -.TS -lw(1.7i) lw(4i). -T{ -.PN XtNcolumnSpacing -.br -.PN XtNrowSpacing -T} T{ -Specify the amount of space between each of the rows and columns in the list. -T} -.sp -T{ -.PN XtNdefaultColumns -T} T{ -Specifies the default number of columns, -which is used when neither the width nor the height of the List widget -is specified or when XtNforceColumns is -.PN True . -T} -.sp 6p -T{ -.PN XtNforceColumns -T} T{ -Specifies that the default number of columns is to be used -no matter what the current size of the List widget is. -T} -.sp 6p -T{ -.PN XtNheight -T} T{ -Specifies the height of the List widget. -The default value is the minimum height that will contain -the entire list with the spacing values specified. -If the specified height is larger than the minimum, -the list is put in the upper left corner. -T} -.sp 6p -T{ -.PN XtNinternalHeight -T} T{ -Represents a margin, in pixels, between the top and bottom -of the list and the edges of the List widget. -T} -.sp 6p -T{ -.PN XtNinternalWidth -T} T{ -Represents a margin, in pixels, between the left and right edges -of the list and the edges of the List widget. -T} -.sp 6p -T{ -.PN XtNlist -T} T{ -Specifies the array of text strings that is to displayed in the List widget. -If the default for XtNnumberStrings is used, -the list must be null-terminated. -If a value is not specified for the list, -the number of strings is set to 1, -and the name of the widget is used as the list. -T} -.sp 6p -T{ -.PN XtNlongest -T} T{ -Specifies the length of the longest string in the current list in pixels. -If the client knows the length, -it should specify it. -The List widget will compute a default length by searching through the list. -T} -.sp 6p -T{ -.PN XtNnumberStrings -T} T{ -Specifies the number of strings in the current list. -If a value is not specified, -the list must be null-terminated. -T} -.sp 6p -T{ -.PN XtNpasteBuffer -T} T{ -If this is -.PN True , -then the value of the string selected will be put -into X cut buffer 0. -T} -.sp 6p -T{ -.PN XtNsensitive -T} T{ -If set to -.PN False , -the List widget will change its window border to -.PN XtNinsensitiveBorder -and display all items in the list as stippled strings. -While the List widget is insensitive, -no item in the list can be selected or highlighted. -T} -.sp 6p -T{ -.PN XtNverticalList -T} T{ -If this is -.PN True , -the elements in the list are arranged vertically; if -.PN False , -the elements are arranged horizontally. -T} -.sp 6p -T{ -.PN XtNwidth -T} T{ -Specifies the width of the List widget. -The default value is the minimum width that will contain -the entire list with the spacing values specified. -If the specified width is larger than the minimum, -the list is put in the upper left corner. -T} -.TE -.LP -The List widget has three predefined actions: Set, Unset, and Notify. -Set and Unset allow switching the foreground and background colors -for the current list item. -Notify allows processing application callbacks. -.LP -The following is the default translation table used by the List Widget: -.LP -.Ds -.TA .5i 2.25i -.ta .5i 2.25i -,: Set(\|) Notify(\|) -.De -.LP -.IN "List widget" "creating" -.IN "Creating widgets" "List" -To create a List widget instance, use -.PN XtCreateWidget -and specify the class variable -.PN listWidgetClass . -.LP -.IN "List widget" "destroying" -.IN "Destroying widgets" "list" -To destroy a List widget instance, use -.PN XtDestroyWidget -and specify the widget ID of the List widget. -.LP -The List widget supports two callback lists: -.IP \(bu 5 -.PN XtNdestroyCallback -.IP \(bu 5 -.PN XtNcallback -.LP -The notify action executes the callbacks on the the -.PN XtNcallback -list. -.LP -The call_data argument passed to callbacks on the -.PN XtNcallback -list is a pointer to an -.PN XtListReturnStruct -structure, defined in -.Pn < X11/List.h >: -.LP -.Ds 0 -.TA .5i 2.25i -.ta .5i 2.25i -.IN "XtListReturnStruct" "" "@DEF@" -typedef struct _XtListReturnStruct { - String string; /* string shown in the list. */ - int index; /* index of the item selected. */ -} XtListReturnStruct; -.De -.NH 3 -Changing the List -.LP -To change the list that is displayed, use -.PN XtListChange . -.IN "XtListChange" "" "@DEF@" -.FD 0 -void XtListChange(\fIw\fP, \fIlist\fP, \fInitems\fP, \fIlongest\fP, \fIresize\fP) -.br - Widget \fIw\fP; -.br - String * \fIlist\fP; -.br - int \fInitems\fP, \fIlongest\fP; -.br - Boolean \fIresize\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget ID. -.IP \fIlist\fP 1i -Specifies the new list for the list widget to display. -.IP \fInitems\fP 1i -Specifies the number of items in the list. -If a value less than 1 is specified, -list must be null terminated. -.IP \fIlongest\fP 1i -Specifies the length of the longest item in the list in pixels. -If a value less than 1 is specified, -the List widget calculates the value for you. -.IP \fIresize\fP 1i -Specifies a Boolean value that indicates whether the List widget should try -to resize itself -.Pn ( True ) -or not -.Pn ( False ) -after making the change. -Note that the constraints of the parent of this widget are always enforced, -regardless of the value specified. -.LP -.PN XtListChange -changes the list of strings that the List widget is to display. -.NH 3 -Highlighting an Item -.LP -To highlight an item in the list use, -.PN XtListHighlight -.IN "XtListHighlight" "" "@DEF@" -.FD 0 -void XtListHighlight(\fIw\fP, \fIitem\fP); -.br - Widget \fIw\fP; -.br - int \fIitem\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget ID. -.IP \fIitem\fP 1i -Specifies the index into the current list that indicates the item -to be highlighted. -.LP -Only one item can be highlighted at a time. -If an item is already highlighted when -.PN XtListHighlight -is called, -the highlighted item is immediately unhighlighted and -the new item is highlighted. -.NH 3 -Unhighlighting an Item -.LP -To unhighlight the currently highlighted item in the list, use -.PN XtListUnhighlight -.IN "XtListUnhighlight" "" "@DEF@" -.FD 0 -void XtListUnhightlight(\fIw\fP); -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget ID. -.NH 3 -Retrieving the Currently Selected Item -.LP -To retrieve an item in the list use, -.PN XtListShowCurrent -.IN "XtListShowCurrent" "" "@DEF@" -.FD 0 -XtListReturnStruct *XtListShowCurrent(\fIw\fP); -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget ID. -.LP -The -.PN XtListShowCurrent -function returns a pointer to an -.PN XtListReturnStruct -structure, -contains the currently highlighted item. -If the value of the index member is XT_LIST_NONE, -.IN "XT_LIST_NONE" -the string member is undefined, -which indicates that no item is currently selected. -.\"------------------------------------------------------------------------ -.NH 2 -Grip Widget -.LP -.XS -\*(SN Grip Widget -.XE -.IN "Grip widget" "" "@DEF@" -.LP -The Grip widget provides a small region in which user input -events -(such as -.PN ButtonPress or -.PN ButtonRelease ) -may be handled. -The most common use for the grip is as an attachment -point for visually repositioning an object, -such as the pane border in a VPaned widget. -.LP -The class variable for the Grip widget is -.PN gripWidgetClass . -.LP -When creating a Grip widget instance, -the following resources are retrieved from the argument list -or from the resource database: -.ps 9 -.nr PS 9 -.vs 11 -.nr VS 11 -.TS H -lw(1.5i) lw(1i) lw(1i) lw(2i). -_ -.sp 3p -.TB -Name Type Default Description -.sp 3p -_ -.TH -.R -.sp 3p -XtNborderColor Pixel XtDefaultForeground Window border color -XtNborderPixmap Pixmap None Window border pixmap -XtNborderWidth Dimension 0 Width of the border in pixels -XtNcallback XtCallbackList None Action routine -XtNcursor Cursor None Cursor for the grip -T{ -XtNdestroyCallback -T} T{ -XtCallbackList -T} T{ -NULL -T} T{ -Callback for -.PN XtDestroyWidget -T} -XtNforeground Pixel XtDefaultForeground Window background color -XtNheight Dimension 8 Height of the widget -T{ -XtNmappedWhenManaged -T} T{ -Boolean -T} T{ -True -T} T{ -Whether -.PN XtMapWidget -is automatic -T} -XtNsensitive Boolean True Whether widget should receive input -XtNtranslations TranslationTable None Event-to-action translations -XtNwidth Dimension 8 Width of the widget -XtNx Position 0 x coordinate within parent -XtNy Position 0 y coordinate within parent -.sp 3p -_ -.TE -.ps 11 -.nr PS 11 -.vs 13 -.nr VS 13 -.LP -Note that the Grip widget displays its region with the foreground pixel only. -.LP -The Grip widget does not declare any default event translation bindings, -but it does declare a single action routine named GripAction -in its action table. -The client specifies an arbitrary -event translation table giving parameters to the GripAction routine. -.LP -The -.PN GripAction -action executes the callbacks on the -.PN XtNcallback -list, passing as call_data a pointer to a -.PN GripCallData -structure, defined in -.Pn < X11/Grip.h > : -.LP -.Ds 0 -.TA .5i 2.25i -.ta .5i 2.25i -.IN "GripCallData" "" "@DEF@" -.IN "GripCallDataRec" "" "@DEF@" -typedef struct _GripCallData { - XEvent *event; - String *params; - Cardinal num_params; -} GripCallDataRec, *GripCallData; -.De -.LP -In this structure, the event field is a pointer to the input -event that triggered the action, and params and num_params give -the string parameters specified in the translation table for the -particular event binding. -.IN "Grip widget" "GripAction table" -.LP -The following is an example of a GripAction translation table: -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i - : GripAction(press) - : GripAction(move) - : GripAction(release) -.De -For a complete description of the format of action routines, -see the \fI\*(xT\fP. -.LP -.IN "Grip widget" "creating" -.IN "Creating widgets" "Grip" -To create a Grip widget instance, use -.PN XtCreateWidget -and specify the class variable -.PN gripWidgetClass . -.LP -.IN "Grip widget" "destroying" -.IN "Destroying widgets" "Grip" -To destroy a Command button widget instance, use -.PN XtDestroyWidget -and specify the ID of the Grip widget. -.\"------------------------------------------------------------------------ -.NH 2 -Toggle Widget -.LP -.XS -\*(SN Toggle Widget -.XE -.IN "Toggle widget" "" "@DEF@" - -The Toggle widget is a rectanglular button that contains a text label -or pixmap. This widget maintains a Boolean state (e.g. True/False or -On/Off) and changes state whenever it is selected. When the pointer -cursor is on the Toggle it highlights to indicate that the Toggle is -available for selection. When the pointer button is pressed the -Toggle is selected. This causes the state of the Toggle to reverse -and its callback routine to be invoked. -.LP -Toggle buttons may also be part of a radio group. A radio group is a -list of Toggle buttons in which only one Toggle may be set at any -time. A radio group is identified by giving the widget id of any one -of its members. There is a convenience routine, -.PN XtToggleGetCurrent -that will return information about the Toggle in the radio group that is -currently set. More information on radio groups is presented below. -.LP -The class variable for the Toggle widget is -.PN toggleWidgetClass . -.LP -When creating a Toggle widget instance, -the following resources are retrieved from the argument list -or from the resource database: -.IN "Toggle widget" "resources" -.ps 9 -.nr PS 9 -.vs 11 -.nr VS 11 -.TS H -lw(1.5i) lw(1i) lw(1i) lw(2i). -_ -.sp 3p -.TB -Name Type Default Description -.sp 3p -_ -.TH -.R -.sp 3p -XtNbackground Pixel XtDefaultBackground Window background color -XtNbackgroundPixmap Pixmap None Window background pixmap -T{ -XtNbitmap -T} T{ -Pixmap -T} T{ -None -T} T{ -Pixmap to display in place of the label -T} -XtNborderColor Pixel XtDefaultForeground Window border color -XtNborderPixmap Pixmap None Window border pixmap -XtNborderWidth Dimension 1 Width of button border -XtNcallback XtCallbackList NULL Callback for button select -XtNcursor Cursor None Pointer cursor -T{ -XtNdestroyCallback -T} T{ -XtCallbackList -T} T{ -NULL -T} T{ -Callbacks for -.PN XtDestroyWidget -T} -XtNfont XFontStruct* XtDefaultFont Label font -XtNforeground Pixel XtDefaultForeground Foreground color -XtNheight Dimension Text height Button height -T{ -XtNhighlightThickness -T} T{ -Dimension -T} T{ -2 -T} T{ -Width of border to be highlighted -T} -XtNinsensitiveBorder Pixmap Gray Border when not sensitive -T{ -XtNinternalHeight -T} T{ -Dimension -T} T{ -2 -T} T{ -Internal border height for highlighting -T} -T{ -XtNinternalWidth -T} T{ -Dimension -T} T{ -4 -T} T{ -Internal border width for highlighting -T} -XtNjustify XtJustify XtJustifyCenter Type of text alignment -XtNlabel String Button name Button label -T{ -XtNmappedWhenManaged -T} T{ -Boolean -T} T{ -True -T} T{ -Whether -.PN XtMapWidget -is automatic -T} -XtNradioData Pointer Name of widget Value that will be returned by \fBXtToggleGetCurrent\fP -XtNradioGroup Widget NULL Any other widget in the Toggle's radio group -XtNresize Boolean True Whether to auto-resize in \fBSetValues\fP -XtNsensitive Boolean True Whether widget receives input -XtNstate Boolean Off State of the Toggle widget -XtNtranslations TranslationTable see below Event-to-action translations -XtNwidth Dimension Text width Button width -XtNx Position 0 x coordinate -XtNy Position 0 y coordinate -.sp 3p -_ -.TE -.ps 11 -.nr PS 11 -.vs 13 -.nr VS 13 -.TS -lw(1.7i) lw(4i). -T{ -.PN XtNbitmap -T} T{ -Specifies a bitmap to display in place of the text label -[See the description of this resource in the Label widget for -further details]. -T} -.sp 6p -T{ -.PN XtNcallback -T} T{ -Specifies the callback list of functions to be called when the -Toggle widget changes state. This usually occurs when the Toggle -widget's notify action is called, but when a toggle is in a radio -group it may change state at other times. The places where -this can occur include: -.PN XtToggleSetCurrent , -.PN XtToggleUnsetCurrent , -.PN XtToggleChangeRadioGroup , -the -.PN set -action, -.PN XtSetValues, -and -.PN XtCreateWidget. -T} -.sp 6p -T{ -.PN XtNheight -T} T{ -Specifies the height of the Toggle widget. -The default value is the minimum height that will contain: -.br -\fBXtNinternalheight\fP + height of \fBXtNlabel\fP + \fBXtNinternalHeight\fP -.br -If the specified height is larger than the minimum, -the label string is centered vertically. -T} -.sp 6p -T{ -.PN XtNinternalHeight -T} T{ -Represents the distance in pixels between the top and bottom -of the label text or bitmap and the horizontal edges of the Toggle widget. -HighlightThickness can be larger or smaller than this value. -T} -.sp 6p -T{ -.PN XtNinternalWidth -T} T{ -Represents the distance in pixels between the ends of the label text -or bitmap and the vertical edges of the Toggle widget. -HighlightThickness can be larger or smaller than this value. -T} -.sp 6p -T{ -.PN XtNjustify -T} T{ -Specifies left, center, or right alignment of the label string -within the Toggle widget. -If it is specified within an -.PN ArgList , -one of the values -.PN XtJustifyLeft , -.PN XtJustifyCenter , -or -.PN XtJustifyRight -can be specified. -In a resource of type ``string'', -one of the values ``left'', ``center'', or ``right'' can be specified. -T} -.sp 6p -T{ -.PN XtNlabel -T} T{ -Specifies the text string that is to be displayed in the Toggle widget -if no bitmap is specified. -The default is the widget name of the Toggle widget. -T} -.sp 6p -T{ -.PN XtNradioData -T} T{ -Specifies the data that will be returned from a call to -.PN XtToggleGetCurrent -if this widget is the one that is set in a radio group. This data is -also used to identify the toggle that will be set by a call to -.PN XtToggleSetCurrent. -The value NULL is returned by -.PN XtToggleGetCurrent -if no widget is set in a radio group. Programmers not -specify NULL as \fBXtNradioData\fP, if they intend to use -\fBXtToggleGetCurrent\fP -T} -.sp 6p -T{ -.PN XtNradioGroup -T} T{ -Specifies another Toggle widget which is in the radio group to which this -Toggle widget should be added. A radio group is a group of Toggle widgets, -only one of which may be "set" at a time. If this value is NULL (the default) -then the Toggle will not be part of any radio group and can -change state without effecting any other Toggle widgets. If the -widget specified in this resource is not already in a radio group -then a new radio group will be created containing these two -Toggle widgets. No Toggle widget can be in multiple radio groups. -T} -.sp 6p -T{ -.PN XtNresize -T} T{ -Specifies whether the Toggle widget should attempt to resize to its -preferred dimensions whenever -.PN XtSetValues -is called for it. -The default is -.PN True . -T} -.sp 6p -T{ -.PN XtNsensitive -T} T{ -If set to -.PN False , -the Toggle widget will change its window border to -.PN XtNinsensitiveBorder -and will stipple the label string. -T} -.sp 6p -T{ -.PN XtNstate -T} T{ -Specifies whether the Toggle widget is set (True/On) or unset (False/Off). -T} -.sp 6p -T{ -.PN XtNwidth -T} T{ -Specifies the width of the Toggle widget. -The default value is the minimum width that will contain: -.br -\fBXtNinternalwidth\fP + width of \fBXtNlabel\fP + \fBXtNinternalWidth\fP -.br -If the width is larger or smaller than the minimum, -.PN XtNjustify -determines how the label string is aligned. -T} -.TE -.LP -The Toggle widget supports the following actions: -.IP \(bu 5 -Switching the button between the foreground and background -colors with \fBset\fP, \fBunset\fP and \fBtoggle\fP -.IP \(bu 5 -Processing application callbacks with \fBnotify\fP. -.IP \(bu 5 -Switching the internal border between highlighted -and unhighlighted states with \fBhighlight\fP and \fBunhighlight\fP -.LE -.LP -The following are the default translation bindings that are used -by the Toggle widget: -.LP -.Ds 0 -.TA .5i 2.25i -.ta .5i 2.25i - : highlight(Always) - : unhighlight(\|) - ,: toggle(\|) notify(\|) -.De -.LP -With these bindings, the user can cancel the action before -releasing the button by moving the pointer out of the Toggle widget. -.NH 3 -Toggle Actions -.LP -The full list of actions supported by the Toggle widget is: -.IP \fBhighlight\fP(\fIvalue\fP) 1.5i -Displays the internal highlight border in the color (\fBXtNforeground\fP -or -.PN XtNbackground ) -that contrasts with the interior color of the Toggle widget. -This action procedure takes one of the following conditions: WhenUnset and -Always. If no argument is passed then WhenUnset is assumed, this maintains -backwards compatibility. -.IP \fBunhighlight\fP(\|) 1.5i -Displays the internal highlight border in the color (\fBXtNforeground\fP -or -.PN XtNbackground ) -that matches the interior color of the Toggle widget. -.IP \fBset\fP(\|) 1.5i -Enters the "set" state, in which \fBnotify\fP is possible and displays the -interior of the button in the -.PN XtNforeground -color. The label is displayed -in the -.PN XtNbackground -color. If the widget to be set is in a radio -group then this procedure may unset another widget, which will -cause all routines on its callback list to be invoked. Since only one -toggle in a radio group may be set at a time the callback routines for -the toggle that is to be unset will be called before the one that -is to be set. -.IP \fBunset\fP(\|) 1.5i -Cancels the "set" state and displays the interior of the button in the -.PN XtNbackground -color. The label is displayed in the -.PN XtNforeground -color. -.IP \fBtoggle\fP(\|) 1.5i -Changes the current state of the Toggle widget, causing to be set -if it was previously unset, and unset if it was previously set. -If the widget is to be set, and is in a radio group then this procedure may -unset another widget, which will cause all routines on its callback list -to be invoked. Since only one toggle in a radio -group may be set at a time the callback routines for the toggle that -is to be unset will be called before the one that is to be set. -.IP \fBreset\fP(\|) 1.5i -Cancels any \fBset\fP or \fBhighlight\fP and displays the interior of the -button in the -.PN XtNbackground -color, with the label displayed in the -.PN XtNforeground -color. -.IP \fBnotify\fP(\|) 1.5i -Executes the -.PN XtNcallback -callback list. The call_data contains a Boolean which is -the current state of the widget. -.LP -.IN "Toggle widget" "creating" -.IN "Creating widgets" "Toggle" -To create a Toggle widget instance, use -.PN XtCreateWidget -and specify the class variable -.PN toggleWidgetClass . -.LP -.IN "Toggle widget" "destroying" -.IN "Destroying widgets" "toggle" -To destroy a Toggle widget instance, use -.PN XtDestroyWidget -and specify the widget ID of the Toggle widget. -.LP -The Toggle widget supports two callbacks: -.PN XtNdestroyCallback -and -.PN XtNcallback . -The notify action executes the callbacks on the the -.PN XtNcallback -list. -.SH -Changing the Toggle's Radio Group. -.LP -To enable an application to change the Toggle's current radio group, add -the Toggle to a radio group, or remove the Toggle from a radio group, use -.PN XtToggleChangeRadioGroup. -.IN ""XtToggleChangeRadioGroup"" "@DEF@" -.sp 6p -void XtToggleChangeRadioGroup(\fIw\fP, \fIradio_group\fP) -.br - Widget \fIw\fP, \fIradio_group\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget ID of the Toggle widget. -.IP \fIradio_group\fP 1i -This should be any Toggle on the new radio group. If NULL then the Toggle -will be removed from any radio group of which it is a member. -.LP -If a toggle is already in the set state in the new radio group, -and the toggle to be added is also set then the previously set toggle in -the new radio group is unset and its callback procedures are -invoked. -.SH -Finding the Currently selected Toggle in a radio group of Toggles -.LP -To find the currently selected Toggle in a radio group of Toggle widgets -use -.PN XtToggleGetCurrent. -.IN ""XtToggleGetCurrent"" "@DEF@" -.sp 6p -caddr_t XtToggleGetCurrent(\fIradio_group\fP); -.br - Widget \fIradio_group\fP; -.FN -.IP \fIradio_group\fP 1i -Specifies the widget ID of any Toggle in the radio group. -.LP -The value returned by this function is the data pointed to by -.PN XtNradioData, -for the Toggle in the radio group that is currently set. The default -value for -.PN XtNradioData -is the name of that Toggle widget. If no Toggle -is set in the radio group specified then NULL is returned. -.SH -Changing the Toggle that is set in a radio group. -.LP -To change the Toggle that is currently set in a radio group use -.PN XtToggleSetCurrent. -.IN ""XtToggleSetCurrent"" "@DEF@" -.sp 6p -void XtToggleSetCurrent(\fIradio_group\fP, \fIradio_data\fP); -.br - Widget \fIradio_group\fP; - caddr_t \fIradio_data\fP; -.FN -.IP \fIradio_group\fP 1i -Specifies the widget ID of any Toggle in the radio group. -.IP \fIradio_data\fP 1i -Specifies the -.PN XtNradioData -identifying the Toggle that should be set in the radio group specified -by the \fIradio_group\fP argument. -.LP - -\fBXtToggleSetCurrent\fP locates the Toggle widget to be set by -matching \fIradio_data\fP against the \fBXtNradioData\fP for each -Toggle in the radio group. If none match \fBXtToggleSetCurrent\fP -returns without making any changes. If more than one Toggle matches, -\fBXtToggleSetCurrent\fP will choose a Toggle to set arbitrarily. If -this causes any Toggle widgets to change state all routines in their -callback lists will be invoked. Since only one toggle in a radio -group may be set at a time the callback routines for a Toggle that -is to be unset will be called before the one that is to be set. - -.SH -Unsetting all Toggles in a radio group. -.LP -To unset all Toggle widgets in a radio group use -.PN XtToggleUnsetCurrent. -.IN ""XtToggleUnsetCurrent"" "@DEF@" -.sp 6p -void XtToggleUnsetCurrent(\fIradio_group\fP); -.br - Widget \fIradio_group\fP; -.FN -.IP \fIradio_group\fP 1i -Specifies the widget ID of any Toggle in the radio group. -.LP -If this causes a Toggle widget to change state all routines on its -callback list will be invoked. -.\"------------------------------------------------------------------------ -.NH 2 -Template Widget - Creating A Custom Widget -.LP -.XS -\*(SN Template Widget - Creating A Custom Widget -.XE -.IN "Template widget" "" "@DEF@" -.LP -Although the task of creating a new widget may at first appear a little -daunting, there is a basic simple pattern that all widgets follow. The -Athena widget library contains three files that are intended to assist -in writing a custom widget. -.LP -Reasons for wishing to write a custom widget include: -.IP \(bu 3 -Convenient access to resource management procedures to obtain fonts, -colors, etc., even if user customization is not desired. -.IP \(bu 3 -Convenient access to user input dispatch and translation management procedures. -.IP \(bu 3 -Access to callback mechanism for building higher-level application libraries. -.IP \(bu 3 -Customizing the interface or behavior of an existing widget to suit a -special application need. -.IP \(bu 3 -Desire to allow user customization of resources such as fonts, colors, -etc., or to allow convenient re-binding of keys and buttons to internal -functions. -.IP \(bu 3 -Converting a non-Toolkit application to use the Toolkit. -.LP -In each of these cases, the operation needed to create a new widget is -to "subclass" an existing one. If the desired semantics of the new -widget are similar to an existing one, then the implementation of the -existing widget should be examined to see how much work would be -required to create a subclass that will then be -able to share the existing class methods. Much time will be saved in -writing the new widget if an existing widget class Expose, Resize and/or -GeometryManager method can be shared by the subclass. -.LP -Note that some trivial uses of a ``bare-bones'' widget may be achieved by -simply creating an instance of the Core -widget. The class variable to use when creating a Core widget is -.PN widgetClass . -The geometry of the Core widget is determined entirely by the parent widget. -.LP -It is very often the case than an application will have a special need -for a certain set of functions and that many copies of these functions -will be needed. For example, when converting an older application to use -the Toolkit, it may be desireable to have a "Window Widget" class that -might have the following semantics: -.IP \(bu 3 -Allocate 2 drawing colors in addition to a background color. -.IP \(bu 3 -Allocate a text font. -.IP \(bu 3 -Execute an application-supplied function to handle exposure events. -.IP \(bu 3 -Execute an application-supplied function to handle user input events. -.LP -It is obvious that a completely general-purpose WindowWidgetClass could -be constructed that would export all class methods as callbacks lists, -but such a widget would be very large and would have to choose some -arbitrary number of resources such as colors to allocate. An application -that used many instances of the general-purpose widget would therefore -un-necessarily waste many resources. -.LP -.sp -In this section, an outline will be given of the procedure to follow to -construct a special-purpose widget to address the items listed above. -The reader should refer to the appropriate sections of the \fI\*(xT\fP -for complete details of the material outlined here. Section 1.4 of -the \fI\*(xI\fP should be read in conjunction with this section. -.LP -All Athena widgets have three separate files associated with them: -.LP -.IP \(bu 3 -A "public" header file containing declarations needed by -applications programmers -.IP \(bu 3 -A "private" header file containing additional declarations needed by the -widget and any subclasses -.IP \(bu 3 -A source code file containing the implementation of the widget -.LP -This separation of functions into three files is suggested for all -widgets, but nothing in the Toolkit actually requires this format. In -particular, a private widget created for a single application may easily -combine the "public" and "private" header files into a single file, or -merge the contents into another application header file. Similarly, the -widget implementation can be merged into other application code. -.LP -.sp -In the following example, the public header file -.Pn < X11/Template.h >, -the private header file -.Pn < X11/TemplateP.h > -and the source code file -.Pn < X11/Template.c > -will be modified to produce the "WindowWidget" described above. -In each case, the files have been designed so that a global string -replacement of ``Template'' and ``template'' -with the name of your new widget, using -the appropriate case, can be done. -.NH 3 -Public Header File -.LP -The public header file contains declarations that will be required by any -application module that needs to refer to the widget; whether to create -an instance of the class, to perform an -.PN XtSetValues -operation, or to call a public routine implemented by the widget class. -.LP -The contents of the Template public header file, -.Pn < X11/Template.h >, -are: -.de CB -.sp -.ps 9 -.nr PS 9 -.vs 10 -.Ds 0 -.in +.25i -.TA .25i 1.4i 2.4i 2.75i 3.5i -.ta .25i 1.4i 2.4i 2.75i 3.5i -.. -.de CE -.De -.\".in -.25i -.ps 11 -.nr PS 11 -.vs 13 -.. -.CB -.\".so ../../lib/Xaw/Template.h -#include - -/* XConsortium: Template.h,v 1.2 88/10/25 17:22:09 swick Exp $ */ -/* Copyright (c) X Consortium 1987, 1988 */ - -#ifndef _Template_h -#define _Template_h - -/**************************************************************** - * - * Template widget - * - ****************************************************************/ - -/* Resources: - - Name Class RepType Default Value - ---- ----- ------- ------------- - background Background Pixel XtDefaultBackground - border BorderColor Pixel XtDefaultForeground - borderWidth BorderWidth Dimension 1 - destroyCallback Callback Pointer NULL - height Height Dimension 0 - mappedWhenManaged MappedWhenManaged Boolean True - sensitive Sensitive Boolean True - width Width Dimension 0 - x Position Position 0 - y Position Position 0 - -*/ - -/* define any special resource names here that are not in */ - -#define XtNtemplateResource "templateResource" - -#define XtCTemplateResource "TemplateResource" - -/* declare specific TemplateWidget class and instance datatypes */ - -typedef struct _TemplateClassRec* TemplateWidgetClass; -typedef struct _TemplateRec* TemplateWidget; - -/* declare the class constant */ - -extern WidgetClass templateWidgetClass; - -#endif _Template_h - -.CE -.LP -.sp -You will notice that most of this file is documentation. The crucial -parts are the last 8 lines where macros for any private resource names -and classes are defined and where the widget class datatypes and class -record pointer are declared. -.LP -For the "WindowWidget", we want 2 drawing colors, a callback list for -user input and an -\fBXtNexposeCallback\fP callback list, and we will declare three -convenience procedures, so we need to add -.LP -.sp -.CB -/* Resources: - ... - callback Callback Callback NULL - drawingColor1 Color Pixel XtDefaultForeground - drawingColor2 Color Pixel XtDefaultForeground - exposeCallback Callback Callback NULL - font Font XFontStruct* XtDefaultFont - ... - */ - -#define XtNdrawingColor1 "drawingColor1" -#define XtNdrawingColor2 "drawingColor2" -#define XtNexposeCallback "exposeCallback" - -extern Pixel WindowColor1(\|/* Widget */\|); -extern Pixel WindowColor2(\|/* Widget */\|); -extern Font\ \ WindowFont(\|/* Widget */\|); -.CE -.LP -Note that we have chosen to call the input callback list by the generic -name, -.PN XtNcallback , -rather than a specific name. If widgets that define a single user-input -action all choose the same resource name then there is greater possibility -for an application to switch between widgets of different types. -.NH 3 -Private Header File -.LP -The private header file contains the complete declaration of the class -and instance structures for the widget and any additional private data -that will be required by anticipated subclasses of the widget. -Information in the private header file is normally hidden from the -application and is designed to be accessed only through other public -procedures; e.g. -.PN XtSetValues . -.LP -The contents of the Template private header file, -.Pn < X11/TemplateP.h >, -are: -.CB -.\".so ../../lib/Xaw/TemplateP.h -#include - -/* XConsortium: TemplateP.h,v 1.2 88/10/25 17:31:47 swick Exp $ */ -/* Copyright (c) X Consortium 1987, 1988 */ - -#ifndef _TemplateP_h -#define _TemplateP_h - -#include "Template.h" -/* include superclass private header file */ -#include - -/* define unique representation types not found in */ - -#define XtRTemplateResource "TemplateResource" - -typedef struct { - int empty; -} TemplateClassPart; - -typedef struct _TemplateClassRec { - CoreClassPart core_class; - TemplateClassPart template_class; -} TemplateClassRec; - -extern TemplateClassRec templateClassRec; - -typedef struct { - /* resources */ - char* resource; - /* private state */ -} TemplatePart; - -typedef struct _TemplateRec { - CorePart core; - TemplatePart template; -} TemplateRec; - -#endif _TemplateP_h - -.CE -.LP -.sp -The private header file includes the private header file of its -superclass, thereby exposing the entire internal structure of the widget. -It may not always be advantageous to do this; your own project -development style will dictate the appropriate level of detail to expose -in each module. -.LP -The "WindowWidget" needs to declare two fields in its instance structure to -hold the drawing colors, a resource field for the font and a field for the -expose and user input callback lists: -.CB -typedef struct { - /* resources */ - Pixel color_1; - Pixel color_2; - XFontStruct* font; - XtCallbackList expose_callback; - XtCallbackList input_callback; - /* private state */ - /* (none) */ -} WindowPart; -.CE -.NH 3 -Widget Source File -.LP -The source code file implements the widget class itself. The unique -part of this file is the declaration and initialization of the -widget class record structure and the declaration of all resources and -action routines added by the widget class. -.LP -The contents of the Template implementation file, -.Pn < X11/Template.c >, -are: -.CB -.\".so ../../lib/Xaw/Template.c -#include - -/* XConsortium: Template.c,v 1.2 88/10/25 17:40:25 swick Exp $ */ -/* Copyright (c) X Consortium 1987, 1988 */ - -#include -#include -#include "TemplateP.h" - -static XtResource resources[] = { -#define offset(field) XtOffset(TemplateWidget, template.field) - /* {name, class, type, size, offset, default_type, default_addr}, */ - { XtNtemplateResource, XtCTemplateResource, XtRTemplateResource, sizeof(char*), - offset(resource), XtRString, "default" }, -#undef offset -}; - -static void TemplateAction(/* Widget, XEvent*, String*, Cardinal* */); - -static XtActionsRec actions[] = -{ - /* {name, procedure}, */ - {"template", TemplateAction}, -}; - -static char translations[] = -" : template(\|) \\n\\ -"; - -TemplateClassRec templateClassRec = { - { /* core fields */ - /* superclass */ (WidgetClass) &widgetClassRec, - /* class_name */ "Template", - /* widget_size */ sizeof(TemplateRec), - /* class_initialize */ NULL, - /* class_part_initialize */ NULL, - /* class_inited */ FALSE, - /* initialize */ NULL, - /* initialize_hook */ NULL, - /* realize */ XtInheritRealize, - /* actions */ actions, - /* num_actions */ XtNumber(actions), - /* resources */ resources, - /* num_resources */ XtNumber(resources), - /* xrm_class */ NULLQUARK, - /* compress_motion */ TRUE, - /* compress_exposure */ TRUE, - /* compress_enterleave */ TRUE, - /* visible_interest */ FALSE, - /* destroy */ NULL, - /* resize */ NULL, - /* expose */ NULL, - /* set_values */ NULL, - /* set_values_hook */ NULL, - /* set_values_almost */ XtInheritSetValuesAlmost, - /* get_values_hook */ NULL, - /* accept_focus */ NULL, - /* version */ XtVersion, - /* callback_private */ NULL, - /* tm_table */ translations, - /* query_geometry */ XtInheritQueryGeometry, - /* display_accelerator */ XtInheritDisplayAccelerator, - /* extension */ NULL - }, - { /* template fields */ - /* empty */ 0 - } -}; - -WidgetClass templateWidgetClass = (WidgetClass)&templateClassRec; - -.CE -The resource list for the "WindowWidget" might look like the following: -.CB -static XtResource resources[] = { -#define offset(field) XtOffset(WindowWidget, window.field) - /* {name, class, type, size, offset, default_type, default_addr}, */ - { XtNdrawingColor1, XtCColor, XtRPixel, sizeof(Pixel), - offset(color_1), XtRString, XtDefaultForeground }, - { XtNdrawingColor2, XtCColor, XtRPixel, sizeof(Pixel), - offset(color_2), XtRString, XtDefaultForeground }, - { XtNfont, XtCFont, XtRFontStruct, sizeof(XFontStruct*), - offset(font), XtRString, XtDefaultFont }, - { XtNexposeCallback, XtCCallback, XtRCallback, sizeof(XtCallbackList), - offset(expose_callback), XtRCallback, NULL }, - { XtNcallback, XtCCallback, XtRCallback, sizeof(XtCallbackList), - offset(input_callback), XtRCallback, NULL }, -#undef offset -}; -.CE -.LP -The user input callback will be implemented by an action procedure which -passes the event pointer as call_data. The action procedure -is declared as: -.CB -/* ARGSUSED */ -static void InputAction(w, event, params, num_params) - Widget w; - XEvent *event; - String *params; /* unused */ - Cardinal *num_params; /* unused */ -{ - XtCallCallbacks(w, XtNcallback, (caddr_t)event); -} - -static XtActionsRec actions[] = -{ - /* {name, procedure}, */ - {"input", InputAction}, -}; -.CE -.LP -and the default input binding will be to execute the input callbacks on -.PN KeyPress -and -.PN ButtonPress : -.LP -.CB -static char translations[] = -" : input(\|) \\n\\ - : input(\|) \\ -"; -.CE -.LP -In the class record declaration and initialization, the only field that -is different from the Template is the expose procedure: -.CB -/* ARGSUSED */ -static void Redisplay(w, event, region) - Widget w; - XEvent *event; /* unused */ - Region region; -{ - XtCallCallbacks(w, XtNexposeCallback, (caddr_t)region); -} - -WindowClassRec windowClassRec = { - - ... - - /* expose */ Redisplay, -.CE -.LP -.sp -The "WindowWidget" will also declare three public procedures to return the -drawing colors and the font id, saving the application the effort of -constructing an argument list for a call to -.PN XtGetValues : -.LP -.CB -Pixel WindowColor1(w) - Widget w; -{ - return ((WindowWidget)w)->window.color_1; -} - -Pixel WindowColor2(w) - Widget w; -{ - return ((WindowWidget)w)->window.color_2; -} - -Font WindowFont(w) - Widget w; -{ - return ((WindowWidget)w)->window.font->fid; -} -.CE -.LP -The "WindowWidget" is now complete. The application can retrieve the two -drawing colors from the widget instance by calling either -.PN XtGetValues , -or the \fBWindowColor\fP functions. The actual window created for the -"WindowWidget" is available by calling the -.PN XtWindow -function. -.LP -To test the new ``WindowWidget'', you may substitute ``window'' for -``command'' in the sample program given in Section 2.7.3. -.TC diff --git a/doc/xorg-docs/specs/Xaw/block.awk b/doc/xorg-docs/specs/Xaw/block.awk deleted file mode 100644 index 0dd75f3f7..000000000 --- a/doc/xorg-docs/specs/Xaw/block.awk +++ /dev/null @@ -1,22 +0,0 @@ -BEGIN { - firstchar = "@"; - a["a"] = "A"; a["b"] = "B"; a["c"] = "C"; - a["d"] = "D"; a["e"] = "E"; a["f"] = "F"; - a["g"] = "G"; a["h"] = "H"; a["i"] = "I"; - a["j"] = "J"; a["k"] = "K"; a["l"] = "L"; - a["m"] = "M"; a["n"] = "N"; a["o"] = "O"; - a["p"] = "P"; a["q"] = "Q"; a["r"] = "R"; - a["s"] = "S"; a["t"] = "T"; a["u"] = "U"; - a["v"] = "V"; a["w"] = "W"; a["x"] = "X"; - a["y"] = "Y"; a["z"] = "Z"; -} - -{ - c = substr($2,2,1); - if (c >= "a" && c <= "z") - c = a[c]; - if (c != firstchar) - printf(".LB %s\n", c); - firstchar = c; - print; -} diff --git a/doc/xorg-docs/specs/Xaw/fixindex.awk b/doc/xorg-docs/specs/Xaw/fixindex.awk deleted file mode 100644 index e8849f3bd..000000000 --- a/doc/xorg-docs/specs/Xaw/fixindex.awk +++ /dev/null @@ -1,73 +0,0 @@ -BEGIN { - FS = ":"; - BD = "\\s+1\\fB"; - ED = "\\fP\\s-1"; -} - -NR == 1 { - if ($3 != "") - printf(".Ib \"%s\"\n", $2); - major = $2; - minor = $3; - if ($4 == "@DEF@") { - pagelist = BD $1 ED; - } - else { - pagelist = $1; - } - pageno = $1; - oldpageno = $1; - oldpagelist = ""; -} - -NR != 1 { - if ($2 == major && $3 == minor) # neither has changed - { - if ($1 != pageno) { # new page number, append - oldpageno = $1; - oldpagelist = pagelist; - if ($4 == "@DEF@") { - pagelist = pagelist ", " BD $1 ED; - } - else { - pagelist = pagelist ", " $1; - } - } - else { # old page, but check for def - if ($4 == "@DEF@") { - if (pageno == oldpageno) { - if (oldpagelist != "") - oldpagelist = oldpagelist ", " - } - pagelist = oldpagelist BD $1 ED; - } - } - } - else # one has changed - { - if (minor != "") # dump full record - printf(".I< \"%s\" \"%s\" \"%s\"\n", major, minor, pagelist); - else - printf(".I> \"%s\" \"%s\"\n", major, pagelist); - if ($4 == "@DEF@") { # restart pagelist - pagelist = BD $1 ED; - } - else { - pagelist = $1; - } - oldpagelist = ""; - oldpageno = $1; - if ($2 != major && $3 != "") # major has changed, minor not null - printf(".Ib \"%s\"\n", $2); - } - major = $2; - minor = $3; - pageno = $1; -} - -END { - if (minor != "") # dump full record - printf(".I< \"%s\" \"%s\" \"%s\"\n", major, minor, pagelist); - else - printf(".I> \"%s\" \"%s\"\n", major, pagelist); -} diff --git a/doc/xorg-docs/specs/Xaw/strings.mit b/doc/xorg-docs/specs/Xaw/strings.mit deleted file mode 100644 index e8a339bf2..000000000 --- a/doc/xorg-docs/specs/Xaw/strings.mit +++ /dev/null @@ -1,10 +0,0 @@ -.\" $Xorg: strings.mit,v 1.3 2000/08/17 19:42:29 cpqbld Exp $ -.ds tk X Toolkit -.ds xT X Toolkit Intrinsics \(em C Language Interface -.ds xI Intrinsics -.ds xW Athena Widget Set \(em C Language Interface -.ds xL Xlib \(em C Language X Interface -.ds xC Inter-Client Communication Conventions Manual -.ds Rn 4 -.ds Vn 2.2 -.hw XtMake-Geometry-Request XtQuery-Geometry wid-get sub-class sub-classes diff --git a/doc/xorg-docs/specs/Xaw/strings.xaw b/doc/xorg-docs/specs/Xaw/strings.xaw deleted file mode 100644 index b98e84d2b..000000000 --- a/doc/xorg-docs/specs/Xaw/strings.xaw +++ /dev/null @@ -1,714 +0,0 @@ -.\" $Xorg: strings.xaw,v 1.3 2000/08/17 19:42:29 cpqbld Exp $ -\" These macros are not associated with any widget. - -.de Rs \" Resource Conversion message -A converter is registered for this resource that will convert -the following strings: \fB\\$1\fP. -.. -.de Sk \" This is a resource of the associated sink. -.if 'AsciiText'\\$1' This is a resource of the associated sink. -.. -.de So \" This is a resource of the associated source. -.if 'AsciiText'\\$1' This is a resource of the associated source. -.. - -\" Object Resources -.de Dc \" Object destroyCallback -.IP destroyCallback 1.5i -All functions on this list are called when this widget is destroyed. -.. - -\" RectObj Resources -.de As \" RectObj ancestorSensitive -.IP ancestorSensitive 1.5i -The sensitivity state of the ancestors of this widget. A widget is -insensitive if either it or any of its ancestors is insensitive. -This resource should not be changed with \fBXtSetValues\fP, although it -may be queried. -.. -.de Bw \" RectObj borderWidth -.IP borderWidth 1.5i -The width of this widget's window border. -.. -.de Hw \" RectObj height and width -.IP height 1.5i -.br -.ns -.IP width 1.5i -The height and width of this widget in pixels. -.. -.de Se \" RectObj sensitive -.IP sensitive 1.5i -Whether or not the toolkit should pass user events to this widget. The -widget will not get input events if either \fBancestorSensitive\fP or -\fBsensitive\fP is \fBFalse\fP. -.. -.de Xy \" RectObj x and y -.IP x 1.5i -.br -.ns -.IP y 1.5i -The location of the upper left outside corner of this widget in its parent. -.. - -\" Core Resources - -.de Ac \" Core accelerators -.IP accelerators 1.5i -A list of event to action bindings to be executed by this widget, even -though the event occurred in another widget. (See the \fI\*(xT\fP for -details). -.. -.de Bg \" Core background -.ie 'Bold'\\$1' .IP \fBbackground\fP 1.5i -.el .IP background 1.5i -A pixel value which indexes the widget's colormap to derive the -background color of the widget's window. -.. -.de Gp \" Core backgroundPixmap -.IP backgroundPixmap 1.5i -The background pixmap of this widget's window. If this resource is set to -anything other than \fBXtUnspecifiedPixmap\fP, the pixmap specified will be -used instead of the background color. -.. -.de Bc \" Core borderColor -.IP borderColor 1.5i -A pixel value which indexes the widget's colormap to derive the border -color of the widget's window. -.. -.de Bp \" Core borderPixmap -.IP borderPixmap 1.5i -The border pixmap of this widget's window. If this resource is set to -anything other than \fBXtUnspecifiedPixmap\fP, the pixmap specified will be -used instead of the border color. -.. -.de Cm \" Core colormap -.IP colormap 1.5i -The colormap that this widget will use. -.. -.de Dp \" Core depth -.IP depth 1.5i -The depth of this widget's window. -.. -.de Mm \" Core mappedWhenManaged -.IP mappedWhenManaged 1.5i -If this resource is \fBTrue\fP, then the widget's window will -automatically be mapped by the Toolkit when it is realized and managed. -.. -.de Sc \" Core screen -.IP screen 1.5i -The screen on which this widget is displayed. This is not a settable -resource. -.. -.de Tr \" Core translations -.IP translations 1.5i -The event bindings associated with this widget. -.. - -\" Simple Widget Resource Definitions - -.de Cu \" Simple cursor -.ie 'Bold'\\$1' .IP \fBcursor\fP 1.5i -.el .IP cursor 1.5i -The image that will be displayed as the pointer cursor whenever it is in -this widget. The use of this resource is deprecated in favor -of \fBcursorName\fP. -.. -.de Cn \" Simple cursorName -.ie 'Bold'\\$1' .IP \fBcursorName\fP 1.5i -.el .IP cursorName 1.5i -The name of the symbol to use to represent the pointer cursor. This resource -will override the \fBcursor\fP resource if both are specified. (See 2.4.1) -.. -.de Ib \" Simple insensitiveBorder -.ie 'Bold'\\$1' .IP \fBinsensitiveBorder\fP 1.5i -.el .IP insensitiveBorder 1.5i -This pixmap will be tiled into the widget's border if the widget becomes -insensitive. -.. -.de In \" Simple international -.ie 'Bold'\\$1' .IP \fBinternational\fP 1.5i -.el .IP international 1.5i -This is a boolean flag, only settable at widget creation -time. A value of \fBfalse\fP signals the widget to use -pre-R6 internationalization (specifically, the lack thereof), -such as using fonts for displaying text, etc. A value of -\fBtrue\fP directs the widget to act in an internationalized -manner, such as utilizing font sets for displaying text, etc. -.. -.de Ix \" Simple international -.ie 'Bold'\\$1' .IP \fBinternational\fP 1.5i -.el .IP international 1.5i -This is a boolean flag, only settable at widget creation -time. While not utilized in this widget, it can and should -be checked by any subclasses that have behavior that -should vary with locale. -.. -.de Pf \" Simple pointerColor -.ie 'Bold'\\$1' .IP \fBpointerColor\fP 1.5i -.el .IP pointerColor 1.5i -A pixel value which indexes the widget's colormap to derive the foreground -color of the pointer symbol specified by the \fBcursorName\fP resource. -.. -.de Pb \" Simple pointerColorBackground -.ie 'Bold'\\$1' .IP \fBpointerColorBackground\fP 1.75i -.el .IP pointerColorBackground 1.75i -A pixel value which indexes the widget's colormap to derive the background -color of the pointer symbol specified by the \fBcursorName\fP resource. -.. - -\" Label Widget Resource Definitions - -.de Bm \" Label bitmap -.ie 'Bold'\\$1' .IP \fBbitmap\fP 1.5i -.el .IP bitmap 1.5i -A bitmap to display instead of the \fBlabel\fP. The default size of the -widget will be just large enough to contain the bitmap and the widget's -internal width and height. The resource converter for this resource -constructs bitmaps from the contents of files. (See \fBConverting -Bitmaps\fP for details.) If this bitmap is one bit deep then the 1's -will be rendered in the foreground color, and the 0's in the background -color. If \fBbitmap\fP has a depth greater than one, it is copied -directly into the window. -.. -.de Le \" Label encoding -.ie 'Bold'\\$1' .IP \fBencoding\fP 1.5i -.el .IP encoding 1.5i -The encoding method used by the value of the \fBlabel\fP resource. -The value may be \fBXawTextEncoding8bit\fP or \fBXawTextEncodingChar2b\fP. -When \fBinternational\fP is set to \fBtrue\fP this resource is not used. -.. -.de Lf \" Label font -.ie 'Bold'\\$1' .IP \fBfont\fP 1.5i -.el .IP font 1.5i -The text font to use when displaying the \fBlabel\fP, when the -\fBinternational\fP resource is \fBfalse\fP. -.. -.de Ls \" Label fontSet -.ie 'Bold'\\$1' .IP \fBfontSet\fP 1.5i -.el .IP fontSet 1.5i -The text font set to use when displaying the \fBlabel\fP, when the -\fBinternational\fP resource is \fBtrue\fP. -.. -.de Lg \" Label foreground -.ie 'Bold'\\$1' .IP \fBforeground\fP 1.5i -.el .IP foreground 1.5i -A pixel value which indexes the widget's colormap to derive the -foreground color of the widget's window. This color is also -used to render all 1's in a \fBbitmap\fP one plane deep. -.. -.de Ih \" Label internalHeight -.ie 'Bold'\\$1' .IP \fBinternalHeight\fP 1.5i -.el .IP internalHeight 1.5i -.br -.ns -.ie 'Bold'\\$1' .IP \fBinternalWidth\fP 1.5i -.el .IP internalWidth 1.5i -The minimum amount of space to leave between the graphic -and the vertical and horizontal edges of the window. -.. -.de Ju \" Label justify -.ie 'Bold'\\$1' .IP \fBjustify\fP 1.5i -.el .IP justify 1.5i -.IN "conversions" "Justify" -Specifies left, center, or right alignment of graphic within the -widget. This resource may be specified with the values -\fBXtJustifyLeft\fP, \fBXtJustifyCenter\fP, or \fBXtJustifyRight\fP. -.Rs "left, right, \fPand\fB center". -This resource only has noticeable effect when the width of the widget -is larger than necessary to display the graphic. Note that when the -graphic is a multi-line \fBlabel\fP, the longest line will obey this -justification while shorter lines will be left-justified with the longest -one. - -.. -.de La \" Label label -.ie 'Bold'\\$1' .IP \fBlabel\fP 1.5i -.el .IP label 1.5i -Specifies the text string to be displayed in the widget's window -if no bitmap is specified. The default is the name of this widget. -Regardless of the value of \fBencoding\fP or \fBinternational\fP, -a single newline character (1 byte) will cause a line break. -.. -.de Ll \" Label leftBitmap -.ie 'Bold'\\$1' .IP \fBleftBitmap\fP 1.5i -.el .IP leftBitmap 1.5i -Specifies a bitmap to display to the left of the graphic in the widget's -window. -.. -.de Re \" Label resize -.ie 'Bold'\\$1' .IP \fBresize\fP 1.5i -.el .IP resize 1.5i -Specifies whether the widget should attempt to resize to its -preferred dimensions whenever its resources are modified with -\fBXtSetValues\fP. This attempt to resize may be denied by the parent -of this widget. The parent is always free to resize the widget -regardless of the state of this resource. -.. - -\" Command Widget Resource Definitions - -.de Cb \" Command callback -.ie 'Bold'\\$1' .IP \fBcallback\fP 1.5i -.el .IP callback 1.5i -A list of routines to be called when the \fBnotify\fP action is invoked. -.. -.de Cr \" Command cornerRoundPercent -.ie 'Bold'\\$1' .IP \fBcornerRoundPercent\fP 1.5i -.el .IP cornerRoundPercent 1.5i -When a \fBShapeStyle\fP of \fBroundedRectangle\fP is used, this -resource controls the radius of the rounded corner. The radius of the -rounded corners is specified as a percentage of the length of the -shortest side of the widget. -.. -.de Ht \" Command highlightThickness -.ie 'Bold'\\$1' .IP \fBhighlightThickness\fP 1.5i -.el .IP highlightThickness 1.5i -The thickness of the rectangle that is used to highlight the internal -border of this widget, alerting the user that it is ready to be -selected. The default value is 2 pixels if the \fBshapeStyle\fP is -\fBrectangle\fP, and 0 Pixels (no highlighting) otherwise. -.. -.de Ss \" Command shapeStyle -.ie 'Bold'\\$1' .IP \fBshapeStyle\fP 1.5i -.el .IP shapeStyle 1.5i -.IN "conversions" "ShapeStyle" -Nonrectangular widgets may be created using this resource. -Nonrectangular widgets are supported only on a server that supports the -\fBShape Extension\fP. If nonrectangular widgets are specified -for a server lacking this extension, the shape is ignored and the -widgets will be rectangular. The following shapes are currently -supported: \fBXmuShapeRectangle\fP, \fBXmuShapeOval\fP, -\fBXmuShapeEllipse\fP, and \fBXmuShapeRoundedRectangle\fP. -.Rs "rectangle, oval, ellipse, \fPand\fP roundedRectangle" -.. - -\" Composite Resources - -.de Ch \" Composite children -.IP children 1.5i -A list of all this composite widget's current children. -.. -.de Ip \" Composite insertPosition -.IP insertPosition 1.5i -A function which allows the application programmer to specify the position -of a new child. -.. -.de Nc \" Composite numChildren -.IP numChildren 1.5i -The number of children in this composite widget. -.. - -\" Form Resources - -.de Dd \" Form defaultDistance -.ie 'Bold'\\$1' .IP \fBdefaultDistance\fP 1.5i -.el .IP defaultDistance 1.5i -The default internal spacing for the children. This is -the default value for the constraint resources \fBhorizDistance\fP and -\fBvertDistance\fP. -.. - -\" Form Constraints - -.de Bt \" Form bottom, left, right, and top -.ie 'Bold'\\$1' .IP \fBbottom\fP 1.5i -.el .IP bottom 1.5i -.br -.ns -.ie 'Bold'\\$1' .IP \fBleft\fP 1.5i -.el .IP left 1.5i -.br -.ns -.ie 'Bold'\\$1' .IP \fBright\fP 1.5i -.el .IP right 1.5i -.br -.ns -.ie 'Bold'\\$1' .IP \fBtop\fP 1.5i -.el .IP top 1.5i -What to do with this edge of the child when the parent is resized. This -resource may be any \fBedgeType\fP. See \fBLayout Semantics\fP for -details. -.. -.de Fh \" Form fromHoriz and fromVert -.ie 'Bold'\\$1' .IP \fBfromHoriz\fP 1.5i -.el .IP fromHoriz 1.5i -.br -.ns -.ie 'Bold'\\$1' .IP \fBfromVert\fP 1.5i -.el .IP fromVert 1.5i -Which widget this child should be placed underneath (or to the right -of). If a value of NULL is specified then this widget will be positioned -relative to the edge of the parent. -.. -.de Hd \" Form horizDistance and vertDistance -.ie 'Bold'\\$1' .IP \fBhorizDistance\fP 1.5i -.el .IP horizDistance 1.5i -.br -.ns -.ie 'Bold'\\$1' .IP \fBvertDistance\fP 1.5i -.el .IP vertDistance 1.5i -The amount of space, in pixels, between this child and its left or -upper neighbor. -.. -.de Rl \" Form resizable -.ie 'Bold'\\$1' .IP \fBresizable\fP 1.5i -.el .IP resizable 1.5i -If this resource is \fBFalse\fP then the parent widget will ignore all -geometry request made by this child. The parent may still resize this -child itself, however. -.. - -.de Lt \" Form Section on Layout semantics -The \\$1 widget uses two different sets of layout semantics. One is -used when initially laying out the children. The other is used when -the \\$1 is resized. -.LP -The first layout method uses the \fBfromVert\fP and \fPfromHoriz\fP -.IN "fromVert" " -.IN "fromHoriz" "" -resources to place the children of the \\$1. A single pass is made -through the \\$1 widget's children in the order that they were created. -Each child is then placed in the \\$1 widget below or to the right of -the widget specified by the \fBfromVert\fP and \fBfromHoriz\fP resources. -The distance the new child is placed from its left or upper neighbor is -determined by the \fBhorizDistance\fP and \fBvertDistance\fP resources. -.IN "horizDistance" "" -.IN "vertDistance" "" -.IN "conversions" "Widget" -This implies some things about how the order of creation affects the -possible placement of the children. The Form widget registers a -string to widget converter which does not postpone conversion and -does not cache conversion results. -.LP -The second layout method is used when the \\$1 is resized. It does not -matter what causes this resize, and it is possible for a resize to -happen before the widget becomes visible (due to constraints imposed by -the parent of the \\$1). This layout method uses the \fBbottom\fP, -\fBtop\fP, \fBleft\fP, and \fBright\fP resources. These resources are -used to determine what will happen to each edge of the child when the -\\$1 is resized. If a value of \fBXawChain\fP\fI\fP is -.IN "XawChain" "" -specified, the the edge of the child will remain a fixed distance from -the \fIchain\fP edge of the \\$1. For example if \fBXawChainLeft\fP is -specified for the \fBright\fP resource of a child then the right edge of -that child will remain a fixed distance from the left edge of the \\$1 -widget. If a value of \fBXawRubber\fP is specified, that edge will grow -.IN "XawRubber" "" -by the same percentage that the \\$1 grew. For instance if the \\$1 -grows by 50% the left edge of the child (if specified as \fBXawRubber\fP -will be 50% farther from the left edge of the \\$1). One must be very -careful when specifying these resources, for when they are specified -incorrectly children may overlap or completely occlude other children -when the \\$1 widget is resized. -.. - -\" Text Resources - -.de Af \" Text autoFill -.ie 'Bold'\\$1' .IP \fBautoFill\fP 1.5i -.el .IP autoFill 1.5i -If this resource is \fBTrue\fP the text widget will automatically break a line -when the user attempts to type into the right margin. The attribute has -no effect on files or text inserted into the text widget. It only -checks to see if the action should be taken when a user enters a new -character via the \fIinsert-character\fP action. -.. -.de Tm \" Text margin resources -.ie 'Bold'\\$1' .IP \fBbottomMargin\fP 1.5i -.el .IP bottomMargin 1.5i -.br -.ns -.ie 'Bold'\\$1' .IP \fBleftMargin\fP 1.5i -.el .IP leftMargin 1.5i -.br -.ns -.ie 'Bold'\\$1' .IP \fBrightMargin\fP 1.5i -.el .IP rightMargin 1.5i -.br -.ns -.ie 'Bold'\\$1' .IP \fBtopMargin\fP 1.5i -.el .IP topMargin 1.5i -The amount of space, in pixels, between the edge of the window -and the corresponding edge of the text within the window. If there is -a scrollbar active on this edge, then this is the space between the text and -the scrollbar. -.. -.de Tc \" Text displayCaret -.ie 'Bold'\\$1' .IP \fBdisplayCaret\fP 1.5i -.el .IP displayCaret 1.5i -Whether or not to display the text insert point. -.. -.de Td \" Text displayPosition -.ie 'Bold'\\$1' .IP \fBdisplayPosition\fP 1.5i -.el .IP displayPosition 1.5i -The position in the text buffer of the character that is currently -displayed in the upper left hand corner of the text display. -.. -.de Ti \" Text insertPosition -.ie 'Bold'\\$1' .IP \fBinsertPosition\fP 1.5i -.el .IP insertPosition 1.5i -This is the location of the insert point. It is expressed in -characters from the beginning of the file. The cursor will always be -forced to be on the screen. This resource may therefore be used to -scroll the text display to a certain character position. -.. -.de Tz \" Text resize -.ie 'Bold'\\$1' .IP \fBresize\fP 1.5i -.el .IP resize 1.5i -.IN "conversions" "XawTextResizeMode" -Controls whether or not the Text widget attempts to resize itself when -it is no longer able to display the full text buffer in the associated -window. Any attempt by the Text widget to resize itself is always -subject to the constraints imposed by its parent. The values -\fBXawtextResizeNever\fP, \fBXawtextResizeWidth\fP, -.IN "XawtextResizeNever" "" -.IN "XawtextResizeWidth" "" -\fBXawtextResizeHeight\fP, and \fBXawtextResizeBoth\fP are all -.IN "XawtextResizeHeight" "" -.IN "XawtextResizeBoth" "" -acceptable for this resource. -.Rs "never, height, width, \fPand\fB both" -.. -.de Ts \" Text scrollHorizontal and scrollVertical -.ie 'Bold'\\$1' .IP \fBscrollHorizontal\fP 1.5i -.el .IP scrollHorizontal 1.5i -.br -.ns -.ie 'Bold'\\$1' .IP \fBscrollVertical\fP 1.5i -.el .IP scrollVertical 1.5i -.IN "conversions" "XawTextScrollMode" -These resources control the placement of scrollbars on the left and -bottom edge of the text widget. These resources accept the -values \fBXawtextScrollAlways\fP, \fBXawtextScrollWhenNeeded\fP, and -.IN "XawtextScrollAlways" "" -.IN "XawtextScrollWhenNeeded" "" -\fBXawtextScrollNever\fP. -.IN "XawtextScrollNever" "" -.Rs "always, never, \fPand\fB whenNeeded" -If \fBXawtextScrollWhenNeeded\fP is specified, the appropriate scrollbar -will only appear when there is text in the buffer that is not able to -fit within the bounds of the current window. The scrollbar will -disappear when the text once again fits within the window. -.. -.de St \" Text selectTypes -.ie 'Bold'\\$1' .IP \fBselectTypes\fP 1.5i -.el .IP selectTypes 1.5i -Specifies the selection type array that is used when -multi-click is activated (see \fBText Selections for Application -Programmers\fP for details). This resource is used in place, and must -not be freed until the widget is destroyed. There is no -type converter registered for this resource, so it may not be set from -the resource manager. -.. -.de To \" Text Source and Sink Objects -.ie 'Bold'\\$1' .IP \fBtextSink\fP 1.5i -.el .IP textSink 1.5i -.br -.ns -.ie 'Bold'\\$1' .IP \fBtextSource\fP 1.5i -.el .IP textSource 1.5i -These are the TextSink or TextSource objects used by this widget. -.ie 'Bold'\\$1' When using the Text widget these MUST be set by the \ -application programmer. -.el \{\ -When \fBinternational\fP is set to \fBtrue\fP -the AsciiText widget initializes these resources to point -to an MultiSink and MultiSrc respectively. -When \fBinternational\fP is set to \fBfalse\fP -the AsciiText widget initializes these resources to point -to an AsciiSink and AsciiSrc respectively. -.\} -.. -.de Tw \" Text wrap -.ie 'Bold'\\$1' .IP \fBwrap\fP 1.5i -.el .IP wrap 1.5i -When the text in any one line is wider than the window there are several -possible actions. This resource allows the user to decide what will -happen. The accepted values for this resource are -\fBXawtextWrapNever\fP, \fBXawtextWrapLine\fP, and -.IN "XawtextWrapNever" "" -.IN "XawtextWrapLine" "" -\fBXawtextWrapWord\fP. With \fBXawtextWrapLine\fP all text -.IN "XawtextWrapWord" "" -.IN "WrapMode" -that is beyond the right edge of the window will be displayed on the -next line. With \fBXawtextWrapWord\fP the -same action occurs but the text is broken at a word boundary if -possible. If no wrapping is enabled then the text will extend off -the edge of the window, and a small rectangle will be painted in the -right margin to alert the user that this line is too long. -.Rs "never, word, \fPand\fB line" -.. -.de Tu \" Text unrealizeCallback -.ie 'Bold'\\$1' .IP \fBunrealizeCallback\fP 1.5i -.el .IP unrealizeCallback 1.5i -A list of callback functions which will be executed when the Text widget -is unrealized. -.. - -\" Text Sink Resources - -.de Sb \" TextSink background -.ie 'Bold'\\$1 .IP \fBbackground\fP 1.5i -.el .IP background 1.5i -A pixel value which indexes the Text widget's colormap to derive the -background color used by the text sink. -.. -.de Sg \" TextSink foreground -.ie 'Bold'\\$1' .IP \fBforeground\fP 1.5i -.el .IP foreground 1.5i -A pixel value which indexes the Text widget's colormap to derive the -foreground color used by the text sink. -.Sk \\$1 -.. - -\" Ascii Sink Resources - -.de Sd \" AsciiSink displayNonprinting -.ie 'Bold'\\$1' .IP \fBdisplayNonprinting\fP 1.5i -.el .IP displayNonprinting 1.5i -If this resource is \fBTrue\fP, the Text widget will display all -non-printable characters as the string \fI^@\fP. If \fBFalse\fP, the -Text widget -will just leave a blank space where a non-printable character exists -in the text buffer. -.Sk \\$1 -.. -.de Sh \" AsciiSink echo -.ie 'Bold'\\$1' .IP \fBecho\fP 1.5i -.el .IP echo 1.5i -Whether or not to echo characters to the screen. The buffer can still -be edited, but nothing is displayed. This mode can be useful for -entering passwords and other sensitive information. -.Sk \\$1 -.. -.de Sf \" AsciiSink font -.ie 'Bold'\\$1' .IP \fBfont\fP 1.5i -.el .IP font 1.5i -The text font to use when displaying the \fBstring\fP, when the -\fBinternational\fP resource is \fBfalse\fP. -.Sk \\$1 -.. -.de Sn \" MultiSink fontSet -.ie 'Bold'\\$1' .IP \fBfont\fP 1.5i -.el .IP font 1.5i -The text font set to use when displaying the \fBstring\fP, when the -\fBinternational\fP resource is \fBtrue\fP. -.Sk \\$1 -.. - -\" TextSrc Resources - -.de Oe \" TextSrc editType -.ie 'Bold'\\$1' .IP \fBeditType\fP 1.5i -.el .IP editType 1.5i -This is the type of editing that will be allowed in this text widget. -Legal values are \fBXawtextRead\fP, \fBXawtextEdit\fP, and -.IN "XawtextRead" "" -.IN "XawtextEdit" "" -\fBXawtextAppend\fP. -.IN "XawtextAppend" "" -.IN "conversions" "XawTextEditType" -.Rs "read, edit, \fPand\fB append" -.So \\$1 -.. - -\" AsciiSrc Resources - - -.de Oc \" AsciiSrc callback -.ie 'Bold'\\$1' .IP \fBcallback\fP 1.5i -.el .IP callback 1.5i -The callbacks registered on this resource will be called every time the -text buffer changes, after the text has been updated. -.So \\$1 -.. -.de Od \" AsciiSrc dataCompression -.ie 'Bold'\\$1' .IP \fBdataCompression\fP 1.5i -.el .IP dataCompression 1.5i -The AsciiSrc uses an algorithm that may cause the text buffer to grow -to about twice the size of the actual text over time, as the text is -edited. On systems where CPU cycles are cheaper than memory, it is helpful to -spend some extra time to compress this buffer back to its minimum size. -If this resource is \fBTrue\fP, the AsciiSrc will compress its data -to the minimum size required every time the text string is saved, or the -value of the string is queried. -.So \\$1 -.. -.de Ol \" AsciiSrc length -.ie 'Bold'\\$1' .IP \fBlength\fP 1.5i -.el .IP length 1.5i -If the \fBuseStringInPlace\fP resource is \fBFalse\fP this attribute has no -effect. If that resource is \fBTrue\fP, however, then the \fBlength\fP -resource specifies the length of the buffer passed to the text widget -in the \fBstring\fP resource. -.So \\$1 -.. -.de Op \" AsciiSrc pieceSize -.ie 'Bold'\\$1' .IP \fBpieceSize\fP 1.5i -.el .IP pieceSize 1.5i -This is the size of the internal chunks into which the text buffer is -broken down for memory management. The larger this value the less segmented -your memory will be, but the slower your editing will be. The text -widgets will always allocate a chunk of memory this size to stuff the -\fBstring\fP into, so when using small strings, having this buffer -large can waste memory. This resource has no effect if -\fBuseStringInPlace\fP is \fBTrue\fP. -.So \\$1 -.. -.de Os \" AsciiSrc string -.ie 'Bold'\\$1' .IP \fBstring\fP 1.5i -.el .IP string 1.5i -If \fBtype\fP is \fBXawAsciiString\fP then this string contains the -buffer to be displayed in the widget. If \fBtype\fP is -\fBXawAsciiFile\fP then the string contains the name of the file to be -displayed. This string is normally copied by the text widget into -internal memory, but may be used in place by setting the -\fBuseStringInPlace\fP resource. As of X11R4 this is a settable resource. -.So \\$1 -When the \fBstring\fP resource is queried, using \fBXtGetValues\fP, and -\fBuseStringInPlace\fP is false, the value returned is valid until -the next time the \fBstring\fP resource is queried, or until the application -writer calls \fBXawAsciiSourceFreeString\fP. If \fBuseStringInPlace\fP is -true, a pointer to the actual string is returned. See also section 5.6. -.. -.de Ot \" AsciiSrc type -.ie 'Bold'\\$1' .IP \fBtype\fP 1.5i -.el .IP type 1.5i -This resource may be either \fBXawAsciiString\fP or -\fBXawAsciiFile\fP. The value of this resource determines whether the -\fBstring\fP resource contains the name of a file to be opened or a buffer to -be displayed by the text widget. A converter has been registered for -this resource and accepts the values \fBstring\fP and \fBfile\fP. -.IN "conversions" "AsciiType" -.So \\$1 -.. -.de Ou \" AsciiSrc useStringInPlace -.ie 'Bold'\\$1' .IP \fBuseStringInPlace\fP 1.5i -.el .IP useStringInPlace 1.5i -Setting this resource to \fBTrue\fP will disable the memory management -provided by the Text widget, updating the \fBstring\fP resource in -place. Using the string in place can -be much more efficient for text widgets that display static data, or -where the programmer wishes to impose strict constraints on the -contents of the \fBstring\fP. When using the string in place be sure that: -the length of the string is specified by setting the \fBlength\fP resource, -the \fBtype\fP of the Text widget is \fBXawAsciiString\fP, and that -the \fBstring\fP exists for the lifetime of the text widget, or until it has -been reset. \fINote: Since the MultiSrc and AsciiSrc have different data -formats, use of this resource forces application code to be cognisant as to -which of the two is being used. Application programming is simplified when -use of this resource is avoided.\fP -.So \\$1 -.. -.\" .TB is used throughout this manual. Don't know what it is, -.\" but I'll guess "table bold". -.\" Note that I've also used it to set the size, rather than -.\" have (incorrect) commands sprinkled throughout the document. -.\" -gildea April 1994 -.de TB -.B -.ps 9 -.vs 11 -.. diff --git a/doc/xorg-docs/specs/Xaw/widg.idxmac.t b/doc/xorg-docs/specs/Xaw/widg.idxmac.t deleted file mode 100644 index 6e11fbf00..000000000 --- a/doc/xorg-docs/specs/Xaw/widg.idxmac.t +++ /dev/null @@ -1,3 +0,0 @@ -.eh '\fBAthena Widget Set\fP''\fBX11, Release 6.8\fP' -.oh '\fBAthena Widget Set\fP''\fBX11, Release 6.8\fP' -.so index.pageno diff --git a/doc/xorg-docs/specs/Xext/AppGroup.mif b/doc/xorg-docs/specs/Xext/AppGroup.mif deleted file mode 100644 index 8ce4fef15..000000000 --- a/doc/xorg-docs/specs/Xext/AppGroup.mif +++ /dev/null @@ -1,10667 +0,0 @@ - # Generated by FrameMaker xm4.0.3P1a -# Options: -# Paragraph Text -# Paragraph Tags -# Paragraph Formats -# Font Information -# Markers -# Anchored Frames -# Tables -# Graphics and TextRect Layout -# Master Page Items -# Condition Catalog -# Table Catalogs -# Font Catalog -# Paragraph Catalog -# Document Template -# Document Dictionary -# Variables -# Element Definitions -# Elements -# - - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color -> # end of ColorCatalog - - - - - - > # end of Condition -> # end of ConditionCatalog - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - : '> - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf -> # end of PgfCatalog - # end of ElementDefCatalog - - - > # end of Font - - - > # end of Font -> # end of FontCatalog - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling -> # end of RulingCatalog - - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat - - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat -> # end of TblCatalog - - - > # end of View - - - - - - - - > # end of View - - - - > # end of View - - - > # end of View - - - > # end of View - - - > # end of View -> # end of Views - - '> - > # end of VariableFormat - - <$daynum\>, <$year\>'> - > # end of VariableFormat - - /<$daynum\>/<$shortyear\>'> - > # end of VariableFormat - - <$daynum\>, <$year\> <$hour\>:<$minute00\> <$ampm\>'> - > # end of VariableFormat - - /<$daynum\>/<$shortyear\>'> - > # end of VariableFormat - - <$daynum\>, <$year\>'> - > # end of VariableFormat - - /<$daynum\>/<$shortyear\>'> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - - > # end of VariableFormat - - of <$tblsheetcount\>)'> - > # end of VariableFormat -> # end of VariableFormats - - \xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - '> - > # end of XRefFormat - - \xd3 on page\x11 <$pagenum\>.'> - > # end of XRefFormat - - , \xd2 <$paratext\>,\xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - on page\x11 <$pagenum\>'> - > # end of XRefFormat -> # end of XRefFormats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -> # end of Document -AppGroupTOC.doc'> - - - - - -> # end of BookComponent - # end of InitialAutoNums - - - - - -> # end of Dictionary - # end of AFrames - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - > - > # end of Para - > # end of TblTitleContent - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody -> # end of Tbl -> # end of Tbls - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect - - - - - - - > # end of TextRect - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect - - - - - - - > # end of TextRect - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - > # end of TextLine - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - > # end of Frame - - - - - - - > # end of TextLine -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - > # end of Pgf - - - - > # end of Variable - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - - > # end of TabStop - - - - > # end of TabStop - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - - - - - - - > - - > - > # end of Para - > # end of FNote - > # end of Notes - - - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > # end of Pgf - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > # end of Para - - - - > - - > - - > - - > - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - > # end of Pgf - - > - > # end of Para - - - - > # end of Para - - - - > - - > - - - > - - > - - > - - - > - - > - > # end of Para - - - - > # end of Para - - - - > - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - > # end of Para - - - - > - - > - - > - - > - - > - - > - - > - - - > - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - > # end of Para - - - - > - - - > - - - > - - > - - > - > # end of Para - - - - > # end of Para - - - - - > - - > - - > - - > - - > - - > - - - > - - > - > # end of Para - - - - > # end of Para - - - - > - - - > - - - > - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - '> - > - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - - > # end of Font - - - > - - > - - > - - - > - - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - - > # end of Font - - - > - - > - - > - - - > - - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - - > # end of Font - - > - - - > - > # end of Para - - - - - - - - > # end of Font - - - > # end of Font - - > - - > - - > - - - - - > # end of Font - - - > # end of Font - - > - - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - > # end of Para - - - - > - - > - - > - - > - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - - > # end of Font - - > - - > - - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - - > # end of Font - - > - - > - - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - - > # end of Font - - > - - - - - > # end of Font - - - > # end of Font - - > - - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - - > # end of Font - - > - - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - - > # end of Font - - > - - - - > # end of Font - - - > # end of Font - - > - - > - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - > - - - - > # end of Font - - - > # end of Font - - > - - > - - > - - > - - > - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - - > # end of Font - - > - - > - - - > - > # end of Para - - - - > # end of Para - - - - > - - > - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - '> - > - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - '> - > - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - > - - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - - > # end of Font - - - > - - - - - > # end of Font - - - > # end of Font - - > - - - - - > # end of Font - - - > # end of Font - - > - - - - - > # end of Font - - - > # end of Font - - - > - - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - > - - - - - > # end of Font - - - > # end of Font - - > - - - > - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > # end of Para - - - - - > - - > - - > - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > # end of Para - - - - - > - - > - - - > - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > # end of Para - - - - > - - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - - > # end of Font - - > - - - > - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - > - - - - - > # end of Font - - - > # end of Font - - > - - - - > # end of Font - - - > # end of Font - - > - - - - - > # end of Font - - - > # end of Font - - > - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > # end of Para - - - - > - - - - - > # end of Font - - - > # end of Font - - > - - - - - > # end of Font - - - > # end of Font - - > - - - - - > # end of Font - - - > # end of Font - - > - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - > # end of Para - - - - - > - - > - - > - - > - - > - > # end of Para - - - - > # end of Para - - - - > - - > - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > # end of Para - - - - > - - > - - - > - - > - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > # end of Para - - - - > - - > - - > - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - - > # end of Font - - - > - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - > - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - > - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - - - - > - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - > - - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - > - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - > # end of Para - - - - - > - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - > # end of Para - - - '> - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - > - > # end of Para - - - - - - - - > - > # end of Para - - - - - - - - > - > # end of Para - - - - - - - - > - > # end of Para - - - - - - - - > - > # end of Para - - - - - - - - > - > # end of Para - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - '> - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - '> - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - > - > # end of Para - - - - - - - - > - > # end of Para - - - - - - - - > - > # end of Para - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - - > # end of Font - - > - - > - - - - - > # end of Font - - - > # end of Font - - > - - > - - > - - > - - > - > # end of Para - - - - > # end of Para - - - - - > - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - > - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - - - - - > # end of Font - - - > # end of Font - > - > # end of Para - - - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - > - - - - - > # end of Font - - - > # end of Font - - - > - - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - - > # end of Font - - - > - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - > - - > - > # end of Para - - - - > # end of Para - - - - - > - \xd5 as a member of the Application Group. '> - > - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - > - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - - > # end of Font - - > - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - - > # end of Font - - > - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - - > - - - - - > # end of Font - - - > # end of Font - - > - - - > - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > - - > - > # end of Para - - - - > # end of Para - - - - - > - - > - - > - - > - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - - - - - > - > # end of Para - - - - - - - - > - > # end of Para - - - - - - - - > - > # end of Para - - - - - - - - > - > # end of Para - - - - - - - - > - > # end of Para - - - - - - - - > - > # end of Para - - - - - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - > - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - > - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - > - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - > - - - > - - - - - > # end of Font - - - > # end of Font - - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - > # end of Para - - - - > - - > - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para -> # end of TextFlow -# End of MIFFile diff --git a/doc/xorg-docs/specs/Xext/DPMS.ms b/doc/xorg-docs/specs/Xext/DPMS.ms deleted file mode 100644 index 0f0efe4a2..000000000 --- a/doc/xorg-docs/specs/Xext/DPMS.ms +++ /dev/null @@ -1,465 +0,0 @@ -.\" Use -ms and macros.t -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.ps 10 -.nr PS 10 -\& -.sp 8 -.ce 1 -\s+2\fBX Display Power Management Signaling (DPMS) Extension\fP\s-2 -.sp -.ce 1 -\s+1\fBProtocol Specification\fP\s-1 -.sp 3 -.ce 3 -Version 1.0 -X Project Team Standard -X Version 11, Release 6.8 -.sp 6 -.ce 4 -Rob Lembree -\fIlembree@zk3.dec.com\fP -.sp 6p -Digital Equipment Corporation -.sp 6p -24 April 1996 -.ps 9 -.nr PS 9 -.sp 8 -.LP -.bp -.sp 15 -Copyright \(co Digital Equipment Corporation, 1996 -.LP -Permission to use, copy, modify, distribute, and sell this -documentation for any purpose is hereby granted without fee, -provided that the above copyright notice and this permission -notice appear in all copies. Digital Equipment Corporation -makes no representations about the suitability for any purpose -of the information in this document. This documentation is -provided ``as is'' without express or implied warranty. -.LP -.ps 10 -.nr PS 10 -.bp 1 -.EH '\fBDisplay Power Management Signaling (DPMS) Extension\fP' -.OH '\fBDisplay Power Management Signaling (DPMS) Extension\fP' -.EF ''\fB % \fP'' -.OF ''\fB % \fP'' -.NH 1 -Overview -.LP -This extension provides X Protocol control over the VESA Display -Power Management Signaling (DPMS) characteristics of video boards -under control of the X Window System. -.FS -1. \fIX Window System\fP is a trademark of The Open Group. -.FE -.LP -Traditionally, the X Window System has provided for both blanking and -non-blanking screen savers. Timeouts associated with these built-in -screen saver mechanisms are limited to idle (dwell) time, and a change -timeout that specifies the change interval for non-blanking screen savers. -.LP -The United States' Environmental Protection Agency (EPA) Energy Star program -requires that monitors power down after some idle time by default. -While it is possible to simply overload the existing screen saver timeouts, -this solution leaves the non-privileged user little to no control over -the DPMS characteristics of his or her system. For example, disabling -DPMS would require some unintended side effect in the core screen saver, -such as disabling the changing of a non-blanking screen saver. Providing -clients with this control requires an extension to the core X Window System -Protocol, and this extension seeks to fill this gap. -.LP -The design goal of the DPMS extension is to be a logical extension to -the traditional screen saver. The protocol and sample implementation is -designed to use the same date types and time units as the screen saver. -The sample implementation works independently from the screen saver so that -policy as it pertains to the interaction between screen saver and DPMS can -be deferred to the user or screen saver application. The extension has -been tested with and shown to work correctly with both the internal blanking -and non-blanking screen savers, as well as with screen saver extension -clients. -.LP -The DPMS extension is designed to be simple, yet export sufficient -VESA DPMS information to enable full function clients to be written. -Included is the ability to sense DPMS capability, set and get DPMS timeouts, -enable and disable individual DPMS modes, enable and disable DPMS (without -destroying timeout values), and sense current DPMS on/off state and -power level. -.LP -There are four power levels specified by the Video Electronics Standards -Association (VESA) Display Power Management Signaling (DPMS) standard. -These are: -.LP -.Ds 0 -.TA .2i 1.5i 2.5i 3.5i -.ta .2i 1.5i 2.5i 3.5i -.R -.PN "DPMS Extension Power Levels" - 0 DPMSModeOn In use - 1 DPMSModeStandby Blanked, low power - 2 DPMSModeSuspend Blanked, lower power - 3 DPMSModeOff Shut off, awaiting activity -.De -.LP -.LP -It is logical to assume that successive DPMS modes be chronologically -at the same time or later than one another, and the protocol is designed -to enforce this rule. -.LP -Note however that a concious decision is made to decouple the timeouts -associated with screen saver from the DPMS timeouts. While it might be -considered logical to require that the first non-zero DPMS timeout be -greater than or equal to the screen saver timeout, this is intentionally -omitted, leaving this policy decision to the user or the screen saver -application. In the case of a laptop where power may be scarce, the -importance of power savings should supersede the screen saver. If the -laptop user plugs the unit in and power is no longer a scarce commodity, -it may be decided to make DPMS less aggressive, or disable it completely. -.LP -.NH 1 -Requests -.LP -.PN "DPMSGetVersion" -.LP -.IP -\fIclient_major_version\fP\^: CARD16 -.br -\fIclient_minor_version\fP\^: CARD16 -.LP - => -.IP -\fIserver_major_version\fP\^: CARD16 -.br -\fIserver_minor_version\fP\^: CARD16 -.LP -If supplied, the \fIclient_major_version\fP and -\fIclient_minor_version\fP indicate what version of the protocol the -client wants the server to implement. The server version numbers -returned indicate the protocol this extension actually supports. This -might not equal the version sent by the client. An implementation can -(but need not) support more than one version simultaneously. The -\fIserver_major_version\fP and the \fIserver_minor_version\fP are a -mechanism to support future revisions of the Display Power Management -Signaling protocol which may be necessary. In general, the major version -would increment for incompatible changes, and the minor version would -increment for small, upward-compatible changes. Servers that support the -protocol defined in this document will return a \fIserver_major_version\fP -of one (1), and a \fIserver_minor_version\fP of one (1). -.LP -.PN "DPMSCapable" -.IP - => -.IP -\fIcapable\fP\^: BOOL -.LP -This request is used to determine whether or not the currently running -server's devices are capable of DPMS operations. The truth value of this -request is implementation defined, but is generally based on the capabilities -of the graphic card and monitor combination. Also, the return value in the -case of heterogeneous multi-head servers is implementation defined. -.LP -.PN "DPMSGetTimeouts" -.LP - => -.IP -\fIstandby_timeout\fP\^: CARD16 -.br -\fIsuspend_timeout\fP\^: CARD16 -.br -\fIoff_timeout\fP\^: CARD16 -.LP -This request returns the current values of the DPMS timeout values. All -values are in units of seconds. -.LP -\fIstandby_timeout\fP is the amount of time of inactivity before standby -mode is invoked. The actual effects of this mode are implementation defined, -but in the case of DPMS compliant hardware, it is implemented by shutting off -the horizontal sync signal, and pulsing the vertical sync signal. Standby -mode provides the quickest monitor recovery time. Note also that many -monitors implement this mode identically to suspend mode. A value of -zero indicates that this mode is disabled. -.LP -\fIsuspend_timeout\fP is the amount of time of inactivity before the second -level of power savings is invoked. Suspend mode's physical and electrical -characteristics are implementation defined, but in DPMS compliant hardware, -results in the pulsing of the horizontal sync signal, and shutting off of -the vertical sync signal. Suspend mode recovery is considered to be slower -than standby mode, but faster than off mode, however this is monitor -dependent. As noted above, many monitors implement this mode identically to -standby mode. A value of zero indicates that this mode is disabled. -.LP -\fIoff_timeout\fP is the amount of time of inactivity before the third and -final level of power savings is invoked. Off mode's physical and electrical -characteristics are implementation defined, but in DPMS compliant hardware, -is implemented by shutting off both horizontal and vertical sync signals, -resulting in the power-down of the monitor. Recovery time is implementation -dependant, but frequently is similar to the power-up time of the monitor. A -value of zero indicates that this mode is disabled. -.LP -.PN "DPMSSetTimeouts" -.IP -\fIstandby_timeout\fP\^: CARD16 -.br -\fIsuspend_timeout\fP\^: CARD16 -.br -\fIoff_timeout\fP\^: CARD16 - => -.IP -.LP -All values are in units of seconds. \fIstandby_timeout\fP is the amount of -time of inactivity before standby mode will be invoked. This is the -lightest level of power savings, and the monitor is generally immediately -ready upon detection of user activity. This is most often implemented by -shutting off the horizontal sync signal to the monitor. -A value of zero disables this mode. -.LP -The \fIsuspend_timeout\fP specifies the amount of time of inactivity -before the screen is placed into suspend mode. Suspend mode is the -middle level of power savings, resulting in a slightly longer recovery -upon detection of activity. Suspend mode is most often implemented by -pulsing the horizontal sync signal, and removing the vertical sync -signal. A value of zero disables this mode. -.LP -The \fIoff_timeout\fP specifies the amount of time of inactivity before -the monitor is shut off. Off mode is the deepest level of power management, -resulting in the greatest power savings and the longest recovery time. -Off mode is most often implemented by removing both the horizontal and -vertical signals. A value of zero disables this mode. -.LP -The values of successive power levels must be greater than or equal -to the value of the previous (non-zero) level. A BadValue error is generated -if an illegal combination is detected. - -.LP -.PN "DPMSEnable" -.IP - => -.IP -.LP -This request enables the DPMS characteristics of the server, using the -server's currently stored timeouts. If DPMS is already enabled, no change is -effected. - -.LP -.PN "DPMSDisable" -.IP - => -.IP -.LP -This request disables the DPMS characteristics of the server. It does -not affect the core or extension screen savers. If DPMS is already -disabled, no change is effected. This request is provided so that DPMS -may be disabled without damaging the server's stored timeout values. -.LP -.PN "DPMSForceLevel" -.IP -\fIpower_level\fP\^: CARD16 - => -.IP -.LP -This request forces a specific DPMS level on the server. If DPMS is -disabled, a BadMatch error is generated. If an erroneous power level -is specified, a BadValue error is returned, and the error value contains -the bad value. If the power level specified is already in effect, no -changes occur. Power Level must be one of DPMSModeOn, DPMSModeStandby, -DPMSModeSuspend or DPMSModeOff. -.LP -.PN "DPMSInfo" -.IP - => -.IP -\fIpower_level\fP\^: CARD16 -.br -\fIstate\fP\^: BOOL -.LP -This request returns information about the current DPMS state of the -display. \fIstate\fP\^ is one of DPMSEnabled or DPMSDisabled. -If \fIstate\fP\^ is DPMSEnabled, \fIpower_level\fP\^ is returned as one -of DPMSModeOn, DPMSModeStandby, DPMSModeSuspend or DPMSModeOff, otherwise -it is undefined. -.LP -.NH 1 -Events and Errors -.LP -No new events or errors are defined by this extension. -.NH 1 -Encoding -.LP -Please refer to the X11 Protocol Encoding document as this document uses -conventions established there. -.LP -The name of this extension is "DPMS". -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN "DPMSGetVersion" - 1 CARD8 opcode - 1 0 DPMS opcode - 2 2 request length - 2 CARD16 client_major_version - 2 CARD16 client_minor_version -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - => - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 0 length - 2 CARD16 server_major_version - 2 CARD16 server_minor_version - 20 unused -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN "DPMSCapable" - 1 CARD8 opcode - 1 1 DPMS opcode - 2 1 request length -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - => - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 0 length - 1 BOOL capable - 23 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN "DPMSGetTimeouts" - 1 CARD8 opcode - 1 2 DPMS opcode - 2 1 request length -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - => - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 0 length - 2 CARD16 standby_timeout - 2 CARD16 suspend_timeout - 2 CARD16 off_timeout - 18 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN "DPMSSetTimeouts" - 1 CARD8 opcode - 1 3 DPMS opcode - 2 3 request length - 2 CARD16 standby_timeout - 2 CARD16 suspend_timeout - 2 CARD16 off_timeout - 2 unused -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - => -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN "DPMSEnable" - 1 CARD8 opcode - 1 4 DPMS opcode - 2 1 request length -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - => -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN "DPMSDisable" - 1 CARD8 opcode - 1 5 DPMS opcode - 2 1 request length -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - => -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN "DPMSForceLevel" - 1 CARD8 opcode - 1 6 DPMS opcode - 2 2 request length - 2 power_level - 0 DPMSModeOn - 1 DPMSModeStandby - 2 DPMSModeSuspend - 3 DPMSModeOff - 2 unused -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - => -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN "DPMSInfo" - 1 CARD8 opcode - 1 7 DPMS opcode - 2 1 request length -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - => - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 0 length - 2 power_level - 0 DPMSModeOn - 1 DPMSModeStandby - 2 DPMSModeSuspend - 3 DPMSModeOff - 1 BOOL state - 21 unused diff --git a/doc/xorg-docs/specs/Xext/DPMSLib.ms b/doc/xorg-docs/specs/Xext/DPMSLib.ms deleted file mode 100644 index a8e909cf3..000000000 --- a/doc/xorg-docs/specs/Xext/DPMSLib.ms +++ /dev/null @@ -1,331 +0,0 @@ -.\" Use -ms and macros.t -.\" $XdotOrg: xc/doc/specs/Xext/DPMSLib.ms,v 1.2 2004/04/23 18:42:18 eich Exp $ -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.ps 10 -.nr PS 10 -\& -.sp 8 -.ce 1 -\s+2\fBX Display Power Management Signaling (DPMS) Extension\fP\s-2 -.sp -.ce 1 -\s+1\fBLibrary Specification\fP\s-1 -.sp 3 -.ce 3 -Version 1.0 -X Project Team Standard -X Version 11, Release 6.8 -.sp 6 -.ce 4 -Rob Lembree -\fIlembree@zk3.dec.com\fP -.sp 6p -Digital Equipment Corporation -.sp 6p -24 April 1996 -.ps 9 -.nr PS 9 -.sp 8 -.LP -.bp -.sp 15 -Copyright \(co Digital Equipment Corporation, 1996 -.LP -Permission to use, copy, modify, distribute, and sell this -documentation for any purpose is hereby granted without fee, -provided that the above copyright notice and this permission -notice appear in all copies. Digital Equipment Corporation -makes no representations about the suitability for any purpose -of the information in this document. This documentation is -provided ``as is'' without express or implied warranty. -.LP -.ps 10 -.nr PS 10 -.bp 1 -.EH '\fBDisplay Power Management Signaling (DPMS) Extension\fP' -.OH '\fBDisplay Power Management Signaling (DPMS) Extension\fP' -.EF ''\fB % \fP'' -.OF ''\fB % \fP'' -.NH 1 -Overview -.LP -This extension provides X Protocol control over the VESA Display -Power Management Signaling (DPMS) characteristics of video boards -under control of the X Window System. -.FS -1. \fIX Window System\fP is a trademark of The Open Group. -.FE -.LP -Traditionally, the X Window System has provided for both blanking and -non-blanking screen savers. Timeouts associated with these built-in -screen saver mechanisms are limited to idle (dwell) time, and a change -timeout that specifies the change interval for non-blanking screen savers. -.LP -The United States' Environmental Protection Agency (EPA) Energy Star program -requires that monitors power down after some idle time by default. -While it is possible to simply overload the existing screen saver timeouts, -this solution leaves the non-privileged user little to no control over -the DPMS characteristics of his or her system. For example, disabling -DPMS would require some unintended side effect in the core screen saver, -such as disabling the changing of a non-blanking screen saver. Providing -clients with this control requires an extension to the core X Window System -Protocol, and this extension seeks to fill this gap. -.LP -There are four power levels specified by the Video Electronics Standards -Association (VESA) Display Power Management Signaling (DPMS) standard. -These are mapped onto the X DPMS Extension like this: -.LP -.Ds 0 -.TA .2i 1.5i 2.5i 3.5i -.ta .2i 1.5i 2.5i 3.5i -.R -.PN "DPMS Extension Power Levels" - 0 DPMSModeOn In use - 1 DPMSModeStandby Blanked, low power - 2 DPMSModeSuspend Blanked, lower power - 3 DPMSModeOff Shut off, awaiting activity -.De - -.NH 1 -DPMS Functions - -.PN DPMSQueryExtension -.LP - -Bool DPMSQueryExtension \^(\fIdisplay, event_base, error_base\fP\^) -.IP - Display \fI*display;\fP -.br - int \fI*event_base, *error_base;\fP -.LP -\fIdisplay\fP Specifies the connection to the X server. -.br -\fIevent_base\fP Specifies the return location for the assigned base event -.br -\fIerror_base\fP Specifies the return location for the assigned base error - -.LP -The DPMSQueryExtension function queries the X server to determine the availability -of the DPMS Extension. If the extension is available, the return value is TRUE, -and \fIevent_base\fP and \fIerror_base\fP are set to the base event number and base -error number for the extension, respectively. Otherwise, the return value is -FALSE, and the values of \fIevent_base\fP and \fIerror_base\fP are undefined. -.LP - -.PN DPMSGetVersion -.LP - -Status DPMSGetVersion\^(\fIdisplay, major_version, minor_version\fP\^) -.IP - Display \fI*display;\fP -.br - int \fI*major_version, *minor_version;\fP -.LP -\fIdisplay\fP Specifies the connection to the X server. -.br -\fImajor_version\fP Specifies the return location for the extension major version. -.br -\fIminor_version\fP Specifies the return location for the extension minor version. - -.LP -The DPMSGetVersion function returns the version of the DPMS extension implemented by -the X server. The version is returned in \fImajor_version\fP and \fIminor_version\fP. -The major version and minor version for this specification are '1' and '1', respectively. -The major version will be incremented for protocol incompatible changes, and the minor -version will be incremented for small, upwardly compatible changes. -.LP - -.PN DPMSCapable -.LP - -Bool DPMSCapable\^(\fIdisplay\fP\^) -.IP - Display \fI*display;\fP -.LP -\fIdisplay\fP Specifies the connection to the X server. - -.LP -The DPMSCapable function returns the DPMS capability of the X server, either -TRUE \^(capable of DPMS\^) or FALSE \^(incapable of DPMS\^). The capability -of an X server is implementation defined. For example, if a multi-headed X server -is capable of DPMS on one head, and incapable on another, the truth value of this -function is defined by the X server implementation. -.LP - -.PN DPMSSetTimeouts -.LP - - -Status DPMSSetTimeouts\^(\fIdisplay, standby, suspend, off\fP\^) -.IP - Display \fI*display;\fP -.br - CARD16 \fIstandby, suspend, off;\fP -.LP -\fIdisplay\fP Specifies the connection to the X server. -.br -\fIstandby\fP Specifies the new standby timeout in seconds. -.br -\fIsuspend\fP Specifies the new suspend timeout in seconds. -.br -\fIoff\fP Specifies the new off timeout in seconds. - -.LP -The DPMSSetTimeouts function permits applications to set the timeout values -used by the X server for DPMS timings. -.LP -The value \fIstandby\fP is the amount of time of inactivity in seconds before -standby mode is invoked. The actual effects of this mode are implementation -defined, but in the case of DPMS compliant hardware, it is implemented by -shutting off the horizontal sync signal, and pulsing the vertical sync signal. -Standby mode provides the quickest monitor recovery time. Note also that many -monitors implement this mode identically to suspend mode. A value of zero -disables this mode. -.LP -The value \fIsuspend\fP is the amount of time of inactivity in seconds -before the second level of power savings is invoked. Suspend mode's physical -and electrical characteristics are implementation defined, but in DPMS compliant -hardware, results in the pulsing of the horizontal sync signal, and shutting off -of the vertical sync signal. Suspend mode recovery is considered to be slower -than standby mode, but faster than off mode, however this is monitor -dependent. As noted above, many monitors implement this mode identically to -standby mode. A value of zero disables this mode. -.LP -The value \fIoff\fP is the amount of time of inactivity in seconds before the third and -final level of power savings is invoked. Off mode's physical and electrical -characteristics are implementation defined, but in DPMS compliant hardware, -is implemented by shutting off both horizontal and vertical sync signals, -resulting in the power-down of the monitor. Recovery time is implementation -dependant, but frequently is similar to the power-up time of the monitor. -A value of zero disables this mode. -.LP -Chronologically, standby mode occurs before or simultaneously with suspend mode, and -suspend mode must occur before or simultaneously with off mode. Therefore, -non-zero mode timeout values must be greater than or equal to the timeout values of -earlier modes. If inconsistent values are supplied, a BadValue error will result. -.LP - -.PN DPMSGetTimeouts -.LP - - -Bool DPMSGetTimeouts\^(\fIdisplay, standby, suspend, off\fP\^) -.IP - Display \fI*display;\fP -.br - CARD16 \fI*standby, *suspend, *off;\fP -.LP -\fIdisplay\fP Specifies the connection to the X server. -.br -\fIstandby\fP Specifies the current standby timeout in seconds. -.br -\fIsuspend\fP Specifies the current suspend timeout in seconds. -.br -\fIoff\fP Specifies the current off timeout in seconds. - -.LP -The DPMSGetTimeouts function retrieves the timeout values used by the X -server for DPMS timings. -.LP -The value \fIstandby\fP is the amount of time of inactivity in seconds before -standby mode is invoked. A value of zero indicates that this mode has been disabled. -.LP -The value \fIsuspend\fP is the amount of time of inactivity in seconds before the -second level of power savings is invoked. A value of zero indicates that this mode -has been disabled. -.LP -The value \fIoff\fP is the amount of time of inactivity in seconds before the third -and final level of power savings is invoked. A value of zero indicates that this mode -has been disabled. -.LP - -.PN DPMSEnable -.LP - - -Status DPMSEnable\^(\fIdisplay\fP\^) -.IP - Display \fI*display;\fP -.LP -\fIdisplay\fP Specifies the connection to the X server. - -.LP -The DPMSEnable function enables DPMS on the specified display. When -enabled, DPMS will use the currently saved timeout values, and will -invoke the DPMS power mode appropriate for the amount of time that -the workstation input devices have been idle. If DPMSEnable is invoked -on a display with DPMS already enabled, no change is made, and no -error is returned. If DPMSEnable is invoked on a display without -support for DPMS, no change is made and no error is returned. -.LP - -.PN DPMSDisable -.LP - - -Status DPMSDisable\^(\fIdisplay\fP\^) -.IP - Display \fI*display;\fP -.LP -\fIdisplay\fP Specifies the connection to the X server. - -.LP -The DPMSDisable function disables DPMS on the specified display. When -disabled, DPMS returns the display to DPMSModeOn. If DPMSDisable is -invoked on a display with DPMS already disabled, no change is made, -and no error is returned. If DPMSDisable is invoked on a display -without support for DPMS, no change is made and no error is returned. -.LP - -.PN DPMSForceLevel -.LP - - -Status DPMSForceLevel\^(\fIdisplay, level\fP\^) -.IP - Display \fI*display;\fP -.br - CARD16 \fIlevel;\fP -.LP -\fIdisplay\fP Specifies the connection to the X server. -.br -\fIlevel\fP Specifies the level to force power to. - -.LP -The DPMSForceLevel function forces a DPMS capable display into the -specified power level. The \fIlevel\fP must be one of -DPMSModeOn, DPMSModeStandby, DPMSModeSuspend, or DPMSModeOff. -Values other than these will result in a BadValue error. If DPMS -is disabled on the display, a BadMatch protocol error will result. -.LP - -.PN DPMSInfo -.LP - - -Status DPMSInfo\^(\fIdisplay, power_level, state\fP\^) -.IP - Display \fI*display;\fP -.br - CARD16 \fI*power_level;\fP -.br - BOOL \fI*state;\fP -.LP -\fIdisplay\fP Specifies the connection to the X server. -.br -\fIpower_level\fP Specifies the current power level. -.br -\fIstate\fP Specifies the current DPMS state - -.LP -The DPMSInfo function returns information about the current DPMS state. -The \fIstate\fP return parameter indicates whether or not DPMS is enabled -\^(TRUE\^) or -disabled \^(FALSE\^). The \fIpower_level\fP return parameter indicates the current -power level \^(one of DPMSModeOn, DPMSModeStandby, DPMSModeSuspend, or -DPMSModeOff.\^) -.LP - diff --git a/doc/xorg-docs/specs/Xext/Makefile.am b/doc/xorg-docs/specs/Xext/Makefile.am new file mode 100644 index 000000000..6cdb477d2 --- /dev/null +++ b/doc/xorg-docs/specs/Xext/Makefile.am @@ -0,0 +1,9 @@ +if ENABLE_SPECS + +xmldir = $(docdir)/$(subdir) +doc_sources = lbxalg.xml +dist_xml_DATA = $(doc_sources) + +include $(top_srcdir)/xmlrules.in + +endif ENABLE_SPECS diff --git a/doc/xorg-docs/specs/Xext/Makefile.in b/doc/xorg-docs/specs/Xext/Makefile.in new file mode 100644 index 000000000..13c445b40 --- /dev/null +++ b/doc/xorg-docs/specs/Xext/Makefile.in @@ -0,0 +1,442 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice (including the next +# paragraph) shall be included in all copies or substantial portions of the +# Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(am__dist_xml_DATA_DIST) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/xmlrules.in +@ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_XMLTO_TRUE@am__append_1 = $(doc_sources:.xml=.ps) $(doc_sources:.xml=.pdf) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@am__append_2 = $(doc_sources:.xml=.txt) +subdir = specs/Xext +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(install_sh) -d +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__dist_xml_DATA_DIST = lbxalg.xml +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(xmldir)" "$(DESTDIR)$(xmldir)" +dist_xmlDATA_INSTALL = $(INSTALL_DATA) +xmlDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_xml_DATA) $(xml_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ +ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APP_MAN_DIR = @APP_MAN_DIR@ +APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHANGELOG_CMD = @CHANGELOG_CMD@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CWARNFLAGS = @CWARNFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ +DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ENABLE_DOCS_FALSE = @ENABLE_DOCS_FALSE@ +ENABLE_DOCS_TRUE = @ENABLE_DOCS_TRUE@ +ENABLE_SPECS_FALSE = @ENABLE_SPECS_FALSE@ +ENABLE_SPECS_TRUE = @ENABLE_SPECS_TRUE@ +EXEEXT = @EXEEXT@ +FILE_MAN_DIR = @FILE_MAN_DIR@ +FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ +FOP = @FOP@ +GREP = @GREP@ +HAVE_FOP_FALSE = @HAVE_FOP_FALSE@ +HAVE_FOP_TRUE = @HAVE_FOP_TRUE@ +HAVE_STYLESHEETS_FALSE = @HAVE_STYLESHEETS_FALSE@ +HAVE_STYLESHEETS_TRUE = @HAVE_STYLESHEETS_TRUE@ +HAVE_XMLTO_FALSE = @HAVE_XMLTO_FALSE@ +HAVE_XMLTO_TEXT_FALSE = @HAVE_XMLTO_TEXT_FALSE@ +HAVE_XMLTO_TEXT_TRUE = @HAVE_XMLTO_TEXT_TRUE@ +HAVE_XMLTO_TRUE = @HAVE_XMLTO_TRUE@ +INSTALL_CMD = @INSTALL_CMD@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIB_MAN_DIR = @LIB_MAN_DIR@ +LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +MAN_SUBSTS = @MAN_SUBSTS@ +MISC_MAN_DIR = @MISC_MAN_DIR@ +MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ +VERSION = @VERSION@ +XMLTO = @XMLTO@ +XORG_MAN_PAGE = @XORG_MAN_PAGE@ +XORG_SGML_PATH = @XORG_SGML_PATH@ +XSL_STYLESHEET = @XSL_STYLESHEET@ +ac_ct_CC = @ac_ct_CC@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +@ENABLE_SPECS_TRUE@xmldir = $(docdir)/$(subdir) +@ENABLE_SPECS_TRUE@doc_sources = lbxalg.xml +@ENABLE_SPECS_TRUE@dist_xml_DATA = $(doc_sources) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@xml_DATA = \ +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(doc_sources:.xml=.html) \ +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(am__append_1) \ +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(am__append_2) +@ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FLAGS = \ +@ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ -m $(XSL_STYLESHEET) \ +@ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --searchpath $(XORG_SGML_PATH)/X11 \ +@ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam html.stylesheet=$(STYLESHEET_SRCDIR)/xorg.css \ +@ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam img.src.path=$(abs_builddir)/ + +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@CLEANFILES = $(xml_DATA) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@SUFFIXES = .xml .ps .pdf .txt .html +all: all-am + +.SUFFIXES: +.SUFFIXES: .xml .ps .pdf .txt .html +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/xmlrules.in $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign specs/Xext/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --foreign specs/Xext/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +uninstall-info-am: +install-dist_xmlDATA: $(dist_xml_DATA) + @$(NORMAL_INSTALL) + test -z "$(xmldir)" || $(mkdir_p) "$(DESTDIR)$(xmldir)" + @list='$(dist_xml_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_xmlDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(xmldir)/$$f'"; \ + $(dist_xmlDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(xmldir)/$$f"; \ + done + +uninstall-dist_xmlDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_xml_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(xmldir)/$$f'"; \ + rm -f "$(DESTDIR)$(xmldir)/$$f"; \ + done +install-xmlDATA: $(xml_DATA) + @$(NORMAL_INSTALL) + test -z "$(xmldir)" || $(mkdir_p) "$(DESTDIR)$(xmldir)" + @list='$(xml_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(xmlDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(xmldir)/$$f'"; \ + $(xmlDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(xmldir)/$$f"; \ + done + +uninstall-xmlDATA: + @$(NORMAL_UNINSTALL) + @list='$(xml_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(xmldir)/$$f'"; \ + rm -f "$(DESTDIR)$(xmldir)/$$f"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + $(mkdir_p) $(distdir)/../.. + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(xmldir)" "$(DESTDIR)$(xmldir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +@ENABLE_SPECS_FALSE@clean-local: +@HAVE_XMLTO_FALSE@clean-local: +clean: clean-am + +clean-am: clean-generic clean-local mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-dist_xmlDATA install-xmlDATA + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_xmlDATA uninstall-info-am \ + uninstall-xmlDATA + +.PHONY: all all-am check check-am clean clean-generic clean-local \ + distclean distclean-generic distdir dvi dvi-am html html-am \ + info info-am install install-am install-data install-data-am \ + install-dist_xmlDATA install-exec install-exec-am install-info \ + install-info-am install-man install-strip install-xmlDATA \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am uninstall uninstall-am uninstall-dist_xmlDATA \ + uninstall-info-am uninstall-xmlDATA + + +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@%.txt: %.xml $(dist_xml_DATA) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) txt $< + +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@%.html: %.xml $(dist_xml_DATA) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) xhtml-nochunks $< + +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@%.pdf: %.xml $(dist_xml_DATA) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop pdf $< + +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@%.ps: %.xml $(dist_xml_DATA) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop ps $< + +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@chunked-html: $(doc_sources) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) -o html xhtml $(doc_sources) + +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@clean-local: +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)rm -fr html/ +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/doc/xorg-docs/specs/Xext/bigreq.ms b/doc/xorg-docs/specs/Xext/bigreq.ms deleted file mode 100644 index e6839f2d8..000000000 --- a/doc/xorg-docs/specs/Xext/bigreq.ms +++ /dev/null @@ -1,224 +0,0 @@ -.\" Use -ms and macros.t -.\" $Xorg: bigreq.ms,v 1.3 2000/08/17 19:42:30 cpqbld Exp $ -.\" $XdotOrg: xc/doc/specs/Xext/bigreq.ms,v 1.2 2004/04/23 18:42:18 eich Exp $ -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.ps 10 -.nr PS 10 -\& -.sp 8 -.ce 1 -\s+2\fBBig Requests Extension\fP\s-2 -.sp 3 -.ce 3 -Version 2.0 -X Consortium Standard -X Version 11, Release 6.8 -.sp 6 -.ce 4 -Bob Scheifler -.sp 6p -X Consortium, Inc. -.ps 9 -.nr PS 9 -.sp 8 -.LP -Copyright \(co 1993, 1994 X Consortium -.LP -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -.LP -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -.LP -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. -.ps 10 -.nr PS 10 -.bp 1 -.EH ''Big Requests Extension'' -.OH ''Big Requests Extension'' -.EF ''\fB % \fP'' -.OF ''\fB % \fP'' -.NH 1 -Overview -.LP -This extension enables the use of protocol requests that exceed 262140 -bytes in length. -.LP -The core protocol restricts the maximum length of a protocol request -to 262140 bytes, in that it uses a 16-bit length field specifying the -number of 4-byte units in the request. This is a problem in the core -protocol when joining large numbers of lines -.Pn ( PolyLine ) -or arcs -.Pn ( PolyArc ), -since these requests cannot be broken up into smaller requests without -disturbing the rendering of the join points. It is also much more of -a problem for protocol extensions, such as the PEX extension -for 3D graphics and the XIE extension for imaging, that need to send -long data lists in output commands. -.LP -This extension defines a mechanism for extending the length field -beyond 16 bits. If the normal 16-bit length field of the protocol -request is zero, then an additional 32-bit field containing the actual -length (in 4-byte units) is inserted into the request, immediately -following the 16-bit length field. -.LP -For example, a normal -.PN PolyLine -encoding is: -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN PolyLine - 1 65 opcode - 1 coordinate-mode - 0 Origin - 1 Previous - 2 3+n request length - 4 DRAWABLE drawable - 4 GCONTEXT gc - 4n LISTofPOINT points -.De -.LP -An extended-length -.PN PolyLine -encoding is: -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN PolyLine - 1 65 opcode - 1 coordinate-mode - 0 Origin - 1 Previous - 2 0 extended length flag - 4 4+n request length - 4 DRAWABLE drawable - 4 GCONTEXT gc - 4n LISTofPOINT points -.De -.LP -Extended-length protocol encodings, once enabled, can be used on all -protocol requests, including all extensions. -.NH 1 -Requests -.LP -.PN "BigReqEnable" -.LP - => -.IP -\fImaximum-request-length\fP\^: CARD32 -.IP -This request enables extended-length protocol requests -for the requesting client. It also returns the maximum length of a -request, in 4-byte units, that can be used in extended-length protocol -requests. This value will always be greater than the maximum-request-length -returned in the connection setup information. -.NH 1 -Events and Errors -.LP -No new events or errors are defined by this extension. -.NH 1 -Encoding -.LP -Please refer to the X11 Protocol Encoding document as this document uses -conventions established there. -.LP -The name of this extension is ``BIG-REQUESTS''. -.LP -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN BigReqEnable - 1 CARD8 opcode - 1 0 bigreq opcode - 2 1 request length -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - => - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 0 length - 4 CARD32 maximum-request-length - 20 unused -.De -.NH 1 -C language binding -.LP -It is desirable for core Xlib, and other extensions, -to use this extension internally when necessary. -It is also desirable to make the use of this extension as transparent as -possible to the X client. For example, if enabling of the extension were -delayed until the first time it was needed, an application that used -.PN XNextRequest -to determine the sequence number of a request would no longer get the -correct sequence number. -As such, -.PN XOpenDisplay -will determine if the extension is supported by the server and, if it is, -enable extended-length encodings. -.LP -The core Xlib functions -.PN XDrawLines , -.PN XDrawArcs , -.PN XFillPolygon , -.PN XChangeProperty , -.PN XSetClipRectangles , -and -.PN XSetRegion -are required to use extended-length encodings when necessary, if supported -by the server. Use of extended-length encodings in other core Xlib -functions -.Pn ( XDrawPoints , -.PN XDrawRectangles , -.PN XDrawSegments , -.PN XFillArcs , -.PN XFillRectangles , -.PN XPutImage ) -is permitted but not required; an Xlib implementation may choose to -split the data across multiple smaller requests instead. -.LP -To permit clients to know what the maximum-request-length for extended-length -encodings is, the following function is added to Xlib: -.LP -long -.br -XExtendedMaxRequestSize (display) -.RS -Display *display; -.RE -.IP -Returns zero (0) if the specified display does not support this -extension, otherwise returns the maximum-request-length (in 4-byte -units) supported by the server through the extended-length encoding. -.NH 1 -Acknowledgements -.LP -Clive Feather (IXI) originated the extended-length encoding used in this -extension proposal. diff --git a/doc/xorg-docs/specs/Xext/buffer.ms b/doc/xorg-docs/specs/Xext/buffer.ms deleted file mode 100644 index 8f4c08508..000000000 --- a/doc/xorg-docs/specs/Xext/buffer.ms +++ /dev/null @@ -1,1301 +0,0 @@ -.\" $Xorg: buffer.ms,v 1.3 2000/08/17 19:42:31 cpqbld Exp $ -.\" -.\" -.\" -.\" -.\" $XFree86: xc/doc/specs/Xext/buffer.ms,v 1.3 2000/03/03 23:16:24 dawes Exp $ -.TL -Extending X for Double-Buffering, Multi-Buffering, and Stereo -.AU -Jeffrey Friedberg -Larry Seiler -Jeff Vroom -.AI -Version 3.3 -January 11, 1990 - -\fIThe \fRMulti-Buffering\fP extension described here was a draft standard of the -X Consortium prior to Release 6.1. It has been superseded by the Double Buffer -Extension (DBE). DBE is an X Consortium Standard as of Release 6.1.\fP -.SH -Introduction -.LP -Several proposals have been written that address some of the -issues surrounding the support of double-buffered, multi-buffered, -and stereo windows in the X Window System: -.IP \(bu -\fIExtending X for Double-Buffering,\fP -Jeffrey Friedberg, Larry Seiler, Randi Rost. -.IP \(bu -\fI(Proposal for) Double-Buffering Extensions\fP, -Jeff Vroom. -.IP \(bu -\fIAn Extension to X.11 for Displays with Multiple Buffers,\fP -David S.H. Rosenthal. -.IP \(bu -\fIA Multiple Buffering/Stereo Proposal\fP, -Mark Patrick. -.FS -Copyright \(co 1989 Digital Equipment Corporation. -.br -Permission to use, copy, modify, and distribute this documentation for any -purpose and without fee is hereby granted, provided that the above copyright -notice and this permission notice appear in all copies. -Digital Equipment Corporation makes no representations -about the suitability for any purpose of the information in -this document. This documentation is provided "as is" -without express or implied warranty. This document -is subject to change. -.LP -Copyright \(co 1989, 1994 X Consortium -.LP -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -.LP -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -.LP -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. -.LP -\fIX Window System\fP is a trademark of X Consortium, Inc. -.FE -.LP -The authors of this proposal have tried to unify the above documents -to yield a proposal that incorporates support for double-buffering, -multi-buffering, and stereo in a way that is acceptable to all concerned. -.SH -Goals -.LP -Clients should be able to: -.IP \(bu -Associate multiple buffers with a window. -.IP \(bu -Paint in any buffer associated with a window. -.IP \(bu -Display any buffer associated with a window. -.IP \(bu -Display a series of buffers in a window in rapid succession -to achieve a \fIsmooth\fP animation. -.IP \(bu -Request simultaneous display of different buffers in different windows. -.LP -In addition, the extension should: -.IP \(bu -Allow existing X applications to run unchanged. -.IP \(bu -Support a range of implementation methods that can capitalize on -existing hardware features. -.bp -.SH -Image Buffers -.LP -Normal windows are created using the standard \fBCreateWindow\fP request: -.DS -.\" .ft 8 -CreateWindow - parent : WINDOW - w_id : WINDOW - depth : CARD8 - visual : VISUALID or CopyFromParent - x, y : INT16 - width, height : INT16 - border_width : INT16 - value_mask : BITMASK - value_list : LISTofVALUE -.\" .ft -.DE -.LP -This request allocates a set of window attributes and -a buffer into which an image can be drawn. -The contents of this \fIimage buffer\fP will -be displayed when the window is mapped to the screen. -.LP -To support double-buffering and multi-buffering, -we introduce the notion that additional image buffers can -be created and bound together to form groups. -The following rules will apply: -.IP \(bu -All image buffers in a group will have the same -visual type, depth, and geometry (ie: width and height). -.IP \(bu -Only one image buffer per group can be displayed -at a time. -.IP \(bu -Draw operations can occur to any image buffer at -any time. -.IP \(bu -Window management requests (\fBMapWindow\fP, \fBDestroyWindow\fP, -\fBConfigureWindow\fP, etc...) -affect all image buffers associated with a window. -.IP \(bu -Appropriate resize and exposure events will be generated -for every image buffer that is affected by a window -management operation. -.LP -By allowing draw operations to occur on any image buffer at any time, -a client could, on a multi-threaded multi-processor server, -simultaneously build up images for display. -To support this, each buffer must have its own resource ID. -Since buffers are different than windows and pixmaps -(buffers are not hierarchical and pixmaps cannot be displayed) -a new resource, \fBBuffer\fP, is introduced. -Furthermore, a \fBBuffer\fP is also a \fBDrawable\fP, thus -draw operations may also be performed on buffers simply -by passing a buffer ID to the existing pixmap/window -interface. -.LP -To allow existing X applications to work unchanged, we assume -a window ID passed in a draw request, for a multi-buffered -window, will be an \fIalias\fP for the ID of the currently -displayed image buffer. Any draw requests (eq: \fBGetImage\fP) on -the window will be relative to the displayed image buffer. -.LP -In window management requests, only a window ID will be -accepted. Requests like \fBQueryTree\fP, will continue to -return only window ID's. Most events will return -just the window ID. Some new events, described in a subsequent -section, will return a buffer ID. -.LP -When a window has backing store the contents of the window -are saved off-screen. Likewise, when the contents of an image -buffer of a multi-buffer window is saved off-screen, it is -said to have backing store. This applies to all image buffers, -whether or not they are selected for display. -.LP -In some multi-buffer implementations, undisplayed buffers might be -implemented using pixmaps. Since the contents of pixmaps exist -off-screen and are not affected by occlusion, these image buffers -in effect have backing store. -.LP -On the other hand, both the displayed and undisplayed image buffers -might be implemented using a subset of the on-screen pixels. -In this case, unless the contents of an image buffer are saved -off-screen, these image buffers in effect do not have backing store. -.LP -Output to any image buffer of an unmapped multi-buffered window -that does not have backing store is discarded. Output to any -image buffer of a mapped multi-buffer window will be performed; -however, portions of an image buffer may be occluded or clipped. -.LP -When an unmapped multi-buffered window becomes mapped, the contents -of any image buffer buffer that did not have backing store is -tiled with the background and zero or more exposure events are -generated. If no background is defined for the window, then -the screen contents are not altered and the contents of any -undisplayed image buffers are undefined. If backing store was -maintained for an image buffer, then no exposure events are generated. -.SH -New Requests -.LP -The new request, \fBCreateImageBuffers\fP, creates a group of -image buffers and associates them with a normal X window: -.DS -.\" .ft 8 -CreateImageBuffers - w_id : WINDOW - buffers : LISTofBUFFER - update_action : {Undefined,Background,Untouched,Copied} - update_hint : {Frequent,Intermittent,Static} - => - number_buffers : CARD16 - - (Errors: Window, IDChoice, Value) -.\" .ft -.DE -One image buffer will be associated with each ID passed in \fIbuffers\fP. -The first buffer of the list is referred to as buffer[0], the next -buffer[1], and so on. Each buffer will have the same visual type -and geometry as the window. -Buffer[0] will refer to the image buffer already associated -with the window ID and its contents will not be modified. -The displayed image buffer attribute is set to buffer[0]. -.LP -Image buffers for the remaining ID's (buffer[1],...) are allocated. -If the window is mapped, or if these image buffers have backing -store, their contents will be tiled with the window background -(if no background is defined, the buffer contents are undefined), -and zero or more expose events will be generated for each of these -buffers. The contents of an image buffer is undefined when -the window is unmapped and the buffer does not have backing store. -.LP -If the window already has a group of image buffers -associated with it (ie: from a previous \fBCreateImageBuffers\fP request) -the actions described for \fBDestroyImageBuffers\fP are performed first -(this will delete the association of the previous buffer ID's and -their buffers as well as de-allocate all buffers except for the -one already associated with the window ID). -.LP -To allow a server implementation to efficiently allocate the -buffers, the total number of buffers required and -the update action (how they will behave during an update) -is specified "up front" in the request. -If the server cannot allocate all the buffers requested, the -total number of buffers actually allocated will be returned. -No \fBAlloc\fP errors will be generated \- buffer[0] can -always be associated with the existing displayed image buffer. -.LP -For example, an application that wants to animate a short movie -loop may request 64 image buffers. The server may only be able to -support 16 image buffers of this type, size, and depth. -The application can then decide 16 buffers is sufficient and may -truncate the movie loop, or it may decide it really needs -64 and will free the buffers and complain to the user. -.LP -One might be tempted to provide a request that inquires whether \fIn\fP -buffers of a particular type, size, and depth \fIcould\fP be allocated. -But if the query is decoupled from the actual allocation, -another client could sneak in and take the buffers before the -original client has allocated them. -.LP -While any buffer of a group can be selected for display, -some applications may display buffers in a predictable order -(ie: the movie loop application). The \fIlist order\fP -(buffer[0], buffer[1], ...) will be used as a hint by the -server as to which buffer will be displayed next. -A client displaying buffers in this order may see a -performance improvement. -.LP -\fIupdate_action\fP indicates what should happen to a previously -displayed buffer when a different buffer becomes displayed. -Possible actions are: -.IP \fIUndefined\fP 15 -The contents of the buffer that was -last displayed will become undefined after the update. This -is the most efficient action since it allows the implementation -to trash the contents of the buffer if it needs to. -.IP \fIBackground\fP -The contents of the buffer that was -last displayed will be set to the background of the window after the update. -The background action allows devices to use a fast clear -capability during an update. -.IP \fIUntouched\fP -The contents of the buffer that was -last displayed will be untouched after the update. Used -primarily when cycling through images that have already -been drawn. -.IP \fICopied\fP -The contents of the buffer that was -last displayed will become the same as those that are being -displayed after the update. This is useful when incrementally -adding to an image. -.LP -\fIupdate_hint\fP indicates how often the client will -request a different buffer to be displayed. -This hint will allow smart server implementations to choose the -most efficient means to support a multi-buffered window based -on the current need of the application (dumb implementations -may choose to ignore this hint). Possible hints are: -.IP \fIFrequent\fP 15 -An animation or movie loop is -being attempted and the fastest, most efficient means for -multi-buffering should be employed. -.IP \fIIntermittent\fP -The displayed image will be -changed every so often. This is common for images that are -displayed at a rate slower than a second. For example, a -clock that is updated only once a minute. -.IP \fIStatic\fP -The displayed image buffer will -not be changed any time soon. Typically set by an application -whenever there is a pause in the animation. -.LP -To display an image buffer the following request can be used: -.DS -.\" .ft 8 -DisplayImageBuffers - buffers : LISTofBUFFER - min_delay : CARD16 - max_delay : CARD16 - - (Errors: Buffer, Match) -.\" .ft -.DE -The image buffers listed will become displayed as simultaneously -as possible and the update action, bound at \fBCreateImageBuffers\fP -time, will be performed. -.LP -A list of buffers is specified to -allow the server to efficiently change the display of more than one -window at a time (ie: when a global screen swap method is used). -Attempting to simultaneously display -multiple image buffers from the same window is an error -(\fBMatch\fP) since it violates the rule that only one -image buffer per group can be displayed at a time. -.LP -If a specified buffer is already displayed, -any delays and update action will still be -performed for that buffer. In this instance, -only the update action of \fIBackground\fP (and possibly -\fIUndefined\fP) will have any affect on the contents -of the displayed buffer. These semantics allow -an animation application to successfully execute -even when there is only a single buffer available -for a window. -.LP -When a \fBDisplayImageBuffers\fP request is made to an unmapped -multi-buffered window, the effect of the update action depends -on whether the image buffers involved have backing store. -When the target of the update action is an image buffer that -does not have backing store, output is discarded. When the -target image buffer does have backing store, the update is performed; -however, when the source of the update is an image buffer does not -have backing store (as in the case of update action \fICopied\fP), the -contents of target image buffer will become undefined. -.LP -\fImin_delay\fP and \fImax_delay\fP put a bound on how long the -server should wait before processing the display request. -For each of the windows to be updated by this request, at least -\fImin_delay\fP milli-seconds should elapse since the last -time any of the windows were updated; conversely, no window -should have to wait more than \fImax_delay\fP milli-seconds -before being updated. -.LP -\fImin_delay\fP allows an application to -\fIslow down\fP an animation or movie loop so that it appears -synchronized at a rate the server can support given the current load. -For example, a \fImin_delay\fP of 100 indicates the server should -wait at least 1/10 of a second since the last time any of the -windows were updated. A \fImin_delay\fP of zero indicates -no waiting is necessary. -.LP -\fImax_delay\fP can be thought of as an additional -delay beyond \fImin_delay\fP the server is allowed to wait -to facilitate such things as efficient update of multiple windows. -If \fImax_delay\fP would require an update before \fImin_delay\fP -is satisfied, then the server should process the display request as -soon as the \fImin_delay\fP requirement is met. A typical -value for \fImax_delay\fP is zero. -.LP -To implement the above functionality, the time since the last -update by a \fBDisplayImageBuffers\fP request for each multi-buffered -window needs to be saved as state by the server. -The server may delay execution of the \fBDisplayImageBuffers\fP -request until the appropriate time (e.g. by requeuing the -request after computing the timeout); -however, the entire request must be processed in one operation. -Request execution indivisibility must be maintained. When -a server is implemented with internal concurrency, the -extension must adhere to the same concurrency semantics -as those defined for the core protocol. -.LP -To explicitly clear a rectangular area of an image buffer to -the window background, the following request can be used: -.DS -.\" .ft 8 -ClearImageBufferArea - buffer : BUFFER - x, y : INT16 - w, h : CARD16 - exposures : BOOL - - (Errors: Buffer, Value) -.\" .ft P -.DE -.LP -Like the X \fBClearArea\fP request, \fIx\fP and \fIy\fP are relative to -the window's origin and specify the upper-left corner of the rectangle. -If \fIwidth\fP is zero, it is replaced with the current window width -minus \fIx\fP. If \fIheight\fP is zero it is replaced with the current -window height minus \fIy\fP. If the window has a defined background -tile, the rectangle is tiled with a plane mask of all ones, -a function of \fICopy\fP, and a subwindow-mode of \fIClipByChildren\fP. -If the window has background \fINone\fP, the contents of the buffer -are not changed. In either case, if \fIexposures\fP is true, then one or -more exposure events are generated for regions of the rectangle that are -either visible or are being retained in backing store. -.LP -The group of image buffers allocated by a \fBCreateImageBuffers\fP -request can be destroyed with the following request: -.DS -.\" .ft 8 -DestroyImageBuffers - w_id : WINDOW - - (Error: Window) -.\" .ft -.DE -.LP -The association between the buffer ID's and their corresponding -image buffers are deleted. Any image buffers not selected for -display are de-allocated. If the window is not multi-buffered, -the request is ignored. -.SH -Attributes -.LP -The following attributes will be associated with each window that -is multi-buffered: -.DS -.\" .ft 8 - displayed_buffer : CARD16 - update_action : {Undefined,Background,Untouched,Copied} - update_hint : {Frequent,Intermittent,Static} - window_mode : {Mono,Stereo} - buffers : LISTofBUFFER -.\" .ft -.DE -.LP -\fIdisplayed_buffer\fP is set to the \fIindex\fP of the currently -displayed image buffer (for stereo windows, this will be -the index of the left buffer \- the index of the right buffer -is simply \fIindex\fP+1). -\fIwindow_mode\fP indicates whether this window is \fIMono\fP or \fIStereo\fP. -The ID for each buffer associated with the window is recorded -in the \fIbuffers\fP list. -The above attributes can be queried with the following request: -.DS -.\" .ft 8 -GetMultiBufferAttributes - w_id : WINDOW - => - displayed_buffer : CARD16 - update_action : {Undefined,Background,Untouched,Copied} - update_hint : {Frequent,Intermittent,Static} - window_mode : {Mono,Stereo} - buffers : LISTofBUFFER - - (Errors: Window, Access, Value) -.\" .ft -.DE -.LP -If the window is not multi-buffered, a \fBAccess\fP error will be generated. -The only multi-buffer attribute that can be explicitly set -is \fIupdate_hint\fP. Rather than have a specific request -to set this attribute, a generic set request is provided to -allow for future expansion: -.DS -.\" .ft 8 -SetMultiBufferAttributes - w_id : WINDOW - value_mask : BITMASK - value_list : LISTofVALUE - - (Errors: Window, Match, Value) -.\" .ft -.DE -.LP -If the window is not multi-buffered, a \fBMatch\fP error will be generated. -The following attributes are maintained for each buffer of a -multi-buffered window: -.DS -.\" .ft 8 - window : WINDOW - event_mask : SETofEVENT - index : CARD16 - side : {Mono,Left,Right} -.\" .ft -.DE -.LP -\fIwindow\fP indicates the window this buffer is associated with. -\fIevent_mask\fP specifies which events, relevant to -buffers, will be sent back to the client via the associated buffer ID -(initially no events are selected). -\fIindex\fP is the list position (0, 1, ...) of the buffer. -\fIside\fP indicates whether this buffer is associated with -the left side or right side of a stereo window. -For non-stereo windows, this attribute will be set to \fIMono\fP. -These attributes can be queried with the following request: -.DS -.\" .ft 8 -GetBufferAttributes - buffer : BUFFER - => - window : WINDOW - event_mask : SETofEVENT - index : CARD16 - side : {Mono,Left,Right} - - (Errors: Buffer, Value) -.\" .ft -.DE -.LP -The only buffer attribute that can be explicitly set -is \fIevent_mask\fP. -The only events that are valid are -\fBExpose\fP and the new \fBClobberNotify\fP and \fBUpdateNotify\fP event -(see Events section below). -A \fBValue\fP error will be generated if an event not selectable -for a buffer is specified in an event mask. -Rather than have a specific request -to set this attribute, a generic set request is provided to -allow for future expansion: -.DS -.\" .ft 8 -SetBufferAttributes - buffer : BUFFER - value_mask : BITMASK - value_list : LISTofVALUE - - (Errors: Buffer, Value) -.\" .ft -.DE -.LP -Clients may want to query the server about basic multi-buffer -and stereo capability on a per screen basis. The following request -returns a large list of information -that would most likely be read once by Xlib for each screen, and used as a data base for -other Xlib queries: -.DS -.\" .ft 8 -GetBufferInfo - root : WINDOW - => - info : LISTofSCREEN_INFO -.\" .ft -.DE -.LP -Where \fBSCREEN_INFO\fP and \fBBUFFER_INFO\fP are defined as: -.DS -.\" .ft 8 - - SCREEN_INFO : [ normal_info : LISTofBUFFER_INFO, - stereo_info : LISTofBUFFER_INFO ] - - BUFFER_INFO : [ visual : VISUALID, - max_buffers : CARD16, - depth : CARD8 ] -.\" .ft -.DE -.LP -Information regarding multi-buffering of normal (mono) windows -is returned in the \fInormal_info\fP list. The \fIstereo_info\fP -list contains information about stereo windows. -If the \fIstereo_info\fP list is empty, stereo windows are -not supported on the screen. If \fImax_buffers\fP is zero, -the maximum number of buffers for the depth and visual is -a function of the size of the created window and current -memory limitations. -.LP -The following request returns the major and minor version numbers -of this extension: -.DS -.\" .ft 8 -GetBufferVersion - => - major_number : CARD8 - minor_number : CARD8 -.\" .ft -.DE -.LP -The version numbers are an escape hatch in case future revisions of -the protocol are necessary. In general, the major version would -increment for incompatible changes, and the minor version would -increment for small upward compatible changes. Barring changes, the -major version will be 1, and the minor version will be 1. -.SH -Events -.LP -All events normally generated for single-buffered -windows are also generated for multi-buffered windows. -Most of these events (ie: \fBConfigureNotify\fP) will -only be generated for the window and not for each buffer. -These events will return a window ID. -.LP -\fBExpose\fP events will be generated for both the window -and any buffer affected. When this event is generated for -a buffer, the same event structure will be used -but a buffer ID is returned instead of a window ID. -Clients, when processing these events, will know whether an -ID returned in an event structure is for a window or a buffer -by comparing the returned ID to the ones returned when the -window and buffer were created. -.LP -\fBGraphicsExposure\fP and \fBNoExposure\fP are generated -using whatever ID is specified in the graphics operation. -If a window ID is specified, the event will contain the -window ID. If a buffer ID is specified, the event will -contain the buffer ID. -.LP -In some implementations, moving a window -over a multi-buffered window may cause one or more of its buffers -to get overwritten or become unwritable. To allow a -client drawing into one of these buffers the opportunity -to stop drawing until some portion of the buffer is -writable, the following event is added: -.DS -.\" .ft 8 -ClobberNotify - buffer : BUFFER - state : {Unclobbered,PartiallyClobbered,FullyClobbered} -.\" .ft -.DE -.LP -The \fBClobberNotify\fP event is reported to clients selecting -\fIClobberNotify\fP on a buffer. When a buffer that was fully -or partially clobbered becomes unclobbered, an event with \fIUnclobbered\fP -is generated. When a buffer that was unclobbered becomes -partially clobbered, an event with \fIPartiallyClobbered\fP -is generated. When a buffer that was unclobbered or -partially clobbered becomes fully clobbered, an event with -\fIFullyClobbered\fP is generated. -.LP -\fBClobberNotify\fP events on a given buffer are -generated before any \fBExpose\fP events on that buffer, -but it is not required that all \fBClobberNotify\fP -events on all buffers be generated before all -\fBExpose\fP events on all buffers. -.LP -The ordering of \fBClobberNotify\fP events with respect -to \fBVisibilityNotify\fP events is not constrained. -.LP -If multiple buffers were used as an image FIFO between an image -server and the X display server, then the FIFO manager would like -to know when a buffer that was previously displayed, has been -undisplayed and updated, as the side effect of a \fBDisplayImageBuffers\fP -request. This allows the FIFO manager to load up a future frame as -soon as a buffer becomes available. To support this, -the following event is added: -.DS -.\" .ft 8 -UpdateNotify - buffer : BUFFER -.\" .ft -.DE -.LP -The \fBUpdateNotify\fP event is reported to clients selecting -\fIUpdateNotify\fP on a buffer. Whenever a buffer becomes \fIupdated\fP -(e.g. its update action is performed as part of a \fBDisplayImageBuffers\fP -request), an \fBUpdateNotify\fP event is generated. -.SH -Errors -.LP -The following error type has been added to support -this extension: -.IP \fBBuffer\fP 15 -A value for a BUFFER argument does not name a defined -BUFFER. -.bp -.SH -Double-Buffering Normal Windows -.LP -The following pseudo-code fragment illustrates how to create and display -a double-buffered image: -.DS -.\" .ft 8 -/* - * Create a normal window - */ -CreateWindow( W, ... ) - -/* - * Create two image buffers. Assume after display, buffer - * contents become "undefined". Assume we will "frequently" - * update the display. Abort if we don't get two buffers, - */ -n = CreateImageBuffers( W, [B0,B1], Undefined, Frequent ) -if (n != 2) - -/* - * Map window to the screen - */ -MapWindow( W ) - -/* - * Draw images using alternate buffers, display every - * 1/10 of a second. Note we draw B1 first so it will - * "pop" on the screen - */ -while animating -{ - - DisplayImageBuffers( [B1], 100, 0 ) - - - DisplayImageBuffers( [B0], 100, 0 ) -} - -/* - * Strip image buffers and leave window with - * contents of last displayed image buffer. - */ -DestroyImageBuffers( W ) -.\" .ft -.DE -.bp -.SH -Multi-Buffering Normal Windows -.LP -Multi-buffered images are also supported by these requests. -The following pseudo-code fragment illustrates how to create a -a multi-buffered image and cycle through the images to -simulate a movie loop: -.DS -.\" .ft 8 -/* - * Create a normal window - */ -CreateWindow( W, ... ) - -/* - * Create 'N' image buffers. Assume after display, buffer - * contents are "untouched". Assume we will "frequently" - * update the display. Abort if we don't get all the buffers. - */ -n = CreateImageBuffers( W, [B0,B1,...,B(N-1)], Untouched, Frequent ) -if (n != N) - -/* - * Map window to screen - */ -MapWindow( W ) - -/* - * Draw each frame of movie one per buffer - */ -foreach frame - - -/* - * Cycle through frames, one frame every 1/10 of a second. - */ -while animating -{ - foreach frame - DisplayImageBuffers( [B(i)], 100, 0 ) -} -.\" .ft -.DE -.bp -.SH -Stereo Windows -.LP -\fIHow\fP stereo windows are supported on a server is implementation -dependent. A server may contain specialized hardware that allows -left and right images to be toggled at field or frame rates. The -stereo affect may only be perceived with the aid of special -viewing glasses. The \fIdisplay\fP of a stereo picture should -be independent of how often the contents of the picture are -\fIupdated\fP by an application. Double and multi-buffering -of images should be possible regardless of whether the image -is displayed normally or in stereo. -.LP -To achieve this goal, a simple extension to normal windows -is suggested. Stereo windows are just like normal windows -except the displayed image is made up of a left image -buffer and a right image buffer. To create a stereo window, -a client makes the following request: -.DS -.\" .ft 8 -CreateStereoWindow - parent : WINDOW - w_id : WINDOW - left, right : BUFFER - depth : CARD8 - visual : VISUALID or CopyFromParent - x, y : INT16 - width, height : INT16 - border_width : INT16 - value_mask : BITMASK - value_list : LISTofVALUE - - (Errors: Alloc, Color, Cursor, Match, - Pixmap, Value, Window) -.\" .ft -.DE -.LP -This request, modeled after the \fBCreateWindow\fP request, -adds just two new parameters: \fIleft\fP and \fIright\fP. -For stereo, it is essential that one can distinguish whether -a draw operation is to occur on the left image or right image. -While an internal mode could have been added to achieve this, -using two buffer ID's allows clients to simultaneously build up -the left and right components of a stereo image. These -ID's always refer to (are an alias for) the left and right -image buffers that are currently \fIdisplayed\fP. -.LP -Like normal windows, the window ID is used whenever a window -management operation is to be performed. Window queries would -also return this window ID (eg: \fBQueryTree\fP) as would most -events. Like the window ID, the left and right buffer ID's -each have their own event mask. They can be set and queried -using the \fBSet/GetBufferAttributes\fP requests. -.LP -Using the window ID of a stereo window in a draw request -(eg: \fBGetImage\fP) results in pixels that are \fIundefined\fP. -Possible semantics are that both left and right images get -drawn, or just a single side is operated on (existing applications -will have to be re-written to explicitly use the left and right -buffer ID's in order to successfully create, fetch, and store -stereo images). -.LP -Having an explicit \fBCreateStereoWindow\fP request is helpful -in that a server implementation will know from the onset whether -a stereo window is desired and can return appropriate status -to the client if it cannot support this functionality. -.LP -Some hardware may support separate stereo and non-stereo modes, -perhaps with different vertical resolutions. For example, the -vertical resolution in stereo mode may be half that of non-stereo -mode. Selecting one mode or the other must be done through some -means outside of this extension (eg: by providing a separate -screen for each hardware display mode). The screen attributes -(ie: x/y resolution) for a screen that supports normal windows, -may differ from a screen that supports stereo windows; -however, all windows, regardless of type, displayed on the -same screen must have the same screen attributes -(ie: pixel aspect ratio). -.LP -If a screen that supports stereo windows also supports -normal windows, then the images presented to the left and -right eyes for normal windows should be the same -(ie: have no stereo offset). -.KS -.SH -Single-Buffered Stereo Windows -.LP -The following shows how to create and display a single-buffered -stereo image: -.DS -.\" .ft 8 -/* - * Create the stereo window, map it the screen, - * and draw the left and right images - */ -CreateStereoWindow( W, L, R, ... ) - -MapWindow( W ) - - -.\" .ft -.DE -.KE -.bp -.SH -Double-Buffering Stereo Windows -.LP -Additional image buffers may be added to a stereo window -to allow double or multi-buffering of stereo images. -Simply use the the \fBCreateImageBuffers\fP request. -Even numbered buffers (0,2,...) will be left buffers. -Odd numbered buffers (1,3,...) will be right buffers. -Displayable stereo images are formed by consecutive -left/right pairs of image buffers. For example, -(buffer[0],buffer[1]) form the first displayable -stereo image; (buffer[2],buffer[3]) the next; -and so on. -.LP -The \fBCreateImageBuffers\fP request will only create -pairs of left and right image buffers for stereo windows. -By always pairing left and right image -buffers together, implementations might be able to -perform some type of optimization. If an odd number -of buffers is specified, a \fBValue\fP error is generated. -All the rules mentioned at the start of this proposal -still apply to the image buffers supported by a stereo window. -.LP -To display a image buffer pair of a multi-buffered stereo image, -either the left buffer ID or right buffer ID may be specified in a -\fBDisplayImageBuffers\fP request, but not both. -.LP -To double-buffer a stereo window: -.DS -.\" .ft 8 -/* - * Create stereo window and map it to the screen - */ -CreateStereoWindow( W, L, R, ... ) - -/* - * Create two pairs of image buffers. Assume after display, - * buffer contents become "undefined". Assume we will "frequently" - * update the display. Abort if we did get all the buffers. - */ -n = CreateImageBuffers( W, [L0,R0,L1,R1], Undefined, Frequently ) -if (n != 4) - -/* - * Map window to the screen - */ -MapWindow( W ) - -/* - * Draw images using alternate buffers, - * display every 1/10 of a second. - */ -while animating -{ - - DisplayImageBuffers( [L1], 100, 0 ) - - - DisplayImageBuffers( [L0], 100, 0 ) -} -.\" .ft -.DE -.bp -.SH -Multi-Buffering Stereo Windows -.LP -To cycle through \fIN\fP stereo images: -.DS -.\" .ft 8 -/* - * Create stereo window - */ -CreateStereoWindow( W, L, R, ... ) - -/* - * Create N pairs of image buffers. Assume after display, - * buffer contents are "untouched". Assume we will "frequently" - * update the display. Abort if we don't get all the buffers. - */ -n = CreateImageBuffers( W, [L0,R0,...,L(N-1),R(N-1)], Untouched, Frequently ) -if (n != N*2) - -/* - * Map window to screen - */ -MapWindow( W ) - -/* - * Draw the left and right halves of each image - */ -foreach stereo image - - -/* - * Cycle through images every 1/10 of a second - */ -while animating -{ - foreach stereo image - DisplayImageBuffers( [L(i)], 100, 0 ) -} -.\" .ft -.DE -.bp -.SH -Protocol Encoding -.LP -The official name of this extension is "Multi-Buffering". -When this string passed to \fBQueryExtension\fP the -information returned should be interpreted as follows: -.IP \fImajor-opcode\fP 15 -Specifies the major opcode of this extension. -The first byte of each extension request should -specify this value. -.IP \fIfirst-event\fP -Specifies the code that will be returned when -\fBClobberNotify\fP events are generated. -.IP \fIfirst-error\fP -Specifies the code that will be returned when -\fBBuffer\fP errors are generated. -.LP -The following sections describe the protocol -encoding for this extension. -.SH -TYPES -.LP -BUFFER_INFO -.TS -lw(.5i) lw(1.5i) lw(2i). -4 VISUALID visual -2 CARD16 max-buffers -1 CARD8 depth -1 unused -.TE -.LP -SETofBUFFER_EVENT -.TS -lw(.5i) lw(1.5i) lw(2i). -\0 #x00008000 Exposure -\0 #x02000000 ClobberNotify -\0 #x04000000 UpdateNotify -.TE -.SH -EVENTS -.LP -\fBClobberNotify\fP -.TS -lw(.5i) lw(1.5i) lw(2i). -1 see \fIfirst-event\fP code -1 unused -2 CARD16 sequence number -4 BUFFER buffer -1 state - 0 Unclobbered - 1 PartiallyClobbered - 2 FullyClobbered -23 unused -.TE -.LP -\fBUpdateNotify\fP -.TS -lw(.5i) lw(1.5i) lw(2i). -1 \fIfirst-event\fP+1 code -1 unused -2 CARD16 sequence number -4 BUFFER buffer -24 unused -.TE -.SH -ERRORS -.LP -\fBBuffer\fP -.TS -lw(.5i) lw(1.5i) lw(2i). -1 0 Error -1 see \fIfirst-error\fP code -2 CARD16 sequence number -4 CARD32 bad resource id -2 CARD16 minor-opcode -1 CARD8 major-opcode -21 unused -.TE -.bp -.SH -REQUESTS -.KS -.LP -\fBGetBufferVersion\fP -.TS -lw(.5i) lw(1.5i) lw(2i). -1 see \fImajor-opcode\fP major-opcode -1 0 minor-opcode -2 1 request length -\(-> -1 1 Reply -1 unused -2 CARD16 sequence number -4 0 reply length -1 CARD8 major version number -1 CARD8 minor version number -22 unused -.TE -.KE -.KS -.LP -\fBCreateImageBuffers\fP -.TS -lw(.5i) lw(1.5i) lw(2i). -1 see \fImajor-opcode\fP major-opcode -1 1 minor-opcode -2 3+n request length -4 WINDOW wid -1 update-action - 0 Undefined - 1 Background - 2 Untouched - 3 Copied -1 update-hint - 0 Frequent - 1 Intermittent - 2 Static -2 unused -4n LISTofBUFFER buffer-list -\(-> -1 1 Reply -1 unused -2 CARD16 sequence number -4 0 reply length -2 CARD16 number-buffers -22 unused -.TE -.KE -.KS -.LP -\fBDestroyImageBuffers\fP -.TS -lw(.5i) lw(1.5i) lw(2i). -1 see \fImajor-opcode\fP major-opcode -1 2 minor-opcode -2 2 request length -4 WINDOW wid -.TE -.KE -.KS -.LP -\fBDisplayImageBuffers\fP -.TS -lw(.5i) lw(1.5i) lw(2i). -1 see \fImajor-opcode\fP major-opcode -1 3 minor-opcode -2 2+n request length -2 CARD16 min-delay -2 CARD16 max-delay -4n LISTofBUFFER buffer-list -.TE -.KE -.KS -.LP -\fBSetMultiBufferAttributes\fP -.TS -lw(.5i) lw(1.5i) lw(2i). -1 see \fImajor-opcode\fP major-opcode -1 4 minor-opcode -2 3+n request length -4 WINDOW wid - -4 BITMASK value-mask (has n bits set to 1) - #x00000001 update-hint - -4n LISTofVALUE value-list - -VALUEs -1 update-hint - 0 Frequent - 1 Intermittent - 2 Static -.TE -.KE -.KS -.LP -\fBGetMultiBufferAttributes\fP -.TS -lw(.5i) lw(1.5i) lw(2i). -1 see \fImajor-opcode\fP major-opcode -1 5 minor-opcode -2 2 request length -4 WINDOW wid -\(-> -1 1 Reply -1 unused -2 CARD16 sequence number -4 n reply length -2 CARD16 displayed-buffer -1 update-action - 0 Undefined - 1 Background - 2 Untouched - 3 Copied -1 update-hint - 0 Frequent - 1 Intermittent - 2 Static -1 window-mode - 0 Mono - 1 Stereo -19 unused -4n LISTofBUFFER buffer list -.TE -.KE -.KS -.LP -\fBSetBufferAttributes\fP -.TS -lw(.5i) lw(1.5i) lw(2i). -1 see \fImajor-opcode\fP major-opcode -1 6 minor-opcode -2 3+n request length -4 BUFFER buffer - -4 BITMASK value-mask (has n bits set to 1) - #x00000001 event-mask - -4n LISTofVALUE value-list - -VALUEs -4 SETofBUFFER_EVENT event-mask -.TE -.KE -.KS -.LP -\fBGetBufferAttributes\fP -.TS -lw(.5i) lw(1.5i) lw(2i). -1 see \fImajor-opcode\fP major-opcode -1 7 minor-opcode -2 2 request length -4 BUFFER buffer -\(-> -1 1 Reply -1 unused -2 CARD16 sequence number -4 0 reply length -4 WINDOW wid -4 SETofBUFFER_EVENT event-mask -2 CARD16 index -1 side - 0 Mono - 1 Left - 2 Right -13 unused -.TE -.KE -.KS -.LP -\fBGetBufferInfo\fP -.TS -lw(.5i) lw(1.5i) lw(2i). -1 see \fImajor-opcode\fP major-opcode -1 8 minor-opcode -2 2 request length -4 WINDOW root -\(-> -1 1 Reply -1 unused -2 CARD16 sequence number -4 2(n+m) reply length -2 n number BUFFER_INFO in normal-info -2 m number BUFFER_INFO in stereo-info -20 unused -8n LISTofBUFFER_INFO normal-info -8m LISTofBUFFER_INFO stereo-info -.TE -.KE -.KS -.LP -\fBCreateStereoWindow\fP -.TS -lw(.5i) lw(1.5i) lw(2i). -1 see \fImajor-opcode\fP major-opcode -1 9 minor-opcode -2 11+n request length -3 unused -1 CARD8 depth -4 WINDOW wid -4 WINDOW parent -4 BUFFER left -4 BUFFER right -2 INT16 x -2 INT16 y -2 CARD16 width -2 CARD16 height -2 CARD16 border-width -2 class - 0 CopyFromParent - 1 InputOutput - 2 InputOnly - -4 VISUALID visual - 0 CopyFromParent - -4 BITMASK value-mask (has n bits set to 1) - \fIencodings are the same\fP - \fIas for CreateWindow\fP - -4n LISTofVALUE value-list - \fIencodings are the same\fP - \fIas for CreateWindow\fP -.TE -.KE -.KS -.LP -\fBClearImageBufferArea\fP -.TS -lw(.5i) lw(1.5i) lw(2i). -1 see \fImajor-opcode\fP major-opcode -1 10 minor-opcode -2 5 request length -4 WINDOW buffer -2 INT16 x -2 INT16 y -2 CARD16 width -2 CARD16 height -3 unused -1 BOOL exposures -.TE -.KE - diff --git a/doc/xorg-docs/specs/Xext/dbe.tex b/doc/xorg-docs/specs/Xext/dbe.tex deleted file mode 100644 index ea43e5894..000000000 --- a/doc/xorg-docs/specs/Xext/dbe.tex +++ /dev/null @@ -1,782 +0,0 @@ -% $Xorg: dbe.tex,v 1.3 2000/08/17 19:42:31 cpqbld Exp $ -% edited for DP edits and code consistency w/ core protocol/xlib 3/30/96 -% split into separate library and protocol documentos 4/15/96 -\documentstyle{article} -\pagestyle{myheadings} -\markboth{Double Buffer Extension Specification}{Double Buffer Extension Specification} -\setlength{\parindent}{0 pt} -\setlength{\parskip}{6pt} -\setlength{\topsep}{0 pt} - -% Request names are literal symbols; therefore, use the same font for both. -\newcommand{\requestname}[1]{{\tt #1}} -\newcommand{\literal}[1]{\mbox{\tt #1}} - -\newcommand{\encodingsection}[1]{{\bf #1}} -\newcommand{\requestsection}[1]{{\bf #1}} - -% Font treatment of type names differs between protocol and library sections. -\newcommand{\libtypename}[1]{\mbox{\tt #1}} -\newcommand{\typename}[1]{\mbox{\rm #1}} % default font -\newcommand{\typeargname}[1]{\mbox{\rm #1}} % default font -\newcommand{\argname}[1]{\mbox{\it #1}} -\newcommand{\argdecl}[2]{\argname{#1} & : \typename{#2}\\} -\newcommand{\areplyargdecl}[2]{#1 & : \typename{#2}\\} - -\newenvironment{arequest}[1]{\requestsection{#1} \\ \begin{tabular}{ll}}{\end{tabular}} -\newcommand{\areply}{$\Rightarrow$\\} - -\newcommand{\etabstops}{\hspace*{0cm}\=\hspace*{1cm}\=\hspace*{5cm}\=\kill} - -\newcommand{\eargdecl}[3]{\> #1 \> \typename{#2} \> #3 \\} - -\newenvironment{keeptogether}{\vbox \bgroup}{\egroup} - -\newenvironment{erequest}[3]{\pagebreak[3] \begin{keeptogether} \encodingsection{#1} \begin{tabbing} \etabstops \eargdecl{1}{CARD8}{major-opcode} \eargdecl{1}{#2}{minor-opcode} \eargdecl{2}{#3}{request length}}{\end{tabbing} \end{keeptogether}} - -\newenvironment{eerror}[1]{\begin{keeptogether} \encodingsection{#1} \begin{tabbing} \etabstops }{\end{tabbing} \end{keeptogether}} - -\newenvironment{etypedef}[1]{\begin{keeptogether} \typename{#1} \begin{tabbing} \etabstops }{\end{tabbing} \end{keeptogether}} - -\newcommand{\cfunctionname}[1]{\mbox{\tt #1}} -\newcommand{\cfunctiondecl}[1]{\mbox{\rm #1}} -\newcommand{\cargdecl}[2]{\penalty -1\typename{#1} \argname{#2}} -\newenvironment{cfunction}[2]{\begin{sloppypar}\begin{keeptogether}\vspace{5mm}\typename{#1}\\ \cfunctiondecl{#2}\ (}{)\end{keeptogether}\end{sloppypar}{\hangafter=2 \hangindent=20pt \raggedright\par}} - -% make things easier with all the long names -\spaceskip .3333em plus 5em -\tolerance=2000 - -\begin{document} - -\title{Double Buffer Extension Protocol\\Protocol Version 1.0\\X Consortium Standard} -\author{Ian Elliott\\Hewlett-Packard Company \and David P. Wiggins\\X Consortium, Inc.} -\maketitle -\thispagestyle{empty} - -\eject - -Copyright \copyright 1989 X Consortium, Inc. and Digital Equipment Corporation. - -Copyright \copyright 1992 X Consortium, Inc. and Intergraph Corporation. - -Copyright \copyright 1993 X Consortium, Inc. and Silicon Graphics, Inc. - -Copyright \copyright 1994, 1995 X Consortium, Inc. and Hewlett-Packard Company. - -Permission to use, copy, modify, and distribute this documentation for -any purpose and without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. -Digital Equipment Corporation, Intergraph Corporation, Silicon -Graphics, Hewlett-Packard, and the X Consortium make no -representations about the suitability for any purpose of the -information in this document. This documentation is provided ``as is'' -without express or implied warranty. - -\eject - -\section{Introduction} - -The Double Buffer Extension (DBE) provides a standard way to utilize -double-buffering within the framework of the X Window System. -Double-buffering uses two buffers, called front and back, which hold -images. The front buffer is visible to the user; the back buffer is -not. Successive frames of an animation are rendered into the back -buffer while the previously rendered frame is displayed in the front -buffer. When a new frame is ready, the back and front buffers swap -roles, making the new frame visible. Ideally, this exchange appears to -happen instantaneously to the user and with no visual artifacts. Thus, -only completely rendered images are presented to the user, and they remain -visible during the entire time it takes to render a new frame. The -result is a flicker-free animation. - -\section{Goals} - -This extension should enable clients to: -\begin{itemize} - -\item Allocate and deallocate double-buffering for a window. - -\item Draw to and read from the front and back buffers associated with -a window. - -\item Swap the front and back buffers associated with a window. - -\item Specify a wide range of actions to be taken when a window is -swapped. This includes explicit, simple swap actions (defined -below), and more complex actions (for example, clearing ancillary buffers) -that can be put together within explicit ``begin'' and ``end'' -requests (defined below). - -\item Request that the front and back buffers associated with multiple -double-buffered windows be swapped simultaneously. - -\end{itemize} - -In addition, the extension should: - -\begin{itemize} - -\item Allow multiple clients to use double-buffering on the same window. - -\item Support a range of implementation methods that can capitalize on -existing hardware features. - -\item Add no new event types. - -\item Be reasonably easy to integrate with a variety of direct graphics -hardware access (DGHA) architectures. -\end{itemize} - -\section{Concepts} - -Normal windows are created using the core \requestname{CreateWindow} -request, which allocates a set of window attributes and, for -\literal{InputOutput} windows, a front buffer, -into which an image can be drawn. -The contents of this buffer will be displayed when the window is -visible. - -This extension enables applications to use double-buffering with a -window. This involves creating a second buffer, called a back buffer, -and associating one or more back buffer names (\typename{XID}s) with -the window for use when referring to (that is, drawing to or reading -from) the window's back buffer. The back buffer name is a -\typename{DRAWABLE} of type \typename{BACKBUFFER}. - -DBE provides a relative double-buffering model. One XID, the window, -always refers to the front buffer. One or more other XIDs, the back buffer -names, always refer to the back buffer. After a buffer swap, the -window continues to refer to the (new) front buffer, and the -back buffer name continues to refer to the (new) back buffer. Thus, -applications and toolkits that want to just render to the back buffer -always use the back buffer name for all drawing requests to the -window. Portions of an application that want to render to the front -buffer always use the window XID for all drawing requests to the -window. - -Multiple clients and toolkits can all use double-buffering on the same -window. DBE does not provide a request for querying whether a window -has double-buffering support, and if so, what the back buffer name is. -Given the asynchronous nature of the X Window System, this would cause -race conditions. Instead, DBE allows multiple back buffer names to -exist for the same window; they all refer to the same physical back -buffer. The first time a back buffer name is allocated for a window, -the window becomes double-buffered and the back buffer name is -associated with the window. Subsequently, the window already is a -double-buffered window, and nothing about the window changes when a -new back buffer name is allocated, except that the new back buffer -name is associated with the window. The window remains -double-buffered until either the window is destroyed or until all of -the back buffer names for the window are deallocated. - -In general, both the front and back buffers are treated the same. In -particular, here are some important characteristics: - -\begin{itemize} - -\item Only one buffer per window can be visible at a time (the -front buffer). - -\item Both buffers associated with a window have the same visual type, -depth, width, height, and shape as the window. - -\item Both buffers associated with a window are ``visible'' (or -``obscured'') in the same way. When an \literal{Expose} event is -generated for -a window, both buffers should be considered to be damaged in the -exposed area. Damage that occurs to either buffer will result in an -\literal{Expose} event on the window. When a double-buffered window is -exposed, -both buffers are tiled with the window background, exactly as stated -by the core protocol. Even though the back buffer is not visible, -terms such as obscure apply to the back buffer as well as to the front -buffer. - -\item It is acceptable at any time to pass a \typename{BACKBUFFER} in -any request, notably any core or extension drawing request, that -expects a \typename{DRAWABLE}. This enables an application to draw -directly into \typename{BACKBUFFER}s in the same fashion as it would -draw into any other \typename{DRAWABLE}. - -\item It is an error (\literal{Window}) to pass a \typename{BACKBUFFER} in a -core request that expects a Window. - -\item A \typename{BACKBUFFER} will never be sent by core X in a reply, -event, or error where a Window is specified. -\item If core X11 backing-store and save-under applies to a -double-buffered window, it applies to both buffers equally. - -\item If the core \requestname{ClearArea} request is executed on a -double-buffered window, the same area in both the front and back -buffers is cleared. - -\end{itemize} - -The effect of passing a window to a request that accepts a -\typename{DRAWABLE} is unchanged by this extension. The window and -front buffer are synonomous with each other. This includes obeying -the \requestname{GetImage} semantics and the subwindow-mode semantics -if a core graphics context is involved. Regardless of whether the -window was explicitly passed in a \requestname{GetImage} request, or -implicitly referenced (that is, one of the window's ancestors was passed -in the request), the front (that is, visible) buffer is always referenced. -Thus, DBE-na\"{\i}ve screen dump clients will always get the front buffer. -\requestname{GetImage} on a back buffer returns undefined image -contents for any obscured regions of the back buffer that fall within -the image. - -Drawing to a back buffer always uses the clip region that would be -used to draw to the front buffer with a GC subwindow-mode of -\literal{ClipByChildren}. If an ancestor of a double-buffered window is drawn -to with a core GC having a subwindow-mode of \literal{IncludeInferiors}, the -effect on the double-buffered window's back buffer depends on the -depth of the double-buffered window and the ancestor. If the depths -are the same, the contents of the back buffer of the double-buffered -window are not changed. If the depths are different, the contents of -the back buffer of the double-buffered window are undefined for the -pixels that the \literal{IncludeInferiors} drawing touched. - -DBE adds no new events. DBE does not extend the semantics of any -existing events with the exception of adding a new \typename{DRAWABLE} -type called \typename{BACKBUFFER}. If events, replies, or errors that -contain a \typename{DRAWABLE} (for example, \literal{GraphicsExpose}) are -generated in -response to a request, the \typename{DRAWABLE} returned will be the -one specified in the request. - -DBE advertises which visuals support double-buffering. - -DBE does not include any timing or synchronization facilities. -Applications that need such facilities (for example, to maintain a constant -frame rate) should investigate the Synchronization Extension, an X -Consortium standard. - -\subsection{Window Management Operations} - -The basic philosophy of DBE is that both buffers are treated the same by -core X window management operations. - -When the core \requestname{DestroyWindow} is executed on a -double-buffered window, both buffers associated with the window are -destroyed, and all back buffer names associated with the window are -freed. - -If the core \requestname{ConfigureWindow} request changes the size of -a window, both buffers assume the new size. If the window's size -increases, the effect on the buffers depends on whether the -implementation honors bit gravity for buffers. If bit gravity is -implemented, then the contents of both buffers are moved in accordance -with the window's bit gravity (see the core -\requestname{ConfigureWindow} request), and the remaining areas are -tiled with the window background. If bit gravity is not implemented, -then the entire unobscured region of both buffers is tiled with the -window background. In either case, \literal{Expose} events are generated for -the region that is tiled with the window background. - -If the core \requestname{GetGeometry} request is executed on a -\typename{BACKBUFFER}, the returned x, y, and border-width will be -zero. - -If the Shape extension \requestname{ShapeRectangles}, -\requestname{ShapeMask}, \requestname{ShapeCombine}, or -\requestname{ShapeOffset} request is executed on a double-buffered -window, both buffers are reshaped to match the new window shape. The -region difference is the following: - -\[ D = new shape - old shape \] - -It is tiled with the window background in both buffers, -and \literal{Expose} events are generated for D. - -\subsection{Complex Swap Actions} - -DBE has no explicit knowledge of ancillary buffers (for example, depth buffers -or alpha buffers), and only has a limited set of defined swap actions. -Some applications may need a richer set of swap actions than DBE -provides. Some DBE implementations have knowledge of ancillary -buffers, and/or can provide a rich set of swap actions. Instead of -continually extending DBE to increase its set of swap actions, DBE -provides a flexible ``idiom'' mechanism. If an application's needs -are served by the defined swap actions, it should use them; otherwise, -it should use the following method of expressing a complex swap action -as an idiom. Following this policy will ensure the best possible -performance across a wide variety of implementations. - -As suggested by the term ``idiom,'' a complex swap action should be -expressed as a group/series of requests. Taken together, this group -of requests may be combined into an atomic operation by the -implementation, in order to maximize performance. The set of idioms -actually recognized for optimization is implementation dependent. To -help with idiom expression and interpretation, an idiom must be -surrounded by two protocol requests: \requestname{DBEBeginIdiom} and -\requestname{DBEEndIdiom}. Unless this begin-end pair surrounds the -idiom, it may not be recognized by a given implementation, and -performance will suffer. - -For example, if an application wants to swap buffers for two windows, -and use core X to clear only certain planes of the back buffers, the -application would issue the following protocol requests as a group, and -in the following order: - -\begin{itemize} -\item \requestname{DBEBeginIdiom} request. -\item \requestname{DBESwapBuffers} request with XIDs for two windows, each -of which uses a swap action of \literal{Untouched}. -\item Core X \requestname{PolyFillRectangle} request to the back buffer of one window. -\item Core X \requestname{PolyFillRectangle} request to the back buffer of the other window. -\item \requestname{DBEEndIdiom} request. -\end{itemize} - -The \requestname{DBEBeginIdiom} and \requestname{DBEEndIdiom} requests -do not perform any actions themselves. They are treated as markers by -implementations that can combine certain groups/series of requests as -idioms, and are ignored by other implementations or for nonrecognized -groups/series of requests. If these requests are sent out of order, -or are mismatched, no errors are sent, and the requests are executed -as usual, though performance may suffer. - -An idiom need not include a \requestname{DBESwapBuffers} request. For -example, if a swap action of \literal{Copied} is desired, but only some of the -planes should be copied, a core X \requestname{CopyArea} request may -be used instead of \requestname{DBESwapBuffers}. If -\requestname{DBESwapBuffers} is included in an idiom, it should -immediately follow the \requestname{DBEBeginIdiom} request. Also, -when the \requestname{DBESwapBuffers} is included in an idiom, that -request's swap action will still be valid, and if the swap action -might overlap with another request, then the final result of the idiom -must be as if the separate requests were executed serially. For -example, if the specified swap action is \literal{Untouched}, and if a -\requestname{PolyFillRectangle} using a client clip rectangle is done -to the window's back buffer after the \requestname{DBESwapBuffers} -request, then the contents of the new back buffer (after the idiom) -will be the same as if the idiom was not recognized by the -implementation. - -It is highly recommended that Application Programming Interface (API) -providers define, and application developers use, ``convenience'' functions -that allow client applications to call one procedure that encapsulates common idioms. -These functions will generate the \requestname{DBEBeginIdiom} request, -the idiom requests, and \requestname{DBEEndIdiom} request. Usage of -these functions will ensure best possible performance across a wide -variety of implementations. - -\section{Requests} - -The DBE defines the following requests. - -\subsection{DBEGetVersion} - -This request returns the major and minor version numbers of this -extension. - -% start marker -\begin{arequest}{DBEGetVersion} -\argdecl{client-major-version}{CARD8} -\argdecl{client-minor-version}{CARD8} -\areply -\areplyargdecl{server-major-version}{CARD8} -\areplyargdecl{server-minor-version}{CARD8} -\end{arequest} -% end marker - -The client-major-version and client-minor-version -numbers indicate what version of the protocol the client wants the -server to implement. The server-major-version and the -server-minor-version numbers returned indicate the protocol -this extension actually supports. This might not equal the version -sent by the client. An implementation can (but need not) support more -than one version simultaneously. The server-major-version -and server-minor-version allow the creation of future -revisions of the DBE protocol that may be -necessary. In general, the major version would increment for -incompatible changes, and the minor version would increment for small, -upward-compatible changes. Servers that support the protocol defined -in this document will return a server-major-version of one -(1), and a server-minor-version of zero (0). - -The DBE client must issue a \requestname{DBEGetVersion} -request before any other double buffering request in order to -negotiate a compatible protocol version; otherwise, the client will get -undefined behavior (DBE may or may not work). - -\subsection{DBEGetVisualInfo} - -This request returns information about which visuals support double -buffering. - -% start marker -\begin{arequest}{DBEGetVisualInfo} -\argdecl{screen-specifiers}{LISTofDRAWABLE} -\areply -\areplyargdecl{visinfo}{LISTofSCREENVISINFO} -\end{arequest} - -where: -\begin{tabbing} -\typename{SCREENVISINFO}: \= \typename{LISTofVISINFO}\\ -\typename{VISINFO}: \> [ \= \typeargname{visual}: \typename{VISUALID}\\ - \>\> \typeargname{depth}: \typename{CARD8}\\ - \>\> \typeargname{perflevel}: \typename{CARD8} ] -\end{tabbing} -% -Errors: \literal{Drawable} -% end marker - -All of the values passed in screen-specifiers must be valid -\typename{DRAWABLE}s (or a \literal{Drawable} error results). For each drawable -in screen-specifiers, the reply will contain a list of -VISINFO structures for visuals that support double-buffering on the -screen on which the drawable resides. The visual member -specifies the VISUALID\@. The depth member specifies the -depth in bits for the visual. The perflevel is a -performance hint. The only operation defined on a perflevel -is comparison to a perflevel of another visual on the same -screen. The visual having the higher perflevel is likely to -have better double-buffer graphics performance than the visual having -the lower perflevel. Nothing can be deduced from any of the -following: the magnitude of the difference of two -perflevels, a perflevel value in isolation, or -comparing perflevels from different servers. - -If the list of screen-specifiers is empty, information for -all screens is returned, starting with screen zero. - -\subsection{DBEAllocateBackBufferName} - -This request allocates a drawable ID used to refer to the back buffer of a -window. - -% start marker -\begin{arequest}{DBEAllocateBackBufferName} -\argdecl{window}{WINDOW} -\argdecl{back-buffer-name}{BACKBUFFER} -\argdecl{swap-action-hint}{SWAPACTION} -\end{arequest} - -Errors: \literal{Alloc, Value, IDChoice, Match, Window} -% end marker - -If the window is not already a double-buffered window, the -window becomes double-buffered, and the back-buffer-name is -associated with the window. The swap-action-hint tells the -server which swap action is most likely to be used with the window in -subsequent \requestname{DBESwapBuffers} requests. The -swap-action-hint must have one of the values specified for -type \typename{SWAPACTION} (or a \literal{Value} error results). See the -description of the \requestname{DBESwapBuffers} request for a complete -discussion of swap actions and the \typename{SWAPACTION} type. - -If the window already is a double-buffered window, nothing about the -window changes, except that an additional back-buffer-name -is associated with the window. The window remains double-buffered -until either the window is destroyed, or until all of the back buffer -names for the window are deallocated. - -The window passed into the request must be a valid \typename{WINDOW} -(or a \literal{Window} error results). -The window passed into the request must -be an \literal{InputOutput} window (or a \literal{Match} error results). -The visual of the window must be in the list returned by -\requestname{DBEGetVisualInfo} (or a \literal{Match} error results). -The back-buffer-name must be in the range assigned to the -client, and must not already be in use (or an \literal{IDChoice} -error results). -If the server cannot allocate all resources associated with turning on -double-buffering for the window, an \literal{Alloc} error results, the -window's double-buffer status (whether it is already double-buffered or not) -remains unchanged, and the back-buffer-name is freed. - -\subsection{DBEDeallocateBackBufferName} - -This request frees a drawable ID that was obtained by -\requestname{DBEAllocateBackBufferName}. - -% start marker -\begin{arequest}{DBEDeallocateBackBufferName} -\argdecl{back-buffer-name}{BACKBUFFER} -\end{arequest} - -Errors: \literal{Buffer} -% end marker - -The back-buffer-name passed in the request is freed and no -longer associated with the window. If this is the last -back-buffer-name associated with the window, then the back -buffer is no longer accessible to clients, and all double-buffering -resources associated with the window may be freed. The window's -current front buffer remains the front buffer. - -The back-buffer-name must be a valid \typename{BACKBUFFER} -associated with a window (or a \literal{Buffer} error results). - -\subsection{DBESwapBuffers} - -This request swaps the buffers for all windows listed, applying the -appropriate swap action for each window. - -% start marker -\begin{arequest}{DBESwapBuffers} -\argdecl{windows}{LISTofSWAPINFO} -\end{arequest} - -where: -\begin{tabbing} -\typename{SWAPINFO}: \= [ \= \typeargname{window}: \typename{WINDOW}\\ - \>\> \typeargname{swap-action}: \typename{SWAPACTION} ]\\ -\typename{SWAPACTION}: \{\literal{Undefined, Background, Untouched, Copied}\} -\end{tabbing} -% -Errors: \literal{Match, Window, Value} -% end marker - -Each window passed into the request must be a valid \typename{WINDOW} -(or a \literal{Window} error results). -Each window passed into the request must -be a double-buffered window (or a \literal{Match} error results). -Each window passed into the request must only be listed once -(or a \literal{Match} error results). -Each swap-action in the list must have one of the -values specified for type \typename{SWAPACTION} (or a \literal{Value} error -results). If an error results, none of the valid double-buffered -windows will have their buffers swapped. - -The swap-action determines what will happen to the new back -buffer of the window it is paired with in the list in -addition to making the old back buffer become visible. The -defined actions are as follows: - -\begin{description} -\setlength{\labelsep}{2em} -\item[\literal{Undefined}] The contents of the new back buffer become - undefined. This may be the most efficient - action since it allows the implementation to - discard the contents of the buffer if it needs - to. - -\item[\literal{Background}] The unobscured region of the new back buffer - will be tiled with the window background. The - background action allows devices to use a fast - clear capability during a swap. - -\item[\literal{Untouched}] The unobscured region of the new back buffer - will be unmodified by the swap. - -\item[\literal{Copied}] The unobscured region of the new back buffer - will be the contents of the old back buffer. -\end{description} - -If \requestname{DBESwapBuffers} is included in a ``swap and clear'' -type of idiom, it must immediately follow the \requestname{DBEBeginIdiom} -request. - -\subsection{DBEBeginIdiom} - -This request informs the server that a complex swap will immediately -follow this request. - -% start marker -\begin{arequest}{DBEBeginIdiom} -\end{arequest} -% end marker - -As previously discussed, a complex swap action is a group/series of -requests that, taken together, may be combined into an atomic -operation by the implementation. The sole function of this request is -to serve as a ``marker'' that the server can use to aid in idiom -processing. The server is free to implement this request as a no-op. - -\subsection{DBEEndIdiom} - -This request informs the server that a complex swap has concluded. - -% start marker -\begin{arequest}{DBEEndIdiom} -\end{arequest} -% end marker - -The sole function of this request is to serve as a ``marker'' that the -server can use to aid in idiom processing. The server is free to -implement this request as a no-op. - - -\subsection{DBEGetBackBufferAttributes} - -This request returns information about a back buffer. - -% start marker -\begin{arequest}{DBEGetBackBufferAttributes} -\argdecl{back-buffer-name}{BACKBUFFER} -\areply -\areplyargdecl{attributes}{BUFFER\_ATTRIBUTES} -\end{arequest} - -where: - -\typename{BUFFER\_ATTRIBUTES}: [\typeargname{window}: \typename{WINDOW} ] -% end marker - -If back-buffer-name is a valid \typename{BACKBUFFER}, the -window field of the attributes in the reply will -be the window which has the back buffer that -back-buffer-name refers to. If back-buffer-name -is not a valid \typename{BACKBUFFER}, the window field of -the attributes in the reply will be \literal{None}. - -\section{Encoding} - -Please refer to the X11 Protocol Encoding document as this section uses -syntactic conventions and data types established there. - -The name of this extension is ``DOUBLE-BUFFER''. - -\subsection{Types} - -The following new types are used by the extension. - -\typename{BACKBUFFER}: \typename{XID} -\vspace{5mm} - -\begin{etypedef}{SWAPACTION} -\eargdecl{\#x00}{Undefined}{} -\eargdecl{\#x01}{Background}{} -\eargdecl{\#x02}{Untouched}{} -\eargdecl{\#x03}{Copied}{} -\end{etypedef} - -\begin{etypedef}{SWAPINFO} -\eargdecl{4}{WINDOW}{window} -\eargdecl{1}{SWAPACTION}{swap action} -\eargdecl{3}{}{unused} -\end{etypedef} - -\begin{etypedef}{VISINFO} -\eargdecl{4}{VISUALID}{visual} -\eargdecl{1}{CARD8}{depth} -\eargdecl{1}{CARD8}{perflevel} -\eargdecl{2}{}{unused} -\end{etypedef} - -\begin{etypedef}{SCREENVISINFO} -\eargdecl{4}{CARD32}{n, number in list} -\eargdecl{8n}{LISTofVISINFO}{n VISINFOs} -\end{etypedef} - -\begin{etypedef}{BUFFER\_ATTRIBUTES} -\eargdecl{4}{WINDOW}{window} -\end{etypedef} - -\subsection{Errors} - -\begin{eerror}{Buffer} -\eargdecl{1}{0}{error} -\eargdecl{1}{error base + 0}{code} -\eargdecl{2}{CARD16}{sequence number} -\eargdecl{4}{CARD32}{bad buffer} -\eargdecl{2}{CARD16}{minor-opcode} -\eargdecl{1}{CARD8}{major-opcode} -\eargdecl{21}{}{unused} -\end{eerror} - -\subsection{Requests} - -\begin{erequest}{DBEGetVersion}{0}{2} -\eargdecl{1}{CARD8}{client-major-version} -\eargdecl{1}{CARD8}{client-minor-version} -\eargdecl{2}{}{unused} -\areply -\eargdecl{1}{1}{Reply} -\eargdecl{1}{}{unused} -\eargdecl{2}{CARD16}{sequence number} -\eargdecl{4}{0}{reply length} -\eargdecl{1}{CARD8}{server-major-version} -\eargdecl{1}{CARD8}{server-minor-version} -\eargdecl{22}{}{unused} -\end{erequest} - -\begin{erequest}{DBEAllocateBackBufferName}{1}{4} -\eargdecl{4}{WINDOW}{window} -\eargdecl{4}{BACKBUFFER}{back buffer name} -\eargdecl{1}{SWAPACTION}{swap action hint} -\eargdecl{3}{}{unused} -\end{erequest} - -\begin{erequest}{DBEDeallocateBackBufferName}{2}{2} -\eargdecl{4}{BACKBUFFER}{back buffer name} -\end{erequest} - -\begin{erequest}{DBESwapBuffers}{3}{2+2n} -\eargdecl{4}{CARD32}{n, number of window/swap action pairs in list} -\eargdecl{8n}{LISTofSWAPINFO}{window/swap action pairs} -\end{erequest} - -\begin{erequest}{DBEBeginIdiom}{4}{1} -\end{erequest} - -\begin{erequest}{DBEEndIdiom}{5}{1} -\end{erequest} - -\begin{erequest}{DBEGetVisualInfo}{6}{2+n} -\eargdecl{4}{CARD32}{n, number of screen specifiers in list} -\eargdecl{4n}{LISTofDRAWABLE}{n screen specifiers} -\areply -\eargdecl{1}{1}{Reply} -\eargdecl{1}{}{unused} -\eargdecl{2}{CARD16}{sequence number} -\eargdecl{4}{CARD32}{reply length} -\eargdecl{4}{CARD32}{m, number of SCREENVISINFOs in list} -\eargdecl{20}{}{unused} -\eargdecl{4j}{LISTofSCREENVISINFO}{m SCREENVISINFOs} -\end{erequest} - -\begin{erequest}{DBEGetBackBufferAttributes}{7}{2} -\eargdecl{4}{BACKBUFFER}{back-buffer-name} -\areply -\eargdecl{1}{1}{Reply} -\eargdecl{1}{}{unused} -\eargdecl{2}{CARD16}{sequence number} -\eargdecl{4}{0}{reply length} -\eargdecl{4}{BUFFER\_ATTRIBUTES}{attributes} -\eargdecl{20}{}{unused} -\end{erequest} - -\pagebreak[4] -\section{Acknowledgements} - -We wish to thank the following individuals who have contributed their -time and talent toward shaping the DBE specification: - -T. Alex Chen, IBM; -Peter Daifuku, Silicon Graphics, Inc.; -Ian Elliott, Hewlett-Packard Company; -Stephen Gildea, X Consortium, Inc.; -Jim Graham, Sun; -Larry Hare, AGE Logic; -Jay Hersh, X Consortium, Inc.; -Daryl Huff, Sun; -Deron Dann Johnson, Sun; -Louis Khouw, Sun; -Mark Kilgard, Silicon Graphics, Inc.; -Rob Lembree, Digital Equipment Corporation; -Alan Ricker, Metheus; -Michael Rosenblum, Digital Equipment Corporation; -Bob Scheifler, X Consortium, Inc.; -Larry Seiler, Digital Equipment Corporation; -Jeanne Sparlin Smith, IBM; -Jeff Stevenson, Hewlett-Packard Company; -Walter Strand, Metheus; -Ken Tidwell, Hewlett-Packard Company; and -David P. Wiggins, X Consortium, Inc. - -Mark provided the impetus to start the DBE project. Ian wrote the -first draft of the specification. David served as architect. - -\section{References} - -Jeffrey Friedberg, Larry Seiler, and Jeff Vroom, ``Multi-buffering Extension -Specification Version 3.3.'' - -Tim Glauert, Dave Carver, Jim Gettys, and David P. Wiggins, -``X Synchronization Extension Version 3.0.'' - -\end{document} diff --git a/doc/xorg-docs/specs/Xext/dbelib.tex b/doc/xorg-docs/specs/Xext/dbelib.tex deleted file mode 100644 index 4b9a076e9..000000000 --- a/doc/xorg-docs/specs/Xext/dbelib.tex +++ /dev/null @@ -1,621 +0,0 @@ -% $Xorg: dbelib.tex,v 1.3 2000/08/17 19:42:31 cpqbld Exp $ -% edited for DP edits and code consistency w/ core protocol/xlib 3/30/96 -% split into separate library and protocol documentos 4/15/96 -\documentstyle{article} -\pagestyle{myheadings} -\markboth{Double Buffer Extension Specification}{Double Buffer Extension Specification} -\setlength{\parindent}{0 pt} -\setlength{\parskip}{6pt} -\setlength{\topsep}{0 pt} - -% Request names are literal symbols; therefore, use the same font for both. -\newcommand{\requestname}[1]{{\tt #1}} -\newcommand{\literal}[1]{\mbox{\tt #1}} - -\newcommand{\encodingsection}[1]{{\bf #1}} -\newcommand{\requestsection}[1]{{\bf #1}} - -% Font treatment of type names differs between protocol and library sections. -\newcommand{\libtypename}[1]{\mbox{\tt #1}} -\newcommand{\typename}[1]{\mbox{\rm #1}} % default font -\newcommand{\typeargname}[1]{\mbox{\rm #1}} % default font -\newcommand{\argname}[1]{\mbox{\it #1}} -\newcommand{\argdecl}[2]{\argname{#1} & : \typename{#2}\\} -\newcommand{\areplyargdecl}[2]{#1 & : \typename{#2}\\} - -\newenvironment{arequest}[1]{\requestsection{#1} \\ \begin{tabular}{ll}}{\end{tabular}} -\newcommand{\areply}{$\Rightarrow$\\} - -\newcommand{\etabstops}{\hspace*{0cm}\=\hspace*{1cm}\=\hspace*{5cm}\=\kill} - -\newcommand{\eargdecl}[3]{\> #1 \> \typename{#2} \> #3 \\} - -\newenvironment{keeptogether}{\vbox \bgroup}{\egroup} - -\newenvironment{erequest}[3]{\pagebreak[3] \begin{keeptogether} \encodingsection{#1} \begin{tabbing} \etabstops \eargdecl{1}{CARD8}{major-opcode} \eargdecl{1}{#2}{minor-opcode} \eargdecl{2}{#3}{request length}}{\end{tabbing} \end{keeptogether}} - -\newenvironment{eerror}[1]{\begin{keeptogether} \encodingsection{#1} \begin{tabbing} \etabstops }{\end{tabbing} \end{keeptogether}} - -\newenvironment{etypedef}[1]{\begin{keeptogether} \typename{#1} \begin{tabbing} \etabstops }{\end{tabbing} \end{keeptogether}} - -\newcommand{\cfunctionname}[1]{\mbox{\tt #1}} -\newcommand{\cfunctiondecl}[1]{\mbox{\rm #1}} -\newcommand{\cargdecl}[2]{\penalty -1\typename{#1} \argname{#2}} -\newenvironment{cfunction}[2]{\begin{sloppypar}\begin{keeptogether}\vspace{5mm}\typename{#1}\\ \cfunctiondecl{#2}\ (}{)\end{keeptogether}\end{sloppypar}{\hangafter=2 \hangindent=20pt \raggedright\par}} - -% make things easier with all the long names -\spaceskip .3333em plus 5em -\tolerance=2000 - -\begin{document} - -\title{Double Buffer Extension Library\\Protocol Version 1.0\\X Consortium Standard} -\author{Ian Elliott\\Hewlett-Packard Company \and David P. Wiggins\\X Consortium, Inc.} -\maketitle -\thispagestyle{empty} - -\eject - -Copyright \copyright 1989 X Consortium, Inc. and Digital Equipment Corporation. - -Copyright \copyright 1992 X Consortium, Inc. and Intergraph Corporation. - -Copyright \copyright 1993 X Consortium, Inc. and Silicon Graphics, Inc. - -Copyright \copyright 1994, 1995 X Consortium, Inc. and Hewlett-Packard Company. - -Permission to use, copy, modify, and distribute this documentation for -any purpose and without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. -Digital Equipment Corporation, Intergraph Corporation, Silicon -Graphics, Hewlett-Packard, and the X Consortium make no -representations about the suitability for any purpose of the -information in this document. This documentation is provided ``as is'' -without express or implied warranty. - -\eject - -\section{Introduction} - -The Double Buffer Extension (DBE) provides a standard way to utilize -double-buffering within the framework of the X Window System. -Double-buffering uses two buffers, called front and back, which hold -images. The front buffer is visible to the user; the back buffer is -not. Successive frames of an animation are rendered into the back -buffer while the previously rendered frame is displayed in the front -buffer. When a new frame is ready, the back and front buffers swap -roles, making the new frame visible. Ideally, this exchange appears to -happen instantaneously to the user and with no visual artifacts. Thus, -only completely rendered images are presented to the user, and they remain -visible during the entire time it takes to render a new frame. The -result is a flicker-free animation. - -\section{Goals} - -This extension should enable clients to: -\begin{itemize} - -\item Allocate and deallocate double-buffering for a window. - -\item Draw to and read from the front and back buffers associated with -a window. - -\item Swap the front and back buffers associated with a window. - -\item Specify a wide range of actions to be taken when a window is -swapped. This includes explicit, simple swap actions (defined -below), and more complex actions (for example, clearing ancillary buffers) -that can be put together within explicit ``begin'' and ``end'' -requests (defined below). - -\item Request that the front and back buffers associated with multiple -double-buffered windows be swapped simultaneously. - -\end{itemize} - -In addition, the extension should: - -\begin{itemize} - -\item Allow multiple clients to use double-buffering on the same window. - -\item Support a range of implementation methods that can capitalize on -existing hardware features. - -\item Add no new event types. - -\item Be reasonably easy to integrate with a variety of direct graphics -hardware access (DGHA) architectures. -\end{itemize} - -\section{Concepts} - -Normal windows are created using the core \requestname{CreateWindow} -request, which allocates a set of window attributes and, for -\literal{InputOutput} windows, a front buffer, -into which an image can be drawn. -The contents of this buffer will be displayed when the window is -visible. - -This extension enables applications to use double-buffering with a -window. This involves creating a second buffer, called a back buffer, -and associating one or more back buffer names (\typename{XID}s) with -the window for use when referring to (that is, drawing to or reading -from) the window's back buffer. The back buffer name is a -\typename{DRAWABLE} of type \typename{BACKBUFFER}. - -DBE provides a relative double-buffering model. One XID, the window, -always refers to the front buffer. One or more other XIDs, the back buffer -names, always refer to the back buffer. After a buffer swap, the -window continues to refer to the (new) front buffer, and the -back buffer name continues to refer to the (new) back buffer. Thus, -applications and toolkits that want to just render to the back buffer -always use the back buffer name for all drawing requests to the -window. Portions of an application that want to render to the front -buffer always use the window XID for all drawing requests to the -window. - -Multiple clients and toolkits can all use double-buffering on the same -window. DBE does not provide a request for querying whether a window -has double-buffering support, and if so, what the back buffer name is. -Given the asynchronous nature of the X Window System, this would cause -race conditions. Instead, DBE allows multiple back buffer names to -exist for the same window; they all refer to the same physical back -buffer. The first time a back buffer name is allocated for a window, -the window becomes double-buffered and the back buffer name is -associated with the window. Subsequently, the window already is a -double-buffered window, and nothing about the window changes when a -new back buffer name is allocated, except that the new back buffer -name is associated with the window. The window remains -double-buffered until either the window is destroyed or until all of -the back buffer names for the window are deallocated. - -In general, both the front and back buffers are treated the same. In -particular, here are some important characteristics: - -\begin{itemize} - -\item Only one buffer per window can be visible at a time (the -front buffer). - -\item Both buffers associated with a window have the same visual type, -depth, width, height, and shape as the window. - -\item Both buffers associated with a window are ``visible'' (or -``obscured'') in the same way. When an \literal{Expose} event is -generated for -a window, both buffers should be considered to be damaged in the -exposed area. Damage that occurs to either buffer will result in an -\literal{Expose} event on the window. When a double-buffered window is -exposed, -both buffers are tiled with the window background, exactly as stated -by the core protocol. Even though the back buffer is not visible, -terms such as obscure apply to the back buffer as well as to the front -buffer. - -\item It is acceptable at any time to pass a \typename{BACKBUFFER} in -any request, notably any core or extension drawing request, that -expects a \typename{DRAWABLE}. This enables an application to draw -directly into \typename{BACKBUFFER}s in the same fashion as it would -draw into any other \typename{DRAWABLE}. - -\item It is an error (\literal{Window}) to pass a \typename{BACKBUFFER} in a -core request that expects a Window. - -\item A \typename{BACKBUFFER} will never be sent by core X in a reply, -event, or error where a Window is specified. -\item If core X11 backing-store and save-under applies to a -double-buffered window, it applies to both buffers equally. - -\item If the core \requestname{ClearArea} request is executed on a -double-buffered window, the same area in both the front and back -buffers is cleared. - -\end{itemize} - -The effect of passing a window to a request that accepts a -\typename{DRAWABLE} is unchanged by this extension. The window and -front buffer are synonomous with each other. This includes obeying -the \requestname{GetImage} semantics and the subwindow-mode semantics -if a core graphics context is involved. Regardless of whether the -window was explicitly passed in a \requestname{GetImage} request, or -implicitly referenced (that is, one of the window's ancestors was passed -in the request), the front (that is, visible) buffer is always referenced. -Thus, DBE-na\"{\i}ve screen dump clients will always get the front buffer. -\requestname{GetImage} on a back buffer returns undefined image -contents for any obscured regions of the back buffer that fall within -the image. - -Drawing to a back buffer always uses the clip region that would be -used to draw to the front buffer with a GC subwindow-mode of -\literal{ClipByChildren}. If an ancestor of a double-buffered window is drawn -to with a core GC having a subwindow-mode of \literal{IncludeInferiors}, the -effect on the double-buffered window's back buffer depends on the -depth of the double-buffered window and the ancestor. If the depths -are the same, the contents of the back buffer of the double-buffered -window are not changed. If the depths are different, the contents of -the back buffer of the double-buffered window are undefined for the -pixels that the \literal{IncludeInferiors} drawing touched. - -DBE adds no new events. DBE does not extend the semantics of any -existing events with the exception of adding a new \typename{DRAWABLE} -type called \typename{BACKBUFFER}. If events, replies, or errors that -contain a \typename{DRAWABLE} (for example, \literal{GraphicsExpose}) are -generated in -response to a request, the \typename{DRAWABLE} returned will be the -one specified in the request. - -DBE advertises which visuals support double-buffering. - -DBE does not include any timing or synchronization facilities. -Applications that need such facilities (for example, to maintain a constant -frame rate) should investigate the Synchronization Extension, an X -Consortium standard. - -\subsection{Window Management Operations} - -The basic philosophy of DBE is that both buffers are treated the same by -core X window management operations. - -When the core \requestname{DestroyWindow} is executed on a -double-buffered window, both buffers associated with the window are -destroyed, and all back buffer names associated with the window are -freed. - -If the core \requestname{ConfigureWindow} request changes the size of -a window, both buffers assume the new size. If the window's size -increases, the effect on the buffers depends on whether the -implementation honors bit gravity for buffers. If bit gravity is -implemented, then the contents of both buffers are moved in accordance -with the window's bit gravity (see the core -\requestname{ConfigureWindow} request), and the remaining areas are -tiled with the window background. If bit gravity is not implemented, -then the entire unobscured region of both buffers is tiled with the -window background. In either case, \literal{Expose} events are generated for -the region that is tiled with the window background. - -If the core \requestname{GetGeometry} request is executed on a -\typename{BACKBUFFER}, the returned x, y, and border-width will be -zero. - -If the Shape extension \requestname{ShapeRectangles}, -\requestname{ShapeMask}, \requestname{ShapeCombine}, or -\requestname{ShapeOffset} request is executed on a double-buffered -window, both buffers are reshaped to match the new window shape. The -region difference is the following: - -\[ D = new shape - old shape \] - -It is tiled with the window background in both buffers, -and \literal{Expose} events are generated for D. - -\subsection{Complex Swap Actions} - -DBE has no explicit knowledge of ancillary buffers (for example, depth buffers -or alpha buffers), and only has a limited set of defined swap actions. -Some applications may need a richer set of swap actions than DBE -provides. Some DBE implementations have knowledge of ancillary -buffers, and/or can provide a rich set of swap actions. Instead of -continually extending DBE to increase its set of swap actions, DBE -provides a flexible ``idiom'' mechanism. If an application's needs -are served by the defined swap actions, it should use them; otherwise, -it should use the following method of expressing a complex swap action -as an idiom. Following this policy will ensure the best possible -performance across a wide variety of implementations. - -As suggested by the term ``idiom,'' a complex swap action should be -expressed as a group/series of requests. Taken together, this group -of requests may be combined into an atomic operation by the -implementation, in order to maximize performance. The set of idioms -actually recognized for optimization is implementation dependent. To -help with idiom expression and interpretation, an idiom must be -surrounded by two protocol requests: \requestname{DBEBeginIdiom} and -\requestname{DBEEndIdiom}. Unless this begin-end pair surrounds the -idiom, it may not be recognized by a given implementation, and -performance will suffer. - -For example, if an application wants to swap buffers for two windows, -and use core X to clear only certain planes of the back buffers, the -application would issue the following protocol requests as a group, and -in the following order: - -\begin{itemize} -\item \requestname{DBEBeginIdiom} request. -\item \requestname{DBESwapBuffers} request with XIDs for two windows, each -of which uses a swap action of \literal{Untouched}. -\item Core X \requestname{PolyFillRectangle} request to the back buffer of one window. -\item Core X \requestname{PolyFillRectangle} request to the back buffer of the other window. -\item \requestname{DBEEndIdiom} request. -\end{itemize} - -The \requestname{DBEBeginIdiom} and \requestname{DBEEndIdiom} requests -do not perform any actions themselves. They are treated as markers by -implementations that can combine certain groups/series of requests as -idioms, and are ignored by other implementations or for nonrecognized -groups/series of requests. If these requests are sent out of order, -or are mismatched, no errors are sent, and the requests are executed -as usual, though performance may suffer. - -An idiom need not include a \requestname{DBESwapBuffers} request. For -example, if a swap action of \literal{Copied} is desired, but only some of the -planes should be copied, a core X \requestname{CopyArea} request may -be used instead of \requestname{DBESwapBuffers}. If -\requestname{DBESwapBuffers} is included in an idiom, it should -immediately follow the \requestname{DBEBeginIdiom} request. Also, -when the \requestname{DBESwapBuffers} is included in an idiom, that -request's swap action will still be valid, and if the swap action -might overlap with another request, then the final result of the idiom -must be as if the separate requests were executed serially. For -example, if the specified swap action is \literal{Untouched}, and if a -\requestname{PolyFillRectangle} using a client clip rectangle is done -to the window's back buffer after the \requestname{DBESwapBuffers} -request, then the contents of the new back buffer (after the idiom) -will be the same as if the idiom was not recognized by the -implementation. - -It is highly recommended that Application Programming Interface (API) -providers define, and application developers use, ``convenience'' functions -that allow client applications to call one procedure that encapsulates common idioms. -These functions will generate the \requestname{DBEBeginIdiom} request, -the idiom requests, and \requestname{DBEEndIdiom} request. Usage of -these functions will ensure best possible performance across a wide -variety of implementations. - -\section{C Language Binding} - -The header for this extension is \verb||. All -identifier names provided by this header begin with Xdbe. - -\subsection{Types} - -The type \libtypename{XdbeBackBuffer} is a \libtypename{Drawable}. - -The type \libtypename{XdbeSwapAction} can be one of the constants -\literal{XdbeUndefined}, \literal{XdbeBackground}, -\literal{XdbeUntouched}, or \literal{XdbeCopied}. - -\subsection{C Functions} - -The C functions provide direct access to the protocol and add no -additional semantics. For complete details on the effects of these -functions, refer to the appropriate protocol request, which can be -derived by replacing Xdbe at the start of the function name with DBE\@. -All functions that have return type \libtypename{Status} will return -nonzero for success and zero for failure. - -% start marker -\begin{keeptogether} -\begin{cfunction}{Status}{XdbeQueryExtension} -\cargdecl{Display *}{dpy}, -\cargdecl{int *}{major\_version\_return}, -\cargdecl{int *}{minor\_version\_return} -\end{cfunction} -% end marker - -\cfunctionname{XdbeQueryExtension} sets major\_version\_return and -minor\_version\_return to the major and minor DBE protocol -version supported by the server. If the DBE library is compatible -with the version returned by the server, it returns -nonzero. If dpy does not support the DBE extension, or if -there was an error during communication with the server, or if the -server and library protocol versions are incompatible, it -returns zero. No other Xdbe functions may be called before this -function. If a client violates this rule, the effects of all -subsequent Xdbe calls that it makes are undefined. -\end{keeptogether} - -% start marker -\begin{keeptogether} -\begin{cfunction}{XdbeScreenVisualInfo *}{XdbeGetVisualInfo} -\cargdecl{Display *}{dpy}, -\cargdecl{Drawable *}{screen\_specifiers}, -\cargdecl{int *}{num\_screens} -\end{cfunction} -% end marker - -\cfunctionname{XdbeGetVisualInfo} returns information about which visuals support -double buffering. The argument num\_screens specifies how many -elements there are in the screen\_specifiers list. Each -drawable in screen\_specifiers designates a screen for which -the supported visuals are being requested. If num\_screens -is zero, information for all screens is requested. In this case, upon -return from this function, num\_screens will be set to the -number of screens that were found. If an error occurs, this function -returns NULL; otherwise, it returns a pointer to a list of -\libtypename{XdbeScreenVisualInfo} structures of length num\_screens. -The {\it n}th element in the returned list corresponds to the {\it n}th -drawable in the screen\_specifiers list, unless -num\_screens was passed in with the value zero, in which -case the {\it n}th element in the returned list corresponds to the -{\it n}th screen of the server, starting with screen zero. - -The \libtypename{XdbeScreenVisualInfo} structure has the following -fields: - -\begin{tabular}{lll} -\typename{int} & \argname{count} & number of items in visinfo \\ -\typename{XdbeVisualInfo *} & \argname{visinfo} & list of visuals and depths for this screen \\ -\end{tabular} - -The \libtypename{XdbeVisualInfo} structure has the following fields: - -\begin{tabular}{lll} -\typename{VisualID} & \argname{visual} & one visual ID that supports double-buffering\\ -\typename{int} & \argname{depth} & depth of visual in bits \\ -\typename{int} & \argname{perflevel} & performance level of visual \\ -\end{tabular} -\end{keeptogether} - -% start marker -\begin{keeptogether} -\begin{cfunction}{void }{XdbeFreeVisualInfo} -\cargdecl{XdbeScreenVisualInfo *}{visual\_info} -\end{cfunction} -% end marker - -\cfunctionname{XdbeFreeVisualInfo} frees the list of \libtypename{XdbeScreenVisualInfo} -returned by \cfunctionname{XdbeGetVisualInfo}. -\end{keeptogether} - -% start marker -\begin{keeptogether} -\begin{cfunction}{XdbeBackBuffer}{XdbeAllocateBackBufferName} -\cargdecl{Display *}{dpy}, -\cargdecl{Window}{window}, -\cargdecl{XdbeSwapAction}{swap\_action} -\end{cfunction} -% end marker - -\cfunctionname{XdbeAllocateBackBufferName} returns a drawable ID used to refer -to the back buffer of the specified window. -The swap\_action is a hint to indicate the swap action -that will likely be used in subsequent calls to -\cfunctionname{XdbeSwapBuffers}. -The actual swap action used in calls to -\cfunctionname{XdbeSwapBuffers} does not have -to be the same as the swap\_action passed to this function, -though clients are encouraged to provide accurate information whenever -possible. -\end{keeptogether} - -% start marker -\begin{keeptogether} -\begin{cfunction}{Status}{XdbeDeallocateBackBufferName} -\cargdecl{Display *}{dpy}, -\cargdecl{XdbeBackBuffer}{buffer} -\end{cfunction} -% end marker - -\cfunctionname{XdbeDeallocateBackBufferName} frees the specified -drawable ID, buffer, -that was obtained via \cfunctionname{XdbeAllocateBackBufferName}. The buffer -must be a valid name for the back buffer of a window, or an -\literal{XdbeBadBuffer} -error results. -\end{keeptogether} - -% start marker -\begin{keeptogether} -\begin{cfunction}{Status}{XdbeSwapBuffers} -\cargdecl{Display *}{dpy}, -\cargdecl{XdbeSwapInfo *}{swap\_info}, -\cargdecl{int}{num\_windows} -\end{cfunction} -% end marker - -\cfunctionname{XdbeSwapBuffers} swaps the front and back buffers for a list of windows. -The argument num\_windows specifies how many windows are to -have their buffers swapped; it is the number of elements in the -swap\_info array. The argument swap\_info -specifies the information needed per window to do the swap. - -The \libtypename{XdbeSwapInfo} structure has the following fields: - -\begin{tabular}{lll} -\typename{Window} & \argname{swap\_window} & window for which to swap buffers \\ -\typename{XdbeSwapAction} & \argname{swap\_action} & swap action to use for this swap\_window \\ -\end{tabular} -\end{keeptogether} - -% start marker -\begin{keeptogether} -\begin{cfunction}{Status}{XdbeBeginIdiom} -\cargdecl{Display *}{dpy} -\end{cfunction} -% end marker - -\cfunctionname{XdbeBeginIdiom} marks the beginning of an idiom sequence. -See section 3.2 -for a complete discussion of idioms. -\end{keeptogether} - -% start marker -\begin{keeptogether} -\begin{cfunction}{Status}{XdbeEndIdiom} -\cargdecl{Display *}{dpy} -\end{cfunction} -% end marker - -\cfunctionname{XdbeEndIdiom} marks the end of an idiom sequence. -\end{keeptogether} - -% start marker -\begin{keeptogether} -\begin{cfunction}{XdbeBackBufferAttributes *}{XdbeGetBackBufferAttributes} -\cargdecl{Display *}{dpy}, -\cargdecl{XdbeBackBuffer}{buffer} -\end{cfunction} -% end marker - -\cfunctionname{XdbeGetBackBufferAttributes} returns the attributes associated -with the specified buffer. - -The \libtypename{XdbeBackBufferAttributes} structure has the following fields: - -\begin{tabular}{lll} -\typename{Window} & \argname{window} & window that buffer belongs to \\ -\end{tabular} - -If buffer is not a valid \libtypename{XdbeBackBuffer}, -window is set to \literal{None}. - -The returned \libtypename{XdbeBackBufferAttributes} structure can be -freed with the Xlib function \cfunctionname{XFree}. -\end{keeptogether} - -\begin{keeptogether} -\subsection{Errors} - -The \libtypename{XdbeBufferError} structure has the following fields: - -\begin{tabular}{lll} -\typename{int} & \argname{type} \\ -\typename{Display *} & \argname{display}& Display the event was read from\\ -\typename{XdbeBackBuffer} & \argname{buffer}& resource id \\ -\typename{unsigned long} & \argname{serial}& serial number of failed request\\ -\typename{unsigned char} & \argname{error\_code}& error base + \literal{XdbeBadBuffer}\\ -\typename{unsigned char} & \argname{request\_code}& Major op-code of failed request\\ -\typename{unsigned char} & \argname{minor\_code}& Minor op-code of failed request\\ -\end{tabular} -\end{keeptogether} - -\pagebreak[4] -\section{Acknowledgements} - -We wish to thank the following individuals who have contributed their -time and talent toward shaping the DBE specification: - -T. Alex Chen, IBM; -Peter Daifuku, Silicon Graphics, Inc.; -Ian Elliott, Hewlett-Packard Company; -Stephen Gildea, X Consortium, Inc.; -Jim Graham, Sun; -Larry Hare, AGE Logic; -Jay Hersh, X Consortium, Inc.; -Daryl Huff, Sun; -Deron Dann Johnson, Sun; -Louis Khouw, Sun; -Mark Kilgard, Silicon Graphics, Inc.; -Rob Lembree, Digital Equipment Corporation; -Alan Ricker, Metheus; -Michael Rosenblum, Digital Equipment Corporation; -Bob Scheifler, X Consortium, Inc.; -Larry Seiler, Digital Equipment Corporation; -Jeanne Sparlin Smith, IBM; -Jeff Stevenson, Hewlett-Packard Company; -Walter Strand, Metheus; -Ken Tidwell, Hewlett-Packard Company; and -David P. Wiggins, X Consortium, Inc. - -Mark provided the impetus to start the DBE project. Ian wrote the -first draft of the specification. David served as architect. - -\section{References} - -Jeffrey Friedberg, Larry Seiler, and Jeff Vroom, ``Multi-buffering Extension -Specification Version 3.3.'' - -Tim Glauert, Dave Carver, Jim Gettys, and David P. Wiggins, -``X Synchronization Extension Version 3.0.'' - -\end{document} diff --git a/doc/xorg-docs/specs/Xext/evi.ms b/doc/xorg-docs/specs/Xext/evi.ms deleted file mode 100644 index 5eedeb97a..000000000 --- a/doc/xorg-docs/specs/Xext/evi.ms +++ /dev/null @@ -1,344 +0,0 @@ -.\" Use -ms and macros.t -.\" $Xorg: evi.ms,v 1.3 2000/08/17 19:42:31 cpqbld Exp $ -.\" $XdotOrg: xc/doc/specs/Xext/evi.ms,v 1.2 2004/04/23 18:42:18 eich Exp $ -.\" -.\" -.\" -.\" -.\" $XFree86: xc/doc/specs/Xext/evi.ms,v 1.3 2000/03/03 23:16:24 dawes Exp $ -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.ps 10 -.nr PS 10 -\& -.sp 8 -.ce 3 - - -\s+2\fBExtended Visual Information Extension\fP\s-2 -.sp 3 -.ce 3 -Version 1.0 -X Project Team Standard -X Version 11, Release 6.8 -.sp 6 -.ce 4 -Peter Daifuku -.sp 6p -Silicon Graphics, Inc. -.ps 9 -.nr PS 9 -.sp 8 -.LP -Copyright \(co 1986-1997 The Open Group All Rights Reserved -.LP -Permission is hereby granted, free of charge, to any person obtaining a copy of this -software and associated documentation files (the Software), to use the Software -without restriction, including, without limitation, the rights to copy, modify, merge, -publish, distribute and sublicense the Software, to make, have made, license and -distribute derivative works thereof, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -.LP -The above copyright notice and the following permission notice shall be included in all -copies of the Software: -.LP -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON- -INFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER USEABILITIY, WHETHER IN AN ACTION OF -CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF, OR IN -CONNNECTION WITH THE SOFTWARE OR THE USE OF OTHER DEALINGS IN -THE SOFTWARE. -.LP -Except as contained in this notice, the name of The Open Group shall not be used in -advertising or otherwise to promote the use or other dealings in this Software without -prior written authorization from The Open Group. -.LP -X Window System is a trademark of The Open Group. -.ps 10 -.nr PS 10 -.bp 1 -.EH ''X11 Extended Visual Information extension'' -.OH ''X11 Extended Visual Information extension'' -.EF ''\fB % \fP'' -.OF ''\fB % \fP'' -.NH 1 -Introduction -.LP -EVI (Extended Visual Information extension) allows a client to determine -information about core X visuals beyond what the core protocol provides. -.NH 1 -Goals -.LP -As the X Window System has evolved, it has become clear that the information -returned by the core X protocol regarding Visuals is often insufficient for a -client to determine which is the most appropriate visual for its needs. This -extension allows clients to query the X server for additional visual -information, specifically as regards colormaps and framebuffer levels. -.LP -This extension is meant to address the needs of pure X clients only. It is -specifically and purposefully not designed to address the needs of X -extensions. Extensions that have an impact on visual information should provide -their own mechanisms for delivering that information. For example, the Double -Buffering Extension (DBE) provides its own mechanism for determining which -visuals support double-buffering. -.NH 1 -Requests -.LP -.sM -.PN GetVersion -.IP -\fIclient_major_version\fP\^: CARD8 -.br -\fIclient_minor_version\fP\^: CARD8 -.LP - => -.IP -\fIserver_major_version\fP\^: CARD8 -.br -\fIserver_minor_version\fP\^: CARD8 -.LP -.eM -If supplied, the client_major_version and client_minor_version indicate -what version of the protocol the client wants the server to implement. -The server version numbers returned indicate the protocol this extension -actually supports. This might not equal the version sent by the client. -An implementation can (but need not) support more than one version -simultaneously. The server_major_version and the server_minor_version -are a mechanism to support future revisions of the EVI protocol that -may be necessary. In general, the major version would increment for -incompatible changes, and the minor version would increment for small -upward-compatible changes. Servers that support the protocol defined in -this document will return a server_major_version of one (1), and a -server_minor_version of zero (0). -.LP -.sM -.PN GetVisualInfo -.IP -\fIvisual_list\fP\^: LISTofVISUALID -.LP - => -.IP -\fIper_visual_info\fP\^: LISTofVISUALINFO -.LP -where: -.TS -l l. -VISUALINFO: [core_visual_id: VISUALID -.br - \ screen: CARD8 -.br - \ level: INT8 -.br - \ transparency_type: CARD8 -.br - \ unused: CARD8 -.br - \ transparency_value: CARD32 -.br - \ min_hw_colormaps: CARD8 -.br - \ max_hw_colormaps: CARD8 -.br - \ num_colormap_conflicts: CARD16 -.br - \ colormap_conflicts: LISTofVISUALID] -.TE -.eM -.LP -.IP - - level is 0 for normal planes, > 0 for overlays, < 0 for underlays. -.br - - transparency_type is 0 for none, 1 for transparent pixel, 2 for - transparent mask. -.br - - transparency_value: value to get transparent pixel if transparency - supported. -.br - - min_hw_colormaps: minimum number of hardware colormaps backing up the -visual. -.br - - max_hw_colormaps: maximum number of hardware colormaps backing up the -visual. -.br - (architectures with static colormap allocation/reallocation would have min -= max) -.br - - num_colormap_conflicts: number of elements in colormap_conflicts. -.br - - colormap_conflicts: list of visuals that may conflict with this one. For - example, if a 12-bit colormap is overloaded to support 8-bit visuals, the - 8-bit visuals would conflict with the 12-bit visuals. -.LP -.NH 1 -Events and Errors -.LP -No new events or errors are defined by this extension. -.LP -.NH 1 -Changes to existing protocol. -.LP -None. -.LP -.NH 1 -Encoding -.LP -The name of this extension is "Extended-Visual-Information". -.LP -The conventions used here are the same as those for the core X11 -Protocol Encoding. -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN GetVersion -.sp 6p - 1 CARD8 opcode - 1 0 EVI opcode - 2 2 request length - 2 CARD16 client_major_version - 2 CARD16 client_minor_version -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - => - 1 1 reply - 1 unused - 2 CARD16 sequence number - 4 0 length - 2 CARD16 server_major_version - 2 CARD16 server_minor_version - 20 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN GetVisualInfo -.sp 6p - 1 CARD8 opcode - 1 1 EVI opcode - 2 2+n request length - 4 CARD32 n_visual - 4n CARD32 visual_ids -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - => - 1 1 reply - 1 unused - 2 CARD16 sequence number - 4 n length - 4 CARD32 n_info - 4 CARD32 n_conflicts - 16 unused - 16n LISTofVISUALINFO items -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - VISUALINFO - 4 VisualID core_visual_id - 1 INT8 screen - 1 INT8 level - 1 CARD8 transparency_type - 1 CARD8 unused - 4 CARD32 transparency_value - 1 CARD8 min_hw_colormaps - 1 CARD8 max_hw_colormaps - 2 CARD16 num_colormap_conflicts -.De -.LP -.NH 1 -C Language Binding -.LP -The C functions provide direct access to the protocol and add no additional -semantics. For complete details on the effects of these functions, refer -to the appropriate protocol request, which can be derived by deleting Xevi -at the start of the function. All functions that have return type Status -will return nonzero for success and zero for failure. -.LP -The include file for this extension is: -.Pn < X11/extensions/XEVI.h >. -.LP -.sM -.FD 0 -.PN Bool XeviQueryVersion( -.br - Display *\fIdisplay\fP\^, -.br - int *\fImajor_version_return\fP\^, -.br - int *\fIminor_version_return\fP\^) -.FN -.LP -.eM -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fImajor_version_return\fP 1i -Returns the major version supported by the server. -.IP \fIminor_version_return\fP 1i -Returns the minor version supported by the server. -.LP -XeviQueryVersion sets major_version_return and minor_version_return to -the major and minor EVI protocol version supported by the server. If -the EVI library is compatible with the version returned by the server, -it returns nonzero. If dpy does not support the EVI extension, or if -there was an error during communication with the server, or if the server -and library protocol versions are incompatible, it returns zero. No other -Xevi functions may be called before this function. If a client violates -this rule, the effects of all subsequent Xevi calls that it makes are -undefined. -.LP -To get the extended information for any subset of visuals use -XeviGetVisualInfo. -.LP -.sM -.FD 0 -.PN int XeviGetVisualInfo( -.br - Display *\fIdisplay\fP\^, -.br - VisualID *\fIvisual\fP\^, -.br - int \fIn_visual\fP\^, -.br - ExtendedVisualInfo **\fIevi_return\fP\^, -.br - int *\fIn_info_return\fP\^) -.FN -.LP -.eM -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIvisual\fP 1i -If NULL, then information for all visuals of all -screens is returned. Otherwise, a pointer to a list of visuals for which -extended visual information is desired. -.IP \fIn_visual\fP 1i -If 0, then information for all visuals of all screens is returned. Otherwise, -the number of elements in the array \fIvisual\fP. -.IP \fIevi_return\fP 1i -Returns a pointer to a list of \fIExtendedVisualInfo\fP. When done, the client -should free the list using \fIXFree\fP. -.IP \fIn_info_return\fP 1i -Returns the number of elements in the list of \fIExtendedVisualInfo\fP. -.LP -XeviGetVisualInfo returns a list of ExtendedVisualInfo structures that describe -visual information beyond that supported by the core protocol. This includes -layer information relevant for systems supporting overlays and/or underlay -planes, and information that allows applications better to determine the level -of hardware support for multiple colormaps. XeviGetVisualInfo returns Success if -successful, or an X error otherwise. - diff --git a/doc/xorg-docs/specs/Xext/lbx.book b/doc/xorg-docs/specs/Xext/lbx.book deleted file mode 100644 index 90e6f9506932a9dabfd918aee220d3b3242a420d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22528 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 diff --git a/doc/xorg-docs/specs/Xext/lbx.mif b/doc/xorg-docs/specs/Xext/lbx.mif deleted file mode 100644 index 5184d9232..000000000 --- a/doc/xorg-docs/specs/Xext/lbx.mif +++ /dev/null @@ -1,56495 +0,0 @@ - # Generated by FrameMaker xm4.0.3P1a -# Options: -# Paragraph Text -# Paragraph Tags -# Paragraph Formats -# Font Information -# Markers -# Anchored Frames -# Tables -# Graphics and TextRect Layout -# Master Page Items -# Condition Catalog -# Table Catalogs -# Font Catalog -# Paragraph Catalog -# Document Template -# Document Dictionary -# Variables -# Element Definitions -# Elements -# - - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color -> # end of ColorCatalog - - - - - - > # end of Condition - - - - - - > # end of Condition - - - - > # end of Condition - - - - - - > # end of Condition - - - - - - > # end of Condition - - - - > # end of Condition -> # end of ConditionCatalog - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - \\t'> - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .. \\t'> - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - ... \\t'> - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - )'> - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - . '> - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - . '> - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf -> # end of PgfCatalog - # end of ElementDefCatalog - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - - - - - > # end of Font -> # end of FontCatalog - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling -> # end of RulingCatalog - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat -> # end of TblCatalog - - - > # end of View - - - - - - - - > # end of View - - - - > # end of View - - - > # end of View - - - > # end of View - - - > # end of View -> # end of Views - - '> - > # end of VariableFormat - - <$daynum\>, <$year\>'> - > # end of VariableFormat - - /<$daynum\>/<$shortyear\>'> - > # end of VariableFormat - - <$daynum\>, <$year\> <$hour\>:<$minute00\> <$ampm\>'> - > # end of VariableFormat - - <$daynum\>, <$year\>'> - > # end of VariableFormat - - , <$monthname\> <$daynum01\>, <$year\>'> - > # end of VariableFormat - - /<$daynum\>/<$shortyear\>'> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - - > # end of VariableFormat - - of <$tblsheetcount\>)'> - > # end of VariableFormat -> # end of VariableFormats - - \xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - '> - > # end of XRefFormat - - \xd3 on page\x11 <$pagenum\>.'> - > # end of XRefFormat - - , \xd2 <$paratext\>,\xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - , \xd2 <$paratext\>,\xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - on page\x11 <$pagenum\>'> - > # end of XRefFormat - - on page\x11 <$pagenum\>'> - > # end of XRefFormat - - , \xd2 <$paratext\>,\xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - '> - > # end of XRefFormat - - '> - > # end of XRefFormat -> # end of XRefFormats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -> # end of Document -lbxTOC.doc'> - - - - - - - - - -> # end of BookComponent - # end of InitialAutoNums - - - - - - -\>'> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -> # end of Dictionary - # end of AFrames - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - > # end of TblFormat - - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblH - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody -> # end of Tbl -> # end of Tbls - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect - - - - - - - > # end of TextRect - - - - - - - - - - > # end of PolyLine - - - - - - - - - > # end of TextRect - - - - - - - > # end of TextRect - - - - - - - > # end of TextRect - - - - - - - - > # end of PolyLine - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect - - - - - - - - - - - - > # end of PolyLine - - - - - - - - - - - > # end of TextRect - - - - - - - - - - > # end of PolyLine - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - > # end of TextLine - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - - - - - - - > # end of TextRect - - - - - - - > # end of TextRect - - - - - - - - - - - - > # end of PolyLine -> # end of Page - - - - - - - - - - - > # end of DashedPattern - - - - - - > # end of Font - - > # end of TextLine - - - - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - > # end of TextLine - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - > # end of Frame -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect - - - - - - - > # end of TextLine -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect - - - - - - - > # end of TextLine -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect - - - - - - - > # end of TextLine -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect - - - - - - - > # end of TextLine -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - > # end of Variable - - - - > # end of Variable - - - - > # end of Variable - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - > # end of TabStop - > # end of Pgf - - - - - > # end of Font - - - > # end of Font - - - - - - > # end of Variable - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - > # end of TabStop - > # end of Pgf - - - - > # end of Variable - - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - > # end of Variable - - - - > # end of Font - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - > # end of TabStop - > # end of Pgf - - - - > # end of Variable - - - - > # end of Variable - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - > # end of Variable - - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - > # end of Pgf - - '> - - '> - - '> - > - > # end of Para - - - - - - - - - - > # end of TabStop - - - - > # end of TabStop - > # end of Pgf - '> - - '> - - '> - > - > # end of Para - - - - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of Pgf - '> - - '> - - '> - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - - - - > # end of Pgf - - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - - - > - > # end of Para - - - > # end of Pgf - <$numerics\><$alphabetics\>'> - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - '> - > - > # end of Para - - - > # end of Pgf - - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of Pgf - - '> - - '> - - '> - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - > # end of Pgf - - '> - - '> - - '> - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Conditional - - > - > # end of Para - - - - > # end of Pgf - - - - - - > - > # end of Para - - - - - - > - - - > - - > - - > - > # end of Para - - - - - - > - - > - > # end of Para - - - - - - > - - - > - - > - - > - - - > - - > - > # end of Para - - - - - - - > - - > - - > - > # end of Para - - - - > # end of Pgf - - - - > - > # end of Para - - - - > - - - > - - > - - > - - > - > # end of Para - - - - > - - > - - > - - - > - - > - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - - > - - > - - > - - > - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - - > - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - > # end of Pgf - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - .\\t'> - > # end of Pgf - - - > - > # end of Para - - - .\\t'> - > # end of Pgf - - - > - > # end of Para - - - .\\t'> - > # end of Pgf - - - > - > # end of Para - - - .\\t'> - > # end of Pgf - - - - > - > # end of Para - - - .\\t'> - > # end of Pgf - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - - > - - > - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - - > - - > - - - - - - > # end of Marker - - > - > # end of Para - - - - - > - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - - > - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > - - - > # end of Font - - > - - > - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - > - > # end of Para - - - - > - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - > - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - > - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > - - - > # end of Font - - > - > # end of Para - - - - > - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > - - - > - - > - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > # end of Font - - > - - > - - > - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > - - - > # end of Font - - > - - > - - > - > # end of Para - - - - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - > - - > - - > - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > - - > - - > - - > - > # end of Para - - - - > - - > - - > - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - - - > - - > - > # end of Para - - - - > - - - - - - > # end of Marker - > - > # end of Para - - - - - - - - - > # end of Marker - - > - > # end of Para - - - - > - - - - - - > # end of XRef - - - - - - > - - - > - - > - > # end of Para - - - - > - - > - - > - - > - - > - > # end of Para - - - - > # end of Pgf - - \> 8 | ((compflag) ? 0x80 : 0);'> - > - > # end of Para - - - - > # end of Pgf - - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Marker - - - - - > # end of Marker - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - - > - - - - - - > # end of XRef - - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - - > - - - - - > # end of Font - - - > # end of Font - - - > - - - - - > # end of Font - - - > # end of Font - - - > - - - - - > # end of Font - - - > - - - - - > # end of Font - - - > - - - > # end of Font - - - - - > # end of Font - - - > - - - > # end of Font - - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - - > - - - - - > # end of Font - - - > # end of Font - - - - - > - - - - - > # end of Font - - - > # end of Font - - - - - > - - - - - > # end of Font - - - > # end of Font - - - - - > - - - - - > # end of Font - - - > # end of Font - - - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - - > # end of Font - - - > # end of Font - - > - - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - > # end of Font - - > - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - - > - - - - - > # end of Font - - - > # end of Font - - - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - \> 8; out[1] = in'> - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - \> 8)'> - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - > # end of Font - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - \> 8) & 0x0F)'> - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - \> 8) & 0x0F)'> - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - > # end of TabStop - - - - > # end of TabStop - > # end of Pgf - - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - \> 8) & 0x0F)'> - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - \>8)'> - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > - - - > # end of Font - - > - > # end of Para - - - - > - - > - - - > - - > - - > - - > - > # end of Para - - - - > - - > - - - > - - - > - - > - - > - - > - - > - - > - - > - > # end of Para - - - - - - - > # end of Marker - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - > # end of XRef - - - - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - > # end of XRef - - - - - - - - > - > # end of Para - - - - > # end of Para - - - - - - - - > # end of Marker - - - > - > # end of Para - - - - > # end of Para - - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - > - > # end of Para - - - - - - \> 8; out[2] = in& 0xFF;'> - > - > # end of Para - - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - > - - - - - - > # end of XRef - - - - - - - - > # end of Font - - - > # end of Font - - > - - - - > # end of Font - - - > # end of Font - - > - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - > - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - > - - - - - - > # end of XRef - - - - - - - > - - - - - - > # end of XRef - - - - - - > - - - - > # end of Font - - - > # end of Font - - > - - - - > # end of Font - - - > # end of Font - - > - - > - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - - > - - > - - - - > # end of Font - - - > # end of Font - - > - - - - - - > # end of XRef - - - - - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - - > - - > - - > - - - > - - - > - - - - - - > # end of XRef - - - - - - > - > # end of Para - - - - > - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - > # end of XRef - - - - - - > - - > - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > - - - > # end of Font - - - > # end of Font - - > - - - > - - > - - - > # end of Font - - - > # end of Font - - > - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > - - - > - - - - - - > # end of XRef - - - - - - > - - > - - > - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - > - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - > - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - > - - - - > # end of Font - - - > # end of Font - - - > - - > - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > - - - - > # end of Font - - - > # end of Font - - > - - - > - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - > - - - > - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - - > - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - > - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - - > - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - > - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - > - - - - > # end of Font - - - > # end of Font - - > - - > - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - > - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - > - > # end of Para - - - - - > - - > - > # end of Para - - - - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - > - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > - - - > # end of Font - - - > # end of Font - - - > - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - > # end of XRef - - > - - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > - - - > # end of Font - - - > # end of Font - - > - - > - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - '> - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - - - > # end of Font - - - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - - - > # end of Font - - - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - > - - > - - - - > # end of Font - - - > # end of Font - - > - - - > - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - - > - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - > - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - > - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - - > - - - > # end of Font - - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - - - > - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - > - - > - - > - > # end of Para - - - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - - > - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - - > - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - > - - > - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - > - - > - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - - - - - - > # end of XRef - - - - - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - > - - - - - - > # end of XRef - - - - - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - > - > # end of Para - - - - - - - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of XRef - - - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > - - > - - > - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - - > - - > - - - > # end of Font - - - > # end of Font - - - > - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - - - > - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - > - - > - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > # end of Font - - > - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > - - - > # end of Font - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > - - - > # end of Font - - > - > # end of Para - - - - - > - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > - - - > # end of Font - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - - - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - - - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - - - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - - - - > # end of Font - - - > # end of Font - - > - - > - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - - > - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - - > - - > - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > # end of Font - - > - - > - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > - - - > # end of Font - - > - - - > # end of Font - - - > # end of Font - - > - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > # end of Font - - > - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - > - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - - > - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of XRef - - > - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - - > - - > - - > - - - - - - > # end of XRef - - > - - - - - > - > # end of Para - - - - - - - - > # end of Marker - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > - - - - > # end of Font - - - > # end of Font - - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > - - > - > # end of Para - - - - > - > # end of Para - - - - '> - > - > # end of Para - - - - - > - - > - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - > - > # end of Para - - - - > - - > - - - > - - > - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - - > - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - - - - - - - - > # end of XRef - - - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - > # end of Pgf - - - - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - \> 8'> - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - - - - - > # end of XRef - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - - - - - > # end of XRef - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - - - - - > # end of XRef - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - - - - - > # end of XRef - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - - - - - > # end of XRef - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - - - - - > # end of XRef - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - - - - - > # end of XRef - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - - - - - > # end of XRef - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - - - - - > # end of XRef - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - - - - - > # end of XRef - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - - - - - > # end of XRef - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - - - - - > # end of XRef - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - - - - - > # end of XRef - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - - - - - > # end of XRef - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - - - - - > # end of XRef - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - - - - - > # end of XRef - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - - - - - > # end of XRef - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - > # end of Pgf - - > # end of Font - - - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - > # end of Font - - - - - > # end of Marker - - > # end of Font - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - > - - > - - > - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - - - - - - > - - - - - - > - - - - - - > - - - - - - > - - - - - - > - - - - - - > - - - - - - > - - - - - - > - - - - - - > - - - - - - > - - - - - - > - - - - - - > - - - - - - > - - - - - - > - - - - - - > - - - - - - > - - - - - - > - - - - - - - > - - - - - - > - - - - - - > - - - - - - > - - - - - - - > - - - - - - > - - - - - - > - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > - > # end of Para - - - - - - - - > # end of XRef - - - - > - > # end of Para -> # end of TextFlow - - # end of Notes - - - - - - - > # end of Conditional - - - - - > # end of Marker - - > - - - - - > # end of Marker - > - > # end of Para - - - - - - - - - > # end of Marker - - - - - - > # end of Marker - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - - - - > # end of Marker - - > - - - - - - > # end of Marker - > - > # end of Para - - - - - - - - - > # end of Marker - - - - - - > # end of Marker - > - > # end of Para - - - - - - - - - > # end of Marker - - - - - - > # end of Marker - > - > # end of Para - - - - - - - - - > # end of Marker - - > - - - - - - > # end of Marker - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - > - - > - - - - - - > # end of Marker - > - > # end of Para - - - - - - - - - > # end of Marker - - > - - > - - > - - - - - - > # end of Marker - > - > # end of Para - - - - > # end of Conditional - - - - - > # end of Marker - - > - - > - > # end of Para - - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - - > # end of Conditional - - - - - > # end of Marker - - > - errorValue. There\xd5 s no evidence in the code that a bad client id is reported in the '> - > - - - - - - > # end of Marker - > - > # end of Para - - - - - > # end of Conditional - - - - - > # end of Marker - - > - > # end of Para - - - - - > - - > - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - - > # end of Conditional - - - - - > # end of Marker - - > - - - > # end of Font - - - > # end of Font - - - > - - - > # end of Font - - - > # end of Font - - - - - - > # end of Marker - > - > # end of Para - - - - - - - > # end of Marker - - > - - > - - > - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - > # end of Para - - - - > - - - > # end of Font - - - > # end of Font - - - > # end of Font - - - > # end of Font - - > - > # end of Para - - - - > - - > - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - > - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - > - - - > # end of Font - - - > # end of Font - - > - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - - > - - > - - > - - - > - - > - - - - - - > # end of Marker - > - > # end of Para - - - - - - - - - > # end of Marker - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > # end of Font - - > - - - > # end of Font - - - > # end of Font - - > - - - - - - > # end of Marker - > - > # end of Para - - - - - - - - > # end of Marker - - - - - - > # end of Marker - > - > # end of Para - - - - > - > # end of Para -> # end of TextFlow -# End of MIFFile diff --git a/doc/xorg-docs/specs/Xext/lbxalg.mif b/doc/xorg-docs/specs/Xext/lbxalg.mif deleted file mode 100644 index 483e2003d..000000000 --- a/doc/xorg-docs/specs/Xext/lbxalg.mif +++ /dev/null @@ -1,2690 +0,0 @@ - # Generated by FrameMaker xm4.0.3P1a -# Options: -# Paragraph Text -# Paragraph Tags -# Paragraph Formats -# Font Information -# Markers -# Anchored Frames -# Tables -# Graphics and TextRect Layout -# Master Page Items -# Condition Catalog -# Table Catalogs -# Font Catalog -# Paragraph Catalog -# Document Template -# Document Dictionary -# Variables -# Element Definitions -# Elements -# - - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color -> # end of ColorCatalog - - - - - - > # end of Condition -> # end of ConditionCatalog - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - : '> - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - > # end of Pgf -> # end of PgfCatalog - # end of ElementDefCatalog - - - > # end of Font - - - > # end of Font -> # end of FontCatalog - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling -> # end of RulingCatalog - - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat - - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat -> # end of TblCatalog - - - > # end of View - - - - - - - - > # end of View - - - - > # end of View - - - > # end of View - - - > # end of View - - - > # end of View -> # end of Views - - '> - > # end of VariableFormat - - <$daynum\>, <$year\>'> - > # end of VariableFormat - - /<$daynum\>/<$shortyear\>'> - > # end of VariableFormat - - <$daynum\>, <$year\> <$hour\>:<$minute00\> <$ampm\>'> - > # end of VariableFormat - - /<$daynum\>/<$shortyear\>'> - > # end of VariableFormat - - <$daynum\>, <$year\>'> - > # end of VariableFormat - - /<$daynum\>/<$shortyear\>'> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - - > # end of VariableFormat - - of <$tblsheetcount\>)'> - > # end of VariableFormat -> # end of VariableFormats - - \xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - '> - > # end of XRefFormat - - \xd3 on page\x11 <$pagenum\>.'> - > # end of XRefFormat - - , \xd2 <$paratext\>,\xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - on page\x11 <$pagenum\>'> - > # end of XRefFormat -> # end of XRefFormats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -> # end of Document - # end of InitialAutoNums - - -\>'> - - - - - - - - - - - -> # end of Dictionary - # end of AFrames - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect - - - - - - - > # end of TextRect - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect - - - - - - - > # end of TextRect - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - > # end of TextLine - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - - - - - - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - - - > # end of Frame - - - - - - - > # end of TextLine -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - > # end of TextRect -> # end of Page - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - > # end of Pgf - - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - - > - > # end of Para - - - - > # end of Pgf - - > - > # end of Para - - - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - > - - - > - - > - - > - > # end of Para - - - - \> 8 | ((compflag) ? 0x80 : 0);'> - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - - > - > # end of Para - - - - > - > # end of Para - - - - > - - > - - > - - > - > # end of Para - - - - > - > # end of Para - - - - - > - - > - - - > - - > - > # end of Para - - - - > - > # end of Para - - - \> (16 - nbits)) * 65535 / ((1 << nbits) - 1)'> - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - bitsPerRGB;'> - > - > # end of Para - - - - > # end of Para - - - class) {'> - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - numPixelBits), sigbits);'> - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - numRedBits), sigbits);'> - > - > # end of Para - - - numGreenBits), sigbits);'> - > - > # end of Para - - - numBlueBits), sigbits);'> - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - > - - > - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - - > - - > - - > - > # end of Para - - - - > - > # end of Para - - - - - > - - > - > # end of Para -> # end of TextFlow -# End of MIFFile diff --git a/doc/xorg-docs/specs/Xext/lbxalg.xml b/doc/xorg-docs/specs/Xext/lbxalg.xml new file mode 100644 index 000000000..9c1a89ab0 --- /dev/null +++ b/doc/xorg-docs/specs/Xext/lbxalg.xml @@ -0,0 +1,145 @@ + + + +
+LBX X Consortium Algorithms + + +Introduction + +The Low Bandwidth X extension allows for negotiating various algorithms used +by LBX. This document describes the algorithms used in the Consortium +implementation of LBX in the X11 Release 6.4. + + + + +Streaming Compression + + +LBX negotiates the use of a stream compressor. The consortium implementation defines a stream +compressor named XC-ZLIB, which is based on the Zlib version 1.0 compression library by +Gailly & Adler. + + + +The XC-ZLIB compressor is presented with a simple byte stream - the X and LBX message +boundaries are not apparent. The data is broken up into fixed sized blocks. Each block is compressed +using zlib, then a two byte header is prepended, and then the entire packet is transmitted. +The header has the following information: + + + + out[0] (length & 0xfff) >> 8 | ((compflag) ? 0x80 : 0); + out[1] = length & 0xff; + + + +If the compflag is false, then the contents of the block are not compressed. + + + + + +Bitmap Compression + +LBX also negotiates for bitmap compression. The consortium +implementation defines a bitmap compressor named XC-FaxG42D, +which uses the CCITT Group 4 2D compression algorithm. + + + + + +Pixmap Compression + + +LBX allows for the negotiation of pixmap compression. The +consortium implementation does not define a pixmap compression +algorithm. (A run-length encoding algorithm was proposed, but +experimentation proved it was less efficient than allowing the +stream compressor to compress the image. + + + + + +Colormap Algorithm + +LBX negotiates for use of a colormap algorithm, used for color +matching when the proxy allocates pixels in a grabbed colormap. +The consortium implementation defines an algorithm named +XC-CMAP. This algorithm consists of three parts, resolving to a +hardware color, finding the closest existing color, and what free +cell to allocate. + + + +The XC-CMAP algorithm resolves a color to a hardware color in the +following manner: + + + +#define RESCALE(x, nbits) (x >> (16 - nbits)) * 65535 / ((1 << nbits) - 1) +#define GRAY(r, g, b) (30L * r + 59L * g + 11L * b) / 100 + +sigbits = pVisual->bitsPerRGB; + +switch (pVisual->class) { + case PseudoColor: + case DirectColor: + case StaticColor: + /* rescale to rgb bits */ + *red = RESCALE(*red, sigbits); + *green = RESCALE(*green, sigbits); + *blue = RESCALE(*blue, sigbits); + break; + case GrayScale: + /* rescale to gray then rgb bits */ + *blue = *green = *red = RESCALE(GRAY(*red, *green, *blue), sigbits); + break; + case StaticGray: + /* rescale to gray then [0..limg] then [0..65535] then rgb bits */ + *blue = *green = *red = RESCALE(RESCALE(GRAY(*red, *green, *blue), +pVisual>numPixelBits), sigbits); + break; + case TrueColor: + /* rescale to [0..limN] then [0..65535] then rgb bits */ + *red = RESCALE(RESCALE(*red, pVisual->numRedBits), sigbits); + *green = RESCALE(RESCALE(*green, pVisual->numGreenBits), sigbits); + *blue = RESCALE(RESCALE(*blue, pVisual->numBlueBits), sigbits); + break; + } + + + +The XC-CMAP algorithm matches a color to an existing pixel in +static visuals by finding the pixel with the lowest color match +error, computed as follows: + + + +error = errRed * errRed + errGreen * errGreen + errBlue * errBlue + + + +The XC-CMAP algorithm selects a free pixel to allocate by selecting +the free pixel with the lowest index from the free pixels known to +the proxy. For direct visuals, it uses the lowest free or matching +pixel subfield known to the proxy for each color. + + + + + +Extensions + +LBX allows for extensions to LBX to enable additional compression +or short-circuiting. The consortium implementation does not define +any extensions to LBX. + + + +
diff --git a/doc/xorg-docs/specs/Xext/mit-shm.ms b/doc/xorg-docs/specs/Xext/mit-shm.ms deleted file mode 100644 index 2e905a95d..000000000 --- a/doc/xorg-docs/specs/Xext/mit-shm.ms +++ /dev/null @@ -1,358 +0,0 @@ -.\" Use -ms -.de Cs -.IP -.nf -.ft C -.. -.de Ce -.ft P -.fi -.. -.de Bu -.br -.ti +.5i -.ie \\n(.$ \\$1 -.el \\(bu -.. -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.ps 10 -.nr PS 10 -\& -.TL -\s+2\fBMIT-SHM\(emThe MIT Shared Memory Extension\fP\s-2 -.sp -How the shared memory extension works -.AU -Jonathan Corbet -.AI -Atmospheric Technology Division -National Center for Atmospheric Research -corbet@ncar.ucar.edu -.sp -Formatted and edited for release 5 by -.AU -Keith Packard -.AI -MIT X Consortium -.ps 9 -.nr PS 9 -.sp 8 -.AB -This document briefly describes how to use the MIT-SHM shared memory -extension. I have tried to make it accurate, but it would not surprise me -if some errors remained. If you find anything wrong, do let me know and I -will incorporate the corrections. Meanwhile, please take this document ``as -is''\(eman improvement over what was there before, but certainly not the -definitive word. -.AE -.LP -.DS C -Copyright \(co 1991 X Consortium -.DE -.sp 2 -.LP -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -.LP -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -.LP -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. -.ps 10 -.nr PS 10 -.bp 1 -.de PT -.tl ''MIT Shared Memory Extension'' -.. -.de BT -.tl ''\fB % \fP'' -.. -.NH 1 -REQUIREMENTS -.LP -The shared memory extension is provided only by some X servers. To find out -if your server supports the extension, use xdpyinfo(1). In particular, to -be able to use this extension, your system must provide the SYSV shared -memory primitives. There is not an mmap-based version of this extension. -To use shared memory on Sun systems, you must have built your kernel with -SYSV shared memory enabled -- which is not the default configuration. -Additionally, the shared memeory maximum size will need to be increased on -both Sun and Digital systems; the defaults are far too small for any useful -work. -.NH 1 -WHAT IS PROVIDED -.LP -The basic capability provided is that of shared memory XImages. This is -essentially a version of the ximage interface where the actual image data -is stored in a shared memory segment, and thus need not be moved through -the Xlib interprocess communication channel. For large images, use of this -facility can result in some real performance increases. -.LP -Additionally, some implementations provided shared memory pixmaps. These -are 2 dimensional arrays of pixels in a format specified by the X server, -where the image data is stored in the shared memory segment. Through use of -shared memory pixmaps, it is possible to change the contents of these -pixmaps without using any Xlib routines at all. Shared memory pixmaps can -only be supported when the X server can use regular virtual memory for -pixmap data; if the pixmaps are stored in some magic graphics hardware, your -application will not be able to share them with the server. Xdpyinfo(1) -doesn't print this particular nugget of information. -.NH 1 -HOW TO USE THE SHARED MEMORY EXTENSION -.LP -Code which uses the shared memory extension must include a number of header -files: -.Cs -# include /* of course */ -# include -# include -# include -.Ce -.LP -Of course, if the system you are building on does not support shared -memory, the file XShm.h may not be present. You may want to make -liberal use of #ifdefs. -.LP -Any code which uses the shared memory extension should first check to see -that the server provides the extension. You could always be running over -the net, or in some other environment where the extension will not work. -To perform this check, call either -.Cs -Status XShmQueryExtension (display) - Display *display -.Ce -.LP -or -.Cs -Status XShmQueryVersion (display, major, minor, pixmaps) - Display *display; - int *major, *minor; - Bool *pixmaps -.Ce -.LP -Where ``display'' is, of course, the display on which you are running. If -the shared memory extension may be used, the return value from either -function will be True; otherwise your program should operate using -conventional Xlib calls. When the extension is available, -\fCXShmQueryVersion\fP also returns ``major'' and ``minor'' which are the -version numbers of the extension implementation, and ``pixmaps'' which is -True iff shared memory pixmaps are supported. -.NH 1 -USE OF SHARED MEMORY XIMAGES -.LP -The basic sequence of operations for shared memory XImages is as follows: -.LP -.Bu "1 \-" -Create the shared memory XImage structure -.Bu "2 \-" -Create a shared memory segment to store the image data -.Bu "3 \-" -Inform the server about the shared memory segment -.Bu "4 \-" -Use the shared memory XImage, much like a normal one. -.LP -To create a shared memory XImage, use: -.Cs -XImage *XShmCreateImage (display, visual, depth, format, data, - shminfo, width, height) - Display *display; - Visual *visual; - unsigned int depth, width, height; - int format; - char *data; - XShmSegmentInfo *shminfo; -.Ce -.LP -Most of the arguments are the same as for XCreateImage; I will not go -through them here. Note, however, that there are no ``offset'', ``bitmap_pad'', -or ``bytes_per_line'' arguments. These quantities will be defined by the -server itself, and your code needs to abide by them. Unless you have already -allocated the shared memory segment (see below), you should pass in NULL for -the ``data'' pointer. -.LP -There is one additional argument: ``shminfo'', which is a pointer to a -structure of type XShmSegmentInfo. You must allocate one of these -structures such that it will have a lifetime at least as long as that of -the shared memory XImage. There is no need to initialize this structure -before the call to XShmCreateImage. -.LP -The return value, if all goes well, will be an XImage structure, which you -can use for the subsequent steps. -.LP -The next step is to create the shared memory segment. This is -best done after the creation of the XImage, since you need to make use of -the information in that XImage to know how much memory to allocate. To -create the segment, you need a call like: -.Cs -shminfo.shmid = shmget (IPC_PRIVATE, - image->bytes_per_line * image->height, IPC_CREAT|0777); -.Ce -.LP -(assuming that you have called your shared memory XImage ``image''). You -should, of course, follow the Rules and do error checking on all of these -system calls. Also, be sure to use the bytes_per_line field, not the width -you used to create the XImage as they may well be different. -.LP -Note that the shared memory ID returned by the system is stored in the -shminfo structure. The server will need that ID to attach itself to the -segment. -.LP -Also note that, on many systems for security reasons, the X server -will only accept to attach to the shared memory segment if it's -readable and writeable by ``other''. On systems where the X server is -able to determine the uid of the X client over a local transport, the -shared memory segment can be readable and writeable only by the uid of -the client. -.LP -Next, attach this shared memory segment to your process: -.Cs -shminfo.shmaddr = image->data = shmat (shminfo.shmid, 0, 0); -.Ce -.LP -The address returned by shmat should be stored in *both* the XImage -structure and the shminfo structure. -.LP -To finish filling in the shminfo structure, you need to decide how you want -the server to attach to the shared memory segment, and set the ``readOnly'' -field as follows. Normally, you would code: -.Cs -shminfo.readOnly = False; -.Ce -.LP -If you set it to True, the server will not be able to write to this -segment, and thus XShmGetImage calls will fail. -.LP -Finally, tell the server to attach to your shared memory segment with: -.Cs -Status XShmAttach (display, shminfo); -.Ce -.LP -If all goes well, you will get a non-zero status back, and your XImage is -ready for use. -.LP -To write a shared memory XImage into an X drawable, use XShmPutImage: -.Cs -Status XShmPutImage (display, d, gc, image, src_x, src_y, - dest_x, dest_y, width, height, send_event) - Display *display; - Drawable d; - GC gc; - XImage *image; - int src_x, src_y, dest_x, dest_y; - unsigned int width, height; - bool send_event; -.Ce -.LP -The interface is identical to that of XPutImage, so I will spare my fingers -and not repeat that documentation here. There is one additional parameter, -however, called ``send_event''. If this parameter is passed as True, the -server will generate a ``completion'' event when the image write is complete; -thus your program can know when it is safe to begin manipulating the shared -memory segment again. -.LP -The completion event has type XShmCompletionEvent, which is defined as the -following: -.Cs -typedef struct { - int type; /* of event */ - unsigned long serial; /* # of last request processed */ - Bool send_event; /* true if came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Drawable drawable; /* drawable of request */ - int major_code; /* ShmReqCode */ - int minor_code; /* X_ShmPutImage */ - ShmSeg shmseg; /* the ShmSeg used in the request */ - unsigned long offset; /* the offset into ShmSeg used */ -} XShmCompletionEvent; -.Ce -.LP -The event type value that will be used can be determined at run time with a -line of the form: -.Cs -int CompletionType = XShmGetEventBase (display) + ShmCompletion; -.Ce -.LP -If you modify the shared memory segment before the arrival of the -completion event, the results you see on the screen may be inconsistent. -.LP -To read image data into a shared memory XImage, use the following: -.Cs -Status XShmGetImage (display, d, image, x, y, plane_mask) - Display *display; - Drawable d; - XImage *image; - int x, y; - unsigned long plane_mask; -.Ce -.LP -Where ``display'' is the display of interest, ``d'' is the source drawable, -``image'' is the destination XImage, ``x'' and ``y'' are the offsets within -``d'', and ``plane_mask'' defines which planes are to be read. -.LP -To destroy a shared memory XImage, you should first instruct the server to -detach from it, then destroy the segment itself, as follows: -.Cs -XShmDetach (display, shminfo); -XDestroyImage (image); -shmdt (shminfo.shmaddr); -shmctl (shminfo.shmid, IPC_RMID, 0); -.Ce -.NH 1 -USE OF SHARED MEMORY PIXMAPS -.LP -Unlike X images, for which any image format is usable, the shared memory -extension supports only a single format (i.e. XYPixmap or ZPixmap) for the -data stored in a shared memory pixmap. This format is independent of the -depth of the image (for 1-bit pixmaps it doesn't really matter what this -format is) and independent of the screen. Use XShmPixmapFormat to get the -format for the server: -.Cs -int XShmPixmapFormat (display) - Display *display; -.Ce -.LP -If your application can deal with the server pixmap data format (including -bits-per-pixel et al.), create a shared memory segment and ``shminfo'' -structure in exactly the same way as is listed above for shared memory -XImages. While it is, not strictly necessary to create an XImage first, -doing so incurs little overhead and will give you an appropriate -bytes_per_line value to use. -.LP -Once you have your shminfo structure filled in, simply call: -.Cs -Pixmap XShmCreatePixmap (display, d, data, shminfo, width, - height, depth); - Display *display; - Drawable d; - char *data; - XShmSegmentInfo *shminfo; - unsigned int width, height, depth; -.Ce -.LP -The arguments are all the same as for XCreatePixmap, with two additions: -``data'' and ``shminfo''. The second of the two is the same old shminfo -structure that has been used before. The first is the pointer to the shared -memory segment, and should be the same as the shminfo.shmaddr field. I am -not sure why this is a separate parameter. -.LP -If everything works, you will get back a pixmap, which you can manipulate in -all of the usual ways, with the added bonus of being able to tweak its -contents directly through the shared memory segment. Shared memory pixmaps -are destroyed in the usual manner with XFreePixmap, though you should detach -and destroy the shared memory segment itself as shown above. diff --git a/doc/xorg-docs/specs/Xext/record.ms b/doc/xorg-docs/specs/Xext/record.ms deleted file mode 100644 index 9328e273e..000000000 --- a/doc/xorg-docs/specs/Xext/record.ms +++ /dev/null @@ -1,1472 +0,0 @@ -.\" Record Extension Protocol, v1.13 -.\" Use tbl, -ms and macros.t -.\" $Xorg: record.ms,v 1.3 2000/08/17 19:42:36 cpqbld Exp $ -.\" $XdotOrg: xc/doc/specs/Xext/record.ms,v 1.2 2004/04/23 18:42:18 eich Exp $ -.\" ----------------------------------------------- -.de Ip -.IP \(bu 3 -.. -.de sC \" start change (gildea). arg is issue number -.mc \s+5\(br\s0\" \" make tall enough to span paragraph skip -.if !^\\$1^^ \{\ -'sp -1 -.lt +\w'000'u+\w'\s-2\&\\$1\s0'u -.tl !!!\v'\n(.vu'\s-2\&\\$1\s0! -.lt -\w'000'u+\w'\s-2\&\\$1\s0'u -.\} -.. -.de eC \" end change -.if \\n(.u .mc \s+5\(br\s0\" ensure it appears on the last line -.mc -.. -.hw RECORD-RANGE -.hw XTest-Fake-Input -.hw Button-Release Motion-Notify Record-Disable-Context -.\" -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.fi -.ps 11 -.nr PS 11 -\& -.sp 8 -.ce 50 -\s+3\fBRecord Extension Protocol Specification\fP\s-3 -.sp -\fBVersion 1.13\fP -.sp -\fBX Consortium Standard\fP -.sp -\fBX Version 11, Release 6.8\fP -.sp 6 -Martha Zimet -Network Computing Devices, Inc. -.sp 6 -edited by -Stephen Gildea -X Consortium -.ce 0 -.bp -.br -\& -.sp 13 -.ps 9 -.nr PS 9 -.fi -.LP -Copyright \(co 1994 Network Computing Devices, Inc. -.LP -Permission to use, copy, modify, distribute, and sell this -documentation for any purpose is hereby granted without fee, -provided that the above copyright notice and this permission -notice appear in all copies. Network Computing Devices, Inc. -makes no representations about the suitability for any purpose -of the information in this document. This documentation is -provided \*Qas is\*U without express or implied warranty. -.LP -Copyright \(co 1994, 1995 X Consortium -.LP -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -\*QSoftware\*U), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: -.LP -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED \*QAS IS\*U, WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. -.LP -Except as contained in this notice, the name of the X Consortium and -shall not be used in advertising or otherwise to promote the sale, use -or other dealings in this Software without prior written authorization -from the X Consortium. -.ps 11 -.nr PS 11 -.P1 -.nr LL 6.5i -.nr LT 6.5i -.nr FL 6.5i -.ll 6.5i -.EH '\fBRecord Extension Protocol, Version 1.13\fP''\fBX11, Release 6.8\fP' -.OH '\fBX11, Release 6.8\fP''\fBRecord Extension Protocol, Version 1.13\fP' -.bp 1 -.EF ''\fB\\\\n(PN\fP'' -.OF ''\fB\\\\n(PN\fP'' -.hy 14 - -.NH 1 -Introduction -.XS -\*(SN Introduction -.XE -.LP -Several proposals have been written over the past few years that address some -of the issues surrounding the recording and playback of user actions -in the X Window System\**: -.FS -\fIX Window System\fP is a trademark of The Open Group. -.FE -.Ip -\fISome Proposals for a Minimal X11 Testing Extension\fP, -Kieron Drake, UniSoft Ltd., April 1991 -.Ip -\fIX11 Input Synthesis Extension Proposal\fP, Larry Woestman, -Hewlett Packard, November 1991 -.Ip -\fIXTrap Architecture\fP, Dick Annicchiario, et al, Digital Equipment Corporation, -July 1991 -.Ip -\fIXTest Extension Recording Specification\fP, Yochanan Slonim, -Mercury Interactive, December 1992 -.LP -This document both unifies and extends the previous diverse approaches -to generate a proposal for an X extension that provides support for -the recording of all core X protocol and arbitrary extension protocol. -Input synthesis, or playback, has already been implemented in the -XTest extension, an X Consortium standard. Therefore, this extension -is limited to recording. -.LP -In order to provide both record and playback functionality, a -hypothetical record application could use this extension to capture -both user actions and their consequences. For example, a button press -(a user action) may cause a window to be mapped and a corresponding -.PN MapNotify -event to be sent (a consequence). This information could be -stored for later use by a playback application. -.LP -The playback application could use the recorded actions as input for -the XTest extension's -.PN XTestFakeInput -operation to synthesize the -appropriate input events. The \*Qconsequence\*U or synchronization -information is then used as a synchronization point during playback. -That is, the playback application does not generate specific -synthesized events until their matching synchronization condition -occurs. When the condition occurs the processing of synthesized -events continues. Determination that the condition has occurred may be -made by capturing the consequences of the synthesized events and -comparing them to the previously recorded synchronization information. -For example, if a button press was followed by a -.PN MapNotify -event on a -particular window in the recorded data, the playback application might -synthesize the button press then wait for the -.PN MapNotify -event on the -appropriate window before proceeding with subsequent synthesized -input. -.LP -Because -it is impossible to predict what synchronization information will be -required by a particular application, the extension provides -facilities to record any subset of core X protocol and arbitrary -extension protocol. -As such, this extension does not enforce a specific -synchronization methodology; any method based on information in the X -protocol stream (e.g., watching for window mapping/unmapping, cursor -changes, drawing of certain text strings, etc.) can capture the -information it needs using RECORD facilities. -.NH 2 -Acknowledgements -.XS -\*(SN Acknowledgements -.XE -.LP -The document represents the culmination of two years of debate and -experiments done under the auspices of the X Consortium xtest working -group. Although this was a group effort, the author remains -responsible for any errors or omissions. -Two years ago, Robert Chesler of Absol-puter, Kieron Drake of UniSoft -Ltd., Marc Evans of Synergytics and Ken Miller of Digitial shared the -vision of a standard extension for recording and were all instrumental -in the early protocol development. During the last two years, Bob -Scheifler of the X Consortium and Jim Fulton of NCD continuously -provided input to the protocol design, as well as encouragement to the -author. In the last few months, Stephen Gildea and Dave Wiggins, -both X Consortium staff, have spent considerable time fine tuning the -protocol design and reviewing the protocol specifications. Most -recently, Amnon Cohen of Mercury Interactive has assisted in -clarification of the recorded event policy, and Kent Siefkes of -Performance Awareness has assisted in clarification of the timestamp -policy. -.ne 1.5i -.NH 2 -Goals -.XS -\*(SN Goals -.XE -.LP -.RS -.Ip -To provide a standard for recording, -whereby both device events and synchronization information in the -form of device event consequences are recorded. -.Ip -To record contextual information used in synchronized playback -without prior knowledge of the application -that -is being recorded. -.Ip -To provide the ability to record arbitrary X protocol extensions. -.RE -.NH 2 -Requirements -.XS -\*(SN Requirements -.XE -.LP -The extension should function as follows: -.RS -.Ip -It should -not be dependent on other clients or extensions for its operation. -.Ip -It should -not significantly impact performance. -.Ip -It should -support the recording of all device input (core devices and XInput devices). -.Ip -It should -be extendible. -.Ip -It should -support the recording of synchronization information for user events. -.RE - -.NH 1 -Design -.XS -\*(SN Design -.XE -.LP -This section gives an overview of the RECORD extension and discusses -its overall operation and data types. - -.NH 2 -Overview -.XS -\*(SN Overview -.XE -.LP -The mechanism used by this extension for recording is to intercept -core X protocol and arbitrary X extension protocol entirely within the X server -itself. When the extension has been requested to intercept specific -protocol by one or more clients, the protocol data are formatted and -returned to the recording clients. -.LP -The extension provides a mechanism for capturing all events, including -input device events that go to no clients, that is analogous to a client -expressing \*Qinterest\*U in all events in all windows, including the root -window. Event filtering in the extension provides a mechanism for feeding -device events to recording clients; it does not provide a mechanism for in-place, -synchronous event substitution, modification, or withholding. -In addition, the -extension does not provide data compression before intercepted protocol -is returned to the recording clients. -.NH 3 -Data Delivery -.XS -\*(SN Data Delivery -.XE -.LP -Because -events are limited in size to -32 bytes, using events to return intercepted protocol data to recording -clients is prohibitive in terms of performance. Therefore, intercepted -protocol data are returned to recording clients through multiple replies -to the extension request to begin protocol interception and reporting. -This utilization is consistent with -.PN ListFontsWithInfo , -for example, where a -single request has multiple replies. -.LP -Individual requests, replies, events or errors intercepted by the extension -on behalf of recording clients cannot be split across reply packets. In order -to reduce overhead, multiple intercepted requests, replies, events and errors -might be collected -into a single reply. -Nevertheless, all data are returned to the client in a timely manner. -.NH 3 -Record Context -.XS -\*(SN Record Context -.XE -.LP -The extension adds a record context resource (RC) -to the set of resources managed by the server. All the -extension operations take an RC as an argument. Although the protocol -permits sharing of RCs between clients, it is expected that clients will -use their own RCs. The attributes used in extension operations are stored -in the RCs, and these attributes include the protocol and clients to -intercept. -.LP -The terms \*Qregister\*U and \*Qunregister\*U are used to describe the -relationship between clients to intercept and the RC. To register -a client with an RC means the client is added to the list -of clients to intercept; to unregister a client means the client -is deleted from the list of clients to intercept. When the -server is requested to register or unregister clients from an RC, -it is required to do so immediately. That is, it is not permissible for -the server to wait until recording is enabled to register clients -or recording is disabled to unregister clients. -.NH 3 -Record Client Connections -.XS -\*(SN Record Client Connections -.XE -.LP -The typical communication model for a recording client is to open -two connections to the server and use one for RC control and -the other for reading protocol data. -.LP -The \*Qcontrol\*U connection can execute requests to obtain information about -the supported protocol version, create and destroy RCs, specify protocol -types to intercept and clients to be recorded, query the current state -of an RC, and to stop interception and reporting of protocol data. The -\*Qdata\*U connection can execute a request to -enable interception -and reporting of specified protocol for a particular RC. When the -\*Qenable\*U request is issued, intercepted protocol is sent back on the -same connection, generally in more than one reply packet. Until the last -reply to the \*Qenable\*U request is sent by the server, signifying that -the request execution is complete, no other requests will be executed by -the server on that connection. That is, the connection that data are being -reported on cannot issue the \*Qdisable\*U request until the last reply -to the \*Qenable\*U request is sent by the server. Therefore, unless a -recording client never has the need to disable the interception and reporting -of protocol data, two client connections are necessary. -.NH 3 -Events -.XS -\*(SN Events -.XE -.LP -The terms \*Qdelivered events\*U and \*Qdevice events\*U are used -to describe the two event classes recording clients may -select for interception. These event classes are handled differently -by the extension. Delivered events are core X events or X extension events -the server actually delivers to one or more clients. Device events are -events generated by core X devices or extension input devices that the -server may or may not deliver to any clients. When device events -are selected for interception by a recording client, the extension -guarantees each device event is recorded and will be forwarded -to the recording client in the same order it is generated by the -device. -.LP -The recording of selected device events is not affected -by server grabs. Delivered events, on the other hand, can be affected -by server grabs. -If a recording client selects both -a device event and delivered events that result from that device -event, the delivered events are recorded after the device event. -In the absence of grabs, the delivered events for a -device event precede later device events. -.LP -Requests that have side effects on -devices, such as -.PN WarpPointer -and -.PN GrabPointer -with a confine-to window, -will cause RECORD to record an associated device event. -The XTEST extension request -.PN XTestFakeInput -causes a device event to be recorded; the -device events are recorded in the same order that the -.PN XTestFakeInput -requests are received by the server. -.LP -If a key autorepeats, multiple -.PN KeyPress -and -.PN KeyRelease -device events are reported. -.NH 3 -Timing -.XS -\*(SN Timing -.XE -.LP -Requests are recorded just before -they are executed; the time associated with a request is the server -time when it is recorded. - -.ne 1.5i -.NH 2 -Types -.XS -\*(SN Types -.XE -.sp -.LP -The following new types are used in the request definitions that appear -in section 3. -.LP -.TS -tab(@); -l l. -RC:@CARD32 -.TE -.LP -The -.PN "RC" -type is a resource identifier for a server record context. -.LP -.TS -tab(@); -l l l. -RANGE8:@\s+2[\s0\fIfirst\fP, \fIlast\fP\^:@CARD8\s+2]\s0 -RANGE16:@\s+2[\s0\fIfirst\fP, \fIlast\fP\^:@CARD16\s+2]\s0 -EXTRANGE:@\s+2[\s0\fImajor\fP\^:@RANGE8 -@\fIminor\fP\^:@RANGE16\s+2]\s0 -.TE -.LP -.TS -tab(@); -l l l. -RECORDRANGE:@\s+2[\s0\fIcore-requests\fP\^:@RANGE8 -@\fIcore-replies\fP\^:@RANGE8 -@\fIext-requests\fP\^:@EXTRANGE -@\fIext-replies\fP\^:@EXTRANGE -@\fIdelivered-events\fP\^:@RANGE8 -@\fIdevice-events\fP\^:@RANGE8 -@\fIerrors\fP\^:@RANGE8 -@\fIclient-started\fP\^:@BOOL -@\fIclient-died\fP\^:@BOOL\s+2]\s0 -.TE -.LP -The -.PN "RECORDRANGE" -structure contains the protocol values to intercept. Typically, -this structure is sent by recording clients over the control connection -when creating or modifying an RC. -.IP \fIcore-requests\fP -.IN "core-requests" -.br -Specifies core X protocol requests with an opcode field between \fIfirst\fP -and \fIlast\fP inclusive. If \fIfirst\fP is equal to 0 and \fIlast\fP is equal to 0, no -core requests are specified by this RECORDRANGE. If \fIfirst\fP is greater -than \fIlast\fP, a -.PN "Value" -error results. -.IP \fIcore-replies\fP -.IN "core-replies" -.br -Specifies replies resulting from core X protocol requests with an opcode -field between \fIfirst\fP and \fIlast\fP inclusive. If \fIfirst\fP is equal to 0 and \fIlast\fP -is equal to 0, no core replies are specified by this RECORDRANGE. If -\fIfirst\fP is greater than \fIlast\fP, a -.PN "Value" -error results. -.IP \fIext-requests\fP -.IN "ext-requests" -.br -Specifies extension protocol requests with a major opcode field between -\fImajor.first\fP and \fImajor.last\fP and a minor opcode field between \fIminor.first\fP -and \fIminor.last\fP inclusive. -If \fImajor.first\fP and \fImajor.last\fP are equal to 0, no -extension protocol requests are specified by this RECORDRANGE. If -\fImajor.first\fP or \fImajor.last\fP is less than 128 and greater than 0, -if \fImajor.first\fP is greater than \fImajor.last\fP, -or if \fIminor.first\fP -is greater than \fIminor.last\fP, a -.PN "Value" -error results. -.IP \fIext-replies\fP -.IN "ext-replies" -.br -Specifies replies resulting from extension protocol requests with a -major opcode field between \fImajor.first\fP and \fImajor.last\fP and -a minor opcode field between \fIminor.first\fP and \fIminor.last\fP -inclusive. If \fImajor.first\fP and \fImajor.last\fP are equal to 0, -no extension protocol replies are specified by this RECORDRANGE. If -\fImajor.first\fP or \fImajor.last\fP is less than 128 and greater -than 0, -if \fImajor.first\fP is greater than \fImajor.last\fP, -or if \fIminor.first\fP is greater than \fIminor.last\fP, a -.PN "Value" -error results. -.IP \fIdelivered-events\fP -.IN "delivered-events" -.br -This is used for both core X protocol events and arbitrary extension -events. Specifies events that are delivered to at least one client -that have a code field between \fIfirst\fP and \fIlast\fP -inclusive. If \fIfirst\fP is equal to 0 and \fIlast\fP is equal to 0, -no events are specified by this RECORDRANGE. -Otherwise, if \fIfirst\fP is less than 2 -or \fIlast\fP is less than 2, or if -\fIfirst\fP is greater than \fIlast\fP, a -.PN "Value" -error results. -.IP \fIdevice-events\fP -.IN "device-events" -.br -This is used for both core X device events and X extension device -events that may or may not be delivered to a client. -Specifies device events that have a code field between \fIfirst\fP and -\fIlast\fP inclusive. If \fIfirst\fP is equal to 0 and \fIlast\fP -is equal to 0, no device events are specified by this RECORDRANGE. -Otherwise, -if \fIfirst\fP is less than 2 or \fIlast\fP is less -than 2, or if \fIfirst\fP is greater than \fIlast\fP, a -.PN "Value" -error results. -.IP -Because -the generated device event may or may not be associated with a -client, unlike other RECORDRANGE components, which select protocol for a -specific client, selecting for device events in any RECORDRANGE in an RC -causes the recording client to receive one instance for each device event -generated that is in the range specified. -.IP \fIerrors\fP -.IN "errors" -.br -This is used for both core X protocol errors and arbitrary extension -errors. Specifies errors that have a code field between \fIfirst\fP and -\fIlast\fP inclusive. If \fIfirst\fP is equal to 0 and \fIlast\fP is equal to 0, no -errors are specified by this RECORDRANGE. If \fIfirst\fP is greater -than \fIlast\fP, a -.PN "Value" -error results. -.IP \fIclient-started\fP -.IN "client-started" -.br -Specifies the connection setup reply. -If -.PN False , -the connection setup reply is not specified by -this RECORDRANGE. -.IP \fIclient-died\fP -.IN "client-died" -.br -Specifies notification when a client disconnects. -If -.PN False , -notification when a client disconnects is not specified by -this RECORDRANGE. -.LP -.TS -tab(@); -l l l. -ELEMENT_HEADER:@\s+2[\s0\fIfrom-server-time\fP\^:@BOOL -@\fIfrom-client-time\fP\^:@BOOL -@\fIfrom-client-sequence\fP\^:@BOOL\s+2]\s0 -.TE -.LP -The -.PN ELEMENT_HEADER -structure specifies additional data that precedes each protocol -element in the \fIdata\fP field of a -.PN RecordEnableContext -reply. -.Ip -If \fIfrom-server-time\fP is -.PN True , -each intercepted protocol element -with category -.PN FromServer -is preceded by the server time when the protocol was recorded. -.Ip -If \fIfrom-client-time\fP is -.PN True , -each intercepted protocol element -with category -.PN FromClient -is preceded by the server time when the protocol was recorded. -.Ip -If \fIfrom-client-sequence\fP is -.PN True , -each intercepted protocol -element with category -.PN FromClient -or -.PN ClientDied -is preceded by the -32-bit sequence number of the recorded client's most recent request -processed by the server at that time. -For -.PN FromClient , -this will be one less than the sequence number of the -following request. -For -.PN ClientDied , -the sequence number will be the only data, because no -protocol is recorded. -.LP -Note that a reply containing device events is treated the same as -other replies with category -.PN FromServer -for purposes of these flags. -Protocol with category -.PN FromServer -is never preceded by a sequence -number because almost all such protocol has a sequence number in it anyway. -.LP -If both a server time and a sequence number have been requested for a -reply, each protocol request is -preceded first by the time and second by the sequence number. -.LP -.TS -tab(@); -l l. -XIDBASE:@CARD32 -.TE -.LP -The XIDBASE type is used to identify a particular client. Valid -values are any existing resource identifier -of any connected client, -in which case the client -that created the resource is specified, or the resource identifier -base sent to the target client from the server in the connection setup -reply. A value of 0 (zero) is valid when the XIDBASE is associated -with device events that may not have been delivered to a client. -.LP -.TS -tab (@) ; -l l l. -CLIENTSPEC:@XIDBASE or \s+2{\s0\fBCurrentClients\fP, \fBFutureClients\fP, \fBAllClients\fP\s+2}\s0 -.TE -.LP -The CLIENTSPEC type defines the set of clients the RC attributes are -associated with. This type is used by recording clients when creating -an RC or when changing RC attributes. XIDBASE specifies that the RC -attributes apply to a single client only. -.PN CurrentClients -specifies -that the RC attributes apply to current client connections; -.PN FutureClients -specifies future client connections; -.PN AllClients -specifies all client connections, which includes current and future. -.LP -The numeric values for -.PN CurrentClients , -.PN FutureClients -and -.PN AllClients -are -defined such that there will be no intersection with valid XIDBASEs. -.LP -When the context is enabled, the data connection is unregistered if it -was registered. -If the context is enabled, -.PN CurrentClients -and -.PN AllClients -silently exclude the recording data connection. -It is an error to explicitly register the data connection. -.LP -.KS -.TS -tab (@) ; -l l l. -CLIENT_INFO\^:@\s+2[\s0\fIclient-resource\fP\^:@CLIENTSPEC -@\fIintercepted-protocol\fP\^:@LISTofRECORDRANGE\s+2]\s0 -.TE -.KE -.LP -This structure specifies an intercepted client and the protocol to be -intercepted for the client. The \fIclient-resource\fP field is a -resource base that identifies the intercepted client. The -\fIintercepted-protocol\fP field specifies the protocol to intercept -for the \fIclient-resource\fP. - -.NH 2 -Errors -.LP -.IP \fBRecordContext\fP -.IN RecordContext -.br -This error is returned if the value for an RC argument -in a request does not name a defined record context. - -.NH 1 -Protocol Requests -.XS -\*(SN Protocol Requests -.XE -.sp -.LP -.PN "RecordQueryVersion" -.TA .75i -.ta .75i -.IP -\fImajor-version\fP, \fIminor-version\fP\^: CARD16 -.LP -\(-> -.IP -\fImajor-version\fP, \fIminor-version\fP\^: CARD16 -.LP -This request specifies the RECORD extension protocol version the client -would like to use. When the specified protocol version is supported -by the extension, the protocol version the server expects from the -client is returned. Clients must use this request before other RECORD -extension requests. -.LP -This request also determines whether or not the RECORD extension protocol -version specified by the client is supported by the extension. If the -extension supports the version specified by the client, this version number -should be returned. If the client has requested a higher version than is -supported by the server, the server's highest version should be returned. -Otherwise, if the client has requested a lower version than is supported -by the server, the server's lowest version should be returned. This document -defines major version one (1), -minor version thirteen (13). -.LP -.PN "RecordCreateContext" -.TA .75i -.ta .75i -.IP -\fIcontext\fP\^: RC -.IP -\fIelement-header\fP\^: ELEMENT_HEADER -.IP -\fIclient-specifiers\fP\^: LISTofCLIENTSPEC -.IP -\fIranges\fP\^: LISTofRECORDRANGE -.br -.IP -Errors: -.PN Match , -.PN Value , -.PN IDChoice , -.PN Alloc -.LP -This request creates a new -record context -within the server and assigns the identifier \fIcontext\fP to -it. After the \fIcontext\fP is created, this request registers the -set of clients in \fIclient-specifiers\fP with the \fIcontext\fP and -specifies the protocol to intercept for those clients. -The recorded protocol elements will be preceded by data as specified -by \fIelement-header\fP. -Typically, -this request is used by a recording client over the control -connection. Multiple RC -objects can exist simultaneously, containing overlapping sets of -protocol and clients to intercept. -.LP -If any of the values in -\fIelement-header\fP or -\fIranges\fP is invalid, a -.PN "Value" -error results. Duplicate items in the list of \fIclient-specifiers\fP are -ignored. If any item in the \fIclient-specifiers\fP list is not a valid -CLIENTSPEC, a -.PN "Match" -error results. Otherwise, each item in the \fIclient-specifiers\fP list is -processed as follows: -.Ip -If the item is an XIDBASE identifying a particular client, the -specified client is registered with the \fIcontext\fP and the protocol -to intercept for the client is then set to \fIranges\fP. -.Ip -If the item is -.PN CurrentClients , -all existing clients are registered with the -\fIcontext\fP at this time. -The protocol to intercept for all clients registered -with the \fIcontext\fP is then set to \fIranges\fP. -.Ip -If the item is -.PN FutureClients , -all clients that connect to the server -after this request executes will be automatically registered with the -\fIcontext\fP. The protocol to intercept for such clients will be set to -\fIranges\fP in the \fIcontext\fP. -.Ip -If the item is -.PN AllClients , -the effect is as if the actions described -for -.PN FutureClients -are performed, followed by the actions for -.PN CurrentClients . -.LP -The -.PN "Alloc" -error results when the server is unable to allocate the necessary -resources. - -.LP -.PN "RecordRegisterClients" -.TA .75i -.ta .75i -.IP -\fIcontext\fP\^: RC -.IP -\fIelement-header\fP\^: ELEMENT_HEADER -.IP -\fIclient-specifiers\fP\^: LISTofCLIENTSPEC -.IP -\fIranges\fP\^: LISTofRECORDRANGE -.br -.IP -Errors: -.PN Match , -.PN Value , -.PN RecordContext , -.PN Alloc -.LP -This request registers the set of clients in \fIclient-specifiers\fP with -the given \fIcontext\fP and specifies the protocol to intercept for those -clients. -The header preceding each recorded protocol element is set as specified -by \fIelement-header\fP. -These flags affect the entire -context; their effect is not limited to the clients registered by -this request. -Typically, this request is used by a recording client over -the control connection. -.LP -If \fIcontext\fP does not name a valid RC, a -.PN "RecordContext" -error results. If any of the values in -\fIelement-header\fP or \fIranges\fP is invalid, a -.PN "Value" -error results. Duplicate items in the list of \fIclient-specifiers\fP are -ignored. If any item in the list of \fIclient-specifiers\fP is not a -valid CLIENTSPEC, a -.PN "Match" -error results. -If the \fIcontext\fP is enabled and the XID of the enabling connection -is specified, a -.PN "Match" -error results. -Otherwise, each item in the \fIclient-specifiers\fP list is -processed as follows: -.Ip -If the item is an XIDBASE identifying a particular client, the -specified client is registered with the \fIcontext\fP if it is not already -registered. The protocol to intercept for the client is then set to -\fIranges\fP. -.Ip -If the item is -.PN CurrentClients , -all existing clients that are not -already registered with the specified \fIcontext\fP, -except the enabling connection if the \fIcontext\fP is enabled, -are registered at this -time. The protocol to intercept for all clients registered with the -\fIcontext\fP is then set to \fIranges\fP. -.Ip -If the item is -.PN FutureClients , -all clients that connect to the server -after this request executes will be automatically registered with the -\fIcontext\fP. The protocol to intercept for such clients will be set to -\fIranges\fP in the \fIcontext\fP. -The set of clients that are registered with the -\fIcontext\fP and their corresponding sets -of protocol to intercept are left intact. -.Ip -If the item is -.PN AllClients , -the effect is as if the actions described -for -.PN FutureClients -are performed, followed by the actions for -.PN CurrentClients . -.LP -The -.PN "Alloc" -error results when the server is unable to allocate the necessary -resources. - -.LP -.PN "RecordUnregisterClients" -.TA .75i -.ta .75i -.IP -\fIcontext\fP\^: RC -.IP -\fIclient-specifiers\fP\^: LISTofCLIENTSPEC -.br -.IP -Errors: -.PN Match , -.PN RecordContext -.LP -This request removes the set of clients in \fIclient-specifiers\fP from the -given \fIcontext\fP's set of registered clients. Typically, this request is -used by a recording client over the control connection. -.LP -If \fIcontext\fP does not name a valid RC, a -.PN "RecordContext" -error results. Duplicate items in the list of \fIclient-specifiers\fP are -ignored. If any item in the list is not a valid CLIENTSPEC, a -.PN "Match" -error results. Otherwise, each item in the \fIclient-specifiers\fP list is -processed as follows: -.Ip -If the item is an XIDBASE identifying a particular client, and the -specified client is currently registered with the \fIcontext\fP, it is -unregistered, and the set of protocol to intercept for the client is -deleted from the \fIcontext\fP. If the specified client is not registered -with the \fIcontext\fP, the item has no effect. -.Ip -If the item is -.PN CurrentClients , -all clients currently registered with -the \fIcontext\fP are unregistered from it, and their corresponding sets of -protocol to intercept are deleted from the \fIcontext\fP. -.Ip -If the item is -.PN FutureClients , -clients that connect to the server after -this request executes will not automatically be registered with the -\fIcontext\fP. The set of clients that are registered with this context -and their corresponding sets of protocol that will be -intercepted are left intact. -.Ip -If the item is -.PN AllClients , -the effect is as if the actions described -for -.PN FutureClients -are performed, followed by the actions for -.PN CurrentClients . -.LP -A client is unregistered automatically when it disconnects. - -.LP -.PN "RecordGetContext" -.TA .75i -.ta .75i -.IP -\fIcontext\fP\^: RC -.LP -\(-> -.IP -\fIenabled\fP\^: BOOL -.IP -\fIelement-header\fP\^: ELEMENT_HEADER -.IP -\fIintercepted-clients\fP\^: LISTofCLIENT_INFO -.IP -Errors: -.PN RecordContext -.LP -This request queries the current state of the specified \fIcontext\fP -and is typically used by a recording client over the control connection. -The \fIenabled\fP field -specifies the state of data transfer between the extension and the -recording client, and is either enabled -.Pn ( True ) -or disabled -.Pn ( False ). -The initial state is disabled. -When enabled, all core X protocol and -extension protocol received from (requests) or sent to (replies, -errors, events) a particular client, and requested to be intercepted -by the recording client, is reported to the recording client over the -data connection. -The \fIelement-header\fP specifies the header that precedes each -recorded protocol element. -The -\fIintercepted-clients\fP field specifies the list of clients currently -being recorded and the protocol associated with each client. -If future clients will be automatically registered with the context, -one of the returned CLIENT_INFO structures has a \fIclient-resource\fP value -of FutureClients and an \fIintercepted-protocol\fP giving the protocol to -intercept for future clients. -Protocol ranges may be decomposed, coalesced, or otherwise modified -by the server from how they were specified by the client. -All CLIENTSPECs registered with the server are returned, even if the -RECORDRANGE(s) associated with them specify no protocol to record. -.LP -When the \fIcontext\fP argument is not valid, a -.PN RecordContext -error results. - -.LP -.PN "RecordEnableContext" -.TA .75i -.ta .75i -.IP -\fIcontext\fP\^: RC -.LP -\(->\(pl -.br -.IP -\fIcategory\fP\^: {\fBFromServer\fP, \fBFromClient\fP, \fBClientStarted\fP, \fBClientDied\fP, -\fBStartOfData\fP, -\fBEndOfData\fP} -.IP -\fIelement-header\fP\^: ELEMENT_HEADER -.IP -\fIclient-swapped\fP\^: BOOL -.IP -\fIid-base\fP\^: XIDBASE -.IP -\fIserver-time\fP\^: TIMESTAMP -.IP -\fIrecorded-sequence-number\fP\^: CARD32 -.IP -\fIdata\fP\^: LISTofBYTE -.br -.IP -Errors: -.PN Match , -.PN RecordContext -.LP -This request enables data transfer between the recording client -and the extension and returns the protocol data the recording client -has previously expressed interest in. Typically, this request is -executed by the recording client over the data connection. -.LP -If the client is registered on the \fIcontext\fP, it is unregistered -before any recording begins. -.LP -Once the server receives this request, it begins intercepting -and reporting to the recording client all core and extension protocol -received from or sent to clients registered with the RC that the -recording client has expressed interest in. All intercepted protocol data -is returned in the byte-order of the recorded client. Therefore, -recording clients are responsible for all byte swapping, if required. -More than one recording client cannot enable data transfer on the -same RC at the same time. Multiple intercepted requests, replies, -events and errors might be packaged into a single reply before -being returned to the recording clients. -.LP -The -\fIcategory\fP field determines the possible -types of the data. -When a context is enabled, the server will immediately send a reply of -category -.PN StartOfData -to notify the client that recording is enabled. -A category of -.PN FromClient -means the data are from the client -(requests); -.PN FromServer -means data are from the server (replies, -errors, events, or device events). -For a new client, the category is -.PN ClientStarted -and the data are the connection setup reply. -When -the recorded client connection is closed, \fIcategory\fP is -set to the value -.PN ClientDied -and no protocol is included in this reply. -When the disable request is made over the control connection, -a final reply is sent over the data connection with category -.PN EndOfData -and no protocol. -.LP -The \fIelement-header\fP field returns the value currently set for the -context, which tells what header information precedes each recorded -protocol element in this reply. -.LP -The \fIclient-swapped\fP field is -.PN True -if the byte order of -the protocol being recorded -is swapped -relative to the recording client; -otherwise, \fIclient-swapped\fP is -.PN False . -The recorded protocol -is in the byte order of the client being -recorded; device events are in the byte order of the -recording client. -For replies of category -.PN StartOfData -and -.PN EndOfData -the -\fIclient-swapped\fP bit is set -according -to the byte order of the server relative to the recording client. -The \fIid-base\fP field is the resource identifier base -sent to the client from the server in the -connection setup reply, and hence, identifies the client being -recorded. The \fIid-base\fP field is 0 (zero) when the protocol -data being -returned are device events. -The \fIserver-time\fP field is set to the time of the -server when the first protocol element in this reply was intercepted. -The \fIserver-time\fP -of reply N+1 is greater than or equal to the \fIserver-time\fP of reply N, -and is greater than or equal to the time of the last protocol -element in reply N. -.LP -The \fIrecorded-sequence-number\fP field is set to the sequence number -of the recorded client's most recent request processed by the server. -.LP -The \fIdata\fP field -contains the raw protocol data being returned to the recording client. -If requested by the \fIelement-header\fP of this record context, each -protocol element may be preceded by a 32-bit timestamp and/or -a 32-bit sequence number. -If present, both the timestamp and sequence number are always in the -byte order of the recording client. -.LP -For the core X events -.PN KeyPress , -.PN KeyRelease , -.PN ButtonPress , -and -.PN ButtonRelease , -the fields of a device event that contain -valid information are \fItime\fP and \fIdetail\fP. -For the core X event -.PN MotionNotify , -the fields of a device event that contain -valid information are \fItime\fP, \fIroot\fP, -\fIroot-x\fP and \fIroot-y\fP. -The \fItime\fP field refers to the time the event was generated by the -device. -.LP -For the extension input device events -.PN DeviceKeyPress , -.PN DeviceKeyRelease , -.PN DeviceButtonPress , -and -.PN DeviceButtonRelease , -the fields of a device event that contain valid information are -\fIdevice\fP, \fItime\fP and \fIdetail\fP. -For -.PN DeviceMotionNotify , -the valid device event fields are -\fIdevice\fP and \fItime\fP. -For the extension input device events -.PN ProximityIn -and -.PN ProximityOut , -the fields of a device event that contain valid -information are \fIdevice\fP and \fItime\fP. -For the extension input device event -.PN DeviceValuator , -the fields of a device event that contain valid information are -\fIdevice\fP, -\fInum_valuators\fP, \fIfirst_valuator\fP, and \fIvaluators\fP. -The \fItime\fP field refers to the time the event was generated by the -device. -.LP -The error -.PN "Match" -is returned when data transfer is already enabled. -When the \fIcontext\fP argument is not valid, a -.PN RecordContext -error results. - -.LP -.PN "RecordDisableContext" -.TA .75i -.ta .75i -.IP -\fIcontext\fP\^: RC -.br -.IP -Errors: -.PN RecordContext -.LP -This request is typically executed by the recording client over the -control connection. This request directs the extension to immediately -send any complete protocol elements currently buffered, -to send a final reply with category -.PN EndOfData , -and to discontinue -data transfer between the extension and the recording client. -Protocol reporting is disabled -on the data connection that is currently enabled for the given -\fIcontext\fP. Once the extension completes -processing this request, no additional recorded protocol will -be reported to the recording client. If a data connection is not -currently enabled when this request is executed, then this request has -no affect on the state of data transfer. -An RC is disabled automatically when the connection to the enabling -client is closed down. -.LP -When the \fIcontext\fP argument is not valid, a -.PN RecordContext -error results. - -.LP -.PN "RecordFreeContext" -.TA .75i -.ta .75i -.IP -\fIcontext \fP\^: RC -.br -.IP -Errors: -.PN RecordContext -.LP -This request deletes the association between the resource ID and the -RC and destroys the RC. -If a client has enabled data transfer on this \fIcontext\fP, the actions -described in -.PN RecordDisableContext -are performed before the \fIcontext\fP -is freed. -.LP -An RC is destroyed automatically when the connection to the creating client -is closed down and the close-down mode is \fBDestroyAll\fP. When the -\fIcontext\fP argument is not valid, a -.PN RecordContext -error results. - -.NH 1 -Encoding -.XS -\*(SN Encoding -.XE -.LP -Please refer to the X11 Protocol Encoding document as this document uses -conventions established there. -.LP -The name of this extension is \*QRECORD\*U. -.LP -.NH 2 -Types -.LP -RC: CARD32 -.LP -.DS 0 -.TA .2i 1.0i 2.0i 3.0i -.ta .2i 1.0i 2.0i 3.0i -.R -RANGE8 - 1 CARD8 first - 1 CARD8 last -.DE -.LP -.DS 0 -.TA .2i 1.0i 2.0i 3.0i -.ta .2i 1.0i 2.0i 3.0i -.R -RANGE16 - 2 CARD16 first - 2 CARD16 last -.DE -.LP -.DS 0 -.TA .2i 1.0i 2.0i 3.0i -.ta .2i 1.0i 2.0i 3.0i -.R -EXTRANGE - 2 RANGE8 major - 4 RANGE16 minor -.DE -.LP -.DS 0 -.TA .2i 1.0i 2.0i 3.0i -.ta .2i 1.0i 2.0i 3.0i -.R -RECORDRANGE - 2 RANGE8 core-requests - 2 RANGE8 core-replies - 6 EXTRANGE ext-requests - 6 EXTRANGE ext-replies - 2 RANGE8 delivered-events - 2 RANGE8 device-events - 2 RANGE8 errors - 1 BOOL client-started - 1 BOOL client-died -.DE -.LP -.DS 0 -.TA .2i 1.0i 2.0i 3.0i -.ta .2i 1.0i 2.0i 3.0i -ELEMENT_HEADER - 1 CARD8 - 0x01 from-server-time - 0x02 from-client-time - 0x04 from-client-sequence -.DE -.LP -XIDBASE: CARD32 -.LP -.DS 0 -.TA .2i 1.0i 2.0i 3.0i -.ta .2i 1.0i 2.0i 3.0i -.R -CLIENTSPEC - 4 XIDBASE client-id-base - 1 CurrentClients - 2 FutureClients - 3 AllClients -.DE -.LP -.DS 0 -.TA .2i 1.0i 2.0i 3.0i -.ta .2i 1.0i 2.0i 3.0i -.R -CLIENT_INFO - 4 CLIENTSPEC client-resource - 4 CARD32 n, number of record ranges in intercepted-protocol - 24n LISTofRECORDRANGE intercepted-protocol -.DE -.NH 2 -Errors -.LP -.DS 0 -.TA .2i 1.0i 2.0i 3.0i -.ta .2i 1.0i 2.0i 3.0i -.R -.PN RecordContext - 1 0 Error - 1 CARD8 extension's base error code + 0 - 2 CARD16 sequence number - 4 CARD32 invalid record context - 24 unused -.DE -.NH 2 -Requests -.LP -.DS 0 -.TA .2i 1.0i 2.0i 3.0i -.ta .2i 1.0i 2.0i 3.0i -.R -.PN RecordQueryVersion - 1 CARD8 major opcode - 1 0 minor opcode - 2 2 request length - 2 CARD16 major version - 2 CARD16 minor version - => - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 0 reply length - 2 CARD16 major version - 2 CARD16 minor version - 20 unused -.DE -.LP -.DS 0 -.TA .2i 1.0i 2.0i 3.0i -.ta .2i 1.0i 2.0i 3.0i -.R -.PN RecordCreateContext - 1 CARD8 major opcode - 1 1 minor opcode - 2 5+m+6n request length - 4 RC context - 1 ELEMENT_HEADER element-header - 3 unused - 4 CARD32 m, number of client-specifiers - 4 CARD32 n, number of ranges - 4m LISTofCLIENTSPEC client-specifiers - 24n LISTofRECORDRANGE ranges -.DE -.LP -.DS 0 -.TA .2i 1.0i 2.0i 3.0i -.ta .2i 1.0i 2.0i 3.0i -.R -.PN RecordRegisterClients - 1 CARD8 major opcode - 1 2 minor opcode - 2 5+m+6n request length - 4 RC context - 1 ELEMENT_HEADER element-header - 3 unused - 4 CARD32 m, number of client-specifiers - 4 CARD32 n, number of ranges - 4m LISTofCLIENTSPEC client-specifiers - 24n LISTofRECORDRANGE ranges -.DE -.LP -.DS 0 -.TA .2i 1.0i 2.0i 3.0i -.ta .2i 1.0i 2.0i 3.0i -.R -.PN RecordUnregisterClients - 1 CARD8 major opcode - 1 3 minor opcode - 2 3+m request length - 4 RC context - 4 CARD32 m, number of client-specifiers - 4m LISTofCLIENTSPEC client-specifiers -.DE -.LP -.DS 0 -.TA .2i 1.0i 2.0i 3.0i -.ta .2i 1.0i 2.0i 3.0i -.R -.PN RecordGetContext - 1 CARD8 major opcode - 1 4 minor opcode - 2 2 request length - 4 RC context - => - 1 1 Reply - 1 BOOL enabled - 2 CARD16 sequence number - 4 j reply length - 1 ELEMENT_HEADER element-header - 3 unused - 4 CARD32 n, number of intercepted-clients - 16 unused - 4j LISTofCLIENT_INFO intercepted-clients -.DE -.LP -.DS 0 -.TA .2i 1.0i 2.0i 3.0i -.ta .2i 1.0i 2.0i 3.0i -.R -.PN RecordEnableContext - 1 CARD8 major opcode - 1 5 minor opcode - 2 2 request length - 4 RC context - =>+ - 1 1 Reply - 1 category - 0 FromServer - 1 FromClient - 2 ClientStarted - 3 ClientDied - 4 StartOfData - 5 EndOfData - 2 CARD16 sequence number - 4 n reply length - 1 ELEMENT_HEADER element-header - 1 BOOL client-swapped - 2 unused - 4 XIDBASE id-base - 4 TIMESTAMP server-time - 4 CARD32 recorded-sequence-number - 8 unused - 4n BYTE data -.DE -.LP -.DS 0 -.TA .2i 1.0i 2.0i 3.0i -.ta .2i 1.0i 2.0i 3.0i -.R -.PN RecordDisableContext - 1 CARD8 major opcode - 1 6 minor opcode - 2 2 request length - 4 RC context -.DE -.LP -.DS 0 -.TA .2i 1.0i 2.0i 3.0i -.ta .2i 1.0i 2.0i 3.0i -.R -.PN RecordFreeContext - 1 CARD8 major opcode - 1 7 minor opcode - 2 2 request length - 4 RC context -.DE diff --git a/doc/xorg-docs/specs/Xext/recordlib.ms b/doc/xorg-docs/specs/Xext/recordlib.ms deleted file mode 100644 index c9fe8e07b..000000000 --- a/doc/xorg-docs/specs/Xext/recordlib.ms +++ /dev/null @@ -1,1409 +0,0 @@ -.\" Record Extension Library, v1.13 -.\" Use -ms and macros.t -.\" edited for DP edits and code consistency w/ core protocol/xlib 4/1/96 -.\" $Xorg: recordlib.ms,v 1.3 2000/08/17 19:42:36 cpqbld Exp $ -.\" $XdotOrg: xc/doc/specs/Xext/recordlib.ms,v 1.2 2004/04/23 18:42:18 eich Exp $ -.\" ----------------------------------------------- -.de Ip -.IP \(bu 5 -.. -.de sC \" start change (gildea). arg is issue number -.mc \s+5\(br\s0\" \" make tall enough to span paragraph skip -.if !^\\$1^^ \{\ -'sp -1 -.lt +\w'000'u+\w'\s-2\&\\$1\s0'u -.tl !!!\v'\n(.vu'\s-2\&\\$1\s0! -.lt -\w'000'u+\w'\s-2\&\\$1\s0'u -.\} -.. -.de eC \" end change -.if \\n(.u .mc \s+5\(br\s0\" ensure it appears on the last line -.mc -.. -.\" -.hw XRecord-Register-Clients XRecord-Unregister-Clients -.hw XRecord-Intercept-Data XRecord-Query-Version XRecord-Process-Replies -.hw XRecord-EndOfData -.hw XButton-Released-Event XMotion-Event -.hw XRecord-Context -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.fi -.ps 11 -.nr PS 11 -\& -.sp 8 -.ce 50 -\s+3\fBX Record Extension Library\fP\s0 -.sp -\fBVersion 1.13\fP -.sp -\fBX Consortium Standard\fP -.sp -\fBX Version 11, Release 6.8\fP -.sp 6 -Martha Zimet -Network Computing Devices, Inc. -.sp 6 -edited by -Stephen Gildea -X Consortium -.ce 0 -.bp -.br -\& -.sp 13 -.ps 9 -.nr PS 9 -.fi -.LP -Copyright \(co 1994 Network Computing Devices, Inc. -.LP -Permission to use, copy, modify, distribute, and sell this -documentation for any purpose is hereby granted without fee, -provided that the above copyright notice and this permission -notice appear in all copies. Network Computing Devices, Inc. -makes no representations about the suitability for any purpose -of the information in this document. This documentation is -provided \*Qas is\*U without express or implied warranty. -.LP -Copyright \(co 1995 X Consortium -.LP -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -\*QSoftware\*U), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: -.LP -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED \*QAS IS\*U, WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. -.LP -Except as contained in this notice, the name of the X Consortium and -shall not be used in advertising or otherwise to promote the sale, use -or other dealings in this Software without prior written authorization -from the X Consortium. -.ps 11 -.nr PS 11 -.P1 -.nr LL 6.5i -.nr LT 6.5i -.nr FL 6.5i -.ll 6.5i -.EH '\fBX Record Extension Library, Version 1.13\fP''\fBX11, Release 6.8\fP' -.OH '\fBX11, Release 6.8\fP''\fBX Record Extension Library, Version 1.13\fP' -.bp 1 -.EF ''\fB\\\\n(PN\fP'' -.OF ''\fB\\\\n(PN\fP'' -.hy 14 - -.NH 1 -Record Extension Overview -.XS -\*(SN Record Extension Overview -.XE -.LP -The purpose -of this extension is to support the recording and reporting of all -core X protocol and arbitrary X extension protocol. This first section -gives an overview of the Record extension. The following sections -describe how to use the Record extension library. -.NH 2 -Synchronous Playback -.XS -\*(SN Synchronous Playback -.XE -.LP -Environment information is generally provided to an X-based playback -mechanism, which might use the XTest extension to synthesize input events. -This synchronization information defines the X state prior to -event synthesis (for example, location of the cursor, window locations and -sizes, installed colormap, window manager running, and so on) and the -consequences that occur after the playback mechanism synthesizes -the event. If the user moves the mouse into the icon window and -presses and releases a mouse button, the device events -.PN MotionNotify , -.PN ButtonPress , -and -.PN ButtonRelease -are generated by the X server. -Because -X follows an event-driven model, there are consequences that -follow from -the user actions, or device events, that are in the form of X protocol. -As a result of the previous user actions, the client could -generate requests such as -.PN ImageText8 -and -.PN PolyLine -to the X server, -or the X server could send non-device events such as -.PN Expose -and -.PN MapNotify -to the client window. Both the requests and non-device events that -result from user actions are known as \fIconsequences\fP, which -can be used as a synchronization, or control point, during playback. -That is, the playback mechanism does not generate a specific synthesized -event until its matching synchronization condition occurs (for example, -the window is mapped or unmapped, the cursor changes, a text string -displays, and so on) -.LP -Because -it cannot be predicted what synchronization information is -required during playback, the Record extension makes no assumptions -about the intended use of the recorded data. Facilities exist to -record any core X protocol or X extension protocol. -Therefore, Record does not enforce a specific synchronization -methodology. -.NH 2 -Design Approach -.XS -\*(SN Design Approach -.XE -.LP -The design approach of the extension is to record core X protocol -and arbitrary X extension protocol entirely within the X server -itself. When the extension has been requested to record specific -protocol by one or more recording clients, the protocol data is formatted -and returned to the recording clients. The extension provides a mechanism -for capturing all events, including input device events that do not go to any -clients. -.NH 2 -Record Clients -.XS -\*(SN Record Clients -.XE -.LP -The recommended -communication model for a Record application is to open two -connections to the server\*-one connection for recording control -and one connection for reading recorded protocol data. -.LP -Information about recording (for example, what clients to record, -what protocol to record for each client, and so on) is stored in -resources called \fIrecord contexts\fP\^ -(type -.PN XRecordContext ). -Most Record extension functions take a record context as an argument. -Although in theory it is possible -to share record contexts between applications, -it is expected that -applications will use their own context when performing recording -operations. -.LP -A client that wishes to record X protocol does so through the library -functions defined in -section 3 \*QLibrary Extension Requests\*U. A typical sequence -of requests that a client would make is as follows: -.Ip -.PN XRecordQueryVersion -\- query the extension protocol version. -.Ip -.PN XRecordCreateContext -\- request that the server create a record context -for access by this client, and express interest in clients and protocol -to be recorded. This request returns an -.PN XRecordContext , -which is an XID that is used -by most other extension requests to identify the specified context. -.Ip -.PN XRecordEnableContext -\- begin the recording and reporting of protocol -data. -.Ip -.PN XRecordDisableContext -\- end the recording and reporting of protocol data. -.Ip -.PN XRecordFreeContext -\- free the record context. -.LP -The header for this library is -.Pn < X11/extensions/record.h >. -All identifiers defined in the interface are supplied by this header -and are prefixed with \*QXRecord\*U. The -.PN Xtst -library contains the -.PN XRecord -functions. -.NH 1 -Common Arguments -.XS -\*(SN What Is Recorded -.XE -.LP -The Record extension functions -.PN XRecordCreateContext -and -.PN XRecordRegisterClients -allow applications to specify the following: -.Ip -Individual clients or sets of clients to record -.Ip -Ranges of core X protocol and X extension protocol to record for -each client -.LP -Protocol in the ranges specified by the recording client -will be recorded by the server. The device_events -protocol type can be specified by a recording -client although it may not be sent to a recorded client. -The device_events type differs from delivered_events, -which also can be specified by a recording client; -delivered_events are actually delivered to one or more clients. -These event types are discussed in section 2.3 \*QProtocol Ranges\*U. -.LP -The Record extension functions -.PN XRecordCreateContext -and -.PN XRecordRegisterClients -have the common arguments -datum_flags, -clients, and ranges, which specify -whether server time and/or client -sequence number should precede protocol elements, -the clients or client set to -record, and the protocol ranges to record, respectively. -These are discussed in the following sections. -.NH 2 -Datum Flags -.LP -The datum_flags argument is a set of flags OR'ed together to -specify options for the record context. Specify zero to disable all -the options. -.LP -The -.PN XRecordFromServerTime -flag specifies that -.PN XRecordInterceptData -structures with a category of -.PN XRecordFromServer -will have a server_time field specific to each -protocol element. -.LP -The -.PN XRecordFromClientTime -flag specifies that -.PN XRecordInterceptData -structures with a category of -.PN XRecordFromClient -will have a server_time field specific to each protocol element. -.LP -The -.PN XRecordFromClientSequence -flag specifies that -.PN XRecordInterceptData -structures with a category of -.PN XRecordFromClient -or -.PN XRecordClientDied -will have a valid client_seq field. -.NH 2 -Selecting Clients -.LP -The clients argument is a pointer to an array of -.PN XRecordClientSpec . -.PN XRecordClientSpec -is an integral type that holds a resource ID, -a client resource ID base, or one -of the \fIclient set\fP constants defined below. -.LP -Duplicate -elements in the array are ignored by the functions, and if any element -in the array is not valid, a -.PN "BadMatch" -error results. -A resource ID references the client that created that resource. -The client set may be one of the following constants: -.PN XRecordCurrentClients , -.PN XRecordFutureClients , -or -.PN XRecordAllClients . -.LP -If the element in the array identifies a particular client, protocol -specified by the ranges argument will be recorded by the server. -The recorded protocol data will not be returned to the recording client -until the record context has been enabled. This is described in section -3.4 \*QData Transfer\*U. -.LP -If the element is -.PN XRecordCurrentClients , -the protocol ranges specified by the -ranges argument, except for device_events, are associated with -each current client connection. If the element is -.PN XRecordFutureClients , -the protocol ranges specified by the ranges argument are associated -with each new client connection. If the element is -.PN XRecordAllClients , -the protocol ranges specified by the ranges argument are associated -with each current client connection and with each new client connection. -.LP -When the context is enabled, the data connection is unregistered if it -was registered. -If the context is enabled, -.PN XRecordCurrentClients -and -.PN XRecordAllClients -silently exclude the recording data connection. -It is an error to explicitly register the data connection. -.NH 2 -Protocol Ranges -.LP -The functions -.PN XRecordCreateContext -and -.PN XRecordRegisterClients -have another common argument, ranges, -which is an array of pointers to -.PN XRecordRange -structures. Each structure contains ranges of numeric values for each -of the protocol types that can be specified and recorded individually -by the Record extension. -An -.PN XRecordRange -structure must be allocated -by the Record library using the -.PN XRecordAllocRange -function. -.LP -The -.PN XRecordRange -typedef is a structure with the following members: -.LP -.sM -.Ds 0 -.TA .5i 3.0i -.ta .5i 3.0i -XRecordRange: - XRecordRange8 core_requests /* core X requests */ - XRecordRange8 core_replies /* core X replies */ - XRecordExtRange ext_requests /* extension requests */ - XRecordExtRange ext_replies /* extension replies */ - XRecordRange8 delivered_events /* delivered core and ext events */ - XRecordRange8 device_events /* all core and ext device events */ - XRecordRange8 errors /* core X and X ext errors */ - Bool client_started /* connection setup reply from server */ - Bool client_died /* notification of client disconnect */ -.De -.LP -.eM -The types used in -.PN XRecordRange -members are defined as follows. -The -.PN XRecordRange8 -typedef is a structure with the following members: -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -XRecordRange8: - unsigned char first - unsigned char last -.De -.LP -.eM -The -.PN XRecordRange16 -typedef is a structure with the following members: -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -XRecordRange16: - unsigned short first - unsigned short last -.De -.LP -.eM -The -.PN XRecordExtRange -typedef is a structure with the following members: -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -XRecordExtRange: - XRecordRange8 ext_major - XRecordRange16 ext_minor -.De -.LP -.eM -If any of the values specified in -.PN XRecordRange -is invalid, a -.PN "BadValue" -error results. -.LP -The core_requests member specifies the range of core X protocol -requests to record. Core X protocol requests with a major opcode -that is between first and last, inclusive, will be -recorded. A -.PN "BadValue" -error results -if the value of first is greater than the value of last. -If the values of both first and last are zero, no core -X protocol requests will be recorded. -.LP -The core_replies member specifies the range of replies resulting -from core X protocol requests to record. Replies that result from -core X protocol requests with a major opcode between first -and last, inclusive, will be recorded. A -.PN "BadValue" -error results -if the value of first is greater than the value of last. -If the values of both first and last are zero, -no core X protocol replies will be recorded. -.LP -The ext_requests member specifies the range of X extension -requests to record. X extension requests with a major opcode -between ext_major.first and ext_major.last, and with a -minor opcode -between ext_minor.first and ext_minor.last, inclusive, will be -recorded. A -.PN "BadValue" -error results -if the value of ext_major.first is greater than the value of -ext_major.last or if the value of ext_minor.first is -greater than the value of ext_minor.last. If the values of both -ext_major.first -and ext_major.last are zero, -no X extension requests will be recorded. -.LP -The ext_replies member specifies the range of replies resulting -from X extension requests to record. Replies that result from an X -extension request with a major opcode between -ext_major.first and -ext_major.last, and a minor opcode that is between -ext_minor.first and ext_minor.last will be recorded. A -.PN "BadValue" -error results -if the value of ext_major.first is greater than the value of -ext_major.last or if the value of ext_minor.first is greater than -the value of ext_minor.last. If the values of both -ext_major.first and ext_major.last -are zero, no X extension -replies will be recorded. -.LP -The delivered_events member specifies the range of both core -X events and X extension events to record. These events are -delivered to at least one client. Core X events and X extension events -with a code value between first and -last inclusive will be recorded. A -.PN "BadValue" -error results -if the value of first -is greater than the value of last. If the values of first -and last are zero, no events will be recorded. -.LP -The device_events member specifies the range of -both core X device events and X extension device events -to record. These events may or may not be delivered to a client. -Core X device events and X extension device events with a code value -between first and last inclusive that are not delivered to any -clients will be recorded. A -.PN "BadValue" -error results -if the value of first -is greater than the value of last. A -.PN "BadValue" -error results -if first -is less than two or last is less than two, except that if -first and last are zero, no events will be -recorded. -.LP -The errors member specifies the range of both core X errors and X -extension errors to record. Core X errors and X extension errors with -a code value between first and last inclusive will be -recorded. A -.PN "BadValue" -error results -if the value of first -is greater than the value of last. If the values of first and -last are zero, no errors will be recorded. -.LP -A value of -.PN True -for the client_started member specifies the -connection setup reply from the server to new clients. -If -.PN False , -the connection setup reply is -not specified by this -.PN XRecordRange . -.LP -A value of -.PN True -for the client_died member specifies -notification when a client disconnects. -If -.PN False , -notification when a client disconnects is -not specified by this -.PN XRecordRange . -.NH 1 -Library Extension Requests -.XS -\*(SN Library Extension Requests -.XE -.LP -Recording operations are accessed by programs through the use of -new protocol requests. The following functions are provided as extensions -to Xlib. An Xlib error results if -an extension request is made to an X server that does not support the -Record extension. Note that any of the extension protocol requests may generate -.PN BadAlloc -or -.PN BadLength -errors. -.NH 2 -Query Extension Version -.XS -\*(SN Query Extension Version -.XE -.LP -An application uses the -.PN XRecordQueryVersion -function to determine -the version of the Record extension protocol supported by an X server. -.sM -.FD 0 -Status -XRecordQueryVersion\^(Display *\fIdisplay\fP, int *\fIcmajor_return\fP, \ -int *\fIcminor_return\fP) -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP "\fIcmajor_return\fP" 1i -Returns the extension protocol major version in use. -.IP "\fIcminor_return\fP" 1i -Returns the extension protocol minor version in use. -.LP -.eM -The -.PN XRecordQueryVersion -function returns the major and minor -protocol version numbers supported by the server. -.PN XRecordQueryVersion -returns nonzero (success) only if the returned version numbers are -common to both the library and the -server; otherwise, it returns zero. -.NH 2 -Create and Modify Context -.XS -\*(SN Create and Modify Context -.XE -.LP -An application uses the -.PN XRecordCreateContext -function to create a -record context. At the time the record context is -created by the recording client, the clients to be recorded and the -protocol to record for each client may be specified. -.LP -.sM -.FD 0 -XRecordContext -XRecordCreateContext\^(Display *\fIdisplay\fP, int \fIdatum_flags\fP, \ -XRecordClientSpec *\fIclients\fP, int \fInclients\fP, -.br - XRecordRange **\fIranges\fP, int \fInranges\fP) -.FN -.IP "\fIdisplay\fP" 1i -Specifies the connection to the X server. -.IP \fIdatum_flags\fP 1i -Specifies whether detailed time or sequence info should be sent. -.IP "\fIclients\fP" 1i -Specifies the clients to record. -.IP "\fInclients\fP" 1i -Specifies the number of clients. -.IP "\fIranges\fP" 1i -Specifies the protocol ranges to record. -.IP "\fInranges\fP" 1i -Specifies the number of protocol ranges. -.LP -.eM -The -.PN XRecordCreateContext -function creates a record context and returns an -.PN XRecordContext , -which is then used -in the other Record library calls. This request is typically -executed by the recording client over its control connection to -the X server. -The datum_flags specifies whether server time and/or client -sequence number should precede protocol elements recorded by context -(see section 2.1). -When a clients element identifies -a particular client, the client is added to the context and -the protocol to record for that client is set to the union of -all ranges. When a clients element is -.PN XRecordCurrentClients , -.PN XRecordFutureClients , -or -.PN XRecordAllClients , -the actions described in section 2.2 \*QSelecting Clients\*U -are performed. -.LP -.PN XRecordCreateContext -returns zero if the request failed. -.PN XRecordCreateContext -can generate -.PN BadIDChoice , -.PN BadMatch , -and -.PN BadValue -errors. -.LP -The ranges argument is an -.PN XRecordRange * -array, that is, an array -of pointers. The structures the elements point to shall be allocated -by calling -.PN XRecordAllocRange . -.LP -.sM -.FD 0 -XRecordRange * -XRecordAllocRange\^(void) -.FN -.LP -.eM -The -.PN XRecordAllocRange -function -allocates and returns an -.PN XRecordRange -structure. -The structure is initialized to specify no protocol. -The function returns NULL if the structure allocation fails. -The application can free the structure by calling -.PN XFree . -.NH 3 -Additions -.LP -An application uses the -.PN XRecordRegisterClients -function to modify a previously created -record context, by adding clients or modifying the recorded protocol, -typically over its control connection to the X server. -.LP -.sM -.FD 0 -Status -XRecordRegisterClients\^(Display *\fIdisplay\fP, XRecordContext \fIcontext\fP, \ -int \fIdatum_flags\fP, -.br - XRecordClientSpec *\fIclients\fP, int \fInclients\fP, \ -XRecordRange **\fIranges\fP, int \fInranges\fP) -.FN -.IP "\fIdisplay\fP " 1i -Specifies the connection to the X server. -.IP "\fIcontext\fP" 1i -Specifies the record context to modify. -.IP \fIdatum_flags\fP 1i -Specifies whether detailed time or sequence info should be sent. -.IP "\fIclients\fP" 1i -Specifies the clients to record. -.IP "\fInclients\fP" 1i -Specifies the number of clients. -.IP "\fIranges\fP" 1i -Specifies the protocol ranges to record. -.IP "\fInranges\fP" 1i -Specifies the number of protocol ranges. -.LP -.eM -The datum_flags specifies whether server time and/or client -sequence number should precede protocol elements -for all clients -recorded by context -(see section 2.1). -When a clients element identifies a particular client and the -client is not yet -targeted for recording in the given context, -the client is added to the set of clients to record, and the protocol -to record for that client is set to the union of all ranges. -When the client is -already targeted for recording, the protocol to record for that client -is set to the union of all ranges. When the element is -.PN XRecordCurrentClients , -.PN XRecordFutureClients , -or -.PN XRecordAllClients , -the actions described -in section 2.2 \*QSelecting Clients\*U -are performed. -.LP -.PN XRecordRegisterClients -returns zero if the request failed; otherwise, it -returns nonzero. -.LP -.PN XRecordRegisterClients -can generate -.PN XRecordBadContext , -.PN BadMatch , -and -.PN BadValue -errors. -.NH 3 -Deletions -.LP -An application uses -the -.PN XRecordUnregisterClients -function to delete clients from a -previously created -record context, typically over its control connection to the X server. -.LP -.sM -.FD 0 -Status -XRecordUnregisterClients\^(Display *\fIdisplay\fP, XRecordContext \fIcontext\fP, \ -RecordClientSpec *\fIclients\fP, -.br - int \fInclients\fP\^) -.FN -.IP "\fIdisplay\fP " 1i -Specifies the connection to the X server. -.IP "\fIcontext\fP" 1i -Specifies the record context to modify. -.IP "\fIclients\fP" 1i -Specifies the clients to stop recording. -.IP "\fInclients\fP" 1i -Specifies the number of clients. -.LP -.eM -When an element in clients identifies a particular client, and the -specified client is already targeted for recording in the given -context, the client and the set of protocol to record for that -client are deleted from the context. If the specified client is not -targeted for recording, then no action is performed. -.LP -When the element is -.PN XRecordCurrentClients , -all clients currently targeted -for recording in context and their corresponding sets of -protocol to record are deleted from context. -.LP -When the item is -.PN XRecordFutureClients , -any future client connections will -not automatically be targeted for recording in context. -.LP -When the element is -.PN XRecordAllClients , -all clients currently targeted -for recording in context and their corresponding sets of -protocol to record are deleted from context. Any future -client connections will not automatically be targeted for recording -in context. -.LP -.PN XRecordUnregisterClients -returns zero if the request failed; otherwise, -it returns nonzero. -.LP -.PN XRecordUnregisterClients -can generate -.PN XRecordBadContext , -.PN BadMatch , -and -.PN BadValue -errors. -.NH 2 -Query Context State -.XS -\*(SN Query Context State -.XE -.LP -An application uses the -.PN XRecordGetContext -function to query the -current state of a record context, typically over its control connection -to the X server. -.LP -.sM -.FD 0 -Status -XRecordGetContext\^(Display *\fIdisplay\fP, XRecordContext \fIcontext\fP, \ - XRecordState **\fIstate_return\fP) -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP "\fIcontext\fP" 1i -Specifies the record context to query. -.IP "\fIstate_return\fP" 1i -Specifies the address of a variable into which the function stores a -pointer to the current state of the record context. -.LP -.eM -The -.PN XRecordState -typedef returned by -.PN XRecordGetContext -is a structure -with the following members: -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -XRecordState: - Bool enabled - int datum_flags - unsigned long nclients - XRecordClientInfo **client_info -.De -.LP -.eM -The enabled member is set to the state of data transfer and is -.PN True -when the recording client has asked that recorded data be sent; -otherwise it is -.PN False . -The datum_flags member is set to the value of these flags for -this context. -The nclients member is set to the -number of -.PN XRecordClientInfo -structures returned. The client_info member -is an array of pointers to -.PN XRecordClientInfo -structures that contain -the protocol -to record for each targeted client. -The -.PN XRecordClientInfo -typedef is a structure with the following members: -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -XRecordClientInfo: - XRecordClientSpec client - unsigned long nranges - XRecordRange **ranges -.De -.LP -.eM -The client member either identifies a client targeted for recording -or is set to -.PN XRecordFutureClients -to describe how future clients -will be automatically targeted for recording. -The nranges member is set to the number of protocol -ranges to be recorded for the specified client. The ranges member -is an array of pointers to -.PN XRecordRange -structures, which specify the -protocol ranges to record. -.LP -.PN XRecordGetContext -returns zero if the request failed; otherwise, it -returns nonzero. -The context argument must specify a valid -.PN XRecordContext -or a -.PN XRecordBadContext -error results. -.LP -Recording clients should use the -.PN XRecordFreeState -function to free the state data returned by -.PN XRecordGetContext . -.LP -.sM -.FD 0 -void -XRecordFreeState\^(XRecordState *\fIstate\fP) -.FN -.IP "\fIstate\fP" 1i -Specifies the structure that is to be freed. -.LP -.eM -.PN XRecordFreeState -frees the data pointed to by state. -If the argument does not match an -.PN XRecordState -pointer -returned from a successful call to -.PN XRecordGetContext , -or if -.PN XRecordFreeState -has already been -called with it, the behavior is undefined. -.NH 2 -Data Transfer -.XS -\*(SN Data Transfer -.XE -.LP -An application uses the -.PN XRecordEnableContext -and -.PN XRecordDisableContext -functions to change the state of data transfer -between the X server and the recording client. These functions allow -the application to start recording and reporting of protocol data -and to stop recording and reporting of protocol data, respectively. -.NH 3 -Enable Context -.XS -\*(SN Enable Context -.XE -.LP -To direct the X server to record and report protocol, a program -uses -.PN XRecordEnableContext , -typically over its data connection to the X -server. The reporting of recorded protocol back to the recording client -is handled by the following data structures and procedure definitions. -Each recorded protocol element is reported -to the recording client through an -.PN XRecordInterceptData -typedef, -a structure with the following members: -.LP -.sM -.Ds 0 -.TA .5i -.ta .25i -XRecordInterceptData: - XID id_base - Time server_time - unsigned long client_seq - int category - Bool client_swapped - unsigned char *data - unsigned long data_len -.De -.LP -.eM -The id_base member is set to the resource identifier base sent to the -client in the connection setup reply and therefore identifies the client -being recorded, except when the recorded protocol data is a device -event that may have not been delivered to a client. In this case, -id_base is set to zero. The server_time member -is set to the time of the server when the protocol was recorded. -It is the time that was attached to this protocol element in the reply, -if so specified by datum_flags, -or else the time from the header of the reply that contained -this protocol element. -The client_seq member is the sequence number of the recorded -client's most recent request processed by the server at the time this -protocol element was recorded, if this information were included in the -recorded data; otherwise client_seq is 0. -The category member is set to one of the following values: -.PN XRecordStartOfData , -.PN XRecordFromServer , -.PN XRecordFromClient , -.PN XRecordClientStarted , -.PN XRecordClientDied , -or -.PN XRecordEndOfData . -.PN XRecordStartOfData -is immediately sent as the first reply to confirm -that the context is enabled. -.PN XRecordFromClient -indicates the protocol -data is from the recorded client to the server (requests). -.PN XRecordFromServer -indicates the protocol data is from the server to the recorded client -(replies, errors, events, or device events). -.PN XRecordClientStarted -indicates that the protocol data is the -connection setup reply from the server. -.PN XRecordClientDied -indicates that the recorded -client has closed its connection -to the X server; there is no protocol data. -.PN XRecordEndOfData -indicates that the context has been disabled and that -this is the last datum. It does not correspond to any protocol or -state change in a recorded client. There is no protocol data. -.LP -The client_swapped member is set to -.PN True -if the byte order of the client being recorded is swapped relative to -the recording client; otherwise, it is set to -.PN False . -All -recorded protocol data is returned in the byte order of the recorded -client. Therefore, recording clients are responsible for all byte swapping, -if required. -Device events are in the byte order of the -recording client. -For replies of category -.PN XRecordStartOfData -and -.PN XRecordEndOfData , -client_swapped is set -according -to the byte order of the server relative to the recording client. -.LP -The data member contains the actual recorded -protocol data. -When category is set to -.PN XRecordStartOfData , -.PN XRecordClientDied , -or -.PN XRecordEndOfData , -no protocol -data are contained in data. -.\" -.LP -.\" copied exactly from the protocol document -For the core X events -.PN KeyPress , -.PN KeyRelease , -.PN ButtonPress , -and -.PN ButtonRelease , -the fields of a device event that contain -valid information are time and detail. -For the core X event -.PN MotionNotify , -the fields of a device event that contain -valid information are time, root, -root-x and root-y. -The time field refers to the time the event was generated by the -device. -.LP -For the extension input device events -.PN DeviceKeyPress , -.PN DeviceKeyRelease , -.PN DeviceButtonPress , -and -.PN DeviceButtonRelease , -the fields of a device event that contain valid information are -device, time, and detail. -For -.PN DeviceMotionNotify , -the valid device event fields are -device and time. -For the extension input device events -.PN ProximityIn -and -.PN ProximityOut , -the fields of a device event that contain valid -information are device and time. -For the extension input device event -.PN DeviceValuator , -the fields of a device event that contain valid information are -device, -num_valuators, first_valuator, and valuators. -The time field refers to the time the event was generated by the -device. -.\" -.LP -The data_len member is set to the -length of the actual recorded protocol data in 4-byte units. -.LP -When the context has been enabled, protocol data the recording client has -previously expressed interest in is recorded and returned to the -recording client via multiple replies. -Because -the X server batches -the recorded data, more than one protocol element may be contained -in the same reply packet. -When a reply is received, a procedure of type -.PN XRecordInterceptProc -is -called for each protocol -element in the reply. -.LP -.sM -.FD 0 -typedef void\^(*XRecordInterceptProc) -.br - (XPointer \fIclosure\fP, XRecordInterceptData *\fIrecorded_data\fP) -.FN -.IP "\fIclosure\fP" 1i -Pointer that was passed in when the context was enabled. -.IP "\fIrecorded_data\fP" 1i -A protocol element recorded by the server extension. -.LP -.eM -This callback -may use the control display connection (or any display connection -other than the data connection). -.LP -Recording clients should use the -.PN XRecordFreeData -function -to free the -.PN XRecordInterceptData -structure. -.LP -.sM -.FD 0 -Status -XRecordEnableContext\^(Display *\fIdisplay\fP, XRecordContext \fIcontext\fP, \ -XRecordInterceptProc \fIcallback\fP, -.br - XPointer \fIclosure\fP) -.FN -.IP "\fIdisplay\fP" 1i -Specifies the connection to the X server. -.IP "\fIcontext\fP" 1i -Specifies the record context to enable. -.IP "\fIcallback\fP" 1i -Specifies the function to be called for each protocol element received. -.IP "\fIclosure\fP" 1i -Specifies data passed to \fIcallback.\fP -.LP -.eM -.PN XRecordEnableContext -enables data transfer between the recording client and -the X server. All core and extension protocol received from or sent to -targeted clients that the recording client has expressed -interest in will be recorded and reported to the recording client. -.LP -.PN XRecordEnableContext -returns zero if the request failed; otherwise, it -returns nonzero. The context argument must specify a valid -.PN XRecordContext -or a -.PN XRecordBadContext -error results. The error -.PN BadMatch -results when data transfer is already enabled -on the given context. -.NH 3 -Enable Context Asynchronously -.XS -\*(SN Enable Context Asynchronously -.XE -.LP -Because -.PN XRecordEnableContext -does not return until -.PN XRecordDisableContext -is executed on the control connection, a nonblocking interface in -addition to -.PN XRecordEnableContext -is provided. This interface also -enables data transfer; however, it does not block. -.LP -This interface is defined as follows: -.LP -.sM -.FD 0 -Status -XRecordEnableContextAsync\^(Display *\fIdisplay\fP, XRecordContext \fIcontext\fP, -.br - XRecordInterceptProc \fIcallback\fP, XPointer \fIclosure\fP) -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcontext\fP 1i -Specifies the record context to enable. -.IP \fIcallback\fP 1i -Specifies the function to be called for each protocol element received. -.IP \fIclosure\fP 1i -Data passed to \fIcallback\fP. -.LP -.eM -.PN XRecordEnableContextAsync -enables data transfer between the recording -client and the X server just as -.PN XRecordEnableContext -does. -Unlike -.PN XRecordEnableContext , -it does not wait for the context to be disabled -before returning; -.PN XRecordEnableContextAsync -returns as soon as the -.PN XRecordStartOfData -reply has been received and processed. -.LP -.PN XRecordEnableContextAsync -returns zero if it could not allocate the -necessary memory and nonzero if it sent the request successfully to -the server. The context argument must specify a valid -.PN XRecordContext -or a -.PN XRecordBadContext -error results. The error -.PN BadMatch -results when data transfer is already enabled. -.LP -Each time it reads data from the server connection, Xlib will check -for incoming replies and call \fIcallback\fP as necessary. The -application may direct Xlib explicitly to check for Record data with -the -.PN XRecordProcessReplies -function. -.LP -.sM -.FD 0 -void -XRecordProcessReplies\^(Display *\fIdisplay\fP) -.FN -.IP \fIdisplay\fP 11 -Specifies the connection to the X server. -.LP -.eM -.PN XRecordProcessReplies -will check for any replies that have not yet -been processed by the application. The asynchronous callback will be called -as appropriate. -.PN XRecordProcessReplies -returns when all immediately -available replies have been processed. It does not block. -.LP -.sp -To free the data passed to the -.PN XRecordInterceptProc -callback, -use -.PN XRecordFreeData . -.LP -.sM -.FD 0 -void -XRecordFreeData\^(XRecordInterceptData *\fIdata\fP) -.FN -.IP "\fIdata\fP" 1i -Specifies the structure that is to be freed. -.LP -.eM -.PN XRecordFreeData -frees the data pointed to by data. -If the argument does not match an -.PN XRecordInterceptData -pointer earlier -passed to an -.PN XRecordInterceptProc -callback or if -.PN XRecordFreeData -has -already been called with it, the behavior is undefined. -.NH 3 -Disable Context -.XS -\*(SN Disable Context -.XE -.LP -To direct the X server to halt the reporting of recorded protocol, the -program executes -.PN XRecordDisableContext , -typically over its -control connection to the X server. -.LP -.sM -.FD 0 -Status -XRecordDisableContext\^(Display *\fIdisplay\fP, XRecordContext \fIcontext\fP) -.FN -.IP "\fIdisplay\fP" 1i -Specifies the connection to the X server. -.IP "\fIcontext\fP" 1i -Specifies the record context to disable. -.LP -.eM -The -.PN XRecordDisableContext -function disables context, stopping -all recording over its data connection. -Any complete protocol elements for context -that were buffered in the server will be sent to the -recording client rather than being discarded. -If a program attempts to disable an -.PN XRecordContext -that has not been enabled, no action will take place. -.LP -.PN XRecordDisableContext -returns zero if the request failed; otherwise, it -returns nonzero. The context argument must specify a valid -.PN XRecordContext -or an -.PN XRecordBadContext -error results. -.NH 2 -ID Base Mask -.XS -\*(SN ID Base Mask -.XE -.LP -To determine the mask the server uses for the client ID base, use -.PN XRecordIdBaseMask . -.LP -.sM -.FD 0 -XID -XRecordIdBaseMask\^(Display *\fIdisplay\fP) -.FN -.IP "\fIdisplay\fP" 1i -Specifies the connection to the X server. -.LP -.eM -The -.PN XRecordIdBaseMask -function returns the resource ID mask passed to the client by the -server at connection setup. -.NH 2 -Free Context -.XS -\*(SN Free Context -.XE -.LP -Before terminating, the program should request that the server -free the record context. This is done with the -.PN XRecordFreeContext -function, typically over the record client's control connection -to the X server. -.LP -.sM -.FD 0 -Status -XRecordFreeContext\^(Display *\fIdisplay\fP, XRecordContext \fIcontext\fP) -.FN -.IP "\fIdisplay\fP" 1i -Specifies the connection to the X server. -.IP "\fIcontext\fP" 1i -Specifies the record context to free. -.LP -.eM -The -.PN XRecordFreeContext -function frees the given context for the -requesting client. Freeing a record context releases the clients -targeted for recording and their respective protocol ranges to -record. If protocol data is being reported to the recording client, -generally over the data connection to the X server, the reporting -ceases as if -.PN XRecordDisableContext -had been called on the given context. -When a program terminates without freeing -its record context, the X server will automatically free that context -on behalf of the client. -.LP -.PN XRecordFreeContext -returns zero if the request failed; otherwise,it -returns nonzero. The context argument must specify a valid -.PN XRecordContext -or a -.PN XRecordBadContext -error results. -.\" -.\" Local Variables: -.\" time-stamp-start: "^\\.ds Ts " -.\" time-stamp-end: "\\\\\"" -.\" time-stamp-format: "%d %3b %y (%H:%02M)" -.\" End: diff --git a/doc/xorg-docs/specs/Xext/security.tex b/doc/xorg-docs/specs/Xext/security.tex deleted file mode 100644 index 311bb3f79..000000000 --- a/doc/xorg-docs/specs/Xext/security.tex +++ /dev/null @@ -1,830 +0,0 @@ -% $Xorg: security.tex,v 1.3 2000/08/17 19:42:36 cpqbld Exp $ -\documentstyle{article} -\pagestyle{myheadings} -\markboth{Security Extension Specification}{Security Extension Specification} -\setlength{\parindent}{0 pt} -\setlength{\parskip}{6pt} -\setlength{\topsep}{0 pt} - -% Request names are literal symbols; therefore, use the same font for both. -\newcommand{\requestname}[1]{{\tt #1}} -\newcommand{\literal}[1]{\mbox{\tt #1}} - -\newcommand{\encodingsection}[1]{{\bf #1}} -\newcommand{\requestsection}[1]{{\bf #1}} - -% Font treatment of type names differs between protocol and library sections. -\newcommand{\libtypename}[1]{\mbox{\tt #1}} -\newcommand{\typename}[1]{\mbox{\rm #1}} % default font -\newcommand{\typeargname}[1]{\mbox{\rm #1}} % default font -\newcommand{\argname}[1]{\mbox{\it #1}} -\newcommand{\argdecl}[2]{\argname{#1} & : \typename{#2}\\} -\newcommand{\areplyargdecl}[2]{#1 & : \typename{#2}\\} - -\newenvironment{arequest}[1]{\requestsection{#1} \\ \begin{tabular}{ll}}{\end{tabular}} -\newcommand{\areply}{$\Rightarrow$\\} - -\newcommand{\etabstops}{\hspace*{0cm}\=\hspace*{1cm}\=\hspace*{2.5cm}\=\hspace*{2.5cm}\=\kill} - -\newcommand{\eargdecl}[3]{\> #1 \> \typename{#2} \> \> #3 \\} -\newcommand{\econstdecl}[2]{\> \> #1 \> #2 \\} - -\newenvironment{keeptogether}{\vbox \bgroup}{\egroup} - -\newenvironment{erequest}[3]{\pagebreak[3] \begin{keeptogether} \encodingsection{#1} \begin{tabbing} \etabstops \eargdecl{1}{CARD8}{major-opcode} \eargdecl{1}{#2}{minor-opcode} \eargdecl{2}{#3}{request length}}{\end{tabbing} \end{keeptogether}} - -\newenvironment{estruct}[1]{\pagebreak[3] \begin{keeptogether} \encodingsection{#1} \begin{tabbing} \etabstops }{\end{tabbing} \end{keeptogether}} - -\newenvironment{eerror}[1]{\begin{keeptogether} \encodingsection{#1} \begin{tabbing} \etabstops }{\end{tabbing} \end{keeptogether}} - -\newenvironment{etypedef}[1]{\begin{keeptogether} \typename{#1} \begin{tabbing} \etabstops }{\end{tabbing} \end{keeptogether}} - -\newcommand{\cfunctionname}[1]{\mbox{\tt #1}} -\newcommand{\cfunctiondecl}[1]{\mbox{\rm #1}} -\newcommand{\cargdecl}[2]{\penalty -1\typename{#1} \argname{#2}} -\newenvironment{cfunction}[2]{\begin{sloppypar}\begin{keeptogether}\vspace{5mm}\typename{#1}\\ \cfunctiondecl{#2}\ (}{)\end{keeptogether}\end{sloppypar}{\hangafter=2 \hangindent=20pt \raggedright\par}} - -% make things easier with all the long names -\spaceskip .3333em plus 5em -\tolerance=2000 - -\begin{document} - -\title{Security Extension Specification\\Version 7.1\\X11 Release 6.8} -\author{David P. Wiggins\\X Consortium, Inc.} -\date{November 15, 1996} -\maketitle -\thispagestyle{empty} - -\eject - -Copyright \copyright 1996 X Consortium, Inc. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OF -OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of the X Consortium shall -not be used in advertising or otherwise to promote the sale, use or -other dealings in this Software without prior written authorization -from the X Consortium. -\eject - -\section{Introduction} - -The Security extension contains new protocol needed to provide -enhanced X server security. The Security extension should not be -exposed to untrusted clients (defined below). - -\section{Requests} - -\subsection{SecurityQueryVersion} - -This request returns the major and minor version numbers of this -extension. - -% start marker -\begin{arequest}{SecurityQueryVersion} -\argdecl{client-major-version}{CARD16} -\argdecl{client-minor-version}{CARD16} -\areply -\areplyargdecl{server-major-version}{CARD16} -\areplyargdecl{server-minor-version}{CARD16} -\end{arequest} -% end marker - -The client-major-version and client-minor-version -numbers indicate what version of the protocol the client wants the -server to implement. The server-major-version and the -server-minor-version numbers returned indicate the protocol -this extension actually supports. This might not equal the version -sent by the client. An implementation can (but need not) support more -than one version simultaneously. The server-major-version -and server-minor-version allow the creation of future -revisions of the Security protocol that may be -necessary. In general, the major version would increment for -incompatible changes, and the minor version would increment for small, -upward-compatible changes. Servers that support the protocol defined -in this document will return a server-major-version of one -(1), and a server-minor-version of zero (0). - -Clients using the Security extension must issue a -\requestname{SecurityQueryVersion} request before any other Security -request in order to negotiate a compatible protocol version; -otherwise, the client will get undefined behavior (Security may or may -not work). - -\subsection{SecurityGenerateAuthorization} - -This request causes the server to create and return a new -authorization with specific characteristics. Clients can subsequently -connect using the new authorization and will inherit some of the -characteristics of the authorization. - -% start marker -\begin{arequest}{SecurityGenerateAuthorization} -\argdecl{authorization-protocol-name}{STRING8} -\argdecl{authorization-protocol-data}{STRING8} -\argdecl{value-mask}{BITMASK} -\argdecl{value-list}{LISTofVALUE} -\areply -\areplyargdecl{authorization-id}{AUTHID} -\areplyargdecl{authorization-data-return}{STRING8} -\end{arequest} - -Errors: \literal{AuthorizationProtocol, Value, Alloc} -% end marker - -authorization-protocol-name is the name of the authorization method -for which the server should generate a new authorization that -subsequent clients can use to connect to the server. If the -authorization-protocol-name is not one that the server supports, or if -authorization-protocol-data does not make sense for the given -authorization-protocol-name, an AuthorizationProtocol error results. - -authorization-protocol-data is authorization-method specific data that -can be used in some way to generate the authorization. - -Note: in this version of the extension, the only authorization method -required to be supported is ``MIT-MAGIC-COOKIE-1'' with any amount of -authorization-protocol-data (including none). The server may use the -authorization-protocol-data as an additional source of randomness used -to generate the authorization. Other authorization methods can supply -their own interpretation of authorization-protocol-data. - -The value-mask and value-list specify attributes of the authorization -that are to be explicitly initialized. The possible values are: - -\begin{tabular}{lll} -\\ \hline -Attribute & Type & Default \\ \hline -timeout & CARD32 & 60 \\ -group & XID or None & None \\ -trust-level & \{SecurityClientTrusted, \\ - & SecurityClientUntrusted\} & SecurityClientUntrusted \\ -event-mask & SecurityAuthorizationRevoked, \\ - & or None & None \\ \hline -\\ -\end{tabular} - -timeout is the timeout period in seconds for this authorization. A -timeout value of zero means this authorization will never expire. For -non-zero timeout values, when timeout seconds have elapsed since the -last time that the authorization entered the state of having no -connections authorized by it, and if no new connections used the -authorization during that time, the authorization is automatically -purged. (Note that when an authorization is created, it enters the -state of having no connections authorized by it.) Subsequent -connection attempts using that authorization will fail. This is to -facilitate ``fire and forget'' launching of applications. - -group is an application group ID as defined by the Application Group -extension, or None. Any other values will cause a Value error. When -a group is destroyed, all authorizations specifying that group are -revoked as described under the SecurityRevokeAuthorization request. -The Application Group extension attaches additional semantics to the -group. - -trust-level tells whether clients using the authorization are trusted -or untrusted. If trust-level is not one of the constants -SecurityClientTrusted or SecurityClientUntrusted, a Value error -results. - -event-mask defines which events the client is interested in for -this authorization. When the authorization expires or is revoked -if event-mask contains SecurityAuthorizationRevoked a -SecurityAuthorizationRevoked event is reported to the client. - -The SecurityAuthorizationRevoked event contains the following field: - -\begin{tabular}{ll} -\\ \hline -Field & Type \\ \hline -authorization-id & AUTHID \\ \hline -\\ -\end{tabular} - -where authorization-id is the identification of the authorization -that was revoked. - -If an invalid value-mask is specified, a Value error occurs. - -The returned authorization-id is a non-zero value that uniquely -identifies this authorization for use in other requests. The value -space for type AUTHID is not required to be disjoint from values -spaces of other core X types, e.g. resource ids, atoms, visual ids, -and keysyms. Thus, a given numeric value might be both a valid -AUTHID and a valid atom, for example. - -authorization-data-return is the data that a client should use in some -authorization-method-specific way to make a connection with this -authorization. For ``MIT-MAGIC-COOKIE-1,'' authorization-data-return -should be sent as the authorization-protocol-data in the connection setup -message. It is not required that other authorization methods use -authorization-data-return this way. - -\subsection{SecurityRevokeAuthorization} - -This request deletes an authorization created by -SecurityGenerateAuthorization. - -% start marker -\begin{arequest}{SecurityRevokeAuthorization} -\argdecl{authorization-id}{AUTHID} -\end{arequest} - -Errors: \literal{Authorization} -% end marker - -If authorization-id does not name a valid authorization, an -Authorization error occurs. Otherwise, this request kills all clients -currently connected using the authorization specified by -authorization-id. The authorization is deleted from the server's -database, so future attempts by clients to connect with this -authorization will fail. - -\section{Changes to Core Requests} - -A server supporting this extension modifies the handling of some core -requests in the following ways. - -\subsection{Resource ID Usage} - -If an untrusted client makes a request that specifies a resource ID -that is not owned by another untrusted client, a protocol error is -sent to the requesting client indicating that the specified resource -does not exist. The following exceptions apply. An untrusted client -can: - -\begin{enumerate} - -\item use the QueryTree, GetGeometry, and TranslateCoordinates requests -without restriction. -\item use colormap IDs that are returned in the default-colormap -field of its connection setup information in any colormap requests. -\item specify a root window as: - -\begin{enumerate} - -\item the drawable field of CreatePixmap, CreateGC, and QueryBestSize. -\item the parent field of CreateWindow. -\item the window field of CreateColormap, ListProperties, and GetWindowAttributes. -\item the grab-window or confine-to fields of GrabPointer. -\item the grab-window field of UngrabButton. -\item the destination of SendEvent, but only if all of the following -are true. (These conditions cover all the events that the ICCCM -specifies with a root window destination.) - -\begin{enumerate} - -\item The propogate field of SendEvent is False. -\item The event-mask field of SendEvent is ColormapChange, -StructureNotify, or the logical OR of SubstructureRedirect with -SubstructureNotify. -\item The event type being sent is UnmapNotify, ConfigureRequest, -or ClientMessage. - -\end{enumerate} - -\item the window field of ChangeWindowAttributes, but only if -the value-mask contains only event-mask and the corresponding value -is StructureNotify, PropertyChange, or the logical OR of both. - -\end{enumerate} -\end{enumerate} - -ISSUE: are root window exceptions needed for these? WarpPointer, -ReparentWindow (parent), CirculateWindow, QueryPointer (emacs does -this), GetMotionEvents. - -\subsection{Extension Security} - -This extension introduces the notion of secure and insecure -extensions. A secure extension is believed to be safe to use by -untrusted clients; that is, there are no significant security concerns -known that an untrusted client could use to destroy, modify, or steal -data of trusted clients. This belief may be founded on a careful -analysis of the extension protocol, its implementation, and measures -taken to ``harden'' the extension to close security weaknesses. All -extensions not considered secure are called insecure. The -implementation details of how an extension is identified as -as secure or insecure are beyond the scope of this specification. - -ListExtensions will only return names of secure extensions to -untrusted clients. - -If an untrusted client uses QueryExtension on an insecure extension -that the server supports, the reply will have the present field set to -False and the major-opcode field set to zero to indicate that the -extension is not supported. - -If an untrusted client successfully guesses the major opcode of an -insecure extension, attempts by it to execute requests with that major -opcode will fail with a Request error. - -\subsection{Keyboard Security} - -The protocol interpretation changes in this section are intended to -prevent untrusted applications from stealing keyboard input that was -meant for trusted clients and to prevent them from interfering with -the use of the keyboard. - -The behavior of some keyboard-related requests and events is modified -when the client is untrusted depending on certain server state at the -time of request execution or event generation. Specifically, if a -hypothetical keyboard event were generated given the current input -focus, pointer position, keyboard grab state, and window event -selections, and if that keyboard event would not be delivered to any -untrusted client, the following changes apply: - -\begin{enumerate} - -\item The bit vector representing the up/down state of the keys -returned by QueryKeymap and KeymapNotify is all zeroes. -\item GrabKeyboard returns a status of AlreadyGrabbed. -\item SetInputFocus does nothing. Note that this means -the Globally Active Input and WM\_TAKE\_FOCUS mechanisms specified -in the ICCCM will not work with untrusted clients. -\item Passive grabs established by GrabKey that would otherwise have -activated do not activate. - -\end{enumerate} - -If an untrusted client attempts to use any of the following requests, -the only effect is that the client receives an Access error: -SetModifierMapping, ChangeKeyboardMapping, ChangeKeyboardControl. - -If an InputOnly window owned by an untrusted client has a parent owned -by a trusted client, all attempts to map the window will be ignored. -This includes mapping attempts resulting from MapWindow, -MapSubwindows, ReparentWindow, and save-set processing. - -\subsection{Image Security} - -It should be impossible for an untrusted client to retrieve the image -contents of a trusted window unless a trusted client takes action to -allow this. We introduce the following defenses in support of this -requirement. - -The restrictions on resource ID usage listed above prevent untrusted -clients from using GetImage directly on windows not belonging to -trusted clients. - -If an untrusted client tries to set the background-pixmap attribute of -an untrusted window to None, the server will instead use a -server-dependent background which must be different than None. - -The X protocol description of GetImage states that the returned -contents of regions of a window obscured by noninferior windows are -undefined if the window has no backing store. Some implementations -return the contents of the obscuring windows in these regions. When -an untrusted client uses GetImage, this behavior is forbidden; the -server must fill the obscured regions in the returned image with a -server-dependent pattern. - -If an untrusted window has trusted inferiors, their contents are -vulnerable to theft via GetImage on the untrusted parent, as well as -being vulnerable to destruction via drawing with subwindow-mode -IncludeInferiors on the untrusted parent. An untrusted window having -trusted inferiors can only occur at the request of a trusted client. -It is expected to be an unusual configuration. - -\subsection{Property Security} - -Unlike the other security provisions described in this document, -security for property access is not amenable to a fixed policy because -properties are used for inter-client communication in diverse ways and -may contain data of varying degrees of sensitivity. Therefore, we -only list the possible restrictions the server may decide to impose on -use of properties on trusted windows by untrusted clients. How the -server chooses which restrictions from this list to apply to a -particular property access is implementation dependent -\footnote{In the X Consortium server implementation, property access -is controlled by a configuration file; see the -sp option in the -Xserver(1) manual page.}. - -The X Protocol property requests are ChangeProperty, GetProperty, -DeleteProperty, RotateProperties, and ListProperties. For these -requests, the server can allow the request to execute normally (as if -it had been issued by a trusted client), ignore the request completely -(as if it were a NoOperation), or ignore the request except to send an -Atom error to the client. Ignoring a ListProperties request means -replying that the window has no properties. ListProperties may also -reply with a subset of the existing properties if the server is doing -property hiding; see below. An ignored GetProperty request may reply -that the property does not exist, or that it exists but contains no -data. - -The server may decide to hide certain properties on certain windows -from untrusted clients\footnote{The X Consortium server -implementation does not currently provide a way to hide properties.}. -If a property is to be hidden, it must be done consistently to avoid -confusing clients. This means that for untrusted clients: - -\begin{itemize} - -\item That property should {\em not} be returned by ListProperties. -\item PropertyNotify events should {\em not} be sent for that property. -\item GetProperty on that property should reply that the property -does not exist (the return type is None, the format and bytes-after -are zero, and the value is empty). - -\end{itemize} - -For a property that the server is protecting but not hiding, -consistency must also be maintained: - -\begin{itemize} - -\item That property {\em should} be returned by ListProperties. -\item PropertyNotify events {\em should} be sent for that property. -\item GetProperty on that property should reply that the property -exists (if it really does) but the value is empty (return type and format -are their real values, and the "length of value" field in the reply -is zero). - -\end{itemize} - -\subsection{Miscellaneous Security} - -If an untrusted client attempts to use ChangeHosts, ListHosts, or -SetAccessControl, the only effect is that the client receives an -Access error. - -If an untrusted client attempts to use ConvertSelection on a selection -with a trusted selection owner window, the server generates a -SelectionNotify event to the requestor with property None. - -\section{New Authorization Method} - -This extension includes a new authorization method named -``XC-QUERY-SECURITY-1''. Its purpose is to allow an external agent such -as the X firewall proxy to probe an X server to determine whether that -server meets certain security criteria without requiring the agent to -have its own authorization for that server. The agent may use the -returned information to make a decision. For example, the X firewall -proxy may choose not to forward client connections to servers that do -not meet the criteria. - -To use this authorization method, the client (or proxy) sends -``XC-QUERY-SECURITY-1'' as the authorization-protocol-name in the -initial connection setup message. The authorization-protocol-data may -be empty or may contain additional security criteria desribed below. -If the success field of the server's reply is Authenticate, the server -supports the security extension, and the server meets all specified -additional security criteria. In this case, the client should resend -the initial connection setup message substituting the authorization -protocol name and data that should be used to authorize the -connection. If the success field of the server's reply is anything -other than Authenticate, either the server does not support the -security extension, does not meet (or cannot determine if it meets) -all of the additional security criteria, or chooses for internal -reasons not to answer with Authenticate. In this case, the client -should close the connection. - -If the authorization-protocol-data sent with ``XC-QUERY-SECURITY-1'' is -not empty, it specifies additional security criteria for the server to -check, as follows. - -\begin{arequest}{authorization-protocol-data} -\argdecl{policy-mask}{BITMASK} -\argdecl{policies}{LISTofSECURITYPOLICY} -\end{arequest} - -The policy-mask field is any logical-OR combination of the constants -Extensions and SitePolicies. For each bit set in policy-mask, there -is a SECURITYPOLICY element in policies. The nth element in policies -corresponds to the nth 1-bit in policy-mask, counting upward from bit -0. - -\begin{arequest}{SECURITYPOLICY} -\argdecl{policy-type}{\{Disallow, Permit\}} -\argdecl{names}{LISTofSTR} -\end{arequest} - -For a SECURITYPOLICY corresponding to policy-mask Extensions, if -policy-type is Disallow the server is required to consider as insecure -all extensions given in names. No policy is specified for extensions -not listed in names. If policy-type is Permit the server may consider -only those extensions given in names to be secure; all other -extensions must be treated as insecure. If these constraints are not -met, the server should not return Authenticate in the success field of -the reply. Servers can but need not dynamically configure themselves -in response to an Extensions SECURITYPOLICY; a conforming server might -simply compare the policy with a compiled-in table of extensions and -their security status. - - -For a SECURITYPOLICY corresponding to policy-mask SitePolicies, -policy-type Disallow means the server must not have been configured -with any of the site policies given in names. Policy-type Permit -means the server must have been configured with at least one of the -site policies given in names. If these constraints are not met, the -server should not return Authenticate in the success field of the -reply. - -SitePolicies provide a way to express new forms of security-relevant -information that could not be anticipated at the time of this writing. -For example, suppose the server is found to have a critical security -defect. When a fix is developed, a site policy string could be -associated with the fix. Servers with the fix would advertise that -site policy, and the X firewall proxy would specify that site policy -in a SECURITYPOLICY with policy-type Permit. - -\section{Encoding} - -Please refer to the X11 Protocol Encoding document as this section uses -syntactic conventions and data types established there. - -The name of this extension is ``SECURITY''. - -\subsection{Types} - -AUTHID: CARD32 - -\subsection{Request Encoding} - -% start marker -\begin{erequest}{SecurityQueryVersion}{0}{2} -\eargdecl{2}{CARD16}{client-major-version} -\eargdecl{2}{CARD16}{client-minor-version} -\areply -\eargdecl{1}{1}{Reply} -\eargdecl{1}{}{unused} -\eargdecl{2}{CARD16}{sequence number} -\eargdecl{4}{0}{reply length} -\eargdecl{2}{CARD16}{server-major-version} -\eargdecl{2}{CARD16}{server-minor-version} -\eargdecl{20}{}{unused} -\end{erequest} -% end marker - -% start marker -\begin{erequest}{SecurityRevokeAuthorization}{2}{2} -\eargdecl{4}{AUTHID}{authorization-id} -\end{erequest} -% end marker - -% start marker -\begin{erequest}{SecurityGenerateAuthorization}{1}{3 + (m+n+3)/4 + s} -\eargdecl{2}{CARD16}{m, number of bytes in authorization protocol name} -\eargdecl{2}{CARD16}{n, number of bytes in authorization data} -\eargdecl{m}{STRING8}{authorization protocol name} -\eargdecl{n}{STRING8}{authorization protocol data} -\eargdecl{p}{}{unused, p=pad(m+n)} -\eargdecl{4}{BITMASK}{value-mask (has s bits set to 1)} -\econstdecl{\#x00000001}{timeout} -\econstdecl{\#x00000002}{trust-level} -\econstdecl{\#x00000004}{group} -\econstdecl{\#x00000008}{event-mask} -\eargdecl{4s}{LISTofVALUE}{value-list} -\\ -VALUES -\\ -\eargdecl{4}{CARD32}{timeout} -\eargdecl{4}{}{trust-level} -\econstdecl{0}{SecurityClientTrusted} -\econstdecl{1}{SecurityClientUntrusted} -\eargdecl{4}{XID}{group} -\econstdecl{0}{None} -\eargdecl{4}{CARD32}{event-mask} -\econstdecl{\#x00000001}{SecurityAuthorizationRevoked} -\areply -\eargdecl{1}{1}{Reply} -\eargdecl{1}{}{unused} -\eargdecl{2}{CARD16}{sequence number} -\eargdecl{4}{(q+3)/4}{reply length} -\eargdecl{4}{AUTHID}{authorization-id} -\eargdecl{2}{CARD16}{data-length} -\eargdecl{18}{}{unused} -\eargdecl{q}{STRING8}{authorization-data-return} -\eargdecl{r}{}{unused, r=pad(q)} -\end{erequest} -% end marker - -\subsection{Event Encoding} - -% start marker -\begin{eerror}{SecurityAuthorizationRevoked} -\eargdecl{1}{0+extension event base}{code} -\eargdecl{1}{}{unused} -\eargdecl{2}{CARD16}{sequence number} -\eargdecl{4}{AUTHID}{authorization id} -\eargdecl{24}{}{unused} -\end{eerror} -% end marker - -\subsection{Authorization Method Encoding} - -For authorization-protocol-name ``XC-QUERY-SECURITY-1'', the -authorization-protocol-data is interpreted as follows: - -% start marker -\begin{estruct}{authorization-protocol-data} -\eargdecl{1}{BITMASK}{policy-mask} -\econstdecl{\#x00000001}{Extensions} -\econstdecl{\#x00000002}{SitePolicies} -\eargdecl{m}{LISTofSECURITYPOLICY}{policies} -\end{estruct} -% end marker - -% start marker -\begin{estruct}{SECURITYPOLICY} -\eargdecl{1}{}{policy-type} -\econstdecl{0}{Permit} -\econstdecl{1}{Disallow} -\eargdecl{1}{CARD8}{number of STRs in names} -\eargdecl{n}{LISTofSTR}{names} -\end{estruct} -% end marker - -LISTofSTR has the same encoding as in the X protocol: each STR is a -single byte length, followed by that many characters, and there is no -padding or termination between STRs. - -\section{C Language Binding} - -The header for this extension is \verb||. All -identifier names provided by this header begin with XSecurity. - -All functions that have return type \libtypename{Status} will return -nonzero for success and zero for failure. - -% start marker -\begin{keeptogether} -\begin{cfunction}{Status}{XSecurityQueryExtension} -\cargdecl{Display *}{dpy}, -\cargdecl{int *}{major\_version\_return}, -\cargdecl{int *}{minor\_version\_return} -\end{cfunction} -% end marker - -XSecurityQueryExtension sets major\_version\_return -and minor\_version\_return to the major and minor Security protocol -version supported by the server. If the Security library is -compatible with the version returned by the server, it returns -nonzero. If dpy does not support the Security extension, or if there -was an error during communication with the server, or if the server -and library protocol versions are incompatible, it returns zero. No -other XSecurity functions may be called before this function. If a -client violates this rule, the effects of all subsequent XSecurity -calls that it makes are undefined. - -\end{keeptogether} - -% start marker -\begin{keeptogether} -\begin{cfunction}{Xauth *}{XSecurityAllocXauth} -\cargdecl{void}{} -\end{cfunction} -% end marker - -In order to provide for future evolution, Xauth structures are used to -pass and return authorization data, and the library provides ways to -allocate and deallocate them. - -XSecurityAllocXauth must be used to allocate the -Xauth structure that is passed to XSecurityGenerateAuthorization. - -For the purposes of the Security extension, the Xauth structure has -the following fields: - -\begin{tabular}{lll} -\\ \hline -Type & Field name & Description \\ \hline -\typename{unsigned short} & \argname{name\_length} & number of bytes in name \\ -\typename{char *} & \argname{name} & authorization protocol name \\ -\typename{unsigned short} & \argname{data\_length} & number of bytes in data \\ -\typename{char *} & \argname{data} & authorization protocol data \\ \hline -\\ -\end{tabular} - -The Xauth structure returned by this function is initialized as -follows: name\_length and data\_length are zero, and name and data are -NULL. - -\end{keeptogether} - -% start marker -\begin{keeptogether} -\begin{cfunction}{void}{XSecurityFreeXauth} -\cargdecl{Xauth *}{auth} -\end{cfunction} -% end marker - -XSecurityFreeXauth must be used to free Xauth structures -allocated by XSecurityAllocXauth or returned by -XSecurityGenerateAuthorization. It is the caller's responsibility to -fill in the name and data fields of Xauth structures allocated with -XSecurityAllocXauth, so this function will not attempt to free -them. In contrast, all storage associated with Xauth structures -returned from XSecurityGenerateAuthorization will be freed by this -function, including the name and data fields. - -\end{keeptogether} - -% start marker -\begin{keeptogether} -\begin{cfunction}{Bool}{XSecurityRevokeAuthorization} -\cargdecl{Display *}{dpy}, -\cargdecl{XSecurityAuthorization}{auth\_id} -\end{cfunction} -% end marker - -XSecurityRevokeAuthorization deletes the authorization specified by -auth\_id, which must be a value returned in the auth\_id\_return -parameter of XSecurityGenerateAuthorization. All clients that -connected with that authorization are be killed. Subsequently, -clients that attempt to connect using that authorization will be -refused. - -\end{keeptogether} - -% start marker -\begin{keeptogether} -\begin{cfunction}{Xauth *}{XSecurityGenerateAuthorization} -\cargdecl{Display *}{dpy}, -\cargdecl{Xauth *}{auth\_in}, -\cargdecl{unsigned long}{valuemask}, -\cargdecl{XSecurityAuthorizationAttributes *}{attributes}, -\cargdecl{XSecurityAuthorization *}{auth\_id\_return} -\end{cfunction} -% end marker - -XSecurityGenerateAuthorization creates a new authorization with the -specified attributes. The auth\_in argument must be allocated by -XSecurityAllocXauth. The name and name\_length fields of -auth\_in should be initialized to the authorization protocol name and -its length in characters respectively. If there is authorization -data, the data and data\_length fields of auth\_in should be -initialized to the data and its length in characters respectivley. -The library does not assume that name and data are null-terminated -strings. The auth\_in argument must be freed with -XSecurityFreeXauth. - -The XSecurityAuthorizationAttributes structure has the following -fields: - -\begin{tabular}{lll} -\\ \hline -Type & Field name & Mask \\ \hline -\typename{unsigned int} & \argname{trust\_level} & XSecurityTrustLevel \\ -\typename{unsigned int} & \argname{timeout} & XSecurityTimeout \\ -\typename{XID} & \argname{group} & XSecurityGroup \\ -\typename{long} & \argname{event\_mask} & XSecurityEventMask \\ \hline -\\ -\end{tabular} - -These correspond to the trust-level, timeout, group, -and event-mask described in -the SecurityGenerateAuthorization protocol request. The caller can -fill in values for any subset of these attributes. The valuemask -argument must be the bitwise OR of the symbols listed in the Mask -column for all supplied attributes. -The event\_mask attribute can be None, XSecurityAuthorizationRevokedMask, -or XSecurityAllEventMasks. In this revision of the protocol specification -XSecurityAllEventMasks is equivalent to XSecurityAuthorizationRevokedMask. -If the caller does not need to -specify any attributes, the attributes argument can be NULL, and the -valuemask argument must be zero. - -If the function fails, NULL is returned and auth\_id\_return is filled -in with zero. Otherwise, a pointer to an Xauth structure is returned. -The name and name\_length fields of the returned Xauth structure will -be copies of the name that was passed in, and the data and -data\_length fields will be set to the authorization data returned by -the server. The caller should not assume that name and data are -null-terminated strings. If no authorization data was returned by the -server, the data and data\_length fields will be set to NULL and zero -repectively. The returned Xauth structure must be freed with -XSecurityFreeXauth; the caller should not use any other means free the -structure or any of its components. The auth\_id\_return argument -will be filled in with the non-zero authorization id of the created -authorization. - -\end{keeptogether} - -% start marker -\begin{keeptogether} -The XSecurityAuthorizationRevokedEvent structure has the following fields: - -\begin{tabular}{lll} -\\ \hline -Type & Field name & Description \\ \hline -\typename{int} & \argname{type} & event base + \\ - & & XSecurityAuthorizationRevoked \\ -\typename{unsigned long} & \argname{serial} & \# of last request processed by server \\ -\typename{Bool} & \argname{send\_event} & true if this came from SendEvent \\ -\typename{Display*} & \argname{display} & Display the event was read from \\ -\typename{XSecurityAuthorization} & \argname{auth\_id} & revoked authorization id \\ \hline -\\ -\end{tabular} - -\end{keeptogether} -% end marker - -\end{document} diff --git a/doc/xorg-docs/specs/Xext/shape.ms b/doc/xorg-docs/specs/Xext/shape.ms deleted file mode 100644 index 78f39e511..000000000 --- a/doc/xorg-docs/specs/Xext/shape.ms +++ /dev/null @@ -1,954 +0,0 @@ -.\" Use -ms and macros.t -.\" $Xorg: shape.ms,v 1.3 2000/08/17 19:42:36 cpqbld Exp $ -.\" $XdotOrg: doc/xorg-docs/specs/Xext/shape.ms,v 1.3 2004-09-03 16:18:21 kem Exp $ -.\" edited for DP edits and code consistency w/ core protocol/xlib 4/1/96 -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.ps 10 -.nr PS 10 -\& -.sp 8 -.ce 3 -\s+2\fBX Nonrectangular Window - -Shape Extension Protocol\fP\s-2 -.sp 3 -.ce 3 -Version 1.1 -X.Org Standard -X Version 11, Release 7.0 -.sp 6 -.ce 4 -\s-1Keith Packard -.sp 6p -MIT X Consortium -.br -Intel Corporation -.ps 9 -.nr PS 9 -.sp 8 -.LP -Copyright \(co 1989, 2004 The Open Group -.br -Copyright \(co 2006 Keith Packard -.LP -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -.LP -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -.LP -Except as contained in this notice, the name of the copyright holders shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the -copyright holders. -.ps 10 -.nr PS 10 -.bp 1 -.EH ''X11 Nonrectangular Window Shape Extension Protocol'' -.OH ''X11 Nonrectangular Window Shape Extension Protocol'' -.EF ''\fB % \fP'' -.OF ''\fB % \fP'' -.NH 1 -Overview -.LP -This extension provides arbitrary window and border shapes within the X11 -protocol. -.LP -The restriction of rectangular windows within the X protocol is a significant -limitation in the implementation of many styles of user interface. For -example, many transient windows would like to display a ``drop shadow'' to -give the illusion of 3 dimensions. As another example, some user interface -style guides call for buttons with rounded corners; the full simulation of a -nonrectangular shape, particularly with respect to event distribution and -cursor shape, is not possible within the core X protocol. As a final -example, round clocks and nonrectangular icons are desirable visual addition -to the desktop. -.LP -This extension provides mechanisms for changing both the visible and interactive shape of a -window to arbitrary, possibly disjoint, nonrectangular forms. The intent -of the extension is to supplement the existing semantics, not replace them. -In particular, it is desirable for clients that are unaware of the -extension to still be able to cope reasonably with shaped windows. For -example, window managers should still be able to negotiate screen -real estate in rectangular pieces. Toward this end, any shape specified for -a window is clipped by the bounding rectangle for the window as specified by -the window's geometry in the core protocol. An expected convention would be -that client programs expand their shape to fill the area offered by the -window manager. -.NH 1 -Description -.LP -Each window (even with no shapes specified) is defined by three regions: the -\fIbounding region\fP, the \fIclip region\fP and the \fIinput region\fP. The bounding region is the area of the -parent window that the window will occupy (including border). The clip region -is the subset of the bounding region that is available for subwindows and -graphics. The area between the bounding region and the clip region is defined -to be the border of the window. The input region is the subset of the -bounding region that can ``contain'' the pointer. -.LP -A nonshaped window will have a bounding region that is a rectangle -spanning the window, including its border; the clip region will be a rectangle -filling the inside dimensions (not including the border); the input -region will match the bounding region. In this document, -these areas are referred to as the \fIdefault bounding region\fP, the -\fIdefault clip region\fP and the \fIdefault input region\fP. For a window with inside size of \fIwidth\fP by -\fIheight\fP and border width \fIbwidth\fP, the default bounding, clip -and input -regions are the rectangles (relative to the window origin): -.LP -.sM -.Ds 0 -bounding.x = -\fIbwidth\fP -bounding.y = -\fIbwidth\fP -bounding.width = \fIwidth\fP + 2 * \fIbwidth\fP -bounding.height = \fIheight\fP + 2 * \fIbwidth\fP - -clip.x = 0 -clip.y = 0 -clip.width = \fIwidth\fP -clip.height = \fIheight\fP - -input.x = -\fIbwidth\fP -input.y = -\fIbwidth\fP -input.width = \fIwidth\fP + 2 * \fIbwidth\fP -input.height = \fIheight\fP + 2 * \fIbwidth\fP - -.De -.LP -.eM -This extension allows a client to modify any combination of the bounding, -clip or input regions by specifying new regions that combine with the default -regions. These new regions are called the \fIclient bounding region\fP, -the \fIclient clip region\fP and the \fIclient input region\fP. They are specified relative to the origin of -the window and are always defined by offsets relative to the window origin -(that is, region adjustments are not required when the window is moved). -Three mechanisms for specifying regions are provided: a list of rectangles, -a bitmap, and an existing bounding or clip region from a window. This is -modeled on the specification of regions in graphics contexts in the core -protocol and allows a variety of different uses of the extension. -.LP -When using an existing window shape as an operand in specifying a new shape, -the client region is used, unless none has been set, in which case the -default region is used instead. -.LP -The \fIeffective bounding region\fP of a window is defined to be the intersection of -the client bounding region with the default bounding region. Any portion of -the client bounding region that is not included in the default bounding -region will not be included in the effective bounding region on the screen. -This means that window managers (or other geometry managers) used to dealing -with rectangular client windows will be able to constrain the client to a -rectangular area of the screen. -.LP -Construction of the effective bounding region is dynamic; the client bounding -region is not mutated to obtain the effective bounding region. If a client -bounding region is specified that extends beyond the current default bounding -region, and the window is later enlarged, the effective bounding region will -be enlarged to include more of the client bounding region. -.LP -The \fIeffective clip region\fP of a window is defined to be the intersection of the -client clip region with both the default clip region and the client bounding -region. Any portion of the client clip region that is not included in both -the default clip region and the client bounding region will not be included in -the effective clip region on the screen. -.LP -Construction of the effective clip region is dynamic; the client clip region is -not mutated to obtain the effective clip region. If a client clip region is -specified that extends beyond the current default clip region and the -window or its bounding region is later enlarged, the effective clip region will -be enlarged to include more of the client clip region if it is included in -the effective bounding region. -.LP -The border of a window is defined to be the difference between the effective -bounding region and the effective clip region. If this region is empty, no -border is displayed. If this region is nonempty, the border is filled -using the border-tile or border-pixel of the window as specified in the core -protocol. Note that a window with a nonzero border width will never be able -to draw beyond the default clip region of the window. Also note that a zero -border width does not prevent a window from having a border, since the clip -shape can still be made smaller than the bounding shape. -.LP -All output to the window and visible regions of any subwindows will be -clipped to the effective clip region. The server must not retain window -contents beyond the effective bounding region with backing store. The window's -origin (for graphics operations, background tiling, and subwindow placement) -is not affected by the existence of a bounding region or clip region. -.LP -The \fIeffective input region\fP of a window is defined to be the intersection of the -client input region with both the default input region and the client bounding -region. Any portion of the client input region that is not included in both -the default input region and the client bounding region will not be included in -the effective input region on the screen. -.LP -Construction of the effective input region is dynamic; the client input region is -not mutated to obtain the effective input region. If a client input region is -specified that extends beyond the current default input region and the -window or its bounding region is later enlarged, the effective input region will -be enlarged to include more of the client input region if it is included in -the effective bounding region. -.LP -Areas that are inside the default bounding region but outside the effective -bounding region are not part of the window; these areas of the screen will -be occupied by other windows. Input events that occur within the default -bounding region but outside the effective bounding region will be delivered as -if the window was not occluding the event position. Events that occur in -a nonrectangular border of a window will be delivered to that window, just -as for events that occur in a normal rectangular border. -.LP -An -.PN InputOnly -window can have its bounding or input region set, but it is a -.PN Match -error to attempt to set a clip region on an -.PN InputOnly -window or to specify its clip region as a source to a request -in this extension. -.LP -The server must accept changes to the clip and input regions of a root window, but -the server is permitted to ignore requested changes to the bounding region -of a root window. If the server accepts bounding region changes, the contents -of the screen outside the bounding region are implementation dependent. -.NH 1 -Types -.LP -The following types are used in the request and event definitions in -subsequent sections. -.LP -SHAPE_KIND: -.Pn { Bounding , -.PN Clip , -.PN Input } -.LP -SHAPE_OP: -.Pn { Set , -.PN Union , -.PN Intersect , -.PN Subtract , -.PN Invert } -.LP -.PN Set -indicates that the region specified as an explicit source in the request is stored -unaltered as the new destination client region. -.PN Union -indicates that the source and destination regions are unioned together to produce -the new destination client region. -.PN Intersect -indicates that the source and destination regions are intersected together to -produce the new destination client region. -.PN Subtract -indicates that the source region is subtracted from the destination region to -produce the new destination region. -.PN Invert -indicates that the destination region is subtracted from the source region to -produce the new destination region. -.NH 1 -Requests -.LP -.sM -.PN "ShapeQueryVersion" -.LP - => -.IP -majorVersion: CARD16 -.br -minorVersion: CARD16 -.LP -.eM -This request can be used to ensure that the server version of the SHAPE -extension is usable by the client. This document defines major version one -(1), minor version one (1). -.LP -.sM -.PN "ShapeRectangles" -.IP -\fIdest\fP\^: WINDOW -.br -\fIdestKind\fP\^: SHAPE_KIND -.br -\fIop\fP\^: SHAPE_OP -.br -\fIxOff, yOff\fP\^: INT16 -.br -\fIrectangles\fP\^: LISTofRECTANGLES -.br -\fIordering\fP\^: -.Pn { UnSorted , -.PN YSorted , -.PN YXSorted , -.PN YXBanded } -.IP -Errors: -.PN Window , -.PN Length , -.PN Match , -.PN Value -.LP -.eM -This request specifies an array of rectangles, relative to the origin of the -window plus the specified offset (xOff and yOff) that together -define a region. This region is combined (as specified by the operator -op) with the existing client region (specified by destKind) of the -destination window, and the result is stored as the specified client region of -the destination window. Note that the list of rectangles can be empty, -specifying an empty region; this is not the same as passing -.PN None -to -.PN ShapeMask . -.LP -If known by the client, -ordering relations on the rectangles can be specified with the ordering -argument. -This may provide faster operation by the server. -The meanings of the ordering values are the same as in the core protocol -.PN SetClipRectangles -request. -If an incorrect ordering is specified, -the server may generate a -.PN Match -error, but it is not required to do so. -If no error is generated, -the graphics results are undefined. -Except for -.PN UnSorted , -the rectangles should be nonintersecting, or the resulting region will -be undefined. -.PN UnSorted -means that the rectangles are in arbitrary order. -.PN YSorted -means that the rectangles are nondecreasing in their Y origin. -.PN YXSorted -additionally constrains -.PN YSorted -order in that all rectangles with an equal Y origin are -nondecreasing in their X origin. -.PN YXBanded -additionally constrains -.PN YXSorted -by requiring that, for every possible Y scanline, -all rectangles that include that scanline have identical Y origins and Y -extents. -.LP -.sM -.PN "ShapeMask" -.IP -\fIdest\fP\^: WINDOW -.br -\fIdestKind\fP\^: SHAPE_KIND -.br -\fIop\fP\^: SHAPE_OP -.br -\fIxOff, yOff\fP\^: INT16 -.br -\fIsource\fP\^: PIXMAP or -.PN None -.IP -Errors: -.PN Window , -.PN Pixmap , -.PN Match , -.PN Value -.LP -.eM -The source in this request is a 1-bit deep pixmap, or -.PN None . -If source is -.PN None , -the specified client region is removed from the window, causing the effective -region to revert to the default region. The -.PN ShapeNotify -event generated by this request and subsequent -.PN ShapeQueryExtents -will report that a client shape has not been specified. -If a valid pixmap is specified, it is converted -to a region, with bits set to one included in the region and bits set to -zero excluded, and an offset from the window origin as specified by -xOff and yOff. The resulting region is then combined (as -specified by the operator op) with the existing client region -(indicated by destKind) of the destination window, and the result is -stored as the specified client region of the destination window. The source -pixmap and destination window must have been created on the same screen, -or else a -.PN Match -error results. -.LP -.sM -.PN "ShapeCombine" -.IP -\fIdest\fP\^: WINDOW -.br -\fIdestKind\fP\^: SHAPE_KIND -.br -\fIop\fP\^: SHAPE_OP -.br -\fIxOff, yOff\fP\^: INT16 -.br -\fIsource\fP\^: WINDOW -.br -\fIsourceKind\fP\^: SHAPE_KIND -.IP -Errors: -.PN Window , -.PN Match , -.PN Value -.LP -.eM -The client region, indicated by sourceKind, of the source window is -offset from the window origin by xOff and yOff and combined with -the client region, indicated by destKind, of the destination window. -The result is stored as the specified client region of the destination -window. -The source and destination windows must be on the same screen, or else a -.PN Match -error results. -.LP -.sM -.PN "ShapeOffset" -.IP -\fIdest\fP\^: WINDOW -.br -\fIdestKind\fP\^: SHAPE_KIND -.br -\fIxOff, yOff\fP\^: INT16 -.IP -Errors: -.PN Window , -.PN Match , -.PN Value -.LP -.eM -The client region, indicated by destKind, is moved relative to its -current position by the amounts xOff and yOff. -.LP -.sM -.PN "ShapeQueryExtents" -.IP -\fIdest\fP\^: WINDOW -.LP - => -.IP -boundingShaped: BOOL -.br -clipShaped: BOOL -.br -xBoundingShape: INT16 -.br -yBoundingShape: INT16 -.br -widthBoundingShape: CARD16 -.br -heightBoundingShape: CARD16 -.br -xClipShape: INT16 -.br -yClipShape: INT16 -.br -widthClipShape: CARD16 -.br -heightClipShape: CARD16 -.IP -Errors: -.PN Window -.LP -.eM -The boundingShaped and clipShaped results are -.PN True -if the corresponding client regions have been specified, else they are -.PN False . -The x, y, width, and height values define the extents of the client regions, -when a client region has not been specified, the extents of the -corresponding default region are reported. -.LP -.sM -.PN "ShapeSelectInput" -.IP -\fIwindow\fP\^: WINDOW -.br -\fIenable\fP\^: BOOL -.IP -Errors: -.PN Window , -.PN Value -.LP -.eM -Specifying enable as -.PN True -causes the server to send the requesting client a -.PN ShapeNotify -event whenever the bounding, clip or input region of the specified window is -altered by any client. -Specifying enable as -.PN False -causes the server to stop sending such events. -.LP -.sM -.PN "ShapeInputSelected" -.IP -\fIwindow\fP\^: WINDOW -.LP - => -.IP -enable: BOOL -.IP -Errors: -.PN Window -.LP -.eM -If enable is -.PN True , -then -.PN ShapeNotify -events for the window are generated for this client. -.LP -.sM -.PN "ShapeGetRectangles" -.IP -\fIwindow\fP\^: WINDOW -.br -\fIkind\fP\^: SHAPE_KIND -.LP - => -.IP -rectangles: LISTofRECTANGLE -.br -ordering: -.Pn { UnSorted , -.PN YSorted , -.PN YXSorted , -.PN YXBanded } -.IP -Errors: -.PN Window, -.PN Match -.LP -.eM -A list of rectangles describing the region indicated by kind, and the -ordering of those rectangles, is returned. The meaning of the ordering -values is the same as in the -.PN ShapeRectangles -request. -.NH 1 -Events -.LP -.sM -.PN "ShapeNotify" -.IP -\fIwindow\fP\^: WINDOW -.br -\fIkind\fP\^: SHAPE_KIND -.br -\fIshaped\fP\^: BOOL -.br -\fIx\fP, \fIy\fP\^: INT16 -.br -\fIwidth\fP, \fIheight\fP\^: CARD16 -.br -\fItime\fP\^: TIMESTAMP -.LP -.eM -Whenever the client bounding, clip or input shape of a window is modified, a -.PN ShapeNotify -event is sent to each client that has used -.PN ShapeSelectInput -to request it. -.LP -Kind indicates which client region (bounding or clip) has been modified; -shaped is -.PN True -when the window has a client shape of type kind, and is -.PN False -when the window no longer has a client shape of this type. -The x, y, width, and height indicate the extents of the -current shape. When shaped is -.PN False -these will indicate the extents of the default region. The timestamp -indicates the server time when the shape was changed. -.NH 1 -Encoding -.LP -Please refer to the X11 Protocol Encoding document as this document uses -conventions established there. -.LP -The name of this extension is ``SHAPE''. -.LP -.NH 2 -New Types -.LP -.Ds 0 -.TA .75i 1.75i -.ta .75i 1.75i -.R -SHAPE_KIND - 0 Bounding - 1 Clip - 2 Input -.De -.LP -.Ds 0 -.TA .75i 1.75i -.ta .75i 1.75i -.R -SHAPE_OP - 0 Set - 1 Union - 2 Intersect - 3 Subtract - 4 Invert -.De -.NH 2 -Requests -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ShapeQueryVersion -.sp 6p - 1 CARD8 opcode - 1 0 shape opcode - 2 1 request length -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - => - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 0 length - 2 CARD16 major version - 2 CARD16 minor version - 20 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ShapeRectangles -.sp 6p - 1 CARD8 opcode - 1 1 shape opcode - 2 4+2n request length - 1 SHAPE_OP operation - 1 SHAPE_KIND destination kind - 1 ordering - 0 UnSorted - 1 YSorted - 2 YXSorted - 3 YXBanded - 1 unused - 4 WINDOW destination window - 2 INT16 x offset - 2 INT16 y offset - 8n LISTofRECTANGLE rectangles -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ShapeMask -.sp 6p - 1 CARD8 opcode - 1 2 shape opcode - 2 5 request length - 1 SHAPE_OP operation - 1 SHAPE_KIND destination kind - 2 unused - 4 WINDOW destination window - 2 INT16 x offset - 2 INT16 y offset - 4 PIXMAP source bitmap - 0 None -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ShapeCombine -.sp 6p - 1 CARD8 opcode - 1 3 shape opcode - 2 5 request length - 1 SHAPE_OP operation - 1 SHAPE_KIND destination kind - 1 SHAPE_KIND source kind - 1 unused - 4 WINDOW destination window - 2 INT16 x offset - 2 INT16 y offset - 4 WINDOW source window -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ShapeOffset -.sp 6p - 1 CARD8 opcode - 1 4 shape opcode - 2 4 request length - 1 SHAPE_KIND destination kind - 3 unused - 4 WINDOW destination window - 2 INT16 x offset - 2 INT16 y offset -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ShapeQueryExtents -.sp 6p - 1 CARD8 opcode - 1 5 shape opcode - 2 2 request length - 4 WINDOW destination window -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - => - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 0 reply length - 1 BOOL bounding shaped - 1 BOOL clip shaped - 2 unused - 2 INT16 bounding shape extents x - 2 INT16 bounding shape extents y - 2 CARD16 bounding shape extents width - 2 CARD16 bounding shape extents height - 2 INT16 clip shape extents x - 2 INT16 clip shape extents y - 2 CARD16 clip shape extents width - 2 CARD16 clip shape extents height - 4 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ShapeSelectInput -.sp 6p - 1 CARD8 opcode - 1 6 shape opcode - 2 3 request length - 4 WINDOW destination window - 1 BOOL enable - 3 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ShapeInputSelected -.sp 6p - 1 CARD8 opcode - 1 7 shape opcode - 2 2 request length - 4 WINDOW destination window -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - => - 1 1 Reply - 1 BOOL enabled - 2 CARD16 sequence number - 4 0 reply length - 24 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ShapeGetRectangles -.sp 6p - 1 CARD8 opcode - 1 8 shape opcode - 2 3 request length - 4 WINDOW window - 1 SHAPE_KIND source kind - 3 unused -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - => - 1 1 Reply - 1 ordering - 0 UnSorted - 1 YSorted - 2 YXSorted - 3 YXBanded - 2 CARD16 sequence number - 4 2n reply length - 4 CARD32 nrects - 20 unused - 8n LISTofRECTANGLE rectangles -.De -.NH 2 -Events -.LP -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN ShapeNotify -.sp 6p - 1 CARD8 type (0 + extension event base) - 1 SHAPE_KIND shape kind - 2 CARD16 sequence number - 4 WINDOW affected window - 2 INT16 x value of extents - 2 INT16 y value of extents - 2 CARD16 width of extents - 2 CARD16 height of extents - 4 TIMESTAMP server time - 1 BOOL shaped - 11 unused -.De -.NH 1 -Glossary -.LP -.KS -\fBbounding region\fP -.IP -The area of the parent window that this window will occupy. This area is -divided into two parts: the border and the interior. -.KE -.LP -.KS -\fBclip region\fP -.IP -The interior of the window, as a subset of the bounding region. This -region describes the area that will be painted with the window background -when the window is cleared, will contain all graphics output to the window, -and will clip any subwindows. -.KE -.LP -.KS -\fBinput region\fP -.IP -The subset of the bounding region which can ``contain'' the -pointer. -.KE -.LP -.KS -\fBdefault bounding region\fP -.IP -The rectangular area, as described by the core protocol window size, that -covers the interior of the window and its border. -.KE -.LP -.KS -\fBdefault clip region\fP -.IP -The rectangular area, as described by the core protocol window size, that -covers the interior of the window and excludes the border. -.KE -.LP -.KS -\fBdefault input region\fP -.IP -The rectangular area, as described by the core protocol window size, that -covers the interior of the window and its border. -.KE -.LP -.KS -\fBclient bounding region\fP -.IP -The region associated with a window that is directly modified via this -extension when specified by -.PN ShapeBounding . -This region is used in conjunction with the default bounding region -to produce the effective bounding region. -.KE -.LP -.KS -\fBclient clip region\fP -.IP -The region associated with a window that is directly modified via this -extension when specified by -.PN ShapeClip . -This region is used in conjunction with the default clip region -and the client bounding region to produce the effective clip region. -.KE -.LP -.KS -\fBclient input region\fP -.IP -The region associated with a window that is directly modified via this -extension when specified by -.PN ShapeInput . -This region is used in conjunction with the default input region -and the client bounding region to produce the effective input region. -.KE -.LP -.KS -\fBeffective bounding region\fP -.IP -The actual shape of the window on the screen, including border and interior -(but excluding the effects of overlapping windows). When a window has a client -bounding region, the effective bounding region is the intersection of the -default bounding region and the client bounding region. Otherwise, the -effective bounding region is the same as the default bounding region. -.KE -.LP -.KS -\fBeffective clip region\fP -.IP -The actual shape of the interior of the window on the screen (excluding the -effects of overlapping windows). When a window has a client clip region or -a client bounding region, the effective clip region is the intersection of -the default clip region, the client clip region (if any) and the client -bounding region (if any). Otherwise, the effective clip region is the -same as the default clip region. -.KE -.LP -.KS -\fBeffective input region\fP -.IP -The actual shape of the window on the screen (excluding the -effects of overlapping windows) which can ``contain'' the pointer. -When a window has a client input region or -a client bounding region, the effective input region is the intersection of -the default input region, the client input region (if any) and the client -bounding region (if any). Otherwise, the effective input region is the -same as the default input region. -.KE -.NH 1 -Revision History -.LP -1.0 - 1989 - Original Revision -.LP -1.0.1 - March 2004 - Corrected misnumbering of \fIShapeInputSelected\fP -and \fIShapeGetRectangles\fP requests in encoding section. -.LP -1.1 - February 2006 - Added Input regions. diff --git a/doc/xorg-docs/specs/Xext/shapelib.ms b/doc/xorg-docs/specs/Xext/shapelib.ms deleted file mode 100644 index e8fcdc85f..000000000 --- a/doc/xorg-docs/specs/Xext/shapelib.ms +++ /dev/null @@ -1,556 +0,0 @@ -.\" Use -ms and macros.t -.\" $Xorg: shapelib.ms,v 1.3 2000/08/17 19:42:36 cpqbld Exp $ -.\" $XdotOrg: xc/doc/specs/Xext/shapelib.ms,v 1.2 2004/04/23 18:42:18 eich Exp $ -.\" edited for DP edits and code consistency w/ core protocol/xlib 4/1/96 -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.ps 10 -.nr PS 10 -\& -.sp 8 -.ce 3 -\s+2\fBX Nonrectangular Window - -Shape Extension Library\fP\s-2 -.sp 3 -.ce 3 -Version 1.0 -X Consortium Standard -X Version 11, Release 6.8 -.sp 6 -.ce 4 -\s-1Keith Packard -.sp 6p -MIT X Consortium -.ps 9 -.nr PS 9 -.sp 8 -.LP -Copyright \(co 1989 X Consortium -.LP -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -.LP -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -.LP -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. -.ps 10 -.nr PS 10 -.bp 1 -.EH ''X Nonrectangular Window Shape Extension Library'' -.OH ''X Nonrectangular Window Shape Extension Library'' -.EF ''\fB % \fP'' -.OF ''\fB % \fP'' -.NH 1 -Overview -.LP -This extension provides arbitrary window and border shapes within the X11 -protocol. -.LP -The restriction of rectangular windows within the X protocol is a significant -limitation in the implementation of many styles of user interface. For -example, many transient windows would like to display a ``drop shadow'' to -give the illusion of 3 dimensions. As another example, some user interface -style guides call for buttons with rounded corners; the full simulation of a -nonrectangular shape, particularly with respect to event distribution and -cursor shape, is not possible within the core X protocol. As a final -example, round clocks and nonrectangular icons are desirable visual addition -to the desktop. -.LP -This extension provides mechanisms for changing the visible shape of a -window to an arbitrary, possibly disjoint, nonrectangular form. The intent -of the extension is to supplement the existing semantics, not replace them. -In particular, it is desirable for clients that are unaware of the -extension to still be able to cope reasonably with shaped windows. For -example, window managers should still be able to negotiate screen -real estate in rectangular pieces. Toward this end, any shape specified for -a window is clipped by the bounding rectangle for the window as specified by -the window's geometry in the core protocol. An expected convention would be -that client programs expand their shape to fill the area offered by the -window manager. -.NH 1 -Description -.LP -Each window (even with no shapes specified) is defined by two regions: the -\fIbounding region\fP and the \fIclip region\fP. The bounding region is the area of the -parent window that the window will occupy (including border). The clip region -is the subset of the bounding region that is available for subwindows and -graphics. The area between the bounding region and the clip region is defined -to be the border of the window. -.LP -A nonshaped window will have a bounding region that is a rectangle -spanning the window, including its border; the clip region will be a rectangle -filling the inside dimensions (not including the border). In this document, -these areas are referred to as the \fIdefault bounding region\fP and the -\fIdefault clip region\fP. For a window with inside size of \fIwidth\fP by -\fIheight\fP and border width \fIbwidth\fP, the default bounding and clip -regions are the rectangles (relative to the window origin): -.LP -.sM -.Ds 0 -bounding.x = -\fIbwidth\fP -bounding.y = -\fIbwidth\fP -bounding.width = \fIwidth\fP + 2 * \fIbwidth\fP -bounding.height = \fIheight\fP + 2 * \fIbwidth\fP - -clip.x = 0 -clip.y = 0 -clip.width = \fIwidth\fP -clip.height = \fIheight\fP -.De -.LP -.eM -This extension allows a client to modify either or both of the bounding or -clip regions by specifying new regions that combine with the default -regions. These new regions are called the \fIclient bounding region\fP and -the \fIclient clip region\fP. They are specified relative to the origin of -the window and are always defined by offsets relative to the window origin -(that is, region adjustments are not required when the window is moved). -Three mechanisms for specifying regions are provided: a list of rectangles, -a bitmap, and an existing bounding or clip region from a window. This is -modeled on the specification of regions in graphics contexts in the core -protocol and allows a variety of different uses of the extension. -.LP -When using an existing window shape as an operand in specifying a new shape, -the client region is used, unless none has been set, in which case the -default region is used instead. -.LP -The \fIeffective bounding region\fP of a window is defined to be the intersection of -the client bounding region with the default bounding region. Any portion of -the client bounding region that is not included in the default bounding -region will not be included in the effective bounding region on the screen. -This means that window managers (or other geometry managers) used to dealing -with rectangular client windows will be able to constrain the client to a -rectangular area of the screen. -.LP -Construction of the effective bounding region is dynamic; the client bounding -region is not mutated to obtain the effective bounding region. If a client -bounding region is specified that extends beyond the current default bounding -region, and the window is later enlarged, the effective bounding region will -be enlarged to include more of the client bounding region. -.LP -The \fIeffective clip region\fP of a window is defined to be the intersection of the -client clip region with both the default clip region and the client bounding -region. Any portion of the client clip region that is not included in both -the default clip region and the client bounding region will not be included in -the effective clip region on the screen. -.LP -Construction of the effective clip region is dynamic; the client clip region is -not mutated to obtain the effective clip region. If a client clip region is -specified that extends beyond the current default clip region and the -window or its bounding region is later enlarged, the effective clip region will -be enlarged to include more of the client clip region if it is included in -the effective bounding region. -.LP -The border of a window is defined to be the difference between the effective -bounding region and the effective clip region. If this region is empty, no -border is displayed. If this region is nonempty, the border is filled -using the border-tile or border-pixel of the window as specified in the core -protocol. Note that a window with a nonzero border width will never be able -to draw beyond the default clip region of the window. Also note that a zero -border width does not prevent a window from having a border, since the clip -shape can still be made smaller than the bounding shape. -.LP -All output to the window and visible regions of any subwindows will be -clipped to the effective clip region. The server must not retain window -contents beyond the effective bounding region with backing store. The window's -origin (for graphics operations, background tiling, and subwindow placement) -is not affected by the existence of a bounding region or clip region. -.LP -Areas that are inside the default bounding region but outside the effective -bounding region are not part of the window; these areas of the screen will -be occupied by other windows. Input events that occur within the default -bounding region but outside the effective bounding region will be delivered as -if the window was not occluding the event position. Events that occur in -a nonrectangular border of a window will be delivered to that window, just -as for events that occur in a normal rectangular border. -.LP -An -.PN InputOnly -window can have its bounding region set, but it is a -.PN Match -error to attempt to set a clip region on an -.PN InputOnly -window or to specify its clip region as a source to a request -in this extension. -.LP -The server must accept changes to the clip region of a root window, but -the server is permitted to ignore requested changes to the bounding region -of a root window. If the server accepts bounding region changes, the contents -of the screen outside the bounding region are implementation dependent. -.NH 1 -C Language Binding -.LP -The C functions provide direct access to the protocol and add no additional -semantics. -.LP -The include file for this extension is -.Pn < X11/extensions/shape.h >. -The defined shape kinds are -.PN ShapeBounding -and -.PN ShapeClip . -The defined region operations are -.PN ShapeSet , -.PN ShapeUnion , -.PN ShapeIntersect , -.PN ShapeSubtract , -and -.PN ShapeInvert . -.sM -.FD 0 -Bool -XShapeQueryExtension(\fIdisplay\fP\^, \fIevent_base\fP\^, \fIerror_base\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int *\fIevent_base\fP\^; /* RETURN */ -.br - int *\fIerror_base\fP\^; /* RETURN */ -.FN -.LP -.eM -.PN XShapeQueryExtension -returns -.PN True -if the specified display supports the SHAPE extension else -.PN False . -If the extension is supported, *event_base is set to the event number for -.PN ShapeNotify -events and *error_base would be set to the error number for the first error for -this extension. -Because no errors are defined for this version of the extension, -the value returned here is not defined (nor useful). -.LP -.sp -.sM -.FD 0 -Status -XShapeQueryVersion(\fIdisplay\fP\^, \fImajor_version\fP\^, \fIminor_version\fP\^) -.br - Display *\fIdisplay\fP; -.br - int *\fImajor_version\fP, *\fIminor_version\fP\^; /* RETURN */ -.FN -.LP -.eM -If the extension is supported, -.PN XShapeQueryVersion -sets the major and minor version numbers of the -extension supported by the display and returns a nonzero value. -Otherwise, the arguments are not set and zero is returned. -.LP -.sp -.sM -.FD 0 -XShapeCombineRegion(\fIdisplay\fP\^, \fIdest\fP\^, \fIdest_kind\fP\^, \ -\fIx_off\fP\^, \fIy_off\fP\^, \fIregion\fP\^, \fIop\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIdest\fP\^; -.br - int \fIdest_kind\fP\^, \fIop\fP\^, \fIx_off\fP\^, \fIy_off\fP\^; -.br - REGION *\fIregion\fP\^; -.FN -.LP -.eM -.PN XShapeCombineRegion -converts the specified region into a list of rectangles and calls -.PN XShapeCombineRectangles . -.LP -.sp -.sM -.FD 0 -XShapeCombineRectangles(\fIdisplay\fP\^, \fIdest\fP\^, \fIdest_kind\fP\^, \ -\fIx_off\fP\^, \fIy_off\fP\^, \fIrectangles\fP\^, \fIn_rects\fP\^, \fIop\fP\^, \ -\fIordering\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIdest\fP\^; -.br - int \fIdest_kind\fP\^, \fIn_rects\fP\^, \fIop\fP\^, \fIx_off\fP\^, \ -\fIy_off\fP\^, \fIordering\fP\^; -.br - XRectangle *\fIrectangles\fP\^; -.FN -.LP -.eM -If the extension is supported, -.PN XShapeCombineRectangles -performs a -.PN ShapeRectangles -operation; otherwise, the request is ignored. -.LP -.sp -.sM -.FD 0 -XShapeCombineMask(\fIdisplay\fP\^, \fIdest\fP\^, \fIdest_kind\fP\^, \ -\fIx_off\fP\^, \fIy_off\fP\^, \fIsrc\fP\^, \fIop\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIdest\fP\^; -.br - int \fIdest_kind\fP\^, \fIop\fP\^, \fIx_off\fP\^, \fIy_off\fP\^; -.br - Pixmap \fIsrc\fP\^; -.FN -.LP -.eM -If the extension is supported, -.PN XShapeCombineMask -performs a -.PN ShapeMask -operation; otherwise, the request is ignored. -.LP -.sp -.sM -.FD 0 -XShapeCombineShape(\fIdisplay\fP\^, \fIdest\fP\^, \fIdest_kind\fP\^, \ -\fIx_off\fP\^, \fIy_off\fP\^, \fIsrc\fP\^, \fIsrc_kind\fP\^, \fIop\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIdest\fP\^, \fIsrc\fP\^; -.br - int \fIdest_kind\fP\^, \fIsrc_kind\fP\^, \fIop\fP\^, \fIx_off\fP\^, \fIy_off\fP\^; -.FN -.LP -.eM -If the extension is supported, -.PN XShapeCombineShape -performs a -.PN ShapeCombine -operation; otherwise, the request is ignored. -.LP -.sp -.sM -.FD 0 -XShapeOffsetShape(\fIdisplay\fP\^, \fIdest\fP\^, \fIdest_kind\fP\^, \ -\fIx_off\fP\^, \fIy_off\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIdest\fP\^; -.br - int \fIdest_kind\fP\^, fIx_off\fP\^, \fIy_off\fP\^; -.FN -.LP -.eM -If the extension is supported, -.PN XShapeOffsetShape -performs a -.PN ShapeOffset -operation; otherwise, the request is ignored. -.LP -.sp -.sM -.FD 0 -Status XShapeQueryExtents(\fIdisplay\fP\^, \fIwindow\fP\^, \ -\fIbounding_shaped\fP\^, \fIx_bounding\fP\^, \fIy_bounding\fP\^, -.br - \fIw_bounding\fP\^, \ \fIh_bounding\fP\^, \fIclip_shaped\fP\^, \ -\fIx_clip\fP\^, \fIy_clip\fP\^, \fIw_clip\fP\^, \fIh_clip\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIwindow\fP\^; -.br - Bool *\fIbounding_shaped\fP\^, *\fIclip_shaped\fP\^; /* RETURN */ -.br - int *\fIx_bounding\fP\^, *\fIy_bounding\fP\^, *\fIx_clip\fP\^, \ -*\fIy_clip\fP\^; /* RETURN */ -.br - unsigned int *\fIw_bounding\fP\^, *\fIh_bounding\fP\^, *\fIw_clip\fP\^, \ -* \fIh_clip\fP\^; /* RETURN */ -.FN -.LP -.eM -If the extension is supported, -.PN XShapeQueryExtents -sets x_bounding, y_bounding, w_bounding, h_bounding to the extents of the -bounding shape and sets x_clip, y_clip, w_clip, h_clip to the extents of -the clip shape. For unspecified client regions, the extents of the -corresponding default region are used. -.LP -If the extension is supported, -a nonzero value is returned; otherwise, zero is returned. -.LP -.sp -.sM -.FD 0 -XShapeSelectInput(\fIdisplay\fP\^, \fIwindow\fP\^, \fImask\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIwindow\fP\^; -.br - unsigned long \fImask\fP\^; -.FN -.LP -.eM -To make this extension more compatible with other interfaces, although -only one event type can be selected via the extension, -.PN XShapeSelectInput -provides a general mechanism similar to the standard Xlib binding for -window events. A mask value has been defined, -.PN ShapeNotifyMask -that is the only valid bit in mask that may be specified. -The structure for this event is defined as follows: -.LP -.sM -.Ds 0 -.TA 1.5i -.ta 1.5i -typedef struct { - int type; /* of event */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came frome a SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; /* window of event */ - int kind; /* ShapeBounding or ShapeClip */ - int x, y; /* extents of new region */ - unsigned width, height; - Time time; /* server timestamp when region changed */ - Bool shaped; /* true if the region exists */ -} XShapeEvent; -.De -.LP -.eM -.LP -.sM -.FD 0 -unsigned long -XShapeInputSelected(\fIdisplay\fP\^, \fIwindow\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIwindow\fP\^; -.FN -.LP -.eM -.PN XShapeInputSelected -returns the current input mask for extension events on the specified -window; the value returned if -.PN ShapeNotify -is selected for is -.PN ShapeNotifyMask ; -otherwise, it returns zero. -If the extension is not supported, it returns zero. -.LP -.sp -.sM -.FD 0 -XRectangle * -XShapeGetRectangles(\fIdisplay\fP\^, \fIwindow\fP\^, \fIkind\fP\^, \ -\fIcount\fP\^, \fIordering\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIwindow\fP\^; -.br - int \fIkind\fP\^; -.br - int *\fIcount\fP\^; /* RETURN */ -.br - int *\fIordering\fP\^; /* RETURN */ -.FN -.LP -.eM -If the extension is not supported, -.PN XShapeGetRectangles -returns NULL. -Otherwise, it returns a list of rectangles that describe the region -specified by kind. -.NH 1 -Glossary -.LP -.KS -\fBbounding region\fP -.IP -The area of the parent window that this window will occupy. This area is -divided into two parts: the border and the interior. -.KE -.LP -.KS -\fBclip region\fP -.IP -The interior of the window, as a subset of the bounding region. This -region describes the area that will be painted with the window background -when the window is cleared, will contain all graphics output to the window, -and will clip any subwindows. -.KE -.LP -.KS -\fBdefault bounding region\fP -.IP -The rectangular area, as described by the core protocol window size, that -covers the interior of the window and its border. -.KE -.LP -.KS -\fBdefault clip region\fP -.IP -The rectangular area, as described by the core protocol window size, that -covers the interior of the window and excludes the border. -.KE -.LP -.KS -\fBclient bounding region\fP -.IP -The region associated with a window that is directly modified via this -extension when specified by -.PN ShapeBounding . -This region is used in conjunction with the default bounding region -to produce the effective bounding region. -.KE -.LP -.KS -\fBclient clip region\fP -.IP -The region associated with a window that is directly modified via this -extension when specified by -.PN ShapeClip . -This region is used in conjunction with the default clip region -and the client bounding region to produce the effective clip region. -.KE -.LP -.KS -\fBeffective bounding region\fP -.IP -The actual shape of the window on the screen, including border and interior -(but excluding the effects of overlapping windows). When a window has a client -bounding region, the effective bounding region is the intersection of the -default bounding region and the client bounding region. Otherwise, the -effective bounding region is the same as the default bounding region. -.KE -.LP -.KS -\fBeffective clip region\fP -.IP -The actual shape of the interior of the window on the screen (excluding the -effects of overlapping windows). When a window has a client clip region or -a client bounding region, the effective clip region is the intersection of -the default clip region, the client clip region (if any) and the client -bounding region (if any). Otherwise, the effective clip region is the -same as the default clip region. -.KE diff --git a/doc/xorg-docs/specs/Xext/sync.tex b/doc/xorg-docs/specs/Xext/sync.tex deleted file mode 100644 index ddbfbf232..000000000 --- a/doc/xorg-docs/specs/Xext/sync.tex +++ /dev/null @@ -1,1010 +0,0 @@ -% $Xorg: sync.tex,v 1.3 2000/08/17 19:42:37 cpqbld Exp $ -% $XdotOrg: xc/doc/specs/Xext/sync.tex,v 1.2 2004/04/23 18:42:18 eich Exp $ -% -% Copyright 1991 by Olivetti Research Limited, Cambridge, England and -% Digital Equipment Corporation, Maynard, Massachusetts. -% -% All Rights Reserved -% -% Permission to use, copy, modify, and distribute this software and its -% documentation for any purpose and without fee is hereby granted, -% provided that the above copyright notice appear in all copies and that -% both that copyright notice and this permission notice appear in -% supporting documentation, and that the names of Digital or Olivetti -% not be used in advertising or publicity pertaining to distribution of the -% software without specific, written prior permission. -% -% DIGITAL AND OLIVETTI DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -% INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT -% SHALL THEY BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -% ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER -% IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT -% OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -% -% $XFree86$ - -%\documentstyle[a4]{article} -\documentstyle{article} - -\setlength{\parindent}{0 pt} -\setlength{\parskip}{6pt} - -% Protocol Section -% For the DP book, these four should be assigned the font for global symbols. - -\newcommand{\request}[1]{{\bf #1}} -\newcommand{\event}[1]{{\bf #1}} -\newcommand{\error}[1]{{\bf #1}} -\newcommand{\enum}[1]{{\bf #1}} - -% The following fonts are not reassigned for the DP book. - -\newcommand{\system}[1]{{\sc #1}} -\newcommand{\param}[1]{{\it #1}} - -\newcommand{\eventdef}[1]{\item {\bf#1}} -\newcommand{\requestdef}[1]{\item {\bf#1}} -\newcommand{\errordef}[1]{\item {\bf#1}} - -\newcommand{\defn}[1]{{\bf #1}} - -\newcommand{\tabstopsA}{\hspace*{4cm}\=\hspace*{1cm}\=\hspace*{7cm}\=\kill} -\newcommand{\tabstopsB}{\hspace*{1cm}\=\hspace*{1cm}\=\hspace*{3cm}\=\kill} -\newcommand{\tabstopsC}{\hspace*{1cm}\=\hspace*{1cm}\=\hspace*{5cm}\=\kill} - -% commands for formatting the API -% For the DP book, these three should be assigned the font for global symbols. - -\newcommand{\cfunctionname}[1]{\mbox{\tt#1}} -\newcommand{\ctypename}[1]{\mbox{\tt#1}} -\newcommand{\cconst}[1]{\mbox{\tt#1}} - -% For the DP book, within function definitions, the type and name are in -% the ordinary font; therefore, ctypenamedef and cfunctionnamedef are used -% and defined below. -\newcommand{\ctypenamedef}[1]{\mbox{#1}} -\newcommand{\cfunctionnamedef}[1]{\mbox{#1}} -\newcommand{\cargname}[1]{\mbox{\it#1}} -\newcommand{\cstartfunction}[2]{\begin{sloppypar}\begin{samepage}\ctypenamedef{#1}\\ \cfunctionnamedef{#2}\ (} -\newcommand{\cargdecl}[2]{\penalty -1\ctypenamedef{#1} \cargname{#2}} -\newcommand{\cendfunctiondecl}{){\hangafter=2 \hangindent=20pt \raggedright\par}} -\newcommand{\cendfuncdescription}{\end{samepage}\end{sloppypar}} - -\newcommand{\cstartmacro}[2]{\begin{sloppypar}\begin{samepage}\ctypenamedef{#1}\\ \cfunctionnamedef{#2}\ (} -\newcommand{\cendmacrodecl}{)\par} -\newcommand{\cendmacrodescription}{\end{samepage}\end{sloppypar}} - -% make things easier with all the long names -\spaceskip .3333em plus 5em -\tolerance=2000 - -\begin{document} - -\begin{center} - -{\large X Synchronization Extension Protocol}\\[10pt] -{\large Version 3.0}\\[15pt] -{\large X Consortium Standard}\\[15pt] -{\large X Version 11, Release 6.8}\\[15pt] -{\it Tim Glauert}\\[0pt] -{\tt thg@cam-orl.co.uk}\\[0pt] -{\bf Olivetti Research / MultiWorks}\\[5pt] -{\it Dave Carver}\\[0pt] -{\tt dcc@athena.mit.edu}\\[0pt] -{\bf Digital Equipment Corporation,}\\[0pt] -{\bf MIT / Project Athena}\\[5pt] -{\it Jim Gettys}\\[0pt] -{\tt jg@crl.dec.com}\\[0pt] -{\bf Digital Equipment Corporation,}\\[0pt] -{\bf Cambridge Research Laboratory}\\[5pt] -{\it David P. Wiggins}\\[0pt] -{\tt dpw@x.org}\\[0pt] -{\bf X Consortium, Inc.}\\[0pt] - -\end {center} - -Copyright 1991 by Olivetti Research Limited, Cambridge, England and -Digital Equipment Corporation, Maynard, Massachusetts. - -{\small Permission to use, copy, modify, and distribute this documentation -for any purpose and without fee is hereby granted, provided that the above -copyright notice appear in all copies. Olivetti, Digital, MIT, and the -X Consortium -make no representations about the suitability for any purpose of the -information in this document. This documentation is provided as is without -express or implied warranty.} - -Copyright (c) 1991 X Consortium, Inc. - -{\small Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium.} -\eject - -\section{Synchronization Protocol} - -The core X protocol makes no guarantees about the relative order of execution -of requests for different clients. This means that any synchronization between -clients must be done at the client level in an operating system-dependent and -network-dependent manner. Even if there was an accepted standard for such -synchronization, the use of a network introduces unpredictable delays between -the synchronization of the clients and the delivery of the resulting requests -to the X server. - -The core X protocol also makes no guarantees about the time at which requests -are executed, which means that all clients with real-time constraints must -implement their timing on the host computer. Any such timings are subject to -error introduced by delays within the operating system and network and are -inefficient because of the need for round-trip requests that keep the client and -server synchronized. - -The synchronization extension provides primitives that allow synchronization -between clients to take place entirely within the X server. This removes any -error introduced by the network and makes it possible to synchronize clients -on different hosts running different operating systems. This is important for -multimedia applications, where audio, video, and graphics data streams are -being synchronized. The extension also provides internal timers within the X -server to which client requests can be synchronized. This allows simple -animation applications to be implemented without any round-trip requests and -makes best use of buffering within the client, network, and server. - -\subsection{Description} - -The mechanism used by this extension for synchronization within the X server -is to block the processing of requests from a client until a specific -synchronization condition occurs. When the condition occurs, the client is -released and processing of requests continues. Multiple clients may block on -the same condition to give inter-client synchronization. Alternatively, a -single client may block on a condition such as an animation frame marker. - -The extension adds \defn{Counter} and \defn{Alarm} to the set of resources -managed by the server. A counter has a 64-bit integer value that may be -increased or decreased by client requests or by the server internally. A -client can block by sending an \request{Await} request that waits until -one of a set of synchronization conditions, called TRIGGERs, becomes TRUE. - -The \request{CreateCounter} request allows a client to create a -\defn{Counter} that can be changed by explicit \request{SetCounter} and -\request{ChangeCounter} requests. These can be used to implement -synchronization between different clients. - -There are some counters, called \defn{System Counters}, that are changed by -the server internally rather than by client requests. The effect of any change -to a system counter is not visible until the server has finished processing the -current request. In other words, system counters are apparently updated in the -gaps between the execution of requests rather than during the actual execution -of a request. The extension provides a system counter that advances with the -server time as defined by the core protocol, and it may also provide counters -that advance with the real-world time or that change each time the CRT -screen is refreshed. Other extensions may provide their own -extension-specific system counters. - -The extension provides an \defn{Alarm} mechanism that allows clients to -receive an event on a regular basis when a particular counter is changed. - -\subsection{Types} - -Please refer to the X11 Protocol specification as this document uses -syntactic conventions established there and references types defined there. - -The following new types are used by the extension. - -\begin{tabbing}{l} -SYSTEMCOUNTER: \=\kill - INT64: \>64-bit signed integer\\ - COUNTER:\>XID\\ - VALUETYPE:\> \{\enum{Absolute},\enum{Relative}\}\\ - TESTTYPE:\> \{\enum{PositiveTransition},\enum{NegativeTransition},\\ - \>\enum{PositiveComparison},\enum{NegativeComparison}\}\\ - TRIGGER:\>[\\ - \>counter:COUNTER,\\ - \>value-type:VALUETYPE,\\ - \>wait-value:INT64,\\ - \>test-type:TESTTYPE\\ - \>]\\ - WAITCONDITION:\>[\\ - \>trigger:TRIGGER,\\ - \>event-threshold:INT64\\ - \>]\\ - SYSTEMCOUNTER:\>[\\ - \>name:STRING8,\\ - \>counter:COUNTER,\\ - \>resolution:INT64\\ - \>]\\ - ALARM: \>XID\\ - ALARMSTATE:\> \{\enum{Active},\enum{Inactive},\enum{Destroyed}\}\\ -\end{tabbing} - -The COUNTER type defines the client-side handle on a server \defn{Counter}. -The value of a counter is an INT64. - -The TRIGGER type defines a test on a counter that is either TRUE or FALSE. -The value of the test is determined by the combination of a test value, the -value of the counter, and the specified test-type. - -The test value for a trigger is calculated using the value-type and -wait-value fields when the trigger is initialized. -If the value-type field is not one of the -named VALUETYPE constants, the request that initialized the trigger -will return a \error{Value} error. If the -value-type field is \enum{Absolute}, the test value is given by the -wait-value field. If the value-type field is -\enum{Relative}, the test value is obtained by adding the -wait-value field to the value of the counter. If the -resulting test value would lie outside the range for an INT64, the -request that initialized the trigger will return a -\error{Value} error. If counter is \enum{None} and the -value-type is \enum{Relative}, the request that initialized the -trigger will return a \error{Match} error. -If counter is not \enum{None} and does not name a valid -counter, a \error{Counter} error is generated. - -If the test-type is \enum{PositiveTransition}, the trigger is -initialized to FALSE, and it will become TRUE when the counter changes -from a value less than the test value to a value greater than or equal to the -test value. If the test-type is \enum{NegativeTransition}, the -trigger is initialize to FALSE, and it will become TRUE when the -counter changes from a value greater than the test value to a value -less than or equal to the test value. If the test-type is -\enum{PositiveComparison}, the trigger is TRUE if the counter is greater than or -equal to the test value and FALSE otherwise. If the test-type is -\enum{NegativeComparison}, the trigger is TRUE if the counter is less than or -equal to the test value and FALSE otherwise. If the test-type -is not one of the named TESTTYPE constants, the request that -initialized the trigger will return a \error{Value} error. A trigger -with a counter value of \enum{None} and a valid test-type -is always TRUE. - -The WAITCONDITION type is simply a trigger with an associated -event-threshold. The event threshold is used by the \request{Await} -request to decide whether or not to generate an event to the client after the -trigger has become TRUE. By setting the event-threshold to an -appropriate value, it is possible to detect the situation where an -\request{Await} request was processed after the TRIGGER became TRUE, -which usually indicates that the server is not processing requests as fast as -the client expects. - -The SYSTEMCOUNTER type provides the client with information about a -\defn{System Counter}. The name field is the textual name of the -counter that identifies the counter to the client. The counter field -is the client-side handle that should be used in requests that require a -counter. The resolution field gives the approximate step size of the -system counter. This is a hint to the client that the extension may not be -able to resolve two wait conditions with test values that differ by less than -this step size. A microsecond clock, for example, may advance in steps of 64 -microseconds, so a counter based on this clock would have a resolution -of 64. - -The only system counter that is guaranteed to be present is called -\system{SERVERTIME}, which counts milliseconds from some arbitrary starting -point. The least significant 32 bits of this counter track the value of Time -used by the server in Events and Requests. Other system counters may be -provided by different implementations of the extension. The X Consortium will -maintain a registry of system counter names to avoid collisions in the -name space. - -An ALARM is the client-side handle on an \defn{Alarm} resource. - -\subsection{Errors} - -\begin{description} - -\errordef{Counter} - -This error is generated if the value for a COUNTER argument in a request does -not name a defined COUNTER. - -\errordef{Alarm} - -This error is generated if the value for an ALARM argument in a request does -not name a defined ALARM. - -\end{description} - -\subsection{Requests} - -\begin{description} - -% start marker -\requestdef{Initialize} - -\begin{tabular}{l} - \param{version-major},\param{version-minor}: CARD8 -\end{tabular}\\ -$\Rightarrow$\\ -\begin{tabular}{l} - version-major,version-minor: CARD8 -\end{tabular} -%end marker - -This request must be executed before any other requests for this -extension. If a client violates this rule, the results of all SYNC -requests that it issues are undefined. The request takes the version -number of the extension that the client wishes to use and returns the -actual version number being implemented by the extension for this -client. The extension may return different version numbers to a client -depending of the version number supplied by that client. This request -should be executed only once for each client connection. - -Given two different versions of the SYNC protocol, v1 and v2, v1 is -compatible with v2 if and only if $v1.version\_major = v2.version\_major$ -and $v1.version\_minor \leq v2.version\_minor$. Compatible means that the -functionality is fully supported in an identical fashion in the two -versions. - -This document describes major version 3, minor version 0 of the SYNC -protocol. - -% start marker -\requestdef{ListSystemCounters} - -$\Rightarrow$\\ -\begin{tabular}{l} - system-counters: LISTofSYSTEMCOUNTER\\[5pt] - Errors: \error{Alloc} -\end{tabular} -% end marker - -This request returns a list of all the system counters that are available at -the time the request is executed, which includes the system counters that are -maintained by other extensions. The list returned by this request may change -as counters are created and destroyed by other extensions. - -% start marker -\requestdef{CreateCounter} - -\begin{tabular}{l} - \param{id}: COUNTER\\ - \param{initial-value}: INT64\\[5pt] - Errors: \error{IDChoice},\error{Alloc} -\end{tabular} -% end marker - -This request creates a counter and assigns the specified id to it. -The counter value is initialized to the specified initial-value -and there are no clients waiting on the counter. - -% start marker -\requestdef{DestroyCounter} - -\begin{tabular}{l} - \param{counter}: COUNTER\\[5pt] - Errors: \error{Counter},\error{Access} -\end{tabular} -% end marker - -This request destroys the given counter and sets the counter fields -for all triggers that specify this counter to \enum{None}. All clients -waiting on the counter are released and a \event{CounterNotify} event with the -destroyed field set to TRUE is sent to each waiting client, -regardless of the event-threshold. All alarms specifying the counter -become \enum{Inactive} and an \event{AlarmNotify} event with a state -field of \enum{Inactive} is generated. A counter is destroyed automatically -when the connection to the creating client is closed down if the close-down -mode is {\bf Destroy}. An \error{Access} error is generated if counter -is a system counter. A \error{Counter} error is generated if counter -does not name a valid counter. - -% start marker -\requestdef{QueryCounter} - -\begin{tabular}{l} - \param{counter}: COUNTER\\ -\end{tabular}\\ -$\Rightarrow$\\ -\begin{tabular}{l} - value: INT64\\[5pt] - Errors: \error{Counter} -\end{tabular} -% end marker - -This request returns the current value of the given counter or a generates -\error{Counter} error if counter does not name a valid counter. - -% start marker -\requestdef{Await} - -\begin{tabular}{l} - \param{wait-list}: LISTofWAITCONDITION\\[5pt] - Errors: \error{Counter},\error{Alloc},\error{Value} -\end{tabular} -% end marker - -When this request is executed, the triggers in the wait-list are -initialized using the wait-value and value-type fields, as -described in the definition of TRIGGER above. The processing of further -requests for the client is blocked until one or more of the triggers becomes -TRUE. This may happen immediately, as a result of the initialization, or at -some later time, as a result of a subsequent \request{SetCounter}, -\request{ChangeCounter} or \request{DestroyCounter} request. - -A \error{Value} error is generated if wait-list is empty. - -When the client becomes unblocked, each trigger is checked to determine -whether a \event{CounterNotify} event should be generated. The difference -between the counter and the test value is calculated by -subtracting the test value from the value of the counter. If the -test-type is \enum{PositiveTransition} or \enum{PositiveComparison}, a \event{CounterNotify} event is generated if the -difference is at least event-threshold. If the test-type is -\enum{NegativeTransition} or \enum{NegativeComparison}, a -\event{CounterNotify} event is generated if the difference is at most -event-threshold. If the difference lies outside the range for an -INT64, an event is not generated. - -This threshold check is made for each trigger in the list and a -\event{CounterNotify} event is generated for every trigger for which -the check succeeds. The check for \enum{CounterNotify} events is performed -even if one of the triggers is TRUE when the request is first executed. Note -that a \event{CounterNotify} event may be generated for a trigger that -is FALSE if there are multiple triggers in the request. A -\event{CounterNotify} event with the destroyed flag set to TRUE is -always generated if the counter for one of the triggers is destroyed. - -% start marker -\requestdef{ChangeCounter} - -\begin{tabular}{l} - \param{counter}: COUNTER\\ - \param{amount}: INT64\\[5pt] - Errors: \error{Counter},\error{Access},\error{Value} -\end{tabular} -% end marker - -This request changes the given counter by adding amount to the current -counter value. If the change to this counter satisfies a trigger for which a -client is waiting, that client is unblocked and one or more -\event{CounterNotify} events may be generated. If the change to the counter -satisfies the trigger for an alarm, an \event{AlarmNotify} event is generated -and the alarm is updated. An \error{Access} error is generated if -counter is a system counter. A \error{Counter} error is generated if -counter does not name a valid counter. If the resulting value for the -counter would be outside the range for an INT64, a \error{Value} error is -generated and the counter is not changed. - -It should be noted that all the clients whose triggers are satisfied by -this change are unblocked, so this request cannot be used to implement mutual -exclusion. - -% start marker -\requestdef{SetCounter} - -\begin{tabular}{l} - \param{counter}: COUNTER\\ - \param{value}: INT64\\[5pt] - Errors: \error{Counter},\error{Access} -\end{tabular} -% end marker - -This request sets the value of the given counter to value. The effect -is equivalent to executing the appropriate \request{ChangeCounter} request to -change the counter value to value. An \error{Access} error is -generated if counter names a system counter. A \error{Counter} error -is generated if counter does not name a valid counter. - -% start marker -\requestdef{CreateAlarm} - -\begin{tabular}{l} - \param{id}: ALARM\\ - \param{values-mask}: CARD32\\ - \param{values-list}: LISTofVALUE\\[5pt] - Errors: \error{IDChoice},\error{Counter},\error{Match},\error{Value},\error{Alloc} -\end{tabular} -% end marker - -This request creates an alarm and assigns the identifier id to it. The -values-mask and values-list specify the attributes that are -to be explicitly initialized. The attributes for an Alarm and their defaults -are: - -\begin{center} -\begin{tabular}{l|l|ll} -Attribute & Type & Default \\ -\hline -trigger & TRIGGER & counter & \enum{None}\\ - & & value-type & \enum{Absolute}\\ - & & value & 0\\ - & & test-type & \enum{PositiveComparison}\\ -delta & INT64 & 1 \\ -events & BOOL & TRUE -\end{tabular} -\end{center} - -The trigger is initialized as described in the definition of TRIGGER, -with an error being generated if necessary. - -If the counter is \enum{None}, the state of the alarm is set to -\enum{Inactive}, else it is set to \enum{Active}. - -Whenever the trigger becomes TRUE, either as a result of this request -or as the result of a \request{SetCounter}, \request{ChangeCounter}, -\request{DestroyCounter}, or \request{ChangeAlarm} request, an -\event{AlarmNotify} event is generated and the alarm is updated. The alarm is -updated by repeatedly adding delta to the value of the -trigger and reinitializing it until it becomes FALSE. If this update -would cause value to fall outside the range for an INT64, or if the -counter value is \enum{None}, or if the -delta is 0 and test-type is \enum{PositiveComparison} or -\enum{NegativeComparison}, no change is made to value and the alarm -state is changed to \enum{Inactive} before the event is generated. No further -events are generated by an \enum{Inactive} alarm until a \request{ChangeAlarm} -or \request{DestroyAlarm} request is executed. - -If the test-type is \enum{PositiveComparison} or -\enum{PositiveTransition} and delta is less than zero, or -if the test-type is \enum{NegativeComparison} or -\enum{NegativeTransition} and delta is greater than zero, -a \error{Match} error is generated. - -The events value enables or disables delivery of \event{AlarmNotify} -events to the requesting client. The alarm keeps a separate event flag for -each client so that other clients may select to receive events from this -alarm. - -An \event{AlarmNotify} event is always generated at some time after the -execution of a \request{CreateAlarm} request. This will happen immediately if -the trigger is TRUE, or it will happen later when the -trigger becomes TRUE or the Alarm is destroyed. - -% start marker -\requestdef{ChangeAlarm} - -\begin{tabular}{l} - \param{id}: ALARM\\ - \param{values-mask}: CARD32\\ - \param{values-list}: LISTofVALUE\\[5pt] - Errors: \error{Alarm},\error{Counter},\error{Value},\error{Match} -\end{tabular} -% end marker - -This request changes the parameters of an Alarm. All of the parameters -specified for the \request{CreateAlarm} request may be changed using this -request. The trigger is reinitialized and an \event{AlarmNotify} -event is generated if appropriate, as explained in the description of the -\request{CreateAlarm} request. - -Changes to the events flag affect the event delivery to the requesting -client only and may be used by a client to select or deselect event delivery -from an alarm created by another client. - -The order in which attributes are verified and altered is -server-dependent. If an error is generated, a subset of the -attributes may have been altered. - -% start marker -\requestdef{DestroyAlarm} - -\begin{tabular}{l} - \param{alarm}: ALARM\\[5pt] Errors: \error{Alarm} -\end{tabular} -% end marker - -This request destroys an alarm. An alarm is automatically destroyed -when the creating client is closed down if the close-down mode is {\bf -Destroy}. When an alarm is destroyed, an \event{AlarmNotify} event is -generated with a state value of \enum{Destroyed}. - -% start marker -\requestdef{QueryAlarm} - -\begin{tabular}{l} - \param{alarm}: ALARM\\ -\end{tabular}\\ -$\Rightarrow$\\ -\begin{tabular}{l} - trigger: TRIGGER\\ - delta: INT64\\ - events: ALARMEVENTMASK\\ - state: ALARMSTATE\\[5pt] - Errors: \error{Alarm} -\end{tabular} -% end marker - -This request retrieves the current parameters for an Alarm. - -% start marker -\requestdef{SetPriority} - -\begin{tabular}{l} - \param{client-resource}: XID\\ - \param{priority}: INT32\\[5pt] - Errors: \error{Match} -\end{tabular} -% end marker - -This request changes the scheduling priority of the client that created -client-resource. If client-resource is \enum{None}, then the -priority for the client making the request is changed. A \error{Match} error -is generated if client-resource is not \enum{None} and does not name -an existing resource in the server. For any two priority values, -{\tt A} and {\tt B}, {\tt A} is higher priority if and only if {\tt A} is -greater than {\tt B}. - -The priority of a client is set to 0 when the initial client connection is -made. - -The effect of different client priorities depends on the particular -implementation of the extension, and in some cases it may have no effect at -all. However, the intention is that higher priority clients will have their -requests executed before those of lower priority clients. - -For most animation applications, it is desirable that animation clients be -given priority over nonrealtime clients. This improves the smoothness of the -animation on a loaded server. Because a server is free to implement very strict -priorities, processing requests for the highest priority client to the -exclusion of all others, it is important that a client that may potentially -monopolize the whole server, such as an animation that produces continuous -output as fast as it can with no rate control, is run at low rather than high -priority. - -% start marker -\requestdef{GetPriority} - -\begin{tabular}{l} - \param{client-resource}: XID\\ -\end{tabular}\\ -$\Rightarrow$\\ -\begin{tabular}{l} - priority: INT32\\[5pt] - Errors: \error{Match} -\end{tabular} -% end marker - -This request returns the scheduling priority of the client that created -client-resource. If client-resource is \enum{None}, then the -priority for the client making the request is returned. A \error{Match} error -is generated if client-resource is not \enum{None} and does not name -an existing resource in the server. - -\end{description} - -\subsection{Events} - -\begin{description} - -% start marker -\eventdef{CounterNotify} - -\begin{tabular}{l} - \param{counter}: COUNTER \\ - \param{wait-value}: INT64 \\ - \param{counter-value}: INT64 \\ - \param{time}: TIME \\ - \param{count}: CARD16 \\ - \param{destroyed}: BOOL -\end{tabular} -% end marker - -\event{CounterNotify} events may be generated when a client becomes unblocked -after an \request{Await} request has been processed. -The wait-value is the value being waited for, and -counter-value is the actual value of the counter at the time -the event was generated. The -destroyed flag is TRUE if this request was generated as the -result of the destruction of the counter and FALSE otherwise. -The time is the server time at which the event was generated. - -When a client is unblocked, all the \event{CounterNotify} events for the -\request{Await} request are generated contiguously. If -count is 0, there are no more events to follow for this request. If -count is $n$, there are at least $n$ more events to follow. - -% start marker -\eventdef{AlarmNotify} - -\begin{tabular}{l} - \param{alarm}: ALARM \\ - \param{counter-value}: INT64 \\ - \param{alarm-value}: INT64 \\ - \param{state}: ALARMSTATE \\ - \param{time}: TIME -\end{tabular} -% end marker - -An \event{AlarmNotify} event is generated when an alarm is triggered. -alarm-value is the test value of the trigger in the alarm when it was -triggered, counter-value is the value of the counter that triggered -the alarm, and time is the server time at which the event was -generated. The state is the new state of the alarm. If state is -\enum{Inactive}, no more events will be generated by this alarm until a -\request{ChangeAlarm} request is executed, the alarm is destroyed, or the -counter for the alarm is destroyed. - -\end{description} - -\section{Encoding} - -Please refer to the X11 Protocol Encoding document as this section uses -syntactic conventions established there and references types defined there. - -The name of this extension is ``SYNC''. - -\subsection{New Types} - -The following new types are used by the extension. - -\begin{tabbing} -\tabstopsC -ALARM: CARD32\\ -ALARMSTATE:\\ -\tabstopsB - \> 0 \> Active \\ - \> 1 \> Inactive \\ - \> 2 \> Destroyed\\ -\tabstopsC -COUNTER: CARD32\\ -INT64: 64-bit signed integer\\ -SYSTEMCOUNTER:\\ - \> 4 \> COUNTER \> counter \\ - \> 8 \> INT64 \> resolution\\ - \> 2 \> n \> length of name in bytes\\ - \> n \> STRING8 \> name \\ - \> p \> \> pad,p=pad(n+2)\\ -TESTTYPE:\\ -\tabstopsB - \> 0 \> PositiveTransition \\ - \> 1 \> NegativeTransition \\ - \> 2 \> PositiveComparison \\ - \> 3 \> NegativeComparison \\ -\tabstopsC -TRIGGER:\\ - \> 4 \> COUNTER \> counter \\ - \> 4 \> VALUETYPE \> wait-type \\ - \> 8 \> INT64 \> wait-value \\ - \> 4 \> TESTTYPE \> test-type \\ -VALUETYPE:\\ -\tabstopsB - \> 0 \> Absolute \\ - \> 1 \> Relative \\ -\tabstopsC -WAITCONDITION:\\ - \> 20 \> TRIGGER \> trigger \\ - \> 8 \> INT64 \> event threshold\\ -\end{tabbing} - -An INT64 is encoded in 8 bytes with the most significant 4 bytes -first followed by the least significant 4 bytes. Within these -4-byte groups, the byte ordering determined during connection setup -is used. - -\subsection{Errors} - -\begin{tabbing} -\tabstopsC -{\bf Counter}\\ - \> 1 \> 0 \> Error \\ - \> 1 \> Base + 0 \> code \\ - \> 2 \> CARD16 \> sequence number \\ - \> 4 \> CARD32 \> bad counter \\ - \> 2 \> CARD16 \> minor opcode \\ - \> 1 \> CARD8 \> major opcode \\ - \> 21 \> \> unused \\ -{\bf Alarm}\\ - \> 1 \> 0 \> Error \\ - \> 1 \> Base + 1 \> code \\ - \> 2 \> CARD16 \> sequence number \\ - \> 4 \> CARD32 \> bad alarm \\ - \> 2 \> CARD16 \> minor opcode \\ - \> 1 \> CARD8 \> major opcode \\ - \> 21 \> \> unused \\ -\end{tabbing} - -\subsection{Requests} - -\renewcommand{\thefootnote}{\fnsymbol{footnote}} -\setcounter{footnote}{1} -\setlength{\topsep}{0pt} %vertical space before and after tabbing -\begin{tabbing} -\tabstopsC -{\bf Initialize}\\ - \> 1 \> CARD8 \> major opcode \\ - \> 1 \> 0 \> minor opcode \\ - \> 2 \> 2 \> request length \\ - \> 1 \> CARD8 \> major version \\ - \> 1 \> CARD8 \> minor version \\ - \> 2 \> \> unused \\ -$\Rightarrow$\\ - \> 1 \> 1 \> Reply \\ - \> 1 \> \> unused \\ - \> 2 \> CARD16 \> sequence number \\ - \> 4 \> 0 \> reply length \\ - \> 1 \> CARD8 \> major version \\ - \> 1 \> CARD8 \> minor version \\ - \> 2 \> \> unused \\ - \> 20 \> \> unused \\ -\\ -{\bf ListSystemCounters}\\ - \> 1 \> CARD8 \> major opcode \\ - \> 1 \> 1 \> minor opcode \\ - \> 2 \> 1 \> request length \\ -$\Rightarrow$\\ - \> 1 \> 1 \> Reply \\ - \> 1 \> \> unused \\ - \> 2 \> CARD16 \> sequence number \\ - \> 4 \> {\it variable} \> reply length \\ - \> 4 \> INT32 \> list length \\ - \> 20 \> \> unused \\ - \> 4n \> list of SYSTEMCOUNTER \> system counters \\ -\\ -{\bf CreateCounter}\\ - \> 1 \> CARD8 \> major opcode \\ - \> 1 \> 2 \> minor opcode \\ - \> 2 \> 4 \> request length \\ - \> 4 \> COUNTER \> id\\ - \> 8 \> INT64 \> initial value\\ -\\ -{\bf DestroyCounter}\\ - \> 1 \> CARD8 \> major opcode \\ - \> 1 \> 6 \> minor opcode\footnotemark[1] \\ - \> 2 \> 2 \> request length \\ - \> 4 \> COUNTER \> counter -\end{tabbing} -\footnotetext{A previous version of this document gave an incorrect -minor opcode.} -\begin{tabbing} -\tabstopsC -{\bf QueryCounter}\\ - \> 1 \> CARD8 \> major opcode \\ - \> 1 \> 5 \> minor opcode\footnotemark[1] \\ - \> 2 \> 2 \> request length \\ - \> 4 \> COUNTER \> counter \\ -$\Rightarrow$\\ - \> 1 \> 1 \> Reply \\ - \> 1 \> \> unused \\ - \> 2 \> CARD16 \> sequence number \\ - \> 4 \> 0 \> reply length \\ - \> 8 \> INT64 \> counter value \\ - \> 16 \> \> unused\\ -\\ -{\bf Await}\\ - \> 1 \> CARD8 \> major opcode \\ - \> 1 \> 7 \> minor opcode\footnotemark[1] \\ - \> 2 \> 1 + 7*n \> request length \\ - \> 28n \> LISTofWAITCONDITION \> wait conditions -\end{tabbing} -\footnotetext{A previous version of this document gave an incorrect -minor opcode.} -\setlength{\topsep}{0pt} %vertical space before and after tabbing -\begin{tabbing} -\tabstopsC -{\bf ChangeCounter}\\ - \> 1 \> CARD8 \> major opcode \\ - \> 1 \> 4 \> minor opcode\footnotemark[1] \\ - \> 2 \> 4 \> request length \\ - \> 4 \> COUNTER \> counter \\ - \> 8 \> INT64 \> amount \\ -\\ -{\bf SetCounter}\\ - \> 1 \> CARD8 \> major opcode \\ - \> 1 \> 3 \> minor opcode\footnotemark[1] \\ - \> 2 \> 4 \> request length \\ - \> 4 \> COUNTER \> counter \\ - \> 8 \> INT64 \> value \\ -\\ -{\bf CreateAlarm}\\ - \> 1 \> CARD8 \> major opcode \\ - \> 1 \> 8 \> minor opcode \\ - \> 2 \> 3+n \> request length \\ - \> 4 \> ALARM \> id \\ - \> 4 \> BITMASK \> values mask\\ -\tabstopsB - \> \> \#x00000001 \> counter \\ - \> \> \#x00000002 \> value-type \\ - \> \> \#x00000004 \> value \\ - \> \> \#x00000008 \> test-type \\ - \> \> \#x00000010 \> delta \\ - \> \> \#x00000020 \> events \\ -\tabstopsC - \> 4n \> LISTofVALUE \> values\\ -\tabstopsB -VALUES\\ - \> 4 \> COUNTER \> counter\\ - \> 4 \> VALUETYPE \> value-type \\ - \> 8 \> INT64 \> value \\ - \> 4 \> TESTTYPE \> test-type \\ - \> 8 \> INT64 \> delta \\ - \> 4 \> BOOL \> events\\ -\tabstopsC -\\ -{\bf ChangeAlarm}\\ - \> 1 \> CARD8 \> major opcode \\ - \> 1 \> 9 \> minor opcode \\ - \> 2 \> 3+n \> request length \\ - \> 4 \> ALARM \> id \\ - \> 4 \> BITMASK \> values mask \\ - \> \> encodings as for {\bf CreateAlarm}\\ - \> 4n \> LISTofVALUE \> values\\ - \> \> encodings as for {\bf CreateAlarm}\\ -\\ -{\bf DestroyAlarm}\\ - \> 1 \> CARD8 \> major opcode \\ - \> 1 \> 11 \> minor opcode\footnotemark[1] \\ - \> 2 \> 2 \> request length \\ - \> 4 \> ALARM \> alarm -\end{tabbing} -\footnotetext{A previous version of this document gave an incorrect -minor opcode.} -\begin{tabbing} -\tabstopsC -{\bf QueryAlarm}\\ - \> 1 \> CARD8 \> major opcode \\ - \> 1 \> 10 \> minor opcode\footnotemark[1] \\ - \> 2 \> 2 \> request length \\ - \> 4 \> ALARM \> alarm \\ -$\Rightarrow$\\ - \> 1 \> 1 \> Reply \\ - \> 1 \> \> unused \\ - \> 2 \> CARD16 \> sequence number \\ - \> 4 \> 2 \> reply length \\ - \> 20 \> TRIGGER \> trigger \\ - \> 8 \> INT64 \> delta \\ - \> 1 \> BOOL \> events \\ - \> 1 \> ALARMSTATE \> state \\ - \> 2 \> \> unused \\ -\\ -{\bf SetPriority}\\ - \> 1 \> CARD8 \> major opcode \\ - \> 1 \> 12 \> minor opcode \\ - \> 2 \> 3 \> request length \\ - \> 4 \> CARD32 \> id \\ - \> 4 \> INT32 \> priority \\ -\\ -{\bf GetPriority}\\ - \> 1 \> CARD8 \> major opcode \\ - \> 1 \> 13 \> minor opcode \\ - \> 2 \> 1 \> request length \\ - \> 4 \> CARD32 \> id \\ -$\Rightarrow$\\ - \> 1 \> 1 \> Reply \\ - \> 1 \> \> unused \\ - \> 2 \> CARD16 \> sequence number \\ - \> 4 \> 0 \> reply length \\ - \> 4 \> INT32 \> priority \\ - \> 20 \> \> unused\\ -\end{tabbing} - -\subsection{Events} - -\begin{tabbing} -\tabstopsC -{\bf CounterNotify}\\ - \> 1 \> Base + 0 \> code \\ - \> 1 \> 0 \> kind \\ - \> 2 \> CARD16 \> sequence number \\ - \> 4 \> COUNTER \> counter \\ - \> 8 \> INT64 \> wait value \\ - \> 8 \> INT64 \> counter value \\ - \> 4 \> TIME \> timestamp \\ - \> 2 \> CARD16 \> count \\ - \> 1 \> BOOL \> destroyed \\ - \> 1 \> \> unused \\ -\\ -{\bf AlarmNotify}\\ - \> 1 \> Base + 1 \> code \\ - \> 1 \> 1 \> kind \\ - \> 2 \> CARD16 \> sequence number \\ - \> 4 \> ALARM \> alarm \\ - \> 8 \> INT64 \> counter value \\ - \> 8 \> INT64 \> alarm value \\ - \> 4 \> TIME \> timestamp \\ - \> 1 \> ALARMSTATE \> state \\ - \> 3 \> \> unused\\ -\end{tabbing} -\end{document} diff --git a/doc/xorg-docs/specs/Xext/synclib.tex b/doc/xorg-docs/specs/Xext/synclib.tex deleted file mode 100644 index 33249a113..000000000 --- a/doc/xorg-docs/specs/Xext/synclib.tex +++ /dev/null @@ -1,773 +0,0 @@ -% $Xorg: synclib.tex,v 1.3 2000/08/17 19:42:37 cpqbld Exp $ -% $XdotOrg: xc/doc/specs/Xext/synclib.tex,v 1.2 2004/04/23 18:42:18 eich Exp $ -% -% Copyright 1991 by Olivetti Research Limited, Cambridge, England and -% Digital Equipment Corporation, Maynard, Massachusetts. -% -% All Rights Reserved -% -% Permission to use, copy, modify, and distribute this software and its -% documentation for any purpose and without fee is hereby granted, -% provided that the above copyright notice appear in all copies and that -% both that copyright notice and this permission notice appear in -% supporting documentation, and that the names of Digital or Olivetti -% not be used in advertising or publicity pertaining to distribution of the -% software without specific, written prior permission. -% -% DIGITAL AND OLIVETTI DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -% INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT -% SHALL THEY BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -% ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER -% IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT -% OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -%\documentstyle[a4]{article} -\documentstyle{article} - -\setlength{\parindent}{0 pt} -\setlength{\parskip}{6pt} - -% Protocol Section -% For the DP book, these four should be assigned the font for global symbols. - -\newcommand{\request}[1]{{\bf #1}} -\newcommand{\event}[1]{{\bf #1}} -\newcommand{\error}[1]{{\bf #1}} -\newcommand{\enum}[1]{{\bf #1}} - -% The following fonts are not reassigned for the DP book. - -\newcommand{\system}[1]{{\sc #1}} -\newcommand{\param}[1]{{\it #1}} - -\newcommand{\eventdef}[1]{\item {\bf#1}} -\newcommand{\requestdef}[1]{\item {\bf#1}} -\newcommand{\errordef}[1]{\item {\bf#1}} - -\newcommand{\defn}[1]{{\bf #1}} - -\newcommand{\tabstopsA}{\hspace*{4cm}\=\hspace*{1cm}\=\hspace*{7cm}\=\kill} -\newcommand{\tabstopsB}{\hspace*{1cm}\=\hspace*{1cm}\=\hspace*{3cm}\=\kill} -\newcommand{\tabstopsC}{\hspace*{1cm}\=\hspace*{1cm}\=\hspace*{5cm}\=\kill} - -% commands for formatting the API -% For the DP book, these three should be assigned the font for global symbols. - -\newcommand{\cfunctionname}[1]{\mbox{\tt#1}} -\newcommand{\ctypename}[1]{\mbox{\tt#1}} -\newcommand{\cconst}[1]{\mbox{\tt#1}} - -% For the DP book, within function definitions, the type and name are in -% the ordinary font; therefore, ctypenamedef and cfunctionnamedef are used -% and defined below. -\newcommand{\ctypenamedef}[1]{\mbox{#1}} -\newcommand{\cfunctionnamedef}[1]{\mbox{#1}} -\newcommand{\cargname}[1]{\mbox{\it#1}} -\newcommand{\cstartfunction}[2]{\begin{sloppypar}\begin{samepage}\ctypenamedef{#1}\\ \cfunctionnamedef{#2}\ (} -\newcommand{\cargdecl}[2]{\penalty -1\ctypenamedef{#1} \cargname{#2}} -\newcommand{\cendfunctiondecl}{){\hangafter=2 \hangindent=20pt \raggedright\par}} -\newcommand{\cendfuncdescription}{\end{samepage}\end{sloppypar}} - -\newcommand{\cstartmacro}[2]{\begin{sloppypar}\begin{samepage}\ctypenamedef{#1}\\ \cfunctionnamedef{#2}\ (} -\newcommand{\cendmacrodecl}{)\par} -\newcommand{\cendmacrodescription}{\end{samepage}\end{sloppypar}} - -% make things easier with all the long names -\spaceskip .3333em plus 5em -\tolerance=2000 - -\begin{document} - -\begin{center} - -{\large X Synchronization Extension Library}\\[10pt] -{\large Version 3.0}\\[15pt] -{\large X Consortium Standard}\\[15pt] -{\large X Version 11, Release 6.8}\\[15pt] -{\it Tim Glauert}\\[0pt] -{\tt thg@cam-orl.co.uk}\\[0pt] -{\bf Olivetti Research / MultiWorks}\\[5pt] -{\it Dave Carver}\\[0pt] -{\tt dcc@athena.mit.edu}\\[0pt] -{\bf Digital Equipment Corporation,}\\[0pt] -{\bf MIT / Project Athena}\\[5pt] -{\it Jim Gettys}\\[0pt] -{\tt jg@crl.dec.com}\\[0pt] -{\bf Digital Equipment Corporation,}\\[0pt] -{\bf Cambridge Research Laboratory}\\[5pt] -{\it David P. Wiggins}\\[0pt] -{\tt dpw@x.org}\\[0pt] -{\bf X Consortium, Inc.}\\[0pt] - -\end {center} - -Copyright 1991 by Olivetti Research Limited, Cambridge, England and -Digital Equipment Corporation, Maynard, Massachusetts. - -{\small Permission to use, copy, modify, and distribute this documentation -for any purpose and without fee is hereby granted, provided that the above -copyright notice appear in all copies. Olivetti, Digital, MIT, and the -X Consortium -make no representations about the suitability for any purpose of the -information in this document. This documentation is provided as is without -express or implied warranty.} - -Copyright (c) 1991 X Consortium, Inc. - -{\small Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium.} -\eject - -\section{Synchronization Protocol} - -The core X protocol makes no guarantees about the relative order of execution -of requests for different clients. This means that any synchronization between -clients must be done at the client level in an operating system-dependent and -network-dependent manner. Even if there was an accepted standard for such -synchronization, the use of a network introduces unpredictable delays between -the synchronization of the clients and the delivery of the resulting requests -to the X server. - -The core X protocol also makes no guarantees about the time at which requests -are executed, which means that all clients with real-time constraints must -implement their timing on the host computer. Any such timings are subject to -error introduced by delays within the operating system and network and are -inefficient because of the need for round-trip requests that keep the client and -server synchronized. - -The synchronization extension provides primitives that allow synchronization -between clients to take place entirely within the X server. This removes any -error introduced by the network and makes it possible to synchronize clients -on different hosts running different operating systems. This is important for -multimedia applications, where audio, video, and graphics data streams are -being synchronized. The extension also provides internal timers within the X -server to which client requests can be synchronized. This allows simple -animation applications to be implemented without any round-trip requests and -makes best use of buffering within the client, network, and server. - -\subsection{Description} - -The mechanism used by this extension for synchronization within the X server -is to block the processing of requests from a client until a specific -synchronization condition occurs. When the condition occurs, the client is -released and processing of requests continues. Multiple clients may block on -the same condition to give inter-client synchronization. Alternatively, a -single client may block on a condition such as an animation frame marker. - -The extension adds \defn{Counter} and \defn{Alarm} to the set of resources -managed by the server. A counter has a 64-bit integer value that may be -increased or decreased by client requests or by the server internally. A -client can block by sending an \request{Await} request that waits until -one of a set of synchronization conditions, called TRIGGERs, becomes TRUE. - -The \request{CreateCounter} request allows a client to create a -\defn{Counter} that can be changed by explicit \request{SetCounter} and -\request{ChangeCounter} requests. These can be used to implement -synchronization between different clients. - -There are some counters, called \defn{System Counters}, that are changed by -the server internally rather than by client requests. The effect of any change -to a system counter is not visible until the server has finished processing the -current request. In other words, system counters are apparently updated in the -gaps between the execution of requests rather than during the actual execution -of a request. The extension provides a system counter that advances with the -server time as defined by the core protocol, and it may also provide counters -that advance with the real-world time or that change each time the CRT -screen is refreshed. Other extensions may provide their own -extension-specific system counters. - -The extension provides an \defn{Alarm} mechanism that allows clients to -receive an event on a regular basis when a particular counter is changed. - -\section{C Language Binding} - -The C routines provide direct access to the protocol and add -no additional semantics. - -The include file for this extension is \verb||. - -Most of the names in the language binding are derived from the -protocol names by prepending \cfunctionname{XSync} to the protocol name and changing -the capitalization. - -\subsection{C Functions} - -Most of the following functions generate SYNC protocol requests. - -% start marker -\cstartfunction{Status}{XSyncQueryExtension} -\cargdecl{Display *}{dpy}, -\cargdecl{int *}{event\_base\_return}, -\cargdecl{int *}{error\_base\_return} -\cendfunctiondecl -% end marker - -If dpy supports the SYNC extension, \cfunctionname{XSyncQueryExtension} -returns \cconst{True}, sets *event\_base\_return to the event number for the -first SYNC event, and sets -*error\_base\_return to the error number for the first SYNC -error. If dpy does not support the SYNC extension, it -returns \cconst{False}. -\cendfuncdescription - - -% start marker -\cstartfunction{Status}{XSyncInitialize} -\cargdecl{Display *}{dpy}, -\cargdecl{int *}{major\_version\_return}, -\cargdecl{int *}{minor\_version\_return} -\cendfunctiondecl -% end marker - -\cfunctionname{XSyncInitialize} sets *major\_version\_return and -*minor\_version\_return to the major/minor SYNC protocol -version supported by the server. If the XSync library is compatible -with the version returned by the server, this function returns \cconst{True}. -If dpy does not support the SYNC extension, or if there was an error during -communication with the server, or if the server and library protocol -versions are incompatible, this function returns \cconst{False}. The only -XSync function that may be called before this function is -\cfunctionname{XSyncQueryExtension}. If a client violates this rule, -the effects of all XSync calls that it makes are undefined. -\cendfuncdescription - - -% start marker -\cstartfunction{XSyncSystemCounter *}{XSyncListSystemCounters} -\cargdecl{Display *}{dpy}, -\cargdecl{int *}{n\_counters\_return} -\cendfunctiondecl -% end marker - -\cfunctionname{XSyncListSystemCounters} returns a pointer to an -array of system counters supported by the display and sets -*n\_counters\_return to the number of -counters in the array. The array should be freed with -\cfunctionname{XSyncFreeSystemCounterList}. If dpy does not -support the SYNC extension, -or if there was an error during communication with the -server, or if the server does not support any system counters, this -function returns NULL. - -\ctypename{XSyncSystemCounter} has the following fields: - -\begin{tabular}{lll} -char * & name; & /* null-terminated name of system counter */\\ -XSyncCounter & counter; & /* counter id of this system counter */\\ -XSyncValue & resolution; & /* resolution of this system counter */\\ -\end{tabular} -\cendfuncdescription - - -% start marker -\cstartfunction{void}{XSyncFreeSystemCounterList} -\cargdecl{XSyncSystemCounter *}{list} -\cendfunctiondecl -% end marker - -\cfunctionname{XSyncFreeSystemCounterList} frees the memory associated -with the system counter list returned by \cfunctionname{XSyncListSystemCounters}. -\cendfuncdescription - - -% start marker -\cstartfunction{XSyncCounter}{XSyncCreateCounter} -\cargdecl{Display *}{dpy}, -\cargdecl{XSyncValue}{initial\_value} -\cendfunctiondecl -% end marker - -\cfunctionname{XSyncCreateCounter} creates a counter on the dpy -with the given initial\_value and returns the counter ID. -It returns \cconst{None} if dpy does not -support the SYNC extension. -\cendfuncdescription - - -% start marker -\cstartfunction{Status}{XSyncSetCounter} -\cargdecl{Display *}{dpy}, -\cargdecl{XSyncCounter}{counter}, -\cargdecl{XSyncValue}{value} -\cendfunctiondecl -% end marker - -\cfunctionname{XSyncSetCounter} sets counter to value. -It returns \cconst{False} if dpy does not support the SYNC extension; -otherwise, it returns \cconst{True}. -\cendfuncdescription - - -% start marker -\cstartfunction{Status}{XSyncChangeCounter} -\cargdecl{Display *}{dpy}, -\cargdecl{XSyncCounter}{counter}, -\cargdecl{XSyncValue}{value} -\cendfunctiondecl -% end marker - -\cfunctionname{XSyncChangeCounter} adds value to counter. -It returns \cconst{False} if dpy does not support the SYNC extension; -otherwise, it returns \cconst{True}. -\cendfuncdescription - - -% start marker -\cstartfunction{Status}{XSyncDestroyCounter} -\cargdecl{Display *}{dpy}, -\cargdecl{XSyncCounter}{counter} -\cendfunctiondecl -% end marker - -\cfunctionname{XSyncDestroyCounter} destroys counter. -It returns \cconst{False} if dpy does not -support the SYNC extension; otherwise, it returns \cconst{True}. -\cendfuncdescription - - -% start marker -\cstartfunction{Status}{XSyncQueryCounter} -\cargdecl{Display *}{dpy}, -\cargdecl{XSyncCounter}{counter}, -\cargdecl{XSyncValue *}{value\_return} -\cendfunctiondecl -% end marker - -\cfunctionname{XSyncQueryCounter} sets *value\_return to the current value of -counter. It returns \cconst{False} if there was an error during -communication with the server or if dpy does not support -the SYNC extension; otherwise, it returns \cconst{True}. -\cendfuncdescription - - -% start marker -\cstartfunction{Status}{XSyncAwait} -\cargdecl{Display *}{dpy}, -\cargdecl{XSyncWaitCondition *}{wait\_list}, -\cargdecl{int}{n\_conditions} -\cendfunctiondecl -% end marker - -\cfunctionname{XSyncAwait} awaits on the conditions in wait\_list. -The n\_conditions is the number of wait conditions in -wait\_list. It returns \cconst{False} if dpy does not -support the SYNC extension; otherwise, it returns \cconst{True}. -The await is processed asynchronously by the server; -this function always returns immediately -after issuing the request. - -\ctypename{XSyncWaitCondition} has the following fields: - -\begin{tabular}{lll} -XSyncCounter & trigger.counter; & /* counter to trigger on */ \\ -XSyncValueType & trigger.value\_type; & /* absolute/relative */ \\ -XSyncValue & trigger.wait\_value; & /* value to compare counter to */ \\ -XSyncTestType & trigger.test\_type; & /* pos/neg comparison/transtion */ \\ -XSyncValue & event\_threshold; & /* send event if past threshold */ \\ -\end{tabular} - -\ctypename{XSyncValueType} can be either \cconst{XSyncAbsolute} or \cconst{XSyncRelative}. - -\ctypename{XSyncTestType} can be one of \cconst{XSyncPositiveTransition}, -\cconst{XSyncNegativeTransition}, \cconst{XSyncPositiveComparison}, or -\cconst{XSyncNegativeComparison}. -\cendfuncdescription - - -% start marker -\cstartfunction{XSyncAlarm}{XSyncCreateAlarm} -\cargdecl{Display *}{dpy}, -\cargdecl{unsigned long}{values\_mask}, -\cargdecl{XSyncAlarmAttributes *}{values} -\cendfunctiondecl -% end marker - -\cfunctionname{XSyncCreateAlarm} creates an alarm and returns the alarm ID. -It returns \cconst{None} if the display does not support the SYNC extension. -The values\_mask and values specify the alarm attributes. - -\ctypename{XSyncAlarmAttributes} has the following fields. The attribute\_mask -column specifies the symbol that the caller should OR into -values\_mask to indicate that the value for the corresponding -attribute was actually supplied. Default values are used for all -attributes that do not have their attribute\_mask OR'ed into -values\_mask. -See the protocol -description for \request{CreateAlarm} for the defaults. - -\begin{tabular}{lll} -type & field name & attribute\_mask \\ -XSyncCounter & trigger.counter; & \cconst{XSyncCACounter} \\ -XSyncValueType & trigger.value\_type; & \cconst{XSyncCAValueType} \\ -XSyncValue & trigger.wait\_value; & \cconst{XSyncCAValue} \\ -XSyncTestType & trigger.test\_type; & \cconst{XSyncCATestType} \\ -XSyncValue & delta; & \cconst{XSyncCADelta} \\ -Bool & events; & \cconst{XSyncCAEvents} \\ -XSyncAlarmState & state; & client cannot set this \\ -\end{tabular} -\cendfuncdescription - - -% start marker -\cstartfunction{Status}{XSyncDestroyAlarm} -\cargdecl{Display *}{dpy}, -\cargdecl{XSyncAlarm}{alarm} -\cendfunctiondecl -% end marker - -\cfunctionname{XSyncDestroyAlarm} destroys alarm. -It returns \cconst{False} if dpy does not -support the SYNC extension; otherwise, it returns \cconst{True}. -\cendfuncdescription - - -% start marker -\cstartfunction{Status}{XSyncQueryAlarm} -\cargdecl{Display *}{dpy}, -\cargdecl{XSyncAlarm}{alarm}, -\cargdecl{XSyncAlarmAttributes *}{values\_return} -\cendfunctiondecl -% end marker - -\cfunctionname{XSyncQueryAlarm} sets *values\_return to the alarm's -attributes. It returns \cconst{False} if there was an error -during communication with the server or if dpy does not support -the SYNC extension; otherwise, it returns \cconst{True}. -\cendfuncdescription - - -% start marker -\cstartfunction{Status}{XSyncChangeAlarm} -\cargdecl{Display *}{dpy}, -\cargdecl{XSyncAlarm}{alarm}, -\cargdecl{unsigned long}{values\_mask}, -\cargdecl{XSyncAlarmAttributes *}{values} -\cendfunctiondecl -% end marker - -\cfunctionname{XSyncChangeAlarm} changes alarm's attributes. -The attributes to change are specified as in \cfunctionname{XSyncCreateAlarm}. -It returns \cconst{False} if dpy does not support the SYNC extension; -otherwise, it returns \cconst{True}. -\cendfuncdescription - - -% start marker -\cstartfunction{Status}{XSyncSetPriority} -\cargdecl{Display *}{dpy}, -\cargdecl{XID}{client\_resource\_id}, -\cargdecl{int}{priority} -\cendfunctiondecl -% end marker - -\cfunctionname{XSyncSetPriority} sets the priority of the client owning -client\_resource\_id to priority. -If client\_resource\_id is \cconst{None}, -it sets the caller's priority. It returns \cconst{False} if dpy -does not support the SYNC extension; otherwise, it returns \cconst{True}. -\cendfuncdescription - - -% start marker -\cstartfunction{Status}{XSyncGetPriority} -\cargdecl{Display *}{dpy}, -\cargdecl{XID}{client\_resource\_id}, -\cargdecl{int *}{return\_priority} -\cendfunctiondecl -% end marker - -\cfunctionname{XSyncGetPriority} sets *return\_priority to the priority -of the client owning client\_resource\_id. -If client\_resource\_id is -\cconst{None}, it sets *return\_priority to the caller's priority. -It returns \cconst{False} if there was an error -during communication with the server or if dpy does not -support the SYNC extension; otherwise, it returns \cconst{True}. -\cendfuncdescription - -\subsection{C Macros/Functions} - -The following procedures manipulate 64-bit values. They are defined -both as macros and as functions. By default, the macro form is used. -To use the function form, \#undef the macro name to uncover the -function. - - -% start marker -\cstartmacro{void}{XSyncIntToValue} -\cargdecl{XSyncValue}{*pv}, -\cargdecl{int}{i} -\cendmacrodecl -% end marker - -Converts i to an \ctypename{XSyncValue} and stores it in -*pv. Performs sign extension (*pv will have the -same sign as i.) -\cendmacrodescription - - -% start marker -\cstartmacro{void}{XSyncIntsToValue} -\cargdecl{XSyncValue}{*pv}, -\cargdecl{unsigned int}{low}, -\cargdecl{int}{high} -\cendmacrodecl -% end marker - -Stores low in the low 32 bits of *pv and -high in the high 32 bits of *pv. -\cendmacrodescription - - -% start marker -\cstartmacro{Bool}{XSyncValueGreaterThan} -\cargdecl{XSyncValue}{a}, -\cargdecl{XSyncValue}{b} -\cendmacrodecl -% end marker - -Returns \cconst{True} if a is greater than b, -else returns \cconst{False}. -\cendmacrodescription - - -% start marker -\cstartmacro{Bool}{XSyncValueLessThan} -\cargdecl{XSyncValue}{a}, -\cargdecl{XSyncValue}{b} -\cendmacrodecl -% end marker - -Returns \cconst{True} if a is less than b, -else returns \cconst{False}. -\cendmacrodescription - - -% start marker -\cstartmacro{Bool}{XSyncValueGreaterOrEqual} -\cargdecl{XSyncValue}{a}, -\cargdecl{XSyncValue}{b} -\cendmacrodecl -% end marker - -Returns \cconst{True} if a is greater than or equal to b, -else returns \cconst{False}. -\cendmacrodescription - - -% start marker -\cstartmacro{Bool}{XSyncValueLessOrEqual} -\cargdecl{XSyncValue}{a}, -\cargdecl{XSyncValue}{b} -\cendmacrodecl -% end marker - -Returns \cconst{True} if a is less than or equal to b. -\cendmacrodescription - - -% start marker -\cstartmacro{Bool}{XSyncValueEqual} -\cargdecl{XSyncValue}{a}, -\cargdecl{XSyncValue}{b} -\cendmacrodecl -% end marker - -Returns \cconst{True} if a is equal to b, -else returns \cconst{False}. -\cendmacrodescription - - -% start marker -\cstartmacro{Bool}{XSyncValueIsNegative} -\cargdecl{XSyncValue}{v} -\cendmacrodecl -% end marker - -Returns \cconst{True} if v is negative, else returns -\cconst{False}. -\cendmacrodescription - - -% start marker -\cstartmacro{Bool}{XSyncValueIsZero} -\cargdecl{XSyncValue}{v} -\cendmacrodecl -% end marker - -Returns \cconst{True} if v is zero, -else returns \cconst{False}. -\cendmacrodescription - - -% start marker -\cstartmacro{Bool}{XSyncValueIsPositive} -\cargdecl{XSyncValue}{v} -\cendmacrodecl -% end marker - -Returns \cconst{True} if v is positive, else returns -\cconst{False}. -\cendmacrodescription - - -% start marker -\cstartmacro{unsigned int}{XSyncValueLow32} -\cargdecl{XSyncValue}{v} -\cendmacrodecl -% end marker - -Returns the low 32 bits of v. -\cendmacrodescription - - -% start marker -\cstartmacro{int}{XSyncValueHigh32} -\cargdecl{XSyncValue}{v} -\cendmacrodecl -% end marker - -Returns the high 32 bits of v. -\cendmacrodescription - - -% start marker -\cstartmacro{void}{XSyncValueAdd} -\cargdecl{XSyncValue *}{presult}, -\cargdecl{XSyncValue}{a}, -\cargdecl{XSyncValue}{b}, -\cargdecl{Bool *}{poverflow} -\cendmacrodecl -% end marker - -Adds a to b and stores the result in *presult. -If the result could not fit in 64 bits, *poverflow is set to -\cconst{True}, else it is set to \cconst{False}. -\cendmacrodescription - - -% start marker -\cstartmacro{void}{XSyncValueSubtract} -\cargdecl{XSyncValue *}{presult}, -\cargdecl{XSyncValue}{a}, -\cargdecl{XSyncValue}{b}, -\cargdecl{Bool *}{poverflow} -\cendmacrodecl -% end marker - -Subtracts b from a and stores the result in -*presult. -If the result could not fit in 64 bits, overflow is set to -\cconst{True}, else it is set to \cconst{False}. -\cendmacrodescription - - -% start marker -\cstartmacro{void}{XSyncMaxValue} -\cargdecl{XSyncValue *}{pv} -\cendmacrodecl -% end marker - -Sets *pv to the maximum value expressible in 64 bits. -\cendmacrodescription - - -% start marker -\cstartmacro{void}{XSyncMinValue} -\cargdecl{XSyncValue *}{pv} -\cendmacrodecl -% end marker - -Sets *pv to the minimum value expressible in 64 bits. -\cendmacrodescription - -\subsection{Events} - -Let \cargname{event\_base} be the value \cargname{event\_base\_return} -as defined in the function \cfunctionname{XSyncQueryExtension}. - -An \ctypename{XSyncCounterNotifyEvent}'s type field has the value -\cargname{event\_base} + \cconst{XSyncCounterNotify}. The fields of -this structure are: - -\begin{tabular}{lll} -int & type; & /* event base + \cconst{XSyncCounterNotify} */ \\ -unsigned long & serial; & /* number of last request processed by server */ \\ -Bool & send\_event;& /* true if this came from a SendEvent request */ \\ -Display * & display; & /* Display the event was read from */\\ -XSyncCounter & counter; & /* counter involved in await */\\ -XSyncValue & wait\_value; & /* value being waited for */\\ -XSyncValue & counter\_value; & /* counter value when this event was sent */\\ -Time & time; & /* milliseconds */\\ -int & count; & /* how many more events to come */\\ -Bool & destroyed; & /* True if counter was destroyed */\\ -\end{tabular} - -An \ctypename{XSyncAlarmNotifyEvent}'s type field has the value -\cargname{event\_base} + \cconst{XSyncAlarmNotify}. The fields of this -structure are: - -\begin{tabular}{lll} -int & type;& /* event base + \cconst{XSyncAlarmNotify} */\\ -unsigned long & serial;&/* number of last request processed by server */\\ -Bool & send\_event;& /* true if this came from a SendEvent request */\\ -Display * & display;& /* Display the event was read from */\\ -XSyncAlarm & alarm;& /* alarm that triggered */\\ -XSyncValue & counter\_value;&/* value that triggered the alarm */\\ -XSyncValue & alarm\_value;& /* test value of trigger in alarm */\\ -Time & time;& /* milliseconds */\\ -XSyncAlarmState & state;& /* new state of alarm */\\ -\end{tabular} - -\subsection{Errors} - -Let \cargname{error\_base} be the value \cargname{error\_base\_return} -as defined in the function \cfunctionname{XSyncQueryExtension}. - -An \ctypename{XSyncAlarmError}'s error\_code field has the value -\cargname{error\_base} + \cconst{XSyncBadAlarm}. The fields of -this structure are: - -\begin{tabular}{lll} -int & type; \\ -Display * & display;& /* Display the event was read from */\\ -XSyncAlarm & alarm;& /* resource id */\\ -unsigned long & serial;& /* serial number of failed request */\\ -unsigned char & error\_code;&/* error base + XSyncBadAlarm */\\ -unsigned char & request\_code;&/* Major op-code of failed request */\\ -unsigned char & minor\_code;&/* Minor op-code of failed request */\\ -\end{tabular} - -An \ctypename{XSyncCounterError}'s error\_code field has the value -\cargname{error\_base} + \cconst{XSyncBadCounter}. The fields of -this structure are: - -\begin{tabular}{lll} -int &type;\\ -Display * & display;& /* Display the event was read from */\\ -XSyncCounter & counter;& /* resource id */\\ -unsigned long & serial;& /* serial number of failed request */\\ -unsigned char & error\_code;&/* error base + XSyncBadCounter */\\ -unsigned char & request\_code;&/* Major op-code of failed request */\\ -unsigned char & minor\_code;& /* Minor op-code of failed request */\\ -\end{tabular} - -\end{document} diff --git a/doc/xorg-docs/specs/Xext/tog-cup.ms b/doc/xorg-docs/specs/Xext/tog-cup.ms deleted file mode 100644 index 4def4a68f..000000000 --- a/doc/xorg-docs/specs/Xext/tog-cup.ms +++ /dev/null @@ -1,396 +0,0 @@ -.\" Use -ms and macros.t -.\" $Xorg: tog-cup.ms,v 1.3 2000/08/17 19:42:37 cpqbld Exp $ -.\" $XdotOrg: xc/doc/specs/Xext/tog-cup.ms,v 1.2 2004/04/23 18:42:18 eich Exp $ -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.ps 10 -.nr PS 10 -\& -.sp 8 -.ce 3 - - -\s+2\fBColormap Utilization Policy and Extension\fP\s-2 -.sp 3 -.ce 3 -Version 1.0 -X Project Team Standard -X Version 11, Release 6.8 -.sp 6 -.ce 4 -Kaleb S. KEITHLEY -.sp 6p -The Open Group -.ps 9 -.nr PS 9 -.sp 8 -.LP -Copyright \(co 1986-1997 The Open Group All Rights Reserved -.LP -Permission is hereby granted, free of charge, to any person obtaining a copy of this -software and associated documentation files (the Software), to use the Software -without restriction, including, without limitation, the rights to copy, modify, merge, -publish, distribute and sublicense the Software, to make, have made, license and -distribute derivative works thereof, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -.LP -The above copyright notice and the following permission notice shall be included in all -copies of the Software: -.LP -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON- -INFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF -CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF, OR IN -CONNNECTION WITH THE SOFTWARE OR THE USE OF OTHER DEALINGS IN -THE SOFTWARE. -.LP -Except as contained in this notice, the name of The Open Group shall not be used in -advertising or otherwise to promote the use or other dealings in this Software without -prior written authorization from The Open Group. -.LP -X Window System is a trademark of The Open Group. -.ps 10 -.nr PS 10 -.bp 1 -.EH ''X11 Colormap Utilization Policy and Extension'' -.OH ''X11 Colormap Utilization Policy and Extension'' -.EF ''\fB % \fP'' -.OF ''\fB % \fP'' -.NH 1 -Overview -.LP -This extension has three purposes: a) to provide mechanism for a special -application (a colormap manager) to discover any special colormap -requirements, e.g. the colormap entries that are nominally reserved for -desktop colors in the MS-Windows environment and initialize the default -colormap so that it can be more easily shared; and b) to encourage colormap -sharing and reduce colormap flashing on low-end 8-bit frame buffers by -providing a policy for sharing; and c) when colormaps aren't shared, -define a behavior in the X server color allocation scheme to reduce -colormap flashing. -.LP -To encourage colormap sharing and accomodate special colormap requirements -two new protocols are defined: the first provides a way to query the -server for a list of reserved colormap entries, and the second is a way -to initialize read-only (shareable) colormap entries at specific locations -in a colormap. -.LP -To minimize colormap flashing when the root window's default visual is one -of GrayScale, PseudoColor, or DirectColor, and a private colormap for the -default visual is being used, a minor (but compatible) change to the -server implementation of the AllocColor and AllocNamedColor requests is -required. Where the core protocol says nothing about the pixel values -returned, when this extension is in effect, the AllocColor and AllocNamedColor -requests will first look for a matching color in the default colormap, and, -if a match is found and the same cell in the private colormap has not -already been allocated, the color will be allocated in the private colormap -at the same locaton as in the default colormap (instead of in the first -available location.) -.NH 1 -Requests -.LP -.sM -.PN QueryVersion -.IP -client_major_version: CARD16 -.br -client_minor_version: CARD16 -.LP - => -.IP -server_major_version: CARD16 -.br -server_minor_version: CARD16 -.LP -.eM -If supplied, the client_major_version and client_minor_version indicate -what version of the protocol the client wants the server to implement. -The server version numbers returned indicate the protocol this extension -actually supports. This might not equal the version sent by the client. -An implementation can (but need not) support more than one version -simultaneously. The server_major_version and the server_minor_version -are a mechanism to support future revisions of the TOG-CUP protocol that -may be necessary. In general, the major version would increment for -incompatible changes, and the minor version would increment for small -upward-compatible changes. Servers that support the protocol defined in -this document will return a server_major_version of one (1), and a -server_minor_version of zero (0). -.LP -.sM -.PN GetReservedColormapEntries -.IP -screen: CARD32 -.LP - => -.IP -entries: LISTofCOLORITEM -.LP -.eM -This request returns a list of colormap entries (pixels) that are reserved -by the system, e.g. MS-Windows reserved desktop colors. This list will, at a -minimum, contain entries for the BlackPixel and WhitePixel of the specified -screen. The do-red, do-green, and do-blue elements of the COLORITEMs are -unused in this reply. -.LP -Rationale: There are colormap entries (pixels) that, e.g., MS-Windows -desktop reserves as desktop colors, that should not be altered. If they -are altered then X programs will cause colormap flashing between X and -MS-Windows applications running/displaying on the same desktop. -.LP -.sM -.PN StoreColors -.IP -cmap: COLORMAP -.br -items: LISTofCOLORITEM -.LP - => -.IP -items: LISTofCOLORITEM -.LP -.eM -This request changes the colormap entries of the specified pixels. The -colormap entries are allocated as if by an AllocColor request. The do-red, -do-green, and do-blue elements of the COLORITEMs are unused in this request. -A boolean alloc-ok element (a bit) is returned indicating whether the -particular pixel was successfully allocated or not. If successfully -allocated the RGB and pixel are returned. -.LP -A Value error is generated if a pixel is not a valid index into cmap. A -BadMatch error is generated if if cmap does not belong to a GrayScale, -PseudoColor, or DirectColor visual. -.LP -.NH 1 -Events and Errors -.LP -No new events or errors are defined by this extension. -.LP -.NH 1 -Changes to existing protocol. -.LP -None. -.LP -.NH 1 -Encoding -.LP -The name of this extension is "TOG-CUP". -.LP -The conventions used here are the same as those for the core X11 -Protocol Encoding. -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN QueryVersion -.sp 6p - 1 CARD8 opcode - 1 0 TOG-CUP opcode - 2 2 request length - 2 CARD16 client_major_version - 2 CARD16 client_minor_version -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - => - 1 1 reply - 1 unused - 2 CARD16 sequence number - 4 0 length - 2 CARD16 server_major_version - 2 CARD16 server_minor_number - 20 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN GetReservedColormapEntries - 1 CARD8 opcode - 1 1 TOG-CUP opcode - 2 2 request length - 4 CARD32 screen -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - => - 1 1 reply - 1 unused - 2 CARD16 sequence number - 4 3n length - 24 unused - 12n LISTofCOLORITEM items -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN StoreColors - 1 CARD8 opcode - 1 2 TOG-CUP opcode - 2 2+3n request length - 4 COLORMAP cmap - 12n LISTofCOLORITEM items -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - => - 1 1 reply - 1 unused - 2 CARD16 sequence number - 4 3n length - 24 unused - 12n LISTofCOLORITEM items -.De -.LP -(The definition of COLORITEM here is only for the purpose of defining the -additional alloc-ok member in the CUPStoreColors reply.) -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - COLORITEM - 4 CARD32 pixel - 2 CARD16 red - 2 CARD16 green - 2 CARD16 blue - 1 alloc-ok - #x07 unused - #x08 alloc-ok (1 is True, 0 is False) - #xF0 unused - 1 unused -.De -.LP -.NH 1 -C Language Binding -.LP -The C functions provide direct access to the protocol and add no additional -semantics. For complete details on the effects of these functions, refer -to the appropriate protocol request, which can be derived by deleting XCup -at the start of the function. All functions that have return type Status -will return nonzero for success and zero for failure. -.LP -The include file for this extension is -.Pn < X11/extensions/Xcup.h >. -.LP -.sM -.FD 0 -.PN Status XCupQueryVersion( -.br - Display* \fIdisplay\fP\^, -.br - int* \fImajor_version_return\fP\^, -.br - int* \fIminor_version_return\fP\^) -.FN -.LP -.eM -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fImajor_version_return\fP 1i -Returns the major version supported by the server. -.IP \fIminor_version_return\fP 1i -Returns the minor version supported by the server. -.LP -XCupQueryVersions sets major_version_return and minor_version_return to -the major and minor TOG-CUP protocol version supported by the server. If -the TOG-CUP library is compatible with the version returned by the server, -it returns nonzero. If dpy does not support the TOG-CUP extension, or if -there was an error during communication with the server, or if the server -and library protocol versions are incompatible, it returns zero. No other -XCup functions may be called before this function. If a client violates -this rule, the effects of all subsequent XCup calls that it makes are -undefined. -.LP -To get the list of reserved colormap entries, use -XCupGetReservedColormapEntries. -.LP -.sM -.FD 0 -.PN Status XCupGetReservedColormapEntries( -.br - Display* \fIdisplay\fP\^, -.br - int \fIscreen\fP\^, -.br - XColor** \fIcolors_out\fP\^, -.br - int* \fIncolors\fP\^) -.FN -.LP -.eM -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcolors_out\fP 1i -Returns the values reserved by the server. -.IP \fIncolors\fP 1i -Returns the number of items in colors_out. -.LP -The XCupGetReservedColormapEntries function gets system specific colormap -entries. E.g. the MS-Windows desktop uses N colormap entries at the beginning -(0..N) and end (256-N..255) of the colormap. Use XFree to free colors_out. -.LP -To allocate one or more read-only color cells with RGB values, use -XCupStoreColors. -.LP -.sM -.FD 0 -.PN Status XCupStoreColors( -.br - Display* \fIdisplay\fP\^, -.br - Colormap \fIcolormap\fP\^, -.br - XColor* \fIcolors_in_out\fP\^, -.br - int \fIncolors\fP\^) -.FN -.LP -.eM -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcolormap\fP 1i -Specifies the colormap. -.IP \fIcolors_in_out\fP 1i -Specifies and returns the values actually used in the colormap. -.IP \fIncolors\fP 1i -Specifies the number of items in colors_in_out. -.LP -The XCupStoreColors function changes the colormap entries of the pixel -values specified in the pixel members of the XColor structures. The colormap -entries are allocated as if an AllocColor had been used instead, i.e. the -colors are read-only (shareable). XCupStoreColors returns the number of -colors that were successfully allocated in the colormap. -.LP -.NH 1 -Using the TOG-CUP extension and Colormap Utilization Policy -.LP -The X server preallocates any hardware or desktop special colors in the -default colormap; e.g. UNIX X servers preallocate Black and White pixels. -PC X servers should also preallocate the MS-Windows desktop colors. (Note -to implementors: in the Sample Implementation special colors are allocated -in the default colormap in cfbCreateDefColormap for dumb memory framebuffers.) -.LP -To minimize colormap flash an application which installs its own private -colormap should query the special colors by calling -XCupGetReservedColormapEntries, and can then store those entries (in the -proper location) in its private colormap using XCupStoreColors. -.LP -Applications which allocate many colors in a screen's default colormap, e.g. -a color-cube or a gray-ramp, should allocate them with XCupStoreColors. By -using XCupStoreColors the colors will be allocated sharable (read-only) and -any other application which allocates the same color will share that color -cell. -.LP diff --git a/doc/xorg-docs/specs/Xext/xc-misc.ms b/doc/xorg-docs/specs/Xext/xc-misc.ms deleted file mode 100644 index 76227eae2..000000000 --- a/doc/xorg-docs/specs/Xext/xc-misc.ms +++ /dev/null @@ -1,222 +0,0 @@ -.\" Use -ms and macros.t -.\" $Xorg: xc-misc.ms,v 1.3 2000/08/17 19:42:37 cpqbld Exp $ -.\" $XdotOrg: xc/doc/specs/Xext/xc-misc.ms,v 1.2 2004/04/23 18:42:18 eich Exp $ -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.ps 10 -.nr PS 10 -\& -.sp 8 -.ce 1 -\s+2\fBXC-MISC Extension\fP\s-2 -.sp 3 -.ce 3 -Version 1.1 -X Consortium Standard -X Version 11, Release 6.8 -.sp 6 -.ce 4 -Bob Scheifler -David P. Wiggins -.sp 6p -X Consortium, Inc. -.ps 9 -.nr PS 9 -.sp 8 -.LP -Copyright \(co 1994 X Consortium -.LP -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -.LP -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -.LP -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. -.ps 10 -.nr PS 10 -.bp 1 -.EH ''XC-MISC Extension'' -.OH ''XC-MISC Extension'' -.EF ''\fB % \fP'' -.OF ''\fB % \fP'' -.NH 1 -Overview -.LP -When an X client connects to an X server, it receives a fixed range of -resource IDs to use to identify the client's resources inside the X -server. Xlib hands these out sequentially as needed. When it -overruns the end of the range, an IDChoice protocol error results. -Long running clients, or clients that use resource IDs at a rapid -rate, may encounter this circumstance. When it happens, there are -usually many resource IDs available, but Xlib doesn't know about them. -.LP -One approach to solving this problem would be to have Xlib notice when -a resource is freed and recycle its ID for future use. This strategy -runs into difficulties because sometimes freeing one resource causes -others to be freed (for example, when a window is destroyed, so are -its children). To do a complete job, Xlib would have to maintain a -large amount of state that currently resides only in the server (the -entire window tree in the above example). Even if a less -comprehensive strategy was adopted, such as recycling only those IDs -that Xlib can identify without maintaining additional state, the -additional bookkeeping at resource creation and destruction time -would likely introduce unacceptable overhead. -.LP -To avoid the problems listed above, the server's complete knowledge of -all resource IDs in use by a client is leveraged. This extension -provides two ways for Xlib to query the server for available resource -IDs. -Xlib can use these extension requests behind the scenes when it has -exhausted its current pool of resource IDs. -.NH 1 -Requests -.LP -.PN "XCMiscGetVersion" -.IP -\fIclient_major_version\fP\^: CARD16 -.br -\fIclient_minor_version\fP\^: CARD16 -.LP - => -.IP -\fIserver_major_version\fP\^: CARD16 -.br -\fIserver_minor_version\fP\^: CARD16 -.LP -If supplied, the \fIclient_major_version\fP and -\fIclient_minor_version\fP indicate what version of the protocol the -client wants the server to implement. The server version numbers -returned indicate the protocol this extension actually supports. This -might not equal the version sent by the client. An implementation can -(but need not) support more than one version simultaneously. The -\fIserver_major_version\fP and the \fIserver_minor_version\fP are a -mechanism to support future revisions of the XC-MISC protocol -which may be necessary. In general, the major version would increment -for incompatible changes, and the minor version would increment for -small, upward-compatible changes. Servers that support the protocol -defined in this document will return a \fIserver_major_version\fP of -one (1), and a \fIserver_minor_version\fP of one (1). -.LP -.PN "XCMiscGetXIDRange" -.LP - => -.IP -\fIstart_id\fP\^: XID -.br -\fIcount\fP\^: CARD32 -.LP -This request returns a range of available resource IDs for the client -issuing the request. \fIstart_id\fP is the first ID in the range. -\fIcount\fP is the number of IDs in the range. The returned range may -or may not be the largest possible range. -.LP -.PN "XCMiscGetXIDList" -.IP -\fIcount\fP\^: CARD32 -.LP - => -.IP -\fIids\fP\^: LISTofXID -.LP -This request returns the a list of individual resource IDs in \fIids\fP. -\fIcount\fP is the number of resource IDs requested. -The number returned may be smaller than the number requested. -.NH 1 -Events and Errors -.LP -No new events or errors are defined by this extension. -.NH 1 -Encoding -.LP -Please refer to the X11 Protocol Encoding document as this document uses -conventions established there. -.LP -The name of this extension is ``XC-MISC''. -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN XCMiscGetVersion - 1 CARD8 opcode - 1 0 XC-MISC opcode - 2 2 request length - 2 CARD16 client_major_version - 2 CARD16 client_minor_version -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - => - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 0 length - 2 CARD16 server_major_version - 2 CARD16 server_minor_version - 20 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN XCMiscGetXIDRange - 1 CARD8 opcode - 1 1 XC-MISC opcode - 2 1 request length -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - => - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 0 length - 4 XID start_id - 4 CARD32 count - 16 unused -.De -.LP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN XCMiscGetXIDList - 1 CARD8 opcode - 1 2 XC-MISC opcode - 2 2 request length - 4 CARD32 count -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - => - 1 1 Reply - 1 unused - 2 CARD16 sequence number - 4 CARD32 length - 4 CARD32 number of XIDs in ids - 20 unused - 4n LISTofXID ids -.De diff --git a/doc/xorg-docs/specs/Xext/xtest.ms b/doc/xorg-docs/specs/Xext/xtest.ms deleted file mode 100644 index abae03c6e..000000000 --- a/doc/xorg-docs/specs/Xext/xtest.ms +++ /dev/null @@ -1,483 +0,0 @@ -.\" Use -ms and macros.t -.\" edited for DP edits and code consistency w/ core protocol/xlib 4/2/96 -.\" $Xorg: xtest.ms,v 1.3 2000/08/17 19:42:37 cpqbld Exp $ -.de lP -.ne 8 -.LP -.. -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.ps 10 -.nr PS 10 -\& -.sp 8 -.ce 1 -\s+2\fBXTEST Extension Protocol\fP\s-2 -.sp 3 -.ce 3 -Version 2.2 -X Consortium Standard -.sp 6 -.ce 4 -\s-1Kieron Drake -.sp 6p -UniSoft Ltd.\s+1 -.bp -.sp 10 -.ps 9 -.nr PS 9 -.sp 8 -.lP -Copyright \(co 1992 by UniSoft Group Ltd. -.lP -Permission to use, copy, modify, and distribute this documentation for any -purpose and without fee is hereby granted, provided that the above copyright -notice and this permission notice appear in all copies. UniSoft makes no -representations about the suitability for any purpose of the information in -this document. This documentation is provided ``as is'' without express or -implied warranty. -.lP -.sp 5 -Copyright \(co 1992, 1994 X Consortium -.lP -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -.lP -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.lP -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -.lP -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. -.ps 10 -.nr PS 10 -.bp 1 -.EH ''XTEST Extension Protocol'' -.OH ''XTEST Extension Protocol'' -.EF ''\fB % \fP'' -.OF ''\fB % \fP'' -.NH 1 -Overview -.lP -This extension is a minimal set of client and server extensions -required to completely test the X11 server with no user intervention. -.lP -This extension is not intended to support general journaling and -playback of user actions. This is a difficult area [XTrap, 89] as it attempts -to synchronize synthetic user interactions with their effects; it is at the -higher level of dialogue recording/playback rather than at the strictly lexical -level. We are interested only in the latter, simpler, case. A more detailed -discussion and justification of the extension functionality is given in -[Drake, 91]. -.lP -We are aiming only to provide a minimum set of facilities that -solve immediate testing and validation problems. The testing extension -itself needs testing, where possible, and so should be as simple as possible. -.lP -We have also tried to: -.IP \(bu 5 -Confine the extension to an appropriate high level within the server -to minimize portability problems. In practice this means that the extension -should be at the DIX level or use the DIX/DDX interface, or both. This -has effects, in particular, on the level at which \*Qinput synthesis\*U -can occur. -.IP \(bu 5 -Minimize the changes required in the rest of the server. -.IP \(bu 5 -Minimize performance penalties on normal server operation. -.lP -.NH 1 -Description -.lP -The functions provided by this extension fall into two groups: -.IP "\fBClient Operations\fP" .5i -These routines manipulate otherwise hidden client-side behavior. The -actual implementation will depend on the details of the actual language -binding and what degree of request buffering, GContext caching, and so on, is -provided. -In the C binding, defined in ``XTEST Extension Library'', routines are -provided to access the internals of two opaque data structures -.Pn \*- GC s -and -.PN Visual s\*- -and to discard any requests pending within the -output buffer of a connection. The exact details can be expected to differ for -other language bindings. -.IP "\fBServer Requests\fP" .5i -The first of these requests is similar to that provided in most -extensions: it allows a client to specify a major and minor version -number to the server and for the server to respond with major and minor -versions of its own. The remaining two requests allow the following: -.RS -.IP \(bu 5 -Access to an otherwise \*Qwrite-only\*U server resource: the cursor -associated with a given window -.IP \(bu 5 -Perhaps most importantly, limited synthesis of input device events, -almost as if a cooperative user had moved the pointing device -or pressed a key or button. -.RE -.NH 1 -Types -.lP -The following types are used in the request and event definitions in -subsequent sections: -.lP -FAKE_EVENT_TYPE -.Pn { KeyPress , -.PN KeyRelease , -.PN MotionNotify , -.PN ButtonPress , -.PN ButtonRelease } -.lP -.Ds 0 -.TA .75i 1.25i -.ta .75i 1.25i -.R -FAKE_EVENT [type: FAKE_EVENT_TYPE, - detail: BYTE, - time: TIME, - root: WINDOW, - rootX, rootY: INT16] -.De -.lP -CURSOR -.Pn { CurrentCursor , -.PN None } -or a cursor as defined by the X11 Protocol. -.NH 1 -Client Operations -.lP -These are abstract definitions of functionality. They refer to client-side -objects such as \*QGC\*U and \*QVISUAL\*U that are quoted to -denote their abstract nature. Concrete versions of these functions are -defined only for particular language bindings. In some circumstances -a particular language binding may not implement the relevant abstract -type or may provide it as a transparent, rather than opaque, type, with -the result that the corresponding function does not make sense or is -not required, respectively. -.LP -.sM -.PN "XTestSetGContextOfGC" -.IP -\fIgc\fP\^: \*QGC\*U -.br -\fIgid\fP\^: GCONTEXT -.LP -.eM -.LP -Sets the GCONTEXT within the \*QGC\*U gc to have -the value specified by gid. -.LP -.sM -.PN "XTestSetVisualIDOfVisual" -.IP -\fIvisual\fP\^: \*QVISUAL\*U -.br -\fIvisualid\fP\^: VISUALID -.LP -.eM -.LP -Sets the VISUALID within the \*QVISUAL\*U visual to have -the value specified by visualid. -.LP -.sM -.PN "XTestDiscard" -.IP -\fIdpy\fP\^: \*QCONNECTION\*U -.lP - => -.IP -status: BOOL -.LP -.eM -.LP -Discards any requests that are present in the request buffer associated with -the \*QCONNECTION\*U dpy. -The status returned is -.PN True -if there were one or more requests -in the buffer and -.PN False -otherwise. -.NH 1 -Server Requests -.LP -.sM -.PN "XTestGetVersion" -.IP -\fIclientMajorVersion\fP\^: CARD16 -.br -\fIclientMinorVersion\fP\^: CARD16 -.lP - => -.IP -serverMajorVersion: CARD16 -.br -serverMinorVersion: CARD16 -.IP -Errors: -.PN Length -.LP -.eM -.LP -This request can be used to ensure that the server version of the XTEST -extension is usable by the client. This document defines major version two -(2), minor version one (1). -.LP -.sM -.PN "XTestCompareCursor" -.IP -\fIwindow\fP\^: WINDOW -.br -\fIcursor-id\fP\^: CURSOR or -.PN CurrentCursor -or -.PN None -.lP - => -.IP -same: BOOL -.IP -Errors: -.PN Window , -.PN Length , -.PN Cursor -.LP -.eM -.LP -This request looks up the cursor associated with the window and -compares it with either the null cursor if cursor-id is -.PN None , -or the current cursor (that is, the one being displayed), -or the cursor whose ID is cursor-id, and returns -the result of the comparison in same. -.LP -.sM -.PN "XTestFakeInput" -.IP -\fIevents\fP\^: LISTofFAKE_EVENT -.IP -Errors: -.PN Window , -.PN Length , -.PN Alloc , -.PN Value -.LP -.eM -.LP -This request simulates the limited set of core protocol -events within the set FAKE_EVENT_TYPE. Only the following event fields, -defined in FAKE_EVENT, are interpreted: -.IP \fItype\fP 1i -This must be one of -.PN KeyPress , -.PN KeyRelease , -.PN MotionNotify , -.PN ButtonPress , -or -.PN ButtonRelease , -or else a -.PN Value -error occurs. -.IP \fIdetail\fP 1i -For key events, this field is interpreted as the physical keycode. -If the keycode is less than min-keycode or greater than max-keycode, -as returned in the connection setup, then a -.PN Value -error occurs. -For button events, this field is interpreted as the physical (or core) button, -meaning it will be mapped to the corresponding logical button according to -the most recent -.PN SetPointerMapping -request. -If the button number is less than one or greater than the number of physical -buttons, then a -.PN Value -error occurs. -For motion events, if this field is -.PN True , -then rootX and rootY -are relative distances from the current pointer location; if this field is -.PN False, -then they are absolute positions. -.IP \fItime\fP 1i -This is either -.PN CurrentTime -(meaning no delay) -or the delay in milliseconds that the server should wait before -simulating this event. No other requests from this client will be -processed until this delay, if any, has expired and subsequent processing -of the simulated event has been completed. -.IP \fIroot\fP 1i -In the case of motion events this field is the ID of the root window on -which the new motion is to take place. If -.PN None -is specified, the root window of the screen the pointer is currently on -is used instead. -If this field is not a valid window, then a -.PN Window -error occurs. -.IP "\fIrootX\fP & \fIrootY\fP" 1i -In the case of motion events these fields indicate relative distance or -absolute pointer coordinates, according to the setting of detail. -If the specified coordinates are off-screen, the closest on-screen -coordinates will be substituted. -.LP -When the simulated event(s) are processed, they cause event propagation, -passive grab activation, and so on, just as if the corresponding input device -action had occurred. However, motion events might not be recorded in the -motion history buffer. -.LP -For the currently supported event types, the event list must have length one, -otherwise a -.PN BadLength -error occurs. -.LP -.sM -.PN "XTestGrabControl" -.IP -\fIimpervious\fP\^: BOOL -.LP -.eM -.LP -If impervious is -.PN True , -then the executing client becomes impervious to server grabs; -that is, it can continue executing requests even if another client -grabs the server. -If impervious is -.PN False , -then the executing client returns to the normal state of being -susceptible to server grabs. -.NH 1 -Encoding -.lP -Please refer to the X11 Protocol Encoding document as this document uses -conventions established there. -.lP -The name of this extension is ``XTEST''. -.NH 2 -New Types -.lP -.Ds 0 -.TA .75i 1.75i -.ta .75i 1.75i -.R -FAKE_EVENT_TYPE - 2 KeyPress - 3 KeyRelease - 4 ButtonPress - 5 ButtonRelease - 6 MotionNotify -.De -.LP -NOTE that the above values are defined to be the same as those for -the corresponding core protocol event types. -.NH 2 -Requests -.lP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN XTestGetVersion - 1 CARD8 opcode - 1 0 xtest opcode - 2 2 request length - 1 CARD8 client major version - 1 unused - 2 CARD16 client minor version -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - => - 1 1 Reply - 1 CARD8 server major version - 2 CARD16 sequence number - 4 0 reply length - 2 CARD16 server minor version - 22 unused -.De -.lP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN XTestCompareCursor - 1 CARD8 opcode - 1 1 xtest opcode - 2 3 request length - 4 WINDOW window - 4 CURSOR cursor-id - 0 None - 1 CurrentCursor -.De -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R - => - 1 1 Reply - 1 BOOL cursors are the same - 2 CARD16 sequence number - 4 0 reply length - 24 unused -.De -.lP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN XTestFakeInput - 1 CARD8 opcode - 1 2 xtest opcode - 2 1+(1*8) request length - 1 FAKE_EVENT_TYPE fake device event type - 1 BYTE detail: button or keycode - 2 unused - 4 TIME delay (milliseconds) - 0 CurrentTime - 4 WINDOW root window for MotionNotify - 0 None - 8 unused - 2 INT16 x position for MotionNotify - 2 INT16 y position for MotionNotify - 8 unused -.De -.lP -.Ds 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -.R -.PN XTestGrabControl - 1 CARD8 opcode - 1 3 xtest opcode - 2 2 request length - 1 BOOL impervious - 3 unused -.De -.NH 1 -References -.XP -Annicchiarico, D., et al., \fIXTrap: The XTrap Architecture\fP\^. -Digital Equipment Corporation, July 1991. -.XP -Drake, K. J., \fISome Proposals for a Minimum X11 Testing Extension\fP\^. -UniSoft Ltd., June 1991. -.LP diff --git a/doc/xorg-docs/specs/Xext/xtest1.info b/doc/xorg-docs/specs/Xext/xtest1.info deleted file mode 100644 index aa2830253..000000000 --- a/doc/xorg-docs/specs/Xext/xtest1.info +++ /dev/null @@ -1,90 +0,0 @@ -XTestGenerateEvent is supposed to cause the server to generate a key or -button event, exactly as one would be generated if a user pressed a key -or pushed a mouse button. Without knowing how your server does that for -normal input events, I can't tell you exactly how that should look, but -it would be something like: - -void -XTestGenerateEvent (dev_type, key_or_button_code, direction, x, y) - int dev_type; /* MOUSE = X pointer, KEYBOARD = X keyboard */ - int key_or_button_code; /* code to stash in event */ - int direction; /* XTestKEY_UP or XTestKEY_DOWN */ - int x,y; /* location of event */ - { - int type; - xEvent *xE; - - if (key_or_button_code < 8) /* must be a button */ - if (direction == XTestKEY_UP) /* it's a release event*/ - type = ButtonRelease; - else - type = ButtonPress; - else /* must be a key */ - if (direction == XTestKEY_UP) /* it's a release event*/ - type = KeyRelease; - else - type = KeyPress; - - /* get an xEvent from some place where ProcessInputEvents can find it. */ - /* I don't know how your implementation does this. */ - - xE = somehow_get_xEvent(); - - xE->u.u.type = type; - xE->u.u.detail = key_or_button_code; - xE->u.keyButtonPointer.time = GetTimeInMillis(); - xE->u.keyButtonPointer.rootX = x; - xE->u.keyButtonPointer.rootY = y; - - /* now call ProcessInputEvents to send the event to DIX for routing to the - appropriate client(s). */ - - ProcessInputEvents(); - } - - -XTestJumpPointer performs the equivalent function for pointer events. - -void -XTestJumpPointer (x, y, dev_type) - int x,y; - int dev_type; - { - /* get an xEvent from some place where ProcessInputEvents can find it. */ - /* I don't know how your implementation does this. */ - - xE = somehow_get_xEvent(); - - xE->u.u.type = MotionNotify; - xE->u.keyButtonPointer.time = GetTimeInMillis(); - xE->u.keyButtonPointer.rootX = x; - xE->u.keyButtonPointer.rootY = y; - - /* Call some place in your server code that takes care of acceleration and - threshold. Also constrain the move to the screen bounds. You - may also have a motion history buffer that should be updated with - the information in this event. - */ - - deal_with_acceleration (); - constrainxy(); - update_motion_history(); - - /* now call ProcessInputEvents to send the event to DIX for routing to the - appropriate client(s). */ - - ProcessInputEvents(); - } - -XTestGetPointerPos returns the server's notion of where the X pointer currently -is. This is probably kept by ddx in some implementation-specific structure: - -Implementation_Specific_Struct *i; - -void -XTestGetPointerPos (x,y) - short *x,*y; - { - *x = i->x; - *y = i->y; - } diff --git a/doc/xorg-docs/specs/Xext/xtest1.mm b/doc/xorg-docs/specs/Xext/xtest1.mm deleted file mode 100644 index 7fe5d8161..000000000 --- a/doc/xorg-docs/specs/Xext/xtest1.mm +++ /dev/null @@ -1,494 +0,0 @@ -.tr ~ -.SA 0 -.TL -X11 INPUT SYNTHESIS EXTENSION PROPOSAL -.AF "Hewlett Packard" -.ds ZZ Corvallis~Workstation~Operation -.AU "Larry Woestman" "" ZZ -.AT "Member of Technical Staff" -.AS -This is a proposal for an extension to the X11 server and Xlib. -It provides two capabilities: -.BL -.LI -It allows a client to generate user input actions in the server without -requiring a user to be present. -.LI -It also allows a client to control the -handling of user input actions by the server. -.LE -.P -The capability -to allow a client to generate user input actions in the server -will be used by some of the X Testing Consortium Xlib tests. -Both capabilities will be used by the X Testing Consortium client exerciser -program. -These capabilities may also be useful in other programs. -.P -This extension requires modification to device-dependent code in the -server. Therefore it is not a `portable' extension as defined by the -X11 Server Extensions document. However, the majority of the code -and functionality of this extension will be implementation-independent. -.AE -.MT 4 -.nr Cl 4 -.PH "'X11 Input Synthesis Extension Proposal''Page \\\\nP'" -.PF "''\\\\*(DT''" -.SK 1 -.H 1 Conventions~Used~In~This~Document -The naming conventions used in the Xlib documentation are followed -with these additions: -.BL -.LI -The names of all functions defined in this extension begin with `XTest', -with the first letter of each additional word capitalized. -.LI -The names of the protocol request structures follow the Xlib convention -of `xReq'. -.LI -The names of the protocol request minor type codes follow the Xlib convention -of `X_'. -.LI -The names of all other constants defined in this extension begin with `XTest', -with the rest of the name in upper case letters. -.LI -All constants and structures defined in this extension will have their -values specified in the `xtestext1.h' file (listed in section 5). -.LE -.H 1 Definition~Of~Terms -.H 2 Input~Actions -Input actions are pointer movements, button presses and releases, -and key presses and releases. They can be generated by a user or by a client -(using functions in this extension). -.H 2 User~Input~Actions -User input actions are input actions that are generated by the user -moving a pointing device (typically a mouse), pressing and releasing buttons on -the pointing device, and pressing and releasing keys on the keyboard. -.SK -.H 1 What~Does~This~Extension~Do? -Without this extension, user input actions are processed by the server, -and are converted into normal X events that are sent to the -appropriate client or clients. -.P -This extension adds the following capabilities: -.BL -.LI -Input actions may be sent from a client to the server to be -processed just as if the user had physically performed them. -The input actions are provided to the server in the form of X protocol -requests defined by this extension. -The information provided to the server includes what action should be -performed, and how long to delay before processing the action in the server. -.LI -User input actions may be diverted to a client before being processed by the -server. -The effect on the server is as if the user had performed no input action. -The user input actions are provided to the client in the form of X events -defined by this extension. -The information provided to the client includes what user input action -occurred and the delay between this user input action and the previous user -input action. -The client may then do anything it wishes with this information. -.LI -User input actions may be copied, with one copy going to the server in the -normal way, and the other copy being sent to a client as described above. -.LE -.SK -.H 1 Functions~In~This~Extension -.H 2 High~Level~Functions -These functions are built on top of the low level functions described later. -.H 3 XTestMovePointer -.DS -int -XTestMovePointer(\fIdisplay\fR, \fIdevice_id\fR, \fIdelay\fR, \fIx\fR, \fIy\fR, \fIcount\fR) - Display \(**\fIdisplay\fR; - int \fIdevice_id\fR; - unsigned long \fIdelay\fR[]; - int \fIx\fR[]; - int \fIy\fR[]; - unsigned int \fIcount\fR; -.DE -.VL 11 "" 1 -.LI ~ -.LI \fIdisplay\fR -Specifies the connection to the X server. -.LI ~ -.LI \fIdevice_id\fR -Specifies which pointer device was supposed to have caused the input action. -This is a provision for future support of multiple (distinguishable) pointer -devices, and should always be set to 0 for now. -.LI ~ -.LI \fIdelay\fR -Specifies the time (in milliseconds) to wait before each movement -of the pointer. -.LI ~ -.LI \fIx\fR -.LI \fIy\fR -Specifies the x and y coordinates to move the pointer to relative to the -root window for the specified display. -.LI ~ -.LI \fIcount\fR -Specifies the number of `delay, x, y' triplets contained in the \fIdelay\fR, -\fIx\fR and \fIy\fR arrays. -.LE -.P -The -.I XTestMovePointer -function creates input actions to be sent to the the server. -The input actions will be accumulated in a request defined by this extension -until the request is full or the XTestFlush function is called. -They will then be sent to the server. -When the input actions are sent to the server, the input actions will cause -the server to think that the pointer was moved to the specified position(s), -with the specified delay before each input action. -.P -The -.I XTestMovePointer -function will return -1 if there is an error, and 0 otherwise. -.SK -.H 3 XTestPressButton -.DS -int -XTestPressButton(\fIdisplay\fR, \fIdevice_id\fR, \fIdelay\fR, \fIbutton_number\fR, - \fIbutton_action\fR) - Display \(**\fIdisplay\fR; - int \fIdevice_id\fR; - unsigned long \fIdelay\fR; - unsigned int \fIbutton_number\fR; - unsigned int \fIbutton_action\fR; -.DE -.VL 15 -.LI \fIdisplay\fR -Specifies the connection to the X server. -.LI \fIdevice_id\fR -Specifies which button device was supposed to have caused the input action. -This is a provision for future support of multiple (distinguishable) button -devices, and should always be set to 0 for now. -.LI \fIdelay\fR -Specifies the time (in milliseconds) to wait before the input action. -.LI \fIbutton_number\fR -Specifies which button is being acted upon. -.LI \fIbutton_action\fR -Specifies the action to be performed (one of -\fIXTestPRESS\fR, \fIXTestRELEASE\fR, or \fIXTestSTROKE\fR). -.LE -.P -The -.I XTestPressButton -function creates input actions to be sent to the the server. -The input actions will be accumulated in a request defined by this extension -until the request is full or the XTestFlush function is called. -They will then be sent to the server. -When the input actions are sent to the server, the input actions will cause -the server to think that the specified button was moved as specified. -.P -The -.I XTestPressButton -function will return -1 if there is an error, and 0 otherwise. -.SK -.H 3 XTestPressKey -.DS -int -XTestPressKey(\fIdisplay\fR, \fIdevice_id\fR, \fIdelay\fR, \fIkeycode\fR, \fIkey_action\fR) - Display \(**\fIdisplay\fR; - int \fIdevice_id\fR; - unsigned long \fIdelay\fR; - unsigned int \fIkeycode\fR; - unsigned int \fIkey_action\fR; -.DE -.VL 12 -.LI \fIdisplay\fR -Specifies the connection to the X server. -.LI \fIdevice_id\fR -Specifies which keyboard device was supposed to have caused the input action. -This is a provision for future support of multiple (distinguishable) keyboard -devices, and should always be set to 0 for now. -.LI \fIdelay\fR -Specifies the time (in milliseconds) to wait before the input action. -.LI \fIkeycode\fR -Specifies which keycode is being acted upon. -.LI \fIkey_action\fR -Specifies the action to be performed (one of -\fIXTestPRESS\fR, \fIXTestRELEASE\fR, or \fIXTestSTROKE\fR). -.LE -.P -The -.I XTestPressKey -function creates input actions to be sent to the the server. -The input actions will be accumulated in a request defined by this extension -until the request is full or the XTestFlush function is called. -They will then be sent to the server. -When the input actions are sent to the server, the input actions will cause -the server to think that the specified key on the keyboard was moved as -specified. -.P -The -.I XTestPressKey -function will return -1 if there is an error, and 0 otherwise. -.SK -.H 3 XTestFlush -.DS -int -XTestFlush(\fIdisplay\fR) - Display \(**\fIdisplay\fR; -.DE -.VL 9 -.LI \fIdisplay\fR -Specifies the connection to the X server. -.LE -.P -The -.I XTestFlush -will send any remaining input actions to the server. -.P -The -.I XTestFlush -function will return -1 if there is an error, and 0 otherwise. -.SK -.H 2 Low~Level~Functions -.H 3 XTestGetInput -.DS -int -XTestGetInput(\fIdisplay\fR, \fIaction_handling\fR) - Display \(**\fIdisplay\fR; - int \fIaction_handling\fR; -.DE -.VL 17 -.LI \fIdisplay\fR -Specifies the connection to the X server. -.LI \fIaction_handling\fR -Specifies to the server what to do with the user input actions. (one of -0, \fIXTestPACKED_MOTION\fR or \fIXTestPACKED_ACTIONS\fR; optionally `or'ed -with \fIXTestEXCLUSIVE\fR). -.LE -.P -The -.I XTestGetInput -function tells the server to begin putting information about user input actions -into events to be sent to the client that called this function. These events -can be read via the Xlib \fIXNextEvent\fR function. -.P -The server assigns an event type of \fIXTestInputActionType\fR to these events -to distinguish them from other events. -Since the actual value of the event type may vary depending on how many -extensions are included with an X11 implementation, -\fIXTestInputActionType\fR is a variable that will be contained in the Xlib -part of this extension. It may be referenced as follows: -.DS -extern int XTestInputActionType; -.DE -.P -An \fIaction_handling\fR value of 0 causes the server -to send one user input action in each \fIXTestInputActionType\fR event. -This can sometimes cause performance problems. -.P -An \fIaction_handling\fR value of \fIXTestPACKED_ACTIONS\fR causes the server -to pack as many user input actions as possible into a -\fIXTestInputActionType\fR event. -This is needed if user input actions are happening rapidly (such as -when the user moves the pointer) to keep performance at a reasonable level. -.P -An \fIaction_handling\fR value of \fIXTestPACKED_MOTION\fR causes the server -to pack only user input actions associated with moving the pointer. -This allows the -client to receive button and key motions as they happen without waiting for the -event to fill up, while still keeping performance at a reasonable level. -.P -An \fIaction_handling\fR value with \fIXTestEXCLUSIVE\fR `or'ed in -causes the server to send user input actions only to the client. -The effect on the server is as if the user had performed no input actions. -.P -An \fIaction_handling\fR value without \fIXTestEXCLUSIVE\fR -causes the server to copy user input actions, sending one copy to the -client, and handling the other copy normally (as it would if this extension -were not installed). -.P -There are four types of input actions that are passed from the server -to the client. They are: -.VL 25 -.LI key/button~state~change -This type of input action contains the keycode of the key or button that -changed state; -whether the key or button is up or down, -and the time delay between this input action and the previous input action. -.LI pointer~motions -This type of input action contains information about the motion of the -pointer when the pointer has only moved a short distance. -If the pointer has moved a long distance, -the pointer jump input action is used. -.LI pointer~jumps -This type of input action contains information about the motion of the -pointer when the pointer has moved a long distance. -.LI delays -This type of input action is used when the delay between input actions is too -large to be held in the other input actions. -.LE -.P -The -.I XTestGetInput -function will return -1 if there is an error, and 0 otherwise. -.P -An error code of \fIBadAccess\fR means that another client has already -requested that user input actions be sent to it. -.SK -.H 3 XTestStopInput -.DS -int -XTestStopInput(\fIdisplay\fR) - Display \(**\fIdisplay\fR; -.DE -.VL 9 -.LI \fIdisplay\fR -Specifies the connection to the X server. -.LE -.P -The -.I XTestStopInput -function tells the server to stop putting information about user input actions -into events. -The server will process user input actions normally (as it would -if this extension were not in the server). -.P -The -.I XTestStopInput -function will return -1 if there is an error, and 0 otherwise. -.P -An error code of \fIBadAccess\fR means that a request was made to stop input -when input has never been started. -.SK -.H 3 XTestFakeInput -.DS -int -XTestFakeInput(\fIdisplay\fR, \fIaction_list_addr\fR, \fIaction_list_size\fR, - \fIack_flag\fR) - Display \(**\fIdisplay\fR; - char \(**\fIaction_list_addr\fR; - int \fIaction_list_size\fR; - int \fIack_flag\fR; -.DE -.VL 18 -.LI \fIdisplay\fR -Specifies the connection to the X server. -.LI \fIaction_list_addr\fR -Specifies the address of an list of input actions to be sent to the server. -.LI \fIaction_list_size\fR -Specifies the size (in bytes) of the list of input actions. -It may be no larger than \fIXTestMAX_ACTION_LIST_SIZE\fR bytes. -.LI \fIack_flag\fR -Specifies whether the server needs to send an event to indicate that its -input action buffer is empty (one of -\fIXTestFAKE_ACK_NOT_NEEDED\fR or \fIXTestFAKE_ACK_REQUEST\fR). -.LE -.P -The -.I XTestFakeInput -function tells the server to take the specified user input actions and process -them as if the user had physically performed them. -.P -The server can only accept a limited number of input actions at one -time. This limit can be determined by the \fIXTestQueryInputSize\fR function -in this extension. -.P -The client should set \fIack_flag\fR to \fIXTestFAKE_ACK_NOT_NEEDED\fR -on calls to \fIXTestFakeInput\fR that do not reach this limit. -.P -The client should set \fIack_flag\fR to \fIXTestFAKE_ACK_REQUEST\fR -on the call to \fIXTestFakeInput\fR that reaches this limit. -.P -When the server sees an \fIack_flag\fR value of \fIXTestFAKE_ACK_REQUEST\fR -it finishes processing its input action buffer, then sends an event with -type \fIXTestFakeAckType\fR to the client. -When the client reads this event, it knows that it is safe to resume -sending input actions to the server. -.P -Since the actual value of the event type may vary depending on how many -extensions are included with an X11 implementation, -\fIXTestFakeAckType\fR is a variable that is contained in the Xlib part of -this extension. It may be referenced as follows: -.DS -extern int XTestFakeAckType; -.DE -.P -There are four types of input actions that are passed from the client -to the server. They are: -.VL 25 -.LI key/button~state~change -This type of input action contains the keycode of the key or button that -is to change state; -whether the key or button is to be up or down, -and the time to delay before changing the state of the key or button. -.LI pointer~motions -This type of input action contains information about the motion of the -pointer when the pointer is to be moved a short distance, -and the time to delay before moving the pointer. -If the pointer is to be moved a long distance, -the pointer jump input action must be used. -.LI pointer~jumps -This type of input action contains information about the motion of the -pointer when the pointer is to be moved a long distance, -and the time to delay before moving the pointer. -.LI delays -This type of input action is used when the delay between input actions is too -large to be held in the other input actions. -.LE -.P -The -.I XTestFakeInput -function will return -1 if there is an error, and 0 otherwise. -.P -An error code of \fIBadAccess\fR means that another client has already -sent user input actions to the server, and the server has not finished -processing the user input actions. -.SK -.H 3 XTestQueryInputSize -.DS -int -XTestQueryInputSize(\fIdisplay\fR, \fIsize_return\fR) - Display \(**\fIdisplay\fR; - unsigned long \(**\fIsize_return\fR; -.DE -.VL 13 -.LI \fIdisplay\fR -Specifies the connection to the X server. -.LI \fIsize_return\fR -Returns the number of input actions that the server's input action buffer can -hold. -.LE -.P -The -.I XTestQueryInputSize -function asks the server to return the number of input actions that it can hold -in its input action buffer in the unsigned long pointed to by \fIsize_return\fR. -.P -The -.I XTestQueryInputSize -function will return -1 if there is an error, and 0 otherwise. -.SK -.H 3 XTestReset -.DS -int -XTestReset(\fIdisplay\fR) - Display \(**\fIdisplay\fR; -.DE -.VL 9 -.LI \fIdisplay\fR -Specifies the connection to the X server. -.LE -.P -The -.I XTestReset -function tells the server to set everything having to do with this extension -back to its initial state. After this call the server will act as if this -extension were not installed until one of the extension functions is called by -a client. This function is not normally needed, but is included in case a -client wishes to clean up the server state, such as after a serious error. -.P -The -.I XTestReset -function will return -1 if there is an error, and 0 otherwise. -.SK -.H 1 `xtestext1.h'~File~Listing -.DS -.so xtestext1.h -.DE -.TC 1 1 4 diff --git a/doc/xorg-docs/specs/Xext/xtestlib.ms b/doc/xorg-docs/specs/Xext/xtestlib.ms deleted file mode 100644 index 9ccdfef8f..000000000 --- a/doc/xorg-docs/specs/Xext/xtestlib.ms +++ /dev/null @@ -1,446 +0,0 @@ -.\" Use -ms and macros.t -.\" edited for DP edits and code consistency w/ core protocol/xlib 4/2/96 -.\" $Xorg: xtestlib.ms,v 1.3 2000/08/17 19:42:37 cpqbld Exp $ -.de lP -.ne 8 -.LP -.. -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.ps 10 -.nr PS 10 -\& -.sp 8 -.ce 1 -\s+2\fBXTEST Extension Library\fP\s-2 -.sp 3 -.ce 3 -Version 2.2 -X Consortium Standard -.sp 6 -.ce 4 -\s-1Kieron Drake -.sp 6p -UniSoft Ltd.\s+1 -.bp -.sp 10 -.ps 9 -.nr PS 9 -.sp 8 -.lP -Copyright \(co 1992 by UniSoft Group Ltd. -.lP -Permission to use, copy, modify, and distribute this documentation for any -purpose and without fee is hereby granted, provided that the above copyright -notice and this permission notice appear in all copies. UniSoft makes no -representations about the suitability for any purpose of the information in -this document. This documentation is provided ``as is'' without express or -implied warranty. -.lP -.sp 5 -Copyright \(co 1992, 1994 X Consortium -.lP -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -.lP -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.lP -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -.lP -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. -.ps 10 -.nr PS 10 -.bp 1 -.EH ''XTEST Extension Library'' -.OH ''XTEST Extension Library'' -.EF ''\fB % \fP'' -.OF ''\fB % \fP'' -.NH 1 -Overview -.lP -This extension is a minimal set of client and server extensions -required to completely test the X11 server with no user intervention. -.lP -This extension is not intended to support general journaling and -playback of user actions. This is a difficult area [XTrap, 89] as it attempts -to synchronize synthetic user interactions with their effects; it is at the -higher level of dialogue recording/playback rather than at the strictly lexical -level. We are interested only in the latter, simpler, case. A more detailed -discussion and justification of the extension functionality is given in -[Drake, 91]. -.lP -We are aiming only to provide a minimum set of facilities that -solve immediate testing and validation problems. The testing extension -itself needs testing, where possible, and so should be as simple as possible. -.lP -We have also tried to: -.IP \(bu 5 -Confine the extension to an appropriate high level within the server -to minimize portability problems. In practice this means that the extension -should be at the DIX level or use the DIX/DDX interface, or both. This -has effects, in particular, on the level at which \*Qinput synthesis\*U -can occur. -.IP \(bu 5 -Minimize the changes required in the rest of the server. -.IP \(bu 5 -Minimize performance penalties on normal server operation. -.lP -.NH 1 -Description -.lP -The functions provided by this extension fall into two groups: -.IP "\fBClient Operations\fP" .5i -These routines manipulate otherwise hidden client-side behavior. The -actual implementation will depend on the details of the actual language -binding and what degree of request buffering, GContext caching, and so on, is -provided. In the C binding, defined in section 7, routines are provided -to access the internals of two opaque data structures -.Pn \*- GC s -and -.PN Visual s\*- -and to discard any requests pending within the -output buffer of a connection. The exact details can be expected to differ for -other language bindings. -.IP "\fBServer Requests\fP" .5i -The first of these requests is similar to that provided in most -extensions: it allows a client to specify a major and minor version -number to the server and for the server to respond with major and minor -versions of its own. The remaining two requests allow the following: -.RS -.IP \(bu 5 -Access to an otherwise \*Qwrite-only\*U server resource: the cursor -associated with a given window -.IP \(bu 5 -Perhaps most importantly, limited synthesis of input device events, -almost as if a cooperative user had moved the pointing device -or pressed a key or button. -.RE -.NH 1 -C Language Binding -.lP -The C functions either -provide direct access to the protocol and add no additional -semantics to those -defined in section 5 or they correspond directly to the abstract descriptions -of client operations in section 4. -.lP -All XTEST extension functions and procedures, and all manifest -constants and macros, will start with the string \*QXTest\*U. -All operations are classified as -server/client (Server) or client-only (Client). -All routines that have return type Status will return nonzero for -\*Qsuccess\*U and zero for \*Qfailure.\*U Even if the XTEST extension is -supported, the server may withdraw such facilities arbitrarily; in which case -they will subsequently return zero. -.lP -The include file for this extension is -.Pn < X11/extensions/XTest.h >. -.LP -.sM -.FD 0 -Bool -XTestQueryExtension(\fIdisplay\fP\^, \fIevent_base\fP\^, \fIerror_base\fP\^, \ -\fImajor_version\fP\^, \fIminor_version\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int *\fIevent_base\fP\^; /* RETURN */ -.br - int *\fIerror_base\fP\^; /* RETURN */ -.br - int *\fImajor_version\fP\^; /* RETURN */ -.br - int *\fIminor_version\fP\^; /* RETURN */ -.FN -.LP -.eM -.PN XTestQueryExtension -returns -.PN True -if the specified display supports the XTEST extension, else -.PN False . -If the extension is supported, *event_base would be set to the event number for -the first event for this extension and -*error_base would be set to the error number for the first error for -this extension. As no errors or events are defined for this version of the extension, -the values returned here are not defined (nor useful). -If the extension is supported, *major_version and *minor_version are set to -the major and minor version numbers of the extension supported by the -display. Otherwise, none of the arguments are set. -.sp -.LP -.sM -.FD 0 -Bool -XTestCompareCursorWithWindow(\fIdisplay\fP\^, \fIwindow\fP\^, \fIcursor\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIwindow\fP\^; -.br - Cursor \fIcursor\fP\^; -.FN -.LP -.eM -If the extension is supported, -.PN XTestCompareCursorWithWindow -performs a comparison of the cursor -whose ID is specified by cursor (which may be -.PN None ) -with the cursor of the window specified by window returning -.PN True -if they are the same and -.PN False -otherwise. -If the extension is not supported, then the request is ignored and -zero is returned. -.sp -.LP -.sM -.FD 0 -Bool -XTestCompareCurrentCursorWithWindow(\fIdisplay\fP\^, \fIwindow\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIwindow\fP\^; -.FN -.LP -.eM -If the extension is supported, -.PN XTestCompareCurrentCursorWithWindow -performs a comparison of the current cursor -with the cursor of the specified window returning -.PN True -if they are the same and -.PN False -otherwise. -If the extension is not supported, then the request is ignored and -zero is returned. -.sp -.LP -.sM -.FD 0 -XTestFakeKeyEvent(\fIdisplay\fP\^, \fIkeycode\fP\^, \fIis_press\fP\^, \fIdelay\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - unsigned int \fIkeycode\fP\^; -.br - Bool \fIis_press\fP\^; -.br - unsigned long \fIdelay\fP\^; -.FN -.LP -.eM -If the extension is supported, -.PN XTestFakeKeyEvent -requests the server to simulate either a -.PN KeyPress -(if is_press is -.PN True ) -or a -.PN KeyRelease -(if is_press is -.PN False ) -of the key with the specified keycode; -otherwise, the request is ignored. -.LP -If the extension is supported, -the simulated event will not be processed until delay milliseconds -after the request is received (if delay is -.PN CurrentTime , -then this is interpreted as no delay at all). No other requests from -this client will be processed until this delay, if any, has expired -and subsequent processing of the simulated event has been completed. -.sp -.LP -.sM -.FD 0 -XTestFakeButtonEvent(\fIdisplay\fP\^, \fIbutton\fP\^, \fIis_press\fP\^, \fIdelay\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - unsigned int \fIbutton\fP\^; -.br - Bool \fIis_press\fP\^; -.br - unsigned long \fIdelay\fP\^; -.FN -.LP -.eM -If the extension is supported, -.PN XTestFakeButtonEvent -requests the server to simulate either -a -.PN ButtonPress -(if is_press is -.PN True ) -or a -.PN ButtonRelease -(if is_press is -.PN False ) -of the logical button numbered by the specified button; -otherwise, the request is ignored. -.LP -If the extension is supported, -the simulated event will not be processed until delay milliseconds -after the request is received (if delay is -.PN CurrentTime , -then this is interpreted as no delay at all). No other requests from -this client will be processed until this delay, if any, has expired -and subsequent processing of the simulated event has been completed. -.sp -.LP -.sM -.FD 0 -XTestFakeMotionEvent(\fIdisplay\fP\^, \fIscreen_number\fP\^, \fIx\fP\^, \ -\fIy\fP\^, \fIdelay\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIscreen_number\fP\^; -.br - int \fIx\fP\^ \fIy\fP\^; -.br - unsigned long \fIdelay\fP\^; -.FN -.LP -.eM -If the extension is supported, -.PN XTestFakeMotionEvent -requests the server to simulate -a movement of the pointer to the specified position (x, y) on the -root window of screen_number; -otherwise, the request is ignored. If screen_number is -1, the -current screen (that the pointer is on) is used. -.LP -If the extension is supported, -the simulated event will not be processed until delay milliseconds -after the request is received (if delay is -.PN CurrentTime , -then this is interpreted as no delay at all). No other requests from -this client will be processed until this delay, if any, has expired -and subsequent processing of the simulated event has been completed. -.sp -.LP -.sM -.FD 0 -XTestFakeRelativeMotionEvent(\fIdisplay\fP\^, \fIscreen_number\fP\^, \ -\fIx\fP\^, \fIy\fP\^, \fIdelay\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIscreen_number\fP\^; -.br - int \fIx\fP\^ \fIy\fP\^; -.br - unsigned long \fIdelay\fP\^; -.FN -.LP -.eM -If the extension is supported, -.PN XTestFakeRelativeMotionEvent -requests the server to simulate -a movement of the pointer by the specified offsets (x, y) relative -to the current pointer position on screen_number; -otherwise, the request is ignored. If screen_number is -1, the -current screen (that the pointer is on) is used. -.LP -If the extension is supported, -the simulated event will not be processed until delay milliseconds -after the request is received (if delay is -.PN CurrentTime , -then this is interpreted as no delay at all). No other requests from -this client will be processed until this delay, if any, has expired -and subsequent processing of the simulated event has been completed. -.sp -.LP -.sM -.FD 0 -XTestGrabControl(\fIdisplay\fP\^, \fIimpervious\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Bool \fIimpervious\fP\^; -.FN -.LP -.eM -If impervious is -.PN True , -then the executing client becomes impervious to server grabs. -If impervious is -.PN False , -then the executing client returns to the normal state of being -susceptible to server grabs. -.sp -.LP -.sM -.FD 0 -Bool -XTestSetGContextOfGC(\fIgc\fP\^, \fIgid\fP\^) -.br - GC \fIgc\fP\^; -.br - GContext \fIgid\fP\^; -.FN -.LP -.eM -.PN XTestSetGContextOfGC -sets the GContext within the opaque datatype referenced by gc to -be that specified by gid. -.sp -.LP -.sM -.FD 0 -XTestSetVisualIDOfVisual(\fIvisual\fP\^, \fIvisualid\fP\^) -.br - Visual *\fIvisual\fP\^; -.br - VisualID \fIvisualid\fP\^; -.FN -.LP -.eM -.PN XTestSetVisualIDOfVisual -sets the VisualID within the opaque datatype referenced by visual to -be that specified by visualid. -.sp -.LP -.sM -.FD 0 -Bool -XTestDiscard(\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.LP -.eM -.PN XTestDiscard -discards any requests within the output buffer for the specified display. -It returns -.PN True -if any requests were discarded; otherwise, it returns -.PN False . -.NH 1 -References -.XP -Annicchiarico, D., et al., \fIXTrap: The XTrap Architecture\fP\^. -Digital Equipment Corporation, July 1991. -.XP -Drake, K. J., \fISome Proposals for a Minimum X11 Testing Extension\fP\^. -UniSoft Ltd., June 1991. -.LP diff --git a/doc/xorg-docs/specs/Xi/encoding.ms b/doc/xorg-docs/specs/Xi/encoding.ms deleted file mode 100644 index f056a512b..000000000 --- a/doc/xorg-docs/specs/Xi/encoding.ms +++ /dev/null @@ -1,2016 +0,0 @@ -.\" $Xorg: encoding.ms,v 1.3 2000/08/17 19:42:37 cpqbld Exp $ -\& -.sp 1 -.XS -Appendix A \- Input Extension Protocol Encoding -.XE -.ce 2 -.ps 11 -.nr PS 11 -.ps +2 -\fBAppendix A\fP - -\fBInput Extension Protocol Encoding\fP -.ps -.sp 2 -.LP -.ps 9 -.nr PS 9 -.vs 10 -.nr VS 10 -.\"The sections in this appendix correspond to their number counterparts -.\"in the protocol document. -.ps +2 -\fBSyntactic Conventions\fP -.ps -3 -.LP -All numbers are in decimal, -unless prefixed with #x, in which case they are in hexadecimal (base 16). -.LP -The general syntax used to describe requests, replies, errors, events, and -compound types is: -.LP -.DS I -\fBNameofThing\fP - encode-form - ... - encode-form -.DE -Each encode-form describes a single component. -.LP -For components described in the protocol as: -.LP -.DS I -name: TYPE -.DE -the encode-form is: -.LP -.DS I -.TA 1i 1.5i 2.5i -.ta 1i 1.5i 2.5i -N TYPE name -.DE -N is the number of bytes occupied in the data stream, -and TYPE is the interpretation of those bytes. -For example, -.LP -.DS I -.TA 1i 1.5i -.ta 1i 1.5i -depth: CARD8 -.DE -becomes: -.LP -.DS I -.TA 1i 1.5i 2.5i -.ta 1i 1.5i 2.5i -1 CARD8 depth -.DE -For components with a static numeric value the encode-form is: -.LP -.DS I -.TA 1i 1.5i 2.5i -.ta 1i 1.5i 2.5i -N value name -.DE -The value is always interpreted as an N-byte unsigned integer. -For example, -the first two bytes of a Window error are always zero (indicating an -error in general) and three (indicating the Window error in particular): -.LP -.DS I -.TA 1i 1.5i 2.5i -.ta 1i 1.5i 2.5i -1 0 Error -1 3 code -.DE -For components described in the protocol as: -.LP -.DS I -name: \fB{Name1, ..., NameI}\fP -.DE -.LP -the encode-form is: -.LP -.DS I -.TA 1i 1.5i 2.5i -.ta 1i 1.5i 2.5i -N name - value1 Name1 - ... - valueI NameI -.DE -The value is always interpreted as an N-byte unsigned integer. -Note that the size of N is sometimes larger than that strictly required -to encode the values. -For example: -.LP -.DS I -class: \fB{InputOutput, InputOnly, CopyFromParent}\fP -.DE -.LP -becomes: -.LP -.DS I -.TA 1i 1.5i 2.5i 3i -.ta 1i 1.5i 2.5i 3i -2 class - 0 CopyFromParent - 1 InputOutput - 2 InputOnly -.DE -For components described in the protocol as: -.LP -.DS I -NAME: TYPE or \fBAlternative1 ... or AlternativeI\fP -.DE -.LP -the encode-form is: -.LP -.DS I -.TA 1i 1.5i 2i 2.5i 3i -.ta 1i 1.5i 2i 2.5i 3i -N TYPE NAME - value1 Alternative1 - ... - valueI AlternativeI -.DE -The alternative values are guaranteed not to conflict with the encoding -of TYPE. -For example: -.LP -.DS -destination: WINDOW or \fBPointerWindow\fP or \fBInputFocus\fP -.DE -.LP -becomes: -.LP -.DS I -.TA 1i 1.5i 2.5i -.ta 1i 1.5i 2.5i -4 WINDOW destination - 0 PointerWindow - 1 InputFocus -.DE -For components described in the protocol as: -.LP -.DS I -.TA 1i 1.5i -.ta 1i 1.5i -value-mask: BITMASK -.DE -the encode-form is: -.LP -.DS I -.TA 1i 1.5i 2i 2.5i -.ta 1i 1.5i 2i 2.5i -N BITMASK value-mask - mask1 mask-name1 - ... - maskI mask-nameI -.DE -The individual bits in the mask are specified and named, -and N is 2 or 4. -The most-significant bit in a BITMASK is reserved for use in defining -chained (multiword) bitmasks, as extensions augment existing core requests. -The precise interpretation of this bit is not yet defined here, -although a probable mechanism is that a 1-bit indicates that another N bytes -of bitmask follows, with bits within the overall mask still interpreted -from least-significant to most-significant with an N-byte unit, with N-byte units -interpreted in stream order, and with the overall mask being byte-swapped -in individual N-byte units. -.LP -For LISTofVALUE encodings, the request is followed by a section of the form: -.LP -.DS I -.TA 1i 1.5i -.ta 1i 1.5i -VALUEs - encode-form - ... - encode-form -.DE -listing an encode-form for each VALUE. -The NAME in each encode-form keys to the corresponding BITMASK bit. -The encoding of a VALUE always occupies four bytes, -but the number of bytes specified in the encoding-form indicates how -many of the least-significant bytes are actually used; -the remaining bytes are unused and their values do not matter. -.LP -In various cases, the number of bytes occupied by a component will be specified -by a lowercase single-letter variable name instead of a specific numeric -value, and often some other component will have its value specified as a -simple numeric expression involving these variables. -Components specified with such expressions are always interpreted -as unsigned integers. -The scope of such variables is always just the enclosing request, reply, -error, event, or compound type structure. -For example: -.LP -.DS I -.TA 1i 1.5i 2i 2.5i -.ta 1i 1.5i 2i 2.5i -2 3+n request length -4n LISTofPOINT points -.DE -For unused bytes (the values of the bytes are undefined and do not matter), -the encode-form is: -.LP -.DS I -.TA 1i 1.5i 2i 2.5i -.ta 1i 1.5i 2i 2.5i -N unused -.DE -If the number of unused bytes is variable, the encode-form typically is: -.LP -.DS I -.TA 1i 1.5i 2i 2.5i -.ta 1i 1.5i 2i 2.5i -p unused, p=pad(E) -.DE -where E is some expression, -and pad(E) is the number of bytes needed to round E up to a multiple of four. -.LP -.DS I -.TA 1i 1.5i 2i 2.5i -.ta 1i 1.5i 2i 2.5i -pad(E) = (4 - (E mod 4)) mod 4 -.DE -.ps +2 -\fBCommon Types\fP -.ps -.LP -LISTofFOO -.IP -In this document the LISTof notation strictly means some number of repetitions -of the FOO encoding; -the actual length of the list is encoded elsewhere. -.LP -SETofFOO -.IP -A set is always represented by a bitmask, with a 1-bit indicating presence in -the set. -.LP -BITMASK: CARD32 -.LP -WINDOW: CARD32 -.LP -BYTE: 8-bit value -.LP -INT8: 8-bit signed integer -.LP -INT16: 16-bit signed integer -.LP -INT32: 32-bit signed integer -.LP -CARD8: 8-bit unsigned integer -.LP -CARD16: 16-bit unsigned integer -.LP -CARD32: 32-bit unsigned integer -.LP -TIMESTAMP: CARD32 -.LP -EVENTCLASS: CARD32 -.LP -.DS 0 -.TA .75i 1.75i -.ta .75i 1.75i -INPUTCLASS - 0 KeyClass - 1 ButtonClass - 2 ValuatorClass - 3 FeedbackClass - 4 ProximityClass - 5 FocusClass - 6 OtherClass -.DE -.LP -.DS 0 -.TA .75i 1.75i -.ta .75i 1.75i -INPUTCLASS - 0 KbdFeedbackClass - 1 PtrFeedbackClass - 2 StringFeedbackClass - 3 IntegerFeedbackClass - 4 LedFeedbackClass - 5 BellFeedbackClass -.DE -.LP -.DS 0 -.TA .75i 1.75i -.ta .75i 1.75i -INPUTINFO - 0 KEYINFO - 1 BUTTONINFO - 2 VALUATORINFO -.DE -.LP -.DS 0 -.TA .75i 1.75i -.ta .75i 1.75i -DEVICEMODE - 0 Relative - 1 Absolute -.DE -.LP -.DS 0 -.TA .75i 1.75i -.ta .75i 1.75i -PROXIMITYSTATE - 0 InProximity - 1 OutOfProximity -.DE -.LP -.DS 0 -.TA .75i 1.75i -.ta .75i 1.75i -BOOL - 0 False - 1 True -.DE -.LP -KEYSYM: CARD32 -.LP -KEYCODE: CARD8 -.LP -BUTTON: CARD8 -.LP -.DS 0 -.TA .75i 1.75i -.ta .75i 1.75i -SETofKEYBUTMASK - #x0001 Shift - #x0002 Lock - #x0004 Control - #x0008 Mod1 - #x0010 Mod2 - #x0020 Mod3 - #x0040 Mod4 - #x0080 Mod5 - #x0100 Button1 - #x0200 Button2 - #x0400 Button3 - #x0800 Button4 - #x1000 Button5 - #xe000 unused but must be zero -.DE -.LP -.DS 0 -.TA .75i 1.75i -.ta .75i 1.75i -SETofKEYMASK - encodings are the same as for SETofKEYBUTMASK, except with - #xff00 unused but must be zero -.DE -.LP -STRING8: LISTofCARD8 -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -STR - 1 n length of name in bytes - n STRING8 name -.DE -.ps +2 -\fBErrors\fP -.ps -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -Request - 1 0 Error - 1 1 code - 2 CARD16 sequence number - 4 unused - 2 CARD16 minor opcode - 1 CARD8 major opcode - 21 unused -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -Value - 1 0 Error - 1 2 code - 2 CARD16 sequence number - 4 <32-bits> bad value - 2 CARD16 minor opcode - 1 CARD8 major opcode - 21 unused -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -Window - 1 0 Error - 1 3 code - 2 CARD16 sequence number - 4 CARD32 bad resource id - 2 CARD16 minor opcode - 1 CARD8 major opcode - 21 unused -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -Match - 1 0 Error - 1 8 code - 2 CARD16 sequence number - 4 unused - 2 CARD16 minor opcode - 1 CARD8 major opcode - 21 unused -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -Access - 1 0 Error - 1 10 code - 2 CARD16 sequence number - 4 unused - 2 CARD16 minor opcode - 1 CARD8 major opcode - 21 unused -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -Alloc - 1 0 Error - 1 11 code - 2 CARD16 sequence number - 4 unused - 2 CARD16 minor opcode - 1 CARD8 major opcode - 21 unused -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -Name - 1 0 Error - 1 15 code - 2 CARD16 sequence number - 4 unused - 2 CARD16 minor opcode - 1 CARD8 major opcode - 21 unused -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -Device - 1 0 Error - 1 CARD8 code - 2 CARD16 sequence number - 4 unused - 2 CARD16 minor opcode - 1 CARD8 major opcode - 21 unused -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -Event - 1 0 Error - 1 CARD8 code - 2 CARD16 sequence number - 4 unused - 2 CARD16 minor opcode - 1 CARD8 major opcode - 21 unused -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -Mode - 1 0 Error - 1 CARD8 code - 2 CARD16 sequence number - 4 unused - 2 CARD16 minor opcode - 1 CARD8 major opcode - 21 unused -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -Class - 1 0 Error - 1 CARD8 code - 2 CARD16 sequence number - 4 unused - 2 CARD16 minor opcode - 1 CARD8 major opcode - 21 unused -.DE -.ps +2 -Keyboards -.ps -.LP -KEYCODE values are always greater than 7 (and less than 256). -.LP -KEYSYM values with the bit #x10000000 set are reserved as vendor-specific. -.LP -The names and encodings of the standard KEYSYM values are contained in -.\"Appendix B, Keysym Encoding. -appendix F. -.LP -.ps +2 -Pointers -.ps -.LP -BUTTON values are numbered starting with one. -.LP -.ps +2 -Requests -.ps -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -GetExtensionVersion - 1 CARD8 input extension opcode - 1 1 GetExtensionVersion opcode - 2 2+(n+p)/4 request length - 2 n length of name - 2 unused - n STRING8 name - p unused, p=pad(n) -.DE -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - => - 1 1 Reply - 1 1 GetExtensionVersion opcode - 2 CARD16 sequence number - 4 0 reply length - 2 CARD16 major version - 2 CARD16 minor version - 1 BOOL present - 19 unused -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -ListInputDevices - 1 CARD8 input extension opcode - 1 2 ListInputDevices opcode - 2 1 request length -.DE -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - => - 1 1 Reply - 1 2 ListInputDevices opcode - 2 CARD16 sequence number - 4 (n+p)/4 reply length - 1 CARD8 number of input devices - 23 unused - n LISTofDEVICEINFO info for each input device - p unused, p=pad(n) -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - DEVICEINFO - 4 CARD32 device type - 1 CARD8 device id - 1 CARD8 number of input classes this device reports - 1 CARD8 device use - 0 IsXPointer - 1 IsXKeyboard - 2 IsXExtensionDevice - 1 unused - n LISTofINPUTINFO input info for each input class - m STR name - p unused, p=pad(m) -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - INPUTINFO KEYINFO or BUTTONINFO or VALUATORINFO -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - KEYINFO - 1 0 class id - 1 8 length - 1 KEYCODE minimum keycode - 1 KEYCODE maximum keycode - 2 CARD16 number of keys - 2 unused -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -BUTTONINFO - 1 1 class id - 1 4 length - 2 CARD16 number of buttons -.DE -.LP -.DS 0 -.TA .2i .75i 2.0i 3.0i -.ta .2i .75i 2.0i 3.0i -VALUATORINFO - 1 2 class id - 1 8+12n length - 1 n number of axes - 1 SETofDEVICEMODE mode - 4 CARD32 size of motion buffer - 12n LISTofAXISINFO valuator limits -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -AXISINFO - 4 CARD32 resolution - 4 CARD32 minimum value - 4 CARD32 maximum value -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -OpenDevice - 1 CARD8 input extension opcode - 1 3 OpenDevice opcode - 2 2 request length - 1 CARD8 device id - 3 unused -.DE -.DS 0 -.TA .2i .5i 1.5i 3.5i -.ta .2i .5i 1.5i 3.5i - => - 1 1 Reply - 1 3 OpenDevice opcode - 2 CARD16 sequence number - 4 (n+p)/4 reply length - 1 CARD8 number of input classes - 23 unused - n LISTofINPUTCLASSINFO input class information - p unused, p=pad(n) -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - INPUTCLASSINFO - 1 CARD8 input class id - 0 KEY - 1 BUTTON - 2 VALUATOR - 3 FEEDBACK - 4 PROXIMITY - 5 FOCUS - 6 OTHER - 1 CARD8 event type base code for this class -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -CloseDevice - 1 CARD8 input extension opcode - 1 4 CloseDevice opcode - 2 2 request length - 1 CARD8 device id - 3 unused -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -SetDeviceMode - 1 CARD8 input extension opcode - 1 5 SetDeviceMode opcode - 2 2 request length - 1 CARD8 device id - 1 CARD8 mode - 2 unused -.DE -.DS 0 -.TA .2i .5i 1.5i 3.5i -.ta .2i .5i 1.5i 3.5i - => - 1 1 Reply - 1 5 SetDeviceMode opcode - 2 CARD16 sequence number - 4 0 reply length - 1 CARD8 status - 0 Success - 1 AlreadyGrabbed - 3 + first_error DeviceBusy - 23 unused -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -SelectExtensionEvent - 1 CARD8 input extension opcode - 1 6 SelectExtensionEvent opcode - 2 3+n request length - 4 Window event window - 2 CARD16 count - 2 unused - 4n LISTofEVENTCLASS desired events -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -GetSelectedExtensionEvents - 1 CARD8 input extension opcode - 1 7 GetSelectedExtensionEvents opcode - 2 2 request length - 4 Window event window -.DE -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - => - 1 1 Reply - 1 7 GetSelecteExtensionEvents opcode - 2 CARD16 sequence number - 4 n + m reply length - 2 n this client count - 2 m all clients count - 20 unused - 4n LISTofEVENTCLASS this client list - 4m LISTofEVENTCLASS all clients list -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -ChangeDeviceDontPropagateList - 1 CARD8 input extension opcode - 1 8 ChangeDeviceDontPropagateList opcode - 2 3+n request length - 4 Window event window - 2 n count of events - 1 mode - 0 AddToList - 1 DeleteFromList - 1 unused - 4n LISTofEVENTCLASS desired events -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -GetDeviceDontPropagateList - 1 CARD8 input extension opcode - 1 9 GetDeviceDontPropagateList opcode - 2 2 request length - 4 Window event window -.DE -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - => - 1 1 Reply - 1 9 GetDeviceDontPropagateList opcode - 2 CARD16 sequence number - 4 n reply length - 2 n count of events - 22 unused - 4n LISTofEVENTCLASS don't propagate list -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -GetDeviceMotionEvents - 1 CARD8 input extension opcode - 1 10 GetDeviceMotionEvents opcode - 2 4 request length - 4 TIMESTAMP start - 0 CurrentTime - 4 TIMESTAMP stop - 0 CurrentTime - 1 CARD8 device id - 3 unused -.DE -.DS 0 -.TA .2i .5i 1.5i 3.5i -.ta .2i .5i 1.5i 3.5i - => - 1 1 Reply - 1 10 GetDeviceMotionEvents opcode - 2 CARD16 sequence number - 4 (m+1)n reply length - 4 n number of DEVICETIMECOORDs in events - 1 m number of valuators per event - 1 CARD8 mode of the device - 0 Absolute - 1 Relative - 18 unused - (4m+4)n LISTofDEVICETIMECOORD events -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - DEVICETIMECOORD - 4 TIMESTAMP time - 4m LISTofINT32 valuators -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -ChangeKeyboardDevice - 1 CARD8 input extension opcode - 1 11 ChangeKeyboardDevice opcode - 2 2 request length - 1 CARD8 device id - 3 unused -.DE -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - => - 1 1 Reply - 1 11 ChangeKeyboardDevice opcode - 2 CARD16 sequence number - 4 0 reply length - 1 status - 0 Success - 1 AlreadyGrabbed - 2 DeviceFrozen - 23 unused -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -ChangePointerDevice - 1 CARD8 input extension opcode - 1 12 ChangePointerDevice opcode - 2 2 request length - 1 CARD8 x-axis - 1 CARD8 y-axis - 1 CARD8 device id - 1 unused -.DE -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - => - 1 1 Reply - 1 12 ChangePointerDevice opcode - 2 CARD16 sequence number - 4 0 reply length - 1 status - 0 Success - 1 AlreadyGrabbed - 2 DeviceFrozen - 23 unused -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -GrabDevice - 1 CARD8 input extension opcode - 1 13 GrabDevice opcode - 2 5+n request length - 4 WINDOW grab-window - 4 TIMESTAMP time - 0 CurrentTime - 2 n count of events - 1 this-device-mode - 0 Synchronous - 1 Asynchronous - 1 other-devices-mode - 0 Synchronous - 1 Asynchronous - 1 BOOL owner-events - 1 CARD8 device id - 2 unused - 4n LISTofEVENTCLASS event list -.DE -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - => - 1 1 Reply - 1 13 GrabDevice opcode - 2 CARD16 sequence number - 4 0 reply length - 1 status - 0 Success - 1 AlreadyGrabbed - 2 InvalidTime - 3 NotViewable - 4 Frozen - 23 unused -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -UngrabDevice - 1 CARD8 input extension opcode - 1 14 UngrabDevice opcode - 2 3 request length - 4 TIMESTAMP time - 0 CurrentTime - 1 CARD8 device id - 3 unused -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -GrabDeviceKey - 1 CARD8 input extension opcode - 1 15 GrabDeviceKey opcode - 2 5+n request length - 4 WINDOW grab-window - 2 n count of events - 2 SETofKEYMASK modifiers - #x8000 AnyModifier - 1 CARD8 modifier device - #x0FF UseXKeyboard - 1 CARD8 grabbed device - 1 KEYCODE key - 0 AnyKey - 1 this-device-mode - 0 Synchronous - 1 Asynchronous - 1 other-devices-mode - 0 Synchronous - 1 Asynchronous - 1 BOOL owner-events - 2 unused - 4n LISTofEVENTCLASS event list -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -UngrabDeviceKey - 1 CARD8 input extension opcode - 1 16 UngrabDeviceKey opcode - 2 4 request length - 4 WINDOW grab-window - 2 SETofKEYMASK modifiers - #x8000 AnyModifier - 1 CARD8 modifier device - #x0FF UseXKeyboard - 1 KEYCODE key - 0 AnyKey - 1 CARD8 grabbed device - 3 unused - -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -GrabDeviceButton - 1 CARD8 input extension opcode - 1 17 GrabDeviceButton opcode - 2 5+n request length - 4 WINDOW grab-window - 1 CARD8 grabbed device - 1 CARD8 modifier device - #x0FF UseXKeyboard - 2 n count of desired events - 2 SETofKEYMASK modifiers - 1 this-device-mode - 0 Synchronous - 1 Asynchronous - 1 other-device-mode - 0 Synchronous - 1 Asynchronous - 1 BUTTON button - 0 AnyButton - 1 BOOL owner-events - #x8000 AnyModifier - 2 unused - 4n LISTofEVENTCLASS event list -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -UngrabDeviceButton - 1 CARD8 input extension opcode - 1 18 UngrabDeviceButton opcode - 2 4 request length - 4 WINDOW grab-window - 2 SETofKEYMASK modifiers - #x8000 AnyModifier - 1 CARD8 modifier device - #x0FF UseXKeyboard - 1 BUTTON button - 0 AnyButton - 1 CARD8 grabbed device - 3 unused -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -AllowDeviceEvents - 1 CARD8 input extension opcode - 1 19 AllowDeviceEvents opcode - 2 3 request length - 4 TIMESTAMP time - 0 CurrentTime - 1 mode - 0 AsyncThisDevice - 1 SyncThisDevice - 2 ReplayThisDevice - 3 AsyncOtherDevices - 4 AsyncAll - 5 SyncAll - 1 CARD8 device id - 2 unused -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -GetDeviceFocus - 1 CARD8 input extension opcode - 1 20 GetDeviceFocus opcode - 2 2 request length - 1 CARD8 device - 3 unused -.DE -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - => - 1 1 Reply - 1 20 GetDeviceFocus opcode - 2 CARD16 sequence number - 4 0 reply length - 4 WINDOW focus - 0 None - 1 PointerRoot - 3 FollowKeyboard - 4 TIMESTAMP focus time - 1 revert-to - 0 None - 1 PointerRoot - 2 Parent - 3 FollowKeyboard - 15 unused -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -SetDeviceFocus - 1 CARD8 input extension opcode - 1 21 SetDeviceFocus opcode - 2 4 request length - 4 WINDOW focus - 0 None - 1 PointerRoot - 3 FollowKeyboard - 4 TIMESTAMP time - 0 CurrentTime - 1 revert-to - 0 None - 1 PointerRoot - 2 Parent - 3 FollowKeyboard - 1 CARD8 device - 2 unused -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -GetFeedbackControl - 1 CARD8 input extension opcode - 1 22 GetFeedbackControl opcode - 2 2 request length - 1 CARD8 device id - 3 unused -.DE -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - => - 1 1 Reply - 1 22 GetFeedbackControl opcode - 2 CARD16 sequence number - 4 m/4 reply length - 2 n number of feedbacks supported - 22 unused - m LISTofFEEDBACKSTATE feedbacks -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - FEEDBACKSTATE KBDFEEDBACKSTATE, PTRFEEDBACKSTATE, INTEGERFEEDBACKSTATE, - STRINGFEEDBACKSTATE, BELLFEEDBACKSTATE, or LEDFEEDBACKSTATE -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - KBDFEEDBACKSTATE - 1 0 feedback class id - 1 CARD8 id of this feedback - 2 20 length - 2 CARD16 pitch - 2 CARD16 duration - 4 CARD32 led_mask - 4 CARD32 led_values - 1 global_auto_repeat - 0 Off - 1 On - 1 CARD8 click - 1 CARD8 percent - 1 unused - 32 LISTofCARD8 auto_repeats -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - PTRFEEDBACKSTATE - 1 0 feedback class id - 1 CARD8 id of this feedback - 2 12 length - 2 unused - 2 CARD16 acceleration-numerator - 2 CARD16 acceleration-denominator - 2 CARD16 threshold -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - INTEGERFEEDBACKSTATE - 1 0 feedback class id - 1 CARD8 id of this feedback - 2 16 length - 4 CARD32 resolution - 4 INT32 minimum value - 4 INT32 maximum value -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - STRINGFEEDBACKSTATE - 1 1 feedback class id - 1 CARD8 id of this feedback - 2 4n+8 length - 2 CARD16 max_symbols - 2 n number of keysyms supported - 4n LISTofKEYSYM key symbols supported -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - BELLFEEDBACKSTATE - 1 1 feedback class id - 1 CARD8 id of this feedback - 2 12 length - 1 CARD8 percent - 3 unused - 2 CARD16 pitch - 2 CARD16 duration -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - LEDFEEDBACKSTATE - 1 1 feedback class id - 1 CARD8 id of this feedback - 2 12 length - 4 CARD32 led_mask - 4 BITMASK led_values - #x0001 On - #x0002 Off -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -ChangeFeedbackControl - 1 CARD8 input extension opcode - 1 23 ChangeFeedbackControl opcode - 2 3+n/4 request length - 4 BITMASK value-mask (has n bits set to 1) - #x0001 keyclick-percent - #x0002 bell-percent - #x0004 bell-pitch - #x0008 bell-duration - #x0010 led - #x0020 led-mode - #x0040 key - #x0080 auto-repeat-mode - #x0001 string - #x0001 integer - #x0001 acceleration-numerator - #x0002 acceleration-denominator - #x0004 acceleration-threshold - 1 CARD8 device id - 1 CARD8 feedback class id - 2 unused - n FEEDBACKCLASS -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - FEEDBACKCLASS KBDFEEDBACKCTL, PTRFEEDBACKCTL, INTEGERFEEDBACKCTL, - STRINGFEEDBACKCTL, BELLFEEDBACKCTL, or LEDFEEDBACKCTL -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - KBDFEEDBACKCTL - 1 0 feedback class id - 1 CARD8 id of this feedback - 2 20 length - 1 KEYCODE key - 1 auto-repeat-mode - 0 Off - 1 On - 2 Default - 1 INT8 key-click-percent - 1 INT8 bell-percent - 2 INT16 bell-pitch - 2 INT16 bell-duration - 4 CARD32 led_mask - 4 CARD32 led_values -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - PTRFEEDBACKCTL - 1 1 feedback class id - 1 CARD8 id of this feedback - 2 12 length - 2 unused - 2 INT16 numerator - 2 INT16 denominator - 2 INT16 threshold -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - STRINGCTL - 1 2 feedback class id - 1 CARD8 id of this feedback - 2 4n+8 length - 2 unused - 2 n number of keysyms to display - 4n LISTofKEYSYM list of key symbols to display -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - INTEGERCTL - 1 3 feedback class id - 1 CARD8 id of this feedback - 2 8 length - 4 INT32 integer to display -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - LEDCTL - 1 4 feedback class id - 1 CARD8 id of this feedback - 2 12 length - 4 CARD32 led_mask - 4 BITMASK led_values - #x0001 On - #x0002 Off -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - BELLCTL - 1 5 feedback class id - 1 CARD8 id of this feedback - 2 8 length - 1 INT8 percent - 3 unused - 2 INT16 pitch - 2 INT16 duration -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -GetDeviceKeyMapping - 1 CARD8 input extension opcode - 1 24 GetDeviceKeyMapping opcode - 2 2 request length - 1 CARD8 device - 1 KEYCODE first-keycode - 1 CARD8 count - 1 unused -.DE -.DS 0 -.TA .2i .75i 2.0i 3.0i -.ta .2i .75i 2.0i 3.0i - => - 1 1 Reply - 1 24 GetDeviceKeyMapping opcode - 2 CARD16 sequence number - 4 nm reply length (m = count field from the request) - 1 n keysyms-per-keycode - 23 unused - 4nm LISTofKEYSYM keysyms -.DE -.LP -.DS 0 -.TA .2i .75i 2.0i 3.0i -.ta .2i .75i 2.0i 3.0i -ChangeDeviceKeyMapping - 1 CARD8 input extension opcode - 1 25 ChangeDeviceKeyMapping opcode - 2 2+nm request length - 1 CARD8 device - 1 KEYCODE first-keycode - 1 m keysyms-per-keycode - 1 n keycode-count - 4nm LISTofKEYSYM keysyms -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -GetDeviceModifierMapping - 1 CARD8 input extension opcode - 1 26 GetDeviceModifierMapping opcode - 2 2 request length - 1 CARD8 device - 3 unused -.DE -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - => - 1 1 Reply - 1 26 GetDeviceModifierMapping opcode - 2 CARD16 sequence number - 4 2n reply length - 1 n keycodes-per-modifier - 23 unused - 8n LISTofKEYCODE keycodes -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -SetDeviceModifierMapping - 1 CARD8 input extension opcode - 1 27 SetDeviceModifier opcode - 2 2+2n request length - 1 CARD8 device - 1 n keycodes-per-modifier - 2 unused - 8n LISTofKEYCODE keycodes -.DE -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - => - 1 1 Reply - 1 27 SetDeviceModifierMapping opcode - 2 CARD16 sequence number - 4 0 reply length - 1 status - 0 Success - 1 Busy - 2 Failed - 23 unused -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -GetDeviceButtonMapping - 1 CARD8 input extension opcode - 1 28 GetDeviceButtonMapping opcode - 2 2 request length - 1 CARD8 device - 3 unused -.DE -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - => - 1 1 Reply - 1 28 GetDeviceButtonMapping opcode - 2 CARD16 sequence number - 4 (n+p)/4 reply length - 1 n number of elements in map list - 23 unused - n LISTofCARD8 map - p unused, p=pad(n) -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -SetDeviceButtonMapping - 1 CARD8 input extension opcode - 1 29 SetDeviceButtonMapping opcode - 2 2+(n+p)/4 request length - 1 CARD8 device - 1 n length of map - 2 unused - n LISTofCARD8 map - p unused, p=pad(n) -.DE -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - => - 1 1 Reply - 1 29 SetDeviceButtonMapping opcode - 2 CARD16 sequence number - 4 0 reply length - 1 status - 0 Success - 1 Busy - 23 unused -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -QueryDeviceState - 1 CARD8 input extension opcode - 1 30 QueryDeviceState opcode - 2 2 request length - 1 CARD8 device - 3 unused -.DE -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - => - 1 1 Reply - 1 30 QueryDeviceState opcode - 2 CARD16 sequence number - 4 m/4 reply length - 1 n number of input classes - 23 unused - m LISTofINPUTSTATE -.DE -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - INPUTSTATE KEYSTATE or BUTTONSTATE or VALUATORSTATE -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - KEYSTATE - 1 CARD8 key input class id - 1 36 length - 1 CARD8 num_keys - 1 unused - 32 LISTofCARD8 status of keys -.DE -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - BUTTONSTATE - 1 CARD8 button input class id - 1 36 length - 1 CARD8 num_buttons - 1 unused - 32 LISTofCARD8 status of buttons -.DE -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i - VALUATORSTATE - 1 CARD8 valuator input class id - 1 4n + 4 length - 1 n number of valuators - 1 mode - #x01 DeviceMode (0 = Relative, 1 = Absolute) - #x02 ProximityState (0 = InProximity, 1 = OutOfProximity) - 4n LISTofCARD32 status of valuators -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -SendExtensionEvent - 1 CARD8 input extension opcode - 1 31 SendExtensionEvent opcode - 2 4 + 8n + m request length - 4 WINDOW destination - 1 CARD8 device - 1 BOOL propagate - 2 CARD16 eventclass count - 1 CARD8 num_events - 3 unused - 32n LISTofEVENTS events to send - 4m LISTofEVENTCLASS desired events -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -DeviceBell - 1 CARD8 input extension opcode - 1 32 DeviceBell opcode - 2 2 request length - 1 CARD8 device id - 1 CARD8 feedback id - 1 CARD8 feedback class - 1 INT8 percent -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -SetDeviceValuators - 1 CARD8 input extension opcode - 1 33 SetDeviceValuators opcode - 2 2 + n request length - 1 CARD8 device id - 1 CARD8 first valuator - 1 n number of valuators - 1 unused - 4n LISTofINT32 valuator values to set -.DE -.DS 0 -.TA .2i .5i 1.5i 3.5i -.ta .2i .5i 1.5i 3.5i - => - 1 1 Reply - 1 33 SetDeviceValuators opcode - 2 CARD16 sequence number - 4 0 reply length - 1 CARD8 status - 0 Success - 1 AlreadyGrabbed - 23 unused -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -GetDeviceControl - 1 CARD8 input extension opcode - 1 34 GetDeviceControl opcode - 2 2 request length - 2 CARD16 device control type - 1 CARD8 device id - 1 unused -.DE -.DS 0 -.TA .2i .5i 1.5i 3.5i -.ta .2i .5i 1.5i 3.5i - => - 1 1 Reply - 1 34 GetDeviceControl opcode - 2 CARD16 sequence number - 4 n/4 reply length - 1 CARD8 status - 0 Success - 1 AlreadyGrabbed - 3 + first_error DeviceBusy - 23 unused - n DEVICESTATE -.DE -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -DEVICESTATE DEVICERESOLUTIONSTATE -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -DEVICERESOLUTIONSTATE - 2 0 control type - 2 8 + 12n length - 4 n num_valuators - 4n LISTOfCARD32 resolution values - 4n LISTOfCARD32 resolution min_values - 4n LISTOfCARD32 resolution max_values -.DE -.LP -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -ChangeDeviceControl - 1 CARD8 input extension opcode - 1 35 ChangeDeviceControl opcode - 2 2+n/4 request length - 2 CARD16 control type - 1 CARD8 device id - 1 unused - n DEVICECONTROL -.DE -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -DEVICECONTROL DEVICERESOLUTIONCTL -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -DEVICERESOLUTIONCTL - 2 1 control type - 2 8 + 4n length - 1 CARD8 first_valuator - 1 n num_valuators - 2 unused - 4n LISTOfCARD32 resolution values -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 3.5i -.ta .2i .5i 1.5i 3.5i - => - 1 1 Reply - 1 35 ChangeDeviceControl opcode - 2 CARD16 sequence number - 4 0 reply length - 1 CARD8 status - 0 Success - 1 AlreadyGrabbed - 3 + first_error DeviceBusy - 23 unused -.DE -.ps +2 -Events -.ps -.LP -DeviceKeyPress, DeviceKeyRelease, DeviceButtonPress, DeviceButtonRelease, -ProximityIn, ProximityOut, and DeviceStateNotify events may be followed by -zero or more DeviceValuator events. DeviceMotionNotify events will be -followed by one or more DeviceValuator events. -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -DeviceValuator - 1 CARD8 code - 1 CARD8 device id - 2 CARD16 sequence number - 2 SETofKEYBUTMASK state - 1 n number of valuators this device reports - 1 m number of first valuator in this event - 24 LISTofINT32 valuators -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -DeviceKeyPress - 1 CARD8 code - 1 KEYCODE detail - 2 CARD16 sequence number - 4 TIMESTAMP time - 4 WINDOW root - 4 WINDOW event - 4 WINDOW child - 0 None - 2 INT16 root-x - 2 INT16 root-y - 2 INT16 event-x - 2 INT16 event-y - 2 SETofKEYBUTMASK state - 1 BOOL same-screen - 1 CARD8 device id - #x80 MORE_EVENTS follow -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -DeviceKeyRelease - 1 CARD8 code - 1 KEYCODE detail - 2 CARD16 sequence number - 4 TIMESTAMP time - 4 WINDOW root - 4 WINDOW event - 4 WINDOW child - 0 None - 2 INT16 root-x - 2 INT16 root-y - 2 INT16 event-x - 2 INT16 event-y - 2 SETofKEYBUTMASK state - 1 BOOL same-screen - 1 CARD8 device id - #x80 MORE_EVENTS follow -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -DeviceButtonPress - 1 CARD8 code - 1 BUTTON detail - 2 CARD16 sequence number - 4 TIMESTAMP time - 4 WINDOW root - 4 WINDOW event - 4 WINDOW child - 0 None - 2 INT16 root-x - 2 INT16 root-y - 2 INT16 event-x - 2 INT16 event-y - 2 SETofKEYBUTMASK state - 1 BOOL same-screen - 1 CARD8 device id - #x80 MORE_EVENTS follow -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -DeviceButtonRelease - 1 CARD8 code - 1 BUTTON detail - 2 CARD16 sequence number - 4 TIMESTAMP time - 4 WINDOW root - 4 WINDOW event - 4 WINDOW child - 0 None - 2 INT16 root-x - 2 INT16 root-y - 2 INT16 event-x - 2 INT16 event-y - 2 SETofKEYBUTMASK state - 1 BOOL same-screen - 1 CARD8 device id - #x80 MORE_EVENTS follow -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -DeviceMotionNotify - 1 CARD8 code - 1 detail - 0 Normal - 1 Hint - 2 CARD16 sequence number - 4 TIMESTAMP time - 4 WINDOW root - 4 WINDOW event - 4 WINDOW child - 0 None - 2 INT16 root-x - 2 INT16 root-y - 2 INT16 event-x - 2 INT16 event-y - 2 SETofKEYBUTMASK state - 1 BOOL same-screen - 1 CARD8 device id - #x80 MORE_EVENTS follow -.DE -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -DeviceFocusIn - 1 CARD8 code - 1 detail - 0 Ancestor - 1 Virtual - 2 Inferior - 3 Nonlinear - 4 NonlinearVirtual - 5 Pointer - 6 PointerRoot - 7 None - 2 CARD16 sequence number - 4 TIMESTAMP time - 4 WINDOW event - 1 mode - 0 Normal - 1 Grab - 2 Ungrab - 3 WhileGrabbed - 1 CARD8 device id - 18 unused -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -DeviceFocusOut - 1 CARD8 code - 1 detail - 0 Ancestor - 1 Virtual - 2 Inferior - 3 Nonlinear - 4 NonlinearVirtual - 5 Pointer - 6 PointerRoot - 7 None - 2 CARD16 sequence number - 4 TIMESTAMP time - 4 WINDOW event - 1 mode - 0 Normal - 1 Grab - 2 Ungrab - 3 WhileGrabbed - 1 CARD8 device id - 18 unused -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -ProximityIn - 1 CARD8 code - 1 unused - 2 CARD16 sequence number - 4 TIMESTAMP time - 4 WINDOW root - 4 WINDOW event - 4 WINDOW child - 0 None - 2 INT16 root-x - 2 INT16 root-y - 2 INT16 event-x - 2 INT16 event-y - 2 SETofKEYBUTMASK state - 1 BOOL same-screen - 1 CARD8 device id - #x80 MORE_EVENTS follow -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -ProximityOut - 1 CARD8 code - 1 unused - 2 CARD16 sequence number - 4 TIMESTAMP time - 4 WINDOW root - 4 WINDOW event - 4 WINDOW child - 0 None - 2 INT16 root-x - 2 INT16 root-y - 2 INT16 event-x - 2 INT16 event-y - 2 SETofKEYBUTMASK state - 1 BOOL same-screen - 1 CARD8 device id - #x80 MORE_EVENTS follow -.DE -.LP -DeviceStateNotify events may be immediately followed by zero or one -DeviceKeyStateNotify and/ or zero or more DeviceValuator events. -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -DeviceStateNotify - 1 CARD8 code - 1 CARD8 device id - #x80 MORE_EVENTS follow - 2 CARD16 sequence number - 4 TIMESTAMP time - 1 CARD8 num_keys - 1 CARD8 num_buttons - 1 CARD8 num_valuators - 1 CARD8 valuator mode and input classes reported - #x01 reporting keys - #x02 reporting buttons - #x04 reporting valuators - #x40 device mode (0 = Relative, 1 = Absolute) - #x80 proximity state (0 = InProximity, 1 = OutOfProximity) - 4 LISTofCARD8 first 32 keys (if reported) - 4 LISTofCARD8 first 32 buttons (if reported) - 12 LISTofCARD32 first 3 valuators (if reported) -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -DeviceKeyStateNotify - 1 CARD8 code - 1 CARD8 device id - #x80 MORE_EVENTS follow - 2 CARD16 sequence number - 28 LISTofCARD8 state of keys 33-255 -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -DeviceButtonStateNotify - 1 CARD8 code - 1 CARD8 device id - #x80 MORE_EVENTS follow - 2 CARD16 sequence number - 28 LISTofCARD8 state of buttons 33-255 -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -DeviceValuator - 1 CARD8 code - 1 CARD8 device id - 2 CARD16 sequence number - 2 SETofKEYBUTMASK state - 1 n number of valuators this device reports - 1 n number of first valuator in this event - 24 LISTofINT32 valuators -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -DeviceMappingNotify - 1 CARD8 code - 1 CARD8 device id - 2 CARD16 sequence number - 1 request - 0 MappingModifier - 1 MappingKeyboard - 2 MappingPointer - 1 KEYCODE first-keycode - 1 CARD8 count - 1 unused - 4 TIMESTAMP time - 20 unused -.DE -.LP -.DS 0 -.TA .2i .5i 1.5i 2.5i -.ta .2i .5i 1.5i 2.5i -ChangeDeviceNotify - 1 CARD8 code - 1 CARD8 id of device specified on change request - 2 CARD16 sequence number - 4 TIMESTAMP time - 1 request - 0 NewPointer - 1 NewKeyboard - 23 unused -.DE -.\" print Table of Contents -.if o .bp \" blank page to make count even -.bp 1 -.af PN i -.PX diff --git a/doc/xorg-docs/specs/Xi/library.ms b/doc/xorg-docs/specs/Xi/library.ms deleted file mode 100644 index ef745ad9a..000000000 --- a/doc/xorg-docs/specs/Xi/library.ms +++ /dev/null @@ -1,6313 +0,0 @@ -.\" $Xorg: library.ms,v 1.3 2000/08/17 19:42:38 cpqbld Exp $ -.\" $XdotOrg: xc/doc/specs/Xi/library.ms,v 1.2 2004/04/23 18:42:18 eich Exp $ -.\" Input Extension now coded to macros.t -.\" edited for DP edits and code consistency w/ core protocol/xlib 4/5/96 -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.ps 11 -.nr PS 11 -\0 -.sp 10 -.ce 500 -.ps 20 -\fBX Input Device Extension Library -.ps 12 -.sp 2 -X Consortium Standard -.sp 1 -X Version 11, Release 6.8 -.sp 16 -.ps 15 -\fBMark Patrick\0\0\0\0Ardent Computer -.sp 1 -\fBGeorge Sachs\0\0\0\0Hewlett-Packard -.ps 12 -.ce 0 -.bp -\0 -.sp 10 -.fi -.LP -Copyright \(co 1989, 1990, 1991 by Hewlett-Packard Company, Ardent Computer. -.LP -Permission to use, copy, modify, and distribute this documentation for -any purpose and without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. -Ardent, and Hewlett-Packard make no representations about the suitability -for any purpose of the information in this document. It is provided \`\`as is'' -without express or implied warranty. -.sp 5 -Copyright (c) 1989, 1990, 1991, 1992 X Consortium -.LP -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -.LP -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -.LP -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. -.sp 3 -\fIX Window System\fP is a trademark of The Open Group. -.ps -.vs -.bp 1 -.EH '\fBX Input Extension Library\fP''\fBX11, Release 6.8\fP' -.OH '\fBX Input Extension Library\fP''\fBX11, Release 6.8\fP' -.EF ''\fB\\\\n(PN\fP'' -.OF ''\fB\\\\n(PN\fP'' -.\" Force the heading counter for level 1 to one -.\" -.\" -.\" -.\" Print table of contents to level 4 headings -.\" -.\" -.\" Page eject for each level 1 heading -.\" -.\" -.\" Define Ch to contain the chapter string. -.\" -.ds Ch Input Extension Overview -.\" -.\" -.\" Pull in the layout macro package. -.\" -.\" -.tr ~ -.NH 1 -Input Extension Overview -.XS -\*(SN Input Extension Overview -.XE -.LP -This document describes an extension to -the X11 server. The purpose of this extension is to support the use -of additional input devices beyond the pointer and keyboard devices -defined by the core X protocol. This first section gives an overview -of the input extension. The following sections correspond to -chapters 9, 10, and 11, ``Window and Session Manager Functions'', -``Events'', and ``Event Handling Functions'' of the -``Xlib - C Language Interface'' manual -and describe how to use the input device extension. -.NH 2 -Design Approach -.XS -\*(SN Design Approach -.XE -.LP -The design approach of the extension is to define functions -and events analogous to the core functions and events. -This allows extension input devices and events to be individually -distinguishable from each other and from the core input devices and events. -These functions and events make use of a device identifier and support the -reporting of \fIn\fP\^-dimensional motion data as well as other data that -is not currently reportable via the core input events. -.NH 2 -Core Input Devices -.XS -\*(SN Core Input Devices -.XE -.LP -The X server core protocol supports two input devices: a pointer and a -keyboard. The pointer device has two major functions. -First, it may be used to generate motion information -that client programs can detect. Second, it may also be used to indicate the -current location and focus of the X keyboard. To accomplish this, the server -echoes a cursor at the current position of the X pointer. Unless the X -keyboard has been explicitly focused, this cursor also shows the current -location and focus of the X keyboard. -.LP -The X keyboard is used to generate input that client programs can detect. -.LP -The X keyboard and X pointer are referred to in this document as -the \fIcore devices\fP, and the input -events they generate -.Pn ( KeyPress , -.PN KeyRelease , -.PN ButtonPress , -.PN ButtonRelease , -and -.PN MotionNotify ) -are known as the \fIcore input events\fP. All other -input devices are referred to as \fIextension input devices\fP, and the -input events they generate are referred to as \fIextension input events\fP\^. -.NT -This input extension does not change the behavior or functionality of the -core input devices, core events, or core protocol requests, with the -exception of the core grab requests. These requests may affect the -synchronization of events from extension devices. See the explanation -in the section titled ``Event Synchronization and Core Grabs.'' -.NE -.LP -Selection of the physical devices to be initially used by the server as the -core devices is left implementation dependent. Functions are defined that -allow client programs to change which physical devices are used as the -core devices. -.NH 2 -Extension Input Devices -.XS -\*(SN Extension Input Devices -.XE -.LP -The input extension controls access to input devices other than the X keyboard -and X pointer. It allows client programs to select input from these devices -independently -from each other and independently from the core devices. Input events from -these devices are of extension types -.Pn ( DeviceKeyPress , -.PN DeviceKeyRelease , -.PN DeviceButtonPress , -.PN DeviceButtonRelease , -.PN DeviceMotionNotify , -and so on) and contain -a device identifier so that events of the same type coming from different -input devices can be distinguished. -.LP -Extension input events are not limited in size by the size of the server -32-byte wire events. Extension input events -may be constructed by the server sending as many -wire-sized events as necessary to return the information required for -that event. -The library event reformatting routines -are responsible for combining these into one or more client XEvents. -.LP -Any input device that generates key, button, or motion data may be used as -an extension input device. -Extension input devices may have zero or more keys, zero or more buttons, -and may report zero or more axes of motion. Motion may be reported -as relative movements from a previous position or as an absolute -position. All valuators reporting motion information for a given -extension input device must report the same kind of motion information -(absolute or relative). -.LP -This extension is designed to accommodate new types of input devices that -may be added in the future. The protocol requests that refer to -specific characteristics of input devices organize that information -by \fIinput device classes\fP. Server implementors may add new -classes of input devices without changing the protocol requests. -.LP -All extension input -devices are treated like the core X keyboard in determining their location -and focus. The server does not track the location of these devices on an -individual basis and, therefore, -does not echo a cursor to indicate their current location. -Instead, their location is determined by the location of the core X pointer. -Like the core X keyboard, some may be explicitly focused. If they are -not explicitly focused, their focus -is determined by the location of the core X pointer. -.NH 3 -Input Device Classes -.XS -\*(SN Input Device Classes -.XE -.LP -Some of the input extension requests divide input devices into classes -based on their functionality. This is intended to allow new classes of input -devices to be defined at a later time without changing the semantics of -these functions. The following input device classes are currently -defined: -.IP "\s-1KEY\s+1" 1i -The device reports key events. -.IP "\s-1BUTTON\s+1" 1i -The device reports button events. -.IP "\s-1VALUATOR\s+1" 1i -The device reports valuator data in motion events. -.IP "\s-1PROXIMITY\s+1" 1i -The device reports proximity events. -.IP "\s-1FOCUS\s+1" 1i -The device can be focused. -.IP "\s-1FEEDBACK\s+1" 1i -The device supports feedbacks. -.LP -Additional classes may be added in the future. -Functions that support multiple input classes, such as the -.PN XListInputDevices -function that lists all available input devices, -organize the data they return by input class. Client programs that -use these functions should not access data unless it matches a -class defined at the time those clients were compiled. In this way, -new classes can be added without forcing existing clients that use -these functions to be recompiled. -.NH 2 -Using Extension Input Devices -.XS -\*(SN Using Extension Input Devices -.XE -.LP -A client that wishes to access an input device does so through the library -functions defined in the following sections. A typical sequence of requests -that a client would make is as follows: -.IP \(bu 5 -.PN XListInputDevices -\- lists all of the available input devices. From the -information returned by this request, determine whether the desired input -device is attached to the server. For a description of the -.PN XListInputDevices -request, see the section entitled ``Listing Available Devices.'' -.IP \(bu 5 -.PN XOpenDevice -\- requests that the server open the device for access by this client. -This request returns an -.PN XDevice -structure that is used -by most other input extension requests to identify the specified device. -For a description of the -.PN XOpenDevice -request, see the section entitled ``Enabling and Disabling Extension Devices.'' -.IP \(bu 5 -Determine the event types and event classes needed to select the desired -input extension events, and identify them when they are received. -This is done via macros whose name corresponds to the desired event, for -example, -.PN DeviceKeyPress . -For a description of these macros, -see the section entitled ``Selecting Extension Device Events.'' -.IP \(bu 5 -.PN XSelectExtensionEvent -\- selects the desired events from the server. -For a description of the -.PN XSelextExtensionEvent -request, see the section entitled ``Selecting Extension Device Events.'' -.IP \(bu 5 -.PN XNextEvent -\- receives the next available event. This is the core -.PN XNextEvent -function provided by the standard X libarary. -.LP -Other requests are defined to grab and focus extension devices, to -change their key, button, or modifier mappings, to control the -propagation of input extension events, to get motion history from an -extension device, and to send input extension events to another client. -These functions are described in the following sections. -.NH 1 -Library Extension Requests -.XS -\*(SN Library Extension Requests -.XE -.LP -Extension input devices are accessed by client programs through the -use of new protocol requests. -The following requests are provided as extensions to Xlib. Constants -and structures referenced by these functions may be found in the -files \fB\fP and \fB\fP, -which are attached to this document as -Appendix A. -.LP -The library will return \fBNoSuchExtension\fP if an extension request -is made to a server that does not support the input extension. -.LP -Input extension requests cannot be used to access the X keyboard and -X pointer devices. -.NH 2 -Window Manager Functions -.XS -\*(SN Window Manager Functions -.XE -.LP -This section discusses the following X Input Extension Window Manager topics: -.IP \(bu 5 -Changing the core devices -.IP \(bu 5 -Event synchronization and core grabs -.IP \(bu 5 -Extension active grabs -.IP \(bu 5 -Passively grabbing a key -.IP \(bu 5 -Passively grabbing a button -.IP \(bu 5 -Thawing a device -.IP \(bu 5 -Controlling device focus -.IP \(bu 5 -Controlling device feedback -.IP \(bu 5 -Ringing a bell on an input device -.IP \(bu 5 -Controlling device encoding -.IP \(bu 5 -Controlling button mapping -.IP \(bu 5 -Obtaining the state of a device -.NH 3 -Changing the Core Devices -.XS -\*(SN Changing the Core Devices -.XE -.LP -These functions are provided to change which physical device is used -as the X pointer or X keyboard. -.NT -Using these functions may change the characteristics of the core devices. -The new pointer device may have a different number of buttons from the -old one, or the new keyboard device may have a different number of -keys or report a different range of keycodes. Client programs may be -running that depend on those characteristics. For example, a client -program could allocate an array based on the number of buttons on the -pointer device and then use the button numbers received in button events -as indices into that array. Changing the core devices could cause -such client programs to behave improperly or to terminate abnormally -if they ignore the -.PN ChangeDeviceNotify -event generated by these requests. -.NE -.LP -These functions change the X keyboard or X pointer device and generate an -.PN XChangeDeviceNotify -event and a -.PN MappingNotify -event. -The specified device becomes the -new X keyboard or X pointer device. The location of the core device -does not change as a result of this request. -.LP -These requests fail and return -.PN AlreadyGrabbed -if either the specified -device or the core device it would replace are grabbed by some other client. -They fail and return -.PN GrabFrozen -if either device is frozen by the active grab of another client. -.LP -These requests fail with a -.PN BadDevice -error if the specified device is invalid, has not previously been opened via -.PN XOpenDevice , -or is -not supported as a core device by the server implementation. -.LP -Once the device has successfully replaced one of the core devices, it -is treated as a core device until it is in turn replaced by another -.PN ChangeDevice -request or until the server terminates. The termination -of the client that changed the device will not cause it to change back. -Attempts to use the -.PN XCloseDevice -request to close the new core device will fail with a -.PN BadDevice -error. -.sp -.LP -To change which physical device is used as the X keyboard, use the -.PN XChangeKeyboardDevice -function. -The specified device must support input class -.PN Keys -(as reported in the -.PN ListInputDevices -request) or the request will fail with a -.PN BadMatch -error. -.LP -.sM -.FD 0 -int XChangeKeyboardDevice\^(\^\fIdisplay\fP\^, \fIdevice\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XDevice *\fIdevice\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdevice\fP 1i -Specifies the desired device. -.LP -.eM -If no error occurs, -.PN XChangeKeyboardDevice -returns -.PN Success . -A -.PN ChangeDeviceNotify -event with the request field set to -.PN NewKeyboard -is sent to all clients selecting that event. -A -.PN MappingNotify -event with the request field set to -.PN MappingKeyboard -is sent to all clients. -The requested device becomes the X keyboard, and the old keyboard becomes -available as an extension input device. -The focus state of the new keyboard is the same as -the focus state of the old X keyboard. -.LP -.PN XChangeKeyboardDevice -can generate -.PN AlreadyGrabbed , -.PN BadDevice , -.PN BadMatch , -and -.PN GrabFrozen -errors. -.sp -.LP -To change which physical device is used as the X pointer, -use the -.PN XChangePointerDevice -function. -The specified device must support input class -.PN Valuators -(as reported in the -.PN XListInputDevices -request) and report at least two axes of motion, -or the request will fail with a -.PN BadMatch -error. -If the specified device reports more than two axes, the two specified in -the xaxis and yaxis arguments will be used. Data from other -valuators on the device will be ignored. -.LP -If the specified device reports absolute positional information, and the -server implementation does not allow such a device to be used as the -X pointer, the request will fail with a -.PN BadDevice -error. -.sM -.FD 0 -int XChangePointerDevice\^(\^\fIdisplay\fP\^, \fIdevice\fP\^, \fIxaxis\fP\^, \fIyaxis\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XDevice *\fIdevice\fP\^; -.br - int \fIxaxis\fP\^; -.br - int \fIyaxis\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdevice\fP 1i -Specifies the desired device. -.IP \fIxaxis\fP 1i -Specifies the zero-based index of the axis to be used as the x-axis of the -pointer device. -.IP \fIyaxis\fP 1i -Specifies the zero-based index of the axis to be used as the y-axis of the -pointer device. -.LP -.eM -If no error occurs, -.PN XChangePointerDevice -returns -.PN Success . -A -.PN ChangeDeviceNotify -event with the request field set to -.PN NewPointer -is sent to all clients selecting that event. -A -.PN MappingNotify -event with the request field set to -.PN MappingPointer -is sent to all clients. -The requested device becomes the X pointer, and the old pointer becomes -available as an extension input device. -.LP -.PN XChangePointerDevice -can generate -.PN AlreadyGrabbed , -.PN BadDevice , -.PN BadMatch , -and -.PN GrabFrozen -errors. -.NH 3 -Event Synchronization and Core Grabs -.XS -\*(SN Event Synchronization and Core Grabs -.XE -.LP -Implementation of the input extension requires an extension of the -meaning of event synchronization for the core grab requests. This is -necessary in order to allow window managers to freeze all input devices -with a single request. -.LP -The core grab requests require a pointer_mode and keyboard_mode -argument. The meaning of these modes is changed by the input extension. -For the -.PN XGrabPointer -and -.PN XGrabButton -requests, pointer_mode controls synchronization of the pointer device, -and keyboard_mode controls the synchronization of all other input devices. -For the -.PN XGrabKeyboard -and -.PN XGrabKey -requests, pointer_mode controls the synchronization -of all input devices, except the X keyboard, while keyboard_mode controls -the synchronization of the keyboard. When using one of the core grab -requests, the synchronization of extension devices -is controlled by the mode specified for the device not being grabbed. -.NH 3 -Extension Active Grabs -.XS -\*(SN Extension Active Grabs -.XE -.LP -Active grabs of -extension devices are supported via the -.PN XGrabDevice -function in the same way that core devices are grabbed using the core -.PN XGrabKeyboard -function, except that an extension input device -is passed as a function parameter. -The -.PN XUngrabDevice -function allows a previous active grab for an extension device to be released. -.LP -Passive grabs of buttons and keys on extension devices are supported -via the -.PN XGrabDeviceButton -and -.PN XGrabDeviceKey -functions. -These passive grabs are released via the -.PN XUngrabDeviceKey -and -.PN XUngrabDeviceButton -functions. -.sp -.LP -To grab an extension device, use the -.PN XGrabDevice -function. -The device must have previously been opened using the -.PN XOpenDevice -function. -.sM -.FD 0 -int XGrabDevice\^(\^\fIdisplay\fP\^, \fIdevice\fP\^, \fIgrab_window\fP\^, \fIowner_events\fP\^, \fIevent_count\fP\^, \fIevent_list\fP\^, -.br - \fIthis_device_mode\fP\^, \fIother_device_mode\fP\^, \fItime\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XDevice *\fIdevice\fP\^; -.br - Window \fIgrab_window\fP\^; -.br - Bool \fIowner_events\fP\^; -.br - int \fIevent_count\fP\^; -.br - XEventClass *\fIevent_list\fP\^; -.br - int \fIthis_device_mode\fP\^; -.br - int \fIother_device_mode\fP\^; -.br - Time \fItime\fP\^; -.FN -.IP "\fIdisplay\fP" 1i -Specifies the connection to the X server. -.IP "\fIdevice\fP" 1i -Specifies the desired device. -.IP "\fIgrab_window\fP" 1i -Specifies the ID of a window associated with the device specified above. -.IP "\fIowner_events\fP" 1i -Specifies a boolean value of either -.PN True -or -.PN False . -.IP "\fIevent_count\fP" 1i -Specifies the number of elements in the event_list array. -.IP "\fIevent_list\fP" 1i -Specifies a pointer to a list of event classes that indicate which events -the client wishes to receive. -These event classes must have been obtained -using the device being grabbed. -.IP "\fIthis_device_mode\fP" 1i -Controls further processing of events from this device. You can pass one -of these constants: -.PN GrabModeSync -or -.PN GrabModeAsync . -.IP "\fIother_device_mode\fP" 1i -Controls further processing of events from all other devices. You can pass one -of these constants: -.PN GrabModeSync -or -.PN GrabModeAsync . -.IP "\fItime\fP" 1i -Specifies the time. This may be either a timestamp expressed in -milliseconds or -.PN CurrentTime . -.LP -.eM -.PN XGrabDevice -actively grabs an extension input device and generates -.PN DeviceFocusIn -and -.PN DeviceFocusOut -events. -Further input events from this device are reported only to the grabbing client. -This function overrides any previous active grab by this client for this device. -.LP -The event_list parameter is a pointer to a list of event classes. This list -indicates which events the client wishes to receive while the grab is active. -If owner_events is -.PN False , -input events from this device are reported with respect to -grab_window and are reported only if specified in event_list. -If owner_events is -.PN True , -then if a generated event would normally be reported to this client, -it is reported normally. -Otherwise, the event is reported with respect to the grab_window and is only -reported if specified in event_list. -.LP -The this_device_mode argument controls the further processing -of events from this device, and the other_device_mode argument controls -the further processing of input events from all other devices. -.IP \(bu 5 -If the this_device_mode argument is -.PN GrabModeAsync , -device event processing continues -normally; if the device is currently frozen by this client, then -processing of device events is resumed. -If the this_device_mode argument is -.PN GrabModeSync , -the state of the grabbed device -(as seen by client applications) appears to freeze, -and no further device events are generated by the server until the -grabbing client issues a releasing -.PN XAllowDeviceEvents -call or until the device grab is released. -Actual device input events are not lost while the device is frozen; they are -simply queued for later processing. -.IP \(bu 5 -If the other_device_mode is -.PN GrabModeAsync , -event processing from other input devices is unaffected -by activation of the grab. -If other_device_mode is -.PN GrabModeSync , -the state of all devices except the grabbed device -(as seen by client applications) appears to freeze, and no further -events are generated by the server until the grabbing client issues a -releasing -.PN XAllowEvents -or -.PN XAllowDeviceEvents -call or until the device grab is released. -Actual events are not lost -while the other devices are frozen; they are simply queued for later -processing. -.LP -.PN XGrabDevice -fails on the following conditions: -.IP \(bu 5 -If the device is actively grabbed by some other client, it returns -.PN AlreadyGrabbed . -.IP \(bu 5 -If grab_window is not viewable, it returns -.PN GrabNotViewable . -.IP \(bu 5 -If the specified time is earlier -than the last-grab-time for the specified device -or later than the current X server time, it returns -.PN GrabInvalidTime . -Otherwise, -the last-grab-time for the specified device is set -to the specified time and -.PN CurrentTime -is replaced by the current X server time. -.IP \(bu 5 -If the device is frozen by an active grab of another client, it returns -.PN GrabFrozen . -.LP -If a grabbed device is closed by a client while an active grab by that -client is in effect, that active grab will be released. -Any passive grabs established by that client will be released. -If the device is frozen only by an active grab -of the requesting client, it is thawed. -.LP -.PN XGrabDevice -can generate -.PN BadClass , -.PN BadDevice , -.PN BadValue , -and -.PN BadWindow -errors. -.sp -.LP -To release a grab of an extension device, use the -.PN XUngrabDevice -function. -.LP -.sM -.FD 0 -int XUngrabDevice(\fIdisplay\fP\^, \fIdevice\fP\^, \fItime\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XDevice *\fIdevice\fP\^; -.br - Time \fItime\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdevice\fP 1i -Specifies the desired device. -.IP \fItime\fP 1i -Specifies the time. This may be either a timestamp expressed in -milliseconds, or -.PN CurrentTime . -.LP -.eM -.PN XUngrabDevice -allows a client to release an extension input device and any -queued events if this client has it grabbed from either -.PN XGrabDevice -or -.PN XGrabDeviceKey . -If any other devices are frozen by the grab, -.PN XUngrabDevice -thaws them. -This function does not release the device and any -queued events if the specified time is earlier than the last-device-grab -time or is later than the current X server time. It also generates -.PN DeviceFocusIn -and -.PN DeviceFocusOut -events. The X server automatically performs an -.PN XUngrabDevice -if the event window for an active device grab becomes not viewable -or if the client terminates without releasing the grab. -.LP -.PN XUngrabDevice -can generate -.PN BadDevice -errors. -.NH 3 -Passively Grabbing a Key -.XS -\*(SN Passively Grabbing a Key -.XE -.LP -To passively grab a single key on an extension device, use -.PN XGrabDeviceKey . -That device must have previously been opened using the -.PN XOpenDevice -function, or the request will fail with a -.PN BadDevice -error. -If the specified device does not support input class -.PN Keys , -the request will fail with a -.PN BadMatch -error. -.sM -.FD 0 -int XGrabDeviceKey(\fIdisplay\fP\^, \fIdevice\fP\^, \fIkeycode\fP\^, \ -\fImodifiers\fP\^, \fImodifier_device\fP\^, \fIgrab_window\fP\^, -.br - \fIowner_events\fP\^, \fIevent_count\fP\^, \fIevent_list\fP\^, \ -\fIthis_device_mode\fP\^, \fIother_device_mode\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XDevice *\fIdevice\fP\^; -.br - int \fIkeycode\fP\^; -.br - unsigned int \fImodifiers\fP\^; -.br - XDevice *\fImodifier_device\fP\^; -.br - Window \fIgrab_window\fP\^; -.br - Bool \fIowner_events\fP\^; -.br - int \fIevent_count\fP\^; -.br - XEventClass *\fIevent_list\fP\^; -.br - int \fIthis_device_mode\fP\^; -.br - int \fIother_device_mode\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdevice\fP 1i -Specifies the desired device. -.IP \fIkeycode\fP 1i -Specifies the keycode of the key that is to be grabbed. You can pass -either the keycode or -.PN AnyKey . -.IP \fImodifiers\fP 1i -Specifies the set of keymasks. This mask is the bitwise inclusive OR -of these keymask bits: -.PN ShiftMask , -.PN LockMask , -.PN ControlMask , -.PN Mod1Mask , -.PN Mod2Mask , -.PN Mod3Mask , -.PN Mod4Mask , -and -.PN Mod5Mask . -.IP -You can also pass -.PN AnyModifier , -which is equivalent to issuing the grab key request -for all possible modifier combinations (including the combination -of no modifiers). -.IP \fImodifier_device\fP 1i -Specifies the device whose modifiers are to be used. If NULL is -specified, the core X keyboard is used as the modifier_device. -.IP \fIgrab_window\fP 1i -Specifies the ID of a window associated with the device specified above. -.IP \fIowner_events\fP 1i -Specifies a boolean value of either -.PN True -or -.PN False . -.IP \fIevent_count\fP 1i -Specifies the number of elements in the event_list array. -.IP \fIevent_list\fP 1i -Specifies a pointer to a list of event classes that indicate which events -the client wishes to receive. -.IP \fIthis_device_mode\fP 1i -Controls further processing of events from this device. -You can pass one of these constants: -.PN GrabModeSync -or -.PN GrabModeAsync . -.IP \fIother_device_mode\fP 1i -Controls further processing of events from all other devices. -You can pass one of these constants: -.PN GrabModeSync -or -.PN GrabModeAsync . -.LP -.eM -.PN XGrabDeviceKey -is analogous to the core -.PN XGrabKey -function. It creates an -explicit passive grab for a key on an extension device. -The -.PN XGrabDeviceKey -function establishes a passive grab on a device. -Consequently, in the future, -.IP \(bu 5 -IF the device is not grabbed and the specified key, -which itself can be a modifier key, is logically pressed -when the specified modifier keys logically are down on the specified -modifier device (and no other keys are down), -.IP \(bu 5 -AND no other modifier keys logically are down, -.IP \(bu 5 -AND EITHER the grab window is an ancestor of (or is) the focus window -or the grab window is a descendent of the focus window and contains the pointer, -.IP \(bu 5 -AND a passive grab on the same device and key combination does not exist on any -ancestor of the grab window, -.IP \(bu 5 -THEN the device is actively grabbed, as for -.PN XGrabDevice , -the last-device-grab time is set to the time at which the key was pressed -(as transmitted in the -.PN DeviceKeyPress -event), and the -.PN DeviceKeyPress -event is reported. -.LP -The interpretation of the remaining arguments is as for -.PN XGrabDevice . -The active grab is terminated automatically when the logical state of the -device has the specified key released -(independent of the logical state of the modifier keys). -.LP -Note that the logical state of a device (as seen by means of the X protocol) -may lag the physical state if device event processing is frozen. -.LP -A modifier of -.PN AnyModifier -is equivalent to issuing the request for all -possible modifier combinations (including the combination of no modifiers). -It is not required that all modifiers specified have -currently assigned keycodes. -A key of -.PN AnyKey -is equivalent to issuing -the request for all possible keycodes. Otherwise, the key must be in -the range specified by min_keycode and max_keycode in the -information returned by the -.PN XListInputDevices -function. -If it is not within that range, -.PN XGrabDeviceKey -generates a -.PN BadValue -error. -.LP -.PN XGrabDeviceKey -generates a -.PN BadAccess -error if some other client has issued a -.PN XGrabDeviceKey -with the same device and key combination on the same window. -When using -.PN AnyModifier -or -.PN AnyKey , -the request fails completely and the X server generates a -.PN BadAccess -error, and no grabs are established if there is a conflicting grab -for any combination. -.LP -.PN XGrabDeviceKey -returns -.PN Success -upon successful completion of the request. -.LP -.PN XGrabDeviceKey -can generate -.PN BadAccess , -.PN BadClass , -.PN BadDevice , -.PN BadMatch , -.PN BadValue , -and -.PN BadWindow -errors. -.sp -.LP -To release a passive grab of a single key on an extension device, use -.PN XUngrabDeviceKey . -.sM -.FD 0 -int XUngrabDeviceKey(\fIdisplay\fP\^, \fIdevice\fP\^, \fIkeycode\fP\^, \fImodifiers\fP\^, \fImodifier_device\fP\^, \fIungrab_window\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XDevice *\fIdevice\fP\^; -.br - int \fIkeycode\fP\^; -.br - unsigned int \fImodifiers\fP\^; -.br - XDevice *\fImodifier_device\fP\^; -.br - Window \fIungrab_window\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdevice\fP 1i -Specifies the desired device. -.IP \fIkeycode\fP 1i -Specifies the keycode of the key that is to be ungrabbed. You can pass -either the keycode or -.PN AnyKey . -.IP \fImodifiers\fP 1i -Specifies the set of keymasks. This mask is the bitwise inclusive OR -of these keymask bits: -.PN ShiftMask , -.PN LockMask , -.PN ControlMask , -.PN Mod1Mask , -.PN Mod2Mask , -.PN Mod3Mask , -.PN Mod4Mask , -and -.PN Mod5Mask . -.IP -You can also pass -.PN AnyModifier , -which is equivalent to issuing the ungrab key -request for all possible modifier combinations (including the combination -of no modifiers). -.IP \fImodifier_device\fP 1.5i -Specifies the device whose modifiers are to be used. If NULL is -specified, the core X keyboard is used as the modifier_device. -.IP \fIungrab_window\fP 1.5i -Specifies the ID of a window associated with the device specified above. -.LP -.eM -.PN XUngrabDeviceKey -is analogous to the core -.PN XUngrabKey -function. It releases an explicit passive grab for a key -on an extension input device. -.LP -.PN XUngrabDeviceKey -can generate -.PN BadAlloc , -.PN BadDevice , -.PN BadMatch , -.PN BadValue , -and -.PN BadWindow -errors. -.NH 3 -Passively Grabbing a Button -.XS -\*(SN Passively Grabbing a Button -.XE -.LP -To establish a passive grab for a single button on an extension device, use -.PN XGrabDeviceButton . -The specified device must have previously been opened using the -.PN XOpenDevice -function, or the request will fail with a -.PN BadDevice -error. If the specified device does not support input class -.PN Buttons , -the request will fail with a -.PN BadMatch -error. -.sM -.FD 0 -int XGrabDeviceButton(\fIdisplay\fP\^, \fIdevice\fP\^, \fIbutton\fP\^, \fImodifiers\fP\^, \fImodifier_device\fP \^, \fIgrab_window\fP\^, -.br - \fIowner_events\fP\^, \fIevent_count\fP\^, \fIevent_list\fP\^, \ -\fIthis_device_mode\fP\^, \fIother_device_mode\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XDevice *\fIdevice\fP\^; -.br - unsigned int \fIbutton\fP\^; -.br - unsigned int \fImodifiers\fP\^; -.br - XDevice *\fImodifier_device\fP \^; -.br - Window \fIgrab_window\fP\^; -.br - Bool \fIowner_events\fP\^; -.br - int \fIevent_count\fP\^; -.br - XEventClass *\fIevent_list\fP\^; -.br - int \fIthis_device_mode\fP\^; -.br - int \fIother_device_mode\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdevice\fP 1i -Specifies the desired device. -.IP \fIbutton\fP 1i -Specifies the code of the button that is to be grabbed. You can pass -either the button or -.PN AnyButton . -.IP \fImodifiers\fP 1i -Specifies the set of keymasks. This mask is the bitwise inclusive OR -of these keymask bits: -.PN ShiftMask , -.PN LockMask , -.PN ControlMask , -.PN Mod1Mask , -.PN Mod2Mask , -.PN Mod3Mask , -.PN Mod4Mask , -and -.PN Mod5Mask . -.IP -You can also pass -.PN AnyModifier , -which is equivalent to issuing the grab request -for all possible modifier combinations (including the combination -of no modifiers). -.IP \fImodifier_device\fP 1i -Specifies the device whose modifiers are to be used. If NULL is -specified, the core X keyboard is used as the modifier_device. -.IP \fIgrab_window\fP 1i -Specifies the ID of a window associated with the device specified above. -.IP \fIowner_events\fP 1i -Specifies a boolean value of either -.PN True -or -.PN False . -.IP \fIevent_count\fP 1i -Specifies the number of elements in the event_list array. -.IP \fIevent_list\fP 1i -Specifies a list of event classes that indicates which device events are to be -reported to the client. -.IP \fIthis_device_mode\fP 1i -Controls further processing of events from this device. You can pass one -of these constants: -.PN GrabModeSync -or -.PN GrabModeAsync . -.IP \fIother_device_mode\fP 1i -Controls further processing of events from all other devices. You can pass one -of these constants: -.PN GrabModeSync -or -.PN GrabModeAsync . -.LP -.eM -.PN XGrabDeviceButton -is analogous to the core -.PN XGrabButton -function. -It creates an explicit passive grab for a button on an extension input device. -Because the server does not track extension devices, -no cursor is specified with this request. -For the same reason, there is no confine_to parameter. -The device must have previously been opened using the -.PN XOpenDevice -function. -.LP -The -.PN XGrabDeviceButton -function establishes a passive grab on a device. -Consequently, in the future, -.IP \(bu 5 -IF the device is not grabbed and the specified button is logically pressed -when the specified modifier keys logically are down -(and no other buttons or modifier keys are down), -.IP \(bu 5 -AND EITHER the grab window is an ancestor of (or is) the focus window -OR the grab window is a descendent of the focus window and contains the pointer, -.IP \(bu 5 -AND a passive grab on the same device and button/key combination does not -exist on any ancestor of the grab window, -.IP \(bu 5 -THEN the device is actively grabbed, as for -.PN XGrabDevice , -the last-grab time is set to the time at which the button was pressed -(as transmitted in the -.PN DeviceButtonPress -event), and the -.PN DeviceButtonPress -event is reported. -.LP -The interpretation of the remaining arguments is as for -.PN XGrabDevice . -The active grab is terminated automatically when logical state of the -device has all buttons released (independent of the logical state of -the modifier keys). -.LP -Note that the logical state of a device (as seen by means of the X protocol) -may lag the physical state if device event processing is frozen. -.LP -A modifier of -.PN AnyModifier -is equivalent to issuing the request for all -possible modifier combinations (including the combination of no -modifiers). -It is not required that all modifiers specified have -currently assigned keycodes. -A button of -.PN AnyButton -is equivalent to issuing -the request for all possible buttons. -Otherwise, it is not required that the -specified button be assigned to a physical button. -.LP -.PN XGrabDeviceButton -generates a -.PN BadAccess -error if some other client has issued a -.PN XGrabDeviceButton -with the same device and button combination on the same window. -When using -.PN AnyModifier -or -.PN AnyButton , -the request fails completely and the X server generates a -.PN BadAccess -error and no grabs are -established if there is a conflicting grab for any combination. -.LP -.PN XGrabDeviceButton -can generate -.PN BadAccess , -.PN BadClass , -.PN BadDevice , -.PN BadMatch , -.PN BadValue , -and -.PN BadWindow -errors. -.sp -.LP -To release a passive grab of a button on an extension device, use -.PN XUngrabDeviceButton . -.sM -.FD 0 -int XUngrabDeviceButton(\fIdisplay\fP\^, \fIdevice\fP\^, \fIbutton\fP\^, \fImodifiers\fP\^, \fImodifier_device\fP\^, \fIungrab_window\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XDevice *\fIdevice\fP\^; -.br - unsigned int \fIbutton\fP\^; -.br - unsigned int \fImodifiers\fP\^; -.br - XDevice *\fImodifier_device\fP\^; -.br - Window \fIungrab_window\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdevice\fP 1i -Specifies the desired device. -.IP \fIbutton\fP 1i -Specifies the code of the button that is to be ungrabbed. You can pass -either a button or -.PN AnyButton . -.IP \fImodifiers\fP 1i -Specifies the set of keymasks. This mask is the bitwise inclusive OR -of these keymask bits: -.PN ShiftMask , -.PN LockMask , -.PN ControlMask , -.PN Mod1Mask , -.PN Mod2Mask , -.PN Mod3Mask , -.PN Mod4Mask , -and -.PN Mod5Mask . -.IP -You can also pass -.PN AnyModifier , -which is equivalent to issuing the ungrab key -request for all possible modifier combinations (including the combination -of no modifiers). -.IP \fImodifier_device\fP 1i -Specifies the device whose modifiers are to be used. If NULL is -specified, the core X keyboard is used as the modifier_device. -.IP \fIungrab_window\fP 1i -Specifies the ID of a window associated with the device specified above. -.LP -.eM -.PN XUngrabDeviceButton -is analogous to the core -.PN XUngrabButton -function. It releases an explicit passive grab for a button -on an extension device. -That device must have previously been opened using the -.PN XOpenDevice -function, or a -.PN BadDevice -error will result. -.LP -A modifier of -.PN AnyModifier -is equivalent to issuing the request for all -possible modifier combinations (including the combination of no -modifiers). -.LP -.PN XUngrabDeviceButton -can generate -.PN BadAlloc , -.PN BadDevice , -.PN BadMatch , -.PN BadValue , -and -.PN BadWindow -errors. -.NH 3 -Thawing a Device -.XS -\*(SN Thawing a Device -.XE -.LP -To allow further events to be processed when a device has been frozen, use -.PN XAllowDeviceEvents . -.sM -.FD 0 -int XAllowDeviceEvents(\fIdisplay\fP\^, \fIdevice\fP\^, \fIevent_mode\fP\^, \fItime\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XDevice *\fIdevice\fP\^; -.br - int \fIevent_mode\fP\^; -.br - Time \fItime\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdevice\fP 1i -Specifies the desired device. -.IP \fIevent_mode\fP 1i -Specifies the event mode. You can pass one of these constants: -.PN AsyncThisDevice , -.PN SyncThisDevice , -.PN AsyncOtherDevices , -.PN ReplayThisDevice , -.PN AsyncAll , -or -.PN SyncAll . -.IP \fItime\fP 1i -Specifies the time. This may be either a timestamp expressed in -milliseconds, or -.PN CurrentTime . -.LP -.eM -.PN XAllowDeviceEvents -releases some queued events if the client has caused a device to freeze. -It has no effect if the specified time is earlier than the last-grab -time of the most recent active grab for the client and device, -or if the specified time is later than the current X server time. -The following describes the processing that occurs depending on what constant -you pass to the event_mode argument: -.IP \(bu 5 -.PN AsyncThisDevice -.IP -If the specified device is frozen by the client, event processing for that -continues as usual. If the device is frozen multiple times by the client on -behalf of multiple separate grabs, -.PN AsyncThisDevice -thaws for all. -.PN AsyncThisDevice -has no effect if the specified device is not frozen by the -client, but the device need not be grabbed by the client. -.IP \(bu 5 -.PN SyncThisDevice -.IP -If the specified device is frozen and actively grabbed by the client, -event processing for that device continues normally until the next -key or button event is reported to the client. -At this time, -the specified device again appears to freeze. -However, if the reported event causes the grab to be released, -the specified device does not freeze. -.PN SyncThisDevice -has no effect if the specified device is not frozen by the client -or is not grabbed by the client. -.IP \(bu 5 -.PN ReplayThisDevice -.IP -If the specified device is actively grabbed by the client -and is frozen as the result of an event having been sent to the client -(either from the activation of a -.PN GrabDeviceButton -or from a previous -.PN AllowDeviceEvents -with mode -.PN SyncThisDevice , -but not from a -.PN Grab ), -the grab is released and that event is completely reprocessed. -This time, however, the request ignores any passive grabs at or above -(toward the root) the grab-window of the grab just released. -The request has no effect if the specified device is not grabbed by the client -or if it is not frozen as the result of an event. -.IP \(bu 5 -.PN AsyncOtherDevices -.IP -If the remaining devices are frozen by the client, -event processing for them continues as usual. -If the other devices are frozen multiple times by the client on behalf of -multiple separate grabs, -.PN AsyncOtherDevices -``thaws'' for all. -.PN AsyncOtherDevices -has no effect if the devices are not frozen by the client, -but those devices need not be grabbed by the client. -.IP \(bu 5 -.PN SyncAll -.IP -If all devices are frozen by the client, -event processing (for all devices) continues normally until the next -button or key event is reported -to the client for a grabbed device, -at which time the devices again appear to -freeze. However, if the reported event causes the grab to be released, -then the devices do not freeze (but if any device is still -grabbed, then a subsequent event for it will still cause all devices -to freeze). -.PN SyncAll -has no effect unless all devices are frozen by the client. -If any device is frozen twice -by the client on behalf of two separate grabs, -.PN SyncAll -"thaws" for both (but a subsequent freeze for -.PN SyncAll -will freeze each device only once). -.IP \(bu 5 -.PN AsyncAll -.IP -If all devices are frozen by the -client, event processing (for all devices) continues normally. -If any device is frozen multiple times by the client on behalf of multiple -separate grabs, -.PN AsyncAll -``thaws ''for all. -If any device is frozen twice by the client on behalf of two separate grabs, -.PN AsyncAll -``thaws'' for both. -.PN AsyncAll -has no effect unless all devices are frozen by the client. -.LP -.PN AsyncThisDevice , -.PN SyncThisDevice , -and -.PN ReplayThisDevice -have no effect on the processing of events from the remaining devices. -.PN AsyncOtherDevices -has no effect on the processing of events from the specified device. -When the event_mode is -.PN SyncAll -or -.PN AsyncAll , -the device parameter is ignored. -.LP -It is possible for several grabs of different devices (by the same -or different clients) to be active simultaneously. -If a device is frozen on behalf of any grab, -no event processing is performed for the device. -It is possible for a single device to be frozen because of several grabs. -In this case, -the freeze must be released on behalf of each grab before events can -again be processed. -.LP -.PN XAllowDeviceEvents -can generate -.PN BadDevice -and -.PN BadValue -errors. -.NH 3 -Controlling Device Focus -.XS -\*(SN Controlling Device Focus -.XE -.LP -The current focus window for an extension input device can be -determined using the -.PN XGetDeviceFocus -function. -Extension devices are focused using the -.PN XSetDeviceFocus -function in the same way that the keyboard is focused using the core -.PN XSetInputFocus -function, except that a device ID is passed as -a function parameter. One additional focus state, -.PN FollowKeyboard , -is provided for extension devices. -.LP -To get the current focus state, revert state, -and focus time of an extension device, use -.PN XGetDeviceFocus . -.sM -.FD 0 -int XGetDeviceFocus(\fIdisplay\fP\^, \fIdevice\fP\^, \fIfocus_return\fP\^, \ -\fIrevert_to_return\fP\^, \fIfocus_time_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XDevice *\fIdevice\fP\^; -.br - Window *\fIfocus_return\fP\^; -.br - int *\fIrevert_to_return\fP\^; -.br - Time *\fIfocus_time_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdevice\fP 1i -Specifies the desired device. -.IP \fIfocus_return\fP 1i -Specifies the address of a variable into which the server can return the ID of -the window that contains the device focus or one of the constants -.PN None , -.PN PointerRoot , -or -.PN FollowKeyboard . -.IP \fIrevert_to_return\fP 1i -Specifies the address of a variable into which the server can -return the current revert_to status for the device. -.IP \fIfocus_time_return\fP 1i -Specifies the address of a variable into which the server can -return the focus time last set for the device. -.LP -.eM -.PN XGetDeviceFocus -returns the focus state, the revert-to state, -and the last-focus-time for an extension input device. -.LP -.PN XGetDeviceFocus -can generate -.PN BadDevice -and -.PN BadMatch -errors. -.sp -.LP -To set the focus of an extension device, use -.PN XSetDeviceFocus . -.sM -.FD 0 -int XSetDeviceFocus(\fIdisplay\fP\^, \fIdevice\fP\^, \fIfocus\fP\^, \ -\fIrevert_to\fP\^, \fItime\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XDevice *\fIdevice\fP\^; -.br - Window \fIfocus\fP\^; -.br - int \fIrevert_to\fP\^; -.br - Time \fItime\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdevice\fP 1i -Specifies the desired device. -.IP \fIfocus\fP 1i -Specifies the ID of the window to which the device's focus should be set. -This may be a window ID, or -.PN PointerRoot , -.PN FollowKeyboard , -or -.PN None . -.IP \fIrevert_to\fP 1i -Specifies to which window the focus of the device should revert -if the focus window becomes not viewable. One of the following -constants may be passed: -.PN RevertToParent , -.PN RevertToPointerRoot , -.PN RevertToNone , -or -.PN RevertToFollowKeyboard . -.IP \fItime\fP 1i -Specifies the time. You can pass either a timestamp, expressed in -milliseconds, or -.PN CurrentTime . -.LP -.eM -.PN XSetDeviceFocus -changes the focus for an extension input device and the -last-focus-change-time. It has no effect if the specified -time is earlier than the last-focus-change-time or is later than the -current X server time. Otherwise, the last-focus-change-time is set to the -specified time. -This function causes the X server to generate -.PN DeviceFocusIn -and -.PN DeviceFocusOut -events. -.LP -The action taken by the server when this function is requested depends -on the value of the focus argument: -.IP \(bu 5 -If the focus argument is -.PN None , -all input events from this device will be discarded until a new focus window -is set. In this case, the revert_to argument is ignored. -.IP \(bu 5 -If the focus argument is a window ID, it becomes the focus -window of the device. If an input event from the device would normally -be reported to this window or to one of its inferiors, the event is -reported normally. Otherwise, the event is reported relative to the focus -window. -.IP \(bu 5 -If the focus argument is -.PN PointerRoot , -the focus window is dynamically taken to be the root window -of whatever screen the pointer is on at each input event. -In this case, the revert_to argument is ignored. -.IP \(bu 5 -If the focus argument is -.PN FollowKeyboard , -the focus window is dynamically taken to be the same as the focus -of the X keyboard at each input event. -.LP -The specified focus window must be viewable at the time -.PN XSetDeviceFocus -is called. Otherwise, it generates a -.PN BadMatch -error. -If the focus window later becomes not viewable, -the X server evaluates the revert_to argument -to determine the new focus window. -.IP \(bu 5 -If the revert_to argument is -.PN RevertToParent , -the focus reverts to the parent (or the closest viewable ancestor), -and the new revert_to value is taken to be -.PN RevertToNone . -.IP \(bu 5 -If the revert_to argument is -.PN RevertToPointerRoot , -.PN RevertToFollowKeyboard , -or -.PN RevertToNone , -the focus reverts to that value. -.LP -When the focus reverts, -the X server generates -.PN DeviceFocusIn -and -.PN DeviceFocusOut -events, but the last-focus-change time is not affected. -.LP -.PN XSetDeviceFocus -can generate -.PN BadDevice , -.PN BadMatch , -.PN BadValue , -and -.PN BadWindow -errors. -.NH 3 -Controlling Device Feedback -.XS -\*(SN Controlling Device Feedback -.XE -.LP -To determine the current feedback settings of an extension input device, use -.PN XGetFeedbackControl . -.sM -.FD 0 -XFeedbackState * XGetFeedbackControl(\fIdisplay\fP\^, \fIdevice\fP\^, \fInum_feedbacks_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XDevice *\fIdevice\fP\^; -.br - int *\fInum_feedbacks_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdevice\fP 1i -Specifies the desired device. -.IP \fInum_feedbacks_return\fP 1i -Returns the number of feedbacks supported by the device. -.LP -.eM -.PN XGetFeedbackControl -returns a list of -.PN FeedbackState -structures that describe the feedbacks supported by the specified device. -There is an -.PN XFeedbackState -structure for each class of feedback. These are of -variable length, but the first three members are common to all. -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - XID class; - int length; - XID id; -} XFeedbackState; -.De -.LP -.eM -The common members are as follows: -.IP \(bu 5 -The class member identifies the class of feedback. -It may be compared to constants defined in the file -.Pn < X11/extensions/XI.h >. -Currently defined feedback constants include: -.PN KbdFeedbackClass , -.PN PtrFeedbackClass , -.PN StringFeedbackClass , -.PN IntegerFeedbackClass , -.PN LedFeedbackClass , -and -.PN BellFeedbackClass . -.IP \(bu 5 -The length member specifies the length of the -.PN FeedbackState -structure and can be used by clients to traverse the list. -.IP \(bu 5 -The id member uniquely identifies a feedback for a given device and class. -This allows a device to support more than one feedback of the same class. -Other feedbacks of other classes or devices may have the same ID. -.sp -.LP -Those feedbacks equivalent to those -supported by the core keyboard are reported in class -.PN KbdFeedback -using the -.PN XKbdFeedbackState -structure, which is defined as follows: -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - XID class; - int length; - XID id; - int click; - int percent; - int pitch; - int duration; - int led_mask; - int global_auto_repeat; - char auto_repeats[32]; -} XKbdFeedbackState; -.De -.LP -.eM -The additional members of the -.PN XKbdFeedbackState -structure report the current state of the feedback: -.IP \(bu 5 -The click member specifies the key-click volume and has a value in the range -0 (off) to 100 (loud). -.IP \(bu 5 -The percent member specifies the bell volume and has a value in the range -0 (off) to 100 (loud). -.IP \(bu 5 -The pitch member specifies the bell pitch in Hz. The range of the value is -implementation-dependent. -.IP \(bu 5 -The duration member specifies the duration in milliseconds of the bell. -.IP \(bu 5 -The led_mask member is a bit mask that describes the current state of up to -32 LEDs. A value of 1 in a bit indicates that the corresponding LED is on. -.IP \(bu 5 -The global_auto_repeat member has a value of -.PN AutoRepeatModeOn -or -.PN AutoRepeatModeOff . -.IP \(bu 5 -The auto_repeats member is a bit vector. Each bit set to 1 indicates -that auto-repeat is enabled for the corresponding key. The vector is -represented as 32 bytes. Byte N (from 0) contains the bits for keys -8N to 8N + 7, with the least significant bit in the byte representing -key 8N. -.sp -.LP -Those feedbacks equivalent to those -supported by the core pointer are reported in class -.PN PtrFeedback -using the -.PN XPtrFeedbackState -structure, which is defined as follows: -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - XID class; - int length; - XID id; - int accelNum; - int accelDenom; - int threshold; -} XPtrFeedbackState; -.De -.LP -.eM -The additional members of the -.PN XPtrFeedbackState -structure report the current state of the feedback: -.IP \(bu 5 -The accelNum member returns the numerator for the acceleration multiplier. -.IP \(bu 5 -The accelDenom member returns the denominator for the acceleration multiplier. -.IP \(bu 5 -The accelDenom member returns the threshold for the acceleration. -.sp -.LP -Integer feedbacks are those capable of displaying integer numbers -and reported via the -.PN XIntegerFeedbackState -structure. -The minimum and maximum values that they can display are reported. -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - XID class; - int length; - XID id; - int resolution; - int minVal; - int maxVal; -} XIntegerFeedbackState; -.De -.LP -.eM -The additional members of the -.PN XIntegerFeedbackState -structure report the capabilities of the feedback: -.IP \(bu 5 -The resolution member specifies the number of digits that the feedback -can display. -.IP \(bu 5 -The minVal member specifies the minimum value that the feedback can display. -.IP \(bu 5 -The maxVal specifies the maximum value that the feedback can display. -.sp -.LP -String feedbacks are those that can display character information -and are reported via the -.PN XStringFeedbackState -structure. -Clients set these feedbacks by passing a list of -.PN KeySyms -to be displayed. -The -.PN XGetFeedbackControl -function returns the -set of key symbols that the feedback can display, as well as the -maximum number of symbols that can be displayed. -The -.PN XStringFeedbackState -structure is defined as follows: -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - XID class; - int length; - XID id; - int max_symbols; - int num_syms_supported; - KeySym *syms_supported; -} XStringFeedbackState; -.De -.LP -.eM -The additional members of the -.PN XStringFeedbackState -structure report the capabilities of the feedback: -.IP \(bu 5 -The max_symbols member specifies the maximum number of symbols -that can be displayed. -.IP \(bu 5 -The syms_supported member is a pointer to the list of supported symbols. -.IP \(bu 5 -The num_syms_supported member specifies the length of the list of supported symbols. -.sp -.LP -Bell feedbacks are those that can generate a sound -and are reported via the -.PN XBellFeedbackState -structure. -Some implementations may support a bell as part of a -.PN KbdFeedback -feedback. Class -.PN BellFeedback -is provided for implementations that do not choose to do -so and for devices that support multiple feedbacks that can produce sound. -The meaning of the members is the same as that of the corresponding fields in -the -.PN XKbdFeedbackState -structure. -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - XID class; - int length; - XID id; - int percent; - int pitch; - int duration; -} XBellFeedbackState; -.De -.LP -.eM -Led feedbacks are those that can generate a light and are reported via the -.PN XLedFeedbackState -structure. -Up to 32 lights per feedback are supported. -Each bit in led_mask -corresponds to one supported light, and the corresponding bit in led_values -indicates whether that light is currently on (1) or off (0). -Some implementations may support leds as part of a -.PN KbdFeedback -feedback. -Class -.PN LedFeedback -is provided for implementations that do not choose to do -so and for devices that support multiple led feedbacks. -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - XID class; - int length; - XID id; - Mask led_values; - Mask led_mask; -} XLedFeedbackState; -.De -.LP -.eM -.PN XGetFeedbackControl -can generate -.PN BadDevice -and -.PN BadMatch -errors. -.sp -.LP -To free the information returned by the -.PN XGetFeedbackControl -function, use -.PN XFreeFeedbackList . -.sM -.FD 0 -void XFreeFeedbackList(\fIlist\fP\^) -.br - XFeedbackState *\fIlist\fP\^; -.FN -.IP \fIlist\fP 1i -Specifies the pointer to the -.PN XFeedbackState -structure returned by -a previous call to -.PN XGetFeedbackControl . -.LP -.eM -.PN XFreeFeedbackList -frees the list of feedback control information. -.sp -.LP -To change the settings of a feedback on an extension device, use -.PN XChangeFeedbackControl . -This function modifies the current control values of the specified feedback -using information passed in the appropriate -.PN XFeedbackControl -structure for the feedback. -Which values are modified depends on the valuemask passed. -.sM -.FD 0 -int XChangeFeedbackControl(\fIdisplay\fP\^, \fIdevice\fP\^, \fIvaluemask\fP\^, \ -\fIvalue\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XDevice *\fIdevice\fP\^; -.br - unsigned long \fIvaluemask\fP\^; -.br - XFeedbackControl *\fIvalue\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdevice\fP 1i -Specifies the desired device. -.IP \fIvaluemask\fP 1i -Specifies one value for each bit in the mask (least to most significant -bit). The values are associated with the feedbacks for the specified -device. -.IP \fIvalue\fP 1i -Specifies a pointer to the -.PN XFeedbackControl -structure. -.LP -.eM -.PN XChangeFeedbackControl -controls the device characteristics described by the -.PN XFeedbackControl -structure. -There is an -.PN XFeedbackControl -structure for each class of feedback. -These are of variable length, but the first -three members are common to all and are as follows: -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - XID class; - int length; - XID id; -} XFeedbackControl; -.De -.LP -.eM -Feedback class -.PN KbdFeedback -controls feedbacks equivalent to those provided by the core keyboard using the -.PN KbdFeedbackControl -structure, which is defined as follows:. -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - XID class; - int length; - XID id; - int click; - int percent; - int pitch; - int duration; - int led_mask; - int led_value; - int key; - int auto_repeat_mode; -} XKbdFeedbackControl; -.De -.LP -.eM -This class controls the device characteristics described by the -.PN XKbdFeedbackControl -structure. These include the key_click_percent, -global_auto_repeat, and individual key auto-repeat. Valid modes -are -.PN AutoRepeatModeOn , -.PN AutoRepeatModeOff , -and -.PN AutoRepeatModeDefault . -.LP -Valid masks are as follows: -.sM -.LP -.TS -lw(.5i) lw(2.5i) lw(.8i). -T{ -#define -T} T{ -.PN DvKeyClickPercent -T} T{ -(1L << 0) -T} -T{ -#define -T} T{ -.PN DvPercent -T} T{ -(1L << 1) -T} -T{ -#define -T} T{ -.PN DvPitch -T} T{ -(1L << 2) -T} -T{ -#define -T} T{ -.PN DvDuration -T} T{ -(1L << 3) -T} -T{ -#define -T} T{ -.PN DvLed -T} T{ -(1L << 4) -T} -T{ -#define -T} T{ -.PN DvLedMode -T} T{ -(1L << 5) -T} -T{ -#define -T} T{ -.PN DvKey -T} T{ -(1L << 6) -T} -T{ -#define -T} T{ -.PN DvAutoRepeatMode -T} T{ -(1L << 7) -T} -.TE -.eM -.LP -Feedback class -.PN PtrFeedback -controls feedbacks equivalent to those provided by the core pointer using the -.PN PtrFeedbackControl -structure, which is defined as follows: -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - XID class; - int length; - XID id; - int accelNum; - int accelDenom; - int threshold; -} XPtrFeedbackControl; -.De -.LP -.eM -Which values are modified depends on the valuemask passed. -.LP -Valid masks are as follows: -.sM -.LP -.TS -lw(.5i) lw(2.5i) lw(.8i). -T{ -#define -T} T{ -.PN DvAccelnum -T} T{ -(1L << 0) -T} -T{ -#define -T} T{ -.PN DvAccelDenom -T} T{ -(1L << 1) -T} -T{ -#define -T} T{ -.PN DvThreshold -T} T{ -(1L << 2) -T} -.TE -.LP -.eM -The acceleration, expressed as a fraction, is a multiplier for movement. -For example, -specifying 3/1 means that the device moves three times as fast as normal. -The fraction may be rounded arbitrarily by the X server. -Acceleration takes effect only if the device moves more than threshold pixels at -once and applies only to the amount beyond the value in the threshold argument. -Setting a value to -1 restores the default. -The values of the accelNumerator and threshold fields must be nonzero for -the pointer values to be set. -Otherwise, the parameters will be unchanged. -Negative values generate a -.PN BadValue -error, as does a zero value -for the accelDenominator field. -.LP -This request fails with a -.PN BadMatch -error if the specified device is not currently reporting relative motion. -If a device that is capable of reporting both relative and absolute motion -has its mode changed from -.PN Relative -to -.PN Absolute -by an -.PN XSetDeviceMode -request, valuator control values -will be ignored by the server while the device is in that mode. -.LP -Feedback class -.PN IntegerFeedback -controls integer feedbacks displayed on input devices and are -reported via the -.PN IntegerFeedbackControl -structure, which is defined as follows: -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - XID class; - int length; - XID id; - int int_to_display; -} XIntegerFeedbackControl; -.De -.LP -.eM -Valid masks are as follows: -.sM -.LP -.TS -lw(.5i) lw(2.5i) lw(.8i). -T{ -#define -T} T{ -.PN DvInteger -T} T{ -(1L << 0) -T} -.TE -.LP -.eM -Feedback class -.PN StringFeedback -controls string feedbacks displayed on input devices -and reported via the -.PN StringFeedbackControl -structure, which is defined as follows: -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - XID class; - int length; - XID id; - int num_keysyms; - KeySym *syms_to_display; -} XStringFeedbackControl; -.De -.LP -.eM -Valid masks are as follows: -.sM -.LP -.TS -lw(.5i) lw(2.5i) lw(.8i). -T{ -#define -T} T{ -.PN DvString -T} T{ -(1L << 0) -T} -.TE -.LP -.eM -Feedback class -.PN BellFeedback -controls a bell on an input device and is reported via the -.PN BellFeedbackControl -structure, which is defined as follows: -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - XID class; - int length; - XID id; - int percent; - int pitch; - int duration; -} XBellFeedbackControl; -.De -.LP -.eM -Valid masks are as follows: -.sM -.LP -.TS -lw(.5i) lw(2.5i) lw(.8i). -T{ -#define -T} T{ -.PN DvPercent -T} T{ -(1L << 1) -T} -T{ -#define -T} T{ -.PN DvPitch -T} T{ -(1L << 2) -T} -T{ -#define -T} T{ -.PN DvDuration -T} T{ -(1L << 3) -T} -.TE -.LP -.eM -Feedback class -.PN LedFeedback -controls lights on an input device and are reported via the -.PN LedFeedbackControl -structure, which is defined as follows: -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - XID class; - int length; - XID id; - int led_mask; - int led_values; -} XLedFeedbackControl; -.De -.LP -.eM -Valid masks are as follows: -.sM -.LP -.TS -lw(.5i) lw(2.5i) lw(.8i). -T{ -#define -T} T{ -.PN DvLed -T} T{ -(1L << 4) -T} -T{ -#define -T} T{ -.PN DvLedMode -T} T{ -(1L << 5) -T} -.TE -.LP -.eM -.PN XChangeFeedbackControl -can generate -.PN BadDevice , -.PN BadFeedBack , -.PN BadMatch , -and -.PN BadValue -errors. -.NH 3 -Ringing a Bell on an Input Device -.XS -\*(SN Ringing a Bell on an Input Device -.XE -.LP -To ring a bell on an extension input device, use -.PN XDeviceBell . -.sM -.FD 0 -int XDeviceBell(\fIdisplay\fP\^, \fIdevice\fP\^, \fIfeedbackclass\fP\^, \ -\fIfeedbackid\fP\^, \fIpercent\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XDevice *\fIdevice\fP\^; -.br - XID \fIfeedbackclass\fP\^, \fIfeedbackid\fP\^; -.br - int \fIpercent\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdevice\fP 1i -Specifies the desired device. -.IP \fIfeedbackclass\fP 1i -Specifies the feedbackclass. Valid values are -.PN KbdFeedbackClass -and -.PN BellFeedbackClass . -.IP \fIfeedbackid\fP 1i -Specifies the ID of the feedback that has the bell. -.IP \fIpercent\fP 1i -Specifies the volume in the range -100 (quiet) to 100 percent (loud). -.LP -.eM -.PN XDeviceBell -is analogous to the core -.PN XBell -function. It rings the specified bell on the specified input device feedback, -using the specified volume. -The specified volume is relative to the base volume for the feedback. -If the value for the percent argument is not in the range -100 to 100 -inclusive, a -.PN BadValue -error results. -The volume at which the bell rings when the percent argument is nonnegative is: -.LP -.DS - base - [(base * percent) / 100] + percent -.DE -.LP -The volume at which the bell rings -when the percent argument is negative is: -.LP -.DS - base + [(base * percent) / 100] -.DE -.LP -To change the base volume of the bell, use -.PN XChangeFeedbackControl . -.LP -.PN XDeviceBell -can generate -.PN BadDevice -and -.PN BadValue -errors. -.NH 3 -Controlling Device Encoding -.XS -\*(SN Controlling Device Encoding -.XE -.LP -To get the key mapping of an extension device that supports input class -.PN Keys , -use -.PN XGetDeviceKeyMapping . -.sM -.FD 0 -KeySym * XGetDeviceKeyMapping(\fIdisplay\fP\^, \fIdevice\fP\^, \fIfirst_keycode_wanted\fP\^, \fIkeycode_count\fP\^, -.br - \fIkeysyms_per_keycode_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XDevice *\fIdevice\fP\^; -.br - KeyCode \fIfirst_keycode_wanted\fP\^; -.br - int \fIkeycode_count\fP\^; -.br - int *\fIkeysyms_per_keycode_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdevice\fP 1i -Specifies the desired device. -.IP \fIfirst_keycode_wanted\fP 1i -Specifies the first keycode that is to be returned. -.IP \fIkeycode_count\fP 1i -Specifies the number of keycodes that are to be returned. -.IP \fIkeysyms_per_keycode_return\fP 1i -Returns the number of keysyms per keycode. -.LP -.eM -.PN XGetDeviceKeyMapping -is analogous to the core -.PN XGetKeyboardMapping -function. -It returns the symbols for the specified number of keycodes for the -specified extension device. -.LP -.PN XGetDeviceKeyMapping -returns the symbols for the -specified number of keycodes for the -specified extension device, starting with the specified keycode. -The first_keycode_wanted must be greater than or equal to -min-keycode as returned -by the -.PN XListInputDevices -request (else a -.PN BadValue -error results). The following value: -.DS -first_keycode_wanted + keycode_count \- 1 -.DE -.LP -must be less than or equal to max-keycode as returned -by the -.PN XListInputDevices -request (else a -.PN BadValue -error results). -.LP -The number of elements in the keysyms list is as follows: -.DS -keycode_count * keysyms_per_keycode_return -.DE -And KEYSYM number N (counting from zero) for keycode K has an index -(counting from zero), in keysyms, of the following: -.DS -(K \- first_keycode_wanted) * keysyms_per_keycode_return + N -.DE -.LP -The keysyms_per_keycode_return value is chosen arbitrarily by the server -to be large enough to report all requested symbols. -A special KEYSYM value of -.PN NoSymbol -is used to fill in unused elements for individual keycodes. -.LP -To free the data returned by this function, use -.PN XFree . -.LP -If the specified device has not first been opened by this client via -.PN XOpenDevice , -this request will fail with a -.PN BadDevice -error. -If that device does not support input class -.PN Keys , -this request will fail with a -.PN BadMatch -error. -.LP -.PN XGetDeviceKeyMapping -can generate -.PN BadDevice , -.PN BadMatch , -and -.PN BadValue -errors. -.sp -.LP -To change the keyboard mapping of an extension device that supports input class -.PN Keys , -use -.PN XChangeDeviceKeyMapping . -.sM -.FD ) -int -XChangeDeviceKeyMapping(\fIdisplay\fP\^, \fIdevice\fP\^, \fIfirst_keycode\fP\^, \ -\fIkeysyms_per_keycode\fP\^, \fIkeysyms\fP\^, -.br - \fInum_codes\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XDevice *\fIdevice\fP\^; -.br - int \fIfirst_keycode\fP\^; -.br - int \fIkeysyms_per_keycode\fP\^; -.br - KeySym *\fIkeysyms\fP\^; -.br - int \fInum_codes\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdevice\fP 1i -Specifies the desired device. -.IP \fIfirst_keycode\fP 1i -Specifies the first keycode that is to be changed. -.IP \fIkeysyms_per_keycode\fP 1i -Specifies the keysyms that are to be used. -.IP \fIkeysyms\fP 1i -Specifies a pointer to an array of keysyms. -.IP \fInum_codes\fP 1i -Specifies the number of keycodes that are to be changed. -.LP -.eM -.PN XChangeDeviceKeyMapping -is analogous to the core -.PN XChangeKeyboardMapping -function. -It defines the symbols for the specified number of keycodes for the -specified extension keyboard device. -.LP -If the specified device has not first been opened by this client via -.PN XOpenDevice , -this request will fail with a -.PN BadDevice -error. -If the specified device does not support input class -.PN Keys , -this request will fail with a -.PN BadMatch -error. -.LP -The number of elements in the keysyms list must be a multiple of -keysyms_per_keycode. Otherwise, -.PN XChangeDeviceKeyMapping -generates a -.PN BadLength -error. -The specified first_keycode must be greater than or equal to -the min_keycode value returned by the -.PN ListInputDevices -request, or this request will fail with a -.PN BadValue -error. In addition, if the following expression is not less than -the max_keycode value returned by the -.PN ListInputDevices -request, the request will fail with a -.PN BadValue -error: -.DS - first_keycode + (num_codes / keysyms_per_keycode) - 1 -.DE -.LP -.PN XChangeDeviceKeyMapping -can generate -.PN BadAlloc , -.PN BadDevice , -.PN BadMatch , -and -.PN BadValue -errors. -.sp -.LP -To obtain the keycodes that are used as modifiers on an -extension device that supports input class -.PN Keys , -use -.PN XGetDeviceModifierMapping . -.sM -.FD 0 -XModifierKeymap * XGetDeviceModifierMapping(\fIdisplay\fP\^, \fIdevice\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XDevice *\fIdevice\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdevice\fP 1i -Specifies the desired device. -.LP -.eM -.PN XGetDeviceModifierMapping -is analogous to the core -.PN XGetModifierMapping -function. -The -.PN XGetDeviceModifierMapping -function returns a newly created -.PN XModifierKeymap -structure that contains the keys being used as -modifiers for the specified device. -The structure should be freed after use with -.PN XFreeModifierMapping . -If only zero values appear in the set for any modifier, -that modifier is disabled. -.LP -.PN XGetDeviceModifierMapping -can generate -.PN BadDevice -and -.PN BadMatch -errors. -.sp -.LP -To set which keycodes are to be used as modifiers for an extension device, use -.PN XSetDeviceModifierMapping . -.sM -.FD 0 -int XSetDeviceModifierMapping(\fIdisplay\fP\^, \fIdevice\fP\^, \fImodmap\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XDevice *\fIdevice\fP\^; -.br - XModifierKeymap *\fImodmap\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdevice\fP 1i -Specifies the desired device. -.IP \fImodmap\fP 1i -Specifies a pointer to the -.PN XModifierKeymap -structure. -.LP -.eM -.PN XSetDeviceModifierMapping -is analogous to the core -.PN XSetModifierMapping -function. -The -.PN XSetDeviceModifierMapping -function specifies the keycodes of the keys, if any, -that are to be used as modifiers. A zero value means -that no key should be used. No two arguments can have the same nonzero -keycode value. Otherwise, -.PN XSetDeviceModifierMapping -generates a -.PN BadValue -error. -There are eight modifiers, and the modifiermap member of the -.PN XModifierKeymap -structure contains eight sets of max_keypermod -keycodes, one for each modifier in the order -.PN Shift , -.PN Lock , -.PN Control , -.PN Mod1 , -.PN Mod2 , -.PN Mod3 , -.PN Mod4 , -and -.PN Mod5 . -Only nonzero keycodes have meaning in each set, and zero keycodes -are ignored. -In addition, all of the nonzero keycodes must be in the range specified by -min_keycode and max_keycode reported by the -.PN XListInputDevices -function. -Otherwise, -.PN XSetModifierMapping -generates a -.PN BadValue -error. -No keycode may appear twice in the entire map. -Otherwise, it generates a -.PN BadValue -error. -.LP -A X server can impose restrictions on how modifiers can be changed, -for example, -if certain keys do not generate up transitions in hardware or if multiple -modifier keys are not supported. -If some such restriction is violated, -the status reply is -.PN MappingFailed , -and none of the modifiers are changed. -If the new keycodes specified for a modifier differ from those -currently defined and any (current or new) keys for that modifier are -in the logically down state, -the status reply is -.PN MappingBusy , -and none of the modifiers are changed. -.PN XSetModifierMapping -generates a -.PN DeviceMappingNotify -event on a -.PN MappingSuccess -status. -.LP -.PN XSetDeviceModifierMapping -can generate -.PN BadAlloc , -.PN BadDevice , -.PN BadMatch , -and -.PN BadValue -errors. -.NH 3 -Controlling Button Mapping -.XS -\*(SN Controlling Button Mapping -.XE -.LP -To set the mapping of the buttons on an extension device, use -.PN XSetDeviceButtonMapping . -.sM -.FD 0 -int XSetDeviceButtonMapping(\fIdisplay\fP\^, \fIdevice\fP\^, \fImap\fP\^, \fInmap\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XDevice *\fIdevice\fP\^; -.br - unsigned char \fImap\fP\^[]; -.br - int \fInmap\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdevice\fP 1i -Specifies the desired device. -.IP \fImap\fP 1i -Specifies the mapping list. -.IP \fInmap\fP 1i -Specifies the number of items in the mapping list. -.LP -.eM -.PN XSetDeviceButtonMapping -sets the mapping of the buttons on an extension device. -If it succeeds, the X server generates a -.PN DeviceMappingNotify -event, and -.PN XSetDeviceButtonMapping -returns -.PN MappingSuccess . -Elements of the list are indexed starting from one. -The length of the list must be the same as -.PN XGetDeviceButtonMapping -would return, or a -.PN BadValue -error results. -The index is a button number, and the element of the list -defines the effective number. -A zero element disables a button, and elements are not restricted in -value by the number of physical buttons. -However, no two elements can have the same nonzero value, or a -.PN BadValue -error results. -If any of the buttons to be altered are logically in the down state, -.PN XSetDeviceButtonMapping -returns -.PN MappingBusy , -and the mapping is not changed. -.LP -.PN XSetDeviceButtonMapping -can generate -.PN BadDevice , -.PN BadMatch , -and -.PN BadValue -errors. -.sp -.LP -To get the button mapping, use -.PN XGetDeviceButtonMapping . -.sM -.FD 0 -int XGetDeviceButtonMapping(\fIdisplay\fP\^, \fIdevice\fP\^, \fImap_return\fP\^, \fInmap\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XDevice *\fIdevice\fP\^; -.br - unsigned char \fImap_return\fP\^[]; -.br - int \fInmap\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdevice\fP 1i -Specifies the desired device. -.IP \fImap_return\fP 1i -Specifies the mapping list. -.IP \fInmap\fP 1i -Specifies the number of items in the mapping list. -.LP -.eM -.PN XGetDeviceButtonMapping -returns the current mapping of the specified extension device. -Elements of the list are indexed starting from one. -.PN XGetDeviceButtonMapping -returns the number of physical buttons actually on the pointer. -The nominal mapping for the buttons is the identity mapping: map[i]=i. -The nmap argument specifies the length of the array where the button -mapping is returned, and only the first nmap elements are returned -in map_return. -.LP -.PN XGetDeviceButtonMapping -can generate -.PN BadDevice -and -.PN BadMatch -errors. -.NH 3 -Obtaining the State of a Device -.XS -\*(SN Obtaining the State of a Device -.XE -.LP -To obtain information that describes the state of the keys, buttons, and -valuators of an extension device, use -.PN XQueryDeviceState . -.sM -.FD 0 -XDeviceState * XQueryDeviceState(\fIdisplay\fP\^, \fIdevice\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XDevice *\fIdevice\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdevice\fP 1i -Specifies the desired device. -.LP -.eM -.PN XQueryDeviceState -returns a pointer to an -.PN XDeviceState -structure, which points to a list of -structures that describe the state of the keys, buttons, and valuators -on the device: -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - XID device_id; - int num_classes; - XInputClass *data; -} XDeviceState; -.De -.LP -.eM -The structures are of variable length, but the first -two members are common to all and are as follows: -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - unsigned char class; - unsigned char length; -} XInputClass; -.De -.LP -.eM -The class member contains a class identifier. This identifier can be -compared with constants defined in the file -.Pn < X11/extensions/XI.h >. -Currently defined constants are: -.PN KeyClass , -.PN ButtonClass , -and -.PN ValuatorClass . -.LP -The length member contains the length of the structure and can be used -by clients to traverse the list. -.LP -The -.PN XValuatorState -structure describes the current state of the valuators -on the device. -The num_valuators member contains the number of valuators -on the device. -The mode member is a mask whose bits report the data mode -and other state information for the device. -The following bits are currently defined: -.DS 0 -.TA .5i 1.5i 2.5i -.ta .5i 1.5i 2.5i - DeviceMode 1 << 0 Relative = 0, Absolute = 1 - ProximityState 1 << 1 InProximity = 0, OutOfProximity = 1 -.DE -The valuators member contains a pointer to an array of integers that -describe the current value of the valuators. -If the mode is -.PN Relative , -these values are undefined. -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - unsigned char class; - unsigned char length; - unsigned char num_valuators; - unsigned char mode; - int *valuators; -} XValuatorState; -.De -.LP -.eM -The -.PN XKeyState -structure describes the current state of the keys -on the device. Byte N (from 0) contains the -bits for key 8N to 8N + 7 with the least significant bit in the -byte representing key 8N. -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - unsigned char class; - unsigned char length; - short num_keys; - char keys[32]; -} XKeyState; -.De -.LP -.eM -The -.PN XButtonState -structure describes the current state of the buttons -on the device. Byte N (from 0) contains the bits for button 8N to 8N + 7 -with the least significant bit in the -byte representing button 8N. -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - unsigned char class; - unsigned char length; - short num_buttons; - char buttons[32]; -} XButtonState; -.De -.LP -.eM -.PN XQueryDeviceState -can generate -.PN BadDevice -errors. -.sp -.LP -To free the data returned by this function, use -.PN XFreeDeviceState . -.sM -.FD 0 -void XFreeDeviceState(\fIstate\fP\^) -.br - XDeviceState *state; -.FN -.IP \fIstate\fP 1i -Specifies the pointer to the -.PN XDeviceState -data returned by a previous call to -.PN XQueryDeviceState . -.LP -.eM -.PN XFreeDeviceState -frees the device state data. -.NH 2 -Events -.XS -\*(SN Events -.XE -.LP -The input extension creates input events analogous to the core input events. -These extension input events are generated by manipulating one of the -extension input devices. -The remainder of this section discusses the following X Input Extension -event topics: -.IP \(bu 5 -Event types -.IP \(bu 5 -Event classes -.IP \(bu 5 -Event structures -.NH 3 -Event Types -.XS -\*(SN Event Types -.XE -.LP -Event types are integer numbers that a client can use to determine what -kind of event it has received. The client compares the type field of -the event structure with known event types to make this determination. -.LP -The core input event types are constants and are defined in the header file -.Pn < X11/X.h >. -Extension event types are not constants. Instead, they -are dynamically allocated by the extension's request to the X server -when the extension is initialized. Because of this, extension event -types must be obtained by the client from the server. -.LP -The client program determines the event type for an extension event by using -the information returned by the -.PN XOpenDevice -request. -This type can then be used for comparison with the type field -of events received by the client. -.LP -Extension events propagate up the window hierarchy in the same manner -as core events. If a window is not interested in an extension event, -it usually propagates to the closest ancestor that is interested, -unless the dont_propagate list prohibits it. -Grabs of extension devices may alter the set of windows that receive a particular -extension event. -.LP -The following table lists the event category and its associated event -type or types. -.TS -lw(2.5i) lw(2.5i). -_ -.sp 6p -\fBEvent Category Event Type\fP -.sp 6p -_ -T{ -Device key -T} T{ -.PN DeviceKeyPress -T} - T{ -.PN DeviceKeyRelease -T} -.sp 3p -T{ -Device motion -T} T{ -.PN DeviceButtonPress -T} - T{ -.PN DeviceButtonRelease -T} - T{ -.PN DeviceMotionNotify -T} -.sp 3p -T{ -Device input focus -T} T{ -.PN DeviceFocusIn -T} - T{ -.PN DeviceFocusOut -T} -.sp 3p -T{ -Device state notification -T} T{ -.PN DeviceStateNotify -T} -.sp 3p -T{ -Device proximity -T} T{ -.PN ProximityIn -T} - T{ -.PN ProximityOut -T} -.sp 3p -T{ -Device mapping -T} T{ -.PN DeviceMappingNotify -T} -.sp 3p -T{ -Device change -T} T{ -.PN ChangeDeviceNotify -T} -.sp 6p -_ -.TE -.NH 3 -Event Classes -.XS -\*(SN Event Classes -.XE -.LP -Event classes are integer numbers that are used in the same way as the -core event masks. They are used by a client program to indicate to the -server which events that client program wishes to receive. -.LP -The core input event masks are constants and are defined in the header file -.Pn < X11/X.h >. -Extension event classes are not constants. Instead, they are dynamically -allocated by the extension's request to the X server -when the extension is initialized. Because of this, extension event -classes must be obtained by the client from the server. -.LP -The event class for an extension event and device is obtained from -information returned by the -.PN XOpenDevice -function. -This class can then be used in an -.PN XSelectExtensionEvent -request to ask that events of that type from that device be sent to -the client program. -.LP -For -.PN DeviceButtonPress -events, the client may specify whether -or not an implicit passive grab should be done when the button is -pressed. If the client wants to guarantee that it will receive a -.PN DeviceButtonRelease -event for each -.PN DeviceButtonPress -event it receives, it should specify the -.PN DeviceButtonPressGrab -class in addition to the -.PN DeviceButtonPress -class. -This restricts the client in that only one client at a time -may request -.PN DeviceButtonPress -events from the same device and -window if any client specifies this class. -.LP -If any client has specified the -.PN DeviceButtonPressGrab -class, any requests by any other client that specify the same device -and window and specify either -.PN DeviceButtonPress -or -.PN DeviceButtonPressGrab -will cause an -.PN Access -error to be generated. -.LP -If only the -.PN DeviceButtonPress -class is specified, no implicit passive grab will be done when a button -is pressed on the device. -Multiple clients may use this class to specify the same device and -window combination. -.LP -The client may also select -.PN DeviceMotion -events only when a button is down. -It does this by specifying the event classes -.PN DeviceButton1Motion -through -.PN DeviceButton5Motion . -An input device will support only -as many button motion classes as it has buttons. -.NH 3 -Event Structures -.XS -\*(SN Event Structures -.XE -.LP -Each extension event type has a corresponding structure declared in -.Pn < X11/extensions/XInput.h >. -All event structures have the following common members: -.IP type 1i -Set to the event type number that uniquely identifies it. For example, -when the X server reports a -.PN DeviceKeyPress -event to a client application, it sends an -.PN XDeviceKeyPressEvent -structure. -.IP serial 1i -Set from the serial number reported in the protocol but expanded from the -16-bit least significant bits to a full 32-bit value. -.IP send_event 1i -Set to -.PN True -if the event came from an -.PN XSendEvent -request. -.IP display 1i -Set to a pointer to a structure that defines the display -on which the event was read. -.LP -Extension event structures report the current position of the X pointer. -In addition, if the device reports motion data and is reporting absolute data, -the current value of any valuators the device contains is also reported. -.NH 4 -Device Key Events -.XS -\*(SN Device Key Events -.XE -.LP -Key events from extension devices contain all the information that is -contained in a key event from the X keyboard. In addition, they contain -a device ID and report the current value of any valuators on the device, -if that device is reporting absolute data. -If data for more than six valuators is being reported, more than one -key event will be sent. -The axes_count member contains the number of axes that are being -reported. The server sends as many of these events as are -needed to report the device data. Each event contains the total number -of axes reported in the axes_count member and the first axis reported -in the current event in the first_axis member. -If the device supports input class -.PN Valuators , -but is not reporting absolute mode data, -the axes_count member contains zero (0). -.LP -The location reported in -the x, y and x_root, y_root members is the location of the core X pointer. -.LP -The -.PN XDeviceKeyEvent -structure is defined as follows: -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* of event */ - unsigned long serial; /* # of last request processed */ - Bool send_event; /* true if from SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; /* "event" window reported relative to */ - XID deviceid; - Window root; /* root window event occurred on */ - Window subwindow; /* child window */ - Time time; /* milliseconds */ - int x, y; /* x, y coordinates in event window */ - int x_root; /* coordinates relative to root */ - int y_root; /* coordinates relative to root */ - unsigned int state; /* key or button mask */ - unsigned int keycode; /* detail */ - Bool same_screen; /* same screen flag */ - unsigned int device_state; /* device key or button mask */ - unsigned char axes_count; - unsigned char first_axis; - int axis_data[6]; -} XDeviceKeyEvent; - -typedef XDeviceKeyEvent XDeviceKeyPressedEvent; -typedef XDeviceKeyEvent XDeviceKeyReleasedEvent; -.De -.eM -.NH 4 -Device Button Events -.XS -\*(SN Device Button Events -.XE -.LP -Button events from extension devices contain all the information that is -contained in a button event from the X pointer. In addition, they contain -a device ID and report the current value of any valuators on the device -if that device is reporting absolute data. -If data for more than six valuators is being reported, more than one -button event may be sent. -The axes_count member contains the number of axes that are being -reported. The server sends as many of these events as are -needed to report the device data. Each event contains the total number -of axes reported in the axes_count member and the first axis reported -in the current event in the first_axis member. -If the device supports input class -.PN Valuators , -but is not reporting absolute mode data, -the axes_count member contains zero (0). -.LP -The location reported in -the x, y and x_root, y_root members is the location of the core X pointer. -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* of event */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; /* "event" window reported relative to */ - XID deviceid; - Window root; /* root window that the event occurred on */ - Window subwindow; /* child window */ - Time time; /* milliseconds */ - int x, y; /* x, y coordinates in event window */ - int x_root; /* coordinates relative to root */ - int y_root; /* coordinates relative to root */ - unsigned int state; /* key or button mask */ - unsigned int button; /* detail */ - Bool same_screen; /* same screen flag */ - unsigned int device_state; /* device key or button mask */ - unsigned char axes_count; - unsigned char first_axis; - int axis_data[6]; -} XDeviceButtonEvent; - -typedef XDeviceButtonEvent XDeviceButtonPressedEvent; -typedef XDeviceButtonEvent XDeviceButtonReleasedEvent; -.De -.eM -.NH 4 -Device Motion Events -.XS -\*(SN Device Motion Events -.XE -.LP -Motion events from extension devices contain all the information that is -contained in a motion event from the X pointer. In addition, they contain -a device ID and report the current value of any valuators on the device. -.LP -The location reported in -the x, y and x_root, y_root members is the location of the core X pointer, -and so is 2-dimensional. -.LP -Extension motion devices may report motion data for a variable number of -axes. -The axes_count member contains the number of axes that are being -reported. The server sends as many of these events as are -needed to report the device data. Each event contains the total number -of axes reported in the axes_count member and the first axis reported -in the current event in the first_axis member. -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* of event */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; /* "event" window reported relative to */ - XID deviceid; - Window root; /* root window that the event occurred on */ - Window subwindow; /* child window */ - Time time; /* milliseconds */ - int x, y; /* x, y coordinates in event window */ - int x_root; /* coordinates relative to root */ - int y_root; /* coordinates relative to root */ - unsigned int state; /* key or button mask */ - char is_hint; /* detail */ - Bool same_screen; /* same screen flag */ - unsigned int device_state; /* device key or button mask */ - unsigned char axes_count; - unsigned char first_axis; - int axis_data[6]; -} XDeviceMotionEvent; -.De -.eM -.NH 4 -Device Focus Events -.XS -\*(SN Device Focus Events -.XE -.LP -These events are equivalent to the core focus events. -They contain the same information, with the addition -of a device ID to identify which device has had a focus change, -and a timestamp. -.LP -.PN DeviceFocusIn -and -.PN DeviceFocusOut -events are generated for -focus changes of extension devices in the same manner as core focus -events are generated. -.LP -.sM -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { - int type; /* of event */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; /* "event" window it is reported relative to */ - XID deviceid; - int mode; /* NotifyNormal, NotifyGrab, NotifyUngrab */ - int detail; - /* - * NotifyAncestor, NotifyVirtual, NotifyInferior, - * NotifyNonLinear,NotifyNonLinearVirtual, NotifyPointer, - * NotifyPointerRoot, NotifyDetailNone - */ - Time time; -} XDeviceFocusChangeEvent; - -typedef XDeviceFocusChangeEvent XDeviceFocusInEvent; -typedef XDeviceFocusChangeEvent XDeviceFocusOutEvent; -.De -.eM -.NH 4 -Device StateNotify Event -.XS -\*(SN Device StateNotify Event -.XE -.LP -This event is analogous to the core keymap event but -reports the current state of the device for each -input class that it supports. -It is generated after every -.PN DeviceFocusIn -event and -.PN EnterNotify -event and is delivered to clients who have selected -.PN XDeviceStateNotify -events. -.LP -If the device supports input class -.PN Valuators , -the mode member in the -.PN XValuatorStatus -structure is a bitmask that reports the device mode, -proximity state, and other state information. -The following bits are currently defined: -.DS 0 -.TA .5i 1.5i -.ta .5i 1.5i - 0x01 Relative = 0, Absolute = 1 - 0x02 InProximity = 0, OutOfProximity = 1 -.DE -.LP -If the device supports more valuators than can be reported in a single -.PN XEvent , -multiple -.PN XDeviceStateNotify -events will be generated. -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - unsigned char class; - unsigned char length; -} XInputClass; - -typedef struct { - int type; - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; - XID deviceid; - Time time; - int num_classes; - char data[64]; -} XDeviceStateNotifyEvent; - -typedef struct { - unsigned char class; - unsigned char length; - unsigned char num_valuators; - unsigned char mode; - int valuators[6]; -} XValuatorStatus; - -typedef struct { - unsigned char class; - unsigned char length; - short num_keys; - char keys[32]; -} XKeyStatus; - -typedef struct { - unsigned char class; - unsigned char length; - short num_buttons; - char buttons[32]; -} XButtonStatus; -.De -.eM -.NH 4 -Device Mapping Event -.XS -\*(SN Device Mapping Event -.XE -.LP -This event is equivalent to the core -.PN MappingNotify -event. -It notifies client programs when the mapping of keys, -modifiers, or buttons on an extension device has changed. -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; - unsigned long serial; - Bool send_event; - Display *display; - Window window; - XID deviceid; - Time time; - int request; - int first_keycode; - int count; -} XDeviceMappingEvent; -.De -.eM -.NH 4 -ChangeDeviceNotify Event -.XS -\*(SN ChangeDeviceNotify Event -.XE -.LP -This event has no equivalent in the core protocol. It notifies client -programs when one of the core devices has been changed. -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; - unsigned long serial; - Bool send_event; - Display *display; - Window window; - XID deviceid; - Time time; - int request; -} XChangeDeviceNotifyEvent; -.De -.eM -.NH 4 -Proximity Events -.XS -\*(SN Proximity Events -.XE -.LP -These events have no equivalent in the core protocol. Some input -devices such as graphics tablets or touchscreens may send these -events to indicate that a stylus has moved into or out of contact -with a positional sensing surface. -.LP -The event contains the current value of any valuators on the device -if that device is reporting absolute data. -If data for more than six valuators is being reported, more than one -proximity event may be sent. -The axes_count member contains the number of axes that are being -reported. The server sends as many of these events as are -needed to report the device data. Each event contains the total number -of axes reported in the axes_count member and the first axis reported -in the current event in the first_axis member. -If the device supports input class -.PN Valuators , -but is not reporting absolute mode data, -the axes_count member contains zero (0). -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int type; /* ProximityIn or ProximityOut */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; - XID deviceid; - Window root; - Window subwindow; - Time time; - int x, y; - int x_root, y_root; - unsigned int state; - Bool same_screen; - unsigned int device_state; /* device key or button mask */ - unsigned char axes_count; - unsigned char first_axis; - int axis_data[6]; -} XProximityNotifyEvent; - -typedef XProximityNotifyEvent XProximityInEvent; -typedef XProximityNotifyEvent XProximityOutEvent; -.De -.eM -.NH 2 -Event Handling Functions -.XS -\*(SN Event Handling Functions -.XE -.LP -This section discusses the X Input Extension -event handling functions that allow you to: -.IP \(bu 5 -Determine the extension version -.IP \(bu 5 -List the available devices -.IP \(bu 5 -Enable and disable extension devices -.IP \(bu 5 -Change the mode of a device -.IP \(bu 5 -Initialize valuators on an input device -.IP \(bu 5 -Get input device controls -.IP \(bu 5 -Change input device controls -.IP \(bu 5 -Select extension device events -.IP \(bu 5 -Determine selected device events -.IP \(bu 5 -Control event propogation -.IP \(bu 5 -Send an event -.IP \(bu 5 -Get motion history -.NH 3 -Determining the Extension Version -.XS -\*(SN Determining the Extension Version -.XE -.LP -.sM -.FD 0 -XExtensionVersion * XGetExtensionVersion(\fIdisplay\fP\^, \fIname\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - char *\fIname\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIname\fP 1i -Specifies the name of the desired extension. -.LP -.eM -.PN XGetExtensionVersion -allows a client to determine whether a server supports -the desired version of the input extension. -.LP -The -.PN XExtensionVersion -structure returns information about the version of the extension -supported by the server and is defined as follows: -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - Bool present; - short major_version; - short minor_version; -} XExtensionVersion; -.De -.LP -.eM -The major and minor versions can be compared with constants defined in -the header file -.Pn < X11/extensions/XI.h >. -Each version is a superset of the previous versions. -.LP -You should use -.PN XFree -to free the data returned by this function. -.NH 3 -Listing Available Devices -.XS -\*(SN Listing Available Devices -.XE -.LP -A client program that wishes to access a specific device -must first determine whether that device is connected to the X server. This -is done through the -.PN XListInputDevices -function, which will return a list of all devices that can be opened -by the X server. The client program can use one -of the names defined in the -.Pn < X11/extensions/XI.h > -header file in an -.PN XInternAtom -request to determine the device type of the desired device. This type -can then be compared with the device types returned by the -.PN XListInputDevices -request. -.LP -.sM -.FD 0 -XDeviceInfo * XListInputDevices(\fIdisplay\fP\^, \fIndevices\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int *\fIndevices\fP\^; /* RETURN */ -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIndevices\fP 1i -Specifies the address of a variable into which the server -can return the number of input devices available to the X server. -.LP -.eM -.PN XListInputDevices -allows a client to determine which devices -are available for X input and information about those devices. -An array of -.PN XDeviceInfo -structures is returned, with one element in the array for each device. -The number of devices is returned in the ndevices argument. -.LP -The X pointer device and X keyboard device are reported, as well as -all available extension input devices. The use member of the -.PN XDeviceInfo -structure specifies the current use of the device. -If the value of this member is -.PN IsXPointer , -the device is the X pointer device. If the value is -.PN IsXKeyboard , -the device is the X keyboard device. If the value is -.PN IsXExtensionDevice , -the device is available for use as an extension input device. -.LP -Each -.PN XDeviceInfo -entry contains a pointer to a list of structures -that describe the characteristics of each class -of input supported by that device. The num_classes member -contains the number of entries in that list. -.LP -If the device supports input class -.PN Valuators , -one of the structures pointed to by the -.PN XDeviceInfo -structure will be an -.PN XValuatorInfo -structure. The axes member of that structure -contains the address of an array of -.PN XAxisInfo -structures. -There is one element in this array for each axis of motion -reported by the device. The number of elements in this -array is contained in the num_axes element of the -.PN XValuatorInfo -structure. -The size of the motion buffer for the device is -reported in the motion_buffer member of the -.PN XValuatorInfo -structure. -.LP -The -.PN XDeviceInfo -structure is defined as follows: -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct _XDeviceInfo { - XID id; - Atom type; - char *name; - int num_classes; - int use; - XAnyClassPtr inputclassinfo; -} XDeviceInfo; -.De -.LP -.eM -The structures pointed to by the -.PN XDeviceInfo -structure are defined as follows: -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct _XKeyInfo { - XID class; - int length; - unsigned short min_keycode; - unsigned short max_keycode; - unsigned short num_keys; -} XKeyInfo; - -typedef struct _XButtonInfo { - XID class; - int length; - short num_buttons; -} XButtonInfo; - -typedef struct _XValuatorInfo { - XID class; - int length; - unsigned char num_axes; - unsigned char mode; - unsigned long motion_buffer; - XAxisInfoPtr axes; -} XValuatorInfo; -.De -.LP -.eM -The -.PN XAxisInfo -structure pointed to by the -.PN XValuatorInfo -structure is defined as follows: -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct _XAxisInfo { - int resolution; - int min_value; - int max_value; -} XAxisInfo; -.De -.LP -.eM -The following atom names are defined in the -.Pn < X11/extensions/XI.h > -header file. -.Ds 0 -.TA 2i -.ta 2i -\s-1MOUSE QUADRATURE -TABLET SPACEBALL -KEYBOARD DATAGLOVE -TOUCHSCREEN EYETRACKER -TOUCHPAD CURSORKEYS -BUTTONBOX FOOTMOUSE -BARCODE ID_MODULE -KNOB_BOX ONE_KNOB -TRACKBALL NINE_KNOB\s+1 -.De -.LP -These names can be used in an -.PN XInternAtom -request to return an atom that can be used for comparison -with the type member of the -.PN XDeviceInfo -structure. -.LP -.PN XListInputDevices -returns NULL if there are no input devices to list. -.sp -.LP -To free the data returned by -.PN XListInputDevices , -use -.PN XFreeDeviceList . -.sp -.LP -.sM -.FD 0 -void XFreeDeviceList(\fIlist\fP\^) -.br - XDeviceInfo *\fIlist\fP\^; -.FN -.IP \fIlist\fP 1i -Specifies the pointer to the -.PN XDeviceInfo -array returned by a previous call to -.PN XListInputDevices . -.LP -.eM -.PN XFreeDeviceList -frees the list of input device information. -.NH 3 -Enabling and Disabling Extension Devices -.XS -\*(SN Enabling and Disabling Extension Devices -.XE -.LP -Each client program that wishes to access an extension device must request -that the server open that device by calling the -.PN XOpenDevice -function. -.sM -.FD 0 -XDevice * XOpenDevice(\fIdisplay\fP\^, \fIdevice_id\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XID \fIdevice_id\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdevice_id\fP 1i -Specifies the ID that uniquely identifies the device to be opened. -This ID is obtained from the -.PN XListInputDevices -request. -.LP -.eM -.PN XOpenDevice -opens the device for the requesting client and, on success, returns an -.PN XDevice -structure, which is defined as follows: -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - XID device_id; - int num_classes; - XInputClassInfo *classes; -} XDevice; -.De -.LP -.eM -The -.PN XDevice -structure contains a pointer to an array of -.PN XInputClassInfo -structures. Each element in that array -contains information about events of a particular input class supported -by the input device. -.LP -The -.PN XInputClassInfo -structure is defined as follows: -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - unsigned char input_class; - unsigned char event_type_base; -} XInputClassInfo; -.De -.LP -.eM -A client program can determine the event -type and event class for a given event by using macros defined by the -input extension. The name of the macro corresponds to the desired event, -and the macro is passed the structure that describes the device from which -input is desired, for example: -.LP -.DS 0 -.TA .5i -.ta .5i - DeviceKeyPress(XDevice *device, event_type, event_class) -.DE -.LP -The macro will fill in the values of the event class to be used in an -.PN XSelectExtensionEvent -request to select the event and the event type to be used in comparing -with the event types of events received via -.PN XNextEvent . -.LP -.PN XOpenDevice -can generate -.PN BadDevice -errors. -.sp -.LP -Before terminating, the client program should request that the server close -the device by calling the -.PN XCloseDevice -function. -.sM -.FD 0 -int XCloseDevice(\fIdisplay\fP\^, \fIdevice\fP\^) -.br - Display *display; -.br - XDevice *device; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdevice\fP 1i -Specifies the device to be closed. -.LP -.eM -.PN XCloseDevice -closes the device for the requesting client and frees the associated -.PN XDevice -structure. -.LP -A client may open the same extension device more than once. Requests -after the first successful one return an additional -.PN XDevice -structure -with the same information as the first, but otherwise have no effect. -A single -.PN XCloseDevice -request will terminate that client's access to the device. -.LP -Closing a device releases any active or passive grabs the requesting client -has established. If the device is frozen only by an active grab of the -requesting client, any queued events are released. -.LP -If a client program terminates without closing a device, the server will -automatically close that device on behalf of the client. This does not -affect any other clients that may be accessing that device. -.LP -.PN XCloseDevice -can generate -.PN BadDevice -errors. -.NH 3 -Changing the Mode of a Device -.XS -\*(SN Changing the Mode of a Device -.XE -.LP -Some devices are capable of reporting either relative or absolute motion -data. -To change the mode of a device from relative to absolute, use -.PN XSetDeviceMode . -.sM -.FD 0 -int XSetDeviceMode(\fIdisplay\fP\^, \fIdevice\fP\^, \fImode\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XDevice *\fIdevice\fP\^; -.br - int \fImode\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdevice\fP 1i -Specifies the device whose mode should be changed. -.IP \fImode\fP 1i -Specifies the mode. You can pass -.PN Absolute -or -.PN Relative . -.LP -.eM -.PN XSetDeviceMode -allows a client to request the server to change the mode of a -device that is capable of reporting either absolute positional data or relative -motion data. If the device is invalid or if the client has not previously -requested that the server open the device via an -.PN XOpenDevice -request, this request will fail with a -.PN BadDevice -error. -If the device does not support input class -.PN Valuators -or if it is not capable of reporting the specified mode, -the request will fail with a -.PN BadMatch -error. -.LP -This request will fail and return -.PN DeviceBusy -if another client has already opened the device and requested a different mode. -.LP -.PN XSetDeviceMode -can generate -.PN BadDevice , -.PN BadMatch , -.PN BadMode , -and -.PN DeviceBusy -errors. -.NH 3 -Initializing Valuators on an Input Device -.XS -\*(SN Initializing Valuators on an Input Device -.XE -.LP -Some devices that report absolute positional data can be initialized to a -starting value. Devices that are capable of reporting relative motion or -absolute positional data may require that their valuators be initialized -to a starting value after the mode of the device is changed to -.PN Absolute . -.sp -.LP -To initialize the valuators on such a device, use -.PN XSetDeviceValuators . -.sM -.FD 0 -Status XSetDeviceValuators(\fIdisplay\fP\^, \fIdevice\fP\^, \fIvaluators\fP\^, \ -\fIfirst_valuator\fP\^, \fInum_valuators\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XDevice *\fIdevice\fP\^; -.br - int *\fIvaluators\fP\^, \fIfirst_valuator\fP\^, \fInum_valuators\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdevice\fP 1i -Specifies the device whose valuators should be initialized. -.IP \fIvaluators\fP 1i -Specifies the values to which each valuator should be set. -.IP \fIfirst_valuator\fP 1i -Specifies the first valuator to be set. -.IP \fInum_valuators\fP 1i -Specifies the number of valuators to be set. -.LP -.eM -.PN XSetDeviceValuators -initializes the specified valuators on the specified extension -input device. Valuators are numbered beginning with zero. Only the valuators -in the range specified by first_valuator and num_valuators are set. -A -.PN BadValue -error results if the number of valuators supported by the device -is less than the following expression: -.DS 0 -.TA .5i -.ta .5i - first_valuator + num_valuators -.DE -.LP -If the request succeeds, -.PN Success -is returned. If the specified device is grabbed by some other client, -the request will fail and a status of -.PN AlreadyGrabbed -will be returned. -.LP -.PN XSetDeviceValuators -can generate -.PN BadDevice , -.PN BadLength , -.PN BadMatch , -and -.PN BadValue -errors. -.NH 3 -Getting Input Device Controls -.XS -\*(SN Getting Input Device Controls -.XE -.LP -Some input devices support various configuration controls -that can be queried or changed by clients. The set of supported -controls will vary from one input device to another. Requests -to manipulate these controls will fail if either the target -X server or the target input device does not support the -requested device control. -.LP -Each device control has a unique identifier. Information -passed with each device control varies in length and is mapped -by data structures unique to that device control. -.sp -.LP -To query a device control, use -.PN XGetDeviceControl . -.sM -.FD 0 -XDeviceControl * XGetDeviceControl(\fIdisplay\fP\^, \fIdevice\fP\^, \fIcontrol\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XDevice *\fIdevice\fP\^; -.br - int \fIcontrol\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdevice\fP 1i -Specifies the device whose configuration control status is to be returned. -.IP \fIcontrol\fP 1i -Identifies the specific device control to be queried. -.LP -.eM -.PN XGetDeviceControl -returns the current state of the specified device control. -If the target X server does not support that device control, a -.PN BadValue -error is returned. -If the specified device does not support that device control, a -.PN BadMatch -error -is returned. -.LP -If the request is successful, a pointer to a generic -.PN XDeviceState -structure is returned. The information returned varies according -to the specified control and is mapped by a structure appropriate -for that control. -The first two members are common to all device controls -and are defined as follows: -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - XID control; - int length; -} XDeviceState; -\fP -.De -.LP -.eM -The control may be compared to constants defined in the file -.Pn < X11/extensions/XI.h >. -Currently defined device controls include DEVICE_RESOLUTION. -.LP -The information returned for the DEVICE_RESOLUTION control is -defined in the -.PN XDeviceResolutionState -structure, which is defined as follows: -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - XID control; - int length; - int num_valuators; - int *resolutions; - int *min_resolutions; - int *max_resolutions; -} XDeviceResolutionState; -.De -.LP -.eM -This device control returns a list of valuators and the range of -valid resolutions allowed for each. Valuators are numbered -beginning with zero (0). Resolutions for all valuators on the device are -returned. For each valuator i on the device, resolutions[i] returns -the current setting of the resolution, min_resolutions[i] returns -the minimum valid setting, and max_resolutions[i] returns the -maximum valid setting. -.LP -When this control is specified, -.PN XGetDeviceControl -fails with a -.PN BadMatch -error if the specified device has no valuators. -.LP -.PN XGetDeviceControl -can generate -.PN BadMatch -and -.PN BadValue -errors. -.NH 3 -Changing Input Device Controls -.XS -\*(SN Changing Input Device Controls -.XE -.LP -Some input devices support various configuration controls -that can be changed by clients. Typically, this would be -done to initialize the device to a known state or configuration. -The set of supported controls will vary from one input device -to another. Requests to manipulate these controls will fail if -either the target X server or the target input device does not -support the requested device control. Setting the device control -will also fail if the target input device is grabbed by another -client or is open by another client and has been set to a conflicting -state. -.LP -Each device control has a unique identifier. Information -passed with each device control varies in length and is mapped -by data structures unique to that device control. -.sp -.LP -To change a device control, use -.PN XChangeDeviceControl . -.sM -.FD 0 -Status XChangeDeviceControl(\fIdisplay\fP\^, \fIdevice\fP\^, \fIcontrol\fP\^, \ -\fIvalue\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XDevice *\fIdevice\fP\^; -.br - int \fIcontrol\fP\^; -.br - XDeviceControl *\fIvalue\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdevice\fP 1i -Specifies the device whose configuration control status is to be modified. -.IP \fIcontrol\fP 1i -Identifies the specific device control to be changed. -.IP \fIvalue\fP 1i -Specifies a pointer to an -.PN XDeviceControl -structure that describes which control is to be changed -and how it is to be changed. -.LP -.eM -.PN XChangeDeviceControl -changes the current state of the specified device control. -If the target X server does not support that device control, a -.PN BadValue -error is returned. -If the specified device does not support that device control, a -.PN BadMatch -error is returned. -If another client has the target device grabbed, a status of -.PN AlreadyGrabbed -is returned. -If another client has the device open and has set it to a -conflicting state, a status of -.PN DeviceBusy -is returned. -If the request fails for any reason, the device control will not -be changed. -.LP -If the request is successful, the device control will be changed -and a status of -.PN Success -is returned. -The information passed varies according to the specified control -and is mapped by a structure appropriate for that control. -The first two members are common to all device controls: -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - XID control; - int length; -} XDeviceControl; -.De -.LP -.eM -The control may be set using constants defined in the -.Pn < X11/extensions/XI.h > -header file. -Currently defined device controls include DEVICE_RESOLUTION. -.LP -The information that can be changed by the DEVICE_RESOLUTION -control is defined in the -.PN XDeviceResolutionControl -structure, which is defined as follows: -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - XID control; - int length; - int first_valuator; - int num_valuators; - int *resolutions; -} XDeviceResolutionControl; -.De -.LP -.eM -This device control changes the resolution of the specified -valuators on the specified extension input device. Valuators -are numbered beginning with zero. Only the valuators in the range -specified by first_valuator and num_valuators are set. A value -of -1 in the resolutions list indicates that the resolution for -this valuator is not to be changed. The num_valuators member -specifies the number of valuators in the resolutions list. -.LP -When this control is specified, -.PN XChangeDeviceControl -fails with a -.PN BadMatch -error if the specified device has no valuators. -If a resolution is specified that is not within the range of valid values -(as returned by -.PN XGetDeviceControl ), -.PN XChangeDeviceControl -fails with a -.PN BadValue -error. -A -.PN BadValue -error results if the number of valuators supported by the device -is less than the following expression: -.LP -.DS 0 -.TA .5i -.ta .5i - first_valuator + num_valuators, -.DE -.LP -.PN XChangeDeviceControl -can generate -.PN BadMatch -and -.PN BadValue -errors. -.NH 3 -Selecting Extension Device Events -.XS -\*(SN Selecting Extension Device Events -.XE -.LP -To select device input events, use -.PN XSelectExtensionEvent . -The parameters passed are a pointer to -a list of classes that define the desired event types and devices, a count -of the number of elements in the list, and the ID of the window from which -events are desired. -.sM -.FD 0 -int XSelectExtensionEvent(\fIdisplay\fP\^, \fIwindow\fP\^, \fIevent_list\fP\^, \ -\fIevent_count\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIwindow\fP\^; -.br - XEventClass *\fIevent_list\fP\^; -.br - int \fIevent_count\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIwindow\fP 1i -Specifies the ID of the window from which the client wishes to receive events. -.IP \fIevent_list\fP 1i -Specifies a pointer to an array of event classes -that specify which events are desired. -.IP \fIevent_count\fP 1i -Specifies the number of elements in the event_list. -.LP -.eM -.PN XSelectExtensionEvent -requests the server to send events that match the events and -devices described by the event list and that come from the requested -window. -The elements of the -.PN XEventClass -array are the event_class values -obtained by invoking a macro with the pointer to an -.PN XDevice -structure returned by the -.PN XOpenDevice -request. -For example, the -.PN DeviceKeyPress -macro would return the -.PN XEventClass -for -.PN DeviceKeyPress -events from the specified device if it were invoked in the following form: -.DS 0 -.TA .5i -.ta .5i - DeviceKeyPress (XDevice *device, event_type, event_class) -.DE -.LP -Macros are defined for the following event classes: -.DS 0 -.PN DeviceKeyPress -.PN DeviceKeyRelease -.PN DeviceButtonPress -.PN DeviceButtonRelease -.PN DeviceMotionNotify -.PN DeviceFocusIn -.PN DeviceFocusOut -.PN ProximityIn -.PN ProximityOut -.PN DeviceStateNotify -.PN DeviceMappingNotify -.PN ChangeDeviceNotify -.PN DevicePointerMotionHint -.PN DeviceButton1Motion -.PN DeviceButton2Motion -.PN DeviceButton3Motion, -.PN DeviceButton4Motion -.PN DeviceButton5Motion -.PN DeviceButtonMotion, -.PN DeviceOwnerGrabButton -.PN DeviceButtonPressGrab -.DE -.LP -To get the next available event from within a client program, use the core -.PN XNextEvent -function. This returns the next event whether it -came from a core device or an extension device. -.LP -Succeeding -.PN XSelectExtensionEvent -requests using event classes -for the same device as was specified on a previous request will replace -the previous set of selected events from that device with the new set. -.LP -.PN XSelectExtensionEvent -can generate -.PN BadAccess , -.PN BadClass , -.PN BadLength , -and -.PN BadWindow -errors. -.NH 3 -Determining Selected Device Events -.XS -\*(SN Determining Selected Device Events -.XE -.LP -To determine which extension events are currently selected from a given -window, use -.PN XGetSelectedExtensionEvents . -.sM -.FD 0 -int XGetSelectedExtensionEvents(\fIdisplay\fP\^, \fIwindow\fP\^, \ -\fIthis_client_count\fP\^, \fIthis_client\fP\^, -.br - \fIall_clients_count\fP\^, \fIall_clients\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIwindow\fP\^; -.br - int *\fIthis_client_count\fP\^; /* RETURN */ -.br - XEventClass **\fIthis_client\fP\^; /* RETURN */ -.br - int *\fIall_clients_count\fP\^; /* RETURN */ -.br - XEventClass **\fIall_clients\fP\^; /* RETURN */ -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIwindow\fP 1i -Specifies the ID of the window from which the client wishes to receive events. -.IP \fIthis_client_count\fP 1i -Returns the number of elements in the this_client list. -.IP \fIthis_client\fP 1i -Returns a list of -.PN XEventClasses -that specify which events are -selected by this client. -.IP \fIall_clients_count\fP 1i -Returns the number of elements in the all_clients list. -.IP \fIall_clients\fP 1i -Returns a list of -.PN XEventClasses -that specify which events are -selected by all clients. -.LP -.eM -.PN XGetSelectedExtensionEvents -returns pointers to two event class arrays. -One lists the extension events selected by this client from -the specified window. The other lists the extension events selected by -all clients from the specified window. This information is analogous -to that returned in your_event_mask and all_event_masks of the -.PN XWindowAttributes -structure when an -.PN XGetWindowAttributes -request is made. -To free the two arrays returned by this function, use -.PN XFree . -.LP -.PN XGetSelectedExtensionEvents -can generate -.PN BadWindow -errors. -.NH 3 -Controlling Event Propagation -.XS -\*(SN Controlling Event Propagation -.XE -.LP -Extension events propagate up the window hierarchy in the same manner -as core events. If a window is not interested in an extension event, -it usually propagates to the closest ancestor that is interested, -unless the dont_propagate list prohibits it. -Grabs of extension devices may alter the set of windows that receive a -particular extension event. -.LP -Client programs may control event propagation through the use -of the following two functions: -.PN XChangeDeviceDontPropagateList -and -.PN XGetDeviceDontPropagateList . -.LP -.sM -.FD 0 -int XChangeDeviceDontPropagateList(\fIdisplay\fP\^, \fIwindow\fP\^, \ -\fIevent_count\fP\^, \fIevents\fP\^, \fImode\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIwindow\fP\^; -.br - int \fIevent_count\fP\^; -.br - XEventClass *\fIevents\fP\^; -.br - int \fImode\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIwindow\fP 1i -Specifies the desired window. -.IP \fIevent_count\fP 1i -Specifies the number of elements in the events list. -.IP \fIevents\fP 1i -Specifies a pointer to the list of XEventClasses. -.IP \fImode\fP 1i -Specifies the mode. You can pass -.PN AddToList -or -.PN DeleteFromList . -.LP -.eM -.PN XChangeDeviceDontPropagateList -adds an event to or deletes an event from the do_not_propagate list -of extension events for the specified window. -There is one list per window, and the list remains for the life of the window. -The list is not altered if a client that changed the list terminates. -.LP -Suppression of event propagation is not allowed for all events. If a -specified -.PN XEventClass -is invalid because suppression of that event is not allowed, a -.PN BadClass -error results. -.LP -.PN XChangeDeviceDontPropagateList -can generate -.PN BadClass , -.PN BadMode , -and -.PN BadWindow -errors. -.sp -.LP -.sM -.FD 0 -XEventClass * XGetDeviceDontPropagateList(\fIdisplay\fP\^, \fIwindow\fP\^, \fIevent_count\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIwindow\fP\^; -.br - int *\fIevent_count\fP\^; /*RETURN */ -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIwindow\fP 1i -Specifies the desired window. -.IP \fIevent_count\fP 1i -Returns the number of elements in the array returned by this function. -.LP -.eM -.PN XGetDeviceDontPropagateList -allows a client to determine the do_not_propagate list of extension events -for the specified window. -It returns an array of -.PN XEventClass , -each -.PN XEventClass -representing a device/event type pair. -To free the data returned by this function, use -.PN XFree . -.LP -.PN XGetDeviceDontPropagateList -can generate -.PN BadWindow -errors. -.NH 3 -Sending an Event -.XS -\*(SN Sending an Event -.XE -.LP -To send an extension event to another client, use -.PN XSendExtensionEvent . -.sM -.FD 0 -int XSendExtensionEvent(\fIdisplay\fP\^, \fIdevice\fP\^, \fIwindow\fP\^, \ -\fIpropagate\fP\^, \fIevent_count\fP\^, \fIevent_list\fP\^, \fIevent\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XDevice *\fIdevice\fP\^; -.br - Window \fIwindow\fP\^; -.br - Bool \fIpropagate\fP\^; -.br - int \fIevent_count\fP\^; -.br - XEventClass *\fIevent_list\fP\^; -.br - XEvent *\fIevent\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdevice\fP 1i -Specifies the device whose ID is recorded in the event. -.IP \fIwindow\fP 1i -Specifies the destination window ID. You can pass a window ID, -.PN PointerWindow -or -.PN InputFocus . -.IP \fIpropagate\fP 1i -Specifies a boolean value that is either -.PN True -or -.PN False . -.IP \fIevent_count\fP 1i -Specifies the number of elements in the event_list array. -.IP \fIevent_list\fP 1i -Specifies a pointer to an array of -.PN XEventClass . -.IP \fIevent\fP 1i -Specifies a pointer to the event that is to be sent. -.LP -.eM -.PN XSendExtensionEvent -identifies the destination window, determines which clients should receive -the specified event, and ignores any active grabs. -It requires a list of -.PN XEventClass -to be specified. -These are obtained by opening an input device with the -.PN XOpenDevice -request. -.LP -.PN XSendExtensionEvent -uses the window argument to identify the destination window as follows: -.IP \(bu 5 -If you pass -.PN PointerWindow , -the destination window is the window that contains the pointer. -.IP \(bu 5 -If you pass -.PN InputFocus -and if the focus window contains the pointer, -the destination window is the window that contains the pointer. -If the focus window does not contain the pointer, -the destination window is the focus window. -.LP -To determine which clients should receive the specified events, -.PN XSendExtensionEvent -uses the propagate argument as follows: -.IP \(bu 5 -If propagate is -.PN False , -the event is sent to every client selecting -from the destination window -any of the events specified in the event_list array. -.IP \(bu 5 -If propagate is -.PN True -and no clients have selected from the destination window -any of the events specified in the event_list array, the destination is -replaced with the closest ancestor of destination for which some client -has selected one of the specified events and for which no intervening -window has that event in its do_not_propagate mask. -If no such window exists, -or if the window is an ancestor of the focus window, and -.PN InputFocus -was originally specified as the destination, -the event is not sent to any clients. Otherwise, the event is reported to every -client selecting on the final destination any of the events specified -in event_list. -.LP -The event in the -.PN XEvent -structure must be one of the events defined -by the input extension, so that the X server can correctly byte swap the -contents as necessary. The contents of the event are otherwise unaltered -and unchecked by the X server except to force send_event to -.PN True -in the forwarded event and to set the sequence number in the event correctly. -.LP -.PN XSendExtensionEvent -returns zero if the conversion-to-wire protocol failed; -otherwise, it returns nonzero. -.LP -.PN XSendExtensionEvent -can generate -.PN BadClass , -.PN BadDevice , -.PN BadValue , -and -.PN BadWindow -errors. -.NH 3 -Getting Motion History -.XS -\*(SN Getting Motion History -.XE -.LP -.sM -.FD 0 -XDeviceTimeCoord * XGetDeviceMotionEvents(\fIdisplay\fP\^, \fIdevice\fP\^, \fIstart\fP\^, \ -\fIstop\fP\^, \fInevents_return\fP\^, \fImode_return\fP\^, -.br - \fIaxis_count_return\fP\^); -.br - Display *\fIdisplay\fP\^; -.br - XDevice *\fIdevice\fP\^; -.br - Time \fIstart\fP\^, \fIstop\fP\^; -.br - int *\fInevents_return\fP\^; -.br - int *\fImode_return\fP\^; -.br - int *\fIaxis_count_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdevice\fP 1i -Specifies the desired device. -.IP \fIstart\fP 1i -Specifies the start time. -.IP \fIstop\fP 1i -Specifies the stop time. -.IP \fInevents_return\fP 1i -Returns the number of positions in the motion buffer returned -for this request. -.IP \fImode_return\fP 1i -Returns the mode of the nevents information. -The mode will be one of the following: -.PN Absolute -or -.PN Relative . -.IP \fIaxis_count_return\fP 1i -Returns the number of axes reported in each of the positions returned. -.LP -.eM -.PN XGetDeviceMotionEvents -returns all positions in the device's motion history buffer -that fall between the specified start and stop times inclusive. -If the start time is in the future or is later than the stop time, -no positions are returned. -.LP -The return type for this function is an -.PN XDeviceTimeCoord -structure, which is defined as follows: -.LP -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - Time time; - unsigned int *data; -} XDeviceTimeCoord; -.De -.LP -.eM -The data member is a pointer to an array of data items. -Each item is of type int, and there is one data item -per axis of motion reported by the device. -The number of axes reported by the device is returned in the axis_count variable. -.LP -The value of the data items depends on the mode of the device. -The mode is returned in the mode variable. If the -mode is -.PN Absolute , -the data items are the raw values generated by the device. -These may be scaled by the client program using the -maximum values that the device can generate for each axis of motion -that it reports. The maximum value for each axis is reported in -the max_val member of the -.PN XAxisInfo -structure, which is part of the information returned by the -.PN XListInputDevices -request. -.LP -If the mode is -.PN Relative , -the data items are the relative values generated by the device. -The client program must choose an initial -position for the device and maintain a current position by -accumulating these relative values. -.LP -Consecutive calls to -.PN XGetDeviceMotionEvents -can return data of different modes, that is, if -some client program has changed the mode of the device via an -.PN XSetDeviceMode -request. -.LP -.PN XGetDeviceMotionEvents -can generate -.PN BadDevice -and -.PN BadMatch -errors. -.sp -.LP -To free the data returned by -.PN XGetDeviceMotionEvents , -use -.PN XFreeDeviceMotionEvents . -.LP -.sM -.FD 0 -void XFreeDeviceMotionEvents(\fIevents\fP\^) -.br - XDeviceTimeCoord *\fIevents\fP\^; -.FN -.IP \fIevents\fP 1i -Specifies the pointer to the -.PN XDeviceTimeCoord -array returned by a previous call to -.PN XGetDeviceMotionEvents . -.LP -.eM -.PN XFreeDeviceMotionEvents -frees the specified array of motion information. -.\" -.\" -.\" Appendicies -.\" -.\" -.bp -.ds Ch ~ -.sp 1 -.ce 3 -\s+1\fBAppendix A\fP\s-1 -.XS -\*(SN Appendix A -.XE -.LP -The following information is contained in the \fB\fP -and \fB\fP header files: -.DS 0 -.cs CW 20 -\fC -.ps 8 -/* Definitions used by the library and client */ - -#ifndef _XINPUT_H_ -#define _XINPUT_H_ - -#ifndef _XLIB_H_ -#include -#endif - -#ifndef _XI_H_ -#include "XI.h" -#endif - -#define _deviceKeyPress 0 -#define _deviceKeyRelease 1 - -#define _deviceButtonPress 0 -#define _deviceButtonRelease 1 - -#define _deviceMotionNotify 0 - -#define _deviceFocusIn 0 -#define _deviceFocusOut 1 - -#define _proximityIn 0 -#define _proximityOut 1 - -#define _deviceStateNotify 0 -#define _deviceMappingNotify 1 -#define _changeDeviceNotify 2 - -#define FindTypeAndClass(d, type, class, classid, offset) \ - { int i; XInputClassInfo *ip; \ - type = 0; class = 0; \ - for (i=0, ip= ((XDevice *) d)->classes; \ - i< ((XDevice *) d)->num_classes; \ - i++, ip++) \ - if (ip->input_class == classid) \ - {type = ip->event_type_base + offset; \ - class = ((XDevice *) d)->device_id << 8 | type;}} - -#define DeviceKeyPress(d, type, class) \ - FindTypeAndClass(d, type, class, KeyClass, _deviceKeyPress) - -#define DeviceKeyRelease(d, type, class) \ - FindTypeAndClass(d, type, class, KeyClass, _deviceKeyRelease) - -#define DeviceButtonPress(d, type, class) \ - FindTypeAndClass(d, type, class, ButtonClass, _deviceButtonPress) - -#define DeviceButtonRelease(d, type, class) \ - FindTypeAndClass(d, type, class, ButtonClass, _deviceButtonRelease) - -#define DeviceMotionNotify(d, type, class) \ - FindTypeAndClass(d, type, class, ValuatorClass, _deviceMotionNotify) - -#define DeviceFocusIn(d, type, class) \ - FindTypeAndClass(d, type, class, FocusClass, _deviceFocusIn) - -#define DeviceFocusOut(d, type, class) \ - FindTypeAndClass(d, type, class, FocusClass, _deviceFocusOut) - -#define ProximityIn(d, type, class) \ - FindTypeAndClass(d, type, class, ProximityClass, _proximityIn) - -#define ProximityOut(d, type, class) \ - FindTypeAndClass(d, type, class, ProximityClass, _proximityOut) - -#define DeviceStateNotify(d, type, class) \ - FindTypeAndClass(d, type, class, OtherClass, _deviceStateNotify) - -#define DeviceMappingNotify(d, type, class) \ - FindTypeAndClass(d, type, class, OtherClass, _deviceMappingNotify) - -#define ChangeDeviceNotify(d, type, class) \ - FindTypeAndClass(d, type, class, OtherClass, _changeDeviceNotify) - -#define DevicePointerMotionHint(d, type, class) \ - { class = ((XDevice *) d)->device_id << 8 | _devicePointerMotionHint;} - -#define DeviceButton1Motion(d, type, class) \ - { class = ((XDevice *) d)->device_id << 8 | _deviceButton1Motion;} - -#define DeviceButton2Motion(d, type, class) \ - { class = ((XDevice *) d)->device_id << 8 | _deviceButton2Motion;} - -#define DeviceButton3Motion(d, type, class) \ - { class = ((XDevice *) d)->device_id << 8 | _deviceButton3Motion;} - -#define DeviceButton4Motion(d, type, class) \ - { class = ((XDevice *) d)->device_id << 8 | _deviceButton4Motion;} - -#define DeviceButton5Motion(d, type, class) \ - { class = ((XDevice *) d)->device_id << 8 | _deviceButton5Motion;} - -#define DeviceButtonMotion(d, type, class) \ - { class = ((XDevice *) d)->device_id << 8 | _deviceButtonMotion;} - -#define DeviceOwnerGrabButton(d, type, class) \ - { class = ((XDevice *) d)->device_id << 8 | _deviceOwnerGrabButton;} - -#define DeviceButtonPressGrab(d, type, class) \ - { class = ((XDevice *) d)->device_id << 8 | _deviceButtonGrab;} - -#define NoExtensionEvent(d, type, class) \ - { class = ((XDevice *) d)->device_id << 8 | _noExtensionEvent;} - -#define BadDevice(dpy, error) _xibaddevice(dpy, &error) - -#define BadClass(dpy, error) _xibadclass(dpy, &error) - -#define BadEvent(dpy, error) _xibadevent(dpy, &error) - -#define BadMode(dpy, error) _xibadmode(dpy, &error) - -#define DeviceBusy(dpy, error) _xidevicebusy(dpy, &error) - -/*************************************************************** - * - * DeviceKey events. These events are sent by input devices that - * support input class Keys. - * The location of the X pointer is reported in the coordinate - * fields of the x,y and x_root,y_root fields. - * - */ - -typedef struct - { - int type; /* of event */ - unsigned long serial; /* # of last request processed */ - Bool send_event; /* true if from SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; /* "event" window reported relative to */ - XID deviceid; - Window root; /* root window event occured on */ - Window subwindow; /* child window */ - Time time; /* milliseconds */ - int x, y; /* x, y coordinates in event window */ - int x_root; /* coordinates relative to root */ - int y_root; /* coordinates relative to root */ - unsigned int state; /* key or button mask */ - unsigned int keycode; /* detail */ - Bool same_screen; /* same screen flag */ - unsigned int device_state; /* device key or button mask */ - unsigned char axes_count; - unsigned char first_axis; - int axis_data[6]; - } XDeviceKeyEvent; - -typedef XDeviceKeyEvent XDeviceKeyPressedEvent; -typedef XDeviceKeyEvent XDeviceKeyReleasedEvent; - -/******************************************************************* - * - * DeviceButton events. These events are sent by extension devices - * that support input class Buttons. - * - */ - -typedef struct { - int type; /* of event */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; /* "event" window reported relative to */ - XID deviceid; - Window root; /* root window that the event occured on */ - Window subwindow; /* child window */ - Time time; /* milliseconds */ - int x, y; /* x, y coordinates in event window */ - int x_root; /* coordinates relative to root */ - int y_root; /* coordinates relative to root */ - unsigned int state; /* key or button mask */ - unsigned int button; /* detail */ - Bool same_screen; /* same screen flag */ - unsigned int device_state; /* device key or button mask */ - unsigned char axes_count; - unsigned char first_axis; - int axis_data[6]; - } XDeviceButtonEvent; - -typedef XDeviceButtonEvent XDeviceButtonPressedEvent; -typedef XDeviceButtonEvent XDeviceButtonReleasedEvent; - -/******************************************************************* - * - * DeviceMotionNotify event. These events are sent by extension devices - * that support input class Valuators. - * - */ - -typedef struct - { - int type; /* of event */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; /* "event" window reported relative to */ - XID deviceid; - Window root; /* root window that the event occured on */ - Window subwindow; /* child window */ - Time time; /* milliseconds */ - int x, y; /* x, y coordinates in event window */ - int x_root; /* coordinates relative to root */ - int y_root; /* coordinates relative to root */ - unsigned int state; /* key or button mask */ - char is_hint; /* detail */ - Bool same_screen; /* same screen flag */ - unsigned int device_state; /* device key or button mask */ - unsigned char axes_count; - unsigned char first_axis; - int axis_data[6]; - } XDeviceMotionEvent; - -/******************************************************************* - * - * DeviceFocusChange events. These events are sent when the focus - * of an extension device that can be focused is changed. - * - */ - -typedef struct - { - int type; /* of event */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; /* "event" window reported relative to */ - XID deviceid; - int mode; /* NotifyNormal, NotifyGrab, NotifyUngrab */ - int detail; - /* - * NotifyAncestor, NotifyVirtual, NotifyInferior, - * NotifyNonLinear,NotifyNonLinearVirtual, NotifyPointer, - * NotifyPointerRoot, NotifyDetailNone - */ - Time time; - } XDeviceFocusChangeEvent; - -typedef XDeviceFocusChangeEvent XDeviceFocusInEvent; -typedef XDeviceFocusChangeEvent XDeviceFocusOutEvent; - -/******************************************************************* - * - * ProximityNotify events. These events are sent by those absolute - * positioning devices that are capable of generating proximity information. - * - */ - -typedef struct - { - int type; /* ProximityIn or ProximityOut */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; - XID deviceid; - Window root; - Window subwindow; - Time time; - int x, y; - int x_root, y_root; - unsigned int state; - Bool same_screen; - unsigned int device_state; /* device key or button mask */ - unsigned char axes_count; - unsigned char first_axis; - int axis_data[6]; - } XProximityNotifyEvent; -typedef XProximityNotifyEvent XProximityInEvent; -typedef XProximityNotifyEvent XProximityOutEvent; - -/******************************************************************* - * - * DeviceStateNotify events are generated on EnterWindow and FocusIn - * for those clients who have selected DeviceState. - * - */ - -typedef struct - { - unsigned char class; - unsigned char length; - } XInputClass; - -typedef struct { - int type; - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; - XID deviceid; - Time time; - int num_classes; - char data[64]; -} XDeviceStateNotifyEvent; - -typedef struct { - unsigned char class; - unsigned char length; - unsigned char num_valuators; - unsigned char mode; - int valuators[6]; -} XValuatorStatus; - -typedef struct { - unsigned char class; - unsigned char length; - short num_keys; - char keys[32]; -} XKeyStatus; - -typedef struct { - unsigned char class; - unsigned char length; - short num_buttons; - char buttons[32]; -} XButtonStatus; - -/******************************************************************* - * - * DeviceMappingNotify event. This event is sent when the key mapping, - * modifier mapping, or button mapping of an extension device is changed. - * - */ - -typedef struct { - int type; - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; /* unused */ - XID deviceid; - Time time; - int request; /* one of MappingModifier, MappingKeyboard, - MappingPointer */ - int first_keycode;/* first keycode */ - int count; /* defines range of change w. first_keycode*/ -} XDeviceMappingEvent; - -/******************************************************************* - * - * ChangeDeviceNotify event. This event is sent when an - * XChangeKeyboard or XChangePointer request is made. - * - */ - -typedef struct { - int type; - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; /* unused */ - XID deviceid; - Time time; - int request; /* NewPointer or NewKeyboard */ -} XChangeDeviceNotifyEvent; - -/******************************************************************* - * - * Control structures for input devices that support input class - * Feedback. These are used by the XGetFeedbackControl and - * XChangeFeedbackControl functions. - * - */ - -typedef struct { - XID class; - int length; - XID id; -} XFeedbackState; - -typedef struct { - XID class; - int length; - XID id; - int click; - int percent; - int pitch; - int duration; - int led_mask; - int global_auto_repeat; - char auto_repeats[32]; -} XKbdFeedbackState; - -typedef struct { - XID class; - int length; - XID id; - int accelNum; - int accelDenom; - int threshold; -} XPtrFeedbackState; - -typedef struct { - XID class; - int length; - XID id; - int resolution; - int minVal; - int maxVal; -} XIntegerFeedbackState; - -typedef struct { - XID class; - int length; - XID id; - int max_symbols; - int num_syms_supported; - KeySym *syms_supported; -} XStringFeedbackState; - -typedef struct { - XID class; - int length; - XID id; - int percent; - int pitch; - int duration; -} XBellFeedbackState; - -typedef struct { - XID class; - int length; - XID id; - int led_values; - int led_mask; -} XLedFeedbackState; - -typedef struct { - XID class; - int length; - XID id; -} XFeedbackControl; - -typedef struct { - XID class; - int length; - XID id; - int accelNum; - int accelDenom; - int threshold; -} XPtrFeedbackControl; - -typedef struct { - XID class; - int length; - XID id; - int click; - int percent; - int pitch; - int duration; - int led_mask; - int led_value; - int key; - int auto_repeat_mode; -} XKbdFeedbackControl; - -typedef struct { - XID class; - int length; - XID id; - int num_keysyms; - KeySym *syms_to_display; -} XStringFeedbackControl; - -typedef struct { - XID class; - int length; - XID id; - int int_to_display; -} XIntegerFeedbackControl; - -typedef struct { - XID class; - int length; - XID id; - int percent; - int pitch; - int duration; -} XBellFeedbackControl; - -typedef struct { - XID class; - int length; - XID id; - int led_mask; - int led_values; -} XLedFeedbackControl; - -/******************************************************************* - * - * Device control structures. - * - */ - -typedef struct { - XID control; - int length; -} XDeviceControl; - -typedef struct { - XID control; - int length; - int first_valuator; - int num_valuators; - int *resolutions; -} XDeviceResolutionControl; - -typedef struct { - XID control; - int length; - int num_valuators; - int *resolutions; - int *min_resolutions; - int *max_resolutions; -} XDeviceResolutionState; - -/******************************************************************* - * - * An array of XDeviceList structures is returned by the - * XListInputDevices function. Each entry contains information - * about one input device. Among that information is an array of - * pointers to structures that describe the characteristics of - * the input device. - * - */ - -typedef struct _XAnyClassinfo *XAnyClassPtr; - -typedef struct _XAnyClassinfo { - XID class; - int length; - } XAnyClassInfo; - -typedef struct _XDeviceInfo *XDeviceInfoPtr; - -typedef struct _XDeviceInfo - { - XID id; - Atom type; - char *name; - int num_classes; - int use; - XAnyClassPtr inputclassinfo; - } XDeviceInfo; - -typedef struct _XKeyInfo *XKeyInfoPtr; - -typedef struct _XKeyInfo - { - XID class; - int length; - unsigned short min_keycode; - unsigned short max_keycode; - unsigned short num_keys; - } XKeyInfo; - -typedef struct _XButtonInfo *XButtonInfoPtr; - -typedef struct _XButtonInfo { - XID class; - int length; - short num_buttons; - } XButtonInfo; - -typedef struct _XAxisInfo *XAxisInfoPtr; - -typedef struct _XAxisInfo { - int resolution; - int min_value; - int max_value; - } XAxisInfo; - -typedef struct _XValuatorInfo *XValuatorInfoPtr; - -typedef struct _XValuatorInfo - { - XID class; - int length; - unsigned char num_axes; - unsigned char mode; - unsigned long motion_buffer; - XAxisInfoPtr axes; - } XValuatorInfo; - - -/******************************************************************* - * - * An XDevice structure is returned by the XOpenDevice function. - * It contains an array of pointers to XInputClassInfo structures. - * Each contains information about a class of input supported by the - * device, including a pointer to an array of data for each type of event - * the device reports. - * - */ - - -typedef struct { - unsigned char input_class; - unsigned char event_type_base; -} XInputClassInfo; - -typedef struct { - XID device_id; - int num_classes; - XInputClassInfo *classes; -} XDevice; - - -/******************************************************************* - * - * The following structure is used to return information for the - * XGetSelectedExtensionEvents function. - * - */ - -typedef struct { - XEventClass event_type; - XID device; -} XEventList; - -/******************************************************************* - * - * The following structure is used to return motion history data from - * an input device that supports the input class Valuators. - * This information is returned by the XGetDeviceMotionEvents function. - * - */ - -typedef struct { - Time time; - int *data; -} XDeviceTimeCoord; - - -/******************************************************************* - * - * Device state structure. - * This is returned by the XQueryDeviceState request. - * - */ - -typedef struct { - XID device_id; - int num_classes; - XInputClass *data; -} XDeviceState; - -/******************************************************************* - * - * Note that the mode field is a bitfield that reports the Proximity - * status of the device as well as the mode. The mode field should - * be OR'd with the mask DeviceMode and compared with the values - * Absolute and Relative to determine the mode, and should be OR'd - * with the mask ProximityState and compared with the values InProximity - * and OutOfProximity to determine the proximity state. - * - */ - -typedef struct { - unsigned char class; - unsigned char length; - unsigned char num_valuators; - unsigned char mode; - int *valuators; -} XValuatorState; - -typedef struct { - unsigned char class; - unsigned char length; - short num_keys; - char keys[32]; -} XKeyState; - -typedef struct { - unsigned char class; - unsigned char length; - short num_buttons; - char buttons[32]; -} XButtonState; - -/******************************************************************* - * - * Function definitions. - * - */ - -_XFUNCPROTOBEGIN - -extern int XChangeKeyboardDevice( -#if NeedFunctionPrototypes - Display* /* display */, - XDevice* /* device */ -#endif -); - -extern int XChangePointerDevice( -#if NeedFunctionPrototypes - Display* /* display */, - XDevice* /* device */, - int /* xaxis */, - int /* yaxis */ -#endif -); - -extern int XGrabDevice( -#if NeedFunctionPrototypes - Display* /* display */, - XDevice* /* device */, - Window /* grab_window */, - Bool /* ownerEvents */, - int /* event count */, - XEventClass* /* event_list */, - int /* this_device_mode */, - int /* other_devices_mode */, - Time /* time */ -#endif -); - -extern int XUngrabDevice( -#if NeedFunctionPrototypes - Display* /* display */, - XDevice* /* device */, - Time /* time */ -#endif -); - -extern int XGrabDeviceKey( -#if NeedFunctionPrototypes - Display* /* display */, - XDevice* /* device */, - unsigned int /* key */, - unsigned int /* modifiers */, - XDevice* /* modifier_device */, - Window /* grab_window */, - Bool /* owner_events */, - unsigned int /* event_count */, - XEventClass* /* event_list */, - int /* this_device_mode */, - int /* other_devices_mode */ -#endif -); - -extern int XUngrabDeviceKey( -#if NeedFunctionPrototypes - Display* /* display */, - XDevice* /* device */, - unsigned int /* key */, - unsigned int /* modifiers */, - XDevice* /* modifier_dev */, - Window /* grab_window */ -#endif -); - -extern int XGrabDeviceButton( -#if NeedFunctionPrototypes - Display* /* display */, - XDevice* /* device */, - unsigned int /* button */, - unsigned int /* modifiers */, - XDevice* /* modifier_device */, - Window /* grab_window */, - Bool /* owner_events */, - unsigned int /* event_count */, - XEventClass* /* event_list */, - int /* this_device_mode */, - int /* other_devices_mode */ -#endif -); - -extern int XUngrabDeviceButton( -#if NeedFunctionPrototypes - Display* /* display */, - XDevice* /* device */, - unsigned int /* button */, - unsigned int /* modifiers */, - XDevice* /* modifier_dev */, - Window /* grab_window */ -#endif -); - -extern int XAllowDeviceEvents( -#if NeedFunctionPrototypes - Display* /* display */, - XDevice* /* device */, - int /* event_mode */, - Time /* time */ -#endif -); - -extern int XGetDeviceFocus( -#if NeedFunctionPrototypes - Display* /* display */, - XDevice* /* device */, - Window* /* focus */, - int* /* revert_to */, - Time* /* time */ -#endif -); - -extern int XSetDeviceFocus( -#if NeedFunctionPrototypes - Display* /* display */, - XDevice* /* device */, - Window /* focus */, - int /* revert_to */, - Time /* time */ -#endif -); - -extern XFeedbackState *XGetFeedbackControl( -#if NeedFunctionPrototypes - Display* /* display */, - XDevice* /* device */, - int* /* num_feedbacks */ -#endif -); - -extern int XFreeFeedbackList( -#if NeedFunctionPrototypes - XFeedbackState* /* list */ -#endif -); - -extern int XChangeFeedbackControl( -#if NeedFunctionPrototypes - Display* /* display */, - XDevice* /* device */, - unsigned long /* mask */, - XFeedbackControl* /* f */ -#endif -); - -extern int XDeviceBell( -#if NeedFunctionPrototypes - Display* /* display */, - XDevice* /* device */, - XID /* feedbackclass */, - XID /* feedbackid */, - int /* percent */ -#endif -); - -extern KeySym *XGetDeviceKeyMapping( -#if NeedFunctionPrototypes - Display* /* display */, - XDevice* /* device */, -#if NeedWidePrototypes - unsigned int /* first */, -#else - KeyCode /* first */, -#endif - int /* keycount */, - int* /* syms_per_code */ -#endif -); - -extern int XChangeDeviceKeyMapping( -#if NeedFunctionPrototypes - Display* /* display */, - XDevice* /* device */, - int /* first */, - int /* syms_per_code */, - KeySym* /* keysyms */, - int /* count */ -#endif -); - -extern XModifierKeymap *XGetDeviceModifierMapping( -#if NeedFunctionPrototypes - Display* /* display */, - XDevice* /* device */ -#endif -); - -extern int XSetDeviceModifierMapping( -#if NeedFunctionPrototypes - Display* /* display */, - XDevice* /* device */, - XModifierKeymap* /* modmap */ -#endif -); - -extern int XSetDeviceButtonMapping( -#if NeedFunctionPrototypes - Display* /* display */, - XDevice* /* device */, - unsigned char* /* map[] */, - int /* nmap */ -#endif -); - -extern int XGetDeviceButtonMapping( -#if NeedFunctionPrototypes - Display* /* display */, - XDevice* /* device */, - unsigned char* /* map[] */, - unsigned int /* nmap */ -#endif -); - -extern XDeviceState *XQueryDeviceState( -#if NeedFunctionPrototypes - Display* /* display */, - XDevice* /* device */ -#endif -); - -extern int XFreeDeviceState( -#if NeedFunctionPrototypes - XDeviceState* /* list */ -#endif -); - -extern XExtensionVersion *XGetExtensionVersion( -#if NeedFunctionPrototypes - Display* /* display */, - _Xconst char* /* name */ -#endif -); - -extern XDeviceInfo *XListInputDevices( -#if NeedFunctionPrototypes - Display* /* display */, - int* /* ndevices */ -#endif -); - -extern int XFreeDeviceList( -#if NeedFunctionPrototypes - XDeviceInfo* /* list */ -#endif -); - -extern XDevice *XOpenDevice( -#if NeedFunctionPrototypes - Display* /* display */, - XID /* id */ -#endif -); - -extern int XCloseDevice( -#if NeedFunctionPrototypes - Display* /* display */, - XDevice* /* device */ -#endif -); - -extern int XSetDeviceMode( -#if NeedFunctionPrototypes - Display* /* display */, - XDevice* /* device */, - int /* mode */ -#endif -); - -extern int XSetDeviceValuators( -#if NeedFunctionPrototypes - Display* /* display */, - XDevice* /* device */, - int* /* valuators */, - int /* first_valuator */, - int /* num_valuators */ -#endif -); - -extern XDeviceControl *XGetDeviceControl( -#if NeedFunctionPrototypes - Display* /* display */, - XDevice* /* device */, - int /* control */ -#endif -); - -extern int XChangeDeviceControl( -#if NeedFunctionPrototypes - Display* /* display */, - XDevice* /* device */, - int /* control */, - XDeviceControl* /* d */ -#endif -); - -extern int XSelectExtensionEvent( -#if NeedFunctionPrototypes - Display* /* display */, - Window /* w */, - XEventClass* /* event_list */, - int /* count */ -#endif -); - -extern int XGetSelectedExtensionEvents( -#if NeedFunctionPrototypes - Display* /* display */, - Window /* w */, - int* /* this_client_count */, - XEventClass** /* this_client_list */, - int* /* all_clients_count */, - XEventClass** /* all_clients_list */ -#endif -); - -extern int XChangeDeviceDontPropagateList( -#if NeedFunctionPrototypes - Display* /* display */, - Window /* window */, - int /* count */, - XEventClass* /* events */, - int /* mode */ -#endif -); - -extern XEventClass *XGetDeviceDontPropagateList( -#if NeedFunctionPrototypes - Display* /* display */, - Window /* window */, - int* /* count */ -#endif -); - -extern Status XSendExtensionEvent( -#if NeedFunctionPrototypes - Display* /* display */, - XDevice* /* device */, - Window /* dest */, - Bool /* prop */, - int /* count */, - XEventClass* /* list */, - XEvent* /* event */ -#endif -); - -extern XDeviceTimeCoord *XGetDeviceMotionEvents( -#if NeedFunctionPrototypes - Display* /* display */, - XDevice* /* device */, - Time /* start */, - Time /* stop */, - int* /* nEvents */, - int* /* mode */, - int* /* axis_count */ -#endif -); - -extern int XFreeDeviceMotionEvents( -#if NeedFunctionPrototypes - XDeviceTimeCoord* /* events */ -#endif -); - -extern int XFreeDeviceControl( -#if NeedFunctionPrototypes - XDeviceControl* /* control */ -#endif -); - -_XFUNCPROTOEND - -#endif /* _XINPUT_H_ */ - -/* Definitions used by the server, library and client */ - -#ifndef _XI_H_ - -#define _XI_H_ - -#define sz_xGetExtensionVersionReq 8 -#define sz_xGetExtensionVersionReply 32 -#define sz_xListInputDevicesReq 4 -#define sz_xListInputDevicesReply 32 -#define sz_xOpenDeviceReq 8 -#define sz_xOpenDeviceReply 32 -#define sz_xCloseDeviceReq 8 -#define sz_xSetDeviceModeReq 8 -#define sz_xSetDeviceModeReply 32 -#define sz_xSelectExtensionEventReq 12 -#define sz_xGetSelectedExtensionEventsReq 8 -#define sz_xGetSelectedExtensionEventsReply 32 -#define sz_xChangeDeviceDontPropagateListReq 12 -#define sz_xGetDeviceDontPropagateListReq 8 -#define sz_xGetDeviceDontPropagateListReply 32 -#define sz_xGetDeviceMotionEventsReq 16 -#define sz_xGetDeviceMotionEventsReply 32 -#define sz_xChangeKeyboardDeviceReq 8 -#define sz_xChangeKeyboardDeviceReply 32 -#define sz_xChangePointerDeviceReq 8 -#define sz_xChangePointerDeviceReply 32 -#define sz_xGrabDeviceReq 20 -#define sz_xGrabDeviceReply 32 -#define sz_xUngrabDeviceReq 12 -#define sz_xGrabDeviceKeyReq 20 -#define sz_xGrabDeviceKeyReply 32 -#define sz_xUngrabDeviceKeyReq 16 -#define sz_xGrabDeviceButtonReq 20 -#define sz_xGrabDeviceButtonReply 32 -#define sz_xUngrabDeviceButtonReq 16 -#define sz_xAllowDeviceEventsReq 12 -#define sz_xGetDeviceFocusReq 8 -#define sz_xGetDeviceFocusReply 32 -#define sz_xSetDeviceFocusReq 16 -#define sz_xGetFeedbackControlReq 8 -#define sz_xGetFeedbackControlReply 32 -#define sz_xChangeFeedbackControlReq 12 -#define sz_xGetDeviceKeyMappingReq 8 -#define sz_xGetDeviceKeyMappingReply 32 -#define sz_xChangeDeviceKeyMappingReq 8 -#define sz_xGetDeviceModifierMappingReq 8 -#define sz_xSetDeviceModifierMappingReq 8 -#define sz_xSetDeviceModifierMappingReply 32 -#define sz_xGetDeviceButtonMappingReq 8 -#define sz_xGetDeviceButtonMappingReply 32 -#define sz_xSetDeviceButtonMappingReq 8 -#define sz_xSetDeviceButtonMappingReply 32 -#define sz_xQueryDeviceStateReq 8 -#define sz_xQueryDeviceStateReply 32 -#define sz_xSendExtensionEventReq 16 -#define sz_xDeviceBellReq 8 -#define sz_xSetDeviceValuatorsReq 8 -#define sz_xSetDeviceValuatorsReply 32 -#define sz_xGetDeviceControlReq 8 -#define sz_xGetDeviceControlReply 32 -#define sz_xChangeDeviceControlReq 8 -#define sz_xChangeDeviceControlReply 32 - -#define INAME "XInputExtension" - -#define XI_KEYBOARD "KEYBOARD" -#define XI_MOUSE "MOUSE" -#define XI_TABLET "TABLET" -#define XI_TOUCHSCREEN "TOUCHSCREEN" -#define XI_TOUCHPAD "TOUCHPAD" -#define XI_BARCODE "BARCODE" -#define XI_BUTTONBOX "BUTTONBOX" -#define XI_KNOB_BOX "KNOB_BOX" -#define XI_ONE_KNOB "ONE_KNOB" -#define XI_NINE_KNOB "NINE_KNOB" -#define XI_TRACKBALL "TRACKBALL" -#define XI_QUADRATURE "QUADRATURE" -#define XI_ID_MODULE "ID_MODULE" -#define XI_SPACEBALL "SPACEBALL" -#define XI_DATAGLOVE "DATAGLOVE" -#define XI_EYETRACKER "EYETRACKER" -#define XI_CURSORKEYS "CURSORKEYS" -#define XI_FOOTMOUSE "FOOTMOUSE" - -#define Dont_Check 0 -#define XInput_Initial_Release 1 -#define XInput_Add_XDeviceBell 2 -#define XInput_Add_XSetDeviceValuators 3 -#define XInput_Add_XChangeDeviceControl 4 - -#define XI_Absent 0 -#define XI_Present 1 - -#define XI_Initial_Release_Major 1 -#define XI_Initial_Release_Minor 0 - -#define XI_Add_XDeviceBell_Major 1 -#define XI_Add_XDeviceBell_Minor 1 - -#define XI_Add_XSetDeviceValuators_Major 1 -#define XI_Add_XSetDeviceValuators_Minor 2 - -#define XI_Add_XChangeDeviceControl_Major 1 -#define XI_Add_XChangeDeviceControl_Minor 3 - -#define DEVICE_RESOLUTION 1 - -#define NoSuchExtension 1 - -#define COUNT 0 -#define CREATE 1 - -#define NewPointer 0 -#define NewKeyboard 1 - -#define XPOINTER 0 -#define XKEYBOARD 1 - -#define UseXKeyboard 0xFF - -#define IsXPointer 0 -#define IsXKeyboard 1 -#define IsXExtensionDevice 2 - -#define AsyncThisDevice 0 -#define SyncThisDevice 1 -#define ReplayThisDevice 2 -#define AsyncOtherDevices 3 -#define AsyncAll 4 -#define SyncAll 5 - -#define FollowKeyboard 3 -#define RevertToFollowKeyboard 3 - -#define DvAccelNum (1L << 0) -#define DvAccelDenom (1L << 1) -#define DvThreshold (1L << 2) - -#define DvKeyClickPercent (1L<<0) -#define DvPercent (1L<<1) -#define DvPitch (1L<<2) -#define DvDuration (1L<<3) -#define DvLed (1L<<4) -#define DvLedMode (1L<<5) -#define DvKey (1L<<6) -#define DvAutoRepeatMode (1L<<7) - -#define DvString (1L << 0) - -#define DvInteger (1L << 0) - -#define DeviceMode (1L << 0) -#define Relative 0 -#define Absolute 1 - -#define ProximityState (1L << 1) -#define InProximity (0L << 1) -#define OutOfProximity (1L << 1) - -#define AddToList 0 -#define DeleteFromList 1 - -#define KeyClass 0 -#define ButtonClass 1 -#define ValuatorClass 2 -#define FeedbackClass 3 -#define ProximityClass 4 -#define FocusClass 5 -#define OtherClass 6 - -#define KbdFeedbackClass 0 -#define PtrFeedbackClass 1 -#define StringFeedbackClass 2 -#define IntegerFeedbackClass 3 -#define LedFeedbackClass 4 -#define BellFeedbackClass 5 - -#define _devicePointerMotionHint 0 -#define _deviceButton1Motion 1 -#define _deviceButton2Motion 2 -#define _deviceButton3Motion 3 -#define _deviceButton4Motion 4 -#define _deviceButton5Motion 5 -#define _deviceButtonMotion 6 -#define _deviceButtonGrab 7 -#define _deviceOwnerGrabButton 8 -#define _noExtensionEvent 9 - -#define XI_BadDevice 0 -#define XI_BadEvent 1 -#define XI_BadMode 2 -#define XI_DeviceBusy 3 -#define XI_BadClass 4 - -typedef unsigned long XEventClass; - -/******************************************************************* - * - * Extension version structure. - * - */ - -typedef struct { - int present; - short major_version; - short minor_version; -} XExtensionVersion; - -#endif /* _XI_H_ */ -\fP -.DE -.\" print Table of Contents -.if o .bp \" blank page to make count even -.bp 1 -.af PN i -.PX diff --git a/doc/xorg-docs/specs/Xi/porting.ms b/doc/xorg-docs/specs/Xi/porting.ms deleted file mode 100644 index 515b2bf89..000000000 --- a/doc/xorg-docs/specs/Xi/porting.ms +++ /dev/null @@ -1,990 +0,0 @@ -.\" Input Extension Porting Document -.EH '''' -.OH '''' -.EF '''' -.OF '''' -\0 -.sp 10 -.ce 50 -.ps 20 -\fBX11 Input Extension Porting Document -.sp 2 -.ps 12 -X Version 11, Release 6.8 -.sp 16 -.ps 15 -George Sachs\0\0\0\0Hewlett-Packard -.ps 12 -.ce 0 -.bp -\0 -.sp 10 -.ps 9 -.vs 11 -.LP -Copyright \(co 1989, 1990, 1991 by Hewlett-Packard Company -.LP -Permission to use, copy, modify, and distribute this documentation for -any purpose and without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. -Hewlett-Packard makes no representations about the suitability -for any purpose of the information in this document. It is provided "as is" -without express or implied warranty. This document is only a draft standard -of the X Consortium and is therefore subject to change. -.sp 5 -Copyright \(co 1989, 1990, 1991 X Consortium -.LP -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -.LP -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -.LP -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. -.sp 3 -\fIX Window System\fP is a trademark of The Open Group. -.bp 1 -.EH '\fBX Input Extension Porting Document\fP''\fBX11, Release 6.8\fP' -.OH '\fBX Input Extension Porting Document\fP''\fBX11, Release 6.8\fP' -.EF ''\fB % \fP'' -.OF ''\fB % \fP'' -.\" Force the heading counter for level 1 to one -.\" -.\" -.\" -.\" Print table of contents to level 4 headings -.\" -.nr Cl 4 -.\" -.\" Page eject for each level 1 heading -.\" -.nr H1 1 -.nr P 1 -.\" -.\" Define Ch to contain the chapter string. -.\" -.ds Ch Porting Overview -.\" -.\" -.\" Pull in the layout macro package. -.\" -.\" -.tr ~ -This document is intended to aid the process of integrating the -X11 Input Extension into an X server. -.LP -Most of the functionality provided by the input extension is -device- and implementation-independent, and should require no changes. -The functionality is implemented by -routines that typically reside in the server source tree directory -extensions/server/xinput. -This extension includes functions to enable and disable input extension devices, -select input, grab and focus those device, query and change key -and button mappings, and others. The only input extension requirements -for the device-dependent part of X are that the input devices be -correctly initialized and input events from those devices be correctly -generated. Device-dependent X is responsible for reading input data from -the input device hardware and if necessary, reformatting it into X events. -.LP -The process of initializing input extension devices is similar to that used -for the core devices, and is described in the following sections. When -multiple input devices are attached to X server, the choice of which devices -to initially use as the core X pointer and keyboard is left -implementation-dependent. It is also up to each implementation to decide -whether all input devices will be opened by the server during its -initialization and kept open for the life of the server. The alternative is -to open only the X keyboard and X pointer during server initialization, and -open other input devices only when requested by a client to do so. Either -type of implementation is supported by the input extension. -.LP -Input extension events generated by the X server use the same 32-byte xEvent -wire event as do core input events. However, additional information must be -sent for input extension devices, requiring that multiple xEvents be generated -each time data is received from an input extension device. These xEvents are -combined into a single client XEvent by the input extension library. A later -section of this document describes the format and generation of input extension -events. -.NH 1 -Initializing Extension Devices -.LP -Extension input devices are initialized in the same manner as the core -X input devices. Device-Independent X provides functions that can be -called from DDX to initialize these devices. Which functions are called -and when will vary by implementation, and will depend on whether the -implementation opens all the input devices available to X when X is initialized, -or waits until a client requests that a device be opened. -In the simplest case, DDX will open all input devices as part of its -initialization, when the InitInput routine is called. -.NH 2 -Summary of Calling Sequence -.LP -.DS -Device-Independent X | Device-Dependent X --------------------- | ------------------- - | -InitInput --------------> | - do device-specific initialization - | - | - call AddInputDevice (deviceProc,AutoStart) -AddInputDevice | - - creates DeviceIntRec | - - records deviceProc | - - adds new device to | - list of off_devices. | -sets dev->startup=AutoStart| - | - call one of: - | - RegisterPointerDevice (X pointer) - | - processInputProc = ProcessPointerEvents - | - RegisterKeyboardDevice (X keyboard) - | - processInputProc = ProcessKeyboardEvents - | - RegisterOtherDevice (extension device) - | - processInputProc = ProcessOtherEvents - | - | -InitAndStartDevices -----> | - calls deviceProc with parameters - | (DEVICE_INIT, AutoStart) -sets dev->inited = return | - value from deviceProc | - | - | - in deviceProc, do one of: - | - call InitPointerDeviceStruct (X pointer) - | - call InitKeyboardDeviceStruct (X keybd) - | - init extension device by calling some of: - | - InitKeyClassDeviceStruct - | - InitButtonClassDeviceStruct - | - InitValuatorClassDeviceStruct - | - InitValuatorAxisStruct - | - InitFocusClassDeviceStruct - | - InitProximityClassDeviceStruct - | - InitKbdFeedbackClassDeviceStruct - | - InitPtrFeedbackClassDeviceStruct - | - InitLedFeedbackClassDeviceStruct - | - InitStringFeedbackClassDeviceStruct - | - InitIntegerFeedbackClassDeviceStruct - | - InitBellFeedbackClassDeviceStruct - | - init device name and type by: - | - calling MakeAtom with one of the - | predefined names - | - calling AssignTypeAndName - | - | -for each device added | - by AddInputDevice, | - InitAndStartDevices | - calls EnableDevice if | - EnableDevice calls deviceProc with - dev->startup & | (DEVICE_ON, AutoStart) - dev->inited | - | -If deviceProc returns | - core devices are now enabled, extension - Success, EnableDevice | devices are now available to be accessed - move the device from | through the input extension protocol - inputInfo.off_devices | requests. - to inputInfo.devices | -.DE -.NH 2 -Initialization Called From InitInput -.LP -InitInput is the first DDX input entry point called during X server startup. -This routine is responsible for -device- and implementation- specific initialization, and for calling -AddInputDevice to create and initialize the DeviceIntRec structure for each -input device. AddInputDevice is passed the address of a procedure to be called -by the DIX routine InitAndStartDevices when input devices are enabled. -This procedure is expected to perform X initialization for the input device. -.LP -If the device is to be used as the X pointer, DDX should then call -RegisterPointerDevice, passing the DeviceIntRec pointer, -to initialize the device as the X pointer. -.LP -If the device is to be used as the X keyboard, DDX should instead call -RegisterKeyboardDevice to initialize the device as the X keyboard. -.LP -If the device is to be used as an extension device, DDX should instead -call RegisterOtherDevice, passing the DeviceIntPtr returned by -AddInputDevice. -.LP -A sample InitInput implementation is shown below. -.LP -.DS -InitInput(argc,argv) - { - int i, numdevs, ReadInput(); - DeviceIntPtr dev; - LocalDevice localdevs[LOCAL_MAX_DEVS]; - DeviceProc kbdproc, ptrproc, extproc; - - /************************************************************** - * Open the appropriate input devices, determine which are - * available, and choose an X pointer and X keyboard device - * in some implementation-dependent manner. - ***************************************************************/ - - open_input_devices (&numdevs, localdevs); - - /************************************************************** - * Register a WakeupHandler to handle input when it is generated. - ***************************************************************/ - - RegisterBlockAndWakeupHandlers (NoopDDA, ReadInput, NULL); - - /************************************************************** - * Register the input devices with DIX. - ***************************************************************/ - - for (i=0; idevicePrivate = (pointer) &localdevs[i]; - } -.DE -.NH 2 -Initialization Called From InitAndStartDevices -.LP -After InitInput has returned, -InitAndStartDevices is the DIX routine that is called to enable input devices. -It calls the device control routine that was passed to AddInputDevice, -with a mode value of DEVICE_INIT. The action taken by the device control -routine depends on how the device is to be used. If the device is to be -the X pointer, the device control routine should call -InitPointerDeviceStruct to initialize it. If the device is to be the -X keyboard, the device control routine should call -InitKeyboardDeviceStruct. Since input extension devices may support various -combinations of keys, buttons, valuators, and feedbacks, -each class of input that it supports must be initialized. -Entry points are defined by DIX to initialize each of the supported classes of -input, and are described in the following sections. -.LP -A sample device control routine called from InitAndStartDevices is -shown below. -.LP -.DS -Bool extproc (dev, mode) - DeviceIntPtr dev; - int mode; - { - LocalDevice *localdev = (LocalDevice *) dev->devicePrivate; - - switch (mode) - { - case DEVICE_INIT: - if (strcmp(localdev->name, XI_TABLET) == 0) - { - /**************************************************** - * This device reports proximity, has buttons, - * reports two axes of motion, and can be focused. - * It also supports the same feedbacks as the X pointer - * (acceleration and threshold can be set). - ****************************************************/ - - InitButtonClassDeviceStruct (dev, button_count, button_map); - InitValuatorClassDeviceStruct (dev, localdev->n_axes,); - motionproc, MOTION_BUF_SIZE, Absolute); - for (i=0; in_axes; i++) - InitValuatorAxisStruct (dev, i, min_val, max_val, - resolution); - InitFocusClassDeviceStruct (dev); - InitProximityClassDeviceStruct (dev); - InitPtrFeedbackClassDeviceStruct (dev, p_controlproc); - } - else if (strcmp(localdev->name, XI_BUTTONBOX) == 0) - { - /**************************************************** - * This device has keys and LEDs, and can be focused. - ****************************************************/ - - InitKeyClassDeviceStruct (dev, syms, modmap); - InitFocusClassDeviceStruct (dev); - InitLedFeedbackClassDeviceStruct (dev, ledcontrol); - } - else if (strcmp(localdev->name, XI_KNOBBOX) == 0) - { - /**************************************************** - * This device reports motion. - * It can be focused. - ****************************************************/ - - InitValuatorClassDeviceStruct (dev, localdev->n_axes,); - motionproc, MOTION_BUF_SIZE, Absolute); - for (i=0; in_axes; i++) - InitValuatorAxisStruct (dev, i, min_val, max_val, - resolution); - InitFocusClassDeviceStruct (dev); - } - localdev->atom = - MakeAtom(localdev->name, strlen(localdev->name), FALSE); - AssignTypeAndName (dev, localdev->atom, localdev->name); - break; - case DEVICE_ON: - AddEnabledDevice (localdev->file_ds); - dev->on = TRUE; - break; - case DEVICE_OFF: - dev->on = FALSE; - RemoveEnabledDevice (localdev->file_ds); - break; - case DEVICE_CLOSE: - break; - } - } -.DE -.LP -The device control routine is called with a mode value of DEVICE_ON -by the DIX routine EnableDevice, which is called from InitAndStartDevices. -When called with this mode, it should call AddEnabledDevice to cause the -server to begin checking for available input from this device. -.LP ->From InitAndStartDevices, EnableDevice is called for all devices that have -the "inited" and "startup" fields in the DeviceIntRec set to TRUE. The -"inited" field is set by InitAndStartDevices to the value returned by -the deviceproc when called with a mode value of DEVICE_INIT. The "startup" -field is set by AddInputDevice to value of the second parameter (autoStart). -.LP -When the server is first initialized, it should only be checking for input -from the core X keyboard and pointer. One way to accomplish this is to -call AddInputDevice for the core X keyboard and pointer with an -autoStart value equal to TRUE, while calling AddInputDevice for -input extension devices with an autoStart value equal to FALSE. If this is -done, EnableDevice will skip all input extension devices during server -initialization. In this case, -the OpenInputDevice routine should set the "startup" field to TRUE -when called for input extension devices. This will cause ProcXOpenInputDevice -to call EnableDevice for those devices when a client first does an -XOpenDevice request. -.NH 2 -DIX Input Class Initialization Routines -.LP -DIX routines are defined to initialize each of the defined input classes. -The defined classes are: -.RS -.in +5n -.IP "-" 3n -KeyClass - the device has keys. -.IP "-" 3n -ButtonClass - the device has buttons. -.IP "-" 3n -ValuatorClass - the device reports motion data or positional data. -.IP "-" 3n -Proximitylass - the device reports proximity information. -.IP "-" 3n -FocusClass - the device can be focused. -.IP "-" 3n -FeedbackClass - the device supports some kind of feedback -.in -5n -.RE -.LP -DIX routines are provided to initialize the X pointer and keyboard, as in -previous releases of X. During X initialization, InitPointerDeviceStruct -is called to initialize the X pointer, and InitKeyboardDeviceStruct is -called to initialize the X keyboard. There is no -corresponding routine for extension input devices, since they do not all -support the same classes of input. Instead, DDX is responsible for the -initialization of the input classes supported by extension devices. -A description of the routines provided by DIX to perform that initialization -follows. -.NH 3 -InitKeyClassDeviceStruct -.LP -This function is provided to allocate and initialize a KeyClassRec, and -should be called for extension devices that have keys. It is passed a pointer -to the device, and pointers to arrays of keysyms and modifiers reported by -the device. It returns FALSE if the KeyClassRec could not be allocated, -or if the maps for the keysyms and and modifiers could not be allocated. -Its parameters are: -.LP -.DS -Bool -InitKeyClassDeviceStruct(dev, pKeySyms, pModifiers) - DeviceIntPtr dev; - KeySymsPtr pKeySyms; - CARD8 pModifiers[]; -.DE -.LP -The DIX entry point InitKeyboardDeviceStruct calls this routine for the -core X keyboard. It must be called explicitly for extension devices -that have keys. -.NH 3 -InitButtonClassDeviceStruct -.LP -This function is provided to allocate and initialize a ButtonClassRec, and -should be called for extension devices that have buttons. It is passed a -pointer to the device, the number of buttons supported, and a map of the -reported button codes. It returns FALSE if the ButtonClassRec could not be -allocated. Its parameters are: -.LP -.DS -Bool -InitButtonClassDeviceStruct(dev, numButtons, map) - register DeviceIntPtr dev; - int numButtons; - CARD8 *map; -.DE -.LP -The DIX entry point InitPointerDeviceStruct calls this routine for the -core X pointer. It must be called explicitly for extension devices that -have buttons. -.NH 3 -InitValuatorClassDeviceStruct -.LP -This function is provided to allocate and initialize a ValuatorClassRec, and -should be called for extension devices that have valuators. It is passed the -number of axes of motion reported by the device, the address of the motion -history procedure for the device, the size of the motion history buffer, -and the mode (Absolute or Relative) of the device. It returns FALSE if -the ValuatorClassRec could not be allocated. Its parameters are: -.LP -.DS -Bool -InitValuatorClassDeviceStruct(dev, numAxes, motionProc, numMotionEvents, mode) - DeviceIntPtr dev; - int (*motionProc)(); - int numAxes; - int numMotionEvents; - int mode; -.DE -.LP -The DIX entry point InitPointerDeviceStruct calls this routine for the -core X pointer. It must be called explicitly for extension devices that -report motion. -.NH 3 -InitValuatorAxisStruct -.LP -This function is provided to initialize an XAxisInfoRec, and -should be called for core and extension devices that have valuators. -The space for the XAxisInfoRec is allocated by -the InitValuatorClassDeviceStruct function, but is not initialized. -.LP -InitValuatorAxisStruct should be called once for each axis of motion -reported by the device. Each -invocation should be passed the axis number (starting with 0), the -minimum value for that axis, the maximum value for that axis, and the -resolution of the device in counts per meter. If the device reports -relative motion, 0 should be reported as the minimum and maximum values. -InitValuatorAxisStruct has the following parameters: -.DS -InitValuatorAxisStruct(dev, axnum, minval, maxval, resolution) - DeviceIntPtr dev; - int axnum; - int minval; - int maxval; - int resolution; -.DE -.LP -This routine is not called by InitPointerDeviceStruct for the -core X pointer. It must be called explicitly for core and extension devices -that report motion. -.NH 3 -InitFocusClassDeviceStruct -.LP -This function is provided to allocate and initialize a FocusClassRec, and -should be called for extension devices that can be focused. It is passed a -pointer to the device, and returns FALSE if the allocation fails. -It has the following parameter: -.DS -Bool -InitFocusClassDeviceStruct(dev) - DeviceIntPtr dev; -.DE -.LP -The DIX entry point InitKeyboardDeviceStruct calls this routine for the -core X keyboard. It must be called explicitly for extension devices -that can be focused. Whether or not a particular device can be focused -is left implementation-dependent. -.NH 3 -InitProximityClassDeviceStruct -.LP -This function is provided to allocate and initialize a ProximityClassRec, and -should be called for extension absolute pointing devices that report proximity. -It is passed a pointer to the device, and returns FALSE if the allocation fails. -It has the following parameter: -.DS -Bool -InitProximityClassDeviceStruct(dev) - DeviceIntPtr dev; -.DE -.NH 3 -Initializing Feedbacks -.LP -.NH 4 -InitKbdFeedbackClassDeviceStruct -.LP -This function is provided to allocate and initialize a KbdFeedbackClassRec, and -may be called for extension devices that support some or all of the -feedbacks that the core keyboard supports. It is passed a -pointer to the device, a pointer to the procedure that sounds the bell, -and a pointer to the device control procedure. -It returns FALSE if the allocation fails, and has the following parameters: -.DS -Bool -InitKbdFeedbackClassDeviceStruct(dev, bellProc, controlProc) - DeviceIntPtr dev; - void (*bellProc)(); - void (*controlProc)(); -.DE -The DIX entry point InitKeyboardDeviceStruct calls this routine for the -core X keyboard. It must be called explicitly for extension devices -that have the same feedbacks as a keyboard. Some feedbacks, such as LEDs and -bell, can be supported either with a KbdFeedbackClass or with BellFeedbackClass -and LedFeedbackClass feedbacks. -.NH 4 -InitPtrFeedbackClassDeviceStruct -.LP -This function is provided to allocate and initialize a PtrFeedbackClassRec, and -should be called for extension devices that allow the setting of acceleration -and threshold. It is passed a pointer to the device, -and a pointer to the device control procedure. -It returns FALSE if the allocation fails, and has the following parameters: -.DS -Bool -InitPtrFeedbackClassDeviceStruct(dev, controlProc) - DeviceIntPtr dev; - void (*controlProc)(); -.DE -.LP -The DIX entry point InitPointerDeviceStruct calls this routine for the -core X pointer. It must be called explicitly for extension devices -that support the setting of acceleration and threshold. -.NH 4 -InitLedFeedbackClassDeviceStruct -.LP -This function is provided to allocate and initialize a LedFeedbackClassRec, and -should be called for extension devices that have LEDs. -It is passed a pointer to the device, -and a pointer to the device control procedure. -It returns FALSE if the allocation fails, and has the following parameters: -.DS -Bool -InitLedFeedbackClassDeviceStruct(dev, controlProc) - DeviceIntPtr dev; - void (*controlProc)(); -.DE -.LP -Up to 32 LEDs per feedback can be supported, and a device may have -multiple feedbacks of the same type. -.NH 4 -InitBellFeedbackClassDeviceStruct -.LP -This function is provided to allocate and initialize a BellFeedbackClassRec, -and should be called for extension devices that have a bell. -It is passed a pointer to the device, -and a pointer to the device control procedure. -It returns FALSE if the allocation fails, and has the following parameters: -.DS -Bool -InitBellFeedbackClassDeviceStruct(dev, bellProc, controlProc) - DeviceIntPtr dev; - void (*bellProc)(); - void (*controlProc)(); -.DE -.NH 4 -InitStringFeedbackClassDeviceStruct -.LP -This function is provided to allocate and initialize a StringFeedbackClassRec, -and should be called for extension devices that have a display upon which a -string can be displayed. -It is passed a pointer to the device, -and a pointer to the device control procedure. -It returns FALSE if the allocation fails, and has the following parameters: -.DS -Bool -InitStringFeedbackClassDeviceStruct(dev, controlProc, max_symbols, - num_symbols_supported, symbols) - DeviceIntPtr dev; - void (*controlProc)(); - int max_symbols: - int num_symbols_supported; - KeySym *symbols; -.DE -.NH 4 -InitIntegerFeedbackClassDeviceStruct -.LP -This function is provided to allocate and initialize an -IntegerFeedbackClassRec, -and should be called for extension devices that have a display upon which an -integer can be displayed. -It is passed a pointer to the device, -and a pointer to the device control procedure. -It returns FALSE if the allocation fails, and has the following parameters: -.DS -Bool -InitIntegerFeedbackClassDeviceStruct(dev, controlProc) - DeviceIntPtr dev; - void (*controlProc)(); -.DE -.NH 2 -Initializing The Device Name And Type -.LP -The device name and type can be initialized by calling AssignTypeAndName -with the following parameters: -.DS -void -AssignTypeAndName(dev, type, name) - DeviceIntPtr dev; - Atom type; - char *name; -.DE -.LP -This will allocate space for the device name and copy the name that was passed. -The device type can be obtained by calling MakeAtom with one of the names -defined for input devices. MakeAtom has the following parameters: -.DS -Atom -MakeAtom(name, len, makeit) - char *name; - int len; - Bool makeit; -.DE -.LP -Since the atom was already made when the input extension was initialized, the -value of makeit should be FALSE; -.NH 1 -Closing Extension Devices -.LP -The DisableDevice entry point is provided by DIX to disable input devices. -It calls the device control routine for the specified -device with a mode value of DEVICE_OFF. The device control routine should -call RemoveEnabledDevice to stop the server from checking for input from -that device. -.LP -DisableDevice is not called by any input extension routines. It can be -called from the CloseInputDevice routine, which is called by -ProcXCloseDevice when a client makes an XCloseDevice request. If -DisableDevice is called, it should only be called when the last client -using the extension device has terminated or called XCloseDevice. -.NH 1 -Implementation-Dependent Routines -.LP -Several input extension protocol requests have -implementation-dependent entry points. Default routines -are defined for these entry points and contained in the source -file extensions/server/xinput/xstubs.c. Some implementations may -be able to use the default routines without change. -The following sections describe each of these routines. -.NH 2 -AddOtherInputDevices -.LP -AddOtherInputDevice is called from ProcXListInputDevices as a result of -an XListInputDevices protocol request. It may be needed by -implementations that do not open extension input devices until requested -to do so by some client. These implementations may not initialize -all devices when the X server starts up, because some of those devices -may be in use. Since the XListInputDevices -function only lists those devices that have been initialized, -AddOtherInputDevices is called to give DDX a chance to -initialize any previously unavailable input devices. -.LP -A sample AddOtherInputDevices routine might look like the following: -.DS -void -AddOtherInputDevices () - { - DeviceIntPtr dev; - int i; - - for (i=0; ipublic.devicePrivate = local_dev[i]; - RegisterOtherDevice (dev); - dev->inited = ((*dev->deviceProc)(dev, DEVICE_INIT) == Success); - } - } - } -.DE -.LP -The default AddOtherInputDevices routine in xstubs.c does nothing. -If all input extension devices are initialized when the server -starts up, it can be left as a null routine. -.NH 2 -OpenInputDevice -.LP -Some X server implementations open all input devices when the server -is initialized and never close them. Other implementations may open only -the X pointer and keyboard devices during server initialization, -and open other input devices only when some client makes an -XOpenDevice request. This entry point is for the latter type of -implementation. -.LP -If the physical device is not already open, it can be done in this routine. -In this case, the server must keep track of the fact that one or more clients -have the device open, and physically close it when the last client that has -it open makes an XCloseDevice request. -.LP -The default implementation is to do nothing (assume all input devices -are opened during X server initialization and kept open). -.NH 2 -CloseInputDevice -.LP -Some implementations may close an input device when the last client -using that device requests that it be closed, or terminates. -CloseInputDevice is called from ProcXCloseDevice when a client -makes an XCloseDevice protocol request. -.LP -The default implementation is to do nothing (assume all input devices -are opened during X server initialization and kept open). -.NH 2 -SetDeviceMode -.LP -Some implementations support input devices that can report -either absolute positional data or relative motion. The XSetDeviceMode -protocol request is provided to allow DDX to change the current mode of -such a device. -.LP -The default implementation is to always return a BadMatch error. If the -implementation does not support any input devices that are capable of -reporting both relative motion and absolute position information, the -default implementation may be left unchanged. -.NH 2 -SetDeviceValuators -.LP -Some implementations support input devices that allow their valuators to be -set to an initial value. The XSetDeviceValuators -protocol request is provided to allow DDX to set the valuators of -such a device. -.LP -The default implementation is to always return a BadMatch error. If the -implementation does not support any input devices that are allow their -valuators to be set, the default implementation may be left unchanged. -.NH 2 -ChangePointerDevice -.LP -The XChangePointerDevice protocol request is provided to change which device is -used as the X pointer. Some implementations may maintain information -specific to the X pointer in the private data structure pointed to by -the DeviceIntRec. ChangePointerDevice is called to allow such -implementations to move that information to the new pointer device. -The current location of the X cursor is an example of the type of -information that might be affected. -.LP -The DeviceIntRec structure that describes the X pointer device does not -contain a FocusRec. If the device that has been made into the new X pointer -was previously a device that could be focused, ProcXChangePointerDevice will -free the FocusRec associated with that device. -.LP -If the server implementation desires to allow clients to focus the old pointer -device (which is now accessible through the input extension), it should call -InitFocusClassDeviceStruct for the old pointer device. -.LP -The XChangePointerDevice protocol request also allows the client -to choose which axes of the new pointer device are used to move -the X cursor in the X- and Y- directions. If the axes are different -than the default ones, the server implementation should record that fact. -.LP -If the server implementation supports input devices with valuators that -are not allowed to be used as the X pointer, they should be screened out -by this routine and a BadDevice error returned. -.LP -The default implementation is to do nothing. -.NH 2 -ChangeKeyboardDevice -.LP -The XChangeKeyboardDevice protocol request is provided to change which device is -used as the X keyboard. Some implementations may maintain information -specific to the X keyboard in the private data structure pointed to by -the DeviceIntRec. ChangeKeyboardDevice is called to allow such -implementations to move that information to the new keyboard device. -.LP -The X keyboard device can be focused, and the DeviceIntRec that describes -that device has a FocusRec. If the device that has been made into the new X -keyboard did not previously have a FocusRec, -ProcXChangeKeyboardDevice will allocate one for it. -.LP -If the implementation does not want clients to be able to focus the old X -keyboard (which has now become available as an input extension device) -it should call DeleteFocusClassDeviceStruct to free the FocusRec. -.LP -If the implementation supports input devices with keys that are not allowed -to be used as the X keyboard, they should be checked for here, and a -BadDevice error returned. -.LP -The default implementation is to do nothing. -.NH 1 -Input Extension Events -.LP -Events accessed through the input extension are analogous to the core input -events, but have different event types. They are of types -\fBDeviceKeyPress\fP, \fBDeviceKeyRelease\fP, \fBDeviceButtonPress\fP, -\fBDeviceButtonRelease\fP, \fBDeviceDeviceMotionNotify\fP, -\fBDeviceProximityIn\fP, \fBDeviceProximityOut\fP, and \fBDeviceValuator\fP. -These event types are not constants. Instead, they are external integers -defined by the input extension. Their actual values will depend on which -extensions are supported by a server, and the order in which they are -initialized. -.LP -The data structures that define these -events are defined in the file \fBextensions/include/XIproto.h\fP. Other -input extension constants needed by DDX are defined in the file -\fBextensions/include/XI.h\fP. -.LP -Some events defined by the input extension contain more information than can -be contained in the 32-byte xEvent data structure. To send this information -to clients, DDX must generate two or more 32-byte wire events. The following -sections describe the contents of these events. -.NH 2 -Device Key Events -.LP -\fBDeviceKeyPresss\fP events contain all the information that is contained in -a core \fBKeyPress\fP event, and also the following additional information: -.LP -.RS -.in +5n -.IP "-" 3n -deviceid - the identifier of the device that generated the event. -.IP "-" 3n -device_state - the state of any modifiers on the device that generated the event -.IP "-" 3n -num_valuators - the number of valuators reported in this event. -.IP "-" 3n -first_valuator - the first valuator reported in this event. -.IP "-" 3n -valuator0 through valuator5 - the values of the valuators. -.in -5n -.RE -.LP -In order to pass this information to the input extension library, two 32-byte -wire events must be generated by DDX. The first has an event type of -\fBDeviceKeyPress\fP, and the second has an event type of \fPDeviceValuator\fP. -.LP -The following code fragment shows how the two wire events could be initialized: -.LP -.DS - extern int DeviceKeyPress; - DeviceIntPtr dev; - xEvent xE[2]; - CARD8 id, num_valuators; - INT16 x, y, pointerx, pointery; - Time timestamp; - deviceKeyButtonPointer *xev = (deviceKeyButtonPointer *) xE; - deviceValuator *xv; - - xev->type = DeviceKeyPress; /* defined by input extension */ - xev->detail = keycode; /* key pressed on this device */ - xev->time = timestamp; /* same as for core events */ - xev->rootX = pointerx; /* x location of core pointer */ - xev->rootY = pointery; /* y location of core pointer */ - - /******************************************************************/ - /* */ - /* The following field does not exist for core input events. */ - /* It contains the device id for the device that generated the */ - /* event, and also indicates whether more than one 32-byte wire */ - /* event is being sent. */ - /* */ - /******************************************************************/ - - xev->deviceid = dev->id | MORE_EVENTS; /* sending more than 1*/ - - /******************************************************************/ - /* Fields in the second 32-byte wire event: */ - /******************************************************************/ - - xv = (deviceValuator *) ++xev; - xv->type = DeviceValuator; /* event type of second event */ - xv->deviceid = dev->id; /* id of this device */ - xv->num_valuators = 0; /* no valuators being sent */ - xv->device_state = 0; /* will be filled in by DIX */ -.DE -.NH 2 -Device Button Events -.LP -\fBDeviceButton\fP events contain all the information that is contained in -a core button event, and also the same additional information that a -\fBDeviceKey\fP event contains. -.NH 2 -Device Motion Events -.LP -\fBDeviceMotion\fP events contain all the information that is contained in -a core motion event, and also additional valuator information. At least -two wire events are required to contain this information. -The following code fragment shows how the two wire events could be initialized: -.LP -.DS - extern int DeviceMotionNotify; - DeviceIntPtr dev; - xEvent xE[2]; - CARD8 id, num_valuators; - INT16 x, y, pointerx, pointery; - Time timestamp; - deviceKeyButtonPointer *xev = (deviceKeyButtonPointer *) xE; - deviceValuator *xv; - - xev->type = DeviceMotionNotify; /* defined by input extension */ - xev->detail = keycode; /* key pressed on this device */ - xev->time = timestamp; /* same as for core events */ - xev->rootX = pointerx; /* x location of core pointer */ - xev->rootY = pointery; /* y location of core pointer */ - - /******************************************************************/ - /* */ - /* The following field does not exist for core input events. */ - /* It contains the device id for the device that generated the */ - /* event, and also indicates whether more than one 32-byte wire */ - /* event is being sent. */ - /* */ - /******************************************************************/ - - xev->deviceid = dev->id | MORE_EVENTS; /* sending more than 1*/ - - /******************************************************************/ - /* Fields in the second 32-byte wire event: */ - /******************************************************************/ - - xv = (deviceValuator *) ++xev; - xv->type = DeviceValuator; /* event type of second event */ - xv->deviceid = dev->id; /* id of this device */ - xv->num_valuators = 2; /* 2 valuators being sent */ - xv->first_valuator = 0; /* first valuator being sent */ - xv->device_state = 0; /* will be filled in by DIX */ - xv->valuator0 = x; /* first axis of this device */ - xv->valuator1 = y; /* second axis of this device */ -.DE -.LP -Up to six axes can be reported in the deviceValuator event. If the device -is reporting more than 6 axes, additional pairs of DeviceMotionNotify and -DeviceValuator events should be sent, with the first_valuator field -set correctly. -.NH 2 -Device Proximity Events -.LP -Some input devices that report absolute positional information, such as -graphics tablets and touchscreens, may report proximity events. -\fBProximityIn\fP -events are generated when a pointing device like a stylus, or in the case -of a touchscreen, the user's finger, comes into close proximity with the -surface of the input device. \fBProximityOut\fP events are generated when -the stylus or finger leaves the proximity of the input devices surface. -.LP -\fBProximity\fP events contain almost the same information as button events. -The event type is \fBProximityIn\fP or \fBProximityOut\fP, and there is no -detail information. -.bp -.\" .TC diff --git a/doc/xorg-docs/specs/Xi/protocol.ms b/doc/xorg-docs/specs/Xi/protocol.ms deleted file mode 100644 index 8a5da050d..000000000 --- a/doc/xorg-docs/specs/Xi/protocol.ms +++ /dev/null @@ -1,3157 +0,0 @@ -.\" $Xorg: protocol.ms,v 1.3 2000/08/17 19:42:40 cpqbld Exp $ -.\" $XdotOrg: xc/doc/specs/Xi/protocol.ms,v 1.2 2004/04/23 18:42:18 eich Exp $ -.\" Input Extension -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.ps 11 -.nr PS 11 -\0 -.sp 10 -.ce 500 -.ps 20 -\fBX11 Input Extension Protocol Specification -.ps 12 -.sp 2 -Version 1.0 -.sp 1 -X Consortium Standard -.sp 1 -X Version 11, Release 6.8 -.sp 16 -.ps 15 -\fBMark Patrick\0\0\0\0Ardent Computer -.sp 1 -\fBGeorge Sachs\0\0\0\0Hewlett-Packard -.ps 12 -.ce 0 -.bp -\0 -.sp 10 -.fi -.LP -Copyright \(co 1989, 1990, 1991 by Hewlett-Packard Company and Ardent Computer -.LP -Permission to use, copy, modify, and distribute this documentation for -any purpose and without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. -Ardent and Hewlett-Packard make no representations about the suitability -for any purpose of the information in this document. It is provided "as is" -without express or implied warranty. -.sp 5 -Copyright \(co 1989, 1990, 1991, 1992 X Consortium -.LP -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -.LP -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -.LP -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. -.sp 3 -\fIX Window System\fP is a trademark of The Open Group. -.ps -.vs -.bp 1 -.EH '\fBX Input Extension Protocol Specification\fP''\fBX11, Release 6.8\fP' -.OH '\fBX Input Extension Protocol Specification\fP''\fBX11, Release 6.8\fP' -.EF ''\fB\\\\n(PN\fP'' -.OF ''\fB\\\\n(PN\fP'' -.\" Force the heading counter for level 1 to one -.\" -.nr Ej 1 -.\" -.\" -.\" Print table of contents to level 4 headings -.\" -.nr Cl 4 -.\" -.\" Page eject for each level 1 heading -.\" -.nr H1 1 -.if \n(GS .nr nh*hl 1 -.nr P 1 -.\" -.\" Define Ch to contain the chapter string. -.\" -.ds Ch Input Extension Overview -.\" -.\" -.\" Pull in the layout macro package. -.\" -.\" -.tr ~ -.NH 2 -Input Extension Overview -.XS -\*(SN Input Extension Overview -.XE -.LP -This document defines an extension to the X11 protocol to support -input devices other than the core X keyboard and pointer. -An accompanying document defines a corresponding extension to Xlib -(similar extensions for languages other than C are anticipated). -This first section gives an overview of the input extension. The -next section defines the new protocol requests defined by the extension. -We conclude with a description of the new input events generated by -the additional input devices. -.NH 2 -Design Approach -.XS -\*(SN Design Approach -.XE -.LP -The design approach of the extension is to define requests -and events analogous to the core requests and events. This allows -extension input devices to be individually distinguishable from each other -and from the core input devices. These requests and events make use -of a device identifier and support the reporting of n-dimensional motion -data as well as other data that is not reportable via the core -input events. -.NH 2 -Core Input Devices -.XS -\*(SN Core Input Devices -.XE -.LP -The X server core protocol supports two input devices: a pointer and a -keyboard. The pointer device has two major functions. -First, it may be used to generate motion information -that client programs can detect. Second, it may also be used to indicate the -current location and focus of the X keyboard. To accomplish this, the server -echoes a cursor at the current position of the X pointer. Unless the X -keyboard has been explicitly focused, this cursor also shows the current -location and focus of the X keyboard. -.LP -The X keyboard is used to generate input that client programs can detect. -.LP -The X keyboard and X pointer are referred to in this document as -the \fIcore devices\fP, and the input -events they generate (\fBKeyPress\fP, \fBKeyRelease\fP, \fBButtonPress\fP, -\fBButtonRelease\fP, and -\fBMotionNotify\fP) are known as the \fIcore input events\fP. All other -input devices are referred to as \fIextension input devices\fP and the -input events they generate are referred to as \fIextension input events\fP. -.NT -This input extension does not change the behavior or functionality of the -core input devices, core events, or core protocol requests, with the -exception of the core grab requests. These requests may affect the -synchronization of events from extension devices. See the explanation -in the section titled "Event Synchronization and Core Grabs". -.NE -.LP -Selection of the physical devices to be initially used by the server as the -core devices is left implementation-dependent. Requests are defined that -allow client programs to change which physical devices are used as the -core devices. -.NH 2 -Extension Input Devices -.XS -\*(SN Extension Input Devices -.XE -.LP -The input extension controls access to input devices other than the X keyboard -and X pointer. It allows client programs to select input from these devices -independently from each other and independently from the core devices. -.LP -A client that wishes to access a specific device must first determine -whether that device is connected to the X server. This is done through the -\fBListInputDevices\fP request, which will return a list of all devices that -can be opened by the X server. A client can then open one or more of these -devices using the \fBOpenDevice\fP request, specify what events they are -interested in receiving, and receive and process input events from extension -devices in the same way as events from the X keyboard and X pointer. -Input events from these devices are of extension types (\fBDeviceKeyPress\fP, -\fBDeviceKeyRelease\fP, \fBDeviceButtonPress\fP, \fBDeviceButtonRelease\fP, -\fBDeviceMotionNotify\fP, etc.) and contain a device identifier so that events -of the same type coming from different input devices can be distinguished. -.LP -Any kind of input device may be used as an extension input device. -Extension input devices may have 0 or more keys, 0 or more buttons, -and may report 0 or more axes of motion. Motion may be reported -as relative movements from a previous position or as an absolute -position. All valuators reporting motion information for a given -extension input device must report the same kind of motion information -(absolute or relative). -.LP -This extension is designed to accommodate new types of input devices that -may be added in the future. The protocol requests that refer to -specific characteristics of input devices organize that information -by \fBinput classes\fP. Server implementors may add new -classes of input devices without changing the protocol requests. -Input classes are unique numbers registered with the X Consortium. -Each extension input device may support multiple input classes. -.LP -All extension input devices are treated like the core X keyboard in -determining their location and focus. The server does not track the -location of these devices on an individual basis, and therefore -does not echo a cursor to indicate their current location. -Instead, their location is determined by the location of the core X pointer. -Like the core X keyboard, some may be explicitly focused. If they are -not explicitly focused, their focus is determined by the location of the -core X pointer. -.LP -Input events reported by the server to a client are of fixed size (32 bytes). -In order to represent the change in state of an input device the extension -may need to generate a sequence of input events. A client side library -(such as Xlib) will typically take these raw input events and format -them into a form more convenient to the client. -.NH 3 -Event Classes -.XS -\*(SN Event Classes -.XE -.LP -In the core protocol a client registers interest in receiving certain -input events directed to a window by modifying that window's event-mask. -Most of the bits in the event mask are already used to specify interest -in core X events. The input extension specifies a different mechanism by which -a client can express interest in events generated by this extension. -.LP -When a client opens a extension input device via the \fBOpenDevice\fP request, -an \fBXDevice\fP structure is returned. Macros are provided that extract -32-bit numbers called \fBevent classes\fP from that structure, that a client -can use to register interest in extension events via the -\fBSelectExtensionEvent\fP request. The event class combines the desired -event type and device id, and may be thought of as the equivalent of core -event masks. -.NH 3 -Input Classes -.XS -\*(SN Input Classes -.XE -.LP -Some of the input extension requests divide input devices into classes -based on their functionality. This is intended to allow new classes of input -devices to be defined at a later time without changing the semantics of -these requests. The following input device classes are currently -defined: -.RS -.in +5n -.IP "\fBKEY\fP" -The device reports key events. -.IP "\fBBUTTON\fP" -The device reports button events. -.IP "\fBVALUATOR\fP" -The device reports valuator data in motion events. -.IP "\fBPROXIMITY\fP" -The device reports proximity events. -.IP "\fBFOCUS\fP" -The device can be focused and reports focus events. -.IP "\fBFEEDBACK\fP" -The device supports feedbacks. -.IP "\fBOTHER\fP" -The \fBChangeDeviceNotify\fP, \fBDeviceMappingNotify\fP, and -\fBDeviceStateNotify\fP macros may be invoked passing the \fBXDevice\fP -structure returned for this device. -.in -5n -.RE -.LP -Each extension input device may support multiple input classes. -Additional classes may be added in the future. -Requests that support multiple input classes, such as the -\fBListInputDevices\fP function that lists all available input devices, -organize the data they return by input class. Client programs that -use these requests should not access data unless it matches a -class defined at the time those clients were compiled. In this way, -new classes can be added without forcing existing clients that use -these requests to be recompiled. -.NH 1 -Requests -.XS -\*(SN Requests -.XE -.LP -Extension input devices are accessed by client programs through the -use of new protocol requests. This section summarizes the new requests -defined by this extension. The syntax and type definitions used below -follow the notation used for the X11 core protocol. -.NH 2 -Getting the Extension Version -.XS -\*(SN Getting the Extension Version -.XE -.LP -The \fBGetExtensionVersion\fP request returns version information about -the input extension. -.sp 1.5 -GetExtensionVersion -.in +.5i -name: STRING -.in -.5i -=> -.in +.5i -.br -present: BOOL -.br -protocol-major-version: CARD16 -.br -protocol-minor-version: CARD16 -.br -.sp -The protocol version numbers returned indicate the version of the input -extension supported by the target X server. The version numbers can be -compared to constants defined in the header file \fBXI.h\fP. Each version is -a superset of the previous versions. -.NH 2 -Listing Available Devices -.XS -\*(SN Listing Available Devices -.XE -.LP -A client that wishes to access a specific device must first determine -whether that device is connected to the X server. This is done through the -\fBListInputDevices\fP request, which will return a list of all devices that -can be opened by the X server. -.sp 1.5 -ListInputDevices -.br -=> -.in +.5i -.br -input-devices: LISTofDEVICEINFO -.br -.sp -.in -.5i -where -.in +.5i -.br -.TS -l lw(4i). -T{ -DEVICEINFO: -T} T{ -[type: ATOM -.br -\ id: CARD8 -.br -\ num_classes: CARD8 -.br -\ use: {IsXKeyboard, IsXPointer, IsExtensionDevice} -.br -\ info: LISTofINPUTINFO -.br -\ name: STRING8] -T} -.sp -T{ -INPUTINFO: -T} T{ -{KEYINFO, BUTTONINFO, VALUATORINFO} -T} -.sp -T{ -KEYINFO: -T} T{ -[class: CARD8 -.br -\ length: CARD8 -.br -\ min-keycode: KEYCODE -.br -\ max-keycode: KEYCODE -.br -\ num-keys: CARD16] -T} -.sp -T{ -BUTTONINFO: -T} T{ -.br -[class: CARD8 -.br -\ length: CARD8 -.br -\ num-buttons: CARD16] -T} -.sp -T{ -VALUATORINFO: -T} T{ -[class: CARD8 -.br -\ length: CARD8 -.br -\ num_axes: CARD8 -.br -\ mode: SETofDEVICEMODE -.br -\ motion_buffer_size: CARD32 -.br -\ axes: LISTofAXISINFO] -T} -.sp -T{ -AXISINFO: -T} T{ -[resolution: CARD32 -.br -\ min-val: CARD32 -.br -\ max-val: CARD32] -T} -.sp -T{ -DEVICEMODE: -T} T{ -{Absolute, Relative} -T} -.TE -.br -Errors: None -.in -.5i -.sp 1.5 -This request returns a list of all devices that can be opened by the X -server, -including the core X keyboard and X pointer. Some implementations may open -all input devices as part of X initialization, while others may not open -an input device until requested to do so by a client program. -.LP -.IP \(bu 3n -The information returned for each device is as follows: -.LP -The \fBtype\fP field is of type \fBAtom\fP and indicates the nature of the -device. Clients may determine device types by invoking the \fBXInternAtom\fP -request passing one of the names defined in the header file \fBXI.h\fP. The -following names have been defined to date: -.DS -\fBMOUSE\fP -\fBTABLET\fP -\fBKEYBOARD\fP -\fBTOUCHSCREEN\fP -\fBTOUCHPAD\fP -\fBBUTTONBOX\fP -\fBBARCODE\fP -\fBKNOB_BOX\fP -\fBTRACKBALL\fP -\fBQUADRATURE\fP -\fBSPACEBALL\fP -\fBDATAGLOVE\fP -\fBEYETRACKER\fP -\fBCURSORKEYS\fP -\fBFOOTMOUSE\fP -\fBID_MODULE\fP -\fBONE_KNOB\fP -\fBNINE_KNOB\fP -.DE -.LP -The \fBid\fP is a small cardinal value in the range 0-128 that uniquely -identifies the device. It is assigned to the device when it is initialized by -the server. Some implementations may not open an input device until requested -by a client program, and may close the device when the last client accessing -it requests that it be closed. -If a device is opened by a client program via \fBXOpenDevice\fP, -then closed via \fBXCloseDevice\fP, then opened again, it is not guaranteed -to have the same id after the second open request. -.LP -The \fBnum_classes\fP field is a small cardinal value in the range 0-255 -that specifies the number of input classes supported by the device for -which information is returned by \fBListInputDevices\fP. Some input classes, -such as class \fBFocus\fP and class \fBProximity\fP do not have any information -to be returned by \fBListInputDevices\fP. -.LP -The \fBuse\fP field specifies how the device is currently being used. If the -value is \fBIsXKeyboard\fP, the device is currently being used as the -X keyboard. If the value is \fBIsXPointer\fP, the device is currently -being used as the X pointer. If the value is \fBIsXExtensionDevice\fP, -the device is available for use as an extension device. -.LP -The \fBname\fP field contains a pointer to a null-terminated string that -corresponds to one of the defined device types. -.IP \(bu 3n -\fBInputInfo\fP is one of: \fBKeyInfo\fP, \fBButtonInfo\fP or -\fBValuatorInfo\fP. The first two fields are common to all three: -.LP -The \fBclass\fP field is a cardinal value in the range 0-255. It uniquely -identifies the class of input for which information is returned. -.LP -The \fBlength\fP field is a cardinal value in the range 0-255. It specifies -the number of bytes of data that are contained in this input class. The -length includes the class and length fields. -.LP -The remaining information returned for input class \fBKEYCLASS\fP is as follows: -.LP -\fBmin_keycode\fP is of type KEYCODE. It specifies the minimum keycode that -the device will report. The minimum keycode will not be smaller than 8. -.LP -\fBmax_keycode\fP is of type KEYCODE. It specifies the maximum keycode that -the device will report. The maximum keycode will not be larger than 255. -.LP -\fBnum_keys\fP is a cardinal value that specifies the number of keys that the -device has. -.LP -The remaining information returned for input class \fBBUTTONCLASS\fP is as -follows: -.LP -\fBnum_buttons\fP is a cardinal value that specifies the number of buttons -that the device has. -.LP -The remaining information returned for input class \fBVALUATORCLASS\fP is as -follows: -.LP -\fBmode\fP is a constant that has one of the following values: \fBAbsolute\fP -or \fBRelative\fP. Some devices allow the mode to be changed dynamically -via the \fBSetDeviceMode\fP request. -.LP -\fBmotion_buffer_size\fP is a cardinal number that specifies the number of -elements that can be contained in the motion history buffer for the device. -.LP -The \fBaxes\fP field contains a pointer to an AXISINFO struture. -.IP \(bu 3n -The information returned for each axis reported by the device is: -.LP -The \fBresolution\fP is a cardinal value in counts/meter. -.LP -The \fBmin_val\fP field is a cardinal value in that contains the minimum -value the device reports for this axis. For devices whose mode is -\fBRelative\fP, the min_val field will contain 0. -.LP -The \fBmax_val\fP field is a cardinal value in that contains the maximum -value the device reports for this axis. For devices whose mode is -\fBRelative\fP, the max_val field will contain 0. -.NH 2 -Enabling Devices -.XS -\*(SN Enabling Devices -.XE -.LP -Client programs that wish to access an extension device must request that -the server open that device. This is done via the \fBOpenDevice\fP -request. -.sp 1.5 -OpenDevice -.in +.5i -id: CARD8 -.in -.5i -=> -.in +.5i -.br -.TS -l lw(4i). -T{ -DEVICE: -T} T{ -[device_id: XID -.br -\ num_classes: INT32 -.br -\ classes: LISTofINPUTCLASSINFO] -T} -.sp -T{ -INPUTCLASSINFO: -T} T{ -[input_class: CARD8 -.br -\ event_type_base: CARD8] -T} -.TE -.sp -Errors: Device -.in -.5i -.sp 1.5 -.LP -This request returns the event classes to be used by the client to indicate -which events the client program wishes to receive. Each input class -may report several event classes. For example, input class \fBKeys\fP reports -\fBDeviceKeyPress\fP and \fBDeviceKeyRelease\fP event classes. Input classes -are unique numbers registered with the X Consortium. Input class -\fBOther\fP exists -to report event classes that are not specific to any one input class, -such as \fBDeviceMappingNotify\fP, \fBChangeDeviceNotify\fP, and -\fBDeviceStateNotify\fP. -.LP -.IP \(bu 3n -The information returned for each device is as follows: -.LP -The \fBdevice_id\fP is a number that uniquely identifies the device. -.LP -The \fBnum_classes\fP field contains the number of input classes supported -by this device. -.LP -.IP \(bu 3n -For each class of input supported by the device, -the \fBInputClassInfo\fP structure contains the following information: -.LP -The \fBinput_class\fP is a small cardinal number that identifies the class -of input. -.LP -The \fBevent_type_base\fP is a small cardinal number that specifies the -event type of one of the events reported by this input class. This information -is not directly used by client programs. Instead, the \fBDevice\fP is used -by macros that return extension event types and event classes. This is -described in the section of this document entitled "Selecting Extension -Device Events". -.LP -Before it exits, -the client program should explicitly request that the server close -the device. This is done via the \fBCloseDevice\fP request. -.LP -A client may open the same extension device more than once. Requests -after the first successful one return an additional \fBXDevice\fP structure -with the same information as the first, but otherwise have no effect. -A single \fBCloseDevice\fP request will terminate that client's access to -the device. -.LP -Closing a device releases any active or passive grabs the requesting client -has established. If the device is frozen only by an active grab of the -requesting client, the queued events are released when the client terminates. -.LP -If a client program terminates without closing a device, the server will -automatically close that device on behalf of the client. This does not -affect any other clients that may be accessing that device. -.LP -.sp 1.5 -CloseDevice -.in +.5i -device: DEVICE -.br -.sp -Errors: Device -.br -.in -.5i -.sp 1.5 -.NH 2 -Changing The Mode Of A Device -.XS -\*(SN Changing The Mode Of A Device -.XE -.LP -Some devices are capable of reporting either relative or absolute motion -data. To change the mode of a device from relative to absolute, use the -\fBSetDeviceMode\fP request. The valid values are \fBAbsolute\fP or -\fBRelative\fP. -.LP -This request will fail and return \fBDeviceBusy\fP if another client already -has the device open with a different mode. It will fail and return -\fBAlreadyGrabbed\fP if another client has the device grabbed. -The request will fail with -a \fBBadMatch\fP error if the requested mode is not supported by the device. -.sp 1.5 -SetDeviceMode -.in +.5i -device: DEVICE -.br -mode: {Absolute, Relative} -.br -.sp -Errors: Device, Match, Mode -.br -.in -.5i -.sp 1.5 -=> -.in +.5i -status: {Success, DeviceBusy, AlreadyGrabbed} -.br -.sp -.in -.5i -.NH 2 -Initializing Valuators on an Input Device -.XS -\*(SN Initializing Valuators on an Input Device -.XE -.LP -Some devices that report absolute positional data can be initialized to a -starting value. Devices that are capable of reporting relative motion or -absolute positional data may require that their valuators be initialized -to a starting value after the mode of the device is changed to \fBAbsolute\fP. -To initialize the valuators on such a device, use the \fBSetDeviceValuators\fP -request. -.sp 1.5 -SetDeviceValuators -.in .5i -device: DEVICE -.br -first_valuator: CARD8 -.br -num_valuators: CARD8 -.br -valuators: LISTOFINT32 -.br -.sp -Errors: Length, Device, Match, Value -.br -.in -.5i -.sp 1.5 -=> -.in +.5i -status: {Success, AlreadyGrabbed} -.br -.sp -.in -.5i -.LP -This request initializes the specified valuators on the specified extension -input device. Valuators are numbered beginning with zero. Only the valuators -in the range specified by first_valuator and num_valuators are set. If the -number of valuators supported by the device is less than the expression -first_valuator + num_valuators, a \fBValue\fP error will result. -.LP -If the request succeeds, \fBSuccess\fP is returned. If the specifed device is -grabbed by some other client, the request will fail and a status of -\fBAlreadyGrabbed\fP will be returned. -.NH 2 -Getting Input Device Controls -.XS -\*(SN Getting Input Device Controls -.XE -.LP -.sp 1.5 -GetDeviceControl -.in .5i -device: DEVICE -.br -control: XID -.br -.sp -Errors: Length, Device, Match, Value -.br -.in -.5i -.sp 1.5 -=> -.in +.5i -controlState: {DeviceState} -.br -.sp -.in -.5i -.LP -where -.in +.5i -.br -.TS -l lw(4i). -T{ -DeviceState: -T} T{ -DeviceResolutionState -T} -.TE -.in -.5i -.br -.sp -Errors: Length, Device, Match, Value -.LP -This request returns the current state of the specified device control. -The device control must be supported by the target server and device or an -error will result. -.LP -If the request is successful, a pointer to a generic DeviceState -structure will be returned. The information returned varies according to -the specified control and is mapped by a structure appropriate for that -control. -.LP -GetDeviceControl will fail with a BadValue error if the server does not support -the specified control. It will fail with a BadMatch error if the device -does not support the specified control. -.LP -Supported device controls and the information returned for them include: -.LP -.TS -l lw(4i). -T{ -DEVICE_RESOLUTION: -T} T{ -[control: CARD16 -.br -\ length: CARD16 -.br -\ num_valuators: CARD8 -.br -\ resolutions: LISTofCARD32 -.br -\ min_resolutions: LISTofCARD32 -.br -\ max_resolutions: LISTofCARD32] -T} -.TE -.LP -This device control returns a list of valuators and the range of valid -resolutions allowed for each. Valuators are numbered beginning with 0. -Resolutions for all valuators on the device are returned. -For each valuator i on the device, resolutions[i] returns the current setting -of the resolution, min_resolutions[i] returns the minimum valid setting, -and max_resolutions[i] returns the maximum valid setting. -.LP -When this control is specified, XGetDeviceControl will fail with a BadMatch -error if the specified device has no valuators. -.sp 1.5 -ChangeDeviceControl -.in .5i -device: DEVICE -.br -XID: controlId -.br -control: DeviceControl -.br -.sp -.in -.5i -.LP -where -.in +.5i -.br -.TS -l lw(4i). -T{ -DeviceControl: -T} T{ -DeviceResolutionControl -T} -.TE -.in -.5i -.br -.sp -Errors: Length, Device, Match, Value -.br -=> -.in +.5i -status: {Success, DeviceBusy, AlreadyGrabbed} -.br -.sp -.in -.5i -.LP -ChangeDeviceControl changes the specifed device control according to the values -specified in the DeviceControl structure. The device control must be supported -by the target server and device or an error will result. -.LP -The information passed with this request varies according to the specified -control and is mapped by a structure appropriate for that control. -.LP -ChangeDeviceControl will fail with a BadValue error if the server does not -support the specified control. It will fail with a BadMatch error if the -server supports the specified control, but the requested device does not. -The request will fail and return a status of DeviceBusy if another client -already has the device open with a device control state that conflicts with -the one specified in the request. It will fail with a status of -AlreadyGrabbed if some other client has grabbed the specified device. If -the request succeeds, Success is returned. If it fails, the device control -is left unchanged. -.LP -Supported device controls and the information specified for them include: -.LP -.TS -l lw(4i). -T{ -DEVICE_RESOLUTION: -T} T{ -[control: CARD16 -.br -\ length: CARD16 -.br -\ first_valuator: CARD8 -.br -\ num_valuators: CARD8 -.br -\ resolutions: LISTofCARD32] -T} -.TE -.LP -This device control changes the resolution of the specified valuators -on the specified extension input device. Valuators are numbered beginning -with zero. Only the valuators in the range specified by first_valuator -and num_valuators are set. A value of -1 in the resolutions list indicates -that the resolution for this valuator is not to be changed. num_valuators -specifies the number of valuators in the resolutions list. -.LP -When this control is specified, XChangeDeviceControl will fail with a BadMatch -error if the specified device has no valuators. If a resolution is specified -that is not within the range of valid values (as returned by XGetDeviceControl) -the request will fail with a BadValue error. If the number of valuators -supported by the device is less than the expression first_valuator + -num_valuators, a BadValue error will result. -.LP -If the request fails for any reason, none of the valuator resolutions will be -changed. -.NH 2 -Selecting Extension Device Events -.XS -\*(SN Selecting Extension Device Events -.XE -.LP -Extension input events are selected using the \fBSelectExtensionEvent\fP -request. -.sp 1.5 -SelectExtensionEvent -.in .5i -window: WINDOW -.br -interest: LISTofEVENTCLASS -.br -.sp -Errors: Window, Class, Access -.br -.in -.5i -.sp 1.5 -.LP -This request specifies to the server the events within the specified window -which are of interest to the client. As with the core \fBXSelectInput\fP -function, multiple clients can select input on the same window. -.LP -\fBXSelectExtensionEvent\fP requires a list of \fIevent classes\fP. -An event class is a 32-bit number that combines an event type and -device id, and is used to indicate which event a client wishes to -receive and from which device it wishes to receive it. Macros -are provided to obtain event classes from the data returned by -the \fBXOpenDevice\fP request. The names of these macros correspond -to the desired events, i.e. the \fBDeviceKeyPress\fP is used to -obtain the event class for \fBDeviceKeyPress\fP events. The syntax -of the macro invocation is: -.sp 1.5 -DeviceKeyPress (device, event_type, event_class); -.in .5i -device: DEVICE -.br -event_type: INT -.br -event_class: INT -.in -.5i -.br -.LP -The value returned in \fBevent_type\fP is the value that will be contained in -the event type field of the \fBXDeviceKeyPressEvent\fP when it is received by -the client. The value returned in \fBevent_class\fP is the value that should -be passed in making an \fBXSelectExtensionEvent\fP request to receive -\fBDeviceKeyPress\fP events. -.LP -For \fBDeviceButtonPress\fP events, the client may specify whether -or not an implicit passive grab should be done when the button is -pressed. If the client wants to guarantee that it will receive -a \fBDeviceButtonRelease\fP event for each \fBDeviceButtonPress\fP -event it receives, it should specify the \fBDeviceButtonPressGrab\fP -event class as well as the \fBDeviceButtonPress\fP event class. -This restricts the client in that only one client at a time -may request \fBDeviceButtonPress\fP events from the same device and -window if any client specifies this class. -.LP -If any client has specified the \fBDeviceButtonPressGrab\fP class, any requests -by any other client that specify the same device and window and specify -\fBDeviceButtonPress\fP or \fBDeviceButtonPressGrab\fP will -cause an \fBAccess\fP error to be generated. -.LP -If only the \fBDeviceButtonPress\fP class is specified, no implicit -passive grab will be done when a button is pressed on the device. -Multiple clients may use this class to specify the same device and -window combination. -.LP -A client may also specify the \fBDeviceOwnerGrabButton\fP class. If it has -specified both the \fBDeviceButtonPressGrab\fP and the -\fBDeviceOwnerGrabButton\fP classes, implicit passive grabs will activate -with owner_events set to \fBTrue\fP. If only the -\fBDeviceButtonPressGrab\fP class is specified, implicit passive grabs will -activate with owner_events set to \fBFalse\fP. -.LP -The client may select \fBDeviceMotion\fP events only when a -button is down. It does this by specifying the event classes -\fBButton1Motion\fP through \fBButton5Motion\fP, or \fBButtonMotion\fP. -An input device will only support -as many button motion classes as it has buttons. -.NH 2 -Determining Selected Events -.XS -\*(SN Determining Selected Events -.XE -.LP -To determine which extension events are currently selected from a given -window, use \fBGetSelectedExtensionEvents\fP. -.sp 1.5 -GetSelectedExtensionEvents -.in .5i -window: WINDOW -.br -.in -.5i -=> -.in +.5i -.br -this-client: LISTofEVENTCLASS -.br -all-clients: LISTofEVENTCLASS -.br -.sp -Errors: Window -.br -.in -.5i -.sp 1.5 -.LP -This request returns two lists specifying the events selected on the specified -window. One list gives the extension events selected by this client from -the specified window. The other list gives the extension events selected by -all clients from the specified window. This information is equivalent -to that returned by your-event-mask and all-event-masks in a -\fBGetWindowAttributes\fP request. -.NH 2 -Controlling Event Propagation -.XS -\*(SN Controlling Event Propagation -.XE -.LP -Extension events propagate up the window hierarchy in the same manner -as core events. If a window is not interested in an extension event, -it usually propagates to the closest ancestor that is interested, -unless the dont_propagate list prohibits it. -Grabs of extension devices may alter the set of windows that receive a -particular extension event. -.LP -Client programs may control extension event propagation through the use -of the following two requests. -.LP -\fBXChangeDeviceDontPropagateList\fP adds an event to or deletes an event from -the do_not_propagate list of extension events for the specified window. This -list is maintained for the life of the window, and is not altered if the -client terminates. -.LP -.sp 1.5 -ChangeDeviceDontPropagateList -.in .5i -window: WINDOW -.br -eventclass: LISTofEVENTCLASS -.br -mode: {AddToList, DeleteFromList} -.br -.sp -Errors: Window, Class, Mode -.br -.in -.5i -.sp 1.5 -.LP -This function modifies the list specifying the events that are not propagated -to the ancestors of the specified window. You may use the modes \fBAddToList\fP -or \fBDeleteFromList\fP. -.sp 1.5 -GetDeviceDontPropagateList -.in .5i -window: WINDOW -.br -.sp -Errors: Window -.br -.in -.5i -=> -.in +.5i -dont-propagate-list: LISTofEVENTCLASS -.br -.sp -.in -.5i -.sp 1.5 -.LP -This function returns a list specifying the events that are not propagated -to the ancestors of the specified window. -.NH 2 -Sending Extension Events -.XS -\*(SN Sending Extension Events -.XE -.LP -One client program may send an event to another via the -\fBXSendExtensionEvent\fP function. -.LP -The event in the \fBXEvent\fP structure must be one of the events defined -by the input extension, so that the X server can correctly byte swap the -contents as necessary. The contents of the event are otherwise unaltered -and unchecked by the X server except to force send_event to \fBTrue\fP -in the forwarded event and to set the sequence number in the event correctly. -.LP -XSendExtensionEvent returns zero if the conversion-to-wire protocol -failed, otherwise it returns nonzero. -.sp 1.5 -SendExtensionEvent -.in .5i -device: DEVICE -.br -destination: WINDOW -.br -propagate: BOOL -.br -eventclass: LISTofEVENTCLASS -.br -event: XEVENT -.in -.5i -.sp -.br -Errors: Device, Value, Class, Window -.NH 2 -Getting Motion History -.XS -\*(SN Getting Motion History -.XE -.LP -.sp 1.5 -GetDeviceMotionEvents -.in .5i -device: DEVICE -.br -start, stop: TIMESTAMP or CurrentTime -.br -.in -.5i -=> -.br -.in +.5i -nevents_return: CARD32 -.br -mode_return: {Absolute, Relative} -.br -axis_count_return: CARD8 -.br -events: LISTofDEVICETIMECOORD -.br -.sp -.in -.5i -where -.br -.in +.5i -.TS -l lw(4i). -T{ -DEVICETIMECOORD: -T} T{ -[data:LISTofINT32 -\ time:TIMESTAMP] -T} -.TE -.sp -Errors: Device, Match -.br -.in -.5i -.sp 1.5 -.LP -This request returns all positions in the device's motion history buffer -that fall between the specified start and stop times inclusive. If the -start time is in the future, or is later than the stop time, no positions -are returned. -.LP -The data field of the DEVICETIMECOORD structure is a sequence of -data items. Each item is of type INT32, and there is one data item -per axis of motion reported by the device. -The number of axes reported -by the device is returned in the axis_count variable. -.LP -The value of the data items depends on the mode of the device, which -is returned in the mode variable. -If the mode is Absolute, the data items are the raw values -generated by the device. These may be scaled by the client program -using the maximum values that the device can generate for each axis -of motion that it reports. The maximum and minimum values for each -axis are reported by the \fBListInputDevices\fP request. -.LP -If the mode is Relative, the data items are the relative values -generated by the device. The client program must choose an initial -position for the device and maintain a current position by -accumulating these relative values. -.NH 2 -Changing The Core Devices -.XS -\*(SN Changing The Core Devices -.XE -.LP -These requests are provided to change which physical device is used -as the X pointer or X keyboard. -.NT -Using these requests may change the characteristics of the core devices. -The new pointer device may have a different number of buttons than the -old one did, or the new keyboard device may have a different number of -keys or report a different range of keycodes. Client programs may be -running that depend on those characteristics. For example, a client -program could allocate an array based on the number of buttons on the -pointer device, and then use the button numbers received in button events -as indicies into that array. Changing the core devices could cause -such client programs to behave improperly or abnormally terminate. -.NE -.LP -These requests change the X keyboard or X pointer device and generate -an \fBChangeDeviceNotify\fP event and a \fBMappingNotify\fP event. -The \fBChangeDeviceNotify\fP event is sent only to those clients that have -expressed an interest in receiving that event via the -\fBXSelectExtensionEvent\fP request. -The specified device becomes the -new X keyboard or X pointer device. The location of the core device -does not change as a result of this request. -.LP -These requests fail and return \fBAlreadyGrabbed\fP if either the specified -device or the core device it would replace are grabbed by some other -client. They fail and return \fBGrabFrozen\fP if either device is frozen -by the active grab of another client. -.LP -These requests fail with a \fBBadDevice\fP error if the specified device is -invalid, or has not previously been opened via \fBOpenDevice\fP. -.sp 2 -To change the X keyboard device, use the \fBChangeKeyboardDevice\fP request. -The specified device must support input class Keys (as reported in the -ListInputDevices request) or the request will fail with a \fBBadMatch\fP error. -Once the device has successfully replaced one of the core devices, it -is treated as a core device until it is in turn replaced by another -ChangeDevice request, or until the server terminates. The termination -of the client that changed the device will not cause it to change back. -Attempts to use the CloseDevice request to close the new core device will -fail with a BadDevice error. -.LP -The focus state of the new keyboard is the same as the focus state of the old -X keyboard. If the new keyboard was not initialized with a \fBFocusRec\fP, -one is added by the \fBChangeKeyboardDevice\fP request. The X keyboard is -assumed to have a \fBKbdFeedbackClassRec\fP. If the device was initialized -without a \fBKbdFeedbackClassRec\fP, one will be added by this request. -The \fBKbdFeedbackClassRec\fP will specify a null routine as the control -procedure and the bell procedure. -.sp 1.5 -ChangeKeyboardDevice -.in .5i -device: DEVICE -.br -.sp -Errors: Device, Match -.br -.in -.5i -=> -.br -.in +.5i -status: Success, AlreadyGrabbed, Frozen -.br -.sp 1.5 -.LP -To change the X pointer device, use the \fBChangePointerDevice\fP request. -The specified device must support input class Valuators (as reported in the -ListInputDevices request) or the request will fail with a BadMatch error. -The valuators to be used as the x- and y-axes of the pointer device must -be specified. Data from other valuators on the device will be ignored. -.LP -The X pointer device does not contain a \fBFocusRec\fP. If the new -pointer was initialized with a \fBFocusRec\fP, it is freed by the -\fBChangePointerDevice\fP request. The X pointer is assumed to have a -\fBButtonClassRec\fP and a \fBPtrFeedbackClassRec\fP. If the device -was initialized without a \fBButtonClassRec\fP or a \fBPtrFeedbackClassRec\fP, -one will be added by this request. The \fBButtonClassRec\fP added will -have no buttons, and the \fBPtrFeedbackClassRec\fP will specify a null -routine as the control procedure. -.LP -If the specified device reports absolute positional information, and the -server implementation does not allow such a device to be used as the -X pointer, the request will fail with a \fBBadDevice\fP error. -.LP -Once the device has successfully replaced one of the core devices, it -is treated as a core device until it is in turn replaced by another -ChangeDevice request, or until the server terminates. The termination -of the client that changed the device will not cause it to change back. -Attempts to use the CloseDevice request to close the new core device will -fail with a BadDevice error. -.sp 1.5 -ChangePointerDevice -.in .5i -device: DEVICE -.br -xaxis: CARD8 -.br -yaxis: CARD8 -.sp -Errors: Device, Match -.br -.in -.5i -=> -.br -.in +.5i -status: Success, AlreadyGrabbed, Frozen -.br -.sp 1.5 -.NH 2 -Event Synchronization And Core Grabs -.XS -\*(SN Event Synchronization And Core Grabs -.XE -.LP -Implementation of the input extension requires an extension of the -meaning of event synchronization for the core grab requests. This is -necessary in order to allow window managers to freeze all input devices -with a single request. -.LP -The core grab requests require a \fBpointer_mode\fP and \fBkeyboard_mode\fP -argument. The meaning of these modes is changed by the input extension. -For the \fBXGrabPointer\fP and \fBXGrabButton\fP requests, \fBpointer_mode\fP -controls synchronization of the pointer device, and \fBkeyboard_mode\fP -controls the synchronization of all other input devices. -For the \fBXGrabKeyboard\fP -and \fBXGrabKey\fP requests, \fBpointer_mode\fP controls the synchronization -of all input devices except the X keyboard, while \fBkeyboard_mode\fP controls -the synchronization of the keyboard. When using one of the core grab -requests, the synchronization of extension devices -is controlled by the mode specified for the device not being grabbed. -.NH 2 -Extension Active Grabs -.XS -\*(SN Extension Active Grabs -.XE -.LP -Active grabs of extension devices are supported via the \fBGrabDevice\fP -request in the same way that core devices are grabbed using the core -GrabKeyboard request, except that a \fIDevice\fP is passed as -a function parameter. A list of events that the client wishes to -receive is also passed. The \fBUngrabDevice\fP request allows a -previous active grab for an extension device to be released. -.LP -To grab an extension device, use the \fBGrabDevice\fP request. -The device must have previously been opened using the \fBOpenDevice\fP -request. -.sp 1.5 -GrabDevice -.br -.in .5i -device: DEVICE -.br -grab-window: WINDOW -.br -owner-events: BOOL -.br -event-list: LISTofEVENTCLASS -.br -this-device-mode: {Synchronous, Asynchronous} -.br -other-device-mode: {Synchronous, Asynchronous} -.br -time:TIMESTAMP or CurrentTime -.br -.in -.5i -=> -.br -.in +.5i -status: Success, AlreadyGrabbed, Frozen, InvalidTime, NotViewable -.br -.sp -Errors: Device, Window, Value -.br -.in -.5i -.sp 1.5 -.LP -This request actively grabs control of the specified input device. Further -input events from this device are reported only to the grabbing client. -This request overrides any previous active grab by this client for this -device. -.LP -The event-list parameter is a pointer to a list of event classes. These -are used to indicate which events the client wishes to receive while the -device is grabbed. Only event classes obtained from the grabbed device -are valid. -.LP -If owner-events is \fBFalse\fP, input events generated from this -device are reported with respect to grab-window, and are only reported if -selected by being included in the event-list. -If owner-events is -\fBTrue\fP, then if a generated event would normally be reported to this -client, it is reported normally, otherwise the event is reported with -respect to the grab-window, and is only reported if selected by being -included in the event-list. For either value of owner-events, unreported -events are discarded. -.LP -If this-device-mode is \fBAsynchronous\fP, device event processing continues -normally. If the device is currently frozen by this client, then processing -of device events is resumed. If this-device-mode is \fBSynchronous\fP, -the state of the grabbed device (as seen by means of the protocol) appears -to freeze, -and no further device events are generated by the server until the grabbing -client issues a releasing \fBAllowDeviceEvents\fP request or until the device -grab is released. Actual device input events are not lost while the device -is frozen; they are simply queued for later processing. -.LP -If other-device-mode is \fBAsynchronous\fP, event processing is -unaffected by activation of the grab. If other-device-mode is -\fBSynchronous\fP, the state of all input devices except the grabbed one -(as seen by means of the protocol) appears to -freeze, and no further events are generated by the server until -the grabbing client issues a releasing \fBAllowDeviceEvents\fP request or -until the device grab is released. Actual events are not lost -while the devices are frozen; they are simply queued for later -processing. -.LP -This request generates \fBDeviceFocusIn\fP and \fBDeviceFocusOut\fP events. -.LP -This request fails and returns: -.IP \(bu 3n -\fBAlreadyGrabbed\fP -If the device is actively grabbed by some other client. -.IP \(bu 3n -\fBNotViewable\fP -If grab-window is not viewable. -.IP \(bu 3n -\fBInvalidTime\fP -If the specified time is earlier -than the last-grab-time for the specified device -or later than the current X server time. Otherwise, -the last-grab-time for the specified device is set -to the specified time and -\fBCurrentTime\fP -is replaced by the current X server time. -.IP \(bu 3n -\fBFrozen\fP -If the device is frozen by an active grab of another client. -.LP -If a grabbed device is closed by a client while an active grab by that -client is in -effect, that active grab will be released. Any passive grabs established by -that client will be released. If the device is frozen only by an active grab -of the requesting client, it is thawed. -.LP -To release a grab of an extension device, use \fBUngrabDevice\fP. -.sp 1.5 -UngrabDevice -.br -.in .5i -device: DEVICE -.br -time: TIMESTAMP or CurrentTime -.br -.sp -Errors: Device -.br -.in -.5i -.sp 1.5 -.LP -This request releases the device if this client has it actively grabbed -(from either \fBGrabDevice\fP or \fBGrabDeviceKey\fP) and releases -any queued events. If any devices were frozen by the grab, -\fBUngrabDevice\fP thaws them. -The request has no effect if the specified time is earlier -than the last-device-grab time or is later than the current server time. -.LP -This request generates \fBDeviceFocusIn\fP and \fBDeviceFocusOut\fP events. -.LP -An \fBUngrabDevice\fP is performed automatically if the event window for an -active device grab becomes not viewable. -.NH 2 -Passively Grabbing A Key -.XS -\*(SN Passively Grabbing A Key -.XE -.LP -Passive grabs of buttons and keys on extension devices are supported -via the \fBGrabDeviceButton\fP and \fBGrabDeviceKey\fP requests. -These passive grabs are released via the \fBUngrabDeviceKey\fP and -\fBUngrabDeviceButton\fP requests. -.LP -To passively grab a single key on an extension device, use \fBGrabDeviceKey\fP. -That device must have previously been opened using the \fBOpenDevice\fP -request. -.sp 1.5 -GrabDeviceKey -.br -.LP -.in .5i -device: DEVICE -.br -keycode: KEYCODE or AnyKey -.br -modifiers: SETofKEYMASK or AnyModifier -.br -modifier-device: DEVICE or NULL -.br -grab-window: WINDOW -.br -owner-events: BOOL -.br -event-list: LISTofEVENTCLASS -.br -this-device-mode: {Synchronous, Asynchronous} -.br -other-device-mode: {Synchronous, Asynchronous} -.br -.sp -Errors: Device, Match, Access, Window, Value -.br -.in -.5i -.sp 1.5 -.LP -This request is analogous to the core \fBGrabKey\fP request. It establishes a -passive grab on a device. Consequently, In the future: -.IP \(bu 3n -IF the device is not grabbed and the specified key, which itself can be a -modifier key, is logically pressed when the specified modifier keys -logically are down on the specified modifier device (and no other -keys are down), -.IP \(bu 3n -AND no other modifier keys logically are down, -.IP \(bu 3n -AND EITHER the grab window is an ancestor of (or is) the focus window -OR the grab window is a descendent of the focus window and contains the pointer, -.IP \(bu 3n -AND a passive grab on the same device and key combination does not exist on any -ancestor of the grab window, -.IP \(bu 3n -THEN the device is actively grabbed, as for \fBGrabDevice\fP, -the last-device-grab time is set to the time at which the key was pressed -(as transmitted in the \fBDeviceKeyPress\fP event), and the -\fBDeviceKeyPress\fP event is reported. -.LP -The interpretation of the remaining arguments is as for \fBGrabDevice\fP. -The active grab is terminated automatically when logical state of the -device has the specified key released (independent of the logical state of the -modifier keys). -.LP -Note that the logical state of a device (as seen by means of the X protocol) -may lag the physical state if device event processing is frozen. -.LP -A modifier of \fBAnyModifier\fP is equivalent to issuing the request for all -possible modifier combinations (including the combination of no modifiers). -It is not required that all modifiers specified have currently assigned -keycodes. -A key of \fBAnyKey\fP is equivalent to issuing -the request for all possible keycodes. Otherwise, the key must be in -the range specified by min-keycode and max-keycode in the \fBListInputDevices\fP -request. If it is not within that range, \fBGrabDeviceKey\fP generates a -\fBValue\fP error. -.LP -\fBNULL\fP may be passed for the modifier_device. If the modifier_device is -\fBNULL\fP, the core X keyboard is used as the modifier_device. -.LP -An \fBAccess\fP error is generated if some other client has issued a -\fBGrabDeviceKey\fP with the same device and key combination on the -same window. When using \fBAnyModifier\fP or \fBAnyKey\fP, -the request fails completely and the X server generates a \fBAccess\fP -error and no grabs are established if there is a conflicting grab for any -combination. -.LP -This request cannot be used to grab a key on the X keyboard device. -The core \fBGrabKey\fP request should be used for that purpose. -.LP -To release a passive grab of a single key on an extension device, -use \fBUngrabDeviceKey\fP. -.sp 1.5 -UngrabDeviceKey -.LP -.in .5i -device: DEVICE -.br -keycode: KEYCODE or AnyKey -.br -modifiers: SETofKEYMASK or AnyModifier -.br -modifier-device: DEVICE or NULL -.br -grab-window: WINDOW -.br -.sp -Errors: Device, Match, Window, Value, Alloc -.br -.in -.5i -.sp 1.5 -.LP -This request is analogous to the core \fBUngrabKey\fP request. It releases -the key combination on the specified window if it was grabbed by this -client. A modifier of \fBAnyModifier\fP is equivalent to issuing the -request for all possible modifier combinations (including the combination -of no modifiers). A key of \fBAnyKey\fP is equivalent to issuing the -request for all possible keycodes. This request has no effect on an -active grab. -.LP -\fBNULL\fP may be passed for the modifier_device. If the modifier_device is -\fBNULL\fP, the core X keyboard is used as the modifier_device. -.NH 2 -Passively Grabbing A Button -.XS -\*(SN Passively Grabbing A Button -.XE -.LP -To establish a passive grab for a single button on an extension device, -use \fBGrabDeviceButton\fP. -.sp 1.5 -GrabDeviceButton -.LP -.in .5i -device: DEVICE -.br -button: BUTTON or AnyButton -.br -modifiers: SETofKEYMASK or AnyModifier -.br -modifier-device: DEVICE or NULL -.br -grab-window: WINDOW -.br -owner-events: BOOL -.br -event-list: LISTofEVENTCLASS -.br -this-device-mode: {Synchronous, Asynchronous} -.br -other-device-mode: {Synchronous, Asynchronous} -.br -.sp -Errors: Device, Match, Window, Access, Value -.br -.in -.5i -.sp 1.5 -.LP -This request is analogous to the core \fBGrabButton\fP request. It -establishes an explicit passive grab for a button on an extension input -device. Since the server does not track extension devices, no cursor is -specified with this request. For the same reason, there is no -confine-to parameter. The device must have previously been opened using the -\fBOpenDevice\fP request. -.LP -The \fBGrabDeviceButton\fP request establishes a passive grab on a device. -Consequently, in the future, -.IP \(bu 3n -IF the device is not grabbed and the specified button is logically pressed -when the specified modifier keys logically are down -(and no other buttons or modifier keys are down), -.IP \(bu 3n -AND the grab window contains the device, -.IP \(bu 3n -AND a passive grab on the same device and button/ key combination does not -exist on any ancestor of the grab window, -.IP \(bu 3n -THEN the device is actively grabbed, as for \fBGrabDevice\fP, -the last-grab time is set to the time at which the button was pressed -(as transmitted in the \fBDeviceButtonPress\fP event), and the -\fBDeviceButtonPress\fP event is reported. -.LP -The interpretation of the remaining arguments is as for -\fBGrabDevice\fP. -The active grab is terminated automatically when logical state of the -device has all buttons released (independent of the logical state of -the modifier keys). -.LP -Note that the logical state of a device (as seen by means of the X protocol) -may lag the physical state if device event processing is frozen. -.LP -A modifier of \fBAnyModifier\fP is equivalent to issuing the request for all -possible modifier combinations (including the combination of no modifiers). -It is not required that all modifiers specified have currently assigned -keycodes. A button of \fBAnyButton\fP is equivalent to issuing the request -for all possible buttons. It is not required that the -specified button be assigned to a physical button. -.LP -\fBNULL\fP may be passed for the modifier_device. If the modifier_device is -\fBNULL\fP, the core X keyboard is used as the modifier_device. -.LP -An \fBAccess\fP error is generated if some other client has issued a -\fBGrabDeviceButton\fP with the same device and button combination on the -same window. When using \fBAnyModifier\fP or \fBAnyButton\fP, the request -fails completely and the X server generates a \fBAccess\fP -error and no grabs are established if there is a conflicting grab for any -combination. The request has no effect on an active grab. -.LP -This request cannot be used to grab a button on the X pointer -device. The core \fBGrabButton\fP request should be used for that -purpose. -.LP -To release a passive grab of a button on an extension device, use -\fBUngrabDeviceButton\fP. -.sp 1.5 -UngrabDeviceButton -.br -.LP -.in .5i -device: DEVICE -.br -button: BUTTON or AnyButton -.br -modifiers: SETofKEYMASK or AnyModifier -.br -modifier-device: DEVICE or NULL -.br -grab-window: WINDOW -.br -.sp -.br -Errors: Device, Match, Window, Value, Alloc -.br -.in -.5i -.sp 1.5 -.LP -This request is analogous to the core UngrabButton request. It releases -the passive button/key combination on the specified window if it was grabbed -by the client. A modifiers of \fBAnyModifier\fP is equivalent to issuing the -request for all possible modifier combinations (including the combination -of no modifiers). A button of \fBAnyButton\fP is equivalent to issuing the -request for all possible buttons. This request has no effect on an -active grab. The device must have previously been opened using the -\fBOpenDevice\fP request otherwise a \fBDevice\fP error will be -generated. -.LP -\fBNULL\fP may be passed for the modifier_device. If the modifier_device is -\fBNULL\fP, the core X keyboard is used as the modifier_device. -.LP -This request cannot be used to ungrab a button on the X pointer -device. The core \fBUngrabButton\fP request should be used for that -purpose. -.NH 2 -Thawing A Device -.XS -\*(SN Thawing A Device -.XE -.LP -To allow further events to be processed when a device has been frozen, -use \fBAllowDeviceEvents\fR. -.sp 1.5 -AllowDeviceEvents -.br -.in .5i -device: DEVICE -.br -event-mode: {AsyncThisDevice, SyncThisDevice, AsyncOtherDevices, -ReplayThisdevice, AsyncAll, or SyncAll} -.br -time:TIMESTAMP or CurrentTime -.br -.sp -Errors: Device, Value -.br -.in -.5i -.sp 1.5 -.LP -The \fBAllowDeviceEvents\fP request releases some queued events if the client -has caused a device to freeze. The request has no effect if the -specified time is earlier than the last-grab time of the most recent -active grab for the client, or if the specified time is later than the -current X server time. -.LP -The following describes the processing that occurs depending on what constant -you pass to the event-mode argument: -.IP \(bu 3n \fBAsyncThisDevice\fP -If the specified device is frozen by the client, -event processing for that device -continues as usual. If the device is frozen multiple times by the client on -behalf of multiple separate grabs, AsyncThisDevice thaws for all. -AsyncThisDevice has no effect if the specified device is not frozen by the -client, but the device need not be grabbed by the client. -.IP \(bu 3n \fBSyncThisDevice\fP -If the specified device is frozen and actively grabbed by the client, -event processing for that device continues normally until the next -button or key event is reported to the client. -At this time, -the specified device again appears to freeze. -However, if the reported event causes the grab to be released, -the specified device does not freeze. -SyncThisDevice has no effect if the specified device is not frozen by the client -or is not grabbed by the client. -.IP \(bu 3n \fBReplayThisDevice\fP -If the specified device is actively grabbed by the client and is frozen -as the result of an event having been sent to the client (either from the -activation of a GrabDeviceButton or from a previous AllowDeviceEvents with -mode SyncThisDevice, but not from a Grab), -the grab is released and that event is completely reprocessed. -This time, however, the request ignores any passive grabs at or above -(towards the root) the grab-window of the grab just released. -The request has no effect if the specified device is not grabbed by the client -or if it is not frozen as the result of an event. -.IP \(bu 3n \fBAsyncOtherDevices\fP -If the remaining devices are frozen by the client, -event processing for them continues as usual. -If the other devices are frozen multiple times by the client on behalf of -multiple separate grabs, -AsyncOtherDevices ``thaws'' for all. -AsyncOtherDevices has no effect if the devices are not frozen by the client, -but those devices need not be grabbed by the client. -.IP \(bu 3n \fBSyncAll\fP -If all devices are frozen by the client, -event processing (for all devices) continues normally until the next -button or key event is reported -to the client for a grabbed device (button event for the grabbed device, key -or motion event for the device), at which time the devices again appear to -freeze. However, if the reported event causes the grab to be released, -then the devices do not freeze (but if any device is still -grabbed, then a subsequent event for it will still cause all devices -to freeze). -SyncAll has no effect unless all devices -are frozen by the client. If any device is frozen twice -by the client on behalf of two separate grabs, -SyncAll "thaws" for both (but a subsequent freeze for SyncAll -will only freeze each device once). -.IP \(bu 3n \fBAsyncAll\fP -If all devices are frozen by the -client, event processing (for all devices) continues normally. -If any device is frozen multiple times by the client on behalf of multiple -separate grabs, AsyncAll "thaws" for all. -AsyncAll has no effect unless all -devices are frozen by the client. -.LP -AsyncThisDevice, SyncThisDevice, and ReplayThisDevice -have no effect on the processing of events from the remaining devices. -AsyncOtherDevices has no effect on the processing of events from the -specified device. -When the event_mode is SyncAll or AsyncAll, the -device parameter is ignored. -.LP -It is possible for several grabs of different devices (by the same -or different clients) to be active simultaneously. -If a device is frozen on behalf of any grab, -no event processing is performed for the device. -It is possible for a single device to be frozen because of several grabs. -In this case, -the freeze must be released on behalf of each grab before events can -again be processed. -.LP -.NH 2 -Controlling Device Focus -.XS -\*(SN Controlling Device Focus -.XE -.LP -The current focus window for an extension input device can be -determined using the \fBGetDeviceFocus\fP request. -Extension devices are focused using the \fBSetDeviceFocus\fP -request in the same way that the keyboard is focused using -the \fBSetInputFocus\fP request, except that a device is specified as -part of the request. One additional focus state, \fBFollowKeyboard\fP, -is provided for extension devices. -.LP -To get the current focus state, revert state, and focus time of an extension device, -use \fBGetDeviceFocus\fP. -.sp 1.5 -GetDeviceFocus -.br -.LP -.in .5i -device: DEVICE -.br -.in -.5i -=> -.in +.5i -focus: WINDOW, PointerRoot, FollowKeyboard, or None -.br -revert-to: Parent, PointerRoot, FollowKeyboard, or None -.br -focus-time: TIMESTAMP -.br -.sp -Errors: Device, Match -.br -.in -.5i -.sp 1.5 -.LP -This request returns the current focus state, revert-to state, -and last-focus-time of an extension device. -.LP -To set the focus of an extension device, use \fBSetDeviceFocus\fP. -.sp 1.5 -SetDeviceFocus -.br -.in .5i -device: DEVICE -.br -focus: WINDOW, PointerRoot, FollowKeyboard, or None -.br -revert-to: Parent, PointerRoot, FollowKeyboard, or None -.br -focus-time: TIMESTAMP -.br -.sp -Errors: Device, Window, Value, Match -.br -.in -.5i -.sp 1.5 -.LP -This request changes the focus for an extension input device and the -last-focus-change-time. The request has no effect if the specified -time is earlier than the last-focus-change-time or is later than the -current X server time. Otherwise, the last-focus-change-time is set to the -specified time, with CurrentTime replaced by the current server time. -.LP -The action taken by the server when this request is requested depends -on the value of the focus argument: -.IP \(bu 3n -If the focus argument is \fBNone\fP, all input events from this device -will be discarded until a new focus window is set. In this case, the -revert-to argument is ignored. -.IP \(bu 3n -If a window ID is assigned to the focus argument, it becomes the focus -window of the device. If an input event from the device would normally -be reported to this window or to one of its inferiors, the event is -reported normally. Otherwise, the event is reported relative to the focus -window. -.IP \(bu 3n -If you assign \fBPointerRoot\fP to the focus argument, the focus window is -dynamically taken to be the root window of whatever screen the pointer is -on at each input event. In this case, the revert-to argument is ignored. -.IP \(bu 3n -If you assign \fBFollowKeyboard\fP to the focus argument, the focus window is -dynamically taken to be the same as the focus of the X keyboard at each -input event. -.LP -The specified focus window must be viewable at the time of the request -(else a \fBMatch\fP error). If the focus window later becomes not viewable, -the X server evaluates the revert-to argument -to determine the new focus window. -.IP \(bu 3n -If you assign \fBRevertToParent\fP -to the revert-to argument, the focus reverts to the parent -(or the closest viewable ancestor), and the new revert-to value is taken to -be \fBRevertToNone\fP. -.IP \(bu 3n -If you assign \fBRevertToPointerRoot\fP, \fBRevertToFollowKeyboard\fP, or \fBRevertToNone\fP -to the revert-to argument, the focus reverts to that value. -.LP -When the focus reverts, -the X server generates \fBDeviceFocusIn\fP -and \fBDeviceFocusOut\fP -events, but the last-focus-change time is not affected. -.LP -This request causes the X server to generate \fBDeviceFocusIn\fP and -\fBDeviceFocusOut\fP events. -.NH 2 -Controlling Device Feedback -.XS -\*(SN Controlling Device Feedback -.XE -.LP -To get the settings of feedbacks on an extension device, use -\fBGetFeedbackControl\fP. This request provides functionality equivalent to -the core \fBGetKeyboardControl\fP and \fBGetPointerControl\fP functions. It -also provides a way to control displays associated with an input device that -are capable of displaying an integer or string. -.sp 1.5 -GetFeedbackControl -.br -.in .5i -device: DEVICE -.br -.in -.5i -=> -.in +.5i -num_feedbacks_return: CARD16 -.br -return_value: LISTofFEEDBACKSTATE -.br -.sp -where -.br -.in +.5i -.TS -l lw(4i). -T{ -FEEDBACKSTATE: -T} T{ -{KbdFeedbackState, PtrFeedbackState, IntegerFeedbackState, StringFeedbackState, BellFeedbackState, LedFeedbackState} -T} -.TE -.in -1.0i -.LP -Feedbacks are reported by class. Those -feedbacks that are reported for the core keyboard device are in class -\fBKbdFeedback\fP, and are returned in the -\fBKbdFeedbackState\fP structure. The members of that structure are as follows: -.in +.5i -.TS -l lw(4i). -T{ -CLASS Kbd: -T} T{ -[class: CARD8 -.br -\ length: CARD16 -.br -\ feedback id: CARD8 -.br -\ key_click_percent: CARD8 -.br -\ bell_percent: CARD8 -.br -\ bell_pitch: CARD16 -.br -\ bell_duration: CARD16 -.br -\ led_value: BITMASK -.br -\ global_auto_repeat: {AutoRepeatModeOn, AutoRepeatModeOff} -.br -\ auto_repeats: LISTofCARD8] -T} -.TE -.in -.5i -.LP -Those feedbacks that are equivalent to those reported for the core pointer -are in feedback class \fBPtrFeedback\fP and are reported in the -\fBPtrFeedbackState\fP structure. The members of that structure are: -.LP -.in +.5i -.TS -l lw(4i). -T{ -CLASS Ptr: -T} T{ -[class: CARD8 -.br -\ length: CARD16 -.br -\ feedback id: CARD8 -.br -\ accelNumerator: CARD16 -.br -\ accelDenominator: CARD16 -.br -\ threshold: CARD16] -T} -.TE -.in -.5i -.LP -Some input devices provide a means of displaying an integer. Those devices -will support feedback class \fBIntegerFeedback\fP, which is reported in the -\fBIntegerFeedbackState\fP structure. The members of that structure are: -.LP -.br -.sp -.in +.5i -.TS -l lw(4i). -T{ -CLASS Integer: -T} T{ -[class: CARD8 -.br -\ length: CARD16 -.br -\ feedback id: CARD8 -.br -\ resolution: CARD32 -.br -\ min-val: INT32 -.br -\ max-val: INT32] -T} -.TE -.in -.5i -.br -.LP -Some input devices provide a means of displaying a string. Those devices -will support feedback class \fBStringFeedback\fP, which is reported in the -\fBStringFeedbackState\fP structure. The members of that structure are: -.LP -.in +.5i -.TS -l lw(4i). -T{ -CLASS String: -T} T{ -[class: CARD8 -.br -\ length: CARD16 -.br -\ feedback id: CARD8 -.br -\ max_symbols: CARD16 -.br -\ num_keysyms_supported: CARD16 -.br -\ keysyms_supported: LISTofKEYSYM] -T} -.TE -.in -.5i -.br -.LP -Some input devices contain a bell. Those devices -will support feedback class \fBBellFeedback\fP, which is reported in the -\fBBellFeedbackState\fP structure. The members of that structure are: -.LP -.sp -.in +.5i -.TS -l lw(4i). -T{ -CLASS Bell: -T} T{ -[class: CARD8 -.br -\ length: CARD16 -.br -\ feedback id: CARD8 -.br -\ percent: CARD8 -.br -\ pitch: CARD16 -.br -\ duration: CARD16] -T} -.TE -.in -.5i -.br -.sp -The percent sets the base volume for the bell between 0 (off) and 100 -(loud) inclusive, if possible. Setting to \-1 restores the default. -Other negative values generate a \fBValue\fP error. -.LP -The pitch sets the pitch (specified in Hz) of the bell, if possible. -Setting to \-1 restores the default. Other negative values generate a -\fBValue\fP error. -.LP -The duration sets the duration (specified in milliseconds) of the -bell, if possible. Setting to \-1 restores the default. -Other negative values generate a \fBValue\fP error. -.LP -A bell generator connected with the console but not directly on the -device is treated as if it were part of the device. -Some input devices contain LEDs. Those devices -will support feedback class \fBLed\fP, which is reported in the -\fBLedFeedbackState\fP structure. The members of that structure are: -.LP -.sp -.in +.5i -.TS -l lw(4i). -T{ -CLASS Led: -T} T{ -[class: CARD8 -.br -\ length: CARD16 -.br -\ feedback id: CARD8 -.br -\ led_mask: BITMASK -.br -\ led_value: BITMASK] -T} -.TE -.in -.5i -.br -.LP -Each bit in led_mask indicates that the corresponding led is supported by -the feedback. At most 32 LEDs per feedback are supported. -No standard interpretation of LEDs is defined. -.LP -This function will fail with a \fBBadMatch\fP error if the device specified -in the request does not support feedbacks. -.LP -Errors: Device, Match -.LP -To change the settings of a feedback on an extension device, use -\fBChangeFeedbackControl\fP. -.sp 1.5 -ChangeFeedbackControl -.br -.in .5i -device: DEVICE -.br -feedbackid: CARD8 -.br -value-mask: BITMASK -.br -value: FEEDBACKCONTROL -.br -.sp -Errors: Device, Match, Value -.br -.in -.5i -.sp 1.5 -.TS -l lw(4i). -.sp -T{ -FEEDBACKCONTROL: -T} T{ -{KBDFEEDBACKCONTROL, PTRFEEDBACKCONTROL, INTEGERFEEDBACKCONTROL, -STRINGFEEDBACKCONTROL, BELLFEEDBACKCONTROL, LEDFEEDBACKCONTROL} -T} -.TE -.br -.LP -Feedback controls are grouped by class. Those feedbacks that are -equivalent to those supported by the core keyboard are controlled -by feedback class \fBKbdFeedbackClass\fP using the \fBKbdFeedbackControl\fP -structure. The members of that structure are: -.in +.5i -.TS -l lw(4i). -T{ -KBDFEEDBACKCTL: -T} T{ -[class: CARD8 -.br -\ length: CARD16 -.br -\ feedback id: CARD8 -.br -\ key_click_percent: INT8 -.br -\ bell_percent: INT8 -.br -\ bell_pitch: INT16 -.br -\ bell_duration: INT16 -.br -\ led_mask: INT32 -.br -\ led_value: INT32 -.br -\ key: KEYCODE -.br -\ auto_repeat_mode: {AutoRepeatModeOn, -.br -\ \ AutoRepeatModeOff, AutoRepeatModeDefault}] -T} -.TE -.in -.5i -.LP -The key_click_percent sets the volume for key clicks between 0 (off) and -100 (loud) inclusive, if possible. Setting to \-1 restores the default. -Other negative values generate a \fBValue\fP error. -.LP -If both auto_repeat_mode and key are specified, then the auto_repeat_mode -of that key is changed, if possible. If only auto_repeat_mode is specified, -then the global auto-repeat mode for the entire keyboard is changed, -if possible, without affecting the per-key settings. It is a \fBMatch\fP -error if a key is specified without an auto_repeat_mode. -.LP -The order in which controls are verified and altered is server-dependent. -If an error is generated, a subset of the controls may have been altered. -.LP -Those feedback controls equivalent to those of the core pointer are -controlled by feedback class \fBPtrFeedbackClass\fP using the -\fBPtrFeedbackControl\fP -structure. The members of that structure are as follows: -.LP -.in +.5i -.TS -l lw(4i). -T{ -PTRFEEDBACKCTL: -T} T{ -[class: CARD8 -.br -\ length: CARD16 -.br -\ feedback id: CARD8 -.br -\ accelNumerator: INT16 -.br -\ accelDenominator: INT16 -.br -\ threshold: INT16] -T} -.TE -.in -.5i -.LP -The acceleration, expressed as a fraction, is a multiplier -for movement. For example, specifying 3/1 means the device moves three -times as fast as normal. The fraction may be rounded arbitrarily by the -X server. Acceleration only takes effect if the device moves more than -threshold pixels at once and only applies to the amount beyond the value -in the threshold argument. Setting a value to -1 restores the default. -The values of the do-accel and do-threshold arguments must be nonzero for -the device values to be set. Otherwise, the parameters will be unchanged. -Negative values generate a \fBValue\fP error, as does a zero value -for the accel-denominator argument. -.LP -Some devices are capable of displaying an integer. This is done using -feedback class \fBIntegerFeedbackClass\fP using the \fBIntegerFeedbackControl\fP -structure. The members of that structure are as follows: -.sp -.in +.5i -.TS -l lw(4i). -T{ -INTEGERCTL: -T} T{ -[class: CARD8 -.br -\ length: CARD16 -.br -\ feedback id: CARD8 -.br -\ int_to_display: INT32] -T} -.TE -.in -.5i -.LP -Some devices are capable of displaying an string. This is done using -feedback class \fBStringFeedbackClass\fP using the \fBStringFeedbackCtl\fP -structure. The members of that structure are as follows: -.sp -.in +.5i -.TS -l lw(4i). -T{ -STRINGCTL: -T} T{ -[class: CARD8 -.br -\ length: CARD16 -.br -\ feedback id: CARD8 -.br -\ syms_to_display: LISTofKEYSYMS] -T} -.TE -.in -.5i -.LP -Some devices contain a bell. This is done using -feedback class \fBBellFeedbackClass\fP using the \fBBellFeedbackControl\fP -structure. The members of that structure are as follows: -.sp -.in +.5i -.TS -l lw(4i). -T{ -BELLCTL: -T} T{ -[class: CARD8 -.br -\ length: CARD16 -.br -\ feedback id: CARD8 -.br -\ percent: INT8 -.br -\ pitch: INT16 -.br -\ duration: INT16] -T} -.TE -.in -.5i -.LP -Some devices contain leds. These can be turned on and off using -the \fBLedFeedbackControl\fP -structure. The members of that structure are as follows: -.sp -.in +.5i -.TS -l lw(4i). -T{ -LEDCTL: -T} T{ -[class: CARD8 -.br -\ length: CARD16 -.br -\ feedback id: CARD8 -.br -\ led_mask: BITMASK -.br -\ led_value: BITMASK] -T} -.TE -.in -.5i -.LP -Errors: Device, Match, Value -.LP -.NH 2 -Ringing a Bell on an Input Device -.XS -\*(SN Ringing a Bell on an Input Device -.XE -.LP -To ring a bell on an extension input device, use \fBDeviceBell\fP. -.sp 1.5 -DeviceBell -.br -.LP -.in .5i -device: DEVICE -.br -feedbackclass: CARD8 -.br -feedbackid: CARD8 -.br -percent: INT8 -.br -.sp -Errors: Device, Value -.br -.in -.5i -.sp 1.5 -.LP -This request is analogous to the core \fBBell\fP request. It rings the -specified bell on the specified input device feedback, using the specified -volume. -The specified volume is relative to the base volume for the feedback. -If the value for the percent argument is not in the range -100 to 100 -inclusive, a \fBValue\fP error results. -The volume at which the bell rings when the percent argument is nonnegative is: -.LP -.DS - base - [(base * percent) / 100] + percent -.DE -.LP -The volume at which the bell rings -when the percent argument is negative is: -.DS - base + [(base * percent) / 100] -.DE -.LP -To change the base volume of the bell, use \fBChangeFeedbackControl\fP request. -.LP -.NH 2 -Controlling Device Encoding -.XS -\*(SN Controlling Device Encoding -.XE -.LP -To get the keyboard mapping of an extension device that has keys, use -\fBGetDeviceKeyMapping\fP. -.sp 1.5 -GetDeviceKeyMapping -.br -.LP -.in .5i -device: DEVICE -.br -first-keycode: KEYCODE -.br -count: CARD8 -.br -.in -.5i -=> -.in +.5i -keysyms-per-keycode: CARD8 -.br -keysyms: LISTofKEYSYM -.br -.sp -Errors: Device, Match, Value -.br -.in -.5i -.sp 1.5 -.LP -This request returns the symbols for the specified number of keycodes for the -specified extension device, starting with the specified keycode. -The first-keycode must be greater than or equal to -min-keycode as returned in the connection setup (else a \fBValue\fP error), -and -.LP -.DS -first-keycode + count \- 1 -.DE -.LP -must be less than or equal to max-keycode as returned in the connection setup -(else a \fBValue\fP error). -The number of elements in the keysyms list is -.LP -.DS -count * keysyms-per-keycode -.DE -and KEYSYM number N (counting from zero) for keycode K has an index -(counting from zero) of -.LP -.DS -(K \- first-keycode) * keysyms-per-keycode + N -.DE -.LP -in keysyms. -The keysyms-per-keycode value is chosen arbitrarily by the server -to be large enough to report all requested symbols. -A special KEYSYM value of -\fBNoSymbol\fP -is used to fill in unused elements for individual keycodes. -.LP -If the specified device has not first been opened by this client via -\fBOpenDevice\fP, or if that device does not support input class Keys, -this request will fail with a \fBDevice\fP error. -.LP -To change the keyboard mapping of an extension device that has keys, use -\fBChangeDeviceKeyMapping\fP. -.sp 1.5 -ChangeDeviceKeyMapping -.br -.in .5i -device: DEVICE -.br -first-keycode: KEYCODE -.br -keysyms-per-keycode: CARD8 -.br -keysyms: LISTofKEYSYM -.br -num_codes: CARD8 -.br -.sp -Errors: Device, Match, Value, Alloc -.br -.in -.5i -.sp 1.5 -.LP -This request is analogous to the core \fBChangeKeyMapping\fP request. -It defines the symbols for the specified number of keycodes for the -specified extension device. -If the specified device has not first been opened by this client via -\fBOpenDevice\fP, or if that device does not support input class Keys, -this request will fail with a \fBDevice\fP error. -.LP -The number of elements in the keysyms list must be a multiple of -keysyms_per_keycode. Otherwise, \fBChangeDeviceKeyMapping\fP generates -a \fBLength\fP error. The specified first_keycode must be greater -than or equal to the min_keycode value returned by the \fBListInputDevices\fP -request, or this request will fail with a \fBValue\fP error. In addition, -if the following expression is not less than the max_keycode value returned by -the \fBListInputDevices\fP request, the request will fail with a \fBValue\fP -error: -.LP -.DS - first_keycode + (num_codes / keysyms_per_keycode) - 1 -.DE -.LP -To obtain the keycodes that are used as modifiers on an -extension device that has keys, use \fBGetDeviceModifierMapping\fP. -.sp 1.5 -GetDeviceModifierMapping -.br -.in .5i -device: DEVICE -.br -.in -.5i -=> -.br -.in +.5i -keycodes-per-modifier: CARD8 -.br -keycodes: LISTofKEYCODE -.br -.sp -Errors: Device, Match -.br -.in -.5i -.sp 1.5 -.LP -This request is analogous to the core \fBGetModifierMapping\fP request. -This request returns the keycodes of the keys being used as modifiers. -The number of keycodes in the list is 8*keycodes-per-modifier. -The keycodes are divided into eight sets, with each set containing -keycodes-per-modifier elements. The sets are assigned in order to the -modifiers \fBShift\fP, \fBLock\fP, \fBControl\fP, \fBMod1\fP, \fBMod2\fP, -\fBMod3\fP, \fBMod4\fP, and \fBMod5\fP. The keycodes-per-modifier value is -chosen arbitrarily by the server; zeroes are used to fill in unused elements -within each set. If only zero values are given in a set, the use of the -corresponding modifier has been disabled. The order of keycodes within -each set is chosen arbitrarily by the server. -.LP -To set which keycodes that are to be used as modifiers for an extension -device, use \fBSetDeviceModifierMapping\fP. -.sp 1.5 -SetDeviceModifierMapping -.br -.LP -.in .5i -device: DEVICE -.br -keycodes-per-modifier: CARD8 -.br -keycodes: LISTofKEYCODE -.br -.in -.5i -=> -.br -.in +.5i -status: {Success, Busy, Failed} -.br -.sp -Errors: Device, Match, Value, Alloc -.in -.5i -.sp 1.5 -.LP -This request is analogous to the core \fBSetModifierMapping\fP request. -This request specifies the keycodes (if any) of the keys to be used as -modifiers. The number of keycodes in the list must be -8*keycodes-per-modifier (else a \fBLength\fP error). The keycodes are -divided into eight sets, with the sets, with each set containing -keycodes-per-modifier elements. The sets are assigned in order to the -modifiers \fBShift\fP, \fBLock\fP, \fBControl\fP, \fBMod1\fP, \fBMod2\fP, -\fBMod3\fP, \fBMod4\fP, and \fBMod5\fP. Only non-zero keycode values are -used within each set; zero values are ignored. All of the non-zero -keycodes must be in the range specified by min-keycode and max-keycode -in the \fBListInputDevices\fP request (else a \fBValue\fP error). The order of -keycodes within a set does not matter. If no non-zero values are specified -in a set, the use of the corresponding modifier is disabled, and the -modifier bit will always be zero. Otherwise, the modifier bit will be -one whenever at least one of the keys in the corresponding set is in the down -position. -.LP -A server can impose restrictions on how modifiers can be changed (for example, -if certain keys do not generate up transitions in hardware or if multiple keys -per modifier are not supported). The status reply is \fBFailed\fP -if some such restriction is violated, and none of the modifiers are changed. -.LP -If the new non-zero keycodes specified for a modifier differ from those -currently defined, and any (current or new) keys for that modifier are -logically in the down state, then the status reply is \fBBusy\fP, -and none of the modifiers are changed. -.IP -This request generates a \fPDeviceMappingNotify\fP event on a -\fBSuccess\fP status. The \fPDeviceMappingNotify\fP event will be sent only -to those clients that have expressed an interest in receiving that event -via the \fBXSelectExtensionEvent\fP request. -.LP -A X server can impose restrictions on how modifiers can be changed, -for example, if certain keys do not generate up transitions in hardware -or if multiple modifier keys are not supported. If some such restriction -is violated, the status reply is -\fBMappingFailed\fP , and none of the modifiers are changed. -If the new keycodes specified for a modifier differ from those -currently defined and any (current or new) keys for that modifier are -in the logically down state, the status reply is \fBMappingBusy\fP, -and none of the modifiers are changed. -.NH 2 -Controlling Button Mapping -.XS -\*(SN Controlling Button Mapping -.XE -.LP -These requests are analogous to the core \fBGetPointerMapping\fP -and \fBChangePointerMapping\fP requests. They allow a client to -determine the current mapping of buttons on an extension device, -and to change that mapping. -.LP -To get the current button mapping for an extension device, use -\fBGetDeviceButtonMapping\fP. -.sp 1.5 -GetDeviceButtonMapping -.br -.in .5i -device: DEVICE -.br -nmap: CARD8 -.br -.in -.5i -=> -.in +.5i -map_return: LISTofCARD8 -.br -.sp -Errors: Device, Match -.in -.5i -.br -.sp -.LP -The \fBGetDeviceButtonMapping\fP function returns the current mapping of -the buttons on the specified device. Elements of the list are indexed -starting from one. The length of the list indicates the number of -physical buttons. The nominal mapping is the identity mapping map[i]=i. -.LP -\fBnmap\fP indicates the number of elements in the \fBmap_return\fP -array. Only the first nmap entries will be copied by the library -into the map_return array. -.sp 2 -.LP -To set the button mapping for an extension device, use -\fBSetDeviceButtonMapping\fP. -.sp 1.5 -SetDeviceButtonMapping -.br -.in .5i -device: DEVICE -.br -map: LISTofCARD8 -.br -nmap: CARD8 -.br -.sp -.in -.5i -=> -.in +.5i -status: CARD8 -.br -.sp -Errors: Device, Match, Value -.in -.5i -.br -.sp -.LP -The \fBSetDeviceButtonMapping\fP function sets the mapping of the specified -device and causes the X server to generate a \fBDeviceMappingNotify\fP -event on a status of \fBMappingSuccess\fP. Elements of the list are -indexed starting from one. The length of the list, -specified in \fBnmap\fP, -must be the same as -\fBGetDeviceButtonMapping\fP would return. Otherwise, -\fBSetDeviceButtonMapping\fP generates a \fBValue\fP error. A zero element -disables a buttons, and elements are not restricted in value by the -number of physical buttons. However, no two elements can have the -same nonzero value. Otherwise, this function generates a -\fBValue\fP error. If any of the buttons to be altered are in the -down state, the status reply is \fBMappingBusy\fP and the mapping is -not changed. -.NH 2 -Obtaining The State Of A Device -.XS -\*(SN Obtaining The State Of A Device -.XE -.LP -To obtain vectors that describe the state of the keys, buttons and valuators -of an extension device, use \fBQueryDeviceState\fP. -.sp 1.5 -QueryDeviceState -.br -.in .5i -device: DEVICE -.br -.in -.5i -=> -.in +.5i -device-id: CARD8 -.br -data: LISTofINPUTCLASS -.br -.sp -.in -.5i -where -.in +.5i -.br -.TS -l lw(4i). -T{ -INPUTCLASS: -T} T{ -{VALUATOR, BUTTON, KEY} -T} -.sp -T{ -CLASS VALUATOR: -T} T{ -[class: CARD8 -.br -\ num_valuators: CARD8 -.br -mode: CARD8 -.in +.5i -.br -#x01 device mode -.in +.5i -.br -(0 = Relative, 1 = Absolute) -.br -.in -.5i -#x02 proximity state -.in +.5i -.br -(0 = InProximity, 1 = OutOfProximity) -.in -1.0i -.br -\ valuators: LISTofINT32] -T} -.br -.sp -T{ -CLASS BUTTON: -T} T{ -[class: CARD8 -.br -\ num_buttons: CARD8 -.br -\ buttons: LISTofCARD8] -T} -.br -.sp -T{ -CLASS KEY: -T} T{ -[class: CARD8 -.br -\ num_keys: CARD8 -.br -\ keys: LISTofCARD8] -T} -.TE -.br -.sp -Errors: Device -.br -.in -.5i -.sp 1.5 -.LP -The \fBQueryDeviceState\fP request returns the current logical state of the -buttons, keys, and valuators on the specified input device. -The \fIbuttons\fP and \fIkeys\fP arrays, byte N (from 0) contains the -bits for key or button 8N to 8N+7 with the least significant bit in the -byte representing key or button 8N. -.LP -If the device has valuators, a bit in the mode field indicates whether the -device is reporting Absolute or Relative data. If it is reporting Absolute -data, the valuators array will contain the current value of the valuators. -If it is reporting Relative data, the valuators array will contain undefined -data. -.LP -If the device reports proximity information, a bit in the mode field indicates -whether the device is InProximity or OutOfProximity. -.NH 1 -Events -.XS -\*(SN Events -.XE -.LP -The input extension creates input events analogous to the core input events. -These extension input events are generated by manipulating one of the -extension input devices. -.NH 2 -Button, Key, and Motion Events -.XS -\*(SN Button, Key, and Motion Events -.XE -.LP -DeviceKeyPress -.br -DeviceKeyRelease -.br -DeviceButtonPress, -.br -DeviceButtonRelease -.br -DeviceMotionNotify -.LP -.in .5i -device: CARD8 -.br -root, event: WINDOW -.br -child: Window or None -.br -same-screen: BOOL -.br -root-x, root-y, event-x, event-y: INT16 -.br -detail: -.br -state: SETofKEYBUTMASK -.br -time: TIMESTAMP -.TE -.in -.5i -.LP -These events are generated when a key, button, or valuator logically changes state. -The generation of these logical changes may lag the physical changes, -if device event processing is frozen. Note that \fBDeviceKeyPress\fP -and \fBDeviceKeyRelease\fP are generated for all keys, even those mapped to modifier bits. -The ``source'' of the event is the window the pointer is in. -The window with respect to which the event is normally reported is found -by looking up the hierarchy (starting with the source window) -for the first window on which any client has selected interest in the event. -The actual window used for reporting can be modified by active grabs and -by the focus window.The window the event is reported with respect to is called -the ``event'' window. -.LP -The root is the root window of the ``source'' window, and root-x and root-y -are the pointer coordinates relative to root's origin at the time of the event. -Event is the ``event'' window. If the event window is on the same screen as -root, then event-x and event-y are the pointer coordinates relative to the -event window's origin. Otherwise, event-x and event-y are zero. If the -source window is an inferior of the event window, then child is set to -the child of the event window that is an ancestor of (or is) the source window. -Otherwise, it is set to None. The state component gives the logical state of -the buttons on the core X pointer and modifier keys on the core X keyboard -just before the event. -The detail component type varies with the event type: -.TS -allbox; -l l. -T{ -Event -T} T{ -Component -T} -T{ -DeviceKeyPress, -.br -DeviceKeyRelease -T} T{ -KEYCODE -T} -T{ -DeviceButtonPress, -.br -DeviceButtonRelease -T} T{ -BUTTON -T} -T{ -DeviceMotionNotify -T} T{ -{ Normal , Hint } -T} -.TE -.LP -The granularity of motion events is not guaranteed, but a client selecting -for motion events is guaranteed to get at least one event when a valuator -changes. If \fBDeviceMotionHint\fP is selected, the server is free to send -only one \fBDeviceMotionNotify\fP event (with detail \fBHint\fP) to the -client for the event window, until either a key or button changes state, -the pointer leaves the event window, or the client issues a -\fBQueryDeviceState\fP or \fBGetDeviceMotionEvents\fP request. -.NH 2 -DeviceValuator Event -.XS -\*(SN DeviceValuator Event -.XE -.LP -DeviceValuator -.LP -.in .5i -device: CARD8 -.br -device_state: SETofKEYBUTMASK -.br -num_valuators: CARD8 -.br -first_valuator: CARD8 -.br -valuators: LISTofINT32 -.TE -.in -.5i -.LP -DeviceValuator events are generated to contain valuator information for which -there is insufficient space in DeviceKey, DeviceButton, DeviceMotion, and -Proximity wire events. For events of these types, a second event of type -DeviceValuator follows immediately. The library combines these events into -a single event that a client can receive via XNextEvent. DeviceValuator -events are not selected for by clients, they only exist to contain information -that will not fit into some event selected by clients. -.LP -The device_state component gives the state of the -buttons and modifiers on the device generating the event. -.LP -Extension motion devices may report motion data for a variable number of -axes. The valuators array contains the values of all axes reported by the -device. If more than 6 axes are reported, more than one DeviceValuator event -will be sent by the server, and more than one DeviceKey, DeviceButton, -DeviceMotion, or Proximity event will be reported by the library. -Clients should examine the corresponding fields of the event reported by -the library to determine the total number of axes reported, and the first axis -reported in the current event. Axes are numbered beginning with zero. -.LP -For Button, Key and Motion events on a device reporting absolute motion data -the current value of the device's valuators is reported. For devices that -report relative data, Button and Key events may be followed by a DeviceValuator -event that contains 0s in the num_valuators field. In this case, only the -device_state component will have meaning. -.NH 2 -Device Focus Events -.XS -\*(SN Device Focus Events -.XE -.LP -DeviceFocusIn -.br -DeviceFocusOut -.LP -.in .5i -device: CARD8 -.br -time: TIMESTAMP -.br -event: WINDOW -.br -mode: { Normal, WhileGrabbed, Grab, Ungrab} -.br -detail: { Ancestor, Virtual, Inferior, Nonlinear, NonlinearVirtual, Pointer, PointerRoot, None} -.br -.in -.5i -.LP -These events are generated when the input focus changes and are reported to -clients selecting \fBDeviceFocusChange\fP for the specified device and window. -Events generated by \fBSetDeviceFocus\fP when the device is not grabbed -have mode \fBNormal\fP. Events generated by \fBSetDeviceFocus\fP when the -device is grabbed have mode \fBWhileGrabbed\fP. Events generated when a -device grab actives have mode \fBGrab\fP, and events generated when a device -grab deactivates have mode \fBUngrab\fP. -.LP -All \fBDeviceFocusOut\fP events caused by a window unmap are generated after -any \fBUnmapNotify\fP event, but the ordering of \fBDeviceFocusOut\fP with -respect to generated \fBEnterNotify\fP, \fBLeaveNotify\fP, -\fBVisibilityNotify\fP and \fBExpose\fP events is not constrained. -.LP -\fBDeviceFocusIn\fP and \fBDeviceFocusOut\fP events are generated for -focus changes of extension devices in the same manner as focus events for -the core devices are generated. -.NH 2 -Device State Notify Event -.XS -\*(SN Device State Notify Event -.XE -.LP -DeviceStateNotify -.LP -.in .5i -time: TIMESTAMP -.br -device: CARD8 -.br -num_keys: CARD8 -.br -num_buttons: CARD8 -.br -num_valuators: CARD8 -.br -classes_reported: CARD8 {SetOfDeviceMode | SetOfInputClass} -.in +.5i -.br -SetOfDeviceMode: -.in +.5i -.br -#x80 ProximityState -.in +.5i -.br -0 = InProxmity, 1 = OutOfProximity -.in -.5i -.br -#x40 Device Mode -.in +.5i -.br -(0 = Relative, 1 = Absolute) -.br -.in -1.0i -SetOfInputClass: -.in +.5i -.br -#x04 reporting valuators -.br -#x02 reporting buttons -.br -#x01 reporting keys -.in -1.0i -.br -buttons: LISTofCARD8 -.br -keys: LISTofCARD8 -.br -valuators: LISTofCARD32 -.br -.TE -.in -.5i -.LP -This event reports the state of the device just as in the -\fBQueryDeviceState\fP request. This event is reported to clients selecting -\fBDeviceStateNotify\fP for the device and window and is generated immediately -after every \fBEnterNotify\fP and \fBDeviceFocusIn\fP. If the device has -no more than 32 buttons, no more than 32 keys, and no more than 3 valuators, -This event can report the state of the device. If the device has more -than 32 buttons, the event will be immediately followed by a -DeviceButtonStateNotify event. If the device has more than 32 keys, the -event will be followed by a DeviceKeyStateNotify event. If the device has more -than 3 valuators, the event will be followed by one or more DeviceValuator -events. -.NH 2 -Device KeyState and ButtonState Notify Events -.XS -\*(SN Device KeyState and ButtonState Notify Events -.XE -.LP -DeviceKeyStateNotify -.LP -.in .5i -device: CARD8 -.br -keys: LISTofCARD8 -.in -.5i -.LP -DeviceButtonStateNotify -.LP -.in .5i -device: CARD8 -.br -buttons: LISTofCARD8 -.in -.5i -.LP -These events contain information about the state of keys and buttons on a -device that will not fit into the DeviceStateNotify wire event. These events -are not selected by clients, rather they may immediately follow a -DeviceStateNotify wire event and be combined with it into a single -DeviceStateNotify client event that a client may receive via XNextEvent. -.NH 2 -DeviceMappingNotify Event -.XS -\*(SN DeviceMappingNotify Event -.XE -.LP -DeviceMappingNotify -.LP -.in .5i -time: TIMESTAMP -.br -device: CARD8 -.br -request: CARD8 -.br -first_keycode: CARD8 -.br -count: CARD8 -.in -.5i -.LP -This event reports a change in the mapping of keys, modifiers, or buttons on -an extension device. This event is reported to clients selecting -\fBDeviceMappingNotify\fP for the device and window and is generated -after every client \fBSetDeviceButtonMapping\fP, \fBChangeDeviceKeyMapping\fP, -or \fBChangeDeviceModifierMapping\fP request. -.NH 2 -ChangeDeviceNotify Event -.XS -\*(SN ChangeDeviceNotify Event -.XE -.LP -ChangeDeviceNotify -.LP -.in .5i -device: CARD8 -.br -time: TIMESTAMP -.br -request: CARD8 -.in -.5i -.LP -This event reports a change in the physical device being used as the core -X keyboard or X pointer device. -\fBChangeDeviceNotify\fP events are reported to clients selecting -\fBChangeDeviceNotify\fP for the device and window and is generated -after every client \fBChangeKeyboardDevice\fP -or \fBChangePointerDevice\fP request. -.NH 2 -Proximity Events -.XS -\*(SN Proximity Events -.XE -.LP -ProximityIn -.br -ProximityOut -.LP -.in .5i -device: CARD8 -.br -root, event: WINDOW -.br -child: Window or None -.br -same-screen: BOOL -.br -root-x, root-y, event-x, event-y: INT16 -.br -state: SETofKEYBUTMASK -.br -time: TIMESTAMP -.br -device-state: SETofKEYBUTMASK -.br -axis-count: CARD8 -.br -first-axis: CARD8 -.br -axis-data: LISTofINT32 -.br -.in -.5i -.TE -.LP -These events are generated by some devices (such as graphics tablets or -touchscreens) to indicate that a stylus has moved into or out of contact -with a positional sensing surface. -.LP -The ``source'' of the event is the window the pointer is in. -The window with respect to which the event is normally reported is found -by looking up the hierarchy (starting with the source window) -for the first window on which any client has selected interest in the event. -The actual window used for reporting can be modified by active grabs and -by the focus window.The window the event is reported with respect to is called -the ``event'' window. -.LP -The root is the root window of the ``source'' window, and root-x and root-y -are the pointer coordinates relative to root's origin at the time of the event. -Event is the ``event'' window. If the event window is on the same screen as -root, then event-x and event-y are the pointer coordinates relative to the -event window's origin. Otherwise, event-x and event-y are zero. If the -source window is an inferior of the event window, then child is set to -the child of the event window that is an ancestor of (or is) the source window. -Otherwise, it is set to None. The state component gives the logical state of -the buttons on the core X pointer and modifier keys on the core X keyboard -just before the event. The device-state component gives the state of the -buttons and modifiers on the device generating the event. -.bp diff --git a/doc/xorg-docs/specs/Xmu/Xmu.ms b/doc/xorg-docs/specs/Xmu/Xmu.ms deleted file mode 100644 index 1d7fe70a9..000000000 --- a/doc/xorg-docs/specs/Xmu/Xmu.ms +++ /dev/null @@ -1,2494 +0,0 @@ -.\" $XdotOrg: xc/doc/specs/Xmu/Xmu.ms,v 1.2 2004/04/23 18:42:19 eich Exp $ -.\" $XFree86$ -.\" -.sp 8 -.ce 2 -\s+2\fBXmu Library\fP\s-2 -.sp 6p -X Version 11, Release 6.8 -.sp 1 -.ce 1 -``\fIDon't ask.\fP'' -.sp 2 -.LP -Copyright \(co 1989 X Consortium -.LP -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -.LP -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -.LP -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. -.sp 3 -\fIX Window System\fP is a trademark of The Open Group. -.bp -.NH 1 -Introduction -.LP -The Xmu Library is a collection of miscellaneous (some might say random) -utility functions that have been useful in building various applications -and widgets. This library is required by the Athena Widgets. -.LP -.NH 1 -Atom Functions -.LP -The use the functions and macros defined in this section, you should include -the header file -.Pn < X11/Xmu/Atoms.h >. -.sp -.FD 0 -XA_ATOM_PAIR(\fId\fP) -XA_CHARACTER_POSITION(\fId\fP) -XA_CLASS(\fId\fP) -XA_CLIENT_WINDOW(\fId\fP) -XA_CLIPBOARD(\fId\fP) -XA_COMPOUND_TEXT(\fId\fP) -XA_DECNET_ADDRESS(\fId\fP) -XA_DELETE(\fId\fP) -XA_FILENAME(\fId\fP) -XA_HOSTNAME(\fId\fP) -XA_IP_ADDRESS(\fId\fP) -XA_LENGTH(\fId\fP) -XA_LIST_LENGTH(\fId\fP) -XA_NAME(\fId\fP) -XA_NET_ADDRESS(\fId\fP) -XA_NULL(\fId\fP) -XA_OWNER_OS(\fId\fP) -XA_SPAN(\fId\fP) -XA_TARGETS(\fId\fP) -XA_TEXT(\fId\fP) -XA_TIMESTAMP(\fId\fP) -XA_USER(\fId\fP) -XA_UTF8_STRING(\fId\fP) -.FN -.LP -These macros take a display as argument and return an -.PN Atom . -The name of the -atom is obtained from the macro name by removing the leading characters -``XA_''. The -.PN Atom -value is cached, such that subsequent requests do not cause -another round-trip to the server. -.sp -.FD 0 -AtomPtr XmuMakeAtom(\fIname\fP) -.br - char* \fIname\fP; -.FN -.IP \fIname\fP 1i -specifies the atom name -.LP -This function creates and initializes an opaque object, an -.PN AtomPtr , -for an -.PN Atom -with the -given name. -.PN XmuInternAtom -can be used to cache the Atom value for one or more displays. -.sp -.FD 0 -char *XmuNameOfAtom(\fIatom_ptr\fP) -.br - AtomPtr \fIatom_ptr\fP; -.FN -.IP \fIatom_ptr\fP 1i -specifies the AtomPtr -.LP -The function returns the name of an AtomPtr. -.sp -.FD 0 -Atom XmuInternAtom(\fId\fP, \fIatom_ptr\fP) -.br - Display *\fId\fP; -.br - AtomPtr \fIatom_ptr\fP; -.FN -.IP \fId\fP 1i -specifies the connection to the X server -.IP \fIatom_ptr\fP 1i -specifies the AtomPtr -.LP -This function returns the -.PN Atom -for an -.PN AtomPtr . -The -.PN Atom -is cached, -such that subsequent requests do not cause another round-trip to the server. -.sp -.FD 0 -char *XmuGetAtomName(\fId\fP, \fIatom\fP) -.br - Display *\fId\fP; -.br - Atom \fIatom\fP; -.FN -.IP \fId\fP 1i -specifies the connection to the X server -.IP \fIatom\fP 1i -specifies the atom whose name is desired -.LP -This function returns the name of an -.PN Atom . -The result is cached, such that subsequent -requests do not cause another round-trip to the server. -.sp -.FD 0 -void XmuInternStrings(\fId\fP, \fInames\fP, \fIcount\fP, \fIatoms\fP) -.br - Display *\fId\fP; -.br - String *\fInames\fP; -.br - Cardinal \fIcount\fP; -.br - Atom *\fIatoms\fP; -.FN -.IP \fId\fP 1i -specifies the connection to the X server -.IP \fInames\fP 1i -specifies the strings to intern -.IP \fIcount\fP 1i -specifies the number of strings -.IP \fIatoms\fP 1i -returns the list of Atom values -.LP -This function converts a list of atom names into -.PN Atom -values. The results are cached, such -that subsequent requests do not cause further round-trips to the server. -The caller is responsible for preallocating the array pointed at by atoms. -.LP -.NH 1 -Error Handler Functions -.LP -To use the functions defined in this section, you should include the header -file -.Pn < X11/Xmu/Error.h >. -.sp -.FD 0 -int XmuPrintDefaultErrorMessage(\fIdpy\fP, \fIevent\fP, \fIfp\fP) -.br - Display *\fIdpy\fP; -.br - XErrorEvent *\fIevent\fP; -.br - FILE *\fIfp\fP; -.FN -.IP \fIdpy\fP 1i -specifies the connection to the X server -.IP \fIevent\fP 1i -specifies the error -.IP \fIfp\fP 1i -specifies where to print the error message -.LP -This function prints an error message, equivalent to Xlib's default error -message for protocol errors. It returns a non-zero value -if the caller should consider exiting, otherwise it returns 0. -This function can be used when you need to -write your own error handler, but need to print out an error from within -that handler. -.sp -.FD 0 -int XmuSimpleErrorHandler(\fIdpy\fP, \fIerrorp\fP) -.br - Display *\fIdpy\fP; -.br - XErrorEvent *\fIerrorp\fP; -.FN -.IP \fIdpy\fP 1i -specifies the connection to the X server -.IP \fIerrorp\fP 1i -specifies the error -.LP -This function ignores errors for -.PN BadWindow -errors for -.PN XQueryTree -and -.PN XGetWindowAttributes , -and ignores -.PN BadDrawable -errors for -.PN XGetGeometry ; -it returns 0 in those cases. Otherwise, it prints the default error message, -and returns a non-zero value if the caller should consider exiting, -and 0 if the caller should not exit. -.LP -.NH 1 -System Utility Functions -.LP -To use the functions defined in this section, you should include the header -file -.Pn < X11/Xmu/SysUtil.h >. -.sp -.FD 0 -int XmuGetHostname(\fIbuf\fP, \fImaxlen\fP) -.br - char *\fIbuf\fP; -.br - int \fImaxlen\fP; -.FN -.IP \fIbuf\fP 1i -returns the host name -.IP \fImaxlen\fP 1i -specifies the length of buf -.LP -This function stores the null terminated name of the local host in buf, and -returns length of the name. This function hides operating system differences, -such as whether to call gethostname or uname. -.LP -.NH 1 -Window Utility Functions -.LP -To use the functions defined in this section, you should include the header -file -.Pn < X11/Xmu/WinUtil.h >. -.sp -.FD 0 -Screen *XmuScreenOfWindow(\fIdpy\fP, \fIw\fP) -.br - Display *\fIdpy\fP; -.br - Window \fIw\fP; -.FN -.IP \fIdpy\fP 1i -specifies the connection to the X server -.IP \fIw\fP 1i -specifies the window -.LP -This function returns the -.PN Screen -on which the specified window was created. -.sp -.FD 0 -Window XmuClientWindow(\fIdpy\fP, \fIwin\fP) -.br - Display *\fIdpy\fP; -.br - Window \fIwin\fP; -.FN -.IP \fIdpy\fP 1i -specifies the connection to the X server -.IP \fIwin\fP 1i -specifies the window -.LP -This function finds a window, at or below the specified window, which has a -WM_STATE property. If such a window is found, it is returned, otherwise the -argument window is returned. -.sp -.FD 0 -Bool XmuUpdateMapHints(\fIdpy\fP, \fIw\fP, \fIhints\fP) -.br - Display *\fIdpy\fP; -.br - Window \fIw\fP; -.br - XSizeHints *\fIhints\fP; -.FN -.IP \fIdpy\fP 1i -specifies the connection to the X server -.IP \fIwin\fP 1i -specifies the window -.IP \fIhints\fP 1i -specifies the new hints, or NULL -.LP -This function clears the -.PN PPosition -and -.PN PSize -flags and sets the -.PN USPosition -and -.PN USSize -flags in the hints structure, and then stores the hints for the -window using -.PN XSetWMNormalHints -and returns -.PN True . -If NULL is passed for the -hints structure, then the current hints are read back from the window using -.PN XGetWMNormalHints -and are used instead, and -.PN True -is returned; otherwise -.PN False -is returned. -.LP -.NH 1 -Cursor Utility Functions -.LP -To use the functions defined in this section, you should include the header -file -.Pn < X11/Xmu/CurUtil.h >. -.sp -.FD 0 -int XmuCursorNameToIndex(\fIname\fP) -.br - char *\fIname\fP; -.FN -.IP \fIname\fP 1i -specifies the name of the cursor -.LP -This function takes the name of a standard cursor and returns its index -in the standard cursor font. The cursor names are formed by removing the -``XC_'' prefix from the cursor defines listed in Appendix B of the Xlib -manual. -.LP -.NH 1 -Graphics Functions -.LP -To use the functions defined in this section, you should include the header -file -.Pn < X11/Xmu/Drawing.h >. -.sp -.FD 0 -void XmuDrawRoundedRectangle(\fIdpy\fP, \fIdraw\fP, \fIgc\fP, \fIx\fP, \fIy\fP, \fIw\fP, \fIh\fP, \fIew\fP, \fIeh\fP) -.br - Display *\fIdpy\fP; -.br - Drawable \fIdraw\fP; -.br - GC \fIgc\fP; -.br - int \fIx\fP, \fIy\fP, \fIw\fP, \fIh\fP, \fIew\fP, \fIeh\fP; -.FN -.IP \fIdpy\fP 1i -specifies the connection to the X server -.IP \fIdraw\fP 1i -specifies the drawable -.IP \fIgc\fP 1i -specifies the GC -.IP \fIx\fP 1i -specifies the upper left x coordinate -.IP \fIy\fP 1i -specifies the upper left y coordinate -.IP \fIw\fP 1i -specifies the rectangle width -.IP \fIh\fP 1i -specifies the rectangle height -.IP \fIew\fP 1i -specifies the corner width -.IP \fIeh\fP 1i -specifies the corner height -.LP -This function draws a rounded rectangle, where x, y, w, h are the dimensions -of the overall rectangle, and ew and eh are the sizes of a bounding box that -the corners are drawn inside of; ew should be no more than half of w, and eh -should be no more than half of h. The current GC line attributes control -all attributes of the line. -.sp -.FD 0 -void XmuFillRoundedRectangle(\fIdpy\fP, \fIdraw\fP, \fIgc\fP, \fIx\fP, \fIy\fP, \fIw\fP, \fIh\fP, \fIew\fP, \fIeh\fP) -.br - Display *\fIdpy\fP; -.br - Drawable \fIdraw\fP; -.br - GC \fIgc\fP; -.br - int \fIx\fP, \fIy\fP, \fIw\fP, \fIh\fP, \fIew\fP, \fIeh\fP; -.FN -.IP \fIdpy\fP 1i -specifies the connection to the X server -.IP \fIdraw\fP 1i -specifies the drawable -.IP \fIgc\fP 1i -specifies the GC -.IP \fIx\fP 1i -specifies the upper left x coordinate -.IP \fIy\fP 1i -specifies the upper left y coordinate -.IP \fIw\fP 1i -specifies the rectangle width -.IP \fIh\fP 1i -specifies the rectangle height -.IP \fIew\fP 1i -specifies the corner width -.IP \fIeh\fP 1i -specifies the corner height -.LP -This function draws a filled rounded rectangle, where x, y, w, h are the -dimensions of the overall rectangle, and ew and eh are the sizes of a -bounding box that the corners are drawn inside of; ew should be no more than -half of w, and eh should be no more than half of h. The current GC fill -settings control all attributes of the fill contents. -.sp -.FD 0 -XmuDrawLogo(\fIdpy\fP, \fIdrawable\fP, \fIgcFore\fP, \fIgcBack\fP, \fIx\fP, \fIy\fP, \fIwidth\fP, \fIheight\fP) -.br - Display *\fIdpy\fP; -.br - Drawable \fIdrawable\fP; -.br - GC \fIgcFore\fP, \fIgcBack\fP; -.br - int \fIx\fP, \fIy\fP; -.br - unsigned int \fIwidth\fP, \fIheight\fP; -.FN -.IP \fIdpy\fP 1i -specifies the connection to the X server -.IP \fIdrawable\fP 1i -specifies the drawable -.IP \fIgcFore\fP 1i -specifies the foreground GC -.IP \fIgcBack\fP 1i -specifies the background GC -.IP \fIx\fP 1i -specifies the upper left x coordinate -.IP \fIy\fP 1i -specifies the upper left y coordinate -.IP \fIwidth\fP 1i -specifies the logo width -.IP \fIheight\fP 1i -specifies the logo height -.LP -This function draws the ``official'' X Window System logo. The bounding box -of the logo in the drawable is given by x, y, width, and height. The logo -itself is filled using gcFore, and the rest of the rectangle is filled using -gcBack. -.sp -.FD 0 -Pixmap XmuCreateStippledPixmap(\fIscreen\fP, \fIfore\fP, \fIback\fP, \fIdepth\fP) -.br - Screen *\fIscreen\fP; -.br - Pixel \fIfore\fP, \fIback\fP; -.br - unsigned int \fIdepth\fP; -.FN -.IP \fIscreen\fP 1i -specifies the screen the pixmap is created on -.IP \fIfore\fP 1i -specifies the foreground pixel value -.IP \fIback\fP 1i -specifies the background pixel value -.IP \fIdepth\fP 1i -specifies the depth of the pixmap -.LP -This function creates a two pixel by one pixel stippled pixmap of specified -depth on the specified screen. The pixmap is cached so that multiple -requests share the same pixmap. The pixmap should be freed with -.PN XmuReleaseStippledPixmap -to maintain correct reference counts. -.sp -.FD 0 -void XmuReleaseStippledPixmap(\fIscreen\fP, \fIpixmap\fP) -.br - Screen *\fIscreen\fP; -.br - Pixmap \fIpixmap\fP; -.FN -.IP \fIscreen\fP 1i -specifies the screen the pixmap was created on -.IP \fIpixmap\fP 1i -specifies the pixmap to free -.LP -This function frees a pixmap created with -.PN XmuCreateStippledPixmap . -.sp -.FD 0 -int XmuReadBitmapData(\fIfstream\fP, \fIwidth\fP, \fIheight\fP, \fIdatap\fP, \fIx_hot\fP, \fIy_hot\fP) - FILE *\fIfstream\fP; - unsigned int *\fIwidth\fP, *\fIheight\fP; - unsigned char **\fIdatap\fP; - int *\fIx_hot\fP, *\fIy_hot\fP; -.FN -.IP \fIstream\fP 1i -specifies the stream to read from -.IP \fIwidth\fP 1i -returns the width of the bitmap -.IP \fIheight\fP 1i -returns the height of the bitmap -.IP \fIdatap\fP 1i -returns the parsed bitmap data -.IP \fIx_hot\fP 1i -returns the x coordinate of the hotspot -.IP \fIy_hot\fP 1i -returns the y coordinate of the hotspot -.LP -This function reads a standard bitmap file description from the specified -stream, and returns the parsed data in a format suitable for passing to -.PN XCreateBitmapFromData . -The return value of the function has the same -interpretation as the return value for -.PN XReadBitmapFile . -.sp -.FD 0 -int XmuReadBitmapDataFromFile(\fIfilename\fP, \fIwidth\fP, \fIheight\fP, \fIdatap\fP, \fIx_hot\fP, \fIy_hot\fP) - char *\fIfilename\fP; - unsigned int *\fIwidth\fP, *\fIheight\fP; - unsigned char **\fIdatap\fP; - int *\fIx_hot\fP, *\fIy_hot\fP; -.FN -.IP \fIfilename\fP 1i -specifies the file to read from -.IP \fIwidth\fP 1i -returns the width of the bitmap -.IP \fIheight\fP 1i -returns the height of the bitmap -.IP \fIdatap\fP 1i -returns the parsed bitmap data -.IP \fIx_hot\fP 1i -returns the x coordinate of the hotspot -.IP \fIy_hot\fP 1i -returns the y coordinate of the hotspot -.LP -This function reads a standard bitmap file description from the specified -file, and returns the parsed data in a format suitable for passing to -.PN XCreateBitmapFromData . -The return value of the function has the same -interpretation as the return value for -.PN XReadBitmapFile . -.sp -.FD 0 -Pixmap XmuLocateBitmapFile(\fIscreen\fP, \fIname\fP, \fIsrcname\fP, \fIsrcnamelen\fP, \fIwidthp\fP, \fIheightp\fP, \fIxhotp\fP, \fIyhotp\fP) - Screen *\fIscreen\fP; - char *\fIname\fP; - char *\fIsrcname\fP; - int \fIsrcnamelen\fP; - int *\fIwidthp\fP, *\fIheightp\fP, *\fIxhotp\fP, *\fIyhotp\fP; -.FN -.IP \fIscreen\fP 1i -specifies the screen the pixmap is created on -.IP \fIname\fP 1i -specifies the file to read from -.IP \fIsrcname\fP 1i -returns the full filename of the bitmap -.IP \fIsrcnamelen\fP 1i -specifies the length of the srcname buffer -.IP \fIwidth\fP 1i -returns the width of the bitmap -.IP \fIheight\fP 1i -returns the height of the bitmap -.IP \fIxhotp\fP 1i -returns the x coordinate of the hotspot -.IP \fIyhotp\fP 1i -returns the y coordinate of the hotspot -.LP -This function reads a file in standard bitmap file format, using -.PN XReadBitmapFile , -and returns the created bitmap. The filename may be -absolute, or relative to the global resource named bitmapFilePath with class -BitmapFilePath. If the resource is not defined, the default value is the -build symbol BITMAPDIR, which is typically "/usr/include/X11/bitmaps". If -srcnamelen is greater than zero and srcname is not NULL, the null terminated -filename will be copied into srcname. The size and hotspot of the bitmap are -also returned. -.sp -.FD 0 -Pixmap XmuCreatePixmapFromBitmap(\fIdpy\fP, \fId\fP, \fIbitmap\fP, \fIwidth\fP, \fIheight\fP, \fIdepth\fP, \fIfore\fP, \fIback\fP) - Display *\fIdpy\fP; - Drawable \fId\fP; - Pixmap \fIbitmap\fP; - unsigned int \fIwidth\fP, \fIheight\fP; - unsigned int \fIdepth\fP; - unsigned long \fIfore\fP, \fIback\fP; -.FN -.IP \fIdpy\fP 1i -specifies the connection to the X server -.IP \fId\fP 1i -specifies the screen the pixmap is created on -.IP \fIbitmap\fP 1i -specifies the bitmap source -.IP \fIwidth\fP 1i -specifies the width of the pixmap -.IP \fIheight\fP 1i -specifies the height of the pixmap -.IP \fIdepth\fP 1i -specifies the depth of the pixmap -.IP \fIfore\fP 1i -specifies the foreground pixel value -.IP \fIback\fP 1i -specifies the background pixel value -.LP -This function creates a pixmap of the specified width, height, and depth, on -the same screen as the specified drawable, and then performs an -.PN XCopyPlane -from the specified bitmap to the pixmap, -using the specified foreground and background pixel values. -The created pixmap is returned. -.LP -.NH 1 -Selection Functions -.LP -To use the functions defined in this section, you should include the header -file -.Pn < X11/Xmu/StdSel.h >. -.sp -.FD 0 -Boolean XmuConvertStandardSelection(\fIw\fP, \fItime\fP, \fIselection\fP, \fItarget\fP, \fItype\fP, \fIvalue\fP, \fIlength\fP, \fIformat\fP) -.br - Widget \fIw\fP; -.br - Time \fItime\fP; -.br - Atom *\fIselection\fP, *\fItarget\fP, *\fItype\fP; -.br - caddr_t *\fIvalue\fP; -.br - unsigned long *\fIlength\fP; -.br - int *\fIformat\fP; -.FN -.IP \fIw\fP 1i -specifies the widget which currently owns the selection -.IP \fItime\fP 1i -specifies the time at which the selection was established -.IP \fIselection\fP 1i -this argument is ignored -.IP \fItarget\fP 1i -specifies the target type of the selection -.IP \fItype\fP 1i -returns the property type of the converted value -.IP \fIvalue\fP 1i -returns the converted value -.IP \fIlength\fP 1i -returns the number of elements in the converted value -.IP \fIformat\fP 1i -returns the size in bits of the elements -.LP -This function converts the following standard selections: CLASS, -CLIENT_WINDOW, DECNET_ADDRESS, HOSTNAME, IP_ADDRESS, NAME, OWNER_OS, -TARGETS, TIMESTAMP, and USER. It returns -.PN True -if the conversion was successful, else it returns -.PN False. -.LP -.NH 1 -Type Converter Functions -.LP -To use the functions defined in this section, you should include the header -file -.Pn < X11/Xmu/Converters.h >. -.sp -.FD 0 -void XmuCvtFunctionToCallback(\fIargs\fP, \fInum_args\fP, \fIfromVal\fP, \fItoVal\fP) -.br - XrmValue *\fIargs\fP; -.br - Cardinal *\fInum_args\fP; -.br - XrmValuePtr \fIfromVal\fP; -.br - XrmValuePtr \fItoVal\fP; -.FN -.IP \fIargs\fP 1i -this argument is ignored -.IP \fInum_args\fP 1i -this argument is ignored -.IP \fIfromVal\fP 1i -the function to convert -.IP \fItoVal\fP -the place to store the converted value -.LP -This function converts a callback procedure to a callback list containing -that procedure, with NULL closure data. To use this converter, include the -following in your widget's ClassInitialize procedure: -.LP -XtAddConverter(XtRCallProc, XtRCallback, XmuCvtFunctionToCallback, NULL, 0); -.sp -.FD 0 -void XmuCvtStringToBackingStore(\fIargs\fP, \fInum_args\fP, \fIfromVal\fP, \fItoVal\fP) -.br - XrmValue *\fIargs\fP; -.br - Cardinal *\fInum_args\fP; -.br - XrmValuePtr \fIfromVal\fP; -.br - XrmValuePtr \fItoVal\fP; -.FN -.IP \fIargs\fP 1i -this argument is ignored -.IP \fInum_args\fP 1i -this argument must be a pointer to a Cardinal containing the value 0 -.IP \fIfromVal\fP 1i -specifies the string to convert -.IP \fItoVal\fP -returns the converted value -.LP -This function converts a string to a backing-store integer as defined in -.Pn < X11/X.h >. -The string "notUseful" converts to -.PN NotUseful , -"whenMapped" converts to -.PN WhenMapped , -and "always" converts to -.PN Always . -The string "default" converts to the value -.PN Always + -.PN WhenMapped + -.PN NotUseful . -The case of the string does not matter. -To use this converter, include the following -in your widget's ClassInitialize procedure: -.LP -XtAddConverter(XtRString, XtRBackingStore, XmuCvtStringToBackingStore, NULL, 0); -.sp -.FD 0 -void XmuCvtStringToBitmap(\fIargs\fP, \fInum_args\fP, \fIfromVal\fP, \fItoVal\fP) -.br - XrmValuePtr \fIargs\fP; -.br - Cardinal *\fInum_args\fP; -.br - XrmValuePtr \fIfromVal\fP; -.br - XrmValuePtr \fItoVal\fP; -.FN -.IP \fIargs\fP 1i -the sole argument specifies the Screen on which to create the bitmap -.IP \fInum_args\fP 1i -must be the value 1 -.IP \fIfromVal\fP 1i -specifies the string to convert -.IP \fItoVal\fP -returns the converted value -.LP -This function creates a bitmap (a Pixmap of depth one) suitable for window -manager icons. The string argument is the name of a file in standard bitmap -file format. For the possible filename specifications, see -.PN XmuLocateBitmapFile . -To use this converter, include the following in your widget's -ClassInitialize procedure: -.LP -static XtConvertArgRec screenConvertArg[] = { -.br - {XtBaseOffset, (XtPointer)XtOffset(Widget, core.screen), sizeof(Screen *)} -.br -}; -.LP -XtAddConverter(XtRString, XtRBitmap, XmuCvtStringToBitmap, -.br - screenConvertArg, XtNumber(screenConvertArg)); -.sp -.FD 0 -Boolean XmuCvtStringToColorCursor(\fIdpy\fP, \fIargs\fP, \fInum_args\fP, \fIfromVal\fP, \fItoVal\fP, \fIdata\fP) -.br - Display * \fIdpy\fP; -.br - XrmValuePtr \fIargs\fP; -.br - Cardinal *\fInum_args\fP; -.br - XrmValuePtr \fIfromVal\fP; -.br - XrmValuePtr \fItoVal\fP; -.br - XtPointer * \fIdata\fP; -.FN -.IP \fIdpy\fP 1i -specifies the display to use for conversion warnings -.IP \fIargs\fP 1i -specifies the required conversion arguments -.IP \fInum_args\fP 1i -specifies the number of required conversion arguments, which is 4 -.IP \fIfromVal\fP 1i -specifies the string to convert -.IP \fItoVal\fP -returns the converted value -.IP \fIdata\fP -this argument is ignored -.LP -This function converts a string to a -.PN Cursor -with the foreground and background pixels specified by the conversion -arguments. The string can either be a -standard cursor name formed by removing the ``XC_'' prefix from any of the -cursor defines listed in Appendix B of the Xlib Manual, a font name and -glyph index in decimal of the form "FONT fontname index [[font] index]", -or a bitmap filename acceptable to -.PN XmuLocateBitmapFile . -To use this converter, include -the following in the widget ClassInitialize procedure: -.LP -static XtConvertArgRec colorCursorConvertArgs[] = { -.br - {XtWidgetBaseOffset, (XtPointer) XtOffsetOf(WidgetRec, core.screen), - sizeof(Screen *)}, - {XtResourceString, (XtPointer) XtNpointerColor, sizeof(Pixel)}, - {XtResourceString, (XtPointer) XtNpointerColorBackground, sizeof(Pixel)}, - {XtWidgetBaseOffset, (XtPointer) XtOffsetOf(WidgetRec, core.colormap), - sizeof(Colormap)} -.br -}; -.LP -XtSetTypeConverter(XtRString, XtRColorCursor, XmuCvtStringToColorCursor, -.br - colorCursorConvertArgs, XtNumber(colorCursorConvertArgs), -.br - XtCacheByDisplay, NULL); -The widget must recognize XtNpointerColor and XtNpointerColorBackground as -resources, or specify other appropriate foreground and background resources. -The widget's Realize and SetValues methods must cause the converter to be -invoked with the appropriate arguments when one of the foreground, -background, or cursor resources has changed, or when the window is created, -and must assign the cursor to the window of the widget. -.sp -.FD 0 -void XmuCvtStringToCursor(\fIargs\fP, \fInum_args\fP, \fIfromVal\fP, \fItoVal\fP) -.br - XrmValuePtr \fIargs\fP; -.br - Cardinal *\fInum_args\fP; -.br - XrmValuePtr \fIfromVal\fP; -.br - XrmValuePtr \fItoVal\fP; -.FN -.IP \fIargs\fP 1i -specifies the required conversion argument, the screen -.IP \fInum_args\fP 1i -specifies the number of required conversion arguments, which is 1 -.IP \fIfromVal\fP 1i -specifies the string to convert -.IP \fItoVal\fP -returns the converted value -.LP -This function converts a string to a -.PN Cursor . -The string can either be a -standard cursor name formed by removing the ``XC_'' prefix from any of the -cursor defines listed in Appendix B of the Xlib Manual, a font name and -glyph index in decimal of the form "FONT fontname index [[font] index]", or -a bitmap filename acceptable to -.PN XmuLocateBitmapFile . -To use this converter, include -the following in your widget's ClassInitialize procedure: -.LP -static XtConvertArgRec screenConvertArg[] = { -.br - {XtBaseOffset, (XtPointer)XtOffsetOf(WidgetRec, core.screen), sizeof(Screen *)} -.br -}; -.LP -XtAddConverter(XtRString, XtRCursor, XmuCvtStringToCursor, -.br - screenConvertArg, XtNumber(screenConvertArg)); -.sp -.FD 0 -void XmuCvtStringToGravity(\fIargs\fP, \fInum_args\fP, \fIfromVal\fP, \fItoVal\fP) -.br - XrmValuePtr *\fIargs\fP; -.br - Cardinal *\fInum_args\fP; -.br - XrmValuePtr \fIfromVal\fP; -.br - XrmValuePtr \fItoVal\fP; -.FN -.IP \fIargs\fP 1i -this argument is ignored -.IP \fInum_args\fP 1i -this argument must be a pointer to a Cardinal containing the value 0 -.IP \fIfromVal\fP 1i -specifies the string to convert -.IP \fItoVal\fP -returns the converted value -.LP -This function converts a string to an -.PN XtGravity -enumeration value. The string "forget" and a NULL value convert to -.PN ForgetGravity , -"NorthWestGravity" converts to -.PN NorthWestGravity , -the strings "NorthGravity" and "top" convert to -.PN NorthGravity , -"NorthEastGravity" converts to -.PN NorthEastGravity , -the strings "West" and "left" convert to -.PN WestGravity , -"CenterGravity" converts to -.PN CenterGravity , -"EastGravity" and "right" convert to -.PN EastGravity , -"SouthWestGravity" converts to -.PN SouthWestGravity , -"SouthGravity" and "bottom" convert to -.PN SouthGravity , -"SouthEastGravity" converts to -.PN SouthEastGravity , -"StaticGravity" converts to -.PN StaticGravity , -and "UnmapGravity" converts to -.PN UnmapGravity . -The case of the string does not matter. To use this converter, include -the following in your widget's class initialize procedure: -.LP -XtAddConverter(XtRString, XtRGravity, XmuCvtStringToGravity, NULL, 0); -.sp -.FD 0 -void XmuCvtStringToJustify(\fIargs\fP, \fInum_args\fP, \fIfromVal\fP, \fItoVal\fP) -.br - XrmValuePtr *\fIargs\fP; -.br - Cardinal *\fInum_args\fP; -.br - XrmValuePtr \fIfromVal\fP; -.br - XrmValuePtr \fItoVal\fP; -.FN -.IP \fIargs\fP 1i -this argument is ignored -.IP \fInum_args\fP 1i -this argument is ignored -.IP \fIfromVal\fP 1i -specifies the string to convert -.IP \fItoVal\fP -returns the converted value -.LP -This function converts a string to an -.PN XtJustify -enumeration value. The string "left" converts to -.PN XtJustifyLeft , -"center" converts to -.PN XtJustifyCenter , -and "right" converts to -.PN XtJustifyRight . -The case of the string does not matter. To use this converter, -include the following in your widget's ClassInitialize procedure: -.LP -XtAddConverter(XtRString, XtRJustify, XmuCvtStringToJustify, NULL, 0); -.sp -.FD 0 -void XmuCvtStringToLong(\fIargs\fP, \fInum_args\fP, \fIfromVal\fP, \fItoVal\fP) -.br - XrmValuePtr \fIargs\fP; -.br - Cardinal *\fInum_args\fP; -.br - XrmValuePtr \fIfromVal\fP; -.br - XrmValuePtr \fItoVal\fP; -.FN -.IP \fIargs\fP 1i -this argument is ignored -.IP \fInum_args\fP 1i -this argument must be a pointer to a Cardinal containing 0 -.IP \fIfromVal\fP 1i -specifies the string to convert -.IP \fItoVal\fP -returns the converted value -.LP -This function converts a string to an integer of type long. It parses the -string using -.PN sscanf -with a format of "%ld". To use this converter, include -the following in your widget's ClassInitialize procedure: -.LP -XtAddConverter(XtRString, XtRLong, XmuCvtStringToLong, NULL, 0); -.sp -.FD 0 -void XmuCvtStringToOrientation(\fIargs\fP, \fInum_args\fP, \fIfromVal\fP, \fItoVal\fP) -.br - XrmValuePtr *\fIargs\fP; -.br - Cardinal *\fInum_args\fP; -.br - XrmValuePtr \fIfromVal\fP; -.br - XrmValuePtr \fItoVal\fP; -.FN -.IP \fIargs\fP 1i -this argument is ignored -.IP \fInum_args\fP 1i -this argument is ignored -.IP \fIfromVal\fP 1i -specifies the string to convert -.IP \fItoVal\fP -returns the converted value -.LP -This function converts a string to an -.PN XtOrientation -enumeration value. The string "horizontal" converts to -.PN XtorientHorizontal -and "vertical" converts to -.PN XtorientVertical . -The case of the string does not matter. To use this converter, -include the following in your widget's ClassInitialize procedure: -.LP -XtAddConverter(XtRString, XtROrientation, XmuCvtStringToOrientation, NULL, 0); -.sp -.FD 0 -Boolean XmuCvtStringToShapeStyle(\fIdpy\fP, \fIargs\fP, \fInum_args\fP, \fIfrom\fP, \fItoVal\fP, data) -.br - Display *\fIdpy\fP; -.br - XrmValue *\fIargs\fP; -.br - Cardinal *\fInum_args\fP; -.br - XrmValue *\fIfrom\fP; -.br - XrmValue *\fItoVal\fP; -.br - XtPointer *\fIdata\fP; -.FN -.IP \fIdpy\fP 1i -the display to use for conversion warnings -.IP \fIargs\fP 1i -this argument is ignored -.IP \fInum_args\fP 1i -this argument is ignored -.IP \fIfromVal\fP 1i -the value to convert from -.IP \fItoVal\fP -the place to store the converted value -.IP \fIdata\fP 1i -this argument is ignored -.LP -This function converts a string to an integer shape style. The string -"rectangle" converts to -.PN XmuShapeRectangle , -"oval" converts to -.PN XmuShapeOval , -"ellipse" converts to -.PN XmuShapeEllipse , -and "roundedRectangle" converts to -.PN XmuShapeRoundedRectangle . -The case of the string does not matter. To use this converter, -include the following in your widget's ClassInitialize procedure: -.LP -XtSetTypeConverter(XtRString, XtRShapeStyle, XmuCvtStringToShapeStyle, -.br - NULL, 0, XtCacheNone, NULL); -.sp -.FD 0 -Boolean XmuReshapeWidget(w, \fIshape_style\fP, \fIcorner_width\fP, \fIcorner_height\fP) -.br - Widget \fIw\fP; -.br - int \fIshape_style\fP; -.br - int \fIcorner_width\fP, \fIcorner_height\fP; -.FN -.IP \fIw\fP 1i -specifies the widget to reshape -.IP \fIshape_style\fP 1i -specifies the new shape -.IP \fIcorner_width\fP 1i -specifies the width of the rounded rectangle corner -.IP \fIcorner_height\fP 1i -specified the height of the rounded rectangle corner -.LP -This function reshapes the specified widget, using the Shape extension, to a -rectangle, oval, ellipse, or rounded rectangle, as specified by shape_style -( -.PN XmuShapeRectangle , -.PN XmuShapeOval , -.PN XmuShapeEllipse , -and -.PN XmuShapeRoundedRectangle , -respectively). -The shape is bounded by the outside edges of the rectangular extents of the -widget. If the shape is a rounded rectangle, corner_width and corner_height -specify the size of the bounding box that the corners are drawn inside of -(see -.PN XmuFillRoundedRectangle ); -otherwise, corner_width and corner_height are ignored. -The origin of the widget within its parent remains unchanged. -.sp -.FD 0 -void XmuCvtStringToWidget(\fIargs\fP, \fInum_args\fP, \fIfromVal\fP, \fItoVal\fP) -.br - XrmValuePtr \fIargs\fP; -.br - Cardinal *\fInum_args\fP; -.br - XrmValuePtr \fIfromVal\fP; -.br - XrmValuePtr \fItoVal\fP; -.FN -.IP \fIargs\fP 1i -this sole argument is the parent Widget -.IP \fInum_args\fP 1i -this argument must be 1 -.IP \fIfromVal\fP 1i -specifies the string to convert -.IP \fItoVal\fP -returns the converted value -.LP -This function converts a string to an immediate child widget of the parent -widget passed as an argument. Note that this converter only works for -child widgets that have already been created; there is no lazy evaluation. -The string is first compared against the -names of the normal and popup children, and if a match is found the -corresponding child is returned. If no match is found, the string is -compared against the classes of the normal and popup children, and if a -match is found the corresponding child is returned. The case of the string -is significant. To use this converter, include the following in your -widget's ClassInitialize procedure: -.LP -static XtConvertArgRec parentCvtArg[] = { -.br - {XtBaseOffset, (XtPointer)XtOffset(Widget, core.parent), sizeof(Widget)}, -.br -}; -.LP -XtAddConverter(XtRString, XtRWidget, XmuCvtStringToWidget, -.br - parentCvtArg, XtNumber(parentCvtArg)); -.sp -.FD 0 -Boolean XmuNewCvtStringToWidget(\fIdpy\fP, \fIargs\fP, \fInum_args\fP, \fIfromVal\fP, \fItoVal\fP, \fIdata\fP) -.br - Display *\fIdpy\fP; -.br - XrmValue * \fIargs\fP; -.br - Cardinal *\fInum_args\fP; -.br - XrmValue * \fIfromVal\fP; -.br - XrmValue * \fItoVal\fP; -.br - XtPointer *\fIdata\fP; -.FN -.IP \fIdpy\fP 1i -the display to use for conversion warnings -.IP \fIargs\fP 1i -this sole argument is the parent Widget -.IP \fInum_args\fP 1i -this argument must be a pointer to a Cardinal containing the value 1 -.IP \fIfromVal\fP 1i -specifies the string to convert -.IP \fItoVal\fP -returns the converted value -.IP \fIdata\fP 1i -this argument is ignored -.LP -This converter is identical in functionality to XmuCvtStringToWidget, except -that it is a new-style converter, allowing the specification of a cache type -at the time of registration. -Most widgets will not cache the conversion results, as the application may -dynamically create and destroy widgets, which would cause cached values to -become illegal. To use this converter, include the following in the widget's -class initialize procedure: -.LP -static XtConvertArgRec parentCvtArg[] = { -.br - {XtWidgetBaseOffset, (XtPointer)XtOffsetOf(WidgetRec, core.parent), -.br - sizeof(Widget)} -.br -}; -.LP -XtSetTypeConverter(XtRString, XtRWidget, XmuNewCvtStringToWidget, -.br - parentCvtArg, XtNumber(parentCvtArg), XtCacheNone, NULL); -.LP -.NH 1 -Character Set Functions -.LP -To use the functions defined in this section, you should include the header -file -.Pn < X11/Xmu/CharSet.h >. -.LP -The functions in this section are \fBdeprecated\fP because they don't work -in most locales now supported by X11; the function -.PN XmbLookupString -provides a better alternative. -.sp -.FD 0 -void XmuCopyISOLatin1Lowered(\fIdst\fP, \fIsrc\fP) -.br - char *\fIdst\fP, *\fIsrc\fP; -.FN -.IP \fIdst\fP 1i -returns the string copy -.IP \fIsrc\fP 1i -specifies the string to copy -.LP -This function copies a null terminated string from src to dst (including the -null), changing all Latin-1 uppercase letters to lowercase. The string is -assumed to be encoded using ISO 8859-1. -.sp -.FD 0 -void XmuCopyISOLatin1Uppered(\fIdst\fP, \fIsrc\fP) -.br - char *\fIdst\fP, *\fIsrc\fP; -.FN -.IP \fIdst\fP 1i -returns the string copy -.IP \fIsrc\fP 1i -specifies the string to copy -.LP -This function copies a null terminated string from src to dst (including the -null), changing all Latin-1 lowercase letters to uppercase. The string is -assumed to be encoded using ISO 8859-1. -.sp -.FD 0 -int XmuCompareISOLatin1(\fIfirst\fP, \fIsecond\fP) -.br - char *\fIfirst\fP, *\fIsecond\fP; -.FN -.IP \fIdst\fP 1i -specifies a string to compare -.IP \fIsrc\fP 1i -specifies a string to compare -.LP -This function compares two null terminated Latin-1 strings, ignoring case -differences, and returns an integer greater than, equal to, or less than 0, -according to whether first is lexicographically greater than, equal to, or -less than second. The two strings are assumed to be encoded using ISO -8859-1. -.sp -.FD 0 -int XmuLookupLatin1(\fIevent\fP, \fIbuffer\fP, \fInbytes\fP, \fIkeysym\fP, \fIstatus\fP) -.br - XKeyEvent *\fIevent\fP; -.br - char *\fIbuffer\fP; -.br - int \fInbytes\fP; -.br - KeySym *\fIkeysym\fP; -.br - XComposeStatus *\fIstatus\fP; -.FN -.IP \fIevent\fP 1i -specifies the key event -.IP \fIbuffer\fP 1i -returns the translated characters -.IP \fInbytes\fP 1i -specifies the length of the buffer -.IP \fIkeysym\fP 1i -returns the computed KeySym, or None -.IP \fIstatus\fP 1i -specifies or returns the compose state -.LP -This function is identical to -.PN XLookupString , -and exists only for naming symmetry with other functions. -.sp -.FD 0 -int XmuLookupLatin2(\fIevent\fP, \fIbuffer\fP, \fInbytes\fP, \fIkeysym\fP, \fIstatus\fP) -.br - XKeyEvent *\fIevent\fP; -.br - char *\fIbuffer\fP; -.br - int \fInbytes\fP; -.br - KeySym *\fIkeysym\fP; -.br - XComposeStatus *\fIstatus\fP; -.FN -.IP \fIevent\fP 1i -specifies the key event -.IP \fIbuffer\fP 1i -returns the translated characters -.IP \fInbytes\fP 1i -specifies the length of the buffer -.IP \fIkeysym\fP 1i -returns the computed KeySym, or None -.IP \fIstatus\fP 1i -specifies or returns the compose state -.LP -This function is similar to -.PN XLookupString , -except that it maps a key event -to an Latin-2 (ISO 8859-2) string, or to an ASCII control string. -.sp -.FD 0 -int XmuLookupLatin3(\fIevent\fP, \fIbuffer\fP, \fInbytes\fP, \fIkeysym\fP, \fIstatus\fP) -.br - XKeyEvent *\fIevent\fP; -.br - char *\fIbuffer\fP; -.br - int \fInbytes\fP; -.br - KeySym *\fIkeysym\fP; -.br - XComposeStatus *\fIstatus\fP; -.FN -.IP \fIevent\fP 1i -specifies the key event -.IP \fIbuffer\fP 1i -returns the translated characters -.IP \fInbytes\fP 1i -specifies the length of the buffer -.IP \fIkeysym\fP 1i -returns the computed KeySym, or None -.IP \fIstatus\fP 1i -specifies or returns the compose state -.LP -This function is similar to -.PN XLookupString , -except that it maps a key event -to an Latin-3 (ISO 8859-3) string, or to an ASCII control string. -.sp -.FD 0 -int XmuLookupLatin4(\fIevent\fP, \fIbuffer\fP, \fInbytes\fP, \fIkeysym\fP, \fIstatus\fP) -.br - XKeyEvent *\fIevent\fP; -.br - char *\fIbuffer\fP; -.br - int \fInbytes\fP; -.br - KeySym *\fIkeysym\fP; -.br - XComposeStatus *\fIstatus\fP; -.FN -.IP \fIevent\fP 1i -specifies the key event -.IP \fIbuffer\fP 1i -returns the translated characters -.IP \fInbytes\fP 1i -specifies the length of the buffer -.IP \fIkeysym\fP 1i -returns the computed KeySym, or None -.IP \fIstatus\fP 1i -specifies or returns the compose state -.LP -This function is similar to -.PN XLookupString , -except that it maps a key event -to an Latin-4 (ISO 8859-4) string, or to an ASCII control string. -.sp -.FD 0 -int XmuLookupKana(\fIevent\fP, \fIbuffer\fP, \fInbytes\fP, \fIkeysym\fP, \fIstatus\fP) -.br - XKeyEvent *\fIevent\fP; -.br - char *\fIbuffer\fP; -.br - int \fInbytes\fP; -.br - KeySym *\fIkeysym\fP; -.br - XComposeStatus *\fIstatus\fP; -.FN -.IP \fIevent\fP 1i -specifies the key event -.IP \fIbuffer\fP 1i -returns the translated characters -.IP \fInbytes\fP 1i -specifies the length of the buffer -.IP \fIkeysym\fP 1i -returns the computed KeySym, or None -.IP \fIstatus\fP 1i -specifies or returns the compose state -.LP -This function is similar to -.PN XLookupString , -except that it maps a key event -to a string in an encoding consisting of Latin-1 (ISO 8859-1) and ASCII -control in the Graphics Left half (values 0 to 127), and Katakana in the -Graphics Right half (values 128 to 255), using the values from JIS -X201-1976. -.sp -.FD 0 -int XmuLookupJISX0201(\fIevent\fP, \fIbuffer\fP, \fInbytes\fP, \fIkeysym\fP, \fIstatus\fP) -.br - XKeyEvent *\fIevent\fP; -.br - char *\fIbuffer\fP; -.br - int \fInbytes\fP; -.br - KeySym *\fIkeysym\fP; -.br - XComposeStatus *\fIstatus\fP; -.FN -.IP \fIevent\fP 1i -specifies the key event -.IP \fIbuffer\fP 1i -returns the translated characters -.IP \fInbytes\fP 1i -specifies the length of the buffer -.IP \fIkeysym\fP 1i -returns the computed KeySym, or None -.IP \fIstatus\fP 1i -specifies or returns the compose state -.LP -This function is similar to -.PN XLookupString , -except that it maps a key event -to a string in the JIS X0201-1976 encoding, including ASCII control. -.sp -.FD 0 -int XmuLookupArabic(\fIevent\fP, \fIbuffer\fP, \fInbytes\fP, \fIkeysym\fP, \fIstatus\fP) -.br - XKeyEvent *\fIevent\fP; -.br - char *\fIbuffer\fP; -.br - int \fInbytes\fP; -.br - KeySym *\fIkeysym\fP; -.br - XComposeStatus *\fIstatus\fP; -.FN -.IP \fIevent\fP 1i -specifies the key event -.IP \fIbuffer\fP 1i -returns the translated characters -.IP \fInbytes\fP 1i -specifies the length of the buffer -.IP \fIkeysym\fP 1i -returns the computed KeySym, or None -.IP \fIstatus\fP 1i -specifies or returns the compose state -.LP -This function is similar to -.PN XLookupString , -except that it maps a key event -to a Latin/Arabic (ISO 8859-6) string, or to an ASCII control string. -.sp -.FD 0 -int XmuLookupCyrillic(\fIevent\fP, \fIbuffer\fP, \fInbytes\fP, \fIkeysym\fP, \fIstatus\fP) -.br - XKeyEvent *\fIevent\fP; -.br - char *\fIbuffer\fP; -.br - int \fInbytes\fP; -.br - KeySym *\fIkeysym\fP; -.br - XComposeStatus *\fIstatus\fP; -.FN -.IP \fIevent\fP 1i -specifies the key event -.IP \fIbuffer\fP 1i -returns the translated characters -.IP \fInbytes\fP 1i -specifies the length of the buffer -.IP \fIkeysym\fP 1i -returns the computed KeySym, or None -.IP \fIstatus\fP 1i -specifies or returns the compose state -.LP -This function is similar to -.PN XLookupString , -except that it maps a key event -to a Latin/Cyrillic (ISO 8859-5) string, or to an ASCII control string. -.sp -.FD 0 -int XmuLookupGreek(\fIevent\fP, \fIbuffer\fP, \fInbytes\fP, \fIkeysym\fP, \fIstatus\fP) -.br - XKeyEvent *\fIevent\fP; -.br - char *\fIbuffer\fP; -.br - int \fInbytes\fP; -.br - KeySym *\fIkeysym\fP; -.br - XComposeStatus *\fIstatus\fP; -.FN -.IP \fIevent\fP 1i -specifies the key event -.IP \fIbuffer\fP 1i -returns the translated characters -.IP \fInbytes\fP 1i -specifies the length of the buffer -.IP \fIkeysym\fP 1i -returns the computed KeySym, or None -.IP \fIstatus\fP 1i -specifies or returns the compose state -.LP -This function is similar to -.PN XLookupString , -except that it maps a key event -to a Latin/Greek (ISO 8859-7) string, or to an ASCII control string. -.sp -.FD 0 -int XmuLookupHebrew(\fIevent\fP, \fIbuffer\fP, \fInbytes\fP, \fIkeysym\fP, \fIstatus\fP) -.br - XKeyEvent *\fIevent\fP; -.br - char *\fIbuffer\fP; -.br - int \fInbytes\fP; -.br - KeySym *\fIkeysym\fP; -.br - XComposeStatus *\fIstatus\fP; -.FN -.IP \fIevent\fP 1i -specifies the key event -.IP \fIbuffer\fP 1i -returns the translated characters -.IP \fInbytes\fP 1i -specifies the length of the buffer -.IP \fIkeysym\fP 1i -returns the computed KeySym, or None -.IP \fIstatus\fP 1i -specifies or returns the compose state -.LP -This function is similar to -.PN XLookupString , -except that it maps a key event -to a Latin/Hebrew (ISO 8859-8) string, or to an ASCII control string. -.sp -.FD 0 -int XmuLookupAPL(\fIevent\fP, \fIbuffer\fP, \fInbytes\fP, \fIkeysym\fP, \fIstatus\fP) -.br - XKeyEvent *\fIevent\fP; -.br - char *\fIbuffer\fP; -.br - int \fInbytes\fP; -.br - KeySym *\fIkeysym\fP; -.br - XComposeStatus *\fIstatus\fP; -.FN -.IP \fIevent\fP 1i -specifies the key event -.IP \fIbuffer\fP 1i -returns the translated characters -.IP \fInbytes\fP 1i -specifies the length of the buffer -.IP \fIkeysym\fP 1i -returns the computed KeySym, or None -.IP \fIstatus\fP 1i -specifies or returns the compose state -.LP -This function is similar to -.PN XLookupString , -except that it maps a key event to an APL string. -.LP -.NH 1 -Compound Text Functions -.LP -The functions defined in this section are for parsing Compound Text strings, -decomposing them into individual segments. Definitions needed to use these -routines are in the include file -.Pn < X11/Xmu/Xct.h >. -.LP -The functions in this section are \fBdeprecated\fP because they shift the -burden for recently introduced locale encodings to the application. The -use of the -.PN UTF8_STRING -text encoding provides a better alternative. -.LP -A Compound Text string is represented as the following type: -.LP - typedef unsigned char *XctString; -.sp -.FD 0 -XctData XctCreate(\fIstring\fP, \fIlength\fP, \fIflags\fP) -.br - XctString \fIstring\fP; -.br - int \fIlength\fP; -.br - XctFlags \fIflags\fP; -.FN -.IP \fIstring\fP 1i -the Compound Text string -.IP \fIlength\fP 1i -the number of bytes in string -.IP \fIflags\fP 1i -parsing control flags -.LP -This function creates an -.PN XctData -structure for parsing a Compound Text -string. The string need not be null terminated. The following flags are -defined to control parsing of the string: -.LP -.PN XctSingleSetSegments --- This means that returned segments should contain -characters from only one set (C0, C1, GL, GR). When this is requested, -.PN XctSegment -is never returned by -.PN XctNextItem , -instead -.PN XctC0Segment , -.PN XctC1Segment , -.PN XctGlSegment , -and -.PN XctGRSegment -are returned. C0 and C1 -segments are always returned as singleton characters. -.LP -.PN XctProvideExtensions --- This means that if the Compound Text string is from a -higher version than this code is implemented to, then syntactically correct -but unknown control sequences should be returned as -.PN XctExtension -items by -.PN XctNextItem . -If this flag is not set, and the Compound Text string version -indicates that extensions cannot be ignored, then each unknown control -sequence will be reported as an -.PN XctError . -.LP -.PN XctAcceptC0Extensions --- This means that if the Compound Text string is from -a higher version than this code is implemented to, then unknown C0 -characters should be treated as if they were legal, and returned as C0 -characters (regardless of how -.PN XctProvideExtensions -is set) by -.PN XctNextItem . -If this flag is not set, then all unknown C0 characters are treated -according to -.PN XctProvideExtensions . -.LP -.PN XctAcceptC1Extensions --- This means that if the Compound Text string is from -a higher version than this code is implemented to, then unknown C1 -characters should be treated as if they were legal, and returned as C1 -characters (regardless of how -.PN XctProvideExtensions -is set) by -.PN XctNextItem . -If this flag is not set, then all unknown C1 characters are treated -according to -.PN XctProvideExtensions . -.LP -.PN XctHideDirection --- This means that horizontal direction changes should be -reported as -.PN XctHorizontal -items by -.PN XctNextItem . If this flag is not set, -then direction changes are not returned as items, but the current direction -is still maintained and reported for other items. The current direction is -given as an enumeration, with the values -.PN XctUnspecified , -.PN XctLeftToRight , -and -.PN XctRightToLeft . -.LP -.PN XctFreeString --- This means that -.PN XctFree -should free the Compound Text string that is passed to -.PN XctCreate . -If this flag is not set, the string is not freed. -.LP -.PN XctShiftMultiGRToGL --- This means that -.PN XctNextItem -should translate GR -segments on-the-fly into GL segments for the GR sets: GB2312.1980-1, -JISX0208.1983-1, and KSC5601.1987-1. -.sp -.FD 0 -void XctReset(\fIdata\fP) -.br - XctData \fIdata\fP; -.FN -.IP \fIdata\fP 1i -specifies the Compound Text structure -.LP -This function resets the -.PN XctData -structure to reparse the Compound Text string from the beginning. -.sp -.FD 0 -XctResult XctNextItem(\fIdata\fP) -.br - XctData \fIdata\fP; -.FN -.IP \fIdata\fP 1i -specifies the Compound Text structure -.LP -This function parses the next ``item'' from the Compound Text string. The -return value indicates what kind of item is returned. The item itself, it's -length, and the current contextual state, are reported as components of the -.PN XctData -structure. -.PN XctResult -is an enumeration, with the following values: -.LP -.PN XctSegment --- the item contains some mixture of C0, GL, GR, and C1 characters. -.LP -.PN XctC0Segment --- the item contains only C0 characters. -.LP -.PN XctGLSegment --- the item contains only GL characters. -.LP -.PN XctC1Segment --- the item contains only C1 characters. -.LP -.PN XctGRSegment --- the item contains only GR characters. -.LP -.PN XctExtendedSegment --- the item contains an extended segment. -.LP -.PN XctExtension --- the item is an unknown extension control sequence. -.LP -.PN XctHorizontal --- the item indicates a change in horizontal direction or -depth. The new direction and depth are recorded in the -.PN XctData -structure. -.LP -.PN XctEndOfText --- The end of the Compound Text string has been reached. -.LP -.PN XctError --- the string contains a syntactic or semantic error; no further -parsing should be performed. -.LP -The following state values are stored in the -.PN XctData -structure: -.Ds 0 -.TA .5i 3i -.ta .5i 3i - XctString item; /* the action item */ - int item_length; /* the length of item in bytes */ - int char_size; /* the number of bytes per character in - * item, with zero meaning variable */ - char *encoding; /* the XLFD encoding name for item */ - XctHDirection horizontal; /* the direction of item */ - int horz_depth; /* the current direction nesting depth */ - char *GL; /* the "{I} F" string for the current GL */ - char *GL_encoding; /* the XLFD encoding name for the current GL */ - int GL_set_size; /* 94 or 96 */ - int GL_char_size; /* the number of bytes per GL character */ - char *GR; /* the "{I} F" string for the current GR */ - char *GR_encoding; /* the XLFD encoding name the for current GR */ - int GR_set_size; /* 94 or 96 */ - int GR_char_size; /* the number of bytes per GR character */ - char *GLGR_encoding; /* the XLFD encoding name for the current - * GL+GR, if known */ -.De -.sp -.FD 0 -void XctFree(\fIdata\fP) -.br - XctData \fIdata\fP; -.FN -.IP \fIdata\fP 1i -specifies the Compound Text structure -.LP -This function frees all data associated with the -.PN XctData -structure. -.LP -.NH 1 -CloseDisplay Hook Functions -.LP -To use the functions defined in this section, you should include the header -file -.Pn < X11/Xmu/CloseHook.h >. -.sp -.FD 0 -CloseHook XmuAddCloseDisplayHook(\fIdpy\fP, \fIfunc\fP, \fIarg\fP) -.br - Display *\fIdpy\fP; -.br - int (*\fIfunc\fP)(); -.br - caddr_t \fIarg\fP; -.FN -.IP \fIdpy\fP 1i -specifies the connection to the X server -.IP \fIfunc\fP 1i -specifies the function to call at display close -.IP \fIarg\fP 1i -specifies arbitrary data to pass to func -.LP -This function adds a callback for the given display. When the display is -closed, the given function will be called with the given display and -argument as: -.LP - (*func)(dpy, arg) -.LP -The function is declared to return an int even though the value is ignored, -because some compilers have problems with functions returning void. -.LP -This routine returns NULL if it was unable to add the callback, otherwise it -returns an opaque handle that can be used to remove or lookup the callback. -.sp -.FD 0 -Bool XmuRemoveCloseDisplayHook(\fIdpy\fP, \fIhandle\fP, \fIfunc\fP, \fIarg\fP) -.br - Display *\fIdpy\fP; -.br - CloseHook \fIhandle\fP; -.br - int (*\fIfunc\fP)(); -.br - caddr_t \fIarg\fP; -.FN -.IP \fIdpy\fP 1i -specifies the connection to the X server -.IP \fIhandle\fP 1i -specifies the callback by id, or NULL -.IP \fIfunc\fP 1i -specifies the callback by function -.IP \fIarg\fP 1i -specifies the function data to match -.LP -This function deletes a callback that has been added with -.PN XmuAddCloseDisplayHook . -If handle is not NULL, it specifies the callback to -remove, and the func and arg parameters are ignored. If handle is NULL, the -first callback found to match the specified func and arg will be removed. -Returns -.PN True -if a callback was removed, else returns -.PN False . -.sp -.FD 0 -Bool XmuLookupCloseDisplayHook(\fIdpy\fP, \fIhandle\fP, \fIfunc\fP, \fIarg\fP) -.br - Display *\fIdpy\fP; -.br - CloseHook \fIhandle\fP; -.br - int (*\fIfunc\fP)(); -.br - caddr_t \fIarg\fP; -.FN -.IP \fIdpy\fP 1i -specifies the connection to the X server -.IP \fIhandle\fP 1i -specifies the callback by id, or NULL -.IP \fIfunc\fP 1i -specifies the callback by function -.IP \fIarg\fP 1i -specifies the function data to match -.LP -This function determines if a callback is installed. If handle is not NULL, -it specifies the callback to look for, and the func and arg parameters are -ignored. If handle is NULL, the function will look for any callback for the -specified func and arg. Returns -.PN True -if a matching callback exists, else returns -.PN False . -.LP -.NH 1 -Display Queue Functions -.LP -To use the functions and types defined in this section, you should include the -header file -.Pn < X11/Xmu/DisplayQue.h >. -It defines the following types: -.LP -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct _XmuDisplayQueueEntry { - struct _XmuDisplayQueueEntry *prev, *next; - Display *display; - CloseHook closehook; - caddr_t data; -} XmuDisplayQueueEntry; - -typedef struct _XmuDisplayQueue { - int nentries; - XmuDisplayQueueEntry *head, *tail; - int (*closefunc)(); - int (*freefunc)(); - caddr_t data; -} XmuDisplayQueue; -.De -.sp -.FD 0 -XmuDisplayQueue *XmuDQCreate(\fIclosefunc\fP, \fIfreefunc\fP, \fIdata\fP) -.br - int (*\fIclosefunc\fP)(); -.br - int (*\fIfreefunc\fP)(); -.br - caddr_t \fIdata\fP; -.FN -.IP \fIclosefunc\fP 1i -specifies the close function -.IP \fIfreefunc\fP 1i -specifies the free function -.IP \fIdata\fP 1i -specifies private data for the functions -.LP -This function creates and returns an empty -.PN XmuDisplayQueue -(which is really just a set of displays, but is called a queue for -historical reasons). The queue is initially empty, but displays -can be added using -.PN XmuAddDisplay . -The data value is simply stored in the queue for use by the closefunc -and freefunc callbacks. -Whenever a display in the queue is closed using -.PN XCloseDisplay , -the closefunc (if non-NULL) is called with the queue and the display's -.PN XmuDisplayQueueEntry -as follows: -.LP - (*closefunc)(queue, entry) -.LP -The freeproc (if non-NULL) is called whenever the last display in the -queue is closed, as follows: -.LP - (*freefunc)(queue) -.LP -The application is responsible for actually freeing the queue, by calling -.PN XmuDQDestroy . -.sp -.FD 0 -XmuDisplayQueueEntry *XmuDQAddDisplay(\fIq\fP, \fIdpy\fP, \fIdata\fP) -.br - XmuDisplayQueue *\fIq\fP; -.br - Display *\fIdpy\fP; -.br - caddr_t \fIdata\fP; -.FN -.IP \fIq\fP 1i -specifies the queue -.IP \fIdpy\fP 1i -specifies the display to add -.IP \fIdata\fP 1i -specifies private data for the free function -.LP -This function adds the specified display to the queue. If successful, -the queue entry is returned, otherwise NULL is returned. -The data value is simply stored in the queue entry for use by the -queue's freefunc callback. This function does not attempt to prevent -duplicate entries in the queue; the caller should use -.PN XmuDQLookupDisplay -to determine if a display has already been added to a queue. -.sp -.FD 0 -XmuDisplayQueueEntry *XmuDQLookupDisplay(\fIq\fP, \fIdpy\fP) -.br - XmuDisplayQueue *\fIq\fP; -.br - Display *\fIdpy\fP; -.FN -.IP \fIq\fP 1i -specifies the queue -.IP \fIdpy\fP 1i -specifies the display to lookup -.LP -This function returns the queue entry for the specified display, or NULL if -the display is not in the queue. -.sp -.FD 0 -XmuDQNDisplays(\fIq\fP) -.FN -.LP -This macro returns the number of displays in the specified queue. -.sp -.FD 0 -Bool XmuDQRemoveDisplay(\fIq\fP, \fIdpy\fP) -.br - XmuDisplayQueue *\fIq\fP; -.br - Display *\fIdpy\fP; -.FN -.IP \fIq\fP 1i -specifies the queue -.IP \fIdpy\fP 1i -specifies the display to remove -.LP -This function removes the specified display from the specified queue. -No callbacks are performed. -If the display is not found in the queue, -.PN False -is returned, otherwise -.PN True -is returned. -.sp -.FD 0 -Bool XmuDQDestroy(\fIq\fP, \fIdocallbacks\fP) -.br - XmuDisplayQueue *\fIq\fP; -.br - Bool \fIdocallbacks\fP; -.FN -.IP \fIq\fP 1i -specifies the queue to destroy -.IP \fIdocallbacks\fP 1i -specifies whether close functions should be called -.LP -This function releases all memory associated with the specified queue. -If docallbacks is -.PN True , -then the queue's closefunc callback (if non-NULL) is first called -for each display in the queue, even though -.PN XCloseDisplay -is not called on the display. -.LP -.NH 1 -Toolkit Convenience Functions -.LP -To use the functions defined in this section, you should include the header -file -.Pn < X11/Xmu/Initer.h >. -.sp -.FD 0 -void XmuAddInitializer(\fIfunc\fP, \fIdata\fP) -.br - void (*\fIfunc\fP)(); -.br - caddr_t \fIdata\fP; -.FN -.IP \fIfunc\fP 1i -specifies the procedure to register -.IP \fIdata\fP 1i -specifies private data for the procedure -.LP -This function registers a procedure, to be invoked the first time -.PN XmuCallInitializers -is called on a given application context. The procedure -is called with the application context and the specified data: -.LP - (*func)(app_con, data) -.sp -.FD 0 -void XmuCallInitializers(\fIapp_con\fP) -.br - XtAppContext \fIapp_con\fP; -.FN -.IP \fIapp_con\fP 1i -specifies the application context to initialize -.LP -This function calls each of the procedures that have been registered with -.PN XmuAddInitializer , -if this is the first time the application context has been passed to -.PN XmuCallInitializers . -Otherwise, this function does nothing. -.LP -.NH 1 -Standard Colormap Functions -.LP -To use the functions defined in this section, you should include the header -file -.Pn < X11/Xmu/StdCmap.h >. -.sp -.FD 0 -Status XmuAllStandardColormaps(\fIdpy\fP) -.br - Display *\fIdpy\fP; -.FN -.IP \fIdpy\fP 1i -specifies the connection to the X server -.LP -To create all of the appropriate standard colormaps for every visual of -every screen on a given display, use -.PN XmuAllStandardColormaps . -.LP -This function defines and retains as permanent resources all standard -colormaps which are meaningful for the visuals of each screen of the -display. It returns 0 on failure, non-zero on success. If the property of -any standard colormap is already defined, this function will redefine it. -.LP -This function is intended to be used by window managers or a special client -at the start of a session. -.LP -The standard colormaps of a screen are defined by properties associated with -the screen's root window. The property names of standard colormaps are -predefined, and each property name except RGB_DEFAULT_MAP may describe at -most one colormap. -.LP -The standard colormaps are: RGB_BEST_MAP, RGB_RED_MAP, RGB_GREEN_MAP, -RGB_BLUE_MAP, RGB_DEFAULT_MAP, and RGB_GRAY_MAP. Therefore a screen may -have at most 6 standard colormap properties defined. -.LP -A standard colormap is associated with a particular visual of the screen. A -screen may have multiple visuals defined, including visuals of the same -class at different depths. Note that a visual id might be repeated for more -than one depth, so the visual id and the depth of a visual identify the -visual. The characteristics of the visual will determine which standard -colormaps are meaningful under that visual, and will determine how the -standard colormap is defined. Because a standard colormap is associated -with a specific visual, there must be a method of determining which visuals -take precedence in defining standard colormaps. -.LP -The method used here is: for the visual of greatest depth, define all -standard colormaps meaningful to that visual class, according to this order -of (descending) precedence: -.PN DirectColor ; -.PN PseudoColor ; -.PN TrueColor -and -.PN GrayScale ; -and finally -.PN StaticColor -and -.PN StaticGray . -.LP -This function allows success, on a per screen basis. For example, if a map -on screen 1 fails, the maps on screen 0, created earlier, will remain. -However, none on screen 1 will remain. If a map on screen 0 fails, none -will remain. -.LP -See -.PN XmuVisualStandardColormaps -for which standard colormaps are meaningful under these classes of visuals. -.sp -.FD 0 -Status XmuVisualStandardColormaps(\fIdpy\fP, \fIscreen\fP, \fIvisualid\fP, \fIdepth\fP, \fIreplace\fP, \fIretain\fP) -.br - Display *\fIdpy\fP; -.br - int \fIscreen\fP; -.br - VisualID \fIvisualid\fP; -.br - unsigned int \fIdepth\fP; -.br - Bool \fIreplace\fP; -.br - Bool \fIretain\fP; -.FN -.IP \fIdpy\fP 1i -specifies the connection to the X server -.IP \fIscreen\fP 1i -specifies the screen of the display -.IP \fIvisualid\fP 1i -specifies the visual type -.IP \fIdepth\fP 1i -specifies the visual depth -.IP \fIreplace\fP 1i -specifies whether or not to replace -.IP \fIretain\fP 1i -specifies whether or not to retain -.LP -To create all of the appropriate standard colormaps for a given visual on a -given screen, use -.PN XmuVisualStandardColormaps . -.LP -This function defines all appropriate standard colormap properties for the -given visual. If replace is -.PN True , -any previous definition will be removed. -If retain is -.PN True , -new properties will be retained for the duration of the -server session. This function returns 0 on failure, non-zero on success. -On failure, no new properties will be defined, but old ones may have been -removed if replace was True. -.LP -Not all standard colormaps are meaningful to all visual classes. This -routine will check and define the following properties for the following -classes, provided that the size of the colormap is not too small. For -.PN DirectColor -and -.PN PseudoColor : -RGB_DEFAULT_MAP, RGB_BEST_MAP, RGB_RED_MAP, -RGB_GREEN_MAP, RGB_BLUE_MAP, and RGB_GRAY_MAP. For -.PN TrueColor -and -.PN StaticColor : -RGB_BEST_MAP. For -.PN GrayScale -and -.PN StaticGray : -RGB_GRAY_MAP. -.sp -.FD 0 -Status XmuLookupStandardColormap(\fIdpy\fP, \fIscreen\fP, \fIvisualid\fP, \fIdepth\fP, \fIproperty\fP, \fIreplace\fP, \fIretain\fP) -.br - Display *\fIdpy\fP; -.br - int \fIscreen\fP; -.br - VisualID \fIvisualid\fP; -.br - unsigned int \fIdepth\fP; -.br - Atom \fIproperty\fP; -.br - Bool \fIreplace\fP; -.br - Bool \fIretain\fP; -.FN -.IP \fIdpy\fP 1i -specifies the connection to the X server -.IP \fIscreen\fP 1i -specifies the screen of the display -.IP \fIvisualid\fP 1i -specifies the visual type -.IP \fIdepth\fP 1i -specifies the visual depth -.IP \fIproperty\fP 1i -specifies the standard colormap property -.IP \fIreplace\fP 1i -specifies whether or not to replace -.IP \fIretain\fP 1i -specifies whether or not to retain -.LP -To create a standard colormap if one does not currently exist, or replace -the currently existing standard colormap, use -.PN XmuLookupStandardColormap . -.LP -Given a screen, a visual, and a property, this function will determine the -best allocation for the property under the specified visual, and determine -the whether to create a new colormap or to use the default colormap of the -screen. -.LP -If replace is True, any previous definition of the property will be -replaced. If retain is True, the property and the colormap will be made -permanent for the duration of the server session. However, pre-existing -property definitions which are not replaced cannot be made permanent by a -call to this function; a request to retain resources pertains to newly -created resources. -.LP -This function returns 0 on failure, non-zero on success. A request to -create a standard colormap upon a visual which cannot support such a map is -considered a failure. An example of this would be requesting any standard -colormap property on a monochrome visual, or, requesting an RGB_BEST_MAP on -a display whose colormap size is 16. -.sp -.FD 0 -Status XmuGetColormapAllocation(\fIvinfo\fP, \fIproperty\fP, \fIred_max\fP, \fIgreen_max\fP, \fIblue_max\fP) -.br - XVisualInfo *\fIvinfo\fP; -.br - Atom \fIproperty\fP; -.br - unsigned long *\fIred_max\fP, *\fIgreen_max\fP, *\fIblue_max\fP; -.FN -.IP \fIvinfo\fP 1i -specifies visual information for a chosen visual -.IP \fIproperty\fP 1i -specifies one of the standard colormap property names -.IP \fIred_max\fP 1i -returns maximum red value -.IP \fIgreen_max\fP 1i -returns maximum green value -.IP \fIblue_max\fP 1i -returns maximum blue value -.LP -To determine the best allocation of reds, greens, and blues in a standard -colormap, use -.PN XmuGetColormapAllocation . -.LP -.PN XmuGetColormapAllocation -returns 0 on failure, non-zero on success. It is -assumed that the visual is appropriate for the colormap property. -.sp -.FD 0 -XStandardColormap *XmuStandardColormap(\fIdpy\fP, \fIscreen\fP, \fIvisualid\fP, \fIdepth\fP, \fIproperty\fP, - \fIcmap\fP, \fIred_max\fP, \fIgreen_max\fP, \fIblue_max\fP) -.br - Display \fIdpy\fP; -.br - int \fIscreen\fP; -.br - VisualID \fIvisualid\fP; -.br - unsigned int \fIdepth\fP; -.br - Atom \fIproperty\fP; -.br - Colormap \fIcmap\fP; -.br - unsigned long \fIred_max\fP, \fIgreen_max\fP, \fIblue_max\fP; -.FN -.IP \fIdpy\fP 1i -specifies the connection to the X server -.IP \fIscreen\fP 1i -specifies the screen of the display -.IP \fIvisualid\fP 1i -specifies the visual type -.IP \fIdepth\fP 1i -specifies the visual depth -.IP \fIproperty\fP 1i -specifies the standard colormap property -.IP \fIcmap\fP 1i -specifies the colormap ID, or None -.IP \fIred_max\fP 1i -specifies the red allocation -.IP \fIgreen_max\fP 1i -specifies the green allocation -.IP \fIblue_max\fP 1i -specifies the blue allocation -.LP -To create any one standard colormap, use -.PN XmuStandardColormap . -.LP -This function creates a standard colormap for the given screen, visualid, -and visual depth, with the given red, green, and blue maximum values, with -the given standard property name. Upon success, it returns a pointer to an -.PN XStandardColormap -structure which describes the newly created colormap. -Upon failure, it returns NULL. -If cmap is the default colormap of the screen, the standard colormap -will be defined on the default colormap; otherwise a new colormap is created. -.LP -Resources created by this function are not made permanent; that is the -caller's responsibility. -.sp -.FD 0 -Status XmuCreateColormap(\fIdpy\fP, \fIcolormap\fP) -.br - Display *\fIdpy\fP; -.br - XStandardColormap *\fIcolormap\fP; -.FN -.IP \fIdpy\fP 1i -specifies the connection under which the map is created -.IP \fIcolormap\fP 1i -specifies the map to be created -.LP -To create any one colormap which is described by an -.PN XStandardColormap -structure, use -.PN XmuCreateColormap . -.LP -This function returns 0 on failure, and non-zero on success. The base_pixel -of the colormap is set on success. Resources created by this function are -not made permanent. No argument error checking is provided; use at your own -risk. -.LP -All colormaps are created with read-only allocations, with the exception of -read-only allocations of colors which fail -to return the expected pixel value, and these are individually defined as -read/write allocations. This is done so that all the cells defined in the -colormap are contiguous, for use in image processing. This typically -happens with White and Black in the default map. -.LP -Colormaps of static visuals are considered to be successfully created if the -map of the static visual matches the definition given in the standard -colormap structure. -.sp -.FD 0 -void XmuDeleteStandardColormap(\fIdpy\fP, \fIscreen\fP, \fIproperty\fP) -.br - Display *\fIdpy\fP; -.br - int \fIscreen\fP; -.br - Atom \fIproperty\fP; -.FN -.IP \fIdpy\fP 1i -specifies the connection to the X server -.IP \fIscreen\fP 1i -specifies the screen of the display -.IP \fIproperty\fP 1i -specifies the standard colormap property -.LP -To remove any standard colormap property, use -.PN XmuDeleteStandardColormap . -This function will remove the specified property from the specified screen, -releasing any resources used by the colormap(s) of the property, if -possible. -.LP -.NH 1 -Widget Description Functions -.LP -The functions defined in this section are for building a description of -the structure of and resources associated with a hierarchy of widget classes. -This package is typically used by applications that wish to manipulate the -widget set itself. -.LP -The definitions needed to use these interfaces are in the header file -.Pn < X11/Xmu/WidgetNode.h >. -The following function must be called before any of the others described -below: -.sp -.FD 0 -void XmuWnInitializeNodes(\fInode_array\fP, \fInum_nodes\fP) -.br - XmuWidgetNode *\fInode_array\fP; -.br - int \fInum_nodes\fP; -.FN -.IP \fInode_array\fP 1i -specifies a list of widget classes, in alphabetical order -.IP \fInum_nodes\fP 1i -specfies the number of widget classes in the node array -.LP -To determine the resources provided by a widget class or classes, use -.sp -.FD 0 -void XmuWnFetchResources(\fInode\fP, \fItoplevel\fP, \fItop_node\fP) -.br - XmuWidgetNode *\fInode\fP; -.br - Widget \fItoplevel\fP; -.br - XmuWidgetNode *\fItop_node\fP; -.FN -.IP \fInode\fP 1i -specifies the widget class for which resources should be obtained. -.IP \fItoplevel\fP 1i -specifies the widget that should be used for creating an instance of \fInode\fP -from which resources are extracted. This is typically the value returned -by \fBXtAppInitialize\fP. -.IP \fItop_node\fP 1i -specifies the ancestor of \fInode\fP that should be treated as the root -of the widget inheritance tree (used in determining which ancestor contributed -which resources). -.LP -Each widget class inherits the resources of its parent. To count the number -of resources contributed by a particular widget class, use: -.sp -.FD 0 -int XmuWnCountOwnedResources(\fInode\fP, \fIowner_node\fP, \fIconstraints\fP) -.br - XmuWidgetNode *\fInode\fP; -.br - XmuWidgetNode *\fIowner_node\fP; -.br - Bool \fIconstraints\fP; -.FN -.IP \fInode\fP 1i -specifies the widget class whose resources are being examined. -.IP \fIowner_node\fP 1i -specifies the widget class of the ancestor of \fInode\fP whose contributions -are being counted. -.IP \fIconstraints\fP 1i -specifies whether or not to count constraint resources or normal resources. -.LP -This routine returns the number of resources contributed (or ``owned'') by -the specified widget class. -.sp -.FD 0 -XmuWidgetNode *XmuWnNameToNode(\fInode_list\fP, \fInum_nodes\fP, \fIname\fP) -.br - XmuWidgetNode *\fInode_list\fP; - int \fInum_nodes\fP; - char *\fIname\fP; -.FN -.IP \fInode_list\fP 1i -specifies a list of widget nodes -.IP \fInum_nodes\fP 1i -specifies the number of nodes in the list -.IP \fIname\fP 1i -specifies the name of the widget class in the node list to search for -.LP -This function returns the WidgetNode in the list that matches the given -widget name or widget class name. If no match is found, it returns NULL. -.LP -.NH 1 -Participation in the Editres Protocol -.LP -To participate in the editres protocol, applications which are not based -on the Athena widget set should include the header file -.Pn < X11/Xmu/Editres.h >. -.LP -To participate in the editres protocol, Xt applications which do not rely -on the Athena widget set should register the editres protocol handler on -each shell widget in the application, specifying an event mask of 0, -nonmaskable events, and client data as NULL: -.LP -XtAddEventHandler(shell, (EventMask) 0, True, _XEditResCheckMessages, NULL); diff --git a/doc/xorg-docs/specs/Xserver/Makefile.am b/doc/xorg-docs/specs/Xserver/Makefile.am new file mode 100644 index 000000000..24e4c95dc --- /dev/null +++ b/doc/xorg-docs/specs/Xserver/Makefile.am @@ -0,0 +1,9 @@ +if ENABLE_SPECS + +xmldir = $(docdir)/$(subdir) +doc_sources = analysis.xml appgroup.xml secint.xml XACE-Spec.xml +dist_xml_DATA = $(doc_sources) + +include $(top_srcdir)/xmlrules.in + +endif ENABLE_SPECS diff --git a/doc/xorg-docs/specs/Xserver/Makefile.in b/doc/xorg-docs/specs/Xserver/Makefile.in new file mode 100644 index 000000000..618ec2708 --- /dev/null +++ b/doc/xorg-docs/specs/Xserver/Makefile.in @@ -0,0 +1,443 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice (including the next +# paragraph) shall be included in all copies or substantial portions of the +# Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(am__dist_xml_DATA_DIST) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/xmlrules.in +@ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_XMLTO_TRUE@am__append_1 = $(doc_sources:.xml=.ps) $(doc_sources:.xml=.pdf) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@am__append_2 = $(doc_sources:.xml=.txt) +subdir = specs/Xserver +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(install_sh) -d +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__dist_xml_DATA_DIST = analysis.xml appgroup.xml secint.xml \ + XACE-Spec.xml +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(xmldir)" "$(DESTDIR)$(xmldir)" +dist_xmlDATA_INSTALL = $(INSTALL_DATA) +xmlDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_xml_DATA) $(xml_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ +ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APP_MAN_DIR = @APP_MAN_DIR@ +APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHANGELOG_CMD = @CHANGELOG_CMD@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CWARNFLAGS = @CWARNFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ +DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ENABLE_DOCS_FALSE = @ENABLE_DOCS_FALSE@ +ENABLE_DOCS_TRUE = @ENABLE_DOCS_TRUE@ +ENABLE_SPECS_FALSE = @ENABLE_SPECS_FALSE@ +ENABLE_SPECS_TRUE = @ENABLE_SPECS_TRUE@ +EXEEXT = @EXEEXT@ +FILE_MAN_DIR = @FILE_MAN_DIR@ +FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ +FOP = @FOP@ +GREP = @GREP@ +HAVE_FOP_FALSE = @HAVE_FOP_FALSE@ +HAVE_FOP_TRUE = @HAVE_FOP_TRUE@ +HAVE_STYLESHEETS_FALSE = @HAVE_STYLESHEETS_FALSE@ +HAVE_STYLESHEETS_TRUE = @HAVE_STYLESHEETS_TRUE@ +HAVE_XMLTO_FALSE = @HAVE_XMLTO_FALSE@ +HAVE_XMLTO_TEXT_FALSE = @HAVE_XMLTO_TEXT_FALSE@ +HAVE_XMLTO_TEXT_TRUE = @HAVE_XMLTO_TEXT_TRUE@ +HAVE_XMLTO_TRUE = @HAVE_XMLTO_TRUE@ +INSTALL_CMD = @INSTALL_CMD@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIB_MAN_DIR = @LIB_MAN_DIR@ +LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +MAN_SUBSTS = @MAN_SUBSTS@ +MISC_MAN_DIR = @MISC_MAN_DIR@ +MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ +VERSION = @VERSION@ +XMLTO = @XMLTO@ +XORG_MAN_PAGE = @XORG_MAN_PAGE@ +XORG_SGML_PATH = @XORG_SGML_PATH@ +XSL_STYLESHEET = @XSL_STYLESHEET@ +ac_ct_CC = @ac_ct_CC@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +@ENABLE_SPECS_TRUE@xmldir = $(docdir)/$(subdir) +@ENABLE_SPECS_TRUE@doc_sources = analysis.xml appgroup.xml secint.xml XACE-Spec.xml +@ENABLE_SPECS_TRUE@dist_xml_DATA = $(doc_sources) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@xml_DATA = \ +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(doc_sources:.xml=.html) \ +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(am__append_1) \ +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(am__append_2) +@ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FLAGS = \ +@ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ -m $(XSL_STYLESHEET) \ +@ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --searchpath $(XORG_SGML_PATH)/X11 \ +@ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam html.stylesheet=$(STYLESHEET_SRCDIR)/xorg.css \ +@ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam img.src.path=$(abs_builddir)/ + +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@CLEANFILES = $(xml_DATA) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@SUFFIXES = .xml .ps .pdf .txt .html +all: all-am + +.SUFFIXES: +.SUFFIXES: .xml .ps .pdf .txt .html +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/xmlrules.in $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign specs/Xserver/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --foreign specs/Xserver/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +uninstall-info-am: +install-dist_xmlDATA: $(dist_xml_DATA) + @$(NORMAL_INSTALL) + test -z "$(xmldir)" || $(mkdir_p) "$(DESTDIR)$(xmldir)" + @list='$(dist_xml_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_xmlDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(xmldir)/$$f'"; \ + $(dist_xmlDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(xmldir)/$$f"; \ + done + +uninstall-dist_xmlDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_xml_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(xmldir)/$$f'"; \ + rm -f "$(DESTDIR)$(xmldir)/$$f"; \ + done +install-xmlDATA: $(xml_DATA) + @$(NORMAL_INSTALL) + test -z "$(xmldir)" || $(mkdir_p) "$(DESTDIR)$(xmldir)" + @list='$(xml_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(xmlDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(xmldir)/$$f'"; \ + $(xmlDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(xmldir)/$$f"; \ + done + +uninstall-xmlDATA: + @$(NORMAL_UNINSTALL) + @list='$(xml_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(xmldir)/$$f'"; \ + rm -f "$(DESTDIR)$(xmldir)/$$f"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + $(mkdir_p) $(distdir)/../.. + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(xmldir)" "$(DESTDIR)$(xmldir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +@ENABLE_SPECS_FALSE@clean-local: +@HAVE_XMLTO_FALSE@clean-local: +clean: clean-am + +clean-am: clean-generic clean-local mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-dist_xmlDATA install-xmlDATA + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_xmlDATA uninstall-info-am \ + uninstall-xmlDATA + +.PHONY: all all-am check check-am clean clean-generic clean-local \ + distclean distclean-generic distdir dvi dvi-am html html-am \ + info info-am install install-am install-data install-data-am \ + install-dist_xmlDATA install-exec install-exec-am install-info \ + install-info-am install-man install-strip install-xmlDATA \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am uninstall uninstall-am uninstall-dist_xmlDATA \ + uninstall-info-am uninstall-xmlDATA + + +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@%.txt: %.xml $(dist_xml_DATA) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) txt $< + +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@%.html: %.xml $(dist_xml_DATA) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) xhtml-nochunks $< + +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@%.pdf: %.xml $(dist_xml_DATA) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop pdf $< + +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@%.ps: %.xml $(dist_xml_DATA) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop ps $< + +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@chunked-html: $(doc_sources) +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) -o html xhtml $(doc_sources) + +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@clean-local: +@ENABLE_SPECS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)rm -fr html/ +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/doc/xorg-docs/specs/Xserver/XACE-Spec.xml b/doc/xorg-docs/specs/Xserver/XACE-Spec.xml new file mode 100644 index 000000000..92e5fb385 --- /dev/null +++ b/doc/xorg-docs/specs/Xserver/XACE-Spec.xml @@ -0,0 +1,1040 @@ + + + +
+ + EamonF.Walsh + efw + National Security Agency + 2009 + X Access Control Extension Specification + XACE-Spec + + + 1.0 + 19 Oct 2006 + efw + Initial Version + + + 2.0 + 10 Mar 2008 + efw + Version 2.0 + + + 2.1 + 19 Jun 2009 + efw + Version 2.1 (XI2) + + + 2.2 + 29 Jun 2009 + efw + Version 2.2 (Property post-data hook) + + + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OF OR OTHER DEALINGS IN THE SOFTWARE. + + + The X Access Control Extension (XACE) is a set of generic "hooks" that can be used by other X extensions to perform access checks. The goal of XACE is to prevent clutter in the core dix/os code by providing a common mechanism for doing these sorts of checks. The concept is identical to the Linux Security Module (LSM) in the Linux Kernel. + XACE version 1.0 was a generalization of the SECURITY extension, which provides a simple on/off trust model where "untrusted" clients are restricted in certain areas. Its hooks were for the most part straight replacements of the old SECURITY logic with generic hook calls. XACE version 2.0 has substantially modified many of the hooks, adding additional parameters and many new access types. Coverage has also been extended to many additional extensions, such as Render and Composite. Finally, there is new support for polyinstantiation, or duplicate, window properties and selections. + This paper describes the implementation of XACE version 2.0, changes to the core server DIX and OS layers that have been made or are being considered, and each of the security hooks that XACE offers at the current time and their function. It is expected that changes to XACE be documented here. Please notify the authors of this document of any changes to XACE so that they may be properly documented. + + + +
+ Introduction +
+ Prerequisites + This document is targeted to programmers who are writing security extensions for X. It is assumed that the reader is familiar with the C programming language. It is assumed that the reader understands the general workings of the X protocol and X server. +
+
+ Purpose + XACE makes it easier to implement new security models for X by providing a set of pluggable hooks that extension writers can use. The idea is to provide an abstraction layer between security extensions and the core DIX/OS code of the X server. This prevents security extensions writers from having to understand the inner workings of the X server and it prevents X server maintainers from having to deal with multiple security subsystems, each with its own intrusive code. + For example, consider the X.Org X server's resource subsystem, which is used to track different types of server objects using ID numbers. The act of looking up an object by its ID number is a security-relevant operation which security extension writers would likely wish to control. For one or two security extensions it may be acceptable to simply insert the extension's code directly into the resource manager code, bracketed by ifdef's. However for more extensions this approach leads to a tangle of code, particularly when results need to be logically combined, as in if statement conditions. Additionally, different extension writers might place their resource checking code in different places in the server, leading to difficulty in tracking down where exactly a particular lookup operation is being blocked. Finally, this approach may lead to unexpected interactions between the code of different extensions, since there is no collaboration between extension writers. + The solution employed by the X Access Control Extension is to place hooks (calls into XACE) at security-relevant places, such as the resource subsystem mentioned above. Other extensions, typically in their initialization routines, can register callback functions on these hooks. When the hook is called from the server code, each callback function registered on it is called in turn. The callback function is provided with necessary arguments needed to make a security decision, including a return value argument which can be set to indicate the result. XACE itself does not make security decisions, or even know or care how such decisions are made. XACE merely enforces the result of the decision, such as by returning a BadAccess error to the requesting client. + This separation between the decision-making logic and the enforcement logic is advantageous because it allows a great variety of security models to be developed without resorting to intrusive modifications to the core systems being secured. The challenge is to ensure that the hook framework itself provides hooks everywhere they need to be provided. Once created, however, a hook can be used by everyone, leading to less duplication of effort. +
+ +
+ Prior Work +
+ Security Extension + XACE was initially based on the SECURITY extension. This extension introduced the concept of "trusted" and "untrusted" client connections, with the trust level established by the authorization token used in the initial client connection. Untrusted clients are restricted in several areas, notably in the use of background "None" windows, access to server resources owned by trusted clients, and certain keyboard input operations. Server extensions are also declared "trusted" or "untrusted," with only untrusted extensions being visible to untrusted client connections. +
+
+ Solaris Trusted Extensions + Trusted Extensions for Solaris has an X extension (Xtsol) which adds security functionality. Some of the XACE hooks in the current set were derived from security checks made by the Xtsol code. In other places, where the Xtsol and SECURITY extensions both have checks, a single XACE hook replaces both. +
+
+ Linux Security Modules + XACE is influenced by the Linux Security Modules project, which provides a similar framework of security hooks for the Linux kernel. +
+
+ +
+ Version 2.0 Changes +
+ Different Return-Value Semantics + The status value returned by security modules has been changed. Formerly, security modules were expected to set the "rval" field of the input structure to "False" if access was to be denied. In version 2.0, this field has been removed in all hooks. Security modules must now set the "status" field to an X error code to describe the error. Typically, BadAccess will be returned, but this change allows security modules to return BadAlloc to report memory allocation failure and BadMatch to report a polyinstantiated object lookup failure (). +
+
+ DevPrivates Mechanism + The devPrivates mechanism in the X server was substantially revised to better support security extensions. The interface for using devPrivates has been unified across the different structures that support private data. Private space allocation is now independent of whether objects have already been created, and the private indexes are now global rather than being structure specific. Callbacks are available to initialize newly allocated space and to clean up before it is freed. Finally, there is a mechanism for looking up the offset of the private pointer field in a structure, given the structure's resource type. +
+
+ New Access Modes + In the previous version, there were four possible modes for the "access_mode" field: read, write, create, and destroy. In version 2.0, many new modes have been introduced to better describe X operations, particularly on window objects. The access_mode field has also been added to additional hooks as described in the individual hook changes. +
+
+ Polyinstantiation + XACE now supports polyinstantiation of selections and window properties. and describe the details, but the basic idea is that the property and selection access hooks may be used to not only change the return value of a lookup operation but also to modify the lookup result. This allows more than one property or selection with the same atom name to be maintained. +
+
+ Removed Hooks + The "drawable," "map," "window init", and "background" hooks have been removed. They have been folded into the resource access hook using new access modes. The "hostlist" hook has been removed and replaced by a new server access hook (see ). The "site policy" and "declare extension security" hooks have been removed as the SECURITY extension has been revised to no longer require them. +
+
+ New Hooks + New "send" and "receive" hooks have been added to allow basic control over event delivery. "Client" and "server" access hooks have been added to control access by clients to other clients (for example, through the KillClient call) and to the server (for example when changing the host access list or changing the font path). "Screen" and "screen saver" hooks have been added to control access to screens and screen saver requests. A "selection" hook has been added to control access to selections. +
+
+ Changes to Existing Hooks + + The resource access hook structure now has additional fields to describe a "parent" object. They are set only when a resource with a defined parent (such as a Window object) is being created, in which case the access mode will include DixCreateAccess. + The device access hook structure has had the "fromRequest" field removed and an access mode field added. + The property access hook structure has had the "propertyName" field removed and a "ppProp" field added, which contains a pointer to a pointer to the property structure itself. The extra level of indirection supports polyinstantiation (see ). Note that the property structure contains the property name. + The extension dispatch/access hook structure now has an access mode field. + +
+
+ +
+ Future Work +
+ Security Hooks + It is anticipated that the set of security hooks provided by XACE will change with time. Some hooks may become deprecated. More hooks will likely be added as well, as more portions of the X server are subjected to security analysis. Existing hooks may be added in more places in the code, particularly protocol extensions. Currently, the only method XACE provides for restricting access to some protocol extensions is to deny access to them entirely. + It should be noted that XACE includes hooks in the protocol dispatch table, which allow a security extension to examine any incoming protocol request (core or extension) and terminate the request before it is handled by the server. This functionality can be used as a stopgap measure for security checks that are not supported by the other XACE hooks. The end goal, however, is to have hooks integrated into the server proper. +
+
+ Core X Server + The set of extensions supported by X.org needs to be re-examined. Many of them are essentially unused and removing them would be easier than attempting to secure them. The GLX extension and the direct rendering kernel interfaces need to be secured. + The server's routines for event delivery need to be reworked to allow greater control by XACE modules. In particular, security extensions need to be able to associate private data with each event at the time of its generation based on the context and then have that data available at a decision point just before the event is delivered to the client. This would allow event delivery to be better controlled on a per-client basis, and would potentially allow additional security extension functionality such as piggyback events. +
+
+
+ +
+ Usage +
+ Storing Security State + The first thing you, the security extension writer, should decide on is the state information that your extension will be storing and how it will be stored. XACE itself does not provide any mechanism for storing state. + One method of storing state is global variables in the extension code. Tables can be kept corresponding to internal server structures, updated to stay synchronized with the structures themselves. One problem with this method is that the X server does not have consistent methods for lifecycle management of its objects, meaning that it might be difficult to keep state up to date with objects. + Another method of storing state is to attach your extension's security data directly to the server structures. This method is possible via the devPrivates mechanism provide by the DIX layer. Structures supporting this mechanism can be identified by the presence of a "devPrivates" field. Full documentation of the devPrivates mechanism is described in the core X server documentation. +
+ +
+ Using Hooks + +
+ Overview + XACE has two header files that security extension code may need to include. Include Xext/xacestr.h if you need the structure definitions for the XACE hooks in your source file. Otherwise, include Xext/xace.h, which contains everything else including constants and function declarations. + XACE hooks use the standard X server callback mechanism. Your security extension's callback functions should all use the following prototype: +
+ + void MyCallback + + CallbackListPtr *pcbl + pointer userdata + pointer calldata + + + +
+ When the callback is called, pcbl points to the callback list itself. The X callback mechanism allows the list to be manipulated in various ways, but XACE callbacks should not do this. Remember that other security extensions may be registered on the same hook. userdata is set to the data argument that was passed to XaceRegisterCallback at registration time; this can be used by your extension to pass data into the callback. calldata points to a value or structure which is specific to each XACE hook. These are discussed in the documentation for each specific hook, below. Your extension must cast this argument to the appropriate pointer type.
+ To register a callback on a given hook, use XaceRegisterCallback: +
+ + Bool XaceRegisterCallback + + int hook + CallbackProcPtr callback + pointer userdata + + + +
+ Where hook is the XACE hook you wish to register on, callback is the callback function you wish to register, and userdata will be passed through to the callback as its second argument, as described above. See for the list of XACE hook codes. XaceRegisterCallback is typically called from the extension initialization code; see the SECURITY source for examples. The return value is TRUE for success, FALSE otherwise.
+ To unregister a callback, use XaceDeleteCallback: +
+ + Bool XaceDeleteCallback + + int hook + CallbackProcPtr callback + pointer userdata + + + +
+ where the three arguments are identical to those used in the call to XaceRegisterCallback. The return value is TRUE for success, FALSE otherwise.
+
+ +
+ Hooks + The currently defined set of XACE hooks is shown in . As discussed in , the set of hooks is likely to change in the future as XACE is adopted and further security analysis of the X server is performed. + + XACE security hooks. + + + + Hook Identifier + Callback Argument Type + Refer to + + + + + XACE_CORE_DISPATCH + XaceCoreDispatchRec + + + + XACE_EXT_DISPATCH + XaceExtAccessRec + + + + XACE_RESOURCE_ACCESS + XaceResourceAccessRec + + + + XACE_DEVICE_ACCESS + XaceDeviceAccessRec + + + + XACE_PROPERTY_ACCESS + XacePropertyAccessRec + + + + XACE_SEND_ACCESS + XaceSendAccessRec + + + + XACE_RECEIVE_ACCESS + XaceReceiveAccessRec + + + + XACE_CLIENT_ACCESS + XaceClientAccessRec + + + + XACE_EXT_ACCESS + XaceExtAccessRec + + + + XACE_SERVER_ACCESS + XaceServerAccessRec + + + + XACE_SELECTION_ACCESS + XaceSelectionAccessRec + + + + XACE_SCREEN_ACCESS + XaceScreenAccessRec + + + + XACE_SCREENSAVER_ACCESS + XaceScreenAccessRec + + + + XACE_AUTH_AVAIL + XaceAuthAvailRec + + + + XACE_KEY_AVAIL + XaceKeyAvailRec + + + + XACE_AUDIT_BEGIN + XaceAuditRec + + + + XACE_AUDIT_END + XaceAuditRec + + + + +
+ In the descriptions that follow, it is helpful to have a listing of Xext/xacestr.h available for reference. + +
+ Core Dispatch + This hook allows security extensions to examine all incoming core protocol requests before they are dispatched. The hook argument is a pointer to a structure of type XaceCoreDispatchRec. This structure contains a + client field of type ClientPtr + and a status field of type int. + The client field refers to the client making the incoming request. Note that the complete request is accessible via the requestBuffer member of the client structure. The REQUEST family of macros, located in include/dix.h, are useful in verifying and reading from this member. + The status field may be set to a nonzero X protocol error code. In this event, the request will not be processed further and the error code will be returned to the client. +
+ +
+ Extension Dispatch + This hook allows security extensions to examine all incoming extension protocol requests before they are dispatched. The hook argument is a pointer to a structure of type XaceExtAccessRec. This structure contains a + client field of type ClientPtr, + a ext field of type ExtensionEntry*, + a access_mode field of type Mask, + and a status field of type int. + The client field refers to the client making the incoming request. Note that the complete request is accessible via the requestBuffer member of the client structure. The REQUEST family of macros, located in include/dix.h, are useful in verifying and reading from this member. + The ext field refers to the extension being accessed. This is required information since extensions are not associated with any particular major number. + The access_mode field is set to DixUseAccess when this hook is exercised. + The status field may be set to a nonzero X protocol error code. In this event, the request will not be processed further and the error code will be returned to the client. +
+ +
+ Resource Access + This hook allows security extensions to monitor all resource lookups. The hook argument is a pointer to a structure of type XaceResourceAccessRec. This structure contains a + client field of type ClientPtr, + a id field of type XID, + a rtype field of type RESTYPE, + a res field of type pointer, + a ptype field of type RESTYPE, + a parent field of type pointer, + a access_mode field of type Mask, + and a status field of type int. + The client field refers to the client on whose behalf the lookup is being performed. Note that this may be serverClient for server lookups. + The id field is the resource ID being looked up. + The rtype field is the type of the resource being looked up. + The res field is the resource itself: the result of the lookup. + The ptype field is the type of the parent resource or RT_NONE if not set. + The parent field is the parent resource itself or NULL if not set. The parent resource is set only when two conditions are met: The resource in question is being created at the time of the call (in which case the access_mode will include DixCreateAccess) and the resource in question has a defined parent object. lists the resources that support parent objects. The purpose of these two fields is to provide generic support for "parent" resources. + The access_mode field encodes the type of action being performed. The valid mode bits are defined in include/dixaccess.h. The meaning of the bits depends on the specific resource type. Tables for some common types can be found in . Note that the DixCreateAccess access mode has special meaning: it signifies that the resource object is in the process of being created. This provides an opportunity for the security extension to initialize its security label information in the structure devPrivates or otherwise. If the status field is set to an error code in this case, the resource creation will fail and no entry will be made under the specified resource ID. + The status field may be set to a nonzero X protocol error code. In this event, the resource lookup will fail and an error (usually, but not always, the status value) will be returned to the client. + + Resource access hook access modes. + + + + Access Mode Bit + Meaning + Example Call Site + + + + + DixReadAccess + The primary data or contents of the object are being read (drawables, cursors, colormaps). + GetImage, GetCursorImage, CreatePicture, QueryColors + + + DixWriteAccess + The primary data or contents of the object are being written (drawables, cursors, colormaps). + PutImage, RenderTriFan, ClearArea, StoreColors, RecolorCursor + + + DixDestroyAccess + The object is being removed. + CloseFont, DestroyWindow, FreePixmap, FreeCursor, RenderFreePicture + + + DixCreateAccess + The object is being created. + CreateWindow, CreatePixmap, CreateGC, CreateColormap + + + DixGetAttrAccess + The object's attributes are being queried, or the object is being referenced. + GetWindowAttributes, GetGeometry, QueryFont, CopyGC, QueryBestSize + + + DixSetAttrAccess + The object's attributes are being changed. + SetWindowAttributes, ChangeGC, SetClipRectangles, XFixesSetCursorName + + + DixListPropAccess + User properties set on the object are being listed (windows). + ListProperties + + + DixGetPropAccess + A user property set on the object is being read (windows). + GetProperty, RotateProperties + + + DixSetPropAccess + A user property set on the object is being written (windows). + ChangeProperty, RotateProperties, DeleteProperty + + + DixListAccess + Child objects of the object are being listed out (windows). + QueryTree, MapSubwindows, UnmapSubwindows + + + DixAddAccess + A child object is being added to the object (drawables, fonts, colormaps). + CreateWindow, ReparentWindow, AllocColor, RenderCreatePicture, RenderAddGlyphs + + + DixRemoveAccess + A child object is being removed from object (drawables, fonts, colormaps). + DestroyWindow, ReparentWindow, FreeColors, RenderFreeGlyphs + + + DixHideAccess + Object is being unmapped or hidden from view (drawables, cursor). + UnmapWindow, XFixesHideCursor + + + DixShowAccess + Object is being mapped or shown (drawables, cursor). + MapWindow, XFixesShowCursor + + + DixBlendAccess + Drawable contents are being mixed in a way that may compromise contents. + Background "None", CompositeRedirectWindow, CompositeRedirectSubwindows + + + DixGrabAccess + Override-redirect bit on a window has been set. + CreateWindow, ChangeWindowAttributes + + + DixInstallAccess + Colormap is being installed. + InstallColormap + + + DixUninstallAccess + Colormap is being uninstalled. + UninstallColormap + + + DixSendAccess + An event is being sent to a window. + SendEvent + + + DixReceiveAccess + A client is setting an event mask on a window. + ChangeWindowAttributes, XiSelectExtensionEvent + + + DixUseAccess + The object is being used without modifying it (fonts, cursors, gc). + CreateWindow, FillPoly, GrabButton, ChangeGC + + + DixManageAccess + Window-manager type actions on a drawable. + CirculateWindow, ChangeSaveSet, ReparentWindow + + + +
+ + + Resource access hook parent objects. + + + + Resource Type + Parent Resource Type + Notes + + + + + RT_WINDOW + RT_WINDOW + Contains the parent window. This will be NULL for root windows. + + + RT_PIXMAP + RT_WINDOW + COMPOSITE extension only: the source window is passed as the parent for redirect pixmaps. + + + RenderPictureType + RC_DRAWABLE + The source drawable is passed as the parent for Render picture objects. + + + +
+
+ +
+ Device Access + This hook allows security extensions to restrict client actions on input devices. The hook argument is a pointer to a structure of type XaceDeviceAccessRec. This structure contains a + client field of type ClientPtr, + a dev field of type DeviceIntPtr, + a access_mode field of type Mask, + and a status field of type int. + The client field refers to the client attempting to access the device (keyboard). Note that this may be serverClient. + The dev field refers to the input device being accessed. + The access_mode field encodes the type of action being performed. The valid mode bits are described in the table below. + The status field may be set to a nonzero X protocol error code. In this event, the device operation will fail and an error (usually, but not always, the status value) will be returned to the client. + + Device access hook access modes. + + + + Access Mode Bit + Meaning + Example Call Site + + + + + DixGetAttrAccess + Attributes of the device are being queried. + GetKeyboardMapping, XiGetKeyboardControl, XkbGetDeviceInfo + + + DixReadAccess + The state of the device is being polled. + QueryPointer, QueryKeymap, XkbGetState + + + DixWriteAccess + The state of the device is being programatically manipulated. + WarpPointer, XTestFakeInput, XiSendExtensionEvent + + + DixSetAttrAccess + Per-client device configuration is being performed. + XkbPerClientFlags + + + DixManageAccess + Global device configuration is being performed. + ChangeKeyboardMapping, XiChangeDeviceControl, XkbSetControls + + + DixUseAccess + The device is being opened or referenced. + XiOpenDevice, XkbSelectEvents + + + DixGrabAccess + The device is being grabbed. + GrabPointer, GrabButton, GrabKey + + + DixFreezeAccess + The state of the device is being frozen by a synchronous grab. + GrabKeyboard, GrabPointer + + + DixForceAccess + The device cursor is being overriden by a grab. + GrabPointer, GrabButton + + + DixGetFocusAccess + The device focus is being retrieved. + GetInputFocus, XiGetDeviceFocus + + + DixSetFocusAccess + The device focus is being set. + SetInputFocus, XiSetDeviceFocus + + + DixBellAccess + The device bell is being rung. + Bell, XiDeviceBell + + + DixCreateAccess + The device object has been newly allocated. + XIChangeDeviceHierarchy, XIAddMaster + + + DixDestroyAccess + The device is being removed. + XIChangeDeviceHierarchy, XIRemoveMaster + + + DixAddAccess + A slave device is being attached to the device. + XIChangeDeviceHierarchy, XIChangeAttachment + + + DixRemoveAccess + A slave device is being unattached from the device. + XIChangeDeviceHierarchy, XIChangeAttachment + + + DixListPropAccess + Properties set on the device are being listed. + ListDeviceProperties, XIListProperties + + + DixGetPropAccess + A property set on the device is being read. + GetDeviceProperty, XIGetProperty + + + DixSetPropAccess + A property set on the device is being written. + SetDeviceProperty, XISetProperty + + + +
+
+ +
+ Property Access + This hook allows security extensions to monitor all property accesses and additionally to support polyinstantiation if desired. The hook argument is a pointer to a structure of type XacePropertyAccessRec. This structure contains a + client field of type ClientPtr, + a pWin field of type WindowPtr, + a ppProp field of type PropertyPtr*, + a access_mode field of type Mask, + and a status field of type int. + The client field refers to the client which is accessing the property. Note that this may be serverClient for server lookups. + The pWin field is the window on which the property is being accessed. + The ppProp field is a double-indirect pointer to the PropertyRec structure being accessed. The extra level of indirection supports property polyinstantiation; see below. If your extension does not use the polyinstantiation feature, simply dereference the pointer to obtain a PropertyPtr for the property + The access_mode field encodes the type of action being performed. The valid mode bits are described in the table below. + The status field may be set to a nonzero X protocol error code. In this event, the property request will not be processed further and the error code will be returned to the client. However, the BadMatch code has special meaning; see below. + + Property access hook mode bits. + + + + Access Mode Bit + Meaning + Example Call Site + + + + + DixCreateAccess + The property object has been newly allocated (this bit will always occur in conjunction with DixWriteAccess). + ChangeProperty + + + DixWriteAccess + The property data is being completely overwritten with new data. + ChangeProperty, RotateProperties + + + DixBlendAccess + The property data is being appended or prepended to. + ChangeProperty + + + DixReadAccess + The property data is being read. + GetProperty + + + DixDestroyAccess + The property data is being deleted. + DeleteProperty + + + DixGetAttrAccess + Existence of the property is being disclosed. + ListProperties + + + DixPostAccess + Post-write call reflecting new contents (this bit will always occur in conjunction with DixWriteAccess). + ChangeProperty + + + +
+ + New in XACE Version 2.0, this hook supports the polyinstantiation of properties. This means that more than one property may exist having the same name, and the security extension can control which property object is seen by which client. To perform property polyinstantiation, your security extension should take the following steps: + + When a property is being created (DixCreateAccess), the security extension should label it appropriately based on the client that is creating it. In this case, the ppProp field should not be modified. + When a property is being looked up, the ppProp field will refer to the first structure in the linked list with the given name. The security extension may change the ppProp field to a different property structure by traversing the linked list (using the PropertyRec next field) to find an alternate structure with the same property name. + Alternately, when a property is being looked up, the status may be set to BadMatch which will cause the DIX layer to treat the property as not existing. This may result in an additional property object with the same name being created (in which case the hook will be called again with the create access mode). + + + + New in XACE Version 2.2, this hook allows security extensions to verify the contents of properties after the client has written them. On a property change, the property access hook will be called twice. The first call is unchanged from previous versions. The second call will have the DixPostAccess bit together with DixWriteAccess and the ppProp property pointer will contain the new data. Setting the status field to something other than Success will cause the previous property contents to be restored and the client to receive the status code as an error. + Note that in the case of property creation (when DixCreateAccess is set), the ppProp field already reflects the new data. Hence security extensions wishing to validate property data should check for either DixPostAccess or DixCreateAccess in conjunction with DixWriteAccess. If your extension does not need this feature, simply ignore calls with the DixPostAccess bit set. +
+ +
+ Send Access + This hook allows security extensions to prevent devices and clients from posting X events to a given window. The hook argument is a pointer to a structure of type XaceSendAccessRec. This structure contains + a client field of type ClientPtr, + a dev field of type DeviceIntPtr, + a pWin field of type WindowPtr, + a events field of type events, + a count field of type int, + and a status field of type int. + The client field refers to the client attempting a SendEvent request or other synthetic event generation to the given window. This field may be NULL if the dev field is set. + The dev field refers to the device attempting to post an event which would be delivered to the given window. This field may be NULL if the client field is set. + The pWin field refers to the target window. + The events field refers to the events that are being sent. + The count field contains the number of events in the events array. + The status field may be set to a nonzero X protocol error code. In this event, the events will be dropped on the floor instead of being delivered. + This hook does not currently cover all instances of event delivery. +
+ +
+ Receive Access + This hook allows security extensions to prevent a client from receiving X events that have been delivered to a given window. The hook argument is a pointer to a structure of type XaceReceiveAccessRec. This structure contains + a client field of type ClientPtr, + a pWin field of type WindowPtr, + a events field of type events, + a count field of type int, + and a status field of type int. + The client field refers to the client to which the event would be delivered. + The pWin field refers to the window where the event has been sent. + The events field refers to the events that are being sent. + The count field contains the number of events in the events array. + The status field may be set to a nonzero X protocol error code. In this event, the events will not be delivered to the client. + This hook does not currently cover all instances of event delivery. +
+ +
+ Client Access + This hook allows security extensions to prevent clients from manipulating other clients directly. This hook applies to a small set of protocol requests such as KillClient. The hook argument is a pointer to a structure of type XaceClientAccessRec. This structure contains + a client field of type ClientPtr, + a target field of type ClientPtr, + a access_mode field of type Mask, + and a status field of type int. + The client field refers to the client making the request. + The target field refers to the client being manipulated. + The access_mode field encodes the type of action being performed. The valid mode bits are described in the table below. + The status field may be set to a nonzero X protocol error code. In this event, the request will fail and an error (usually, but not always, the status value) will be returned to the client. + + Client access hook mode bits. + + + + Access Mode Bit + Meaning + Example Call Site + + + + + DixGetAttrAccess + Attributes of the client are being queried. + SyncGetPriority + + + DixSetAttrAccess + Attributes of the client are being set. + SyncSetPriority + + + DixManageAccess + The client's close-down-mode (which affects global server resource management) is being set. + SetCloseDownMode + + + DixDestroyAccess + The client is being killed. + KillClient + + + +
+
+ +
+ Extension Access + This hook allows security extensions to approve or deny requests involving which extensions are supported by the server. This allows control over which extensions are visible. The hook argument is a pointer to a structure of type XaceExtAccessRec. This structure contains a + client field of type ClientPtr, + a ext field of type ExtensionEntry*, + a access_mode field of type Mask, + and a status field of type int. + The client field refers to the client making the incoming request, which is typically QueryExtension or ListExtensions. + The ext field refers to the extension being accessed. This is required information since extensions are not associated with any particular major number. + The access_mode field is set to DixGetAttrAccess when this hook is exercised. + The status field may be set to a nonzero X protocol error code. In this event, the extension will be reported as not supported (QueryExtensions) or omitted from the returned list (ListExtensions). + If this hook is used, an extension dispatch hook should also be installed to make sure that clients cannot circumvent the check by guessing the major opcodes of extensions. +
+ +
+ Server Access + This hook allows security extensions to approve or deny requests that affect the X server itself. The hook argument is a pointer to a structure of type XaceServerAccessRec, which contains + a client field of type ClientPtr, + a access_mode field of type Mask, + and a status field of type int. + The client field refers to the client making the request. + The access_mode field encodes the type of action being performed. The valid mode bits are described in the table below. + The status field may be set to a nonzero X protocol error code. In this event, the request will fail and an error (usually, but not always, the status value) will be returned to the client. + + Server access hook mode bits. + + + + Access Mode Bit + Meaning + Example Call Site + + + + + DixGetAttrAccess + Attributes of the server are being queried. + GetFontPath + + + DixSetAttrAccess + Attributes of the server are being set. + SetFontPath + + + DixManageAccess + Server management is being performed. + ChangeAccessControl, ListHosts + + + DixGrabAccess + A server grab is being performed. + GrabServer + + + DixReadAccess + The server's actions are being recorded. + Record, XEVIE extensions + + + DixDebugAccess + Server debug facilities are being used. + XTest extension, XkbSetDebuggingFlags + + + +
+
+ +
+ Selection Access + This hook allows security extensions to monitor all selection accesses and additionally to support polyinstantiation if desired. The hook argument is a pointer to a structure of type XaceSelectionAccessRec. This structure contains a + client field of type ClientPtr, + a ppSel field of type Selection**, + a access_mode field of type Mask, + and a status field of type int. + The client field refers to the client which is accessing the property. Note that this may be serverClient for server lookups. + The ppSel field is a double-indirect pointer to the Selection structure being accessed. The extra level of indirection supports selection polyinstantiation; see below. If your extension does not use the polyinstantiation feature, simply dereference the pointer to obtain a SelectionRec * for the selection. + The access_mode field encodes the type of action being performed. The valid mode bits are described in the table below. + The status field may be set to a nonzero X protocol error code. In this event, the property request will not be processed further and the error code will be returned to the client. However, the BadMatch code has special meaning; see below. + + Selection access hook mode bits. + + + + Access Mode Bit + Meaning + Example Call Site + + + + + DixCreateAccess + The selection object has been newly allocated (this bit will always occur in conjunction with DixSetAttrAccess). + SetSelectionOwner + + + DixSetAttrAccess + The selection owner is being set. + SetSelectionOwner + + + DixGetAttrAccess + The selection owner is being queried. + GetSelectionOwner + + + DixReadAccess + A convert operation is being requested on the selection. + ConvertSelection + + + +
+ + This hook supports the polyinstantiation of selections. This means that more than one selection may exist having the same name, and the security extension can control which selection object is seen by which client. To perform selection polyinstantiation, your security extension should take the following steps: + + When selection ownership is being established (DixSetAttrAccess), the security extension should label it appropriately based on the client that is taking ownership. In this case, the ppSel field should not be modified. + When a selection is being looked up, the ppProp field will refer to the first structure in the linked list with the given name. The security extension may change the ppSel field to a different selection structure by traversing the linked list (using the Selection next field) to find an alternate structure with the same selection name. + Alternately, when a selection is being looked up, the status may be set to BadMatch which will cause the DIX layer to treat the selection as not existing. This may result in an additional selection object with the same name being created (in which case the hook will be called again with the create access mode). + + +
+ +
+ Screen Access + This hook allows security extensions to approve or deny requests that manipulate screen objects The hook argument is a pointer to a structure of type XaceScreenAccessRec. This structure contains a + client field of type ClientPtr, + a screen field of type ScreenPtr, + a access_mode field of type Mask, + and a status field of type int. + The client field refers to the client making the request. + The screen field refers to the screen object being referenced. + The access_mode field encodes the type of action being performed. The valid mode bits are described in the table below. + The status field may be set to a nonzero X protocol error code. In this event, the request will not be processed further and the error code will be returned to the client. + + Screen access hook mode bits. + + + + Access Mode Bit + Meaning + Example Call Site + + + + + DixGetAttrAccess + Attributes of the screen object are being queried. + ListInstalledColormaps, QueryBestSize + + + DixSetAttrAccess + Attributes of the screen object are being set. + InstallColormap + + + DixHideAccess + The cursor on the screen is being globally hidden. + XFixesHideCursor + + + DixShowAccess + The cursor on the screen is being globally unhidden. + XFixesShowCursor + + + +
+
+ +
+ Screen Saver Access + This hook allows security extensions to approve or deny requests that manipulate the screensaver. The hook argument is a pointer to a structure of type XaceScreenAccessRec. This structure contains a + client field of type ClientPtr, + a screen field of type ScreenPtr, + a access_mode field of type Mask, + and a status field of type int. + The client field refers to the client making the request. + The screen field refers to the screen object being referenced. + The access_mode field encodes the type of action being performed. The valid mode bits are described in the table below. + The status field may be set to a nonzero X protocol error code. In this event, the request will not be processed further and the error code will be returned to the client. + + Screen saver access hook mode bits. + + + + Access Mode Bit + Meaning + Example Call Site + + + + + DixGetAttrAccess + Attributes of the screen saver are being queried. + GetScreenSaver, ScreenSaverQueryInfo + + + DixSetAttrAccess + Attributes of the screen saver are being set. + SetScreenSaver, ScreenSaverSelectInput + + + DixHideAccess + The screen saver is being programmatically activated. + ForceScreenSaver, DPMSEnable + + + DixShowAccess + The screen saver is being programmatically deactivated. + ForceScreenSaver, DPMSDisable + + + +
+
+ +
+ Authorization Availability Hook + This hook allows security extensions to examine the authorization associated with a newly connected client. This can be used to set up client security state depending on the authorization method that was used. The hook argument is a pointer to a structure of type XaceAuthAvailRec. This structure contains a + client field of type ClientPtr, + and a authId field of type XID. + The client field refers to the newly connected client. + The authId field is the resource ID of the client's authorization. + This hook has no return value. + + This hook is called after the client enters the initial state and before the client enters the running state. Keep this in mind if your security extension uses the ClientStateCallback list to keep track of clients. + This hook is a legacy of the APPGROUP Extension. In the future, this hook may be phased out in favor of a new client state, ClientStateAuthenticated. + +
+ +
+ Keypress Availability Hook + This hook allows security extensions to examine keypresses outside of the normal event mechanism. This could be used to implement server-side hotkey support. The hook argument is a pointer to a structure of type XaceKeyAvailRec. This structure contains a + event field of type xEventPtr, + a keybd field of type DeviceIntPtr, + and a count field of type int. + The event field refers to the keyboard event, typically a KeyPress or KeyRelease. + The keybd field refers to the input device that generated the event. + The count field is the number of repetitions of the event (not 100\% sure of this at present, however). + This hook has no return value. +
+ +
+ Auditing Hooks + Two hooks provide basic auditing support. The begin hook is called immediately before an incoming client request is dispatched and before the dispatch hook is called (refer to ). The end hook is called immedately after the processing of the request has finished. The hook argument is a pointer to a structure of type XaceKeyAvailRec. This structure contains a + client field of type ClientPtr, + and a requestResult field of type int. + The client field refers to client making the request. + The requestResult field contains the result of the request, either Success or one of the protocol error codes. Note that this field is significant only in the end hook. + These hooks have no return value. +
+ +
+
+
+ +
+ Protocol +
+ Requests + XACE does not define any X protocol. +
+
+ Events + XACE does not define any X protocol. +
+
+ Errors + XACE does not define any X protocol. +
+
+
diff --git a/doc/xorg-docs/specs/Xserver/Xprt.book b/doc/xorg-docs/specs/Xserver/Xprt.book deleted file mode 100644 index 9c81c1e70b13876fa548ab7a6788361f98aac723..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25600 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 # Generated by FrameMaker xm5.0P3f -# Options: -# Paragraph Text -# Paragraph Tags -# Paragraph Formats -# Font Information -# Markers -# Anchored Frames -# Tables -# Graphics and TextRect Layout -# Master Page Items -# Condition Catalog -# Table Catalogs -# Font Catalog -# Paragraph Catalog -# Document Template -# Document Dictionary -# Variables -# - - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - > # end of Color - - - - - - > # end of Color - - - - - - > # end of Color - - - - - - > # end of Color -> # end of ColorCatalog - - - - - - > # end of Condition - - - - - - > # end of Condition - - - - - - > # end of Condition -> # end of ConditionCatalog - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - \\t'> - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .. \\t'> - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - ... \\t'> - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - )'> - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - . '> - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - . '> - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf -> # end of PgfCatalog - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font - - - - - - - - - - - - - - - - - - - > # end of Font -> # end of FontCatalog - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling -> # end of RulingCatalog - - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat - - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat - - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat - - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat -> # end of TblCatalog - - - > # end of View - - - - - - - - > # end of View - - - - > # end of View - - - > # end of View - - - > # end of View - - - > # end of View -> # end of Views - - '> - > # end of VariableFormat - - <$daynum\>, <$year\>'> - > # end of VariableFormat - - /<$daynum\>/<$shortyear\>'> - > # end of VariableFormat - - <$daynum\>, <$year\> <$hour\>:<$minute00\> <$ampm\>'> - > # end of VariableFormat - - <$daynum\>, <$year\>'> - > # end of VariableFormat - - , <$monthname\> <$daynum01\>, <$year\>'> - > # end of VariableFormat - - /<$daynum\>/<$shortyear\>'> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - - > # end of VariableFormat - - of <$tblsheetcount\>)'> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat -> # end of VariableFormats - - \xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - '> - > # end of XRefFormat - - \xd3 on page\x11 <$pagenum\>.'> - > # end of XRefFormat - - , \xd2 <$paratext\>,\xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - , \xd2 <$paratext\>,\xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - on page\x11 <$pagenum\>'> - > # end of XRefFormat - - on page\x11 <$pagenum\>'> - > # end of XRefFormat - - , \xd2 <$paratext\>,\xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - '> - > # end of XRefFormat - - '> - > # end of XRefFormat - - '> - > # end of XRefFormat - - \xd3 '> - > # end of XRefFormat -> # end of XRefFormats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -> # end of Document -xp_library.mifIOM.doc'> - - - - - -> # end of BookComponent -xp_library.mifIX.doc'> - - - - - -> # end of BookComponent -xp_library.mifTC.doc'> - - - - - - - -> # end of BookComponent - # end of InitialAutoNums - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -> # end of Dictionary - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - -=FrameImage -&%v -&Y\xA66A95000002070000015E000000080000000000000002000000020000030000FF73C3E56B00EA -&71CDFFEA6E00E1F27900AD21BD631542CDAEEA6E00E1BFF27900B599DE5FFF9A82D24EFF94AD21BD -&DE63F65F15FF57F442E1C8AF967D644B32BF7F4CC68BCA026031A47819496C3D2E54370E\x5#Kr3Z -&0g9D,\x142A09484F3E26281F40634205\xSv%pQ^;XF\x1D5616216E5C6B4D691B65611218100D0B -&74070020406080A0C0E00020406080A0C0E00020406080A0C0E00020406080A0C0E00020406080A0 -&C0E00020406080A0C0E00020406080A0C0E00020406080A0C0E00020406080A0C0E00020406080A0 -&C0E00020406080A0C0E00020406080A0C0E00020406080A0C0E00020406080A0C0E00020406080A0 -&C0E000FF73C3E56B00E56ABDFFE36600A7DA5A00AD21BD633842BDA0E36600A88EDA5A00A188D655 -&FF917BCE4AFF94AD21BDDE6322FB35FCFE3E42E1C8AF967D644B32BF7F4CD599DB45966EF2AB5983 -&A1786B8C7350716184A670916C9C747E6954684B81877964665E7B997C488BA963A48994768F7F5C -&8E5660A3939F869E5B9B975358514E4CA7\xI @@@@@@@@````````\x8080808080808080A0 -&A0A0A0A0A0A0A0C0C0C0C0C0C0C0C0E0E0E0E0E0E0E0E00000000000000000\x @@@@@@@@ -&````````\x8080808080808080A0A0A0A0A0A0A0A0C0C0C0C0C0C0C0C0E0E0E0E0E0E0E0E000FF73 -&B9E16500E165AAFFDB5B0097D25100AD21BD63FF42AA90DB5B009780D25100B599DE5FFF9A82D24E -&FF94AD21BDDE631717FF17FFFF42E1C8AF967D644B32BF7F4CE2B5E842966DFEAC5781A276698C72 -&4D705F84A76E916B9D727C685266487F877763645C79997A4589AA61A58994748F7F5A8E545EA393 -&A0849E599B9850554F4B4AA846808080808080808080808080808080808080808080808080808080 -&8080808080808080808080808080808080808080808080808080808080C0C0C0C0C0C0C0C0C0C0C0 -&C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 -&C0C0C0C0C0C0C0C0C0C0C0C0C080FE0480FE048025040580FE0480CC0405801B0405040404801903 -&050480FE0380CB0305048019030505030404801903050480FE0380CB030504801903050503040480 -&1903050480FE0380CB03050480190305050304040303038017050480FE0580CC0504801605030303 -&05050504040303030580FE0480FC0403030305050404040303030504801403050480FE0380B40305 -&048014030504801403050403030305050304040303030504801403050480FE0380B4030504801403 -&0504801403050403030305050304040303030504801403050480FE0380B403050480140305048014 -&03050403030305050304040303030504801403050480FE0380B40305048014030504030303800E04 -&0303030504030303050503040403030305048014030504808C038006060303060603030606801003 -&06068007030606804E030606800803060680040306068007030606808D0305048014030504030303 -&04800C03050303030504030303050503040403030305048014030504808C03060680060306060303 -&060680100306068007030606804F0306068006030606800403060606800603060606808D03050480 -&1403050403030304800C03050303030504030303050503040403030305048014030504808C030606 -&800A0306068010030606068005030606068050030606800403060680040380030680050380030680 -&8D030504801403050403030304800C03050303030504030303050503040403030305048014030504 -&808C030606800A030606801003060606800503060606805103060603030306068004030606030606 -&8004030606030606808D030504801403050403030304800C03050303030504030303050504040403 -&03030504030303800E040303030504808C0306068006030606030306068003038003068008038003 -&06800303800306800303800306030303060603800306800403800306800403060606030606800303 -&8003068003030606030606801B03060603060680080306068007030606808D030504800703800304 -&800803050403030304800C030503030305040303030505030404030303050403030304800C030503 -&03030504808C03800606030306060303060603030306060303060680070306060306800303060306 -&06030303060603030606030306060603030306060303030606030306060303030606030306060603 -&0303060603030606030303060606800803800906800B0306060680090306068007030606808D0305 -&0480070304030305800803050403030304800C030503030305040303030505030404030303050403 -&030304800C03050303030504808C0306068006030606030306060303060680030306068006030606 -&03060603030606030606800603060603030606800303060680060306060303060680030306060303 -&0606800303060603030606800903800906800B0306060680090306068007030606808D0305048007 -&0304030305800803050403030304800C030503030305040303030505050404030303050403030304 -&800D050303030504808C030606800603060603030606030380070680060306060303060303060303 -&06060303038005060303060680030306060303038005060303060680030306060303800706030306 -&06801E03060603060680080306068007030606808D03050480070304050505800803050403030304 -&800C03050303030504030303050503040403030305048014030504808C0306068006030606030306 -&0603030606800C030606030380030603030606030306060303030606030306068003030606030306 -&060303030606030306068003030606030306068007030606801D0306060303030606800703060680 -&07030606808D030504801403050403030304800C0305030303050403030305050304040303030504 -&8014030504808C03060680060306060303060603030606800C030606030303060603030306060303 -&06060303030606030306068003030606030306060303030606030306068003030606030306068007 -&030606801C030606800403060680060306068007030606808D030504801403050403030304800C03 -&050303030504030303050503040403030305048014030504808C0306068006030606030306060303 -&03060603030306068006030606030303060603030306060303060603030606060303060680030306 -&06030306060303060606030303060603030606060303030606030303060603030606801B03060680 -&0603060680050306068007030606808D030504801403050403030304800C03050303030504030303 -&050503040403030305048014030504808C0306068006030606030306068003038004068007030606 -&80070306060303030606060306060303060680030306060303030606060306068003030606060306 -&068003038004060303030606801A030606800803060680040306068007030606808D030504801403 -&050403030304800C0305030303050403030305050304040303030504801403050480DC03060680D4 -&030504801403050403030304800C0305030303050403030305050304040303030504801403050480 -&D70306060303060680D5030504801403050403030304800D05030303050403030305050304040303 -&030504801403050480D80380030680D6030504801403050480140305040303030505030404030303 -&0504801403050480FE0380B403050480140305048014030504030303050503040403030305048014 -&03050480FE0380B40305048014030504801403050403030305050504800405048015050480FE0580 -&B5050480150504801505048004050F80050480FE0F80FB0F800404050F04040303030580FE0F80FA -&0F100403030305050E0404030303050F0F80FE0E80F70E10100403030305050E0404030303050F0F -&80FE0E80F70E10100403030305050E0404030303050F0F80FE0E80F70E10100403030305050E0404 -&030303050F0F80FE0E80F70E10100403030305050E0404030303050F0F80FE0E80F70E1010040303 -&0305050E0404030303050F0F80FE0E80F70E10100403030305050E0404030303050F0F80FE0E80F7 -&0E10100403030305050E0404030303050F0F80FE0E80F70E10100403030305050E0404030303050F -&0F80090E8006110E0E11110E0E1111801B0E800311800E0E111180290E1111800E0E111180070E11 -&110E111180FE0E80380E111180040E1111800B0E111180130E10100403030305050E040403030305 -&0F0F80090E111180060E11110E0E1111801A0E11110E0E111111800C0E111180150E1180120E1111 -&800E0E111180070E11110E111180FE0E80380E111180040E1111800B0E111180130E101004030303 -&05050E0404030303050F0F80090E1111800A0E111180190E111180030E1111800C0E111180140E11 -&1180120E1111800F0E111180050E111180FE0E803C0E111180040E1111800B0E111180130E101004 -&03030305050E0404030303050F0F80090E1111800A0E111180190E111180120E111180140E111180 -&120E1111800F0E111180050E111180FE0E803C0E111180040E1111800B0E111180130E1010040303 -&0305050E0404030303050F0F80090E111180060E11110E0E111180030E80031180110E1111118009 -&0E80031180030E111180030E80031180050E8003110E0E8004110E0E0E80031180050E1111110E11 -&1180100E111180030E11110E0E0E111180030E8003110E0E0E11110E0E0E11110E0E0E111180FE0E -&80210E111180040E111180030E80031180030E11110E0E11110E111111800B0E1010040303030505 -&0E0404030303050F0F80090E8006110E0E11110E0E11110E0E0E11110E0E111180110E8004118005 -&0E11110E0E11110E0E0E11110E0E0E11110E0E111180030E11110E0E11110E0E111180030E11110E -&0E111180030E11110E0E11111180100E111180030E11110E0E0E11110E0E0E11110E0E11110E0E11 -&110E0E0E11110E0E0E111180FE0E80210E8008110E0E0E11110E0E11110E0E0E11110E0E1111110E -&0E1111800A0E10100403030305050E0404030303050F0F80090E111180060E11110E0E11110E0E11 -&1180030E111180120E8004110E0E0E111180030E11110E0E11110E0E111180030E11110E0E111180 -&030E110E0E11110E0E0E111180030E11110E0E111180030E111180110E11110E0E111180030E1111 -&0E0E111180030E11110E11110E0E0E11110E0E0E111180FE0E80210E111180040E11110E0E111180 -&030E11110E0E11110E0E111180030E111180090E10100403030305050E0404030303050F0F80090E -&111180060E11110E0E11110E0E80071180150E1111110E0E8007110E0E11110E0E8007110E0E1111 -&80060E11110E0E0E8007110E0E111180030E111180110E11110E0E111180030E11110E0E8007110E -&0E11110E8003110E111180FE0E80220E111180040E11110E0E8007110E0E11110E0E111180030E11 -&1180090E10100403030305050E0404030303050F0F80090E111180060E11110E0E11110E0E111180 -&1C0E11110E0E111180070E11110E0E111180070E111180060E11110E0E0E111180070E111180030E -&111180120E80031180040E11110E0E111180070E11110E110E0E110E111180FE0E80220E11118004 -&0E11110E0E111180070E11110E0E111180030E111180090E10100403030305050E0404030303050F -&0F80090E111180060E11110E0E11110E0E111180150E111180040E11110E0E111180070E11110E0E -&111180070E111180030E110E0E11110E0E0E111180070E111180030E111180120E80031180040E11 -&110E0E111180080E1111110E0E11111180FE0E80230E111180040E11110E0E111180070E11110E0E -&111180030E111180090E10100403030305050E0404030303050F0F80090E111180060E11110E0E11 -&110E0E0E11110E0E0E1111800F0E1111110E0E0E111180030E11110E0E0E11110E0E11110E0E0E11 -&110E0E0E11110E0E0E11110E0E11110E0E111180030E11110E0E0E11110E0E0E11110E0E11111180 -&130E111180050E11110E0E0E11110E0E0E11110E0E0E111180030E111180FE0E80230E111180040E -&11110E0E0E11110E0E0E11110E0E11110E0E1111110E0E1111800A0E10100403030305050E040403 -&0303050F0F80090E111180060E11110E0E111180030E80041180120E80041180050E8004110E0E0E -&111180030E80041180040E80031180030E1111110E0E0E80041180040E1111110E111180130E1111 -&80050E111180030E80041180030E111180030E111180FE0E80230E111180040E111180030E800411 -&0E0E0E11110E0E11110E111111800B0E10100403030305050E0404030303050F0F80FE0E80E50E11 -&11800F0E10100403030305050E0404030303050F0F80FE0E80E50E1111800F0E1010040303030505 -&0E0404030303050F0F80FE0E80E50E1111800F0E10100403030305050E0404030303050F0F80FE0E -&80F70E10100403030305050E0404030303050F0F80080E800911801E0E800B1180460E800C1180FE -&0E80390E800B11801F0E10100403030305050E0404030303050F0F80FE0E80F70E10100403030305 -&050E0404030303050F0F80FE0E80F70E10100403030305050E0404030303050F0F80FE0E80F70E10 -&100403030305050E0404030303050F0F80FE0E80F70E1010040303030505100404030303050F0F80 -&FE1080F910040303030505100404030303050F80FE1080FA100403030305050B04040303030580FE -&0B80FB0B040303030505090404030303050B80FE0980F9090C040303030505090404030303050B80 -&FE0980F9090C040303030505090404030303050B80FE0980F9090C04030303050509040403030305 -&0B801C09800A01802509800A01802509800A0180FE09806F090C040303030505090404030303050B -&801B0901018008161313802309010180081613138023090101800816131380FE09806E090C040303 -&030505090404030303050B800C09800F01800A161313801309800F01800A161313801309800F0180 -&0A16131380FE09806D090C040303030505090404030303050B800C0901801B021380120901801B02 -&1380120901801B021380FE09806C090C040303030505010404030303050B800A09801C0113021380 -&1009801C01130213801009801C0113021380FE09806C090C040303030505140404030303050B800A -&0901801A140213021380100901801A140213021380100901801A140213021380FE09806C090C0403 -&03030505140404030303050B800A0901801A140213021380100901801A140213021380100901801A -&140213021380FE09806C090C040303030505140404030303050B800A0901801A1402130213801009 -&01801A140213021380100901801A140213021380FE09806C090C040303030505140404030303050B -&800A0901801A140213021380100901801A140213021380100901801A140213021380FE09806C090C -&040303030505140404030303050B800A0901801A140213021380100901801A140213021380100901 -&801A140213021380FE09806C090C040303030505140404030303050B800A0901801A140213021380 -&100901801A140213021380100901801A140213021380FE09806C090C040303030505140404030303 -&050B800A0901801A140213021380100901801A140213021380100901801A140213021380FE09806C -&090C040303030505140404030303050B800A0901801A140213021380100901801A14021302138010 -&0901801A140213021380FE09806C090C040303030505140404030303050B800A0901801A14021302 -&1380100901801A140213021380100901801A140213021380FE09806C090C04030303050514040403 -&0303050B800A0901801A1402130213090909800A0D09090901801A1402130213090909800A0D0909 -&0901801A140213021380FE09806C090C040303030505140404030303050B800A0901801A14021302 -&13090909800A0D09090901801A1402130213090909800A0D09090901801A140213021380FE09806C -&090C040303030505140404030303050B800A0901801A140213021380100901801A14021302138010 -&0901801A140213021380FE09806C090C040303030505140404030303050B800A0901801A14021302 -&1380100901801A140213021380100901801A140213021380FE09806C090C04030303050514040403 -&0303050B800A0901801A140213021380100901801A140213021380100901801A140213021380FE09 -&806C090C040303030505140404030303050B800A0901801A140213021380100901801A1402130213 -&80100901801A140213021380FE09806C090C040303030505140404030303050B800A0901801A1402 -&13021380100901801A140213021380100901801A140213021380FE09806C090C0403030305051404 -&04030303050B800A0901801A140213021380100901801A140213021380100901801A140213021380 -&FE09806C090C040303030505140404030303050B800A0901801A140213021380100901801A140213 -&021380100901801A140213021380FE09806C090C040303030505020404030303050B800A0901801B -&0213131380100901801B0213131380100901801B0213131380FE09806C090C040303030505130404 -&030303050B800B09801D13801209801D13801209801D1380FE09806D090C04030303050509040403 -&0303050B80FE0980F9090C040303030505090404030303050B80FE0980F9090C0403030305050904 -&04030303050B80FE0980F9090C040303030505090404030303050B80FE0980F9090C040303030505 -&090404030303050B80FE0980F9090C040303030505090404030303050B80FE0980F9090C04030303 -&0505090404030303050B80FE0980F9090C040303030505090404030303050B80FE0980F9090C0403 -&03030505090404030303050B80FE0980F9090C040303030505090404030303050B80FE0980F9090C -&040303030505090404030303050B80FE0980F9090C040303030505090404030303050B80FE0980F9 -&090C040303030505090404030303050B80FE0980F9090C040303030505090404030303050B803809 -&0D0D09090D0D09090D0D8025090D0D8008090D0D8004090D0D8007090D0D80FE098072090C040303 -&030505090404030303050B8038090D0D09090D0D09090D0D8026090D0D8006090D0D8004090D0D0D -&8006090D0D0D80FE098072090C040303030505090404030303050B8038090D0D8005090D0D802709 -&0D0D8004090D0D80040980030D80050980030D80FE098072090C040303030505090404030303050B -&8038090D0D8005090D0D8028090D0D0909090D0D8004090D0D090D0D8004090D0D090D0D80FE0980 -&72090C040303030505090404030303050B8007090D0D8003090D0D09090980040D0909090D0D090D -&0D8018090D0D09090D0D09090D0D090D0D0D8025090D0D090D0D8008090D0D8007090D0D80FE0980 -&72090C040303030505090404030303050B8007090D0D8003090D0D09090D0D0909090D0D09090D0D -&0D801A090D0D09090D0D09090D0D0D09090D0D8025090D0D0D8009090D0D8007090D0D80FE098072 -&090C040303030505090404030303050B8007090D0D8003090D0D09090D0D0D8005090D0D801B090D -&0D09090D0D09090D0D8003090D0D8024090D0D0D8009090D0D8007090D0D80FE098072090C040303 -&030505090404030303050B8007090D0D8003090D0D09090980030D8003090D0D801B090D0D09090D -&0D09090D0D8003090D0D8023090D0D090D0D8008090D0D8007090D0D80FE098072090C0403030305 -&05090404030303050B8007090D0D8003090D0D8004090D0D0D0909090D0D801B090D0D09090D0D09 -&090D0D8003090D0D8022090D0D0909090D0D8007090D0D8007090D0D80FE098072090C0403030305 -&05090404030303050B8007090D0D8003090D0D8005090D0D0D09090D0D801B090D0D09090D0D0909 -&0D0D8003090D0D8021090D0D8004090D0D8006090D0D8007090D0D80FE098072090C040303030505 -&0D0404030303050B8007090D0D0909090D0D0D09090D0D0909090D0D09090D0D801B090D0D09090D -&0D09090D0D0D09090D0D8021090D0D8006090D0D8005090D0D8007090D0D80FE098072090C040303 -&030505090404030303050B80080980030D090D0D09090980040D0909090D0D801B090D0D09090D0D -&09090D0D090D0D0D8021090D0D8008090D0D8004090D0D8007090D0D80FE098072090C0403030305 -&05090404030303050B80FE0980F9090C040303030505090404030303050B80FE0980F9090C040303 -&030505090404030303050B80FE0980F9090C040303030505090404030303050B80FE0980F9090C04 -&0303030505090404030303050B80FE0980F9090C040303030505090404030303050B80FE0980F909 -&0C0403030305050C0404030303050B80FE0C80FA0C0403030305050B04040303030580FE0B80FA0B -&0C040303030505090404030303050B80FE0980F9090C040303030505090404030303050B80FE0980 -&F9090C040303030505090404030303050B80FE0980F9090C040303030505080404030303050B8006 -&0980FE0880EE088003090C040303030505090404030303050B8006090880FE0980EC09078003090C -&040303030505090404030303050B80060908800B090D0D8018090D0D8018090D0D80FE0980A80907 -&8003090C040303030505090404030303050B80060908800B090D0D8018090D0D8018090D0D80FE09 -&80A809078003090C040303030505090404030303050B80060908800A090D0D8018090D0D09090D0D -&09090D0D09090D0D800C090D0D090D0D8008090D0D8004090D0D8007090D0D80FE09808A09078003 -&090C040303030505090404030303050B80060908800A090D0D8018090D0D09090D0D09090D0D0909 -&0D0D800C090D0D09090D0D8006090D0D8004090D0D0D8006090D0D0D80FE09808A09078003090C04 -&0303030505090404030303050B800609088009090D0D8018090D0D0909090D0D8005090D0D800B09 -&0D0D8003090D0D8004090D0D80040980030D80050980030D80FE09808A09078003090C0403030305 -&05090404030303050B800609088009090D0D8018090D0D0909090D0D8005090D0D800B090D0D8004 -&090D0D0909090D0D8004090D0D090D0D8004090D0D090D0D80FE09808A09078003090C0403030305 -&05090404030303050B800609088008090D0D8018090D0D8003090D0D09090D0D09090D0D090D0D0D -&8006090D0D8006090D0D090D0D8008090D0D8007090D0D80FE09808A09078003090C040303030505 -&090404030303050B800609088008090D0D8018090D0D8003090D0D09090D0D09090D0D0D09090D0D -&8005090D0D8007090D0D0D8009090D0D8007090D0D80FE09808A09078003090C0403030305050904 -&04030303050B800609088007090D0D8018090D0D8004090D0D09090D0D09090D0D8003090D0D8003 -&090D0D8008090D0D0D8009090D0D8007090D0D80FE09808A09078003090C04030303050509040403 -&0303050B800609088007090D0D8018090D0D8004090D0D09090D0D09090D0D8003090D0D8003090D -&0D8007090D0D090D0D8008090D0D8007090D0D80FE09808A09078003090C04030303050509040403 -&0303050B800609088006090D0D8018090D0D8005090D0D09090D0D09090D0D8003090D0D0909090D -&0D8007090D0D0909090D0D8007090D0D8007090D0D80FE09808A09078003090C0403030305050904 -&04030303050B800609088006090D0D8006090D0D8003090D0D8003090D0D8003090D0D8005090D0D -&09090D0D09090D0D8003090D0D0909090D0D8006090D0D8004090D0D8006090D0D8007090D0D80FE -&09808A09078003090C040303030505090404030303050B800609088005090D0D8007090D0D800309 -&0D0D8003090D0D0909090D0D8006090D0D09090D0D09090D0D0D09090D0D0909090D0D8006090D0D -&8006090D0D8005090D0D8007090D0D80FE09808A09078003090C040303030505090404030303050B -&800609088005090D0D8007090D0D8003090D0D8003090D0D0909090D0D8006090D0D09090D0D0909 -&0D0D090D0D0D8003090D0D8005090D0D8008090D0D8004090D0D8007090D0D80FE09808A09078003 -&090C040303030505090404030303050B800609088004090D0D8018090D0D8018090D0D80FE0980AF -&09078003090C040303030505090404030303050B800609088004090D0D8018090D0D8018090D0D80 -&FE0980AF09078003090C040303030505090404030303050B8006090880FE0980EC09078003090C04 -&0303030505090404030303050B8006090880FE0980EC09078003090C040303030505070404030303 -&050B8006090880FE0780ED078003090C040303030505090404030303050B80FE0980F9090C040303 -&030505090404030303050B80FE0980F9090C040303030505090404030303050B80FE0980F9090C04 -&03030305050B04040303030580FE0B80FB0B040303030505090404030303050B80FE0980F9090C04 -&0303030505090404030303050B80FE0980F9090C040303030505090404030303050B80FE0980F909 -&0C040303030505090404030303050B80FE0980F9090C040303030505090404030303050B80FE0980 -&F9090C0403030305050C0404030303050B80040980FE0C80EF0C8004090C0403030305050C040403 -&0303050B80040980FE0C80EE0C0B8004090C0403030305050A0404030303050B8004090C0C80FE0A -&80EB0A0B0B8004090C0403030305050A0404030303050B8004090C0C80FE0A80EB0A0B0B8004090C -&0403030305050A0404030303050B8004090C0C80FE0A80EB0A0B0B8004090C0403030305050A0404 -&030303050B8004090C0C80FE0A80EB0A0B0B8004090C0403030305050A0404030303050B8004090C -&0C80FE0A80EB0A0B0B8004090C0403030305050A0404030303050B8004090C0C80FE0A80EB0A0B0B -&8004090C0403030305050A0404030303050B8004090C0C80FE0A80EB0A0B0B8004090C0403030305 -&050A0404030303050B8004090C0C80FE0A80EB0A0B0B8004090C0403030305050A0404030303050B -&8004090C0C80FE0A80EB0A0B0B8004090C0403030305050A0404030303050B8004090C0C80FE0A80 -&EB0A0B0B8004090C0403030305050A0404030303050B8004090C0C80FE0A80EB0A0B0B8004090C04 -&03030305050A0404030303050B8004090C0C80FE0A80EB0A0B0B8004090C0403030305050A040403 -&0303050B8004090C0C80FE0A80EB0A0B0B8004090C0403030305050A0404030303050B8004090C0C -&80FE0A80EB0A0B0B8004090C0403030305050A0404030303050B8004090C0C80FE0A80EB0A0B0B80 -&04090C0403030305050A0404030303050B8004090C0C80FE0A80EB0A0B0B8004090C040303030505 -&0A0404030303050B8004090C0C80FE0A80EB0A0B0B8004090C0403030305050A0404030303050B80 -&04090C0C80FE0A80EB0A0B0B8004090C0403030305050A0404030303050B8004090C0C80AB0A800A -&0180850A800A0180A20A0B0B8004090C0403030305050A0404030303050B8004090C0C80140A8006 -&01808E0A0101800816131380830A0101800816131380A10A0B0B8004090C04030303050501040403 -&0303050B8004090C0C800B0A80080180051613807F0A800F01800A16131380730A800F01800A1613 -&1380A00A0B0B8004090C040303030505020404030303050B8004090C0C800A0A01800F1613807E0A -&01801B021380720A01801B0213809F0A0B0B8004090C040303030505010404030303050B8004090C -&0C80080A8012010200807B0A801C0113021380700A801C01130213809F0A0B0B8004090C04030303 -&0505140404030303050B8004090C0C80080A018010120202000C807A0A01801A140213021380700A -&01801A1402130213809F0A0B0B8004090C040303030505140404030303050B8004090C0C80080A01 -&8010120202000C807A0A01801A140213021380700A01801A1402130213809F0A0B0B8004090C0403 -&03030505140404030303050B8004090C0C80080A018010120202000C807A0A01801A140213021380 -&700A01801A1402130213809F0A0B0B8004090C040303030505140404030303050B8004090C0C8008 -&0A018010120202000C807A0A01801A140213021380700A01801A1402130213809F0A0B0B8004090C -&040303030505140404030303050B8004090C0C80080A018010120202000C807A0A01801A14021302 -&1380700A01801A1402130213809F0A0B0B8004090C040303030505140404030303050B8004090C0C -&80080A0180101202020080060180740A01801A140213021380700A01801A1402130213809F0A0B0B -&8004090C040303030505140404030303050B8004090C0C80080A01800A1280080180051613158073 -&0A01801A140213021380700A01801A1402130213809F0A0B0B8004090C0403030305051404040303 -&03050B8004090C0C80080A0180091201800F16131580720A01801A140213021380700A01801A1402 -&130213809F0A0B0B8004090C040303030505140404030303050B8004090C0C80080A018007128012 -&01020080720A01801A140213021380700A01801A1402130213809F0A0B0B8004090C040303030505 -&140404030303050B8004090C0C80080A01800712018010140202000C80710A01801A140213021380 -&700A01801A1402130213809F0A0B0B8004090C040303030505140404030303050B8004090C0C8008 -&0A0180071201148005008009140202000C80710A01801A140213021380700A01801A140213021380 -&9F0A0B0B8004090C040303030505140404030303050B8004090C0C80080A01800702011480040080 -&0A140202000C80710A01801A140213021380700A01801A1402130213809F0A0B0B8004090C040303 -&030505140404030303050B8004090C0C80090A8007000114800300800B140202000C80710A01801A -&140213021380700A01801A1402130213809F0A0B0B8004090C040303030505140404030303050B80 -&04090C0C800A0A80060C0114800400800A140202000C80710A01801A140213021380700A01801A14 -&02130213809F0A0B0B8004090C040303030505140404030303050B8004090C0C80110A0114000014 -&0000008009140202000C80710A01801A140213021380700A01801A1402130213809F0A0B0B800409 -&0C040303030505020404030303050B8004090C0C80110A0114001414140000008008140202000C80 -&710A01801A140213021380700A01801A1402130213809F0A0B0B8004090C04030303050513040403 -&0303050B8004090C0C80110A018005140000008007140202000C80710A01801A140213021380700A -&01801A1402130213809F0A0B0B8004090C040303030505020404030303050B8004090C0C80110A01 -&80061400008007140202000C80710A01801A140213021380700A01801A1402130213809F0A0B0B80 -&04090C040303030505130404030303050B8004090C0C80110A018010140202000C80710A01801B02 -&13131380700A01801B02131313809F0A0B0B8004090C0403030305050A0404030303050B8004090C -&0C80110A018010140202000C80720A801D1380720A801D1380A00A0B0B8004090C0403030305050A -&0404030303050B8004090C0C80110A0180110213000C80FE0A80C30A0B0B8004090C040303030505 -&0A0404030303050B8004090C0C80120A8012001580FE0A80C40A0B0B8004090C0403030305050A04 -&04030303050B8004090C0C80130A80110C80FE0A80C50A0B0B8004090C0403030305050A04040303 -&03050B8004090C0C80FE0A80EB0A0B0B8004090C0403030305050A0404030303050B8004090C0C80 -&FE0A80EB0A0B0B8004090C0403030305050A0404030303050B8004090C0C80FE0A80EB0A0B0B8004 -&090C0403030305050A0404030303050B8004090C0C80FE0A80EB0A0B0B8004090C0403030305050A -&0404030303050B8004090C0C80FE0A80EB0A0B0B8004090C0403030305050A0404030303050B8004 -&090C0C80240A0D0D803C0A0D0D80FE0A80850A0B0B8004090C0403030305050A0404030303050B80 -&04090C0C80230A0D0D803E0A0D0D80FE0A80840A0B0B8004090C0403030305050A0404030303050B -&8004090C0C80220A0D0D80400A0D0D80350A80050D808C0A0D80B80A0B0B8004090C040303030505 -&0A0404030303050B8004090C0C80220A0D0D80400A0D0D80330A0D0D0D80030A0D808B0A0D0D0D80 -&B70A0B0B8004090C0403030305050A0404030303050B8004090C0C80210A0D0D80420A0D0D80320A -&0D0D80040A0D808C0A0D80B80A0B0B8004090C0403030305050A0404030303050B8004090C0C8021 -&0A0D0D80420A0D0D80310A0D0D80FE0A804E0A0B0B8004090C0403030305050A0404030303050B80 -&04090C0C80210A0D0D80080A80040D0A0D0D80030A80030D800F0A0D0D80030A0D0D0A0A0A0D0D0A -&0D0D0D80080A0D0D80310A0D0D80930A0D0D80060A80040D80030A0D0D0A0D0D0D80060A80040D80 -&030A0D0D0A80030D80050A80030D80050A80050D80050A80030D80110A80030D80040A0D0D80030A -&0D0D80040A80050D803C0A0B0B8004090C0403030305050A0404030303050B8004090C0C80210A0D -&0D80070A0D0D0A0A0A0D0D80040A0D0D0A0A0D0D800D0A0D0D0D0A0A0A0D0D0D0A0A80030D0A0A0D -&0D80070A0D0D80310A0D0D80900A80040D80050A0D80030A0D0D0A0A80030D0A0A0D0D80040A0D80 -&030A0D0D0A0A80030D0A0A0A0D0D80030A0D0D0A0A0D0D80030A0D0D80030A0D80040A0D0D0A0A0D -&0D0A0A0A80090D0A0A0A0D0D0A0A0D0D0A0A0A0D0D0D0A0A0A0D0D0D80030A0D0D80030A0D803C0A -&0B0B8004090C0403030305050A0404030303050B8004090C0C80210A0D0D80070A0D0D0A0A0A0D0D -&80030A0D0D80030A0D0D800D0A0D0D80030A0D0D0A0A0A0D0D80030A0D0D80060A0D0D80310A0D0D -&80930A0D0D800A0A0D0D0A0A0A0D0D80030A0D0D80080A0D0D0A0A0A0D0D80030A0D0D0A0A0A0D0D -&80030A0D0D0A0A0A0D0D80080A0D0D80030A0D0D0A0A80090D0A0A0D0D80030A0D0D0A0A0A0D0D80 -&030A0D0D0A0A0A0D0D80040A0D803C0A0B0B8004090C0403030305050A0404030303050B8004090C -&0C80210A0D0D80070A0D0D0A0A0A0D0D80030A0D0D80030A0D0D800D0A0D0D80030A0D0D0A0A0A0D -&0D80030A0D0D80060A0D0D80310A0D0D80930A0D0D80060A80050D0A0A0A0D0D80030A0D0D80040A -&80050D0A0A0A0D0D80030A0D0D0A0A0A80070D80030A80030D80050A80070D800D0A80070D0A0A0A -&0D0D80030A0D0D0A0A0A0D0D80420A0B0B8004090C0403030305050A0404030303050B8004090C0C -&80210A0D0D80080A80040D80040A0D0D80030A0D0D800D0A0D0D80030A0D0D0A0A0A0D0D80030A0D -&0D80060A0D0D80310A0D0D80930A0D0D80050A0D0D0A0A0A0D0D0A0A0A0D0D80030A0D0D80030A0D -&0D0A0A0A0D0D0A0A0A0D0D80030A0D0D0A0A0A0D0D800C0A0D0D0D80030A0D0D80130A0D0D80080A -&0D0D80030A0D0D0A0A0A0D0D80420A0B0B8004090C0403030305050A0404030303050B8004090C0C -&800D0A0D80090A0D80070A0D0D80070A0D0D80080A0D0D80030A0D0D800D0A0D0D80030A0D0D0A0A -&0A0D0D80030A0D0D80060A0D0D80320A0D0D80040A0D808C0A0D0D80040A0D0D80030A0D0D0A0A0A -&0D0D80030A0D0D0A0A0A0D0D80030A0D0D0A0A0A0D0D80030A0D0D0A0A0A0D0D800E0A0D0D0A0A0A -&0D0D80130A0D0D80080A0D0D80030A0D0D0A0A0A0D0D80420A0B0B8004090C0403030305050A0404 -&030303050B8004090C0C800C0A0D0D0D80070A0D0D0D80070A0D0D80070A80060D80030A0D0D0A0A -&0D0D800E0A0D0D0A0A0A80030D0A0A0D0D0D0A0A0D0D80060A0D0D80330A0D0D0D80030A0D808C0A -&0D0D80040A0D0D0A0A0A0D0D0D0A0A0A0D0D0D0A0A0D0D80030A0D0D0A0A0A0D0D0D0A0A0A0D0D80 -&030A0D0D80030A0D0D80030A0D0A0A0A0D80040A0D0D80030A0D0D80030A0D800E0A0D0D80030A0D -&0A0A0A0D0D0A0A0A80030D0A0A0A0D0D80030A0D803C0A0B0B8004090C0403030305050A04040303 -&03050B8004090C0C800C0A0D0D0D80070A0D0D0D80070A0D0D80060A0D0D80040A0D0D80030A8003 -&0D80100A80030D0A0D0D0A0A0A0D0D0A0D0D0D80070A0D0D80350A80040D808D0A0D0D80050A8003 -&0D0A0A0D0D0A0A0D0D0A0D0D0D80050A80030D0A0A0D0D0A80030D0A0A80030D80030A80040D8003 -&0A80060D80050A80040D80100A80040D80040A80030D0A0D0D80040A80040D803D0A0B0B8004090C -&0403030305050A0404030303050B8004090C0C800D0A0D80090A0D80090A0D0D80050A0D0D80040A -&0D0D80220A0D0D800A0A0D0D80C90A0D0D800F0A0D0D80A50A0B0B8004090C0403030305050A0404 -&030303050B8004090C0C80240A0D0D80040A0D0D80030A0D0D80230A0D0D80090A0D0D80C50A0D80 -&030A0D0D800F0A0D0D80A50A0B0B8004090C0403030305050A0404030303050B8004090C0C802C0A -&80050D80230A80040D80D00A80040D800F0A80040D80A30A0B0B8004090C0403030305050A040403 -&0303050B8004090C0C80FE0A80EB0A0B0B8004090C0403030305050A0404030303050B8004090C0C -&80FE0A80EB0A0B0B8004090C0403030305050A0404030303050B8004090C0C80FE0A80EB0A0B0B80 -&04090C0403030305050A0404030303050B8004090C0C80FE0A80EB0A0B0B8004090C040303030505 -&0A0404030303050B8004090C0C80FE0A80EB0A0B0B8004090C0403030305050A0404030303050B80 -&04090C0C80FE0A80EB0A0B0B8004090C0403030305050A0404030303050B8004090C0C80FE0A80EB -&0A0B0B8004090C0403030305050A0404030303050B8004090C0C80FE0A80EB0A0B0B8004090C0403 -&030305050A0404030303050B8004090C0C80FE0A80EB0A0B0B8004090C0403030305050A04040303 -&03050B8004090C0C80FE0A80EB0A0B0B8004090C0403030305050A0404030303050B8004090C0C80 -&FE0A80EB0A0B0B8004090C0403030305050A0404030303050B8004090C0C80FE0A80EB0A0B0B8004 -&090C0403030305050A0404030303050B8004090C0C80FE0A80EB0A0B0B8004090C0403030305050A -&0404030303050B8004090C0C80080A80180180FE0A80C90A0B0B8004090C0403030305050A040403 -&0303050B8004090C0C80080A018016140080FE0A80C90A0B0B8004090C0403030305050A04040303 -&03050B8004090C0C80080A018016140080FE0A80C90A0B0B8004090C0403030305050A0404030303 -&050B8004090C0C80080A018016140080FE0A80C90A0B0B8004090C0403030305050A040403030305 -&0B8004090C0C80080A018016140080FE0A80C90A0B0B8004090C0403030305050A0404030303050B -&8004090C0C80080A01141414000014001717141417171417171400008003140080FE0A80C90A0B0B -&8004090C0403030305050A0404030303050B8004090C0C80080A018016140080FE0A80C90A0B0B80 -&04090C0403030305050A0404030303050B8004090C0C80080A018016140080FE0A80C90A0B0B8004 -&090C0403030305050A0404030303050B8004090C0C80080A01141414000014140000170017171400 -&00141700001414140080FE0A80C90A0B0B8004090C0403030305050A0404030303050B8004090C0C -&80080A018016140080FE0A80C90A0B0B8004090C0403030305050A0404030303050B8004090C0C80 -&080A01141400001400171714001714001400001700008003140080FE0A80C90A0B0B8004090C0403 -&030305050A0404030303050B8004090C0C80080A018016140080FE0A80C90A0B0B8004090C040303 -&0305050A0404030303050B8004090C0C80080A011414000000140000171414001717000014000017 -&1714140080FE0A80C90A0B0B8004090C0403030305050A0404030303050B8004090C0C80080A0180 -&16140080FE0A80C90A0B0B8004090C0403030305050A0404030303050B8004090C0C80080A011414 -&0017171417000014001717001414171714001414140080FE0A80C90A0B0B8004090C040303030505 -&0A0404030303050B8004090C0C80080A018016140080FE0A80C90A0B0B8004090C0403030305050A -&0404030303050B8004090C0C80080A01141400171700001700141700001400001717000000141400 -&80FE0A80C90A0B0B8004090C0403030305050A0404030303050B8004090C0C80080A018016140080 -&FE0A80C90A0B0B8004090C0403030305050A0404030303050B8004090C0C80080A01141400001400 -&171417170000148003171400001414140080FE0A80C90A0B0B8004090C0403030305050A04040303 -&03050B8004090C0C80080A018016140080FE0A80C90A0B0B8004090C0403030305050A0404030303 -&050B8004090C0C80080A018016140080FE0A80C90A0B0B8004090C0403030305050A040403030305 -&0B8004090C0C80080A0114141400001417171400000014001414171417001414140080FE0A80C90A -&0B0B8004090C0403030305050A0404030303050B8004090C0C80080A018016140080FE0A80C90A0B -&0B8004090C0403030305050A0404030303050B8004090C0C80080A01141400171717140017171400 -&00001414171717001414140080FE0A80C90A0B0B8004090C0403030305050A0404030303050B8004 -&090C0C80080A018016140080FE0A80C90A0B0B8004090C0403030305050A0404030303050B800409 -&0C0C80080A01141417141717001717141717140017170014008003140080FE0A80C90A0B0B800409 -&0C0403030305050A0404030303050B8004090C0C80080A018016140080FE0A80C90A0B0B8004090C -&0403030305050A0404030303050B8004090C0C80080A0114140000141700140000800C140080FE0A -&80C90A0B0B8004090C0403030305050A0404030303050B8004090C0C80080A018016140080FE0A80 -&C90A0B0B8004090C0403030305050A0404030303050B8004090C0C80080A018016140080FE0A80C9 -&0A0B0B8004090C0403030305050A0404030303050B8004090C0C80080A018016140080FE0A80C90A -&0B0B8004090C0403030305050A0404030303050B8004090C0C80080A0180170080FE0A80C90A0B0B -&8004090C0403030305050A0404030303050B8004090C0C80FE0A80EB0A0B0B8004090C0403030305 -&050A0404030303050B8004090C0C80FE0A80EB0A0B0B8004090C0403030305050A0404030303050B -&8004090C0C80FE0A80EB0A0B0B8004090C0403030305050A0404030303050B8004090C0C80FE0A80 -&EB0A0B0B8004090C0403030305050A0404030303050B8004090C0C80FE0A80EB0A0B0B8004090C04 -&03030305050A0404030303050B8004090C0C80FE0A80EB0A0B0B8004090C0403030305050A040403 -&0303050B8004090C0C80090A80030D0A0A80030D80030A80030D801D0A0D80FE0A80B00A0B0B8004 -&090C0403030305050A0404030303050B8004090C0C800A0A0D0D80030A0D0D80030A0D0D0A0A0D0D -&801B0A0D0D0D80120A0D0D80FE0A809A0A0B0B8004090C0403030305050A0404030303050B800409 -&0C0C800B0A0D0D0A0A0D0D80040A0D80030A0D801C0A0D80130A0D0D80FE0A809A0A0B0B8004090C -&0403030305050A0404030303050B8004090C0C800C0A0D0A0A0D80040A0D0D80030A0D0D80300A0D -&0D80FE0A809A0A0B0B8004090C0403030305050A0404030303050B8004090C0C800C0A80030D8004 -&0A0D0D80030A0D0D0A0A0A0D0D0A0D0D0D80050A0D0D0A0A0D0D0D80050A0D0D80050A0D0D0A8003 -&0D80030A80070D80040A80030D80050A0D0D0A0A0D0D0D80030A80050D80FE0A80760A0B0B800409 -&0C0403030305050A0404030303050B8004090C0C800D0A0D0D80050A0D0D0A0D0D0A0D0D0A0A8003 -&0D0A0A0D0D80030A0D0D0D0A0D0A0D0D0A0A0A80040D80040A80030D0A0A0A0D0D80040A0D0D8007 -&0A0D0D0A0A0D0D80030A0D0D0D0A0D0A0D0D0A0A0A0D0D80030A0D80FE0A80760A0B0B8004090C04 -&03030305050A0404030303050B8004090C0C800C0A80030D80040A0D0D0A0D0D0A0D0D0A0A0A0D0D -&80030A0D0D80030A0D0D0D80090A0D0D80050A0D0D80030A0D0D80040A0D0D80060A0D0D80030A0D -&0D80030A0D0D0D80060A0D0D80FE0A807B0A0B0B8004090C0403030305050A0404030303050B8004 -&090C0C800C0A0D0A0A0D80040A0D0D80030A0D0D0A0A0A0D0D80030A0D0D80030A0D0D800A0A0D0D -&80050A0D0D80030A0D0D80040A0D0D80060A80070D80030A0D0D80080A80030D80FE0A80780A0B0B -&8004090C0403030305050A0404030303050B8004090C0C800B0A0D0D0A0A0D0D80030A0D0D80030A -&0D0D0A0A0A0D0D80030A0D0D80030A0D0D800A0A0D0D80050A0D0D80030A0D0D80040A0D0D80060A -&0D0D80090A0D0D800B0A0D0D0D80FE0A80760A0B0B8004090C0403030305050A0404030303050B80 -&04090C0C800B0A0D80030A0D80040A0D80030A0D80030A0D0D80030A0D0D80030A0D0D800A0A0D0D -&80050A0D0D80030A0D0D80040A0D0D80060A0D0D80090A0D0D800D0A0D0D80FE0A80750A0B0B8004 -&090C0403030305050A0404030303050B8004090C0C800A0A0D0D80030A0D0D80030A0D0D0A0A0D0D -&80030A0D0D0D0A0A0D0D80040A0D0D800A0A0D0D80050A0D0D80030A0D0D80040A0D0D80030A0D0A -&0A0A0D0D80030A0D80030A0D0D80070A0D80040A0D0D80FE0A80750A0B0B8004090C040303030505 -&0A0404030303050B8004090C0C80090A80030D0A0A80030D80030A80030D80040A0D0D0A0D0D0D80 -&040A80040D80050A80070D0A0A80030D0A0A80030D80040A80040D80040A80040D80030A80040D80 -&050A80060D80FE0A80760A0B0B8004090C0403030305050A0404030303050B8004090C0C80200A0D -&0D80FE0A80C80A0B0B8004090C0403030305050A0404030303050B8004090C0C80200A0D0D80FE0A -&80C80A0B0B8004090C0403030305050A0404030303050B8004090C0C801F0A80040D80FE0A80C60A -&0B0B8004090C0403030305050A0404030303050B8004090C0C80FE0A80EB0A0B0B8004090C040303 -&0305050A0404030303050B8004090C0C80FE0A80EB0A0B0B8004090C0403030305050A0404030303 -&050B8004090C0C80FE0A80EB0A0B0B8004090C0403030305050A0404030303050B8004090C0C80FE -&0A80EB0A0B0B8004090C0403030305050A0404030303050B8004090C0C80FE0A80EB0A0B0B800409 -&0C0403030305050A0404030303050B8004090C0C80FE0A80EB0A0B0B8004090C0403030305050A04 -&04030303050B8004090C0C80FE0A80EB0A0B0B8004090C0403030305050A0404030303050B800409 -&0C0C80FE0A80EB0A0B0B8004090C0403030305050A0404030303050B8004090C0C80FE0A80EB0A0B -&0B8004090C0403030305050A0404030303050B8004090C0C80FE0A80EB0A0B0B8004090C04030303 -&05050A0404030303050B8004090C0C80FE0A80EB0A0B0B8004090C0403030305050A040403030305 -&0B8004090C0C80FE0A80EB0A0B0B8004090C0403030305050A0404030303050B8004090C0C80FE0A -&80EB0A0B0B8004090C0403030305050A0404030303050B8004090C0C80FE0A80EB0A0B0B8004090C -&0403030305050A0404030303050B8004090C0C80FE0A80EB0A0B0B8004090C0403030305050A0404 -&030303050B8004090C0C80FE0A80EB0A0B0B8004090C0403030305050A0404030303050B8004090C -&0C80FE0A80EB0A0B0B8004090C0403030305050A0404030303050B8004090C0C80FE0A80EB0A0B0B -&8004090C0403030305050A0404030303050B8004090C0C80FE0A80EB0A0B0B8004090C0403030305 -&050B0404030303050B8004090C0C80FE0B80ED0B8004090C0403030305050B0404030303050B8004 -&090C80FE0B80EE0B8004090C040303030505090404030303050B80FE0980F9090C04030303050509 -&0404030303050B80FE0980F9090C040303030505090404030303050B80FE0980F9090C0403030305 -&05090404030303050B80FE0980F9090C040303030505090404030303050B80FE0980F9090C040303 -&0305050C0404030303050B80FE0C80FA0C0403030305050B0480040580FE0B80FB0B048004050980 -&05040B80FE0980F9090C80040405090404030303050B80FE0980F9090C0403030305050904040303 -&03050B80FE0980F9090C040303030505090404030303050B80FE0980F9090C040303030505090404 -&030303050B80FE0980F9090C040303030505090404030303050B80060980060D8007090D0D803009 -&0D0D8008090D0D8004090D0D09090D0D8007090D0D8007090D0D80FE098084090C04030303050509 -&0404030303050B8006090D0D800C090D0D0909090D802B090D0D0D8008090D0D8004090D0D09090D -&0D8007090D0D8007090D0D80FE098084090C040303030505090404030303050B8006090D0D800C09 -&0D0D09090D0D802A0980030D8008090D0D8004090D0D800B090D0D8007090D0D80FE098084090C04 -&0303030505090404030303050B8006090D0D800C090D0D09090D0D8029090D0D090D0D8008090D0D -&8004090D0D800B090D0D8007090D0D80FE098084090C040303030505090404030303050B80060980 -&050D8008090D0D0980040D09090980030D8003090D0D090D0D0D0980030D80030980040D800B090D -&0D8008090D0D8004090D0D09090D0D8003090D0D0D090D0D8003090D0D0D090D0D80030980030D80 -&03090D0D0980030D80FE098071090C040303030505090404030303050B8006090D0D0D09090D0D80 -&07090D0D09090D0D8003090D0D09090D0D0909090D0D0D09090D0D0D09090D0D09090D0D0909090D -&0D800A090D0D80080980080D09090D0D0909090D0D09090D0D0D0909090D0D09090D0D0D0909090D -&0D09090D0D0909090D0D0D0909090D0D80FE098070090C040303030505090404030303050B800C09 -&0D0D8006090D0D09090D0D0909090D0D8003090D0D09090D0D0909090D0D0909090D0D09090D0D0D -&800E090D0D8008090D0D8004090D0D09090D0D09090D0D8003090D0D09090D0D8003090D0D09090D -&0D8003090D0D09090D0D8003090D0D80FE098070090C040303030505090404030303050B800C090D -&0D8006090D0D09090D0D09090980070D09090D0D0909090D0D0909090D0D09090980030D800C090D -&0D8008090D0D8004090D0D09090D0D09090D0D8003090D0D09090D0D8003090D0D090980070D0909 -&0D0D8003090D0D80FE098070090C040303030505090404030303050B800C090D0D8006090D0D0909 -&0D0D0909090D0D8007090D0D0909090D0D0909090D0D8004090D0D0D800B090D0D8008090D0D8004 -&090D0D09090D0D09090D0D8003090D0D09090D0D8003090D0D09090D0D8007090D0D8003090D0D80 -&FE098070090C040303030505090404030303050B8006090D0D8003090D0D8006090D0D09090D0D09 -&09090D0D8007090D0D0909090D0D0909090D0D8005090D0D0D800A090D0D8008090D0D8004090D0D -&09090D0D09090D0D8003090D0D09090D0D8003090D0D09090D0D8007090D0D8003090D0D80FE0980 -&70090C040303030505090404030303050B8007090D0D09090D0D8007090D0D09090D0D8003090D0D -&0909090D0D09090D0D0909090D0D0909090D0D09090D0D0909090D0D800A090D0D8008090D0D8004 -&090D0D09090D0D0909090D0D09090D0D0D0909090D0D09090D0D0D0909090D0D0909090D0D09090D -&0D8003090D0D80FE098070090C040303030505090404030303050B80080980030D8008090D0D0909 -&090D0D0D09090980040D0909090D0D0909090D0D0909090D0D09090980040D800B090D0D8008090D -&0D8004090D0D09090D0D8003090D0D0D090D0D8003090D0D0D090D0D80030980040D0909090D0D80 -&03090D0D80FE098070090C040303030505090404030303050B80FE0980F9090C0403030305050904 -&04030303050B80FE0980F9090C040303030505090404030303050B80FE0980F9090C040303030505 -&090404030303050B80FE0980F9090C040303030505090404030303050B80FE0980F9090C04030303 -&05050C0404030303050B80FE0C80FA0C0403030305050404040303030580FE0480FC040303030505 -&030404801903050480FE0380CB0305048019030505030404801903050480FE0380CB030504801903 -&0505030404801903050480FE0380CB0305048019030505050404801A050480FE0580CC0504801C05 -&0480FE0580FE0580070500\x -=EndInset - - - - - - - > # end of ImportObject - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - > # end of TextLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - - - - - > # end of Font - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - > # end of DashedPattern - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - > # end of DashedPattern - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of DashedPattern - - - - - - > # end of TextLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - - > # end of TextLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - > # end of Font - > # end of TextLine - - - - - - - - - - - > # end of Font - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - - - - > # end of DashedPattern - - - - - - - > # end of PolyLine - - - - > # end of DashedPattern - - - - - > # end of PolyLine - - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - - - > # end of TextLine - - - - - - - > # end of DashedPattern - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - > # end of DashedPattern - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - > # end of DashedPattern - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - > # end of DashedPattern - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - > # end of DashedPattern - - - - - > # end of TextLine - - - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - > # end of DashedPattern - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - > # end of DashedPattern - - - - - > # end of TextLine - - - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - - - > # end of TextLine - - - - - - - - > # end of TextLine - - - - - - - - > # end of TextLine - - - - - - - - > # end of TextLine - - - - - - - - > # end of TextLine - - - - - - - - > # end of TextLine - - - - > # end of DashedPattern - - > # end of Group - - - - - - > # end of DashedPattern - - - - - - > # end of TextLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - - - > # end of Font - > # end of TextLine - - - - - - > # end of DashedPattern - - - - - > # end of PolyLine - - - > # end of DashedPattern - - - - - - - - - > # end of Font - > # end of TextLine - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - > # end of DashedPattern - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - > # end of DashedPattern - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of DashedPattern - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - > # end of DashedPattern - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of DashedPattern - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - > # end of DashedPattern - - - - - > # end of TextLine - - - - - - > # end of TextLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - - - > # end of Font - > # end of TextLine - - - - - - - > # end of DashedPattern - - - - - > # end of PolyLine - - - - > # end of DashedPattern - - - - - - - - - > # end of Font - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - - - > # end of TextLine - - - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - > # end of DashedPattern - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - > # end of DashedPattern - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - > # end of DashedPattern - - - - - > # end of TextLine - - - - - - - - > # end of TextLine - - - - - - - - > # end of TextLine - - - - > # end of DashedPattern - - - - - > # end of PolyLine - - - - - - - > # end of PolyLine - - - - - - - > # end of DashedPattern - - - - - > # end of TextLine - - - - - - - - > # end of TextLine - - - - > # end of DashedPattern - - > # end of Group - - - - - - > # end of DashedPattern - - - - - - > # end of TextLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - - - > # end of Font - > # end of TextLine - - - - - - > # end of DashedPattern - - - - - > # end of PolyLine - - - > # end of DashedPattern - - - - - - - - - > # end of Font - > # end of TextLine - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - > # end of DashedPattern - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - > # end of DashedPattern - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of DashedPattern - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - - - > # end of Font - > # end of TextLine - - - - - - > # end of DashedPattern - - - - - > # end of PolyLine - - - > # end of DashedPattern - - - - - - - - - > # end of Font - > # end of TextLine - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - > # end of DashedPattern - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - > # end of DashedPattern - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of DashedPattern - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - > # end of DashedPattern - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of DashedPattern - - - - - - - > # end of Font - > # end of TextLine - - - - - - - - - - > # end of Font - - > # end of TextLine - > # end of Frame - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - - - > # end of Font - > # end of TextLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - - - - - > # end of Font - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - > # end of DashedPattern - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - - - - - - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - > # end of TextLine - > # end of Frame -> # end of AFrames - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - < \>< \>< \>-< \>: '> - - - - > # end of Pgf - > # end of TblTitlePgf1 - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblH - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - < \>< \>< \>-< \>: '> - - - - > # end of Pgf - > # end of TblTitlePgf1 - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblH - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - > # end of Conditional - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - > # end of Conditional - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - < \>< \>< \>-< \>: '> - - - - > # end of Pgf - > # end of TblTitlePgf1 - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblH - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - < \>< \>< \>-< \>: '> - - - - > # end of Pgf - > # end of TblTitlePgf1 - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblH - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnH - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - > # end of TblColumnBody - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - < \>< \>< \>-< \>: '> - - - - > # end of Pgf - > # end of TblTitlePgf1 - - > # end of TblFormat - - - - - - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblH - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - > # end of CellContent - > # end of Cell - > # end of Row - > # end of TblBody - > # end of Tbl -> # end of Tbls - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - > # end of PolyLine - - - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect - - - - - - - - > # end of PolyLine -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - > # end of PolyLine - - - - - - - - - - - - - - - > # end of TextRect - - - - - - - - > # end of PolyLine - - - - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - > # end of PolyLine - - - - - - - - - - - - - - - > # end of TextRect - - - - - - - - > # end of PolyLine - - - - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - > # end of PolyLine - - - - - - - - - - - - - - - > # end of TextRect - - - - - - - - > # end of PolyLine - - - - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - > # end of TextLine - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - > # end of TextLine - - - - - - - - - - - - - - - - - > # end of PolyLine - > # end of Frame -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - > # end of TextLine -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - > # end of TextLine -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - > # end of TextLine -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - > # end of TextLine -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - > # end of PolyLine - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - > # end of TextLine - - - - - - > # end of TextLine -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - > # end of Variable - - - - > # end of Variable - - - - > # end of Variable - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - - > # end of TabStop - > # end of Pgf - - - - - - - > # end of Font - - - > # end of Variable - - - > # end of Font - - - - - - - > # end of Font - - - > # end of Variable - - - > # end of Variable - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - > # end of TabStop - > # end of Pgf - - - - - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - > # end of TabStop - > # end of Pgf - - - - > # end of Variable - - - > # end of Variable - - - - > # end of Variable - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - > # end of TabStop - > # end of Pgf - - - - > # end of Variable - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - > # end of TabStop - > # end of Pgf - - - - > # end of Variable - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of Pgf - - '> - - '> - - '> - > - > # end of Para - - - - - - - - - - > # end of TabStop - - - - > # end of TabStop - > # end of Pgf - '> - - '> - - '> - > - > # end of Para - - - - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of Pgf - '> - - '> - - '> - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - - - - > # end of Pgf - - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - - - > - > # end of Para - - - > # end of Pgf - <$numerics\><$alphabetics\>'> - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - '> - > - > # end of Para - - - > # end of Pgf - - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of Pgf - - '> - - '> - - '> - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - > # end of Pgf - - '> - - '> - - '> - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - > - - - - - > # end of Font - - - - > # end of Font - - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - - > # end of Font - - - - - > # end of Font - - - - - > # end of Font - - - > - - - - - > # end of Font - - - - - > # end of Font - - > - - - - - > # end of Font - - - - - > # end of Font - /lib/X11'> - - - - > # end of Font - - - - - - - > # end of Font - '> - - - - > # end of Font - - - > - - - - > # end of Font - > - > # end of Para - - - - - - - - > # end of Font - - - - - > # end of Font - - - - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - > # end of Font - - - - - > # end of Font - - - - - - - > # end of Font - - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - > # end of Font - - - - - > # end of Font - - - > - - - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - > # end of Pgf - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - > # end of Marker - - - - - - > # end of Marker - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - < \>< \>-< \>< \>.\\t'> - - - - - - - > # end of TabStop - - - - > # end of Pgf - - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of XRef - - - - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - - > - - > - - > - > # end of Para - - - - - - - - - - > # end of Marker - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - < \>< \>-< \>< \>.\\t'> - - - - - - - > # end of TabStop - - - - > # end of Pgf - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - - - - > # end of XRef - - - - - - - > # end of Font - - > - > # end of Para - - - - > - - > - - - - > # end of Font - - - - - - - > # end of XRef - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of XRef - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of XRef - - - - - - - > # end of Font - - > - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - < \>< \>-< \>< \>.\\t'> - - - - - - - > # end of TabStop - - - - > # end of Pgf - - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - - - - > # end of XRef - - - - - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - > - - - - > # end of Font - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - < \>< \>-< \>< \>.\\t'> - - - - - - - > # end of TabStop - - - - > # end of Pgf - - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - - > # end of XRef - - - - - - - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - < \>< \>-< \>< \>.\\t'> - - - - - - - > # end of TabStop - - - - > # end of Pgf - - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - - - - > # end of XRef - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of XRef - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of XRef - - - - - - - > # end of Font - - - > - - > - > # end of Para - - - - > # end of Para - - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of Pgf - - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - < \>< \>-< \>< \>.\\t'> - - - - - - - > # end of TabStop - - - - > # end of Pgf - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - > - - > - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of XRef - - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - < \>< \>-< \>< \>.\\t'> - - - - - - - > # end of TabStop - - - - > # end of Pgf - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - > # end of Font - - > - - - - > # end of Font - - - > - - > - > # end of Para - - - - - - - - > # end of Marker - - - - - > # end of Marker - - - - - - > # end of Marker - > - > # end of Para - - - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - > - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - - - > # end of Marker - - - > # end of Font - - > - > # end of Para - - - - - > - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - - - > # end of Marker - - - > # end of Font - - > - > # end of Para - - - - > - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - - - - > # end of Font - - - > - - > - > # end of Para - - - - - - - > # end of Font - - - - - - > # end of Font - - > - - - > - - > - - - - - - - > # end of Font - - - - > # end of Font - - - > - - > - - > - > # end of Para - - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - ,'> - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - - > - - - > - - - > - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - > # end of Pgf - - > # end of Para - - - - > # end of Pgf - - > - > # end of Para - - - - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Marker - - - - - - > # end of Marker - - - - - > # end of Marker - > - > # end of Para - - - - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Font - - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - - - - > # end of Font - - - - - - > # end of Font - - - - - > # end of Font - - > - - - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of XRef - - - - - - - > # end of Font - - - > - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - - > - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - > - - - - > # end of Font - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - - - - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - - > - > # end of Para - - - - - - > # end of Font - - - - - - - > # end of XRef - - - - - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Marker - - - - - - > # end of Marker - > - > # end of Para - - - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - > - - - > # end of Font - - - - - - - > # end of XRef - - - - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - > # end of Font - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - - > - > # end of Para - - - - - - > # end of Font - - - - - - - > # end of XRef - - - - - - - > # end of Font - - > - > # end of Para - - - - - - - > # end of Font - - - - - - - > # end of XRef - - - - - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Marker - - - - - - > # end of Marker - > - > # end of Para - - - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - - - > # end of Marker - - - > # end of Font - - > - > # end of Para - - - - > - - > - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - - - > # end of Marker - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - - - - - > # end of Font - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - > - - > - > # end of Para - - - - > - - > - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - - - - - > # end of Marker - - - - - - > # end of Marker - > - > # end of Para - - - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - > # end of Font - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - > - > # end of Para - - - - > - > # end of Para - - - - > - > # end of Para - - - - > # end of Para - - - - - > - > # end of Para - - - - - - > # end of Font - - - - - - - > # end of XRef - - - - - - - - > - > # end of Para - - - - - - - - - > # end of Marker - - - - - - > # end of Marker - > - > # end of Para - - - - > - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - - > - - > - - > - - - - - > # end of Font - - - - > # end of Font - - > - - > - - > - > # end of Para - - - - > - > # end of Para - - - - > - - - - - > # end of Font - - - - > # end of Font - - > - - - - - > # end of Font - - - - > # end of Font - - > - - > - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - > - - > - - > - - - > - - > - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - > - - - > - - > - > # end of Para - - - - > - > # end of Para - - - - > - - > - - > - - - > - - > - > # end of Para - - - - > - > # end of Para - - - - > - - > - - - > - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - - > # end of Marker - - - - - - > # end of Marker - - - - - > # end of Marker - > - > # end of Para - - - - - > - > # end of Para - - - - > - - > - - > - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - > - - > - - > - - - > - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - - > - > # end of Para - - - - - > - - > - - - > - - > - > # end of Para - - - - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - > - - > - - > - - > - - > - - > - > # end of Para - - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > # end of Font - - - - > # end of Font - - - - > - - > - > # end of Para - - - - - - - - - - - - - - > # end of Pgf - - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - > # end of Pgf - - - > - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - > # end of Font - - - - > # end of Font - - > - - > - - > - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - < \>< \>< \>-< \>: '> - - - - > # end of Pgf - - - - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - > - - > - - > - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - > - - > - - > - - - - - - > # end of Font - - > - - - - > # end of Font - - > - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - > - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - - - > # end of Marker - - - - - - > # end of Marker - > - > # end of Para - - - - > - - > - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - < \>< \>< \>-< \>: '> - - - - > # end of Pgf - - - - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - - - - > # end of Marker - - > - > # end of Para - - - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - - - - > # end of Font - - > - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - - - - - > # end of Marker - - - - - > # end of Marker - - > - > # end of Para - - - - > - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - > - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - > - - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - - - > # end of Font - - > - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - - - - > # end of Font - - > - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - - - - > # end of Marker - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - - > - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - > - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - - - - > # end of Font - - > - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - - - - - > # end of Font - - > - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - - - - > # end of Font - - > - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - - > - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > - - > - - > - - - - - - > # end of Font - - > - - - - > # end of Font - - - > - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - - > - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Marker - - - - - - > # end of Marker - > - > # end of Para - - - - - > - - > - - > - - > - - > - - > - - - > - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - - - - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - > - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - > - - - - > # end of Font - - > - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - > # end of Font - - > - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - > - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - - - - > # end of Font - - > - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - > - - - - > # end of Font - - - - - - > # end of Font - - > - - - - > # end of Font - - > - > # end of Para - - - - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - > - - > - - > - - > - - > - - > - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - > # end of Para - - - - - > - - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - > - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - > - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - > - - - - > # end of Font - - > - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - > # end of Font - - > - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - > - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - > - - - - > # end of Font - - - - - - > # end of Font - - > - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Marker - - - - - - > # end of Marker - > - > # end of Para - - - - > - - > - - - - - - - > # end of Font - - - > - - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - < \>< \>< \>-< \>: '> - - - - > # end of Pgf - - - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - - > # end of Font - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - > - - - - > # end of Font - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - - > - > # end of Para - - - - > - - > - - > - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Marker - - - - - > # end of Marker - > - > # end of Para - - - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - - > - - > - - - - > - - > - - > - - > - - > - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - > - - > - - > - - - > - - > - - > - - - > - - > - - - - - - - > # end of Font - - - > - - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - > - > # end of Para - - - - > - - - > - - - - - - - > # end of Font - - - - > # end of Font - - > - - - > - - > - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - > - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - - > # end of Pgf - - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - - - - - - > # end of Font - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - > - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - > - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - > # end of Pgf - - - > - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - - > # end of Pgf - - > # end of Para - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > - - > - > # end of Para - - - - - - > # end of Pgf - - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - > # end of Pgf - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - > # end of Pgf - - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - > - - > - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - > - - - - > # end of Font - - > - - - - - > # end of Font - - - - - - - - > # end of Font - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - > - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > - - > - > # end of Para - - - - - - - - - - - - > # end of Pgf - - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - - > - - - - - > # end of Font - - - - > # end of Font - - > - - - - - > # end of Font - - - - > # end of Font - - > - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - > - - - - > # end of Font - - > - - > - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - > # end of Pgf - - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - > # end of Pgf - - - > - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - > # end of Pgf - - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - > # end of Pgf - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - > # end of Font - - - - > # end of Font - - > - - > - - > - - - - - > # end of Font - - - - > # end of Font - > - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - - > # end of Pgf - - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - > - - - > - - > - - > - > # end of Para - - - - - > # end of Pgf - - - > - - - - > - - - - > - - - - > - - - - > - - - - > - - - - > - - - - > - - - - > - - - - > - - - - > - - - - - - > - - - - > - - - - > - - - - > - - - - > - - - - > # end of Font - - - - > - - - - > - - - > # end of Font - - - > - > # end of Para - - - - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - - > - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - - - - > # end of Font - - - - > # end of Font - - - - - > # end of Font - - > - - - - > # end of Font - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - > - - > - - - > - - > - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - - > # end of Font - - - - > # end of Font - - - > - - > - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - - > # end of Font - - - - > # end of Font - - - > - - > - - > - - > - > # end of Para - - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - > - - - > - - > - - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - - > - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - > # end of Font - - - - > # end of Font - - > - - > - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - > - - > - - > - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - > # end of Font - - - - > # end of Font - - > - - > - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - > # end of Font - - - - > # end of Font - - - > - - - > - - > - - > - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - > # end of Font - - - - > # end of Font - - > - - > - - - - - - - > # end of Font - - - - > # end of Font - - - > - - > - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - > # end of Pgf - - - - - - - > # end of Font - - - - > # end of Font - - - > - - - > - - - > - - - > - - - > - - - > - - - > - - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - > - > # end of Para - - - - - - - - - > # end of Font - - - - > # end of Font - - > - - > - - > - - > - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - > - - > - - - - - - - > # end of Font - - - > - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - > # end of Font - - > - - > - - - - > # end of Font - > - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - > # end of Pgf - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - - > - - > - - > - > # end of Para - - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - > - - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - > # end of Pgf - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - > - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - > # end of Pgf - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - > - - - - > # end of Font - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - > # end of Font - - - - > # end of Font - - > - - > - - > - > # end of Para - - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - > # end of Pgf - - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - > # end of Pgf - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - > - - - - > # end of Font - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - - > # end of Marker - > - > # end of Para - - - - > - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - > # end of Pgf - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - > - - - - > # end of Font - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - > - - - > - - > - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - > - - > - > # end of Para - - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - > - > # end of Para - - - - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - > # end of Pgf - - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - > # end of TabStop - > # end of Pgf - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > # end of Font - - > - > # end of Para - - - - - - > # end of Pgf - - > - - > - > # end of Para - - - - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - > - > # end of Para - - - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - - - - - - - - > # end of Pgf - - > # end of Para -> # end of TextFlow - - # end of Notes - - - - - - > # end of Font - - > # end of Conditional - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - > - - - - > # end of Font - - > - > # end of Para - - - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Marker - > - > # end of Para - - - - - > # end of Font - - - - - > # end of Marker - - > - > # end of Para - - - - > - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - > - > # end of Para - - - - - - - - - - > # end of Font - - - - > # end of Font - - > - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Marker - > - > # end of Para - - - - - - - - > # end of Marker - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - > # end of Pgf - - > - > # end of Para - - - - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - /lib/X11'> - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - > - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - - > # end of Font - - - - > # end of Font - - - - - - > # end of Marker - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - - - > # end of Marker - - - - - - > # end of Font - - - - > # end of Font - - > - - - - - > # end of Font - /lib/X11'> - - - > # end of Font - - - - - - > # end of Marker - > - > # end of Para - - - - > - > # end of Para -> # end of TextFlow -# End of MIFFile diff --git a/doc/xorg-docs/specs/Xserver/XprtIX.doc b/doc/xorg-docs/specs/Xserver/XprtIX.doc deleted file mode 100644 index 02d855062365852de92d1f8e92a53131598a2e74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38912 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 H{6qX7OXdf- diff --git a/doc/xorg-docs/specs/Xserver/XprtTOC.doc b/doc/xorg-docs/specs/Xserver/XprtTOC.doc deleted file mode 100644 index 96bb82da7b68a960896bcd0aa54b77a74111d84e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24576 zcmeHv36vbgk#<&3Usc)4MiRD>XrKhcArOP+9)XZ0Aq4V|469=hV4l^|)M(nCnI3w2 z1cMil#ElIGbK3@U7$5Cr*SpWW-`=-)S$mO;vCU;{4k1nf;uauIgZ?j~vbwXoXL=+{ zZ}+|bky3SKMMXqLMn*(NW>wA1h3T(*x%ru1&uwj(e#)$I&SW9twli+>ob-9y-SI+% zx`hyT;oK!e-Cn}Nl_gaCllZ56Y_~02*dZZK?!g_u9FG$nHja9I7PA8mLR<-0P$r-P z>Z%g(2+o8j{_uy=(G9s~2V^8wv8=&Wa1ih9?-g&ARh$om2#)i%3lSU^$>;d@0$6Yc zKMVi5a3oO=Ia5)iMxYfdO!va5h3Y~!7{=#kv-$pP-V@`Nq*wHM!KD&)hu-o`o`17t zBGol~1=#c(5wRoO!`%nnhinl$@~CMI_f7dCp-vGgA;o^s?Q#*erUMcYO}KVM6h|7c zR)!I-Smg1^|0&av0T+UFOGg3+jad|j(g$6~a71wIr4PDCxN#hQ2}W@Iv1bgW^O?H`Eq&p{~EBUQrk6`rGPNb+N9$t6o!= z==yu=b#P_`cUH_YUOMOe%KUG`R<$gUT)Z6L`T@R^u)VFm#tlm{u z>UvadQ&;JFT)n5hqw9`(UtO*13H5=xCItV-Kr8j3x;6y=M|}_Vk-82h4nK=cP#>%7 zL*)M=wx{}=x*-JrNB#5a6Ln*V{Xe#s`c!>a^PH@c?=>iQwcsJbo0F(7tmGNx|VJf|h& z>W7-PA!(~SLTp*F=}AZZD8x5nO-ZSKtZ`bB3H1|QZ%d9-KMf%cpskLiQiTxQ7WE^O zN%b=gpPAf4{gV&3?n{mj-5n)>Xq)f4PUsnPJ7nwy${ccyx>HeO?E zdo%FPQX7F65u@^JZ0$hQP{Zn}vG~ns1m4+d(-?Sd&D8EU)YHHlKYF`O&CPAV`$zT6 zSp3>LfOn317I>>i=hxWI?VhWi8-rha2eo^idLDS2YVhl5rgqn;7l5~>7G7Hm@Ybr$ zW3=1B`dg=71m4><_|0H`=c|{1cUdjG88mJesF%lRcLuk6q1pnx=;-{KrZ-YQE>f@5 z=GQd6iR|EF^(yf8s>QEq2JkLXuK{mzExcyx$EE6Z;N4sk4-rXSrrsD!zUFq|eN(*& zyoOr*T4{X0rQQPGPio<{k$jh{tz)&@Mt*sPdK-ANYVspJe_Oo+yk#}<$WE_R?~aK_ z{kTeP8w;`>w(~S5tpY&BX6}iW0tBWvDi`B;CxOQ_AQ&~;C=IJEg50aQ|YU4Fg9KR)r1hzI_3+egRBr?LF$P|9BgL0HlM~0lYn_31 zL#Ko?p;NKqIVE&=;t*s-E@?j~iG31BCz{3QPh64M$D))=&8+WD59SBbtGxc9zFAmC z>}$a;#eOsE`?CG{p8j;7H_M$_-<2Mw`_oVz_R={Z3iWYfKU!Rg{R3Pe98p9?ZLlYs z%WL$6Ytf43r~r2qzTn@J9m>r*5_p;Zp}aSJIyIl}8|a$_?L)pP7OjSMtj+x`THx$J zU*gLW2UxJ<9pqb&CAJXBnf2X6y}jL7tFxMX`3|&Tze3_(0M85IE=wF_!Cu9Lne_wd zTsrTal|OAsCg1CwPC7r>qSf2yjC;p>>8?!ws>ai2-GcjvSd>AJn_0hdC>IP>4)CcK zY*skXRXT@VgGS>BE!hN_T{;WsbY`;sAjwfKz zwi-YeX6$6e%_D_qYDpY{`x6#>o?F5DK!T0Mzrok@bnr;<>OPRHov&DuTpB&g_V*6M zl1+ZoMiSWP*9d;L&u>m|uMmGPHxFVpf!9Qz*O!O-R(QEUL~-y)GLE1`=szgV<<3pc z6(XK*2q3)e0q<}ww>{ev;~8GJ+Cb^Gm33ML$lnfHmV2CI3qTC!F^2T#TFbMfn?vdjagUCE)jn z{4KXZ{*N*M{OF_dzn!hXLwm*Y3wf`c0GJ+wA;=W{t6a}`6mL*GlJ9Z3p$hh-{2jw| z8yWO1`jotn+tuU0xCgMO`Z;vM7ywpsp>VOr)# z2=NFxW4ZKIlFc zlbg6*JsuupirMmM#`Dnx{9nYRe8z;)t=KsEY!xgipEF_bei0ilpEqGlJ5j#Cux{N5 z@%xZGny`UqwI?i&O-8#`MPE5;(4A#E$5rnB$={G8+q-??2hFM3tT<+FVZYYy7qfJ9)GUF0B1zM(4o<3Zsr z+K=Hl%jLou z^+v;D4l$^XcKjyJ&-bY!mnzVzyayZ!jBEQusj)hu$;rh356dS@Cf)F4)|8FtZ;_` zkIIt)v*f!~W5UXf&4xu)jG+z-m19nxOb4Q4RZ-jDA{gwU%efr3L#2|Qfw4Kr&|s6m z{Tc)CGm&g^YZZQZdo=o`!tL2P`|I}CovV%Z&iJ5N%#KVpd|)oDe*^rW$M6C0v6gUq zCO*k~_W%7ChT|-kgRfkS^$ebBo{;J135{?L#xuKL;H>)$UdMp@dbD$XsSO2$QnAq=L;R(h`I>k6{~`4^tQMSP6dTx6=y74lI%6GK-l2FqyTkEttg>9_lxYe-i?K1RM| z#xt>({k5w2gE<}kuM5Vm+n68#^=+qW?0o!57@vx08R`h>;!|tZ|kVP)VWg0(6q)ZWO1hE`h=czO6#RPxNf(0QhAhC8Gbi{DU_eGEV z57{a27L!xz@l<1cZ`rx`g8qCi+cmV3o;}9n&5pRV*BW^AEKj{BkcA}3BDYcR4!GRczD1~M-3?|~vQmg=v^~|FqrJiCQeqWde z7IzD?U0!cxj|`F8C>!`yDaL@`2H6S!pP5pdm|t^ACU}oKC!fz{R$y0Ta1^e?@pcFP ze{bQ3LEHk*-?5CXDfKk-Y+;`B<}GvQz{>{@6>c|p-6uQk9k>A>QGLrwX?jG`~mt7U}s}&@}rrTt4hNZ$G3O_Jt|Hy5_&Rzg* zn@>A0yK<<{gS}QY4hGh^!p#Q#pP2rLl-dmXc1=H;`bmnxcw>u$_+{-=xXIx20Q1>1 zrCv<=b}=8$2+wGQRSIir;rj;egTS38+EVJJRCC}Pi-!mEUf-ZQrwdzanZdmFF%17; zrpxoM&~%$)wHCf-@OnsgV$E}4O1(_Hw4W^Uda;YuY8&^|0X zv;E|wTT;H=X+MYAY3oCv@N(Vhl^#0M?zq-J6mB%=ACa9a(nSACswL>hvH=|{G=~#m z#H%yjnM8k#b$a0jgZ|I5GoK~fdlmG7y_SE6uQx)be=l_^|r@OV^q<~(t9 zO1(xrbpMThyK`2jGrjb3h1)d*S6Bt5RI*%U4Hd34c>YCp4#q`$O1;iJbqpMEk3B2z zVK@-_%6Z^2P!oCy|F_l_t~L1mRd%k-lYPIz{CxXZHn7NBg@N{R#BBah|H^n{htm?b zE-zeT&^{(RyEEc|lzJ1i+CPhCP0?YcHvl^WX^*_my0LJzLHjsD<}#vvi)giO7Gpdx zz(pQRi!re7D167DeL{A+3rXg!Oj{m1P2w4jyx;oQ!c_+ClN74SCf{aSzrQ0mWxT1y zS!&%~xYD5Ah<5iDQ&Q?3ruFTTb|p=Tn_8WMbzkAz2HjJ#v#CM2DfKSXwQ?LS4_&zN=`}1P|lzNZ&YTYjzps_Bp2W5w2yMMsaFEwq9~Qo8&^{|W8{?$A512NvGtd?Z(c}!L5Q-EoGw7a^oh@;3a7um1bUGFc zfNr7Jl^N=rmq9coyB~}P-RnAZCZ3^&77J5soRPb)0!2CoxytxKp z1nWqwGyI&txMoRQE(G%KN_>0!cCiQi5@|q*x6g!NMgP|~v1gB*zt|6pb*>X-nN)IoN>=I1XML2Nt&$IWahTUC$Ajb(@c&Wd3;bV;hgBNM2mkj=xqQp9 zv)f4ucIpR} zGP$t-@f&$E{NIxP_?Yc5dTbsnaRcp$8ukcVg8u`zOs*ZV#{ql5xehYyi#2p5z2Dxk zSk?RXb2bC;GZB5o+Yy!ch zY=(V%Rrq7HN7VLt_Ib{g=wFX~jp#@4@8i(Y2DCY3v`3_oD*PR3Z;idixt{HS?U#5I z?S#0B*zss-1D-{RiuS73;KlcMYwho>wbwc~P|N0k$6EIS}5)P^~$%HW>P8{V;X;MMjHWzCE7~se6+EZ z@u#GcamM%O<&%c;LCQ%R74eqo&P8HwX+00Rx0!DLRMKX;#_2qvBW)=s#CrG3r8PU~ z-eEe-t&UIUZ%&k_SuI%STH@5w`W$rc2JK0o&YzS)SC-llWp`?R$Z&<9u3wf-X;wT3TpLer{<^4!ZZ5t~HfZpwsJW@cMvxrBcZx@haxRi#?bP4-L0}U1?nonh%-gh*WY9 zrU~+3Jmt@>#M)M;FxaVBjjILyUEW#omR1M;FK#QX%faU(=5uH&Ig$AUIq}GR;w^3T z9tf9mf47?KbF2LQ-T;@*6zk%6ORiMlc~r=MtKzZMj2P?0G*(RqVX!62>{+QiTuy=PhR1SSCI<>NCmzW9;Y8yEAU==O2q* z_J^_GenDxkT_Wb|Jjui-`k(9le4OQSjE9_;9ilA{+RvwbRKoey_P00(Par4ZV$BEl z^=RkfQX9(GsgEG+3+;<^RiBpT%Xq{8eO4mEyo<=zaiDz!TDi!+AOMDa`RUR!@DZAe zTkioJXQm2^JuCPg4~~!67lLz%uO~zo4ipog^23nC^Ed;J`>cx#w|~TZi_aje1<=BJ z=;KmD7fc%b*q7Ls1a<$c?k#(60{>@t(1#+j^(D|k7m)el02oH@<=bC+vHEXu6vA;cNviP)g75681uGul5-*s*gHLS<=#X>gg zm-;H+M*~%Z3%p(J12R?=E3(Udu#VS#@EQ7jz*F=FZ;U?d$ppbqSXXvt9Q^EUH;e;rJUyo4ByY3I*;`hO4==%fp z2_b8YJ}^ba50Ar(h!KEWlPE(OwaBnMO)NoNszbJkZ+Pp1Si{TKk;y17fi*svEHiG0 zpJ4MF*F`$DjA(q6;8#W@-a#ap@uOvCNye7BJeI;! zkMVkYwUGqu{qxSqSx#BJl2I)u#mk-3ZKa%Xl5=jhYq-dqDmx=%pu^y-8Ohl0)g^uI zjmL9kV%C=P9t?}9QZuE78s&xD}xbXciWVcH3p|;+MYh7915I^*_-sjKeMPc42M-ljd!yuGl_GovfCvG1FlJAXw2DCdJBj4Pm}sZ2 zoXd!%E~CWkNO`yha&*p69^Vx07N4EC+wC5cl>0y9vwo&&MRuRh?z-%3!x$qv*C_IH zd=q&IPb5 zz=dQ9`s()^*X~&T#$QKqtr21so&dThiuhc7zvkgJ9ubtfJHFyCk9kcNK+Q9|^A5&> zFEF8>gPL4?TjubjiSria~*@q`p`R}J0tUCCdT+9i8sfec#Tpp6crgAJFzqE=Ear3@a>^a=Q|WP=zjnYVkfQvr!}CDf1^m~ zky$jvSzbo=Q(2N{AE#2=rVWEGn2>Lf# zze6HUPlWJpOeuDPh%%FOSDB9!l*-QZcVFNm*6)USBgC@!V`cU|X^eT+$Z>_`a@#ci z-U#ysL-0klssoMY`hWKTF|<7f0D_vd?%nPRN5=QNT%Yc`|I zS=H;8QcNrtU=Mvsv0U7|TOQk1I$MaA;<|*DSRz7;-rj5LM))5HnVeSDVjNn6zPftX45I^(PzWKBh0XrZI zqdBL8cpOK9Y}qvG!&){q=Rp28=7&n6y;@`@ag__2KhJ?X*B;7D`M)X9%-qSd%z zpQE-z+!_D09m6lmMf(HL6LmZui3D<0|J_0O(nw=7@#cxA$>rQ8Wo;4UDMcCWd+p8k z@8G?}To-;rA{kuq*)6-j9`UXGzVA-~{RZ5nIf1lNENhB2e$vkLbl?ALbwZB;A=wY( zr+8nJnex$7*y4SkKCw1&RpKJrMOniHiM4ccrZQQ0Ne_LI&vPSAiFNuO#i^+Oax_7h z7O^*RKGmJ6A@cvI{|p|)b)548l(@jZ&%7hxz4Ge>K$*?Ii3{nZ+qOHs+^|am^zuy~ zV{>9#Vl(6k6~6@wZc-dI4}YX0iI;#&T1UUBZ;5s2aqw@Q3_DZlUxeZ*b}TR)aUA^T zU~qx?7<=YX$zy_%EL~FMkx_@~oahQ38{=i(0eo#}g~+*A)_e>sr7 zC~+Y9+Qj)K+3^>3YRNty98KAYyD2*^%Vgh(Yg6`cQT926T3*I27ejy+2HlB7KpMZ8?Vn9-iAf6f{-5#}xR9*EtQa!tgP}X>%t+w%_1KeJ`#X+Xf6kiUv?l*; z*4eK;yYaf=H^18X@@@4C&pYQA`;YtPvT5fY`tMgoS1!8myt}?S<)ru*FIl+mz*}#h Wbi&lv-)lSl=r2$D*DI!w-u@p=04-er diff --git a/doc/xorg-docs/specs/Xserver/Xprt_cov.mif b/doc/xorg-docs/specs/Xserver/Xprt_cov.mif deleted file mode 100644 index 25081af4a..000000000 --- a/doc/xorg-docs/specs/Xserver/Xprt_cov.mif +++ /dev/null @@ -1,3054 +0,0 @@ - # Generated by FrameMaker xm5.0P3f -# Options: -# Paragraph Text -# Paragraph Tags -# Paragraph Formats -# Font Information -# Markers -# Anchored Frames -# Tables -# Graphics and TextRect Layout -# Master Page Items -# Condition Catalog -# Table Catalogs -# Font Catalog -# Paragraph Catalog -# Document Template -# Document Dictionary -# Variables -# - - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color - - - - - - - - > # end of Color -> # end of ColorCatalog - - - - - - > # end of Condition -> # end of ConditionCatalog - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - .\\t'> - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - : '> - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - - - - - - - - - - - - - - - > # end of Pgf -> # end of PgfCatalog - - - - > # end of Font - - - - > # end of Font -> # end of FontCatalog - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling - - - - - - - - > # end of Ruling -> # end of RulingCatalog - - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat - - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - > # end of TblColumnH - - > # end of TblColumnBody - - - - - - > # end of Pgf - > # end of TblColumnF - > # end of TblColumn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of TblTitlePgf1 - - - - - - - > # end of TblFormat -> # end of TblCatalog - - - > # end of View - - - - - - - - > # end of View - - - - > # end of View - - - > # end of View - - - > # end of View - - - > # end of View -> # end of Views - - '> - > # end of VariableFormat - - <$daynum\>, <$year\>'> - > # end of VariableFormat - - /<$daynum\>/<$shortyear\>'> - > # end of VariableFormat - - <$daynum\>, <$year\> <$hour\>:<$minute00\> <$ampm\>'> - > # end of VariableFormat - - /<$daynum\>/<$shortyear\>'> - > # end of VariableFormat - - <$daynum\>, <$year\>'> - > # end of VariableFormat - - /<$daynum\>/<$shortyear\>'> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - '> - > # end of VariableFormat - - - > # end of VariableFormat - - of <$tblsheetcount\>)'> - > # end of VariableFormat -> # end of VariableFormats - - \xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - '> - > # end of XRefFormat - - \xd3 on page\x11 <$pagenum\>.'> - > # end of XRefFormat - - , \xd2 <$paratext\>,\xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - , \xd2 <$paratext\>,\xd3 on page\x11 <$pagenum\>'> - > # end of XRefFormat - - on page\x11 <$pagenum\>'> - > # end of XRefFormat -> # end of XRefFormats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -> # end of Document -anncovTOC.doc'> - - - - - - -> # end of BookComponent - # end of InitialAutoNums - # end of Dictionary - # end of AFrames - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of Font - - > # end of TextLine - - - - - - - > # end of TextLine - - - - - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - > # end of TextLine - - - - - - - - - - - - - - - - - - - - > # end of PolyLine - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - - - - - - - - - - - > # end of PolyLine - > # end of Frame - - - - - - - - - - - > # end of Frame - - - - - - - > # end of TextLine -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - - - - - - - - - - - - - - - - - > # end of DashedPattern - - - - - - - - - - - - - > # end of TextRect -> # end of Page - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - - - - - - - - - - - - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - - - - > # end of TabStop - - - - > # end of TabStop - - - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - # end of Notes - - - - > # end of Pgf - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para -> # end of TextFlow - - - # end of Notes - - - - > - > # end of Para - - - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - - - > - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - - > # end of Pgf - - - > - - > - > # end of Para - - - - > # end of Para - - - - > # end of Para - - - - - > # end of Pgf - - > - > # end of Para - - - - > # end of Pgf - - > # end of Para - - - - > # end of Pgf - - > # end of Para - - - - > # end of Pgf - - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - > - - - > - - - > - - - > - - - > - - - > - - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - - > - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - - > - - > - - > - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - > - - > - > # end of Para - - - - - - - - - - - - - - - - - - - - - - - - - - > # end of PgfFont - > # end of Pgf - - - - - > # end of Font - - - - > # end of Font - - > - > # end of Para -> # end of TextFlow -# End of MIFFile diff --git a/doc/xorg-docs/specs/Xserver/analysis.tex b/doc/xorg-docs/specs/Xserver/analysis.tex deleted file mode 100644 index a2eeabd2e..000000000 --- a/doc/xorg-docs/specs/Xserver/analysis.tex +++ /dev/null @@ -1,1528 +0,0 @@ -\documentstyle{article} -\setlength{\parindent}{0 pt} -\setlength{\parskip}{6pt} - -% $XFree86$ - -\begin{document} - -\title{Analysis of the X Protocol for Security Concerns\\Draft Version 2} -\author{David P. Wiggins\\X Consortium, Inc.} -\date{May 10, 1996} -\maketitle - -\begin{abstract} - -This paper attempts to list all instances of certain types of security -problems in the X Protocol. Issues with authorization are not -addressed. We assume that a malicious client has already succeeded in -connecting, and try to assess what harm it can then do. We propose -modifications to the semantics of the X Protocol to reduce these -risks. - -\end{abstract} -% suppress page number on title page -\thispagestyle{empty} - -\eject - -Copyright \copyright 1996 X Consortium, Inc. All Rights Reserved. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OF -OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of the X Consortium shall -not be used in advertising or otherwise to promote the sale, use or -other dealings in this Software without prior written authorization -from the X Consortium. - -\eject - -\section{Definition of Threats} - -We analyze the X protocol for the following threats. - -\begin{description} - -\item[Theft] occurs when a client gains access to information owned by -another client without explicit permission from that other client. -For this analysis, we take a broad view of ownership: any information -that exists in the server due to the actions of a client is considered -owned by that client. Furthermore, the client that has input focus -owns keyboard events, and the client that owns the window that the -pointer is in owns mouse events. This view may reveal certain -instances of ``theft'' that we don't care to stop, but we think it is -better to identify all potential candidates up front and cull the list -later than to do a partial analysis now and plan on reanalyzing for -remaining holes later. - -\item[Denial of service] occurs when a client causes another client or -the user to lose the ability to perform some operation. - -\item[Spoofing] occurs when a client attempts to mimic another client -with the hope that the user will interact with it as if it really were -the mimicked client. A wide variety of requests may be used in a -spoofing attack; we will only point out a few likely candidates. - -\item[Destruction] occurs when a client causes another client to lose -information in a way that the client or user is likely to notice. -(This does not count expected forms of destruction, e.g., exposures.) - -\item[Alteration] occurs when a client causes another client to lose -information in a way that the client or user is unlikely to -notice. e.g., changing one pixel in a drawable. - -\end{description} - -The line between alteration and destruction is subjective. Security -literature does often distinguish between them, though not always -explicitly. Alteration is often considered more insidious because its -effects may not be realized until long after it has occurred. In the -intervening time, each time the altered data is used, it can cause -more damage. - - - -\section{General security concerns and remedies} - -The following sections discuss security problems intrinsic to the X -Protocol. A statement of each problem is usually followed by -potential remedies. A few words here about possible remedies will -help frame the specific ones described below. - -If a client attempts a threatening operation, the server may take one -of the following actions, listed roughly in order of severity: - -1. Execute the request normally. This is the right choice when we -decide that a particlar threat is not serious enough to worry about. - -2. Execute the request in some modified form, e.g., substitute -different values for some of the request fields, or edit the reply. - -3. Arrange to ask the user what to do, given some subset of the other -choices in this list. This must be used sparingly because of the -performance impact. - -4. Treat the request as a no-op. If the client will probably not -notice, or if it seems likely that the intent was benign, this is a -good choice. - -5. Send a protocol error to the client. If the client will be -confused enough by the other options that it will probably crash or -become useless anyway, or if it seems likely that the intent was -malicious, this is a good choice. - -6. Kill the client. This might be the right action if there is no -doubt that the client is hostile. - -In most cases we present the one option that seems most appropriate to -counter the threat, taking into account the seriousness of the threat, -the implementation difficulty, and the impact on applications. Our -initial bias is to err on the side of stronger security, with the -accompanying tighter restrictions. As we uncover important operations -and applications that the new restrictions interfere with, we can apply -selective loosening to allow the desired functionality. - -In some cases we will suggest returning an Access error where the X -protocol does not explicitly allow one. These new Access errors arise -when a client can only perform a (non-empty) subset of the defined -operations on a resource. The disallowed operations cause Access -errors. The resiource at issue is usually a root window. - - - -\subsection{Access to Server Resources} - -The X protocol allows clients to manipulate resources (objects) -belonging to other clients or to the server. Any request that -specifies a resource ID is vulnerable to some of the above threats. -Such requests also provide a way for a client to guess resource IDs of -other clients. A client can make educated guesses for possible -resource IDs, and if the request succeeds, it knows it has determined -a valid resource ID. We call this ``resource ID guessing'' in the -list below. - -One likely defense against these problems is to have the server send -an appropriate protocol error to deny the existence of any resource -specified by a client that doesn't belong to that client. A variation -on this policy lets cooperating groups of clients access each other's -resources, but not those of other groups. The Broadway project will -initially use a less general form of this idea by having two groups, -trusted and untrusted. Trusted clients can do everything that X -clients can do today. They will be protected from untrusted clients -in ways described below. Untrusted clients will not be protected from -each other. Though this will be the initial design, we need to make -sure there is a growth path to multiple (more than two) groups. - -Most of the time, applications never access server resources that -aren't their own, so the impact of disallowing such accesses should be -minimal. There are a few notable exceptions, most of which will be -discussed under the relevant protocol requests. They are: ICCCM -selection transfer, Motif drag and drop, and server-global resources -like the root window and default colormap. Another major exception is -the window manager, which routinely manipulates windows of other -applications. The solution for window managers is to always run them -as trusted applications. - -The implementation difficulty of limiting access to resources should -not be large. All resource accesses eventually funnel down to one of -two functions in dix/resource.c: LookupIDByType() and -LookupIDByClass(). A few lines of checking at the top of these -functions will form the heart of this defense. There is a small -problem because these functions are not told which client is doing the -lookup, but that can be solved either by adding a client parameter -(probably as a new function to preserve compatibility), or by using -the server global requestingClient. - -ISSUE: are we really going to be able to get away with hiding trusted -resources, or will things like Motif drag and drop force us to expose -them? (Either way, the operations that untrusted clients can do to -trusted resources will have to be limited.) Is there something in Xt -or the ICCCM that breaks if you hide resources? - -\subsection{Denial of Service} - -\subsubsection{Memory Exhaustion} - -Any request that causes the server to consume resources (particularly -memory) can be used in a denial of service attack. A client can use -such requests repeatedly until the server runs out of memory. When -that happens, the server will either crash or be forced to send Alloc -errors. The most obvious candidates are resource creation requests, -e.g., CreatePixmap, but in reality a large percentage of requests -cause memory allocation, if only temporarily, depending on the server -implementation. For this reason, the list of requests subject to this -form of denial of service will be necessarily incomplete. - -To address this form of denial of service, the server could set -per-client quotas on memory consumption. When the limit is surpassed, -the server could return Alloc errors. The application impact is -minimal as long as the application stays within quota. The -implementation difficulty is another story. - -Conceptually, it seems easy: simply have a way to set the limit, and -on every memory (de)allocation operation, update the client's current -usage, and return an error if the client is over the limit. The first -problem is something we've already touched on: the allocator functions -aren't told which client the allocation belongs to. Unlike resource -lookups, allocations are done in too many places to consider a new -interface that passes the client, so using the global requestingClient -is practically mandatory. - -The problems run deeper. The logical thing for the allocator to do if -the client is over its limit is to return NULL, indicating allocation -failure. Unfortunately, there are many places in the server that will -react badly if this happens. Most of these places, but not all, are -``protected'' by setting the global variable Must\_have\_memory to True -around the delicate code. We could help the problem by skipping the -limit check if Must\_have\_memory is True. The best solution would be -to bullet-proof the server against allocation failures, but that is -beyond the scope of Broadway. Another consideration is that the -additional checking may have a measurable performance impact, since -the server does frequent allocations. - -A third problem is that there is no portable way to determine the size -of a chunk of allocated memory given just a pointer to the chunk, and -that's all you have inside Xrealloc() and Xfree(). The server could -compensate by recording the sizes itself somewhere, but that would be -wasteful of memory, since the malloc implementation also must be -recording block sizes. On top of that, the redundant bookkeeping -would hurt performance. One solution is to use a custom malloc that -has the needed support, but that too seems beyond the scope of -Broadway. - -Considering all of this, we think it is advisable to defer solving the -memory exhaustion problem to a future release. Keep this in mind when -you see quotas mentioned as a defense in the list below. - -\subsubsection{CPU Monopolization} - -Another general way that a client can cause denial of service is to -flood the server with requests. The server will spend a large -percentage of its time servicing those requests, possibly starving -other clients and certainly hurting performance. Every request can be -used for flooding, so we will not bother to list flooding on every -request. A variation on this attack is to flood the server with new -connection attempts. - -To reduce the effectiveness of flooding, the server could use a -different scheduling algorithm that throttles clients that are -monopolizing the server, or it could simply favor trusted clients over -untrusted ones. Applications cannot depend on a particular scheduling -algorithm anyway, so changing it should not affect them. The -Synchronization extension specifies a way to set client priorities, -and a simple priority scheduler already exists in the server to -support it, so this should be simple to add. - - - -\section{Security concerns with specific window attributes} - -\subsection{Background-pixmap} - -Clients can use windows with the background-pixmap attribute set to -None (hereafter ``background none windows'') to obtain images of other -windows. A background none window never paints its own background, so -whatever happened to be on the screen when the window was mapped can -be read from the background none window with GetImage. This may well -contain data from other windows. The CreateWindow and -ChangeWindowAttributes requests can set the background-pixmap -attribute set to None, and many window operations can cause data from -other windows to be left in a background none window, including -ReparentWindow, MapWindow, MapSubwindows, ConfigureWindow, and -CirculateWindow. - -Background none windows can also be used to cause apparent alteration. -A client can create a window with background none and draw to it. The -drawing will appear to the user to be in the windows below the -background none window. - -To remedy these problems, the server could substitute a well-defined -background when a client specifies None. Ideally the substituted -background would look different enough from other windows that the -user wouldn't be confused. A tile depicting some appropriate -international symbol might be reasonable. We believe that there are -few applications that actually rely on background none semantics, and -those that do will be easy for the user to identify because of the -distinctive tile. Implementation should not be a problem either. -Luckily, the window background cannot be retrieved through the X -protocol, so we won't have to maintain any illusions about its value. - -ISSUE: Some vendors have extensions to let you query the window -background. Do we need to accomodate that? - -ISSUE: Will this lead to unacceptable application breakage? Could the -server be smarter, only painting with the well-defined background when -the window actually contains bits from trusted windows? - -\subsection{ParentRelative and CopyFromParent} - -Several window attributes can take on special values that cause them -to reference (ParentRelative) or copy (CopyFromParent) the same -attribute from the window's parent. This fits our definition of theft. -The window attributes are class, background-pixmap, border-pixmap, and -colormap. All of these can be set with CreateWindow; all but class -can be set with ChangeWindowAttributes. - -These forms of theft aren't particularly serious, so sending an error -doesn't seem appropriate. Substitution of different attribute values -seems to be the only reasonable option, and even that is likely to -cause trouble for clients. Untrusted clients are already going to be -prevented from creating windows that are children of trusted clients -(see CreateWindow below). We recommend that nothing more be done to -counter this threat. - - -\subsection{Override-redirect} - -Windows with the override-redirect bit set to True are generally -ignored by the window manager. A client can map an override-redirect -window that covers most or all of the screen, causing denial of -service since other applications won't be visible. - -To prevent this, the server could prevent more than a certain -percentage (configurable) the of screen area from being covered by -override-redirect windows of untrusted clients. - -Override-redirect windows also make some spoofing attacks easier since -the client can more carefully control the presentation of the window -to mimic another client. Defenses against spoofing will be -given under MapWindow. - -\section{Security concerns with specific requests} - -To reduce the space needed to discuss 120 requests, most of the -following sections use a stylized format. A threat is given, followed -by an imperative statement. The implied subject is an untrusted -client, and the object is usually a trusted client. Following that, -another statement starting with ``Defense:'' recommends a -countermeasure for the preceding threat(s). - -Resources owned by the server, such as the root window and the default -colormap, are considered to be owned by a trusted client. - - -\subsection{CreateWindow} - -Alteration: create a window as a child of another client's window, -altering its list of children. - -Defense: send Window error. Specifying the root window as the parent will -have to be allowed, though. - -Theft: create an InputOnly window or a window with background none on -top of other clients' windows, select for keyboard/mouse input on that -window, and steal the input. The input can be resent using SendEvent -or an input synthesis extension so that the snooped application -continues to function, though this won't work convincingly with the -background none case because the drawing will be clipped. - -Defense: send an error if a top-level InputOnly window is created (or -reparented to the root). Countermeasures for background none and -SendEvent are discussed elsewhere. - -ISSUE: The Motif drag and drop protocol creates and maps such a window -(at $-$100,$-$100, size 10x10) to ``cache frequently needed data on -window properties to reduce roundtrip server requests.'' Proposed -solution: we could only send an error if the window is visible, which -would require checking in, MapWindow, ConfigureWindow, and -ReparentWindow. - -Theft: resource ID guessing (parent, background-pixmap, border-pixmap, -colormap, and cursor). - -Defense: send Window, Pixmap, Colormap, or Cursor error. - -Denial of service: create windows until the server runs out of memory. - -Defense: quotas. - -Also see section 3. - - -\subsection{ChangeWindowAttributes} - -Alteration: change the attributes of another client's window. - -Theft: select for events on another client's window. - -Defense for both of the above: send Window error. - -ISSUE: The Motif drop protocol states that ``the initiator should -select for DestroyNotify on the destination window such that it is -aware of a potential receiver crash.'' This will be a problem if the -initiator is an untrusted window and the destination is trusted. Can -the server, perhaps with the help of the security manager, recognize -that a drop is in progress and allow the DestroyNotify event selection -in this limited case? - -ISSUE: The Motif pre-register drag protocol probably requires the -initiator to select for Enter/LeaveNotify on all top-level windows. -Same problem as the previous issue. - -Theft: resource ID guessing (background-pixmap, border-pixmap, -colormap, and cursor). - -Defense: send Pixmap, Colormap, or Cursor error. - -Also see section 3. - - -\subsection{GetWindowAttributes} - -Theft: get the attributes of another client's window. - -Theft: resource ID guessing (window). - -Defense for both of the above: send Window error. - - -\subsection{DestroyWindow, DestroySubwindows} - -Destruction: destroy another client's window. - -Theft: resource ID guessing (window). - -Defense for both of the above: send Window error. - - -\subsection{ChangeSaveSet} - -Alteration: cause another client's windows to be reparented to the -root when this client disconnects (only if the other client's windows -are subwindows of this client's windows). - -Defense: process the request normally. The trusted client gives away -some of its protection by creating a subwindow of an untrusted window. - -Theft: resource ID guessing (window). - -Defense: send Window error. - - -\subsection{MapWindow} - -Spoofing: map a window that is designed to resemble a window of -another client. Additional requests will probably be needed to -complete the illusion. - -Defense: - -We consider spoofing to be a significant danger only if the user is -convinced to interact with the spoof window. The defense centers on -providing enough information to enable the user to know where -keyboard, mouse, and extension device input is going. To accomplish -this, the server will cooperate with the security manager, an external -process. The server will provide the following facilities to the -security manager: - -1. A way to create a single window that is unobscurable by any window -of any other client, trusted or untrusted. It needs to be -unobscurable so that it is spoof-proof. - -ISSUE: is a weaker form of unobscurability better? Should the window be -obscurable by trusted windows, for example? - -ISSUE: does unobscurable mean that it is a child of the root that is -always on top in the stacking order? - -2. A way to determine if a given window ID belongs to an untrusted -client. - -The security manager will need to select for the existing events -FocusIn, FocusOut, EnterNotify, LeaveNotify, DeviceFocusIn, and -DeviceFocusOut on all windows to track what window(s) the user's input -is going to. Using the above server facilities, it can reliably -display the trusted/untrusted status of all clients currently -receiving input. - -ISSUE: is it too much to ask the security manager to select for all -these events on every window? Do we need to provide new events that -you select for *on the device* that tell where the device is focused? - -None of this should have any application impact. - -The unobscurable window may be tricky to implement. There is already -some machinery in the server to make an unobscurable window for the -screen saver, which may help but may also get in the way now that we -have to deal with two unobscurable windows. - - - -\subsection{Window Operations} - -Specifically, ReparentWindow, MapWindow, MapSubwindows, UnmapWindow, -UnmapSubwindows, ConfigureWindow, and CirculateWindow. - -Alteration: manipulate another client's window. - -Theft: resource ID guessing (window, sibling). - -Defense for both of the above: send a Window error unless it is a root -window, in which case we should send an Access error. - - - -\subsection{GetGeometry} - -Theft: get the geometry of another client's drawable. - -Theft: resource ID guessing (drawable). - -Defense for both of the above: send Drawable error. However, root -windows will be allowed. - - - -\subsection{QueryTree} - -Theft: resource ID guessing (window). - -Defense: send Window error. - -Theft: discover window IDs that belong to other clients. - -Defense: For the child windows, censor the reply by removing window -IDs that belong to trusted clients. Allow the root window to be -returned. For the parent window, if it belongs to a trusted client, -return the closest ancestor window that belongs to an untrusted -client, or if such a window does not exist, return the root window for -the parent window. - -ISSUE: will some applications be confused if we filter out the window -manager frame window(s), or other windows between the queried window -and the root window? - -ISSUE: the Motif drag protocol (both preregister and dynamic) needs to -be able to locate other top-level windows for potential drop sites. -See also section 2.1. - - -\subsection{InternAtom} - -Theft: discover atom values of atoms interned by other clients. -This lets you determine if a specific set of atoms has been -interned, which may lead to other inferences. - -Defense: This is a minor form of theft. Blocking it will interfere -with many types of inter-client communication. We propose to do -nothing about this threat. - -Denial of service: intern atoms until the server runs out of memory. - -Defense: quotas. - - - -\subsection{GetAtomName} - -Theft: discover atom names of atoms interned by other clients. -This lets you determine if a specific set of atoms has been -interned, which may lead to other inferences. - -Defense: This is a minor form of theft. We propose to do nothing -about this threat. - - - -\subsection{ChangeProperty} - -Alteration: change a property on another client's window or one that -was stored by another client. - -Theft: resource ID guessing (window). - -Defense for both of the above: send Window error. - -ISSUE: Selection transfer requires the selection owner to change a -property on the requestor's window. Does the security manager get us -out of this? Does the server notice the property name and window -passed in ConvertSelection and temporarily allow that window property -to be written? - -ISSUE: should certain root window properties be writable? - -Denial of service: store additional property data until the server -runs out of memory. - -Defense: quotas. - - - -\subsection{DeleteProperty} - -Destruction: delete a property stored by another client. - -Theft: resource ID guessing (window). - -Defense for both of the above: send Window error. - - - -\subsection{GetProperty} - -Theft: get a property stored by another client. - -Theft: resource ID guessing (window). - -Defense for both of the above: send Window error. - -ISSUE: should certain root window properties be readable? Proposed -answer: yes, some configurable list. Do those properties need to be -polyinstantiated? - -ISSUE: Motif drag and drop needs to be able to read the following -properties: WM\_STATE to identify top-level windows, \_MOTIF\_DRAG\_WINDOW -on the root window, \_MOTIF\_DRAG\_TARGETS on the window given in the -\_MOTIF\_DRAG\_WINDOW property, and \_MOTIF\_DRAG\_RECEIVER\_INFO on windows -with drop sites. Additionally, some properties are needed that do not -have fixed names. - - -\subsection{RotateProperties} - -Alteration: rotate properties stored by another client. - -Theft: resource ID guessing (window). - -Defense for both of the above: send Window error. - - - -\subsection{ListProperties} - -Theft: list properties stored by another client. - -Theft: resource ID guessing (window). - -Defense for both of the above: send Window error. - -ISSUE: should certain root window properties be listable? - - - -\subsection{SetSelectionOwner} - -Theft: Steal ownership of a selection. - -Denial of service: do this repeatedly so that no other client can own -the selection. - -Defense for both of the above: have a configurable list of selections -that untrusted clients can own. For other selections, treat this -request as a no-op. - -ISSUE: how does the security manager get involved here? Is it the one -that has the configurable list of selections instead of the server? - -Theft: resource ID guessing (window). - -Defense: send Window error. - - - -\subsection{GetSelectionOwner} - -Theft: discover the ID of another client's window via the owner field -of the reply. - -Defense: if the selection is on the configurable list mentioned above, -return the root window ID, else return None. - -ISSUE: how does the security manager get involved here? - - - -\subsection{ConvertSelection} - -Theft: this initiates a selection transfer (see the ICCCM) which sends -the selection contents from the selection owner, which may be another -client, to the requesting client. - -Defense: since in many cases ConvertSelection is done in direct -response to user interaction, it is probably best not to force it to -fail, either silently or with an error. The server should rely on the -security manager to assist in handling the selection transfer. - -Theft: resource ID guessing (requestor). - -Defense: send Window error. - - - -\subsection{SendEvent} - -A client can use SendEvent to cause events of any type to be sent to -windows of other clients. Similarly, a client could SendEvent to one -of its own windows with propogate set to True and arrange for the -event to be propogated up to a window it does not own. Clients can -detect events generated by SendEvent, but we cannot assume that they -will. - -Defense: ignore this request unless the event being sent is a -ClientMessage event, which should be sent normally so that selection -transfer, Motif drag and drop, and certain input methods have a chance -at working. - -ISSUE: does allowing all ClientMessages open up too big a hole? - -Theft: resource ID guessing (window). - -Defense: send Window error. - - - -\subsection{Keyboard and Pointer Grabs} - -Specifically, GrabKeyboard, GrabPointer, GrabKey, and GrabButton. - -Denial of service/Theft: take over the keyboard and pointer. This -could be viewed as denial of service since it prevents other clients -from getting keyboard or mouse input, or it could be viewed as theft -since the user input may not have been intended for the grabbing -client. - -Defense: provide a way to break grabs via some keystroke combination, -and have a status area that shows which client is getting input. -(See MapWindow.) - -Theft: resource ID guessing (grab-window, confine-to, cursor). - -Defense: send Window or Cursor error. - - - -\subsection{ChangeActivePointerGrab} - -Theft: resource ID guessing (cursor). - -Defense: send Cursor error. - - - -\subsection{GrabServer} - -Denial of service: a client can grab the server and not let go, -locking out all other clients. - -Defense: provide a way to break grabs via some keystroke combination. - - - -\subsection{QueryPointer} - -Theft: A client can steal pointer motion and position, button input, -modifier key state, and possibly a window of another client with this -request. - -Defense: if the querying client doesn't have the pointer grabbed, and -the pointer is not in one of its windows, the information can be -zeroed. - -Theft: resource ID guessing (window). - -Defense: send Window error. - - - -\subsection{GetMotionEvents} - -Theft: steal pointer motion input that went to other clients. - -Defense: ideally, the server would return only pointer input that was -not delivered to any trusted client. The implementation effort to do -that probably outweighs the marginal benefits. Instead, we will -always return an empty list of motion events to untrusted clients. - -Theft: resource ID guessing (window). - -Defense: send Window error. - - - -\subsection{TranslateCoordinates} - -Theft: discover information about other clients' windows: position, -screen, and possibly the ID of one of their subwindows. - -Defense: send an error if src-window or dst-window do not belong -to the requesting client. - -Theft: resource ID guessing (src-window, dst-window). - -Defense: send Window error. - - - -\subsection{WarpPointer} - -A client can cause pointer motion to occur in another client's window. - -Denial of service: repeated pointer warping prevents the user from -using the mouse normally. - -Defense for both of the above: if the querying client doesn't have the -pointer grabbed, and the pointer is not in one of its windows, treat -the request as a no-op. - -Theft: resource ID guessing (src-window, dst-window). - -Defense: send Window error. - - - -\subsection{SetInputFocus} - -Theft: a client can use this request to make one of its own windows -have the input focus (keyboard focus). The user may be unaware that -keystrokes are now going to a different window. - -Denial of service: repeatedly setting input focus prevents normal use -of the keyboard. - -Defense for both of the above: only allow untrusted clients to -SetInputFocus if input focus is currently held by another untrusted -client. - -ISSUE: this will break clients using the Globally Active Input model -described in section 4.1.7 of the ICCCM. - -Theft: resource ID guessing (focus). - -Defense: send Window error. - - - -\subsection{GetInputFocus} - -Theft: the reply may contain the ID of another client's window. - -Defense: return a focus window of None if a trusted client currently -has the input focus. - - - -\subsection{QueryKeymap} - -Theft: poll the keyboard with this to see which keys are being pressed. - -Defense: zero the returned bit vector if a trusted client currently -has the input focus. - - - -\subsection{Font Requests} - -Specifically, OpenFont, QueryFont, ListFonts, ListFontsWithInfo, and -QueryTextExtents. - -Theft: discover font name, glyph, and metric information about fonts -that were provided by another client (by setting the font path). -Whether it is theft to retrieve information about fonts from the -server's initial font path depends on whether or not you believe those -fonts, by their existence in the initial font path, are intended to be -globally accessible by all clients. - -Defense: - -Maintain two separate font paths, one for trusted clients and one for -untrusted clients. They are both initialized to the default font path -at server reset. Subsequently, changes to one do not affect the -other. Since untrusted clients will not see font path elements added -by trusted clients, they will not be able to access any fonts provided -by those font path elements. - -Theft: resource ID guessing (font) (QueryFont and QueryTextExtents only). - -Defense: send Font error. - -Denial of service: open fonts until the server runs out of memory -(OpenFont only). - -Defense: quotas. - - -\subsection{CloseFont} - -Destruction: close another client's font. - -Defense: send Font error. - - - -\subsection{SetFontPath} - -Denial of service: change the font path so that other clients cannot -find their fonts. - -Alteration: change the font path so that other clients get different -fonts than they expected. - -Defense for both of the above: separate font paths for trusted and -untrusted clients, as described in the Font Requests section. - -ISSUE: the printing project considered per-client font paths and -concluded that it was very difficult to do. We should look at this -aspect of the print server design to see if we can reuse the same -scheme. We should also try to reconstruct what was so difficult about -this; it doesn't seem that hard on the surface. - - - -\subsection{GetFontPath} - -Theft: retrieve font path elements that were set by other clients. - -Use knowledge from font path elements to mount other attacks, -e.g., attack a font server found in the font path. - -Defense for both of the above: separate font paths for trusted and -untrusted clients, as described in the Font Requests section. - - - -\subsection{CreatePixmap} - -Theft: resource ID guessing (drawable). - -Defense: send Drawable error. - -Denial of service: create pixmaps until the server runs out of memory. - -Defense: quotas. - - - -\subsection{FreePixmap} - -Destruction: destroy another client's pixmap. - -Defense: send Pixmap error. - - -\subsection{CreateGC} - -Theft: resource ID guessing (drawable, tile, stipple, font, clip-mask). - -Defense: send Drawable, Pixmap, or Font error. - -Denial of service: create GCs until the server runs out of memory. - -Defense: quotas. - - - -\subsection{CopyGC} - -Theft: copy GC values of another client's GC. - -Alteration: copy GC values to another client's GC. - -Defense for both of the above: send GC error. - - - -\subsection{ChangeGC, SetDashes, SetClipRectangles} - -Alteration: change values of another client's GC. - -Theft: resource ID guessing (gc, tile, stipple, font, clip-mask) -(last four for ChangeGC only). - -Defense for both of the above: send GC error. - - - -\subsection{FreeGC} - -Destruction: destroy another client's GC. - -Defense: send GC error. - - - -\subsection{Drawing Requests} - -Specifically, ClearArea, CopyArea, CopyPlane, PolyPoint, -PolyLine, PolySegment, PolyRectangle, PolyArc, FillPoly, -PolyFillRectangle, PolyFillArc, PutImage, PolyText8, PolyText16, -ImageText8, and ImageText16. - -Alteration: draw to another client's drawable. - -Theft: resource ID guessing: - ClearArea - window; - CopyArea, CopyPlane - src-drawable, dst-drawable, gc; - all others - drawable, gc. - -Defense for both of the above: send appropriate error. - -ISSUE: The Motif preregister drag protocol requires clients to draw -into windows of other clients for drag-over/under effects. - -Spoofing: draw to a window to make it resemble a window of -another client. - -Defense: see MapWindow. - - - -\subsection{GetImage} - -Theft: get the image of another client's drawable. - -Theft: resource ID guessing (drawable). - -Defense: send Drawable error. - -Theft: get the image of your own window, which may contain pieces of -other overlapping windows. - -Defense: censor returned images by blotting out areas that contain -data from trusted windows. - - - -\subsection{CreateColormap} - -Theft: resource ID guessing (window). - -Defense: send Colormap error. - -Denial of service: create colormaps with this request until the server -runs out of memory. - -Defense: quotas. - - - -\subsection{FreeColormap} - -Destruction: destroy another client's colormap. - -Defense: send Colormap error. - - - -\subsection{CopyColormapAndFree} - -Theft: resource ID guessing (src-map). - -Defense: send Colormap error. However, default colormaps will be -allowed. - -ISSUE: must untrusted applications be allowed to use standard colormaps? -(Same issue for ListInstalledColormaps, Color Allocation Requests, -FreeColors, StoreColors, StoreNamedColor, QueryColors, and LookupColor.) - -Denial of service: create colormaps with this request until the server -runs out of memory. - -Defense: quotas. - - - -\subsection{InstallColormap, UninstallColormap} - -Theft: resource ID guessing. - -Defense: send Colormap error. - -Denial of service: (un)install any colormap, potentially preventing -windows from displaying correct colors. - -Defense: treat this request as a no-op. Section 4.1.8 of the ICCCM -states that (un)installing colormaps is the responsibility of the window -manager alone. - -ISSUE: the ICCCM also allows clients to do colormap installs if the -client has the pointer grabbed. Do we need to allow that too? - - - -\subsection{ListInstalledColormaps} - -Theft: resource ID guessing (window). - -Defense: send Colormap error. - -Theft: discover the resource ID of another client's colormap -from the reply. - -Defense: remove the returned colormap IDs; only let through default -colormaps and colormaps of untrusted clients. - - - -\subsection{Color Allocation Requests} - -Specifically, AllocColor, AllocNamedColor, AllocColorCells, and -AllocColorPlanes. - -Alteration/Denial of service: allocate colors in another client's -colormap. It is denial of service if the owning client's color -allocations fail because there are no cells available. Otherwise it -is just alteration. - -Theft: resource ID guessing (cmap). - -Defense for both of the above: send Colormap error. However, default -colormaps will be allowed. - - - -\subsection{FreeColors} - -Theft: resource ID guessing (cmap). - -Defense: send Colormap error. However, default colormaps will be -allowed. - - - -\subsection{StoreColors, StoreNamedColor} - -Alteration: change the colors in another client's colormap. - -Theft: resource ID guessing (cmap). - -Defense for both of the above: send Colormap error. However, default -colormaps will be allowed. - - - -\subsection{QueryColors, LookupColor} - -Theft: retrieve information about the colors in another client's -colormap. - -Theft: resource ID guessing (cmap). - -Defense for both of the above: send Colormap error. However, default -colormaps will be allowed. - - - -\subsection{CreateCursor, CreateGlyphCursor} - -Theft: resource ID guessing (source, mask or source-font, mask-font). - -Defense: send Pixmap or Font error. However, the default font will be -allowed. - -Denial of service: create cursors until the server runs out of memory. - -Defense: quotas. - - - -\subsection{FreeCursor} - -Destruction: free another client's cursor. - -Defense: send Cursor error. - - - -\subsection{RecolorCursor} - -Alteration: recolor another client's cursor. - -Theft: resource ID guessing (cursor). - -Defense for both of the above: send Cursor error. - - - -\subsection{QueryBestSize} - -Theft: resource ID guessing (drawable). - -Defense: send Drawable error. - - - -\subsection{ListExtensions, QueryExtension} - -Determine the extensions supported by the server, and use the list to -choose extension-specific attacks to attempt. - -Defense: extensions will have a way to tell the server whether it is -safe for untrusted clients to use them. These requests will only -return information about extensions that claim to be safe. - - - -\subsection{Keyboard configuration requests} - -Specifically, ChangeKeyboardControl, ChangeKeyboardMapping, -and SetModifierMapping. - -Alteration: change the keyboard parameters that were established by -another client. - -Denial of service: with ChangeKeyboardControl, disable auto-repeat, -key click, or the bell. With ChangeKeyboardMapping or -SetModifierMapping, change the key mappings so that the keyboard is -difficult or impossible to use. - -Defense for both of the above: treat these requests as a no-op. - - - -\subsection{Keyboard query requests} - -Specifically, GetKeyboardControl, GetKeyboardMapping, and -GetModifierMapping. - -Theft: get keyboard information that was established by another -client. - -Defense: This is a minor form of theft. We propose to do nothing -about this threat. - - - -\subsection{ChangePointerControl, SetPointerMapping} - -Alteration: change the pointer parameters that were established by -another client. - -Denial of service: set the pointer parameters so that the pointer is -difficult or impossible to use. - -Defense for both of the above: treat these requests as a no-op. - - - -\subsection{GetPointerControl, GetPointerMapping} - -Theft: get pointer parameters that were established by another client. - -Defense: This is a minor form of theft. We propose to do nothing -about this threat. - - - -\subsection{SetScreenSaver} - -Alteration: change the screen saver parameters that were established -by another client. - -Denial of service: set the screen saver parameters so that the screen -saver is always on or always off. - -Defense for both of the above: treat these requests as a no-op. - - - -\subsection{GetScreenSaver} - -Theft: get screen saver parameters that were established by another -client. - -Defense: This is a minor form of theft. We propose to do nothing -about this threat. - - - -\subsection{ForceScreenSaver} - -Denial of service: repeatedly activate the screen saver so that the -user cannot see the screen as it would look when the screen saver -is off. - -Denial of service: repeatedly reset the screen saver, preventing it -from activating. - -Defense for both of the above: treat these requests as a no-op. - - - -\subsection{ChangeHost} - -Most servers already have some restrictions on which clients can use -this request, so whether the following list applies is implementation -dependent. - -Denial of service: remove a host from the list, preventing clients -from connecting from that host. - -Add a host to the list. Clients from that host may then launch -other attacks of any type. - -Defense for both of the above: return Access error. - - -\subsection{ListHosts} - -Theft: steal host identities and possibly even user identities that -are allowed to connect. - -Launch attacks of any type against the stolen host/user identities. - -Defense for both of the above: return only untrusted hosts. - - - -\subsection{SetAccessControl} - -Most servers already have some restrictions on which clients can use -this request, so whether the following list applies is implementation -dependent. - -Alteration: change the access control value established by some other -client. - -Disable access control, allowing clients to connect who would normally -not be able to connect. Those clients may then launch other attacks -of any type. - -Defense for both of the above: return Access error. - - - -\subsection{SetCloseDownMode} - -Denial of service: set the close-down mode to RetainPermanent or -RetainTemporary, then disconnect. The server cannot reuse the -resource-id-base of the disconnected client, or the memory used by the -retained resources, unless another client issues an appropriate -KillClient to cancel the retainment. The server has a limited number -of resource-id-bases, and when they are exhausted, it will be unable -to accept new client connections. - -Defense: treat this request as a no-op. - - -\subsection{KillClient} - -Destruction/Denial of service: kill another currently connected -client. - -Destruction: kill a client that has terminated with close-down mode -of RetainTemporary or RetainPermanent, destroying all its retained -resources. - -Destruction: specify AllTemporary as the resource, destroying all -resources of clients that have terminated with close-down mode -RetainTemporary. - -Defense for all of the above: return Value error. - - - -\subsection{Clean Requests} - -Other than denial of service caused by flooding, these requests have -no known security concerns: AllowEvents, UngrabPointer, UngrabButton, -UngrabKeyboard, UngrabKey, UngrabServer, NoOperation, and Bell. - - - -\section{Events} - -The only threat posed by events is theft. Selecting for events on -another client's resources is always theft. We restrict further -analysis by assuming that the client only selects for events on its -own resources, then asking whether the events provide information -about other clients. - - - -\subsection{KeymapNotify} - -Theft: the state of the keyboard can be seen when the client does not -have the input focus. This is possible because a KeymapNotify is -sent to a window after every EnterNotify even if the window does not -have input focus. - -Defense: zero the returned bit vector if a trusted client currently -has the input focus. - - - -\subsection{Expose} - -Theft: discover where other clients' windows overlap your own. For -instance, map a full-screen window, lower it, then raise it. The -resulting exposes tell you where other windows are. - -Defense: about the only thing you could do here is force backing store -to be used on untrusted windows, but that would probably use too much -server memory. We propose to do nothing about this threat. - - - -\subsection{GraphicsExposure} - -Theft: discover where other clients' windows overlap your own. -For instance, use CopyArea to copy the entire window's area exactly -on top of itself. The resulting GraphicsExposures tell you where -the window was obscured. - -Defense: see Expose above. We propose to do nothing about this -threat. - - -\subsection{VisibilityNotify} - -Theft: this event provides crude positional information about other -clients, though the receiver cannot tell which other clients. - -Defense: The information content of this event is very low. We -propose to do nothing about this threat. - - - -\subsection{ReparentNotify} - -Theft: the parent window may belong to some other client (probably -the window manager). - -Defense: If the parent window belongs to a trusted client, return the -closest ancestor window that belongs to an untrusted client, or if -such a window does not exist, return the root window for the parent -window. - -ISSUE: what is the application impact? - - -\subsection{ConfigureNotify} - -Theft: the above-sibling window may belong to some other client. - -Defense: return None for the above-sibling window if it belongs to a -trusted client. - -ISSUE: what is the application impact? - - -\subsection{ConfigureRequest} - -Theft: the sibling window may belong to some other client. - -Defense: return None for the sibling window if it belongs to a trusted -client. - -ISSUE: what is the application impact? - - -\subsection{SelectionClear} - -Theft: the owner window may belong to some other client. - -Defense: return None for the owner window if it belongs to a trusted -client. - - - -\subsection{SelectionRequest} - -Theft: the requestor window may belong to some other client. - -Defense: Blocking this event or censoring the window would prevent -selection transfers from untrusted clients to trusted clients from -working. We propose to do nothing in the server about this threat. -The security manager may reduce the exposure of trusted window IDs -by becoming the owner of all selections. - - - -\subsection{MappingNotify} - -Theft: discover keyboard, pointer, or modifier mapping information -set by another client. - -Defense: Any tampering with this event will cause clients to have an -inconsistent view of the keyboard or pointer button configuration, -which is likely to confuse the user. We propose to do nothing about -this threat. - - -\section{Errors} - -There appear to be no threats related to procotol errors. - - - -\section{Future Work} - -The next steps are resolve the items marked ISSUE and to decide if the -defenses proposed are reasonable. Discussion on the security@x.org -mailing list, prototyping, and/or starting the implementation should -help answer these questions. - - - -\section{References} - -Bellcore, ``Framework Generic Requirements for X Window System Security,'' -Technical Advisory FA-STS-001324, Issue 1, August 1992. - -Dardailler, Daniel, ``Motif Drag And Drop Protocol,'' unpublished -design notes. - -Kahn, Brian L., ``Safe Use of X WINDOW SYSTEM protocol Across a -Firewall'', unpublished draft, The MITRE Corporation, 1995. - -Rosenthal, David S. H., ``LINX - a Less INsecure X server,'' Sun Microsystems, -29th April 1989. - -Rosenthal, David and Marks, Stuart W., ``Inter-Client Communication -Conventions Manual Version 2.0,'' -{\tt ftp://ftp.x.org/pub/R6.1/xc/doc/hardcopy/ICCCM/icccm.PS.Z} - -Scheifler, Robert W., ``X Window System Protocol,'' -{\tt ftp://ftp.x.org/pub/R6.1/xc/doc/hardcopy/XProtocol/proto.PS.Z} - -Treese, G. Winfield and Wolman, Alec, ``X Through the Firewall, and -Other Application Relays,'' Digital Equipment Corporation Cambridge -Research Lab, Technical Report Series, CRL 93/10, May 3, 1993. - -\end{document} diff --git a/doc/xorg-docs/specs/Xserver/analysis.xml b/doc/xorg-docs/specs/Xserver/analysis.xml new file mode 100644 index 000000000..54a63b8ad --- /dev/null +++ b/doc/xorg-docs/specs/Xserver/analysis.xml @@ -0,0 +1,2217 @@ + + + + + + + + + + Analysis of the X Protocol for Security Concerns + Draft Version 2 + May 10, 1996 + + + DavidWiggins + + + X Consortium Standard + 1996X Consortium + X Consortium + + + MattDew + conversion from tex to docbook + + + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the X Consortium shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from the X Consortium. + +X Window System is a trademark of The Open Group. + + + +This paper attempts to list all instances of certain types of security +problems in the X Protocol. Issues with authorization are not addressed. +We assume that a malicious client has already succeeded in connecting, +and try to assess what harm it can then do. We propose modifications to +the semantics of the X Protocol to reduce these risks. + + + + + +Definition of Threats + + +We analyze the X protocol for the following threats. + + + + + Theft + + +occurs when a client gains access to information owned by another client +without explicit permission from that other client. For this analysis, +we take a broad view of ownership: any information that exists in the +server due to the actions of a client is considered owned by that client. +Furthermore, the client that has input focus owns keyboard events, and the +client that owns the window that the pointer is in owns mouse events. This +view may reveal certain instances of "theft" that we don't care to stop, +but we think it is better to identify all potential candidates up front and +cull the list later than to do a partial analysis now and plan on reanalyzing +for remaining holes later. + + + + + Denial of service + + +occurs when a client causes another client or the user to lose the ability +to perform some operation. + + + + + Spoofing + + +occurs when a client attempts to mimic another client with the hope that +the user will interact with it as if it really were the mimicked client. A +wide variety of requests may be used in a spoofing attack; we will only +point out a few likely candidates. + + + + + Destruction + + +occurs when a client causes another client to lose information in a way +that the client or user is likely to notice. (This does not count expected +forms of destruction, e.g., exposures.) + + + + + Alteration + + +occurs when a client causes another client to lose information in a way +that the client or user is unlikely to notice. e.g., changing one pixel in a +drawable. + + + + + + +The line between alteration and destruction is subjective. Security +literature does often distinguish between them, though not always +explicitly. Alteration is often considered more insidious because +its effects may not be realized until long after it has occurred. In +the intervening time, each time the altered data is used, it can cause +more damage. + + + + +General security concerns and remedies + + +The following sections discuss security problems intrinsic to the X +Protocol. A statement of each problem is usually followed by potential +remedies. A few words here about possible remedies will help frame the +specific ones described below. + + + +If a client attempts a threatening operation, the server may take one of +the following actions, listed roughly in order of severity: + + + + + +Execute the request normally. This is the right choice when we decide that a +particlar threat is not serious enough to worry about. + + + + +Execute the request in some modified form, e.g., substitute different +values for some of the request fields, or edit the reply. + + + + +Arrange to ask the user what to do, given some subset of the other choices +in this list. This must be used sparingly because of the performance impact. + + + + +Treat the request as a no-op. If the client will probably not notice, or +if it seems likely that the intent was benign, this is a good choice. + + + + +Send a protocol error to the client. If the client will be confused enough +by the other options that it will probably crash or become useless anyway, +or if it seems likely that the intent was malicious, this is a good choice. + + +Kill the client. This might be the right action if there is no doubt +that the client is hostile. + + + + + +In most cases we present the one option that seems most appropriate to +counter the threat, taking into account the seriousness of the threat, the +implementation difficulty, and the impact on applications. Our initial bias +is to err on the side of stronger security, with the accompanying tighter +restrictions. As we uncover important operations and applications that the new +restrictions interfere with, we can apply selective loosening to allow +the desired functionality. + + + +In some cases we will suggest returning an Access error where the X protocol +does not explicitly allow one. These new Access errors arise when a client +can only perform a (non-empty) subset of the defined operations on a +resource. The disallowed operations cause Access errors. The resiource at +issue is usually a root window. + + + +Access to Server Resources + +The X protocol allows clients to manipulate resources (objects) belonging to +other clients or to the server. Any request that specifies a resource ID is +vulnerable to some of the above threats. Such requests also provide a way for a +client to guess resource IDs of other clients. A client can make educated +guesses for possible resource IDs, and if the request succeeds, it knows it has +determined a valid resource ID. We call this "resource ID guessing" in the list +below. + + + +One likely defense against these problems is to have the server send an +appropriate protocol error to deny the existence of any resource specified +by a client that doesn't belong to that client. A variation on this policy +lets cooperating groups of clients access each other's resources, but not +those of other groups. The Broadway project will initially use a less general +form of this idea by having two groups, trusted and untrusted. Trusted +clients can do everything that X clients can do today. They will be protected +from untrusted clients in ways described below. Untrusted clients will +not be protected from each other. Though this will be the initial design, +we need to make sure there is a growth path to multiple (more than two) +groups. + + + +Most of the time, applications never access server resources that aren't +their own, so the impact of disallowing such accesses should be minimal. +There are a few notable exceptions, most of which will be discussed under +the relevant protocol requests. They are: ICCCM selection transfer, Motif +drag and drop, and server-global resources like the root window and default +colormap. Another major exception is the window manager, which routinely +manipulates windows of other applications. The solution for window managers +is to always run them as trusted applications. + + + +The implementation difficulty of limiting access to resources should not +be large. All resource accesses eventually funnel down to one of two +functions in <dix/resource.c>: +LookupIDByType and +LookupIDByClass. A few lines of checking at +the top of these functions will form the heart of this defense. There is a +small problem because these functions are not told which client is doing the +lookup, but that can be solved either by adding a client parameter (probably +as a new function to preserve compatibility), or by using the server global +requestingClient. + + + + +ISSUE: are we really going to be able to get away with hiding trusted +resources, or will things like Motif drag and drop force us to expose +them? (Either way, the operations that untrusted clients can do to +trusted resources will have to be limited.) Is there something in Xt +or the ICCCM that breaks if you hide resources? + + + + + + +Denial of Service + + +Memory Exhaustion + + +Any request that causes the server to consume resources (particularly +memory) can be used in a denial of service attack. A client can use such +requests repeatedly until the server runs out of memory. When that +happens, the server will either crash or be forced to send Alloc errors. +The most obvious candidates are resource creation requests, +e.g., CreatePixmap, but in reality a large percentage of requests cause +memory allocation, if only temporarily, depending on the server +implementation. For this reason, the list of requests subject to this +form of denial of service will be necessarily incomplete. + + + +To address this form of denial of service, the server could set +per-client quotas on memory consumption. When the limit is surpassed, +the server could return Alloc errors. The application impact is minimal +as long as the application stays within quota. The implementation difficulty +is another story. + + + +Conceptually, it seems easy: simply have a way to set the limit, and on +every memory (de)allocation operation, update the client's current usage, +and return an error if the client is over the limit. The first problem +is something we've already touched on: the allocator functions aren't told +which client the allocation belongs to. Unlike resource lookups, allocations +are done in too many places to consider a new interface that passes the +client, so using the global requestingClient is practically mandatory. + + + +The problems run deeper. The logical thing for the allocator to do if the +client is over its limit is to return NULL, indicating allocation failure. +Unfortunately, there are many places in the server that will react badly +if this happens. Most of these places, but not all, are "protected" by +setting the global variable Must_have_memory to True around the delicate +code. We could help the problem by skipping the limit check if +Must_have_memory is True. The best solution would be to bullet-proof the +server against allocation failures, but that is beyond the scope of Broadway. +Another consideration is that the additional checking may have a measurable +performance impact, since the server does frequent allocations. + + + +A third problem is that there is no portable way to determine the size of +a chunk of allocated memory given just a pointer to the chunk, and that's +all you have inside Xrealloc and +Xfree. The server could compensate by recording the +sizes itself somewhere, but that would be wasteful of memory, since the +malloc implementation also must be recording block sizes. On top of that, the +redundant bookkeeping would hurt performance. One solution is to use a custom +malloc that has the needed support, but that too seems beyond the scope of +Broadway. + + + +Considering all of this, we think it is advisable to defer solving the memory +exhaustion problem to a future release. Keep this in mind when you see quotas +mentioned as a defense in the list below. + + + + + + +CPU Monopolization + + +Another general way that a client can cause denial of service is to flood +the server with requests. The server will spend a large percentage of its +time servicing those requests, possibly starving other clients and certainly +hurting performance. Every request can be used for flooding, so we will +not bother to list flooding on every request. A variation on this attack is +to flood the server with new connection attempts. + + + +To reduce the effectiveness of flooding, the server could use a different +scheduling algorithm that throttles clients that are monopolizing the +server, or it could simply favor trusted clients over untrusted ones. +Applications cannot depend on a particular scheduling algorithm anyway, +so changing it should not affect them. The Synchronization extension +specifies a way to set client priorities, and a simple priority scheduler +already exists in the server to support it, so this should be simple to add. + + + + + + + + +Security concerns with specific window attributes + + +Background-pixmap + +Clients can use windows with the background-pixmap attribute set to None +(hereafter "background none windows") to obtain images of other windows. A +background none window never paints its own background, so whatever happened +to be on the screen when the window was mapped can be read from the +background none window with GetImage. This may well contain data from other +windows. The CreateWindow and ChangeWindowAttributes requests can set the +background-pixmap attribute set to None, and many window operations can cause +data from other windows to be left in a background none window, including +ReparentWindow, +MapWindow, +MapSubwindows, +ConfigureWindow, and +CirculateWindow. + + + +Background none windows can also be used to cause apparent alteration. +A client can create a window with background none and draw to it. The drawing +will appear to the user to be in the windows below the background none window. + + + +To remedy these problems, the server could substitute a well-defined +background when a client specifies None. Ideally the substituted background +would look different enough from other windows that the user wouldn't be +confused. A tile depicting some appropriate international symbol might be +reasonable. We believe that there are few applications that actually rely on +background none semantics, and those that do will be easy for the user to +identify because of the distinctive tile. Implementation should not be a +problem either. Luckily, the window background cannot be retrieved through +the X protocol, so we won't have to maintain any illusions about its value. + + + + +ISSUE: Some vendors have extensions to let you query the window background. Do +we need to accomodate that? + + + + + +ISSUE: Will this lead to unacceptable application breakage? Could the server be +smarter, only painting with the well-defined background when the window actually +contains bits from trusted windows? + + + + + + +ParentRelative and CopyFromParent + + +Several window attributes can take on special values that cause them to +reference (ParentRelative) or copy (CopyFromParent) the same attribute from +the window's parent. This fits our definition of theft. The window +attributes are class, background-pixmap, border-pixmap, and colormap. All +of these can be set with CreateWindow; all but class +can be set with ChangeWindowAttributes. + + + +These forms of theft aren't particularly serious, so sending an error +doesn't seem appropriate. Substitution of different attribute values seems +to be the only reasonable option, and even that is likely to cause trouble +for clients. Untrusted clients are already going to be prevented from +creating windows that are children of trusted clients (see CreateWindow +below). We recommend that nothing more be done to counter this threat. + + + + + +Override-redirect + +Windows with the override-redirect bit set to True are generally ignored by +the window manager. A client can map an override-redirect window that covers +most or all of the screen, causing denial of service since other applications +won't be visible. + + + +To prevent this, the server could prevent more than a certain percentage +(configurable) the of screen area from being covered by override-redirect +windows of untrusted clients. + + + +Override-redirect windows also make some spoofing attacks easier since the +client can more carefully control the presentation of the window to mimic +another client. Defenses against spoofing will be given under + + +. + + + + + + +Security concerns with specific requests + + +To reduce the space needed to discuss 120 requests, most of the following +sections use a stylized format. A threat is given, followed by an +imperative statement. The implied subject is an untrusted client, and the +object is usually a trusted client. Following that, another statement +starting with "Defense:" recommends a countermeasure for the preceding +threat(s). + + + +Resources owned by the server, such as the root window and the default +colormap, are considered to be owned by a trusted client. + + + +CreateWindow + + +Alteration: create a window as a child of another client's window, altering +its list of children. + + + +Defense: send Window error. Specifying the root window as the parent will +have to be allowed, though. + + + +Theft: create an InputOnly window or a window with background none on top +of other clients' windows, select for keyboard/mouse input on that window, +and steal the input. The input can be resent using SendEvent or an input +synthesis extension so that the snooped application continues to function, +though this won't work convincingly with the background none case because the +drawing will be clipped. + + + +Defense: send an error if a top-level InputOnly window is created +(or reparented to the root). Countermeasures for background none and +SendEvent are discussed elsewhere. + + + + +ISSUE: The Motif drag and drop protocol creates and maps such a window (at +-100, -100, size 10x10) to "cache frequently needed data on window properties +to reduce roundtrip server requests." Proposed solution: we could only send an +error if the window is visible, which would require checking in, MapWindow, +ConfigureWindow, and ReparentWindow. + + + + +Theft: resource ID guessing (parent, background-pixmap, border-pixmap, colormap, +and cursor). + + +Defense: send Window, Pixmap, Colormap, or Cursor error. + + +Denial of service: create windows until the server runs out of memory. + + +Defense: quotas. + + +Also + + + + + + + +ChangeWindowAttributes + + +Alteration: change the attributes of another client's window. + + +Theft: select for events on another client's window. + + +Defense for both of the above: send Window error. + + + + +ISSUE: The Motif drop protocol states that "the initiator should select for +DestroyNotify on the destination window such that it is aware of a potential +receiver crash." This will be a problem if the initiator is an untrusted +window and the destination is trusted. Can the server, perhaps with the help +of the security manager, recognize that a drop is in progress and allow the +DestroyNotify event selection in this limited case? + + + + + +ISSUE: The Motif pre-register drag protocol probably requires the initiator +to select for Enter/LeaveNotify on all top-level windows. Same problem as +the previous issue. + + + + +Theft: resource ID guessing (background-pixmap, border-pixmap, colormap, and +cursor). + + + +Defense: send Pixmap, Colormap, or Cursor error. + + +Also + + + + + + + +GetWindowAttributes + + +Theft: get the attributes of another client's window. + + +Theft: resource ID guessing (window). + + +Defense for both of the above: send Window error. + + + + + +DestroyWindow, DestroySubwindows + + +Destruction: destroy another client's window. + + +Theft: resource ID guessing (window). + + +Defense for both of the above: send Window error. + + + + +ChangeSaveSet + + +Alteration: cause another client's windows to be reparented to the root when +this client disconnects (only if the other client's windows are subwindows of +this client's windows). + + + +Defense: process the request normally. The trusted client gives away some of +its protection by creating a subwindow of an untrusted window. + + + +Theft: resource ID guessing (window). + + + +Defense: send Window error. + + + + + +MapWindow + + +Spoofing: map a window that is designed to resemble a window of another client. +Additional requests will probably be needed to complete the illusion. + + + +Defense: + + + +We consider spoofing to be a significant danger only if the user is convinced +to interact with the spoof window. The defense centers on providing enough +information to enable the user to know where keyboard, mouse, and extension +device input is going. To accomplish this, the server will cooperate with the +security manager, an external process. The server will provide the following +facilities to the security manager: + + + +1. A way to create a single window that is unobscurable by any window of any +other client, trusted or untrusted. It needs to be unobscurable so that it is +spoof-proof. + + + + +ISSUE: is a weaker form of unobscurability better? Should the window be +obscurable by trusted windows, for example? + + + + + +ISSUE: does unobscurable mean that it is a child of the root that is always +on top in the stacking order? + + + + +2. A way to determine if a given window ID belongs to an untrusted client. + + + +The security manager will need to select for the existing events +FocusIn, FocusOut, EnterNotify, LeaveNotify, DeviceFocusIn, and +DeviceFocusOut on all windows to track what window(s) the user's input is +going to. Using the above server facilities, it can reliably display the +trusted/untrusted status of all clients currently receiving input. + + + + +ISSUE: is it too much to ask the security manager to select for all these +events on every window? Do we need to provide new events that you select +for *on the device* that tell where the device is focused? + + + + +None of this should have any application impact. + + + +The unobscurable window may be tricky to implement. There is already some +machinery in the server to make an unobscurable window for the screen saver, +which may help but may also get in the way now that we have to deal with two +unobscurable windows. + + + + + + +Window Operations + + +Specifically, ReparentWindow, MapWindow, MapSubwindows, UnmapWindow, +UnmapSubwindows, ConfigureWindow, and CirculateWindow. + + + +Alteration: manipulate another client's window. + + + +Theft: resource ID guessing (window, sibling). + + + +Defense for both of the above: send a Window error unless it is a root +window, in which case we should send an Access error. + + + + + +GetGeometry + + +Theft: get the geometry of another client's drawable. + + + +Theft: resource ID guessing (drawable). + + +Defense for both of the above: send Drawable error. However, root windows +will be allowed. + + + + + +QueryTree + + +Theft: resource ID guessing (window). + + + +Defense: send Window error. + + + +Theft: discover window IDs that belong to other clients. + + + +Defense: For the child windows, censor the reply by removing window IDs that +belong to trusted clients. Allow the root window to be returned. For the parent +window, if it belongs to a trusted client, return the closest ancestor window +that belongs to an untrusted client, or if such a window does not exist, +return the root window for the parent window. + + + + +ISSUE: will some applications be confused if we filter out the window manager +frame window(s), or other windows between the queried window and the root +window? + + + + + +ISSUE: the Motif drag protocol (both preregister and dynamic) needs to be able +to locate other top-level windows for potential drop sites. See also + + +. + + + + + + +InternAtom + + +Theft: discover atom values of atoms interned by other clients. This lets you +determine if a specific set of atoms has been interned, which may lead to other +inferences. + + +Defense: This is a minor form of theft. Blocking it will interfere with many +types of inter-client communication. We propose to do nothing about this +threat. + + + +Denial of service: intern atoms until the server runs out of memory. + + + +Defense: quotas. + + + + + + +GetAtomName + + +Theft: discover atom names of atoms interned by other clients. This lets you +determine if a specific set of atoms has been interned, which may lead to other +inferences. + + + +Defense: This is a minor form of theft. We propose to do nothing about this +threat. + + + + + +ChangeProperty + + +Alteration: change a property on another client's window or one that was +stored by another client. + + + +Theft: resource ID guessing (window). + + + +Defense for both of the above: send Window error. + + + + +ISSUE: Selection transfer requires the selection owner to change a property +on the requestor's window. Does the security manager get us out of this? +Does the server notice the property name and window passed in +ConvertSelection and temporarily allow that window property to be written? + + + + + +ISSUE: should certain root window properties be writable? + + + + +Denial of service: store additional property data until the server +runs out of memory. + + + +Defense: quotas. + + + + +DeleteProperty + + +Destruction: delete a property stored by another client. + + + +Theft: resource ID guessing (window). + + + +Defense for both of the above: send Window error. + + + + + +GetProperty + + +Theft: get a property stored by another client. + + + +Theft: resource ID guessing (window). + + + +Defense for both of the above: send Window error. + + + + +ISSUE: should certain root window properties be readable? Proposed answer: yes, +some configurable list. Do those properties need to be polyinstantiated? + + + + + +ISSUE: Motif drag and drop needs to be able to read the following properties: +WM_STATE to identify top-level windows, _MOTIF_DRAG_WINDOW on +the root window, _MOTIF_DRAG_TARGETS on the window given in the +_MOTIF_DRAG_WINDOW property, and _MOTIF_DRAG_RECEIVER_INFO on +windows with drop sites. Additionally, some properties are needed that do not +have fixed names. + + + + + + +RotateProperties + + +Alteration: rotate properties stored by another client. + + + +Theft: resource ID guessing (window). + + + +Defense for both of the above: send Window error. + + + + +ListProperties + + +Theft: list properties stored by another client. + + + +Theft: resource ID guessing (window). + + + +Defense for both of the above: send Window error. + + + + +ISSUE: should certain root window properties be listable? + + + + + +SetSelectionOwner + + +Theft: Steal ownership of a selection. + + + +Denial of service: do this repeatedly so that no other client can own the +selection. + + + +Defense for both of the above: have a configurable list of selections that +untrusted clients can own. For other selections, treat this request as a no-op. + + + + +ISSUE: how does the security manager get involved here? Is it the one that +has the configurable list of selections instead of the server? + + + + +Theft: resource ID guessing (window). + + + +Defense: send Window error. + + + + +GetSelectionOwner + + +Theft: discover the ID of another client's window via the owner field of the +reply. + + + +Defense: if the selection is on the configurable list mentioned above, +return the root window ID, else return None. + + + + +ISSUE: how does the security manager get involved here? + + + + + +ConvertSelection + + +Theft: this initiates a selection transfer (see the ICCCM) which sends +the selection contents from the selection owner, which may be another +client, to the requesting client. + + + +Defense: since in many cases ConvertSelection is done in direct response +to user interaction, it is probably best not to force it to fail, either +silently or with an error. The server should rely on the security manager +to assist in handling the selection transfer. + + + +Theft: resource ID guessing (requestor). + + + +Defense: send Window error. + + + + + +SendEvent + + +A client can use SendEvent to cause events of any type to be sent to windows +of other clients. Similarly, a client could SendEvent to one of its own +windows with propogate set to True and arrange for the event to be propogated +up to a window it does not own. Clients can detect events generated by +SendEvent, but we cannot assume that they will. + + + +Defense: ignore this request unless the event being sent is a ClientMessage +event, which should be sent normally so that selection transfer, Motif drag +and drop, and certain input methods have a chance at working. + + + + +ISSUE: does allowing all ClientMessages open up too big a hole? + + + + +Theft: resource ID guessing (window). + + + +Defense: send Window error. + + + + + + +Keyboard and Pointer Grabs + + +Specifically, GrabKeyboard, GrabPointer, GrabKey, and GrabButton. + + + +Denial of service/Theft: take over the keyboard and pointer. This could +be viewed as denial of service since it prevents other clients from getting +keyboard or mouse input, or it could be viewed as theft since the user +input may not have been intended for the grabbing client. + + + +Defense: provide a way to break grabs via some keystroke combination, and +have a status area that shows which client is getting input. (See + + +). + + + +Theft: resource ID guessing (grab-window, confine-to, cursor). + + + +Defense: send Window or Cursor error. + + + + + + + +ChangeActivePointerGrab + + +Theft: resource ID guessing (cursor). + + + +Defense: send Cursor error. + + + + + +GrabServer + + +Denial of service: a client can grab the server and not let go, locking +out all other clients. + + + +Defense: provide a way to break grabs via some keystroke combination. + + + + + +QueryPointer + + +Theft: A client can steal pointer motion and position, button input, +modifier key state, and possibly a window of another client with this request. + + + +Defense: if the querying client doesn't have the pointer grabbed, and +the pointer is not in one of its windows, the information can be zeroed. + + + +Theft: resource ID guessing (window). + + + +Defense: send Window error. + + + + +GetMotionEvents + + +Theft: steal pointer motion input that went to other clients. + + + +Defense: ideally, the server would return only pointer input that was not +delivered to any trusted client. The implementation effort to do that +probably outweighs the marginal benefits. Instead, we will always return +an empty list of motion events to untrusted clients. + + + +Theft: resource ID guessing (window). + + + +Defense: send Window error. + + + + +TranslateCoordinates + + +Theft: discover information about other clients' windows: position, +screen, and possibly the ID of one of their subwindows. + + + +Defense: send an error if src-window or dst-window do not belong to +the requesting client. + + + +Theft: resource ID guessing (src-window, dst-window). + + + +Defense: send Window error. + + + + +WarpPointer + + +A client can cause pointer motion to occur in another client's window. + + + +Denial of service: repeated pointer warping prevents the user from using +the mouse normally. + + + +Defense for both of the above: if the querying client doesn't have the pointer +grabbed, and the pointer is not in one of its windows, treat the request as a +no-op. + + + +Theft: resource ID guessing (src-window, dst-window). + + + +Defense: send Window error. + + + + +SetInputFocus + + +Theft: a client can use this request to make one of its own windows have +the input focus (keyboard focus). The user may be unaware that keystrokes +are now going to a different window. + + + +Denial of service: repeatedly setting input focus prevents normal use of the +keyboard. + + + +Defense for both of the above: only allow untrusted clients to +SetInputFocus if input focus is currently held by another untrusted client. + + + + +ISSUE: this will break clients using the Globally Active Input model +described in section 4.1.7 of the ICCCM. + + + + +Theft: resource ID guessing (focus). + + + +Defense: send Window error. + + + + + +GetInputFocus + + +Theft: the reply may contain the ID of another client's window. + + +Defense: return a focus window of None if a trusted client currently has +the input focus. + + + + + +QueryKeymap + + +Theft: poll the keyboard with this to see which keys are being pressed. + + + +Defense: zero the returned bit vector if a trusted client currently has +the input focus. + + + + +Font Requests + + +Specifically, OpenFont, QueryFont, ListFonts, ListFontsWithInfo, and +QueryTextExtents. + + + +Theft: discover font name, glyph, and metric information about fonts that were +provided by another client (by setting the font path). Whether it is theft +to retrieve information about fonts from the server's initial font path +depends on whether or not you believe those fonts, by their existence in the +initial font path, are intended to be globally accessible by all clients. + + + +Defense: + + + +Maintain two separate font paths, one for trusted clients and one for untrusted +clients. They are both initialized to the default font path at server reset. +Subsequently, changes to one do not affect the other. Since untrusted clients +will not see font path elements added by trusted clients, they will not be +able to access any fonts provided by those font path elements. + + + +Theft: resource ID guessing (font) (QueryFont and QueryTextExtents only). + + + +Defense: send Font error. + + + +Denial of service: open fonts until the server runs out of memory (OpenFont +only). + + + +Defense: quotas. + + + + + + +CloseFont + + +Destruction: close another client's font. + + +Defense: send Font error. + + + + +SetFontPath + + +Denial of service: change the font path so that other clients cannot +find their fonts. + + + +Alteration: change the font path so that other clients get different +fonts than they expected. + + +Defense for both of the above: separate font paths for trusted and +untrusted clients, as described in the Font Requests section. + + + +ISSUE: the printing project considered per-client font paths and concluded +that it was very difficult to do. We should look at this aspect of the print +server design to see if we can reuse the same scheme. We should also try to +reconstruct what was so difficult about this; it doesn't seem that hard on the +surface. + + + + + +GetFontPath + + +Theft: retrieve font path elements that were set by other clients. + + +Use knowledge from font path elements to mount other attacks, e.g., +attack a font server found in the font path. + + +Defense for both of the above: separate font paths for trusted and +untrusted clients, as described in the Font Requests section. + + + + + +CreatePixmap + + +Theft: resource ID guessing (drawable). + + +Defense: send Drawable error. + + +Denial of service: create pixmaps until the server runs out of memory. + + +Defense: quotas. + + + + +FreePixmap + + +Destruction: destroy another client's pixmap. + + +Defense: send Pixmap error. + + + + +CreateGC + + +Theft: resource ID guessing (drawable, tile, stipple, font, clip-mask). + + +Defense: send Drawable, Pixmap, or Font error. + + +Denial of service: create GCs until the server runs out of memory. + + +Defense: quotas. + + + + + +CopyGC + + +Theft: copy GC values of another client's GC. + + +Alteration: copy GC values to another client's GC. + + +Defense for both of the above: send GC error. + + + + + +ChangeGC, SetDashes, SetClipRectangles + + +Alteration: change values of another client's GC. + + +Theft: resource ID guessing (gc, tile, stipple, font, clip-mask) +(last four for ChangeGC only). + + +Defense for both of the above: send GC error. + + + + +FreeGC + + +Destruction: destroy another client's GC. + + +Defense: send GC error. + + + + + + +Drawing Requests + + +Specifically, ClearArea, CopyArea, CopyPlane, PolyPoint, PolyLine, PolySegment, +PolyRectangle, PolyArc, FillPoly, PolyFillRectangle, PolyFillArc, PutImage, +PolyText8, PolyText16, ImageText8, and ImageText16. + + +Alteration: draw to another client's drawable. + + +Theft: resource ID guessing: ClearArea - window; CopyArea, CopyPlane - +src-drawable, dst-drawable, gc; all others - drawable, gc. + + +Defense for both of the above: send appropriate error. + + + +ISSUE: The Motif preregister drag protocol requires clients to draw +into windows of other clients for drag-over/under effects. + + + +Spoofing: draw to a window to make it resemble a window of another client. + + +Defense: see + + +. + + + + + +GetImage + + +Theft: get the image of another client's drawable. + + +Theft: resource ID guessing (drawable). + + +Defense: send Drawable error. + + +Theft: get the image of your own window, which may contain pieces of other +overlapping windows. + + +Defense: censor returned images by blotting out areas that contain data +from trusted windows. + + + + +CreateColormap + + +Theft: resource ID guessing (window). + + +Defense: send Colormap error. + + + +Denial of service: create colormaps with this request until the server +runs out of memory. + + +Defense: quotas. + + + + +FreeColormap + + +Destruction: destroy another client's colormap. + + +Defense: send Colormap error. + + + + + +CopyColormapAndFree + + +Theft: resource ID guessing (src-map). + + +Defense: send Colormap error. However, default colormaps will be allowed. + + + +ISSUE: must untrusted applications be allowed to use standard colormaps? +(Same issue for ListInstalledColormaps, Color Allocation Requests, +FreeColors, StoreColors, StoreNamedColor, QueryColors, and LookupColor.) + + + +Denial of service: create colormaps with this request until the server +runs out of memory. + + +Defense: quotas. + + + + +InstallColormap, UninstallColormap + + +Theft: resource ID guessing. + + +Defense: send Colormap error. + + +Denial of service: (un)install any colormap, potentially preventing +windows from displaying correct colors. + + +Defense: treat this request as a no-op. Section 4.1.8 of the ICCCM states +that (un)installing colormaps is the responsibility of the window manager +alone. + + + + +ISSUE: the ICCCM also allows clients to do colormap installs if the client +has the pointer grabbed. Do we need to allow that too? + + + + + +ListInstalledColormaps + + +Theft: resource ID guessing (window). + + + +Defense: send Colormap error. + + +Theft: discover the resource ID of another client's colormap from the reply. + + +Defense: remove the returned colormap IDs; only let through default +colormaps and colormaps of untrusted clients. + + + + +Color Allocation Requests + + +Specifically, AllocColor, AllocNamedColor, AllocColorCells, and +AllocColorPlanes. + + +Alteration/Denial of service: allocate colors in another client's +colormap. It is denial of service if the owning client's color allocations +fail because there are no cells available. Otherwise it is just alteration. + + +Theft: resource ID guessing (cmap). + + +Defense for both of the above: send Colormap error. However, default +colormaps will be allowed. + + + + +FreeColors + + +Theft: resource ID guessing (cmap). + + +Defense: send Colormap error. However, default colormaps will be allowed. + + + + +StoreColors, StoreNamedColor + + +Alteration: change the colors in another client's colormap. + + +Theft: resource ID guessing (cmap). + + +Defense for both of the above: send Colormap error. However, default +colormaps will be allowed. + + + + + +QueryColors, LookupColor + + +Theft: retrieve information about the colors in another client's colormap. + + +Theft: resource ID guessing (cmap). + + +Defense for both of the above: send Colormap error. However, default +colormaps will be allowed. + + + + +CreateCursor, CreateGlyphCursor + + +Theft: resource ID guessing (source, mask or source-font, mask-font). + + +Defense: send Pixmap or Font error. However, the default font will be allowed. + + +Denial of service: create cursors until the server runs out of memory. + + +Defense: quotas. + + + + +FreeCursor + + +Destruction: free another client's cursor. + + +Defense: send Cursor error. + + + + +RecolorCursor + + +Alteration: recolor another client's cursor. + + +Theft: resource ID guessing (cursor). + + +Defense for both of the above: send Cursor error. + + + + +QueryBestSize + + +Theft: resource ID guessing (drawable). + + +Defense: send Drawable error. + + + + +ListExtensions, QueryExtension + + +Determine the extensions supported by the server, and use the list to choose +extension-specific attacks to attempt. + + +Defense: extensions will have a way to tell the server whether it is safe +for untrusted clients to use them. These requests will only return information +about extensions that claim to be safe. + + + + +Keyboard configuration requests + + +Specifically, ChangeKeyboardControl, ChangeKeyboardMapping, and +SetModifierMapping. + + +Alteration: change the keyboard parameters that were established by another +client. + + +Denial of service: with ChangeKeyboardControl, disable auto-repeat, key +click, or the bell. With ChangeKeyboardMapping or SetModifierMapping, +change the key mappings so that the keyboard is difficult or impossible to +use. + + +Defense for both of the above: treat these requests as a no-op. + + + + + +Keyboard query requests + + +Specifically, GetKeyboardControl, GetKeyboardMapping, and GetModifierMapping. + + +Theft: get keyboard information that was established by another client. + + +Defense: This is a minor form of theft. We propose to do nothing about this +threat. + + + + + +ChangePointerControl, SetPointerMapping + + +Alteration: change the pointer parameters that were established by another +client. + + +Denial of service: set the pointer parameters so that the pointer is +difficult or impossible to use. + + +Defense for both of the above: treat these requests as a no-op. + + + + +GetPointerControl, GetPointerMapping + + +Theft: get pointer parameters that were established by another client. + + +Defense: This is a minor form of theft. We propose to do nothing about this +threat. + + + + +SetScreenSaver + + +Alteration: change the screen saver parameters that were established by +another client. + + +Denial of service: set the screen saver parameters so that the screen saver +is always on or always off. + + +Defense for both of the above: treat these requests as a no-op. + + + + + +GetScreenSaver + + +Theft: get screen saver parameters that were established by another client. + + +Defense: This is a minor form of theft. We propose to do nothing about this +threat. + + + + +ForceScreenSaver + + +Denial of service: repeatedly activate the screen saver so that the user +cannot see the screen as it would look when the screen saver is off. + + +Denial of service: repeatedly reset the screen saver, preventing it from +activating. + + +Defense for both of the above: treat these requests as a no-op. + + + + +ChangeHost + + +Most servers already have some restrictions on which clients can use this +request, so whether the following list applies is implementation dependent. + + +Denial of service: remove a host from the list, preventing clients from +connecting from that host. + + +Add a host to the list. Clients from that host may then launch other +attacks of any type. + + +Defense for both of the above: return Access error. + + + + + +ListHosts + + +Theft: steal host identities and possibly even user identities that are +allowed to connect. + + +Launch attacks of any type against the stolen host/user identities. + + +Defense for both of the above: return only untrusted hosts. + + + + + +SetAccessControl + + +Most servers already have some restrictions on which clients can use this +request, so whether the following list applies is implementation dependent. + + +Alteration: change the access control value established by some other client. + + +Disable access control, allowing clients to connect who would normally not be +able to connect. Those clients may then launch other attacks of any type. + + +Defense for both of the above: return Access error. + + + + +SetCloseDownMode + + +Denial of service: set the close-down mode to RetainPermanent or +RetainTemporary, then disconnect. The server cannot reuse the +resource-id-base of the disconnected client, or the memory used by the +retained resources, unless another client issues an appropriate KillClient +to cancel the retainment. The server has a limited number of +resource-id-bases, and when they are exhausted, it will be unable to accept +new client connections. + + +Defense: treat this request as a no-op. + + + + +KillClient + + +Destruction/Denial of service: kill another currently connected client. + + +Destruction: kill a client that has terminated with close-down mode of +RetainTemporary or RetainPermanent, destroying all its retained resources. + + +Destruction: specify AllTemporary as the resource, destroying all resources +of clients that have terminated with close-down mode RetainTemporary. + + +Defense for all of the above: return Value error. + + + + +Clean Requests + + +Other than denial of service caused by flooding, these requests have no known +security concerns: AllowEvents, UngrabPointer, UngrabButton, UngrabKeyboard, +UngrabKey, UngrabServer, NoOperation, and Bell. + + + + + +Events + + +The only threat posed by events is theft. Selecting for events on another +client's resources is always theft. We restrict further analysis by +assuming that the client only selects for events on its own resources, +then asking whether the events provide information about other clients. + + + +KeymapNotify + + +Theft: the state of the keyboard can be seen when the client does not have +the input focus. This is possible because a KeymapNotify is sent to a +window after every EnterNotify even if the window does not have input focus. + + +Defense: zero the returned bit vector if a trusted client currently has the +input focus. + + + + +Expose + + +Theft: discover where other clients' windows overlap your own. For +instance, map a full-screen window, lower it, then raise it. The resulting +exposes tell you where other windows are. + + + +Defense: about the only thing you could do here is force backing store to be +used on untrusted windows, but that would probably use too much server +memory. We propose to do nothing about this threat. + + + + +GraphicsExposure + + +Theft: discover where other clients' windows overlap your own. For instance, +use CopyArea to copy the entire window's area exactly on top of itself. The +resulting GraphicsExposures tell you where the window was obscured. + + +Defense: see Expose above. We propose to do nothing about this threat. + + + + +VisibilityNotify + + +Theft: this event provides crude positional information about other +clients, though the receiver cannot tell which other clients. + + +Defense: The information content of this event is very low. We propose to +do nothing about this threat. + + + + +ReparentNotify + + +Theft: the parent window may belong to some other client (probably the +window manager). + + +Defense: If the parent window belongs to a trusted client, return the +closest ancestor window that belongs to an untrusted client, or if such a +window does not exist, return the root window for the parent window. + + + +ISSUE: what is the application impact? + + + + + + + +ConfigureNotify + + + +Theft: the above-sibling window may belong to some other client. + + +Defense: return None for the above-sibling window if it belongs to a trusted +client. + + + +ISSUE: what is the application impact? + + + + + + + +ConfigureRequest + + +Theft: the sibling window may belong to some other client. + + +Defense: return None for the sibling window if it belongs to a trusted client. + + +ISSUE: what is the application impact? + + + + + +SelectionClear + + +Theft: the owner window may belong to some other client. + + +Defense: return None for the owner window if it belongs to a trusted client. + + + + +SelectionRequest + + +Theft: the requestor window may belong to some other client. + + +Defense: Blocking this event or censoring the window would prevent selection +transfers from untrusted clients to trusted clients from working. We propose +to do nothing in the server about this threat. The security manager may +reduce the exposure of trusted window IDs by becoming the owner of all +selections. + + + + + +MappingNotify + + +Theft: discover keyboard, pointer, or modifier mapping information set +by another client. + + +Defense: Any tampering with this event will cause clients to have an +inconsistent view of the keyboard or pointer button configuration, which is +likely to confuse the user. We propose to do nothing about this threat. + + + + + +Errors + + +There appear to be no threats related to procotol errors. + + + + + + + + +Future Work + + +The next steps are resolve the items marked ISSUE and to decide if the +defenses proposed are reasonable. Discussion on the security@x.org mailing list, +prototyping, and/or starting the implementation should help answer these +questions. + + + + + +References + + +Bellcore, "Framework Generic Requirements for X Window System Security," +Technical Advisory FA-STS-001324, Issue 1, August 1992. + + +Dardailler, Daniel, "Motif Drag And Drop Protocol," unpublished design +notes. + + +Kahn, Brian L., "Safe Use of X WINDOW SYSTEM protocol Across a Firewall", +unpublished draft, The MITRE Corporation, 1995. + + +Rosenthal, David S. H., "LINX - a Less INsecure X server," Sun Microsystems, +29th April 1989. + + +Rosenthal, David and Marks, Stuart W., "Inter-Client Communication Conventions +Manual Version 2.0," ftp://ftp.x.org/pub/R6.1/xc/doc/hardcopy/ICCCM/icccm.PS.Z + + + +Scheifler, Robert W., "X Window System Protocol," +ftp://ftp.x.org/pub/R6.1/xc/doc/hardcopy/XProtocol/proto.PS.Z + + +Treese, G. Winfield and Wolman, Alec, "X Through the Firewall, and Other +Application Relays," Digital Equipment Corporation Cambridge Research Lab, +Technical Report Series, CRL 93/10, May 3, 1993. + + + diff --git a/doc/xorg-docs/specs/Xserver/appgroup.ms b/doc/xorg-docs/specs/Xserver/appgroup.xml similarity index 74% rename from doc/xorg-docs/specs/Xserver/appgroup.ms rename to doc/xorg-docs/specs/Xserver/appgroup.xml index 20d896522..ef3c06512 100644 --- a/doc/xorg-docs/specs/Xserver/appgroup.ms +++ b/doc/xorg-docs/specs/Xserver/appgroup.xml @@ -1,85 +1,118 @@ -.\" $Xorg: appgroup.ms,v 1.3 2000/08/17 19:42:41 cpqbld Exp $ -.EF 'AppGroup Extension Definition'- % -'October, 1996' -.OF 'AppGroup Extension Definition'- % -'October, 1996' -.EH ''' -.OH ''' -.TL -Description of the Application Group Extension -Implementation for the X11 Sample Server -.AU -Kaleb S. KEITHLEY -.AI -X Consortium -.LP -.bp -\& -.sp 15 -Copyright \(co 1996 X Consortium -.LP + + + + +

+ + + Description of the Application Group Extension + Implementation for the X11 Sample Server + Version 1.0 + + + Kaleb KEITHLEY + FUJITSU Limited. + + + X Consortium Standard + 1996X Consortium + X Consortium + X Version 11, Release 7 + + + +The following document explains the server side of the Application +Group Extension. + + + + + + + Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal +of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -.LP + + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + + + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -.bp -.LP -The following document explains the server side of the Application + + + +The following document explains the server side of the Application Group Extension. -.LP -WindowsNT is a trademark of Microsoft, Inc. Macintosh and Apple -are trademarks of Apple Computer, Inc. X Window System is a + + + +WindowsNT is a trademark of Microsoft, Inc. Macintosh and Apple +are trademarks of Apple Computer, Inc. X Window System is a trademark of X Consortium, Inc. -.LP -To understand this document and the accompanying source code, you + + + + + +To understand this document and the accompanying source code, you should know the C language, should be familiar with X server -internals, and should also have a general knowledge of the X +internals, and should also have a general knowledge of the X Window System. -.NH 1 -AppGroup Server Public Functions -.LP + + + +AppGroup Server Public Functions + The AppGroup extension adds seven new functions that are called -from elsewhere in the server. They are: XagExtensionInit, -XagDefaultColormap, XagRootVisual, XagLeader, XagIsControlledRoot, +from elsewhere in the server. They are: XagExtensionInit, +XagDefaultColormap, XagRootVisual, XagLeader, XagIsControlledRoot, XagConnectionInfo, XagCallClientStateChange. -.LP + + XagExtensionInit is the extension initialization function called from InitExtension in mi/miinitext.c. Note that an new resource type, RT_APPGROUP, is created, specifying the destructor function XagAppGroupFree. -.LP + + XagDefaultColormap returns the colormap ID that was specified in the creation of the AppGroup. Any time CopyFromParent is specified for a top-level window's colormap, i.e. in a CreateWindow or -ChangeWindowAttributes request, this function is called to see -if there is an AppGroup specific colormap to use. If there is +ChangeWindowAttributes request, this function is called to see +if there is an AppGroup specific colormap to use. If there is one, its ID is returned, otherwise None is returned. -.LP + + XagRootVisual returns the visual ID that was specified in the creation of the Appgroup. Like XagDefaultColormap, when CopyFromParent is specified for a top-level window's visual in a CreateWindow request, this function is called to see if there is an AppGroup specific visual to use. If there is one, its ID is returned, otherwise 0 (zero) is returned. -.LP + + XagLeader returns the ClientPtr of the client that is the AppGroup Leader. Normally when an application maps or configures a top-level -window a MapRequest or ConfigureRequest event is delivered to the -client, e.g. a window manager, that has selected SubstructureRedirect -on the root window. However, when the application is part of an +window a MapRequest or ConfigureRequest event is delivered to the +client, e.g. a window manager, that has selected SubstructureRedirect +on the root window. However, when the application is part of an AppGroup, the MapRequest and ConfigureRequest events are delivered to the AppGroup Leader instead. -.LP + + XagIsControlledRoot returns a boolean: True if the window is a top-level window of a client in an AppGroup, False otherwise. In a combined server, i.e. one that provides both UI and printing, @@ -90,14 +123,16 @@ member creates and maps a [top-level] window then the window's parent [the root window] is tested to determine whether to send MapRequest or ConfigureRequest events to the AppGroup Leader to to some other client. -.LP -In the trivial case XagIsControlledRoot returns True if the parent + + +In the trivial case XagIsControlledRoot returns True if the parent window has no parent itself, i.e. it is a root window. In the case where the application is embedded, indicated by the singleScreen attribute being True, the parent's drawable ID is compared to the AppGroup's root window ID, and if it is the same, True is returned. If neither case is true, then False is returned. -.LP + + XagConnectionInfo returns an abreviated version of the connection setup information. When an embedded AppGroup is created the server returns only the information about the [UI] screen that the @@ -105,27 +140,32 @@ application is embedded within in the connection setup in order to prevent the application from creating windows on other screens; thus attempting to guarantee that any window that should be embedded can be reparented into the AppGroup Leader's window hierarchy. -.LP + + XagCallClientStateChange is called to invoke the extension's client state change callback additional times as necessary -- currently only once, after the auth data becomes available between -ClientStateInitial and ClientStateConnected. Client state change -callbacks were introduced in the Record extension, which specifies -when the callbacks are invoked. Unfortunately the points at which -they are called are not necessarily the best as far as the AppGroup +ClientStateInitial and ClientStateConnected. Client state change +callbacks were introduced in the Record extension, which specifies +when the callbacks are invoked. Unfortunately the points at which +they are called are not necessarily the best as far as the AppGroup Extension is concerned. Adding an additional state and calling all the callbacks works too, however this seemed unnecessary overkill. -.NH 1 -AppGroup Server Private APIs -.LP -The AppGroup extension adds the following functions which are -private to the extension: ProcXagDispatch and SProcXagDispatch, + + + + +AppGroup Server Private APIs + +The AppGroup extension adds the following functions which are +private to the extension: ProcXagDispatch and SProcXagDispatch, ProcXagQueryVersion and SProcXagQueryVersion, ProcXagCreate and SProcXagCreate, ProcXagDestroy and SProcXagDestroy, ProcGetAttr and SProcGetAttr, ProcXagQuery and SProcXagQuery, ProcXagCreateAssoc and SProcXagCreateAssoc, ProcXagDestroyAssoc and SProcXagDestroyAssoc, XagResetProc, and XagAppGroupFree. -.LP + + The ProcXagDispatch, SProcXagDispatch, and XagResetProc functions should be familiar to anyone familiar with X server internals and I won't elaborate on them here. Similarly the wrapper functions: @@ -133,56 +173,72 @@ SProcXagQueryVersion, SProcXagCreate, SProcXagDestroy, SProcXagGetAttr, SProcXagQuery, SProcXagCreateAssoc, and SProcXagDestroyAssoc, as wrappers which handle swapping integer data into the host's byte order will not be explained in any detail. -.LP + + ProcXagQueryVersion returns the major and minor versions of the AppGroup extension supported by the server. -.LP -ProcXagCreate creates an AppGroup. A new record in a linked list -of AppGroups is allocated and initialized. The attributes from the -request are validated and copied to the AppGroup record. If necessary -an abbreviated version of the connection setup information is compiled + + +ProcXagCreate creates an AppGroup. A new record in a linked list +of AppGroups is allocated and initialized. The attributes from the +request are validated and copied to the AppGroup record. If necessary +an abbreviated version of the connection setup information is compiled and also stored in the AppGroup record. The first time an AppGroup is created a client-state-change callback is registered and a reference count is incremented. -.LP + + ProcXagDestroy destroys an AppGroup an AppGroup by calling FreeResource specifying the AppGroup ID. This will result in the destructor function XagAppGroupFree being called. The reference count is decremented and when it reaches zero the client-state-change callback is deleted. -.LP + + ProcXagGetAttr returns the AppGroup Attributes to the requesting client. -.LP + + ProcXagQuery returns the AppGroup ID of an arbitrary resource to the requesting client. -.LP + + ProcXagCreateAssoc creates an association between an X window ID -and system-specific data. In native X this functionality is +and system-specific data. In native X this functionality is unnecessary but for various personal computers, e.g. Macintosh, OS/2, and MS-Windows it is necessary to associate an X window ID with the system's native window identifier so that when the AppGroup Leader issues a ReparentWindow request the personal computer X server can lookup the system-specific window ID and make the necessary function call(s) with it. -.LP + + ProcXagDestroyAssoc destroys the association created with ProcXagCreateAssoc. -.LP + + XagResetProc removes the client-state-change callback, sets the reference count to zero, and frees all the AppGroup records in the linked list by calling XagAppGroupFree. -.LP + + XagAppGroupFree calls CloseDownClient for each client in an AppGroup if the AppGroup has a leader, unlinks the AppGroup record from the linked list, frees allocated memory referenced by the record, and finally frees the record itself. -.NH 1 -Known Problems in this release. -.LP + + + + +Known Problems in this release. + In a combined UI/Print server the connection setup returned to an embedded application will not have information about the print screens. -.LP + + The LBX proxy caches connection setup information and will return incorrect connection setup information to an embedded client. + + +
diff --git a/doc/xorg-docs/specs/Xserver/ddx.tbl.ms b/doc/xorg-docs/specs/Xserver/ddx.tbl.ms deleted file mode 100644 index 620e08c0c..000000000 --- a/doc/xorg-docs/specs/Xserver/ddx.tbl.ms +++ /dev/null @@ -1,5283 +0,0 @@ -.\" $Xorg: ddx.tbl.ms,v 1.3 2000/08/17 19:42:41 cpqbld Exp $ -.EF 'Porting Layer Definition'- % -'October 27, 2004' -.OF 'Porting Layer Definition'- % -'October 27, 2004' -.EH ''' -.OH ''' -.TL -Definition of the Porting Layer -for the X v11 Sample Server -.AU -Susan Angebranndt -.AU -Raymond Drewry -.AU -Philip Karlton -.AU -Todd Newman -.AI -Digital Equipment Corporation -.sp -minor revisions by -.AU -Bob Scheifler -.AI -Massachusetts Institute of Technology -.sp -Revised for Release 4 and Release 5 by -.AU -Keith Packard -.AI -MIT X Consortium -.sp -Revised for Release 6 by -.AU -David P. Wiggins -.AI -X Consortium -.sp -Minor Revisions for Release 6.8.2 by -.AU -Jim Gettys -.AI -X.org Foundation and Hewlett Packard -.LP -.bp -\& -.sp 15 -Copyright \(co 1994 X Consortium, Inc., 2004 X.org Foundation, Inc. -.LP -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -.LP -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -.bp -.LP -Note to the 2004 edition: at this time this document must be considered incomplete. -In particular, the new Render extension is still lacking good documentation, -and has become vital to high performance X implementations. -A new "fb" portable frame buffer graphics library (replacing "cfb") -is used by most implementations -to implement software rendering for most operations. Accelerating only a few -of the old "core" graphics functions is now needed, -as performance in software is "good enough" for most operations. -Modern applications -and desktop environments are now -much more sensitive to good implementation of the Render extension than in -most operations of the old X graphics model. -The shadow frame buffer implementation is also very useful in many circumstances, -and also needs documentation. -We hope to rectify these shortcomings in our documentation -in the future. -Help would be greatly appreciated. -.LP -The following document explains the -structure of the X Window System display server and the interfaces among the larger pieces. -It is intended as a reference for programmers who are implementing an X Display Server -on their workstation hardware. -It is included with the X Window System source tape, -along with the document "Strategies for Porting the X v11 Sample Server." -The order in which you should read these documents is: -.IP 1) -Read the first section -of the "Strategies for Porting" document (Overview of Porting Process). -.IP 2) -Skim over this document (the Definition document). -.IP 3) -Skim over the remainder of the Strategies document. -.IP 4) -Start planning and working, referring to the Strategies -and Definition documents. -.LP -You may also want to look at the following documents: -.IP \(bu 5 -"The X Window System" -for an overview of X. -.IP \(bu 5 -"Xlib - C Language X Interface" -for a view of what the client programmer sees. -.IP \(bu 5 -"X Window System Protocol" -for a terse description of the byte stream protocol -between the client and server. -.LP -LK201 and DEC are trademarks of Digital Equipment Corporation. -Macintosh and Apple are trademarks of Apple Computer, Inc. -PostScript is a trademark of Adobe Systems, Inc. -Ethernet is a trademark of Xerox Corporation. -X Window System is a trademark of the X.org Foundation, Inc. -Cray is a trademark of Cray Research, Inc. - -.LP -To understand this document and the accompanying source -code, you should know the C language. -You should be familiar with 2D graphics and windowing -concepts such as clipping, bitmaps, -fonts, etc. -You should have a general knowledge of the X Window System. -To implement the server code on your hardware, -you need to know a lot about -your hardware, its graphic display device(s), -and (possibly) its networking and multitasking facilities. - -This document depends a lot on the source code, -so you should have a listing of the code handy. -.LP -Some source in the distribution is directly compilable -on your machine. -Some of it will require -modification. -Other parts may have to be completely written from scratch. -.LP -The distribution also includes source for a sample implementation of a display -server which runs on a very wide variety of color and monochrome displays on -Linux and *BSD which you -will find useful for implementing any type of X server. - - -.NH 1 -The X Window System -.XS -The X Window System -.XE -.LP -The X Window System, or simply "X," is a -windowing system that provides high-performance, high-level, -device-independent graphics. - -X is a windowing system designed for bitmapped graphic displays. -The display can have a -simple, monochrome display or it can have a color display with up to 32 bits -per pixel with a special graphics processor doing the work. (In this -document, monochrome means a black and white display with one bit per pixel. -Even though the usual meaning of monochrome is more general, this special -case is so common that we decided to reserve the word for this purpose.) -In practice, monochrome displays are now almost unheard of, with 4 bit -gray scale displays being the low end. - -X is designed for a networking environment where -users can run applications on machines other than their own workstations. -Sometimes, the connection is over an Ethernet network with a protocol such as TCP/IP; -but, any "reliable" byte stream is allowable. -A high-bandwidth byte stream is preferable; RS-232 at -9600 baud would be slow without compression techniques. - -X by itself allows great freedom of design. -For instance, it does not include any user interface standard. -Its intent is to "provide mechanism, not policy." -By making it general, it can be the foundation for a wide -variety of interactive software. - -For a more detailed overview, see the document "The X Window System." -For details on the byte stream protocol, see "X Window System protocol." - -.NH 1 -OVERVIEW OF THE SERVER -.XS -OVERVIEW OF THE SERVER -.XE -.LP -The display server -manages windows and simple graphics requests -for the user on behalf of different client applications. -The client applications can be running on any machine on the network. -The server mainly does three things: -.IP \(bu 5 -Responds to protocol requests from existing clients -(mostly graphic and text drawing commands) -.IP \(bu 5 -Sends device input (keystrokes and mouse actions) and other events to existing clients -.IP \(bu 5 -Maintains client connections - -.LP -The server code is organized into four major pieces: - -.IP \(bu 5 -Device Independent (DIX) layer - code -shared among all implementations -.IP \(bu 5 -Operating System (OS) layer - code -that is different for each operating system -but is shared among all graphic -devices for this operating system -.IP \(bu 5 -Device Dependent (DDX) layer - code that is (potentially) -different for each combination of operating -system and graphic device -.IP \(bu 5 -Extension Interface - a standard way to add -features to the X server - -.LP -The "porting layer" consists of the OS and DDX layers; these are -actually parallel and neither one is on top of the other. -The DIX layer is intended to be portable -without change to target systems and is not -detailed here, although several routines -in DIX that are called by DDX are -documented. -Extensions incorporate new functionality into the server; and require -additional functionality over a simple DDX. -.LP -The following sections outline the functions of the layers. -Section 3 briefly tells what you need to know about the DIX layer. -The OS layer is explained in Section 4. -Section 5 gives the theory of operation and procedural interface for the -DDX layer. -Section 6 describes the functions which exist for the extension writer. - -.NH 2 -Notes On Resources and Large Structs -.XS -Notes On Resources and Large Structs -.XE -.LP -X resources are C structs inside the server. -Client applications create and manipulate these objects -according to the rules of the X byte stream protocol. -Client applications refer to resources with resource IDs, -which are 32-bit integers that are sent over the network. -Within the server, of course, they are just C structs, and we refer to them -by pointers. - -The DDX layer has several kinds of resources: -.IP \(bu 5 -Window -.IP \(bu 5 -Pixmap -.IP \(bu 5 -Screen -.IP \(bu 5 -Device -.IP \(bu 5 -Colormap -.IP \(bu 5 -Font -.IP \(bu 5 -Cursor -.IP \(bu 5 -Graphics Contexts -.LP -The type names of the more -important server -structs usually end in "Rec," such as "DeviceRec;" -the pointer types usually end in "Ptr," such as "DevicePtr." - -The structs and -important defined constants are declared -in .h files that have names that suggest the name of the object. -For instance, there are two .h files for windows, -window.h and windowstr.h. -window.h defines only what needs to be defined in order to use windows -without peeking inside of them; -windowstr.h defines the structs with all of their components in great detail -for those who need it. -.LP -Three kinds of fields are in these structs: -.IP \(bu 5 -Attribute fields - struct fields that contain values like normal structs -.IP \(bu 5 -Pointers to procedures, or structures of procedures, that operate on the -object -.IP \(bu 5 -A private field (or two) used by your DDX code to keep private data -(probably a pointer -to another data structure), or an array of private fields, which is -sized as the server initializes. -.LP -DIX calls through -the struct's procedure pointers to do its tasks. -These procedures are set either directly or indirectly by DDX procedures. -Most of -the procedures described in the remainder of this -document are accessed through one of these structs. -For example, the procedure to create a pixmap -is attached to a ScreenRec and might be called by using the expression -.nf - - (* pScreen->CreatePixmap)(pScreen, width, height, depth). - -.fi -All procedure pointers must be set to some routine unless noted otherwise; -a null pointer will have unfortunate consequences. - -Procedure routines will be indicated in the documentation by this convention: -.nf - - void pScreen->MyScreenRoutine(arg, arg, ...) - -.fi -as opposed to a free routine, not in a data structure: -.nf - - void MyFreeRoutine(arg, arg, ...) - -.fi - -The attribute fields are mostly set by DIX; DDX should not modify them -unless noted otherwise. - -.NH 1 -DIX LAYER -.XS -DIX LAYER -.XE -.LP -The DIX layer is the machine and device independent part of X. -The source should be common to all operating systems and devices. -The port process should not include changes to this part, therefore internal interfaces to DIX -modules are not discussed, except for public interfaces to the DDX and the OS layers. - -In the process of getting your server to work, if -you think that DIX must be modified for purposes other than bug fixes, -you may be doing something wrong. -Keep looking for a more compatible solution. -When the next release of the X server code is available, -you should be able to just drop in the new DIX code and compile it. -If you change DIX, -you will have to remember what changes you made and will have -to change the new sources before you can update to the new version. - -The heart of the DIX code is a loop called the dispatch loop. -Each time the processor goes around the loop, it sends off accumulated input events -from the input devices to the clients, and it processes requests from the clients. -This loop is the most organized way for the server to -process the asynchronous requests that -it needs to process. -Most of these operations are performed by OS and DDX routines that you must supply. - -.NH 1 -OS LAYER -.XS -OS LAYER -.XE -.LP -This part of the source consists of a few routines that you have to rewrite -for each operating system. -These OS functions maintain the client connections and schedule work -to be done for clients. -They also provide an interface to font files, -font name to file name translation, and -low level memory management. - -.nf - void OsInit() -.fi -OsInit initializes your OS code, performing whatever tasks need to be done. -Frequently there is not much to be done. -The sample server implementation is in Xserver/os/osinit.c. - -.NH 2 -Scheduling and Request Delivery -.XS -Scheduling and Request Delivery -.XE -.LP -The main dispatch loop in DIX creates the illusion of multitasking between -different windows, while the server is itself but a single process. -The dispatch loop breaks up the work for each client into small digestible parts. -Some parts are requests from a client, such as individual graphic commands. -Some parts are events delivered to the client, such as keystrokes from the user. -The processing of events and requests for different -clients can be interleaved with one another so true multitasking -is not needed in the server. -.LP -You must supply some of the pieces for proper scheduling between clients. -.nf - - int WaitForSomething(pClientReady) - int *pClientReady; -.fi -.LP -WaitForSomething is the scheduler procedure you must write that will -suspend your server process until something needs to be done. -This call should -make the server suspend until one or more of the following occurs: -.IP \(bu 5 -There is an input event from the user or hardware (see SetInputCheck()) -.IP \(bu 5 -There are requests waiting from known clients, in which case -you should return a count of clients stored in pClientReady -.IP \(bu 5 -A new client tries to connect, in which case you should create the -client and then continue waiting -.LP -Before WaitForSomething() computes the masks to pass to select, poll or -similar operating system interface, it needs to -see if there is anything to do on the work queue; if so, it must call a DIX -routine called ProcessWorkQueue. -.nf - extern WorkQueuePtr workQueue; - - if (workQueue) - ProcessWorkQueue (); -.fi -.LP -If WaitForSomething() decides it is about to do something that might block -(in the sample server, before it calls select() or poll) it must call a DIX -routine called BlockHandler(). -.nf - - void BlockHandler(pTimeout, pReadmask) - pointer pTimeout; - pointer pReadmask; -.fi -The types of the arguments are for agreement between the OS and DDX -implementations, but the pTimeout is a pointer to the information -determining how long the block is allowed to last, and the -pReadmask is a pointer to the information describing the descriptors -that will be waited on. -.LP -In the sample server, pTimeout is a struct timeval **, and pReadmask is -the address of the select() mask for reading. -.LP -The DIX BlockHandler() iterates through the Screens, for each one calling -its BlockHandler. A BlockHandler is declared thus: -.nf - - void xxxBlockHandler(nscreen, pbdata, pptv, pReadmask) - int nscreen; - pointer pbdata; - struct timeval ** pptv; - pointer pReadmask; -.fi -The arguments are the index of the Screen, the blockData field -of the Screen, and the arguments to the DIX BlockHandler(). -.LP -Immediately after WaitForSomething returns from the -block, even if it didn't actually block, it must call the DIX routine -WakeupHandler(). -.nf - - void WakeupHandler(result, pReadmask) - int result; - pointer pReadmask; -.fi -.LP -Once again, the types are not specified by DIX. The result is the -success indicator for the thing that (may have) blocked, -and the pReadmask is a mask of the descriptors that came active. -In the sample server, result is the result from select() (or equivalent -operating system function), and pReadmask is -the address of the select() mask for reading. -.LP -The DIX WakeupHandler() calls each Screen's -WakeupHandler. A WakeupHandler is declared thus: -.nf - - void xxxWakeupHandler(nscreen, pbdata, err, pReadmask) - int nscreen; - pointer pbdata; - unsigned long result; - pointer pReadmask; -.fi -The arguments are the index of the Screen, the blockData field -of the Screen, and the arguments to the DIX WakeupHandler(). -.LP -In addition to the per-screen BlockHandlers, any module may register -block and wakeup handlers (only together) using: -.nf - - Bool RegisterBlockAndWakeupHandlers (blockHandler, wakeupHandler, blockData) - BlockHandlerProcPtr blockHandler; - WakeupHandlerProcPtr wakeupHandler; - pointer blockData; -.fi -A FALSE return code indicates that the registration failed for lack of -memory. To remove a registered Block handler at other than server reset time -(when they are all removed automatically), use: -.nf - - RemoveBlockAndWakeupHandlers (blockHandler, wakeupHandler, blockData) - BlockHandlerProcPtr blockHandler; - WakeupHandlerProcPtr wakeupHandler; - pointer blockData; -.fi -All three arguments must match the values passed to -RegisterBlockAndWakeupHandlers. -.LP -These registered block handlers are called after the per-screen handlers: -.nf - - void (*BlockHandler) (blockData, pptv, pReadmask) - pointer blockData; - OSTimePtr pptv; - pointer pReadmask; -.fi -.LP -Sometimes block handlers need to adjust the time in a OSTimePtr structure, -which on UNIX family systems is generally represented by a struct timeval -consisting of seconds and microseconds in 32 bit values. -As a convenience to reduce error prone struct timeval computations which -require modulus arithmetic and correct overflow behavior in the face of -millisecond wrapping throrugh 32 bits, -.nf - - void AdjustWaitForDelay(pointer /*waitTime*, unsigned long /* newdelay */) - -.fi -has been provided. -.LP -Any wakeup handlers registered with RegisterBlockAndWakeupHandlers will -be called before the Screen handlers: -.nf - - void (*WakeupHandler) (blockData, err, pReadmask) - pointer blockData; - int err; - pointer pReadmask; -.fi -.LP -The WaitForSomething on the sample server also has a built -in screen saver that darkens the screen if no input happens for a period of time. -The sample server implementation is in Xserver/os/WaitFor.c. -.LP -Note that WaitForSomething() may be called when you already have several -outstanding things (events, requests, or new clients) queued up. -For instance, your server may have just done a large graphics request, -and it may have been a long time since WaitForSomething() was last called. -If many clients have lots of requests queued up, DIX will only service -some of them for a given client -before going on to the next client (see isItTimeToYield, below). -Therefore, WaitForSomething() will have to report that these same clients -still have requests queued up the next time around. -.LP -An implementation should return information on as -many outstanding things as it can. -For instance, if your implementation always checks for client data first and does not -report any input events until there is no client data left, -your mouse and keyboard might get locked out by an application that constantly -barrages the server with graphics drawing requests. -Therefore, as a general rule, input devices should always have priority over graphics -devices. -.LP -A list of indexes (client->index) for clients with data ready to be read or -processed should be returned in pClientReady, and the count of indexes -returned as the result value of the call. -These are not clients that have full requests ready, but any clients who have -any data ready to be read or processed. -The DIX dispatcher -will process requests from each client in turn by calling -ReadRequestFromClient(), below. -.LP -WaitForSomething() must create new clients as they are requested (by -whatever mechanism at the transport level). A new client is created -by calling the DIX routine: -.nf - - ClientPtr NextAvailableClient(ospriv) - pointer ospriv; -.fi -This routine returns NULL if a new client cannot be allocated (e.g. maximum -number of clients reached). The ospriv argument will be stored into the OS -private field (pClient->osPrivate), to store OS private information about the -client. In the sample server, the osPrivate field contains the -number of the socket for this client. See also "New Client Connections." -NextAvailableClient() will call InsertFakeRequest(), so you must be -prepared for this. -.LP -If there are outstanding input events, -you should make sure that the two SetInputCheck() locations are unequal. -The DIX dispatcher will call your implementation of ProcessInputEvents() -until the SetInputCheck() locations are equal. -.LP -The sample server contains an implementation of WaitForSomething(). -The -following two routines indicate to WaitForSomething() what devices should -be waited for. fd is an OS dependent type; in the sample server -it is an open file descriptor. -.nf - - int AddEnabledDevice(fd) - int fd; - - int RemoveEnabledDevice(fd) - int fd; -.fi -These two routines are -usually called by DDX from the initialize cases of the -Input Procedures that are stored in the DeviceRec (the -routine passed to AddInputDevice()). -The sample server implementation of AddEnabledDevice -and RemoveEnabledDevice are in Xserver/os/connection.c. -.NH 3 -Timer Facilities -.XS -Timer Facilities -.XE -.LP -Similarly, the X server or an extension may need to wait for some timeout. -Early X releases implemented this functionality using block and wakeup handlers, -but this has been rewritten to use a general timer facilty, and the -internal screen saver facilties reimplemented to use Timers. -These functions are TimerInit, TimerForce, TimerSet, TimerCheck, TimerCancel, -and TimerFree, as defined in Xserver/include/os.h. A callback function will be called -when the timer fires, along with the current time, and a user provided argument. -.nf - typedef struct _OsTimerRec *OsTimerPtr; - - typedef CARD32 (*OsTimerCallback)( - OsTimerPtr /* timer */, - CARD32 /* time */, - pointer /* arg */); - - OsTimerPtr TimerSet( OsTimerPtr /* timer */, - int /* flags */, - CARD32 /* millis */, - OsTimerCallback /* func */, - pointer /* arg */); - -.fi -.LP -TimerSet returns a pointer to a timer structure and sets a timer to the specified time -with the specified argument. The flags can be TimerAbsolute and TimerForceOld. -The TimerSetOld flag controls whether if the timer is reset and the timer is pending, the -whether the callback function will get called. -The TimerAbsolute flag sets the callback time to an absolute time in the future rather -than a time relative to when TimerSet is called. -TimerFree should be called to free the memory allocated -for the timer entry. -.nf - void TimerInit(void) - - Bool TimerForce(OsTimerPtr /* pTimer */) - - void TimerCheck(void); - - void TimerCancel(OsTimerPtr /* pTimer */) - - void TimerFree(OSTimerPtr /* pTimer */) -.fi -TimerInit frees any exisiting timer entries. TimerForce forces a call to the timer's -callback function and returns true if the timer entry existed, else it returns false and -does not call the callback function. TimerCancel will cancel the specified timer. -TimerFree calls TimerCancel and frees the specified timer. -Calling TimerCheck will force the server to see if any timer callbacks should be called. -.NH 2 -New Client Connections -.XS -New Client Connections -.XE -.LP -The process whereby a new client-server connection starts up is -very dependent upon what your byte stream mechanism. -This section describes byte stream initiation using examples from the TCP/IP -implementation on the sample server. -.LP -The first thing that happens is a client initiates a connection with the server. -How a client knows to do this depends upon your network facilities and the -Xlib implementation. -In a typical scenario, a user named Fred -on his X workstation is logged onto a Cray -supercomputer running a command shell in an X window. Fred can type shell -commands and have the Cray respond as though the X server were a dumb terminal. -Fred types in a command to run an X client application that was linked with Xlib. -Xlib looks at the shell environment variable DISPLAY, which has the -value "fredsbittube:0.0." -The host name of Fred's workstation is "fredsbittube," and the 0s are -for multiple screens and multiple X server processes. -(Precisely what -happens on your system depends upon how X and Xlib are implemented.) -.LP -The client application calls a TCP routine on the -Cray to open a TCP connection for X -to communicate with the network node "fredsbittube." -The TCP software on the Cray does this by looking up the TCP -address of "fredsbittube" and sending an open request to TCP port 6000 -on fredsbittube. -.LP -All X servers on TCP listen for new clients on port 6000 by default; -this is known as a "well-known port" in IP terminology. -.LP -The server receives this request from its port 6000 -and checks where it came from to see if it is on the server's list -of "trustworthy" hosts to talk to. -Then, it opens another port for communications with the client. -This is the byte stream that all X communications will go over. -.LP -Actually, it is a bit more complicated than that. -Each X server process running on the host machine is called a "display." -Each display can have more than one screen that it manages. -"corporatehydra:3.2" represents screen 2 on display 3 on -the multi-screened network node corporatehydra. -The open request would be sent on well-known port number 6003. -.LP -Once the byte stream is set up, what goes on does not depend very much -upon whether or not it is TCP. -The client sends an xConnClientPrefix struct (see Xproto.h) that has the -version numbers for the version of Xlib it is running, some byte-ordering information, -and two character strings used for authorization. -If the server does not like the authorization strings -or the version numbers do not match within the rules, -or if anything else is wrong, it sends a failure -response with a reason string. -.LP -If the information never comes, or comes much too slowly, the connection -should be broken off. You must implement the connection timeout. The -sample server implements this by keeping a timestamp for each still-connecting -client and, each time just before it attempts to accept new connections, it -closes any connection that are too old. -The connection timeout can be set from the command line. -.LP -You must implement whatever authorization schemes you want to support. -The sample server on the distribution tape supports a simple authorization -scheme. The only interface seen by DIX is: -.nf - - char * - ClientAuthorized(client, proto_n, auth_proto, string_n, auth_string) - ClientPtr client; - unsigned int proto_n; - char *auth_proto; - unsigned int string_n; - char *auth_string; -.fi -.LP -DIX will only call this once per client, once it has read the full initial -connection data from the client. If the connection should be -accepted ClientAuthorized() should return NULL, and otherwise should -return an error message string. -.LP -Accepting new connections happens internally to WaitForSomething(). -WaitForSomething() must call the DIX routine NextAvailableClient() -to create a client object. -Processing of the initial connection data will be handled by DIX. -Your OS layer must be able to map from a client -to whatever information your OS code needs to communicate -on the given byte stream to the client. -DIX uses this ClientPtr to refer to -the client from now on. The sample server uses the osPrivate field in -the ClientPtr to store the file descriptor for the socket, the -input and output buffers, and authorization information. -.LP -To initialize the methods you choose to allow clients to connect to -your server, main() calls the routine -.nf - - void CreateWellKnownSockets() -.fi -.LP -This routine is called only once, and not called when the server -is reset. To recreate any sockets during server resets, the following -routine is called from the main loop: -.nf - - void ResetWellKnownSockets() -.fi -Sample implementations of both of these routines are found in -Xserver/os/connection.c. -.LP -For more details, see the section called "Connection Setup" in the X protocol specification. - -.NH 2 -Reading Data from Clients -.XS -Reading Data from Clients -.XE -.LP -Requests from the client are read in as a byte stream by the OS layer. -They may be in the form of several blocks of bytes delivered in sequence; requests may -be broken up over block boundaries or there may be many requests per block. -Each request carries with it length information. -It is the responsibility of the following routine to break it up into request blocks. -.nf - - int ReadRequestFromClient(who) - ClientPtr who; -.fi -.LP -You must write -the routine ReadRequestFromClient() to get one request from the byte stream -belonging to client "who." -You must swap the third and fourth bytes (the second 16-bit word) according to the -byte-swap rules of -the protocol to determine the length of the -request. -This length is measured in 32-bit words, not in bytes. Therefore, the -theoretical maximum request is 256K. -(However, the maximum length allowed is dependent upon the server's input -buffer. This size is sent to the client upon connection. The maximum -size is the constant MAX_REQUEST_SIZE in Xserver/include/os.h) -The rest of the request you return is -assumed NOT to be correctly swapped for internal -use, because that is the responsibility of DIX. -.LP -The 'who' argument is the ClientPtr returned from WaitForSomething. -The return value indicating status should be set to the (positive) byte count if the read is successful, -0 if the read was blocked, or a negative error code if an error happened. -.LP -You must then store a pointer to -the bytes of the request in the client request buffer field; -who->requestBuffer. This can simply be a pointer into your buffer; -DIX may modify it in place but will not otherwise cause damage. -Of course, the request must be contiguous; you must -shuffle it around in your buffers if not. - -The sample server implementation is in Xserver/os/io.c. - -.XS -Inserting Data for Clients -.XE -.LP -DIX can insert data into the client stream, and can cause a "replay" of -the current request. -.nf - - Bool InsertFakeRequest(client, data, count) - ClientPtr client; - char *data; - int count; - - int ResetCurrentRequest(client) - ClientPtr client; -.fi -.LP -InsertFakeRequest() must insert the specified number of bytes of data -into the head of the input buffer for the client. This may be a -complete request, or it might be a partial request. For example, -NextAvailableCient() will insert a partial request in order to read -the initial connection data sent by the client. The routine returns FALSE -if memory could not be allocated. ResetCurrentRequest() -should "back up" the input buffer so that the currently executing request -will be reexecuted. DIX may have altered some values (e.g. the overall -request length), so you must recheck to see if you still have a complete -request. ResetCurrentRequest() should always cause a yield (isItTimeToYield). - -.NH 2 -Sending Events, Errors And Replies To Clients -.XS -Sending Events, Errors And Replies To Clients -.XE -.LP -.nf - - int WriteToClient(who, n, buf) - ClientPtr who; - int n; - char *buf; -.fi -WriteToClient should write n bytes starting at buf to the -ClientPtr "who". -It returns the number of bytes written, but for simplicity, -the number returned must be either the same value as the number -requested, or -1, signaling an error. -The sample server implementation is in Xserver/os/io.c. -.LP -.nf - void SendErrorToClient(client, majorCode, minorCode, resId, errorCode) - ClientPtr client; - unsigned int majorCode; - unsigned int minorCode; - XID resId; - int errorCode; -.fi -SendErrorToClient can be used to send errors back to clients, -although in most cases your request function should simply return -the error code, having set client->errorValue to the appropriate -error value to return to the client, and DIX will call this -function with the correct opcodes for you. -.LP -.nf - - void FlushAllOutput() - - void FlushIfCriticalOutputPending() - - void SetCriticalOutputPending() -.fi -These three routines may be implemented to support buffered or delayed -writes to clients, but at the very least, the stubs must exist. -FlushAllOutput() unconditionally flushes all output to clients; -FlushIfCriticalOutputPending() flushes output only if -SetCriticalOutputPending() has be called since the last time output -was flushed. -The sample server implementation is in Xserver/os/io.c and -actually ignores requests to flush output on a per-client basis -if it knows that there -are requests in that client's input queue. -.NH 2 -Font Support -.XS -Font Support -.XE -.LP -In the sample server, fonts are encoded in disk files or fetched from the -font server. -For disk fonts, there is one file per font, with a file name like -"fixed.pcf". Font server fonts are read over the network using the -X Font Server Protocol. The disk directories containing disk fonts and -the names of the font servers are listed together in the current "font path." - -In principle, you can put all your fonts in ROM or in RAM in your server. -You can put them all in one library file on disk. -You could generate them on the fly from stroke descriptions. By placing the -appropriate code in the Font Library, you will automatically export fonts in -that format both through the X server and the Font server. - -With the incorporation of font-server based fonts and the Speedo donation -from Bitstream, the font interfaces have been moved into a separate -library, now called the Font Library (../fonts/lib). These routines are -shared between the X server and the Font server, so instead of this document -specifying what you must implement, simply refer to the font -library interface specification for the details. All of the interface code to the Font -library is contained in dix/dixfonts.c -.NH 2 -Memory Management -.XS -Memory Management -.XE -.LP -Memory management is based on functions in the C runtime library. -Xalloc(), Xrealloc(), and Xfree() work just like malloc(), realloc(), -and free(), except that you can pass a null pointer to Xrealloc() to -have it allocate anew or pass a null pointer to Xfree() and nothing -will happen. The versions in the sample server also do some checking -that is useful for debugging. Consult a C runtime library reference -manual for more details. - -The macros ALLOCATE_LOCAL and DEALLOCATE_LOCAL are provided in -Xserver/include/os.h. These are useful if your compiler supports -alloca() (or some method of allocating memory from the stack); and are -defined appropriately on systems which support it. - -Treat memory allocation carefully in your implementation. Memory -leaks can be very hard to find and are frustrating to a user. An X -server could be running for days or weeks without being reset, just -like a regular terminal. If you leak a few dozen k per day, that will -add up and will cause problems for users that leave their workstations -on. - -.NH 2 -Client Scheduling -.XS -Client Scheduling -.XE -.LP -The X server -has the ability to schedule clients much like an operating system would, -suspending and restarting them without regard for the state of their input -buffers. This functionality allows the X server to suspend one client and -continue processing requests from other clients while waiting for a -long-term network activity (like loading a font) before continuing with the -first client. -.nf - Bool isItTimeToYield; -.fi -.LP -isItTimeToYield is a global variable you can set -if you want to tell -DIX to end the client's "time slice" and start paying attention to the next client. -After the current request is finished, DIX will move to the next client. -.LP -In the sample -server, ReadRequestFromClient() sets isItTimeToYield after -10 requests packets in a row are read from the same client. -.LP -This scheduling algorithm can have a serious effect upon performance when two -clients are drawing into their windows simultaneously. -If it allows one client to run until its request -queue is empty by ignoring isItTimeToYield, the client's queue may -in fact never empty and other clients will be blocked out. -On the other hand, if it switchs between different clients too quickly, -performance may suffer due to too much switching between contexts. -For example, if a graphics processor needs to be set up with drawing modes -before drawing, and two different clients are drawing with -different modes into two different windows, you may -switch your graphics processor modes so often that performance is impacted. -.LP -See the Strategies document for -heuristics on setting isItTimeToYield. -.LP -The following functions provide the ability to suspend request -processing on a particular client, resuming it at some later time: -.nf - - int IgnoreClient (who) - ClientPtr who; - - int AttendClient (who) - ClientPtr who; -.fi -Ignore client is responsible for pretending that the given client doesn't -exist. WaitForSomething should not return this client as ready for reading -and should not return if only this client is ready. AttendClient undoes -whatever IgnoreClient did, setting it up for input again. -.LP -Three functions support "process control" for X clients: -.nf - - Bool ClientSleep (client, function, closure) - ClientPtr client; - Bool (*function)(); - pointer closure; - -.fi -.LP -This suspends the current client (the calling routine is responsible for -making its way back to Dispatch()). No more X requests will be processed -for this client until ClientWakeup is called. -.nf - - Bool ClientSignal (client) - ClientPtr client; - -.fi -.LP -This function causes a call to the (*function) parameter passed to -ClientSleep to be queued on the work queue. This does not automatically -"wakeup" the client, but the function called is free to do so by calling: -.nf - - ClientWakeup (client) - ClientPtr client; - -.fi -.LP -This re-enables X request processing for the specified client. -.NH 2 -Other OS Functions -.XS -Other OS Functions -.XE -.LP -.nf - void - ErrorF(char *f, ...) - - void - FatalError(char *f, ...) - - void - Error(str) - char *str; -.fi -.LP -You should write these three routines to provide for diagnostic output -from the dix and ddx layers, although implementing them to produce no -output will not affect the correctness of your server. ErrorF() and -FatalError() take a printf() type of format specification in the first -argument and an implementation-dependent number of arguments following -that. Normally, the formats passed to ErrorF() and FatalError() -should be terminated with a newline. Error() provides an os interface -for printing out the string passed as an argument followed by a -meaningful explanation of the last system error. Normally the string -does not contain a newline, and it is only called by the ddx layer. -In the sample implementation, Error() uses the perror() function. -.LP -After printing the message arguments, FatalError() must be implemented -such that the server will call AbortDDX() to give the ddx layer -a chance to reset the hardware, and then -terminate the server; it must not return. -.LP -The sample server implementation for these routines -is in Xserver/os/util.c. -.NH 2 -Idiom Support -.XS -Idiom Support -.XE -.LP -The DBE specification introduces the notion of idioms, which are -groups of X requests which can be executed more efficiently when taken -as a whole compared to being performed individually and sequentially. -This following server internal support to allows DBE -implementations, as well as other parts of the server, -to do idiom processing. -.LP -.nf - - xReqPtr PeekNextRequest(xReqPtr req, ClientPtr client, Bool readmore) -.fi -.LP -If req is NULL, the return value will be a pointer to the start of the -complete request that follows the one currently being executed for the -client. If req is not NULL, the function assumes that req is a -pointer to a request in the client's request buffer, and the return -value will be a pointer to the the start of the complete request that -follows req. If the complete request is not available, the function -returns NULL; pointers to partial requests will never be returned. If -(and only if) readmore is TRUE, PeekNextRequest should try to read an -additional request from the client if one is not already available in -the client's request buffer. If PeekNextRequest reads more data into -the request buffer, it should not move or change the existing data. -.LP -.nf - - void SkipRequests(xReqPtr req, ClientPtr client, int numskipped) -.fi -.LP -The requests for the client up to and including the one specified by -req will be skipped. numskipped must be the number of requests being -skipped. Normal request processing will resume with the request that -follows req. The caller must not have modified the contents of the -request buffer in any way (e.g., by doing byte swapping in place). -.LP -Additionally, two macros in os.h operate on the xReq -pointer returned by PeekNextRequest: -.LP -.nf - - int ReqLen(xReqPtr req, ClientPtr client) -.fi -.LP -The value of ReqLen is the request length in bytes of the given xReq. -.LP -.nf - - otherReqTypePtr CastxReq(xReq *req, otherReqTypePtr) -.fi -.LP -The value of CastxReq is the conversion of the given request pointer -to an otherReqTypePtr (which should be a pointer to a protocol -structure type). Only those fields which come after the length field -of otherReqType may be accessed via the returned pointer. -.LP -Thus the first two fields of a request, reqType and data, can be -accessed directly using the xReq * returned by PeekNextRequest. The -next field, the length, can be accessed with ReqLen. Fields beyond -that can be accessed with CastxReq. This complexity was necessary -because of the reencoding of core protocol that can happen due to the -BigRequests extension. -.NH 1 -DDX LAYER -.XS -DDX LAYER -.XE -.LP -This section describes the -interface between DIX and DDX. -While there may be an OS-dependent driver interface between DDX -and the physical device, that interface is left to the DDX -implementor and is not specified here. -.LP -The DDX layer does most of its work through procedures that are -pointed to by different structs. -As previously described, the behavior of these resources is largely determined by -these procedure pointers. -Most of these routines are for graphic display on the screen or support functions thereof. -The rest are for user input from input devices. - -.NH 2 -INPUT -.XS -INPUT -.XE -.LP -In this document "input" refers to input from the user, -such as mouse, keyboard, and -bar code readers. -X input devices are of several types: keyboard, pointing device, and -many others. The core server has support for extension devices as -described by the X Input Extension document; the interfaces used by -that extension are described elsewhere. The core devices are actually -implemented as two collections of devices, the mouse is a ButtonDevice, -a ValuatorDevice and a PtrFeedbackDevice while the keyboard is a KeyDevice, -a FocusDevice and a KbdFeedbackDevice. Each part implements a portion of -the functionality of the device. This abstraction is hidden from view for -core devices by DIX. - -You, the DDX programmer, are -responsible for some of the routines in this section. -Others are DIX routines that you should call to do the things you need to do in these DDX routines. -Pay attention to which is which. - -.NH 3 -Input Device Data Structures -.XS -Input Device Data Structures -.XE -.LP -DIX keeps a global directory of devices in a central data structure -called InputInfo. -For each device there is a device structure called a DeviceRec. -DIX can locate any DeviceRec through InputInfo. -In addition, it has a special pointer to identify the main pointing device -and a special pointer to identify the main keyboard. -.LP -The DeviceRec (Xserver/include/input.h) is a device-independent -structure that contains the state of an input device. -A DevicePtr is simply a pointer to a DeviceRec. -.LP -An xEvent describes an event the server reports to a client. -Defined in Xproto.h, it is a huge struct of union of structs that have fields for -all kinds of events. -All of the variants overlap, so that the struct is actually very small in memory. - -.NH 3 -Processing Events -.XS -Processing Events -.XE -.LP -The main DDX input interface is the following routine: -.nf - - void ProcessInputEvents() -.fi -You must write this routine to deliver input events from the user. -DIX calls it when input is pending (see next section), and possibly -even when it is not. -You should write it to get events from each device and deliver -the events to DIX. -To deliver the events to DIX, DDX should call the following -routine: -.nf - - void DevicePtr->processInputProc(pEvent, device, count) - xEventPtr events; - DeviceIntPtr device; - int count; -.fi -This is the "input proc" for the device, a DIX procedure. -DIX will fill in this procedure pointer to one of its own routines by -the time ProcessInputEvents() is called the first time. -Call this input proc routine as many times as needed to -deliver as many events as should be delivered. -DIX will buffer them up and send them out as needed. Count is set -to the number of event records which make up one atomic device event and -is always 1 for the core devices (see the X Input Extension for descriptions -of devices which may use count > 1). - -For example, your ProcessInputEvents() routine might check the mouse and the -keyboard. -If the keyboard had several keystrokes queued up, it could just call -the keyboard's processInputProc as many times as needed to flush its internal queue. - -event is an xEvent struct you pass to the input proc. -When the input proc returns, it is finished with the event rec, and you can fill -in new values and call the input proc again with it. - -You should deliver the events in the same order that they were generated. - -For keyboard and pointing devices the xEvent variant should be keyButtonPointer. -Fill in the following fields in the xEvent record: -.nf - - type is one of the following: KeyPress, KeyRelease, ButtonPress, - ButtonRelease, or MotionNotify - detail for KeyPress or KeyRelease fields, this should be the - key number (not the ASCII code); otherwise unused - time is the time that the event happened (32-bits, in milliseconds, arbitrary origin) - rootX is the x coordinate of cursor - rootY is the y coordinate of cursor - -.fi -The rest of the fields are filled in by DIX. -.LP -The time stamp is maintained by your code in the DDX layer, and it is your responsibility to -stamp all events correctly. -.LP -The x and y coordinates of the pointing device and the time must be filled in for all event types -including keyboard events. -.LP -The pointing device must report all button press and release events. -In addition, it should report a MotionNotify event every time it gets called -if the pointing device has moved since the last notify. -Intermediate pointing device moves are stored in a special GetMotionEvents buffer, -because most client programs are not interested in them. - -There are quite a collection of sample implementations of this routine, -one for each supported device. - -.NH 3 -Telling DIX When Input is Pending -.XS -Telling DIX When Input is Pending -.XE -.LP -In the server's dispatch loop, DIX checks to see -if there is any device input pending whenever WaitForSomething() returns. -If the check says that input is pending, DIX calls the -DDX routine ProcessInputEvents(). -.LP -This check for pending input must be very quick; a procedure call -is too slow. -The code that does the check is a hardwired IF -statement in DIX code that simply compares the values -pointed to by two pointers. -If the values are different, then it assumes that input is pending and -ProcessInputEvents() is called by DIX. -.LP -You must pass pointers to DIX to tell it what values to compare. -The following procedure -is used to set these pointers: -.nf - - void SetInputCheck(p1, p2) - long *p1, *p2; -.fi -.LP -You should call it sometime during initialization to indicate to DIX the -correct locations to check. -You should -pay special attention to the size of what they actually point to, -because the locations are assumed to be longs. - -These two pointers are initialized by DIX -to point to arbitrary values that -are different. -In other words, if you forget to call this routine during initialization, -the worst thing that will happen is that -ProcessInputEvents will be called when -there are no events to process. - -p1 and p2 might -point at the head and tail of some shared -memory queue. -Another use would be to have one point at a constant 0, with the -other pointing at some mask containing 1s -for each input device that has -something pending. - -The DDX layer of the sample server calls SetInputCheck() -once when the -server's private internal queue is initialized. -It passes pointers to the queue's head and tail. See Xserver/mi/mieq.c. - -.nf - int TimeSinceLastInputEvent() -.fi -DDX must time stamp all hardware input -events. But DIX sometimes needs to know the -time and the OS layer needs to know the time since the last hardware -input event in -order for the screen saver to work. TimeSinceLastInputEvent() returns -the this time in milliseconds. - -.NH 3 -Controlling Input Devices -.XS -Controlling Input Devices -.XE -.LP -You must write four routines to do various device-specific -things with the keyboard and pointing device. -They can have any name you wish because -you pass the procedure pointers to DIX routines. - -.nf - - int pInternalDevice->valuator->GetMotionProc(pdevice, coords, start, stop, pScreen) - DeviceIntPtr pdevice; - xTimecoord * coords; - unsigned long start; - unsigned long stop; - ScreenPtr pScreen; -.fi -You write this DDX routine to fill in coords with all the motion -events that have times (32-bit count of milliseconds) between time -start and time stop. It should return the number of motion events -returned. If there is no motion events support, this routine should -do nothing and return zero. The maximum number of coords to return is -set in InitPointerDeviceStruct(), below. - -When the user drags the pointing device, the cursor position -theoretically sweeps through an infinite number of points. Normally, -a client that is concerned with points other than the starting and -ending points will receive a pointer-move event only as often as the -server generates them. (Move events do not queue up; each new one -replaces the last in the queue.) A server, if desired, can implement -a scheme to save these intermediate events in a motion buffer. A -client application, like a paint program, may then request that these -events be delivered to it through the GetMotionProc routine. -.nf - - void pInternalDevice->bell->BellProc(percent, pDevice, ctrl, unknown) - int percent; - DeviceIntPtr pDevice; - pointer ctrl; - int class; -.fi -You need to write this routine to ring the bell on the keyboard. -loud is a number from 0 to 100, with 100 being the loudest. -Class is either BellFeedbackClass or KbdFeedbackClass (from XI.h). -.nf - - void pInternalDevice->somedevice->CtrlProc(device, ctrl) - DevicePtr device; - SomethingCtrl *ctrl; - -.fi -.LP -You write two versions of this procedure, one for the keyboard and one for the pointing device. -DIX calls it to inform DDX when a client has requested changes in the current -settings for the particular device. -For a keyboard, this might be the repeat threshold and rate. -For a pointing device, this might be a scaling factor (coarse or fine) for position reporting. -See input.h for the ctrl structures. - -.NH 3 -Input Initialization -.XS -Input Initialization -.XE -.LP -Input initialization is a bit complicated. -It all starts with InitInput(), a routine that you write to call -AddInputDevice() twice -(once for pointing device and once for keyboard.) -You also want to call RegisterKeyboardDevice() and RegisterPointerDevice() -on them. - -When you Add the devices, a routine you supply for each device -gets called to initialize them. -Your individual initialize routines must call InitKeyboardDeviceStruct() -or InitPointerDeviceStruct(), depending upon which it is. -In other words, you indicate twice that the keyboard is the keyboard and -the pointer is the pointer. -.nf - - void InitInput(argc, argv) - int argc; - char **argv; -.fi -.LP -InitInput is a DDX routine you must write to initialize the -input subsystem in DDX. -It must call AddInputDevice() for each device that might generate events. -In addition, you must register the main keyboard and pointing devices by -calling RegisterPointerDevice() and RegisterKeyboardDevice(). -.nf - - DevicePtr AddInputDevice(deviceProc, autoStart) - DeviceProc deviceProc; - Bool autoStart; -.fi -.LP -AddInputDevice is a DIX routine you call to create a device object. -deviceProc is a DDX routine that is called by DIX to do various operations. -AutoStart should be TRUE for devices that need to be turned on at -initialization time with a special call, as opposed to waiting for some -client application to -turn them on. -This routine returns NULL if sufficient memory cannot be allocated to -install the device. - -Note also that except for the main keyboard and pointing device, -an extension is needed to provide for a client interface to a device. -.nf - - void RegisterPointerDevice(device) - DevicePtr device; -.fi -.LP -RegisterPointerDevice is a DIX routine that your DDX code calls that -makes that device the main pointing device. -This routine is called once upon initialization and cannot be called again. -.nf - - void RegisterKeyboardDevice(device) - DevicePtr device; -.fi -.LP -RegisterKeyboardDevice makes the given device the main keyboard. -This routine is called once upon initialization and cannot be called again. - -The following DIX -procedures return the specified DevicePtr. They may or may not be useful -to DDX implementors. -.nf - - DevicePtr LookupKeyboardDevice() -.fi -.LP -LookupKeyboardDevice returns pointer for current main keyboard device. -.nf - - DevicePtr LookupPointerDevice() -.fi -.LP -LookupPointerDevice returns pointer for current main pointing device. - -.LP -A DeviceProc (the kind passed to AddInputDevice()) in the following form: -.nf - - Bool pInternalDevice->DeviceProc(device, action); - DeviceIntPtr device; - int action; -.fi -.LP -You must write a DeviceProc for each device. -device points to the device record. -action tells what action to take; -it will be one of these defined constants (defined in input.h): -.IP \(bu 5 -DEVICE_INIT - -At DEVICE_INIT time, the device should initialize itself by calling -InitPointerDeviceStruct(), InitKeyboardDeviceStruct(), or a similar -routine (see below) -and "opening" the device if necessary. -If you return a non-zero (i.e., != Success) value from the DEVICE_INIT -call, that device will be considered unavailable. If either the main keyboard -or main pointing device cannot be initialized, the DIX code will refuse -to continue booting up. -.IP \(bu 5 -DEVICE_ON - If the DeviceProc is called with DEVICE_ON, then it is -allowed to start -putting events into the client stream by calling through the ProcessInputProc -in the device. -.IP \(bu 5 -DEVICE_OFF - If the DeviceProc is called with DEVICE_OFF, no further -events from that -device should be given to the DIX layer. -The device will appear to be dead to the user. -.IP \(bu 5 -DEVICE_CLOSE - At DEVICE_CLOSE (terminate or reset) time, the device should -be totally closed down. -.nf - - void InitPointerDeviceStruct(device, map, mapLength, - GetMotionEvents, ControlProc, numMotionEvents) - DevicePtr device; - CARD8 *map; - int mapLength; - ValuatorMotionProcPtr ControlProc; - PtrCtrlProcPtr GetMotionEvents; - int numMotionEvents; -.fi -InitPointerDeviceStruct is a DIX routine you call at DEVICE_INIT time to declare -some operating routines and data structures for a pointing device. -map and mapLength are as described in the X Window -System protocol specification. -ControlProc and GetMotionEvents are DDX routines, see above. - -numMotionEvents is for the motion-buffer-size for the GetMotionEvents -request. -A typical length for a motion buffer would be 100 events. -A server that does not implement this capability should set -numMotionEvents to zero. -.nf - - void InitKeyboardDeviceStruct(device, pKeySyms, pModifiers, Bell, ControlProc) - DevicePtr device; - KeySymsPtr pKeySyms; - CARD8 *pModifiers; - BellProcPtr Bell; - KbdCtrlProcPtr ControlProc; - -.fi -You call this DIX routine when a keyboard device is initialized and -its device procedure is called with -DEVICE_INIT. -The formats of the keysyms and modifier maps are defined in -Xserver/include/input.h. -They describe the layout of keys on the keyboards, and the glyphs -associated with them. ( See the next section for information on -setting up the modifier map and the keysym map.) -ControlProc and Bell are DDX routines, see above. - -.NH 3 -Keyboard Mapping and Keycodes -.XS -Keyboard Mapping and Keycodes -.XE -.LP -When you send a keyboard event, you send a report that a given key has -either been pressed or has been released. There must be a keycode for -each key that identifies the key; the keycode-to-key mapping can be -any mapping you desire, because you specify the mapping in a table you -set up for DIX. However, you are restricted by the protocol -specification to keycode values in the range 8 to 255 inclusive. - -The keycode mapping information that you set up consists of the following: -.IP \(bu 5 -A minimum and maximum keycode number -.IP \(bu 5 -An array of sets of keysyms for each key, that is of length -maxkeycode - minkeycode + 1. -Each element of this array is a list of codes for symbols that are on that key. -There is no limit to the number of symbols that can be on a key. -.LP -Once the map is set up, DIX keeps and -maintains the client's changes to it. - -The X protocol defines standard names to indicate the symbol(s) -printed on each keycap. (See X11/keysym.h) - -Legal modifier keys must generate both up and down transitions. When -a client tries to change a modifier key (for instance, to make "A" the -"Control" key), DIX calls the following routine, which should retuurn -TRUE if the key can be used as a modifier on the given device: -.nf - - Bool LegalModifier(key, pDev) - unsigned int key; - DevicePtr pDev; -.fi -.NH 2 -Screens -.XS -Screens -.XE -.LP -Different computer graphics -displays have different capabilities. -Some are simple monochrome -frame buffers that are just lying -there in memory, waiting to be written into. -Others are color displays with many bits per pixel using some color lookup table. -Still others have high-speed graphic processors that prefer to do all of the work -themselves, -including maintaining their own high-level, graphic data structures. - -.NH 3 -Screen Hardware Requirements -.XS -Screen Hardware Requirements -.XE -.LP -The only requirement on screens is that you be able to both read -and write locations in the frame buffer. -All screens must have a depth of 32 or less (unless you use -an X extension to allow a greater depth). -All screens must fit into one of the classes listed in the section -in this document on Visuals and Depths. -.LP -X uses the pixel as its fundamental unit of distance on the screen. -Therefore, most programs will measure everything in pixels. -.LP -The sample server assumes square pixels. -Serious WYSIWYG (what you see is what you get) applications for -publishing and drawing programs will adjust for -different screen resolutions automatically. -Considerable work -is involved in compensating for non-square pixels (a bit in the DDX -code for the sample server but quite a bit in the client applications). - -.NH 3 -Data Structures -.XS -Data Structures -.XE -.LP -X supports multiple screens that are connected to the same -server. Therefore, all the per-screen information is bundled into one data -structure of attributes and procedures, which is the ScreenRec (see -Xserver/include/scrnintstr.h). -The procedure entry points in a ScreenRec operate on -regions, colormaps, cursors, and fonts, because these resources -can differ in format from one screen to another. - -Windows are areas on the screen that can be drawn into by graphic -routines. "Pixmaps" are off-screen graphic areas that can be drawn -into. They are both considered drawables and are described in the -section on Drawables. All graphic operations work on drawables, and -operations are available to copy patches from one drawable to another. - -The pixel image data in all drawables is in a format that is private -to DDX. In fact, each instance of a drawable is associated with a -given screen. Presumably, the pixel image data for pixmaps is chosen -to be conveniently understood by the hardware. All screens in a -single server must be able to handle all pixmaps depths declared in -the connection setup information. -.LP -Pixmap images are transferred to the server in one of two ways: -XYPixmap or ZPimap. XYPixmaps are a series of bitmaps, one for each -bit plane of the image, using the bitmap padding rules from the -connection setup. ZPixmaps are a series of bits, nibbles, bytes or -words, one for each pixel, using the format rules (padding and so on) -for the appropriate depth. -.LP -All screens in a given server must agree on a set of pixmap image -formats (PixmapFormat) to support (depth, number of bits per pixel, -etc.). -.LP -There is no color interpretation of bits in the pixmap. Pixmaps -do not contain pixel values. The interpretation is made only when -the bits are transferred onto the screen. -.LP -The screenInfo structure (in scrnintstr.h) is a global data structure -that has a pointer to an array of ScreenRecs, one for each screen on -the server. (These constitute the one and only description of each -screen in the server.) Each screen has an identifying index (0, 1, 2, ...). -In addition, the screenInfo struct contains global server-wide -details, such as the bit- and byte- order in all bit images, and the -list of pixmap image formats that are supported. The X protocol -insists that these must be the same for all screens on the server. - -.NH 3 -Output Initialization -.XS -Output Initialization -.XE -.LP -.nf - - InitOutput(pScreenInfo, argc, argv) - ScreenInfo *pScreenInfo; - int argc; - char **argv; -.fi -Upon initialization, your DDX routine InitOutput() is called by DIX. -It is passed a pointer to screenInfo to initialize. It is also passed -the argc and argv from main() for your server for the command-line -arguments. These arguments may indicate what or how many screen -device(s) to use or in what way to use them. For instance, your -server command line may allow a "-D" flag followed by the name of the -screen device to use. - -Your InitOutput() routine should initialize each screen you wish to -use by calling AddScreen(), and then it should initialize the pixmap -formats that you support by storing values directly into the -screenInfo data structure. You should also set certain -implementation-dependent numbers and procedures in your screenInfo, -which determines the pixmap and scanline padding rules for all screens -in the server. -.nf - - int AddScreen(scrInitProc, argc, argv) - Bool (*scrInitProc)(); - int argc; - char **argv; -.fi -You should call AddScreen(), a DIX procedure, in InitOutput() once for -each screen to add it to the screenInfo database. The first argument -is an initialization procedure for the screen that you supply. The -second and third are the argc and argv from main(). It returns the -screen number of the screen installed, or -1 if there is either -insufficient memory to add the screen, or (*scrInitProc) returned -FALSE. - -The scrInitProc should be of the following form: -.nf - - Bool scrInitProc(iScreen, pScreen, argc, argv) - int iScreen; - ScreenPtr pScreen; - int argc; - char **argv; -.fi -iScreen is the index for this screen; 0 for the first one initialized, -1 for the second, etc. pScreen is the pointer to the screen's new -ScreenRec. argc and argv are as before. Your screen initialize -procedure should return TRUE upon success or FALSE if the screen -cannot be initialized (for instance, if the screen hardware does not -exist on this machine). - -This procedure must determine what actual device it is supposed to initialize. -If you have a different procedure for each screen, then it is no problem. -If you have the same procedure for multiple screens, it may have trouble -figuring out which screen to initialize each time around, especially if -InitOutput() does not initialize all of the screens. -It is probably easiest to have one procedure for each screen. - -The initialization procedure should fill in all the screen procedures -for that screen (windowing functions, region functions, etc.) and certain -screen attributes for that screen. - -.NH 3 -Region Routines in the ScreenRec -.XS -Region Routines in the ScreenRec -.XE -.LP -A region is a dynamically allocated data structure that describes an -irregularly shaped piece of real estate in XY pixel space. You can -think of it as a set of pixels on the screen to be operated upon with -set operations such as AND and OR. -.LP -A region is frequently implemented as a list of rectangles or bitmaps -that enclose the selected pixels. Region operators control the -"clipping policy," or the operations that work on regions. (The -sample server uses YX-banded rectangles. Unless you have something -already implemented for your graphics system, you should keep that -implementation.) The procedure pointers to the region operators are -located in the ScreenRec data structure. The definition of a region -can be found in the file Xserver/include/regionstr.h. The region code -is found in Xserver/mi/miregion.c. DDX implementations using other -region formats will need to supply different versions of the region -operators. - -Since the list of rectangles is unbounded in size, part of the region -data structure is usually a large, dynamically allocated chunk of -memory. As your region operators calculate logical combinations of -regions, these blocks may need to be reallocated by your region -software. For instance, in the sample server, a RegionRec has some -header information and a pointer to a dynamically allocated rectangle -list. Periodically, the rectangle list needs to be expanded with -Xrealloc(), whereupon the new pointer is remembered in the RegionRec. - -Most of the region operations come in two forms: a function pointer in -the Screen structure, and a macro. The server can be compiled so that -the macros make direct calls to the appropriate functions (instead of -indirecting through a screen function pointer), or it can be compiled -so that the macros are identical to the function pointer forms. -Making direct calls is faster on many architectures. -.nf - - RegionPtr pScreen->RegionCreate( rect, size) - BoxPtr rect; - int size; - - macro: RegionPtr REGION_CREATE(pScreen, rect, size) - -.fi -RegionCreate creates a region that describes ONE rectangle. The -caller can avoid unnecessary reallocation and copying by declaring the -probable maximum number of rectangles that this region will need to -describe itself. Your region routines, though, cannot fail just -because the region grows beyond this size. The caller of this routine -can pass almost anything as the size; the value is merely a good guess -as to the maximum size until it is proven wrong by subsequent use. -Your region procedures are then on their own in estimating how big the -region will get. Your implementation might ignore size, if -applicable. -.nf - - void pScreen->RegionInit (pRegion, rect, size) - RegionPtr pRegion; - BoxPtr rect; - int size; - - macro: REGION_INIT(pScreen, pRegion, rect, size) - -.fi -Given an existing raw region structure (such as an local variable), this -routine fills in the appropriate fields to make this region as usable as -one returned from RegionCreate. This avoids the additional dynamic memory -allocation overhead for the region structure itself. -.nf - - Bool pScreen->RegionCopy(dstrgn, srcrgn) - RegionPtr dstrgn, srcrgn; - - macro: Bool REGION_COPY(pScreen, dstrgn, srcrgn) - -.fi -RegionCopy copies the description of one region, srcrgn, to another -already-created region, -dstrgn; returning TRUE if the copy succeeded, and FALSE otherwise. -.nf - - void pScreen->RegionDestroy( pRegion) - RegionPtr pRegion; - - macro: REGION_DESTROY(pScreen, pRegion) - -.fi -RegionDestroy destroys a region and frees all allocated memory. -.nf - - void pScreen->RegionUninit (pRegion) - RegionPtr pRegion; - - macro: REGION_UNINIT(pScreen, pRegion) - -.fi -Frees everything except the region structure itself, useful when the -region was originally passed to RegionInit instead of received from -RegionCreate. When this call returns, pRegion must not be reused until -it has been RegionInit'ed again. -.nf - - Bool pScreen->Intersect(newReg, reg1, reg2) - RegionPtr newReg, reg1, reg2; - - macro: Bool REGION_INTERSECT(pScreen, newReg, reg1, reg2) - - Bool pScreen->Union(newReg, reg1, reg2) - RegionPtr newReg, reg1, reg2; - - macro: Bool REGION_UNION(pScreen, newReg, reg1, reg2) - - Bool pScreen->Subtract(newReg, regMinuend, regSubtrahend) - RegionPtr newReg, regMinuend, regSubtrahend; - - macro: Bool REGION_UNION(pScreen, newReg, regMinuend, regSubtrahend) - - Bool pScreen->Inverse(newReg, pReg, pBox) - RegionPtr newReg, pReg; - BoxPtr pBox; - - macro: Bool REGION_INVERSE(pScreen, newReg, pReg, pBox) - -.fi -The above four calls all do basic logical operations on regions. They -set the new region (which already exists) to describe the logical -intersection, union, set difference, or inverse of the region(s) that -were passed in. Your routines must be able to handle a situation -where the newReg is the same region as one of the other region -arguments. - -The subtract function removes the Subtrahend from the Minuend and -puts the result in newReg. - -The inverse function returns a region that is the pBox minus the -region passed in. (A true "inverse" would make a region that extends -to infinity in all directions but has holes in the middle.) It is -undefined for situations where the region extends beyond the box. - -Each routine must return the value TRUE for success. -.nf - - void pScreen->RegionReset(pRegion, pBox) - RegionPtr pRegion; - BoxPtr pBox; - - macro: REGION_RESET(pScreen, pRegion, pBox) - -.fi -RegionReset sets the region to describe -one rectangle and reallocates it to a size of one rectangle, if applicable. -.nf - - void pScreen->TranslateRegion(pRegion, x, y) - RegionPtr pRegion; - int x, y; - - macro: REGION_TRANSLATE(pScreen, pRegion, x, y) - -.fi -TranslateRegion simply moves a region +x in the x direction and +y in the y -direction. -.nf - - int pScreen->RectIn(pRegion, pBox) - RegionPtr pRegion; - BoxPtr pBox; - - macro: int RECT_IN_REGION(pScreen, pRegion, pBox) - -.fi -RectIn returns one of the defined constants rgnIN, rgnOUT, or rgnPART, -depending upon whether the box is entirely inside the region, entirely -outside of the region, or partly in and partly out of the region. -These constants are defined in Xserver/include/region.h. -.nf - - Bool pScreen->PointInRegion(pRegion, x, y, pBox) - RegionPtr pRegion; - int x, y; - BoxPtr pBox; - - macro: Bool POINT_IN_REGION(pScreen, pRegion, x, y, pBox) - -.fi -PointInRegion returns true if the point x, y is in the region. In -addition, it fills the rectangle pBox with coordinates of a rectangle -that is entirely inside of pRegion and encloses the point. In the mi -implementation, it is the largest such rectangle. (Due to the sample -server implementation, this comes cheaply.) - -This routine used by DIX when tracking the pointing device and -deciding whether to report mouse events or change the cursor. For -instance, DIX needs to change the cursor when it moves from one window -to another. Due to overlapping windows, the shape to check may be -irregular. A PointInRegion() call for every pointing device movement -may be too expensive. The pBox is a kind of wake-up box; DIX need not -call PointInRegion() again until the cursor wanders outside of the -returned box. -.nf - - Bool pScreen->RegionNotEmpty(pRegion) - RegionPtr pRegion; - - macro: Bool REGION_NOTEMPTY(pScreen, pRegion) - -.fi -RegionNotEmpty is a boolean function that returns -true or false depending upon whether the region encloses any pixels. -.nf - - void pScreen->RegionEmpty(pRegion) - RegionPtr pRegion; - - macro: REGION_EMPTY(pScreen, pRegion) - -.fi -RegionEmpty sets the region to be empty. -.nf - - BoxPtr pScreen->RegionExtents(pRegion) - RegionPtr pRegion; - - macro: REGION_EXTENTS(pScreen, pRegion) - -.fi -RegionExtents returns a rectangle that is the smallest -possible superset of the entire region. -The caller will not modify this rectangle, so it can be the one -in your region struct. -.nf - - Bool pScreen->RegionAppend (pDstRgn, pRegion) - RegionPtr pDstRgn; - RegionPtr pRegion; - - macro: Bool REGION_APPEND(pScreen, pDstRgn, pRegion) - - Bool pScreen->RegionValidate (pRegion, pOverlap) - RegionPtr pRegion; - Bool *pOverlap; - - macro: Bool REGION_VALIDATE(pScreen, pRegion, pOverlap) - -.fi -These functions provide an optimization for clip list generation and -must be used in conjunction. The combined effect is to produce the -union of a collection of regions, by using RegionAppend several times, -and finally calling RegionValidate which takes the intermediate -representation (which needn't be a valid region) and produces the -desired union. pOverlap is set to TRUE if any of the original -regions overlap; FALSE otherwise. -.nf - - RegionPtr pScreen->BitmapToRegion (pPixmap) - PixmapPtr pPixmap; - - macro: RegionPtr BITMAP_TO_REGION(pScreen, pPixmap) - -.fi -Given a depth-1 pixmap, this routine must create a valid region which -includes all the areas of the pixmap filled with 1's and excludes the -areas filled with 0's. This routine returns NULL if out of memory. -.nf - - RegionPtr pScreen->RectsToRegion (nrects, pRects, ordering) - int nrects; - xRectangle *pRects; - int ordering; - - macro: RegionPtr RECTS_TO_REGION(pScreen, nrects, pRects, ordering) - -.fi -Given a client-supplied list of rectangles, produces a region which includes -the union of all the rectangles. Ordering may be used as a hint which -describes how the rectangles are sorted. As the hint is provided by a -client, it must not be required to be correct, but the results when it is -not correct are not defined (core dump is not an option here). -.nf - - void pScreen->SendGraphicsExpose(client,pRegion,drawable,major,minor) - ClientPtr client; - RegionPtr pRegion; - XID drawable; - int major; - int minor; - -.fi -SendGraphicsExpose dispatches a list of GraphicsExposure events which -span the region to the specified client. If the region is empty, or -a NULL pointer, a NoExpose event is sent instead. -.NH 3 -Cursor Routines for a Screen -.XS -Cursor Routines for a Screen -.XE -.LP -A cursor is the visual form tied to the pointing device. The default -cursor is an "X" shape, but the cursor can have any shape. When a -client creates a window, it declares what shape the cursor will be -when it strays into that window on the screen. - -For each possible shape the cursor assumes, there is a CursorRec data -structure. This data structure contains a pointer to a CursorBits -data structure which contains a bitmap for the image of the cursor and -a bitmap for a mask behind the cursor, in addition, the CursorRec data -structure contains foreground and background colors for the cursor. -The CursorBits data structure is shared among multiple CursorRec -structures which use the same font and glyph to describe both source -and mask. The cursor image is applied to the screen by applying the -mask first, clearing 1 bits in its form to the background color, and -then overwriting on the source image, in the foreground color. (One -bits of the source image that fall on top of zero bits of the mask -image are undefined.) This way, a cursor can have transparent parts, -and opaque parts in two colors. X allows any cursor size, but some -hardware cursor schemes allow a maximum of N pixels by M pixels. -Therefore, you are allowed to transform the cursor to a smaller size, -but be sure to include the hot-spot. - -CursorBits in Xserver/include/cursorstr.h is a device-independent -structure containing a device-independent representation of the bits -for the source and mask. (This is possible because the bitmap -representation is the same for all screens.) - -When a cursor is created, it is "realized" for each screen. At -realization time, each screen has the chance to convert the bits into -some other representation that may be more convenient (for instance, -putting the cursor into off-screen memory) and set up its -device-private area in either the CursorRec data structure or -CursorBits data structure as appropriate to possibly point to whatever -data structures are needed. It is more memory-conservative to share -realizations by using the CursorBits private field, but this makes the -assumption that the realization is independent of the colors used -(which is typically true). For instance, the following are the device -private entries for a particular screen and cursor: -.nf - - pCursor->devPriv[pScreen->myNum] - pCursor->bits->devPriv[pScreen->myNum] - -.fi -This is done because the change from one cursor shape to another must -be fast and responsive; the cursor image should be able to flutter as -fast as the user moves it across the screen. - -You must implement the following routines for your hardware: -.nf - - Bool pScreen->RealizeCursor( pScr, pCurs) - ScreenPtr pScr; - CursorPtr pCurs; - - Bool pScreen->UnrealizeCursor( pScr, pCurs) - ScreenPtr pScr; - CursorPtr pCurs; - -.fi -RealizeCursor and UnrealizeCursor should realize (allocate and -calculate all data needed) and unrealize (free the dynamically -allocated data) a given cursor when DIX needs them. They are called -whenever a device-independent cursor is created or destroyed. The -source and mask bits pointed to by fields in pCurs are undefined for -bits beyond the right edge of the cursor. This is so because the bits -are in Bitmap format, which may have pad bits on the right edge. You -should inhibit UnrealizeCursor() if the cursor is currently in use; -this happens when the system is reset. -.nf - - Bool pScreen->DisplayCursor( pScr, pCurs) - ScreenPtr pScr; - CursorPtr pCurs; - -.fi -DisplayCursor should change the cursor on the given screen to the one -passed in. It is called by DIX when the user moves the pointing -device into a different window with a different cursor. The hotspot -in the cursor should be aligned with the current cursor position. -.nf - - void pScreen->RecolorCursor( pScr, pCurs, displayed) - ScreenPtr pScr; - CursorPtr pCurs; - Bool displayed; -.fi -.LP -RecolorCursor notifies DDX that the colors in pCurs have changed and -indicates whether this is the cursor currently being displayed. If it -is, the cursor hardware state may have to be updated. Whether -displayed or not, state created at RealizeCursor time may have to be -updated. A generic version, miRecolorCursor, may be used that -does an unrealize, a realize, and possibly a display (in micursor.c); -however this constrains UnrealizeCursor and RealizeCursor to always return -TRUE as no error indication is returned here. -.nf - - void pScreen->ConstrainCursor( pScr, pBox) - ScreenPtr pScr; - BoxPtr pBox; - -.fi -ConstrainCursor should cause the cursor to restrict its motion to the -rectangle pBox. DIX code is capable of enforcing this constraint by -forcefully moving the cursor if it strays out of the rectangle, but -ConstrainCursor offers a way to send a hint to the driver or hardware -if such support is available. This can prevent the cursor from -wandering out of the box, then jumping back, as DIX forces it back. -.nf - - void pScreen->PointerNonInterestBox( pScr, pBox) - ScreenPtr pScr; - BoxPtr pBox; - -.fi -PointerNonInterestBox is DIX's way of telling the pointing device code -not to report motion events while the cursor is inside a given -rectangle on the given screen. It is optional and, if not -implemented, it should do nothing. This routine is called only when -the client has declared that it is not interested in motion events in -a given window. The rectangle you get may be a subset of that window. -It saves DIX code the time required to discard uninteresting mouse -motion events. This is only a hint, which may speed performance. -Nothing in DIX currently calls PointerNonInterestBox. -.nf - - void pScreen->CursorLimits( pScr, pCurs, pHotBox, pTopLeftBox) - ScreenPtr pScr; - CursorPtr pCurs; - BoxPtr pHotBox; - BoxPtr pTopLeftBox; /* return value */ - -.fi -.LP -CursorLimits should calculate the box that the cursor hot spot is -physically capable of moving within, as a function of the screen pScr, -the device-independent cursor pCurs, and a box that DIX hypothetically -would want the hot spot confined within, pHotBox. This routine is for -informing DIX only; it alters no state within DDX. -.nf - - Bool pScreen->SetCursorPosition( pScr, newx, newy, generateEvent) - ScreenPtr pScr; - int newx; - int newy; - Bool generateEvent; - -.fi -.LP -SetCursorPosition should artificially move the cursor as though the -user had jerked the pointing device very quickly. This is called in -response to the WarpPointer request from the client, and at other -times. If generateEvent is True, the device should decide whether or -not to call ProcessInputEvents() and then it must call -DevicePtr->processInputProc. Its effects are, of course, limited in -value for absolute pointing devices such as a tablet. -.nf - - void NewCurrentScreen(newScreen, x, y) - ScreenPtr newScreen; - int x,y; - -.fi -.LP -If your ddx provides some mechanism for the user to magically move the -pointer between multiple screens, you need to inform DIX when this -occurs. You should call NewCurrentScreen to accomplish this, specifying -the new screen and the new x and y coordinates of the pointer on that screen. - -.NH 3 -Visuals, Depths and Pixmap Formats for Screens -.XS -Visuals, Depths and Pixmap Formats for Screens -.XE -.LP -The "depth" of a image is the number of bits that are used per pixel to display it. - -The "bits per pixel" of a pixmap image that is sent over the client -byte stream is a number that is either 4, 8, 16, 24 or 32. It is the -number of bits used per pixel in Z format. For instance, a pixmap -image that has a depth of six is best sent in Z format as 8 bits per -pixel. - -A "pixmap image format" or a "pixmap format" is a description of the -format of a pixmap image as it is sent over the byte stream. For each -depth available on a server, there is one and only one pixmap format. -This pixmap image format gives the bits per pixel and the scanline -padding unit. (For instance, are pixel rows padded to bytes, 16-bit -words, or 32-bit words?) - -For each screen, you must decide upon what depth(s) it supports. You -should only count the number of bits used for the actual image. Some -displays store additional bits to indicate what window this pixel is -in, how close this object is to a viewer, transparency, and other -data; do not count these bits. - -A "display class" tells whether the display is monochrome or color, -whether there is a lookup table, and how the lookup table works. - -A "visual" is a combination of depth, display class, and a description -of how the pixel values result in a color on the screen. Each visual -has a set of masks and offsets that are used to separate a pixel value -into its red, green, and blue components and a count of the number of -colormap entries. Some of these fields are only meaningful when the -class dictates so. Each visual also has a screen ID telling which -screen it is usable on. Note that the depth does not imply the number -of map_entries; for instance, a display can have 8 bits per pixel but -only 254 colormap entries for use by applications (the other two being -reserved by hardware for the cursor). - -Each visual is identified by a 32-bit visual ID which the client uses -to choose what visual is desired on a given window. Clients can be -using more than one visual on the same screen at the same time. -.LP -The class of a display describes how this translation takes place. -There are three ways to do the translation. -.IP \(bu 5 -Pseudo - The pixel value, as a whole, is looked up -in a table of length map_entries to -determine the color to display. -.IP \(bu 5 -True - The -pixel value is broken up into red, green, and blue fields, each of which -are looked up in separate red, green, and blue lookup tables, -each of length map_entries. -.IP \(bu 5 -Gray - The pixel value is looked up in a table of length map_entries to -determine a gray level to display. -.LP -In addition, the lookup table can be static (resulting colors are fixed for each -pixel value) -or dynamic (lookup entries are under control of the client program). -This leads to a total of six classes: - -.IP \(bu 5 -Static Gray - The pixel value (of however many bits) determines directly the -level of gray -that the pixel assumes. -.IP \(bu 5 -Gray Scale - The pixel value is fed through a lookup table to arrive at the level -of gray to display -for the given pixel. -.IP \(bu 5 -Static Color - The pixel value is fed through a fixed lookup table that yields the -color to display -for that pixel. -.IP \(bu 5 -PseudoColor - The whole pixel value is fed through a programmable lookup -table that has one -color (including red, green, and blue intensities) for each possible pixel value, -and that color is displayed. -.IP \(bu 5 -True Color - Each pixel value consists of one or more bits -that directly determine each primary color intensity after being fed through -a fixed table. -.IP \(bu 5 -Direct Color - Each pixel value consists of one or more bits for each primary color. -Each primary color value is individually looked up in a table for that primary -color, yielding -an intensity for that primary color. -For each pixel, the red value is looked up in the -red table, the green value in the green table, and -the blue value in the blue table. -.LP -Here are some examples: -.IP -A simple monochrome 1 bit per pixel display is Static Gray. - -A display that has 2 bits per pixel for a choice -between the colors of black, white, green and violet is Static Color. - -A display that has three bits per pixel, where -each bit turns on or off one of the red, green or -blue guns, is in the True Color class. - -If you take the last example and scramble the -correspondence between pixel values and colors -it becomes a Static Color display. - -A display has 8 bits per pixel. The 8 bits select one entry out of 256 entries -in a lookup table, each entry consisting of 24 bits (8bits each for red, green, -and blue). -The display can show any 256 of 16 million colors on the screen at once. -This is a pseudocolor display. -The client application gets to fill the lookup table in this class of display. - -Imagine the same hardware from the last example. -Your server software allows the user, on the -command line that starts up the server -program, -to fill the lookup table to his liking once and for all. -From then on, the server software would not change the lookup table -until it exits. -For instance, the default might be a lookup table with a reasonable sample of -colors from throughout the color space. -But the user could specify that the table be filled with 256 steps of gray scale -because he knew ahead of time he would be manipulating a lot of black-and-white -scanned photographs -and not very many color things. -Clients would be presented with this unchangeable lookup table. -Although the hardware qualifies as a PseudoColor display, -the facade presented to the X client is that this is a Static Color display. - -You have to decide what kind of display you have or want -to pretend you have. -When you initialize the screen(s), this class value must be set in the -VisualRec data structure along with other display characteristics like the -depth and other numbers. - -The allowable DepthRec's and VisualRec's are pointed to by fields in the ScreenRec. -These are set up when InitOutput() is called; you should Xalloc() appropriate blocks -or use static variables initialized to the correct values. - -.NH 3 -Colormaps for Screens -.XS -Colormaps for Screens -.XE -.LP -A colormap is a device-independent -mapping between pixel values and colors displayed on the screen. - -Different windows on the same screen can have different -colormaps at the same time. -At any given time, the most recently installed -colormap(s) will be in use in the server -so that its (their) windows' colors will be guaranteed to be correct. -Other windows may be off-color. -Although this may seem to be chaotic, in practice most clients -use the default colormap for the screen. - -The default colormap for a screen is initialized when the screen is initialized. -It always remains in existence and is not owned by any regular client. It -is owned by client 0 (the server itself). -Many clients will simply use this default colormap for their drawing. -Depending upon the class of the screen, the entries in this colormap may -be modifiable by client applications. - -.NH 4 -Colormap Routines -.XS -Colormap Routines -.XE -.LP -You need to implement the following routines to handle the device-dependent -aspects of color maps. You will end up placing pointers to these procedures -in your ScreenRec data structure(s). The sample server implementations of -many of these routines are in both cfbcmap.c and mfbcmap.c; since mfb does -not do very much with color, the cfb versions are typically more useful -prototypes. -.nf - - Bool pScreen->CreateColormap(pColormap) - ColormapPtr pColormap; - -.fi -.LP -This routine is called by the DIX CreateColormap routine after it has allocated -all the data for the new colormap and just before it returns to the dispatcher. -It is the DDX layer's chance to initialize the colormap, particularly if it is -a static map. See the following -section for more details on initializing colormaps. -The routine returns FALSE if creation failed, such as due to memory -limitations. -Notice that the colormap has a devPriv field from which you can hang any -colormap specific storage you need. Since each colormap might need special -information, we attached the field to the colormap and not the visual. -.nf - - void pScreen->DestroyColormap(pColormap) - ColormapPtr pColormap; - -.fi -.LP -This routine is called by the DIX FreeColormap routine after it has uninstalled -the colormap and notified all interested parties, and before it has freed -any of the colormap storage. -It is the DDX layer's chance to free any data it added to the colormap. -.nf - - void pScreen->InstallColormap(pColormap) - ColormapPtr pColormap; - -.fi -.LP -InstallColormap should -fill a lookup table on the screen with which the colormap is associated with -the colors in pColormap. -If there is only one hardware lookup table for the screen, then all colors on -the screen may change simultaneously. - -In the more general case of multiple hardware lookup tables, -this may cause some other colormap to be -uninstalled, meaning that windows that subscribed to the colormap -that was uninstalled may end up being off-color. -See the note, below, about uninstalling maps. -.nf - - void pScreen->UninstallColormap(pColormap) - ColormapPtr pColormap; - -.fi -.LP -UninstallColormap should -remove pColormap from screen pColormap->pScreen. -Some other map, such as the default map if possible, -should be installed in place of pColormap if applicable. -If -pColormap is the default map, do nothing. -If any client has requested ColormapNotify events, the DDX layer must notify the client. -(The routine WalkTree() is -be used to find such windows. The DIX routines TellNoMap(), -TellNewMap() and TellGainedMap() are provided to be used as -the procedure parameter to WalkTree. These procedures are in -Xserver/dix/colormap.c.) -.nf - - int pScreen->ListInstalledColormaps(pScreen, pCmapList) - ScreenPtr pScreen; - XID *pCmapList; - - -.fi -.LP -ListInstalledColormaps fills the pCMapList in with the resource ids -of the installed maps and returns a count of installed maps. -pCmapList will point to an array of size MaxInstalledMaps that was allocated -by the caller. -.nf - - void pScreen->StoreColors (pmap, ndef, pdefs) - ColormapPtr pmap; - int ndef; - xColorItem *pdefs; - -.fi -.LP -StoreColors changes some of the entries in the colormap pmap. -The number of entries to change are ndef, and pdefs points to the information -describing what to change. -Note that partial changes of entries in the colormap are allowed. -Only the colors -indicated in the flags field of each xColorItem need to be changed. -However, all three color fields will be sent with the proper value for the -benefit of screens that may not be able to set part of a colormap value. -If the screen is a static class, this routine does nothing. -The structure of colormap entries is nontrivial; see colormapst.h -and the definition of xColorItem in Xproto.h for -more details. -.nf - - void pScreen->ResolveColor(pRed, pGreen, pBlue, pVisual) - unsigned short *pRed, *pGreen, *pBlue; - VisualPtr pVisual; - - -.fi -.LP -Given a requested color, ResolveColor returns the nearest color that this hardware is -capable of displaying on this visual. -In other words, this rounds off each value, in place, to the number of bits -per primary color that your screen can use. -Remember that each screen has one of these routines. -The level of roundoff should be what you would expect from the value -you put in the bits_per_rgb field of the pVisual. - -Each value is an unsigned value ranging from 0 to 65535. -The bits least likely to be used are the lowest ones. -.LP -For example, if you had a pseudocolor display -with any number of bits per pixel -that had a lookup table supplying 6 bits for each color gun -(a total of 256K different colors), you would -round off each value to 6 bits. Please don't simply truncate these values -to the upper 6 bits, scale the result so that the maximum value seen -by the client will be 65535 for each primary. This makes color values -more portable between different depth displays (a 6-bit truncated white -will not look white on an 8-bit display). -.NH 4 -Initializing a Colormap -.XS -Initializing a Colormap -.XE -.LP -When a client requests a new colormap and when the server creates the default -colormap, the procedure CreateColormap in the DIX layer is invoked. -That procedure allocates memory for the colormap and related storage such as -the lists of which client owns which pixels. -It then sets a bit, BeingCreated, in the flags field of the ColormapRec -and calls the DDX layer's CreateColormap routine. -This is your chance to initialize the colormap. -If the colormap is static, which you can tell by looking at the class field, -you will want to fill in each color cell to match the hardwares notion of the -color for that pixel. -If the colormap is the default for the screen, which you can tell by looking -at the IsDefault bit in the flags field, you should allocate BlackPixel -and WhitePixel to match the values you set in the pScreen structure. -(Of course, you picked those values to begin with.) -.LP -You can also wait and use AllocColor() to allocate blackPixel -and whitePixel after the default colormap has been created. -If the default colormap is static and you initialized it in -pScreen->CreateColormap, then use can use AllocColor afterwards -to choose pixel values with the closest rgb values to those -desired for blackPixel and whitePixel. -If the default colormap is dynamic and uninitialized, then -the rgb values you request will be obeyed, and AllocColor will -again choose pixel values for you. -These pixel values can then be stored into the screen. -.LP -There are two ways to fill in the colormap. -The simplest way is to use the DIX function AllocColor. -.nf - -int AllocColor (pmap, pred, pgreen, pblue, pPix, client) - ColormapPtr pmap; - unsigned short *pred, *pgreen, *pblue; - Pixel *pPix; - int client; - -.fi -This takes three pointers to 16 bit color values and a pointer to a suggested -pixel value. The pixel value is either an index into one colormap or a -combination of three indices depending on the type of pmap. -If your colormap starts out empty, and you don't deliberately pick the same -value twice, you will always get your suggested pixel. -The truly nervous could check that the value returned in *pPix is the one -AllocColor was called with. -If you don't care which pixel is used, or would like them sequentially -allocated from entry 0, set *pPix to 0. This will find the first free -pixel and use that. -.LP -AllocColor will take care of all the bookkeeping and will -call StoreColors to get the colormap rgb values initialized. -The hardware colormap will be changed whenever this colormap -is installed. -.LP -If for some reason AllocColor doesn't do what you want, you can do your -own bookkeeping and call StoreColors yourself. This is much more difficult -and shouldn't be necessary for most devices. - -.NH 3 -Fonts for Screens -.XS -Fonts for Screens -.XE -.LP -A font is a set of bitmaps that depict the symbols in a character set. -Each font is for only one typeface in a given size, in other words, -just one bitmap for each character. Parallel fonts may be available -in a variety of sizes and variations, including "bold" and "italic." -X supports fonts for 8-bit and 16-bit character codes (for oriental -languages that have more than 256 characters in the font). Glyphs are -bitmaps for individual characters. - -The source comes with some useful font files in an ASCII, plain-text -format that should be comprehensible on a wide variety of operating -systems. The text format, referred to as BDF, is a slight extension -of the current Adobe 2.1 Bitmap Distribution Format (Adobe Systems, -Inc.). - -A short paper in PostScript format is included with the sample server -that defines BDF. It includes helpful pictures, which is why it is -done in PostScript and is not included in this document. - -Your implementation should include some sort of font compiler to read -these files and generate binary files that are directly usable by your -server implementation. The sample server comes with the source for a -font compiler. - -It is important the font properties contained in the BDF files are -preserved across any font compilation. In particular, copyright -information cannot be casually tossed aside without legal -ramifications. Other properties will be important to some -sophisticated applications. - -All clients get font information from the server. Therefore, your -server can support any fonts it wants to. It should probably support -at least the fonts supplied with the X11 tape. In principle, you can -convert fonts from other sources or dream up your own fonts for use on -your server. - -.NH 4 -Portable Compiled Format -.XS -Portable Compiled Format -.XE -.LP -A font compiler is supplied with the sample server. It has -compile-time switches to convert the BDF files into a portable binary -form, called Portable Compiled Format or PCF. This allows for an -arbitrary data format inside the file, and by describing the details -of the format in the header of the file, any PCF file can be read by -any PCF reading client. By selecting the format which matches the -required internal format for your renderer, the PCF reader can avoid -reformatting the data each time it is read in. The font compiler -should be quite portable. - -The fonts included with the tape are stored in fonts/bdf. The -font compiler is found in fonts/tools/bdftopcf. -.NH 4 -Font Realization -.XS -Font Realization -.XE -.LP -Each screen configured into the server -has an opportunity at font-load time -to "realize" a font into some internal format if necessary. -This happens every time the font is loaded into memory. - -A font (FontRec in Xserver/include/dixfontstr.h) is -a device-independent structure containing a device-independent -representation of the font. When a font is created, it is "realized" -for each screen. At this point, the screen has the chance to convert -the font into some other format. The DDX layer can also put information -in the devPrivate storage. -.nf - - Bool pScreen->RealizeFont(pScr, pFont) - ScreenPtr pScr; - FontPtr pFont; - - Bool pScreen->UnrealizeFont(pScr, pFont) - ScreenPtr pScr; - FontPtr pFont; - -.fi -RealizeFont and UnrealizeFont should calculate and allocate these extra data structures and -dispose of them when no longer needed. -These are called in response to OpenFont and CloseFont requests from -the client. -The sample server implementation is in mfbfont.c (which does very little). - -.NH 3 -Other Screen Routines -.XS -Other Screen Routines -.XE -.LP -You must supply several other screen-specific routines for -your X server implementation. -Some of these are described in other sections: -.IP \(bu 5 -GetImage() is described in the Drawing Primitives section. -.IP \(bu 5 -GetSpans() is described in the Pixblit routine section. -.IP \(bu 5 -Several window and pixmap manipulation procedures are -described in the Window section under Drawables. -.IP \(bu 5 -The CreateGC() routine is described under Graphics Contexts. -.LP -.nf - - void pScreen->QueryBestSize(kind, pWidth, pHeight) - int kind; - unsigned short *pWidth, *pHeight; - ScreenPtr pScreen; - -.fi -QueryBestSize() returns the best sizes for cursors, tiles, and stipples -in response to client requests. -kind is one of the defined constants CursorShape, TileShape, or StippleShape -(defined in X.h). -For CursorShape, return the maximum width and -height for cursors that you can handle. -For TileShape and StippleShape, start with the suggested values in pWidth -and pHeight and modify them in place to be optimal values that are -greater than or equal to the suggested values. -The sample server implementation is in Xserver/mfb/mfbmisc.c. -.nf - - pScreen->SourceValidate(pDrawable, x, y, width, height) - DrawablePtr pDrawable; - int x, y, width, height; - -.fi -SourceValidate should be called by CopyArea/CopyPlane primitives when -the source drawable is not the same as the destination, and the -SourceValidate function pointer in the screen is non-null. If you know that -you will never need SourceValidate, you can avoid this check. Currently, -SourceValidate is used by the mi software cursor code to remove the cursor -from the screen when the source rectangle overlaps the cursor position. -x,y,width,height describe the source rectangle (source relative, that is) -for the copy operation. -.nf - - Bool pScreen->SaveScreen(pScreen, on) - ScreenPtr pScreen; - int on; - -.fi -SaveScreen() is used for Screen Saver support (see WaitForSomething()). -pScreen is the screen to save. -.nf - - Bool pScreen->CloseScreen(pScreen) - ScreenPtr pScreen; - -.fi -When the server is reset, it calls this routine for each screen. -.nf - - Bool pScreen->CreateScreenResources(pScreen) - ScreenPtr pScreen; - -.fi -If this routine is not NULL, it will be called once per screen per -server initialization/reset after all modules have had a chance to -register their devPrivates on all structures that support them (see -the section on devPrivates below). If you need to create any -resources that have dynamic devPrivates as part of your screen -initialization, you should do so in this function instead of in the -screen init function passed to AddScreen to guarantee that the -resources have a complete set of devPrivates. This routine returns -TRUE if successful. -.NH 2 -Drawables -.XS -Drawables -.XE -.LP -A drawable is a descriptor of a surface that graphics are drawn into, either -a window on the screen or a pixmap in memory. - -Each drawable has a type, class, -ScreenPtr for the screen it is associated with, depth, position, size, -and serial number. -The type is one of the defined constants DRAWABLE_PIXMAP, -DRAWABLE_WINDOW and UNDRAWABLE_WINDOW. -(An undrawable window is used for window class InputOnly.) -The serial number is guaranteed to be unique across drawables, and -is used in determining -the validity of the clipping information in a GC. -The screen selects the set of procedures used to manipulate and draw into the -drawable. Position is used (currently) only by windows; pixmaps must -set these fields to 0,0 as this reduces the amount of conditional code -executed throughout the mi code. Size indicates the actual client-specified -size of the drawable. -There are, in fact, no other fields that a window drawable and pixmap -drawable have in common besides those mentioned here. - -Both PixmapRecs and WindowRecs are structs that start with a drawable -and continue on with more fields. Pixmaps have devPrivate pointers -which usually point to the pixmap data but could conceivably be -used for anything that DDX wants. Both windows and pixmaps have an -array of devPrivates unions, one entry of which will probably be used -for DDX specific data. Entries in this array are allocated using -Allocate{Window|Pixmap}PrivateIndex() (see Wrappers and devPrivates -below). This is done because different graphics hardware has -different requirements for management; if the graphics is always -handled by a processor with an independent address space, there is no -point having a pointer to the bit image itself. - -The definition of a drawable and a pixmap can be found in the file -Xserver/include/pixmapstr.h. -The definition of a window can be found in the file Xserver/include/windowstr.h. - -.NH 3 -Pixmaps -.XS -Pixmaps -.XE -.LP -A pixmap is a three-dimensional array of bits stored somewhere offscreen, -rather than in the visible portion of the screen's display frame buffer. It -can be used as a source or destination in graphics operations. There is no -implied interpretation of the pixel values in a pixmap, because it has no -associated visual or colormap. There is only a depth that indicates the -number of significant bits per pixel. Also, there is no implied physical -size for each pixel; all graphic units are in numbers of pixels. Therefore, -a pixmap alone does not constitute a complete image; it represents only a -rectangular array of pixel values. - -Note that the pixmap data structure is reference-counted. - -The server implementation is free to put the pixmap data -anywhere it sees fit, according to its graphics hardware setup. Many -implementations will simply have the data dynamically allocated in the -server's address space. More sophisticated implementations may put the -data in undisplayed framebuffer storage. - -In addition to dynamic devPrivates (see the section on devPrivates -below), the pixmap data structure has two fields that are private to -the device. Although you can use them for anything you want, they -have intended purposes. devKind is intended to be a device specific -indication of the pixmap location (host memory, off-screen, etc.). In -the sample server, since all pixmaps are in memory, devKind stores the -width of the pixmap in bitmap scanline units. devPrivate is probably -a pointer to the bits in the pixmap. - -A bitmap is a pixmap that is one bit deep. -.nf - - PixmapPtr pScreen->CreatePixmap(pScreen, width, height, depth) - ScreenPtr pScreen; - int width, height, depth; - -.fi -This ScreenRec procedure must create a pixmap of the size -requested. -It must allocate a PixmapRec and fill in all of the fields. -The reference count field must be set to 1. -If width or height are zero, no space should be allocated -for the pixmap data, and if the implementation is using the -devPrivate field as a pointer to the pixmap data, it should be -set to NULL. -If successful, it returns a pointer to the new pixmap; if not, it returns NULL. -See Xserver/mfb/mfbpixmap.c for the sample server implementation. -.nf - - Bool pScreen->DestroyPixmap(pPixmap) - PixmapPtr pPixmap; - -.fi -This ScreenRec procedure must "destroy" a pixmap. -It should decrement the reference count and, if zero, it -must deallocate the PixmapRec and all attached devPrivate blocks. -If successful, it returns TRUE. -See Xserver/mfb/mfbpixmap.c for the sample server implementation. -.nf - - Bool - pScreen->ModifyPixmapHeader(pPixmap, width, height, depth, bitsPerPixel, devKind, pPixData) - PixmapPtr pPixmap; - int width; - int height; - int depth; - int bitsPerPixel; - int devKind; - pointer pPixData; - -.fi -This routine takes a pixmap header (the PixmapRec plus all the dynamic -devPrivates) and initializes the fields of the PixmapRec to the -parameters of the same name. pPixmap must have been created via -pScreen->CreatePixmap with a zero width or height to avoid -allocating space for the pixmap data. pPixData is assumed to be the -pixmap data; it will be stored in an implementation-dependent place -(usually pPixmap->devPrivate.ptr). This routine returns -TRUE if successful. See Xserver/mi/miscrinit.c for the sample -server implementation. -.nf - - PixmapPtr - GetScratchPixmapHeader(pScreen, width, height, depth, bitsPerPixel, devKind, pPixData) - ScreenPtr pScreen; - int width; - int height; - int depth; - int bitsPerPixel; - int devKind; - pointer pPixData; - - void FreeScratchPixmapHeader(pPixmap) - PixmapPtr pPixmap; - -.fi -DDX should use these two DIX routines when it has a buffer of raw -image data that it wants to manipulate as a pixmap temporarily, -usually so that some other part of the server can be leveraged to -perform some operation on the data. The data should be passed in -pPixData, and will be stored in an implementation-dependent place -(usually pPixmap->devPrivate.ptr). The other -fields go into the corresponding PixmapRec fields. -If successful, GetScratchPixmapHeader returns a valid PixmapPtr which can -be used anywhere the server expects a pixmap, else -it returns NULL. The pixmap should be released when no longer needed -(usually within the same function that allocated it) -with FreeScratchPixmapHeader. -.NH 3 -Windows -.XS -Windows -.XE -.LP -A window is a visible, or potentially visible, rectangle on the screen. -DIX windowing functions maintain an internal n-ary tree data structure, which -represents the current relationships of the mapped windows. -Windows that are contained in another window are children of that window and -are clipped to the boundaries of the parent. -The root window in the tree is the window for the entire screen. -Sibling windows constitute a doubly-linked list; the parent window has a pointer -to the head and tail of this list. -Each child also has a pointer to its parent. - -The border of a window is drawn by a DDX procedure when DIX requests that it -be drawn. The contents of the window is drawn by the client through -requests to the server. - -Window painting is orchestrated through an expose event system. -When a region is exposed, -DIX generates an expose event, telling the client to repaint the window and -passing the region that is the minimal area needed to be repainted. - -As a favor to clients, the server may retain -the output to the hidden parts of windows -in off-screen memory; this is called "backing store". -When a part of such a window becomes exposed, it -can quickly move pixels into place instead of -triggering an expose event and waiting for a client on the other -end of the network to respond. -Even if the network response is insignificant, the time to -intelligently paint a section of a window is usually more than -the time to just copy already-painted sections. -At best, the repainting involves blanking out the area to a background color, -which will take about the -same amount of time. -In this way, backing store can dramatically increase the -performance of window moves. - -On the other hand, backing store can be quite complex, because -all graphics drawn to hidden areas must be intercepted and redirected -to the off-screen window sections. -Not only can this be complicated for the server programmer, -but it can also impact window painting performance. -The backing store implementation can choose, at any time, to -forget pieces of backing that are written into, relying instead upon -expose events to repaint for simplicity. - -In X, the decision to use the backing-store scheme is made -by you, the server implementor. -X provides hooks for implementing backing store, therefore -the decision to use this strategy can be made on the fly. -For example, you may use backing store only for certain windows -that the user requests or you may use backing store -until memory runs out, at which time you -start dropping pieces of backing as needed to make more room. - -When a window operation is requested by the client, -such as a window being created or moved, -a new state is computed. -During this transition, DIX informs DDX what rectangles in what windows are about to -become obscured and what rectangles in what windows have become exposed. -This provides a hook for the implementation of backing store. -If DDX is unable to restore exposed regions, DIX generates expose -events to the client. -It is then the client's responsibility to paint the -window parts that were exposed but not restored. - -If a window is resized, pixels sometimes need to be -moved, depending upon -the application. -The client can request "Gravity" so that -certain blocks of the window are -moved as a result of a resize. -For instance, if the window has controls or other items -that always hang on the edge of the -window, and that edge is moved as a result of the resize, -then those pixels should be moved -to avoid having the client repaint it. -If the client needs to repaint it anyway, such an operation takes -time, so it is desirable -for the server to approximate the appearance of the window as best -it can while waiting for the client -to do it perfectly. -Gravity is used for that, also. - -The window has several fields used in drawing -operations: -.IP \(bu 5 -clipList - This region, in conjunction with -the client clip region in the gc, is used to clip output. -clipList has the window's children subtracted from it, in addition to pieces of sibling windows -that overlap this window. To get the list with the -children included (subwindow-mode is IncludeInferiors), -the routine NotClippedByChildren(pWin) returns the unclipped region. -.IP \(bu 5 -borderClip is the region used by CopyWindow and -includes the area of the window, its children, and the border, but with the -overlapping areas of sibling children removed. -.LP -Most of the other fields are for DIX use only. - -.NH 4 -Window Procedures in the ScreenRec -.XS -Window Procedures in the ScreenRec -.XE -.LP -You should implement -all of the following procedures and store pointers to them in the screen record. - -The device-independent portion of the server "owns" the window tree. -However, clever hardware might want to know the relationship of -mapped windows. There are pointers to procedures -in the ScreenRec data structure that are called to give the hardware -a chance to update its internal state. These are helpers and -hints to DDX only; -they do not change the window tree, which is only changed by DIX. -.nf - - Bool pScreen->CreateWindow(pWin) - WindowPtr pWin; - -.fi -This routine is a hook for when DIX creates a window. -It should fill in the "Window Procedures in the WindowRec" below -and also allocate the devPrivate block for it. - -See Xserver/mfb/mfbwindow.c for the sample server implementation. -.nf - - Bool pScreen->DestroyWindow(pWin); - WindowPtr pWin; - -.fi -This routine is a hook for when DIX destroys a window. -It should deallocate the devPrivate block for it and any other blocks that need -to be freed, besides doing other cleanup actions. - -See Xserver/mfb/mfbwindow.c for the sample server implementation. -.nf - - Bool pScreen->PositionWindow(pWin, x, y); - WindowPtr pWin; - int x, y; - -.fi -This routine is a hook for when DIX moves or resizes a window. -It should do whatever private operations need to be done when a window is moved or resized. -For instance, if DDX keeps a pixmap tile used for drawing the background -or border, and it keeps the tile rotated such that it is longword -aligned to longword locations in the frame buffer, then you should rotate your tiles here. -The actual graphics involved in moving the pixels on the screen and drawing the -border are handled by CopyWindow(), below. -.LP -See Xserver/mfb/mfbwindow.c for the sample server implementation. -.nf - - Bool pScreen->RealizeWindow(pWin); - WindowPtr pWin; - - Bool pScreen->UnrealizeWindow(pWin); - WindowPtr pWin; - -.fi -These routines are hooks for when DIX maps (makes visible) and unmaps -(makes invisible) a window. It should do whatever private operations -need to be done when these happen, such as allocating or deallocating -structures that are only needed for visible windows. RealizeWindow -does NOT draw the window border, background or contents; -UnrealizeWindow does NOT erase the window or generate exposure events -for underlying windows; this is taken care of by DIX. DIX does, -however, call PaintWindowBackground() and PaintWindowBorder() to -perform some of these. -.nf - - Bool pScreen->ChangeWindowAttributes(pWin, vmask) - WindowPtr pWin; - unsigned long vmask; - -.fi -ChangeWindowAttributes is called whenever DIX changes window -attributes, such as the size, front-to-back ordering, title, or -anything of lesser severity that affects the window itself. The -sample server implements this routine. It computes accelerators for -quickly putting up background and border tiles. (See description of -the set of routines stored in the WindowRec.) -.nf - - int pScreen->ValidateTree(pParent, pChild, kind) - WindowPtr pParent, pChild; - VTKind kind; - -.fi -ValidateTree calculates the clipping region for the parent window and -all of its children. This routine must be provided. The sample server -has a machine-independent version in Xserver/mi/mivaltree.c. This is -a very difficult routine to replace. -.nf - - void pScreen->PostValidateTree(pParent, pChild, kind) - WindowPtr pParent, pChild; - VTKind kind; - -.fi -If this routine is not NULL, DIX calls it shortly after calling -ValidateTree, passing it the same arguments. This is useful for -managing multi-layered framebuffers. -The sample server sets this to NULL. -.nf - - void pScreen->WindowExposures(pWin, pRegion, pBSRegion) - WindowPtr pWin; - RegionPtr pRegion; - RegionPtr pBSRegion; - -.fi -The WindowExposures() routine -paints the border and generates exposure events for the window. -pRegion is an unoccluded region of the window, and pBSRegion is an -occluded region that has backing store. -Since exposure events include a rectangle describing what was exposed, -this routine may have to send back a series of exposure events, one for -each rectangle of the region. -The count field in the expose event is a hint to the -client as to the number of -regions that are after this one. -This routine must be provided. The sample -server has a machine-independent version in Xserver/mi/miexpose.c. -.nf - - void pScreen->ClipNotify (pWin, dx, dy) - WindowPtr pWin; - int dx, dy; - -.fi -Whenever the cliplist for a window is changed, this function is called to -perform whatever hardware manipulations might be necessary. When called, -the clip list and border clip regions in the window are set to the new -values. dx,dy are the distance that the window has been moved (if at all). -.NH 4 -Window Painting Procedures -.XS -Window Painting Procedures -.XE -.LP -In addition to the procedures listed above, there are four routines which -manipulate the actual window image directly. -In the sample server, mi implementations will work for -most purposes and mfb/cfb routines speed up situations, such -as solid backgrounds/borders or tiles that are 8, 16 or 32 pixels square. - -These three routines are used for systems that implement a backing-store scheme for it to -know when to stash away areas of pixels and to restore or reposition them. -.nf - - void pScreen->ClearToBackground(pWin, x, y, w, h, generateExposures); - WindowPtr pWin; - int x, y, w, h; - Bool generateExposures; - -.fi -This routine is called on a window in response to a ClearToBackground request -from the client. -This request has two different but related functions, depending upon generateExposures. - -If generateExposures is true, the client is declaring that the given rectangle -on the window is incorrectly painted and needs to be repainted. -The sample server implementation calculates the exposure region -and hands it to the DIX procedure HandleExposures(), which -calls the WindowExposures() routine, below, for the window -and all of its child windows. - -If generateExposures is false, the client is trying to simply erase part -of the window to the background fill style. -ClearToBackground should write the background color or tile to the -rectangle in question (probably using PaintWindowBackground). -If w or h is zero, it clears all the way to the right or lower edge of the window. - -The sample server implementation is in Xserver/mi/miwindow.c. -.nf - - void pScreen->PaintWindowBackground(pWin, region, kind) - WindowPtr pWin; - RegionPtr region; - int kind; /* must be PW_BACKGROUND */ - - void pScreen->PaintWindowBorder(pWin, region, kind) - WindowPtr pWin; - RegionPtr region; - int kind; /* must be PW_BORDER */ - -.fi -These two routines are for painting pieces of the window background or border. -They both actually paint the area designated by region. -The kind parameter is a defined constant that is always PW_BACKGROUND -or PW_BORDER, as shown. -Therefore, you can use the same routine for both. -The defined constant tells the routine whether to use the window's -border fill style or its background fill style to paint the given region. -Both fill styles consist of a union which holds a tile pointer and a pixel -value, along with a separate variable which indicates which entry is valid. -For PW_BORDER, borderIsPixel != 0 indicates that the border PixUnion -contains a pixel value, else a tile. For PW_BACKGROUND there are four -values, contained in backgroundState; None, ParentRelative, BackgroundPixmap -and BackgroundPixel. None indicates that the region should be left -unfilled, while ParentRelative indicates that the background of the parent is -inherited (see the Protocol document for the exact semantics). -.nf - - void pScreen->CopyWindow(pWin, oldpt, oldRegion); - WindowPtr pWin; - DDXPointRec oldpt; - RegionPtr oldRegion; - -.fi -CopyWindow is called when a window is moved, and graphically moves to -pixels of a window on the screen. It should not change any other -state within DDX (see PositionWindow(), above). - -oldpt is the old location of the upper-left corner. oldRegion is the -old region it is coming from. The new location and new region is -stored in the WindowRec. oldRegion might modified in place by this -routine (the sample implementation does this). - -CopyArea could be used, except that this operation has more -complications. First of all, you do not want to copy a rectangle onto -a rectangle. The original window may be obscured by other windows, -and the new window location may be similarly obscured. Second, some -hardware supports multiple windows with multiple depths, and your -routine needs to take care of that. - -The pixels in oldRegion (with reference point oldpt) are copied to the -window's new region (pWin->borderClip). pWin->borderClip is gotten -directly from the window, rather than passing it as a parameter. - -The sample server implementation is in Xserver/mfb/mfbwindow.c. - -.NH 4 -Screen Operations for Backing Store -.XS -Screen Operations for Backing Store -.XE -.LP -Each ScreenRec has six functions which provide the backing store -interface. For screens not supporting backing store, these pointers -may be nul. Servers that implement some backing store scheme -must fill in the procedure pointers for the procedures below, -and must maintain the backStorage field in each window struct. -The sample implementation is in mi/mibstore.c. -.nf - - void pScreen->SaveDoomedAreas(pWin, pRegion, dx, dy) - WindowPtr pWin; - RegionPtr pRegion; - int dx, dy; - -.fi -This routine saves the newly obscured region, pRegion, in backing store. -dx, dy indicate how far the window is being moved, useful as the obscured -region is relative to the window as it will appear in the new location, -rather then relative to the bits as the are on the screen when the function -is invoked. -.nf - - RegionPtr pScreen->RestoreAreas(pWin, pRegion) - WindowPtr pWin; - RegionPtr pRegion; - -.fi -This looks at the exposed region of the window, pRegion, and tries to -restore to the screen the parts that have been saved. It removes the -restored parts from the backing storage (because they are now on the screen) -and subtracts the areas from the exposed region. The returned region is the -area of the window which should have expose events generated for and can be -either a new region, pWin->exposed, or NULL. The region left in -pRegion is set to the area of the window which should be painted with -the window background. -.nf - - RegionPtr pScreen->TranslateBackingStore(pWin, dx, dy, oldClip, oldx, oldy) - WindowPtr pWin; - int dx, dy; - RegionPtr oldClip; - int oldx, oldy; - -.fi -This is called when the window is moved or resized so that the backing -store can be translated if necessary. oldClip is the old cliplist for -the window, which is used to save doomed areas if the window is moved -underneath its parent as a result of bitgravity. The returned region -represents occluded areas of the window for which the backing store -contents are invalid. -.nf - - void pScreen->ExposeCopy(pSrc, pDst, pGC, prgnExposed, srcx, srcy, dstx, dsty, plane) - WindowPtr pSrc; - DrawablePtr pDst; - GCPtr pGC; - RegionPtr prgnExposed; - int srcx; - int srcy; - int dstx; - int dsty; - unsigned long plane; - -.fi -Copies a region from the backing store of pSrc to pDst. -.nf - - RegionPtr pScreen->ClearBackingStore(pWindow, x, y, w, h, generateExposures) - WindowPtr pWindow; - int x; - int y; - int w; - int h; - Bool generateExposures; - -.fi -Clear the given area of the backing pixmap with the background of -the window. If generateExposures is TRUE, generate -exposure events for the area. Note that if the area has any -part outside the saved portions of the window, we do not allow the -count in the expose events to be 0, since there will be more -expose events to come. -.nf - - void pScreen->DrawGuarantee(pWindow, pGC, guarantee) - WindowPtr pWindow; - GCPtr pGC; - int guarantee; - -.fi -This informs the backing store layer that you are about to validate -a gc with a window, and that subsequent output to the window -is (or is not) guaranteed to be already clipped to the visible -regions of the window. - -.NH 4 -Screen Operations for Multi-Layered Framebuffers -.XS -Screen Operations for Multi-Layered Framebuffers -.XE -.LP -The following screen functions are useful if you have a framebuffer with -multiple sets of independent bit planes, e.g. overlays or underlays in -addition to the "main" planes. If you have a simple single-layer -framebuffer, you should probably use the mi versions of these routines -in mi/miwindow.c. This can be easily accomplished by calling miScreenInit. -.nf - - void pScreen->MarkWindow(pWin) - WindowPtr pWin; - -.fi -This formerly dix function MarkWindow has moved to ddx and is accessed -via this screen function. This function should store something, -usually a pointer to a device-dependent structure, in pWin->valdata so -that ValidateTree has the information it needs to validate the window. -.nf - - Bool pScreen->MarkOverlappedWindows(parent, firstChild, ppLayerWin) - WindowPtr parent; - WindowPtr firstChild; - WindowPtr * ppLayerWin; - -.fi -This formerly dix function MarkWindow has moved to ddx and is accessed -via this screen function. In the process, it has grown another -parameter: ppLayerWin, which is filled in with a pointer to the window -at which save under marking and ValidateTree should begin. In the -single-layered framebuffer case, pLayerWin == pWin. -.nf - - Bool pScreen->ChangeSaveUnder(pLayerWin, firstChild) - WindowPtr pLayerWin; - WindowPtr firstChild; - -.fi -The dix functions ChangeSaveUnder and CheckSaveUnder have moved to ddx and -are accessed via this screen function. pLayerWin should be the window -returned in the ppLayerWin parameter of MarkOverlappedWindows. The function -may turn on backing store for windows that might be covered, and may partially -turn off backing store for windows. It returns TRUE if PostChangeSaveUnder -needs to be called to finish turning off backing store. -.nf - - void pScreen->PostChangeSaveUnder(pLayerWin, firstChild) - WindowPtr pLayerWin; - WindowPtr firstChild; - -.fi -The dix function DoChangeSaveUnder has moved to ddx and is accessed via -this screen function. This function completes the job of turning off -backing store that was started by ChangeSaveUnder. -.nf - - void pScreen->MoveWindow(pWin, x, y, pSib, kind) - WindowPtr pWin; - int x; - int y; - WindowPtr pSib; - VTKind kind; - -.fi -The formerly dix function MoveWindow has moved to ddx and is accessed via -this screen function. The new position of the window is given by -x,y. kind is VTMove if the window is only moving, or VTOther if -the border is also changing. -.nf - - void pScreen->ResizeWindow(pWin, x, y, w, h, pSib) - WindowPtr pWin; - int x; - int y; - unsigned int w; - unsigned int h; - WindowPtr pSib; - -.fi -The formerly dix function SlideAndSizeWindow has moved to ddx and is accessed via -this screen function. The new position is given by x,y. The new size -is given by w,h. -.nf - - WindowPtr pScreen->GetLayerWindow(pWin) - WindowPtr pWin - -.fi -This is a new function which returns a child of the layer parent of pWin. -.nf - - void pScreen->HandleExposures(pWin) - WindowPtr pWin; - -.fi -The formerly dix function HandleExposures has moved to ddx and is accessed via -this screen function. This function is called after ValidateTree and -uses the information contained in valdata to send exposures to windows. -.nf - - void pScreen->ReparentWindow(pWin, pPriorParent) - WindowPtr pWin; - WindowPtr pPriorParent; - -.fi -This function will be called when a window is reparented. At the time of -the call, pWin will already be spliced into its new position in the -window tree, and pPriorParent is its previous parent. This function -can be NULL. -.nf - - void pScreen->SetShape(pWin) - WindowPtr pWin; - -.fi -The formerly dix function SetShape has moved to ddx and is accessed via -this screen function. The window's new shape will have already been -stored in the window when this function is called. -.nf - - void pScreen->ChangeBorderWidth(pWin, width) - WindowPtr pWin; - unsigned int width; - -.fi -The formerly dix function ChangeBorderWidth has moved to ddx and is accessed via -this screen function. The new border width is given by width. -.nf - - void pScreen->MarkUnrealizedWindow(pChild, pWin, fromConfigure) - WindowPtr pChild; - WindowPtr pWin; - Bool fromConfigure; - -.fi -This function is called for windows that are being unrealized as part of -an UnrealizeTree. pChild is the window being unrealized, pWin is an -ancestor, and the fromConfigure value is simply propogated from UnrealizeTree. -.NH 2 -Graphics Contexts and Validation -.XS -Graphics Contexts and Validation -.XE -.LP -This graphics context (GC) contains state variables such as foreground and -background pixel value (color), the current line style and width, -the current tile or stipple for pattern generation, the current font for text -generation, and other similar attributes. - -In many graphics systems, the equivalent of the graphics context and the -drawable are combined as one entity. -The main distinction between the two kinds of status is that a drawable -describes a writing surface and the writings that may have already been done -on it, whereas a graphics context describes the drawing process. -A drawable is like a chalkboard. -A GC is like a piece of chalk. - -Unlike many similar systems, there is no "current pen location." -Every graphic operation is accompanied by the coordinates where it is to happen. - -The GC also includes two vectors of procedure pointers, the first -operate on the GC itself and are called GC funcs. The second, called -GC ops, -contains the functions that carry out the fundamental graphic operations -such as drawing lines, polygons, arcs, text, and copying bitmaps. -The DDX graphic software can, if it -wants to be smart, change these two vectors of procedure pointers -to take advantage of hardware/firmware in the server machine, which can do -a better job under certain circumstances. To reduce the amount of memory -consumed by each GC, it is wise to create a few "boilerplate" GC ops vectors -which can be shared by every GC which matches the constraints for that set. -Also, it is usually reasonable to have every GC created by a particular -module to share a common set of GC funcs. Samples of this sort of -sharing can be seen in cfb/cfbgc.c and mfb/mfbgc.c. - -The DDX software is notified any time the client (or DIX) uses a changed GC. -For instance, if the hardware has special support for drawing fixed-width -fonts, DDX can intercept changes to the current font in a GC just before -drawing is done. It can plug into either a fixed-width procedure that makes -the hardware draw characters, or a variable-width procedure that carefully -lays out glyphs by hand in software, depending upon the new font that is -selected. - -A definition of these structures can be found in the file -Xserver/include/gcstruct.h. - -Also included in each GC is an array of devPrivates which portions of the -DDX can use for any reason. Entries in this array are allocated with -AllocateGCPrivateIndex() (see Wrappers and Privates below). - -The DIX routines available for manipulating GCs are -CreateGC, ChangeGC, CopyGC, SetClipRects, SetDashes, and FreeGC. -.nf - - GCPtr CreateGC(pDrawable, mask, pval, pStatus) - DrawablePtr pDrawable; - BITS32 mask; - XID *pval; - int *pStatus; - - int ChangeGC(pGC, mask, pval) - GCPtr pGC; - BITS32 mask; - XID *pval; - - int CopyGC(pgcSrc, pgcDst, mask) - GCPtr pgcSrc; - GCPtr pgcDst; - BITS32 mask; - - int SetClipRects(pGC, xOrigin, yOrigin, nrects, prects, ordering) - GCPtr pGC; - int xOrigin, yOrigin; - int nrects; - xRectangle *prects; - int ordering; - - SetDashes(pGC, offset, ndash, pdash) - GCPtr pGC; - unsigned offset; - unsigned ndash; - unsigned char *pdash; - - int FreeGC(pGC, gid) - GCPtr pGC; - GContext gid; - -.fi - -As a convenience, each Screen structure contains an array of -GCs that are preallocated, one at each depth the screen supports. -These are particularly useful in the mi code. Two DIX routines -must be used to get these GCs: -.nf - - GCPtr GetScratchGC(depth, pScreen) - int depth; - ScreenPtr pScreen; - - FreeScratchGC(pGC) - GCPtr pGC; - -.fi -Always use these two routines, don't try to extract the scratch -GC yourself -- someone else might be using it, so a new one must -be created on the fly. - -If you need a GC for a very long time, say until the server is restarted, -you should not take one from the pool used by GetScratchGC, but should -get your own using CreateGC or CreateScratchGC. -This leaves the ones in the pool free for routines that only need it for -a little while and don't want to pay a heavy cost to get it. -.nf - - GCPtr CreateScratchGC(pScreen, depth) - ScreenPtr pScreen; - int depth; - -.fi -NULL is returned if the GC cannot be created. -The GC returned can be freed with FreeScratchGC. - -.NH 3 -Details of operation -.XS -Details of operation -.XE -.LP -At screen initialization, a screen must supply a GC creation procedure. -At GC creation, the screen must fill in GC funcs and GC ops vectors -(Xserver/include/gcstruct.h). For any particular GC, the func vector -must remain constant, while the op vector may vary. This invariant is to -ensure that Wrappers work correctly. - -When a client request is processed that results in a change -to the GC, the device-independent state of the GC is updated. -This includes a record of the state that changed. -Then the ChangeGC GC func is called. -This is useful for graphics subsystems that are able to process -state changes in parallel with the server CPU. -DDX may opt not to take any action at GC-modify time. -This is more efficient if multiple GC-modify requests occur -between draws using a given GC. - -Validation occurs at the first draw operation that specifies the GC after -that GC was modified. DIX calls then the ValidateGC GC func. DDX should -then update its internal state. DDX internal state may be stored as one or -more of the following: 1) device private block on the GC; 2) hardware -state; 3) changes to the GC ops. - -The GC contains a serial number, which is loaded with a number fetched from -the window that was drawn into the last time the GC was used. The serial -number in the drawable is changed when the drawable's -clipList or absCorner changes. Thus, by -comparing the GC serial number with the drawable serial number, DIX can -force a validate if the drawable has been changed since the last time it -was used with this GC. - -In addition, the drawable serial number is always guaranteed to have the -most significant bit set to 0. Thus, the DDX layer can set the most -significant bit of the serial number to 1 in a GC to force a validate the next time -the GC is used. DIX also uses this technique to indicate that a change has -been made to the GC by way of a SetGC, a SetDashes or a SetClip request. - -.NH 3 -GC Handling Routines -.XS -GC Handling Routines -.XE -.LP -The ScreenRec data structure has a pointer for -CreateGC(). -.nf - - Bool pScreen->CreateGC(pGC) - GCPtr pGC; -.fi -This routine must fill in the fields of -a dynamically allocated GC that is passed in. -It does NOT allocate the GC record itself or fill -in the defaults; DIX does that. - -This must fill in both the GC funcs and ops; none of the drawing -functions will be called before the GC has been validated, -but the others (dealing with allocating of clip regions, -changing and destroying the GC, etc.) might be. - -The GC funcs vector contains pointers to 7 -routines and a devPrivate field: -.nf - - pGC->funcs->ChangeGC(pGC, changes) - GCPtr pGC; - unsigned long changes; - -.fi -This GC func is called immediately after a field in the GC is changed. -changes is a bit mask indicating the changed fields of the GC in this -request. - -The ChangeGC routine is useful if you have a system where -state-changes to the GC can be swallowed immediately by your graphics -system, and a validate is not necessary. - -.nf - - pGC->funcs->ValidateGC(pGC, changes, pDraw) - GCPtr pGC; - unsigned long changes; - DrawablePtr pDraw; - -.fi -ValidateGC is called by DIX just before the GC will be used when one -of many possible changes to the GC or the graphics system has -happened. It can modify a devPrivates field of the GC or its -contents, change the op vector, or change hardware according to the -values in the GC. It may not change the device-independent portion of -the GC itself. - -In almost all cases, your ValidateGC() procedure should take the -regions that drawing needs to be clipped to and combine them into a -composite clip region, which you keep a pointer to in the private part -of the GC. In this way, your drawing primitive routines (and whatever -is below them) can easily determine what to clip and where. You -should combine the regions clientClip (the region that the client -desires to clip output to) and the region returned by -NotClippedByChildren(), in DIX. An example is in Xserver/mfb/mfbgc.c. - -Some kinds of extension software may cause this routine to be called -more than originally intended; you should not rely on algorithms that -will break under such circumstances. - -See the Strategies document for more information on creatively using -this routine. - -.nf - - pGC->funcs->CopyGC(pGCSrc, mask, pGCDst) - GCPtr pGCSrc; - unsigned long mask; - GCPtr pGCDst; - -.fi -This routine is called by DIX when a GC is being copied to another GC. -This is for situations where dynamically allocated chunks of memory -are hanging off a GC devPrivates field which need to be transferred to -the destination GC. -.nf - - pGC->funcs->DestroyGC(pGC) - GCPtr pGC; - -.fi -This routine is called before the GC is destroyed for the -entity interested in this GC to clean up after itself. -This routine is responsible for freeing any auxiliary storage allocated. - -.NH 3 -GC Clip Region Routines -.XS -GC Clip Region Routines -.XE -.LP -The GC clientClip field requires three procedures to manage it. These -procedures are in the GC funcs vector. The underlying principle is that dix -knows nothing about the internals of the clipping information, (except when -it has come from the client), and so calls ddX whenever it needs to copy, -set, or destroy such information. It could have been possible for dix not -to allow ddX to touch the field in the GC, and require it to keep its own -copy in devPriv, but since clip masks can be very large, this seems like a -bad idea. Thus, the server allows ddX to do whatever it wants to the -clientClip field of the GC, but requires it to do all manipulation itself. -.nf - - void pGC->funcs->ChangeClip(pGC, type, pValue, nrects) - GCPtr pGC; - int type; - char *pValue; - int nrects; - -.fi -This routine is called whenever the client changes the client clip -region. The pGC points to the GC involved, the type tells what form -the region has been sent in. If type is CT_NONE, then there is no -client clip. If type is CT_UNSORTED, CT_YBANDED or CT_YXBANDED, then -pValue pointer to a list of rectangles, nrects long. If type is -CT_REGION, then pValue pointer to a RegionRec from the mi region code. -If type is CT_PIXMAP pValue is a pointer to a pixmap. (The defines -for CT_NONE, etc. are in Xserver/include/gc.h.) This routine is -responsible for incrementing any necessary reference counts (e.g. for -a pixmap clip mask) for the new clipmask and freeing anything that -used to be in the GC's clipMask field. The lists of rectangles passed -in can be freed with Xfree(), the regions can be destroyed with the -RegionDestroy field in the screen, and pixmaps can be destroyed by -calling the screen's DestroyPixmap function. DIX and MI code expect -what they pass in to this to be freed or otherwise inaccessible, and -will never look inside what's been put in the GC. This is a good -place to be wary of storage leaks. -.LP -In the sample server, this routine transforms either the bitmap or the -rectangle list into a region, so that future routines will have a more -predictable starting point to work from. (The validate routine must -take this client clip region and merge it with other regions to arrive -at a composite clip region before any drawing is done.) -.nf - - void pGC->funcs->DestroyClip(pGC) - GCPtr pGC; - -.fi -This routine is called whenever the client clip region must be destroyed. -The pGC points to the GC involved. This call should set the clipType -field of the GC to CT_NONE. -In the sample server, the pointer to the client clip region is set to NULL -by this routine after destroying the region, so that other software -(including ChangeClip() above) will recognize that there is no client clip region. -.nf - - void pGC->funcs->CopyClip(pgcDst, pgcSrc) - GCPtr pgcDst, pgcSrc; - -.fi -This routine makes a copy of the clipMask and clipType from pgcSrc -into pgcDst. It is responsible for destroying any previous clipMask -in pgcDst. The clip mask in the source can be the same as the -clip mask in the dst (clients do the strangest things), so care must -be taken when destroying things. This call is required because dix -does not know how to copy the clip mask from pgcSrc. - -.NH 2 -Drawing Primitives -.XS -Drawing Primitives -.XE -.LP -The X protocol (rules for the byte stream that goes between client and server) -does all graphics using primitive -operations, which are called Drawing Primitives. -These include line drawing, area filling, arcs, and text drawing. -Your implementation must supply 16 routines -to perform these on your hardware. -(The number 16 is arbitrary.) - -More specifically, 16 procedure pointers are in each -GC op vector. -At any given time, ALL of them MUST point to a valid procedure that -attempts to do the operation assigned, although -the procedure pointers may change and may -point to different procedures to carry out the same operation. -A simple server will leave them all pointing to the same 16 routines, while -a more optimized implementation will switch each from one -procedure to another, depending upon what is most optimal -for the current GC and drawable. - -The sample server contains a considerable chunk of code called the -mi (machine independent) -routines, which serve as drawing primitive routines. -Many server implementations will be able to use these as-is, -because they work for arbitrary depths. -They make no assumptions about the formats of pixmaps -and frame buffers, since they call a set of routines -known as the "Pixblit Routines" (see next section). -They do assume that the way to draw is -through these low-level routines that apply pixel values rows at a time. -If your hardware or firmware gives more performance when -things are done differently, you will want to take this fact into account -and rewrite some or all of the drawing primitives to fit your needs. - -.NH 3 -GC Components -.XS -GC Components -.XE -.LP -This section describes the fields in the GC that affect each drawing primitive. -The only primitive that is not affected is GetImage, which does not use a GC -because its destination is a protocol-style bit image. -Since each drawing primitive mirrors exactly the X protocol request of the -same name, you should refer to the X protocol specification document -for more details. - -ALL of these routines MUST CLIP to the -appropriate regions in the drawable. -Since there are many regions to clip to simultaneously, -your ValidateGC routine should combine these into a unified -clip region to which your drawing routines can quickly refer. -This is exactly what the cfb and mfb routines supplied with the sample server -do. -The mi implementation passes responsibility for clipping while drawing -down to the Pixblit routines. - -Also, all of them must adhere to the current plane mask. -The plane mask has one bit for every bit plane in the drawable; -only planes with 1 bits in the mask are affected by any drawing operation. - -All functions except for ImageText calls must obey the alu function. -This is usually Copy, but could be any of the allowable 16 raster-ops. - -All of the functions, except for CopyArea, might use the current -foreground and background pixel values. -Each pixel value is 32 bits. -These correspond to foreground and background colors, but you have -to run them through the colormap to find out what color the pixel values -represent. Do not worry about the color, just apply the pixel value. - -The routines that draw lines (PolyLine, PolySegment, PolyRect, and PolyArc) -use the line width, line style, cap style, and join style. -Line width is in pixels. -The line style specifies whether it is solid or dashed, and what kind of dash. -The cap style specifies whether Rounded, Butt, etc. -The join style specifies whether joins between joined lines are Miter, Round or Beveled. -When lines cross as part of the same polyline, they are assumed to be drawn once. -(See the X protocol specification for more details.) - -Zero-width lines are NOT meant to be really zero width; this is the client's way -of telling you that you can optimize line drawing with little regard to -the end caps and joins. -They are called "thin" lines and are meant to be one pixel wide. -These are frequently done in hardware or in a streamlined assembly language -routine. - -Lines with widths greater than zero, though, must all be drawn with the same -algorithm, because client software assumes that every jag on every -line at an angle will come at the same place. -Two lines that should have -one pixel in the space between them -(because of their distance apart and their widths) should have such a one-pixel line -of space between them if drawn, regardless of angle. - -The solid area fill routines (FillPolygon, PolyFillRect, PolyFillArc) -all use the fill rule, which specifies subtle interpretations of -what points are inside and what are outside of a given polygon. -The PolyFillArc routine also uses the arc mode, which specifies -whether to fill pie segments or single-edge slices of an ellipse. - -The line drawing, area fill, and PolyText routines must all -apply the correct "fill style." -This can be either a solid foreground color, a transparent stipple, -an opaque stipple, or a tile. -Stipples are bitmaps where the 1 bits represent that the foreground color is written, -and 0 bits represent that either the pixel is left alone (transparent) or that -the background color is written (opaque). -A tile is a pixmap of the full depth of the GC that is applied in its full glory to all areas. -The stipple and tile patterns can be any rectangular size, although some implementations -will be faster for certain sizes such as 8x8 or 32x32. -The mi implementation passes this responsibility down to the Pixblit routines. - -See the X protocol document for full details. -The description of the CreateGC request has a very good, detailed description of these -attributes. - -.NH 3 -The Primitives -.XS -The Primitives -.XE -.LP -The Drawing Primitives are as follows: - -.nf - - RegionPtr pGC->ops->CopyArea(src, dst, pGC, srcx, srcy, w, h, dstx, dsty) - DrawablePtr dst, src; - GCPtr pGC; - int srcx, srcy, w, h, dstx, dsty; - -.fi -CopyArea copies a rectangle of pixels from one drawable to another of -the same depth. To effect scrolling, this must be able to copy from -any drawable to itself, overlapped. No squeezing or stretching is done -because the source and destination are the same size. However, -everything is still clipped to the clip regions of the destination -drawable. - -If pGC->graphicsExposures is True, any portions of the destination which -were not valid in the source (either occluded by covering windows, or -outside the bounds of the drawable) should be collected together and -returned as a region (if this resultant region is empty, NULL can be -returned instead). Furthermore, the invalid bits of the source are -not copied to the destination and (when the destination is a window) -are filled with the background tile. The sample routine -miHandleExposures generates the appropriate return value and fills the -invalid area using pScreen->PaintWindowBackground. - -For instance, imagine a window that is partially obscured by other -windows in front of it. As text is scrolled on your window, the pixels -that are scrolled out from under obscuring windows will not be -available on the screen to copy to the right places, and so an exposure -event must be sent for the client to correctly repaint them. Of -course, if you implement some sort of backing store, you could do this -without resorting to exposure events. - -An example implementation is mfbCopyArea() in Xserver/mfb/mfbbitblt.c. -.nf - - RegionPtr pGC->ops->CopyPlane(src, dst, pGC, srcx, srcy, w, h, dstx, dsty, plane) - DrawablePtr dst, src; - GCPtr pGC; - int srcx, srcy, w, h, dstx, dsty; - unsigned long plane; - -.fi -CopyPlane must copy one plane of a rectangle from the source drawable -onto the destination drawable. Because this routine only copies one -bit out of each pixel, it can copy between drawables of different -depths. This is the only way of copying between drawables of -different depths, except for copying bitmaps to pixmaps and applying -foreground and background colors to it. All other conditions of -CopyArea apply to CopyPlane too. - -An example implementation is mfbCopyPlane() in -Xserver/mfb/mfbbitblt.c. -.nf - - void pGC->ops->PolyPoint(dst, pGC, mode, n, pPoint) - DrawablePtr dst; - GCPtr pGC; - int mode; - int n; - DDXPointPtr pPoint; - -.fi -PolyPoint draws a set of one-pixel dots (foreground color) -at the locations given in the array. -mode is one of the defined constants Origin (absolute coordinates) or Previous -(each coordinate is relative to the last). -Note that this does not use the background color or any tiles or stipples. - -Example implementations are mfbPolyPoint() in Xserver/mfb/mfbpolypnt.c and -miPolyPoint in Xserver/mi/mipolypnt.c. -.nf - - void pGC->ops->Polylines(dst, pGC, mode, n, pPoint) - DrawablePtr dst; - GCPtr pGC; - int mode; - int n; - DDXPointPtr pPoint; - -.fi -Similar to PolyPoint, Polylines draws lines between the locations given in the array. -Zero-width lines are NOT meant to be really zero width; this is the client's way of -telling you that you can maximally optimize line drawing with little regard to -the end caps and joins. -mode is one of the defined constants Previous or Origin, depending upon -whether the points are each relative to the last or are absolute. - -Example implementations are miWideLine() and miWideDash() in -mi/miwideline.c and miZeroLine() in mi/mizerline.c. -.nf - - void pGC->ops->PolySegment(dst, pGC, n, pPoint) - DrawablePtr dst; - GCPtr pGC; - int n; - xSegment *pSegments; - -.fi -PolySegments draws unconnected -lines between pairs of points in the array; the array must be of -even size; no interconnecting lines are drawn. - -An example implementation is miPolySegment() in mipolyseg.c. -.nf - - void pGC->ops->PolyRectangle(dst, pGC, n, pRect) - DrawablePtr dst; - GCPtr pGC; - int n; - xRectangle *pRect; - -.fi -PolyRectangle draws outlines of rectangles for each rectangle in the array. - -An example implementation is miPolyRectangle() in Xserver/mi/mipolyrect.c. -.nf - - void pGC->ops->PolyArc(dst, pGC, n, pArc) - DrawablePtr dst; - GCPtr pGC; - int n; - xArc*pArc; - -.fi -PolyArc draws connected conic arcs according to the descriptions in the array. -See the protocol specification for more details. - -Example implementations are miZeroPolyArc in Xserver/mi/mizerarc. and -miPolyArc() in Xserver/mi/miarc.c. -.nf - - void pGC->ops->FillPolygon(dst, pGC, shape, mode, count, pPoint) - DrawablePtr dst; - GCPtr pGC; - int shape; - int mode; - int count; - DDXPointPtr pPoint; - -.fi -FillPolygon fills a polygon specified by the points in the array -with the appropriate fill style. -If necessary, an extra border line is assumed between the starting and ending lines. -The shape can be used as a hint -to optimize filling; it indicates whether it is convex (all interior angles -less than 180), nonconvex (some interior angles greater than 180 but -border does not cross itself), or complex (border crosses itself). -You can choose appropriate algorithms or hardware based upon mode. -mode is one of the defined constants Previous or Origin, depending upon -whether the points are each relative to the last or are absolute. - -An example implementation is miFillPolygon() in Xserver/mi/mipoly.c. -.nf - - void pGC->ops->PolyFillRect(dst, pGC, n, pRect) - DrawablePtr dst; - GCPtr pGC; - int n; - xRectangle *pRect; - -.fi -PolyFillRect fills multiple rectangles. - -Example implementations are mfbPolyFillRect() in Xserver/mfb/mfbfillrct.c and -miPolyFillRect() in Xserver/mi/mifillrct.c. -.nf - - void pGC->ops->PolyFillArc(dst, pGC, n, pArc) - DrawablePtr dst; - GCPtr pGC; - int n; - xArc *pArc; - -.fi -PolyFillArc fills a shape for each arc in the -list that is bounded by the arc and one or two -line segments with the current fill style. - -An example implementation is miPolyFillArc() in Xserver/mi/mifillarc.c. -.nf - - void pGC->ops->PutImage(dst, pGC, depth, x, y, w, h, leftPad, format, pBinImage) - DrawablePtr dst; - GCPtr pGC; - int x, y, w, h; - int format; - char *pBinImage; - -.fi -PutImage copies a pixmap image into the drawable. The pixmap image -must be in X protocol format (either Bitmap, XYPixmap, or ZPixmap), -and format tells the format. (See the X protocol specification for -details on these formats). You must be able to accept all three -formats, because the client gets to decide which format to send. -Either the drawable and the pixmap image have the same depth, or the -source pixmap image must be a Bitmap. If a Bitmap, the foreground and -background colors will be applied to the destination. - -An example implementation is miPutImage() in Xserver/mfb/mibitblt.c. -.nf - - void pScreen->GetImage(src, x, y, w, h, format, planeMask, pBinImage) - DrawablePtr src; - int x, y, w, h; - unsigned int format; - unsigned long planeMask; - char *pBinImage; - -.fi -GetImage copies the bits from the source drawable into -the destination pointer. The bits are written into the buffer -according to the server-defined pixmap padding rules. -pBinImage is guaranteed to be big enough to hold all -the bits that must be written. - -This routine does not correspond exactly to the X protocol GetImage -request, since DIX has to break the reply up into buffers of a size -requested by the transport layer. If format is ZPixmap, the bits are -written in the ZFormat for the depth of the drawable; if there is a 0 -bit in the planeMask for a particular plane, all pixels must have the -bit in that plane equal to 0. If format is XYPixmap, planemask is -guaranteed to have a single bit set; the bits should be written in -Bitmap format, which is the format for a single plane of an XYPixmap. - -An example implementation is miGetImage() in Xserver/mi/mibitblt.c. -.nf - - void pGC->ops->ImageText8(pDraw, pGC, x, y, count, chars) - DrawablePtr pDraw; - GCPtr pGC; - int x, y; - int count; - char *chars; - -.fi -ImageText8 draws text. The text is drawn in the foreground color; the -background color fills the remainder of the character rectangles. The -coordinates specify the baseline and start of the text. - -An example implementation is miImageText8() in Xserver/mi/mipolytext.c. -.nf - - int pGC->ops->PolyText8(pDraw, pGC, x, y, count, chars) - DrawablePtr pDraw; - GCPtr pGC; - int x, y; - int count; - char *chars; - -.fi -PolyText8 works like ImageText8, except it draws with -the current fill style for special effects such as -shaded text. -See the X protocol specification for more details. - -An example implementation is miPolyText8() in Xserver/mi/mipolytext.c. -.nf - - int pGC->ops->PolyText16(pDraw, pGC, x, y, count, chars) - DrawablePtr pDraw; - GCPtr pGC; - int x, y; - int count; - unsigned short *chars; - - void pGC->ops->ImageText16(pDraw, pGC, x, y, count, chars) - DrawablePtr pDraw; - GCPtr pGC; - int x, y; - int count; - unsigned short *chars; - -.fi -These two routines are the same as the "8" versions, -except that they are for 16-bit character codes (useful -for oriental writing systems). - -The primary difference is in the way the character information is -looked up. The 8-bit and the 16-bit versions obviously have different -kinds of character values to look up; the main goal of the lookup is -to provide a pointer to the CharInfo structs for the characters to -draw and to pass these pointers to the Glyph routines. Given a -CharInfo struct, lower-level software can draw the glyph desired with -little concern for other characteristics of the font. - -16-bit character fonts have a row-and-column scheme, where the 2bytes -of the character code constitute the row and column in a square matrix -of CharInfo structs. Each font has row and column minimum and maximum -values; the CharInfo structures form a two-dimensional matrix. - -Example implementations are miPolyText16() and -miImageText16() in Xserver/mi/mipolytext.c. - -See the X protocol specification for more details on these graphic operations. -.LP -There is a hook in the GC ops, called LineHelper, that used to be used in the -sample implementation by the code for wide lines. It no longer servers any -purpose in the sample servers, but still exists, #ifdef'ed by NEED_LINEHELPER, -in case someone needs it. -.NH 2 -Pixblit Procedures -.XS -Pixblit Procedures -.XE -.LP -The Drawing Primitive functions must be defined for your server. -One possible way to do this is to use the mi routines from the sample server. -If you choose to use the mi routines (even part of them!) you must implement -these Pixblit routines. -These routines read and write pixel values -and deal directly with the image data. - -The Pixblit routines for the sample server are part of the "mfb" -routines (for Monochrome Frame Buffer), and "cfb" routines (for Color -Frame Buffer). As with the mi routines, the mfb and cfb routines are -portable but are not as portable as the mi routines. - -The mfb routines only work for monochrome frame buffers, the simplest -type of display. Furthermore, they only work for screens that -organize their bits in rows of pixels on the screen. (See the -Strategies document for more details on porting mfb.) The cfb -routines work for packed-pixel displays from 2 to 32 bits in depth, -although they have a bit of code which has been tuned to run on 8-bit -(1 pixel per byte) displays. - -In other words, if you have a "normal" frame buffer type display, you -can probably use either the mfb or cfb code, and the mi code. If you -have a stranger hardware, you will have to supply your own Pixblit -routines, but you can use the mi routines on top of them. If you have -better ways of doing some of the Drawing Primitive functions, then you -may want to supply some of your own Drawing Primitive routines. (Even -people who write their own Drawing Primitives save at least some of -the mi code for certain special cases that their hardware or library -or fancy algorithm does not handle.) - -The client, DIX, and the machine-independent routines do not carry the -final responsibility of clipping. They all depend upon the Pixblit -routines to do their clipping for them. The rule is, if you touch the -frame buffer, you clip. - -(The higher level routines may decide to clip at a high level, but -this is only for increased performance and cannot substitute for -bottom-level clipping. For instance, the mi routines, DIX, or the -client may decide to check all character strings to be drawn and chop -off all characters that would not be displayed. If so, it must retain -the character on the edge that is partly displayed so that the Pixblit -routines can clip off precisely at the right place.) - -To make this easier, all of the reasons to clip can be combined into -one region in your ValidateGC procedure. You take this composite clip -region with you into the Pixblit routines. (The sample server does -this.) - -Also, FillSpans() has to apply tile and stipple patterns. The -patterns are all aligned to the window origin so that when two people -write patches that are contiguous, they will merge nicely. (Really, -they are aligned to the patOrg point in the GC. This defaults to (0, -0) but can be set by the client to anything.) - -However, the mi routines can translate (relocate) the points from -window-relative to screen-relative if desired. If you set the -miTranslate field in the GC (set it in the CreateGC or ValidateGC -routine), then the mi output routines will translate all coordinates. -If it is false, then the coordinates will be passed window-relative. -Screens with no hardware translation will probably set miTranslate to -TRUE, so that geometry (e.g. polygons, rectangles) can be translated, -rather than having the resulting list of scanlines translated; this is -good because the list vertices in a drawing request will generally be -much smaller than the list of scanlines it produces. Similarly, -hardware that does translation can set miTranslate to FALSE, and avoid -the extra addition per vertex, which can be (but is not always) -important for getting the highest possible performance. (Contrast the -behavior of GetSpans, which is not expected to be called as often, and -so has different constraints.) The miTranslate field is settable in -each GC, if , for example, you are mixing several kinds of -destinations (offscreen pixmaps, main memory pixmaps, backing store, -and windows), all of which have different requirements, on one screen. - -As with other drawing routines, there are fields in the GC to direct -higher code to the correct routine to execute for each function. In -this way, you can optimize for special cases, for example, drawing -solids versus drawing stipples. - -The Pixblit routines are broken up into three sets. The Span routines -simply fill in rows of pixels. The Glyph routines fill in character -glyphs. The PushPixels routine is a three-input bitblt for more -sophisticated image creation. - -It turns out that the Glyph and PushPixels routines actually have a -machine-independent implementation that depends upon the Span -routines. If you are really pressed for time, you can use these -versions, although they are quite slow. - -.NH 3 -Span Routines -.XS -Span Routines -.XE -.LP -For these routines, all graphic operations have been reduced to "spans." -A span is a horizontal row of pixels. -If you can design these routines which write into and read from -rows of pixels at a time, you can use the mi routines. - -Each routine takes -a destination drawable to draw into, a GC to use while drawing, -the number of spans to do, and two pointers to arrays that indicate the list -of starting points and the list of widths of spans. -.nf - - void pGC->ops->FillSpans(dst, pGC, nSpans, pPoints, pWidths, sorted) - DrawablePtr dst; - GCPtr pGC; - int nSpans; - DDXPointPtr pPoints; - int *pWidths; - int sorted; - -.fi -FillSpans should fill horizontal rows of pixels with -the appropriate patterns, stipples, etc., -based on the values in the GC. -The starting points are in the array at pPoints; the widths are in pWidths. -If sorted is true, the scan lines are in increasing y order, in which case -you may be able to make assumptions and optimizations. -.LP -GC components: alu, clipOrg, clientClip, and fillStyle. -.LP -GC mode-dependent components: fgPixel (for fillStyle Solid); tile, patOrg -(for fillStyle Tile); stipple, patOrg, fgPixel (for fillStyle Stipple); -and stipple, patOrg, fgPixel and bgPixel (for fillStyle OpaqueStipple). - -.nf - - void pGC->ops->SetSpans(pDrawable, pGC, pSrc, ppt, pWidths, nSpans, sorted) - DrawablePtr pDrawable; - GCPtr pGC; - char *pSrc; - DDXPointPtr pPoints; - int *pWidths; - int nSpans; - int sorted; - -.fi -For each span, this routine should copy pWidths bits from pSrc to -pDrawable at pPoints using the raster-op from the GC. -If sorted is true, the scan lines are in increasing y order. -The pixels in pSrc are -padded according to the screen's padding rules. -These -can be used to support -interesting extension libraries, for example, shaded primitives. It does not -use the tile and stipple. -.LP -GC components: alu, clipOrg, and clientClip -.LP - -The above functions are expected to handle all modifiers in the current -GC. Therefore, it is expedient to have -different routines to quickly handle common special cases -and reload the procedure pointers -at validate time, as with the other output functions. -.nf - - void pScreen->GetSpans(pDrawable, wMax, pPoints, pWidths, nSpans) - DrawablePtr pDrawable; - int wMax; - DDXPointPtr pPoints; - int *pWidths; - int nSpans; - char *pDst; - -.fi -For each span, GetSpans gets bits from the drawable starting at pPoints -and continuing for pWidths bits. -Each scanline returned will be server-scanline padded. -The routine can return NULL if memory cannot be allocated to hold the -result. - -GetSpans never translates -- for a window, the coordinates are already -screen-relative. Consider the case of hardware that doesn't do -translation: the mi code that calls ddX will translate each shape -(rectangle, polygon,. etc.) before scan-converting it, which requires -many fewer additions that having GetSpans translate each span does. -Conversely, consider hardware that does translate: it can set its -translation point to (0, 0) and get each span, and the only penalty is -the small number of additions required to translate each shape being -scan-converted by the calling code. Contrast the behavior of -FillSpans and SetSpans (discussed above under miTranslate), which are -expected to be used more often. - -Thus, the penalty to hardware that does hardware translation is -negligible, and code that wants to call GetSpans() is greatly -simplified, both for extensions and the machine-independent core -implementation. - -.NH 4 -Glyph Routines -.XS -Glyph Routines -.XE -.LP -The Glyph routines draw individual character glyphs for text drawing requests. - -You have a choice in implementing these routines. You can use the mi -versions; they depend ultimately upon the span routines. Although -text drawing will work, it will be very slow. - -.nf - - void pGC->ops->PolyGlyphBlt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase) - DrawablePtr pDrawable; - GCPtr pGC; - int x , y; - unsigned int nglyph; - CharInfoRec **ppci; /* array of character info */ - pointer unused; /* unused since R5 */ - -.fi -.LP -GC components: alu, clipOrg, clientClip, font, and fillStyle. -.LP -GC mode-dependent components: fgPixel (for fillStyle Solid); tile, patOrg -(for fillStyle Tile); stipple, patOrg, fgPixel (for fillStyle Stipple); -and stipple, patOrg, fgPixel and bgPixel (for fillStyle OpaqueStipple). -.nf - - void pGC->ops->ImageGlyphBlt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase) - DrawablePtr pDrawable; - GCPtr pGC; - int x , y; - unsigned int nglyph; - CharInfoRec **ppci; /* array of character info */ - pointer unused; /* unused since R5 */ - -.fi -.LP -GC components: clipOrg, clientClip, font, fgPixel, bgPixel -.LP -These routines must copy the glyphs defined by the bitmaps in -pglyphBase and the font metrics in ppci to the DrawablePtr, pDrawable. -The poly routine follows all fill, stipple, and tile rules. The image -routine simply blasts the glyph onto the glyph's rectangle, in -foreground and background colors. - -More precisely, the Image routine fills the character rectangle with -the background color, and then the glyph is applied in the foreground -color. The glyph can extend outside of the character rectangle. -ImageGlyph() is used for terminal emulators and informal text purposes -such as button labels. - -The exact specification for the Poly routine is that the glyph is -painted with the current fill style. The character rectangle is -irrelevant for this operation. PolyText, at a higher level, includes -facilities for font changes within strings and such; it is to be used -for WYSIWYG word processing and similar systems. - -Both of these routines must clip themselves to the overall clipping region. - -Example implementations in mi are miPolyGlyphBlt() and -miImageGlyphBlt() in Xserver/mi/miglblt.c. - -.NH 4 -PushPixels routine -.XS -PushPixels routine -.XE -.LP -The PushPixels routine writes the current fill style onto the drawable -in a certain shape defined by a bitmap. PushPixels is equivalent to -using a second stipple. You can thing of it as pushing the fillStyle -through a stencil. PushPixels is not used by any of the mi rendering code, -but is used by the mi software cursor code. -.LP -.nf -.ta 1i 3i - Suppose the stencil is: 00111100 - and the stipple is: 10101010 - PushPixels result: 00101000 -.fi -.LP -You have a choice in implementing this routine. -You can use the mi version which depends ultimately upon FillSpans(). -Although it will work, it will be slow. -.LP -.nf - - void pGC->ops->PushPixels(pGC, pBitMap, pDrawable, dx, dy, xOrg, yOrg) - GCPtr pGC; - PixmapPtr pBitMap; - DrawablePtr pDrawable; - int dx, dy, xOrg, yOrg; - -.fi -.LP -GC components: alu, clipOrg, clientClip, and fillStyle. -.LP -GC mode-dependent components: fgPixel (for fillStyle Solid); tile, patOrg -(for fillStyle Tile); stipple, patOrg, fgPixel (for fillStyle Stipple); -and stipple, patOrg, fgPixel and bgPixel (for fillStyle OpaqueStipple). - -PushPixels applys the foreground color, tile, or stipple from the pGC -through a stencil onto pDrawable. pBitMap points to a stencil (of -which we use an area dx wide by dy high), which is oriented over the -drawable at xOrg, yOrg. Where there is a 1 bit in the bitmap, the -destination is set according to the current fill style. Where there -is a 0 bit in the bitmap, the destination is left the way it is. - -This routine must clip to the overall clipping region. - -An Example implementation is miPushPixels() in Xserver/mi/mipushpxl.c. - -.NH 2 -Shutdown Procedures -.XS -Shutdown Procedures -.XE -.LP -.nf - void AbortDDX() - void ddxGiveUp() -.fi -.LP -Some hardware may require special work to be done before the server -exits so that it is not left in an intermediate state. As explained -in the OS layer, FatalError() will call AbortDDX() just before -terminating the server. In addition, ddxGiveUp() will be called just -before terminating the server on a "clean" death. What AbortDDX() and -ddxGiveUP do is left unspecified, only that stubs must exist in the -ddx layer. It is up to local implementors as to what they should -accomplish before termination. - -.NH 3 -Command Line Procedures -.XS -Command Line Procedures -.XE -.LP -.nf - int ddxProcessArgument(argc, argv, i) - int argc; - char *argv[]; - int i; - - void - ddxUseMsg() - -.fi -.LP -You should write these routines to deal with device-dependent command line -arguments. The routine ddxProcessArgument() is called with the command line, -and the current index into argv; you should return zero if the argument -is not a device-dependent one, and otherwise return a count of the number -of elements of argv that are part of this one argument. For a typical -option (e.g., "-realtime"), you should return the value one. This -routine gets called before checks are made against device-independent -arguments, so it is possible to peek at all arguments or to override -device-independent argument processing. You can document the -device-dependent arguments in ddxUseMsg(), which will be -called from UseMsg() after printing out the device-independent arguments. - -.bp -.NH 2 -Wrappers and devPrivates -.XS -Wrappers and devPrivates -.XE -.LP -Two new extensibility concepts have been developed for release 4, Wrappers -and devPrivates. These replace the R3 GCInterest queues, which were not a -general enough mechanism for many extensions and only provided hooks into a -single data structure. -.NH 3 -devPrivates -.XS -devPrivates -.XE -.LP -devPrivates are arrays of values attached to various data structures -(Screens, GCs, Windows, and Pixmaps currently). These arrays are sized dynamically at -server startup (and reset) time as various modules allocate portions of -them. They can be used for any purpose; each array entry is actually a -union, DevUnion, of common useful types (pointer, long and unsigned long). -devPrivates must be allocated on startup and whenever the server resets. To -make this easier, the global variable "serverGeneration" is incremented each -time devPrivates should be allocated, but before the initialization process -begins, typical usage would be: -.nf -static int privateGeneration = 0; - - if (privateGeneration != serverGeneration) - { - allocate devPrivates here. - - privateGeneration = serverGeneration; - } -.fi -.NH 4 -Screen devPrivates -.XS -Screen devPrivates -.XE -.LP -An index into every screen devPrivates array is allocated with -.nf - int AllocateScreenPrivateIndex() -.fi -This call can occur at any time, each existing devPrivates array is resized -to accommodate the new entry. This routine returns -1 indicating an -allocation failure. Otherwise, the return value can be used to index the -array of devPrivates on any screen: -.nf - private = (PrivatePointer) pScreen->devPrivates[screenPrivateIndex].ptr; -.fi -The pointer in each screen is not initialized by -AllocateScreenPrivateIndex(). -.NH 4 -Window devPrivates -.XS -Window devPrivates -.XE -.LP -An index into every window devPrivates array is allocated with -.nf - int AllocateWindowPrivateIndex () -.fi -AllocateWindowPrivateIndex() never returns an error. This call must be -associated with a call which causes a chunk of memory to be automatically -allocated and attached to the devPrivate entry on every screen which the -module will need to use the index: -.nf - Bool AllocateWindowPrivate (pScreen, index, amount) - ScreenPtr pScreen; - int index; - unsigned amount; -.fi -If this space is not always needed for every object, use 0 as the amount. -In this case, the pointer field of the entry in the devPrivates array is -initialized to NULL. This call exists so that DIX may preallocate all of -the space required for an object with one call; this reduces memory -fragmentation considerably. AllocateWindowPrivate returns FALSE on -allocation failure. Both of these calls must occur before any window -structures are allocated; the server is careful to avoid window creation -until all modules are initialized, but do not call this after -initialization. A typical allocation sequence for WindowPrivates would be: -.nf - privateInitialize (pScreen) - ScreenPtr pScreen; - { - if (privateGeneration != serverGeneration) - { - windowPrivateIndex = AllocateWindowPrivateIndex(); - privateGeneration = serverGeneration; - } - - return (AllocateWindowPrivate(pScreen, windowPrivateIndex, - sizeof(windowPrivateStructure))); - } -.fi -.NH 4 -GC and Pixmap devPrivates -.XS -GC and Pixmap devPrivates -.XE -.LP -The calls for GCs and Pixmaps mirror the Window calls exactly; they have the -same requirements and limitations: -.nf - int AllocateGCPrivateIndex () - - Bool AllocateGCPrivate (pScreen, index, amount) - ScreenPtr pScreen; - int index; - unsigned amount; - - int AllocatePixmapPrivateIndex () - - Bool AllocatePixmapPrivate (pScreen, index, amount) - ScreenPtr pScreen; - int index; - unsigned amount; -.fi -.NH 3 -Wrappers -.XS -Wrappers -.XE -.LP -Wrappers are not a body of code, nor an interface spec. They are, instead, -a technique for hooking a new module into an existing calling sequence. -There are limitations on other portions of the server implementation which -make using wrappers possible; limits on when specific fields of data -structures may be modified. They are intended as a replacement for -GCInterest queues, which were not general enough to support existing -modules; in particular software cursors and backing store both needed more -control over the activity. The general mechanism for using wrappers is: -.nf -privateWrapperFunction (object, ...) - ObjectPtr object; -{ - pre-wrapped-function-stuff ... - - object->functionVector = (void *) object->devPrivates[privateIndex].ptr; - (*object->functionVector) (object, ...); - /* - * this next line is occasionally required by the rules governing - * wrapper functions. Always using it will not cause problems. - * Not using it when necessary can cause severe troubles. - */ - object->devPrivates[privateIndex].ptr = (pointer) object->functionVector; - object->functionVector = privateWrapperFunction; - - post-wrapped-function-stuff ... -} - -privateInitialize (object) - ObjectPtr object; -{ - object->devPrivates[privateIndex].ptr = (pointer) object->functionVector; - object->functionVector = privateWrapperFunction; -} -.fi -Thus the privateWrapperFunction provides hooks for performing work both -before and after the wrapped function has been called; the process of -resetting the functionVector is called "unwrapping" while the process of -fetching the wrapped function and replacing it with the wrapping function -is called "wrapping". It should be clear that GCInterest queues could -be emulated using wrappers. In general, any function vectors contained in -objects can be wrapped, but only vectors in GCs and Screens have been tested. -.LP -Wrapping screen functions is quite easy; each vector is individually -wrapped. Screen functions are not supposed to change after initialization, -so rewrapping is technically not necessary, but causes no problems. -.LP -Wrapping GC functions is a bit more complicated. GC's have two tables of -function vectors, one hanging from gc->ops and the other from gc->funcs, which -should be initially wrapped from a CreateGC wrapper. Wrappers should modify -only table pointers, not the contents of the tables, as they -may be shared by more than one GC (and, in the case of funcs, are probably -shared by all gcs). Your func wrappers may change the GC funcs or ops -pointers, and op wrappers may change the GC op pointers but not the funcs. - -Thus, the rule for GC wrappings is: wrap the funcs from CreateGC and, in each -func wrapper, unwrap the ops and funcs, call down, and re-wrap. In each op -wrapper, unwrap the ops, call down, and rewrap afterwards. Note that in -re-wrapping you must save out the pointer you're replacing again. This way the -chain will be maintained when wrappers adjust the funcs/ops tables they use. -.LP -.NH 2 -Work Queue -.XS -Work Queue -.XE -.LP -To queue work for execution when all clients are in a stable state (i.e. -just before calling select() in WaitForSomething), call: -.nf - Bool QueueWorkProc(function,client,closure) - Bool (*function)(); - ClientPtr client; - pointer closure; -.fi -.LP -When the server is about to suspend itself, the given function will be -executed: -.nf - (*function) (client, closure) -.fi -.LP -Neither client nor closure are actually used inside the work queue routines. -.NH 1 -Extension Interfaces -.XS -Extension Interfaces -.XE -.LP -This section describes the functions which exist in DDX for extension -writers to use. -.NH 2 -Extension initialization -.LP -This function should be called from your extensionInitProc which -should be called by InitExtensions. -.nf - - ExtensionEntry *AddExtension(name, NumEvents,NumErrors, - MainProc, SwappedMainProc, CloseDownProc, MinorOpcodeProc) - - char *name; /*Null terminate string; case matters*/ - int NumEvents; - int NumErrors; - int (* MainProc)(ClientPtr);/*Called if client matches server order*/ - int (* SwappedMainProc)(ClientPtr);/*Called if client differs from server*/ - void (* CloseDownProc)(ExtensionEntry *); - unsigned short (*MinorOpcodeProc)(ClientPtr); - -.fi -name is the name used by clients to refer to the extension. NumEvents is the -number of event types used by the extension, NumErrors is the number of -error codes needed by the extension. MainProc is called whenever a client -accesses the major opcode assigned to the extension. SwappedMainProc is -identical, except the client using the extension has reversed byte-sex. -CloseDownProc is called at server reset time to deallocate any private -storage used by the extension. MinorOpcodeProc is used by DIX to place the -appropriate value into errors. The DIX routine StandardMinorOpcode can be -used here which takes the minor opcode from the normal place in the request -(i.e. just after the major opcode). -.NH 2 -Resource type allocation. -.LP -These functions should also be called from your extensionInitProc to -allocate all of the various resource classes and types required for -the extension. Each time the server resets, these types must be reallocated -as the old allocations will have been discarded. -Resource types are integer values starting at 1. Get -a resource type by calling -.nf - - RESTYPE CreateNewResourceType(deleteFunc) - -.fi -deleteFunc will be called to destroy all resources with this -type. - -Resource classes are masks starting at 1 << 31 which can -be or'ed with any resource type to provide attributes for the -type. To allocate a new class bit, call -.nf - - RESTYPE CreateNewResourceClass() - -.fi -There are two ways of looking up resources, by type or -by class. Classes are non-exclusive subsets of the space of -all resources, so you can lookup the union of multiple classes. -(RC_ANY is the union of all classes). -.LP -Note that the appropriate class bits must be or'ed into the value returned -by CreateNewResourceType when calling resource lookup functions. -.LP -If you need to create a ``private'' resource ID for internal use, you -can call FakeClientID. -.nf - - XID FakeClientID(client) - int client; - -.fi -This allocates from ID space reserved for the server. -.LP -To associate a resource value with an ID, use AddResource. -.nf - - Bool AddResource(id, type, value) - XID id; - RESTYPE type; - pointer value; - -.fi -The type should be the full type of the resource, including any class -bits. If AddResource fails to allocate memory to store the resource, -it will call the deleteFunc for the type, and then return False. -.LP -To free a resource, use one of the following. -.nf - - void FreeResource(id, skipDeleteFuncType) - XID id; - RESTYPE skipDeleteFuncType; - - void FreeResourceByType(id, type, skipFree) - XID id; - RESTYPE type; - Bool skipFree; - -.nf -FreeResource frees all resources matching the given id, regardless of -type; the type's deleteFunc will be called on each matching resource, -except that skipDeleteFuncType can be set to a single type for which -the deleteFunc should not be called (otherwise pass RT_NONE). -FreeResourceByType frees a specific resource matching a given id -and type; if skipFree is true, then the deleteFunc is not called. -.LP -To look up a resource, use one of the following. -.nf - - pointer LookupIDByType(id, rtype) - XID id; - RESTYPE rtype; - - pointer LookupIDByClass(id, classes) - XID id; - RESTYPE classes; - -.fi -LookupIDByType finds a resource with the given id and exact type. -LookupIDByClass finds a resource with the given id whose type is -included in any one of the specified classes. -.NH 2 -Macros and Other Helpers -.LP -There are a number of macros in Xserver/include/dix.h which -are useful to the extension writer. Ones of particular interest -are: REQUEST, REQUEST_SIZE_MATCH, REQUEST_AT_LEAST_SIZE, -REQUEST_FIXED_SIZE, LEGAL_NEW_RESOURCE, LOOKUP_DRAWABLE, VERIFY_GC, and -VALIDATE_DRAWABLE_AND_GC. Useful byte swapping macros can be found -in Xserver/include/misc.h: lswapl, lswaps, LengthRestB, LengthRestS, -LengthRestL, SwapRestS, SwapRestL, swapl, swaps, cpswapl, and cpswaps. -.bp -.NH 1 -Callback Manager -.XS -Callback Manager -.XE -.LP -To satisfy a growing number of requests for the introduction of ad hoc -notification style hooks in the server, a generic callback manager was -introduced in R6. A callback list object can be introduced for each -new hook that is desired, and other modules in the server can register -interest in the new callback list. The following functions support -these operations. -.LP -Before getting bogged down in the interface details, an typical usage -example should establish the framework. Let's look at the -ClientStateCallback in dix/dispatch.c. The purpose of this particular -callback is to notify intereseted parties when a client's state -(initial, running, gone) changes. The callback is "created" in this -case by simply declaring a variable: - - CallbackListPtr ClientStateCallback; - -Whenever the client's state changes, the following code appears, which notifies -all intereseted parties of the change: - - if (ClientStateCallback) CallCallbacks(&ClientStateCallback, (pointer)client); - -Interested parties subscribe to the ClientStateCallback list by saying: - - AddCallback(&ClientStateCallback, func, data); - -When CallCallbacks is invoked on the list, func will be called thusly: - - (*func)(&ClientStateCallback, data, client) - -Now for the details. -.nf - - Bool CreateCallbackList(pcbl, cbfuncs) - CallbackListPtr *pcbl; - CallbackFuncsPtr cbfuncs; - -.fi -CreateCallbackList creates a callback list. We envision that this -function will be rarely used because the callback list is created -automatically (if it doesn't already exist) when the first call to -AddCallback is made on the list. The only reason to explicitly create -the callback list with this function is if you want to override the -implementation of some of the other operations on the list by passing -your own cbfuncs. You also lose something by explicit creation: you -introduce an order dependency during server startup because the list -must be created before any modules subscribe to it. Returns TRUE if -successful. -.nf - - Bool AddCallback(pcbl, callback, subscriber_data) - CallbackListPtr *pcbl; - CallbackProcPtr callback; - pointer subscriber_data; - -.fi -Adds the (callback, subscriber_data) pair to the given callback list. Creates the callback -list if it doesn't exist. Returns TRUE if successful. -.nf - - Bool DeleteCallback(pcbl, callback, subscriber_data) - CallbackListPtr *pcbl; - CallbackProcPtr callback; - pointer subscriber_data; - -.fi -Removes the (callback, data) pair to the given callback list if present. -Returns TRUE if (callback, data) was found. -.nf - - void CallCallbacks(pcbl, call_data) - CallbackListPtr *pcbl; - pointer call_data; - -.fi -For each callback currently registered on the given callback list, call -it as follows: - - (*callback)(pcbl, subscriber_data, call_data); - -.nf - - void DeleteCallbackList(pcbl) - CallbackListPtr *pcbl; - -.fi -Destroys the given callback list. -.bp -.NH 1 -Summary of Routines -.XS -Summary of Routines -.XE -.LP -This is a summary of the routines discussed in this document. -The procedure names are in alphabetical order. -The Struct is the structure it is attached to; if blank, this -procedure is not attached to a struct and must be named as shown. -The sample server provides implementations in the following -categories. Notice that many of the graphics routines have both -mi and mfb implementations. -.TS -l l. -dix portable to all systems; do not attempt to rewrite (Xserver/dix) -os routine provided in Xserver/os or Xserver/include/os.h -ddx frame buffer dependent (examples in Xserver/mfb,Xserver/cfb) -mi routine provided in Xserver/mi -hd hardware dependent (examples in many Xserver/hw directories) -none not implemented in sample implementation -.TE -.TS -expand; -c c c -l c l. -Procedure Port Struct -_ -ALLOCATE_LOCAL os -AbortDDX hd -AddCallback dix -AddEnabledDevice os -AddInputDevice dix -AddScreen dix -AdjustWaitForDelay os -Bell hd Device -ChangeClip mi GC func -ChangeGC GC func -ChangeWindowAttributes ddx Screen -ClearToBackground ddx Window -ClientAuthorized os -ClientSignal dix -ClientSleep dix -ClientWakeup dix -ClipNotify ddx Screen -CloseScreen hd -ConstrainCursor hd Screen -CopyArea mi GC op -CopyGCDest ddx GC func -CopyGCSource none GC func -CopyPlane mi GC op -CopyWindow ddx Window -CreateGC ddx Screen -CreateCallbackList dix -CreatePixmap ddx Screen -CreateScreenResources ddx Screen -CreateWellKnowSockets os -CreateWindow ddx Screen -CursorLimits hd Screen -DEALLOCATE_LOCAL os -DeleteCallback dix -DeleteCallbackList dix -DestroyClip ddx GC func -DestroyGC ddx GC func -DestroyPixmap ddx Screen -DestroyWindow ddx Screen -DisplayCursor hd Screen -Error os -.TE -.bp -.TS -expand; -c c c -l c l. -Procedure Port Struct -_ -ErrorF os -FatalError os -FillPolygon mi GC op -FillSpans ddx GC op -FlushAllOutput os -FlushIfCriticalOutputPending os -FreeScratchPixmapHeader dix -GetImage mi Screen -GetMotionEvents hd Device -GetScratchPixmapHeader dix -GetSpans ddx Screen -GetStaticColormap ddx Screen -ImageGlyphBlt mi GC op -ImageText16 mi GC op -ImageText8 mi GC op -InitInput hd -InitKeyboardDeviceStruct dix -InitOutput hd -InitPointerDeviceStruct dix -InsertFakeRequest os -InstallColormap ddx Screen -Intersect mi Screen -Inverse mi Screen -LegalModifier hd -LineHelper mi GC op -ListInstalledColormaps ddx Screen -LookupKeyboardDevice dix -LookupPointerDevice dix -ModifyPixmapheader mi Screen -NextAvailableClient dix -OsInit os -PaintWindowBackground mi Window -PaintWindowBorder mi Window -PointerNonInterestBox hd Screen -PointInRegion mi Screen -PolyArc mi GC op -PolyFillArc mi GC op -PolyFillRect mi GC op -PolyGlyphBlt mi GC op -Polylines mi GC op -PolyPoint mi GC op -PolyRectangle mi GC op -PolySegment mi GC op -PolyText16 mi GC op -PolyText8 mi GC op -PositionWindow ddx Screen -ProcessInputEvents hd -PushPixels mi GC op -PutImage mi GC op -QueryBestSize hd Screen -ReadRequestFromClient os -.TE -.bp -.TS -expand; -c c c -l c l. -Procedure Port Struct -_ -RealizeCursor hd Screen -RealizeFont ddx Screen -RealizeWindow ddx Screen -RecolorCursor hd Screen -RectIn mi Screen -RegionCopy mi Screen -RegionCreate mi Screen -RegionDestroy mi Screen -RegionEmpty mi Screen -RegionExtents mi Screen -RegionNotEmpty mi Screen -RegionReset mi Screen -ResolveColor ddx Screen -RegisterKeyboardDevice dix -RegisterPointerDevice dix -RemoveEnabledDevice os -ResetCurrentRequest os -RestoreAreas none BackingStore -SaveDoomedAreas none BackingStore -SaveScreen ddx Screen -SetCriticalOutputPending os -SetCursorPosition hd Screen -SetInputCheck dix -SetSpans ddx GC op -StoreColors ddx Screen -Subtract mi Screen -TimerCancel os -TimerCheck os -TimerForce os -TimerFree os -TimerInit os -TimerSet os -TimeSinceLastInputEvent hd -TranslateBackingStore none BackingStore -TranslateRegion mi Screen -UninstallColormap ddx Screen -Union mi Screen -UnrealizeCursor hd Screen -UnrealizeFont ddx Screen -UnrealizeWindow ddx Screen -ValidateGC ddx GC func -ValidateTree mi Screen -WaitForSomething os -WindowExposures mi Window -WriteToClient os -Xalloc os -Xfree os -Xrealloc os -.TE - -.TC diff --git a/doc/xorg-docs/specs/Xserver/fontlib.ms b/doc/xorg-docs/specs/Xserver/fontlib.ms deleted file mode 100644 index f4f3b0790..000000000 --- a/doc/xorg-docs/specs/Xserver/fontlib.ms +++ /dev/null @@ -1,403 +0,0 @@ -.\" Copyright 1993 Network Computing Devices -.\" -.\" Permission to use, copy, modify, distribute, and sell this software and -.\" its documentation for any purpose is hereby granted without fee, provided -.\" that the above copyright notice appear in all copies and that both that -.\" copyright notice and this permission notice appear in supporting -.\" documentation, and that the name of Network Computing Devices -.\" not be used in advertising or -.\" publicity pertaining to distribution of the software without specific, -.\" written prior permission. Network Computing Devices makes -.\" no representations about the -.\" suitability of this software for any purpose. It is provided "as is" -.\" without express or implied warranty. -.\" -.\" Copyright 1993, 1994 X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" ``Software''), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be -.\" included in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, -.\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.ps 12 -.nr PS 12 -.de Cs -.IP -.nf -.ft C -.. -.de Ce -.ft P -.fi -.. -.\" $Xorg: fontlib.ms,v 1.3 2000/08/17 19:42:42 cpqbld Exp $ -.EF 'Font Library Interface'- % -'July 27, 1991' -.OF 'Font Library Interface'- % -'July 27, 1991' -.EH '''' -.OH '''' -.TL -The X Font Library -.AU -Keith Packard -.AI -MIT X Consortium -.AU -David Lemke -.AI -Network Computing Devices -.LP -This document describes the data structures and interfaces for using the X -Font library. It is intended as a reference for programmers building X -and Font servers. You may want to refer to the following documents: -.IP \(bu 5 -"Definition of the Porting Layer for the X v11 Sample Server" for a -discussion on how this library interacts with the X server -.IP \(bu 5 -"Font Server Implementation Overview" which discusses the design of the font -server. -.IP \(bu 5 -"Bitmap Distribution Format" which covers the contents of the bitmap font -files which this library reads; although the library is capable of reading -other formats as well, including non-bitmap fonts. -.IP \(bu 5 -"The X Font Service Protocol" for a description of the constraints placed on -the design by including support for this font service mechanism. -.LP -This document assumes the reader is familiar with the X server design, the -X protocol as it relates to fonts and the C programming language. As with -most MIT produced documentation, this relies heavily on the source code, so -have a listing handy. -.NH 1 -Requirements for the Font library -.LP -To avoid miles of duplicate code in the X server, the font server and the -various font manipulation tools, the font library should provide interfaces -appropriate for all of these tasks. In particular, the X server and font -server should be able to both use the library to access disk based fonts, -and to communicate with a font server. By providing a general library, we -hoped to avoid duplicating code between the X server and font server. -.LP -Another requirement is that the X server (or even a font server) be able to -continue servicing requests from other clients while awaiting a response -from the font server on behalf of one client. This is the strongest -requirement placed on the font library, and has warped the design in curious -ways. Because both the X server and font server are single threaded, the -font library must not suspend internally, rather it returns an indication of -suspension to the application which continues processing other things, until -the font data is ready, at which time it restarts the suspended request. -.LP -Because the code for reading and manipulating bitmap font data is used by -the font applications "mkfontdir" and "bdftopcf", the font library includes -bitmap-font specific interfaces which those applications use, instead of the -more general interfaces used by the X and font servers, which are unaware of -the source of the font data. These routines will be refered to as the -bitmap font access methods. -.NH 1 -General Font Library Interface details. -.LP -To avoid collision between the #define name space for errors, the Font -library defines a new set of return values: -.Cs -#define AllocError 80 -#define StillWorking 81 -#define FontNameAlias 82 -#define BadFontName 83 -#define Suspended 84 -#define Successful 85 -#define BadFontPath 86 -#define BadCharRange 87 -#define BadFontFormat 88 -#define FPEResetFailed 89 -.Ce -.LP -Whenever a routine returns \fBSuspended\fP, the font library will notify the -caller (via the ClientSignal interface described below) who should then -reinvoke the same routine again with the same arguments. -.NH 1 -Font Path Elements -.LP -At the center of the general font access methods used by X and fs is the -Font Path Element data structure. Like most structures in the X server, -this contains a collection of data and some function pointers for -manipulating this data: -.Cs -/* External view of font paths */ -typedef struct _FontPathElement { - int name_length; - char *name; - int type; - int refcount; - pointer private; -} FontPathElementRec, *FontPathElementPtr; - -typedef struct _FPEFunctions { - int (*name_check) ( /* name */ ); - int (*init_fpe) ( /* fpe */ ); - int (*reset_fpe) ( /* fpe */ ); - int (*free_fpe) ( /* fpe */ ); - int (*open_font) ( /* client, fpe, flags, - name, namelen, format, - fid, ppfont, alias */ ); - int (*close_font) ( /* pfont */ ); - int (*list_fonts) ( /* client, fpe, pattern, - patlen, maxnames, paths */ ); - int (*start_list_fonts_with_info) ( - /* client, fpe, name, namelen, - maxnames, data */ ); - int (*list_next_font_with_info) ( - /* client, fpe, name, namelen, - info, num, data */ ); - int (*wakeup_fpe) ( /* fpe, mask */ ); - int (*client_died) ( /* client, fpe */ ); -} FPEFunctionsRec, FPEFunctions; -.Ce -.LP -The function pointers are split out from the data structure to save memory; -additionally, this avoids any complications when initializing the data -structure as there would not be any way to discover the appropriate function -to call (a chicken and egg problem). -.LP -When a font path type is initialized, it passes the function pointers to the -server which are then stored in an FPEFunctionsRec. Each function is -described below in turn. -.NH 2 -(*name_check) -.LP -Each new font path member is passed to this function; if the return value -is Successful, then the FPE recognises the format of the string. This does -not guarantee that the FPE will be able to successfully use this member. -For example, the disk-based font directory file "fonts.dir" may be -corrupted, this will not be detected until the font path is initialized. -This routine never returns \fBSuspended\fP. -.NH 2 -(*init_fpe) -.LP -Initialize a new font path element. This function prepares a new font path -element for other requests: the disk font routine reads the "fonts.dir" and -"fonts.alias" files into the internal format, while the font server routine -connects to the requested font server and prepares for using it. This -routine returns Successful if everything went OK, otherwise the return value -indicates the source of the problem. This routine never returns \fBSuspended\fP. -.NH 2 -(*reset_fpe) -.LP -When the X font path is reset, and some of the new members are also in the -old font path, this function is called to reinitialize those FPEs. This -routine returns Successful if everything went OK. It returns FPEResetFailed -if (for some reason) the reset failed, and the caller should remove the old -FPE and simply create a new one in its place. This is used by the -disk-based fonts routine as resetting the internal directory structures -would be more complicated than simply having destroying the old and creating -a new. -.NH 2 -(*free_fpe) -.LP -When the server is finished with an FPE, this function is called to dispose -of any internal state. It should return Successful, unless something -terrible happens. -.NH 2 -(*open_font) -.LP -This routine requests that a font be opened. The client argument is used -by the font library only in connection with suspending/restarting the -request. The flags argument specifies some behaviour for the library and can -be any of: -.Cs -/* OpenFont flags */ -#define FontLoadInfo 0x0001 -#define FontLoadProps 0x0002 -#define FontLoadMetrics 0x0004 -#define FontLoadBitmaps 0x0008 -#define FontLoadAll 0x000f -#define FontOpenSync 0x0010 -.Ce -.LP -The various fields specify which portions of the font should be loaded at -this time. When FontOpenSync is specified, this routine will not return -until all of the requested portions are loaded. Otherwise, this routine may -return \fBSuspended\fP. When the presented font name is actually an alias -for some other font name, FontName Alias is returned, and the actual font -name is stored in the location pointed to by the \fIalias\fP argument as a -null-terminated string. -.NH 2 -(*close_font) -.LP -When the server is finished with a font, this routine disposes of any -internal state and frees the font data structure. -.NH 2 -(*list_fonts) -.LP -The \fIpaths\fP argument is a data structure which will be filled with all -of the font names from this directory which match the specified pattern. At -most \fImaxnames\fP will be added. This routine may return \fBSuspended\fP. -.NH 2 -(*start_list_fonts_with_info) -.LP -This routine sets any internal state for a verbose listing of all fonts -matching the specified pattern. This routine may return \fBSuspended\fP. -.NH 2 -(*list_next_font_with_info) -.LP -To avoid storing huge amounts of data, the interface for ListFontsWithInfo -allows the server to get one reply at a time and forward that to the -client. When the font name returned is actually an alias for some other -font, \fBFontNameAlias\fP will be returned. The actual font name is return -instead, and the font alias which matched the pattern is returned in the -location pointed to by data as a null-terminated string. The caller can -then get the information by recursively listing that font name with a -maxnames of 1. When \fBSuccessful\fP is returned, the matching font name is -returned, and a FontInfoPtr is stored in the location pointed to by -\fIdata\fP. \fIData\fP must be initialized with a pointer to a FontInfoRec -allocated by the caller. When the pointer pointed to by \fIdata\fP is not -left pointing at that storage, the caller mustn't free the associated -property data. This routine may return \fBSuspended\fP. -.NH 2 -(*wakeup_fpe) -.LP -Whenever an FPE function has returned Suspended, this routine is called -whenever the application wakes up from waiting for input (from select(2)). -This mask argument should be the value returned from select(2). -.NH 2 -(*client_died) -.LP -When an FPE function has returned \fBSuspended\fP and the associated client -is being destroyed, this function allows the font library to dispose of any -state associated with that client. -.NH 1 -Fonts -.LP -The data structure which actually contains the font information has changed -significantly since previous releases; it now attempts to hide the actual -storage format for the data from the application, providing accessor -functions to get at the data. This allows a range of internal details for -different font sources. The structure is split into two pieces, so that -ListFontsWithInfo can share information from the font when it has been -loaded. The FontInfo structure, then, contains only information germane to -LFWI. -.Cs -typedef struct _FontInfo { - unsigned short firstCol; /* range of glyphs for this font */ - unsigned short lastCol; - unsigned short firstRow; - unsigned short lastRow; - unsigned short defaultCh; /* default character index */ - unsigned int noOverlap:1; /* no combination of glyphs overlap */ - unsigned int terminalFont:1; /* Character cell font */ - unsigned int constantMetrics:1; /* all metrics are the same */ - unsigned int constantWidth:1; /* all character widths are the same*/ - unsigned int inkInside:1; /* all ink inside character cell */ - unsigned int inkMetrics:1; /* font has ink metrics */ - unsigned int allExist:1; /* no missing chars in range */ - unsigned int drawDirection:2; /* left-to-right/right-to-left*/ - unsigned int cachable:1; /* font needn't be opened each time*/ - unsigned int anamorphic:1; /* font is strangely scaled */ - short maxOverlap; /* maximum overlap amount */ - short pad; /* unused */ - xCharInfo maxbounds; /* glyph metrics maximums */ - xCharInfo minbounds; /* glyph metrics minimums */ - xCharInfo ink_maxbounds; /* ink metrics maximums */ - xCharInfo ink_minbounds; /* ink metrics minimums */ - short fontAscent; /* font ascent amount */ - short fontDescent; /* font descent amount */ - int nprops; /* number of font properties */ - FontPropPtr props; /* font properties */ - char *isStringProp; /* boolean array */ -} FontInfoRec, *FontInfoPtr; -.Ce -.LP -The font structure, then, contains a font info record, the format of the -bits in each bitmap and the functions which access the font records (which -are stored in an opaque format hung off of fontPrivate). -.Cs -typedef struct _Font { - int refcnt; - FontInfoRec info; - char bit; /* bit order: LSBFirst/MSBFirst */ - char byte; /* byte order: LSBFirst/MSBFirst */ - char glyph; /* glyph pad: 1, 2, 4 or 8 */ - char scan; /* glyph scan unit: 1, 2 or 4 */ - fsBitmapFormat format; /* FS-style format (packed) */ - int (*get_glyphs) ( /* font, count, chars, encoding, count, glyphs */ ); - int (*get_metrics) ( /* font, count, chars, encoding, count, glyphs */ ); - int (*get_bitmaps) (/* client, font, flags, format, - flags, nranges, ranges, data_sizep, - num_glyphsp, offsetsp, glyph_datap, - free_datap */ ); - int (*get_extents) (/* client, font, flags, nranges, - ranges, nextentsp, extentsp */); - void (*unload_font) ( /* font */ ); - FontPathElementPtr fpe; /* FPE associated with this font */ - pointer svrPrivate; /* X/FS private data */ - pointer fontPrivate; /* private to font */ - pointer fpePrivate; /* private to FPE */ - int maxPrivate; /* devPrivates (see below) */ - pointer *devPrivates; /* ... */ -} FontRec, *FontPtr; -.Ce -.LP -Yes, there are several different private pointers in the Font structure; they -were added haphazardly until the devPrivate pointers were added. Future -releases may remove some (or all) of the specific pointers, leaving only the -devPrivates mechanism. -.LP -There are two similar interfaces implemented - get_glyphs/get_metrics and -get_bitmaps/get_extents. Too little time caused the font-server specific -interfaces to be placed in the font library (and portions duplicated in each -renderer) instead of having them integrated into the font server itself. -This may change. The X server uses only get_glyphs/get_metrics, and those -will not change dramatically. Each of the routines is described below -.NH 2 -(*get_glyphs) -.LP -This routine returns CharInfoPtrs for each of the requested characters in -the font. If the character does not exist in the font, the default -character will be returned, unless no default character exists in which case -that character is skipped. Thus, the number of glyphs returned will not -always be the same as the number of characters passed in. -.NH 2 -(*get_metrics) -.LP -This is similar to (*get_glyphs) except that pointers to xCharInfo -structures are returned, and, if the font has ink metrics, those are -returned instead of the bitmap metrics. -.NH 2 -(*get-bitmaps) -.LP -This packs the glyph image data in the requested format and returns it. The -ranges/nranges argument specify the set of glyphs from the font to pack -together. -.NH 2 -(*get_extents) -.LP -This returns the metrics for the specified font from the specified ranges. -.LP -.NH 2 -(*unload_font) -.LP -This is called from the FPE routine (*close_font), and so should not ever be -called from the application. -.NH 2 -maxPrivate -.LP -When initializing a new font structure, maxPrivate should be set to -1 -so that the FontSetPrivate() macro works properly with an index of 0. -Initializing maxPrivate to 0 can cause problems if the server tries to set -something at index 0. diff --git a/doc/xorg-docs/specs/Xserver/secint.tex b/doc/xorg-docs/specs/Xserver/secint.tex deleted file mode 100644 index 56aac6c25..000000000 --- a/doc/xorg-docs/specs/Xserver/secint.tex +++ /dev/null @@ -1,219 +0,0 @@ -\documentstyle{article} -\setlength{\parindent}{0 pt} -\setlength{\parskip}{6pt} - -% $XFree86$ - -\begin{document} - -\title{Security Extension Server Design\\Draft Version 3.0} -\author{David P. Wiggins\\X Consortium, Inc.} -\maketitle - -\begin{abstract} -This paper describes the implementation strategy used to implement -various pieces of the SECURITY Extension. -\end{abstract} -% suppress page number on title page -\thispagestyle{empty} - -\eject - -Copyright \copyright 1996 X Consortium, Inc. All Rights Reserved. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OF -OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of the X Consortium shall -not be used in advertising or otherwise to promote the sale, use or -other dealings in this Software without prior written authorization -from the X Consortium. - -\eject - -\section{GenerateAuthorization Request} - -The major steps taken to execute this request are as follows. - -Sanity check arguments. The interesting one is the group, which must -be checked by some other module(s), initially just the embedding -extension. Use a new callback for this. The callback functions will -be passed a small structure containing the group ID and a Boolean -value which is initially false. If any of the callbacks recognize the -ID, they should set the boolean to true. If after the callbacks have -been called the boolean is false, return an error, since nobody -recognized it. - -Use the existing Xkey library function XkeyGenerateAuthorization to -generate the new authorization. - -Use the existing os layer function AddAuthorization to add the new -authorization to the server's internal database. - -Use the existing os layer function AuthorizationToID to retrieve the -authorization ID that the os layer assigned to the new authorization. - -Change the os layer to use authorization IDs allocated from the -server's ID range via FakeClientID(0) instead of using a simple -incrementing integer. This lets us use the resource database to -attach additional information to an authorization without needing any -changes to os data structures. - -Add the authorization ID as a server resource. The structure for an -authorization resource will contain the timeout, trust-level, and -group sent in the request, a reference count of how many clients are -connected with this authorization, a timer pointer, and time-remaining -counter. - -Return the authorization ID and generated auth data to the client. - - -\section{Client connection} - -The Security extension needs to be aware of new client connections -primarily so that it copy the trust-level of the authorization that -was used to the client structure. The trust-level is needed in the -client structure because it will be accessed frequently to make access -control decisions for the client. We will use the existing -ClientStateCallback to catch new client connections. - -We also need to copy the authorization ID into the client structure. -The authorization ID is already stored in an os private hung from the -client, and we will add a new os function AuthorizationIDOfClient to -retrieve it. However, when a client disconnects, this os private is -already gone before ClientStateCallbacks are called. We need the -authorization ID at client disconnect time for reasons described -below. - -Now that we know what needs to be done and why, let's walk through -the sequnce of events. - -When a new client connects, get the authorization ID with -AuthorizationIDOfClient, store it in the client, then pass that ID to -LookupIDByType to find the authorization. If we get a non-NULL -pointer back, this is a generated authorization, not one of the -predefined ones in the server's authority file. In this case, -increment the authorization's reference count. If the reference count -is now 1, cancel the timer for this authorization using the trivial -new os layer function TimerCancel. Lastly, copy the trust-level of -this authorization into the client structure so that it can be reached -quickly for future access control decisions. - -The embedding extension can determine the group to use for a new -client in the same way that we determined the trust level: get the -authorization ID, look it up, and if that succeeds, pluck the group -out of the returned authorization structure. - -\section{Client disconnection} - -Use the existing ClientStateCallback to catch client disconnections. -If the client was using a generated authorization, decrement its -reference count. If the reference count is now zero, use the existing -os layer function TimerSet to start a timer to count down the timeout -period for this authorization. Record the timer ID for this -authorization. When the timer fires, the authorization should be -freed, removing all traces of it from the server. - -There is a slight complication regarding the timeout because the timer -interface in the server allows for 32 bits worth of milliseconds, -while the timeout specified in GenerateAuthorization has 32 bits worth -of seconds. To handle this, if the specified time is more than the -timer interface can handle, the maximum possible timeout will be set, -and time-remaining counter for this authorization will be used to -track the leftover part. When the timer fires, it should first check -to see if there is any leftover time to wait. If there is, it should -set another timer to the minimum of (the maximum possible timeout) and -the time remaining, and not do the revocation yet. - -\section{Resource ID security} - -To implement the restriction that untrusted clients cannot access -resources of trusted clients, we add two new functions to dix: -SecurityLookupIDByType and SecurityLookupIDByClass. Hereafter we will -use SecurityLookupID to refer to both functions. In addition to the -parameters of the existing LookupID functions, these functions also -take a pointer to the client doing the lookup, and an access mode that -conveys a high-level idea of what the client intends to do with the -resource (currently just read, write, destroy, and unknown). Passing -NullClient for the client turns off access checks. SecurityLookupID -can return NULL for two reasons: the resource doesn't exist, or it -does but the client isn't allowed to access it. The caller cannot -tell the difference. Most places in dix call these new lookup -functions instead of the old LookupID, which continue to do no access -checking. Extension ``Proc'' functions should probably use -SecurityLookupID, not LookupID. Ddxen can continue to use LookupID. - -Inside SecurityLookupID, the function client$->$CheckAccess is called -passing the client, resource id, resource type/class, resource value, -and access mode. CheckAccess returns the resource value if access is -allowed, else it returns NULL. The entire resource ID security policy -of the Security extension can be replaced by plugging in your own -access decision function here. This in combination with the access -mode parameter should be enough to implement a more traditional DAC -(discretionary access control) policy. - -Since we need client and access mode information to do access -controlled resource lookups, we add (and use) several other macros and -functions that parallel existing ones with the addition of the missing -information. The list includes SECURITY\_VERIFY\_GC, -SECURITY\_VERIFY\_DRAWABLE, SECURITY\_VERIFY\_GEOMETRABLE, -SecurityLookupWindow, SecurityLookupDrawable, and dixChangeGC. The -dixChangeGC interface is worth mentioning because in addition to a -client parameter, we introduce a pointer-to-union parameter that -should let us eliminate the warnings that some compilers give when you -assign small integers to pointers, as the DoChangeGC interface -required. For more details, see the comment preceding dixChangeGC in -dix/gc.c. - -If XCSECURITY is not defined (the Security extension is not being -built), the server uses essentially the same code as before for -resource lookups. - -\section{Extension security} - -A new field in the ExtensionEntry structure, Bool secure, tells -whether the extension is considered secure. It is initialized to -FALSE by AddExtension. The following new dix function can be used to -set the secure field: - -void DeclareExtensionSecurity(char *extname, Bool secure) - -The name of the extension and the desired value of the secure field -are passed. If an extension is secure, a call to this function with -secure = TRUE will typically appear right after the call to -AddExtension. DeclareExtensionSecurity should be called during server -reset. It should not be called after the first client has connected. -Passing the name of an extension that has not been initialized has no -effect (the secure value will not be remembered in case the extension -is later initialized). - -For untrusted clients, ProcListExtensions omits extensions that have -secure = FALSE, and ProcQueryExtension reports that such extensions -don't exist. - -To prevent untrusted clients from using extensions by guessing their -major opcode, one of two new Proc vectors are used by untusted -clients, UntrusedProcVector and SwappedUntrustedProcVector. These -have the same contents as ProcVector and SwappedProcVector -respectively for the first 128 entries. Entries 128 through 255 are -initialized to ProcBadRequest. If DeclareExtensionSecurity is called -with secure = TRUE, that extension's dispatch function is plugged -into the appropriate entry so that the extension can be used. If -DeclareExtensionSecurity is called with secure = FALSE, the -appropriate entry is reset to ProcBadRequest. - -Now we can explain why DeclareExtensionSecurity should not be called -after the first client connects. In some cases, the Record extension -gives clients a private copy of the proc vector, which it then changes -to intercept certain requests. Changing entries in UntrusedProcVector -and SwappedUntrustedProcVector will have no effect on these copied -proc vectors. If we get to the point of needing an extension request -to control which extensions are secure, we'll need to invent a way to -get those copied proc vectors changed. - -\end{document} diff --git a/doc/xorg-docs/specs/Xserver/secint.xml b/doc/xorg-docs/specs/Xserver/secint.xml new file mode 100644 index 000000000..ad90bee4d --- /dev/null +++ b/doc/xorg-docs/specs/Xserver/secint.xml @@ -0,0 +1,294 @@ + + + + + + + + + + Security Extension Server Design Draft + X Consortium Standard + June 27, 2010 + + + DavidWiggins + + + X Consortium Standard + 1996X Consortium + Version 3.0 + X Consortium + X Version 11, Release 7 + + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE X +CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH +THE SOFTWARE OR THE USE OF OR OTHER DEALINGS IN THE +SOFTWARE. + +Except as contained in this notice, the name of the X Consortium shall +not be used in advertising or otherwise to promote the sale, use or other +dealings in this Software without prior written authorization from the X +Consortium. + + + + + +This paper describes the implementation strategy used to implement + various pieces of the SECURITY Extension. + + + + + + + +Generate Authorization Request + + +The major steps taken to execute this request are as follows. + + + +Sanity check arguments. The interesting one is the group, which must be +checked by some other module(s), initially just the embedding extension. +Use a new callback for this. The callback functions will be passed a small +structure containing the group ID and a Boolean value which is initially +false. If any of the callbacks recognize the ID, they should set the boolean +to true. If after the callbacks have been called the boolean is false, return +an error, since nobody recognized it. + + + +Use the existing Xkey library function XkeyGenerateAuthorization to generate +the new authorization. + + + +Use the existing os layer function AddAuthorization to add the new +authorization to the server's internal database. + + + +Use the existing os layer function AuthorizationToID to retrieve +the authorization ID that the os layer assigned to the new authorization. + + +Change the os layer to use authorization IDs allocated from the +server's ID range via FakeClientID(0) instead of using a simple incrementing +integer. This lets us use the resource database to attach additional +information to an authorization without needing any changes to os +data structures. + + + +Add the authorization ID as a server resource. The structure for an +authorization resource will contain the timeout, trust-level, and group +sent in the request, a reference count of how many clients are connected +with this authorization, a timer pointer, and time-remaining counter. + + + +Return the authorization ID and generated auth data to the client. + + + + +Client Connection + + +The Security extension needs to be aware of new client connections +primarily so that it copy the trust-level of the authorization that was +used to the client structure. The trust-level is needed in the client +structure because it will be accessed frequently to make access control +decisions for the client. We will use the existing ClientStateCallback +to catch new client connections. + + + +We also need to copy the authorization ID into the client structure. The +authorization ID is already stored in an os private hung from the client, +and we will add a new os function AuthorizationIDOfClient to retrieve it. +However, when a client disconnects, this os private is already gone before +ClientStateCallbacks are called. We need the authorization ID at client +disconnect time for reasons described below. + + + +Now that we know what needs to be done and why, let's walk through the +sequnce of events. + + + +When a new client connects, get the authorization ID with +AuthorizationIDOfClient, store it in the client, then pass that ID to +LookupIDByType to find the authorization. If we get a non-NULL pointer +back, this is a generated authorization, not one of the predefined ones in +the server's authority file. In this case, increment the authorization's +reference count. If the reference count is now 1, cancel the timer +for this authorization using the trivial new os layer function TimerCancel. +Lastly, copy the trust-level of this authorization into the client structure +so that it can be reached quickly for future access control decisions. + + + +The embedding extension can determine the group to use for a new client in +the same way that we determined the trust level: get the authorization ID, +look it up, and if that succeeds, pluck the group out of the returned +authorization structure. + + + + +Client disconnection + + +Use the existing ClientStateCallback to catch client disconnections. If the +client was using a generated authorization, decrement its reference count. +If the reference count is now zero, use the existing os layer function +TimerSet to start a timer to count down the timeout period for this +authorization. Record the timer ID for this authorization. When the timer +fires, the authorization should be freed, removing all +traces of it from the server. + + + +There is a slight complication regarding the timeout because the timer +interface in the server allows for 32 bits worth of milliseconds, while +the timeout specified in GenerateAuthorization has 32 bits worth of seconds. +To handle this, if the specified time is more than the timer interface can +handle, the maximum possible timeout will be set, and time-remaining counter +for this authorization will be used to track the leftover part. When the +timer fires, it should first check to see if there is any leftover +time to wait. If there is, it should set another timer to the minimum of (the +maximum possible timeout) and the time remaining, and not do the revocation +yet. + + + + +Resource ID Security + + +To implement the restriction that untrusted clients cannot access resources +of trusted clients, we add two new functions to dix: SecurityLookupIDByType +and SecurityLookupIDByClass. Hereafter we will use SecurityLookupID to refer +to both functions. In addition to the parameters of the existing LookupID +functions, these functions also take a pointer to the client doing the lookup, +and an access mode that conveys a high-level idea of what the client intends +to do with the resource (currently just read, write, destroy, and unknown). +Passing NullClient for the client turns off access checks. SecurityLookupID can +return NULL for two reasons: the resource doesn't exist, or it does but the +client isn't allowed to access it. The caller cannot tell the difference. Most +places in dix call these new lookup functions instead of the old LookupID, +which continue to do no access checking. Extension "Proc" functions should +probably use SecurityLookupID, not LookupID. Ddxen can continue to use +LookupID. + + + +Inside SecurityLookupID, the function client -> CheckAccess is called +passing the client, resource id, resource type/class, resource value, and +access mode. CheckAccess returns the resource value if access is allowed, +else it returns NULL. The entire resource ID security policy of the Security +extension can be replaced by plugging in your own access decision function +here. This in combination with the access mode parameter should be enough to +implement a more traditional DAC (discretionary access control) policy. + + + +Since we need client and access mode information to do access controlled +resource lookups, we add (and use) several other macros and functions that +parallel existing ones with the addition of the missing information. The list +includes SECURITY_VERIFY_GC, SECURITY_VERIFY_DRAWABLE, +SECURITY_VERIFY_GEOMETRABLE, SecurityLookupWindow, +SecurityLookupDrawable, and dixChangeGC. The dixChangeGC interface is +worth mentioning because in addition to a client parameter, we introduce a +pointer-to-union parameter that should let us eliminate the warnings that some +compilers give when you assign small integers to pointers, as the DoChangeGC +interface required. For more details, see the comment preceding dixChangeGC in +;<dix/gc.c;>. + + + +If XCSECURITY is not defined (the Security extension is not being built), +the server uses essentially the same code as before for resource lookups. + + + + +Extension Security + + +A new field in the ExtensionEntry structure, Bool secure, tells whether the +extension is considered secure. It is initialized to FALSE by AddExtension. +The following new dix function can be used to set the secure field: + + + + + void DeclareExtensionSecurity + char *extname + Bool secure + + + + +The name of the extension and the desired value of the secure field are +passed. If an extension is secure, a call to this function with +secure = TRUE will typically appear right after the call to +AddExtension. +DeclareExtensionSecurity +should be called during server reset. It should not +be called after the first client has connected. Passing the name of an +extension that has not been initialized has no effect (the secure value will +not be remembered in case the extension is later initialized). + + + +For untrusted clients, ProcListExtensions omits +extensions that have secure = FALSE, and +ProcQueryExtension reports that such +extensions don't exist. + + + +To prevent untrusted clients from using extensions by guessing their major +opcode, one of two new Proc vectors are used by untusted clients, +UntrusedProcVector and +SwappedUntrustedProcVector. These have the same contents +as ProcVector and +SwappedProcVector respectively for the first 128 +entries. Entries 128 through 255 are initialized to ProcBadRequest. If +DeclareExtensionSecurity is called with secure = +TRUE, that extension's dispatch function is plugged into the appropriate entry +so that the extension can be used. If +DeclareExtensionSecurity is called with secure = +FALSE, the appropriate entry is reset to ProcBadRequest. + + + +Now we can explain why DeclareExtensionSecurity +should not be called after the first client connects. In some cases, +the Record extension gives clients a private copy of the proc vector, +which it then changes to intercept certain requests. Changing entries in +UntrusedProcVector and +SwappedUntrustedProcVector will have no effect on these +copied proc vectors. If we get to the point of needing an extension request +to control which extensions are secure, we'll need to invent a way to +get those copied proc vectors changed. + + + + + diff --git a/doc/xorg-docs/specs/Xt/CH01 b/doc/xorg-docs/specs/Xt/CH01 deleted file mode 100644 index 3d09eefdb..000000000 --- a/doc/xorg-docs/specs/Xt/CH01 +++ /dev/null @@ -1,2471 +0,0 @@ -.\" $Xorg: CH01,v 1.3 2000/08/17 19:42:42 cpqbld Exp $ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" Digital Equipment Corporation, Maynard, Massachusetts. -.\" -.\" Permission to use, copy, modify and distribute this documentation for any -.\" purpose and without fee is hereby granted, provided that the above copyright -.\" notice appears in all copies and that both that copyright notice and this -.\" permission notice appear in supporting documentation, and that the name of -.\" Digital not be used in in advertising or publicity pertaining -.\" to distribution of the software without specific, written prior permission. -.\" Digital makes no representations about the suitability of the -.\" software described herein for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBChapter 1\fP\s-1 - -\s+1\fBIntrinsics and Widgets\fP\s-1 -.sp 2 -.if \n(GS .nr nh*hl 1 -.nr H1 1 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.LP -.XS -\fBChapter 1 \(em Intrinsics and Widgets\fP -.XE -The \*(xI are a programming library tailored to the special requirements -of user interface construction within a network window system, -specifically the X Window System. -The \*(xI and a widget set make up an \*(tk. - -.NH 2 -Intrinsics -.XS -\fB\*(SN Intrinsics\fP -.XE -.LP -The \*(xI provide the base mechanism necessary to build -a wide variety of interoperating widget sets and application environments. -The Intrinsics are a layer on top of Xlib, the -C Library X Interface. They extend the -fundamental abstractions provided by the X Window System while still -remaining independent of any particular user interface policy or -style. -.LP -The Intrinsics use object-oriented programming techniques to supply a -consistent architecture for constructing and composing user interface -components, known as widgets. This -allows programmers to extend a widget set in new ways, either by -deriving new widgets from existing ones (subclassing) or by writing -entirely new widgets following the established conventions. -.LP -When the \*(xI were first conceived, the root of the object -hierarchy was a widget class named -Core. -.IN "Core" -In Release 4 of the -\*(xI, three nonwidget superclasses were added above Core. -These superclasses are described in Chapter 12. The name of the class -now at the root of the Intrinsics class hierarchy is -Object. -.IN "Object" -The remainder of this -specification refers uniformly to \fIwidgets\fP and \fICore\fP -as if they were the -base class for all \*(xI operations. The argument descriptions -for each Intrinsics procedure and Chapter 12 describe which operations -are defined for the nonwidget superclasses of Core. The reader may -determine by context whether a specific reference to \fIwidget\fP -actually means ``widget'' or ``object.'' - -.NH 2 -Languages -.XS -\fB\*(SN Languages\fP -.XE -.LP -The Intrinsics are intended to be used for two programming purposes. -Programmers writing widgets will be using most of the facilities -provided by the -Intrinsics to construct user interface components from the simple, such -as buttons and scrollbars, to the complex, such as control panels and -property sheets. Application programmers will use a much smaller subset of -the Intrinsics procedures in combination with one or more sets of widgets to -construct and present complete user interfaces on an X display. The -Intrinsics -programming interfaces primarily -intended for application use are designed to be callable from most -procedural programming languages. Therefore, most arguments are passed by -reference rather than by value. The interfaces primarily -intended for widget programmers are expected to be used principally -from the C language. In these cases, the usual C programming -conventions apply. In this specification, the term \fIclient\fP refers to -any module, widget, or application that calls an Intrinsics procedure. -.LP -Applications that use the \*(xI mechanisms -must include the header files -.Pn < X11/Intrinsic.h > -and -.Pn < X11/StringDefs.h >, -or their equivalent, -and they may also include -.Pn < X11/Xatoms.h > -and -.Pn < X11/Shell.h >. -In addition, widget implementations should include -.Pn < X11/IntrinsicP.h > -instead of -.Pn < X11/Intrinsic.h >. -.LP -The applications must also include the additional header files for -each widget class that they are to use (for example, -.Pn < X11/Xaw/Label.h > -or -.Pn < X11/Xaw/Scrollbar.h >). -On a POSIX-based system, -the \*(xI object library file is named -.PN libXt.a -and is usually referenced as \-lXt when linking the application. - -.NH 2 -Procedures and Macros -.LP -.XS -\fB\*(SN Procedures and Macros\fP -.XE -All functions defined in this specification except those specified below -may be implemented as C macros with arguments. C applications may use -``#undef'' to remove a macro definition and ensure that the actual function -is referenced. Any such macro will expand to a single expression that -has the same precedence as a function call and that evaluates each -of its arguments exactly once, fully protected by parentheses, so that -arbitrary expressions may be used as arguments. -.LP -The following symbols are macros that do not have function -equivalents and that may expand their arguments in a manner other -than that described above: -.PN XtCheckSubclass , -.PN XtNew , -.PN XtNumber , -.PN XtOffsetOf , -.PN XtOffset , -and -.PN XtSetArg . - -.NH 2 -Widgets -.LP -.XS -\fB\*(SN Widgets\fP -.XE -.LP -The fundamental abstraction and data type of the \*(tk is the widget, -which is a combination of an X window and its associated -input and display semantics -and which is dynamically allocated and contains state information. -Some widgets display information (for example, text or graphics), -and others are merely containers for other widgets (for example, a menu box). -Some widgets are output-only and do not react to pointer or keyboard input, -and others change their display in response to input -and can invoke functions that an application has attached to them. -.LP -Every widget belongs to exactly one widget class, which is statically -allocated and initialized and which contains the operations allowable on -widgets of that class. -Logically, a widget class is the procedures and data associated -with all widgets belonging to that class. -These procedures and data can be inherited by -subclasses. -Physically, a widget class is a pointer to a structure. -The contents of this structure are constant for all widgets of the widget -class but will vary from class to class. -(Here, ``constant'' means the class structure is initialized at compile time -and never changed, except for a one-time class initialization -and in-place compilation of resource lists, -which takes place when the first widget of the class or subclass is created.) -For further information, -see Section 2.5. -.LP -The distribution of the declarations and code for a new widget class -among a public .h file for application programmer use, a private .h file -for widget programmer use, -and the implementation .c file is described in Section 1.6. -The predefined widget classes adhere to these conventions. -.LP -A widget instance is composed of two parts: -.IP \(bu 5 -A data structure which contains instance-specific values. -.IP \(bu 5 -A class structure which contains information that is applicable to -all widgets of that class. -.LP -Much of the input/output of a widget (for example, fonts, colors, sizes, -or border widths) is customizable by users. -.LP -This chapter discusses the base widget classes, -Core, Composite, and Constraint, and -ends with a discussion of widget classing. - -.NH 3 -Core Widgets -.XS -\*(SN Core Widgets -.XE -.LP -.IN "Core" "" "@DEF" -The -Core -widget class contains the definitions of fields common to all widgets. -All widgets classes are subclasses of the -Core class, -which is defined by the -.PN CoreClassPart -and -.PN CorePart -structures. - -.NH 4 -CoreClassPart Structure -.XS -\*(SN CoreClassPart Structure -.XE -.LP -All widget classes contain the fields defined in the -.PN CoreClassPart -structure. -.LP -.IN "CoreClassPart" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3.5i -.ta .5i 3.5i -typedef struct { - WidgetClass superclass; See Section 1.6 - String class_name; See Chapter 9 - Cardinal widget_size; See Section 1.6 - XtProc class_initialize; See Section 1.6 - XtWidgetClassProc class_part_initialize; See Section 1.6 - XtEnum class_inited; See Section 1.6 - XtInitProc initialize; See Section 2.5 - XtArgsProc initialize_hook; See Section 2.5 - XtRealizeProc realize; See Section 2.6 - XtActionList actions; See Chapter 10 - Cardinal num_actions; See Chapter 10 - XtResourceList resources; See Chapter 9 - Cardinal num_resources; See Chapter 9 - XrmClass xrm_class; Private to resource manager - Boolean compress_motion; See Section 7.9 - XtEnum compress_exposure; See Section 7.9 - Boolean compress_enterleave; See Section 7.9 - Boolean visible_interest; See Section 7.10 - XtWidgetProc destroy; See Section 2.8 - XtWidgetProc resize; See Chapter 6 - XtExposeProc expose; See Section 7.10 - XtSetValuesFunc set_values; See Section 9.7 - XtArgsFunc set_values_hook; See Section 9.7 - XtAlmostProc set_values_almost; See Section 9.7 - XtArgsProc get_values_hook; See Section 9.7 - XtAcceptFocusProc accept_focus; See Section 7.3 - XtVersionType version; See Section 1.6 - XtPointer callback_private; Private to callbacks - String tm_table; See Chapter 10 - XtGeometryHandler query_geometry; See Chapter 6 - XtStringProc display_accelerator; See Chapter 10 - XtPointer extension; See Section 1.6 -} CoreClassPart; -.De -.LP -.eM -All widget classes have the Core class fields as their first component. -The prototypical -.PN WidgetClass -and -.PN CoreWidgetClass -are defined with only this set of fields. -.LP -.IN "Core" "" "@DEF@" -.IN "WidgetClass" "" "@DEF@" -.IN "CoreWidgetClass" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - CoreClassPart core_class; -} WidgetClassRec, *WidgetClass, CoreClassRec, *CoreWidgetClass; -.De -.LP -.eM -Various routines can cast widget class pointers, as needed, -to specific widget class types. -.LP -The single occurrences of the class record and pointer for -creating instances of Core are -.LP -In -.PN IntrinsicP.h : -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -extern WidgetClassRec widgetClassRec; -#define coreClassRec widgetClassRec -.De -.LP -.eM -In -.PN Intrinsic.h : -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -extern WidgetClass widgetClass, coreWidgetClass; -.De -.LP -.eM -The opaque types -.PN Widget -and -.PN WidgetClass -and the opaque variable -.PN widgetClass -are defined for generic actions on widgets. -In order to make these types opaque and ensure that the compiler -does not allow applications to access private data, the \*(xI use -incomplete structure definitions in -.PN Intrinsic.h : -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct _WidgetClassRec *WidgetClass, *CoreWidgetClass; -.De -.eM - -.NH 4 -CorePart Structure -.XS -\*(SN CorePart Structure -.XE -.LP -All widget instances contain the fields defined in the -.PN CorePart -structure. -.LP -.IN "CorePart" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct _CorePart { - Widget self; Described below - WidgetClass widget_class; See Section 1.6 - Widget parent; See Section 2.5 - Boolean being_destroyed; See Section 2.8 - XtCallbackList destroy_callbacks; See Section 2.8 - XtPointer constraints; See Section 3.6 - Position x; See Chapter 6 - Position y; See Chapter 6 - Dimension width; See Chapter 6 - Dimension height; See Chapter 6 - Dimension border_width; See Chapter 6 - Boolean managed; See Chapter 3 - Boolean sensitive; See Section 7.7 - Boolean ancestor_sensitive; See Section 7.7 - XtTranslations accelerators; See Chapter 10 - Pixel border_pixel; See Section 2.6 - Pixmap border_pixmap; See Section 2.6 - WidgetList popup_list; See Chapter 5 - Cardinal num_popups; See Chapter 5 - String name; See Chapter 9 - Screen *screen; See Section 2.6 - Colormap colormap; See Section 2.6 - Window window; See Section 2.6 - Cardinal depth; See Section 2.6 - Pixel background_pixel; See Section 2.6 - Pixmap background_pixmap; See Section 2.6 - Boolean visible; See Section 7.10 - Boolean mapped_when_managed; See Chapter 3 -} CorePart; -.De -.LP -.eM -All widget instances have the Core fields as their first component. -The prototypical type -.PN Widget -is defined with only this set of fields. -.LP -.IN "Widget" "" "@DEF@" -.IN "CoreWidget" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - CorePart core; -} WidgetRec, *Widget, CoreRec, *CoreWidget; -.De -.LP -.eM -Various routines can cast widget pointers, as needed, -to specific widget types. -.LP -In order to make these types opaque and ensure that the compiler -does not allow applications to access private data, the \*(xI use -incomplete structure definitions in -.PN Intrinsic.h . -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct _WidgetRec *Widget, *CoreWidget; -.De -.eM - -.NH 4 -Core Resources -.LP -.XS -\fB\*(SN Core Resources\fP -.XE -.LP -.IN "CoreWidget" "Resources" -The resource names, classes, and representation types specified in the -.PN coreClassRec -resource list are -.LP -.TS -lw(1.5i) lw(1.5i) lw(2.5i) . -_ -.sp 6p -Name Class Representation -.sp 6p -_ -.sp 6p -XtNaccelerators XtCAccelerators XtRAcceleratorTable -XtNbackground XtCBackground XtRPixel -XtNbackgroundPixmap XtCPixmap XtRPixmap -XtNborderColor XtCBorderColor XtRPixel -XtNborderPixmap XtCPixmap XtRPixmap -XtNcolormap XtCColormap XtRColormap -XtNdepth XtCDepth XtRInt -XtNmappedWhenManaged XtCMappedWhenManaged XtRBoolean -XtNscreen XtCScreen XtRScreen -XtNtranslations XtCTranslations XtRTranslationTable -.sp 6p -_ -.TE -.LP -Additional resources are defined for all widgets via the -.PN objectClassRec -and -.PN rectObjClassRec -resource lists; see Sections 12.2 and 12.3 for details. - -.NH 4 -CorePart Default Values -.XS -\*(SN CorePart Default Values -.XE -.LP -The default values for the Core fields, which are filled in by the \*(xI, -from the resource lists, and by the initialize procedures, are -.LP -.TS -lw(1.5i) lw(4.25i) . -_ -.sp 6p -Field Default Value -.sp 6p -_ -.sp 6p -self Address of the widget structure (may not be changed). -T{ -widget_class -T} T{ -\fIwidget_class\fP argument to -.PN XtCreateWidget -(may not be changed). -T} -T{ -parent -T} T{ -\fIparent\fP argument to -.PN XtCreateWidget -(may not be changed). -T} -being_destroyed Parent's \fIbeing_destroyed\fP value. -destroy_callbacks NULL -constraints NULL -x 0 -y 0 -width 0 -height 0 -border_width 1 -T{ -managed -T} T{ -.PN False -T} -T{ -sensitive -T} T{ -.PN True -T} -ancestor_sensitive T{ -logical AND of parent's \fIsensitive\fP and -\fIancestor_sensitive\fP values. -T} -accelerators NULL -T{ -border_pixel -T} T{ -.PN XtDefaultForeground -T} -border_pixmap T{ -.PN XtUnspecifiedPixmap -T} -popup_list NULL -num_popups 0 -T{ -name -T} T{ -\fIname\fP argument to -.PN XtCreateWidget -(may not be changed). -T} -T{ -screen -T} T{ -Parent's \fIscreen\fP; top-level widget gets screen from display specifier -.br -(may not be changed). -T} -colormap Parent's \fIcolormap\fP value. -window NULL -depth Parent's \fIdepth\fP; top-level widget gets root window depth. -T{ -background_pixel -T} T{ -.PN XtDefaultBackground -T} -background_pixmap T{ -.PN XtUnspecifiedPixmap -T} -T{ -visible -T} T{ -.PN True -T} -T{ -mapped_when_managed -T} T{ -.PN True -T} -.sp 6p -_ -.TE -.LP -.IN XtUnspecifiedPixmap "" "@DEF@" -.PN XtUnspecifiedPixmap -is a symbolic constant guaranteed to be unequal to -any valid Pixmap id, -.PN None , -and -.PN ParentRelative . - -.NH 3 -Composite Widgets -.XS -\*(SN Composite Widgets -.XE -.LP -.IN "Composite" "" "@DEF@" -The Composite -widget class is a subclass of the -Core -widget class (see Chapter 3). -Composite widgets are intended to be containers for other widgets. -The additional data used by composite widgets are defined by the -.PN CompositeClassPart -and -.PN CompositePart -structures. - -.NH 4 -CompositeClassPart Structure -.XS -\*(SN CompositeClassPart Structure -.XE -.LP -In addition to the -Core -class fields, -widgets of the Composite class have the following class fields. -.LP -.IN "CompositeClassPart" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3.5i -.ta .5i 3.5i -typedef struct { - XtGeometryHandler geometry_manager; See Chapter 6 - XtWidgetProc change_managed; See Chapter 3 - XtWidgetProc insert_child; See Chapter 3 - XtWidgetProc delete_child; See Chapter 3 - XtPointer extension; See Section 1.6 -} CompositeClassPart; -.De -.LP -.eM -The extension record defined for -.PN CompositeClassPart -with \fIrecord_type\fP -equal to -.PN \s-1NULLQUARK\s+1 -is -.PN CompositeClassExtensionRec . -.LP -.IN "CompositeClassExtensionRec" "" "@DEF@" -.IN "CompositeClassExtension" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3.5i -.ta .5i 3.5i -typedef struct { - XtPointer next_extension; See Section 1.6.12 - XrmQuark record_type; See Section 1.6.12 - long version; See Section 1.6.12 - Cardinal record_size; See Section 1.6.12 - Boolean accepts_objects; See Section 2.5.2 - Boolean allows_change_managed_set; See Section 3.4.3 -} CompositeClassExtensionRec, *CompositeClassExtension; -.De -.LP -.eM -Composite -classes have the Composite class fields immediately following the -Core class fields. -.LP -.IN "CompositeWidgetClass" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - CoreClassPart core_class; - CompositeClassPart composite_class; -} CompositeClassRec, *CompositeWidgetClass; -.De -.LP -.eM -The single occurrences of the class record and pointer for creating -instances of Composite are -.LP -In -.PN IntrinsicP.h : -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -extern CompositeClassRec compositeClassRec; -.De -.LP -.eM -In -.PN Intrinsic.h : -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -extern WidgetClass compositeWidgetClass; -.De -.LP -.eM -The opaque types -.PN CompositeWidget -and -.PN CompositeWidgetClass -and the opaque variable -.PN compositeWidgetClass -are defined for generic operations on widgets whose class -is Composite or a subclass of Composite. -The symbolic constant for the -.PN CompositeClassExtension -version identifier is -.PN XtCompositeExtensionVersion -(see Section 1.6.12). -.PN Intrinsic.h -uses an incomplete structure -definition to ensure that the compiler catches attempts to access -private data. -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct _CompositeClassRec *CompositeWidgetClass; -.De -.eM - -.NH 4 -CompositePart Structure -.XS -\*(SN CompositePart Structure -.XE -.LP -In addition to the -Core instance -fields, -widgets of the Composite class have the following -instance fields defined in the -.PN CompositePart -structure. -.LP -.IN "CompositePart" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - WidgetList children; See Chapter 3 - Cardinal num_children; See Chapter 3 - Cardinal num_slots; See Chapter 3 - XtOrderProc insert_position; See Section 3.2 -} CompositePart; -.De -.LP -.eM -Composite -widgets have the Composite instance fields immediately following the Core -instance fields. -.LP -.IN "CompositeWidget" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - CorePart core; - CompositePart composite; -} CompositeRec, *CompositeWidget; -.De -.LP -.eM -.PN Intrinsic.h -uses an incomplete structure definition to ensure that the -compiler catches attempts to access private data. -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct _CompositeRec *CompositeWidget; -.De -.eM - -.NH 4 -Composite Resources -.XS -\fB\*(SN Composite Resources\fP -.XE -.LP -.IN "CompositeWidget" "Resources" -The resource names, classes, and representation types -that are specified in -the -.PN compositeClassRec -resource list are -.LP -.TS -lw(1.5i) lw(1.5i) lw(2i) . -_ -.sp 6p -Name Class Representation -.sp 6p -_ -.sp 6p -XtNchildren XtCReadOnly XtRWidgetList -XtNinsertPosition XtCInsertPosition XtRFunction -XtNnumChildren XtCReadOnly XtRCardinal -.sp 6p -_ -.TE - -.NH 4 -CompositePart Default Values -.XS -\*(SN CompositePart Default Values -.XE -.LP -The default values for the Composite fields, -which are filled in from the -Composite -resource list and by the -Composite -initialize procedure, are -.LP -.TS -l l . -_ -.sp 6p -Field Default Value -.sp 6p -_ -.sp 6p -children NULL -num_children 0 -num_slots 0 -insert_position Internal function to insert at end -.sp 6p -_ -.TE -.LP -The \fIchildren\fP, \fInum_children\fP, -and \fIinsert_position\fP fields are declared -as resources; -.IN XtNinsertPosition -XtNinsertPosition -is a settable resource, -.IN XtNchildren -XtNchildren -and -.IN XtNnumChildren -XtNnumChildren -may be read by any client but should only be modified by the composite -widget class procedures. - -.NH 3 -Constraint Widgets -.XS -\*(SN Constraint Widgets -.XE -.LP -.IN "Constraint" "" "@DEF@" -The Constraint -widget class is a subclass of the -Composite -widget class (see Section 3.6). Constraint -widgets maintain additional state -data for each child; for example, client-defined constraints on the child's -geometry. -The additional data used by constraint widgets are defined by the -.PN ConstraintClassPart -and -.PN ConstraintPart -structures. - -.NH 4 -ConstraintClassPart Structure -.XS -\*(SN ConstraintClassPart Structure -.XE -.LP -In addition to the -Core -and -Composite -class fields, -widgets of the Constraint class -have the following class fields. -.LP -.IN "ConstraintClassPart" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - XtResourceList resources; See Chapter 9 - Cardinal num_resources; See Chapter 9 - Cardinal constraint_size; See Section 3.6 - XtInitProc initialize; See Section 3.6 - XtWidgetProc destroy; See Section 3.6 - XtSetValuesFunc set_values; See Section 9.7.2 - XtPointer extension; See Section 1.6 -} ConstraintClassPart; -.De -.LP -.eM -The extension record defined for -.PN ConstraintClassPart -with \fIrecord_type\fP equal to -.PN \s-1NULLQUARK\s+1 -is -.PN ConstraintClassExtensionRec . -.LP -.IN "ConstraintClassExtensionRec" "" "@DEF@" -.IN "ConstraintClassExtension" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - XtPointer next_extension; See Section 1.6.12 - XrmQuark record_type; See Section 1.6.12 - long version; See Section 1.6.12 - Cardinal record_size; See Section 1.6.12 - XtArgsProc get_values_hook; See Section 9.7.1 -} ConstraintClassExtensionRec, *ConstraintClassExtension; -.De -.LP -.eM -Constraint -classes have the Constraint class fields immediately following the -Composite class fields. -.LP -.IN "ConstraintWidgetClass" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct _ConstraintClassRec { - CoreClassPart core_class; - CompositeClassPart composite_class; - ConstraintClassPart constraint_class; -} ConstraintClassRec, *ConstraintWidgetClass; -.De -.LP -.eM -The single occurrences of the class record and pointer for creating -instances of Constraint are -.LP -In -.PN IntrinsicP.h : -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -extern ConstraintClassRec constraintClassRec; -.De -.LP -.eM -In -.PN Intrinsic.h : -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -extern WidgetClass constraintWidgetClass; -.De -.LP -.eM -The opaque types -.PN ConstraintWidget -and -.PN ConstraintWidgetClass -and the opaque variable -.PN constraintWidgetClass -are defined for generic operations on widgets -whose class is Constraint or a subclass -of Constraint. -The symbolic constant for the -.PN ConstraintClassExtension -version identifier is -.PN XtConstraintExtensionVersion -(see Section 1.6.12). -.PN Intrinsic.h -uses an incomplete structure definition to ensure that the -compiler catches attempts to access private data. -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct _ConstraintClassRec *ConstraintWidgetClass; -.De -.eM - -.NH 4 -ConstraintPart Structure -.XS -\*(SN ConstraintPart Structure -.XE -.LP -In addition to the -Core -and -Composite instance -fields, -widgets of the Constraint class have the following unused -instance fields defined in the -.PN ConstraintPart -structure -.LP -.IN "ConstraintPart" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - int empty; -} ConstraintPart; -.De -.LP -.eM -Constraint -widgets have the Constraint instance fields immediately following the -Composite instance fields. -.LP -.IN "ConstraintWidget" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - CorePart core; - CompositePart composite; - ConstraintPart constraint; -} ConstraintRec, *ConstraintWidget; -.De -.LP -.eM -.PN Intrinsic.h -uses an incomplete structure definition to ensure that the -compiler catches attempts to access private data. -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct _ConstraintRec *ConstraintWidget; -.De -.eM - -.NH 4 -Constraint Resources -.XS -\fB\*(SN Constraint Resources\fP -.XE -.LP -The -.PN constraintClassRec -\fIcore_class\fP and \fIconstraint_class resources\fP fields are NULL, -and the \fInum_resources\fP fields are zero; -no additional resources beyond those declared by -the superclasses -are defined for -Constraint. - -.NH 2 -Implementation-Specific Types -.XS -\fB\*(SN Implementation-Specific Types\fP -.XE -.LP -To increase the portability of widget and application source code -between different system environments, the \*(xI define several -types whose precise representation is explicitly dependent upon, -and chosen by, each individual implementation of the \*(xI. -.LP -These implementation-defined types are -.IN "Boolean" "" "@DEF@" -.IP \fBBoolean\fP 11 -A datum that contains a zero or nonzero value. -Unless explicitly stated, clients should not assume -that the nonzero value is equal to the symbolic -value -.PN True . -.IN "Cardinal" "" "@DEF@" -.IP \fBCardinal\fP 11 -An unsigned integer datum with a minimum range of [0..2^16-1]. -.IN "Dimension" "" "@DEF@" -.IP \fBDimension\fP 11 -An unsigned integer datum with a minimum range of [0..2^16-1]. -.IN "Position" "" "@DEF@" -.IP \fBPosition\fP 11 -A signed integer datum with a minimum range of [-2^15..2^15-1]. -.IN "XtPointer" "" "@DEF@" -.IP \fBXtPointer\fP 11 -A datum large enough to contain the largest of a char*, int*, function -pointer, structure pointer, or long value. A pointer -to any type or function, or a long value may be converted -to an -.PN XtPointer -and back again and the result will -compare equal to the original value. In ANSI C -environments it is expected that -.PN XtPointer -will be -defined as void*. -.IN "XtArgVal" "" "@DEF@" -.IP \fBXtArgVal\fP 11 -A datum large enough to contain an -.PN XtPointer , -.PN Cardinal , -.PN Dimension , -or -.PN Position -value. -.IN "XtEnum" "" "@DEF@" -.IP \fBXtEnum\fP 11 -An integer datum large enough to encode at least 128 distinct -values, two of which are the symbolic values -.PN True -and -.PN False . -The symbolic values -.PN \s-1TRUE\s+1 -and -.PN \s-1FALSE\s+1 -are -also defined to be equal to -.PN True -and -.PN False , -respectively. -.LP -In addition to these specific types, the precise order of the -fields within the structure declarations for any of the instance -part records -.PN ObjectPart , -.PN RectObjPart , -.PN CorePart , -.PN CompositePart , -.PN ShellPart , -.PN WMShellPart , -.PN TopLevelShellPart , -and -.PN ApplicationShellPart -is implementation-defined. These -structures may also have additional private -fields internal to the implementation. -The -.PN ObjectPart , -.PN RectObjPart , -and -.PN CorePart -structures must be defined so that any member with the same name -appears at the same offset in -.PN ObjectRec , -.PN RectObjRec , -and -.PN CoreRec -.Pn ( WidgetRec ). -No other relations between the offsets of any two -fields may be assumed. - -.NH 2 -Widget Classing -.LP -.XS -\fB\*(SN Widget Classing\fP -.XE -.IN "widget_class" "" "@DEF@" -The \fIwidget_class\fP field of a widget points to its widget class structure, -which contains information that is constant across all widgets of that class. -As a consequence, -widgets usually do not implement directly callable procedures; -rather, they implement procedures, called methods, that are available through -their widget class structure. -These methods are invoked by generic procedures that envelop common actions -around the methods implemented by the widget class. -Such procedures are applicable to all widgets -of that class and also to widgets whose classes are subclasses of that class. -.LP -All widget classes are a subclass of -Core -and can be subclassed further. -Subclassing reduces the amount of code and declarations -necessary to make a -new widget class that is similar to an existing class. -For example, you do not have to describe every resource your widget uses in an -.PN XtResourceList . -Instead, you describe only the resources your widget has -that its superclass does not. -Subclasses usually inherit many of their superclasses' procedures -(for example, the expose procedure or geometry handler). -.LP -Subclassing, however, can be taken too far. -If you create a subclass that inherits none of the procedures of its -superclass, -you should consider whether you have chosen the most -appropriate superclass. -.LP -To make good use of subclassing, -widget declarations and naming conventions are highly stylized. -A widget consists of three files: -.IP \(bu 5 -A public .h file, used by client widgets or applications. -.IP \(bu 5 -A private .h file, used by widgets whose classes -are subclasses of the widget class. -.IP \(bu 5 -A .c file, which implements the widget. - -.NH 3 -Widget Naming Conventions -.XS -\fB\*(SN Widget Naming Conventions\fP -.XE -.LP -The \*(xI provide a vehicle by which programmers can create -new widgets and organize a collection of widgets into an application. -To ensure that applications need not deal with as many styles of capitalization -and spelling as the number of widget classes it uses, -the following guidelines should be followed when writing new widgets: -.IP \(bu 5 -Use the X library naming conventions that are applicable. -For example, a record component name is all lowercase -and uses underscores (_) for compound words (for example, background_pixmap). -Type and procedure names start with uppercase and use capitalization for -compound words (for example, -.PN ArgList -or -.PN XtSetValues ). -.IP \(bu 5 -A resource name is spelled identically to the field name -except that compound names use capitalization rather than underscore. -To let the compiler catch spelling errors, -each resource name should have a symbolic identifier prefixed with -``XtN''. -For example, -the \fIbackground_pixmap\fP field has the corresponding identifier -XtNbackgroundPixmap, -which is defined as the string ``backgroundPixmap''. -Many predefined names are listed in -.Pn < X11/StringDefs.h >. -Before you invent a new name, -you should make sure there is not already a name that you can use. -.IP \(bu 5 -A resource class string starts with a capital letter -and uses capitalization for compound names (for example,``BorderWidth''). -Each resource class string should have a symbolic identifier prefixed with -``XtC'' -(for example, XtCBorderWidth). -Many predefined classes are listed in -.Pn < X11/StringDefs.h >. -.IP \(bu 5 -A resource representation string is spelled identically to the type name -(for example, ``TranslationTable''). -Each representation string should have a symbolic identifier prefixed with -``XtR'' -(for example, XtRTranslationTable). -Many predefined representation types are listed in -.Pn < X11/StringDefs.h >. -.IP \(bu 5 -New widget classes start with a capital and use uppercase for compound -words. -Given a new class name AbcXyz, you should derive several names: -.RS -.IP \- 5 -Additional widget instance structure part name AbcXyzPart. -.IP \- 5 -Complete widget instance structure names AbcXyzRec and _AbcXyzRec. -.IP \- 5 -Widget instance structure pointer type name AbcXyzWidget. -.IP \- 5 -Additional class structure part name AbcXyzClassPart. -.IP \- 5 -Complete class structure names AbcXyzClassRec and _AbcXyzClassRec. -.IP \- 5 -Class structure pointer type name AbcXyzWidgetClass. -.IP \- 5 -Class structure variable abcXyzClassRec. -.IP \- 5 -Class structure pointer variable abcXyzWidgetClass. -.RE -.IP \(bu 5 -Action procedures available to translation specifications should follow the -same naming conventions as procedures. -That is, -they start with a capital letter, and compound names use uppercase -(for example, ``Highlight'' and ``NotifyClient''). -.LP -The symbolic identifiers XtN..., XtC..., and XtR... -may be implemented -as macros, as global symbols, or as a mixture of the two. The -(implicit) type of the identifier is -.PN String . -The pointer value itself -is not significant; clients must not assume that inequality of two -identifiers implies inequality of the resource name, class, or -representation string. Clients should also note that although global -symbols permit savings in literal storage in some environments, they -also introduce the possibility of multiple definition conflicts when -applications attempt to use independently developed widgets -simultaneously. - -.NH 3 -Widget Subclassing in Public .h Files -.XS -\*(SN Widget Subclassing in Public .h Files -.XE -.LP -The public .h file for a widget class is imported by clients -and contains -.IP \(bu 5 -A reference to the public .h file for the superclass. -.IP \(bu 5 -Symbolic identifiers for -the names and classes of the new resources that this widget adds -to its superclass. -The definitions should -have a single space between the definition name and the value and no -trailing space or comment in order to reduce the possibility of -compiler warnings from similar declarations in multiple classes. -.IP \(bu 5 -Type declarations for any new resource data types defined by the class. -.IP \(bu 5 -The class record pointer variable used to create widget instances. -.IP \(bu 5 -The C type that corresponds to widget instances of this class. -.IP \(bu 5 -Entry points for new class methods. -.LP -For example, the following is the public .h file for a possible -implementation of a Label widget: -.LP -.Ds -.TA .5i 1.75i -.ta .5i 1.75i -#ifndef LABEL_H -#define LABEL_H - -/* New resources */ -#define XtNjustify "justify" -#define XtNforeground "foreground" -#define XtNlabel "label" -#define XtNfont "font" -#define XtNinternalWidth "internalWidth" -#define XtNinternalHeight "internalHeight" - -/* Class record pointer */ -extern WidgetClass labelWidgetClass; - -/* C Widget type definition */ -typedef struct _LabelRec *LabelWidget; - -/* New class method entry points */ -extern void LabelSetText(); - /* Widget w */ - /* String text */ - -extern String LabelGetText(); - /* Widget w */ - -#endif LABEL_H -.De -.LP -The conditional inclusion of the text allows the application -to include header files for different widgets without being concerned -that they already may be included as a superclass of another widget. -.LP -To accommodate operating systems with file name length restrictions, -the name of the public .h file is the first ten characters of the -widget class. -For example, -the public .h file for the -Constraint -widget class is -.PN Constraint.h . - -.NH 3 -Widget Subclassing in Private .h Files -.XS -\*(SN Widget Subclassing in Private .h Files -.XE -.LP -The private .h file for a widget is imported by widget classes that are -subclasses of the widget and contains -.IP \(bu 5 -A reference to the public .h file for the class. -.IP \(bu 5 -A reference to the private .h file for the superclass. -.IP \(bu 5 -Symbolic identifiers for any new resource representation types defined -by the class. The definitions should have a single space between the -definition name and the value and no trailing space or comment. -.IP \(bu 5 -A structure part definition for -the new fields that the widget instance adds to its superclass's -widget structure. -.IP \(bu 5 -The complete widget instance structure definition for this widget. -.IP \(bu 5 -A structure part definition for -the new fields that this widget class adds to its superclass's -constraint -structure if the widget class is a subclass of -Constraint. -.IP \(bu 5 -The complete -constraint -structure definition if the widget class is a subclass of -Constraint. -.IP \(bu 5 -Type definitions for any new procedure types used by class methods -declared in the widget class part. -.IP \(bu 5 -A structure part definition for -the new fields that this widget class adds to its superclass's widget class -structure. -.IP \(bu 5 -The complete widget class structure definition for this widget. -.IP \(bu 5 -The complete widget class extension structure definition -for this widget, if any. -.IP \(bu 5 -The symbolic constant identifying the class extension version, if any. -.IP \(bu 5 -The name of the global class structure variable containing the generic -class structure for this class. -.IP \(bu 5 -An inherit constant for each new procedure in the widget class part structure. -.LP -For example, the following is the private .h file for a possible Label widget: -.LP -.Ds -.TA .5i 3i -.ta .5i 3i -#ifndef LABELP_H -#define LABELP_H - -#include - -/* New representation types used by the Label widget */ -#define XtRJustify "Justify" - -/* New fields for the Label widget record */ -typedef struct { -/* Settable resources */ - Pixel foreground; - XFontStruct *font; - String label; /* text to display */ - XtJustify justify; - Dimension internal_width; /* # pixels horizontal border */ - Dimension internal_height; /* # pixels vertical border */ - -/* Data derived from resources */ - GC normal_GC; - GC gray_GC; - Pixmap gray_pixmap; - Position label_x; - Position label_y; - Dimension label_width; - Dimension label_height; - Cardinal label_len; - Boolean display_sensitive; -} LabelPart; -.De -.sp -.Ds -.TA .5i 3i -.ta .5i 3i -/* Full instance record declaration */ -typedef struct _LabelRec { - CorePart core; - LabelPart label; -} LabelRec; - -/* Types for Label class methods */ -typedef void (*LabelSetTextProc)(); - /* Widget w */ - /* String text */ - -typedef String (*LabelGetTextProc)(); - /* Widget w */ - -/* New fields for the Label widget class record */ -typedef struct { - LabelSetTextProc set_text; - LabelGetTextProc get_text; - XtPointer extension; -} LabelClassPart; - -/* Full class record declaration */ -typedef struct _LabelClassRec { - CoreClassPart core_class; - LabelClassPart label_class; -} LabelClassRec; - -/* Class record variable */ -extern LabelClassRec labelClassRec; - -#define LabelInheritSetText((LabelSetTextProc)_XtInherit) -#define LabelInheritGetText((LabelGetTextProc)_XtInherit) -#endif LABELP_H -.De -.LP -To accommodate operating systems with file name length restrictions, -the name of the private .h file is the first nine characters of the -widget class followed by a capital P. -For example, -the private .h file for the -Constraint -widget class is -.PN ConstrainP.h . - -.NH 3 -Widget Subclassing in .c Files -.XS -\*(SN Widget Subclassing in .c Files -.XE -.LP -The .c file for a widget contains the structure initializer -for the class record variable, -which contains the following parts: -.IP \(bu 5 -Class information (for example, \fIsuperclass\fP, \fIclass_name\fP, -\fIwidget_size\fP, -\fIclass_initialize\fP, and \fIclass_inited\fP). -.IP \(bu 5 -Data constants (for example, \fIresources\fP and \fInum_resources\fP, -\fIactions\fP and \fInum_actions\fP, \fIvisible_interest\fP, -\fIcompress_motion\fP, -\fIcompress_exposure\fP, and \fIversion\fP). -.IP \(bu 5 -Widget operations (for example, \fIinitialize\fP, \fIrealize\fP, \fIdestroy\fP, -\fIresize\fP, \fIexpose\fP, \fIset_values\fP, \fIaccept_focus\fP, -and any new operations specific to -the widget). -.LP -.IN "superclass" "" "@DEF@" -The \fIsuperclass\fP field points to the superclass -global class -record, declared in the superclass private .h file. -For direct subclasses of the generic core widget, -\fIsuperclass\fP should be initialized to the address of the -.PN widgetClassRec -structure. -The superclass is used for class chaining operations and for -inheriting or enveloping a superclass's operations -(see Sections 1.6.7, 1.6.9, and 1.6.10). -.LP -.IN "class_name" "" "@DEF@" -The \fIclass_name\fP field contains the text name for this class, -which is used by -the resource manager. -For example, the Label widget has the string ``Label''. -More than one widget class can share the same text class name. -This string must be permanently allocated prior to or during the -execution of the class initialization procedure and must not be -subsequently deallocated. - -.LP -.IN "widget_size" "" "@DEF@" -The \fIwidget_size\fP field is the size of the corresponding widget -instance structure -(not the size of the class structure). -.LP -.IN "version" "" "@DEF@" -The \fIversion\fP field indicates the toolkit -implementation version number and is used for -runtime consistency checking of the \*(tk and widgets in an application. -Widget writers must set it to the -implementation-defined symbolic value -.PN XtVersion -in the widget class structure initialization. -Those widget writers who believe that their widget binaries are compatible -with other implementations of the \*(xI can put the special value -.PN XtVersionDontCheck -in the \fIversion\fP field to disable version checking for those widgets. -If a widget needs to compile alternative code for different -revisions of the \*(xI interface definition, it may use the symbol -.PN XtSpecificationRelease , -as described in Chapter 13. -Use of -.PN XtVersion -allows the \*(xI implementation to recognize widget binaries -that were compiled with older implementations. -.LP -The \fIextension\fP field is for future upward compatibility. -If the widget programmer adds fields to class parts, -all subclass structure layouts change, -requiring complete recompilation. -To allow clients to avoid recompilation, -an extension field at the end of each class part can point to a record -that contains any additional class information required. -.LP -All other fields are described in their respective sections. -.LP -The .c file also contains the declaration of the global class -structure pointer variable used to create instances of the class. -The following is an abbreviated version of the .c file -for a Label widget. -The resources table is described in Chapter 9. -.LP -.Ds -.TA .5i 1.5i 3i -.ta .5i 1.5i 3i - -/* Resources specific to Label */ -static XtResource resources[] = { - {XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel), - XtOffset(LabelWidget, label.foreground), XtRString, - XtDefaultForeground}, - {XtNfont, XtCFont, XtRFontStruct, sizeof(XFontStruct *), - XtOffset(LabelWidget, label.font),XtRString, - XtDefaultFont}, - {XtNlabel, XtCLabel, XtRString, sizeof(String), - XtOffset(LabelWidget, label.label), XtRString, NULL}, - . - . - . -} - -/* Forward declarations of procedures */ -static void ClassInitialize(); -static void Initialize(); -static void Realize(); -static void SetText(); -static void GetText(); - . - . - . -.De -.sp -.Ds -.TA .5i 2i 3i -.ta .5i 2i 3i -/* Class record constant */ -LabelClassRec labelClassRec = { - { - /* core_class fields */ - /* superclass */ (WidgetClass)&coreClassRec, - /* class_name */ "Label", - /* widget_size */ sizeof(LabelRec), - /* class_initialize */ ClassInitialize, - /* class_part_initialize */ NULL, - /* class_inited */ False, - /* initialize */ Initialize, - /* initialize_hook */ NULL, - /* realize */ Realize, - /* actions */ NULL, - /* num_actions */ 0, - /* resources */ resources, - /* num_resources */ XtNumber(resources), - /* xrm_class */ NULLQUARK, - /* compress_motion */ True, - /* compress_exposure */ True, - /* compress_enterleave */ True, - /* visible_interest */ False, - /* destroy */ NULL, - /* resize */ Resize, - /* expose */ Redisplay, - /* set_values */ SetValues, - /* set_values_hook */ NULL, - /* set_values_almost */ XtInheritSetValuesAlmost, - /* get_values_hook */ NULL, - /* accept_focus */ NULL, - /* version */ XtVersion, - /* callback_offsets */ NULL, - /* tm_table */ NULL, - /* query_geometry */ XtInheritQueryGeometry, - /* display_accelerator */ NULL, - /* extension */ NULL - }, - { - /* Label_class fields */ - /* get_text */ GetText, - /* set_text */ SetText, - /* extension */ NULL - } -}; - -/* Class record pointer */ -WidgetClass labelWidgetClass = (WidgetClass) &labelClassRec; - -/* New method access routines */ -void LabelSetText(w, text) - Widget w; - String text; -{ - Label WidgetClass lwc = (Label WidgetClass)XtClass(w); - XtCheckSubclass(w, labelWidgetClass, NULL); - *(lwc->label_class.set_text)(w, text) -} -/* Private procedures */ - . - . - . -.De - -.NH 3 -Widget Class and Superclass Look Up -.XS -\*(SN Widget Class and Superclass Look Up -.XE -.LP -To obtain the class of a widget, use -.PN XtClass . -.IN "XtClass" "" "@DEF@" -.LP -.sM -.FD 0 -WidgetClass XtClass(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. \*(oI -.LP -.eM -The -.PN XtClass -function returns a pointer to the widget's class structure. -.sp -.LP -To obtain the superclass of a widget, use -.PN XtSuperclass . -.IN "XtSuperclass" "" "@DEF@" -.LP -.sM -.FD 0 -WidgetClass XtSuperclass(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. \*(oI -.LP -.eM -The -.PN XtSuperclass -function returns a pointer to the widget's superclass class structure. - -.NH 3 -Widget Subclass Verification -.XS -\*(SN Widget Subclass Verification -.XE -.LP -To check the subclass to which a widget belongs, use -.PN XtIsSubclass . -.IN "XtIsSubclass" "" "@DEF@" -.LP -.sM -.FD 0 -Boolean XtIsSubclass(\fIw\fP, \fIwidget_class\fP) -.br - Widget \fIw\fP; -.br - WidgetClass \fIwidget_class\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget or object instance whose class is to be checked. \*(oI -.IP \fIwidget_class\fP 1i -Specifies the widget class for which to test. \*(oC -.LP -.eM -The -.PN XtIsSubclass -function returns -.PN True -if the class of the specified widget is equal to -or is a subclass of the specified class. -The widget's class can be any number of subclasses down the chain -and need not be an immediate subclass of the specified class. -Composite widgets that need to restrict the class of the items they -contain can use -.PN XtIsSubclass -to find out if a widget belongs to the desired class of objects. -.sp -.LP -To test if a given widget belongs to a subclass of an \*(xI-defined -class, the \*(xI define macros or functions equivalent to -.PN XtIsSubclass -for each of the built-in classes. These procedures are -.PN XtIsObject , -.PN XtIsRectObj , -.PN XtIsWidget , -.PN XtIsComposite , -.PN XtIsConstraint , -.PN XtIsShell , -.PN XtIsOverrideShell , -.PN XtIsWMShell , -.PN XtIsVendorShell , -.PN XtIsTransientShell , -.PN XtIsTopLevelShell , -.PN XtIsApplicationShell , -and -.PN XtIsSessionShell . -.IN "XtIsObject" "" "@DEF@" -.IN "XtIsRectObj" "" "@DEF@" -.IN "XtIsWidget" "" "@DEF@" -.IN "XtIsComposite" "" "@DEF@" -.IN "XtIsConstraint" "" "@DEF@" -.IN "XtIsShell" "" "@DEF@" -.IN "XtIsOverrideShell" "" "@DEF@" -.IN "XtIsWMShell" "" "@DEF@" -.IN "XtIsVendorShell" "" "@DEF@" -.IN "XtIsTransientShell" "" "@DEF@" -.IN "XtIsTopLevelShell" "" "@DEF@" -.IN "XtIsApplicationShell" "" "@DEF@" -.IN "XtIsSessionShell" "" "@DEF@" -.LP -All these macros and functions have the same argument description. -.LP -.sM -.FD 0 -Boolean XtIs\fI\fP (\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget or object instance whose class is to be checked. \*(oI -.LP -.eM -These procedures may be faster than calling -.PN XtIsSubclass -directly for the built-in classes. -.sp -.LP -To check a widget's class -and to generate a debugging error message, use -.PN XtCheckSubclass , -defined in -.Pn < X11/IntrinsicP.h >: -.IN "XtCheckSubclass" "" "@DEF@" -.LP -.sM -.FD 0 -void XtCheckSubclass(\fIw\fP, \fIwidget_class\fP, \fImessage\fP) -.br - Widget \fIw\fP; -.br - WidgetClass \fIwidget_class\fP; -.br - String \fImessage\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget or object whose class is to be checked. \*(oI -.IP \fIwidget_class\fP 1i -Specifies the widget class for which to test. \*(oC -.ds Me used -.IP \fImessage\fP 1i -Specifies the message to be used. -.LP -.eM -The -.PN XtCheckSubclass -macro determines if the class of the specified widget is equal to -or is a subclass of the specified class. -The widget's class can be any number of subclasses down the chain -and need not be an immediate subclass of the specified class. -If the specified widget's class is not a subclass, -.PN XtCheckSubclass -constructs an error message from the supplied message, -the widget's actual class, and the expected class and calls -.PN XtErrorMsg . -.PN XtCheckSubclass -should be used at the entry point of exported routines to ensure -that the client has passed in a valid widget class for the exported operation. -.LP -.PN XtCheckSubclass -is only executed when the module has been compiled with the compiler symbol -DEBUG defined; otherwise, it is defined as the empty string -and generates no code. - -.NH 3 -Superclass Chaining -.XS -\*(SN Superclass Chaining -.XE -.LP -.IN "Chaining" "superclass" -.IN "Chaining" "Subclass" -.IN "Superclass Chaining" "" "@DEF@" -.IN "Subclass Chaining" "" "@DEF@" -.IN "Inheritance" -While most fields in a widget class structure are self-contained, -some fields are linked to their corresponding fields in their superclass -structures. -With a linked field, -the \*(xI access the field's value only after accessing its corresponding -superclass value (called downward superclass chaining) or -before accessing its corresponding superclass value (called upward superclass -chaining). The self-contained fields are -.sp -.ta 2i -In all widget classes: \fIclass_name\fP -.br - \fIclass_initialize\fP -.br - \fIwidget_size\fP -.br - \fIrealize\fP -.br - \fIvisible_interest\fP -.br - \fIresize\fP -.br - \fIexpose\fP -.br - \fIaccept_focus\fP -.br - \fIcompress_motion\fP -.br - \fIcompress_exposure\fP -.br - \fIcompress_enterleave\fP -.br - \fIset_values_almost\fP -.br - \fItm_table\fP -.br - \fIversion\fP -.br - \fIallocate\fP -.br - \fIdeallocate\fP -.sp -In Composite widget classes: \fIgeometry_manager\fP -.br - \fIchange_managed\fP -.br - \fIinsert_child\fP -.br - \fIdelete_child\fP -.br - \fIaccepts_objects\fP -.br - \fIallows_change_managed_set\fP -.sp -In Constraint widget classes: \fIconstraint_size\fP -.sp -In Shell widget classes: \fIroot_geometry_manager\fP -.sp -.LP -With downward superclass chaining, -the invocation of an operation first accesses the field from the -Object, -RectObj, -and -Core -class structures, then from the subclass structure, and so on down the class chain to -that widget's class structure. These superclass-to-subclass fields are -.sp -.ta 1i -.br - \fIclass_part_initialize\fP -.br - \fIget_values_hook\fP -.br - \fIinitialize\fP -.br - \fIinitialize_hook\fP -.br - \fIset_values\fP -.br - \fIset_values_hook\fP -.br - \fIresources\fP -.sp -.LP -In addition, for subclasses of -Constraint, -the following fields of the -.PN ConstraintClassPart -and -.PN ConstraintClassExtensionRec -structures are chained from the -Constraint -class down to the subclass: -.ta 1i -.br - \fIresources\fP -.br - \fIinitialize\fP -.br - \fIset_values\fP -.br - \fIget_values_hook\fP -.sp -.LP -With upward superclass chaining, -the invocation of an operation first accesses the field from the widget -class structure, then from the superclass structure, -and so on up the class chain to the -Core, -RectObj, -and -Object -class structures. -The subclass-to-superclass fields are -.sp -.ta 1i -.br - \fIdestroy\fP -.br - \fIactions\fP -.sp -.LP -For subclasses of -Constraint, -the following field of -.PN ConstraintClassPart -is chained from the subclass up to the -Constraint class: -.sp -.ta 1i -.br - \fIdestroy\fP - -.NH 3 -Class Initialization: class_initialize and class_part_initialize Procedures -.XS -\*(SN Class Initialization: class_initialize and class_part_initialize Procedures -.XE -.LP -.IN "Class Initialization" -.IN "Initialization" -Many class records can be initialized completely at compile or link time. -In some cases, however, -a class may need to register type converters or perform other sorts of -once-only runtime initialization. -.LP -Because the C language does not have initialization procedures -that are invoked automatically when a program starts up, -a widget class can declare a class_initialize procedure -that will be automatically called exactly once by the \*(xI. -A class initialization procedure pointer is of type -.PN XtProc : -.IN "class_initialize procedure" "" "@DEF@" -.IN "XtProc" "" "@DEF@" -.LP -.sM -.FD 0 -typedef void (*XtProc)(void); -.FN -.LP -.eM -A widget class indicates that it has no class initialization procedure by -specifying NULL in the \fIclass_initialize\fP field. -.LP -In addition to the class initialization that is done exactly once, -some classes perform initialization for fields in their parts -of the class record. -These are performed not just for the particular class, -but for subclasses as well, and are -done in the class's class part initialization procedure, -a pointer to which is stored in the \fIclass_part_initialize\fP field. -The class_part_initialize procedure pointer is of type -.PN XtWidgetClassProc . -.IN "XtWidgetClassProc" "" "@DEF@" -.LP -.sM -.FD 0 -typedef void (*XtWidgetClassProc)(WidgetClass); -.br - WidgetClass \fIwidget_class\fP; -.FN -.IP \fIwidget_class\fP 1i -Points to the class structure for the class being initialized. -.LP -.eM -During class initialization, -the class part initialization procedures for the class and all its superclasses -are called in superclass-to-subclass order on the class record. -These procedures have the responsibility of doing any dynamic initializations -necessary to their class's part of the record. -The most common is the resolution of any inherited methods defined in the -class. -For example, -if a widget class C has superclasses -Core, -Composite, -A, and B, the class record for C first is passed to -Core 's -class_part_initialize procedure. -This resolves any inherited Core methods and compiles the textual -representations of the resource list and action table that are defined in the -class record. -Next, Composite's -class_part_initialize procedure is called to initialize the -composite part of C's class record. -Finally, the class_part_initialize procedures for A, B, and C, in that order, -are called. -For further information, -see Section 1.6.9. -Classes that do not define any new class fields -or that need no extra processing for them can specify NULL -in the \fIclass_part_initialize\fP field. -.LP -All widget classes, whether they have a class initialization procedure or not, -must start with their \fIclass_inited\fP field -.PN False . -.LP -The first time a widget of a class is created, -.PN XtCreateWidget -ensures that the widget class and all superclasses are initialized, in -superclass-to-subclass order, by checking each \fIclass_inited\fP field and, -if it is -.PN False , -by calling the class_initialize and the class_part_initialize procedures -for the class and all its superclasses. -The \*(xI then set the \fIclass_inited\fP field to a nonzero value. -After the one-time initialization, -a class structure is constant. -.LP -The following example provides the class initialization procedure for a Label class. -.LP -.Ds -.TA .5i 2i -.ta .5i 2i -static void ClassInitialize() -{ - XtSetTypeConverter(XtRString, XtRJustify, CvtStringToJustify, - NULL, 0, XtCacheNone, NULL); -} -.De - -.NH 3 -Initializing a Widget Class -.XS -\fB\*(SN Initializing a Widget Class\fP -.XE -.IN "Widget" "class initialization" -.LP -A class is initialized when the first widget of that class or any -subclass is created. -To initialize a widget class without creating any widgets, use -.PN XtInitializeWidgetClass . -.IN "XtInitializeWidgetClass" "" "@DEF@" -.LP -.sM -.FD 0 -void XtInitializeWidgetClass(\fIobject_class\fP) -.br - WidgetClass \fIobject_class\fP; -.br -.FN -.IP \fIobject_class\fP 1i -Specifies the object class to initialize. May be -.PN objectClass -or any subclass thereof. -.LP -.eM -If the specified widget class is already initialized, -.PN XtInitializeWidgetClass -returns immediately. -.LP -If the class initialization procedure registers type converters, -these type converters are not available until the first object -of the class or subclass is created or -.PN XtInitializeWidgetClass -is called -(see Section 9.6). - -.NH 3 -Inheritance of Superclass Operations -.XS -\*(SN Inheritance of Superclass Operations -.XE -.LP -A widget class is free to use any of its superclass's self-contained -operations rather than implementing its own code. -The most frequently inherited operations are -.IP -expose -.IP -realize -.IP -insert_child -.IP -delete_child -.IP -geometry_manager -.IP -set_values_almost -.LP -To inherit an operation \fIxyz\fP, -specify the constant -.PN XtInherit \fIXyz\fP -in your class record. -.LP -Every class that declares a new procedure in its widget class part must -provide for inheriting the procedure in its class_part_initialize -procedure. -The chained operations declared in Core -and Constraint -records are never inherited. -Widget classes that do nothing beyond what their superclass does -specify NULL for chained procedures -in their class records. -.LP -Inheriting works by comparing the value of the field with a known, special -value and by copying in the superclass's value for that field if a match -occurs. -This special value, called the inheritance constant, -is usually the \*(xI internal value -.PN _XtInherit -cast to the appropriate type. -.PN _XtInherit -is a procedure that issues an error message if it is actually called. -.LP -For example, -.PN CompositeP.h -contains these definitions: -.LP -.Ds -.TA .25i 1.5i 3i -.ta .25i 1.5i 3i -#define XtInheritGeometryManager ((XtGeometryHandler) _XtInherit) -#define XtInheritChangeManaged ((XtWidgetProc) _XtInherit) -#define XtInheritInsertChild ((XtArgsProc) _XtInherit) -#define XtInheritDeleteChild ((XtWidgetProc) _XtInherit) -.De -.LP -Composite's class_part_initialize procedure begins as follows: -.LP -.Ds -.TA .2i 1.5i 3i -.ta .2i 1.5i 3i -static void CompositeClassPartInitialize(widgetClass) - WidgetClass widgetClass; -{ - CompositeWidgetClass wc = (CompositeWidgetClass)widgetClass; - CompositeWidgetClass super = (CompositeWidgetClass)wc->core_class.superclass; - - if (wc->composite_class.geometry_manager == XtInheritGeometryManager) { - wc->composite_class.geometry_manager = super->composite_class.geometry_manager; - } - - if (wc->composite_class.change_managed == XtInheritChangeManaged) { - wc->composite_class.change_managed = super->composite_class.change_managed; - } - . - . - . -.De -.LP -Nonprocedure fields may be inherited in the same manner as procedure -fields. The class may declare any reserved value it wishes for -the inheritance constant for its new fields. The following inheritance -constants are defined: -.LP -For Object: -.IP -.PN XtInheritAllocate -.IP -.PN XtInheritDeallocate -.LP -For Core: -.IP -.PN XtInheritRealize -.IP -.PN XtInheritResize -.IP -.PN XtInheritExpose -.IP -.PN XtInheritSetValuesAlmost -.IP -.PN XtInheritAcceptFocus -.IP -.PN XtInheritQueryGeometry -.IP -.PN XtInheritTranslations -.IP -.PN XtInheritDisplayAccelerator -.LP -For Composite: -.IP -.PN XtInheritGeometryManager -.IP -.PN XtInheritChangeManaged -.IP -.PN XtInheritInsertChild -.IP -.PN XtInheritDeleteChild -.LP -For Shell: -.IP -.PN XtInheritRootGeometryManager - -.NH 3 -Invocation of Superclass Operations -.XS -\*(SN Invocation of Superclass Operations -.XE -.LP -A widget sometimes needs to call a superclass operation -that is not chained. -For example, -a widget's expose procedure might call its superclass's \fIexpose\fP -and then perform a little more work on its own. -For example, a Composite -class with predefined managed children can implement insert_child -by first calling its superclass's \fIinsert_child\fP -.IN "insert_child procedure" -and then calling -.PN XtManageChild -to add the child to the managed set. -.LP -.NT -A class method should not use -.PN XtSuperclass -but should instead call the class method of its own specific superclass -directly through the superclass record. -That is, it should use its own class pointers only, -not the widget's class pointers, -as the widget's class may be a subclass of the -class whose implementation is being referenced. -.NE -This technique is referred to as \fIenveloping\fP the superclass's operation. - -.NH 3 -Class Extension Records -.XS -\*(SN Class Extension Records -.XE -.IN "Widget" "class extension records" -.LP -It may be necessary at times to add new fields to already existing -widget class structures. To permit this to be done without requiring -recompilation of all subclasses, the last field in a class part structure -should be an extension pointer. If no extension fields for a class -have yet been defined, subclasses should initialize the value of the -extension pointer to NULL. -.LP -If extension fields exist, as is the case with the -Composite, -Constraint, -and -Shell -classes, subclasses can provide values for these fields by setting the -\fIextension\fP pointer for the appropriate part in their class structure to -point to a statically declared extension record containing the -additional fields. -Setting the \fIextension\fP field is never mandatory; code that uses fields -in the extension record must always check the \fIextension\fP field and take -some appropriate default action if it is NULL. -.LP -In order to permit multiple subclasses and libraries to chain extension -records from a single \fIextension\fP field, extension records should be -declared as a linked list, and each extension record definition should -contain the following four fields at the beginning of the structure -declaration: -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -struct { - XtPointer next_extension; - XrmQuark record_type; - long version; - Cardinal record_size; -}; -.De -.IP \fInext_extension\fP 1.25i -Specifies the next record in the list, or NULL. -.IP \fIrecord_type\fP 1.25i -Specifies the particular structure declaration to which -each extension record instance conforms. -.IP \fIversion\fP 1.25i -Specifies a version id symbolic constant supplied by -the definer of the structure. -.IP \fIrecord_size\fP 1.25i -Specifies the total number of bytes allocated for the -extension record. -.LP -.eM -The \fIrecord_type\fP field identifies the contents of the extension record -and is used by the definer of the record to locate its particular -extension record in the list. The -\fIrecord_type\fP field is normally assigned the -result of -.PN XrmStringToQuark -for a registered string constant. The -\*(xI reserve all record type strings beginning with the two -characters ``XT'' for future standard uses. The value -.PN \s-1NULLQUARK\s+1 -may also be used -by the class part owner in extension records attached to its own class -part extension field to identify the extension record unique to that -particular class. -.LP -The \fIversion\fP field is an owner-defined constant that may be used to -identify binary files that have been compiled with alternate -definitions of the remainder of the extension record data structure. The private -header file for a widget class should provide a symbolic constant for -subclasses to use to initialize this field. -The \fIrecord_size\fP field value includes the four common header fields and -should normally be initialized with -.PN sizeof (). -.LP -Any value stored in the class part extension fields of -.PN CompositeClassPart , -.PN ConstraintClassPart , -or -.PN ShellClassPart -must point to an extension record conforming to this definition. -.LP -The \*(xI provide a utility function for widget writers to locate a -particular class extension record in a linked list, given a widget class -and the offset of the \fIextension\fP field in the class record. -.LP -To locate a class extension record, use -.PN XtGetClassExtension . -.IN "XtGetClassExtension" "" "@DEF@" -.LP -.sM -.FD 0 -XtPointer XtGetClassExtension(\fIobject_class\fP, \fIbyte_offset\fP, \ -\fItype\fP, \fIversion\fP, \fIrecord_size\fP) -.br - WidgetClass \fIobject_class\fP; -.br - Cardinal \fIbyte_offset\fP; -.br - XrmQuark \fItype\fP; -.br - long \fIversion\fP; -.br - Cardinal \fIrecord_size\fP; -.FN -.IP \fIobject_class\fP 1i -Specifies the object class containing the extension list to be searched. -.IP \fIbyte_offset\fP 1i -Specifies the offset in bytes from the base of the -class record of the extension field to be searched. -.IP \fItype\fP 1i -Specifies the record_type of the class extension to be located. -.IP \fIversion\fP 1i -Specifies the minimum acceptable version of the class -extension required for a match. -.IP \fIrecord_size\fP 1i -Specifies the minimum acceptable length of the class -extension record required for a match, or 0. -.LP -.eM -The list of extension records at the specified offset in the specified -object class will be searched for a match on the specified type, -a version greater than or equal to the specified version, and a record -size greater than or equal the specified record_size if it is nonzero. -.PN XtGetClassExtension -returns a pointer to a matching extension record or NULL if no match -is found. The returned extension record must not be modified or -freed by the caller if the caller is not the extension owner. -.bp diff --git a/doc/xorg-docs/specs/Xt/CH02 b/doc/xorg-docs/specs/Xt/CH02 deleted file mode 100644 index cbb4bb8a5..000000000 --- a/doc/xorg-docs/specs/Xt/CH02 +++ /dev/null @@ -1,3165 +0,0 @@ -.\" $Xorg: CH02,v 1.3 2000/08/17 19:42:42 cpqbld Exp $ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" Digital Equipment Corporation, Maynard, Massachusetts. -.\" -.\" Permission to use, copy, modify and distribute this documentation for any -.\" purpose and without fee is hereby granted, provided that the above copyright -.\" notice appears in all copies and that both that copyright notice and this -.\" permission notice appear in supporting documentation, and that the name of -.\" Digital not be used in in advertising or publicity pertaining -.\" to distribution of the software without specific, written prior permission. -.\" Digital makes no representations about the suitability of the -.\" software described herein for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBChapter 2\fP\s-1 - -\s+1\fBWidget Instantiation\fP\s-1 -.sp 2 -.nr H1 2 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.LP -.XS -Chapter 2 \(em Widget Instantiation -.XE -A hierarchy of widget instances constitutes a widget tree. -The shell widget returned by -.PN XtAppCreateShell -is the root of the widget tree instance. -The widgets with one or more children are the intermediate nodes of that tree, -and the widgets with no children of any kind are the leaves of the widget tree. -With the exception of pop-up children (see Chapter 5), -this widget tree instance defines the associated X Window tree. -.LP -Widgets can be either composite or primitive. -Both kinds of widgets can contain children, -but the \*(xI provide a set of management mechanisms for constructing -and interfacing between composite widgets, their children, and -other clients. -.LP -Composite widgets, that is, members of the class -.PN compositeWidgetClass , -are containers for an arbitrary, -but widget implementation-defined, collection of children, -which may be instantiated by the composite widget itself, -by other clients, or by a combination of the two. -Composite widgets also contain methods for managing the geometry (layout) -of any child widget. -Under unusual circumstances, -a composite widget may have zero children, -but it usually has at least one. -By contrast, -primitive widgets that contain children typically instantiate -specific children of known classes themselves and do not expect external -clients to do so. -Primitive widgets also do not have general geometry management methods. -.LP -In addition, -the \*(xI recursively perform many operations -(for example, realization and destruction) -on composite widgets and all their children. -Primitive widgets that have children must be prepared -to perform the recursive operations themselves on behalf of their children. -.LP -A widget tree is manipulated by several \*(xI functions. -For example, -.PN XtRealizeWidget -traverses the tree downward and recursively realizes all -pop-up widgets and children of composite widgets. -.PN XtDestroyWidget -traverses the tree downward and destroys all pop-up widgets -and children of composite widgets. -The functions that fetch and modify resources traverse the tree upward -and determine the inheritance of resources from a widget's ancestors. -.PN XtMakeGeometryRequest -traverses the tree up one level and calls the geometry manager -that is responsible for a widget child's geometry. -.LP -To facilitate upward traversal of the widget tree, -each widget has a pointer to its parent widget. -The -Shell -widget that -.PN XtAppCreateShell -returns has a \fIparent\fP pointer of NULL. -.LP -To facilitate downward traversal of the widget tree, -the \fIchildren\fP field of -each composite widget is a pointer to an array of child widgets, -which includes all normal children created, -not just the subset of children that are managed by the composite widget's -geometry manager. -Primitive widgets -that instantiate children are entirely responsible for all operations -that require downward traversal below themselves. -In addition, -every widget has a pointer to an array of pop-up children. - -.NH 2 -Initializing the \*(tk -.XS -\fB\*(SN Initializing the \*(tk\fP -.XE -.LP -Before an application can call any \*(xI function -other than -.PN XtSetLanguageProc -and -.PN XtToolkitThreadInitialize , -it must initialize the \*(xI by using -.IP \(bu 5 -.PN XtToolkitInitialize , -which initializes the \*(xI internals -.IP \(bu 5 -.PN XtCreateApplicationContext , -which initializes the per-application state -.IP \(bu 5 -.PN XtDisplayInitialize -or -.PN XtOpenDisplay , -which initializes the per-display state -.IP \(bu 5 -.PN XtAppCreateShell , -which creates the root of a widget tree -.LP -Or an application can call the convenience procedure -.PN XtOpenApplication , -which combines the functions of the preceding procedures. -An application wishing to use the ANSI C locale mechanism should call -.PN XtSetLanguageProc -prior to calling -.PN XtDisplayInitialize , -.PN XtOpenDisplay , -.PN XtOpenApplication , -or -.PN XtAppInitialize . -.LP -Multiple instances of \*(tk applications may be implemented -in a single address space. -Each instance needs to be able to read -input and dispatch events independently of any other instance. -Further, an application instance may need multiple display connections -to have widgets on multiple displays. -From the application's point of view, multiple display connections -usually are treated together as a single unit -for purposes of event dispatching. -.IN "application context" "" "@DEF@" -To accommodate both requirements, -the \*(xI define application contexts, -each of which provides the information needed to distinguish one application -instance from another. -The major component of an application context is a list of one or more X -.PN Display -pointers for that application. -The \*(xI handle all display connections within a single application -context simultaneously, handling input in a round-robin fashion. -The application context type -.PN XtAppContext -.IN "XtAppContext" "" "@DEF@" -is opaque to clients. -.sp -.LP -To initialize the \*(xI internals, use -.PN XtToolkitInitialize . -.LP -.IN "XtToolkitInitialize" "" "@DEF@" -.sM -.FD 0 -void XtToolkitInitialize() -.FN -.LP -.eM -If -.PN XtToolkitInitialize -was previously called, it returns immediately. -When -.PN XtToolkitThreadInitialize -is called before -.PN XtToolkitInitialize , -the latter is protected against -simultaneous activation by multiple threads. -.sp -.LP -To create an application context, use -.PN XtCreateApplicationContext . -.LP -.IN "XtCreateApplicationContext" "" "@DEF@" -.sM -.FD 0 -XtAppContext XtCreateApplicationContext() -.FN -.LP -.eM -The -.PN XtCreateApplicationContext -function returns an application context, -which is an opaque type. -Every application must have at least one application context. -.sp -.LP -To destroy an application context and close any -remaining display connections in it, use -.PN XtDestroyApplicationContext . -.LP -.IN "XtDestroyApplicationContext" "" "@DEF@" -.sM -.FD 0 -void XtDestroyApplicationContext(\fIapp_context\fP) -.br - XtAppContext \fIapp_context\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context. -.LP -.eM -The -.PN XtDestroyApplicationContext -function destroys the specified application context. -If called from within an event dispatch (for example, in a callback procedure), -.PN XtDestroyApplicationContext -does not destroy the application context until the dispatch is complete. -.sp -.LP -To get the application context in which a given widget was created, use -.PN XtWidgetToApplicationContext . -.LP -.IN "XtWidgetToApplicationContext" "" "@DEF@" -.sM -.FD 0 -XtAppContext XtWidgetToApplicationContext(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget for which you want the application context. \*(oI -.LP -.eM -The -.PN XtWidgetToApplicationContext -function returns the application context for the specified widget. -.sp -.LP -To initialize a display and add it to an application context, use -.PN XtDisplayInitialize . -.LP -.IN "XtDisplayInitialize" "" "@DEF@" -.sM -.FD 0 -void XtDisplayInitialize(\fIapp_context\fP, \fIdisplay\fP, \ -\fIapplication_name\fP, \fIapplication_class\fP, -.br - \fIoptions\fP, \fInum_options\fP, \fIargc\fP, \fIargv\fP) -.br - XtAppContext \fIapp_context\fP; -.br - Display *\fIdisplay\fP; -.br - String \fIapplication_name\fP; -.br - String \fIapplication_class\fP; -.br - XrmOptionDescRec *\fIoptions\fP; -.br - Cardinal \fInum_options\fP; -.br - int *\fIargc\fP; -.br - String *\fIargv\fP; -.FN -.IP \fIapp_context\fP 1.4i -Specifies the application context. -.IP \fIdisplay\fP 1.4i -Specifies a previously opened display connection. Note that a single -display connection can be in at most one application context. -.IP \fIapplication_name\fP 1.4i -Specifies the name of the application instance. -.IP \fIapplication_class\fP 1.4i -Specifies the class name of this application, -which is usually the generic name for all instances of this application. -.IP \fIoptions\fP 1.4i -Specifies how to parse the command line for any application-specific resources. -The \fIoptions\fP argument is passed as a parameter to -.PN XrmParseCommand . -For further information, -see Section 15.9 in \fI\*(xL\fP and Section 2.4 of this specification. -.IP \fInum_options\fP 1.4i -Specifies the number of entries in the options list. -.IP \fIargc\fP 1.4i -Specifies a pointer to the number of command line parameters. -.IP \fIargv\fP 1.4i -Specifies the list of command line parameters. -.LP -.eM -The -.PN XtDisplayInitialize -function retrieves the language string to be -used for the specified display (see Section 11.11), -calls the language procedure (if set) with that language string, -builds the resource database for the default screen, calls the Xlib -.PN XrmParseCommand -function to parse the command line, -and performs other per-display initialization. -After -.PN XrmParseCommand -has been called, -\fIargc\fP and \fIargv\fP contain only those parameters that -were not in the standard option table or in the table specified by the -\fIoptions\fP argument. -If the modified \fIargc\fP is not zero, -most applications simply print out the modified \fIargv\fP along with a message -listing the allowable options. -On POSIX-based systems, -the application name is usually the final component of \fIargv\fP[0]. -If the synchronous resource is -.PN True , -.PN XtDisplayInitialize -calls the Xlib -.PN XSynchronize -function to put Xlib into synchronous mode for this display connection -and any others currently open in the application context. -See Sections 2.3 and 2.4 for details on the \fIapplication_name\fP, -\fIapplication_class\fP, \fIoptions\fP, and \fInum_options\fP arguments. -.LP -.PN XtDisplayInitialize -calls -.PN XrmSetDatabase -to associate the resource database of the default screen with the -display before returning. - -.KS -.LP -To open a display, initialize it, and then -add it to an application context, use -.PN XtOpenDisplay . -.LP -.IN "XtOpenDisplay" "" "@DEF@" -.sM -.FD 0 -Display *XtOpenDisplay(\fIapp_context\fP, \fIdisplay_string\fP, \ -\fIapplication_name\fP, \fIapplication_class\fP, -.br - \fIoptions\fP, \fInum_options\fP, \fIargc\fP, \fIargv\fP) -.br - XtAppContext \fIapp_context\fP; -.br - String \fIdisplay_string\fP; -.br - String \fIapplication_name\fP; -.br - String \fIapplication_class\fP; -.br - XrmOptionDescRec *\fIoptions\fP; -.br - Cardinal \fInum_options\fP; -.br - int *\fIargc\fP; -.br - String *\fIargv\fP; -.FN -.IP \fIapp_context\fP 1.4i -Specifies the application context. -.IP \fIdisplay_string\fP 1.4i -Specifies the display string, or NULL. -.IP \fIapplication_name\fP 1.4i -Specifies the name of the application instance, or NULL. -.IP \fIapplication_class\fP 1.4i -Specifies the class name of this application, -which is usually the generic name for all instances of this application. -.IP \fIoptions\fP 1.4i -Specifies how to parse the command line for any application-specific resources. -The options argument is passed as a parameter to -.PN XrmParseCommand . -.IP \fInum_options\fP 1.4i -Specifies the number of entries in the options list. -.IP \fIargc\fP 1.4i -Specifies a pointer to the number of command line parameters. -.IP \fIargv\fP 1.4i -Specifies the list of command line parameters. -.KE -.LP -.eM -The -.PN XtOpenDisplay -function calls -.PN XOpenDisplay -with the specified \fIdisplay_string\fP. -If \fIdisplay_string\fP is NULL, -.PN XtOpenDisplay -uses the current value of the \-display option specified in \fIargv\fP. -If no display is specified in \fIargv\fP, -the user's default display is retrieved from the environment. -On POSIX-based systems, -this is the value of the -.PN \s-1DISPLAY\s+1 -environment variable. -.LP -If this succeeds, -.PN XtOpenDisplay -then calls -.PN XtDisplayInitialize -and passes it the opened display and -the value of the \-name option specified in \fIargv\fP as the application name. -If no \-name option is specified -and \fIapplication_name\fP is -non-NULL, \fIapplication_name\fP is passed to -.PN XtDisplayInitialize . -If \fIapplication_name\fP is NULL and if the environment variable -.PN \s-1RESOURCE_NAME\s+1 -is set, the value of -.PN \s-1RESOURCE_NAME\s+1 -is used. Otherwise, the application -name is the name used to invoke the program. On implementations that -conform to ANSI C Hosted Environment support, the application name will -be \fIargv\fP[0] less any directory and file type components, that is, the -final component of \fIargv\fP[0], if specified. If \fIargv\fP[0] does not exist or -is the empty string, the application name is ``main''. -.PN XtOpenDisplay -returns the newly opened display or NULL if it failed. -.LP -See Section 7.12 for information regarding the use of -.PN XtOpenDisplay -in multiple threads. -.sp -.LP -To close a display and remove it from an application context, use -.PN XtCloseDisplay . -.LP -.IN "XtCloseDisplay" "" "@DEF@" -.sM -.FD 0 -void XtCloseDisplay(\fIdisplay\fP) -.br - Display *\fIdisplay\fP; -.FN -.IP \fIdisplay\fP 1i -Specifies the display. -.LP -.eM -The -.PN XtCloseDisplay -function calls -.PN XCloseDisplay -with the specified \fIdisplay\fP as soon as it is safe to do so. -If called from within an event dispatch (for example, a callback procedure), -.PN XtCloseDisplay -does not close the display until the dispatch is complete. -Note that applications need only call -.PN XtCloseDisplay -if they are to continue executing after closing the display; -otherwise, they should call -.PN XtDestroyApplicationContext . -.LP -See Section 7.12 for information regarding the use of -.PN XtCloseDisplay -in multiple threads. - -.NH 2 -Establishing the Locale -.XS -\fB\*(SN Establishing the Locale\fP -.XE -.LP -Resource databases are specified to be created in the current process -locale. During display initialization prior to creating the -per-screen resource database, the \*(xI will call out to a specified -application procedure to set the locale according to options found on -the command line or in the per-display resource specifications. -.LP -The callout procedure provided by the application is of type -.PN XtLanguageProc . -.LP -.IN "XtLanguageProc" "" "@DEF@" -.sM -.FD 0 -typedef String (*XtLanguageProc)(Display*, String, XtPointer); -.br - Display *\fIdisplay\fP; -.br - String \fIlanguage\fP; -.br - XtPointer \fIclient_data\fP; -.FN -.IP \fIdisplay\fP 1i -Passes the display. -.IP \fIlanguage\fP -Passes the initial language value obtained from the command line -or server per-display resource specifications. -.IP \fIclient_data\fP -Passes the additional client data specified in the call to -.PN XtSetLanguageProc . -.LP -.eM -The language procedure allows an application to set the locale to -the value of the language resource determined by -.PN XtDisplayInitialize . -The function returns a new language string that -will be subsequently used by -.PN XtDisplayInitialize -to establish the path for loading resource files. The returned -string will be copied by the \*(xI into new memory. -.LP -Initially, no language procedure is set by the \*(xI. -To set the language procedure for use by -.PN XtDisplayInitialize , -use -.PN XtSetLanguageProc . -.LP -.IN XtSetLanguageProc "" "@DEF@" -.IN "language procedure" "" "@DEF@" -.sM -.FD 0 -XtLanguageProc XtSetLanguageProc(\fIapp_context\fP, \fIproc\fP, \fIclient_data\fP) -.br - XtAppContext \fIapp_context\fP; -.br - XtLanguageProc \fIproc\fP; -.br - XtPointer \fIclient_data\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context in which the language procedure is -to be used, or NULL. -.IP \fIproc\fP 1i -Specifies the language procedure. -.IP \fIclient_data\fP 1i -Specifies additional client data to be passed to the language -procedure when it is called. -.LP -.eM -.PN XtSetLanguageProc -sets the language procedure that will be called from -.PN XtDisplayInitialize -for all subsequent Displays initialized in the specified application -context. If \fIapp_context\fP is NULL, the specified language -procedure is registered in all application contexts created by the -calling process, including any future application contexts that may -be created. If \fIproc\fP is NULL, a default language procedure is -registered. -.PN XtSetLanguageProc -returns the previously registered language procedure. -If a language procedure has not yet been registered, the return value -is unspecified, but if this return value is used in a subsequent call to -.PN XtSetLanguageProc , -it will cause the default language procedure to be registered. -.LP -The default language procedure does the following: -.IP \(bu 5 -Sets the locale according to the environment. On ANSI C-based -systems this is done by calling -.PN setlocale ( -.PN LC_ALL , -\fIlanguage\fP ). -If an error is encountered, a warning message is issued with -.PN XtWarning . -.IP \(bu 5 -Calls -.PN XSupportsLocale -to verify that the current locale is supported. -If the locale is not supported, a warning message is issued with -.PN XtWarning -and the locale is set to ``C''. -.IP \(bu 5 -Calls -.PN XSetLocaleModifiers -specifying the empty string. -.IP \(bu 5 -Returns the value of the current locale. On ANSI C-based systems this -is the return value from a final call to -.PN setlocale ( -.PN LC_ALL , -NULL ). -.LP -A client wishing to use this mechanism to establish locale can do so -by calling -.PN XtSetLanguageProc -prior to -.PN XtDisplayInitialize , -as in the following example. -.LP -.Ds 0 -.TA .5i - Widget top; - XtSetLanguageProc(NULL, NULL, NULL); - top = XtOpenApplication(...); - ... -.De - -.NH 2 -Loading the Resource Database -.XS -\fB\*(SN Loading the Resource Database\fP -.XE -.LP -The -.PN XtDisplayInitialize -function first determines the language -string to be used for the specified display. It then -creates a resource database for the default screen of the display by -combining the following sources in order, with the entries in the -first named source having highest precedence: - -.IP \(bu 5 -Application command line (\fIargc\fP, \fIargv\fP). -.IP \(bu 5 -Per-host user environment resource file on the local host. -.IP \(bu 5 -Per-screen resource specifications from the server. -.IP \(bu 5 -Per-display resource specifications from the server or from -.br -the user preference file on the local host. -.IP \(bu 5 -Application-specific user resource file on the local host. -.IP \(bu 5 -Application-specific class resource file on the local host. - -.LP -When the resource database for a particular screen on the display -is needed (either internally, or when -.PN XtScreenDatabase -is called), -it is created in the following manner using the sources listed -above in the same order: - -.IP \(bu 5 -A temporary database, the ``server resource database'', is -created from the string returned by -.PN XResourceManagerString -or, if -.PN XResourceManagerString -returns NULL, the contents of a resource file in the user's home -directory. On POSIX-based systems, the usual name for this user -preference resource file is $HOME/\fB.Xdefaults\fP. -.IN ".Xdefaults" "" "@DEF@" - -.IP \(bu 5 -If a language procedure has been set, -.PN XtDisplayInitialize -first searches the command line for the option ``-xnlLanguage'', or -for a -xrm option that specifies the xnlLanguage/XnlLanguage resource, -as specified by Section 2.4. -If such a resource is found, the value is assumed to be -entirely in XPCS, the X Portable Character Set. If neither option is -specified on the command line, -.PN XtDisplayInitialize -queries the server resource database (which is assumed to be entirely -in XPCS) for the resource -\fIname\fP\fB.xnlLanguage\fP, class \fIClass\fP\fB.XnlLanguage\fP -where \fIname\fP -.IN "xnlLanguage" "" "@DEF@" -.IN "Resources" "xnlLanguage" -and \fIClass\fP are the \fIapplication_name\fP and -\fIapplication_class\fP specified to -.PN XtDisplayInitialize . -The language procedure is then invoked with -the resource value if found, else the empty string. The -string returned from the language procedure is saved for all future -references in the \*(xI that require the per-display language string. - -.IP \(bu 5 -The screen resource database is initialized by parsing the command -line in the manner specified by Section 2.4. - -.IP \(bu 5 -If a language procedure has not been set, -the initial database is then queried for the resource -\fIname\fP\fB.xnlLanguage\fP, class \fIClass\fP\fB.XnlLanguage\fP -as specified above. -If this database query fails, the server resource database is -queried; if this query also fails, the language is determined from -the environment; on POSIX-based systems, this is done by retrieving the -value of the -.PN \s-1LANG\s+1 -environment variable. If no language string is -found, the empty string is used. -This language string is saved for all future references in the \*(xI -that require the per-display language string. - -.IP \(bu 5 -After determining the language string, the user's environment resource -file is then merged into the initial resource database if the file exists. -This file is user-, host-, and process-specific and is expected to -contain user preferences that are to override those specifications in -the per-display and per-screen resources. -On POSIX-based systems, the user's environment resource file name is -specified by the value of the -.PN \s-1XENVIRONMENT\s+1 -environment variable. -If this environment variable does not exist, the user's home directory -is searched for a file named -.PN \&.Xdefaults-\fIhost\fP , -where \fIhost\fP is the host name of the machine on which the -application is running. - -.IP \(bu 5 -The per-screen resource specifications are then merged into the screen -resource database, if they exist. These specifications are the string -returned by -.PN XScreenResourceString -for the respective screen and are owned entirely by the user. - -.IP \(bu 5 -Next, the server resource database created earlier is merged into the -screen resource database. The server property, and corresponding user -preference file, are owned and constructed entirely by the user. - -.IP \(bu 5 -The application-specific user resource file from the local host is -then merged into the screen resource database. -This file contains user customizations and is stored -in a directory owned by the user. -Either the user or the application or both can store resource specifications -in the file. Each should be prepared to find and respect entries made -by the other. -The file name is found by calling -.PN XrmSetDatabase -with the current screen resource database, after preserving the -original display-associated database, then calling -.PN XtResolvePathname -with the parameters -(\fIdisplay\fP, NULL, NULL, NULL, \fIpath\fP, NULL, 0, NULL), -where \fIpath\fP is defined in an operating-system-specific way. -On POSIX-based systems, \fIpath\fP is defined to be the value -of the environment variable -.PN \s-1XUSERFILESEARCHPATH\s+1 -if this is defined. If -.PN \s-1XUSERFILESEARCHPATH\s+1 -is not defined, an implementation-dependent default value is used. -This default value is constrained in the following manner: - -.RS -.IP \- 3 -If the environment variable -.PN \s-1XAPPLRESDIR\s+1 -is not defined, the default -.PN \s-1XUSERFILESEARCHPATH\s+1 -must contain at least six entries. These entries must contain -.IN "XUSERFILESEARCHPATH" "" "@DEF@" -.IN "XAPPLRESDIR" "" "@DEF@" -.IN "$HOME" -$HOME as the directory prefix, plus the following substitutions: - -.nf -.ta .3i 1.5i 2i -1. %C, %N, %L or %C, %N, %l, %t, %c -2. %C, %N, %l -3. %C, %N -4. %N, %L or %N, %l, %t, %c -5. %N, %l -6. %N -.fi - -The order of these six entries within the path must be as given above. -The order and use of substitutions within a given entry are -implementation-dependent. - -.IP \- 3 -If -.PN \s-1XAPPLRESDIR\s+1 -is defined, the default -.PN \s-1XUSERFILESEARCHPATH\s+1 -must contain at least seven entries. These entries must contain the -following directory prefixes and substitutions: - -.ne 1.1 -.nf -.ta .3i 1.6i 2.2i 3.3i 3.7i -1. $XAPPLRESDIR with %C, %N, %L or %C, %N, %l, %t, %c -2. $XAPPLRESDIR with %C, %N, %l -3. $XAPPLRESDIR with %C, %N -4. $XAPPLRESDIR with %N, %L or %N, %l, %t, %c -5. $XAPPLRESDIR with %N, %l -6. $XAPPLRESDIR with %N -7. $HOME with %N -.fi - -The order of these seven entries within the path must be as given above. -The order and use of substitutions within a given entry are -implementation-dependent. -.RE - -.IP \(bu 5 -Last, the application-specific class resource file from the local -host is merged into the screen resource database. -This file is owned by the application and is usually installed in -a system directory when the application is installed. -It may contain sitewide customizations specified by the system manager. -The name of the application class resource file is found by calling -.PN XtResolvePathname -with the parameters -(\fIdisplay\fP, ``app-defaults'', NULL, NULL, NULL, NULL, 0, NULL). -This file is expected to be provided by the developer of the application -and may be required for the application to function properly. -A simple application that wants to be assured of having a minimal -set of resources in the absence of its class resource file can declare -fallback resource specifications with -.PN XtAppSetFallbackResources . -Note that the customization substitution string is retrieved -dynamically by -.PN XtResolvePathname -so that the resolved file name of the application class resource file -can be affected by any of the earlier sources for the screen resource -database, even though the contents of the class resource file have -lowest precedence. After calling -.PN XtResolvePathname , -the original display-associated database is restored. -.sp -.LP -To obtain the resource database for a particular screen, use -.PN XtScreenDatabase . -.LP -.IN "XtScreenDatabase" "" "@DEF@" -.sM -.FD 0 -XrmDatabase XtScreenDatabase(\fIscreen\fP) -.br - Screen *\fIscreen\fP; -.FN -.IP \fIscreen\fP 1i -Specifies the screen whose resource database is to be returned. -.LP -.eM -The -.PN XtScreenDatabase -function returns the fully merged resource database as specified above, -associated with the specified screen. If the specified \fIscreen\fP -does not belong to a -.PN Display -initialized by -.PN XtDisplayInitialize , -the results are undefined. -.sp -.LP -To obtain the default resource database associated with a particular display, use -.PN XtDatabase . -.LP -.IN "XtDatabase" "" "@DEF@" -.sM -.FD 0 -XrmDatabase XtDatabase(\fIdisplay\fP) -.br - Display *\fIdisplay\fP; -.FN -.IP \fIdisplay\fP 1i -Specifies the display. -.LP -.eM -The -.PN XtDatabase -function is equivalent to -.PN XrmGetDatabase . -It returns the database associated with the specified display, or -NULL if a database has not been set. -.sp -.LP -To specify a default set of resource values that will be used to -initialize the resource database if no application-specific class -resource file is found (the last of the six sources listed above), -use -.PN XtAppSetFallbackResources . -.LP -.IN "XtAppSetFallbackResources" "" "@DEF@" -.sM -.FD 0 -void XtAppSetFallbackResources(\fIapp_context\fP, \fIspecification_list\fP) -.br - XtAppContext \fIapp_context\fP; -.br - String *\fIspecification_list\fP; -.FN -.IP \fIapp_context\fP 1.25i -Specifies the application context in which -the fallback specifications will be used. -.IP \fIspecification_list\fP 1.25i -Specifies a NULL-terminated list of -resource specifications to preload -the database, or NULL. -.LP -.eM -Each entry in \fIspecification_list\fP points to a string in the format of -.PN XrmPutLineResource . -Following a call to -.PN XtAppSetFallbackResources , -when a resource database is being created for a particular screen and -the \*(xI are not able -to find or read an application-specific class resource file according to the -rules given above and if \fIspecification_list\fP is not NULL, the -resource specifications in \fIspecification_list\fP will be merged -into the screen resource database in place of the application-specific -class resource file. -.PN XtAppSetFallbackResources -is not -required to copy \fIspecification_list\fP; the caller must ensure that the -contents of the list and of the strings addressed by the list remain -valid until all displays are initialized or until -.PN XtAppSetFallbackResources -is called again. The value NULL for -\fIspecification_list\fP removes any previous fallback resource specification -for the application context. The intended use for fallback resources -is to provide a minimal -number of resources that will make the application usable (or at -least terminate with helpful diagnostic messages) when some problem -exists in finding and loading the application defaults file. - -.NH 2 -Parsing the Command Line -.XS -\fB\*(SN Parsing the Command Line\fP -.XE -.LP -The -.PN XtOpenDisplay -function first parses the command line for the following options: -.IP \-display 1i -Specifies the display name for -.PN XOpenDisplay . -.IP \-name 1i -Sets the resource name prefix, -which overrides the application name passed to -.PN XtOpenDisplay . -.IP \-xnllanguage 1i -Specifies the initial language string for establishing locale -and for finding application class resource files. -.LP -.PN XtDisplayInitialize -has a table of standard command line options that are passed to -.PN XrmParseCommand -for adding resources to the resource database, -and it takes as a parameter additional -application-specific resource abbreviations. -.IN "XrmOptionDescRec" "" "@DEF@" -The format of this table is described in Section 15.9 in \fI\*(xL\fP. -.LP -.sM -.Ds 0 -.TA .5i 2.75i -.ta .5i 2.75i -typedef enum { - XrmoptionNoArg, /* Value is specified in OptionDescRec.value */ - XrmoptionIsArg, /* Value is the option string itself */ - XrmoptionStickyArg, /* Value is characters immediately following option */ - XrmoptionSepArg, /* Value is next argument in argv */ - XrmoptionResArg, /* Use the next argument as input to XrmPutLineResource*/ - XrmoptionSkipArg, /* Ignore this option and the next argument in argv */ - XrmoptionSkipNArgs, /* Ignore this option and the next */ - /* OptionDescRec.value arguments in argv */ - XrmoptionSkipLine /* Ignore this option and the rest of argv */ -} XrmOptionKind; - -typedef struct { - char *option; /* Option name in argv */ - char *specifier; /* Resource name (without application name) */ - XrmOptionKind argKind; /* Location of the resource value */ - XPointer value; /* Value to provide if XrmoptionNoArg */ -} XrmOptionDescRec, *XrmOptionDescList; - -.De -.LP -.eM -The standard table contains the following entries: -.TS H -l l l l . -_ -.sp 6p -.TH -Option String Resource Name Argument Kind Resource Value -.sp 6p -_ -.sp 6p -\-background *background SepArg next argument -\-bd *borderColor SepArg next argument -\-bg *background SepArg next argument -\-borderwidth .borderWidth SepArg next argument -\-bordercolor *borderColor SepArg next argument -\-bw .borderWidth SepArg next argument -\-display .display SepArg next argument -\-fg *foreground SepArg next argument -\-fn *font SepArg next argument -\-font *font SepArg next argument -\-foreground *foreground SepArg next argument -\-geometry .geometry SepArg next argument -\-iconic .iconic NoArg ``true'' -\-name .name SepArg next argument -\-reverse .reverseVideo NoArg ``on'' -\-rv .reverseVideo NoArg ``on'' -+rv .reverseVideo NoArg ``off'' -\-selectionTimeout .selectionTimeout SepArg next argument -\-synchronous .synchronous NoArg ``on'' -+synchronous .synchronous NoArg ``off'' -\-title .title SepArg next argument -\-xnllanguage .xnlLanguage SepArg next argument -\-xrm next argument ResArg next argument -\-xtsessionID .sessionID SepArg next argument -.sp 6p -_ -.TE -.LP -Note that any unique abbreviation for an option name in the standard table -or in the application table is accepted. -.LP -If reverseVideo is -.PN True , -the values of -.PN XtDefaultForeground -and -.PN XtDefaultBackground -are exchanged for all screens on the Display. -.LP -.IN "synchronous" "" "@DEF@" -.IN "Resources" "synchronous" -The value of the synchronous resource specifies whether or not -Xlib is put into synchronous mode. If a value is found in the resource -database during display initialization, -.PN XtDisplayInitialize -makes a call to -.PN XSynchronize -for all display -connections currently open in the application context. Therefore, -when multiple displays are initialized in the same application -context, the most recent value specified for the synchronous resource -is used for all displays in the application context. -.LP -.IN "selectionTimeout" "" "@DEF@" -.IN "Resources" "selectionTimeout" -The value of the selectionTimeout resource applies to all displays -opened in the same application context. When multiple displays are -initialized in the same application context, the most recent value -specified is used for all displays in the application context. -.LP -The \-xrm option provides a method of setting any resource in an application. -The next argument should be a quoted string identical in format to a line in -the user resource file. -For example, -to give a red background to all command buttons in an application named -.PN xmh , -you can start it up as -.LP -.Ds -xmh \-xrm 'xmh*Command.background: red' -.DE -.LP -When it parses the command line, -.PN XtDisplayInitialize -merges the application option table with the standard option table -before calling the Xlib -.PN XrmParseCommand -function. -An entry in the application table with the same name as an entry -in the standard table overrides the standard table entry. -If an option name is a prefix of another option name, -both names are kept in the merged table. -The \*(xI reserve all option names -beginning with the characters ``-xt'' for future standard uses. - -.NH 2 -Creating Widgets -.XS -\fB\*(SN Creating Widgets\fP -.XE -.LP -The creation of widget instances is a three-phase process: -.IP 1. 5 -The widgets are allocated and initialized with resources -and are optionally added to the managed subset of their parent. -.IP 2. 5 -All composite widgets are notified of their managed children -in a bottom-up traversal of the widget tree. -.IP 3. 5 -The widgets create X windows, which then are mapped. -.LP -.EQ -delim $$ -.EN -To start the first phase, -the application calls -.PN XtCreateWidget -for all its widgets and adds some (usually, most or all) of its widgets -to their respective parents' managed set by calling -.PN XtManageChild . -To avoid an $O( n sup 2 )$ creation process where each composite widget -lays itself out each time a widget is created and managed, -parent widgets are not notified of changes in their managed set -during this phase. -.EQ -delim off -.EN -.LP -After all widgets have been created, -the application calls -.PN XtRealizeWidget -with the top-level widget to execute the second and third phases. -.PN XtRealizeWidget -first recursively traverses the widget tree in a postorder (bottom-up) -traversal and then notifies each composite widget with one -or more managed children by means of its change_managed procedure. -.LP -Notifying a parent about its managed set involves geometry layout and -possibly geometry negotiation. -A parent deals with constraints on its size imposed from above -(for example, when a user specifies the application window size) -and suggestions made from below (for example, -when a primitive child computes its preferred size). -One difference between the two can cause geometry changes to ripple -in both directions through the widget tree. -The parent may force some of its children to change size and position -and may issue geometry requests to its own parent in order to better -accommodate all its children. -You cannot predict where anything will go on the screen -until this process finishes. -.LP -Consequently, in the first and second phases, -no X windows are actually created, because it is likely -that they will get moved around after creation. -This avoids unnecessary requests to the X server. -.LP -Finally, -.PN XtRealizeWidget -starts the third phase by making a preorder (top-down) traversal -of the widget tree, allocates an X window to each widget by means of -its realize procedure, and finally maps the widgets that are managed. - -.NH 3 -Creating and Merging Argument Lists -.XS -\fB\*(SN Creating and Merging Argument Lists\fP -.XE -.LP -Many \*(xI functions may be passed pairs of resource names and -values. -These are passed as an arglist, a pointer to an array of -.PN Arg -structures, which contains -.IN "ArgList" "" "@DEF@" -.IN "Arg" "" "@DEF@" -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - String name; - XtArgVal value; -} Arg, *ArgList; -.De -.LP -.eM -where -.PN XtArgVal -is as defined in Section 1.5. -.LP -If the size of the resource is less than or equal to the size of an -.PN XtArgVal , -the resource value is stored directly in \fIvalue\fP; -otherwise, a pointer to it is stored in \fIvalue\fP. -.LP -To set values in an -.PN ArgList , -use -.PN XtSetArg . -.LP -.IN "XtSetArg" "" "@DEF@" -.sM -.FD 0 -void XtSetArg(\fIarg\fP, \fIname\fP, \fIvalue\fP) -.br - Arg \fIarg\fP; -.br - String \fIname\fP; -.br - XtArgVal \fIvalue\fP; -.FN -.IP \fIarg\fP 1i -Specifies the \fIname/value\fP pair to set. -.IP \fIname\fP 1i -Specifies the name of the resource. -.IP \fIvalue\fP 1i -Specifies the value of the resource if it will fit in an -.PN XtArgVal , -else the address. -.LP -.eM -The -.PN XtSetArg -function is usually used in a highly stylized manner to -minimize the probability of making a mistake; for example: -.LP -.Ds -.TA .5i 3i -.ta .5i 3i -Arg args[20]; -int n; - -n = 0; -XtSetArg(args[n], XtNheight, 100); n++; -XtSetArg(args[n], XtNwidth, 200); n++; -XtSetValues(widget, args, n); -.De -.LP -Alternatively, an application can statically declare the argument list -and use -.PN XtNumber : -.LP -.Ds -.TA .5i 3i -.ta .5i 3i -static Args args[] = { - {XtNheight, (XtArgVal) 100}, - {XtNwidth, (XtArgVal) 200}, -}; -XtSetValues(Widget, args, XtNumber(args)); -.De -.LP -Note that you should not use expressions with side effects such as -auto-increment or auto-decrement -within the first argument to -.PN XtSetArg . -.PN XtSetArg -can be implemented as a macro that evaluates the first argument twice. -.sp -.LP -To merge two -arglist arrays, use -.PN XtMergeArgLists . -.LP -.IN "XtMergeArgLists" "" "@DEF@" -.sM -.FD 0 -ArgList XtMergeArgLists(\fIargs1\fP, \fInum_args1\fP, \fIargs2\fP, \ -\fInum_args2\fP) -.br - ArgList \fIargs1\fP; -.br - Cardinal \fInum_args1\fP; -.br - ArgList \fIargs2\fP; -.br - Cardinal \fInum_args2\fP; -.FN -.IP \fIargs1\fP 1i -Specifies the first argument list. -.IP \fInum_args1\fP 1i -Specifies the number of entries in the first argument list. -.IP \fIargs2\fP 1i -Specifies the second argument list. -.IP \fInum_args2\fP 1i -Specifies the number of entries in the second argument list. -.LP -.eM -The -.PN XtMergeArgLists -function allocates enough storage to hold the combined -arglist arrays and copies them into it. -Note that it does not check for duplicate entries. -The length of the returned list is the sum of the lengths of the -specified lists. -When it is no longer needed, -free the returned storage by using -.PN XtFree . -.sp -.LP -.IN "varargs" "" "@DEF@" -All \*(xI interfaces that require -.PN ArgList -arguments have analogs -conforming to the ANSI C variable argument list -(traditionally called ``varargs'') -calling convention. The name of the analog is formed by prefixing -``Va'' to the name of the corresponding -.PN ArgList -procedure; e.g., -.PN XtVaCreateWidget . -Each procedure named \fBXtVa\fP\fIsomething\fP takes as its -last arguments, in place of the corresponding -.PN ArgList / -.PN Cardinal -parameters, a variable parameter list of resource name and -value pairs where each name is of type -.PN String -and each value is of type -.PN XtArgVal . -The end of the list is identified by a \fIname\fP entry -containing NULL. Developers writing in the C language wishing to pass -resource name and value pairs to any of these interfaces may use the -.PN ArgList -and varargs forms interchangeably. -.LP -Two special names are defined for use only in varargs lists: -.PN XtVaTypedArg -and -.PN XtVaNestedList . -.sp -.LP -.IN "XtVaTypedArg" "" "@DEF@" -.sM -.Ds 0 -#define XtVaTypedArg "XtVaTypedArg" -.De -.LP -.eM -If the name -.PN XtVaTypedArg -is specified in place of a resource -name, then the following four arguments are interpreted as a -\fIname/type/value/size\fP tuple \fIwhere\fP name is of type -.PN String , -\fItype\fP is of type -.PN String , -\fIvalue\fP is of type -.PN XtArgVal , -and \fIsize\fP is of type int. When a varargs list containing -.PN XtVaTypedArg -is processed, a resource type -conversion (see Section 9.6) is performed if necessary to convert the -value into the format required by the associated resource. If \fItype\fP is -XtRString, then \fIvalue\fP contains a pointer to the string and \fIsize\fP -contains the number of bytes allocated, including the trailing null -byte. If \fItype\fP is not XtRString, then \fIif\fP size is -less than or equal to -\fBsizeof\fP(\fBXtArgVal\fP), the value should be the data cast to the type -.PN XtArgVal , -otherwise \fIvalue\fP is a pointer to the data. If the type -conversion fails for any reason, a warning message is issued and the -list entry is skipped. -.sp -.LP -.IN "XtVaNestedList" "" "@DEF@" -.sM -.Ds 0 -#define XtVaNestedList "XtVaNestedList" -.De -.LP -.eM -If the name -.PN XtVaNestedList -is specified in place of a resource name, -then the following argument is interpreted as an -.PN XtVarArgsList -value, which specifies another -varargs list that is logically inserted into the original list at the -point of declaration. The end of the nested list is identified with a -name entry containing NULL. Varargs lists may nest to any depth. -.sp -.LP -To dynamically allocate a varargs list for use with -.PN XtVaNestedList -in multiple calls, use -.PN XtVaCreateArgsList . -.IN "XtVaCreateArgsList" "" "@DEF@" -.sp -.LP -.sM -.Ds 0 -typedef XtPointer XtVarArgsList; -.De -.LP -.FD 0 -XtVarArgsList XtVaCreateArgsList(\fIunused\fP, ...) -.br - XtPointer \fIunused\fP; -.FN -.IP \fIunused\fP 1i -This argument is not currently used and must be specified as NULL. -.IP ... 1i -Specifies a variable parameter list of resource -name and value pairs. -.LP -.eM -The -.PN XtVaCreateArgsList -function allocates memory and copies its arguments into a -single list pointer, which may be used with -.PN XtVaNestedList . -The end of -both lists is identified by a \fIname\fP entry containing NULL. Any entries -of type -.PN XtVaTypedArg -are copied as specified without applying -conversions. Data passed by reference (including Strings) are not -copied, only the pointers themselves; the caller must ensure that the -data remain valid for the lifetime of the created varargs list. The -list should be freed using -.PN XtFree -when no longer needed. -.LP -Use of resource files and of the resource database is generally -encouraged over lengthy arglist or varargs lists whenever possible in -order to permit modification without recompilation. - -.NH 3 -Creating a Widget Instance -.XS -\fB\*(SN Creating a Widget Instance\fP -.XE -.LP -To create an instance of a widget, use -.PN XtCreateWidget . -.LP -.IN "XtCreateWidget" "" "@DEF@" -.sM -.FD 0 -Widget XtCreateWidget(\fIname\fP, \fIobject_class\fP, \fIparent\fP, \ -\fIargs\fP, \fInum_args\fP) -.br - String \fIname\fP; -.br - WidgetClass \fIobject_class\fP; -.br - Widget \fIparent\fP; -.br - ArgList \fIargs\fP; -.br - Cardinal \fInum_args\fP; -.FN -.IP \fIname\fP 1i -Specifies the resource instance name for the created widget, -which is used for retrieving resources -and, for that reason, should not be the same as any other widget -that is a child of the same parent. -.IP \fIobject_class\fP 1i -Specifies the widget class pointer for the created object. \*(oC -.IP \fIparent\fP 1i -Specifies the parent widget. \*(oI -.IP \fIargs\fP 1i -Specifies the argument list to override any other resource specifications. -.IP \fInum_args\fP 1i -Specifies the number of entries in the argument list. -.LP -.eM -The -.PN XtCreateWidget -function performs all the boilerplate operations of widget -creation, doing the following in order: -.IP \(bu 5 -Checks to see if the class_initialize procedure has been called for this class -and for all superclasses and, if not, calls those necessary in a -superclass-to-subclass order. -.IP \(bu 5 -If the specified class is not -.PN coreWidgetClass -or a subclass thereof, -and the parent's class is a subclass of -.PN compositeWidgetClass -and either no extension record in -the parent's composite class part extension field exists with the -\fIrecord_type\fP -.PN \s-1NULLQUARK\s+1 -or the \fIaccepts_objects\fP field in the extension -record is -.PN False , -.PN XtCreateWidget -issues a fatal error; see Section 3.1 and Chapter 12. -.IP \(bu 5 -If the specified class contains an extension record in the object class -part \fIextension\fP field with \fIrecord_type\fP -.PN \s-1NULLQUARK\s+1 -and the \fIallocate\fP field is not NULL, -the procedure is invoked to allocate memory -for the widget instance. If the parent is a member of the class -.PN constraintWidgetClass , -the procedure also allocates memory for the -parent's constraints and stores the address of this memory into the -\fIconstraints\fP field. If no allocate procedure is found, the \*(xI -allocate memory for the widget and, when applicable, the constraints, -and initializes the \fIconstraints\fP field. -.IP \(bu 5 -Initializes the Core nonresource data fields -\fIself\fP, \fIparent\fP, \fIwidget_class\fP, \fIbeing_destroyed\fP, -\fIname\fP, \fImanaged\fP, \fIwindow\fP, \fIvisible\fP, -\fIpopup_list\fP, and \fInum_popups\fP. -.IP \(bu 5 -Initializes the resource fields (for example, \fIbackground_pixel\fP) -by using the -.PN CoreClassPart -resource lists specified for this class and all superclasses. -.IP \(bu 5 -If the parent is a member of the class -.PN constraintWidgetClass , -initializes the resource fields of the constraints record -by using the -.PN ConstraintClassPart -resource lists specified for the parent's class -and all superclasses up to -.PN constraintWidgetClass . -.IP \(bu 5 -Calls the initialize procedures for the widget starting at the -Object -initialize procedure on down to the widget's initialize procedure. -.IP \(bu 5 -If the parent is a member of the class -.PN constraintWidgetClass , -calls the -.PN ConstraintClassPart -initialize procedures, -starting at -.PN constraintWidgetClass -on down to the parent's -.PN ConstraintClassPart -initialize procedure. -.IP \(bu 5 -If the parent is a member of the class -.PN compositeWidgetClass , -puts the widget into its parent's children list by calling its parent's -insert_child procedure. -For further information, -see Section 3.1. -.sp -.LP -To create an instance of a widget using varargs lists, use -.PN XtVaCreateWidget . -.LP -.IN "XtVaCreateWidget" "" "@DEF@" -.sM -.FD 0 -Widget XtVaCreateWidget(\fIname\fP, \fIobject_class\fP, \fIparent\fP, ...) -.br - String \fIname\fP; -.br - WidgetClass \fIobject_class\fP; -.br - Widget \fIparent\fP; -.FN -.IP \fIname\fP 1i -Specifies the resource name for the created widget. -.IP \fIobject_class\fP 1i -Specifies the widget class pointer for the created object. \*(oC -.IP \fIparent\fP 1i -Specifies the parent widget. \*(oI -.IP ... 1i -Specifies the variable argument list to override any other -resource specifications. -.LP -.eM -The -.PN XtVaCreateWidget -procedure is identical in function to -.PN XtCreateWidget -with the \fIargs\fP and \fInum_args\fP parameters replaced by a varargs list, -as described -in Section 2.5.1. - -.NH 3 -Creating an Application Shell Instance -.XS -\fB\*(SN Creating an Application Shell Instance\fP -.XE -.LP -An application can have multiple top-level widgets, each of which -specifies a unique widget tree -that can potentially be on different screens or displays. -An application uses -.PN XtAppCreateShell -to create independent widget trees. -.LP -.IN "XtAppCreateShell" "" "@DEF@" -.sM -.FD 0 -Widget XtAppCreateShell(\fIname\fP, \ -\fIapplication_class\fP, \fIwidget_class\fP, \fIdisplay\fP, \ -\fIargs\fP, \fInum_args\fP) -.br - String \fIname\fP; -.br - String \fIapplication_class\fP; -.br - WidgetClass \fIwidget_class\fP; -.br - Display *\fIdisplay\fP; -.br - ArgList \fIargs\fP; -.br - Cardinal \fInum_args\fP; -.FN -.IP \fIname\fP 1.25i -Specifies the instance name of the shell widget. -If \fIname\fP is NULL, -the application name passed to -.PN XtDisplayInitialize -is used. -.IP \fIapplication_class\fP 1.25i -Specifies the resource class string to be used in -place of the widget \fIclass_name\fP string when -\fIwidget_class\fP is -.PN applicationShellWidgetClass -or a subclass thereof. -.IP \fIwidget_class\fP 1.25i -Specifies the widget class for the top-level widget (e.g., -.PN applicationShellWidgetClass ). -.IP \fIdisplay\fP 1.25i -Specifies the display for the default screen -and for the resource database used to retrieve -the shell widget resources. -.IP \fIargs\fP 1.25i -Specifies the argument list to override any other resource specifications. -.IP \fInum_args\fP 1.25i -Specifies the number of entries in the argument list. -.LP -.eM -The -.PN XtAppCreateShell -function -creates a new shell widget instance as the root of a widget tree. -The screen resource for this widget is determined by first scanning -\fIargs\fP for the XtNscreen argument. If no XtNscreen argument is -found, the resource database associated with the default screen of -the specified display is queried for the resource \fIname\fP.screen, -class \fIClass\fP.Screen where \fIClass\fP is the specified -\fIapplication_class\fP if \fIwidget_class\fP is -.PN applicationShellWidgetClass -or a subclass thereof. If \fIwidget_class\fP is not -.PN application\%Shell\%Widget\%Class -or a subclass, \fIClass\fP is the \fIclass_name\fP -field from the -.PN CoreClassPart -of the specified \fIwidget_class\fP. -If this query fails, the default -screen of the specified display is used. Once the screen is determined, -the resource database associated with that screen is used to retrieve -all remaining resources for the shell widget not specified in -\fIargs\fP. The widget name and \fIClass\fP as determined above are -used as the leftmost (i.e., root) components in all fully qualified -resource names for objects within this widget tree. - -.LP -If the specified widget class is a subclass of WMShell, the name and -\fIClass\fP as determined above will be stored into the -.PN \s-1WM_CLASS\s+1 -property on the widget's window when it becomes realized. -If the specified \fIwidget_class\fP is -.PN applicationShellWidgetClass -or a subclass thereof, the -.PN \s-1WM_COMMAND\s+1 -property will also be set from the values of the XtNargv and -XtNargc resources. - -.LP -To create multiple top-level shells within a single (logical) -application, -you can use one of two methods: -.IP \(bu 5 -Designate one shell as the real top-level shell and -create the others as pop-up children of it by using -.PN XtCreatePopupShell . -.IP \(bu 5 -Have all shells as pop-up children of an unrealized top-level shell. -.LP -The first method, -which is best used when there is a clear choice for what is the main window, -leads to resource specifications like the following: -.LP -.Ds -.TA 2i -.ta 2i -xmail.geometry:... (the main window) -xmail.read.geometry:... (the read window) -xmail.compose.geometry:... (the compose window) -.De -.LP -The second method, -which is best if there is no main window, -leads to resource specifications like the following: -.LP -.Ds -.TA 2i -.ta 2i -xmail.headers.geometry:... (the headers window) -xmail.read.geometry:... (the read window) -xmail.compose.geometry:... (the compose window) -.De -.sp -.LP -To create a top-level widget that is the root of a widget tree using -varargs lists, use -.PN XtVaAppCreateShell . -.LP -.IN "XtVaAppCreateShell" "" "@DEF@" -.sM -.FD 0 -Widget XtVaAppCreateShell(\fIname\fP, \fIapplication_class\fP, \ -\fIwidget_class\fP, \fIdisplay\fP, ...) -.br - String \fIname\fP; -.br - String \fIapplication_class\fP; -.br - WidgetClass \fIwidget_class\fP; -.br - Display *\fIdisplay\fP; -.FN -.IP \fIname\fP 1.5i -Specifies the instance name of the shell widget. -If \fIname\fP is NULL, -the application name passed to -.PN XtDisplayInitialize -is used. -.IP \fIapplication_class\fP 1.5i -Specifies the resource class string to be used in -place of the widget \fIclass_name\fP string when -\fIwidget_class\fP is -.PN applicationShellWidgetClass -or a subclass thereof. -.IP \fIwidget_class\fP 1.5i -Specifies the widget class for the top-level widget. -.IP \fIdisplay\fP 1.5i -Specifies the display for the default screen -and for the resource database used to retrieve -the shell widget resources. -.IP ... 1.5i -Specifies the variable argument list to override any other -resource specifications. -.LP -.eM -The -.PN XtVaAppCreateShell -procedure is identical in function to -.PN XtAppCreateShell -with the \fIargs\fP and \fInum_args\fP parameters replaced by a varargs list, as -described in Section 2.5.1. - -.NH 3 -Convenience Procedure to Initialize an Application -.XS -\fB\*(SN Convenience Procedure to Initialize an Application\fP -.XE -.LP -To initialize the \*(xI internals, create an application context, -open and initialize a display, and create the initial root shell -instance, an application may use -.PN XtOpenApplication -or -.PN XtVaOpenApplication . -.LP -.IN "XtOpenApplication" "" "@DEF@" -.sM -.FD 0 -Widget XtOpenApplication(\fIapp_context_return\fP, \fIapplication_class\fP, \ -\fIoptions\fP, \fInum_options\fP, -.br - \fIargc_in_out\fP, \fIargv_in_out\fP, \ -\fIfallback_resources\fP, \fIwidget_class\fP, \fIargs\fP, \fInum_args\fP) -.br - XtAppContext *\fIapp_context_return\fP; -.br - String \fIapplication_class\fP; -.br - XrmOptionDescList \fIoptions\fP; -.br - Cardinal \fInum_options\fP; -.br - int *\fIargc_in_out\fP; -.br - String *\fIargv_in_out\fP; -.br - String *\fIfallback_resources\fP; -.br - WidgetClass \fIwidget_class\fP; -.br - ArgList \fIargs\fP; -.br - Cardinal \fInum_args\fP; -.FN -.IP \fIapp_context_return\fP 1.5i -Returns the application context, if non-NULL. -.IP \fIapplication_class\fP 1.5i -Specifies the class name of the application. -.IP \fIoptions\fP 1.5i -Specifies the command line options table. -.IP \fInum_options\fP 1.5i -Specifies the number of entries in \fIoptions\fP. -.IP \fIargc_in_out\fP 1.5i -Specifies a pointer to the number of command line arguments. -.IP \fIargv_in_out\fP 1.5i -Specifies a pointer to the command line arguments. -.IP \fIfallback_resources\fP 1.5i -Specifies resource values to be used if the application class resource -file cannot be opened or read, or NULL. -.IP \fIwidget_class\fP 1.5i -Specifies the class of the widget to be created. Must be shellWidgetClass -or a subclass. -.br -.IP \fIargs\fP 1.5i -Specifies the argument list to override any -other resource specifications for the created shell widget. -.IP \fInum_args\fP 1.5i -Specifies the number of entries in the argument list. -.LP -.eM -The -.PN XtOpenApplication -function calls -.PN XtToolkitInitialize -followed by -.PN XtCreateApplicationContext , -then calls -.PN XtOpenDisplay -with \fIdisplay_string\fP NULL and -\fIapplication_name\fP NULL, and finally calls -.PN XtAppCreateShell -with \fIname\fP NULL, the specified \fIwidget_class\fP, -an argument list and count, -and returns the created shell. -The recommended \fIwidget_class\fP is -.PN sessionShellWidgetClass . -The argument list and count are created by merging -the specified \fIargs\fP and \fInum_args\fP with a list -containing the specified \fIargc\fP and \fIargv\fP. -The modified \fIargc\fP and \fIargv\fP returned by -.PN XtDisplayInitialize -are returned in \fIargc_in_out\fP and \fIargv_in_out\fP. If -\fIapp_context_return\fP is not NULL, the created application context is -also returned. If the display specified by the command line cannot be -opened, an error message is issued and -.PN XtOpenApplication -terminates the application. If \fIfallback_resources\fP is non-NULL, -.PN XtAppSetFallbackResources -is called with the value prior to calling -.PN XtOpenDisplay . -.sp -.LP -.IN "XtVaOpenApplication" "" "@DEF@" -.sM -.FD 0 -Widget XtVaOpenApplication(\fIapp_context_return\fP, \fIapplication_class\fP, \ -\fIoptions\fP, \fInum_options\fP, -.br - \fIargc_in_out\fP, \fIargv_in_out\fP, \ -\fIfallback_resources\fP, \fIwidget_class\fP, ...) -.br - XtAppContext *\fIapp_context_return\fP; -.br - String \fIapplication_class\fP; -.br - XrmOptionDescList \fIoptions\fP; -.br - Cardinal \fInum_options\fP; -.br - int *\fIargc_in_out\fP; -.br - String *\fIargv_in_out\fP; -.br - String *\fIfallback_resources\fP; -.br - WidgetClass \fIwidget_class\fP; -.FN -.IP \fIapp_context_return\fP 1.5i -Returns the application context, if non-NULL. -.IP \fIapplication_class\fP 1.5i -Specifies the class name of the application. -.IP \fIoptions\fP 1.5i -Specifies the command line options table. -.IP \fInum_options\fP 1.5i -Specifies the number of entries in \fIoptions\fP. -.IP \fIargc_in_out\fP 1.5i -Specifies a pointer to the number of command line arguments. -.IP \fIargv_in_out\fP 1.5i -Specifies the command line arguments array. -.IP \fIfallback_resources\fP 1.5i -Specifies resource values to be used if the application class -resource file cannot be opened, or NULL. -.IP \fIwidget_class\fP 1.5i -Specifies the class of the widget to be created. Must be shellWidgetClass -or a subclass. -.IP ... 1.5i -Specifies the variable argument list to override any other -resource specifications for the created shell. -.LP -.eM -The -.PN XtVaOpenApplication -procedure is identical in function to -.PN XtOpenApplication -with the \fIargs\fP and \fInum_args\fP parameters replaced by a varargs list, -as described -in Section 2.5.1. - -.NH 3 -Widget Instance Allocation: The allocate Procedure -.XS -\*(SN Widget Instance Allocation: The allocate Procedure -.XE -.IN "Widget Allocation" -.LP -A widget class may optionally provide an instance allocation procedure -in the -.PN ObjectClassExtension -record. -.LP -When the call to create a widget includes a varargs list containing -.PN XtVaTypedArg , -these arguments will be passed to the allocation procedure in an -.PN XtTypedArgList . -.LP -.IN "XtTypedArgList" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - String name; - String type; - XtArgVal value; - int size; -} XtTypedArg, *XtTypedArgList; -.De -.LP -.eM -.IN "allocate procedure" "" "@DEF@" -The allocate procedure pointer in the -.PN ObjectClassExtension -record is of type -.PN XtAllocateProc . -.LP -.IN "XtAllocateProc" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtAllocateProc)(WidgetClass, Cardinal*, Cardinal*, ArgList, \ -Cardinal*, - XtTypedArgList, Cardinal*, \ -Widget*, XtPointer*); -.br - WidgetClass \fIwidget_class\fP; -.br - Cardinal* \fIconstraint_size\fP; -.br - Cardinal* \fImore_bytes\fP; -.br - ArgList \fIargs\fP; -.br - Cardinal* \fInum_args\fP; -.br - XtTypedArgList \fItyped_args\fP, -.br - Cardinal* \fInum_typed_args\fP; -.br - Widget* \fInew_return\fP; -.br - XtPointer* \fImore_bytes_return\fP; -.FN -.IP \fIwidget_class\fP 1.5i -Specifies the widget class of the instance to allocate. -.IP \fIconstraint_size\fP 1.5i -Specifies the size of the constraint record to allocate, or 0. -.IP \fImore_bytes\fP 1.5i -Specifies the number of auxiliary bytes of memory to allocate. -.IP \fIargs\fP 1.5i -Specifies the argument list as given in the call to create the widget. -.IP \fInum_args\fP 1.5i -Specifies the number of arguments. -.IP \fItyped_args\fP 1.5i -Specifies the list of typed arguments given in the call to create the widget. -.IP \fInum_typed_args\fP 1.5i -Specifies the number of typed arguments. -.IP \fInew_return\fP 1.5i -Returns a pointer to the newly allocated instance, or NULL in case of error. -.IP \fImore_bytes_return\fP 1.5i -Returns the auxiliary memory if it was requested, or NULL -if requested and an error occurred; otherwise, unchanged. -.LP -.eM -At widget allocation time, if an extension record with \fIrecord_type\fP -equal to -.PN \s-1NULLQUARK\s+1 -is located through the object class part \fIextension\fP field -and the \fIallocate\fP field is not NULL, the -.PN XtAllocateProc -will be invoked to allocate memory for the widget. If no ObjectClassPart -extension record is declared with \fIrecord_type equal\fP to -.PN \s-1NULLQUARK\s+1 , -then -.PN XtInheritAllocate -and -.PN XtInheritDeallocate -are assumed. -If no -.PN XtAllocateProc -is found, the \*(xI will allocate memory for the widget. -.LP -An -.PN XtAllocateProc -must perform the following: -.IP \(bu 5 -Allocate memory for the widget instance and return it in \fInew_return\fP. -The memory must be at least \fIwc->core_class.widget_size\fP bytes in length, -double-word aligned. -.IP \(bu 5 -Initialize the \fIcore.constraints\fP field in the instance record to NULL -or to point to a constraint record. If \fIconstraint_size\fP -is not 0, the procedure must allocate memory for the constraint record. -The memory must be double-word aligned. -.IP \(bu 5 -If \fImore_bytes\fP is not 0, then the address of a block of memory -at least \fImore_bytes\fP in size, double-word aligned, must be -returned in the \fImore_bytes_return\fP parameter, -or NULL to indicate an error. -.LP -A class allocation procedure that envelops the allocation procedure of a -superclass must rely on the enveloped procedure to perform the instance -and constraint allocation. -Allocation procedures should refrain from initializing fields in the -widget record except to store pointers to newly allocated additional memory. -Under no circumstances should an allocation procedure that envelopes -its superclass allocation procedure modify fields in the -instance part of any superclass. - -.NH 3 -Widget Instance Initialization: The initialize Procedure -.XS -\*(SN Widget Instance Initialization: The initialize Procedure -.XE -.IN "Initialization" -.IN "Chaining" -.IN "Superclass Chaining" -.IN "Inheritance" -.LP -The initialize procedure pointer in a widget class is of type -.PN XtInitProc . -.LP -.IN "XtInitProc" "" "@DEF@" -.IN "initialize procedure" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtInitProc)(Widget, Widget, ArgList, Cardinal*); -.br - Widget \fIrequest\fP; -.br - Widget \fInew\fP; -.br - ArgList \fIargs\fP; -.br - Cardinal *\fInum_args\fP; -.FN -.IP \fIrequest\fP 1i -Specifies a copy of the widget with resource values as requested by the -argument list, the resource database, and the widget defaults. -.IP \fInew\fP 1i -Specifies the widget with the new values, both resource and nonresource, -that are actually allowed. -.IP \fIargs\fP 1i -Specifies the argument list passed by the client, for -computing derived resource values. -If the client created the widget using a varargs form, any resources -specified via -.PN XtVaTypedArg -are converted to the widget representation and the list is transformed -into the -.PN ArgList -format. -.IP \fInum_args\fP 1i -Specifies the number of entries in the argument list. -.LP -.eM -An initialization procedure performs the following: -.IP \(bu 5 -Allocates space for and copies any resources referenced by address -that the client is allowed to free or modify -after the widget has been created. -For example, -if a widget has a field that is a -.PN String , -it may choose not to -depend on the characters at that address remaining constant -but dynamically allocate space for the string and copy it to the new space. -Widgets that do not copy one or more resources referenced -by address should clearly so state in their user documentation. -.NT -It is not necessary to allocate space for or to copy callback lists. -.NE -.IP \(bu 5 -Computes values for unspecified resource fields. -For example, if \fIwidth\fP and \fIheight\fP are zero, -the widget should compute an appropriate width and height -based on its other resources. -.NT -A widget may directly assign only -its own \fIwidth\fP and \fIheight\fP within the initialize, initialize_hook, -set_values, and -set_values_hook procedures; see Chapter 6. -.NE -.IP \(bu 5 -Computes values for uninitialized nonresource fields that are derived from -resource fields. -For example, graphics contexts (GCs) that the widget uses are derived from -resources like background, foreground, and font. -.LP -An initialization procedure also can check certain fields for -internal consistency. -For example, it makes no sense to specify a colormap for a depth -that does not support that colormap. -.LP -Initialization procedures are called in superclass-to-subclass order -after all fields specified in the resource lists have been -initialized. The initialize procedure does not need to examine -\fIargs\fP and \fInum_args\fP -if all public resources are declared in the resource list. -Most of the initialization code for a specific widget class deals with fields -defined in that class and not with fields defined in its superclasses. -.LP -If a subclass does not need an initialization procedure -because it does not need to perform any of the above operations, -it can specify NULL for the \fIinitialize\fP field in the class record. -.LP -Sometimes a subclass may want to overwrite values filled in by its -superclass. -In particular, size calculations of a superclass often are -incorrect for a subclass, and in this case, -the subclass must modify or recalculate fields declared -and computed by its superclass. -.LP -As an example, -a subclass can visually surround its superclass display. -In this case, the width and height calculated by the superclass initialize -procedure are too small and need to be incremented by the size of the surround. -The subclass needs to know if its superclass's size was calculated by the -superclass or was specified explicitly. -All widgets must place themselves into whatever size is explicitly given, -but they should compute a reasonable size if no size is requested. -.LP -The \fIrequest\fP and \fInew\fP arguments provide the necessary information for -a subclass to determine the difference between an explicitly specified field -and a field computed by a superclass. -The \fIrequest\fP widget is a copy of the widget as initialized by the -arglist and resource database. -The \fInew\fP widget starts with the values in the request, -but it has been updated by all superclass initialization procedures called -so far. -A subclass initialize procedure can compare these two to resolve -any potential conflicts. -.LP -In the above example, -the subclass with the visual surround can see -if the \fIwidth\fP and \fIheight\fP in the \fIrequest\fP widget are zero. -If so, -it adds its surround size to the \fIwidth\fP and \fIheight\fP -fields in the \fInew\fP widget. -If not, it must make do with the size originally specified. -.LP -The \fInew\fP widget will become the actual widget instance record. -Therefore, -the initialization procedure should do all its work on the \fInew\fP widget; -the \fIrequest\fP widget should never be modified. -If the initialize procedure -needs to call any routines that operate on a widget, -it should specify \fInew\fP as the widget instance. - -.NH 3 -Constraint Instance Initialization: The ConstraintClassPart initialize Procedure -.XS -\*(SN Constraint Instance Initialization: The ConstraintClassPart initialize Procedure -.XE -.IN "Initialization" -.IN "XtInitProc" -.IN "initialize procedure" -.IN "Chaining" -.IN "Superclass Chaining" -.IN "Inheritance" -.LP -The constraint initialization procedure pointer, found in the -.PN ConstraintClassPart -\fIinitialize\fP field of the widget class record, is of type -.PN XtInitProc . -The values passed to the parent constraint initialization procedures -are the same as those passed to the child's class widget initialization -procedures. -.LP -The \fIconstraints\fP field of the \fIrequest\fP widget points to a copy of the -constraints record as initialized by the arglist and resource database. -.LP -The constraint initialization procedure should compute any constraint fields -derived from constraint resources. -It can make further changes to the \fInew\fP widget to make the widget -and any other constraint fields -conform to the specified constraints, for example, -changing the widget's size or position. -.LP -If a constraint class does not need a constraint initialization procedure, -it can specify NULL for the \fIinitialize\fP field of the -.PN ConstraintClassPart -in the class record. - -.NH 3 -Nonwidget Data Initialization: The initialize_hook Procedure -.XS -\*(SN Nonwidget Data Initialization: The initialize_hook Procedure -.XE -.IN "Initialization" -.LP -.NT -The initialize_hook procedure is obsolete, as the same information -is now available to the initialize procedure. The procedure has been -retained for those widgets that used it in previous releases. -.NE -.LP -The initialize_hook procedure pointer is of type -.PN XtArgsProc : -.LP -.IN "initialize_hook procedure" "" "@DEF@" -.IN "XtArgsProc" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtArgsProc)(Widget, ArgList, Cardinal*); -.br - Widget \fIw\fP; -.br - ArgList \fIargs\fP; -.br - Cardinal *\fInum_args\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. -.IP \fIargs\fP 1i -Specifies the argument list passed by the client. -If the client created the widget using a varargs form, any resources -specified via -.PN XtVaTypedArg -are converted to the widget representation and the list is transformed -into the -.PN ArgList -format. -.IP \fInum_args\fP 1i -Specifies the number of entries in the argument list. -.LP -.eM -If this procedure is not NULL, -it is called immediately after the corresponding initialize -procedure or in its place if the \fIinitialize\fP field is NULL. -.LP -The initialize_hook procedure allows a widget instance to initialize -nonresource data using information from the specified argument list -as if it were a resource. - -.NH 2 -Realizing Widgets -.XS -\fB\*(SN Realizing Widgets\fP -.XE -.LP -To realize a widget instance, use -.PN XtRealizeWidget . -.LP -.IN "XtRealizeWidget" "" "@DEF@" -.sM -.FD 0 -void XtRealizeWidget(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. \*(cI -.eM -.LP -If the widget is already realized, -.PN XtRealizeWidget -simply returns. -Otherwise it performs the following: -.IP \(bu 5 -Binds all action names in the widget's -translation table to procedures (see Section 10.1.2). -.IP \(bu 5 -Makes a postorder traversal of the widget tree rooted -at the specified widget and calls each non-NULL change_managed procedure -of all composite widgets that have one or more managed children. -.IP \(bu 5 -Constructs an -.PN XSetWindowAttributes -structure filled in with information derived from the -Core -widget fields and calls the realize procedure for the widget, -which adds any widget-specific attributes and creates the X window. -.IP \(bu 5 -If the widget is -not a subclass of -.PN compositeWidgetClass , -.PN XtRealizeWidget -returns; otherwise it continues and performs the following: -.RS -.IP \- 5 -Descends recursively to each of the widget's -managed children and calls the realize procedures. -Primitive widgets that instantiate children are responsible for realizing -those children themselves. -.IP \- 5 -Maps all of the managed children windows that have \fImapped_when_managed\fP -.PN True . -If a widget is managed but \fImapped_when_managed\fP is -.PN False , -the widget is allocated visual space but is not displayed. -.RE -.LP -If the widget is a top-level shell widget (that is, it has no parent), and -\fImapped_when_managed\fP is -.PN True , -.PN XtRealizeWidget -maps the widget window. -.LP -.PN XtCreateWidget , -.PN XtVaCreateWidget , -.PN XtRealizeWidget , -.PN XtManageChildren , -.PN XtUnmanage\%Children , -.PN XtUnrealizeWidget , -.PN XtSetMappedWhenManaged , -and -.PN XtDestroy\%Widget -maintain the following invariants: -.IP \(bu 5 -If a composite widget is realized, then all its managed children are realized. -.IP \(bu 5 -If a composite widget is realized, then all its managed children that have -\fImapped_when_managed\fP -.PN True -are mapped. -.LP -All \*(xI functions and all widget routines should accept -either realized or unrealized widgets. -When calling the realize or change_managed -procedures for children of a composite -widget, -.PN XtRealizeWidget -calls the procedures in reverse order of -appearance in the -.PN CompositePart -\fIchildren\fP list. By default, this -ordering of the realize procedures will -result in the stacking order of any newly created subwindows being -top-to-bottom in the order of appearance on the list, and the most -recently created child will be at the bottom. -.sp -.LP -To check whether or not a widget has been realized, use -.PN XtIsRealized . -.LP -.IN "XtIsRealized" "" "@DEF@" -.sM -.FD 0 -Boolean XtIsRealized(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. \*(oI -.LP -.eM -The -.PN XtIsRealized -function returns -.PN True -if the widget has been realized, -that is, if the widget has a nonzero window ID. -If the specified object is not a widget, the state of the nearest -widget ancestor is returned. -.LP -Some widget procedures (for example, set_values) might wish to -operate differently -after the widget has been realized. - -.NH 3 -Widget Instance Window Creation: The realize Procedure -.XS -\*(SN Widget Instance Window Creation: The realize Procedure -.XE -.LP -The realize procedure pointer in a widget class is of type -.PN XtRealizeProc . -.LP -.IN "XtRealizeProc" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtRealizeProc)(Widget, XtValueMask*, XSetWindowAttributes*); -.br - Widget \fIw\fP; -.br - XtValueMask *\fIvalue_mask\fP; -.br - XSetWindowAttributes *\fIattributes\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. -.IP \fIvalue_mask\fP 1i -Specifies which fields in the \fIattributes\fP structure are used. -.IP \fIattributes\fP 1i -Specifies the window attributes to use in the -.PN XCreateWindow -call. -.LP -.eM -The realize procedure must create the widget's window. -.LP -Before calling the class realize procedure, the generic -.PN XtRealizeWidget -function fills in a mask and a corresponding -.PN XSetWindowAttributes -structure. -It sets the following fields in \fIattributes\fP and -corresponding bits in \fIvalue_mask\fP -based on information in the widget -core -structure: -.IP \(bu 5 -The \fIbackground_pixmap\fP (or \fIbackground_pixel\fP if \fIbackground_pixmap\fP is -.PN XtUnspecifiedPixmap ) -is filled in from the corresponding field. -.IP \(bu 5 -The \fIborder_pixmap\fP (or \fIborder_pixel\fP if \fIborder_pixmap\fP is -.PN XtUnspecifiedPixmap ) -is filled in from the corresponding field. -.IP \(bu 5 -The \fIcolormap\fP is filled in from the corresponding field. -.IP \(bu 5 -The \fIevent_mask\fP is filled in based on the event handlers registered, -the event translations specified, whether the \fIexpose\fP field is non-NULL, -and whether \fIvisible_interest\fP is -.PN True . -.IP \(bu 5 -The \fIbit_gravity\fP is set to -.PN NorthWestGravity -if the \fIexpose\fP field is NULL. -.LP -These or any other fields in attributes and the corresponding bits in -\fIvalue_mask\fP can be set by the realize procedure. -.LP -Note that because realize is not a chained operation, -the widget class realize procedure must update the -.PN XSetWindowAttributes -structure with all the appropriate fields from -non-Core -superclasses. -.LP -.IN "Inheritance" -A widget class can inherit its realize procedure from its superclass -during class initialization. -The realize procedure defined for -.PN coreWidgetClass -calls -.PN XtCreateWindow -with the passed \fIvalue_mask\fP and \fIattributes\fP -and with \fIwindow_class\fP and \fIvisual\fP set to -.PN CopyFromParent . -Both -.PN compositeWidgetClass -and -.PN constraintWidgetClass -inherit this realize procedure, and most new widget subclasses -can do the same (see Section 1.6.10). -.LP -The most common noninherited realize procedures set \fIbit_gravity\fP in the mask -and attributes to the appropriate value and then create the window. -For example, depending on its justification, Label might set \fIbit_gravity\fP to -.PN WestGravity , -.PN CenterGravity , -or -.PN EastGravity . -Consequently, shrinking it would just move the bits appropriately, -and no -exposure -event is needed for repainting. -.LP -If a composite widget's children should be realized in an order other -than that specified -(to control the stacking order, for example), -it should call -.PN XtRealizeWidget -on its children itself in the appropriate order from within its own -realize procedure. -.LP -Widgets that have children and whose class is not a subclass of -.PN compositeWidgetClass -are responsible for calling -.PN XtRealizeWidget -on their children, usually from within the realize procedure. -.LP -Realize procedures cannot manage or unmanage their descendants. - -.NH 3 -Window Creation Convenience Routine -.XS -\*(SN Window Creation Convenience Routine -.XE -.LP -Rather than call the Xlib -.PN XCreateWindow -.IN "realize procedure" -function explicitly, a realize procedure should normally call the \*(xI analog -.PN XtCreateWindow , -which simplifies the creation of windows for widgets. -.LP -.IN "XtCreateWindow" "" "@DEF@" -.sM -.FD 0 -void XtCreateWindow(\fIw\fP, \fIwindow_class\fP, \fIvisual\fP, \ -\fIvalue_mask\fP, \fIattributes\fP) -.br - Widget \fIw\fP; -.br - unsigned int \fIwindow_class\fP; -.br - Visual *\fIvisual\fP; -.br - XtValueMask \fIvalue_mask\fP; -.br - XSetWindowAttributes *\fIattributes\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget that defines the additional window attributed. \*(cI -.IP \fIwindow_class\fP 1i -Specifies the Xlib window class (for example, -.PN InputOutput , -.PN InputOnly , -or -.PN CopyFromParent ). -.IP \fIvisual\fP 1i -Specifies the visual type (usually -.PN CopyFromParent ). -.ds Vm attribute fields to use -.IP \fIvalue_mask\fP 1i -Specifies which fields in the \fIattributes\fP structure are used. -.IP \fIattributes\fP 1i -Specifies the window attributes to use in the -.PN XCreateWindow -call. -.LP -.eM -The -.PN XtCreateWindow -function calls the Xlib -.PN XCreateWindow -function with values from the widget structure and the passed parameters. -Then, it assigns the created window to the widget's \fIwindow\fP field. -.LP -.PN XtCreateWindow -evaluates the following fields of the widget core -structure: \fIdepth\fP, \fIscreen\fP, \fIparent->core.window\fP, \fIx\fP, -\fIy\fP, \fIwidth\fP, \fIheight\fP, and -\fIborder_width\fP. - -.NH 2 -Obtaining Window Information from a Widget -.XS -\fB\*(SN Obtaining Window Information from a Widget\fP -.XE -.LP -The -Core -widget class definition contains the screen and window ids. -The \fIwindow\fP field may be NULL for a while -(see Sections 2.5 and 2.6). -.LP -The display pointer, the parent widget, screen pointer, -and window of a widget are available to the widget writer by means of macros -and to the application writer by means of functions. -.LP -.IN "XtDisplay" "" "@DEF@" -.sM -.FD 0 -Display *XtDisplay(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. \*(cI -.LP -.eM -.PN XtDisplay -returns the display pointer for the specified widget. -.sp -.LP -.IN "XtParent" "" "@DEF@" -.sM -.FD 0 -Widget XtParent(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. \*(oI -.LP -.eM -.PN XtParent -returns the parent object for the specified widget. The returned object -will be of class Object or a subclass. -.sp -.LP -.IN "XtScreen" "" "@DEF@" -.sM -.FD 0 -Screen *XtScreen(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. \*(cI -.LP -.eM -.PN XtScreen -returns the screen pointer for the specified widget. -.sp -.LP -.IN "XtWindow" "" "@DEF@" -.sM -.FD 0 -Window XtWindow(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. \*(cI -.LP -.eM -.PN XtWindow -returns the window of the specified widget. -.sp -.LP -The display pointer, screen pointer, and window of a widget or -of the closest widget ancestor of a nonwidget object are available -by means of -.PN XtDisplayOfObject , -.PN XtScreenOfObject , -and -.PN XtWindowOfObject . -.IN "XtDisplayOfObject" "" "@DEF@" -.sp -.LP -.sM -.FD 0 -Display *XtDisplayOfObject(\fIobject\fP) -.br - Widget \fIobject\fP; -.FN -.IP \fIobject\fP 1i -Specifies the object. \*(oI -.LP -.eM -.PN XtDisplayOfObject -is identical in function to -.PN XtDisplay -if the object is a widget; otherwise -.PN XtDisplayOfObject -returns the display -pointer for the nearest ancestor of \fIobject\fP that is of class -Widget or a subclass thereof. -.LP -.IN "XtScreenOfObject" "" "@DEF@" -.sM -.FD 0 -Screen *XtScreenOfObject(\fIobject\fP) -.br - Widget \fIobject\fP; -.FN -.IP \fIobject\fP 1i -Specifies the object. \*(oI -.LP -.eM -.PN XtScreenOfObject -is identical in function to -.PN XtScreen -if the object is a widget; otherwise -.PN XtScreenOfObject -returns the screen pointer -for the nearest ancestor of \fIobject\fP that is of class -Widget or a subclass thereof. -.LP -.IN "XtWindowOfObject" "" "@DEF@" -.sM -.FD 0 -Window XtWindowOfObject(\fIobject\fP) -.br - Widget \fIobject\fP; -.FN -.IP \fIobject\fP 1i -Specifies the object. \*(oI -.LP -.eM -.PN XtWindowOfObject -is identical in function to -.PN XtWindow -if the object is a widget; otherwise -.PN XtWindowOfObject -returns the window for the nearest ancestor of \fIobject\fP that is of class -Widget or a subclass thereof. -.sp -.LP -To retrieve the instance name of an object, use -.PN XtName . -.LP -.IN "XtName" "" "@DEF@" -.sM -.FD 0 -String XtName(\fIobject\fP) -.br - Widget \fIobject\fP; -.FN -.IP \fIobject\fP 1i -Specifies the object whose name is desired. \*(oI -.LP -.eM -.PN XtName -returns a pointer to the instance name of the specified object. -The storage is owned by the \*(xI and must not be modified. The -name is not qualified by the names of any of the object's ancestors. -.LP -Several window attributes are locally cached in the widget instance. -Thus, they can be set by the resource manager and -.PN XtSetValues -as well as used by routines that derive structures from these values -(for example, \fIdepth\fP for deriving pixmaps, -\fIbackground_pixel\fP for deriving GCs, and so on) or in the -.PN XtCreateWindow -call. -.LP -The \fIx\fP, \fIy\fP, \fIwidth\fP, \fIheight\fP, and \fIborder_width\fP -window attributes are available to -geometry managers. -These fields are maintained synchronously inside the \*(xI. -When an -.PN XConfigureWindow -is issued by the \*(xI on the widget's window (on request of its parent), -these values are updated immediately rather than some time later -when the server generates a -.PN ConfigureNotify -event. -(In fact, most widgets do not select -.PN SubstructureNotify -events.) -This ensures that all geometry calculations are based on the internally -consistent toolkit world rather than on either -an inconsistent world updated by asynchronous -.PN ConfigureNotify -events or a consistent, but slow, world in which geometry managers -ask the server -for window sizes whenever they need to lay out their managed children -(see Chapter 6). - -.NH 3 -Unrealizing Widgets -.XS -\fB\*(SN Unrealizing Widgets\fP -.XE -.LP -To destroy the windows associated with a widget and its -non-pop-up descendants, use -.PN XtUnrealizeWidget . -.LP -.IN "XtUnrealizeWidget" "" "@DEF@" -.sM -.FD 0 -void XtUnrealizeWidget(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. \*(cI -.LP -.eM -If the widget is currently unrealized, -.PN XtUnrealizeWidget -simply returns. Otherwise it performs the following: -.IP \(bu 5 -Unmanages the widget if the widget is managed. -.IP \(bu 5 -Makes a postorder (child-to-parent) traversal of the widget tree -rooted at the specified widget and, for each widget that has -declared a callback list resource named ``unrealizeCallback'', executes the -procedures on the -.IN XtNunrealizeCallback -XtNunrealizeCallback -list. -.IN "unrealizeCallback" "" "@DEF@" -.IP \(bu 5 -Destroys the widget's window and any subwindows by calling -.PN XDestroyWindow -with the specified widget's \fIwindow\fP field. -.LP -Any events in the queue or which arrive following a call to -.PN XtUnrealizeWidget -will be dispatched as if the window(s) of the -unrealized widget(s) had never existed. - -.NH 2 -Destroying Widgets -.XS -\fB\*(SN Destroying Widgets\fP -.XE -.LP -The \*(xI provide support -.IP \(bu 5 -To destroy all the pop-up children of the widget being destroyed -and destroy all children of composite widgets. -.IP \(bu 5 -To remove (and unmap) the widget from its parent. -.IP \(bu 5 -To call the callback procedures that have been registered to trigger -when the widget is destroyed. -.IP \(bu 5 -To minimize the number of things a widget has to deallocate when destroyed. -.IP \(bu 5 -To minimize the number of -.PN XDestroyWindow -calls when destroying a widget tree. -.sp -.LP -To destroy a widget instance, use -.PN XtDestroyWidget . -.LP -.IN "XtDestroyWidget" "" "@DEF@" -.sM -.FD 0 -void XtDestroyWidget(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. \*(oI -.LP -.eM -The -.PN XtDestroyWidget -function provides the only method of destroying a widget, -including widgets that need to destroy themselves. -It can be called at any time, -including from an application callback routine of the widget being destroyed. -This requires a two-phase destroy process in order to avoid dangling -references to destroyed widgets. -.LP -In phase 1, -.PN XtDestroyWidget -performs the following: -.IP \(bu 5 -If the \fIbeing_destroyed\fP field of the widget is -.PN True , -it returns immediately. -.IP \(bu 5 -Recursively descends the widget tree and -sets the \fIbeing_destroyed\fP field to -.PN True -for the widget and all normal and pop-up children. -.IP \(bu 5 -Adds the widget to a list of widgets (the destroy list) that should be -destroyed when it is safe to do so. -.LP -Entries on the destroy list satisfy the invariant that -if w2 occurs after w1 on the destroy list, then w2 is not a descendent, -either normal or pop-up, of w1. -.LP -Phase 2 occurs when all procedures that should execute as a result of -the current event have been called, including all procedures registered with -the event and translation managers, -that is, when the current invocation of -.PN XtDispatchEvent -is about to return, or immediately if not in -.PN XtDispatchEvent . -.LP -In phase 2, -.PN XtDestroyWidget -performs the following on each entry in the destroy list in the order -specified: -.IP \(bu 5 -If the widget is not a pop-up child and the widget's parent is a subclass of -.PN composite\%WidgetClass , -and if the parent is not being destroyed, -it calls -.PN XtUnmanageChild -on the widget and then calls the widget's parent's delete_child procedure -(see Section 3.3). -.IP \(bu 5 -Calls the destroy callback procedures registered on the widget -and all normal and pop-up descendants in postorder (it calls child -callbacks before parent callbacks). -.LP -The -.PN XtDestroyWidget -function then makes second traversal of the widget and all normal -and pop-up descendants to perform the following three items on each -widget in postorder: -.IP \(bu 5 -If the widget is not a pop-up child and the widget's parent is a subclass of -.PN constraint\%WidgetClass , -it calls the -.PN ConstraintClassPart -destroy procedure for the parent, -then for the parent's superclass, -until finally it calls the -.PN ConstraintClassPart -destroy procedure for -.PN constraintWidgetClass . -.IP \(bu 5 -Calls the -.PN CoreClassPart -destroy procedure declared in the widget class, -then the destroy procedure declared in its superclass, -until finally it calls the destroy procedure declared in the Object -class record. Callback lists are deallocated. -.IP \(bu 5 -If the widget class object class part contains an -.PN ObjectClassExtension -record with the record_type -.PN \s-1NULLQUARK\s+1 -and the \fIdeallocate\fP field is not NULL, -calls the deallocate procedure to deallocate the instance and if one -exists, the constraint record. Otherwise, the \*(xI will deallocate -the widget instance record and if one exists, the constraint record. -.IP \(bu 5 -Calls -.PN XDestroyWindow -if the specified widget is realized (that is, has an X window). -The server recursively destroys all normal descendant windows. -(Windows of realized pop-up Shell children, and their -descendants, are destroyed by a shell class destroy procedure.) - -.NH 3 -Adding and Removing Destroy Callbacks -.XS -\fB\*(SN Adding and Removing Destroy Callbacks\fP -.XE -.LP -When an application needs to perform additional processing during the -destruction of a widget, -it should register a destroy callback procedure for the widget. -The destroy callback procedures use the mechanism described in Chapter 8. -.IN "Destroy Callbacks" -The destroy callback list is identified by the resource name -XtNdestroyCallback. -.LP -For example, the following adds an application-supplied destroy callback -procedure \fIClientDestroy\fP with client data to a widget by calling -.PN XtAddCallback . -.IN "XtAddCallback" -.Ds -XtAddCallback(\fIw\fP, XtNdestroyCallback, \fIClientDestroy\fP, \fIclient_data\fP) -.De -.LP -Similarly, the following removes the application-supplied destroy callback -procedure \fIClientDestroy\fP by calling -.PN XtRemoveCallback . -.IN "XtRemoveCallback" -.Ds -XtRemoveCallback(\fIw\fP, XtNdestroyCallback, \fIClientDestroy\fP, \fIclient_data\fP) -.De -.LP -The \fIClientDestroy\fP argument is of type -.PN XtCallbackProc ; -see Section 8.1. - -.NH 3 -Dynamic Data Deallocation: The destroy Procedure -.XS -\*(SN Dynamic Data Deallocation: The destroy Procedure -.XE -.LP -.IN "destroy procedure" "" "@DEF@" -The destroy procedure pointers in the -.PN ObjectClassPart , -.PN RectObjClassPart , -and -.PN CoreClassPart -structures are of type -.PN XtWidgetProc . -.LP -.IN "XtWidgetProc" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtWidgetProc)(Widget); -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget being destroyed. -.LP -.eM -The destroy procedures are called in subclass-to-superclass order. -Therefore, a widget's destroy procedure should deallocate only storage -that is specific to the subclass and should ignore the storage -allocated by any of its superclasses. -The destroy procedure should deallocate only resources that have been -explicitly created by the subclass. -Any resource that was obtained from the resource database -or passed in an argument list was not created by the widget -and therefore should not be destroyed by it. -If a widget does not need to deallocate any storage, -the destroy procedure entry in its class record can be NULL. -.LP -Deallocating storage includes, but is not limited to, -the following steps: -.IP \(bu 5 -Calling -.PN XtFree -on dynamic storage allocated with -.PN XtMalloc , -.PN XtCalloc , -and so on. -.IP \(bu 5 -Calling -.PN XFreePixmap -on pixmaps created with direct X calls. -.IP \(bu 5 -Calling -.PN XtReleaseGC -on GCs allocated with -.PN XtGetGC . -.IP \(bu 5 -Calling -.PN XFreeGC -on GCs allocated with direct X calls. -.IP \(bu 5 -Calling -.PN XtRemoveEventHandler -on event handlers added to other widgets. -.IP \(bu 5 -Calling -.PN XtRemoveTimeOut -on timers created with -.PN XtAppAddTimeOut . -.IP \(bu 5 -Calling -.PN XtDestroyWidget -for each child if the widget has children -and is not a subclass of -.PN compositeWidgetClass . -.LP -During destroy phase 2 for each widget, the \*(xI remove the widget -from the modal cascade, unregister all event handlers, remove all key, -keyboard, button, and pointer grabs and remove all callback procedures -registered on the widget. Any outstanding selection transfers will time out. - -.NH 3 -Dynamic Constraint Data Deallocation: The ConstraintClassPart destroy Procedure -.XS -\*(SN Dynamic Constraint Data Deallocation: The ConstraintClassPart destroy Procedure -.XE -.LP -The constraint destroy procedure identified in the -.PN ConstraintClassPart -structure is called for a widget whose parent is a subclass of -.PN constraintWidgetClass . -This constraint destroy procedure pointer is of type -.PN XtWidgetProc . -The constraint destroy procedures are called in subclass-to-superclass order, -starting at the class of the widget's parent and ending at -.PN constraint\%WidgetClass . -Therefore, a parent's constraint destroy procedure should deallocate only -storage that is specific to the constraint subclass -and not storage allocated by any of its superclasses. -.LP -If a parent does not need to deallocate any constraint storage, -the constraint destroy procedure entry -in its class record can be NULL. - -.NH 3 -Widget Instance Deallocation: The deallocate Procedure -.XS -\*(SN Widget Instance Deallocation: The deallocate Procedure -.XE -.LP -.IN "deallocate procedure" "" "@DEF@" -The deallocate procedure pointer in the -.PN ObjectClassExtension -record is of type -.PN XtDeallocateProc . -.LP -.IN "XtDeallocateProc" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtDeallocateProc)(Widget, XtPointer); -.br - Widget \fIwidget\fP; -.br - XtPointer \fImore_bytes\fP; -.FN -.IP \fIwidget\fP 1i -Specifies the widget being destroyed. -.IP \fImore_bytes\fP 1i -Specifies the auxiliary memory received from the corresponding allocator -along with the widget, or NULL. -.LP -.eM -When a widget is destroyed, if an -.PN ObjectClassExtension -record exists in the object class part \fIextension\fP field -with \fIrecord_type\fP -.PN \s-1NULLQUARK\s+1 -and the \fIdeallocate\fP field is not NULL, the -.PN XtDeallocateProc -will be called. -If no ObjectClassPart extension record is declared with \fIrecord_type\fP -equal to -.PN \s-1NULLQUARK\s+1 , -then -.PN XtInheritAllocate -and -.PN XtInheritDeallocate -are assumed. -The responsibilities of the deallocate procedure are to deallocate the -memory specified by \fImore_bytes\fP if it is not NULL, -to deallocate the constraints record as specified by the -widget's \fIcore.constraints\fP field if it is -not NULL, and to deallocate the widget instance itself. -.LP -If no -.PN XtDeallocateProc -is found, it is assumed that the \*(xI -originally allocated the memory and is responsible for freeing it. - -.NH 2 -Exiting from an Application -.XS -\fB\*(SN Exiting from an Application\fP -.XE -.LP -All \*(tk applications should terminate -by calling -.PN XtDestroyApplicationContext -and then exiting -using the -standard method for their operating system (typically, by calling -.PN exit -for POSIX-based systems). -The quickest way to make the windows disappear while exiting is to call -.PN XtUnmapWidget -on each top-level shell widget. -The \*(xI have no resources beyond those in the program image, -and the X server will free its resources when its connection -to the application is broken. -.LP -Depending upon the widget set in use, it may be necessary to explicitly -destroy individual widgets or widget trees with -.PN XtDestroyWidget -before calling -.PN XtDestroyApplicationContext -in order to ensure that any -required widget cleanup is properly executed. The application developer -must refer to the widget documentation to learn if a widget needs to -perform cleanup beyond that performed automatically by the -operating system. If the client is a session participant -(see Section 4.2), then the client may wish to resign from the session -before exiting. See Section 4.2.4 for details. -.bp diff --git a/doc/xorg-docs/specs/Xt/CH03 b/doc/xorg-docs/specs/Xt/CH03 deleted file mode 100644 index f96a79781..000000000 --- a/doc/xorg-docs/specs/Xt/CH03 +++ /dev/null @@ -1,1031 +0,0 @@ -.\" $Xorg: CH03,v 1.3 2000/08/17 19:42:44 cpqbld Exp $ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" Digital Equipment Corporation, Maynard, Massachusetts. -.\" -.\" Permission to use, copy, modify and distribute this documentation for any -.\" purpose and without fee is hereby granted, provided that the above copyright -.\" notice appears in all copies and that both that copyright notice and this -.\" permission notice appear in supporting documentation, and that the name of -.\" Digital not be used in in advertising or publicity pertaining -.\" to distribution of the software without specific, written prior permission. -.\" Digital makes no representations about the suitability of the -.\" software described herein for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBChapter 3\fP\s-1 - -\s+1\fBComposite Widgets and Their Children\fP\s-1 -.sp 2 -.nr H1 3 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.LP -.XS -Chapter 3 \(em Composite Widgets and Their Children -.XE -.IN "Composite widgets" -Composite widgets (widgets whose class is a subclass of -.PN compositeWidgetClass ) -can have an arbitrary number of children. -Consequently, they are responsible for much more than primitive widgets. -Their responsibilities (either implemented directly by the widget class -or indirectly by \*(xI functions) include: -.IP \(bu 5 -Overall management of children from creation to destruction. -.IP \(bu 5 -Destruction of descendants when the composite widget is destroyed. -.IP \(bu 5 -Physical arrangement (geometry management) of a displayable subset of -children (that is, the managed children). -.IP \(bu 5 -Mapping and unmapping of a subset of the managed children. -.LP -Overall management is handled by the generic procedures -.PN XtCreateWidget -and -.PN XtDestroyWidget . -.PN XtCreateWidget -adds children to their parent by calling the parent's insert_child -procedure. -.PN XtDestroyWidget -removes children from their parent by calling the parent's delete_child -procedure and ensures that all children of a destroyed composite widget -also get destroyed. -.LP -Only a subset of the total number of children is actually managed by -the geometry manager and hence possibly visible. -For example, a composite editor widget -supporting multiple editing buffers might allocate one child -widget for each file buffer, -but it might display only a small number of the existing buffers. -Widgets that are in this displayable subset are called managed widgets -and enter into geometry manager calculations. -The other children are called unmanaged widgets -and, by definition, are not mapped by the \*(xI. -.LP -Children are added to and removed from their parent's managed set by using -.PN XtManageChild , -.PN XtManageChildren , -.PN XtUnmanageChild , -.PN XtUnmanageChildren , -and -.PN XtChangeManagedSet , -which notify the parent to recalculate the physical layout of its children -by calling the parent's change_managed procedure. -The -.PN XtCreateManagedWidget -convenience function calls -.PN XtCreateWidget -and -.PN XtManageChild -on the result. -.LP -Most managed children are mapped, -but some widgets can be in a state where they take up physical space -but do not show anything. -Managed widgets are not mapped automatically -if their \fImap_when_managed\fP field is -.PN False . -The default is -.PN True -and is changed by using -.PN XtSetMappedWhenManaged . -.LP -Each composite widget class declares a geometry manager, -which is responsible for figuring out where the managed children -should appear within the composite widget's window. -Geometry management techniques fall into four classes: -.IP "Fixed boxes" 1.6i -Fixed boxes have a fixed number of children created by the parent. -All these children are managed, -and none ever makes geometry manager requests. -.IP "Homogeneous boxes" 1.6i -Homogeneous boxes treat all children equally and apply the same geometry -constraints to each child. -Many clients insert and delete widgets freely. -.IP "Heterogeneous boxes" 1.6i -Heterogeneous boxes have a specific location where each child is placed. -This location usually is not specified in pixels, -because the window may be resized, but is expressed rather -in terms of the relationship between a child -and the parent or between the child and other specific children. -The class of heterogeneous boxes is usually a subclass of -Constraint. -.IP "Shell boxes" 1.6i -Shell boxes typically have only one child, -and the child's size is usually -exactly the size of the shell. -The geometry manager must communicate with the window manager, if it exists, -and the box must also accept -.PN ConfigureNotify -events when the window size is changed by the window manager. - -.NH 2 -Addition of Children to a Composite Widget: The insert_child Procedure -.XS -\*(SN Addition of Children to a Composite Widget: The insert_child Procedure -.XE -.LP -.IN "insert_child procedure" -To add a child to -the parent's list of children, the -.PN XtCreateWidget -function calls the parent's class routine insert_child. -The insert_child procedure pointer in a composite widget is of type -.PN XtWidgetProc . -.LP -.IN "insert_child procedure" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtWidgetProc)(Widget); -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Passes the newly created child. -.LP -.eM -Most composite widgets inherit their superclass's operation. -The insert_child routine in -.PN CompositeWidgetClass calls the insert_position procedure -and inserts the child at the specified position -in the \fIchildren\fP list, expanding it if necessary. -.LP -Some composite widgets define their own insert_child routine -so that they can order their children in some convenient way, -create companion controller widgets for a new widget, -or limit the number or class of their child widgets. -A composite widget class that wishes -to allow nonwidget children (see Chapter 12) must specify a -.PN CompositeClassExtension -extension record as described -in Section 1.4.2.1 and set the \fIaccepts_objects\fP field in this record to -.PN True . -If the -.PN CompositeClassExtension -record is not specified or the -\fIaccepts_objects\fP field is -.PN False , -the composite widget can assume that all its children are of a subclass of Core -without an explicit subclass test in the insert_child procedure. -.LP -If there is not enough room to insert a new child in the \fIchildren\fP array -(that is, \fInum_children\fP is equal to \fInum_slots\fP), -the insert_child procedure must first reallocate the array -and update \fInum_slots\fP. -The insert_child procedure then places the child at the appropriate position -in the array and increments the \fInum_children\fP field. - -.NH 2 -Insertion Order of Children: The insert_position Procedure -.XS -\fB\*(SN Insertion Order of Children: The insert_position Procedure\fP -.XE -.LP -Instances of composite widgets sometimes need to specify more about the order in which -their children are kept. -For example, -an application may want a set of command buttons in some logical order -grouped by function, -and it may want buttons that represent file names to be kept -in alphabetical order without constraining the order in which the -buttons are created. -.LP -An application controls the presentation order of a set of children by -supplying an -.IN XtNinsertPosition -XtNinsertPosition -resource. -The insert_position procedure pointer in a composite widget instance is of type -.PN XtOrderProc . -.LP -.IN "XtOrderProc" "" "@DEF@" -.sM -.FD 0 -typedef Cardinal (*XtOrderProc)(Widget); -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Passes the newly created widget. -.LP -.eM -Composite widgets that allow clients to order their children (usually -homogeneous boxes) can call their widget instance's insert_position -procedure from the class's insert_child procedure to determine where a new -child should go in its \fIchildren\fP array. -Thus, a client using a composite class can apply different sorting criteria -to widget instances of the class, passing in a different insert_position -procedure resource when it creates each composite widget instance. -.LP -The return value of the insert_position procedure -indicates how many children should go before the widget. -Returning zero indicates that the widget should go before all other children, -and returning \fInum_children\fP indicates that it should go after all other children. -The default insert_position function returns \fInum_children\fP -and can be overridden by a specific composite widget's resource list -or by the argument list provided when the composite widget is created. - -.NH 2 -Deletion of Children: The delete_child Procedure -.XS -\*(SN Deletion of Children: The delete_child Procedure -.XE -.LP -.IN "delete_child procedure" -.LP -To remove the child from the parent's \fIchildren\fP list, the -.PN XtDestroyWidget -function eventually causes a call to the Composite parent's class delete_child -procedure. -The delete_child procedure pointer is of type -.PN XtWidgetProc . -.LP -.IN "delete_child procedure" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtWidgetProc)(Widget); -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP -Passes the child being deleted. -.LP -.eM -Most widgets inherit the delete_child procedure from their superclass. -Composite widgets that create companion widgets define their own -delete_child procedure to remove these companion widgets. - -.NH 2 -Adding and Removing Children from the Managed Set -.XS -\fB\*(SN Adding and Removing Children from the Managed Set\fP -.XE -.LP -The \*(xI provide a set of generic routines to permit the addition of -widgets to or the removal of widgets from a composite widget's managed set. -.IN "change_managed procedure" -These generic routines eventually call the composite widget's change_managed -procedure if the procedure pointer is non-NULL. -The change_managed procedure pointer is of type -.PN XtWidgetProc . -The widget argument specifies the composite widget whose managed child -set has been modified. - -.NH 3 -Managing Children -.XS -\fB\*(SN Managing Children\fP -.XE -.LP -To add a list of widgets to the geometry-managed (and hence displayable) -subset of their Composite parent, use -.PN XtManageChildren . -.LP -.IN "XtManageChildren" "" "@DEF@" -.sM -.FD 0 -typedef Widget *WidgetList; -.sp -void XtManageChildren(\fIchildren\fP, \fInum_children\fP) -.br - WidgetList \fIchildren\fP; -.br - Cardinal \fInum_children\fP; -.FN -.IP \fIchildren\fP 1i -Specifies a list of child widgets. Each child must be of class -RectObj or any subclass thereof. -.IP \fInum_children\fP 1i -Specifies the number of children in the list. -.LP -.eM -The -.PN XtManageChildren -function performs the following: -.IP \(bu 5 -Issues an error if the children do not all have the same parent or -if the parent's class is not a subclass of -.PN compositeWidgetClass . -.IP \(bu 5 -Returns immediately if the common parent is being destroyed; -otherwise, for each unique child on the list, -.PN XtManageChildren -ignores the child if it already is managed or is being destroyed, -and marks it if not. -.IP \(bu 5 -If the parent is realized and after all children have been marked, -it makes some of the newly managed children viewable: -.RS -.IP \- 5 -Calls the change_managed routine of the widgets' parent. -.IP \- 5 -Calls -.PN XtRealizeWidget -on each previously unmanaged child that is unrealized. -.IP \- 5 -Maps each previously unmanaged child that has \fImap_when_managed\fP -.PN True . -.RE -.LP -Managing children is independent of the ordering of children and -independent of creating and deleting children. -The layout routine of the parent -should consider children whose \fImanaged\fP field is -.PN True -and should ignore all other children. -Note that some composite widgets, especially fixed boxes, call -.PN XtManageChild -from their insert_child procedure. -.LP -If the parent widget is realized, -its change_managed procedure is called to notify it -that its set of managed children has changed. -The parent can reposition and resize any of its children. -It moves each child as needed by calling -.PN XtMoveWidget , -which first updates the \fIx\fP and \fIy\fP fields and which then calls -.PN XMoveWindow . -.LP -If the composite widget wishes to change the size or border width of any of -its children, it calls -.PN XtResizeWidget , -which first updates the -\fIwidth\fP, \fIheight\fP, and \fIborder_width\fP -fields and then calls -.PN XConfigureWindow . -Simultaneous repositioning and resizing may be done with -.PN XtConfigureWidget ; -see Section 6.6. -.sp -.LP -To add a single child to its parent widget's set of managed children, use -.PN XtManageChild . -.LP -.IN "XtManageChild" "" "@DEF@" -.sM -.FD 0 -void XtManageChild(\fIchild\fP) -.br - Widget \fIchild\fP; -.FN -.IP \fIchild\fP 1i -Specifies the child. \*(rI -.LP -.eM -The -.PN XtManageChild -function constructs a -.PN WidgetList -of length 1 and calls -.PN XtManageChildren . -.sp -.LP -To create and manage a child widget in a single procedure, use -.PN XtCreateManagedWidget -or -.PN XtVaCreateManagedWidget . -.LP -.IN "XtCreateManagedWidget" "" "@DEF@" -.sM -.FD 0 -Widget XtCreateManagedWidget(\fIname\fP, \fIwidget_class\fP, \fIparent\fP, \ -\fIargs\fP, \fInum_args\fP) -.br - String \fIname\fP; -.br - WidgetClass \fIwidget_class\fP; -.br - Widget \fIparent\fP; -.br - ArgList \fIargs\fP; -.br - Cardinal \fInum_args\fP; -.FN -.IP \fIname\fP 1i -Specifies the resource instance name for the created widget. -.IP \fIwidget_class\fP 1i -Specifies the widget class pointer for the created widget. \*(rC -.IP \fIparent\fP 1i -Specifies the parent widget. Must be of class Composite or any -subclass thereof. -.IP \fIargs\fP 1i -Specifies the argument list to override any other resource specifications. -.IP \fInum_args\fP 1i -Specifies the number of entries in the argument list. -.LP -.eM -The -.PN XtCreateManagedWidget -function is a convenience routine that calls -.PN XtCreateWidget -and -.PN XtManageChild . -.sp -.LP -.IN "XtVaCreateManagedWidget" "" "@DEF@" -.sM -.FD 0 -Widget XtVaCreateManagedWidget(\fIname\fP, \fIwidget_class\fP, \fIparent\fP, ...) -.br - String \fIname\fP; -.br - WidgetClass \fIwidget_class\fP; -.br - Widget \fIparent\fP; -.FN -.IP \fIname\fP 1i -Specifies the resource instance name for the created widget. -.IP \fIwidget_class\fP 1i -Specifies the widget class pointer for the created widget. \*(rC -.IP \fIparent\fP 1i -Specifies the parent widget. Must be of class Composite or any -subclass thereof. -.IP ... 1i -Specifies the variable argument list to override any other -resource specifications. -.LP -.eM -.PN XtVaCreateManagedWidget -is identical in function to -.PN XtCreateManagedWidget -with the \fIargs\fP and \fInum_args\fP parameters replaced -by a varargs list, as described in Section 2.5.1. - -.NH 3 -Unmanaging Children -.XS -\fB\*(SN Unmanaging Children\fP -.XE -.LP -To remove a list of children from a parent widget's managed list, use -.PN XtUnmanageChildren . -.LP -.IN "XtUnmanageChildren" "" "@DEF@" -.sM -.FD 0 -void XtUnmanageChildren(\fIchildren\fP, \fInum_children\fP) -.br - WidgetList \fIchildren\fP; -.br - Cardinal \fInum_children\fP; -.FN -.IP \fIchildren\fP 1i -Specifies a list of child widgets. Each child must be of class -RectObj or any subclass thereof. -.IP \fInum_children\fP 1i -Specifies the number of children. -.LP -.eM -The -.PN XtUnmanageChildren -function performs the following: -.IP \(bu 5 -Returns immediately if the common parent is being destroyed. -.IP \(bu 5 -Issues an error if the children do not all have the same parent -or if the parent is not a subclass of -.PN compositeWidgetClass . -.IP \(bu 5 -For each unique child on the list, -.PN XtUnmanageChildren -ignores the child if it is unmanaged; otherwise it performs the following: -.RS -.IP \- 5 -Marks the child as unmanaged. -.IP \- 5 -If the child is realized and the \fImap_when_managed\fP field is -.PN True , -it is unmapped. -.RE -.IP \(bu 5 -If the parent is realized and if any children have become unmanaged, -calls the change_managed routine of the widgets' parent. -.LP -.PN XtUnmanageChildren -does not destroy the child widgets. -Removing widgets from a parent's managed set is often a temporary banishment, -and some time later the client may manage the children again. -To destroy widgets entirely, -.PN XtDestroyWidget -should be called instead; -see Section 2.9. -.sp -.LP -To remove a single child from its parent widget's managed set, use -.PN XtUnmanageChild . -.LP -.IN "XtUnmanageChild" "" "@DEF@" -.sM -.FD 0 -void XtUnmanageChild(\fIchild\fP) -.br - Widget \fIchild\fP; -.FN -.IP \fIchild\fP 1i -Specifies the child. \*(rI -.LP -.eM -The -.PN XtUnmanageChild -function constructs a widget list -of length 1 and calls -.PN XtUnmanageChildren . -.LP -These functions are low-level routines that are used by generic -composite widget building routines. -In addition, composite widgets can provide widget-specific, -high-level convenience procedures. - -.NH 3 -Bundling Changes to the Managed Set -.XS -\fB\*(SN Bundling Changes to the Managed Set\fP -.XE -.LP -A client may simultaneously unmanage and manage children -with a single call to the \*(xI. In this same call the -client may provide a callback procedure that can modify the -geometries of one or more children. The composite widget class -defines whether this single client call results in separate invocations -of the change_managed method, one to unmanage and the other to -manage, or in just a single invocation. -.\" .LP -.\" The composite widget class specifies how its change_managed method -.\" should be invoked by declaring a -.\" .PN CompositeClassExtension -.\" structure as described in section 1.4.2.1. If the -.\" \fIallows_change_managed_set\fP field in the -.\" .PN CompositeClassExtension -.\" record is -.\" .PN False , -.\" the change_managed method will be invoked twice; once before any -.\" geometry changes are requested by the client callback and once -.\" after. If the \fIallows_change_managed_set\fP field is -.\" .PN True , -.\" the change_managed method will be invoked just once after the -.\" specified children have been marked as unmanaged or managed and -.\" the client's callback has been invoked. -.\" If no -.\" .PN CompositeClassExtension -.\" record is found in the extension field of the -.\" composite class part with record type -.\" .PN \s-1NULLQUARK\s+1 -.\" and version greater -.\" than 1 and if -.\" .PN XtInheritChangeManaged -.\" was specified in the class record during class initialization, the -.\" value of the \fIallows_change_managed_set\fP -.\" field will be inherited from the superclass. -.LP -To simultaneously remove from and add to the geometry-managed -set of children of a composite parent, use -.PN XtChangeManagedSet . -.LP -.IN "XtChangeManagedSet" "" "@DEF@" -.sM -.FD 0 -void XtChangeManagedSet(\fIunmanage_children\fP, \fInum_unmanage_children\fP, - \fIdo_change_proc\fP, \fIclient_data\fP, - \fImanage_children\fP, \fInum_manage_children\fP) -.br - WidgetList \fIunmanage_children\fP; -.br - Cardinal \fInum_unmanage_children\fP; -.br - XtDoChangeProc \fIdo_change_proc\fP; -.br - XtPointer \fIclient_data\fP; -.br - WidgetList \fImanage_children\fP; -.br - Cardinal \fInum_manage_children\fP; -.FN -.IP \fIunmanage_children\fP 1.8i -Specifies the list of widget children to initially remove from the managed set. -.IP \fInum_unmanage_children\fP 1.8i -Specifies the number of entries in the \fIunmanage_children\fP list. -.IP \fIdo_change_proc\fP 1.8i -Specifies a procedure to invoke between unmanaging -and managing the children, or NULL. -.IP \fIclient_data\fP 1.8i -Specifies client data to be passed to the do_change_proc. -.IP \fImanage_children\fP 1.8i -Specifies the list of widget children to finally add to the managed set. -.IP \fInum_manage_children\fP 1.8i -Specifies the number of entries in the \fImanage_children\fP list. -.LP -.eM -The -.PN XtChangeManagedSet -function performs the following: -.IP \(bu 5 -Returns immediately if \fInum_unmanage_children\fP and -\fInum_manage_children\fP are both 0. -.IP \(bu 5 -Issues a warning and returns if the widgets specified in the -\fImanage_children\fP and -the \fIunmanage_children\fP lists do not all have the same parent or if -that parent is not a subclass of -.PN compositeWidgetClass . -.IP \(bu 5 -Returns immediately if the common parent is being destroyed. -.IP \(bu 5 -If \fIdo_change_proc\fP is not NULL and the parent's -.PN CompositeClassExtension -\fIallows_change_managed_set\fP field is -.PN False , -then -.PN XtChangeManagedSet -performs the following: -.RS -.IP \- 5 -Calls -.PN XtUnmanageChildren -(\fIunmanage_children\fP, \fInum_unmanage_children\fP). -.IP \- 5 -Calls the \fIdo_change_proc\fP. -.IP \- 5 -Calls -.PN XtManageChildren -(\fImanage_children\fP, \fInum_manage_children\fP). -.RE -.IP \(bu 5 -Otherwise, the following is performed: -.RS -.IP \- 5 -For each child on the \fIunmanage_children\fP list; if the child is -already unmanaged it is ignored, otherwise it is marked as unmanaged, -and if it is realized and its \fImap_when_managed\fP field is -.PN True , -it is unmapped. -.IP \- 5 -If \fIdo_change_proc\fP is non-NULL, the procedure is invoked. -.IP \- 5 -For each child on the \fImanage_children\fP list; if the child is already -managed or is being destroyed, it is ignored; otherwise it is -marked as managed. -.IP \- 5 -If the parent is realized and after all children have been marked, -the change_managed method of the parent is invoked, and subsequently -some of the newly managed children are made viewable by calling -.PN XtRealizeWidget -on each previously unmanaged child that is unrealized and -mapping each previously unmanaged child that has \fImap_when_managed\fP -.PN True . -.RE -.LP -If no -.PN CompositeClassExtension -record is found in the parent's composite class part \fIextension\fP field -with record type -.PN \s-1NULLQUARK\s+1 -and version greater than 1, and if -.PN XtInheritChangeManaged -was specified in the parent's class record during class initialization, -the value of the \fIallows_change_managed_set\fP -field is inherited from the superclass. The value inherited from -.PN compositeWidgetClass -for the \fIallows_change_managed_set\fP field is -.PN False . -.LP -It is not an error to include a child in both the \fIunmanage_children\fP -and the \fImanage_children\fP lists. The effect of such a call is that -the child remains managed following the call, but the \fIdo_change_proc\fP is -able to affect the child while it is in an unmanaged state. -.sp -.LP -The \fIdo_change_proc\fP is of type -.PN XtDoChangeProc . -.LP -.IN "XtDoChangeProc" "" "@DEF" -.sM -.FD 0 -typedef void (*XtDoChangeProc)(Widget, WidgetList, Cardinal*, WidgetList, Cardinal*, XtPointer); -.br - Widget \fIcomposite_parent\fP; -.br - WidgetList \fIunmange_children\fP; -.br - Cardinal *\fInum_unmanage_children\fP; -.br - WidgetList \fImanage_children\fP; -.br - Cardinal *\fInum_manage_children\fP; -.br - XtPointer \fIclient_data\fP; -.FN -.IP \fIcomposite_parent\fP 1.8i -Passes the composite parent whose managed set is being altered. -.IP \fIunmanage_children\fP 1.8i -Passes the list of children just removed from the managed set. -.IP \fInum_unmanage_children\fP 1.8i -Passes the number of entries in the \fIunmanage_children\fP list. -.IP \fImanage_children\fP 1.8i -Passes the list of children about to be added to the managed set. -.IP \fInum_manage_children\fP 1.8i -Passes the number of entries in the \fImanage_children\fP list. -.IP \fIclient_data\fP 1.8i -Passes the client data passed to -.PN XtChangeManagedSet . -.LP -.eM -The \fIdo_change_proc\fP procedure is used by the caller of -.PN XtChangeManagedSet -to make changes to one or more children at the point when the -managed set contains the fewest entries. These changes may -involve geometry requests, and in this case the caller of -.PN XtChangeManagedSet -may take advantage of the fact that the \*(xI internally grant -geometry requests made by unmanaged children without invoking -the parent's geometry manager. To achieve this advantage, if -the \fIdo_change_proc\fP procedure -changes the geometry of a child or of a descendant of a child, then -that child should be included in the \fIunmanage_children\fP and -\fImanage_children\fP lists. - -.NH 3 -Determining if a Widget Is Managed -.XS -\fB\*(SN Determining if a Widget Is Managed\fP -.XE -.LP -To determine the managed state of a given child widget, use -.PN XtIsManaged . -.LP -.IN "XtIsManaged" "" "@DEF@" -.sM -.FD 0 -Boolean XtIsManaged(\fIw\fP) -.br - Widget \fIw\fP\^; -.FN -.IP \fIw\fP 1i -Specifies the widget. \*(oI -.LP -.eM -The -.PN XtIsManaged -function returns -.PN True -if the specified widget is of class RectObj or any subclass thereof -and is managed, or -.PN False -otherwise. - -.NH 2 -Controlling When Widgets Get Mapped -.XS -\fB\*(SN Controlling When Widgets Get Mapped\fP -.XE -.LP -A widget is normally mapped if it is managed. -However, -this behavior can be overridden by setting the XtNmappedWhenManaged resource -for the widget when it is created -or by setting the \fImap_when_managed\fP field to -.PN False . -.sp -.LP -To change the value of a given widget's \fImap_when_managed\fP field, use -.PN XtSetMappedWhenManaged . -.LP -.IN "XtSetMappedWhenManaged" "" "@DEF@" -.sM -.FD 0 -void XtSetMappedWhenManaged(\fIw\fP, \fImap_when_managed\fP) -.br - Widget \fIw\fP; -.br - Boolean \fImap_when_managed\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. \*(cI -.IP \fImap_when_managed\fP 1i -Specifies a Boolean value that indicates the new value -that is stored into the widget's \fImap_when_managed\fP -field. -.LP -.eM -If the widget is realized and managed, -and if \fImap_when_managed\fP is -.PN True , -.PN XtSetMappedWhenManaged -maps the window. -If the widget is realized and managed, -and if \fImap_when_managed\fP is -.PN False , -it unmaps the window. -.PN XtSetMappedWhenManaged -is a convenience function that is equivalent to (but slightly faster than) -calling -.PN XtSetValues -and setting the new value for the XtNmappedWhenManaged resource -then mapping the widget as appropriate. -As an alternative to using -.PN XtSetMappedWhenManaged -to control mapping, -a client may set \fImapped_when_managed\fP to -.PN False -and use -.PN XtMapWidget -and -.PN XtUnmapWidget -explicitly. -.sp -.LP -To map a widget explicitly, use -.PN XtMapWidget . -.LP -.IN "XtMapWidget" "" "@DEF@" -.sM -.FD 0 -XtMapWidget(\fIw\fP) -.br - Widget \fIw\fP\^; -.FN -.IP \fIw\fP 1i -Specifies the widget. \*(cI -.LP -.eM -To unmap a widget explicitly, use -.PN XtUnmapWidget . -.LP -.IN "XtUnmapWidget" "" "@DEF@" -.sM -.FD 0 -XtUnmapWidget(\fIw\fP) -.br - Widget \fIw\fP\^; -.FN -.IP \fIw\fP 1i -Specifies the widget. \*(cI -.LP -.eM - -.NH 2 -Constrained Composite Widgets -.XS -\*(SN Constrained Composite Widgets -.XE -.LP -The Constraint -widget class is a subclass of -.PN compositeWidgetClass . -The name is derived from the fact that constraint widgets -may manage the geometry -of their children based on constraints associated with each child. -These constraints can be as simple as the maximum width and height -the parent will allow the child to occupy or can be as complicated as -how other children should change if this child is moved or resized. -Constraint -widgets let a parent define constraints as resources that are supplied for their children. -For example, if the -Constraint -parent defines the maximum sizes for its children, -these new size resources are retrieved for each child as if they were -resources that were defined by the child widget's class. -Accordingly, -constraint resources may be included in the argument list or resource file just -like any other resource for the child. -.LP -Constraint -widgets have all the responsibilities of normal composite widgets -and, in addition, must process and act upon the constraint information -associated with each of their children. -.LP -To make it easy for widgets and the \*(xI to keep track of the -constraints associated with a child, -every widget has a \fIconstraints\fP field, -which is the address of a parent-specific structure that contains -constraint information about the child. -If a child's parent does not belong to a subclass of -.PN constraintWidgetClass , -then the child's \fIconstraints\fP field is NULL. -.LP -Subclasses of -Constraint -can add constraint data to the constraint record defined by their superclass. -To allow this, widget writers should define the constraint -records in their private .h file by using the same conventions as used for -widget records. -For example, a widget class that needs to maintain a maximum -width and height for each child might define its constraint record as -follows: -.LP -.Ds -.TA .5i 3i -.ta .5i 3i -typedef struct { - Dimension max_width, max_height; -} MaxConstraintPart; - -typedef struct { - MaxConstraintPart max; -} MaxConstraintRecord, *MaxConstraint; -.De -.LP -A subclass of this widget class that also needs to maintain a minimum size would -define its constraint record as follows: -.LP -.Ds -.TA .5i 3i -.ta .5i 3i -typedef struct { - Dimension min_width, min_height; -} MinConstraintPart; - -typedef struct { - MaxConstraintPart max; - MinConstraintPart min; -} MaxMinConstraintRecord, *MaxMinConstraint; -.De -.LP -Constraints are allocated, initialized, deallocated, and otherwise maintained -insofar as possible by the \*(xI. -The Constraint class record part has several entries that facilitate this. -All entries in -.PN ConstraintClassPart -are fields and procedures that are defined and implemented by the parent, -but they are called whenever actions are performed on the parent's children. -.LP -The -.PN XtCreateWidget -function uses the \fIconstraint_size\fP field in the parent's class record -to allocate a constraint record when a child is created. -.PN XtCreateWidget -also uses the constraint resources to fill in resource fields in the -constraint record associated with a child. -It then calls the constraint initialize procedure so that the parent -can compute constraint fields that are derived from constraint resources -and can possibly move or resize the child to conform to the given constraints. -.LP -When the -.PN XtGetValues -and -.PN XtSetValues -functions are executed -on a child, they use the constraint resources to get the values or -set the values of constraints associated with that child. -.PN XtSetValues -then calls the constraint set_values procedures so that the parent can -recompute derived constraint fields and move or resize the child -as appropriate. -If a -Constraint -widget class or any of its superclasses have declared a -.PN ConstraintClassExtension -record in the -.PN ConstraintClassPart -\fIextension\fP -fields with a record type of -.PN \s-1NULLQUARK\s+1 -and the \fIget_values_hook\fP field in -.IN "get_values_hook procedure" -.IN "Constraint" "get_values_hook" -the extension record is non-NULL, -.PN XtGetValues -calls the get_values_hook -procedure(s) to allow the parent to return derived constraint fields. -.LP -The -.PN XtDestroyWidget -function calls the constraint destroy procedure to deallocate any -dynamic storage associated with a constraint record. -The constraint record itself must not be deallocated by the constraint -destroy procedure; -.PN XtDestroyWidget -does this automatically. -.bp diff --git a/doc/xorg-docs/specs/Xt/CH04 b/doc/xorg-docs/specs/Xt/CH04 deleted file mode 100644 index 0291aa333..000000000 --- a/doc/xorg-docs/specs/Xt/CH04 +++ /dev/null @@ -1,1998 +0,0 @@ -.\" $Xorg: CH04,v 1.3 2000/08/17 19:42:44 cpqbld Exp $ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" Digital Equipment Corporation, Maynard, Massachusetts. -.\" -.\" Permission to use, copy, modify and distribute this documentation for any -.\" purpose and without fee is hereby granted, provided that the above copyright -.\" notice appears in all copies and that both that copyright notice and this -.\" permission notice appear in supporting documentation, and that the name of -.\" Digital not be used in in advertising or publicity pertaining -.\" to distribution of the software without specific, written prior permission. -.\" Digital makes no representations about the suitability of the -.\" software described herein for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBChapter 4\fP\s-1 - -\s+1\fBShell Widgets\fP\s-1 -.sp 2 -.nr H1 4 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.LP -.XS -Chapter 4 \(em Shell Widgets -.XE -.IN "Shell" "" "@DEF@" -.LP -Shell widgets hold an application's top-level widgets to allow them to -communicate with the window manager and session manager. -Shells have been designed to be as nearly invisible as possible. -Clients have to create them, -but they should never have to worry about their sizes. -.LP -If a shell widget is resized from the outside (typically by a window manager), -the shell widget also resizes its managed child widget automatically. -Similarly, if the shell's child widget needs to change size, -it can make a geometry request to the shell, -and the shell negotiates the size change with the outer environment. -Clients should never attempt to change the size of their shells directly. -.LP -The five types of public shells are: -.TS -lw(1.5i) lw(4.25i). -T{ -.PN OverrideShell -T} T{ -Used for shell windows that completely bypass the window manager -(for example, pop-up menu shells). -T} -.sp -T{ -.PN TransientShell -T} T{ -Used for shell windows that have the -.PN \s-1WM_TRANSIENT_FOR\s+1 -property set. The effect of this property is dependent upon the -window manager being used. -T} -.sp -T{ -.PN TopLevelShell -T} T{ -Used for normal top-level windows -(for example, any additional top-level widgets an application needs). -T} -.sp -T{ -.PN ApplicationShell -T} T{ -Formerly used for the single main top-level window that -the window manager identifies as an application instance and -made obsolete by SessionShell. -T} -.IN "ApplicationShell" "" "@DEF@" -.sp -T{ -.PN SessionShell -T} T{ -Used for the single main top-level window that -the window manager identifies as an application instance and -that interacts with the session manager. -T} -.IN "SessionShell" "" "@DEF@" -.TE - -.NH 2 -Shell Widget Definitions -.XS -\*(SN Shell Widget Definitions -.XE -.LP -Widgets negotiate their size and position with their parent widget, -that is, the widget that directly contains them. -Widgets at the top of the hierarchy do not have parent widgets. -Instead, they must deal with the outside world. -To provide for this, -each top-level widget is encapsulated in a special widget, called a -shell widget. -.LP -Shell -widgets, whose class is a subclass of the -Composite class, -encapsulate other widgets and can allow a widget to avoid the -geometry clipping imposed by the parent-child window relationship. -They also can provide a layer of communication with the window manager. -.LP -The eight different types of shells are: -.TS -lw(1.5i) lw(4.5i). -T{ -.PN Shell -T} T{ -The base class for shell widgets; provides the -fields needed for all types of shells. -Shell -is a direct subclass of -.PN compositeWidgetClass . -T} -.sp 6p -T{ -.PN OverrideShell -T} T{ -A subclass of Shell; used for shell windows that completely -bypass the window manager. -T} -.sp 6p -T{ -.PN WMShell -T} T{ -A subclass of Shell; contains fields needed by the -common window manager protocol. -T} -.sp 6p -T{ -.PN VendorShell -T} T{ -A subclass of WMShell; contains fields used by -vendor-specific window managers. -T} -.sp 6p -T{ -.PN TransientShell -T} T{ -A subclass of VendorShell; used for shell windows that -desire the -.PN \s-1WM_TRANSIENT_FOR\s+1 -property. -T} -.sp 6p -T{ -.PN TopLevelShell -T} T{ -A subclass of VendorShell; used for normal top-level windows. -T} -.sp 6p -T{ -.PN ApplicationShell -T} T{ -A subclass of TopLevelShell; may be used for an application's additional -root windows. -T} -.sp 6p -T{ -.PN SessionShell -T} T{ -A subclass of ApplicationShell; used for an application's -main root window. -T} -.TE -.LP -Note that the classes -Shell, -WMShell, -and -VendorShell -are internal and should not be instantiated or subclassed. -Only -OverrrideShell, -TransientShell, -TopLevelShell, -ApplicationShell, -and -SessionShell -are intended for public use. - -.NH 3 -ShellClassPart Definitions -.XS -\*(SN ShellClassPart Definitions -.XE -.LP -Only the -Shell -class has additional class fields, which are all contained in the -.PN ShellClassExtensionRec . -None of the other Shell classes have any additional class fields: -.LP -.KS -.sM -.Ds 0 -.TA .5i 2.5i 4.5i -.ta .5i 2.5i 4.5i -typedef struct { - XtPointer extension; -} ShellClassPart, OverrideShellClassPart, -WMShellClassPart, VendorShellClassPart, TransientShellClassPart, -TopLevelShellClassPart, ApplicationShellClassPart, SessionShellClassPart; -.De -.LP -.eM -.KE -The full Shell class record definitions are: -.IN "ShellClassExtension" "" "@DEF@" -.IN "ShellClassExtensionRec" "" "@DEF@" -.LP -.KS -.sM -.Ds 0 -.TA .5i 2.5i 4.5i -.ta .5i 2.5i 4.5i -typedef struct _ShellClassRec { - CoreClassPart core_class; - CompositeClassPart composite_class; - ShellClassPart shell_class; -} ShellClassRec; -.De -.KE -.KS -.Ds 0 -.TA .5i 2.5i 4.5i -.ta .5i 2.5i 4.5i -typedef struct { - XtPointer next_extension; See Section 1.6.12 - XrmQuark record_type; See Section 1.6.12 - long version; See Section 1.6.12 - Cardinal record_size; See Section 1.6.12 - XtGeometryHandler root_geometry_manager; See below -} ShellClassExtensionRec, *ShellClassExtension; -.De -.KE -.KS -.Ds 0 -.TA .5i 2.5i 4.5i -.ta .5i 2.5i 4.5i -typedef struct _OverrideShellClassRec { - CoreClassPart core_class; - CompositeClassPart composite_class; - ShellClassPart shell_class; - OverrideShellClassPart override_shell_class; -} OverrideShellClassRec; -.De -.KE -.KS -.Ds 0 -.TA .5i 2.5i 4.5i -.ta .5i 2.5i 4.5i -typedef struct _WMShellClassRec { - CoreClassPart core_class; - CompositeClassPart composite_class; - ShellClassPart shell_class; - WMShellClassPart wm_shell_class; -} WMShellClassRec; -.De -.KE -.KS -.Ds 0 -.TA .5i 2.5i 4.5i -.ta .5i 2.5i 4.5i -typedef struct _VendorShellClassRec { - CoreClassPart core_class; - CompositeClassPart composite_class; - ShellClassPart shell_class; - WMShellClassPart wm_shell_class; - VendorShellClassPart vendor_shell_class; -} VendorShellClassRec; -.De -.KE -.KS -.Ds 0 -.TA .5i 2.5i 4.5i -.ta .5i 2.5i 4.5i -typedef struct _TransientShellClassRec { - CoreClassPart core_class; - CompositeClassPart composite_class; - ShellClassPart shell_class; - WMShellClassPart wm_shell_class; - VendorShellClassPart vendor_shell_class; - TransientShellClassPart transient_shell_class; -} TransientShellClassRec; -.De -.KE -.KS -.Ds 0 -.TA .5i 2.5i 4.5i -.ta .5i 2.5i 4.5i -typedef struct _TopLevelShellClassRec { - CoreClassPart core_class; - CompositeClassPart composite_class; - ShellClassPart shell_class; - WMShellClassPart wm_shell_class; - VendorShellClassPart vendor_shell_class; - TopLevelShellClassPart top_level_shell_class; -} TopLevelShellClassRec; -.De -.KE -.KS -.Ds 0 -.TA .5i 2.5i 4.5i -.ta .5i 2.5i 4.5i -typedef struct _ApplicationShellClassRec { - CoreClassPart core_class; - CompositeClassPart composite_class; - ShellClassPart shell_class; - WMShellClassPart wm_shell_class; - VendorShellClassPart vendor_shell_class; - TopLevelShellClassPart top_level_shell_class; - ApplicationShellClassPart application_shell_class; -} ApplicationShellClassRec; -.De -.KE -.KS -.Ds 0 -.TA .5i 2.5i 4.5i -.ta .5i 2.5i 4.5i -typedef struct _SessionShellClassRec { - CoreClassPart core_class; - CompositeClassPart composite_class; - ShellClassPart shell_class; - WMShellClassPart wm_shell_class; - VendorShellClassPart vendor_shell_class; - TopLevelShellClassPart top_level_shell_class; - ApplicationShellClassPart application_shell_class; - SessionShellClassPart session_shell_class; -} SessionShellClassRec; -.De -.LP -.eM -.KE -.KS -The single occurrences of the class records and pointers for creating -instances of shells are: -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -extern ShellClassRec shellClassRec; -extern OverrideShellClassRec overrideShellClassRec; -extern WMShellClassRec wmShellClassRec; -extern VendorShellClassRec vendorShellClassRec; -extern TransientShellClassRec transientShellClassRec; -extern TopLevelShellClassRec topLevelShellClassRec; -extern ApplicationShellClassRec applicationShellClassRec; -extern SessionShellClassRec sessionShellClassRec; -.sp -extern WidgetClass shellWidgetClass; -extern WidgetClass overrideShellWidgetClass; -extern WidgetClass wmShellWidgetClass; -extern WidgetClass vendorShellWidgetClass; -extern WidgetClass transientShellWidgetClass; -extern WidgetClass topLevelShellWidgetClass; -extern WidgetClass applicationShellWidgetClass; -extern WidgetClass sessionShellWidgetClass; -.De -.LP -.eM -.KE -.KS -The following opaque types and opaque variables are defined -for generic operations on widgets whose class is a subclass of -Shell. -.TS -lw(2.75i) lw(2.75i). -_ -.sp 6p -Types Variables -.sp 6p -_ -.sp 6p -T{ -.PN ShellWidget -T} T{ -.PN shellWidgetClass -T} -T{ -.PN OverrideShellWidget -T} T{ -.PN overrideShellWidgetClass -T} -T{ -.PN WMShellWidget -T} T{ -.PN wmShellWidgetClass -T} -T{ -.PN VendorShellWidget -T} T{ -.PN vendorShellWidgetClass -T} -T{ -.PN TransientShellWidget -T} T{ -.PN transientShellWidgetClass -T} -T{ -.PN TopLevelShellWidget -T} T{ -.PN topLevelShellWidgetClass -T} -T{ -.PN ApplicationShellWidget -T} T{ -.PN applicationShellWidgetClass -T} -T{ -.PN SessionShellWidget -T} T{ -.PN sessionShellWidgetClass -T} -.PN ShellWidgetClass -.PN OverrideShellWidgetClass -.PN WMShellWidgetClass -.PN VendorShellWidgetClass -.PN TransientShellWidgetClass -.PN TopLevelShellWidgetClass -.PN ApplicationShellWidgetClass -.PN SessionShellWidgetClass -.sp 6p -_ -.TE -.KE -.LP -The declarations for all Intrinsics-defined shells except -VendorShell appear in -.PN Shell.h -and -.PN ShellP.h . -VendorShell has separate public and private .h files which are included by -.PN Shell.h -and -.PN ShellP.h . -.LP -.PN Shell.h -uses incomplete structure definitions to ensure that the -compiler catches attempts to access private data in any of the Shell -instance or class data structures. -.LP -The symbolic constant for the -.PN ShellClassExtension -version identifier is -.PN XtShellExtensionVersion -(see Section 1.6.12). -.IN "XtShellExtensionVersion" "" "@DEF@" -.LP -.IN "Shell" "root_geometry_manager" -.IN "root_geometry_manager procedure" -The root_geometry_manager procedure acts as -the parent geometry manager for geometry requests made by shell -widgets. When a shell widget calls either -.PN XtMakeGeometryRequest -or -.PN XtMakeResizeRequest , -the root_geometry_manager procedure is invoked to -negotiate the new geometry with the window manager. If the window -manager permits the new geometry, the root_geometry_manager -procedure should -return -.PN XtGeometryYes ; -if the window manager denies the geometry -request or does not change the window geometry within some timeout -interval (equal to \fIwm_timeout\fP in the case of WMShells), the -.IN "Shell" "wm_timeout" "@DEF@" -.IN "wm_timeout" "" "@DEF@" -root_geometry_manager procedure should return -.PN XtGeometryNo . -If the window manager makes some alternative geometry change, the -root_geometry_manager procedure may return either -.PN XtGeometryNo -and handle the new geometry as a resize or -.PN XtGeometryAlmost -in anticipation that the shell will accept the compromise. If the -compromise is not accepted, the new size must then be handled as a -resize. Subclasses of -Shell -that wish to provide their own -root_geometry_manager procedures are strongly encouraged to use enveloping to -invoke their superclass's root_geometry_manager procedure under most -situations, as the window manager interaction may be very complex. -.LP -If no -.PN ShellClassPart -extension record is declared with \fIrecord_type\fP -equal to -.PN \s-1NULLQUARK\s+1 , -then -.PN XtInheritRootGeometryManager -is assumed. - -.NH 3 -ShellPart Definition -.XS -\*(SN ShellPart Definition -.XE -.LP -The various shell widgets have the following additional instance -fields defined in -their widget records: -.LP -.IN "ShellPart" "" "@DEF@" -.KS -.sM -.Ds 0 -.TA .5i 2.5i 4.5i -.ta .5i 2.5i 4.5i -typedef struct { - String geometry; - XtCreatePopupChildProc create_popup_child_proc; - XtGrabKind grab_kind; - Boolean spring_loaded; - Boolean popped_up; - Boolean allow_shell_resize; - Boolean client_specified; - Boolean save_under; - Boolean override_redirect; - XtCallbackList popup_callback; - XtCallbackList popdown_callback; - Visual * visual; -} ShellPart; -.De -.KE -.Ds 0 -.TA .5i 2.5i 4.5i -.ta .5i 2.5i 4.5i -typedef struct { - int empty; -} OverrideShellPart; -.De -.Ds 0 -.TA .5i 1i 1.5i 2.5i -.ta .5i 1i 1.5i 2.5i -typedef struct { - String title; - int wm_timeout; - Boolean wait_for_wm; - Boolean transient; - Boolean urgency; - Widget client_leader; - String window_role; - struct _OldXSizeHints { - long flags; - int x, y; - int width, height; - int min_width, min_height; - int max_width, max_height; - int width_inc, height_inc; - struct { - int x; - int y; - } min_aspect, max_aspect; - } size_hints; - XWMHints wm_hints; - int base_width, base_height, win_gravity; - Atom title_encoding; -} WMShellPart; -.De -.KS -.Ds 0 -.TA .5i 2.5i 4.5i -.ta .5i 2.5i 4.5i -typedef struct { - int vendor_specific; -} VendorShellPart; -.De -.KE -.Ds 0 -.TA .5i 2.5i 4.5i -.ta .5i 2.5i 4.5i -typedef struct { - Widget transient_for; -} TransientShellPart; - -typedef struct { - String icon_name; - Boolean iconic; - Atom icon_name_encoding; -} TopLevelShellPart; -.De -.KS -.Ds 0 -.TA .5i 2.5i 4.5i -.ta .5i 2.5i 4.5i -typedef struct { - char * class; - XrmClass xrm_class; - int argc; - char ** argv; -} ApplicationShellPart; -.De -.KE -.KS -.Ds 0 -.TA .5i 2.5i 4.5i -.ta .5i 2.5i 4.5i -typedef struct { - SmcConn connection; - String session_id; - String * restart_command; - String * clone_command; - String * discard_command; - String * resign_command; - String * shutdown_command; - String * environment; - String current_dir; - String program_path; - unsigned char restart_style; - Boolean join_session; - XtCallbackList save_callbacks; - XtCallbackList interact_callbacks; - XtCallbackList cancel_callbacks; - XtCallbackList save_complete_callbacks; - XtCallbackList die_callbacks; - XtCallbackList error_callbacks; -} SessionShellPart; -.De -.LP -.eM -.KE -.KS -The full shell widget instance record definitions are: -.LP -.IN "ShellWidget" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 2.5i 4.5i -.ta .5i 2.5i 4.5i -typedef struct { - CorePart core; - CompositePart composite; - ShellPart shell; -} ShellRec, *ShellWidget; -.De -.KE -.KS -.Ds 0 -.TA .5i 2.5i 4.5i -.ta .5i 2.5i 4.5i -typedef struct { - CorePart core; - CompositePart composite; - ShellPart shell; - OverrideShellPart override; -} OverrideShellRec, *OverrideShellWidget; -.De -.KE -.KS -.Ds 0 -.TA .5i 2.5i 4.5i -.ta .5i 2.5i 4.5i -typedef struct { - CorePart core; - CompositePart composite; - ShellPart shell; - WMShellPart wm; -} WMShellRec, *WMShellWidget; -.De -.KE -.KS -.Ds 0 -.TA .5i 2.5i 4.5i -.ta .5i 2.5i 4.5i -typedef struct { - CorePart core; - CompositePart composite; - ShellPart shell; - WMShellPart wm; - VendorShellPart vendor; -} VendorShellRec, *VendorShellWidget; -.De -.KE -.KS -.Ds 0 -.TA .5i 2.5i 4.5i -.ta .5i 2.5i 4.5i -typedef struct { - CorePart core; - CompositePart composite; - ShellPart shell; - WMShellPart wm; - VendorShellPart vendor; - TransientShellPart transient; -} TransientShellRec, *TransientShellWidget; -.De -.KE -.KS -.Ds 0 -.TA .5i 2.5i 4.5i -.ta .5i 2.5i 4.5i -typedef struct { - CorePart core; - CompositePart composite; - ShellPart shell; - WMShellPart wm; - VendorShellPart vendor; - TopLevelShellPart topLevel; -} TopLevelShellRec, *TopLevelShellWidget; -.De -.KE -.KS -.Ds 0 -.TA .5i 2.5i 4.5i -.ta .5i 2.5i 4.5i -.IN "ApplicationShellWidget" "" "@DEF@" -typedef struct { - CorePart core; - CompositePart composite; - ShellPart shell; - WMShellPart wm; - VendorShellPart vendor; - TopLevelShellPart topLevel; - ApplicationShellPart application; -} ApplicationShellRec, *ApplicationShellWidget; -.De -.KE -.KS -.IN "SessionShellWidget" "" "@DEF@" -.Ds 0 -.TA .5i 2.5i 4.5i -.ta .5i 2.5i 4.5i -typedef struct { - CorePart core; - CompositePart composite; - ShellPart shell; - WMShellPart wm; - VendorShellPart vendor; - TopLevelShellPart topLevel; - ApplicationShellPart application; - SessionShellPart session; -} SessionShellRec, *SessionShellWidget; -.De -.LP -.eM -.KE - -.NH 3 -Shell Resources -.XS -\fB\*(SN Shell Resources\fP -.XE -.LP -.IN "ShellWidget" "Resources" -The resource names, classes, and representation types specified in -the -.PN shellClassRec -resource list are: -.LP -.TS -lw(1.7i) lw(1.7i) lw(1.2i) . -_ -.sp 6p -Name Class Representation -.sp 6p -_ -.sp 6p -XtNallowShellResize XtCAllowShellResize XtRBoolean -XtNcreatePopupChildProc XtCCreatePopupChildProc XtRFunction -XtNgeometry XtCGeometry XtRString -XtNoverrideRedirect XtCOverrideRedirect XtRBoolean -XtNpopdownCallback XtCCallback XtRCallback -XtNpopupCallback XtCCallback XtRCallback -XtNsaveUnder XtCSaveUnder XtRBoolean -XtNvisual XtCVisual XtRVisual -.sp 6p -_ -.TE -.LP -OverrideShell -declares no additional resources beyond those defined by -Shell. -.LP -The resource names, classes, and representation types specified in -the -.PN wmShellClassRec -.IN "WMShell" "resources" -resource list are: -.LP -.TS -lw(2.1i) lw(2.1i) lw(1.2i) . -_ -.sp 6p -Name Class Representation -.sp 6p -_ -.sp 6p -XtNbaseHeight XtCBaseHeight XtRInt -XtNbaseWidth XtCBaseWidth XtRInt -XtNclientLeader XtCClientLeader XtRWidget -XtNheightInc XtCHeightInc XtRInt -XtNiconMask XtCIconMask XtRBitmap -XtNiconPixmap XtCIconPixmap XtRBitmap -XtNiconWindow XtCIconWindow XtRWindow -XtNiconX XtCIconX XtRInt -XtNiconY XtCIconY XtRInt -XtNinitialState XtCInitialState XtRInitialState -XtNinput XtCInput XtRBool -XtNmaxAspectX XtCMaxAspectX XtRInt -XtNmaxAspectY XtCMaxAspectY XtRInt -XtNmaxHeight XtCMaxHeight XtRInt -XtNmaxWidth XtCMaxWidth XtRInt -XtNminAspectX XtCMinAspectX XtRInt -XtNminAspectY XtCMinAspectY XtRInt -XtNminHeight XtCMinHeight XtRInt -XtNminWidth XtCMinWidth XtRInt -XtNtitle XtCTitle XtRString -XtNtitleEncoding XtCTitleEncoding XtRAtom -XtNtransient XtCTransient XtRBoolean -XtNwaitforwm, XtNwaitForWm XtCWaitforwm, XtCWaitForWm XtRBoolean -XtNwidthInc XtCWidthInc XtRInt -XtNwindowRole XtCWindowRole XtRString -XtNwinGravity XtCWinGravity XtRGravity -XtNwindowGroup XtCWindowGroup XtRWindow -XtNwmTimeout XtCWmTimeout XtRInt -XtNurgency XtCUrgency XtRBoolean -.sp 6p -_ -.TE -.LP -The class resource list for -VendorShell -is implementation-defined. -.LP -The resource names, classes, and representation types that are specified in the -.PN transient\%ShellClassRec -.IN "TransientShell" "resources" -resource list are: -.LP -.TS -lw(1.7i) lw(1.7i) lw(1.2i) . -_ -.sp 6p -Name Class Representation -.sp 6p -_ -.sp 6p -XtNtransientFor XtCTransientFor XtRWidget -.sp 6p -_ -.TE -.LP -The resource names, classes, and representation types that are specified in the -.PN topLevelShellClassRec -.IN "TopLevelShell" "resources" -resource list are: -.LP -.TS -lw(1.7i) lw(1.7i) lw(1.2i) . -_ -.sp 6p -Name Class Representation -.sp 6p -_ -.sp 6p -XtNiconName XtCIconName XtRString -XtNiconNameEncoding XtCIconNameEncoding XtRAtom -XtNiconic XtCIconic XtRBoolean -.sp 6p -_ -.TE -.LP -The resource names, classes, and representation types that are specified in the -.PN application\%ShellClassRec -resource list are: -.LP -.TS -lw(1.7i) lw(1.7i) lw(1.2i) . -_ -.sp 6p -Name Class Representation -.sp 6p -_ -.sp 6p -XtNargc XtCArgc XtRInt -XtNargv XtCArgv XtRStringArray -.sp 6p -_ -.TE -.LP -.KS -The resource names, classes, and representation types that are specified -in the -.PN sessionShellClassRec -resource list are: -.LP -.TS -lw(1.7i) lw(1.7i) lw(1.2i) . -_ -.sp 6p -Name Class Representation -.sp 6p -_ -XtNcancelCallback XtCCallback XtRCallback -XtNcloneCommand XtCCloneCommand XtRCommandArgArray -XtNconnection XtCConnection XtRSmcConn -XtNcurrentDirectory XtCCurrentDirectory XtRDirectoryString -XtNdieCallback XtCCallback XtRCallback -XtNdiscardCommand XtCDiscardCommand XtRCommandArgArray -XtNenvironment XtCEnvironment XtREnvironmentArray -XtNerrorCallback XtCCallback XtRCallback -XtNinteractCallback XtCCallback XtRCallback -XtNjoinSession XtCJoinSession XtRBoolean -XtNprogramPath XtCProgramPath XtRString -XtNresignCommand XtCResignCommand XtRCommandArgArray -XtNrestartCommand XtCRestartCommand XtRCommandArgArray -XtNrestartStyle XtCRestartStyle XtRRestartStyle -XtNsaveCallback XtCCallback XtRCallback -XtNsaveCompleteCallback XtCCallback XtRCallback -XtNsessionID XtCSessionID XtRString -XtNshutdownCommand XtCShutdownCommand XtRCommandArgArray -.sp 6p -_ -.TE -.KE -.NH 3 -ShellPart Default Values -.XS -\fB\*(SN ShellPart Default Values\fP -.XE -.LP -The default values for fields common to all classes of public shells -(filled in by the -Shell -resource lists and the -Shell -initialize procedures) are: -.TS -lw(1.75i) lw(3i). -_ -.sp 6p -Field Default Value -.sp 6p -_ -.sp 6p -geometry NULL -create_popup_child_proc NULL -grab_kind (none) -spring_loaded (none) -popped_up T{ -.PN False -T} -allow_shell_resize T{ -.PN False -T} -client_specified (internal) -save_under T{ -.PN True -for -OverrideShell -and -TransientShell, -.PN False -otherwise -T} -override_redirect T{ -.PN True -for -OverrideShell, -.PN False -otherwise -T} -popup_callback NULL -popdown_callback NULL -visual T{ -.PN CopyFromParent -T} -.sp 6p -_ -.TE -.LP -The \fIgeometry\fP field specifies the size and position -and is usually given only on a command line or in a defaults file. -If the \fIgeometry\fP field is non-NULL when -a widget of class WMShell -is realized, the geometry specification is parsed using -.PN XWMGeometry -with a default geometry -string constructed from the values of \fIx\fP, \fIy\fP, \fIwidth\fP, -\fIheight\fP, \fIwidth_inc\fP, -and \fIheight_inc\fP and the size and position flags in the window manager -size hints are set. If the geometry specifies an x or y position, -then -.PN USPosition -is set. If the geometry specifies a width or height, then -.PN USSize -is set. Any fields in the geometry specification -override the corresponding values in the -Core \fIx\fP, \fIy\fP, \fIwidth\fP, and \fIheight\fP fields. -If \fIgeometry\fP is NULL or contains only a partial specification, then the -Core \fIx\fP, \fIy\fP, \fIwidth\fP, and \fIheight\fP fields are used and -.PN PPosition -and -.PN PSize -are set as appropriate. -The geometry string is not copied by any of the \*(xI -Shell classes; a client specifying the string in an arglist -or varargs list must ensure -that the value remains valid until the shell widget is realized. -For further information on the geometry string, see Section 16.4 -in \fI\*(xL\fP. -.LP -The \fIcreate_popup_child_proc\fP procedure is called by the -.PN XtPopup -procedure and may remain NULL. -The \fIgrab_kind\fP, \fIspring_loaded\fP, -and \fIpopped_up\fP fields maintain widget -state information as described under -.PN XtPopup , -.PN XtMenuPopup , -.PN XtPopdown , -and -.PN XtMenuPopdown . -.IN "allowShellResize" "" "@DEF@" -The \fIallow_shell_resize\fP field controls whether the widget contained -by the shell is allowed to try to resize itself. -If allow_shell_resize is -.PN False , -any geometry requests made by the child will always return -.PN XtGeometryNo -without interacting with the window manager. -Setting \fIsave_under\fP -.PN True -instructs the server to attempt -to save the contents of windows obscured by the shell when it is mapped -and to restore those contents automatically when the shell is unmapped. -It is useful for pop-up menus. -Setting \fIoverride_redirect\fP -.PN True -determines -whether the window manager can intercede when the shell window -is mapped. -For further information on override_redirect, -see Section 3.2 in \fI\*(xL\fP and Sections 4.1.10 and 4.2.2 in the -\fI\*(xC\fP. -The pop-up and pop-down callbacks are called during -.PN XtPopup -and -.PN XtPopdown . -The default value of the \fIvisual\fP resource is the symbolic value -.PN CopyFromParent . -The \*(xI do not need to query the parent's visual type when the -default value is used; if a client using -.PN XtGetValues -to examine the visual type receives the value -.PN CopyFromParent , -it must then use -.PN XGetWindowAttributes -if it needs the actual visual type. - -.LP -The default values for Shell fields in -WMShell -and its subclasses are: -.LP -.IN "XtUnspecifiedShellInt" "" "@DEF@" -.IN "XtUnspecifiedWindow" -.TS -lw(1i) lw(4i). -_ -.sp 6p -Field Default Value -.sp 6p -_ -.sp 6p -title T{ -Icon name, if specified, otherwise the application's name -T} -wm_timeout Five seconds, in units of milliseconds -wait_for_wm T{ -.PN True -T} -transient T{ -.PN True -for -TransientShell, -.PN False -otherwise -T} -urgency T{ -.PN False -T} -client_leader NULL -window_role NULL -min_width \fBXtUnspecifiedShellInt\fP -min_height \fBXtUnspecifiedShellInt\fP -max_width \fBXtUnspecifiedShellInt\fP -max_height \fBXtUnspecifiedShellInt\fP -width_inc \fBXtUnspecifiedShellInt\fP -height_inc \fBXtUnspecifiedShellInt\fP -min_aspect_x \fBXtUnspecifiedShellInt\fP -min_aspect_y \fBXtUnspecifiedShellInt\fP -max_aspect_x \fBXtUnspecifiedShellInt\fP -max_aspect_y \fBXtUnspecifiedShellInt\fP -input T{ -.PN False -T} -initial_state Normal -icon_pixmap None -icon_window None -icon_x \fBXtUnspecifiedShellInt\fP -icon_y \fBXtUnspecifiedShellInt\fP -icon_mask None -window_group \fBXtUnspecifiedWindow\fP -base_width \fBXtUnspecifiedShellInt\fP -base_height \fBXtUnspecifiedShellInt\fP -win_gravity \fBXtUnspecifiedShellInt\fP -title_encoding See text -.sp 6p -_ -.TE -.LP -The \fItitle\fP and -\fItitle_encoding\fP fields are stored in the -.PN \s-1WM_NAME\s+1 -property on the shell's window by the WMShell realize procedure. -If the \fItitle_encoding\fP field is -.PN None , -the \fItitle\fP string is assumed to be in the encoding of the current -locale and the encoding of the -.PN \s-1WM_NAME\s+1 -property is set to -.PN XStdICCTextStyle . -If a language procedure has not been set -the default value of \fItitle_encoding\fP is -\fB\s-1XA_STRING\s+1\fP, otherwise the default value is -.PN None . -The \fIwm_timeout\fP field specifies, in milliseconds, -the amount of time a shell is to wait for -confirmation of a geometry request to the window manager. -If none comes back within that time, -the shell assumes the window manager is not functioning properly -and sets \fIwait_for_wm\fP to -.PN False -(later events may reset this value). -When \fIwait_for_wm\fP is -.PN False , -the shell does not wait for a response, but relies on asynchronous -notification. -If \fItransient\fP is -.PN True , -the -.PN \s-1WM_TRANSIENT_FOR\s+1 -property -will be stored on the shell window with a value as specified below. -The interpretation of this property is specific to the window manager -under which the application is run; see the \fI\*(xC\fP for more details. -.LP -The realize and set_values procedures of WMShell store the -.PN \s-1WM_CLIENT_LEADER\s+1 -property on the shell window. -When \fIclient_leader\fP is not NULL and the client leader widget is -realized, the property will be created with the value of the window of the -client leader widget. -When \fIclient_leader\fP is NULL and the shell widget has a NULL parent, -the widget's window is used as the value of the -property. -When \fIclient_leader\fP is NULL and the shell widget has a non-NULL parent, -a search is made for the closest shell ancestor -with a non-NULL \fIclient_leader\fP, -and if none is found the shell ancestor with a NULL parent is the result. -If the resulting widget is realized, the property is created -with the value of the widget's window. -.LP -When the value of \fIwindow_role\fP is not NULL, the -realize and set_values procedures store the -.PN \s-1WM_WINDOW_ROLE\s+1 -property on the shell's window with the value of the resource. -.LP -All other resources specify fields in the window manager hints -and the window manager size hints. -The realize and set_values procedures of -WMShell -set the corresponding flag bits in the -hints if any of the fields contain nondefault values. In addition, if -a flag bit is set that refers to a field with the value -.PN XtUnspecifiedShellInt , -the value of the field is modified as follows: -.br -.sp -.TS -lw(2i) lw(3i). -_ -.sp 6p -Field Replacement -.sp 6p -_ -.sp 6p -base_width, base_height 0 -width_inc, height_inc 1 -max_width, max_height 32767 -min_width, min_height 1 -min_aspect_x, min_aspect_y -1 -max_aspect_x, max_aspect_y -1 -icon_x, icon_y -1 -win_gravity T{ -Value returned by -.PN XWMGeometry -if called, -else \fBNorthWestGravity\fP -T} -.sp 6p -_ -.TE - -.IN "XWMGeometry" -.LP -If the shell widget has a non-NULL parent, then the -realize and set_values procedures replace the value -.PN XtUnspecifiedWindow -.IN "XtUnspecifiedWindow" "" "@DEF@" -in the \fIwindow_group\fP field with the window id of the root widget -of the widget tree if the -root widget is realized. The symbolic constant -.PN XtUnspecifiedWindowGroup -.IN "XtUnspecifiedWindowGroup" "" "@DEF@" -may be used to indicate that the \fIwindow_group\fP hint flag bit is not -to be set. If \fItransient\fP is -.PN True , -the shell's class is not a subclass of -TransientShell, -and \fIwindow_group\fP is not -.PN XtUnspecifiedWindowGroup , -the WMShell realize and set_values procedures then store the -.PN \s-1WM_TRANSIENT_FOR\s+1 -property with the value of \fIwindow_group\fP. -.LP -.KS -Transient -shells have the following additional resource: -.TS -l l. -_ -.sp 6p -Field Default Value -.sp 6p -_ -.sp 6p -transient_for NULL -.sp 6p -_ -.TE -.KE -.LP -The realize and set_values procedures of -TransientShell -store the -.PN \s-1WM_TRANSIENT_FOR\s+1 -property on the shell window if \fItransient\fP is -.PN True . -If \fItransient_for\fP is non-NULL and the widget specified by -\fItransient_for\fP is realized, then its window is used as the value of the -.PN \s-1WM_TRANSIENT_FOR\s+1 -property; otherwise, the value of \fIwindow_group\fP is used. -.LP -.PN TopLevel -shells have the the following additional resources: -.TS -l l. -_ -.sp 6p -Field Default Value -.sp 6p -_ -.sp 6p -icon_name Shell widget's name -iconic T{ -.PN False -T} -icon_name_encoding See text -.sp 6p -_ -.TE -.LP -The \fIicon_name\fP -and \fIicon_name_encoding\fP fields are stored in the -.PN \s-1WM_ICON_NAME\s+1 -property on the shell's window by the TopLevelShell realize -procedure. -If the \fIicon_name_encoding\fP field is -.PN None , -the \fIicon_name\fP string is assumed to be in the encoding of the -current locale and the encoding of the -.PN \s-1WM_ICON_NAME\s+1 -property is set to -.PN XStdICCTextStyle . -If a language procedure has not been set, -the default value of \fIicon_name_encoding\fP is -\fB\s-1XA_STRING\s+1\fP, otherwise the default value is -.PN None . -The \fIiconic\fP field may be used by a client to request -that the window manager iconify or deiconify the shell; the -TopLevelShell -set_values procedure will send the appropriate -.PN \s-1WM_CHANGE_STATE\s+1 -message (as specified by the \fI\*(xC\fP) -if this resource is changed from -.PN False -to -.PN True -and will call -.PN XtPopup -specifying \fIgrab_kind\fP as -.PN XtGrabNone -if \fIiconic\fP is changed from -.PN True -to -.PN False . -The XtNiconic resource is also an alternative way to set -the XtNinitialState resource -to indicate that a shell should be initially displayed as an icon; the -TopLevelShell -initialize procedure will set \fIinitial_state\fP to -.PN IconicState -if \fIiconic\fP is -.PN True . -.LP -Application -shells have the following additional resources: -.br -.ne 4 -.TS -l l. -_ -.sp 6p -Field Default Value -.sp 6p -_ -.sp 6p -argc 0 -argv NULL -.sp 6p -_ -.TE -.LP -The \fIargc\fP and \fIargv\fP fields are used to initialize -the standard property -.PN \s-1WM_COMMAND\s+1 . -See the \fI\*(xC\fP for more information. -.LP -The default values for the SessionShell instance fields, -which are filled in from the resource lists and by the -initialize procedure, are -.TS -l l. -_ -.sp 6p -Field Default Value -.sp 6p -_ -.sp 6p -cancel_callbacks NULL -clone_command See text -connection NULL -current_dir NULL -die_callbacks NULL -discard_command NULL -environment NULL -error_callbacks NULL -interact_callbacks NULL -join_session T{ -.PN True -T} -program_path See text -resign_command NULL -restart_command See text -restart_style T{ -.PN SmRestartIfRunning -T} -save_callbacks NULL -save_complete_callbacks NULL -session_id NULL -shutdown_command NULL -.sp 6p -_ -.TE -.LP -The \fIconnection\fP field contains the session connection object or NULL -if a session connection is not being managed by this widget. -.LP -The \fIsession_id\fP is an identification assigned to the session -participant by the session manager. -The \fIsession_id\fP will be passed to the session -manager as the client identifier of the previous session. -When a connection is established with the session manager, -the client id assigned by the session manager is stored -in the \fIsession_id\fP field. -When not NULL, the \fIsession_id\fP of the Session shell widget that -is at the root of the widget tree of the client leader widget will be -used to create the -.PN \s-1SM_CLIENT_ID\s+1 -property on the client leader's window. -.LP -If \fIjoin_session\fP is -.PN False , -the widget will not attempt to establish a -connection to the session manager at shell creation time. -See Sections 4.2.1 and 4.2.4 -for more information on the functionality of this resource. -.LP -The \fIrestart_command\fP, \fIclone_command\fP, \fIdiscard_command\fP, -\fIresign_command\fP, \fIshutdown_command\fP, \fIenvironment\fP, -\fIcurrent_dir\fP, \fIprogram_path\fP, and -\fIrestart_style\fP fields contain standard session properties. -.LP -When a session connection is established or newly managed by the shell, -the shell initialize and set_values methods check the values of the -\fIrestart_command\fP, \fIclone_command\fP, and \fIprogram_path\fP -resources. At that time, if \fIrestart_command\fP is NULL, the value -of the \fIargv\fP resource will be copied to \fIrestart_command\fP. -Whether or not \fIrestart_command\fP was NULL, -if \*Q\fR-xtsessionID\fP\*U \*Q\fR\*U does not -already appear in the \fIrestart_command\fP, it will be added by the -initialize and set_values methods at the beginning of the command arguments; -if the \*Q\fR-xtsessionID\fP\*U argument already appears with an incorrect -\fRsession id\fP in the following argument, that argument -will be replaced with the current \fRsession id\fP. -.LP -After this, the shell initialize and set_values procedures check the -\fIclone_command\fP. If \fIclone_command\fP is NULL, -\fIrestart_command\fP will be copied to \fIclone_command\fP, -except the \*Q\fR-xtsessionID\fP\*U and following argument will not be copied. -.LP -Finally, the shell initialize and set_values procedures check the -\fIprogram_path\fP. If \fIprogram_path\fP is NULL, the -first element of \fIrestart_command\fP is copied to \fIprogram_path\fP. -.LP -The possible values of \fIrestart_style\fP are -.PN SmRestartIfRunning , -.PN SmRestartAnyway , -.PN SmRestartImmediately , -and -.PN SmRestartNever . -A resource converter is registered for this resource; -for the strings that it recognizes, -see Section 9.6.1. -.LP -The resource type EnvironmentArray is a NULL-terminated array of -pointers to strings; -each string has the format "name=value". -The `=' character may not appear in the name, -and the string is terminated by a null character. - -.NH 2 -Session Participation -.XS -\fB\*(SN Session Participation\fP -.XE -.LP -Applications can participate in a user's session, exchanging messages -with the session manager as described in the \fIX Session Management -Protocol\fP and the \fIX Session Management Library\fP. -.LP -When a widget of -.PN sessionShellWidgetClass -or a subclass is created, the widget provides support for the application -as a session participant and continues to provide support until the -widget is destroyed. - -.NH 3 -Joining a Session -.XS -\fB\*(SN Joining a Session\fP -.XE -.LP -When a Session shell is created, -if \fIconnection\fP is NULL, -and if \fIjoin_session\fP is -.PN True , -and if \fIargv\fP or \fIrestart_command\fP is not NULL, -and if in POSIX environments the -.PN \s-1SESSION_MANAGER\s+1 -environment variable is defined, -the shell will attempt to establish a new connection with the session manager. -.LP -To transfer management of an existing session connection from an -application to the shell at widget creation time, pass the existing -session connection ID as the \fIconnection\fP resource value -when creating the Session shell, -and if the other creation-time conditions on session participation are met, -the widget will maintain the connection with the session manager. -The application must ensure that only one -Session shell manages the connection. -.LP -In the Session shell set_values procedure, -if \fIjoin_session\fP changes from -.PN False -to -.PN True -and \fIconnection\fP is NULL and when in POSIX environments the -.PN \s-1SESSION_MANAGER\s+1 -environment variable is defined, -the shell will attempt to open a connection to the session manager. -If \fIconnection\fP changes from NULL to non-NULL, the -Session shell -will take over management of that session connection and will set -\fIjoin_session\fP to -.PN True . -If \fIjoin_session\fP changes from -.PN False -to -.PN True -and \fIconnection\fP is not NULL, the -Session shell will take over management of the session connection. -.LP -When a successful connection has been established, \fIconnection\fP -contains the session connection ID for the session participant. -When the shell begins to manage the connection, it will call -.PN XtAppAddInput -to register the handler which watches for protocol messages -from the session manager. -When the attempt to connect fails, a warning message is issued -and \fIconnection\fP is set to NULL. -.LP -While the connection is being managed, if a -.PN SaveYourself , -.PN SaveYourselfPhase2 , -.PN Interact , -.PN ShutdownCancelled , -.PN SaveComplete , -or -.PN Die -message is received from the session manager, the Session shell will -call out to application callback procedures registered -on the respective callback list of the Session shell and will -send -.PN SaveYourselfPhase2Request , -.PN InteractRequest , -.PN InteractDone , -.PN SaveYourselfDone , -and -.PN ConnectionClosed -messages as appropriate. -Initially, all of the client's session properties are undefined. -When any of the session property resource values are defined or change, -the Session shell initialize and set_values procedures -will update the client's session property value by a -.PN SetProperties -or a -.PN DeleteProperties -message, as appropriate. -The session ProcessID and UserID properties are always set by the shell -when it is possible to determine the value of these properties. - -.NH 3 -Saving Application State -.XS -\fB\*(SN Saving Application State\fP -.XE -.LP -The session manager instigates an application checkpoint by sending a -.PN SaveYourself -request. -Applications are responsible for saving their state in response to the -request. -.LP -When the -.PN SaveYourself -request arrives, the procedures registered on the -Session shell's save callback list are called. -If the application does not register any save callback procedures on -the save callback list, the shell will report to the session manager -that the application failed to save its state. -Each procedure on the save callback list receives a token -in the \fIcall_data\fP parameter. -.sp -.LP -.KS -The checkpoint token in the \fIcall_data\fP parameter is of type -.PN XtCheckpointToken . -.LP -.IN "XtCheckpointToken" "" "@DEF@" -.IN "XtCheckpointTokenRec" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 2i 4i -.ta .5i 2i 4i -typedef struct { - int save_type; - int interact_style; - Boolean shutdown; - Boolean fast; - Boolean cancel_shutdown - int phase; - int interact_dialog_type; /* return */ - Boolean request_cancel; /* return */ - Boolean request_next_phase; /* return */ - Boolean save_success; /* return */ -} XtCheckpointTokenRec, *XtCheckpointToken; -.De -.LP -.eM -.KE -The \fIsave_type\fP, \fIinteract_style\fP, \fIshutdown\fP, and \fIfast\fP -fields of the token contain the parameters of the -.PN SaveYourself -message. -The possible values of \fIsave_type\fP are -.PN SmSaveLocal , -.PN SmSaveGlobal , -and -.PN SmSaveBoth ; -these indicate the type of information to be saved. -The possible values of \fIinteract_style\fP are -.PN SmInteractStyleNone , -.PN SmInteractStyleErrors , -and -.PN SmInteractStyleAny ; -these indicate whether user interaction would be permitted -and, if so, what kind of interaction. -If \fIshutdown\fP is -.PN True , -the checkpoint is being performed in preparation for the end of the session. -If \fIfast\fP is -.PN True , -the client should perform the checkpoint as quickly as possible. -If \fIcancel_shutdown\fP is -.PN True , -a -.PN ShutdownCancelled -message has been received for the current save operation. (See Section 4.4.4.) -The \fIphase\fP is used by manager clients, such as a window manager, -to distinguish between the first and second phase of a save operation. -The \fIphase\fP will be either 1 or 2. -The remaining fields in the checkpoint token structure are provided for -the application to communicate with the shell. -.LP -Upon entry to the first application save callback procedure, the return -fields in the token have the following initial values: -\fIinteract_dialog_type\fP is -.PN SmDialogNormal ; -\fIrequest_cancel\fP is -.PN False ; -\fIrequest_next_phase\fP is -.PN False ; -and \fIsave_success\fP is -.PN True . -When a token is returned with any of the four return fields containing -a noninitial value, and when the field is applicable, subsequent tokens -passed to the application during the current save operation -will always contain the noninitial value. -.LP -The purpose of the token's \fIsave_success\fP field is to -indicate the outcome of the entire operation to the -session manager and ultimately, to the user. -Returning -.PN False -indicates some portion of the application state -could not be successfully saved. If any token is returned -to the shell with \fIsave_success\fP -.PN False , -tokens subsequently received -by the application for the current save operation will show -\fIsave_success\fP as -.PN False . -When the shell sends the final status of the checkpoint to the -session manager, it will indicate failure to save application state -if any token was returned with \fIsave_success\fP -.PN False . -.LP -Session participants that manage and save the state of other clients -should structure their save or interact callbacks to -set \fIrequest_next_phase\fP to -.PN True -when phase is 1, which will cause the shell to send the -.PN SaveYourselfPhase2Request -when the first phase is complete. When the -.PN SaveYourselfPhase2 -message is received, the shell will invoke the save callbacks a -second time with \fIphase\fP equal to 2. -Manager clients should save the state of other clients -when the callbacks are invoked the second time and \fIphase\fP equal to 2. -.LP -The application may request additional tokens while a checkpoint is under way, -and these additional tokens must be returned by an explicit call. -.sp -.LP -.KS -To request an additional token for a save callback response that has a -deferred outcome, use -.PN XtSessionGetToken . -.LP -.IN "XtSessionGetToken" "" "@DEF@" -.sM -.FD 0 -XtCheckpointToken XtSessionGetToken(\fIwidget\fP) -.br - Widget \fIwidget\fP; -.FN -.IP \fIwidget\fP 1i -Specifies the Session shell widget which manages session participation. -.LP -.eM -The -.PN XtSessionGetToken -function will return NULL if no checkpoint operation is currently under way. -.KE -.sp -.LP -.KS -To indicate the completion of checkpoint processing including user -interaction, the application must signal the Session shell -by returning all tokens. -(See Sections 4.2.2.2 and 4.2.2.4). -To return a token, use -.PN XtSessionReturnToken . -.LP -.IN "XtSessionReturnToken" "" "@DEF@" -.sM -.FD 0 -void XtSessionReturnToken(\fItoken\fP) -.br - XtCheckpointToken \fItoken\fP; -.FN -.IP \fItoken\fP 1i -Specifies a token that was received as the \fIcall_data\fP by a procedure -on the interact callback list or a token that was received by a call to -.PN XtSessionGetToken . -.LP -.eM -.KE -.LP -Tokens passed as \fIcall_data\fP to save callbacks are implicitly -returned when the save callback procedure returns. -A save callback procedure should not call -.PN XtSessionReturnToken -on the token passed in its \fIcall_data\fP. - -.NH 4 -Requesting Interaction -.XS -\fB\*(SN Requesting Interaction\fP -.XE -.LP -When the token \fIinteract_style\fP allows user interaction, -the application may -interact with the user during the checkpoint, but must wait for permission -to interact. -Applications request permission to interact with the user during the -checkpointing operation by registering a procedure on the Session -shell's interact callback list. When all save callback procedures have -returned, and each time a token that was granted by a call to -.PN XtSessionGetToken -is returned, the Session shell examines the interact callback list. -If interaction is permitted and the interact callback list is not empty, -the shell will send an -.PN InteractRequest -to the session manager when an interact request is not already outstanding -for the application. -.LP -The type of interaction dialog that will be requested is specified by -the \fIinteract_dialog_type\fP field in the checkpoint token. -The possible values for \fIinteract_dialog_type\fP are -.PN SmDialogError -and -.PN SmDialogNormal . -If a token is returned with \fIinteract_dialog_type\fP containing -.PN SmDialogError , -the interact request and any subsequent interact requests will be for -an error dialog; otherwise, the request will be for a normal dialog with -the user. -.LP -When a token is returned with \fIsave_success\fP -.PN False -or \fIinteract_dialog_type\fP -.PN SmDialogError , -tokens subsequently passed to callbacks during the same active -.PN SaveYourself -response will reflect these changed values, indicating that -an error condition has occurred during the checkpoint. -.LP -The \fIrequest_cancel\fP field is a return value for interact callbacks only. -Upon return from a procedure on the save callback list, the value -of the token's \fIrequest_cancel\fP field is not examined by the shell. -This is also true of tokens received through a call to -.PN XtSessionGetToken . - -.NH 4 -Interacting with the User during a Checkpoint -.XS -\fB\*(SN Interacting with the User during a Checkpoint\fP -.XE -.LP -When the session manager grants the application's request for user interaction, -the Session shell receives an -.PN Interact -message. -The procedures registered on the interact callback list are executed, -but not as if executing a typical callback list. -These procedures are individually executed in -sequence, with a checkpoint token functioning as the sequencing mechanism. -Each step in the sequence begins by removing a procedure -from the interact callback list -and executing it with a token passed in the \fIcall_data\fP. -The interact callback will typically pop up a dialog box and return. -When the user interaction and associated application checkpointing has -completed, the application must return the token by calling -.PN XtSessionReturnToken . -Returning the token completes the current step and triggers the next step -in the sequence. -.LP -During interaction the client may request cancellation of a shutdown. -When a token passed as \fIcall_data\fP to an interact procedure is returned, -if \fIshutdown\fP is -.PN True -and \fIcancel_shutdown\fP is -.PN False , -\fIrequest_cancel\fP indicates whether the -application requests that the pending shutdown be cancelled. -If \fIrequest_cancel\fP is -.PN True , -the field will also be -.PN True -in any tokens subsequently granted during the checkpoint operation. -When a token is returned requesting cancellation of -the session shutdown, pending interact procedures will still be -called by the Session shell. -When all interact procedures have been removed from the interact callback -list, executed, and the final interact token returned to the shell, an -.PN InteractDone -message is sent to the session manager, indicating whether -a pending session shutdown is requested to be cancelled. - -.NH 4 -Responding to a Shutdown Cancellation -.XS -\fB\*(SN Responding to a Shutdown Cancellation\fP -.XE -.LP -Callbacks registered on the cancel callback list are invoked when the -Session shell processes a -.PN ShutdownCancelled -message from the session manager. This may occur during the -processing of save callbacks, while waiting for interact permission, -during user interaction, or after the save operation is complete and -the application is expecting a -.PN SaveComplete -or a -.PN Die -message. -The \fIcall_data\fP for these callbacks is NULL. -.LP -When the shell notices that a pending shutdown has been cancelled, -the token \fIcancel_shutdown\fP field will be -.PN True -in tokens subsequently given to the application. -.LP -Receiving notice of a shutdown cancellation does not cancel the -pending execution of save callbacks or interact callbacks. -After the cancel callbacks execute, if \fIinteract_style\fP is not -.PN SmInteractStyleNone -and the interact list is not empty, -the procedures on the interact callback list will be executed -and passed a token with \fIinteract_style\fP -.PN SmInteractStyleNone . -The application should not interact with the user, and the Session shell -will not send an -.PN InteractDone -message. - -.NH 4 -Completing a Save -.XS -\fB\*(SN Completing a Save\fP -.XE -.LP -When there is no user interaction, the shell regards the application -as having finished saving state when all callback procedures -on the save callback list have returned, and any additional tokens -passed out by -.PN XtSessionGetToken -have been returned by corresponding calls to -.PN XtSessionReturnToken . -If the save operation involved user interaction, -the above completion conditions apply, and in addition, all requests for -interaction have been granted or cancelled, -and all tokens passed to interact callbacks have been returned -through calls to -.PN XtSessionReturnToken . -If the save operation involved a manager client that requested the -second phase, the above conditions apply to both the first and second -phase of the save operation. -.br -.LP -When the application has finished saving state, -the Session shell will report the result to the session manager by -sending the -.PN SaveYourselfDone -message. -If the session is continuing, the shell will receive the -.PN SaveComplete -message when all applications have completed saving state. -This message indicates that applications may again allow changes -to their state. The shell will execute the save_complete callbacks. -The \fIcall_data\fP for these callbacks is NULL. - -.NH 3 -Responding to a Shutdown -.XS -\fB\*(SN Responding to a Shutdown\fP -.XE -.LP -Callbacks registered on the die callback list are invoked when the -session manager sends a -.PN Die -message. -The callbacks on this list should do whatever is appropriate to quit -the application. -Before executing procedures on the die callback list, -the Session shell will close the connection to the session manager -and will remove the handler that watches for protocol messages. -The \fIcall_data\fP for these callbacks is NULL. - -.NH 3 -Resigning from a Session -.XS -\fB\*(SN Resigning from a Session\fP -.XE -.LP -When the Session shell widget is destroyed, the destroy method will -close the connection to the session manager by sending a -.PN ConnectionClosed -protocol message and will remove the input callback -that was watching for session protocol messages. -.LP -When -.PN XtSetValues -is used to set \fIjoin_session\fP to -.PN False , -the set_values method of the Session shell will close the -connection to the session manager if one exists by sending a -.PN ConnectionClosed -message, and \fIconnection\fP will be set to NULL. -.LP -Applications that exit in response to user actions and that do not -wait for phase 2 destroy to complete on -the Session shell should set \fIjoin_session\fP to -.PN False -before exiting. -.LP -When -.PN XtSetValues -is used to set \fIconnection\fP to NULL, -the Session shell will stop managing the connection, if one exists. -However, that session connection will not be closed. -.LP -Applications that wish to ensure continuation of a session connection -beyond the destruction of the shell should first retrieve the -\fIconnection\fP resource value, -then set the \fIconnection\fP resource to NULL, -and then they may safely destroy the widget without losing control -of the session connection. -.LP -The error callback list will be called if an unrecoverable -communications error occurs while the shell is managing the connection. -The shell will close the connection, set \fIconnection\fP to NULL, -remove the input callback, and -call the procedures registered on the error callback list. -The \fIcall_data\fP for these callbacks is NULL. -.bp diff --git a/doc/xorg-docs/specs/Xt/CH05 b/doc/xorg-docs/specs/Xt/CH05 deleted file mode 100644 index 4f15beab0..000000000 --- a/doc/xorg-docs/specs/Xt/CH05 +++ /dev/null @@ -1,783 +0,0 @@ -.\" $Xorg: CH05,v 1.3 2000/08/17 19:42:44 cpqbld Exp $ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" Digital Equipment Corporation, Maynard, Massachusetts. -.\" -.\" Permission to use, copy, modify and distribute this documentation for any -.\" purpose and without fee is hereby granted, provided that the above copyright -.\" notice appears in all copies and that both that copyright notice and this -.\" permission notice appear in supporting documentation, and that the name of -.\" Digital not be used in in advertising or publicity pertaining -.\" to distribution of the software without specific, written prior permission. -.\" Digital makes no representations about the suitability of the -.\" software described herein for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBChapter 5\fP\s-1 - -\s+1\fBPop-Up Widgets\fP\s-1 -.sp 2 -.nr H1 5 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.LP -.XS -Chapter 5 \(em Pop-Up Widgets -.XE -Pop-up widgets are used to create windows outside of the -window hierarchy defined by the widget tree. -Each pop-up child has a window that is a descendant of the root window, -so that the pop-up window is not clipped by the pop-up widget's parent window. -.\"One thing that all pop-ups in common is that they break -.\"the widget/window hierarchy. -.\"Pop-ups windows are not geometry constrained by their parent widget. -.\"Instead, they are window children of the root. -Therefore, pop-ups are created and attached differently to their widget parent -than normal widget children. -.LP -A parent of a pop-up widget does not actively manage its pop-up children; -in fact, it usually does not operate upon them in any way. -The \fIpopup_list\fP field in the -.PN CorePart -structure contains the list of its pop-up children. -This pop-up list exists mainly to provide the proper place in the widget -hierarchy for the pop-up to get resources and to provide a place for -.PN XtDestroyWidget -to look for all extant children. -.LP -A -composite -widget can have both normal and pop-up children. -A pop-up can be popped up from almost anywhere, not just by its parent. -The term \fIchild\fP always refers to a normal, geometry-managed widget -on the composite widget's list of children, and the term -\fIpop-up child\fP always refers to a -widget on the pop-up list. -.IN "pop-up" "" "@DEF@" -.IN "pop-up" "list" -.IN "pop-up" "child" - -.NH 2 -Pop-Up Widget Types -.LP -.XS -\fB\*(SN Pop-Up Widget Types\fP -.XE -There are three kinds of pop-up widgets: -.IP \(bu 5 -Modeless pop-ups -.IP -A modeless pop-up (for example, a dialog box that does not prevent -continued interaction with the rest of the application) -can usually be manipulated by the window manager -and looks like any other application window from the -user's point of view. -The application main window itself is a special case of a modeless pop-up. -.IP \(bu 5 -Modal pop-ups -.IP -A modal pop-up (for example, a dialog box that requires user input to -continue) -can sometimes be manipulated by the window manager, -and except for events that occur in the dialog box, -it disables user-event distribution to the rest of the application. -.IP \(bu 5 -Spring-loaded pop-ups -.IP -A spring-loaded pop-up (for example, a menu) -can seldom be manipulated by the window manager, -and except for events that occur in the pop-up or its descendants, -it disables user-event distribution to all other applications. -.LP -Modal pop-ups and spring-loaded pop-ups are very similar and should be coded as -if they were the same. -In fact, the same widget (for example, a ButtonBox or Menu widget) can be used both -as a modal pop-up and as a spring-loaded pop-up within the same application. -The main difference is that spring-loaded pop-ups are brought up -with the pointer and, because of the grab that the pointer button causes, -require different processing by the \*(xI. -Furthermore, all user input remap events occurring outside the spring-loaded -pop-up (e.g., in a descendant) are also delivered to the spring-loaded -pop-up after they have been dispatched to the appropriate descendant, so -that, for example, button-up can take down a spring-loaded pop-up no -matter where the -button-up occurs. -.LP -Any kind of pop-up, in turn, can pop up other widgets. -Modal and spring-loaded pop-ups can constrain user events to -the most recent such pop-up or allow user events to be dispatched -to any of the modal or spring-loaded pop-ups -currently mapped. -.LP -Regardless of their type, -all pop-up widget classes are responsible for communicating with the -X window manager and therefore are subclasses of -one of the -Shell -widget classes. - -.NH 2 -Creating a Pop-Up Shell -.XS -\fB\*(SN Creating a Pop-Up Shell\fP -.XE -.LP -.IN "pop-up" "shell" -.IN "pop-up" "child" -For a widget to be popped up, -it must be the child of a pop-up shell widget. -None of the \*(xI-supplied shells will -simultaneously manage more than one child. -Both the shell and child taken together are referred to as the pop-up. -When you need to use a pop-up, -you always refer to the pop-up by the pop-up shell, -not the child. -.sp -.LP -To create a pop-up shell, use -.PN XtCreatePopupShell . -.LP -.IN "XtCreatePopupShell" "" "@DEF@" -.sM -.FD 0 -Widget XtCreatePopupShell(\fIname\fP, \fIwidget_class\fP, \fIparent\fP, \ -\fIargs\fP, \fInum_args\fP) -.br - String \fIname\fP; -.br - WidgetClass \fIwidget_class\fP; -.br - Widget \fIparent\fP; -.br - ArgList \fIargs\fP; -.br - Cardinal \fInum_args\fP; -.FN -.IP \fIname\fP 1i -Specifies the instance name for the created shell widget. -.IP \fIwidget_class\fP 1i -Specifies the widget class pointer for the created shell widget. -.IP \fIparent\fP 1i -Specifies the parent widget. \*(cI -.IP \fIargs\fP 1i -Specifies the argument list to override any other resource specifications. -.IP \fInum_args\fP 1i -Specifies the number of entries in the argument list. -.LP -.eM -The -.PN XtCreatePopupShell -function ensures that the specified class is a subclass of -Shell -and, rather than using insert_child to attach the widget to the parent's -.IN "insert_child procedure" -\fIchildren\fP list, -attaches the shell to the parent's \fIpopup_list\fP directly. -.LP -The screen resource for this widget is determined by first scanning -\fIargs\fP for the XtNscreen argument. If no XtNscreen argument is -found, the resource database associated with the parent's screen -is queried for the resource \fIname\fP.screen, class -\fIClass\fP.Screen where \fIClass\fP is the \fIclass_name\fP -field from the -.PN CoreClassPart -of the specified \fIwidget_class\fP. -If this query fails, the parent's screen is used. -Once the screen is determined, -the resource database associated with that screen is used to retrieve -all remaining resources for the widget not specified in -\fIargs\fP. - -.LP -A spring-loaded pop-up invoked from a translation table via -.PN XtMenuPopup -must already exist -at the time that the translation is invoked, -so the translation manager can find the shell by name. -Pop-ups invoked in other ways can be created when -the pop-up actually is needed. -This delayed creation of the shell is particularly useful when you pop up -an unspecified number of pop-ups. -You can look to see if an appropriate unused shell (that is, not -currently popped up) exists and create a new shell if needed. -.sp -.LP -To create a pop-up shell using varargs lists, use -.PN XtVaCreatePopupShell . -.LP -.IN "XtVaCreatePopupShell" "" "@DEF@" -.sM -.FD 0 -Widget XtVaCreatePopupShell(\fIname\fP, \fIwidget_class\fP, \fIparent\fP, ...) -.br - String \fIname\fP; -.br - WidgetClass \fIwidget_class\fP; -.br - Widget \fIparent\fP; -.FN -.IP \fIname\fP 1i -Specifies the instance name for the created shell widget. -.IP \fIwidget_class\fP 1i -Specifies the widget class pointer for the created shell widget. -.IP \fIparent\fP 1i -Specifies the parent widget. \*(cI -.IP ... 1i -Specifies the variable argument list to override any other -resource specifications. -.LP -.eM -.PN XtVaCreatePopupShell -is identical in function to -.PN XtCreatePopupShell -with \fIthe\fP args and \fInum_args\fP parameters replaced by a varargs list as -described in Section 2.5.1. - -.NH 2 -Creating Pop-Up Children -.XS -\fB\*(SN Creating Pop-Up Children\fP -.XE -.LP -Once a pop-up shell is created, -the single child of the pop-up shell can be created -either statically or dynamically. -.LP -At startup, -an application can create the child of the pop-up shell, -which is appropriate for pop-up children composed of a fixed set -of widgets. -The application can change the state of the subparts of -the pop-up child as the application state changes. -For example, if an application creates a static menu, -it can call -.PN XtSetSensitive -(or, in general, -.PN XtSetValues ) -on any of the buttons that make up the menu. -Creating the pop-up child early means that pop-up time is minimized, -especially if the application calls -.PN XtRealizeWidget -on the pop-up shell at startup. -When the menu is needed, -all the widgets that make up the menu already exist and need only be mapped. -The menu should pop up as quickly as the X server can respond. -.LP -Alternatively, -an application can postpone the creation of the child until it is needed, -which minimizes application startup time and allows the pop-up child to -reconfigure itself each time it is popped up. -In this case, -the pop-up child creation routine might poll the application -to find out if it should change the sensitivity of any of its subparts. -.LP -Pop-up child creation does not map the pop-up, -even if you create the child and call -.PN XtRealizeWidget -on the pop-up shell. -.LP -All shells have pop-up and pop-down callbacks, -which provide the opportunity either to make last-minute changes to a -pop-up child before it is popped up or to change it after it is popped down. -Note that excessive use of pop-up callbacks can make -popping up occur more slowly. - -.NH 2 -Mapping a Pop-Up Widget -.XS -\fB\*(SN Mapping a Pop-Up Widget\fP -.XE -.LP -Pop-ups can be popped up through several mechanisms: -.IP \(bu 5 -A call to -.PN XtPopup -or -.PN XtPopupSpringLoaded . -.IP \(bu 5 -One of the supplied callback procedures -.PN XtCallbackNone , -.PN XtCallbackNonexclusive , -or -.PN XtCallbackExclusive . -.IP \(bu 5 -The standard translation action -.PN XtMenuPopup . -.LP -Some of these routines take an argument of type -.PN XtGrabKind , -which is defined as -.sp -.sM -.Ds 0 -typedef enum {XtGrabNone, XtGrabNonexclusive, XtGrabExclusive} XtGrabKind; -.De -.sp -.eM -.LP -The create_popup_child_proc procedure pointer -in the shell widget instance record is of type -.PN XtCreatePopupChildProc . -.LP -.IN "create_popup_child_proc" -.IN "Shell" "create_popup_child_proc" -.IN "XtCreatePopupChildProc" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtCreatePopupChildProc)(Widget); -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the shell widget being popped up. -.LP -.eM -To map a pop-up from within an application, use -.PN XtPopup . -.LP -.IN "XtPopup" "" "@DEF@" -.sM -.FD 0 -void XtPopup(\fIpopup_shell\fP, \fIgrab_kind\fP) -.br - Widget \fIpopup_shell\fP; -.br - XtGrabKind \fIgrab_kind\fP; -.FN -.IP \fIpopup_shell\fP 1i -Specifies the shell widget. -.IP \fIgrab_kind\fP 1i -Specifies the way in which user events should be constrained. -.LP -.eM -The -.PN XtPopup -function performs the following: -.IP \(bu 5 -Calls -.PN XtCheckSubclass -to ensure \fIpopup_shell\fP's class is a subclass of -.PN shellWidgetClass . -.IP \(bu 5 -Raises the window and returns if the shell's \fIpopped_up\fP field is already -.PN True . -.IP \(bu 5 -Calls the callback procedures on the shell's \fIpopup_callback\fP list, -specifying a pointer to the value of \fIgrab_kind\fP as the \fIcall_data\fP -argument. -.IP \(bu 5 -Sets the shell \fIpopped_up\fP field to -.PN True , -the shell \fIspring_loaded\fP field to -.PN False , -and the shell \fIgrab_kind\fP field from \fIgrab_kind\fP. -.IP \(bu 5 -If the shell's \fIcreate_popup_child_proc\fP field is non-NULL, -.PN XtPopup -calls it with \fIpopup_shell\fP as the parameter. -.IP \(bu 5 -If \fIgrab_kind\fP is either -.PN XtGrabNonexclusive -or -.PN XtGrabExclusive , -it calls -.LP -.Ds -XtAddGrab(\fIpopup_shell\fP, (\fIgrab_kind\fP == XtGrabExclusive), False) -.De -.IP \(bu 5 -Calls -.PN XtRealizeWidget -with \fIpopup_shell\fP specified. -.IP \(bu 5 -Calls -.PN XMapRaised -with the window of \fIpopup_shell\fP. -.sp -.LP -To map a spring-loaded pop-up from within an application, use -.PN XtPopupSpringLoaded . -.LP -.IN "XtPopupSpringLoaded" "" @DEF@" -.sM -.FD 0 -void XtPopupSpringLoaded(\fIpopup_shell\fP) -.br - Widget \fIpopup_shell\fP; -.FN -.IP \fIpopup_shell\fP 1i -Specifies the shell widget to be popped up. -.LP -.eM -The -.PN XtPopupSpringLoaded -function performs exactly as -.PN XtPopup -except that it sets the shell \fIspring_loaded\fP field to -.PN True -and always calls -.PN XtAddGrab -with \fIexclusive\fP -.PN True -and \fIspring-loaded\fP -.PN True . -.sp -.LP -To map a pop-up from a given widget's callback list, -you also can register one of the -.PN XtCallbackNone , -.PN XtCallbackNonexclusive , -or -.PN XtCallbackExclusive -convenience routines as callbacks, using the pop-up shell widget as the -client data. -.LP -.IN "XtCallbackNone" "" "@DEF@" -.sM -.FD 0 -void XtCallbackNone(\fIw\fP, \fIclient_data\fP, \fIcall_data\fP) -.br - Widget \fIw\fP; -.br - XtPointer \fIclient_data\fP; -.br - XtPointer \fIcall_data\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. -.IP \fIclient_data\fP 1i -Specifies the pop-up shell. -.IP \fIcall_data\fP 1i -Specifies the callback data argument, -which is not used by this procedure. -.sp -.LP -.IN "XtCallbackNonexclusive" "" "@DEF@" -.FD 0 -void XtCallbackNonexclusive(\fIw\fP, \fIclient_data\fP, \fIcall_data\fP) -.br - Widget \fIw\fP; -.br - XtPointer \fIclient_data\fP; -.br - XtPointer \fIcall_data\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. -.IP \fIclient_data\fP 1i -Specifies the pop-up shell. -.IP \fIcall_data\fP 1i -Specifies the callback data argument, -which is not used by this procedure. -.sp -.LP -.IN "XtCallbackExclusive" "" "@DEF@" -.FD 0 -void XtCallbackExclusive(\fIw\fP, \fIclient_data\fP, \fIcall_data\fP) -.br - Widget \fIw\fP; -.br - XtPointer \fIclient_data\fP; -.br - XtPointer \fIcall_data\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. -.IP \fIclient_data\fP 1i -Specifies the pop-up shell. -.IP \fIcall_data\fP 1i -Specifies the callback data argument, -which is not used by this procedure. -.LP -.eM -The -.PN XtCallbackNone , -.PN XtCallbackNonexclusive , -and -.PN XtCallbackExclusive -functions call -.PN XtPopup -with the shell specified by the \fIclient_data\fP argument -and \fIgrab_kind\fP set as the name specifies. -.PN XtCallbackNone , -.PN XtCallbackNonexclusive , -and -.PN XtCallbackExclusive -specify -.PN XtGrabNone , -.PN XtGrabNonexclusive , -and -.PN XtGrabExclusive , -respectively. -Each function then sets the widget that executed the callback list -to be insensitive by calling -.PN XtSetSensitive . -Using these functions in callbacks is not required. -In particular, -an application must provide customized code for -callbacks that create pop-up shells dynamically or that must do more than -desensitizing the button. -.sp -.LP -Within a translation table, -to pop up a menu when a key or pointer button is pressed or when the pointer -is moved into a widget, use -.PN XtMenuPopup , -or its synonym, -.PN MenuPopup . -From a translation writer's point of view, -the definition for this translation action is -.LP -.IN "MenuPopup" "" "@DEF@" -.IN "XtMenuPopup" "" "@DEF@" -.sM -.FD 0 -void XtMenuPopup(\fIshell_name\fP) -.br - String \fIshell_name\fP; -.FN -.IP \fIshell_name\fP 1i -Specifies the name of the shell widget to pop up. -.LP -.eM -.PN XtMenuPopup -is known to the translation manager, -which registers the corresponding built-in action procedure -.PN XtMenuPopupAction -using -.PN XtRegisterGrabAction -specifying \fIowner_events\fP -.PN True , -\fIevent_mask\fP -.PN ButtonPressMask -\fB|\fP -.PN ButtonReleaseMask , -and \fIpointer_mode\fP and \fIkeyboard_mode\fP -.PN GrabModeAsync . -.LP -If -.PN XtMenuPopup -is invoked on -.PN ButtonPress , -it calls -.PN XtPopupSpringLoaded -on the specified shell widget. -If -.PN XtMenuPopup -is invoked on -.PN KeyPress -or -.PN EnterWindow , -it calls -.PN XtPopup -on the specified shell widget with \fIgrab_kind\fP set to -.PN XtGrabNonexclusive . -Otherwise, the translation manager generates a -warning message and ignores the action. -.LP -.PN XtMenuPopup -tries to find the shell by searching the widget tree starting at -the widget in which it is invoked. -If it finds a shell with the specified name in the pop-up children of -that widget, it pops up the shell with the appropriate parameters. -Otherwise, it moves up the parent chain to find a pop-up child with the -specified name. -If -.PN XtMenuPopup -gets to the application top-level shell widget and has not -found a matching shell, it generates a warning and returns immediately. - -.NH 2 -Unmapping a Pop-Up Widget -.XS -\fB\*(SN Unmapping a Pop-Up Widget\fP -.XE -.LP -Pop-ups can be popped down through several mechanisms: -.IP \(bu 5 -A call to -.PN XtPopdown -.IP \(bu 5 -The supplied callback procedure -.PN XtCallbackPopdown -.IP \(bu 5 -The standard translation action -.PN XtMenuPopdown -.sp -.LP -To unmap a pop-up from within an application, use -.PN XtPopdown . -.LP -.IN "XtPopdown" "" "@DEF@" -.sM -.FD 0 -void XtPopdown(\fIpopup_shell\fP) -.br - Widget \fIpopup_shell\fP; -.FN -.IP \fIpopup_shell\fP 1i -Specifies the shell widget to pop down. -.LP -.eM -The -.PN XtPopdown -function performs the following: -.IP \(bu 5 -Calls -.PN XtCheckSubclass -.\".PN XtCheckSubclass(popup_shell, popupShellWidgetClass) -to ensure \fIpopup_shell\fP's class is a subclass of -.PN shellWidgetClass . -.IP \(bu 5 -Checks that the \fIpopped_up\fP field of \fIpopup_shell\fP is -.PN True ; -otherwise, it returns immediately. -.IP \(bu 5 -Unmaps \fIpopup_shell\fP's window and, if \fIoverride_redirect\fP is -.PN False , -sends a synthetic -.PN UnmapNotify -event as specified by the \fI\*(xC\fP. -.IP \(bu 5 -If \fIpopup_shell\fP's \fIgrab_kind\fP is either -.PN XtGrabNonexclusive -or -.PN XtGrabExclusive , -it calls -.PN XtRemoveGrab . -.\".PN XtRemoveGrab(popup_shell) -.IP \(bu 5 -Sets \fIpopup_shell\fP's \fIpopped_up\fP field to -.PN False . -.IP \(bu 5 -Calls the callback procedures on the shell's \fIpopdown_callback\fP list, -specifying a pointer to the value of the shell's \fIgrab_kind\fP field -as the \fIcall_data\fP argument. -.sp -.LP -To pop down a pop-up from a callback list, you may use the callback -.PN XtCallbackPopdown . -.LP -.IN "XtCallbackPopdown" "" "@DEF@" -.sM -.FD 0 -void XtCallbackPopdown(\fIw\fP, \fIclient_data\fP, \fIcall_data\fP) -.br - Widget \fIw\fP; -.br - XtPointer \fIclient_data\fP; -.br - XtPointer \fIcall_data\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. -.IP \fIclient_data\fP 1i -Specifies a pointer to the -.PN XtPopdownID -structure. -.IP \fIcall_data\fP 1i -Specifies the callback data argument, -which is not used by this procedure. -.LP -.eM -The -.PN XtCallbackPopdown -function casts the \fIclient_data\fP parameter to a pointer of type -.PN XtPopdownID . -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - Widget shell_widget; - Widget enable_widget; -} XtPopdownIDRec, *XtPopdownID; -.De -.LP -.eM -The \fIshell_widget\fP is the pop-up shell to pop down, -and the \fIenable_widget\fP is usually the widget that was used to pop it up -in one of the pop-up callback convenience procedures. -.LP -.PN XtCallbackPopdown -calls -.PN XtPopdown -with the specified \fIshell_widget\fP -and then calls -.PN XtSetSensitive -to resensitize \fIenable_widget\fP. -.sp -.LP -Within a translation table, -to pop down a spring-loaded menu when a key or pointer button is -released or when the -pointer is moved into a widget, use -.PN XtMenuPopdown -or its synonym, -.PN MenuPopdown . -From a translation writer's point of view, -the definition for this translation action is -.LP -.IN "XtMenuPopdown" "" "@DEF@" -.IN "MenuPopdown" "" "@DEF@" -.sM -.FD 0 -void XtMenuPopdown(\fIshell_name\fP) -.br - String \fIshell_name\fP; -.FN -.IP \fIshell_name\fP 1i -Specifies the name of the shell widget to pop down. -.LP -.eM -If a shell name is not given, -.PN XtMenuPopdown -calls -.PN XtPopdown -with the widget for which the translation is specified. -If \fIshell_name\fP is specified in the translation table, -.PN XtMenuPopdown -tries to find the shell by looking up the widget tree starting at the -widget in which it is invoked. -If it finds a shell with the specified name in the pop-up children -of that widget, it pops down the shell; -otherwise, it moves up the parent chain to find a pop-up child with the -specified name. -If -.PN XtMenuPopdown -gets to the application top-level shell widget -and cannot find a matching shell, -it generates a warning and returns immediately. -.bp diff --git a/doc/xorg-docs/specs/Xt/CH06 b/doc/xorg-docs/specs/Xt/CH06 deleted file mode 100644 index 34c2861b0..000000000 --- a/doc/xorg-docs/specs/Xt/CH06 +++ /dev/null @@ -1,1110 +0,0 @@ -.\" $Xorg: CH06,v 1.3 2000/08/17 19:42:45 cpqbld Exp $ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" Digital Equipment Corporation, Maynard, Massachusetts. -.\" -.\" Permission to use, copy, modify and distribute this documentation for any -.\" purpose and without fee is hereby granted, provided that the above copyright -.\" notice appears in all copies and that both that copyright notice and this -.\" permission notice appear in supporting documentation, and that the name of -.\" Digital not be used in in advertising or publicity pertaining -.\" to distribution of the software without specific, written prior permission. -.\" Digital makes no representations about the suitability of the -.\" software described herein for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBChapter 6\fP\s-1 - -\s+1\fBGeometry Management\fP\s-1 -.sp 2 -.nr H1 6 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.LP -.XS -Chapter 6 \(em Geometry Management -.XE -.LP -.IN "geometry_manager procedure" -.IN "Geometry Management" -.IN "Configure Window" -A widget does not directly control its size and location; -rather, its parent is responsible for controlling them. -Although the position of children is usually left up to their parent, -the widgets themselves often have the best idea of their optimal sizes -and, possibly, preferred locations. -.LP -To resolve physical layout conflicts between sibling widgets and between -a widget and its parent, the \*(xI provide the geometry management mechanism. -Almost all -composite -widgets have a geometry manager specified in the \fIgeometry_manager\fP field -in the widget class record that is responsible for the size, position, and -stacking order of the widget's children. -The only exception is fixed boxes, -which create their children themselves and can ensure that -their children will never make a geometry request. - -.NH 2 -Initiating Geometry Changes -.LP -.XS -\*(SN Initiating Geometry Changes -.XE -Parents, children, and clients each initiate geometry changes differently. -Because a parent has absolute control of its children's geometry, -it changes the geometry directly by calling -.PN XtMove\%Widget , -.PN XtResizeWidget , -or -.PN XtConfigureWidget . -A child must ask its parent for a geometry change by calling -.PN XtMakeGeometryRequest -or -.PN XtMakeResizeRequest . -An application or other client code initiates a geometry change by calling -.PN XtSetValues -on the appropriate geometry fields, -thereby giving the widget the opportunity to modify or reject the client -request before it gets propagated to the parent and the opportunity -to respond appropriately to the parent's reply. -.LP -When a widget that needs to change its size, position, border width, -or stacking depth asks its parent's geometry manager to make the desired -changes, -the geometry manager can allow the request, disallow the request, or -suggest a compromise. -.LP -When the geometry manager is asked to change the geometry of a child, -the geometry manager may also rearrange and resize any or all -of the other children that it controls. -The geometry manager can move children around freely using -.PN XtMoveWidget . -When it resizes a child (that is, changes the width, height, or -border width) other than the one making the request, -it should do so by calling -.PN XtResizeWidget . -The requesting child may be given special treatment; see Section 6.5. -It can simultaneously move and resize a child with a single call to -.PN XtConfigureWidget . -.LP -Often, geometry managers find that they can satisfy a request only if -they can reconfigure a widget that they are not in control of; in particular, -the -composite -widget may want to change its own size. -In this case, -the geometry manager makes a request to its parent's geometry manager. -Geometry requests can cascade this way to arbitrary depth. -.LP -Because such cascaded arbitration of widget geometry can involve extended -negotiation, -windows are not actually allocated to widgets at application -startup until all widgets are satisfied with their geometry; -see Sections 2.5 and 2.6. -.NT Notes -.IP 1. 5 -The \*(xI treatment of stacking requests is deficient in several areas. -Stacking requests for unrealized widgets are granted but will have no effect. -In addition, there is no way to do an -.PN XtSetValues -that will generate a stacking geometry request. -.IP 2. 5 -After a successful geometry request (one that returned -.PN XtGeometryYes ), -a widget does not know whether its resize procedure has been called. -Widgets should have resize procedures that can be called more than once -without ill effects. -.NE - -.NH 2 -General Geometry Manager Requests -.XS -\*(SN General Geometry Manager Requests -.XE -.LP -When making a geometry request, the child specifies an -.PN XtWidgetGeometry -structure. -.LP -.IN "XtGeometryMask" -.KS -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef unsigned long XtGeometryMask; - -typedef struct { - XtGeometryMask request_mode; - Position x, y; - Dimension width, height; - Dimension border_width; - Widget sibling; - int stack_mode; -} XtWidgetGeometry; -.De -.eM -.KE -.LP -To make a general geometry manager request from a widget, use -.PN XtMakeGeometryRequest . -.LP -.IN "XtMakeGeometryRequest" "" "@DEF@" -.sM -.FD 0 -XtGeometryResult XtMakeGeometryRequest(\fIw\fP, \fIrequest\fP, \ -\fIreply_return\fP) -.br - Widget \fIw\fP; -.br - XtWidgetGeometry *\fIrequest\fP; -.br - XtWidgetGeometry *\fIreply_return\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget making the request. \*(rI -.IP \fIrequest\fP 1i -Specifies the desired widget geometry (size, position, border width, -and stacking order). -.IP \fIreply_return\fP 1i -Returns the allowed widget size, or may be NULL -if the requesting widget is not interested in handling -.PN XtGeometryAlmost . -.LP -.eM -Depending on the condition, -.PN XtMakeGeometryRequest -performs the following: -.IP \(bu 5 -If the widget is unmanaged or the widget's parent is not realized, -it makes the changes and returns -.PN XtGeometryYes . -.IP \(bu 5 -If the parent's class is not a subclass of -.PN compositeWidgetClass -or the parent's \fIgeometry_manager\fP field is NULL, -it issues an error. -.IP \(bu 5 -If the widget's \fIbeing_destroyed\fP field is -.PN True , -it returns -.PN XtGeometryNo . -.IP \(bu 5 -If the widget \fIx\fP, \fIy\fP, \fIwidth\fP, \fIheight\fP, and -\fIborder_width\fP fields are -all equal to the requested values, -it returns -.PN XtGeometryYes ; -otherwise, it calls the parent's geometry_manager procedure -with the given parameters. -.IP \(bu 5 -If the parent's geometry manager returns -.PN XtGeometryYes -and if -.PN XtCWQueryOnly -is not set in \fIrequest->request_mode\fP -and if the widget is realized, -.PN XtMakeGeometryRequest -calls the -.PN XConfigureWindow -Xlib function to reconfigure the widget's window (set its size, location, -and stacking order as appropriate). -.IP \(bu 5 -If the geometry manager returns -.PN XtGeometryDone , -the change has been approved and actually has been done. -In this case, -.PN XtMakeGeometryRequest -does no configuring and returns -.PN XtGeometryYes . -.PN XtMakeGeometryRequest -never returns -.PN XtGeometryDone . -.IP \(bu 5 -Otherwise, -.PN XtMakeGeometryRequest -just returns the resulting value from the parent's geometry manager. -.LP -Children of primitive widgets are always unmanaged; therefore, -.PN XtMakeGeometryRequest -always returns -.PN XtGeometryYes -when called by a child of a primitive widget. -.LP -The return codes from geometry managers are -.IN "XtGeometryResult" -.LP -.KS -.sM -.Ds 0 -.TA .5i 1.75i -.ta .5i 1.75i -typedef enum { - XtGeometryYes, - XtGeometryNo, - XtGeometryAlmost, - XtGeometryDone -} XtGeometryResult; -.De -.eM -.KE -.LP -The \fIrequest_mode\fP definitions are from -.Pn < X11/X.h >. -.LP -.sM -.TS -lw(.5i) lw(2.5i) lw(.75i). -T{ -#define -T} T{ -.PN CWX -T} T{ -(1<<0) -T} -T{ -#define -T} T{ -.PN CWY -T} T{ -(1<<1) -T} -T{ -#define -T} T{ -.PN CWWidth -T} T{ -(1<<2) -T} -T{ -#define -T} T{ -.PN CWHeight -T} T{ -(1<<3) -T} -T{ -#define -T} T{ -.PN CWBorderWidth -T} T{ -(1<<4) -T} -T{ -#define -T} T{ -.PN CWSibling -T} T{ -(1<<5) -T} -T{ -#define -T} T{ -.PN CWStackMode -T} T{ -(1<<6) -T} -.TE -.LP -.eM -The \*(xI also support the following value. -.LP -.sM -.TS -lw(.5i) lw(2.5i) lw(.75i). -T{ -#define -T} T{ -.PN XtCWQueryOnly -T} T{ -(1<<7) -T} -.TE -.LP -.eM -.PN XtCWQueryOnly -indicates that the corresponding geometry request is only a query -as to what would happen if this geometry request were made -and that no widgets should actually be changed. -.LP -.PN XtMakeGeometryRequest , -like the -.PN XConfigureWindow -Xlib function, uses \fIrequest_mode\fP to determine which fields in the -.PN XtWidgetGeometry -structure the caller wants to specify. -.LP -The \fIstack_mode\fP definitions are from -.Pn < X11/X.h >: -.LP -.sM -.TS -lw(.5i) lw(2.5i) lw(.75i). -T{ -#define -T} T{ -.PN Above -T} T{ -0 -T} -T{ -#define -T} T{ -.PN Below -T} T{ -1 -T} -T{ -#define -T} T{ -.PN TopIf -T} T{ -2 -T} -T{ -#define -T} T{ -.PN BottomIf -T} T{ -3 -T} -T{ -#define -T} T{ -.PN Opposite -T} T{ -4 -T} -.TE -.LP -.eM -The \*(xI also support the following value. -.LP -.sM -.TS -lw(.5i) lw(2.5i) lw(.75i). -T{ -#define -T} T{ -.PN XtSMDontChange -T} T{ -5 -T} -.TE -.LP -.eM -For definition and behavior of -.PN Above , -.PN Below , -.PN TopIf , -.PN BottomIf , -and -.PN Opposite , -see Section 3.7 in \fI\*(xL\fP. -.PN XtSMDontChange -indicates that the widget wants its current stacking order preserved. - -.NH 2 -Resize Requests -.XS -\*(SN Resize Requests -.XE -.LP -To make a simple resize request from a widget, you can use -.PN XtMakeResizeRequest -as an alternative to -.PN XtMakeGeometryRequest . -.LP -.IN "XtMakeResizeRequest" "" "@DEF@" -.sM -.FD 0 -XtGeometryResult XtMakeResizeRequest(\fIw\fP, \fIwidth\fP, \fIheight\fP, \ -\fIwidth_return\fP, \fIheight_return\fP) -.br - Widget \fIw\fP; -.br - Dimension \fIwidth\fP, \fIheight\fP; -.br - Dimension *\fIwidth_return\fP, *\fIheight_return\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget making the request. \*(rI -.IP \fIwidth\fP 1i -Specify the desired widget width and height. -.br -.ns -.IP \fIheight\fP 1i -.IP \fIwidth_return\fP 1i -Return the allowed widget width and height. -.br -.ns -.IP \fIheight_return\fP 1i -.LP -.eM -The -.PN XtMakeResizeRequest -function, a simple interface to -.PN XtMakeGeometryRequest , -creates an -.PN XtWidgetGeometry -structure and specifies that width and height should change -by setting \fIrequest_mode\fP to -.PN CWWidth -\fB|\fP -.PN CWHeight . -The geometry manager is free to modify any of the other window attributes -(position or stacking order) to satisfy the resize request. -If the return value is -.PN XtGeometryAlmost , -\fIwidth_return\fP and \fIheight_return\fP contain a compromise width and height. -If these are acceptable, -the widget should immediately call -.PN XtMakeResizeRequest -again and request that the compromise width and height be applied. -If the widget is not interested in -.PN XtGeometryAlmost -replies, -it can pass NULL for \fIwidth_return\fP and \fIheight_return\fP. - -.NH 2 -Potential Geometry Changes -.XS -\*(SN Potential Geometry Changes -.XE -.LP -Sometimes a geometry manager cannot respond to -a geometry request from a child without first making a geometry request -to the widget's own parent (the original requestor's grandparent). -If the request to the grandparent would allow the parent to satisfy the -original request, -the geometry manager can make the intermediate geometry request -as if it were the originator. -On the other hand, -if the geometry manager already has determined that the original request -cannot be completely satisfied (for example, if it always denies -position changes), -it needs to tell the grandparent to respond to the intermediate request -without actually changing the geometry -because it does not know if the child will accept the compromise. -To accomplish this, the geometry manager uses -.PN XtCWQueryOnly -in the intermediate request. -.LP -When -.PN XtCWQueryOnly -is used, the geometry manager needs to cache -enough information to exactly reconstruct the intermediate request. -If the grandparent's response to the intermediate query was -.PN XtGeometryAlmost , -the geometry manager needs to cache the entire -reply geometry in the event the child accepts the parent's compromise. -.LP -If the grandparent's response was -.PN XtGeometryAlmost , -it may also be necessary to cache the entire reply geometry from -the grandparent when -.PN XtCWQueryOnly -is not used. -If the geometry manager is still able to satisfy the original request, -it may immediately accept the grandparent's compromise -and then act on the child's request. -If the grandparent's compromise geometry is insufficient to allow -the child's request and if the geometry manager is willing to offer -a different compromise to the child, -the grandparent's compromise should not be accepted until the child -has accepted the new compromise. -.LP -Note that a compromise geometry returned with -.PN XtGeometryAlmost -is guaranteed only for the next call to the same widget; -therefore, a cache of size 1 is sufficient. - -.NH 2 -Child Geometry Management: The geometry_manager Procedure -.XS -\*(SN Child Geometry Management: The geometry_manager Procedure -.XE -.LP -The geometry_manager procedure pointer in a composite widget class is of type -.PN XtGeometryHandler . -.LP -.IN "XtGeometryHandler" "" "@DEF@" -.sM -.FD 0 -typedef XtGeometryResult (*XtGeometryHandler)(Widget, XtWidgetGeometry*, \ -XtWidgetGeometry*); -.br - Widget \fIw\fP; -.br - XtWidgetGeometry *\fIrequest\fP; -.br - XtWidgetGeometry *\fIgeometry_return\fP; -.FN -.IP \fIw\fP 1.2i -Passes the widget making the request. -.IP \fIrequest\fP 1.2i -Passes the new geometry the child desires. -.IP \fIgeometry_return\fP 1.2i -Passes a geometry structure in which the geometry manager may store a -compromise. -.LP -.eM -A class can inherit its superclass's geometry manager during class -initialization. -.LP -A bit set to zero in the request's \fIrequest_mode\fP -field means that the child widget -does not care about the value of the corresponding field, -so the geometry manager can change this field as it wishes. -A bit set to 1 means that the child wants that geometry element set -to the value in the corresponding field. -.LP -If the geometry manager can satisfy all changes requested -and if -.PN XtCWQueryOnly -is not specified, -it updates the widget's \fIx\fP, \fIy\fP, \fIwidth\fP, \fIheight\fP, -and \fIborder_width\fP fields -appropriately. -Then, it returns -.PN XtGeometryYes , -and the values pointed to by the \fIgeometry_return\fP argument are undefined. -The widget's window is moved and resized automatically by -.PN XtMakeGeometryRequest . -.LP -Homogeneous composite widgets often find it convenient to treat the widget -making the request the same as any other widget, including reconfiguring -it using -.PN XtConfigureWidget -or -.PN XtResizeWidget -as part of its layout process, unless -.PN XtCWQueryOnly -is specified. -If it does this, -it should return -.PN XtGeometryDone -to inform -.PN XtMakeGeometryRequest -that it does not need to do the configuration itself. -.NT -To remain -compatible with layout techniques used in older widgets (before -.PN XtGeometryDone -was added to the \*(xI), a geometry manager should avoid using -.PN XtResizeWidget -or -.PN XtConfigureWidget -on the child making -the request because the layout process of the child may be in an -intermediate state in which it is not prepared to handle a call to its -resize procedure. A self-contained widget set may choose this -alternative geometry management scheme, however, provided that it -clearly warns widget developers of the compatibility consequences. -.NE -.LP -Although -.PN XtMakeGeometryRequest -resizes the widget's window -(if the geometry -manager returns -.PN XtGeometryYes ), -it does not call the widget class's resize procedure. -The requesting widget must perform whatever -resizing calculations are needed explicitly. -.LP -If the geometry manager disallows the request, -the widget cannot change its geometry. -The values pointed to by \fIgeometry_return\fP are undefined, -and the geometry manager returns -.PN XtGeometryNo . -.LP -Sometimes the geometry manager cannot satisfy the request exactly -but may be able to satisfy a similar request. -That is, -it could satisfy only a subset of the requests (for example, -size but not position) or a lesser request -(for example, it cannot make the child as big as the -request but it can make the child bigger than its current size). -In such cases, -the geometry manager fills in the structure pointed to by -\fIgeometry_return\fP with the actual changes -it is willing to make, including an appropriate \fIrequest_mode\fP mask, and returns -.PN XtGeometryAlmost . -If a bit in \fIgeometry_return->request_mode\fP is zero, -the geometry manager agrees not to change the corresponding value -if \fIgeometry_return\fP is used immediately -in a new request. -If a bit is 1, -the geometry manager does change that element to the corresponding -value in \fIgeometry_return\fP. -More bits may be set in \fIgeometry_return->request_mode\fP -than in the original request if -the geometry manager intends to change other fields should the -child accept the compromise. -.LP -When -.PN XtGeometryAlmost -is returned, -the widget must decide if the compromise suggested in \fIgeometry_return\fP -is acceptable. -If it is, the widget must not change its geometry directly; -rather, it must make another call to -.PN XtMakeGeometryRequest . -.LP -If the next geometry request from this child uses the -\fIgeometry_return\fP values filled in by the geometry manager with an -.PN XtGeometryAlmost -return and if there have been no intervening geometry requests on -either its parent or any of its other children, -the geometry manager must grant the request, if possible. -That is, if the child asks immediately with the returned geometry, -it should get an answer of -.PN XtGeometryYes . -However, -dynamic behavior in -the user's window manager may affect the final outcome. -.LP -To return -.PN XtGeometryYes , -the geometry manager frequently rearranges the position of other managed -children by calling -.PN XtMoveWidget . -However, a few geometry managers may sometimes change the -size of other managed children by calling -.PN XtResizeWidget -or -.PN XtConfigureWidget . -If -.PN XtCWQueryOnly -is specified, -the geometry manager must return data describing -how it would react to this geometry -request without actually moving or resizing any widgets. -.LP -Geometry managers must not assume that the \fIrequest\fP -and \fIgeometry_return\fP arguments point to independent storage. -The caller is permitted to use the same field for both, -and the geometry manager must allocate its own temporary storage, -if necessary. - -.NH 2 -Widget Placement and Sizing -.XS -\*(SN Widget Placement and Sizing -.XE -.LP -To move a sibling widget of the child making the geometry request, -the parent uses -.PN XtMoveWidget . -.LP -.IN "XtMoveWidget" "" "@DEF@" -.sM -.FD 0 -void XtMoveWidget(\fIw\fP, \fIx\fP, \fIy\fP) -.br - Widget \fIw\fP; -.br - Position \fIx\fP; -.br - Position \fIy\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. \*(rI -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the new widget x and y coordinates. -.LP -.eM -The -.PN XtMoveWidget -function returns immediately if the specified geometry fields -are the same as the old values. -Otherwise, -.PN XtMoveWidget -writes the new \fIx\fP and \fIy\fP values into the object -and, if the object is a widget and is realized, issues an Xlib -.PN XMoveWindow -call on the widget's window. -.sp -.LP -To resize a sibling widget of the child making the geometry request, -the parent uses -.PN XtResizeWidget . -.LP -.IN "XtResizeWidget" "" "@DEF@" -.sM -.FD 0 -void XtResizeWidget(\fIw\fP, \fIwidth\fP, \fIheight\fP, \fIborder_width\fP) -.br - Widget \fIw\fP; -.br - Dimension \fIwidth\fP; -.br - Dimension \fIheight\fP; -.br - Dimension \fIborder_width\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. \*(rI -.IP \fIwidth\fP 1i -.br -.ns -.IP \fIheight\fP 1i -.br -.ns -.IP \fIborder_width\fP 1i -Specify the new widget size. -.LP -.eM -The -.PN XtResizeWidget -function returns immediately if the specified geometry fields -are the same as the old values. -Otherwise, -.PN XtResizeWidget -writes the new \fIwidth\fP, \fIheight\fP, and \fIborder_width\fP values into -the object and, if the object is a widget and is realized, issues an -.PN XConfigureWindow -call on the widget's window. -.LP -If the new width or height is different from the old values, -.PN XtResizeWidget -calls the object's resize procedure to notify it of the size change. -.sp -.LP -To move and resize the sibling widget of the child making the geometry request, -the parent uses -.PN XtConfigureWidget . -.LP -.IN "XtConfigureWidget" "" "@DEF@" -.sM -.FD 0 -void XtConfigureWidget(\fIw\fP, \fIx\fP, \fIy\fP, \fIwidth\fP, \fIheight\fP, \ -\fIborder_width\fP) -.br - Widget \fIw\fP; -.br - Position \fIx\fP; -.br - Position \fIy\fP; -.br - Dimension \fIwidth\fP; -.br - Dimension \fIheight\fP; -.br - Dimension \fIborder_width\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. \*(rI -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the new widget x and y coordinates. -.IP \fIwidth\fP 1i -.br -.ns -.IP \fIheight\fP 1i -.br -.ns -.IP \fIborder_width\fP 1i -Specify the new widget size. -.LP -.eM -The -.PN XtConfigureWidget -function returns immediately if the specified new geometry fields -are all equal to the current values. -Otherwise, -.PN XtConfigureWidget -writes the new \fIx\fP, \fIy\fP, \fIwidth\fP, \fIheight\fP, -and \fIborder_width\fP values -into the object and, if the object is a widget and is realized, makes an Xlib -.PN XConfigureWindow -call on the widget's window. -.LP -If the new width or height is different from its old value, -.PN XtConfigureWidget -calls the object's resize procedure to notify it of the size change; -otherwise, it simply returns. -.sp -.LP -To resize a child widget that already has the new values of its width, -height, and border width, the parent uses -.PN XtResizeWindow . -.LP -.IN "XtResizeWindow" "" "@DEF@" -.sM -.FD 0 -void XtResizeWindow(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. \*(cI -.LP -.eM -The -.PN XtResizeWindow -function calls the -.PN XConfigureWindow -Xlib function to make the window of the specified widget match its width, -height, and border width. -This request is done unconditionally because there is no -inexpensive way to tell if these -values match the current values. -Note that the widget's resize procedure is not called. -.LP -There are very few times to use -.PN XtResizeWindow ; -instead, the parent should use -.PN XtResizeWidget . - -.NH 2 -Preferred Geometry -.XS -\*(SN Preferred Geometry -.XE -.LP -Some parents may be willing to adjust their layouts to accommodate the -preferred geometries of their children. -They can use -.PN XtQueryGeometry -to obtain the preferred geometry -and, as they see fit, can use or ignore any portion of the response. -.sp -.LP -To query a child widget's preferred geometry, use -.PN XtQueryGeometry . -.LP -.IN "XtQueryGeometry" "" "@DEF@" -.sM -.FD 0 -XtGeometryResult XtQueryGeometry(\fIw\fP, \fIintended\fP, \ -\fIpreferred_return\fP) -.br - Widget \fIw\fP; -.br - XtWidgetGeometry *\fIintended\fP; -.br - XtWidgetGeometry *\fIpreferred_return\fP; -.FN -.IP \fIw\fP 1.1i -Specifies the widget. \*(rI -.IP \fIintended\fP 1.1i -Specifies the new geometry the parent plans to give to the child, or -NULL. -.IP \fIpreferred_return\fP 1.1i -Returns the child widget's preferred geometry. -.LP -.eM -To discover a child's preferred geometry, -the child's parent stores the new -geometry in the corresponding fields of -the intended structure, sets the corresponding bits in \fIintended.request_mode\fP, -and calls -.PN XtQueryGeometry . -The parent should set only those fields that are important to it so -that the child can determine whether it may be able to attempt changes to -other fields. -.LP -.PN XtQueryGeometry -clears all bits in the \fIpreferred_return->request_mode\fP -field and checks the -\fIquery_geometry\fP field of the specified widget's class record. -If \fIquery_geometry\fP is not NULL, -.PN XtQueryGeometry -calls the query_geometry procedure and passes as arguments the -specified widget, \fIintended\fP, and \fIpreferred_return\fP structures. -If the \fIintended\fP argument is NULL, -.PN XtQueryGeometry -replaces it with a pointer to an -.PN XtWidgetGeometry -structure with \fIrequest_mode\fP equal to zero before calling the -query_geometry procedure. -.NT -If -.PN XtQueryGeometry -is called from within a geometry_manager -procedure for the widget that issued -.PN XtMakeGeometryRequest -or -.PN XtMakeResizeRequest , -the results -are not guaranteed to be consistent with the requested changes. The -change request passed to the geometry manager takes precedence over -the preferred geometry. -.NE -.sp -.LP -The query_geometry procedure pointer is of type -.PN XtGeometryHandler . -.LP -.IN "query_geometry procedure" "" "@DEF@" -.sM -.FD 0 -typedef XtGeometryResult (*XtGeometryHandler)(Widget, XtWidgetGeometry*, \ -XtWidgetGeometry*); -.br - Widget \fIw\fP; -.br - XtWidgetGeometry *\fIrequest\fP; -.br - XtWidgetGeometry *\fIpreferred_return\fP; -.FN -.IP \fIw\fP 1.2i -Passes the child widget whose preferred geometry is required. -.IP \fIrequest\fP 1.2i -Passes the geometry changes that the parent plans to make. -.IP \fIpreferred_return\fP 1.2i -Passes a structure in which the child returns its preferred geometry. -.LP -.eM -.IN "query_geometry procedure" -The query_geometry procedure is expected to examine the bits set in -\fIrequest->request_mode\fP, evaluate the preferred geometry of the widget, -and store the result in \fIpreferred_return\fP -(setting the bits in \fIpreferred_return->request_mode\fP corresponding -to those geometry fields that it cares about). -If the proposed geometry change is acceptable without modification, -the query_geometry procedure should return -.PN XtGeometryYes . -If at least one field in \fIpreferred_return\fP -with a bit set in \fIpreferred_return->request_mode\fP -is different -from the corresponding field in \fIrequest\fP -or if a bit was set in \fIpreferred_return->request_mode\fP -that was not set in the request, -the query_geometry procedure should return -.PN XtGeometryAlmost . -If the preferred geometry is identical to the current geometry, -the query_geometry procedure should return -.PN XtGeometryNo . -.NT -The query_geometry procedure may assume -that no -.PN XtMakeResizeRequest -or -.PN XtMakeGeometryRequest -is in progress -for the specified widget; that is, it is not required to construct -a reply consistent with the requested geometry if such a request -were actually outstanding. -.NE -.LP -After calling the query_geometry procedure -or if the \fIquery_geometry\fP field is NULL, -.PN XtQueryGeometry -examines all the unset bits in \fIpreferred_return->request_mode\fP -and sets the corresponding fields in \fIpreferred_return\fP -to the current values from the widget instance. -If -.PN CWStackMode -is not set, -the \fIstack_mode\fP field is set to -.PN XtSMDontChange . -.PN XtQueryGeometry -returns the value returned by the query_geometry procedure or -.PN XtGeometryYes -if the \fIquery_geometry\fP field is NULL. -.LP -Therefore, the caller can interpret a return of -.PN XtGeometryYes -as not needing to evaluate the contents of the reply and, more important, -not needing to modify its layout plans. -A return of -.PN XtGeometryAlmost -means either that both the parent and the child expressed interest -in at least one common field and the child's preference does not match -the parent's intentions or that the child expressed interest in a field that -the parent might need to consider. -A return value of -.PN XtGeometryNo -means that both the parent and the child expressed interest in a field and -that the child suggests that the field's current value in the widget instance -is its preferred value. -In addition, whether or not the caller ignores the return value or the -reply mask, it is guaranteed that the \fIpreferred_return\fP structure contains complete -geometry information for the child. -.LP -Parents are expected to call -.PN XtQueryGeometry -in their layout routine and wherever else the information is significant -after change_managed has been called. -The first time it is invoked, -the changed_managed procedure may assume that the child's current geometry -is its preferred geometry. -Thus, the child is still responsible for storing values -into its own geometry during its initialize procedure. - -.NH 2 -Size Change Management: The resize Procedure -.XS -\*(SN Size Change Management: The resize Procedure -.XE -.LP -A child can be resized by its parent at any time. -Widgets usually need to know when they have changed size -so that they can lay out their displayed data again to match the new size. -When a parent resizes a child, it calls -.PN XtResizeWidget , -which updates the geometry fields in the widget, -configures the window if the widget is realized, -and calls the child's resize procedure to notify the child. -The resize procedure pointer is of type -.PN XtWidgetProc . -.IN "resize procedure" "" "@DEF@" -.LP -If a class need not recalculate anything when a widget is resized, -it can specify NULL for the \fIresize\fP field in its class record. -This is an unusual case and should occur only for widgets -with very trivial display semantics. -The resize procedure takes a widget as its only argument. -The \fIx\fP, \fIy\fP, \fIwidth\fP, \fIheight\fP, -and \fIborder_width\fP fields of the widget contain the new values. -The resize procedure should recalculate the layout of internal data -as needed. -(For example, a centered Label in a window that changes size -should recalculate the starting position of the text.) -The widget must obey resize as a command and must not treat it as a request. -A widget must not issue an -.PN XtMakeGeometryRequest -or -.PN XtMakeResizeRequest -call from its resize procedure. -.bp diff --git a/doc/xorg-docs/specs/Xt/CH07 b/doc/xorg-docs/specs/Xt/CH07 deleted file mode 100644 index 07b36746b..000000000 --- a/doc/xorg-docs/specs/Xt/CH07 +++ /dev/null @@ -1,3555 +0,0 @@ -.\" $Xorg: CH07,v 1.4 2000/08/17 19:42:45 cpqbld Exp $ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" Digital Equipment Corporation, Maynard, Massachusetts. -.\" -.\" Permission to use, copy, modify and distribute this documentation for any -.\" purpose and without fee is hereby granted, provided that the above copyright -.\" notice appears in all copies and that both that copyright notice and this -.\" permission notice appear in supporting documentation, and that the name of -.\" Digital not be used in in advertising or publicity pertaining -.\" to distribution of the software without specific, written prior permission. -.\" Digital makes no representations about the suitability of the -.\" software described herein for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBChapter 7\fP\s-1 - -\s+1\fBEvent Management\fP\s-1 -.sp 2 -.nr H1 7 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.LP -.XS -Chapter 7 \(em Event Management -.XE -While Xlib allows the reading and processing of events anywhere in an application, -widgets in the \*(tk neither directly read events -nor grab the server or pointer. -Widgets register procedures that are to be called -when an event or class of events occurs in that widget. -.LP -A typical application consists of startup code followed by an event loop -that reads events and dispatches them by calling -the procedures that widgets have registered. -The default event loop provided by the \*(xI is -.PN XtAppMainLoop . -.LP -The event manager is a collection of functions to perform the following tasks: -.IP \(bu 5 -Add or remove event sources other than X server events (in particular, -timer interrupts, file input, or POSIX signals). -.IP \(bu 5 -Query the status of event sources. -.IP \(bu 5 -Add or remove procedures to be called when an event occurs for a particular -widget. -.IP \(bu 5 -Enable and -disable the dispatching of user-initiated events (keyboard and pointer events) -for a particular widget. -.IP \(bu 5 -Constrain the dispatching of events to a cascade of pop-up widgets. -.IP \(bu 5 -Register procedures to be called when specific events arrive. -.IP \(bu 5 -Register procedures to be called when the \*(xI will block. -.IP \(bu 5 -Enable safe operation in a multi-threaded environment. -.LP -Most widgets do not need to call any of the event handler functions explicitly. -The normal interface to X events is through the higher-level -translation manager, -which maps sequences of X events, with modifiers, into procedure calls. -Applications rarely use any of the event manager routines besides -.PN XtAppMainLoop . - -.NH 2 -Adding and Deleting Additional Event Sources -.XS -\fB\*(SN Adding and Deleting Additional Event Sources\fP -.XE -.LP -While most applications are driven only by X events, -some applications need to incorporate other sources of input -into the \*(xI event-handling mechanism. -The event manager provides routines to integrate notification of timer events -and file data pending into this mechanism. -.LP -The next section describes functions that provide input gathering from files. -The application registers the files with the \*(xI read routine. -When input is pending on one of the files, -the registered callback procedures are invoked. - -.NH 3 -Adding and Removing Input Sources -.XS -\fB\*(SN Adding and Removing Input Sources\fP -.XE -.LP -To register a new file as an input source for a given application context, use -.PN XtAppAddInput . -.LP -.IN "XtAppAddInput" "" "@DEF@" -.sM -.FD 0 -XtInputId XtAppAddInput(\fIapp_context\fP, \fIsource\fP, \fIcondition\fP, \ -\fIproc\fP, \fIclient_data\fP) -.br - XtAppContext \fIapp_context\fP; -.br - int \fIsource\fP; -.br - XtPointer \fIcondition\fP; -.br - XtInputCallbackProc \fIproc\fP; -.br - XtPointer \fIclient_data\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context that identifies the application. -.IP \fIsource\fP 1i -Specifies the source file descriptor on a POSIX-based system -or other operating-system-dependent device specification. -.IP \fIcondition\fP 1i -Specifies the mask that indicates a read, write, or exception condition -or some other operating-system-dependent condition. -.IP \fIproc\fP 1i -Specifies the procedure to be called when the condition is found. -.IP \fIclient_data\fP 1i -Specifies an argument passed to the specified procedure -when it is called. -.LP -.eM -The -.PN XtAppAddInput -function registers with the \*(xI read routine a new source of events, -which is usually file input but can also be file output. -Note that \fIfile\fP should be loosely interpreted to mean any sink -or source of data. -.PN XtAppAddInput -also specifies the conditions under which the source can generate events. -When an event is pending on this source, -the callback procedure is called. -.LP -The legal values for the \fIcondition\fP argument are operating-system-dependent. -On a POSIX-based system, -\fIsource\fP is a file number and the condition is some union of the following: -.IN "XtInputReadMask" "" "@DEF@" -.IP \fBXtInputReadMask\fR 1.5i -Specifies that \fIproc\fP is to be called when \fIsource\fP has data to be read. -.IN "XtInputWriteMask" "" "@DEF@" -.IP \fBXtInputWriteMask\fR 1.5i -Specifies that \fIproc\fP is to be called when \fIsource\fP is ready -for writing. -.IN "XtInputExceptMask" "" "@DEF@" -.IP \fBXtInputExceptMask\fR 1.5i -Specifies that \fIproc\fP is to be called when \fIsource\fP has -exception data. -.LP -Callback procedure pointers used to handle file events are of -type -.PN XtInputCallbackProc . -.LP -.IN "XtInputCallbackProc" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtInputCallbackProc)(XtPointer, int*, XtInputId*); -.br - XtPointer \fIclient_data\fP; -.br - int *\fIsource\fP; -.br - XtInputId *\fIid\fP; -.FN -.IP \fIclient_data\fP 1i -Passes the client data argument that was registered for this procedure in -.PN XtApp\%AddInput . -.IP \fIsource\fP 1i -Passes the source file descriptor generating the event. -.IP \fIid\fP 1i -Passes the id returned from the corresponding -.PN XtAppAddInput -call. -.LP -.eM -See Section 7.12 for information regarding the use of -.PN XtAppAddInput -in multiple threads. -.sp -.LP -To discontinue a source of input, use -.PN XtRemoveInput . -.LP -.IN "XtRemoveInput" "" "@DEF@" -.sM -.FD 0 -void XtRemoveInput(\fIid\fP) -.br - XtInputId \fIid\fP; -.FN -.IP \fIid\fP 1i -Specifies the id returned from the corresponding -.PN XtAppAddInput -call. -.LP -.eM -The -.PN XtRemoveInput -function causes the \*(xI read routine to stop watching for events -from the file source specified by \fIid\fP. -.LP -See Section 7.12 for information regarding the use of -.PN XtRemoveInput -in multiple threads. - -.NH 3 -Adding and Removing Blocking Notifications -.XS -\fB\*(SN Adding and Removing Blocking Notifications\fP -.XE -.LP -Occasionally it is desirable for an application to receive notification -when the \*(xI event manager detects no pending input from file sources -and no pending input from X server event sources and is about to block -in an operating system call. -.sp -.LP -To register a hook that is called immediately prior to event blocking, use -.PN XtAppAddBlockHook . -.LP -.IN "XtAppAddBlockHook" "" "@DEF@" -.sM -.FD 0 -XtBlockHookId XtAppAddBlockHook(\fIapp_context\fP, \fIproc\fP, \ -\fIclient_data\fP) -.br - XtAppContext \fIapp_context\fP; -.br - XtBlockHookProc \fIproc\fP; -.br - XtPointer \fIclient_data\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context that identifies the application. -.IP \fIproc\fP 1i -Specifies the procedure to be called before blocking. -.IP \fIclient_data\fP 1i -Specifies an argument passed to the specified procedure when it is called. -.LP -.eM -The -.PN XtAppAddBlockHook -function registers the specified procedure and returns an identifier for it. -The hook procedure \fIproc\fP is called at any time in the future when -the \*(xI are about to block pending some input. -.LP -The procedure pointers used to provide notification of event blocking -are of type -.PN XtBlockHookProc . -.LP -.IN "XtBlockHookProc" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtBlockHookProc)(XtPointer); -.br - XtPointer \fIclient_data\fP; -.FN -.IP \fIclient_data\fP 1i -Passes the client data argument that was registered for this procedure in -.PN XtApp\%AddBlockHook . -.LP -.eM -To discontinue the use of a procedure for blocking notification, use -.PN XtRemoveBlockHook . -.LP -.IN "XtRemoveBlockHook" "" "@DEF@" -.sM -.FD 0 -void XtRemoveBlockHook(\fIid\fP) -.br - XtBlockHookId \fIid\fP; -.FN -.IP \fIid\fP 1i -Specifies the identifier returned from the corresponding call to -.PN XtAppAddBlockHook . -.LP -.eM -The -.PN XtRemoveBlockHook -function removes the specified procedure from the list of procedures -that are called by the \*(xI read routine before blocking on event sources. - -.NH 3 -Adding and Removing Timeouts -.XS -\fB\*(SN Adding and Removing Timeouts\fP -.XE -.LP -The timeout facility notifies the application or the widget -through a callback procedure that a specified time interval has elapsed. -Timeout values are uniquely identified by an interval id. -.sp -.LP -To register a timeout callback, use -.PN XtAppAddTimeOut . -.LP -.IN "XtAppAddTimeOut" "" "@DEF@" -.sM -.FD 0 -XtIntervalId XtAppAddTimeOut(\fIapp_context\fP, \fIinterval\fP, \fIproc\fP, \ -\fIclient_data\fP) -.br - XtAppContext \fIapp_context\fP; -.br - unsigned long \fIinterval\fP; -.br - XtTimerCallbackProc \fIproc\fP; -.br - XtPointer \fIclient_data\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context for which the timer is to be set. -.IP \fIinterval\fP 1i -Specifies the time interval in milliseconds. -.IP \fIproc\fP 1i -Specifies the procedure to be called when the time expires. -.IP \fIclient_data\fP 1i -Specifies an argument passed to the specified procedure -when it is called. -.LP -.eM -The -.PN XtAppAddTimeOut -function creates a timeout and returns an identifier for it. -The timeout value is set to \fIinterval\fP. -The callback procedure \fIproc\fP is called when -.PN XtAppNextEvent -or -.PN XtAppProcessEvent -is next called after the time interval elapses, -and then the timeout is removed. -.LP -Callback procedure pointers used with timeouts are of -type -.PN XtTimerCallbackProc . -.LP -.IN "XtTimerCallbackProc" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtTimerCallbackProc)(XtPointer, XtIntervalId*); -.br - XtPointer \fIclient_data\fP; -.br - XtIntervalId *\fItimer\fP; -.FN -.IP \fIclient_data\fP 1i -Passes the client data argument that was registered for this procedure in -.PN XtApp\%AddTimeOut . -.IP \fItimer\fP 1i -Passes the id returned from the corresponding -.PN XtAppAddTimeOut -call. -.LP -.eM -See Section 7.12 for information regarding the use of -.PN XtAppAddTimeOut -in multiple threads. -.sp -.LP -To clear a timeout value, use -.PN XtRemoveTimeOut . -.LP -.IN "XtRemoveTimeOut" "" "@DEF@" -.sM -.FD 0 -void XtRemoveTimeOut(\fItimer\fP) -.br - XtIntervalId \fItimer\fP; -.FN -.IP \fItimer\fP 1i -Specifies the id for the timeout request to be cleared. -.LP -.eM -The -.PN XtRemoveTimeOut -function removes the pending timeout. -Note that timeouts are automatically removed once they trigger. -.LP -Please refer to Section 7.12 for information regarding the use of -.PN XtRemoveTimeOut -in multiple threads. - -.NH 3 -Adding and Removing Signal Callbacks -.XS -\fB\*(SN Adding and Removing Signal Callbacks\fP -.XE -.LP -The signal facility notifies the application or the widget through a -callback procedure that a signal or other external asynchronous event -has occurred. The registered callback procedures are uniquely identified -by a signal id. -.sp -.LP -Prior to establishing a signal handler, the application or widget should -call -.PN XtAppAddSignal -and store the resulting identifier in a place accessible to the signal -handler. When a signal arrives, the signal handler should call -.PN XtNoticeSignal -to notify the \*(xI that a signal has occured. To register a signal -callback use -.PN XtAppAddSignal . -.LP -.IN "XtAppAddSignal" "" "@DEF@" -.sM -.FD 0 -XtSignalId XtAppAddSignal(\fIapp_context\fP, \fIproc\fP, \fIclient_data\fP) -.br - XtAppContext \fIapp_context\fP; -.br - XtSignalCallbackProc \fIproc\fP; -.br - XtPointer \fIclient_data\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context that identifies the application. -.IP \fIproc\fP 1i -Specifies the procedure to be called when the signal is noticed. -.IP \fIclient_data\fP 1i -Specifies an argument passed to the specified procedure when it is called. -.LP -.eM -The callback procedure pointers used to handle signal events are of type -.PN XtSignalCallbackProc . -.LP -.IN "XtSignalCallbackProc" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtSignalCallbackProc)(XtPointer, XtSignalId*); -.br - XtPointer \fIclient_data\fP; -.br - XtSignalId *\fIid\fP; -.FN -.IP \fIclient_data\fP 1i -Passes the client data argument that was registered for this procedure in -.PN XtAppAddSignal . -.IP \fIid\fP 1i -Passes the id returned from the corresponding -.PN XtAppAddSignal -call. -.LP -.eM -To notify the \*(xI that a signal has occured, use -.PN XtNoticeSignal . -.LP -.IN "XtNoticeSignal" "" "@DEF@" -.sp -.sM -.FD 0 -void XtNoticeSignal(\fIid\fP) -.br - XtSignalId \fIid\fP; -.FN -.IP \fIid\fP 1i -Specifies the id returned from the corresponding -.PN XtAppAddSignal -call. -.LP -.eM -On a POSIX-based system, -.PN XtNoticeSignal -is the only \*(xI function that can safely be called from a signal handler. -If -.PN XtNoticeSignal -is invoked multiple times before the \*(xI are able to invoke the -registered callback, the callback is only called once. -Logically, the \*(xI maintain ``pending'' flag for each registered callback. -This flag is initially -.PN False -and is set to -.PN True -by -.PN XtNoticeSignal . -When -.PN XtAppNextEvent -or -.PN XtAppProcessEvent -(with a mask including -.PN XtIMSignal ) -is called, all registered callbacks with ``pending'' -.PN True -are invoked and the flags are reset to -.PN False . -.LP -If the signal handler wants to track how many times the signal has been -raised, it can keep its own private counter. Typically the handler would -not do any other work; the callback does the actual processing for the -signal. The \*(xI never block signals from being raised, so if a given -signal can be raised multiple times before the \*(xI can invoke the -callback for that signal, the callback must be designed to deal with -this. In another case, a signal might be raised just after the \*(xI -sets the pending flag to -.PN False -but before the callback can get control, in which case the pending flag -will still be -.PN True -after the callback returns, and the \*(xI will invoke the callback -again, even though all of the signal raises have been handled. The -callback must also be prepared to handle this case. -.LP -To remove a registered signal callback, call -.PN XtRemoveSignal . -.LP -.IN "XtRemoveSignal" "" "@DEF@" -.sM -.FD 0 -void XtRemoveSignal(\fIid\fP) -.br - XtSignalId \fIid\fP; -.FN -.IP \fIid\fP 1i -Specifies the id returned by the corresponding call to -.PN XtAppAddSignal . -.LP -.eM -The client should typically disable the source of the signal before calling -.PN XtRemoveSignal . -If the signal could have been raised again before the source was disabled -and the client wants to process it, then after disabling the source but -before calling -.PN XtRemoveSignal -the client can test for signals with -.PN XtAppPending -and process them by calling -.PN XtAppProcessEvent -with the mask -.PN XtIMSignal . - -.NH 2 -Constraining Events to a Cascade of Widgets -.XS -\fB\*(SN Constraining Events to a Cascade of Widgets\fP -.XE -.LP -.IN "Grabbing Input" -.IN "Input Grabbing" -Modal widgets are widgets that, except for the input directed to them, -lock out user input to the application. -.LP -When a modal menu or modal dialog box is popped up using -.PN XtPopup , -user events (keyboard and pointer events) that occur outside the modal -widget should be delivered to the modal widget or ignored. -In no case will user events be delivered to a widget outside -the modal widget. -.LP -Menus can pop up submenus, and dialog boxes can pop up further dialog -boxes to create a pop-up cascade. -In this case, -user events may be delivered to one of several modal widgets in the cascade. -.LP -Display-related events should be delivered outside the modal cascade so that -exposure events and the like keep the application's display up-to-date. -Any event that occurs within the cascade is delivered as usual. -The user events delivered to the most recent spring-loaded shell -in the cascade when they occur outside the cascade are called remap events -and are -.PN KeyPress , -.PN KeyRelease , -.PN ButtonPress , -and -.PN ButtonRelease . -The user events ignored when they occur outside the cascade are -.PN MotionNotify -and -.PN EnterNotify . -All other events are delivered normally. -In particular, note that this is one -way in which widgets can receive -.PN LeaveNotify -events without first receiving -.PN EnterNotify -events; they should be prepared to deal with -this, typically by ignoring any unmatched -.PN LeaveNotify -events. -.LP -.PN XtPopup -uses the -.PN XtAddGrab -and -.PN XtRemoveGrab -functions to constrain user events to a modal cascade -and subsequently to remove a grab when the modal widget is popped down. - -.sp -.LP -To constrain or redirect user input to a modal widget, use -.PN XtAddGrab . -.LP -.IN "XtAddGrab" "" "@DEF@" -.sM -.FD 0 -void XtAddGrab(\fIw\fP, \fIexclusive\fP, \fIspring_loaded\fP) -.br - Widget \fIw\fP; -.br - Boolean \fIexclusive\fP; -.br - Boolean \fIspring_loaded\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget to add to the modal cascade. \*(cI -.IP \fIexclusive\fP 1i -Specifies whether user events should be dispatched exclusively to this widget -or also to previous widgets in the cascade. -.IP \fIspring_loaded\fP 1i -Specifies whether this widget was popped up because the user pressed -a pointer button. -.LP -.eM -The -.PN XtAddGrab -function appends the widget to the modal cascade -and checks that \fIexclusive\fP is -.PN True -if \fIspring_loaded\fP is -.PN True . -If this condition is not met, -.PN XtAddGrab -generates a warning message. -.LP -The modal cascade is used by -.PN XtDispatchEvent -when it tries to dispatch a user event. -When at least one modal widget is in the widget cascade, -.PN XtDispatchEvent -first determines if the event should be delivered. -It starts at the most recent cascade entry and follows the cascade up to and -including the most recent cascade entry added with the \fIexclusive\fP parameter -.PN True . -.LP -This subset of the modal cascade along with all descendants of these widgets -comprise the active subset. -User events that occur outside the widgets in this subset are ignored -or remapped. -Modal menus with submenus generally add a submenu widget to the cascade -with \fIexclusive\fP -.PN False . -Modal dialog boxes that need to restrict user input to the most deeply nested -dialog box add a subdialog widget to the cascade with \fIexclusive\fP -.PN True . -User events that occur within the active subset are delivered to the -appropriate widget, which is usually a child or further descendant of the modal -widget. -.LP -Regardless of where in the application they occur, -remap events are always delivered to the most recent widget in the active -subset of the cascade registered with \fIspring_loaded\fP -.PN True , -if any such widget exists. -If the event -occurred in the active subset of the cascade but outside the -spring-loaded widget, it is delivered normally before being -delivered also to the spring-loaded widget. -Regardless of where it is dispatched, the \*(xI do not modify -the contents of the event. -.sp -.LP -To remove the redirection of user input to a modal widget, use -.PN XtRemoveGrab . -.LP -.IN "XtRemoveGrab" "" "@DEF@" -.sM -.FD 0 -void XtRemoveGrab(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget to remove from the modal cascade. -.LP -.eM -The -.PN XtRemoveGrab -function removes widgets from the modal cascade starting -at the most recent widget up to and including the specified widget. -It issues a warning if the specified widget is not on the modal cascade. - -.NH 3 -Requesting Key and Button Grabs -.XS -\fB\*(SN Requesting Key and Button Grabs\fP -.XE -.LP -The \*(xI provide a set of key and button grab interfaces that -are parallel to those provided by Xlib and that allow the \*(xI -to modify event dispatching when necessary. \*(tk applications and -widgets that need to passively grab keys or buttons or actively grab -the keyboard or pointer should use the -following \*(xI routines rather than the corresponding Xlib -routines. -.sp -.LP -To passively grab a single key of the keyboard, use -.PN XtGrabKey . -.LP -.IN "XtGrabKey" "" "@DEF@" -.sM -.FD 0 -void XtGrabKey(\fIwidget\fP, \fIkeycode\fP, \fImodifiers\fP, \ -\fIowner_events\fP, \fIpointer_mode\fP, \fIkeyboard_mode\fP) -.br - Widget \fIwidget\fP; -.br - KeyCode \fIkeycode\fP; -.br - Modifiers \fImodifiers\fP; -.br - Boolean \fIowner_events\fP; -.br - int \fIpointer_mode\fP, \fIkeyboard_mode\fP; -.FN -.IP \fIwidget\fP 1i -Specifies the widget in whose window the key is to be grabbed. \*(cI -.sp 6p -.IP \fIkeycode\fP -.br -.ns -.IP \fImodifiers\fP -.br -.ns -.IP \fIowner_events\fP -.br -.ns -.IP \fIpointer_mode\fP -.br -.ns -.IP \fIkeyboard_mode\fP 1i -Specify arguments to -.PN XGrabKey ; -see Section 12.2 in \fI\*(xL\fP. -.LP -.eM -.PN XtGrabKey -calls -.PN XGrabKey -specifying the widget's window as the grab -window if the widget is realized. The remaining arguments are exactly -as for -.PN XGrabKey . -If the widget is not realized, or is later unrealized, the call to -.PN XGrabKey -is performed (again) when -the widget is realized and its window becomes mapped. In the future, -if -.PN XtDispatchEvent -is called with a -.PN KeyPress -event matching the specified keycode and modifiers (which may be -.PN AnyKey -or -.PN AnyModifier , -respectively) for the -widget's window, the \*(xI will call -.PN XtUngrabKeyboard -with the timestamp from the -.PN KeyPress -event if either of the following conditions is true: -.IP \(bu 3 -There is a modal cascade and the widget is not in -the active subset of the cascade and the keyboard was not previously -grabbed, or -.IP \(bu 3 -.PN XFilterEvent -returns -.PN True . - -.sp -.LP -To cancel a passive key grab, use -.PN XtUngrabKey . -.LP -.IN "XtUngrabKey" "" "@DEF@" -.sM -.FD 0 -void XtUngrabKey(\fIwidget\fP, \fIkeycode\fP\fI, modifiers\fP) -.br - Widget \fIwidget\fP; -.br - KeyCode \fIkeycode\fP; -.br - Modifiers \fImodifiers\fP; -.FN -.IP \fIwidget\fP 1i -Specifies the widget in whose window the key was grabbed. -.sp 6p -.IP \fIkeycode\fP -.br -.ns -.IP \fImodifiers\fP 1i -Specify arguments to -.PN XUngrabKey ; -see Section 12.2 in \fI\*(xL\fP. -.LP -.eM -The -.PN XtUngrabKey -procedure calls -.PN XUngrabKey -specifying the widget's -window as the ungrab window if the widget is realized. The remaining -arguments are exactly as for -.PN XUngrabKey . -If the widget is not realized, -.PN XtUngrabKey -removes a deferred -.PN XtGrabKey -request, if any, for the specified widget, keycode, and modifiers. -.sp -.LP -To actively grab the keyboard, use -.PN XtGrabKeyboard . -.LP -.IN "XtGrabKeyboard" "" "@DEF@" -.sM -.FD 0 -int XtGrabKeyboard(\fIwidget\fP, \fIowner_events\fP, \fIpointer_mode\fP, \ -\fIkeyboard_mode\fP, \fItime\fP) -.br - Widget \fIwidget\fP; -.br - Boolean \fIowner_events\fP; -.br - int \fIpointer_mode\fP, \fIkeyboard_mode\fP; -.br - Time \fItime\fP; -.br -.FN -.IP \fIwidget\fP 1i -Specifies the widget for whose window the keyboard is to be grabbed. -\*(cI -.sp 6p -.IP \fIowner_events\fP -.br -.ns -.IP \fIpointer_mode\fP -.br -.ns -.IP \fIkeyboard_mode\fP -.br -.ns -.IP \fItime\fP 1i -Specify arguments to -.PN XGrabKeyboard ; -see Section 12.2 in \fI\*(xL\fP. -.LP -.eM -If the specified widget is realized, -.PN XtGrabKeyboard -calls -.PN XGrabKeyboard -specifying the widget's window as the grab window. The remaining -arguments and return value are exactly as for -.PN XGrabKeyboard . -If the widget is not realized, -.PN XtGrabKeyboard -immediately returns -.PN GrabNotViewable . -No future automatic ungrab is implied by -.PN XtGrabKeyboard . -.sp -.LP -To cancel an active keyboard grab, use -.PN XtUngrabKeyboard . -.LP -.IN "XtUngrabKeyboard" "" "@DEF@" -.sM -.FD 0 -void XtUngrabKeyboard(\fIwidget\fP, \fItime\fP) -.br - Widget \fIwidget\fP; -.br - Time \fItime\fP; -.FN -.IP \fIwidget\fP 1i -Specifies the widget that has the active keyboard grab. -.IP \fItime\fP 1i -Specifies the additional argument to -.PN XUngrabKeyboard ; -see Section 12.2 in \fI\*(xL\fP. -.LP -.eM -.PN XtUngrabKeyboard -calls -.PN XUngrabKeyboard -with the specified time. -.sp -.LP -To passively grab a single pointer button, use -.PN XtGrabButton . -.LP -.IN "XtGrabButton" "" "@DEF@" -.sM -.FD 0 -void XtGrabButton(\fIwidget\fP, \fIbutton\fP, \fImodifiers\fP, \ -\fIowner_events\fP, \fIevent_mask\fP, \fIpointer_mode\fP, - \fIkeyboard_mode\fP, \fIconfine_to\fP, \fIcursor\fP) -.br - Widget \fIwidget\fP; -.br - int \fIbutton\fP; -.br - Modifiers \fImodifiers\fP; -.br - Boolean \fIowner_events\fP; -.br - unsigned int \fIevent_mask\fP; -.br - int \fIpointer_mode\fP, \fIkeyboard_mode\fP; -.br - Window \fIconfine_to\fP; -.br - Cursor \fIcursor\fP; -.FN -.IP \fIwidget\fP 1i -Specifies the widget in whose window the button is to be grabbed. \*(cI -.sp 6p -.IP \fIbutton\fP -.br -.ns -.IP \fImodifiers\fP -.br -.ns -.IP \fIowner_events\fP -.br -.ns -.IP \fIevent_mask\fP -.br -.ns -.IP \fIpointer_mode\fP -.br -.ns -.IP \fIkeyboard_mode\fP -.br -.ns -.IP \fIconfine_to\fP -.br -.ns -.IP \fIcursor\fP 1i -Specify arguments to -.PN XGrabButton ; -see Section 12.1 in \fI\*(xL\fP. -.LP -.eM -.PN XtGrabButton -calls -.PN XGrabButton -specifying the widget's window as the -grab window if the widget is realized. The remaining arguments are -exactly as for -.PN XGrabButton . -If the widget is not realized, or is later unrealized, the call to -.PN XGrabButton -is performed (again) -when the widget is realized and its window becomes mapped. In the -future, if -.PN XtDispatchEvent -is called with a -.PN ButtonPress -event matching the specified button and modifiers (which may be -.PN AnyButton -or -.PN AnyModifier , -respectively) -for the widget's window, the \*(xI will call -.PN XtUngrabPointer -with the timestamp from the -.PN ButtonPress -event if either of the following conditions is true: -.IP \(bu 3 -There is a modal cascade and the -widget is not in the active subset of the cascade and the pointer was -not previously grabbed, or -.IP \(bu 3 -.PN XFilterEvent -returns -.PN True . - -.sp -.LP -To cancel a passive button grab, use -.PN XtUngrabButton . -.LP -.IN "XtUngrabButton" "" "@DEF@" -.sM -.FD 0 -void XtUngrabButton(\fIwidget\fP, \fIbutton\fP, \fImodifiers\fP) -.br - Widget \fIwidget\fP; -.br - unsigned int \fIbutton\fP; -.br - Modifiers \fImodifiers\fP; -.FN -.IP \fIwidget\fP 1i -Specifies the widget in whose window the button was grabbed. -.IP \fIbutton\fP -.br -.ns -.IP \fImodifiers\fP 1i -Specify arguments to -.PN XUngrabButton ; -see Section 12.1 in \fI\*(xL\fP. -.LP -.eM -The -.PN XtUngrabButton -procedure calls -.PN XUngrabButton -specifying the -widget's window as the ungrab window if the widget is realized. The -remaining arguments are exactly as for -.PN XUngrabButton . -If the widget is not realized, -.PN XtUngrabButton -removes a deferred -.PN XtGrabButton -request, if any, for the specified widget, button, and modifiers. -.sp -.LP -To actively grab the pointer, use -.PN XtGrabPointer . -.LP -.IN "XtGrabPointer" "" "@DEF@" -.sM -.FD 0 -int XtGrabPointer(\fIwidget\fP, \fIowner_events\fP, \fIevent_mask\fP, \ -\fIpointer_mode\fP, \fIkeyboard_mode\fP, - \fIconfine_to\fP, \fIcursor\fP, \fItime\fP) -.br - Widget \fIwidget\fP; -.br - Boolean \fIowner_events\fP; -.br - unsigned int \fIevent_mask\fP; -.br - int \fIpointer_mode\fP, \fIkeyboard_mode\fP; -.br - Window \fIconfine_to\fP; -.br - Cursor \fIcursor\fP; -.br - Time \fItime\fP; -.FN -.IP \fIwidget\fP 1i -Specifies the widget for whose window the pointer is to be grabbed. \*(cI -.sp 6p -.IP \fIowner_events\fP -.br -.ns -.IP \fIevent_mask\fP -.br -.ns -.IP \fIpointer_mode\fP -.br -.ns -.IP \fIkeyboard_mode\fP -.br -.ns -.IP \fIconfine_to\fP -.br -.ns -.IP \fIcursor\fP -.br -.ns -.IP \fItime\fP 1i -Specify arguments to -.PN XGrabPointer ; -see Section 12.1 in \fI\*(xL\fP. -.LP -.eM -If the specified widget is realized, -.PN XtGrabPointer -calls -.PN XGrabPointer , -specifying the widget's window as the grab window. The remaining -arguments and return value are exactly as for -.PN XGrabPointer . -If the widget is not realized, -.PN XtGrabPointer -immediately returns -.PN GrabNotViewable . -No future automatic ungrab is implied by -.PN XtGrabPointer . -.sp -.LP -To cancel an active pointer grab, use -.PN XtUngrabPointer . -.LP -.IN "XtUngrabPointer" "" "@DEF@" -.sM -.FD 0 -void XtUngrabPointer(\fIwidget\fP, \fItime\fP) -.br - Widget \fIwidget\fP; -.br - Time \fItime\fP; -.FN -.IP \fIwidget\fP 1i -Specifies the widget that has the active pointer grab. -.IP \fItime\fP 1i -Specifies the time argument to -.PN XUngrabPointer ; -see Section 12.1 in \fI\*(xL\fP. -.LP -.eM -.PN XtUngrabPointer -calls -.PN XUngrabPointer -with the specified time. - -.NH 2 -Focusing Events on a Child -.XS -\fB\*(SN Focusing Events on a Child\fP -.XE -.LP -To redirect keyboard input to a normal descendant of a -widget without calling -.PN XSetInputFocus , -use -.PN XtSetKeyboardFocus . -.LP -.IN "XtSetKeyboardFocus" "" "@DEF@" -.sM -.FD 0 -void XtSetKeyboardFocus(\fIsubtree\fP\, \fIdescendant\fP) -.br - Widget \fIsubtree\fP, \fIdescendant\fP; -.FN -.IP \fIsubtree\fP 1i -Specifies the subtree of the hierarchy for which the keyboard focus is -to be set. \*(cI -.IP \fIdescendant\fP 1i -Specifies either the normal (non-pop-up) descendant of \fIsubtree\fP to which -keyboard events are logically directed, or -.PN None . -It is not an error to specify -.PN None -when no input focus was previously set. \*(oI -.LP -.eM -.PN XtSetKeyboardFocus -causes -.PN XtDispatchEvent -to remap keyboard events occurring within the specified subtree -and dispatch them to the specified descendant widget or to an ancestor. -If the descendant's class is not a subclass of Core, the descendant is -replaced by its closest windowed ancestor. -.LP -When there is no modal cascade, keyboard events can be dispatched -to a widget in one of five ways. Assume the server delivered the -event to the window for widget E (because of X input focus, key or -keyboard grabs, or pointer position). -.IP \(bu 3 -If neither E nor any of E's ancestors have redirected the keyboard -focus, or if the event activated a grab for E as specified by a call -to -.PN XtGrabKey -with any value of \fIowner_events\fP, or -if the keyboard is actively grabbed by E with \fIowner_events\fP -.PN False -via -.PN XtGrabKeyboard -or -.PN XtGrabKey -on a previous key press, the event is dispatched to E. -.IP \(bu 3 -Beginning with the ancestor of E closest to the root that has -redirected the keyboard focus or E if no such ancestor exists, if -the target of that focus redirection has in turn redirected the -keyboard focus, recursively follow this focus chain to find a widget -F that has not redirected focus. -.RS -.IP \- 3 -If E is the final focus target widget F or a descendant of F, the -event is dispatched to E. -.IP \- 3 -If E is not F, an ancestor of F, or a descendant of F, and the event -activated a grab for E as specified by a call to -.PN XtGrabKey -for E, -.PN XtUngrabKeyboard -is called. -.IP \- 3 -If E is an ancestor of F, and the event is a key press, and either -.RS -.IP + 3 -E has grabbed the key with -.PN XtGrabKey -and \fIowner_events\fP -.PN False , -or -.IP + 3 -E has grabbed the key with -.PN XtGrabKey -and \fIowner_events\fP -.PN True , -and the coordinates of the event are outside the rectangle specified -by E's geometry, -.RE -then the event is dispatched to E. -.IP \- 3 -Otherwise, define A as the closest common ancestor of E and F: -.RS -.IP + 3 -If there is an active keyboard grab for any widget via either -.PN XtGrabKeyboard -or -.PN XtGrabKey -on a previous key press, or -if no widget between F and A (noninclusive) has grabbed -the key and modifier combination with -.PN XtGrabKey -and any value of \fIowner_events\fP, the event is dispatched to F. -.IP + 3 -Else, the event is dispatched to the ancestor of F closest to A -that has grabbed the key and modifier combination with -.PN XtGrabKey . -.RE -.RE -.LP -When there is a modal cascade, if the final destination widget as -identified above is in the active subset of the cascade, the event is -dispatched; otherwise the event is remapped to a spring-loaded shell -or discarded. -Regardless of where it is dispatched, the \*(xI do not modify -the contents of the event. -.LP -When \fIsubtree\fP or one of its descendants acquires the X input focus -or the pointer moves into the subtree such that keyboard events would -now be delivered to the subtree, a -.PN FocusIn -event is generated for the descendant if -.PN FocusChange -events have been selected by the descendant. -Similarly, when \fIsubtree\fP loses the X input focus -or the keyboard focus for one of its ancestors, a -.PN FocusOut -event is generated for descendant if -.PN FocusChange -events have been selected by the descendant. -.sp -.LP -A widget tree may also actively manage the X server input focus. To -do so, a widget class specifies an accept_focus procedure. -.LP -.IN "accept_focus procedure" -The accept_focus procedure pointer is of type -.PN XtAcceptFocusProc . -.LP -.IN "XtAcceptFocusProc" "" "@DEF@" -.sM -.FD 0 -typedef Boolean (*XtAcceptFocusProc)(Widget, Time*); -.br - Widget \fIw\fP; -.br - Time *\fItime\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. -.IP \fItime\fP 1i -Specifies the X time of the event causing the accept focus. -.LP -.eM -Widgets that need the input focus can call -.PN XSetInputFocus -explicitly, pursuant to the restrictions of the \fI\*(xC\fP. -To allow outside agents, such as the parent, -to cause a widget to take the input focus, -every widget exports an accept_focus procedure. -The widget returns a value indicating -whether it actually took the focus or not, -so that the parent can give the focus to another widget. -Widgets that need to know when they lose the input focus must use -the Xlib focus notification mechanism explicitly -(typically by specifying translations for -.PN FocusIn -and -.PN FocusOut -events). -Widgets classes that never want the input focus should set the -\fIaccept_focus\fP field to NULL. -.sp -.LP -To call a widget's accept_focus procedure, use -.PN XtCallAcceptFocus . -.LP -.IN "XtCallAcceptFocus" "" "@DEF@" -.sM -.FD 0 -Boolean XtCallAcceptFocus(\fIw\fP, \fItime\fP) -.br - Widget \fIw\fP; -.br - Time *\fItime\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. \*(cI -.IP \fItime\fP 1i -Specifies the X time of the event that is causing the focus change. -.LP -.eM -The -.PN XtCallAcceptFocus -function calls the specified widget's accept_focus procedure, -passing it the specified widget and time, and returns what the accept_focus -procedure returns. -If \fIaccept_focus\fP is NULL, -.PN XtCallAcceptFocus -returns -.PN False . - -.NH 3 -Events for Drawables That Are Not a Widget's Window -.XS -\fB\*(SN Events for Drawables That Are Not a Widget's Window\fP -.XE -.LP -Sometimes an application must handle events for drawables that are not -associated with widgets in its widget tree. Examples include handling -.PN GraphicsExpose -and -.PN NoExpose -events on Pixmaps, and handling -.PN PropertyNotify -events on the root window. -.LP -To register a drawable with the \*(xI event dispatching, use -.PN XtRegisterDrawable . -.LP -.IN "XtRegisterDrawable" "" "@DEF@" -.sM -.FD 0 -void XtRegisterDrawable(\fIdisplay\fP, \fIdrawable\fP, \fIwidget\fP) -.br - Display *\fIdisplay\fP; -.br - Drawable \fIdrawable\fP; -.br - Widget \fIwidget\fP; -.FN -.IP \fIdisplay\fP 1i -Specifies the drawable's display. -.IP \fIdrawable\fP 1i -Specifies the drawable to register. -.IP \fIwidget\fP 1i -Specifies the widget to register the drawable for. -.LP -.eM -.PN XtRegisterDrawable -associates the specified drawable with the specified widget -so that future calls to -.PN XtWindowToWidget -with the drawable will return the widget. -The default event dispatcher will dispatch future events that -arrive for the drawable to the widget in the same manner as -events that contain the widget's window. -.LP -If the drawable is already registered with another widget, or if the -drawable is the window of a widget in the client's widget tree, the -results of calling -.PN XtRegisterDrawable -are undefined. - -.LP -To unregister a drawable with the Intrinsics event dispatching, use -.PN XtUnregisterDrawable . -.LP -.IN "XtUnregisterDrawable" "" "@DEF@" -.sM -.FD 0 -void XtUnregisterDrawable(\fIdisplay\fP, \fIdrawable\fP) -.br - Display *\fIdisplay\fP; -.br - Drawable \fIdrawable\fP; -.FN -.IP \fIdisplay\fP 1i -Specifies the drawable's display. -.IP \fIdrawable\fP 1i -Specifies the drawable to unregister. -.LP -.eM -.PN XtUnregisterDrawable -removes an association created with -.PN XtRegisterDrawable . -If the drawable is the window of a widget in the client's widget tree -the results of calling -.PN XtUnregisterDrawable -are undefined. - -.NH 2 -Querying Event Sources -.XS -\fB\*(SN Querying Event Sources\fP -.XE -.LP -The event manager provides several functions to examine and read events -(including file and timer events) that are in the queue. -The next three functions are \*(xI equivalents of the -.PN XPending , -.PN XPeekEvent , -and -.PN XNextEvent -Xlib calls. -.sp -.LP -.IN "Events" -To determine if there are any events on the input queue for a given application, -use -.PN XtAppPending . -.LP -.IN "XtAppPending" "" "@DEF@" -.sM -.FD 0 -XtInputMask XtAppPending(\fIapp_context\fP) -.br - XtAppContext \fIapp_context\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context that identifies the application to check. -.LP -.eM -The -.PN XtAppPending -function returns a nonzero value if there are -events pending from the X server, timer pending, other input sources -pending, or signal sources pending. The -value returned is a bit mask that is the OR of -.PN XtIMXEvent , -.PN XtIMTimer , -.PN XtIMAlternateInput , -and -.PN XtIMSignal -(see -.PN XtAppProcessEvent ). -If there are no events pending, -.PN XtAppPending -flushes the output buffers of each Display in the application context -and returns zero. -.sp -.LP -To return the event from the head of a given application's input queue -without removing input from the queue, use -.PN XtAppPeekEvent . -.LP -.IN "XtAppPeekEvent" "" "@DEF@" -.sM -.FD 0 -Boolean XtAppPeekEvent(\fIapp_context\fP, \fIevent_return\fP) -.br - XtAppContext \fIapp_context\fP; -.br - XEvent *\fIevent_return\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context that identifies the application. -.IP \fIevent_return\fP 1i -Returns the event information to the specified event structure. -.LP -.eM -If there is an X event in the queue, -.PN XtAppPeekEvent -copies it into \fIevent_return\fP and returns -.PN True . -If no X input is on the queue, -.PN XtAppPeekEvent -flushes the output buffers of each Display in the application context -and blocks until some input is available -(possibly calling some timeout callbacks in the interim). -If the next available input is an X event, -.PN XtAppPeekEvent -fills in \fIevent_return\fP and returns -.PN True . -Otherwise, the input is for an input source -registered with -.PN XtAppAddInput , -and -.PN XtAppPeekEvent -returns -.PN False . -.FS -The sample implementations provides XtAppPeekEvent as described. Timeout callbacks -are called while blocking for input. If some input for an input source is -available, -.PN XtAppPeekEvent -will return -.PN True -without returning an event. -.FE -.sp -.LP -To remove and return the event -from the head of a given application's X event queue, -use -.PN XtAppNextEvent . -.LP -.IN "XtAppNextEvent" "" "@DEF@" -.sM -.FD 0 -void XtAppNextEvent(\fIapp_context\fP, \fIevent_return\fP) -.br - XtAppContext \fIapp_context\fP; -.br - XEvent *\fIevent_return\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context that identifies the application. -.IP \fIevent_return\fP 1i -Returns the event information to the specified event structure. -.LP -.eM -If the X event queue is empty, -.PN XtAppNextEvent -flushes the X output buffers of each Display in the application context -and waits for an X event while looking at the other input sources -and timeout values and calling any callback procedures triggered by them. -This wait time can be used for background processing; -see Section 7.8. - -.NH 2 -Dispatching Events -.XS -\fB\*(SN Dispatching Events\fP -.XE -.LP -The \*(xI provide functions that dispatch events -to widgets or other application code. -Every client interested in X events on a widget uses -.PN XtAddEventHandler -to register which events it is -interested in and a procedure (event handler) to be called -when the event happens in that window. -The translation manager automatically registers event handlers for widgets -that use translation tables; see Chapter 10. -.sp -.LP -Applications that need direct control of the processing of different types -of input should use -.PN XtAppProcessEvent . -.LP -.IN "XtAppProcessEvent" "" "@DEF@" -.sM -.FD 0 -void XtAppProcessEvent(\fIapp_context\fP, \fImask\fP) -.br - XtAppContext \fIapp_context\fP; -.br - XtInputMask \fImask\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context that identifies the -application for which to process input. -.IP \fImask\fP 1i -Specifies what types of events to process. -The mask is the bitwise inclusive OR of any combination of -.PN XtIMXEvent , -.PN XtIMTimer , -.PN XtIMAlternateInput , -and -.PN XtIMSignal . -As a convenience, -.PN Intrinsic.h -defines the symbolic name -.PN XtIMAll -to be the bitwise inclusive OR of these four event types. -.LP -.eM -The -.PN XtAppProcessEvent -function processes one timer, input source, signal source, or X event. -If there is no event or input of the appropriate type to process, then -.PN XtAppProcessEvent -blocks until there is. -If there is more than one type of input available to process, -it is undefined which will get processed. -Usually, this procedure is not called by client applications; see -.PN XtAppMainLoop . -.PN XtAppProcessEvent -processes timer events by calling any appropriate timer callbacks, -input sources by calling any appropriate input callbacks, -signal source by calling any appropriate signal callbacks, -and X events by -calling -.PN XtDispatchEvent . -.LP -When an X event is received, -it is passed to -.PN XtDispatchEvent , -which calls the appropriate event handlers -and passes them the widget, the event, and client-specific data -registered with each procedure. -If no handlers for that event are registered, -the event is ignored and the dispatcher simply returns. - -.sp -.LP -To dispatch an event returned by -.PN XtAppNextEvent , -retrieved directly from the Xlib queue, or synthetically constructed, -to any registered event filters or event handlers, call -.PN XtDispatchEvent . -.LP -.IN "XtDispatchEvent" "" "@DEF@" -.sM -.FD 0 -Boolean XtDispatchEvent(\fIevent\fP) -.br - XEvent *\fIevent\fP; -.FN -.IP \fIevent\fP 1i -Specifies a pointer to the event structure to be dispatched -to the appropriate event handlers. -.LP -.eM -The -.PN XtDispatchEvent -function first calls -.PN XFilterEvent -with the \fIevent\fP and the window of the widget to which the -\*(xI intend to dispatch the event, or the event window if -the \*(xI would not dispatch the event to any handlers. -If -.PN XFilterEvent -returns -.PN True -and the event activated a server grab as identified -by a previous call to -.PN XtGrabKey -or -.PN XtGrabButton , -.PN XtDispatchEvent -calls -.PN XtUngrabKeyboard -or -.PN XtUngrabPointer -with the timestamp from the event and immediately returns -.PN True . -If -.PN XFilterEvent -returns -.PN True -and a grab was not activated, -.PN XtDispatchEvent -just immediately returns -.PN True . -Otherwise, -.PN XtDispatchEvent -sends the event to the event handler functions that -have been previously registered with the dispatch routine. -.PN XtDispatchEvent -returns -.PN True -if -.PN XFilterEvent -returned -.PN True , -or if the event was dispatched to some handler, and -.PN False -if it found no handler to which to dispatch the event. -.PN XtDispatchEvent -records the last timestamp in any event that -contains a timestamp (see -.PN XtLastTimestampProcessed ), -regardless of whether it was filtered or dispatched. -If a modal cascade is active with \fIspring_loaded\fP -.PN True , -and if the event is a remap event as defined by -.PN XtAddGrab , -.PN XtDispatchEvent -may dispatch the event a second time. If it does so, -.PN XtDispatchEvent -will call -.PN XFilterEvent -again with the window of the spring-loaded widget prior to the second -dispatch, and if -.PN XFilterEvent -returns -.PN True , -the second dispatch will not be performed. - -.NH 2 -The Application Input Loop -.XS -\fB\*(SN The Application Input Loop\fP -.XE -.LP -To process all input from a given application in a continuous loop, -use the convenience procedure -.PN XtAppMainLoop . -.LP -.IN "XtAppMainLoop" "" "@DEF@" -.sM -.FD 0 -void XtAppMainLoop(\fIapp_context\fP) -.br - XtAppContext \fIapp_context\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context that identifies the application. -.LP -.eM -The -.PN XtAppMainLoop -function first reads the next incoming X event by calling -.PN XtAppNextEvent -and then dispatches the event to the appropriate registered procedure -by calling -.PN XtDispatchEvent . -This constitutes the main loop of \*(tk applications. -There is nothing special about -.PN XtAppMainLoop ; -it simply calls -.PN XtAppNextEvent -and then -.PN XtDispatchEvent -in a conditional loop. -At the bottom of the loop, it checks to see if the specified -application context's destroy flag is set. -If the flag is set, the loop breaks. -The whole loop is enclosed between a matching -.PN XtAppLock -and -.PN XtAppUnlock . -.LP -Applications can provide their own version of this loop, -which tests some global termination flag or tests that the number -of top-level widgets is larger than zero before circling back to the call to -.PN XtAppNextEvent . - -.NH 2 -Setting and Checking the Sensitivity State of a Widget -.XS -\fB\*(SN Setting and Checking the Sensitivity State of a Widget\fP -.XE -.LP -Many widgets have a mode in which they assume a different appearance -(for example, are grayed out or stippled), do not respond to user events, -and become dormant. -.LP -When dormant, -a widget is considered to be insensitive. -If a widget is insensitive, -the event manager does not dispatch any events to the widget -with an event type of -.PN KeyPress , -.PN KeyRelease , -.PN ButtonPress , -.PN ButtonRelease , -.PN MotionNotify , -.PN EnterNotify , -.PN LeaveNotify , -.PN FocusIn , -or -.PN FocusOut . -.LP -A widget can be insensitive because its \fIsensitive\fP field is -.PN False -or because one of its ancestors is insensitive and thus the widget's -\fIancestor_sensitive\fP field also is -.PN False . -A widget can but does not need to distinguish these two cases visually. -.NT -Pop-up shells will have -\fIancestor_sensitive\fP -.PN False -if the parent was insensitive when the shell -was created. Since -.PN XtSetSensitive -on the parent will not -modify the resource of the pop-up child, clients are advised to include -a resource specification of the form -``*TransientShell.ancestorSensitive: True'' -in the application defaults resource file or to -otherwise ensure that the parent is -sensitive when creating pop-up shells. -.NE -.sp -.LP -To set the sensitivity state of a widget, use -.PN XtSetSensitive . -.LP -.IN "XtSetSensitive" "" "@DEF@" -.sM -.FD 0 -void XtSetSensitive(\fIw\fP, \fIsensitive\fP) -.br - Widget \fIw\fP; -.br - Boolean \fIsensitive\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. \*(rI -.IP \fIsensitive\fP 1i -Specifies whether the widget should receive -keyboard, pointer, and focus events. -.LP -.eM -The -.PN XtSetSensitive -function first calls -.PN XtSetValues -on the current widget with an argument list specifying the -XtNsensitive resource and the new value. -If \fIsensitive\fP is -.PN False -and the widget's class is a subclass of -Composite, -.PN XtSetSensitive -recursively propagates the new value -down the child tree by calling -.PN XtSetValues -on each child to set \fIancestor_sensitive\fP to -.PN False . -If \fIsensitive\fP is -.PN True -and the widget's class is a subclass of -Composite -and the widget's \fIancestor_sensitive\fP field is -.PN True , -.PN XtSetSensitive -sets the \fIancestor_sensitive\fP of each child to -.PN True -and then recursively calls -.PN XtSetValues -on each normal descendant that is now sensitive to set -\fIancestor_sensitive\fP to -.PN True . -.LP -.PN XtSetSensitive -calls -.PN XtSetValues -to change the \fIsensitive\fP and \fIancestor_sensitive\fP fields -of each affected widget. -Therefore, when one of these changes, -the widget's set_values procedure should -take whatever display actions are needed -(for example, graying out or stippling the widget). -.LP -.PN XtSetSensitive -maintains the invariant that, if the parent has either \fIsensitive\fP -or \fIancestor_sensitive\fP -.PN False , -then all children have \fIancestor_sensitive\fP -.PN False . -.sp -.LP -To check the current sensitivity state of a widget, -use -.PN XtIsSensitive . -.LP -.IN "XtIsSensitive" "" "@DEF@" -.sM -.FD 0 -Boolean XtIsSensitive(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the object. \*(oI -.LP -.eM -The -.PN XtIsSensitive -function returns -.PN True -or -.PN False -to indicate whether user input events are being dispatched. -If object's class is a subclass of RectObj and -both \fIsensitive\fP and \fIancestor_sensitive\fP are -.PN True , -.PN XtIsSensitive -returns -.PN True ; -otherwise, it returns -.PN False . - -.NH 2 -Adding Background Work Procedures -.XS -\fB\*(SN Adding Background Work Procedures\fP -.XE -.LP -The \*(xI have some limited support for background processing. -Because most applications spend most of their time waiting for input, -you can register an idle-time work procedure -that is called when the toolkit would otherwise block in -.PN XtAppNextEvent -or -.PN XtAppProcessEvent . -Work procedure pointers are of type -.PN XtWorkProc . -.LP -.IN "XtWorkProc" "" "@DEF@" -.sM -.FD 0 -typedef Boolean (*XtWorkProc)(XtPointer); -.br - XtPointer \fIclient_data\fP; -.FN -.IP \fIclient_data\fP 1i -Passes the client data specified when the work procedure was registered. -.LP -.eM -This procedure should return -.PN True -when it is done to indicate that it -should be removed. -If the procedure returns -.PN False , -it will remain registered and called again when the -application is next idle. -Work procedures should be very judicious about how much they do. -If they run for more than a small part of a second, -interactive feel is likely to suffer. -.sp -.LP -To register a work procedure for a given application, use -.PN XtAppAddWorkProc . -.LP -.IN "XtAppAddWorkProc" "" "@DEF@" -.sM -.FD 0 -XtWorkProcId XtAppAddWorkProc(\fIapp_context\fP, \fIproc\fP, \fIclient_data\fP) -.br - XtAppContext \fIapp_context\fP; -.br - XtWorkProc \fIproc\fP; -.br - XtPointer \fIclient_data\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context that identifies the application. -.IP \fIproc\fP 1i -Specifies the procedure to be called when the application is idle. -.IP \fIclient_data\fP 1i -Specifies the argument passed to the specified procedure -when it is called. -.LP -.eM -The -.PN XtAppAddWorkProc -function adds the specified work procedure for the application identified -by \fIapp_context\fP -and returns an opaque unique identifier for this work procedure. -Multiple work procedures can be registered, -and the most recently added one is always the one that is called. -However, if a work procedure adds another work procedure, -the newly added one has lower priority than the current one. -.sp -.LP -To remove a work procedure, either return -.PN True -from the procedure when it is called or use -.PN XtRemoveWorkProc -outside of the procedure. -.LP -.IN "XtRemoveWorkProc" "" "@DEF@" -.sM -.FD 0 -void XtRemoveWorkProc(\fIid\fP) -.br - XtWorkProcId \fIid\fP; -.FN -.IP \fIid\fP 1i -Specifies which work procedure to remove. -.LP -.eM -The -.PN XtRemoveWorkProc -function explicitly removes the specified background work procedure. - -.NH 2 -X Event Filters -.XS -\*(SN X Event Filters -.XE -.LP -The event manager provides filters that can be applied to -specific X events. -The filters, which screen out events that are redundant or are temporarily -unwanted, handle -pointer motion compression, -enter/leave compression, and -exposure compression. - -.NH 3 -Pointer Motion Compression -.XS -\*(SN Pointer Motion Compression -.XE -.LP -Widgets can have a hard time keeping up with a rapid stream of -pointer motion events. Furthermore, -they usually do not care about every motion event. To throw out -redundant motion events, the widget class field \fIcompress_motion\fP should be -.PN True . -.IN "compress_motion field" -When a request for an event would return a motion event, -the \*(xI check if there are any other motion events -for the same widget immediately -following the current one and, if so, skip all but the last of them. - -.NH 3 -Enter/Leave Compression -.XS -\*(SN Enter/Leave Compression -.XE -.LP -To throw out pairs of enter and leave events that have no intervening events, -as can happen when the user moves the pointer across a widget -without stopping in it, -the widget class field \fIcompress_enterleave\fP should be -.PN True . -.IN "compress_enterleave field" -These enter and leave events are not delivered to the client -if they are found together in the input queue. - -.NH 3 -Exposure Compression -.XS -\*(SN Exposure Compression -.XE -.LP -.IN "compress_expose field" -Many widgets prefer to process a series of exposure events as a -single expose region rather than as individual rectangles. Widgets -with complex displays might use the expose region as a clip list -in a graphics context, and widgets with simple displays might -ignore the region entirely and redisplay their whole window or -might get the bounding box from the region and redisplay only that -rectangle. -.LP -In either case, these widgets do not care about getting partial exposure events. -The \fIcompress_exposure\fP field in the widget class -structure specifies the type and number of exposure events that are -dispatched to the widget's expose procedure. This field must be -initialized to one of the following values: -.sp -.sM -.Ds 0 -.TA 3i -.ta 3i -#define XtExposeNoCompress ((XtEnum)False) -#define XtExposeCompressSeries ((XtEnum)True) -#define XtExposeCompressMultiple -#define XtExposeCompressMaximal -.De -.LP -.eM -optionally ORed with any combination of the following flags (all with -implementation-defined values): -.PN XtExposeGraphicsExpose , -.PN XtExposeGraphicsExposeMerged , -.PN XtExposeNoExpose , -and -.PN XtExposeNoRegion . - -.LP -If the \fIcompress_exposure\fP field in the widget class structure does not -specify -.PN XtExposeNoCompress , -the event manager calls the widget's expose procedure only -once for a series of exposure events. -In this case, all -.PN Expose -or -.PN GraphicsExpose -events are accumulated into a region. -When the final event is received, -the event manager replaces the rectangle in the event with the -bounding box for the region -and calls the widget's expose procedure, -passing the modified exposure event and (unless -.PN XtExposeNoRegion -is specified) the region. -For more information on regions, see Section 16.5 in \fI\*(xL\fP.) -.LP -The values have the following interpretation: -.sp -.LP -.PN XtExposeNoCompress -.IN "XtExposeNoCompress" "" "@DEF@" -.IP -No exposure compression is performed; every selected event is -individually dispatched to the expose procedure with a \fIregion\fP -argument of NULL. -.sp -.LP -.PN XtExposeCompressSeries -.IN "XtExposeCompressSeries" "" "@DEF@" -.IP -Each series of exposure events is coalesced into a single event, -which is dispatched -when an exposure event with count equal to zero is reached. -.sp -.LP -.PN XtExposeCompressMultiple -.IN "XtExposeCompressMultiple" "" "@DEF@" -.IP -Consecutive series of exposure events are coalesced into a single -event, which is dispatched -when an exposure event with count equal to zero is reached and either -the event queue is empty or the next event is not an exposure event -for the same widget. -.sp -.LP -.PN XtExposeCompressMaximal -.IN "XtExposeCompressMaximal" "" "@DEF" -.IP -All expose series currently in the queue for the widget -are coalesced into a single -event without regard to intervening nonexposure events. If a -partial series is in the end of the queue, the \*(xI will -block until the end of the series is received. -.sp -.LP -The additional flags have the following meaning: -.sp -.LP -.PN XtExposeGraphicsExpose -.IN "XtExposeGraphicsExpose" "" "@DEF@" -.IP -Specifies that -.PN GraphicsExpose -events are also to be dispatched to -the expose procedure. -.PN GraphicsExpose -events are compressed, if specified, in the same manner as -.PN Expose -events. -.sp -.LP -.PN XtExposeGraphicsExposeMerged -.IN "XtExposeGraphicsExposeMerged" "" "@DEF@" -.IP -Specifies in the case of -.PN XtExposeCompressMultiple -and -.PN XtExposeCompressMaximal -that series of -.PN GraphicsExpose -and -.PN Expose -events are to be compressed together, with the final event type -determining the type of the event passed to the expose procedure. -If this flag is not set, then only series of the same event type -as the event at the head of the queue are coalesced. This flag -also implies -.PN XtExposeGraphicsExpose . -.sp -.LP -.PN XtExposeNoExpose -.IN "XtExposeNoExpose" "" "@DEF@" -.IP -Specifies that -.PN NoExpose -events are also to be dispatched to the expose procedure. -.PN NoExpose -events are never coalesced with -other exposure events or with each other. -.sp -.LP -.PN XtExposeNoRegion -.IN "XtExposeNoRegion" "" "@DEF" -.IP -Specifies that the final region argument passed to the expose -procedure is NULL. The rectangle in the event will still -contain bounding box information for the entire series of -compressed exposure events. This option saves processing time when the -region is not needed by the widget. - -.NH 2 -Widget Exposure and Visibility -.XS -\*(SN Widget Exposure and Visibility -.XE -.LP -Every primitive widget and some composite widgets display data on the screen -by means of direct Xlib calls. -Widgets cannot simply write to the screen and forget what they have done. -They must keep enough state to redisplay the window or parts -of it if a portion is obscured and then reexposed. - -.NH 3 -Redisplay of a Widget: The expose Procedure -.XS -\*(SN Redisplay of a Widget: The expose Procedure -.XE -.IN "expose procedure" -.LP -The expose procedure pointer in a widget class is of type -.PN XtExposeProc . -.LP -.IN "XtExposeProc" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtExposeProc)(Widget, XEvent*, Region); -.br - Widget \fIw\fP; -.br - XEvent *\fIevent\fP; -.br - Region \fIregion\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget instance requiring redisplay. -.IP \fIevent\fP 1i -Specifies the exposure event giving the rectangle requiring redisplay. -.IP \fIregion\fP 1i -Specifies the union of all rectangles in this exposure sequence. -.LP -.eM -The redisplay of a widget upon exposure is the responsibility of the -expose procedure in the widget's class record. -If a widget has no display semantics, -it can specify NULL for the \fIexpose\fP field. -Many composite widgets serve only as containers for their children -and have no expose procedure. -.NT -If the \fIexpose\fP procedure is NULL, -.PN XtRealizeWidget -fills in a default bit gravity of -.PN NorthWestGravity -before it calls the widget's realize procedure. -.NE -.LP -If the widget's \fIcompress_exposure\fP class field specifies -.PN XtExposeNoCompress -or -.PN XtExposeNoRegion , -or if the event type is -.PN NoExpose -(see Section 7.9.3), -\fIregion\fP is NULL. If -.PN XtExposeNoCompress -is not specified and the event type is not -.PN NoExpose , -the event is the final event in the compressed series -but \fIx\fP, \fIy\fP, \fIwidth\fP, and \fIheight\fP contain -the bounding box for all the compressed events. -The region is created and destroyed by the \*(xI, but -the widget is permitted to modify the region contents. -.LP -A small simple widget (for example, Label) can ignore the bounding box -information in the event and redisplay the entire window. -A more complicated widget (for example, Text) can use the bounding box -information to minimize the amount of calculation and redisplay it does. -A very complex widget uses the region as a clip list in a GC and -ignores the event information. -The expose procedure is not chained and is therefore -responsible for exposure of all superclass data -as well as its own. -.LP -However, -it often is possible to anticipate the display needs of several levels -of subclassing. -For example, rather than implement separate display procedures for -the widgets Label, Pushbutton, and Toggle, -you could write a single display routine in Label that uses display state -fields like -.LP -.DS -Boolean invert; -Boolean highlight; -Dimension highlight_width; -.DE -Label would have \fIinvert\fP and \fIhighlight\fP always -.PN False -and \fIhighlight_width\fP zero. -Pushbutton would dynamically set \fIhighlight\fP and \fIhighlight_width\fP, -but it would leave \fIinvert\fP always -.PN False . -Finally, Toggle would dynamically set all three. -In this case, -the expose procedures for Pushbutton and Toggle inherit -their superclass's expose procedure; -see Section 1.6.10. - -.NH 3 -Widget Visibility -.XS -\*(SN Widget Visibility -.XE -.LP -Some widgets may use substantial computing resources to produce the -data they will display. -However, this effort is wasted if the widget is not actually visible -on the screen, that is, if the widget is obscured by another application -or is iconified. -.LP -.IN "Visibility" -The \fIvisible\fP field in the -core -widget structure provides a hint to the widget that it need not compute -display data. -This field is guaranteed to be -.PN True -by the time an -exposure -event is processed if any part of the widget is visible, -but is -.PN False -if the widget is fully obscured. -.LP -Widgets can use or ignore the \fIvisible\fP hint. -If they ignore it, -they should have \fIvisible_interest\fP in their widget class record set -.PN False . -In such cases, -the \fIvisible\fP field is initialized -.PN True -and never changes. -If \fIvisible_interest\fP is -.PN True , -the event manager asks for -.PN VisibilityNotify -events for the widget and sets \fIvisible\fP to -.PN True -on -.PN VisibilityUnobscured -or -.PN VisibilityPartiallyObscured -.IN VisibilityNotify -events and -.PN False -on -.PN VisibilityFullyObscured -events. - -.NH 2 -X Event Handlers -.XS -\*(SN X Event Handlers -.XE -.LP -Event handlers are procedures called when specified events -occur in a widget. -Most widgets need not use event handlers explicitly. -Instead, they use the \*(xI translation manager. -Event handler procedure pointers are of the type -.PN XtEventHandler . -.LP -.IN "XtEventHandler" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtEventHandler)(Widget, XtPointer, XEvent*, Boolean*); -.br - Widget \fIw\fP; -.br - XtPointer \fIclient_data\fP; -.br - XEvent *\fIevent\fP; -.br - Boolean *\fIcontinue_to_dispatch\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget for which the event arrived. -.IP \fIclient_data\fP 1i -Specifies any client-specific information registered with the event handler. -.IP \fIevent\fP 1i -Specifies the triggering event. -.IP \fIcontinue_to_dispatch\fP 1i -Specifies whether the remaining event -handlers registered for the current event -should be called. -.LP -.eM -After receiving an event and before calling any event handlers, the -Boolean pointed to by \fIcontinue_to_dispatch\fP is initialized to -.PN True . -When an event handler is called, it may decide that further processing -of the event is not desirable and may store -.PN False -in this Boolean, in -which case any handlers remaining to be called for the event are -ignored. -.LP -The circumstances under which the \*(xI may add event handlers -to a widget are currently implementation-dependent. Clients must -therefore be aware that storing -.PN False -into the \fIcontinue_to_dispatch\fP argument can lead to portability problems. - -.NH 3 -Event Handlers That Select Events -.XS -\*(SN Event Handlers That Select Events -.XE -.LP -To register an event handler procedure with the dispatch mechanism, use -.PN XtAddEventHandler . -.LP -.IN "XtAddEventHandler" "" "@DEF@" -.sM -.FD 0 -void XtAddEventHandler(\fIw\fP, \fIevent_mask\fP, \fInonmaskable\fP, \ -\fIproc\fP, \fIclient_data\fP) -.br - Widget \fIw\fP; -.br - EventMask \fIevent_mask\fP; -.br - Boolean \fInonmaskable\fP; -.br - XtEventHandler \fIproc\fP; -.br - XtPointer \fIclient_data\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget for which this event handler is being registered. \*(cI -.IP \fIevent_mask\fP 1i -Specifies the event mask for which to call this procedure. -.IP \fInonmaskable\fP 1i -Specifies whether this procedure should be -called on the nonmaskable events -.Pn ( GraphicsExpose , -.PN NoExpose , -.PN SelectionClear , -.PN SelectionRequest , -.PN SelectionNotify , -.PN ClientMessage , -and -.PN MappingNotify ). -.IP \fIproc\fP 1i -Specifies the procedure to be called. -.IP \fIclient_data\fP 1i -Specifies additional data to be passed to the event handler. -.LP -.eM -The -.PN XtAddEventHandler -function registers a procedure with the dispatch mechanism that is -to be called when an event that matches the mask occurs on the specified -widget. -Each widget has a single registered event handler list, which will -contain any procedure/client_data pair exactly once regardless of -the manner in which it is registered. -If the procedure is already registered with the same \fIclient_data\fP -value, -the specified mask augments the existing mask. -If the widget is realized, -.PN XtAddEventHandler -calls -.PN XSelectInput , -if necessary. -The order in which this procedure is called relative to other handlers -registered for the same event is not defined. -.sp -.LP -To remove a previously registered event handler, use -.PN XtRemoveEventHandler . -.LP -.IN "XtRemoveEventHandler" "" "@DEF@" -.sM -.FD 0 -void XtRemoveEventHandler(\fIw\fP, \fIevent_mask\fP, \fInonmaskable\fP, \ -\fIproc\fP, \fIclient_data\fP) -.br - Widget \fIw\fP; -.br - EventMask \fIevent_mask\fP; -.br - Boolean \fInonmaskable\fP; -.br - XtEventHandler \fIproc\fP; -.br - XtPointer \fIclient_data\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget for which this procedure is registered. \*(cI -.IP \fIevent_mask\fP 1i -Specifies the event mask for which to unregister this procedure. -.IP \fInonmaskable\fP 1i -Specifies whether this procedure should be -removed on the nonmaskable events -.Pn ( GraphicsExpose , -.PN NoExpose , -.PN SelectionClear , -.PN SelectionRequest , -.PN SelectionNotify , -.PN ClientMessage , -and -.PN MappingNotify ). -.IP \fIproc\fP 1i -Specifies the procedure to be removed. -.IP \fIclient_data\fP 1i -Specifies the registered client data. -.LP -.eM -The -.PN XtRemoveEventHandler -function unregisters an event handler registered with -.PN XtAddEventHandler -or -.PN XtInsertEventHandler -for the specified events. -The request is ignored if \fIclient_data\fP does not match the value given -when the handler was registered. -If the widget is realized and no other event handler requires the event, -.PN XtRemoveEventHandler -calls -.PN XSelectInput . -If the specified procedure has not been registered -or if it has been registered with a different value of \fIclient_data\fP, -.PN XtRemoveEventHandler -returns without reporting an error. -.LP -To stop a procedure registered with -.PN XtAddEventHandler -or -.PN XtInsertEventHandler -from receiving all selected events, call -.PN XtRemoveEventHandler -with an \fIevent_mask\fP of -.PN XtAllEvents -and \fInonmaskable\fP -.PN True . -The procedure will continue to receive any events -that have been specified in calls to -.PN XtAddRawEventHandler -or -.PN XtInsertRawEventHandler . -.sp -.LP -To register an event handler procedure that receives events before or -after all previously registered event handlers, use -.PN XtInsertEventHandler . -.LP -.IN "XtListPosition" "" "@DEF@" -.IN "XtInsertEventHandler" "" "@DEF@" -.sM -.Ds 0 -typedef enum {XtListHead, XtListTail} XtListPosition; -.De -.LP -.FD 0 -void XtInsertEventHandler(\fIw\fP, \fIevent_mask\fP, \fInonmaskable\fP, \ -\fIproc\fP, \fIclient_data\fP, \fIposition\fP) -.br - Widget \fIw\fP; -.br - EventMask \fIevent_mask\fP; -.br - Boolean \fInonmaskable\fP; -.br - XtEventHandler \fIproc\fP; -.br - XtPointer \fIclient_data\fP; -.br - XtListPosition \fIposition\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget for which this event handler is being registered. \*(cI -.IP \fIevent_mask\fP 1i -Specifies the event mask for which to call this procedure. -.IP \fInonmaskable\fP 1i -Specifies whether this procedure should be -called on the nonmaskable events -.Pn ( GraphicsExpose , -.PN NoExpose , -.PN SelectionClear , -.PN SelectionRequest , -.PN SelectionNotify , -.PN ClientMessage , -and -.PN MappingNotify ). -.IP \fIproc\fP 1i -Specifies the procedure to be called. -.IP \fIclient_data\fP 1i -Specifies additional data to be passed to the client's event handler. -.IP \fIposition\fP 1i -Specifies when the event handler is to be called -relative to other previously registered handlers. -.LP -.eM -.PN XtInsertEventHandler -is identical to -.PN XtAddEventHandler -with the additional \fIposition\fP argument. If \fIposition\fP is -.PN XtListHead , -the event -handler is registered so that it is called before any event -handlers that were previously registered for the same widget. If -\fIposition\fP is -.PN XtListTail , -the event handler is registered to be called -after any previously registered event handlers. If the procedure is -already registered with the same \fIclient_data\fP value, the specified mask -augments the existing mask and the procedure is repositioned in -the list. - -.NH 3 -Event Handlers That Do Not Select Events -.XS -\*(SN Event Handlers That Do Not Select Events -.XE -.LP -On occasion, -clients need to register an event handler procedure with the -dispatch mechanism without explicitly -causing the X server to select for that event. -To do this, use -.PN XtAddRawEventHandler . -.LP -.IN "XtAddRawEventHandler" "" "@DEF@" -.sM -.FD 0 -void XtAddRawEventHandler(\fIw\fP, \fIevent_mask\fP, \fInonmaskable\fP, \ -\fIproc\fP, \fIclient_data\fP) -.br - Widget \fIw\fP; -.br - EventMask \fIevent_mask\fP; -.br - Boolean \fInonmaskable\fP; -.br - XtEventHandler \fIproc\fP; -.br - XtPointer \fIclient_data\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget for which this event handler is being registered. \*(cI -.IP \fIevent_mask\fP 1i -Specifies the event mask for which to call this procedure. -.IP \fInonmaskable\fP 1i -Specifies whether this procedure should be -called on the nonmaskable events -.Pn ( GraphicsExpose , -.PN NoExpose , -.PN SelectionClear , -.PN SelectionRequest , -.PN SelectionNotify , -.PN ClientMessage , -and -.PN MappingNotify ). -.IP \fIproc\fP 1i -Specifies the procedure to be called. -.IP \fIclient_data\fP 1i -Specifies additional data to be passed to the client's event handler. -.LP -.eM -The -.PN XtAddRawEventHandler -function is similar to -.PN XtAddEventHandler -except that it does not affect the widget's event mask and never causes an -.PN XSelectInput -for its events. -Note that the widget might already have those mask bits set -because of other nonraw event handlers registered on it. -If the procedure is already registered with the same \fIclient_data\fP, -the specified mask augments the existing mask. -The order in which this procedure is called relative to other handlers -registered for the same event is not defined. -.sp -.LP -To remove a previously registered raw event handler, use -.PN XtRemoveRawEventHandler . -.LP -.IN "XtRemoveRawEventHandler" "" "@DEF@" -.sM -.FD 0 -void XtRemoveRawEventHandler(\fIw\fP, \fIevent_mask\fP, \fInonmaskable\fP, \ -\fIproc\fP, \fIclient_data\fP) -.br - Widget \fIw\fP; -.br - EventMask \fIevent_mask\fP; -.br - Boolean \fInonmaskable\fP; -.br - XtEventHandler \fIproc\fP; -.br - XtPointer \fIclient_data\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget for which this procedure is registered. \*(cI -.IP \fIevent_mask\fP 1i -Specifies the event mask for which to unregister this procedure. -.IP \fInonmaskable\fP 1i -Specifies whether this procedure should be -removed on the nonmaskable events -.Pn ( GraphicsExpose , -.PN NoExpose , -.PN SelectionClear , -.PN SelectionRequest , -.PN SelectionNotify , -.PN ClientMessage , -and -.PN MappingNotify ). -.IP \fIproc\fP 1i -Specifies the procedure to be registered. -.IP \fIclient_data\fP 1i -Specifies the registered client data. -.LP -.eM -The -.PN XtRemoveRawEventHandler -function unregisters an event handler registered with -.PN XtAddRawEventHandler -or -.PN XtInsertRawEventHandler -for the specified events without changing -the window event mask. -The request is ignored if \fIclient_data\fP does not match the value given -when the handler was registered. -If the specified procedure has not been registered -or if it has been registered with a different value of \fIclient_data\fP, -.PN XtRemoveRawEventHandler -returns without reporting an error. -.LP -To stop a procedure -registered with -.PN XtAddRawEventHandler -or -.PN XtInsertRawEventHandler -from receiving all nonselected events, call -.PN XtRemoveRawEventHandler -with an \fIevent_mask\fP of -.PN XtAllEvents -and \fInonmaskable\fP -.PN True . -The procedure -will continue to receive any events that have been specified in calls to -.PN XtAddEventHandler -or -.PN XtInsertEventHandler . -.sp -.LP -To register an event handler procedure that receives events before or -after all previously registered event handlers without selecting for -the events, use -.PN XtInsertRawEventHandler . -.LP -.IN "XtInsertRawEventHandler" "" "@DEF@" -.sM -.FD 0 -void XtInsertRawEventHandler(\fIw\fP, \fIevent_mask\fP, \fInonmaskable\fP, \ -\fIproc\fP, \fIclient_data\fP, \fIposition\fP) -.br - Widget \fIw\fP; -.br - EventMask \fIevent_mask\fP; -.br - Boolean \fInonmaskable\fP; -.br - XtEventHandler \fIproc\fP; -.br - XtPointer \fIclient_data\fP; -.br - XtListPosition \fIposition\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget for which this event handler is being registered. \*(cI -.IP \fIevent_mask\fP 1i -Specifies the event mask for which to call this procedure. -.IP \fInonmaskable\fP 1i -Specifies whether this procedure should be -called on the nonmaskable events -.Pn ( GraphicsExpose , -.PN NoExpose , -.PN SelectionClear , -.PN SelectionRequest , -.PN SelectionNotify , -.PN ClientMessage , -and -.PN MappingNotify ). -.IP \fIproc\fP 1i -Specifies the procedure to be registered. -.IP \fIclient_data\fP 1i -Specifies additional data to be passed to the client's event handler. -.IP \fIposition\fP 1i -Specifies when the event handler is to be called -relative to other previously registered handlers. -.LP -.eM -The -.PN XtInsertRawEventHandler -function is similar to -.PN XtInsertEventHandler -except that it does not modify the widget's event -mask and never causes an -.PN XSelectInput -for the specified events. If -the procedure is already registered with the same \fIclient_data\fP -value, the -specified mask augments the existing mask and the procedure is -repositioned in the list. - -.NH 3 -Current Event Mask -.XS -\*(SN Current Event Mask -.XE -.LP -To retrieve the event mask for a given widget, use -.PN XtBuildEventMask . -.LP -.IN "XtBuildEventMask" "" "@DEF@" -.sM -.FD 0 -EventMask XtBuildEventMask(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. \*(cI -.LP -.eM -The -.PN XtBuildEventMask -function returns the event mask representing the logical OR -of all event masks for event handlers registered on the widget with -.PN XtAddEventHandler -and -.PN XtInsertEventHandler -and all event translations, including accelerators, -installed on the widget. -This is the same event mask stored into the -.PN XSetWindowAttributes -structure by -.PN XtRealizeWidget -and sent to the server when event handlers and translations are installed or -removed on the realized widget. - -.NH 3 -Event Handlers for X11 Protocol Extensions -.XS -\fB\*(SN Event Handlers for X11 Protocol Extensions\fP -.XE -.LP -To register an event handler procedure with the \*(xI dispatch -mechanism according to an event type, use -.PN XtInsertEventTypeHandler . -.LP -.IN "XtInsertEventTypeHandler" "" "@DEF" -.sM -.FD 0 -void XtInsertEventTypeHandler(\fIwidget\fP, \fIevent_type\fP, \ -\fIselect_data\fP, \fIproc\fP, \fIclient_data\fP, \fIposition\fP) -.br - Widget \fIwidget\fP; -.br - int \fIevent_type\fP; -.br - XtPointer \fIselect_data\fP; -.br - XtEventHandler \fIproc\fP; -.br - XtPointer \fIclient_data\fP; -.br - XtListPosition \fIposition\fP; -.FN -.IP \fIwidget\fP 1i -Specifies the widget for which this event handler is being registered. \*(cI -.IP \fIevent_type\fP 1i -Specifies the event type for which to call this event handler. -.IP \fIselect_data\fP 1i -Specifies data used to request events of the specified type from the server, -or NULL. -.IP \fIproc\fP 1i -Specifies the event handler to be called. -.IP \fIclient_data\fP 1i -Specifies additional data to be passed to the event handler. -.IP \fIposition\fP 1i -Specifies when the event handler is to be called relative to other -previously registered handlers. -.LP -.eM -.PN XtInsertEventTypeHandler -registers a procedure with the -dispatch mechanism that is to be called when an event that matches the -specified \fIevent_type\fP is dispatched to the specified \fIwidget\fP. -.LP -If \fIevent_type\fP specifies one of the core X protocol events, then -\fIselect_data\fP must be a pointer to a value of type -.PN EventMask , -indicating -the event mask to be used to select for the desired event. This event -mask is included in the value returned by -.PN XtBuildEventMask . -If the widget is realized, -.PN XtInsertEventTypeHandler -calls -.PN XSelectInput -if necessary. Specifying NULL for \fIselect_data\fP is equivalent to -specifying a pointer to an event mask containing 0. This is similar -to the -.PN XtInsertRawEventHandler -function. -.LP -If \fIevent_type\fP specifies an extension event type, then the semantics of -the data pointed to by \fIselect_data\fP are defined by the extension -selector registered for the specified event type. -.LP -In either case the \*(xI are not required to copy the data -pointed to by \fIselect_data\fP, so the caller must ensure that it remains -valid as long as the event handler remains registered with this value -of \fIselect_data\fP. -.LP -The \fIposition\fP argument allows the client to control the order of -invocation of event handlers registered for the same event type. If -the client does not care about the order, it should normally specify -.PN XtListTail , -which registers this event handler after any previously -registered handlers for this event type. -.LP -Each widget has a single registered event handler list, which will -contain any procedure/client_data pair exactly once if it is -registered with -.PN XtInsertEventTypeHandler , -regardless of the manner -in which it is registered and regardless of the value(s) -of \fIselect_data\fP. If the procedure is already registered with the -same \fIclient_data\fP value, the specified mask augments the existing -mask and the procedure is repositioned in the list. -.sp -.LP -To remove an event handler registered with -.PN XtInsertEventTypeHandler , -use -.PN XtRemoveEventTypeHandler . -.LP -.IN "XtRemoveEventTypeHandler" "" "@DEF" -.sM -.FD 0 -void XtRemoveEventTypeHandler(\fIwidget\fP, \fIevent_type\fP, \ -\fIselect_data\fP, \fIproc\fP, \fIclient_data\fP) -.br - Widget \fIwidget\fP; -.br - int \fIevent_type\fP; -.br - XtPointer \fIselect_data\fP; -.br - XtEventHandler \fIproc\fP; -.br - XtPointer \fIclient_data\fP; -.FN -.IP \fIwidget\fP 1i -Specifies the widget for which the event handler was registered. \*(cI -.IP \fIevent_type\fP 1i -Specifies the event type for which the handler was registered. -.IP \fIselect_data\fP 1i -Specifies data used to deselect events of the specified type -from the server, or NULL. -.IP \fIproc\fP 1i -Specifies the event handler to be removed. -.IP \fIclient_data\fP 1i -Specifies the additional client data with which the procedure was registered. -.LP -.eM -The -.PN XtRemoveEventTypeHandler -function unregisters an event handler -registered with -.PN XtInsertEventTypeHandler -for the specified event type. -The request is ignored if \fIclient_data\fP does not match the value given -when the handler was registered. -.LP -If \fIevent_type\fP specifies one of the core X protocol events, -\fIselect_data\fP must be a pointer to a value of type -.PN EventMask, indicating the event -mask to be used to deselect for the appropriate event. If the widget -is realized, -.PN XtRemoveEventTypeHandler -calls -.PN XSelectInput -if necessary. -Specifying NULL for \fIselect_data\fP is equivalent to specifying a pointer -to an event mask containing 0. This is similar to the -.PN XtRemoveRawEventHandler -function. -.LP -If \fIevent_type\fP specifies an extension event type, then the semantics of -the data pointed to by \fIselect_data\fP are defined by the extension -selector registered for the specified event type. -.sp -.LP -To register a procedure to select extension events for a widget, use -.PN XtRegisterExtensionSelector . -.LP -.IN "XtRegisterExtensionSelector" "" "@DEF@" -.sM -.FD 0 -void XtRegisterExtensionSelector(\fIdisplay\fP, \fImin_event_type\fP, \ -\fImax_event_type\fP, \fIproc\fP, - \fIclient_data\fP) -.br - Display \fI*display\fP; -.br - int \fImin_event_type\fP; -.br - int \fImax_event_type\fP; -.br - XtExtensionSelectProc \fIproc\fP; -.br - XtPointer \fIclient_data\fP; -.FN -.IP \fIdisplay\fP 1.5i -Specifies the display for which the extension selector is to be registered. -.IP \fImin_event_type\fP -.IP \fImax_event_type\fP 1.5i -Specifies the range of event types for the extension. -.IP \fIproc\fP 1.5i -Specifies the extension selector procedure. -.IP \fIclient_data\fP 1.5i -Specifies additional data to be passed to the extension selector. -.LP -.eM -The -.PN XtRegisterExtensionSelector -function registers a procedure to arrange -for the delivery of extension events to widgets. -.LP -If \fImin_event_type\fP and \fImax_event_type\fP match the parameters -to a previous call to -.PN XtRegisterExtensionSelector -for the same \fIdisplay\fP, then \fIproc\fP and \fIclient_data\fP -replace the previously -registered values. If the range specified by \fImin_event_type\fP -and \fImax_event_type\fP overlaps the range of the parameters to a -previous call for the same display in any other way, an error results. -.LP -When a widget is realized, -after the \fIcore.realize\fP method is called, -the \*(xI check to see if any event -handler specifies an event type within the range of a registered -extension selector. If so, the \*(xI call each such selector. -If an event type handler is added or removed, the \*(xI check to -see if the event type falls within the range of a registered extension -selector, and if it does, calls the selector. In either case the \*(xI -pass a list of all the widget's event types that are within the -selector's range. The corresponding select data are also passed. The -selector is responsible for enabling the delivery of extension events -required by the widget. -.sp -.LP -An extension selector is of type -.PN XtExtensionSelectProc . -.LP -.IN "XtExtensionSelectProc" "" "@DEF" -.sM -.FD 0 -typedef void (*XtExtensionSelectProc)(Widget, int *, XtPointer *, int, \ -XtPointer); -.br - Widget \fIwidget\fP; -.br - int *\fIevent_types\fP; -.br - XtPointer *\fIselect_data\fP; -.br - int \fIcount\fP; -.br - XtPointer \fIclient_data\fP; -.FN -.IP \fIwidget\fP 1i -Specifies the widget that is being realized or is having -an event handler added or removed. -.IP \fIevent_types\fP 1i -Specifies a list of event types that the widget has -registered event handlers for. -.IP \fIselect_data\fP 1i -Specifies a list of the select_data parameters specified in -.PN XtInsertEventTypeHandler . -.IP \fIcount\fP 1i -Specifies the number of entries in the \fIevent_types\fP and \fIselect_data\fP -lists. -.IP \fIclient_data\fP 1i -Specifies the additional client data with which the procedure was registered. -.LP -.eM -The \fIevent_types\fP and \fIselect_data\fP lists will always have the -same number of elements, specified by \fIcount\fP. -Each event type/select data pair represents one call to -.PN XtInsertEventTypeHandler . -.sp -.LP -To register a procedure to dispatch events of a specific type within -.PN XtDispatchEvent , -use -.PN XtSetEventDispatcher . -.LP -.IN "XtSetEventDispatcher" "" "@DEF@" -.sM -.FD 0 -XtEventDispatchProc XtSetEventDispatcher(\fIdisplay\fP, \fIevent_type\fP, \ -\fIproc\fP) -.br - Display *\fIdisplay\fP; -.br - int \fIevent_type\fP; -.br - XtEventDispatchProc \fIproc\fP; -.FN -.IP \fIdisplay\fP 1i -Specifies the display for which the event dispatcher is to be registered. -.IP \fIevent_type\fP 1i -Specifies the event type for which the dispatcher should be invoked. -.IP \fIproc\fP 1i -Specifies the event dispatcher procedure. -.LP -.eM -The -.PN XtSetEventDispatcher -function registers the event dispatcher procedure specified by \fIproc\fP -for events with the type \fIevent_type\fP. The previously registered -dispatcher (or the default dispatcher if there was no previously registered -dispatcher) is returned. If \fIproc\fP is NULL, the default procedure is -restored for the specified type. -.LP -In the future, when -.PN XtDispatchEvent -is called with an event type of \fIevent_type\fP, the specified \fIproc\fP -(or the default dispatcher) is invoked to determine a widget -to which to dispatch the event. -.LP -The default dispatcher handles the \*(xI modal cascade and keyboard -focus mechanisms, handles the semantics of \fIcompress_enterleave\fP -and \fIcompress_motion\fP, and discards all extension events. -.sp -.LP -An event dispatcher procedure pointer is of type -.PN XtEventDispatchProc . -.LP -.IN "XtEventDispatchProc" "" "@DEF@" -.sM -.FD 0 -typedef Boolean (*XtEventDispatchProc)(XEvent*) -.br - XEvent *\fIevent\fP; -.FN -.IP \fIevent\fP 1i -Passes the event to be dispatched. -.LP -.eM -The event dispatcher procedure should determine whether this event is of -a type that should be dispatched to a widget. -.LP -If the event should be dispatched to a widget, the event dispatcher -procedure should determine the appropriate widget to receive the -event, call -.PN XFilterEvent -with the window of this widget, or -.PN None -if the event is to be discarded, and if -.PN XFilterEvent -returns -.PN False , -dispatch the event to the widget using -.PN XtDispatchEventToWidget . -The procedure should return -.PN True -if either -.PN XFilterEvent -or -.PN XtDispatchEventToWidget -returned -.PN True -and -.PN False -otherwise. -.LP -If the event should not be dispatched to a widget, the event -dispatcher procedure should attempt to dispatch the event elsewhere as -appropriate and return -.PN True -if it successfully dispatched the event and -.PN False -otherwise. -.sp -.LP -Some dispatchers for extension events may wish to forward events -according to the Intrinsics' keyboard focus mechanism. To determine -which widget is the end result of keyboard event forwarding, use -.PN XtGetKeyboardFocusWidget . -.LP -.IN "XtGetKeyboardFocusWidget" "" "@DEF@" -.sM -.FD 0 -Widget XtGetKeyboardFocusWidget(\fIwidget\fP) -.br - Widget \fIwidget\fP; -.FN -.IP \fIwidget\fP 1i -Specifies the widget to get forwarding information for. -.LP -.eM -The -.PN XtGetKeyboardFocusWidget -function returns the widget that would be the end result of keyboard -event forwarding for a keyboard event for the specified widget. -.sp -.LP -To dispatch an event to a specified widget, use -.PN XtDispatchEventToWidget . -.LP -.IN "XtDispatchEventToWidget" "" "@DEF@" -.sM -.FD 0 -Boolean XtDispatchEventToWidget(\fIwidget\fP, \fIevent\fP) -.br - Widget \fIwidget\fP; -.br - XEvent *\fIevent\fP; -.FN -.IP \fIwidget\fP 1i -Specifies the widget to which to dispatch the event. -.IP \fIevent\fP 1i -Specifies a pointer to the event to be dispatched. -.LP -.eM -The -.PN XtDispatchEventToWidget -function scans the list of registered event handlers for the -specified widget and calls each handler that has been registered -for the specified event type, subject to the \fIcontinue_to_dispatch\fP -value returned by each handler. -The \*(xI behave as if event handlers were registered at the head -of the list for -.PN Expose , -.PN NoExpose , -.PN GraphicsExpose , -and -.PN VisibilityNotify -events to invoke the widget's expose procedure according to the exposure -compression rules and to update the widget's \fIvisible\fP field -if \fIvisible_interest\fP is -.PN True . -These internal event handlers never set \fIcontinue_to_dispatch\fP to -.PN False . -.LP -.PN XtDispatchEventToWidget -returns -.PN True -if any event handler was called and -.PN False -otherwise. - -.NH 2 -Using the \*(xI in a Multi-Threaded Environment -.XS -\*(SN Using the \*(xI in a Multi-Threaded Environment -.XE -.LP -The \*(xI may be used in environments that offer multiple threads -of execution within the context of a single process. A multi-threaded -application using the \*(xI must explicitly initialize the toolkit -for mutually exclusive access by calling -.PN XtToolkitThreadInitialize . - -.NH 3 -Initializing a Multi-Threaded \*(xI Application -.XS -\fB\*(SN Initializing a Multi-Threaded \*(xI Application\fP -.XE -.LP -To test and initialize \*(xI support for mutually exclusive thread -access, call -.PN XtToolkitThreadInitialize . -.LP -.IN "XtToolkitThreadInitialize" "" "@DEF@" -.sM -.FD 0 -Boolean XtToolkitThreadInitialize() -.FN -.LP -.eM -.PN XtToolkitThreadInitialize -returns \fBTrue\fP if the \*(xI support mutually exclusive thread -access, otherwise it returns \fBFalse\fP. \fBXtToolkitThreadInitialize\fP -must be called before -.PN XtCreateApplicationContext , -.PN XtAppInitialize , -.PN XtOpenApplication , -or -.PN XtSetLanguageProc -is called. \fBXtToolkitThreadInitialize\fP may be called more than once; -however, the application writer must ensure that it is not called -simultaneously by two or more threads. - -.NH 3 -Locking \*(tk Data Structures -.XS -\fB\*(SN Locking \*(tk Data Structures\fP -.XE -.LP -The \*(xI employs two levels of locking: application context and -process. Locking an application context ensures mutually exclusive -access by a thread to the state associated with the application context, -including all displays and widgets associated with it. Locking a -process ensures mutually exclusive access by a thread to \*(xI process -global data. -.LP -A client may acquire a lock multiple times and the effect is cumulative. -The client must ensure that the lock is released an equal number of times in -order for the lock to be acquired by another thread. -.LP -Most application writers will have little need to use locking as the -\*(xI performs the necessary locking internally. -Resource converters are an exception. -They require the application context or process to be locked -before the application can safely call them directly, for example: -.LP -.KS -.Ds -.TA .5i 2i -.ta .5i 2i - ... - XtAppLock(app_context); - XtCvtStringToPixel(dpy, args, num_args, fromVal, toVal, closure_ret); - XtAppUnlock(app_context); - ... -.De -.KE -.LP -When the application relies upon -.PN XtConvertAndStore -or a converter to provide the storage for the results of a -conversion, the application should acquire the process lock before -calling out and hold the lock until the results have been copied. -.LP -Application writers who write their own -utility functions, such as one which retrieves the being_destroyed field from -a widget instance, must lock the application context before accessing -widget internal data. For example: -.LP -.KS -.Ds -.TA .5i 2i -.ta .5i 2i -#include -Boolean BeingDestroyed (widget) - Widget widget; -{ - Boolean ret; - XtAppLock(XtWidgetToApplicationContext(widget)); - ret = widget->core.being_destroyed; - XtAppUnlock(XtWidgetToApplicationContext(widget)); - return ret; -} -.De -.KE -A client that wishes to atomically call two or more \*(xI functions -must lock the application context. For example: -.LP -.KS -.Ds -.TA .5i 2i -.ta .5i 2i - ... - XtAppLock(XtWidgetToApplicationContext(widget)); - XtUnmanageChild (widget1); - XtManageChild (widget2); - XtAppUnlock(XtWidgetToApplicationContext(widget)); - ... -.De -.KE - -.NH 4 -Locking the Application Context -.XS -\fB\*(SN Locking the Application Context\fP -.XE -.LP -To ensure mutual exclusion of application context, display, or -widget internal state, use -.PN XtAppLock. -.LP -.IN "XtAppLock" "" "@DEF@" -.sM -.FD 0 -void XtAppLock(\fIapp_context\fP) -.br - XtAppContext \fIapp_context\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context to lock. -.LP -.eM -\fBXtAppLock\fP blocks until it is able to acquire the lock. Locking the -application context also ensures that only the thread holding the lock -makes Xlib calls from within Xt. An application that makes its own -direct Xlib calls must either lock the application context around every -call or enable thread locking in Xlib. -.LP -To unlock a locked application context, use -.PN XtAppUnlock. -.LP -.IN "XtAppUnlock" "" "@DEF@" -.sM -.FD 0 -void XtAppUnlock(\fIapp_context\fP) -.br - XtAppContext \fIapp_context\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context that was previously locked. -.LP -.eM - -.NH 4 -Locking the Process -.XS -\*(SN Locking the Process -.XE -.LP -To ensure mutual exclusion of \*(tk process global data, a -widget writer must use -.PN XtProcessLock. -.LP -.IN "XtProcessLock" "" "@DEF@" -.sM -.FD 0 -void XtProcessLock() -.FN -.LP -.eM -\fBXtProcessLock\fP blocks until it is able to acquire the lock. -Widget writers may use XtProcessLock to guarantee mutually exclusive -access to widget static data. -.LP -To unlock a locked process, use -.PN XtProcessUnlock . -.LP -.IN "XtProcessUnlock" "" "@DEF@" -.sM -.FD 0 -void XtProcessUnlock() -.FN -.LP -.eM -To lock both an application context and the process at the same -time, call -.PN XtAppLock -first and then -.PN XtProcessLock . -To release both locks, call -.PN XtProcessUnlock -first and then -.PN XtAppUnlock . -The order is important to avoid deadlock. - -.NH 3 -Event Management in a Multi-Threaded Environment -.XS -\fB\*(SN Event Management in a Multi-Threaded Environment\fP -.XE -.LP -In a nonthreaded environment an application writer could reasonably -assume that it is safe to exit the application from a quit callback. -This assumption may no longer hold true in a multi-threaded environment; -therefore it is desirable to provide a mechanism to terminate an -event-processing loop without necessarily terminating its thread. -.LP -To indicate that the event loop should terminate after the current -event dispatch has completed, use -.PN XtAppSetExitFlag . -.LP -.IN "XtAppSetExitFlag" "" "@DEF@" -.sM -.FD 0 -void XtAppSetExitFlag(\fIapp_context\fP) -.br - XtAppContext \fIapp_context\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context. -.LP -.eM -.PN XtAppMainLoop -tests the value of the flag and will return if the flag is \fBTrue\fP. -.LP -Application writers who implement their own main loop may test the -value of the exit flag with -.PN XtAppGetExitFlag . -.LP -.IN "XtAppGetExitFlag" "" "@DEF@" -.sM -.FD 0 -Boolean XtAppGetExitFlag(\fIapp_context\fP) -.br - XtAppContext \fIapp_context\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context. -.LP -.eM -.PN XtAppGetExitFlag -will normally return \fBFalse\fP, indicating that event processing -may continue. When -.PN XtAppGetExitFlag -returns \fBTrue\fP, the loop must terminate and return to the caller, -which might then destroy the application context. -.LP -Application writers should be aware that, if a thread is blocked in -.PN XtAppNextEvent , -.PN XtAppPeekEvent , -or -.PN XtAppProcessEvent -and another thread in the same application context opens a new display, -adds an alternate input, or a timeout, any new source(s) will not -normally be "noticed" by the blocked thread. Any new sources are -"noticed" the next time one of these functions is called. -.LP -The \*(xI manage access to events on a last-in, first-out basis. If -multiple threads in the same application context block in -.PN XtAppNextEvent , -.PN XtAppPeekEvent , -or -.PN XtAppProcessEvent , -the last thread to call one of these functions is the first -thread to return. -.bp diff --git a/doc/xorg-docs/specs/Xt/CH08 b/doc/xorg-docs/specs/Xt/CH08 deleted file mode 100644 index 6dfb5290b..000000000 --- a/doc/xorg-docs/specs/Xt/CH08 +++ /dev/null @@ -1,452 +0,0 @@ -.\" $Xorg: CH08,v 1.3 2000/08/17 19:42:46 cpqbld Exp $ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" Digital Equipment Corporation, Maynard, Massachusetts. -.\" -.\" Permission to use, copy, modify and distribute this documentation for any -.\" purpose and without fee is hereby granted, provided that the above copyright -.\" notice appears in all copies and that both that copyright notice and this -.\" permission notice appear in supporting documentation, and that the name of -.\" Digital not be used in in advertising or publicity pertaining -.\" to distribution of the software without specific, written prior permission. -.\" Digital makes no representations about the suitability of the -.\" software described herein for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBChapter 8\fP\s-1 - -\s+1\fBCallbacks\fP\s-1 -.sp 2 -.nr H1 8 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.LP -.XS -Chapter 8 \(em Callbacks -.XE -.IN "Destroy Callbacks" -Applications and other widgets often need to register a procedure -with a widget that gets called under certain prespecified conditions. -For example, -when a widget is destroyed, -every procedure on the widget's \fIdestroy_callbacks\fP -list is called to notify clients of the widget's impending doom. -.LP -Every widget has an XtNdestroyCallbacks callback list resource. -Widgets can define additional callback lists as they see fit. -For example, the Pushbutton widget has a callback -list to notify clients when the button has been activated. -.LP -Except where otherwise noted, it is the intent that all Intrinsics -functions may be called at any time, including from within callback -procedures, action routines, and event handlers. - -.NH 2 -Using Callback Procedure and Callback List Definitions -.XS -\fB\*(SN Using Callback Procedure and Callback List Definitions\fP -.XE -.IN "XtCallbackList" -.IN "XtCallbackProc" -.LP -Callback procedure pointers for use in callback lists are of type -.PN XtCallbackProc . -.LP -.IN "XtCallbackProc" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtCallbackProc)(Widget, XtPointer, XtPointer); -.br - Widget \fIw\fP; -.br - XtPointer \fIclient_data\fP; -.br - XtPointer \fIcall_data\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget owning the list in which the callback is registered. -.IP \fIclient_data\fP 1i -Specifies additional data supplied by the client when the procedure -was registered. -.IP \fIcall_data\fP 1i -Specifies any callback-specific data the widget wants to pass to the client. -For example, when Scrollbar executes its XtNthumbChanged callback list, -it passes the new position of the thumb. -.LP -.eM -The \fIclient_data\fP argument provides a way for the -client registering the callback procedure also to register client-specific data, -for example, a pointer to additional information about the widget, -a reason for invoking the callback, and so on. -The \fIclient_data\fP value may be NULL -if all necessary information is in the widget. -The \fIcall_data\fP argument is a convenience to avoid having simple -cases where the client could otherwise always call -.PN XtGetValues -or a widget-specific function to retrieve data from the widget. -Widgets should generally avoid putting complex state information -in \fIcall_data\fP. -The client can use the more general data retrieval methods, if necessary. -.LP -Whenever a client wants to pass a callback list as an argument in an -.PN XtCreateWidget , -.PN XtSetValues , -or -.PN XtGetValues -call, it should specify the address -of a NULL-terminated array of type -.PN XtCallbackList . -.IN "XtCallbackList" "" "@DEF@" -.IN "XtCallbackRec" "" "@DEF@" -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - XtCallbackProc callback; - XtPointer closure; -} XtCallbackRec, *XtCallbackList; -.De -.LP -.eM -For example, the callback list for procedures A and B with client data -clientDataA and clientDataB, respectively, is -.LP -.KS -.Ds 5 -.TA .5i 3i -.ta .5i 3i -static XtCallbackRec callbacks[] = { - {A, (XtPointer) clientDataA}, - {B, (XtPointer) clientDataB}, - {(XtCallbackProc) NULL, (XtPointer) NULL} -}; -.De -.KE -.LP -Although callback lists are passed by address in arglists -and varargs lists, -the \*(xI recognize callback lists -through the widget resource list and will copy the contents -when necessary. -Widget initialize and set_values procedures -should not allocate memory for the callback list contents. -The \*(xI automatically do this, -potentially using a different structure for their -internal representation. - -.NH 2 -Identifying Callback Lists -.XS -\fB\*(SN Identifying Callback Lists\fP -.XE -.LP -Whenever a widget contains a callback list for use by clients, -it also exports in its public .h file the resource name of the callback list. -Applications and client widgets never access callback list fields directly. -Instead, they always identify the desired callback list by using the exported -resource name. -All the callback manipulation functions described in this chapter -except -.PN XtCallCallbackList -check -to see that the requested callback list is indeed implemented by the widget. -.LP -For the \*(xI to find and correctly handle callback lists, -they must be declared with a resource type of -.PN XtRCallback . -The internal representation of a callback list is -implementation-dependent; widgets may make no assumptions about the -value stored in this resource if it is non-NULL. Except to compare -the value to NULL (which is equivalent to -.PN XtCallbackStatus -.PN XtCallbackHasNone ), -access to callback list resources must be made -through other \*(xI procedures. - -.NH 2 -Adding Callback Procedures -.XS -\fB\*(SN Adding Callback Procedures\fP -.XE -.LP -To add a callback procedure to a widget's callback list, use -.PN XtAddCallback . -.LP -.IN "XtAddCallback" "" "@DEF@" -.sM -.FD 0 -void XtAddCallback(\fIw\fP, \fIcallback_name, \fP\fIcallback\fP, \ -\fIclient_data\fP) -.br - Widget \fIw\fP; -.br - String \fIcallback_name\fP; -.br - XtCallbackProc \fIcallback\fP; -.br - XtPointer \fIclient_data\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. \*(oI -.IP \fIcallback_name\fP 1i -Specifies the callback list to which the procedure is to be appended. -.IP \fIcallback\fP 1i -Specifies the callback procedure. -.IP \fIclient_data\fP 1i -Specifies additional data to be passed to the specified procedure -when it is invoked, -or NULL. -.LP -.eM -A callback will be invoked as many times as it occurs in the callback list. -.sp -.LP -To add a list of callback procedures to a given widget's callback list, use -.PN XtAddCallbacks . -.LP -.IN "XtAddCallbacks" "" "@DEF@" -.sM -.FD 0 -void XtAddCallbacks(\fIw\fP, \fIcallback_name, \fP\fIcallbacks\fP) -.br - Widget \fIw\fP; -.br - String \fIcallback_name\fP; -.br - XtCallbackList \fIcallbacks\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. \*(oI -.IP \fIcallback_name\fP 1i -Specifies the callback list to which the procedures are to be appended. -.IP \fIcallbacks\fP 1i -Specifies the null-terminated list of callback procedures and corresponding -client data. -.LP -.eM -.NH 2 -Removing Callback Procedures -.XS -\fB\*(SN Removing Callback Procedures\fP -.XE -.LP -To delete a callback procedure from a widget's callback list, use -.PN XtRemoveCallback . -.LP -.IN "XtRemoveCallback" "" "@DEF@" -.sM -.FD 0 -void XtRemoveCallback(\fIw\fP, \fIcallback_name\fP, \fIcallback\fP, \ -\fIclient_data\fP) -.br - Widget \fIw\fP; -.br - String \fIcallback_name\fP; -.br - XtCallbackProc \fIcallback\fP; -.br - XtPointer \fIclient_data\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. \*(oI -.IP \fIcallback_name\fP 1i -Specifies the callback list from which the procedure is to be deleted. -.IP \fIcallback\fP 1i -Specifies the callback procedure. -.IP \fIclient_data\fP 1i -Specifies the client data to match with the registered callback entry. -.LP -.eM -The -.PN XtRemoveCallback -function removes a callback only if both the procedure and the client -data match. -.sp -.LP -To delete a list of callback procedures from a given widget's callback list, use -.PN XtRemoveCallbacks . -.LP -.IN "XtRemoveCallbacks" "" "@DEF@" -.sM -.FD 0 -void XtRemoveCallbacks(\fIw\fP, \fIcallback_name\fP, \fIcallbacks\fP) -.br - Widget \fIw\fP; -.br - String \fIcallback_name\fP; -.br - XtCallbackList \fIcallbacks\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. \*(oI -.IP \fIcallback_name\fP 1i -Specifies the callback list from which the procedures are to be deleted. -.IP \fIcallbacks\fP 1i -Specifies the null-terminated list of callback procedures and corresponding -client data. -.LP -.eM -To delete all callback procedures from a given widget's callback list -and free all storage associated with the callback list, use -.PN XtRemoveAllCallbacks . -.LP -.IN "XtRemoveAllCallbacks" "" "@DEF@" -.sM -.FD 0 -void XtRemoveAllCallbacks(\fIw\fP, \fIcallback_name\fP) -.br - Widget \fIw\fP; -.br - String \fIcallback_name\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. \*(oI -.IP \fIcallback_name\fP 1i -Specifies the callback list to be cleared. -.LP -.eM -.NH 2 -Executing Callback Procedures -.XS -\*(SN Executing Callback Procedures -.XE -.LP -To execute the procedures in a given widget's callback list, -specifying the callback list by resource name, use -.PN XtCallCallbacks . -.LP -.IN "XtCallCallbacks" "" "@DEF@" -.sM -.FD 0 -void XtCallCallbacks(\fIw\fP, \fIcallback_name\fP, \fIcall_data\fP) -.br - Widget \fIw\fP; -.br - String \fIcallback_name\fP; -.br - XtPointer \fIcall_data\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. \*(oI -.IP \fIcallback_name\fP 1i -Specifies the callback list to be executed. -.IP \fIcall_data\fP 1i -Specifies a callback-list-specific data value to pass to each of the callback -procedure in the list, or NULL. -.LP -.eM -.LP -.PN XtCallCallbacks -calls each of the callback procedures in the list -named by \fIcallback_name\fP in the specified widget, passing the client -data registered with the procedure and \fIcall-data\fP. -.sp -.LP -To execute the procedures in a callback list, specifying the callback -list by address, use -.PN XtCallCallbackList . -.LP -.IN "XtCallCallbackList" "" "@DEF@" -.sM -.FD 0 -void XtCallCallbackList(\fIwidget\fP, \fIcallbacks\fP, \fIcall_data\fP) -.br - Widget \fIwidget\fP; -.br - XtCallbackList \fIcallbacks\fP; -.br - XtPointer \fIcall_data\fP; -.FN -.IP \fIwidget\fP 1i -Specifies the widget instance that contains the callback list. \*(oI -.IP \fIcallbacks\fP 1i -Specifies the callback list to be executed. -.IP \fIcall_data\fP 1i -Specifies a callback-list-specific data value to pass -to each of the callback procedures in the list, or NULL. -.LP -.eM -The \fIcallbacks\fP parameter must specify the contents of a widget or -object resource declared with representation type -.PN XtRCallback . -If \fIcallbacks\fP is NULL, -.PN XtCallCallbackList -returns immediately; otherwise it calls each of the callback -procedures in the list, passing the client data and \fIcall_data\fP. - -.NH 2 -Checking the Status of a Callback List -.XS -\*(SN Checking the Status of a Callback List -.XE -.LP -To find out the status of a given widget's callback list, use -.PN XtHasCallbacks . -.LP -.IN "XtHasCallbacks" "" "@DEF@" -.sp -.sM -.FD 0 -typedef enum {XtCallbackNoList, XtCallbackHasNone, XtCallbackHasSome} \ -XtCallbackStatus; -.sp -XtCallbackStatus XtHasCallbacks(\fIw\fP, \fIcallback_name\fP) -.br - Widget \fIw\fP; -.br - String \fIcallback_name\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. \*(oI -.IP \fIcallback_name\fP 1i -Specifies the callback list to be checked. -.LP -.eM -The -.PN XtHasCallbacks -function first checks to see if the widget has a callback list identified -by \fIcallback_name\fP. -If the callback list does not exist, -.PN XtHasCallbacks -returns -.PN XtCallbackNoList . -If the callback list exists but is empty, -it returns -.PN XtCallbackHasNone . -If the callback list exists and has at least one callback registered, -it returns -.PN XtCallbackHasSome . -.bp diff --git a/doc/xorg-docs/specs/Xt/CH09 b/doc/xorg-docs/specs/Xt/CH09 deleted file mode 100644 index 9538651bc..000000000 --- a/doc/xorg-docs/specs/Xt/CH09 +++ /dev/null @@ -1,3211 +0,0 @@ -.\" $Xorg: CH09,v 1.3 2000/08/17 19:42:46 cpqbld Exp $ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" Digital Equipment Corporation, Maynard, Massachusetts. -.\" -.\" Permission to use, copy, modify and distribute this documentation for any -.\" purpose and without fee is hereby granted, provided that the above copyright -.\" notice appears in all copies and that both that copyright notice and this -.\" permission notice appear in supporting documentation, and that the name of -.\" Digital not be used in in advertising or publicity pertaining -.\" to distribution of the software without specific, written prior permission. -.\" Digital makes no representations about the suitability of the -.\" software described herein for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBChapter 9\fP\s-1 - -\s+1\fBResource Management\fP\s-1 -.sp 2 -.nr H1 9 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.LP -.XS -Chapter 9 \(em Resource Management -.XE -A resource is a field in the widget record with a corresponding -resource entry in the \fIresources\fP list of the widget or any of its -superclasses. -This means that the field is -settable by -.PN XtCreateWidget -(by naming the field in the argument list), by an -entry in a resource file (by using either the name or class), and by -.PN XtSetValues . -In addition, it is readable by -.PN XtGetValues . -Not all fields in a widget record are resources. -Some are for bookkeeping use by the -generic routines (like \fImanaged\fP and \fIbeing_destroyed\fP). -Others can be for local bookkeeping, -and still others are derived from resources -(many graphics contexts and pixmaps). -.LP -Widgets typically need to obtain a large set of resources at widget -creation time. -Some of the resources come from the argument list supplied in the call to -.PN XtCreateWidget , -some from the resource database, -and some from the internal defaults specified by the widget. -Resources are obtained first from the argument list, -then from the resource database for all resources not specified -in the argument list, -and last, from the internal default, if needed. - -.NH 2 -Resource Lists -.XS -\*(SN Resource Lists -.XE -.LP -.IN "Resource Management" -A resource entry specifies a field in the widget, -the textual name and class of the field that argument lists -and external resource files use to refer to the field, -and a default value that the field should get if no value is specified. -The declaration for the -.PN XtResource -structure is -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - String resource_name; - String resource_class; - String resource_type; - Cardinal resource_size; - Cardinal resource_offset; - String default_type; - XtPointer default_addr; -} XtResource, *XtResourceList; -.De -.IN "XtResourceList" -.eM - -.LP -When the resource list is specified as the -.PN CoreClassPart , -.PN ObjectClassPart , -.PN RectObjClassPart , -or -.PN ConstraintClassPart -\fIresources\fP field, the strings pointed to by \fIresource_name\fP, -\fIresource_class\fP, \fIresource_type\fP, and \fIdefault_type\fP must -be permanently allocated prior to or during the execution of the class -initialization procedure and must not be subsequently deallocated. - -.LP -The \fIresource_name\fP field contains the name used by clients to access the field -in the widget. -By convention, it starts with a lowercase letter -and is spelled exactly like the field name, -except all underscores (_) are deleted and the next letter is replaced by its -uppercase counterpart. -For example, the resource name for background_pixel becomes backgroundPixel. -Resource names beginning with the two-character -sequence ``xt'', and resource classes beginning with the two-character -sequence ``Xt'' are reserved to the \*(xI for future standard and -implementation-dependent uses. -Widget header files typically contain a symbolic name for each resource name. -All resource names, classes, and types used by the \*(xI are named in -.Pn < X11/StringDefs.h >. -The \*(xI's symbolic resource names begin with -``XtN'' -and are followed by the string name (for example, XtNbackgroundPixel -for backgroundPixel). - -.LP -The \fIresource_class\fP field contains the class string used in resource -specification files to identify the field. -A resource class provides two functions: -.IP \(bu 5 -It isolates an application from different representations that widgets -can use for a similar resource. -.IP \(bu 5 -It lets you specify values for several actual resources with a single name. -A resource class should be chosen to span a group of closely related fields. -.LP -For example, -a widget can have several pixel resources: background, foreground, -border, block cursor, pointer cursor, and so on. -Typically, the background defaults to white -and everything else to black. -The resource class for each of these resources in the resource list -should be chosen so that it takes the minimal number of entries -in the resource database to make the background ivory -and everything else darkblue. -.LP -In this case, the background pixel should have a resource class of -``Background'' -and all the other pixel entries a resource class of -``Foreground''. -Then, the resource file needs only two lines to -change all pixels to ivory or darkblue: -.LP -.Ds 5 -.TA .5i 1.5i -.ta .5i 1.5i -*Background: ivory -*Foreground: darkblue -.De -.LP -Similarly, a widget may have several font resources (such as normal and bold), -but all fonts should have the class Font. -Thus, changing all fonts simply requires only a single line in the -default resource file: -.LP -.Ds 5 -.TA .5i 3i -.ta .5i 3i -*Font: 6x13 -.De -.LP -By convention, -resource classes are always spelled starting with a capital letter -to distinguish them from resource names. -Their symbolic names are preceded with -``XtC'' -(for example, XtCBackground). -.LP -The \fIresource_type\fP field gives the physical representation type of the resource -and also encodes information about the specific usage of the field. -By convention, it starts with an uppercase letter and is -spelled identically to the type name of the field. -The resource type is used when resources are fetched to -convert from the resource database format (usually -.PN String ) -or the format of the resource default value -(almost anything, but often -.PN String ) -to the desired -physical representation (see Section 9.6). -The \*(xI define the following resource types: -.TS H -lw(2.5i) lw(2.5i). -_ -.sp 6p -Resource Type Structure or Field Type -.sp 6p -_ -.sp 6p -.TH -.R -T{ -.PN XtRAcceleratorTable -T} XtAccelerators -T{ -.PN XtRAtom -T} Atom -T{ -.PN XtRBitmap -T} Pixmap, depth=1 -T{ -.PN XtRBoolean -T} Boolean -T{ -.PN XtRBool -T} Bool -T{ -.PN XtRCallback -T} XtCallbackList -T{ -.PN XtRCardinal -T} Cardinal -T{ -.PN XtRColor -T} XColor -T{ -.PN XtRColormap -T} Colormap -T{ -.PN XtRCommandArgArray -T} String* -T{ -.PN XtRCursor -T} Cursor -T{ -.PN XtRDimension -T} Dimension -T{ -.PN XtRDirectoryString -T} String -T{ -.PN XtRDisplay -T} Display* -T{ -.PN XtREnum -T} XtEnum -T{ -.PN XtREnvironmentArray -T} String* -T{ -.PN XtRFile -T} FILE* -T{ -.PN XtRFloat -T} float -T{ -.PN XtRFont -T} Font -T{ -.PN XtRFontSet -T} XFontSet -T{ -.PN XtRFontStruct -T} XFontStruct* -T{ -.PN XtRFunction -T} (*)() -T{ -.PN XtRGeometry -T} T{ -char*, format as defined by -.PN XParseGeometry -T} -T{ -.PN XtRGravity -T} int -T{ -.PN XtRInitialState -T} int -T{ -.PN XtRInt -T} int -T{ -.PN XtRLongBoolean -T} long -T{ -.PN XtRObject -T} Object -T{ -.PN XtRPixel -T} Pixel -T{ -.PN XtRPixmap -T} Pixmap -T{ -.PN XtRPointer -T} XtPointer -T{ -.PN XtRPosition -T} Position -T{ -.PN XtRRestartStyle -T} unsigned char -T{ -.PN XtRScreen -T} Screen* -T{ -.PN XtRShort -T} short -T{ -.PN XtRSmcConn -T} XtPointer -T{ -.PN XtRString -T} String -T{ -.PN XtRStringArray -T} String* -T{ -.PN XtRStringTable -T} String* -T{ -.PN XtRTranslationTable -T} XtTranslations -T{ -.PN XtRUnsignedChar -T} unsigned char -T{ -.PN XtRVisual -T} Visual* -T{ -.PN XtRWidget -T} Widget -T{ -.PN XtRWidgetClass -T} WidgetClass -T{ -.PN XtRWidgetList -T} WidgetList -T{ -.PN XtRWindow -T} Window -.sp 6p -_ -.TE -.sp -.LP -.Pn < X11/StringDefs.h > -also defines the following resource types as a -convenience for widgets, although they do not have any corresponding -data type assigned: -.PN XtREditMode , -.PN XtRJustify , -and -.PN XtROrientation . -.LP -The \fIresource_size\fP field is the size of the physical representation in bytes; -you should specify it as -.PN sizeof (\fItype\fP) -so that the -compiler fills in the value. -The \fIresource_offset\fP field is the offset in bytes of the field -within the widget. -You should use the -.PN XtOffsetOf -macro to retrieve this value. -The \fIdefault_type\fP field is the representation type of the default -resource value. -If \fIdefault_type\fP is different from \fIresource_type\fP and the default value -is needed, -the resource manager invokes a conversion procedure from \fIdefault_type\fP -to \fIresource_type\fP. -Whenever possible, -the default type should be identical to the resource type in order -to minimize widget creation time. -However, there are sometimes no values of the type that the program -can easily specify. -In this case, -it should be a value for which the converter is guaranteed to work (for example, -.PN XtDefaultForeground -for a pixel resource). -The \fIdefault_addr\fP field specifies the address of the default resource value. -As a special case, if \fIdefault_type\fP is -.PN XtRString , -then the value in the \fIdefault_addr\fP field is the pointer to -the string rather than a pointer to the pointer. -The default is used if a resource is not specified in the argument list -or in the resource database or if the conversion from the representation -type stored in the resource database fails, -which can happen for various reasons (for example, a misspelled entry in a -resource file). -.LP -Two special representation types -(XtRImmediate -and -XtRCallProc) -are usable only as default resource types. -XtRImmediate -indicates that the value in the \fIdefault_addr\fP field is the actual value of -the resource rather than the address of the value. -The value must be in the correct representation type for the resource, -coerced to an -.PN XtPointer . -No conversion is possible, since there is no source representation type. -XtRCallProc -indicates that the value in the \fIdefault_addr\fP field is a procedure -pointer. -This procedure is automatically invoked with the widget, -\fIresource_offset\fP, and a pointer to an -.PN XrmValue -in which to store the result. -XtRCallProc -procedure pointers are of type -.PN XtResourceDefaultProc . -.LP -.sM -.FD 0 -typedef void (*XtResourceDefaultProc)(Widget, int, XrmValue*); -.br - Widget \fIw\fP; -.br - int \fIoffset\fP; -.br - XrmValue *\fIvalue\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget whose resource value is to be obtained. -.IP \fIoffset\fP 1i -Specifies the offset of the field in the widget record. -.IP \fIvalue\fP 1i -Specifies the resource value descriptor to return. -.LP -.eM -The -.PN XtResourceDefaultProc -procedure should fill in the \fIvalue->addr\fP field with a pointer -to the resource value in its correct representation type. -.sp -.LP -To get the resource list structure for a particular class, use -.PN XtGetResourceList . -.LP -.IN "XtGetResourceList" "" "@DEF@" -.sM -.FD 0 -void XtGetResourceList(\fIclass\fP, \fIresources_return\fP, \fInum_resources_return\fP); -.br - WidgetClass \fIclass\fP; -.br - XtResourceList *\fIresources_return\fP; -.br - Cardinal *\fInum_resources_return\fP; -.FN -.IP \fIclass\fP 1.5i -Specifies the object class to be queried. It must be -.PN objectClass -or any subclass thereof. -.IP \fIresources_return\fP 1.5i -Returns the resource list. -.IP \fInum_resources_return\fP 1.5i -Returns the number of entries in the resource list. -.LP -.eM -If -.PN XtGetResourceList -is called before the class is initialized, -it returns the resource list as specified in the class record. -If it is called after the class has been initialized, -.PN XtGetResourceList -returns a merged resource list that includes the resources -for all superclasses. -The list returned by -.PN XtGetResourceList -should be freed using -.PN XtFree -when it is no longer needed. -.sp -.LP -To get the constraint resource list structure for a particular widget -class, use -.PN XtGetConstraintResourceList . -.LP -.IN "XtGetConstraintResourceList" "" "@DEF@" -.sM -.FD 0 -void XtGetConstraintResourceList(\fIclass\fP, \fIresources_return\fP, \ -\fInum_resources_return\fP) -.br - WidgetClass \fIclass\fP; -.br - XtResourceList *\fIresources_return\fP; -.br - Cardinal *\fInum_resources_return\fP; -.FN -.IP \fIclass\fP 1.5i -Specifies the object class to be queried. It must be -.PN objectClass -or any subclass thereof. -.IP \fIresources_return\fP 1.5i -Returns the constraint resource list. -.IP \fInum_resources_return\fP 1.5i -Returns the number of entries in the constraint resource list. -.LP -.eM -If -.PN XtGetConstraintResourceList -is called before the widget class is -initialized, the resource list as specified in the widget -class Constraint part is returned. If -.PN XtGetConstraintResourceList -is called after the widget class has been initialized, the merged -resource list for the class and all Constraint superclasses is -returned. If the -specified class is not a subclass of -.PN constraintWidgetClass , -*\fIresources_return\fP is set to NULL -and *\fInum_resources_return\fP is set to zero. -The list returned by -.PN XtGetConstraintResourceList -should be freed using -.PN XtFree -when it is no longer needed. -.sp -.LP -The routines -.PN XtSetValues -and -.PN XtGetValues -also use the resource list to set and get widget state; -see Sections 9.7.1 and 9.7.2. -.LP -Here is an abbreviated version of a possible resource list for a Label widget: -.LP -.Ds -.TA .5i 1.5i 3i -.ta .5i 1.5i 3i -/* Resources specific to Label */ -static XtResource resources[] = { -{XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel), - XtOffsetOf(LabelRec, label.foreground), XtRString, XtDefaultForeground}, -{XtNfont, XtCFont, XtRFontStruct, sizeof(XFontStruct*), - XtOffsetOf(LabelRec, label.font), XtRString, XtDefaultFont}, -{XtNlabel, XtCLabel, XtRString, sizeof(String), - XtOffsetOf(LabelRec, label.label), XtRString, NULL}, - . - . - . -} -.De -.LP -The complete resource name for a field of a widget instance is the -concatenation of the application shell name (from -.PN XtAppCreateShell ), -the instance names of all the widget's parents up to the -top of the widget tree, -the instance name of the widget itself, -and the resource name of the specified field of the widget. -Similarly, -the full resource class of a field of a widget instance is the -concatenation of the application class (from -.PN XtAppCreateShell ), -the widget class names of all the widget's parents up to the -top of the widget tree, -the widget class name of the widget itself, -and the resource class of the specified field of the widget. - -.NH 2 -Byte Offset Calculations -.XS -\*(SN Byte Offset Calculations -.XE -.LP -To determine the byte offset of a field within a structure type, use -.PN XtOffsetOf . -.LP -.IN "XtOffsetOf" "" "@DEF@" -.sM -.FD 0 -Cardinal XtOffsetOf(\fIstructure_type\fP, \fIfield_name\fP) -.br - \fIType structure_type\fP; -.br - \fIField field_name\fP; -.FN -.IP \fIstructure_type\fP 1i -Specifies a type that is declared as a structure. -.IP \fIfield_name\fP 1i -Specifies the name of a member within the structure. -.LP -.eM -The -.PN XtOffsetOf -macro expands to a constant expression that gives the -offset in bytes to the specified structure member from the beginning -of the structure. It is normally used to statically initialize -resource lists and is more portable than -.PN XtOffset , -which serves the same function. - -.LP -To determine the byte offset of a field within a structure pointer type, use -.PN XtOffset . -.LP -.IN "XtOffset" "" "@DEF@" -.sM -.FD 0 -Cardinal XtOffset(\fIpointer_type\fP, \fIfield_name\fP) -.br - \fIType pointer_type\fP; -.br - \fIField field_name\fP; -.FN -.IP \fIpointer_type\fP 1i -Specifies a type that is declared as a pointer to a structure. -.IP \fIfield_name\fP 1i -Specifies the name of a member within the structure. -.LP -.eM -The -.PN XtOffset -macro expands to a constant expression that gives the -offset in bytes to the specified structure member from the beginning -of the structure. It may be used to statically initialize -resource lists. -.PN XtOffset -is less portable than -.PN XtOffsetOf . - -.NH 2 -Superclass-to-Subclass Chaining of Resource Lists -.XS -\*(SN Superclass-to-Subclass Chaining of Resource Lists -.XE -.LP -.IN "Inheritance" -.IN "Superclass Chaining" -.IN "Chaining" -The -.PN XtCreateWidget -function gets resources as a superclass-to-subclass chained operation. -That is, the resources specified in the -.PN objectClass -resource list are fetched, -then those in -.PN rectObjClass , -and so on down to the resources specified -for this widget's class. Within a class, resources are fetched in the order -they are declared. -.LP -In general, if a widget resource field is declared in a superclass, -that field is included in the superclass's resource list and need not be -included in the subclass's resource list. -For example, the -Core -class contains a resource entry for \fIbackground_pixel\fP. -Consequently, -the implementation of Label need not also have a resource entry -for \fIbackground_pixel\fP. -However, a subclass, -by specifying a resource entry for that field in its own resource list, -can override the resource entry for any field declared in a superclass. -This is most often done to override the defaults provided in the -superclass with new ones. -At class initialization time, -resource lists for that class are scanned from the superclass down -to the class to look for resources with the same offset. -A matching resource in a subclass will be reordered to override -the superclass entry. -If reordering is necessary, a copy of the superclass resource list is made to -avoid affecting other subclasses of the superclass. -.LP -.IN "class_initialize procedure" -.IN "Widget" "class initialization" -Also at class initialization time, the \*(xI produce an -internal representation of the resource list to optimize access time -when creating widgets. In order to save memory, the \*(xI may -overwrite the storage allocated for the resource list in the class -record; therefore, widgets must allocate resource lists in writable -storage and must not access the list contents directly after the -class_initialize procedure has returned. - -.NH 2 -Subresources -.XS -\*(SN Subresources -.XE -.LP -A widget does not do anything to retrieve its own resources; -instead, -.PN XtCreateWidget -does this automatically before calling the class initialize procedure. -.LP -Some widgets have subparts that are not widgets but for which the widget -would like to fetch resources. -Such widgets call -.PN XtGetSubresources -to accomplish this. -.LP -.IN "XtGetSubresources" "" "@DEF@" -.sM -.FD 0 -void XtGetSubresources(\fIw\fP, \fIbase\fP, \fIname\fP, \fIclass\fP, \ -\fIresources\fP, \fInum_resources\fP, \fIargs\fP, \fInum_args\fP) -.br - Widget \fIw\fP; -.br - XtPointer \fIbase\fP; -.br - String \fIname\fP; -.br - String \fIclass\fP; -.br - XtResourceList \fIresources\fP; -.br - Cardinal \fInum_resources\fP; -.br - ArgList \fIargs\fP; -.br - Cardinal \fInum_args\fP; -.FN -.IP \fIw\fP 1i -Specifies the object used to qualify the subpart resource name and -class. \*(oI -.IP \fIbase\fP 1i -Specifies the base address of the subpart data structure into which the -resources will be written. -.IP \fIname\fP 1i -Specifies the name of the subpart. -.IP \fIclass\fP 1i -Specifies the class of the subpart. -.IP \fIresources\fP 1i -Specifies the resource list for the subpart. -.IP \fInum_resources\fP 1i -Specifies the number of entries in the resource list. -.IP \fIargs\fP 1i -Specifies the argument list to override any other resource specifications. -.IP \fInum_args\fP 1i -Specifies the number of entries in the argument list. -.LP -.eM -The -.PN XtGetSubresources -function constructs a name and class list from the application name and class, -the names and classes of all the object's ancestors, and the object itself. -Then it appends to this list the \fIname\fP and \fIclass\fP pair passed in. -The resources are fetched from the argument list, the resource database, -or the default values in the resource list. -Then they are copied into the subpart record. -If \fIargs\fP is NULL, -\fInum_args\fP must be zero. -However, if \fInum_args\fP is zero, -the argument list is not referenced. -.LP -.PN XtGetSubresources -may overwrite the specified resource list with an -equivalent representation in an internal format, which optimizes access -time if the list is used repeatedly. The resource list must be -allocated in writable storage, and the caller must not modify the list -contents after the call if the same list is to be used again. -Resources fetched by -.PN XtGetSubresources -are reference-counted as -if they were referenced by the specified object. Subresources might -therefore be freed from the conversion cache and destroyed -when the object is destroyed, but not before then. -.sp -.LP -To fetch resources for widget subparts using varargs lists, use -.PN XtVaGetSubresources . -.LP -.IN "XtVaGetSubresources" "" "@DEF@" -.sM -.FD 0 -void XtVaGetSubresources(\fIw\fP, \fIbase\fP, \fIname\fP, \fIclass\fP, \ -\fIresources\fP, \fInum_resources\fP, ...) -.br - Widget \fIw\fP; -.br - XtPointer \fIbase\fP; -.br - String \fIname\fP; -.br - String \fIclass\fP; -.br - XtResourceList \fIresources\fP; -.br - Cardinal \fInum_resources\fP; -.FN -.IP \fIw\fP 1i -Specifies the object used to qualify the subpart resource name and -class. \*(oI -.IP \fIbase\fP 1i -Specifies the base address of the subpart data structure into which the -resources will be written. -.IP \fIname\fP 1i -Specifies the name of the subpart. -.IP \fIclass\fP 1i -Specifies the class of the subpart. -.IP \fIresources\fP 1i -Specifies the resource list for the subpart. -.IP \fInum_resources\fP 1i -Specifies the number of entries in the resource list. -.IP ... 1i -Specifies the variable argument list to override any other -resource specifications. -.LP -.eM -.PN XtVaGetSubresources -is identical in function to -.PN XtGetSubresources -with the \fIargs\fP and \fInum_args\fP parameters replaced by a varargs list, as -described in Section 2.5.1. - -.NH 2 -Obtaining Application Resources -.XS -\fB\*(SN Obtaining Application Resources\fP -.XE -.LP -To retrieve resources that are not specific to a widget -but apply to the overall application, use -.PN XtGetApplicationResources . -.LP -.IN "XtGetApplicationResources" "" "@DEF@" -.sM -.FD 0 -void XtGetApplicationResources(\fIw\fP, \fIbase\fP, \fIresources\fP, \ -\fInum_resources\fP, \fIargs\fP, \fInum_args\fP) -.br - Widget \fIw\fP; -.br - XtPointer \fIbase\fP; -.br - XtResourceList \fIresources\fP; -.br - Cardinal \fInum_resources\fP; -.br - ArgList \fIargs\fP; -.br - Cardinal \fInum_args\fP; -.FN -.IP \fIw\fP 1i -Specifies the object that identifies the resource database to search -(the database is that associated with the display for this object). \*(oI -.IP \fIbase\fP 1i -Specifies the base address into which -the resource values will be written. -.IP \fIresources\fP 1i -Specifies the resource list. -.IP \fInum_resources\fP 1i -Specifies the number of entries in the resource list. -.IP \fIargs\fP 1i -Specifies the argument list to override any other resource specifications. -.IP \fInum_args\fP 1i -Specifies the number of entries in the argument list. -.LP -.eM -The -.PN XtGetApplicationResources -function first uses the passed object, -which is usually an application shell widget, -to construct a resource name and class list. -The full name and class of the specified object (that is, including its -ancestors, if any) is logically added to the -front of each resource name and class. -Then it retrieves the resources from the argument list, -the resource database, or the resource list default values. -After adding base to each address, -.PN XtGetApplicationResources -copies the resources into the addresses -obtained by adding \fIbase\fP to each \fIoffset\fP in the resource list. -If \fIargs\fP is NULL, -\fInum_args\fP must be zero. -However, if \fInum_args\fP is zero, -the argument list is not referenced. -The portable way to specify application resources is to declare them -as members of a structure and pass the address of the structure -as the \fIbase\fP argument. -.LP -.PN XtGetApplicationResources -may overwrite the specified resource list -with an equivalent representation in an internal format, which -optimizes access time if the list is used repeatedly. The resource -list must be allocated in writable storage, and the caller must not -modify the list contents after the call if the same list is to be -used again. Any per-display resources fetched by -.PN XtGetApplicationResources -will not be freed from the resource cache until the display is closed. -.sp -.LP -To retrieve resources for the overall application using varargs lists, use -.PN XtVaGetApplicationResources . -.LP -.IN "XtVaGetApplicationResources" "" "@DEF@" -.sM -.FD 0 -void XtVaGetApplicationResources(\fIw\fP, \fIbase\fP, \fIresources\fP, \ -\fInum_resources\fP, ...) -.br - Widget \fIw\fP; -.br - XtPointer \fIbase\fP; -.br - XtResourceList \fIresources\fP; -.br - Cardinal \fInum_resources\fP; -.FN -.IP \fIw\fP 1i -Specifies the object that identifies the resource database to search -(the database is that associated with the display for this object). \*(oI -.IP \fIbase\fP 1i -Specifies the base address into which -the resource values will be written. -.IP \fIresources\fP 1i -Specifies the resource list for the subpart. -.IP \fInum_resources\fP 1i -Specifies the number of entries in the resource list. -.IP ... 1i -Specifies the variable argument list to override any other -resource specifications. -.LP -.eM -.PN XtVaGetApplicationResources -is identical in function to -.PN XtGetApplicationResources -with the \fIargs\fP and \fInum_args\fP parameters -replaced by a varargs list, as described in Section 2.5.1. - -.NH 2 -Resource Conversions -.XS -\*(SN Resource Conversions -.XE -.LP -The \*(xI provide a mechanism for registering representation converters that -are automatically invoked by the resource-fetching routines. -The \*(xI additionally provide and register several commonly used converters. -This resource conversion mechanism serves several purposes: -.IP \(bu 5 -It permits user and application resource files to contain textual -representations of nontextual values. -.IP \(bu 5 -It allows textual or other representations of default resource values that -are dependent on the display, screen, or colormap, and thus must be -computed at runtime. -.IP \(bu 5 -It caches conversion source and result data. -Conversions that require much computation or space -(for example, string-to-translation-table) -or that require round-trips to the server -(for example, string-to-font or string-to-color) are performed only once. - -.NH 3 -Predefined Resource Converters -.XS -\*(SN Predefined Resource Converters -.XE -.LP -The \*(xI define all the representations used in the -Object, -RectObj, -Core, -Composite, -Constraint, -and -Shell -widget classes. -The \*(xI register the following resource converters that accept -input values of representation type -.PN XtRString . -.LP -.TS -lw(1.7i) lw(2.4i) lw(1.5i) . -_ -.sp 6p -Target Representation Converter Name Additional Args -.sp 6p -_ -.sp 6p -T{ -.PN XtRAcceleratorTable -T} T{ -.PN XtCvtStringToAcceleratorTable -T} -T{ -.PN XtRAtom -T} T{ -.PN XtCvtStringToAtom -T} Display* -T{ -.PN XtRBoolean -T} T{ -.PN XtCvtStringToBoolean -T} -T{ -.PN XtRBool -T} T{ -.PN XtCvtStringToBool -T} -T{ -.PN XtRCommandArgArray -T} T{ -.PN XtCvtStringToCommandArgArray -T} -T{ -.PN XtRCursor -T} T{ -.PN XtCvtStringToCursor -T} Display* -T{ -.PN XtRDimension -T} T{ -.PN XtCvtStringToDimension -T} -T{ -.PN XtRDirectoryString -T} T{ -.PN XtCvtStringToDirectoryString -T} -T{ -.PN XtRDisplay -T} T{ -.PN XtCvtStringToDisplay -T} -T{ -.PN XtRFile -T} T{ -.PN XtCvtStringToFile -T} -T{ -.PN XtRFloat -T} T{ -.PN XtCvtStringToFloat -T} -T{ -.PN XtRFont -T} T{ -.PN XtCvtStringToFont -T} Display* -T{ -.PN XtRFontSet -T} T{ -.PN XtCvtStringToFontSet -T} Display*, String \fIlocale\fP -T{ -.PN XtRFontStruct -T} T{ -.PN XtCvtStringToFontStruct -T} Display* -T{ -.PN XtRGravity -T} T{ -.PN XtCvtStringToGravity -T} -T{ -.PN XtRInitialState -T} T{ -.PN XtCvtStringToInitialState -T} -T{ -.PN XtRInt -T} T{ -.PN XtCvtStringToInt -T} -T{ -.PN XtRPixel -T} T{ -.PN XtCvtStringToPixel -T} T{ -.PN colorConvertArgs -T} -T{ -.PN XtRPosition -T} T{ -.PN XtCvtStringToPosition -T} -T{ -.PN XtRRestartStyle -T} T{ -.PN XtCvtStringToRestartStyle -T} -T{ -.PN XtRShort -T} T{ -.PN XtCvtStringToShort -T} -T{ -.PN XtRTranslationTable -T} T{ -.PN XtCvtStringToTranslationTable -T} -T{ -.PN XtRUnsignedChar -T} T{ -.PN XtCvtStringToUnsignedChar -T} -T{ -.PN XtRVisual -T} T{ -.PN XtCvtStringToVisual -T} Screen*, Cardinal \fIdepth\fP -.sp 6p -_ -.TE - -.LP -The String-to-Pixel conversion has two predefined constants that are -guaranteed to work and contrast with each other: -.PN XtDefaultForeground -and -.PN XtDefaultBackground . -.IN "XtDefaultBackground" "" "@DEF@" -.IN "XtDefaultForeground" "" "@DEF@" -They evaluate to the black and white pixel values of the widget's screen, -respectively. -.IN "Resources" "reverseVideo" -If the application resource reverseVideo is -.PN True , -they evaluate to the white and black pixel values of the widget's screen, -respectively. -Similarly, the String-to-Font and String-to-FontStruct converters recognize -the constant -.PN XtDefaultFont -.IN "XtDefaultFont" "" "@DEF@" -.IN "Resources" "xtDefaultFont" -and evaluate this in the following manner: -.IP \(bu 5 -Query the resource database for the resource whose full name -is ``xtDefaultFont'', class ``XtDefaultFont'' (that is, no widget -name/class prefixes), and use a type -.PN XtRString -value returned as the font name or a type -.PN XtRFont -or -.PN XtRFontStruct -value directly as the resource value. -.IP \(bu 5 -If the resource database does not contain a value for xtDefaultFont, -class XtDefaultFont, or if the returned font name cannot be -successfully opened, an implementation-defined font in ISO8859-1 -character set encoding is opened. (One possible algorithm is to -perform an -.PN XListFonts -using a wildcard font name and use the first -font in the list. This wildcard font name should be as broad as -possible to maximize the probability of locating a useable font; -for example, "-*-*-*-R-*-*-*-120-*-*-*-*-ISO8859-1".) -.IP \(bu 5 -If no suitable ISO8859-1 font can be found, issue a warning message -and return -.PN False . -.LP -The String-to-FontSet converter recognizes the constant -.PN XtDefaultFontSet -.IN "XtDefaultFontSet" "" "@DEF@" -.IN "Resources" "xtDefaultFontSet" -and evaluate this in the following manner: -.IP \(bu 5 -Query the resource database for the resource whose full name -is ``xtDefaultFontSet'', class ``XtDefaultFontSet'' (that is, no widget -name/class prefixes), and use a type -.PN XtRString -value returned as the base font name list or a type -.PN XtRFontSet -value directly as the resource value. -.IP \(bu 5 -If the resource database does not contain a value for xtDefaultFontSet, -class XtDefaultFontSet, or if a font set cannot be -successfully created from this resource, -an implementation-defined font set is created. -(One possible algorithm is to -perform an -.PN XCreateFontSet -using a wildcard base font name. -This wildcard base font name should be as broad as -possible to maximize the probability of locating a useable font; -for example, "-*-*-*-R-*-*-*-120-*-*-*-*".) -.IP \(bu 5 -If no suitable font set can be created, issue a warning message -and return -.PN False . -.LP -If a font set is created but \fImissing_charset_list\fP is not -empty, a warning is issued and the partial font set is returned. -The \*(xI register the String-to-FontSet converter with -a conversion argument list that extracts the current process -locale at the time the converter is invoked. This ensures -that the converter is invoked again if the same conversion -is required in a different locale. -.LP -The String-to-Gravity conversion accepts string values that are the -names of window and bit gravities and their numerical equivalents, -as defined in \fI\*(xL\fP: -.PN ForgetGravity , -.PN UnmapGravity , -.PN NorthWestGravity , -.PN NorthGravity , -.PN NorthEastGravity , -.PN WestGravity , -.PN CenterGravity , -.PN EastGravity , -.PN SouthWestGravity , -.PN SouthGravity , -.PN SouthEastGravity , -and -.PN StaticGravity . -Alphabetic case is not significant in the conversion. -.LP -The String-to-CommandArgArray conversion parses a String into an -array of strings. -White space characters separate elements of the command line. -The converter recognizes the backslash character ``\\'' as an escape -character to allow the following white space character to be part of the -array element. -.LP -.IN "XtCurrentDirectory" "" "@DEF@" -The String-to-DirectoryString conversion recognizes the -string ``XtCurrentDirectory'' and returns the result of a call -to the operating system to get the current directory. -.LP -The String-to-RestartStyle conversion accepts the values -.PN RestartIfRunning , -.PN RestartAnyway , -.PN RestartImmediately , -and -.PN RestartNever -as defined by the \fIX Session Management Protocol\fP. -.LP -The String-to-InitialState conversion accepts the values -.PN NormalState -or -.PN IconicState -as defined by the \fI\*(xC\fP. -.LP -The String-to-Visual conversion calls -.PN XMatchVisualInfo -using the -\fIscreen\fP and \fIdepth\fP fields from the core part and returns the first -matching Visual on the list. The widget resource list must be certain -to specify any resource of type -.PN XtRVisual -after the depth resource. -The allowed string values are the visual class names defined in \fI\*(xP\fP, -Section 8; -.PN StaticGray , -.PN StaticColor , -.PN TrueColor , -.PN GrayScale , -.PN PseudoColor , -and -.PN DirectColor . - -.LP -The \*(xI register the following resource converter that accepts -an input value of representation type -.PN XtRColor . -.LP -.TS -lw(1.5i) lw(2.25i) lw(1.5i) . -_ -.sp 6p -Target Representation Converter Name Additional Args -.sp 6p -_ -.sp 6p -T{ -.PN XtRPixel -T} T{ -.PN XtCvtColorToPixel -T} -.sp 6p -_ -.TE - -.LP -The \*(xI register the following resource converters that accept -input values of representation type -.PN XtRInt . -.LP -.TS -lw(1.5i) lw(2.25i) lw(1.5i) . -_ -.sp 6p -Target Representation Converter Name Additional Args -.sp 6p -_ -.sp 6p -T{ -.PN XtRBoolean -T} T{ -.PN XtCvtIntToBoolean -T} -T{ -.PN XtRBool -T} T{ -.PN XtCvtIntToBool -T} -T{ -.PN XtRColor -T} T{ -.PN XtCvtIntToColor -T} T{ -.PN colorConvertArgs -T} -T{ -.PN XtRDimension -T} T{ -.PN XtCvtIntToDimension -T} -T{ -.PN XtRFloat -T} T{ -.PN XtCvtIntToFloat -T} -T{ -.PN XtRFont -T} T{ -.PN XtCvtIntToFont -T} -T{ -.PN XtRPixel -T} T{ -.PN XtCvtIntToPixel -T} -T{ -.PN XtRPixmap -T} T{ -.PN XtCvtIntToPixmap -T} -T{ -.PN XtRPosition -T} T{ -.PN XtCvtIntToPosition -T} -T{ -.PN XtRShort -T} T{ -.PN XtCvtIntToShort -T} -T{ -.PN XtRUnsignedChar -T} T{ -.PN XtCvtIntToUnsignedChar -T} -.sp 6p -_ -.TE - -.LP -The \*(xI register the following resource converter that accepts -an input value of representation type -.PN XtRPixel . -.LP -.TS -lw(1.5i) lw(2.25i) lw(1.5i) . -_ -.sp 6p -Target Representation Converter Name Additional Args -.sp 6p -_ -.sp 6p -T{ -.PN XtRColor -T} T{ -.PN XtCvtPixelToColor -T} -.sp 6p -_ -.TE - -.NH 3 -New Resource Converters -.XS -\*(SN New Resource Converters -.XE -.LP -Type converters use pointers to -.PN XrmValue -structures (defined in -.Pn < X11/Xresource.h >; -see Section 15.4 in \fI\*(xL\fP) -for input and output values. -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - unsigned int size; - XPointer addr; -} XrmValue, *XrmValuePtr; -.De -.LP -.eM -The \fIaddr\fP field specifies the address of the data, and the \fIsize\fP -field gives the total number of significant bytes in the data. -For values of type -.PN String , -\fIaddr\fP is the address of the first character and \fIsize\fP -includes the NULL-terminating byte. -.LP -A resource converter procedure pointer is of type -.PN XtTypeConverter . -.LP -.IN "XtTypeConverter" "" "@DEF@" -.sM -.FD 0 -typedef Boolean (*XtTypeConverter)(Display*, XrmValue*, Cardinal*, - XrmValue*, XrmValue*, XtPointer*); -.br - Display *\fIdisplay\fP; -.br - XrmValue *\fIargs\fP; -.br - Cardinal *\fInum_args\fP; -.br - XrmValue *\fIfrom\fP; -.br - XrmValue *\fIto\fP; -.br - XtPointer *\fIconverter_data\fP; -.FN -.IP \fIdisplay\fP 1i -Specifies the display connection with which this conversion is associated. -.IP \fIargs\fP 1i -Specifies a list of additional -.PN XrmValue -arguments to the converter if additional context is needed -to perform the conversion, or NULL. -For example, the String-to-Font converter needs the widget's \fIdisplay\fP, -and the String-to-Pixel converter needs the widget's \fIscreen\fP and \fIcolormap\fP. -.IP \fInum_args\fP 1i -Specifies the number of entries in \fIargs\fP. -.IP \fIfrom\fP 1i -Specifies the value to convert. -.IP \fIto\fP 1i -Specifies a descriptor for a location into which to store the converted value. -.IP \fIconverter_data\fP 1i -Specifies a location into which the converter may -store converter-specific data associated -with this conversion. -.LP -.eM -The \fIdisplay\fP argument is normally used only when generating error -messages, to identify the application context (with the function -.PN XtDisplayToApplicationContext ). -.LP -The \fIto\fP argument specifies the size and location into which the -converter should store the converted value. If the \fIaddr\fP field is NULL, -the converter should allocate appropriate storage and store the size -and location into the \fIto\fP descriptor. If the type converter allocates -the storage, it remains under the ownership of the converter and must -not be modified by the caller. The type converter is permitted to use -static storage for this purpose, and therefore the caller must -immediately copy the data upon return from the converter. If the -\fIaddr\fP field is not NULL, the converter must check the \fIsize\fP field to -ensure that sufficient space has been allocated before storing the -converted value. If insufficient space is specified, the converter -should update the \fIsize\fP field with the number of bytes required and -return -.PN False -without modifying the data at the specified location. -If sufficient space was allocated by the caller, the converter should -update the \fIsize\fP field with the number of bytes actually occupied by the -converted value. For converted values of type -.PN XtRString , -the size should -include the NULL-terminating byte, if any. -The converter may store any value in the location specified -in \fIconverter_data\fP; this value will be passed to the destructor, if any, -when the resource is freed by the \*(xI. -.LP -The converter must return -.PN True -if the conversion was successful and -.PN False -otherwise. If the conversion cannot be performed because of an -improper source value, a warning message should also be issued with -.PN XtAppWarningMsg . - -.LP -Most type converters just take the data described by the specified \fIfrom\fP -argument and return data by writing into the location specified in -the \fIto\fP argument. -A few need other information, which is available in \fIargs\fP. -A type converter can invoke another type converter, -which allows differing sources that may convert into a common intermediate -result to make maximum use of the type converter cache. -.LP -Note that if an address is written into \fIto->addr\fP, it cannot be that -of a local variable of the converter because the data will not be -valid after the converter returns. Static variables may be used, -as in the following example. -If the converter modifies the resource database, -the changes affect any in-progress widget creation, -.PN XtGetApplicationResources , -or -.PN XtGetSubresources -in an implementation-defined manner; however, insertion of new entries -or changes to existing entries is allowed and will not directly cause -an error. - -.LP -The following is an example of a converter that takes a -.PN string -and converts it to a -.PN Pixel . -Note that the \fIdisplay\fP parameter is -used only to generate error messages; the -.PN Screen -conversion argument is -still required to inform the \*(xI that the converted value is -a function of the particular display (and colormap). -.LP -.Ds 0 -.TA .3i .7i 1i 1.3i 1.7i 2i 4i -.ta .3i .7i 1i 1.3i 1.7i 2i 4i - -#define done(type, value) \\ - { \\ - if (toVal->addr != NULL) { \\ - if (toVal->size < sizeof(type)) { \\ - toVal->size = sizeof(type); \\ - return False; \\ - } \\ - *(type*)(toVal->addr) = (value); \\ - } \\ - else { \\ - static type static_val; \\ - static_val = (value); \\ - toVal->addr = (XPointer)&static_val; \\ - } \\ - toVal->size = sizeof(type); \\ - return True; \\ - } - -static Boolean CvtStringToPixel(dpy, args, num_args, fromVal, toVal, converter_data) - Display *dpy; - XrmValue *args; - Cardinal *num_args; - XrmValue *fromVal; - XrmValue *toVal; - XtPointer *converter_data; -{ - static XColor screenColor; - XColor exactColor; - Screen *screen; - Colormap colormap; - Status status; - - if (*num_args != 2) - XtAppWarningMsg(XtDisplayToApplicationContext(dpy), - "wrongParameters", "cvtStringToPixel", "XtToolkitError", - "String to pixel conversion needs screen and colormap arguments", - (String *)NULL, (Cardinal *)NULL); - - screen = *((Screen**) args[0].addr); - colormap = *((Colormap *) args[1].addr); - - if (CompareISOLatin1(str, XtDefaultBackground) == 0) { - *closure_ret = False; - done(Pixel, WhitePixelOfScreen(screen)); - } - if (CompareISOLatin1(str, XtDefaultForeground) == 0) { - *closure_ret = False; - done(Pixel, BlackPixelOfScreen(screen)); - } - - - status = XAllocNamedColor(DisplayOfScreen(screen), colormap, (char*)fromVal->addr, - &screenColor, &exactColor); - - if (status == 0) { - String params[1]; - Cardinal num_params = 1; - params[0] = (String)fromVal->addr; - XtAppWarningMsg(XtDisplayToApplicationContext(dpy), - "noColormap", "cvtStringToPixel", "XtToolkitError", - "Cannot allocate colormap entry for \\"%s\\"", params,\ - &num_params); - *converter_data = (char *) False; - return False; - } else { - *converter_data = (char *) True; - done(Pixel, &screenColor.pixel); - } -} -.De -.LP -All type converters should define some set of conversion values for which they -are guaranteed to succeed so these can be used in the resource defaults. -This issue arises only with conversions, such as fonts and colors, -where there is no string representation that all server implementations -will necessarily recognize. -For resources like these, -the converter should define a symbolic constant -in the same manner as -.PN XtDefaultForeground , -.PN XtDefaultBackground , -and -.PN XtDefaultFont . -.sp -.LP -To allow the \*(xI to deallocate resources produced by type -converters, a resource destructor procedure may also be provided. -.LP -A resource destructor procedure pointer is of type -.PN XtDestructor . -.LP -.IN "XtDestructor" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtDestructor) (XtAppContext, XrmValue*, XtPointer, XrmValue*, \ -Cardinal*); -.br - XtAppContext \fIapp\fP; -.br - XrmValue *\fIto\fP; -.br - XtPointer \fIconverter_data\fP; -.br - XrmValue *\fIargs\fP; -.br - Cardinal *\fInum_args\fP; -.FN -.IP \fIapp\fP 1i -Specifies an application context in which the resource is being freed. -.IP \fIto\fP 1i -Specifies a descriptor for the resource produced by the type converter. -.IP \fIconverter_data\fP 1i -Specifies the converter-specific data returned by the type converter. -.IP \fIargs\fP 1i -Specifies the additional converter arguments as passed -to the type converter when the conversion was performed. -.IP \fInum_args\fP 1i -Specifies the number of entries in \fIargs\fP. -.LP -.eM -The destructor procedure is responsible for freeing the resource -specified by the \fIto\fP argument, including any auxiliary storage -associated with that resource, but not the memory directly addressed -by the size and location in the \fIto\fP argument or the memory specified -by \fIargs\fP. - -.NH 3 -Issuing Conversion Warnings -.XS -\*(SN Issuing Conversion Warnings -.XE -.LP -The -.PN XtDisplayStringConversionWarning -procedure is a convenience routine for resource type converters -that convert from string values. -.LP -.IN "XtDisplayStringConversionWarning" "" "@DEF@" -.sM -.FD 0 -void XtDisplayStringConversionWarning(\fIdisplay\fP, \fIfrom_value\fP, \ -\fIto_type\fP) -.br - Display *\fIdisplay\fP; -.br - String \fIfrom_value\fP, \fIto_type\fP; -.FN -.IP \fIdisplay\fP 1i -Specifies the display connection with which the conversion is associated. -.IP \fIfrom_value\fP 1i -Specifies the string that could not be converted. -.IP \fIto_type\fP 1i -Specifies the target representation type requested. -.LP -.eM -The -.PN XtDisplayStringConversionWarning -procedure issues a warning message using -.PN XtAppWarningMsg -with \fIname\fP ``conversionError'', -\fItype\fP ``string'', \fIclass\fP ``XtToolkitError'', and the default message -``Cannot convert "\fIfrom_value\fP" to type \fIto_type\fP''. -.LP -To issue other types of warning or error messages, the type converter -should use -.PN XtAppWarningMsg -or -.PN XtAppErrorMsg . -.sp -.LP -To retrieve the application context associated with a given -display connection, use -.PN XtDisplayToApplicationContext . -.LP -.IN "XtDisplayToApplicationContext" "" "@DEF@" -.sM -.FD 0 -XtAppContext XtDisplayToApplicationContext( \fIdisplay\fP ) -.br - Display *\fIdisplay\fP; -.FN -.IP \fIdisplay\fP 1i -Specifies an open and initialized display connection. -.LP -.eM -The -.PN XtDisplayToApplicationContext -function returns the application -context in which the specified \fIdisplay\fP was initialized. If the -display is not known to the \*(xI, an error message is issued. - -.NH 3 -Registering a New Resource Converter -.XS -\fB\*(SN Registering a New Resource Converter\fP -.XE -.LP -When registering a resource converter, the client must specify the -manner in which the conversion cache is to be used when there are multiple -calls to the converter. Conversion cache control is specified -via an -.PN XtCacheType -.LP -.IN "XtCacheType" "" "@DEF@" -argument. -.sM -.Ds 0 -typedef int XtCacheType; -.De -.LP -.eM -An -.PN XtCacheType -field may contain one of the following values: -.br -.sp -.LP -.PN XtCacheNone -.IN "XtCacheNone" "" "@DEF@" -.IP -Specifies that the results of a previous conversion -may not be reused to satisfy any other resource -requests; the specified converter will be called -each time the converted value is required. -.br -.sp -.LP -.PN XtCacheAll -.IN "XtCacheAll" "" "@DEF@" -.IP -Specifies that the results of a previous conversion -should be reused for any resource request that depends -upon the same source value and conversion arguments. -.br -.sp -.LP -.PN XtCacheByDisplay -.IN "XtCacheByDisplay" "" "@DEF@" -.IP -Specifies that the results of a previous conversion -should be used as for -.PN XtCacheAll -but the destructor will be called, if specified, if -.PN XtCloseDisplay -is called -for the display connection associated with the converted value, and -the value will be removed from the conversion cache. -.LP -The qualifier -.PN XtCacheRefCount -.IN "XtCacheRefCount" "" "@DEF@" -may be ORed with any of the above values. If -.PN XtCacheRefCount -is specified, calls to -.PN XtCreateWidget , -.PN XtCreateManagedWidget , -.PN XtGetApplicationResources , -and -.PN XtGetSubresources -that use the converted value will be counted. When a widget using the -converted value is destroyed, the count is decremented, and, if the -count reaches zero, the destructor procedure will be called and the -converted value will be removed from the conversion cache. - -.LP -To register a type converter for all application contexts in a -process, use -.PN XtSetTypeConverter , -and to register a type converter in a single application context, use -.PN XtAppSetTypeConverter . -.LP -.IN "XtSetTypeConverter" "" "@DEF@" -.sM -.FD 0 -void XtSetTypeConverter(\fIfrom_type\fP, \fIto_type\fP, \fIconverter\fP, \ -\fIconvert_args\fP, \fInum_args\fP, - \fIcache_type\fP, \fIdestructor\fP) -.br - String \fIfrom_type\fP; -.br - String \fIto_type\fP; -.br - XtTypeConverter \fIconverter\fP; -.br - XtConvertArgList \fIconvert_args\fP; -.br - Cardinal \fInum_args\fP; -.br - XtCacheType \fIcache_type\fP; -.br - XtDestructor \fIdestructor\fP; -.FN -.IP \fIfrom_type\fP 1i -Specifies the source type. -.IP \fIto_type\fP 1i -Specifies the destination type. -.IP \fIconverter\fP 1i -Specifies the resource type converter procedure. -.IP \fIconvert_args\fP 1i -Specifies additional conversion arguments, or NULL. -.IP \fInum_args\fP 1i -Specifies the number of entries in \fIconvert_args\fP. -.IP \fIcache_type\fP 1i -Specifies whether or not resources produced by this -converter are sharable or display-specific and when -they should be freed. -.IP \fIdestructor\fP 1i -Specifies a destroy procedure for resources produced by -this conversion, or NULL if no additional action is -required to deallocate resources produced by the converter. -.LP -.IN "XtAppSetTypeConverter" "" "@DEF@" -.FD 0 -void XtAppSetTypeConverter(\fIapp_context\fP, \fIfrom_type\fP, \fIto_type\fP, \ -\fIconverter\fP, \fIconvert_args\fP, - \fInum_args\fP, \fIcache_type\fP, \fIdestructor\fP) -.br - XtAppContext \fIapp_context\fP; -.br - String \fIfrom_type\fP; -.br - String \fIto_type\fP; -.br - XtTypeConverter \fIconverter\fP; -.br - XtConvertArgList \fIconvert_args\fP; -.br - Cardinal \fInum_args\fP; -.br - XtCacheType \fIcache_type\fP; -.br - XtDestructor \fIdestructor\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context. -.IP \fIfrom_type\fP 1i -Specifies the source type. -.IP \fIto_type\fP 1i -Specifies the destination type. -.IP \fIconverter\fP 1i -Specifies the resource type converter procedure. -.IP \fIconvert_args\fP 1i -Specifies additional conversion arguments, or NULL. -.IP \fInum_args\fP 1i -Specifies the number of entries in \fIconvert_args\fP. -.IP \fIcache_type\fP 1i -Specifies whether or not resources produced by this -converter are sharable or display-specific and when -they should be freed. -.IP \fIdestructor\fP 1i -Specifies a destroy procedure for resources produced by -this conversion, or NULL if no additional action is -required to deallocate resources produced by the converter. -.LP -.eM -.PN XtSetTypeConverter -registers the specified type converter and -destructor in all application contexts created by the calling process, -including any future application contexts that may be created. -.PN XtAppSetTypeConverter -registers the specified type converter in the -single application context specified. If the same \fIfrom_type\fP and -\fIto_type\fP are specified in multiple calls to either function, the most -recent overrides the previous ones. -.sp -.LP -For the few type converters that need additional arguments, -the \*(xI conversion mechanism provides a method of specifying -how these arguments should be computed. -The enumerated type -.PN XtAddressMode -and the structure -.PN XtConvertArgRec -specify how each argument is derived. -These are defined in -.Pn < X11/Intrinsic.h >. -.LP -.sM -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef enum { - /* address mode parameter representation */ - XtAddress, /* address */ - XtBaseOffset, /* offset */ - XtImmediate, /* constant */ - XtResourceString, /* resource name string */ - XtResourceQuark, /* resource name quark */ - XtWidgetBaseOffset, /* offset */ - XtProcedureArg /* procedure to call */ -} XtAddressMode; -.sp -typedef struct { - XtAddressMode address_mode; - XtPointer address_id; - Cardinal size; -} XtConvertArgRec, *XtConvertArgList; -.De -.eM -.LP -The \fIsize\fP field specifies the length of the data in bytes. -The \fIaddress_mode\fP field specifies how the \fIaddress_id\fP field should be -interpreted. -.PN XtAddress -.IN "XtAddress" "" "@DEF@" -causes \fIaddress_id\fP to be interpreted as the address of the data. -.PN XtBaseOffset -.IN "XtBaseOffset" "" "@DEF@" -causes \fIaddress_id\fP to be interpreted as the offset from the widget base. -.PN XtImmediate -.IN "XtImmediate" "" "@DEF@" -causes \fIaddress_id\fP to be interpreted as a constant. -.PN XtResourceString -.IN "XtResourceString" "" "@DEF@" -causes \fIaddress_id\fP to be interpreted as the name of a resource -that is to be converted into an offset from the widget base. -.PN XtResourceQuark -.IN "XtResourceQuark" "" "@DEF@" -causes \fIaddress_id\fP to be interpreted as the result of an -.PN XrmStringToQuark -conversion on the name of a resource, -which is to be converted into an offset from the widget base. -.PN XtWidgetBaseOffset -.IN "XtWidgetBaseOffset" "" "@DEF@" -is similar to -.PN XtBaseOffset -except that it -searches for the closest windowed ancestor if the object is not -of a subclass of -Core -(see Chapter 12). -.PN XtProcedureArg -.IN "XtProcedureArg" "" "@DEF@" -specifies that \fIaddress_id\fP is a pointer to a procedure to -be invoked to return the conversion argument. If -.PN XtProcedureArg -is specified, \fIaddress_id\fP must contain -the address of a function of type -.PN XtConvertArgProc . -.LP -.IN "XtConvertArgProc" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtConvertArgProc)(Widget, Cardinal*, XrmValue*); -.br - Widget \fIobject\fP; -.br - Cardinal *\fIsize\fP; -.br - XrmValue *\fIvalue\fP; -.FN -.IP \fIobject\fP 1i -Passes the object for which the resource is being -converted, or NULL if the converter was invoked by -.PN XtCallConverter -or -.PN XtDirectConvert . -.IP \fIsize\fP 1i -Passes a pointer to the \fIsize\fP field from the -.PN XtConvertArgRec . -.IP \fIvalue\fP 1i -Passes a pointer to a descriptor into which the procedure -must store the conversion argument. -.LP -.eM -When invoked, the -.PN XtConvertArgProc -procedure must derive a conversion -argument and store the address and size of the argument in the location -pointed to by \fIvalue\fP. -.LP -In order to permit reentrancy, the -.PN XtConvertArgProc -should return the address of storage whose lifetime is no shorter than the -lifetime of \fIobject\fP. If \fIobject\fP is NULL, the lifetime of the conversion -argument must be no shorter than the lifetime of the resource with -which the conversion argument is associated. The \*(xI do not -guarantee to copy this storage but do guarantee not to reference it if -the resource is removed from the conversion cache. -.LP -The following example illustrates how to register the CvtStringToPixel -routine given earlier: -.LP -.Ds -.TA .2i 3i -.ta .2i 3i -static XtConvertArgRec colorConvertArgs[] = { - {XtWidgetBaseOffset, (XtPointer)XtOffset(Widget, core.screen), sizeof(Screen*)}, - {XtWidgetBaseOffset, (XtPointer)XtOffset(Widget, core.colormap),sizeof(Colormap)} -}; - -XtSetTypeConverter(XtRString, XtRPixel, CvtStringToPixel, - colorConvertArgs, XtNumber(colorConvertArgs), XtCacheByDisplay, NULL); -.De -.LP -The conversion argument descriptors -.PN colorConvertArgs -and -.PN screenConvertArg -are predefined by the \*(xI. Both take the -values from the closest windowed ancestor if the object is not of a -subclass of -Core. -The -.PN screenConvertArg -descriptor puts the widget's \fIscreen\fP field into \fIargs\fP[0]. The -.PN colorConvertArgs -descriptor puts the widget's \fIscreen\fP field into \fIargs\fP[0], -and the widget's \fIcolormap\fP field into \fIargs\fP[1]. -.LP -Conversion routines should not just put a descriptor for the address of the -base of the widget into \fIargs\fP[0], and use that in the routine. -They should pass in the actual values on which the conversion depends. -By keeping the dependencies of the conversion procedure specific, -it is more likely that subsequent conversions will find what they need -in the conversion cache. -This way the cache is smaller and has fewer and more widely applicable entries. -.LP -If any conversion arguments of type -.PN XtBaseOffset , -.PN XtResourceString , -.PN XtResourceQuark , -and -.PN XtWidgetBaseOffset -are specified for conversions performed by -.PN XtGetApplicationResources , -.PN XtGetSubresources , -.PN XtVaGetApplicationResources , -or -.PN XtVaGetSubresources , -the arguments are -computed with respect to the specified widget, not the base address or -resource list specified in the call. -.LP -If the -.PN XtConvertArgProc -modifies the resource database, -the changes affect any in-progress widget creation, -.PN XtGetApplicationResources , -or -.PN XtGetSubresources -in an implementation-defined manner; however, insertion of new entries -or changes to existing entries are allowed and will not directly cause -an error. - -.NH 3 -Resource Converter Invocation -.XS -\fB\*(SN Resource Converter Invocation\fP -.XE -.LP -All resource-fetching routines (for example, -.PN XtGetSubresources , -.PN XtGetApplicationResources , -and so on) call resource converters if the resource database or -varargs list specifies a value -that has a different representation from the desired representation or if the -widget's default resource value representation is different from the desired -representation. -.sp -.LP -To invoke explicit resource conversions, use -.PN XtConvertAndStore -or -.PN XtCallConverter . -.LP -.sM -.Ds 0 -typedef XtPointer XtCacheRef; -.De -.IN "XtCallConverter" "" "@DEF@" -.FD 0 -Boolean XtCallConverter(\fIdisplay\fP, \fIconverter\fP, \ -\fIconversion_args\fP, \fInum_args\fP, \fIfrom\fP, \fIto_in_out\fP, - \fIcache_ref_return\fP) -.br - Display* \fIdisplay\fP; -.br - XtTypeConverter \fIconverter\fP; -.br - XrmValuePtr \fIconversion_args\fP; -.br - Cardinal \fInum_args\fP; -.br - XrmValuePtr \fIfrom\fP; -.br - XrmValuePtr \fIto_in_out\fP; -.br - XtCacheRef *\fIcache_ref_return\fP; -.FN -.IP \fIdisplay\fP 1.5i -Specifies the display with which the conversion is to be associated. -.IP \fIconverter\fP 1.5i -Specifies the conversion procedure to be called. -.IP \fIconversion_args\fP 1.5i -Specifies the additional conversion arguments needed -to perform the conversion, or NULL. -.IP \fInum_args\fP 1.5i -Specifies the number of entries in \fIconversion_args\fP. -.IP \fIfrom\fP 1.5i -Specifies a descriptor for the source value. -.IP \fIto_in_out\fP 1.5i -Returns the converted value. -.IP \fIcache_ref_return\fP 1.5i -Returns a conversion cache id. -.LP -.eM -The -.PN XtCallConverter -function looks up the -specified type converter in the application context associated with -the display and, if the converter was not registered or was registered -with cache type -.PN XtCacheAll -or -.PN XtCacheByDisplay , -looks in the conversion cache to see if this conversion procedure -has been called with the specified conversion arguments. If so, it -checks the success status of the prior call, and if -the conversion failed, -.PN XtCallConverter -returns -.PN False -immediately; -otherwise it checks the size specified in the \fIto\fP argument, and, if it is -greater than or equal to the size stored in the cache, copies the -information stored in the cache into the location specified by -\fIto->addr\fP, stores the cache size into \fIto->size\fP, and returns -.PN True . -If the size specified in the \fIto\fP argument is smaller than the size stored -in the cache, -.PN XtCallConverter -copies the cache size into \fIto->size\fP and returns -.PN False . -If the converter was registered with cache type -.PN XtCacheNone -or no value was found in the conversion cache, -.PN XtCallConverter -calls the converter, and if it was not registered with cache type -.PN XtCacheNone , -enters the result in the cache. -.PN XtCallConverter -then returns what the converter returned. -.LP -The \fIcache_ref_return\fP field specifies storage allocated by the caller in which -an opaque value will be stored. If the type converter has been -registered with the -.PN XtCacheRefCount -modifier and if the value returned -in \fIcache_ref_return\fP is non-NULL, then the caller should store the -\fIcache_ref_return\fP value in order to decrement the reference count when -the converted value is no longer required. The \fIcache_ref_return\fP -argument should be -NULL if the caller is unwilling or unable to store the -value. -.sp -.LP -To explicitly decrement the reference counts for resources obtained -from -.PN XtCallConverter , -use -.PN XtAppReleaseCacheRefs . -.LP -.IN "XtAppReleaseCacheRefs" "" "@DEF@" -.sM -.FD 0 -void XtAppReleaseCacheRefs(\fIapp_context\fP, \fIrefs\fP) -.br - XtAppContext \fIapp_context\fP; -.br - XtCacheRef *\fIrefs\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context. -.IP \fIrefs\fP 1i -Specifies the list of cache references to be released. -.LP -.eM -.PN XtAppReleaseCacheRefs -decrements the reference count for the -conversion entries identified by the \fIrefs\fP argument. -This argument is a -pointer to a NULL-terminated list of -.PN XtCacheRef -values. If any reference -count reaches zero, the destructor, if any, will be called and -the resource removed from the conversion cache. -.sp -.LP -As a convenience to clients needing to explicitly decrement reference -counts via a callback function, the \*(xI define two callback -procedures, -.PN XtCallbackReleaseCacheRef -and -.PN XtCallbackReleaseCacheRefList . -.LP -.IN "XtCallbackReleaseCacheRef" "" "@DEF@" -.sM -.FD 0 -void XtCallbackReleaseCacheRef(\fIobject\fP, \fIclient_data\fP, \fIcall_data\fP) -.br - Widget \fIobject\fP; -.br - XtPointer \fIclient_data\fP; -.br - XtPointer \fIcall_data\fP; -.FN -.IP \fIobject\fP 1i -Specifies the object with which the resource is associated. -.IP \fIclient_data\fP 1i -Specifies the conversion cache entry to be released. -.IP \fIcall_data\fP 1i -Is ignored. -.LP -.eM -This callback procedure may be added to a callback list to release a -previously returned -.PN XtCacheRef -value. When adding the callback, the -callback \fIclient_data\fP argument must be specified as the value of the -.PN XtCacheRef -data cast to type -.PN XtPointer . -.LP -.IN "XtCallbackReleaseCacheRefList" "" "@DEF@" -.sM -.FD 0 -void XtCallbackReleaseCacheRefList(\fIobject\fP, \fIclient_data\fP, \fIcall_data\fP) -.br - Widget \fIobject\fP; -.br - XtPointer \fIclient_data\fP; -.br - XtPointer \fIcall_data\fP; -.FN -.IP \fIobject\fP 1i -Specifies the object with which the resources are associated. -.IP \fIclient_data\fP 1i -Specifies the conversion cache entries to be released. -.IP \fIcall_data\fP 1i -Is ignored. -.LP -.eM -This callback procedure may be added to a callback list to release a -list of previously returned -.PN XtCacheRef -values. When adding the -callback, the callback \fIclient_data\fP argument must be specified as a -pointer to a NULL-terminated list of -.PN XtCacheRef -values. -.sp -.LP -To lookup and call a resource converter, copy the resulting value, -and free a cached resource when a widget is destroyed, use -.PN XtConvertAndStore . -.LP -.IN "XtConvertAndStore" "" "@DEF@" -.sM -.FD 0 -Boolean XtConvertAndStore(\fIobject\fP, \fIfrom_type\fP, \fIfrom\fP, \ -\fIto_type\fP, \fIto_in_out\fP) -.br - Widget \fIobject\fP; -.br - String \fIfrom_type\fP; -.br - XrmValuePtr \fIfrom\fP; -.br - String \fIto_type\fP; -.br - XrmValuePtr \fIto_in_out\fP; -.FN -.IP \fIobject\fP 1i -Specifies the object to use for additional arguments, if any are needed, -and the destroy callback list. \*(oI -.IP \fIfrom_type\fP 1i -Specifies the source type. -.IP \fIfrom\fP 1i -Specifies the value to be converted. -.IP \fIto_type\fP 1i -Specifies the destination type. -.IP \fIto_in_out\fP 1i -Specifies a descriptor for storage into which the converted value -will be returned. -.LP -.eM -The -.PN XtConvertAndStore -function looks up the type converter registered -to convert \fIfrom_type\fP to \fIto_type\fP, computes any additional arguments -needed, and then calls -.PN XtCallConverter -(or -.PN XtDirectConvert -if an old-style converter was registered with -.PN XtAddConverter -or -.PN XtAppAddConverter ; -see Appendix C) with the \fIfrom\fP and \fIto_in_out\fP arguments. The -\fIto_in_out\fP argument specifies the size and location into which the -converted value will be stored and is passed directly to the -converter. If the location is specified as NULL, it will be replaced -with a pointer to private storage and the size will be returned in the -descriptor. The caller is expected to copy this private storage -immediately and must not modify it in any way. If a non-NULL location -is specified, the caller must allocate sufficient storage to hold the -converted value and must also specify the size of that storage in the -descriptor. -The \fIsize\fP field will be modified on return to indicate the actual -size of the converted data. -If the conversion succeeds, -.PN XtConvertAndStore -returns -.PN True ; -otherwise, it returns -.PN False . -.LP -.PN XtConvertAndStore -adds -.PN XtCallbackReleaseCacheRef -.IN "destroyCallback" -to the destroyCallback list of the specified object if the conversion -returns an -.PN XtCacheRef -value. The resulting resource should not be referenced -after the object has been destroyed. -.LP -.PN XtCreateWidget -performs processing equivalent to -.PN XtConvertAndStore -when initializing the object instance. Because there is extra memory -overhead required to implement reference counting, clients may -distinguish those objects that are never destroyed before the -application exits from those that may be destroyed and whose -resources should be deallocated. -.LP -To specify whether reference counting is to be enabled for the -resources of a particular object when the object is created, the -client can specify a value for the -.PN Boolean -resource -XtNinitialResourcesPersistent, -.IN "XtNinitialResourcesPersistent" "" "@DEF@" -class -XtCInitialResourcesPersistent. -.LP -When -.PN XtCreateWidget -is called, if this resource is not specified as -.PN False -in either the arglist or the resource database, then the -resources referenced by this object are not reference-counted, regardless of -how the type converter may have been registered. The effective -default value is -.PN True ; -thus clients that expect to destroy one or -more objects and want resources deallocated must explicitly specify -.PN False -for -.IN XtNinitialResourcesPersistent -XtNinitialResourcesPersistent. -.LP -The resources are still freed and destructors called when -.PN XtCloseDisplay -is called if the conversion was registered as -.PN XtCacheByDisplay . - -.NH 2 -Reading and Writing Widget State -.XS -\fB\*(SN Reading and Writing Widget State\fP -.XE -.LP -Any resource field in a widget can be read or written by a client. -On a write operation, -the widget decides what changes it will actually allow and updates all -derived fields appropriately. - -.NH 3 -Obtaining Widget State -.XS -\fB\*(SN Obtaining Widget State\fP -.XE -.LP -To retrieve the current values of resources associated with a -widget instance, use -.PN XtGetValues . -.LP -.IN "XtGetValues" "" "@DEF@" -.sM -.FD 0 -void XtGetValues(\fIobject\fP, \fIargs\fP, \fInum_args\fP) -.br - Widget \fIobject\fP; -.br - ArgList \fIargs\fP; -.br - Cardinal \fInum_args\fP; -.FN -.IP \fIobject\fP 1i -Specifies the object whose resource values are to be returned. \*(oI -.IP \fIargs\fP 1i -Specifies the argument list of name/address pairs that contain the -resource names and the addresses into which the resource values are to -be stored. -The resource names are widget-dependent. -.IP \fInum_args\fP 1i -Specifies the number of entries in the argument list. -.LP -.eM -The -.PN XtGetValues -function starts with the resources specified for the Object class -and proceeds down the subclass chain to the class of the object. -The \fIvalue\fP field of a passed argument list must contain the -address into which to copy the contents of the corresponding -object instance field. If the field is a pointer type, the lifetime -of the pointed-to data is defined by the object class. For the -\*(xI-defined resources, the following lifetimes apply: -.IP \(bu 3 -Not valid following any operation that modifies the resource: -.RS -.IP \- 3 -XtNchildren resource of composite widgets. -.IP \- 3 -All resources of representation type XtRCallback. -.RE -.IP \(bu 3 -Remain valid at least until the widget is destroyed: -.RS -.IP \- 3 -XtNaccelerators, XtNtranslations. -.RE -.IP \(bu 3 -Remain valid until the Display is closed: -.RS -.IP \- 3 -XtNscreen. -.RE -.LP -It is the caller's responsibility -to allocate and deallocate storage for the copied data -according to the size of the -resource representation type used within the object. -.LP -If the class of the object's parent is a subclass of -.PN constraintWidgetClass , -.PN XtGetValues -then fetches the values for any constraint resources requested. -It starts with the constraint resources specified for -.PN constraintWidgetClass -and proceeds down the subclass chain to the parent's constraint resources. -If the argument list contains a resource name that is not found in any of the -resource lists searched, -the value at the corresponding address is not modified. -.IN "get_values_hook procedure" -If any get_values_hook procedures in the -object's class or superclass records are non-NULL, -they are called in superclass-to-subclass order after -all the resource values have been fetched by -.PN XtGetValues . -Finally, if the object's parent is a -subclass of -.PN constraintWidgetClass , -and if any of the parent's class or -superclass records have declared -.PN ConstraintClassExtension -records in -the Constraint class part \fIextension\fP field with a record type of -.PN \s-1NULLQUARK\s+1 , -and if the \fIget_values_hook\fP field in the extension record is non-NULL, -.PN XtGetValues -calls the get_values_hook procedures in superclass-to-subclass order. -This permits a Constraint parent to provide -nonresource data via -.PN XtGetValues . -.LP -Get_values_hook procedures may modify the data stored at the -location addressed by the \fIvalue\fP field, including (but not -limited to) making a copy of data whose resource representation is a -pointer. None of the \*(xI-defined object classes copy -data in this manner. Any operation that modifies the queried -object resource may invalidate the pointed-to data. - -.sp -.LP -To retrieve the current values of resources associated with a widget -instance using varargs lists, use -.PN XtVaGetValues . -.LP -.IN "XtVaGetValues" "" "@DEF@" -.sM -.FD 0 -void XtVaGetValues(\fIobject\fP, ...) -.br - Widget \fIobject\fP; -.FN -.IP \fIobject\fP 1i -Specifies the object whose resource values are to be returned. \*(oI -.IP ... 1i -Specifies the variable argument list for the resources to -be returned. -.LP -.eM -.PN XtVaGetValues -is identical in function to -.PN XtGetValues -with the \fIargs\fP -and \fInum_args\fP parameters replaced by a varargs list, as described in -Section 2.5.1. All value entries in the list must specify pointers to -storage allocated by the caller to which the resource value will be -copied. It is the caller's responsibility to ensure that sufficient -storage is allocated. If -.PN XtVaTypedArg -is specified, the \fItype\fP argument -specifies the representation desired by the caller and \fIthe\fP size argument -specifies the number of bytes allocated to store the result of the -conversion. If the size is insufficient, a warning message is issued -and the list entry is skipped. - -.NH 4 -Widget Subpart Resource Data: The get_values_hook Procedure -.XS -\*(SN Widget Subpart Resource Data: The get_values_hook Procedure -.XE -.LP -Widgets that have subparts can return resource values from them through -.PN XtGetValues -by supplying a get_values_hook procedure. -The get_values_hook procedure pointer is of type -.PN XtArgsProc . -.LP -.IN "get_values_hook procedure" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtArgsProc)(Widget, ArgList, Cardinal*); -.br - Widget \fIw\fP; -.br - ArgList \fIargs\fP; -.br - Cardinal *\fInum_args\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget whose subpart resource values are to be retrieved. -.IP \fIargs\fP 1i -Specifies the argument list that was passed to -.PN XtGetValues -or the transformed varargs list passed to -.PN XtVaGetValues . -.IP \fInum_args\fP 1i -Specifies the number of entries in the argument list. -.LP -.eM -The widget with subpart resources should call -.PN XtGetSubvalues -in the get_values_hook procedure -and pass in its subresource list and the \fIargs\fP and \fInum_args\fP parameters. - -.NH 4 -Widget Subpart State -.XS -\*(SN Widget Subpart State -.XE -.LP -To retrieve the current values of subpart resource data associated with a -widget instance, use -.PN XtGetSubvalues . -For a discussion of subpart resources, -see Section 9.4. -.LP -.IN "XtGetSubvalues" "" "@DEF@" -.sM -.FD 0 -void XtGetSubvalues(\fIbase\fP, \fIresources\fP, \fInum_resources\fP, \ -\fIargs\fP, \fInum_args\fP) -.br - XtPointer \fIbase\fP; -.br - XtResourceList \fIresources\fP; -.br - Cardinal \fInum_resources\fP; -.br - ArgList \fIargs\fP; -.br - Cardinal \fInum_args\fP; -.FN -.IP \fIbase\fP 1i -Specifies the base address of the subpart data structure for which the -resources should be retrieved. -.IP \fIresources\fP 1i -Specifies the subpart resource list. -.IP \fInum_resources\fP 1i -Specifies the number of entries in the resource list. -.IP \fIargs\fP 1i -Specifies the argument list of name/address pairs that contain the -resource names and the addresses into which the resource values are to -be stored. -.IP \fInum_args\fP 1i -Specifies the number of entries in the argument list. -.LP -.eM -The -.PN XtGetSubvalues -function obtains resource values from the structure identified by \fIbase\fP. -The \fIvalue\fP field in each argument entry must contain the address into -which to store the corresponding resource value. It is the caller's -responsibility to allocate and deallocate this storage according to -the size of the resource representation type used within the subpart. -If the argument list contains a resource name that is not found in the -resource list, the value at the corresponding address is not modified. - -.sp -.LP -To retrieve the current values of subpart resources associated with -a widget instance using varargs lists, use -.PN XtVaGetSubvalues . -.LP -.IN "XtVaGetSubvalues" "" "@DEF@" -.sM -.FD 0 -void XtVaGetSubvalues(\fIbase\fP, \fIresources\fP, \fInum_resources\fP, ...) -.br - XtPointer \fIbase\fP; -.br - XtResourceList \fIresources\fP; -.br - Cardinal \fInum_resources\fP; -.FN -.IP \fIbase\fP 1i -Specifies the base address of the subpart data structure for which the -resources should be retrieved. -.IP \fIresources\fP 1i -Specifies the subpart resource list. -.IP \fInum_resources\fP 1i -Specifies the number of entries in the resource list. -.IP ... 1i -Specifies a variable argument list of name/address pairs that -contain the resource names and the addresses into which the resource -values are to be stored. -.LP -.eM -.PN XtVaGetSubvalues -is identical in function to -.PN XtGetSubvalues -with the -\fIargs\fP and \fInum_args\fP parameters replaced by a varargs list, as described -in Section 2.5.1. -.PN XtVaTypedArg -is not supported for -.PN XtVaGetSubvalues . -If -.PN XtVaTypedArg -is specified in the list, a warning message is issued -and the entry is then ignored. - -.NH 3 -Setting Widget State -.XS -\fB\*(SN Setting Widget State\fP -.XE -.LP -To modify the current values of resources associated with a widget -instance, use -.PN XtSetValues . -.LP -.IN "XtSetValues" "" "@DEF@" -.sM -.FD 0 -void XtSetValues(\fIobject\fP, \fIargs\fP, \fInum_args\fP) -.br - Widget \fIobject\fP; -.br - ArgList \fIargs\fP; -.br - Cardinal \fInum_args\fP; -.FN -.IP \fIobject\fP 1i -Specifies the object whose resources are to be modified. \*(oI -.IP \fIargs\fP 1i -Specifies the argument list of name/value pairs that contain the -resources to be modified and their new values. -.IP \fInum_args\fP 1i -Specifies the number of entries in the argument list. -.LP -.eM -The -.PN XtSetValues -function starts with the resources specified for the -Object -class fields and proceeds down the subclass chain to the object. -At each stage, it replaces the \fIobject\fP resource fields with any values -specified in the argument list. -.PN XtSetValues -then calls the set_values procedures for the object in superclass-to-subclass -order. -.IN "set_values_hook procedure" -If the object has any non-NULL \fIset_values_hook\fP fields, -these are called immediately after the -corresponding set_values procedure. -This procedure permits subclasses to set subpart data via -.PN XtSetValues . -.LP -If the class of the object's parent is a subclass of -.PN constraintWidgetClass , -.PN XtSetValues -also updates the object's constraints. -It starts with the constraint resources specified for -.PN constraintWidgetClass -and proceeds down the subclass chain to the parent's class. -At each stage, it replaces the constraint resource fields with any -values specified in the argument list. -It then calls the constraint set_values procedures from -.PN constraintWidgetClass -down to the parent's class. -The constraint set_values procedures are called with widget arguments, -as for all set_values procedures, not just the constraint records, -so that they can make adjustments to the desired values based -on full information about the widget. Any arguments specified that -do not match a resource list entry are silently ignored. -.LP -If the object is of a subclass of -RectObj, -.PN XtSetValues -determines if a geometry request is needed by comparing the old object to -the new object. -If any geometry changes are required, -.PN XtSetValues -restores the original geometry and makes the request on behalf of the widget. -If the geometry manager returns -.PN XtGeometryYes , -.PN XtSetValues -calls the object's resize procedure. -If the geometry manager returns -.PN XtGeometryDone , -.PN XtSetValues -continues, as the object's resize procedure should have been called -by the geometry manager. -If the geometry manager returns -.PN XtGeometryNo , -.PN XtSetValues -ignores the geometry request and continues. -If the geometry manager returns -.PN XtGeometryAlmost , -.PN XtSetValues -calls the set_values_almost procedure, -which determines what should be done. -.PN XtSetValues -then repeats this process, -deciding once more whether the geometry manager should be called. -.LP -Finally, if any of the set_values procedures returned -.PN True , -and the widget is realized, -.PN XtSetValues -causes the widget's expose procedure to be invoked by calling -.PN XClearArea -on the widget's window. -.sp -.LP -To modify the current values of resources associated with a widget -instance using varargs lists, use -.PN XtVaSetValues . -.LP -.IN "XtVaSetValues" "" "@DEF@" -.sM -.FD 0 -void XtVaSetValues(\fIobject\fP, ...) -.br - Widget \fIobject\fP; -.FN -.IP \fIobject\fP 1i -Specifies the object whose resources are to be modified. \*(oI -.IP ... 1i -Specifies the variable argument list of name/value pairs that -contain the resources to be modified and their new values. -.LP -.eM -.PN XtVaSetValues -is identical in function to -.PN XtSetValues -with the \fIargs\fP and \fInum_args\fP parameters replaced by a varargs list, as -described in Section 2.5.1. - -.NH 4 -Widget State: The set_values Procedure -.XS -\*(SN Widget State: The set_values Procedure -.XE -.LP -The set_values procedure pointer in a widget class is of type -.PN XtSetValuesFunc . -.LP -.IN "XtSetValuesFunc" "" "@DEF@" -.IN "set_values procedure" "" "@DEF@" -.sM -.FD 0 -typedef Boolean (*XtSetValuesFunc)(Widget, Widget, Widget, ArgList, Cardinal*); -.br - Widget \fIcurrent\fP; -.br - Widget \fIrequest\fP; -.br - Widget \fInew\fP; -.br - ArgList \fIargs\fP; -.br - Cardinal *\fInum_args\fP; -.FN -.IP \fIcurrent\fP 1i -Specifies a copy of the widget as it was before the -.PN XtSetValues -call. -.IP \fIrequest\fP 1i -Specifies a copy of the widget with all values changed as asked for by the -.PN XtSetValues -call before any class set_values procedures have been called. -.IP \fInew\fP 1i -Specifies the widget with the new values that are actually allowed. -.IP \fIargs\fP 1i -Specifies the argument list passed to -.PN XtSetValues -or the transformed argument list passed to -.PN XtVaSetValues . -.IP \fInum_args\fP 1i -Specifies the number of entries in the argument list. -.LP -.eM -The set_values procedure should recompute any field -derived from resources that are changed -(for example, many GCs depend on foreground and background pixels). -If no recomputation is necessary, and if none of the resources specific to a -subclass require the window to be redisplayed when their values are changed, -you can specify NULL for the \fIset_values\fP field in the class record. -.LP -Like the initialize procedure, -set_values mostly deals only with the fields defined in the subclass, -but it has to resolve conflicts with its superclass, -especially conflicts over width and height. -.LP -Sometimes a subclass may want to overwrite values filled in by its -superclass. -In particular, size calculations of a superclass are often -incorrect for a subclass, and, in this case, -the subclass must modify or recalculate fields declared -and computed by its superclass. -.LP -As an example, -a subclass can visually surround its superclass display. -In this case, the width and height calculated by the superclass set_values -procedure are too small and need to be incremented by the size of the surround. -The subclass needs to know if its superclass's size was calculated by the -superclass or was specified explicitly. -All widgets must place themselves into whatever size is explicitly given, -but they should compute a reasonable size if no size is requested. -How does a subclass know the difference between a specified size -and a size computed by a superclass? -.LP -The \fIrequest\fP and \fInew\fP parameters provide the necessary information. -The \fIrequest\fP widget is a copy of the widget, updated as originally requested. -The \fInew\fP widget starts with the values in the request, -but it has additionally been updated by all superclass set_values -procedures called so far. -A subclass set_values procedure can compare these two to resolve -any potential conflicts. -The set_values procedure need not refer to the \fIrequest\fP widget -unless it must resolve conflicts between the \fIcurrent\fP and \fInew\fP widgets. -Any changes the widget needs to make, including geometry changes, -should be made in the \fInew\fP widget. -.LP -In the above example, -the subclass with the visual surround can see -if the \fIwidth\fP and \fIheight\fP in the \fIrequest\fP widget are zero. -If so, -it adds its surround size to the \fIwidth\fP and -\fIheight\fP fields in the \fInew\fP widget. -If not, it must make do with the size originally specified. -In this case, zero is a special value defined by the class to permit -the application to invoke this behavior. -.LP -The \fInew\fP widget is the actual widget instance record. -Therefore, -the set_values procedure should do all its work on the \fInew\fP widget; -the \fIrequest\fP widget should never be modified. -If the set_values procedure needs to call any routines that operate on -a widget, it should specify \fInew\fP as the widget instance. -.LP -Before calling the set_values procedures, the \*(xI modify the -resources of the \fIrequest\fP widget according to the contents of the arglist; -if the widget names all its resources in the class resource list, it is -never necessary to examine the contents of \fIargs\fP. -.LP -Finally, the set_values procedure must return a Boolean that indicates whether -the widget needs to be redisplayed. -Note that a change in the geometry fields alone does not require -the set_values procedure to return -.PN True ; -the X server will eventually generate an -.PN Expose -event, if necessary. -After calling all the set_values procedures, -.PN XtSetValues -forces a redisplay by calling -.PN XClearArea -if any of the set_values procedures returned -.PN True . -Therefore, a set_values procedure should not try to do its own redisplaying. -.LP -Set_values procedures should not do any work in response to changes in -geometry because -.PN XtSetValues -eventually will perform a geometry request, and that request might be denied. -If the widget actually changes size in response to a -call to -.PN XtSetValues , -its resize procedure is called. -Widgets should do any geometry-related work in their resize procedure. -.LP -Note that it is permissible to call -.PN XtSetValues -before a widget is realized. -Therefore, the set_values procedure must not assume that the widget is realized. - -.NH 4 -Widget State: The set_values_almost Procedure -.XS -\*(SN Widget State: The set_values_almost Procedure -.XE -.LP -The set_values_almost procedure pointer in the widget class record is of type -.PN XtAlmostProc . -.LP -.IN "set_values_almost procedure" "" "@DEF@" -.IN "XtAlmostProc" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtAlmostProc)(Widget, Widget, XtWidgetGeometry*, \ -XtWidgetGeometry*); -.br - Widget \fIold\fP; -.br - Widget \fInew\fP; -.br - XtWidgetGeometry *\fIrequest\fP; -.br - XtWidgetGeometry *\fIreply\fP; -.FN -.IP \fIold\fP 1i -Specifies a copy of the object as it was before the -.PN XtSetValues -call. -.IP \fInew\fP 1i -Specifies the object instance record. -.IP \fIrequest\fP 1i -Specifies the original geometry request that was sent to the geometry -manager that caused -.PN XtGeometryAlmost -to be returned. -.IP \fIreply\fP 1i -Specifies the compromise geometry that was returned by the geometry -manager with -.PN XtGeometryAlmost . -.LP -.eM -Most classes inherit the set_values_almost procedure from their superclass by -specifying -.PN XtInheritSetValuesAlmost -in the class initialization. -The -set_values_almost procedure in -.PN rectObjClass -accepts the compromise suggested. -.LP -The set_values_almost procedure is called when a client tries to set a widget's -geometry by means of a call to -.PN XtSetValues -and the geometry manager cannot -satisfy the request but instead returns -.PN XtGeometryNo -or -.PN XtGeometryAlmost -and a compromise geometry. -The \fInew\fP object is the actual instance record. The \fIx\fP, \fIy\fP, -\fIwidth\fP, \fIheight\fP, -and \fIborder_width\fP fields contain the original values as they were -before the -.PN XtSetValues -call, and all other fields contain the new -values. The \fIrequest\fP parameter contains the new geometry request that -was made to the parent. The \fIreply\fP parameter contains -\fIreply->request_mode\fP equal to zero if the parent returned -.PN XtGeometryNo -and contains the parent's compromise geometry otherwise. The -set_values_almost procedure takes the original geometry and the -compromise geometry and determines if the compromise is -acceptable or whether -to try a different compromise. -It returns its results in the \fIrequest\fP parameter, -which is then sent back to the geometry manager for another try. -To accept the compromise, the procedure must copy the contents -of the \fIreply\fP geometry into the \fIrequest\fP geometry; to attempt an -alternative geometry, the procedure may modify any part of the \fIrequest\fP -argument; to terminate the geometry negotiation and retain the -original geometry, the procedure must set \fIrequest->request_mode\fP to -zero. The geometry fields of the \fIold\fP and \fInew\fP instances must not be modified -directly. - -.NH 4 -Widget State: The ConstraintClassPart set_values Procedure -.XS -\*(SN Widget State: The ConstraintClassPart set_values Procedure -.XE -.IN "set_values procedure" -.LP -The constraint set_values procedure pointer is of type -.PN XtSetValuesFunc . -The values passed to the parent's constraint set_values procedure -are the same as those passed to the child's class -set_values procedure. -A class can specify NULL for the \fIset_values\fP field of the -.PN ConstraintPart -if it need not compute anything. -.LP -The constraint set_values procedure should recompute any constraint fields -derived from constraint resources that are changed. -Furthermore, it may modify other widget fields as appropriate. -For example, if a constraint for the maximum height of a widget is changed -to a value smaller than the widget's current height, -the constraint set_values procedure may reset the \fIheight\fP field in the -widget. - -.NH 4 -Widget Subpart State -.XS -\*(SN Widget Subpart State -.XE -.LP -To set the current values of subpart resources associated with a -widget instance, use -.PN XtSetSubvalues . -For a discussion of subpart resources, -see Section 9.4. -.LP -.IN "XtSetSubvalues" "" "@DEF@" -.sM -.FD 0 -void XtSetSubvalues(\fIbase\fP, \fIresources\fP, \fInum_resources\fP, \ -\fIargs\fP, \fInum_args\fP) -.br - XtPointer \fIbase\fP; -.br - XtResourceList \fIresources\fP; -.br - Cardinal \fInum_resources\fP; -.br - ArgList \fIargs\fP; -.br - Cardinal \fInum_args\fP; -.FN -.IP \fIbase\fP 1i -Specifies the base address of the subpart data structure into which the -resources should be written. -.IP \fIresources\fP 1i -Specifies the subpart resource list. -.IP \fInum_resources\fP 1i -Specifies the number of entries in the resource list. -.IP \fIargs\fP 1i -Specifies the argument list of name/value pairs that contain the -resources to be modified and their new values. -.IP \fInum_args\fP 1i -Specifies the number of entries in the argument list. -.LP -.eM -The -.PN XtSetSubvalues -function updates the resource fields of the structure identified by -\fIbase\fP. Any specified arguments that do not match an entry in the -resource list are silently ignored. -.sp -.LP -To set the current values of subpart resources associated with -a widget instance using varargs lists, use -.PN XtVaSetSubvalues . -.LP -.IN "XtVaSetSubvalues" "" "@DEF@" -.sM -.FD 0 -void XtVaSetSubvalues(\fIbase\fP, \fIresources\fP, \fInum_resources\fP, ...) -.br - XtPointer \fIbase\fP; -.br - XtResourceList \fIresources\fP; -.br - Cardinal \fInum_resources\fP; -.FN -.IP \fIbase\fP 1i -Specifies the base address of the subpart data structure into which the -resources should be written. -.IP \fIresources\fP 1i -Specifies the subpart resource list. -.IP \fInum_resources\fP 1i -Specifies the number of entries in the resource list. -.IP ... 1i -Specifies the variable argument list of name/value pairs that -contain the resources to be modified and their new values. -.LP -.eM -.PN XtVaSetSubvalues -is identical in function to -.PN XtSetSubvalues -with the \fIargs\fP and \fInum_args\fP parameters replaced by a varargs list, as -described in Section 2.5.1. -.PN XtVaTypedArg -is not supported for -.PN XtVaSetSubvalues . -If an entry containing -.PN XtVaTypedArg -is specified in the list, a warning message is issued -and the entry is ignored. - -.NH 4 -Widget Subpart Resource Data: The set_values_hook Procedure -.XS -\*(SN Widget Subpart Resource Data: The set_values_hook Procedure -.XE -.IN "set_values_hook procedure" -.NT -The set_values_hook procedure is obsolete, as the same information -is now available to the set_values procedure. The procedure has been -retained for those widgets that used it in versions prior to Release 4. -.NE -.LP -Widgets that have a subpart can set the subpart resource values through -.PN XtSetValues -by supplying a set_values_hook procedure. -The set_values_hook procedure pointer in a widget class is of type -.PN XtArgsFunc . -.LP -.IN "set_values_hook procedure" "" "@DEF@" -.IN "XtArgsFunc" "" "@DEF@" -.sM -.FD 0 -typedef Boolean (*XtArgsFunc)(Widget, Arglist, Cardinal*); -.br - Widget \fIw\fP; -.br - Arglist \fIargs\fP; -.br - Cardinal *\fInum_args\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget whose subpart resource values are to be changed. -.IP \fIargs\fP 1i -Specifies the argument list that was passed to -.PN XtSetValues -or the transformed varargs list passed to -.PN XtVaSetValues . -.IP \fInum_args\fP 1i -Specifies the number of entries in the argument list. -.LP -.eM -The widget with subpart resources may call -.PN XtSetValues -from the set_values_hook procedure -and pass in its subresource list and the -\fIargs\fP and \fInum_args\fP parameters. -.bp diff --git a/doc/xorg-docs/specs/Xt/CH10 b/doc/xorg-docs/specs/Xt/CH10 deleted file mode 100644 index b7c0139ca..000000000 --- a/doc/xorg-docs/specs/Xt/CH10 +++ /dev/null @@ -1,1521 +0,0 @@ -.\" $Xorg: CH10,v 1.3 2000/08/17 19:42:46 cpqbld Exp $ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" Digital Equipment Corporation, Maynard, Massachusetts. -.\" -.\" Permission to use, copy, modify and distribute this documentation for any -.\" purpose and without fee is hereby granted, provided that the above copyright -.\" notice appears in all copies and that both that copyright notice and this -.\" permission notice appear in supporting documentation, and that the name of -.\" Digital not be used in in advertising or publicity pertaining -.\" to distribution of the software without specific, written prior permission. -.\" Digital makes no representations about the suitability of the -.\" software described herein for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBChapter 10\fP\s-1 - -\s+1\fBTranslation Management\s-1 -.sp 2 -.nr H1 10 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.LP -.XS -Chapter 10 \(em Translation Management -.XE -Except under unusual circumstances, -widgets do not hardwire the mapping of user events into widget behavior -by using the event manager. -Instead, they provide a default mapping of events into behavior -that you can override. -.LP -The translation manager provides an interface to specify and manage the -mapping of X event sequences into widget-supplied functionality, -for example, calling procedure \fIAbc\fP when the \fIy\fP key -is pressed. -.LP -The translation manager uses two kinds of tables to perform translations: -.IP \(bu 5 -The action tables, which are in the widget class structure, -specify the mapping of externally available procedure name strings -to the corresponding procedure implemented by the widget class. -.IP \(bu 5 -A translation table, which is in the widget class structure, -specifies the mapping of event sequences to procedure name strings. -.LP -You can override the translation table in the class structure -for a specific widget instance by supplying a different translation table -for the widget instance. The resources -XtNtranslations and XtNbaseTranslations are used to modify the class -default translation table; see Section 10.3. - -.NH 2 -Action Tables -.XS -\fB\*(SN Action Tables\fP -.XE -.LP -All widget class records contain an action table, -an array of -.PN XtActionsRec -entries. -In addition, -an application can register its own action tables with the translation manager -so that the translation tables it provides to widget instances can access -application functionality directly. -The translation action procedure pointer is of type -.PN XtActionProc . -.LP -.IN "action_proc procedure" "" "@DEF@" -.IN "XtActionProc" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtActionProc)(Widget, XEvent*, String*, Cardinal*); -.br - Widget \fIw\fP; -.br - XEvent *\fIevent\fP; -.br - String *\fIparams\fP; -.br - Cardinal *\fInum_params\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget that caused the action to be called. -.IP \fIevent\fP 1i -Specifies the event that caused the action to be called. -If the action is called after a sequence of events, -then the last event in the sequence is used. -.IP \fIparams\fP 1i -Specifies a pointer to the list of strings that were specified -in the translation table as arguments to the action, or NULL. -.IP \fInum_params\fP 1i -Specifies the number of entries in \fIparams\fP. -.IN "XtActionsRec" -.IN "XtActionList" -.LP -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct _XtActionsRec { - String string; - XtActionProc proc; -} XtActionsRec, *XtActionList; -.De -.LP -.eM -The \fIstring\fP field is the name used in translation tables to access -the procedure. -The \fIproc\fP field is a pointer to a procedure that implements -the functionality. -.LP -When the action list is specified as the -.PN CoreClassPart -\fIactions\fP field, the string pointed to by \fIstring\fP must be -permanently allocated prior to or during the execution of the class -initialization procedure and must not be subsequently deallocated. -.LP -Action procedures should not assume that the widget in which they -are invoked is realized; an accelerator specification can cause -an action procedure to be called for a widget that does not yet -have a window. Widget writers should also note which of a widget's -callback lists are invoked from action procedures and warn clients -not to assume the widget is realized in those callbacks. -.LP -For example, a Pushbutton widget has procedures to take the following actions: -.IP \(bu 5 -Set the button to indicate it is activated. -.IP \(bu 5 -Unset the button back to its normal mode. -.IP \(bu 5 -Highlight the button borders. -.IP \(bu 5 -Unhighlight the button borders. -.IP \(bu 5 -Notify any callbacks that the button has been activated. -.LP -The action table for the Pushbutton widget class makes these functions -available to translation tables written for Pushbutton or any subclass. -The string entry is the name used in translation tables. -The procedure entry (usually spelled identically to the string) -is the name of the C procedure that implements that function: -.LP -.IN "Action Table" -.Ds -.TA .5i 1.5i -.ta .5i 1.5i -XtActionsRec actionTable[] = { - {"Set", Set}, - {"Unset", Unset}, - {"Highlight", Highlight}, - {"Unhighlight", Unhighlight} - {"Notify", Notify}, -}; -.De -.LP -The \*(xI reserve all action names and parameters starting with -the characters ``Xt'' for future standard enhancements. Users, -applications, and widgets should not declare action names or pass -parameters starting with these characters except to invoke specified -built-in \*(xI functions. - -.NH 3 -Action Table Registration -.XS -\fB\*(SN Action Table Registration\fP -.XE -.LP -.IN "actions" -The \fIactions\fP and \fInum_actions\fP fields of -.PN CoreClassPart -specify the actions implemented by a widget class. These are -automatically registered with the \*(xI when the class is initialized -and must be allocated in writable storage prior to Core class_part -initialization, and never deallocated. To save memory and optimize -access, the \*(xI may overwrite the storage in order to compile the -list into an internal representation. -.sp -.LP -To declare an action table within an application -and register it with the translation manager, use -.PN XtAppAddActions . -.LP -.IN "XtAppAddActions" "" "@DEF@" -.sM -.FD 0 -void XtAppAddActions(\fIapp_context\fP, \fIactions\fP, \fInum_actions\fP) -.br - XtAppContext \fIapp_context\fP; -.br - XtActionList \fIactions\fP; -.br - Cardinal \fInum_actions\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context. -.IP \fIactions\fP 1i -Specifies the action table to register. -.IP \fInum_actions\fP 1i -Specifies the number of entries in this action table. -.LP -.eM -If more than one action is registered with the same name, -the most recently registered action is used. -If duplicate actions exist in an action table, -the first is used. -The \*(xI register an action table containing -.PN XtMenuPopup -and -.PN XtMenuPopdown -as part of -.PN XtCreateApplicationContext . - -.NH 3 -Action Names to Procedure Translations -.XS -\fB\*(SN Action Names to Procedure Translations\fP -.XE -.LP -The translation manager uses a simple algorithm to resolve the name of -a procedure specified in a translation table into the -actual procedure specified -in an action table. -When the widget -is realized, the translation manager -performs a search for the name in the following tables, in order: -.IP \(bu 5 -The widget's class and all superclass action tables, in subclass-to-superclass -order. -.IP \(bu 5 -The parent's class and all superclass action tables, in subclass-to-superclass -order, then on up the ancestor tree. -.IP \(bu 5 -The action tables registered with -.PN XtAppAddActions -and -.PN XtAddActions -from the most recently added table to the oldest table. -.LP -As soon as it finds a name, -the translation manager stops the search. -If it cannot find a name, -the translation manager generates a warning message. - -.NH 3 -Action Hook Registration -.XS -\fB\*(SN Action Hook Registration\fP -.XE -.LP -An application can specify a procedure that will be called just before -every action routine is dispatched by the translation manager. To do -so, the application supplies a procedure pointer of type -.PN XtActionHookProc . -.LP -.IN "XtActionHookProc" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtActionHookProc)(Widget, XtPointer, String, XEvent*, \ -String*, Cardinal*); -.br - Widget \fIw\fP; -.br - XtPointer \fIclient_data\fP; -.br - String \fIaction_name\fP; -.br - XEvent* \fIevent\fP; -.br - String* \fIparams\fP; -.br - Cardinal* \fInum_params\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget whose action is about to be dispatched. -.IP \fIclient_data\fP 1i -Specifies the application-specific closure that was passed to -.PN XtAppAddActionHook. -.IP \fIaction_name\fP 1i -Specifies the name of the action to be dispatched. -.IP \fIevent\fP 1i -Specifies the event argument that will be passed to the action routine. -.IP \fIparams\fP 1i -Specifies the action parameters that will be passed to the action routine. -.IP \fInum_params\fP 1i -Specifies the number of entries in \fIparams\fP. -.LP -.eM -Action hooks should not modify any of the data pointed to by the -arguments other than the \fIclient_data\fP argument. -.sp -.LP -To add an action hook, use -.PN XtAppAddActionHook . -.LP -.IN "XtAppAddActionHook" "" "@DEF@" -.sM -.FD 0 -XtActionHookId XtAppAddActionHook(\fIapp\fP, \fIproc\fP, \fIclient_data\fP) -.br - XtAppContext \fIapp\fP; -.br - XtActionHookProc \fIproc\fP; -.br - XtPointer \fIclient_data\fP; -.FN -.IP \fIapp\fP 1i -Specifies the application context. -.IP \fIproc\fP 1i -Specifies the action hook procedure. -.IP \fIclient_data\fP 1i -Specifies application-specific data to be passed to the action hook. -.LP -.eM -.PN XtAppAddActionHook -adds the specified procedure to the front of a list -maintained in the application context. In the future, when an action -routine is about to be invoked for any widget in this application -context, either through the translation manager or via -.PN XtCallActionProc , -the action hook procedures will be called in reverse -order of registration just prior to invoking the action routine. -.LP -Action hook procedures are removed automatically and the -.PN XtActionHookId is -destroyed when the application context in which -they were added is destroyed. -.sp -.LP -To remove an action hook procedure without destroying the application -context, use -.PN XtRemoveActionHook . -.LP -.IN "XtRemoveActionHook" "" "@DEF@" -.sM -.FD 0 -void XtRemoveActionHook(\fIid\fP) -.br - XtActionHookId \fIid\fP; -.FN -.IP \fIid\fP 1i -Specifies the action hook id returned by -.PN XtAppAddActionHook . -.LP -.eM -.PN XtRemoveActionHook -removes the specified action hook procedure from -the list in which it was registered. - -.NH 2 -Translation Tables -.XS -\fB\*(SN Translation Tables\fP -.XE -.LP -All widget instance records contain a translation table, -which is a resource with a default value specified elsewhere in the -class record. -A translation table specifies what action procedures are invoked for -an event or a sequence of events. -A translation table -is a string containing a list of translations from an event sequence -into one or more action procedure calls. -The translations are separated from one another by newline characters -(ASCII LF). -The complete syntax of translation tables is specified in Appendix B. -.LP -As an example, the default behavior of Pushbutton is -.IP \(bu 5 -Highlight on enter window. -.IP \(bu 5 -Unhighlight on exit window. -.IP \(bu 5 -Invert on left button down. -.IP \(bu 5 -Call callbacks and reinvert on left button up. -.LP -The following illustrates Pushbutton's default translation table: -.LP -.IN "Translation tables" -.Ds -.TA .5i 1.5i -.ta .5i 1.5i -static String defaultTranslations = - ": Highlight()\\n\\ - : Unhighlight()\\n\\ - : Set()\\n\\ - : Notify() Unset()"; -.De -.LP -The \fItm_table\fP field of the -.PN CoreClassPart -should be filled in at class initialization time with -the string containing the class's default translations. -If a class wants to inherit its superclass's translations, -it can store the special value -.PN XtInheritTranslations -into \fItm_table\fP. -In Core's class part initialization procedure, -the \*(xI compile this translation table into an efficient internal form. -Then, at widget creation time, -this default translation table is -combined with the XtNtranslations -and XtNbaseTranslations resources; see Section 10.3. -.LP -The resource conversion mechanism automatically compiles -string translation tables that are specified in the resource database. -If a client uses translation tables that are not retrieved via a -resource conversion, -it must compile them itself using -.PN XtParseTranslationTable . -.LP -The \*(xI use the compiled form of the translation table to register the -necessary events with the event manager. -Widgets need do nothing other than specify the action and translation tables -for events to be processed by the translation manager. - -.NH 3 -Event Sequences -.XS -\fB\*(SN Event Sequences\fP -.XE -.LP -An event sequence is a comma-separated list of X event descriptions -that describes a specific sequence of X events to map to a set of -program actions. -Each X event description consists of three parts: -The X event type, a prefix consisting of the X modifier bits, and -an event-specific suffix. -.LP -Various abbreviations are supported to make translation tables easier -to read. The events must match incoming events in left-to-right order -to trigger the action sequence. - -.NH 3 -Action Sequences -.XS -\fB\*(SN Action Sequences\fP -.XE -.LP -Action sequences specify what program or widget actions to take in response to -incoming X events. An action sequence consists of space-separated -action procedure call specifications. -Each action procedure call consists of the name of an action procedure and a -parenthesized list of zero or more comma-separated -string parameters to pass to that procedure. -The actions are invoked in left-to-right order as specified in the -action sequence. - -.NH 3 -Multi-Click Time -.XS -\fB\*(SN Multi-Click Time\fP -.XE -.LP -Translation table entries may specify actions that are taken when two -or more identical events occur consecutively within a short time -interval, called the multi-click time. The multi-click time value may -be specified as an application resource with name ``multiClickTime'' and -.IN "multiClickTime" "" "@DEF@" -.IN "Resources" "multiClickTime" -class ``MultiClickTime'' and may also be modified dynamically by the -application. The multi-click time is unique for each Display value and -is retrieved from the resource database by -.PN XtDisplayInitialize . -If no value is specified, the initial value is 200 milliseconds. -.sp -.LP -To set the multi-click time dynamically, use -.PN XtSetMultiClickTime . -.LP -.IN "XtSetMultiClickTime" "" "@DEF@" -.sM -.FD 0 -void XtSetMultiClickTime(\fIdisplay\fP, \fItime\fP) -.br - Display *\fIdisplay\fP; -.br - int \fItime\fP; -.FN -.IP \fIdisplay\fP 1i -Specifies the display connection. -.IP \fItime\fP 1i -Specifies the multi-click time in milliseconds. -.LP -.eM -.PN XtSetMultiClickTime -sets the time interval used by the translation -manager to determine when multiple events are interpreted as a -repeated event. When a repeat count is specified in a translation -entry, the interval between the timestamps in each pair of repeated -events (e.g., between two -.PN ButtonPress -events) must be less than the -multi-click time in order for the translation actions to be taken. -.sp -.LP -To read the multi-click time, use -.PN XtGetMultiClickTime . -.LP -.IN "XtGetMultiClickTime" "" "@DEF@" -.sM -.FD 0 -int XtGetMultiClickTime(\fIdisplay\fP) -.br - Display *\fIdisplay\fP; -.FN -.IP \fIdisplay\fP 1i -Specifies the display connection. -.LP -.eM -.PN XtGetMultiClickTime -returns the time in milliseconds that the -translation manager uses to determine if multiple events are to be -interpreted as a repeated event for purposes of matching a translation -entry containing a repeat count. - -.NH 2 -Translation Table Management -.XS -\fB\*(SN Translation Table Management\fP -.XE -.LP -Sometimes an application needs to merge -its own translations with a widget's translations. -For example, a window manager provides functions to move a window. -The window manager wishes to bind this operation to a specific -pointer button in the title bar without the possibility of user -override and bind it to other buttons that may be overridden by the user. -.LP -To accomplish this, -the window manager should first create the title bar -and then should merge the two translation tables into -the title bar's translations. -One translation table contains the translations that the window manager -wants only if the user has not specified a translation for a particular event -or event sequence (i.e., those that may be overridden). -The other translation table contains the translations that the -window manager wants regardless of what the user has specified. -.LP -Three \*(xI functions support this merging: -.TS -lw(2i) lw(3.75i). -T{ -.PN XtParseTranslationTable -T} T{ -Compiles a translation table. -T} -.sp -T{ -.PN XtAugmentTranslations -T} T{ -Merges a compiled translation table into a widget's -compiled translation table, ignoring any new translations that -conflict with existing translations. -T} -.sp -T{ -.PN XtOverrideTranslations -T} T{ -Merges a compiled translation table into a widget's -compiled translation table, replacing any existing translations that -conflict with new translations. -T} -.TE -.sp -.LP -To compile a translation table, use -.PN XtParseTranslationTable . -.LP -.IN "XtParseTranslationTable" "" "@DEF@" -.sM -.FD 0 -XtTranslations XtParseTranslationTable(\fItable\fP) -.br - String \fItable\fP; -.FN -.IP \fItable\fP 1i -Specifies the translation table to compile. -.LP -.eM -The -.PN XtParseTranslationTable -function compiles the translation table, provided in the format given -in Appendix B, into an opaque internal representation -of type -.PN XtTranslations . -Note that if an empty translation table is required for any purpose, -one can be obtained by calling -.PN XtParseTranslationTable -and passing an empty string. -.sp -.LP -To merge additional translations into an existing translation table, use -.PN XtAugmentTranslations . -.LP -.IN "XtAugmentTranslations" "" "@DEF@" -.sM -.FD 0 -void XtAugmentTranslations(\fIw\fP, \fItranslations\fP) -.br - Widget \fIw\fP; -.br - XtTranslations \fItranslations\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget into which the new translations are to be merged. \*(cI -.IP \fItranslations\fP 1i -Specifies the compiled translation table to merge in. -.LP -.eM -The -.PN XtAugmentTranslations -function merges the new translations into the existing widget -translations, ignoring any -.PN #replace , -.PN #augment , -or -.PN #override -directive that may have been specified -in the translation string. The translation table specified by -\fItranslations\fP is not altered by this process. -.PN XtAugmentTranslations -logically appends the string representation of the new translations to -the string representation of the widget's current translations and reparses -the result with no warning messages about duplicate left-hand sides, then -stores the result back into the widget instance; i.e., -if the new translations contain an event or event sequence that -already exists in the widget's translations, -the new translation is ignored. -.sp -.LP -To overwrite existing translations with new translations, use -.PN XtOverrideTranslations . -.LP -.IN "XtOverrideTranslations" "" "@DEF@" -.sM -.FD 0 -void XtOverrideTranslations(\fIw\fP, \fItranslations\fP) -.br - Widget \fIw\fP; -.br - XtTranslations \fItranslations\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget into which the new translations are to be merged. \*(cI -.IP \fItranslations\fP 1i -Specifies the compiled translation table to merge in. -.LP -.eM -The -.PN XtOverrideTranslations -function merges the new translations into the existing widget -translations, ignoring any -.PN #replace , -.PN #augment , -or -.PN #override -directive that may have been -specified in the translation string. The translation table -specified by \fItranslations\fP is not altered by this process. -.PN XtOverrideTranslations -logically appends the string representation of the widget's current -translations to the string representation of the new translations and -reparses the result with no warning messages about duplicate left-hand -sides, then stores the result back into the widget instance; i.e., -if the new translations contain an event or event sequence that -already exists in the widget's translations, -the new translation overrides the widget's translation. -.LP -To replace a widget's translations completely, use -.PN XtSetValues -on the XtNtranslations resource and specify a compiled translation table -as the value. -.sp -.LP -To make it possible for users to easily modify translation tables in their -resource files, -the string-to-translation-table resource type converter -allows the string to specify whether the table should replace, -augment, or override any -existing translation table in the widget. -To specify this, -a pound sign (#) is given as the first character of the table -followed by one of the keywords ``replace'', ``augment'', or -``override'' to indicate -whether to replace, augment, or override the existing table. -The replace or merge -operation is performed during the -Core -instance initialization. -Each merge operation produces a new -translation resource value; if the original tables were shared by -other widgets, they are unaffected. If no directive is -specified, ``#replace'' is assumed. -.LP -At instance initialization -the XtNtranslations resource is first fetched. Then, if it was -not specified or did not contain ``#replace'', the -resource database is searched for the resource XtNbaseTranslations. -If XtNbaseTranslations is found, it is merged into the widget class -translation table. Then the widget \fItranslations\fP field is -merged into the result or into the class translation table if -XtNbaseTranslations was not found. This final table is then -stored into the widget \fItranslations\fP field. If the XtNtranslations -resource specified ``#replace'', no merge is done. -If neither XtNbaseTranslations or XtNtranslations are specified, -the class translation table is copied into the widget instance. -.sp -.LP -To completely remove existing translations, use -.PN XtUninstallTranslations . -.LP -.IN "XtUninstallTranslations" "" "@DEF@" -.sM -.FD 0 -void XtUninstallTranslations(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget from which the translations are to be removed. \*(cI -.LP -.eM -The -.PN XtUninstallTranslations -function causes the entire translation table for the widget to be removed. - -.NH 2 -Using Accelerators -.XS -\fB\*(SN Using Accelerators\fP -.XE -.LP -It is often desirable to be able to bind events in one widget to actions in -another. -In particular, -it is often useful to be able to invoke menu actions from the keyboard. -The \*(xI provide a facility, called accelerators, that lets you -accomplish this. -.IN "Accelerator" "" "@DEF@" -An accelerator table is a translation table that is bound with its -actions in the context of a particular widget, the \fIsource\fP widget. -The accelerator table can then be installed on one or more \fIdestination\fP widgets. -When an event sequence in the destination widget would cause an -accelerator action to be taken, and if the source widget is sensitive, -the actions are executed as though triggered by the same event sequence -in the accelerator source -widget. The event is -passed to the action procedure without modification. The action -procedures used within accelerators must not assume that the source -widget is realized nor that any fields of the event are in reference -to the source widget's window if the widget is realized. -.LP -Each widget instance contains that widget's exported accelerator table -as a resource. -Each class of widget exports a method that takes a -displayable string representation of the accelerators -so that widgets can display their current accelerators. -The representation is the accelerator table in canonical -translation table form (see Appendix B). -The display_accelerator procedure pointer is of type -.PN XtStringProc . -.LP -.IN "display_accelerator procedure" "" "@DEF@" -.IN "XtStringProc" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtStringProc)(Widget, String); -.br - Widget \fIw\fP; -.br - String \fIstring\fP; -.FN -.IP \fIw\fP 1i -Specifies the source widget that supplied the accelerators. -.IP \fIstring\fP 1i -Specifies the string representation of the accelerators for this widget. -.LP -.eM -Accelerators can be specified in resource files, -and the string representation is the same as for a translation table. -However, -the interpretation of the -.PN #augment -and -.PN #override -directives applies to -what will happen when the accelerator is installed; -that is, whether or not the accelerator translations will override the -translations in the destination widget. -The default is -.PN #augment , -which means that the accelerator translations have lower priority -than the destination translations. -The -.PN #replace -directive is ignored for accelerator tables. -.sp -.LP -To parse an accelerator table, use -.PN XtParseAcceleratorTable . -.LP -.IN "XtParseAcceleratorTable" "" "@DEF@" -.sM -.FD 0 -XtAccelerators XtParseAcceleratorTable(\fIsource\fP) -.br - String \fIsource\fP; -.FN -.IP \fIsource\fP 1i -Specifies the accelerator table to compile. -.LP -.eM -The -.PN XtParseAcceleratorTable -function compiles the accelerator table into an opaque internal representation. -The client -should set the XtNaccelerators resource of -each widget that is to be activated by these translations -to the returned value. -.sp -.LP -To install accelerators from a widget on another widget, use -.PN XtInstallAccelerators . -.LP -.IN "XtInstallAccelerators" "" "@DEF@" -.sM -.FD 0 -void XtInstallAccelerators(\fIdestination\fP, \fIsource\fP) -.br - Widget \fIdestination\fP; -.br - Widget \fIsource\fP; -.FN -.IP \fIdestination\fP 1i -Specifies the widget on which the accelerators are to be installed. \*(cI -.IP \fIsource\fP 1i -Specifies the widget from which the accelerators are to come. \*(cI -.LP -.eM -The -.PN XtInstallAccelerators -function installs the \fIaccelerators\fP resource value from -\fIsource\fP onto \fIdestination\fP -by merging the source accelerators into the destination translations. -If the source \fIdisplay_accelerator\fP field is non-NULL, -.PN XtInstallAccelerators -calls it with the source widget and a string representation -of the accelerator table, -which indicates that its accelerators have been installed -and that it should display them appropriately. -The string representation of the accelerator table is its -canonical translation table representation. -.sp -.LP -As a convenience for installing all accelerators from a widget and all its -descendants onto one destination, use -.PN XtInstallAllAccelerators . -.LP -.IN "XtInstallAllAccelerators" "" "@DEF@" -.sM -.FD 0 -void XtInstallAllAccelerators(\fIdestination\fP, \fIsource\fP) -.br - Widget \fIdestination\fP; -.br - Widget \fIsource\fP; -.FN -.IP \fIdestination\fP 1i -Specifies the widget on which the accelerators are to be installed. \*(cI -.IP \fIsource\fP 1i -Specifies the root widget of the widget tree -from which the accelerators are to come. \*(cI -.LP -.eM -The -.PN XtInstallAllAccelerators -function recursively descends the widget tree rooted at \fIsource\fP -and installs the accelerators resource value -of each widget encountered onto \fIdestination\fP. -A common use is to call -.PN XtInstallAllAccelerators -and pass the application main window as the source. - -.NH 2 -KeyCode-to-KeySym Conversions -.XS -\*(SN KeyCode-to-KeySym Conversions -.XE -.LP -The translation manager provides support for automatically translating -KeyCodes in incoming key events into KeySyms. -KeyCode-to-KeySym translator procedure pointers are of type -.PN XtKeyProc . -.LP -.IN "XtKeyProc" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtKeyProc)(Display*, KeyCode, Modifiers, Modifiers*, \ -KeySym*); -.br - Display *\fIdisplay\fP; -.br - KeyCode \fIkeycode\fP; -.br - Modifiers \fImodifiers\fP; -.br - Modifiers *\fImodifiers_return\fP; -.br - KeySym *\fIkeysym_return\fP; -.FN -.IP \fIdisplay\fP 1.1i -Specifies the display that the KeyCode is from. -.IP \fIkeycode\fP 1.1i -Specifies the KeyCode to translate. -.IP \fImodifiers\fP 1.1i -Specifies the modifiers to the KeyCode. -.IP \fImodifiers_return\fP 1.1i -Specifies a location in which to store -a mask that indicates the subset of all -modifiers that are examined by the key translator for the specified keycode. -.IP \fIkeysym_return\fP 1.1i -Specifies a location in which to store the resulting KeySym. -.LP -.eM -This procedure takes a KeyCode and modifiers and produces a KeySym. -For any given key translator function and keyboard encoding, -\fImodifiers_return\fP will be a constant per KeyCode that indicates -the subset of all modifiers that are examined by the key translator -for that KeyCode. -.LP -The KeyCode-to-KeySym translator procedure -must be implemented such that multiple calls with the same -\fIdisplay\fP, \fIkeycode\fP, and \fImodifiers\fP return the same -result until either a new case converter, an -.PN XtCaseProc , -is installed or a -.PN MappingNotify -event is received. - -.sp -.LP -The \*(xI maintain tables internally to map KeyCodes to KeySyms -for each open display. Translator procedures and other clients may -share a single copy of this table to perform the same mapping. -.LP -To return a pointer to the KeySym-to-KeyCode mapping table for a -particular display, use -.PN XtGetKeysymTable . -.LP -.IN "XtGetKeysymTable" "" "@DEF@" -.sM -.FD 0 -KeySym *XtGetKeysymTable(\fIdisplay\fP, \fImin_keycode_return\fP, \ -\fIkeysyms_per_keycode_return\fP) -.br - Display *\fIdisplay\fP; -.br - KeyCode *\fImin_keycode_return\fP; -.br - int *\fIkeysyms_per_keycode_return\fP; -.FN -.IP \fIdisplay\fP 1i -Specifies the display whose table is required. -.IP \fImin_keycode_return\fP 1i -Returns the minimum KeyCode valid for the display. -.IP \fIkeysyms_per_keycode_return\fP 1i -Returns the number of KeySyms stored for each KeyCode. -.LP -.eM -.PN XtGetKeysymTable -returns a pointer to the \*(xI' copy of the -server's KeyCode-to-KeySym table. This table must not be modified. -There are \fIkeysyms_per_keycode_return\fP KeySyms associated with each -KeyCode, located in the table with indices starting at index -.IP - (test_keycode - min_keycode_return) * keysyms_per_keycode_return -.LP -for KeyCode \fItest_keycode\fP. Any entries that have no KeySyms associated -with them contain the value -.PN NoSymbol . -Clients should not cache the KeySym table but should call -.PN XtGetKeysymTable -each time the value is -needed, as the table may change prior to dispatching each event. -.LP -For more information on this table, see Section 12.7 in \fI\*(xL\fP. -.sp -.LP -To register a key translator, use -.PN XtSetKeyTranslator . -.LP -.IN "XtSetKeyTranslator" "" "@DEF@" -.sM -.FD 0 -void XtSetKeyTranslator(\fIdisplay\fP, \fIproc\fP) -.br - Display *\fIdisplay\fP; -.br - XtKeyProc \fIproc\fP; -.FN -.IP \fIdisplay\fP 1i -Specifies the display from which to translate the events. -.IP \fIproc\fP 1i -Specifies the procedure to perform key translations. -.LP -.eM -The -.PN XtSetKeyTranslator -function sets the specified procedure as the current key translator. -The default translator is -.PN XtTranslateKey , -an -.PN XtKeyProc -that uses the Shift, Lock, numlock, and group modifiers -with the interpretations defined in \fI\*(xP\fP, Section 5. -It is provided so that new translators can call it to get default -KeyCode-to-KeySym translations and so that the default translator -can be reinstalled. -.sp -.LP -To invoke the currently registered KeyCode-to-KeySym translator, -use -.PN XtTranslateKeycode . -.LP -.IN "XtTranslateKeycode" "" "@DEF@" -.sM -.FD 0 -void XtTranslateKeycode(\fIdisplay\fP, \fIkeycode\fP, \fImodifiers\fP, \ -\fImodifiers_return\fP, \fIkeysym_return\fP) -.br - Display *\fIdisplay\fP; -.br - KeyCode \fIkeycode\fP; -.br - Modifiers \fImodifiers\fP; -.br - Modifiers *\fImodifiers_return\fP; -.br - KeySym *\fIkeysym_return\fP; -.FN -.IP \fIdisplay\fP 1.1i -Specifies the display that the KeyCode is from. -.IP \fIkeycode\fP 1.1i -Specifies the KeyCode to translate. -.IP \fImodifiers\fP 1.1i -Specifies the modifiers to the KeyCode. -.IP \fImodifiers_return\fP 1.1i -Returns a mask that indicates the modifiers actually used -to generate the KeySym. -.IP \fIkeysym_return\fP 1.1i -Returns the resulting KeySym. -.LP -.eM -The -.PN XtTranslateKeycode -function passes the specified arguments -directly to the currently registered KeyCode-to-KeySym translator. -.sp -.LP -To handle capitalization of nonstandard KeySyms, the \*(xI allow -clients to register case conversion routines. -Case converter procedure pointers are of type -.PN XtCaseProc . -.LP -.IN "XtCaseProc" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtCaseProc)(Display*, KeySym, KeySym*, KeySym*); -.br - Display *\fIdisplay\fP; -.br - KeySym \fIkeysym\fP; -.br - KeySym *\fIlower_return\fP; -.br - KeySym *\fIupper_return\fP; -.FN -.IP \fIdisplay\fP 1i -Specifies the display connection for which the conversion is required. -.IP \fIkeysym\fP 1i -Specifies the KeySym to convert. -.IP \fIlower_return\fP 1i -Specifies a location into which to store the lowercase equivalent for -the KeySym. -.IP \fIupper_return\fP 1i -Specifies a location into which to store the uppercase equivalent for -the KeySym. -.LP -.eM -If there is no case distinction, -this procedure should store the KeySym into both return values. -.sp -.LP -To register a case converter, use -.PN XtRegisterCaseConverter . -.LP -.IN "XtRegisterCaseConverter" "" "@DEF@" -.sM -.FD 0 -void XtRegisterCaseConverter(\fIdisplay\fP, \fIproc\fP, \fIstart\fP, \fIstop\fP) -.br - Display *\fIdisplay\fP; -.br - XtCaseProc \fIproc\fP; -.br - KeySym \fIstart\fP; -.br - KeySym \fIstop\fP; -.FN -.IP \fIdisplay\fP 1i -Specifies the display from which the key events are to come. -.IP \fIproc\fP 1i -Specifies the -.PN XtCaseProc -to do the conversions. -.IP \fIstart\fP 1i -Specifies the first KeySym for which this converter is valid. -.IP \fIstop\fP 1i -Specifies the last KeySym for which this converter is valid. -.LP -.eM -The -.PN XtRegisterCaseConverter -registers the specified case converter. -The \fIstart\fP and \fIstop\fP arguments provide the inclusive range of KeySyms -for which this converter is to be called. -The new converter overrides any previous converters for KeySyms in that range. -No interface exists to remove converters; -you need to register an identity converter. -When a new converter is registered, -the \*(xI refresh the keyboard state if necessary. -The default converter understands case conversion for all -Latin KeySyms defined in \fI\*(xP\fP, Appendix A. -.sp -.LP -To determine uppercase and lowercase equivalents for a KeySym, use -.PN XtConvertCase . -.LP -.IN "XtConvertCase" "" "@DEF@" -.sM -.FD 0 -void XtConvertCase(\fIdisplay\fP, \fIkeysym\fP, \fIlower_return\fP, \ -\fIupper_return\fP) -.br - Display *\fIdisplay\fP; -.br - KeySym \fIkeysym\fP; -.br - KeySym *\fIlower_return\fP; -.br - KeySym *\fIupper_return\fP; -.FN -.IP \fIdisplay\fP 1i -Specifies the display that the KeySym came from. -.IP \fIkeysym\fP 1i -Specifies the KeySym to convert. -.IP \fIlower_return\fP 1i -Returns the lowercase equivalent of the KeySym. -.IP \fIupper_return\fP 1i -Returns the uppercase equivalent of the KeySym. -.LP -.eM -The -.PN XtConvertCase -function calls the appropriate converter and returns the results. -A user-supplied -.PN XtKeyProc -may need to use this function. - -.NH 2 -Obtaining a KeySym in an Action Procedure -.XS -\fB\*(SN Obtaining a KeySym in an Action Procedure\fP -.XE -.LP -When an action procedure is invoked on a -.PN KeyPress -or -.PN KeyRelease -event, it often has a need to retrieve the KeySym and modifiers -corresponding to the event that caused it to be invoked. In order to -avoid repeating the processing that was just performed by the -\*(xI to match the translation entry, the KeySym and modifiers -are stored for the duration of the action procedure and are made -available to the client. -.LP -To retrieve the KeySym and modifiers that matched the final event -specification in the translation table entry, use -.PN XtGetActionKeysym . -.LP -.IN "XtGetActionKeysym" "" "@DEF@" -.sM -.FD 0 -KeySym XtGetActionKeysym(\fIevent\fP, \fImodifiers_return\fP) -.br - XEvent *\fIevent\fP; -.br - Modifiers *\fImodifiers_return\fP; -.FN -.IP \fIevent\fP 1.25i -Specifies the event pointer passed to the action procedure by the \*(xI. -.IP \fImodifiers_return\fP 1.25i -Returns the modifiers that caused the match, if non-NULL. -.LP -.eM -If -.PN XtGetActionKeysym -is called after an action procedure has been -invoked by the \*(xI and before that action procedure returns, and -if the event pointer has the same value as the event pointer passed to -that action routine, and if the event is a -.PN KeyPress -or -.PN KeyRelease -event, then -.PN XtGetActionKeysym -returns the KeySym that matched the final -event specification in the translation table and, if \fImodifiers_return\fP -is non-NULL, the modifier state actually used to generate this KeySym; -otherwise, if the event is a -.PN KeyPress -or -.PN KeyRelease -event, then -.PN XtGetActionKeysym -calls -.PN XtTranslateKeycode -and returns the results; -else it returns -.PN NoSymbol -and does not examine \fImodifiers_return\fP. -.LP -Note that if an action procedure invoked by the \*(xI -invokes a subsequent action procedure (and so on) via -.PN XtCallActionProc , -the nested action procedure may also call -.PN XtGetActionKeysym -to retrieve the \*(xI' KeySym and modifiers. - -.NH 2 -KeySym-to-KeyCode Conversions -.XS -\*(SN KeySym-to-KeyCode Conversions -.XE -.LP -To return the list of KeyCodes that map to a particular KeySym in -the keyboard mapping table maintained by the \*(xI, use -.PN XtKeysymToKeycodeList . -.LP -.IN "XtKeysymToKeycodeList" "" "@DEF@" -.sM -.FD 0 -void XtKeysymToKeycodeList(\fIdisplay\fP, \fIkeysym\fP, \fIkeycodes_return\fP, \ -\fIkeycount_return\fP) -.br - Display *\fIdisplay\fP; -.br - KeySym \fIkeysym\fP; -.br - KeyCode **\fIkeycodes_return\fP; -.br - Cardinal *\fIkeycount_return\fP; -.FN -.IP \fIdisplay\fP 1.25i -Specifies the display whose table is required. -.IP \fIkeysym\fP 1.25i -Specifies the KeySym for which to search. -.IP \fIkeycodes_return\fP 1.25i -Returns a list of KeyCodes that have \fIkeysym\fP -associated with them, or NULL if \fIkeycount_return\fP is 0. -.IP \fIkeycount_return\fP 1.25i -Returns the number of KeyCodes in the keycode list. -.LP -.eM -The -.PN XtKeysymToKeycodeList -procedure returns all the KeyCodes that have \fIkeysym\fP -in their entry for the keyboard mapping table associated with \fIdisplay\fP. -For each entry in the -table, the first four KeySyms (groups 1 and 2) are interpreted as -specified by \fI\*(xP\fP, Section 5. If no KeyCodes map to the -specified KeySym, \fIkeycount_return\fP is zero and *\fIkeycodes_return\fP is NULL. -.LP -The caller should free the storage pointed to by \fIkeycodes_return\fP using -.PN XtFree -when it is no longer useful. If the caller needs to examine -the KeyCode-to-KeySym table for a particular KeyCode, it should call -.PN XtGetKeysymTable . - -.NH 2 -Registering Button and Key Grabs for Actions -.XS -\fB\*(SN Registering Button and Key Grabs for Actions\fP -.XE -.LP -To register button and key grabs for a widget's window according to the -event bindings in the widget's translation table, use -.PN XtRegisterGrabAction . -.LP -.IN "XtRegisterGrabAction" "" "@DEF@" -.sM -.FD 0 -void XtRegisterGrabAction(\fIaction_proc\fP, \fIowner_events\fP, \ -\fIevent_mask\fP, \fIpointer_mode\fP, \fIkeyboard_mode\fP) -.br - XtActionProc \fIaction_proc\fP; -.br - Boolean \fIowner_events\fP; -.br - unsigned int \fIevent_mask\fP; -.br - int \fIpointer_mode\fP, \fIkeyboard_mode\fP; -.FN -.IP \fIaction_proc\fP 1i -Specifies the action procedure to search for in translation tables. -.sp -.IP \fIowner_events\fP -.br -.ns -.IP \fIevent_mask\fP -.br -.ns -.IP \fIpointer_mode\fP -.br -.ns -.IP \fIkeyboard_mode\fP 1i -Specify arguments to -.PN XtGrabButton -or -.PN XtGrabKey . -.LP -.eM -.PN XtRegisterGrabAction -adds the specified \fIaction_proc\fP to a list known to -the translation manager. When a widget is realized, or when the -translations of a realized widget or the accelerators installed on a -realized widget are modified, its translation table and any installed -accelerators are scanned for action procedures on this list. -If any are invoked on -.PN ButtonPress -or -.PN KeyPress -events as the only or final event -in a sequence, the \*(xI will call -.PN XtGrabButton -or -.PN XtGrabKey -for the widget with every button or KeyCode which maps to the -event detail field, passing the specified \fIowner_events\fP, \fIevent_mask\fP, -\fIpointer_mode\fP, and \fIkeyboard_mode\fP. For -.PN ButtonPress -events, the modifiers -specified in the grab are determined directly from the translation -specification and \fIconfine_to\fP and \fIcursor\fP are specified as -.PN None . -For -.PN KeyPress -events, if the translation table entry specifies colon (:) in -the modifier list, the modifiers are determined by calling the key -translator procedure registered for the display and calling -.PN XtGrabKey -for every combination of standard modifiers which map the KeyCode to -the specified event detail KeySym, and ORing any modifiers specified in -the translation table entry, and \fIevent_mask\fP is ignored. If the -translation table entry does not specify colon in the modifier list, -the modifiers specified in the grab are those specified in the -translation table entry only. For both -.PN ButtonPress -and -.PN KeyPress -events, don't-care modifiers are ignored unless the translation entry -explicitly specifies ``Any'' in the \fImodifiers\fP field. -.LP -If the specified \fIaction_proc\fP is already registered for the calling -process, the new values will replace the previously specified values -for any widgets that become realized following the call, but existing -grabs are not altered on currently realized widgets. -.LP -When translations or installed accelerators are modified for a -realized widget, any previous key or button grabs registered -as a result of the old bindings are released if they do not appear in -the new bindings and are not explicitly grabbed by the client with -.PN XtGrabKey -or -.PN XtGrabButton . - -.NH 2 -Invoking Actions Directly -.XS -\fB\*(SN Invoking Actions Directly\fP -.XE -.LP -Normally action procedures are invoked by the \*(xI when an -event or event sequence arrives for a widget. To -invoke an action procedure directly, without generating -(or synthesizing) events, use -.PN XtCallActionProc . -.LP -.IN "XtCallActionProc" "" "@DEF@" -.sM -.FD 0 -void XtCallActionProc(\fIwidget\fP, \fIaction\fP, \fIevent\fP, \fIparams\fP, \ -\fInum_params\fP) -.br - Widget \fIwidget\fP; -.br - String \fIaction\fP; -.br - XEvent *\fIevent\fP; -.br - String *\fIparams\fP; -.br - Cardinal \fInum_params\fP; -.FN -.IP \fIwidget\fP 1i -Specifies the widget in which the action is to be invoked. \*(cI -.IP \fIaction\fP 1i -Specifies the name of the action routine. -.IP \fIevent\fP 1i -Specifies the contents of the \fIevent\fP passed to the action routine. -.IP \fIparams\fP 1i -Specifies the contents of the \fIparams\fP passed to the action routine. -.IP \fInum_params\fP 1i -Specifies the number of entries in \fIparams\fP. -.LP -.eM -.PN XtCallActionProc -searches for the named action routine in the same -manner and order as translation tables are bound, as described in -Section 10.1.2, except that application action tables are searched, if -necessary, as of the time of the call to -.PN XtCallActionProc . -If found, -the action routine is invoked with the specified widget, event pointer, -and parameters. It is the responsibility of the caller to ensure that -the contents of the \fIevent\fP, \fIparams\fP, and \fInum_params\fP arguments are -appropriate for the specified action routine and, if necessary, that -the specified widget is realized or sensitive. If the named action -routine cannot be found, -.PN XtCallActionProc -generates a warning message and returns. - -.NH 2 -Obtaining a Widget's Action List -.XS -\*(SN Obtaining a Widget's Action List -.XE -.LP -Occasionally a subclass will require the pointers to one or more of -its superclass's action procedures. This would be needed, for -example, in order to envelop the superclass's action. To retrieve -the list of action procedures registered in the superclass's -\fIactions\fP field, use -.PN XtGetActionList . -.LP -.IN "XtGetActionList" "" "@DEF@" -.sM -.FD 0 -void XtGetActionList(\fIwidget_class\fP, \fIactions_return\fP, \ -\fInum_actions_return\fP) -.br - WidgetClass \fIwidget_class\fP; -.br - XtActionList *\fIactions_return\fP; -.br - Cardinal *\fInum_actions_return\fP; -.FN -.IP \fIwidget_class\fP 1.5i -Specifies the widget class whose actions are to be returned. -.IP \fIactions_return\fP 1.5i -Returns the action list. -.IP \fInum_actions_return\fP 1.5i -Returns the number of action procedures declared by the class. -.LP -.eM -.PN XtGetActionList -returns the action table defined by the specified -widget class. This table does not include actions defined by the -superclasses. If \fIwidget_class\fP is not initialized, or is not -.PN coreWidgetClass -or a subclass thereof, or if the class does not define any actions, -*\fIactions_return\fP will be NULL and *\fInum_actions_return\fP -will be zero. -If *\fIactions_return\fP is non-NULL the client is responsible for freeing -the table using -.PN XtFree -when it is no longer needed. -.bp diff --git a/doc/xorg-docs/specs/Xt/CH11 b/doc/xorg-docs/specs/Xt/CH11 deleted file mode 100644 index 55b8d92f3..000000000 --- a/doc/xorg-docs/specs/Xt/CH11 +++ /dev/null @@ -1,3566 +0,0 @@ -.\" $Xorg: CH11,v 1.3 2000/08/17 19:42:47 cpqbld Exp $ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" Digital Equipment Corporation, Maynard, Massachusetts. -.\" -.\" Permission to use, copy, modify and distribute this documentation for any -.\" purpose and without fee is hereby granted, provided that the above copyright -.\" notice appears in all copies and that both that copyright notice and this -.\" permission notice appear in supporting documentation, and that the name of -.\" Digital not be used in in advertising or publicity pertaining -.\" to distribution of the software without specific, written prior permission. -.\" Digital makes no representations about the suitability of the -.\" software described herein for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBChapter 11\fP\s-1 - -\s+1\fBUtility Functions\fP\s-1 -.sp 2 -.nr H1 11 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.LP -.XS -Chapter 11 \(em Utility Functions -.XE -The \*(xI provide a number of utility functions that you can use to -.IP \(bu 5 -Determine the number of elements in an array. -.IP \(bu 5 -Translate strings to widget instances. -.IP \(bu 5 -Manage memory usage. -.IP \(bu 5 -Share graphics contexts. -.IP \(bu 5 -Manipulate selections. -.IP \(bu 5 -Merge exposure events into a region. -.IP \(bu 5 -Translate widget coordinates. -.IP \(bu 5 -Locate a widget given a window id. -.IP \(bu 5 -Handle errors. -.IP \(bu 5 -Set the WM_COLORMAP_WINDOWS property. -.IP \(bu 5 -Locate files by name with string substitutions. -.IP \(bu 5 -Register callback functions for external agents. -.IP \(bu 5 -Locate all the displays of an application context. - -.NH 2 -Determining the Number of Elements in an Array -.XS -\fB\*(SN Determining the Number of Elements in an Array\fP -.XE -.LP -To determine the number of elements in a fixed-size array, use -.PN XtNumber . -.LP -.IN "XtNumber" "" "@DEF@" -.sM -.FD 0 -Cardinal XtNumber(\fIarray\fP) -.br - \fIArrayType array\fP; -.FN -.IP \fIarray\fP 1i -Specifies a fixed-size array of arbitrary type. -.LP -.eM -The -.PN XtNumber -macro returns the number of elements allocated to the array. - -.NH 2 -Translating Strings to Widget Instances -.XS -\fB\*(SN Translating Strings to Widget Instances\fP -.XE -.LP -To translate a widget name to a widget instance, use -.PN XtNameToWidget . -.LP -.IN "XtNameToWidget" "" "@DEF@" -.sM -.FD 0 -Widget XtNameToWidget(\fIreference\fP, \fInames\fP) -.br - Widget \fIreference\fP; -.br - String \fInames\fP; -.FN -.IP \fIreference\fP 1i -Specifies the widget from which the search is to start. \*(cI -.IP \fInames\fP 1i -Specifies the partially qualified name of the desired widget. -.LP -.eM -The -.PN XtNameToWidget -function searches for a descendant of the \fIreference\fP -widget whose name matches the specified names. The \fInames\fP parameter -specifies a simple object name or a series of simple object name -components separated by periods or asterisks. -.PN XtNameToWidget -returns the descendant with the shortest name matching the specification -according to the following rules, where child is either a pop-up child -or a normal child if the widget's class is a subclass of -Composite : -.IP \(bu 5 -Enumerate the object subtree rooted at the reference widget in -breadth-first order, qualifying the name of each object with the -names of all its ancestors up to, but not including, the reference -widget. The ordering between children of a common parent is -not defined. -.IP \(bu 5 -Return the first object in the enumeration that matches the -specified name, where each component of \fInames\fP matches exactly the -corresponding component of the qualified object name and asterisk -matches any series of components, including none. -.IP \(bu 5 -If no match is found, return NULL. -.LP -Since breadth-first traversal is specified, the descendant with the -shortest matching name (i.e., the fewest number of components), if any, -will always be returned. However, since the order of enumeration of -children is undefined and since the \*(xI do not require that all -children of a widget have unique names, -.PN XtNameToWidget -may return any -child that matches if there are multiple objects in the subtree with -the same name. Consecutive separators (periods or asterisks) -including at least one asterisk are treated as a single asterisk. -Consecutive periods are treated as a single period. - -.NH 2 -Managing Memory Usage -.XS -\fB\*(SN Managing Memory Usage\fP -.XE -.LP -The \*(xI memory management functions provide uniform checking for -null pointers and error reporting on memory allocation errors. -These functions are completely compatible with their standard C language -runtime counterparts -.PN malloc , -.PN calloc , -.PN realloc , -and -.PN free -with the following added functionality: -.IP \(bu 5 -.PN XtMalloc , -.PN XtCalloc , -and -.PN XtRealloc -give an error if there is not enough memory. -.IP \(bu 5 -.PN XtFree -simply returns if passed a NULL pointer. -.IP \(bu 5 -.PN XtRealloc -simply allocates new storage if passed a NULL pointer. -.LP -See the standard C library documentation on -.PN malloc , -.PN calloc , -.PN realloc , -and -.PN free -for more information. -.sp -.LP -To allocate storage, use -.PN XtMalloc . -.LP -.IN "XtMalloc" "" "@DEF@" -.sM -.FD 0 -char *XtMalloc(\fIsize\fP) -.br - Cardinal \fIsize\fP; -.FN -.IP \fIsize\fP 1i -Specifies the number of bytes desired. -.LP -.eM -The -.PN XtMalloc -function returns a pointer to a block of storage of at least -the specified \fIsize\fP bytes. -If there is insufficient memory to allocate the new block, -.PN XtMalloc -calls -.PN XtErrorMsg . -.sp -.LP -To allocate and initialize an array, use -.PN XtCalloc . -.LP -.IN "XtCalloc" "" "@DEF@" -.sM -.FD 0 -char *XtCalloc(\fInum\fP, \fIsize\fP) -.br - Cardinal \fInum\fP; -.br - Cardinal \fIsize\fP; -.FN -.IP \fInum\fP 1i -Specifies the number of array elements to allocate. -.IP \fIsize\fP 1i -Specifies the size of each array element in bytes. -.LP -.eM -The -.PN XtCalloc -function allocates space for the specified number of array elements -of the specified size and initializes the space to zero. -If there is insufficient memory to allocate the new block, -.PN XtCalloc -calls -.PN XtErrorMsg . -.PN XtCalloc -returns the address of the allocated storage. -.sp -.LP -To change the size of an allocated block of storage, use -.PN XtRealloc . -.LP -.IN "XtRealloc" "" "@DEF@" -.sM -.FD 0 -char *XtRealloc(\fIptr\fP, \fInum\fP) -.br - char *\fIptr\fP; -.br - Cardinal \fInum\fP; -.FN -.IP \fIptr\fP 1i -Specifies a pointer to the old storage allocated with -.PN XtMalloc , -.PN XtCalloc , -or -.PN XtRealloc , -or NULL. -.IP \fInum\fP 1i -Specifies number of bytes desired in new storage. -.LP -.eM -The -.PN XtRealloc -function changes the size of a block of storage, possibly moving it. -Then it copies the old contents (or as much as will fit) into the new block -and frees the old block. -If there is insufficient memory to allocate the new block, -.PN XtRealloc -calls -.PN XtErrorMsg . -If \fIptr\fP is NULL, -.PN XtRealloc -simply calls -.PN XtMalloc . -.PN XtRealloc -then returns the address of the new block. -.sp -.LP -To free an allocated block of storage, use -.PN XtFree . -.LP -.IN "XtFree" "" "@DEF@" -.sM -.FD 0 -void XtFree(\fIptr\fP) -.br - char *\fIptr\fP; -.FN -.IP \fIptr\fP 1i -Specifies a pointer to a block of storage allocated with -.PN XtMalloc , -.PN XtCalloc , -or -.PN XtRealloc , -or NULL. -.LP -.eM -The -.PN XtFree -function returns storage, allowing it to be reused. -If \fIptr\fP is NULL, -.PN XtFree -returns immediately. -.sp -.LP -To allocate storage for a new instance of a type, use -.PN XtNew . -.LP -.IN "XtNew" "" "@DEF@" -.sM -.FD 0 -\fItype\fP *XtNew(\fItype\fP) -.br - \fItype t\fP; -.FN -.IP \fItype\fP 1i -Specifies a previously declared type. -.LP -.eM -.PN XtNew -returns a pointer to the allocated storage. -If there is insufficient memory to allocate the new block, -.PN XtNew -calls -.PN XtErrorMsg . -.PN XtNew -is a convenience macro that calls -.PN XtMalloc -with the following arguments specified: -.LP -.Ds -.TA .5i -.ta .5i -((type *) XtMalloc((unsigned) sizeof(type))) -.De -.LP -The storage allocated by -.PN XtNew -should be freed using -.PN XtFree . -.sp -.LP -To copy an instance of a string, use -.PN XtNewString . -.LP -.IN "XtNewString" "" "@DEF@" -.sM -.FD 0 -String XtNewString(\fIstring\fP) -.br - String \fIstring\fP; -.FN -.IP \fIstring\fP 1i -Specifies a previously declared string. -.LP -.eM -.PN XtNewString -returns a pointer to the allocated storage. -If there is insufficient memory to allocate the new block, -.PN XtNewString -calls -.PN XtErrorMsg . -.PN XtNewString -is a convenience macro that calls -.PN XtMalloc -with the following arguments specified: -.LP -.Ds -.TA .5i -.ta .5i -(strcpy(XtMalloc((unsigned)strlen(str) + 1), str)) -.De -.LP -The storage allocated by -.PN XtNewString -should be freed using -.PN XtFree . - -.NH 2 -Sharing Graphics Contexts -.XS -\fB\*(SN Sharing Graphics Contexts\fP -.XE -.LP -The \*(xI provide a mechanism whereby cooperating objects can share a -graphics context (GC), thereby reducing both the number of GCs -created and the total number of server calls in any given application. -The mechanism is a simple caching scheme -and allows for clients to declare both modifiable and nonmodifiable -fields of the shared GCs. -.LP -To obtain a shareable GC with modifiable fields, use -.PN XtAllocateGC . -.LP -.IN "XtAllocateGC" "" "@DEF@" -.sM -.FD 0 -GC XtAllocateGC(\fIwidget\fP, \fIdepth\fP, \fIvalue_mask\fP, \fIvalues\fP, \ -\fIdynamic_mask\fP, \fIunused_mask\fP) -.br - Widget \fIobject\fP; -.br - Cardinal \fIdepth\fP; -.br - XtGCMask \fIvalue_mask\fP; -.br - XGCValues *\fIvalues\fP; -.br - XtGCMask \fIdynamic_mask\fP; -.br - XtGCMask \fIunused_mask\fP; -.FN -.IP \fIobject\fP 1i -Specifies an object, giving the screen for which the -returned GC is valid. \*(oI -.IP \fIdepth\fP 1i -Specifies the depth for which the returned GC is valid, or 0. -.IP \fIvalue_mask\fP 1i -Specifies fields of the GC that are initialized from \fIvalues\fP. -.IP \fIvalues\fP 1i -Specifies the values for the initialized fields. -.IP \fIdynamic_mask\fP 1i -Specifies fields of the GC that will be modified by the caller. -.IP \fIunused_mask\fP 1i -Specifies fields of the GC that will not be needed by the caller. -.LP -.eM -The -.PN XtAllocateGC -function returns a shareable GC that may be -modified by the client. The \fIscreen\fP field of the specified -widget or of the nearest widget ancestor of the specified -object and the specified \fIdepth\fP argument supply -the root and drawable depths for which the GC is to be -valid. If \fIdepth\fP is zero, the depth is taken from the -\fIdepth\fP field of the specified widget or of the nearest -widget ancestor of the specified object. -.LP -The \fIvalue_mask\fP argument specifies fields of the GC -that are initialized with the respective member of the -\fIvalues\fP structure. The \fIdynamic_mask\fP argument specifies fields -that the caller intends to modify during program execution. -The caller must ensure that the corresponding GC field is set -prior to each use of the GC. The \fIunused_mask\fP argument -specifies fields of the GC that are of no interest to the -caller. The caller may make no assumptions about the contents -of any fields specified in \fIunused_mask\fP. The caller may assume -that at all times all fields not specified in either -\fIdynamic_mask\fP or \fIunused_mask\fP have their default value if not -specified in \fIvalue_mask\fP or the value specified by \fIvalues\fP. -If a field is specified in both \fIvalue_mask\fP and \fIdynamic_mask\fP, -the effect is as if it were specified only in \fIdynamic_mask\fP -and then immediately set to the value in \fIvalues\fP. If a field -is set in \fIunused_mask\fP and also in either \fIvalue_mask\fP or -\fIdynamic_mask\fP, the specification in \fIunused_mask\fP is ignored. -.LP -.PN XtAllocateGC -tries to minimize the number of unique GCs -created by comparing the arguments with those of previous -calls and returning an existing GC when there are no -conflicts. -.PN XtAllocateGC -may modify and return an existing GC if it was allocated with a -nonzero \fIunused_mask\fP. -.sp -.LP -To obtain a shareable GC with no modifiable fields, use -.PN XtGetGC . -.LP -.IN "XtGetGC" "" "@DEF@" -.sM -.FD 0 -GC XtGetGC(\fIobject\fP, \fIvalue_mask\fP, \fIvalues\fP) -.br - Widget \fIobject\fP; -.br - XtGCMask \fIvalue_mask\fP; -.br - XGCValues *\fIvalues\fP; -.FN -.IP \fIobject\fP 1i -Specifies an object, giving the screen and depth for which the -returned GC is valid. \*(oI -.IP \fIvalue_mask\fP 1i -Specifies which fields of the \fIvalues\fP structure are specified. -.IP \fIvalues\fP 1i -Specifies the actual values for this GC. -.LP -.eM -The -.PN XtGetGC -function returns a shareable, read-only GC. -The parameters to this function are the same as those for -.PN XCreateGC -except that an Object is passed instead of a Display. -.PN XtGetGC -is equivalent to -.PN XtAllocateGC -with \fIdepth\fP, \fIdynamic_mask\fP, and \fIunused_mask\fP all zero. -.LP -.PN XtGetGC -shares only GCs in which all values in the GC returned by -.PN XCreateGC -are the same. -In particular, it does not use the \fIvalue_mask\fP provided to -determine which fields of the GC a widget considers relevant. -The \fIvalue_mask\fP is used only to tell the server which fields should be -filled in from \fIvalues\fP and which it should fill in with default values. -.sp -.LP -To deallocate a shared GC when it is no longer needed, use -.PN XtReleaseGC . -.LP -.IN "XtReleaseGC" "" "@DEF@" -.sM -.FD 0 -void XtReleaseGC(\fIobject\fP, \fIgc\fP) -.br - Widget \fIobject\fP; -.br - GC \fIgc\fP; -.FN -.IP \fIobject\fP 1i -Specifies any object on the Display for which the GC was created. \*(oI -.IP \fIgc\fP 1i -Specifies the shared GC obtained with either -.PN XtAllocateGC -or -.PN XtGetGC . -.LP -.eM -References to shareable GCs are counted and a free request is generated to the -server when the last user of a given GC releases it. - -.NH 2 -Managing Selections -.XS -\*(SN Managing Selections -.XE -.LP -Arbitrary widgets in multiple applications can communicate -with each other by means of the \*(xI global selection mechanism, -which conforms to the specifications in the \fI\*(xC\fP. -The \*(xI supply functions for providing and receiving selection data in -one logical piece (atomic transfers) -or in smaller logical segments (incremental transfers). -.LP -The incremental interface is provided for a selection owner or -selection requestor that cannot or prefers not to pass the selection -value to and from the \*(xI in a single call. For instance, -either an application that is running on a machine with limited memory -may not be able to store the entire selection value in memory or a -selection owner may already have the selection value available in -discrete chunks, and it would be more efficient not to have to -allocate additional storage to copy the pieces contiguously. Any -owner or requestor that prefers to deal with the selection value in -segments can use the incremental interfaces to do so. -The transfer between the selection owner or requestor and the \*(xI is not -required to match the underlying -transport protocol between the application and the X server; -the \*(xI will break too large a selection -into smaller pieces for transport if necessary -and will coalesce a selection transmitted incrementally if the value -was requested atomically. - -.NH 3 -Setting and Getting the Selection Timeout Value -.XS -\fB\*(SN Setting and Getting the Selection Timeout Value\fP -.XE -.LP -To set the \*(xI selection timeout, use -.PN XtAppSetSelectionTimeout . -.LP -.IN "XtAppSetSelectionTimeout" "" "@DEF@" -.sM -.FD 0 -void XtAppSetSelectionTimeout(\fIapp_context\fP, \fItimeout\fP) -.br - XtAppContext \fIapp_context\fP; -.br - unsigned long \fItimeout\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context. -.IP \fItimeout\fP 1i -Specifies the selection timeout in milliseconds. -.eM -.LP -To get the current selection timeout value, use -.PN XtAppGetSelectionTimeout . -.LP -.IN "XtAppGetSelectionTimeout" "" "@DEF@" -.sM -.FD 0 -unsigned long XtAppGetSelectionTimeout(\fIapp_context\fP) -.br - XtAppContext \fIapp_context\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context. -.LP -.eM -The -.PN XtAppGetSelectionTimeout -function returns the current selection timeout value in milliseconds. -The selection timeout is the time within which the two communicating -applications must respond to one another. -The initial timeout value is set by the -selectionTimeout -.IN "selectionTimeout" -application resource as retrieved by -.PN XtDisplayInitialize . -If -selectionTimeout -is not specified, -the default is five seconds. - -.NH 3 -Using Atomic Transfers -.XS -\*(SN Using Atomic Transfers -.XE -.LP -When using atomic transfers, the owner will completely -process one selection request at a time. -The owner may consider each request individually, -since there is no possibility for overlap -between evaluation of two requests. - -.NH 4 -Atomic Transfer Procedures -.XS -\*(SN Atomic Transfer Procedures -.XE -.IN "Selections" "atomic" -.LP -The following procedures are used by the selection owner when -providing selection data in a single unit. -.LP -The procedure pointer specified by the owner to supply the selection -data to the \*(xI is of type -.PN XtConvertSelectionProc . -.LP -.IN "XtConvertSelectionProc" "" "@DEF@" -.sM -.FD 0 -typedef Boolean (*XtConvertSelectionProc)(Widget, Atom*, Atom*, Atom*, -.br - XtPointer*, unsigned long*, int*); -.br - Widget \fIw\fP; -.br - Atom *\fIselection\fP; -.br - Atom *\fItarget\fP; -.br - Atom *\fItype_return\fP; -.br - XtPointer *\fIvalue_return\fP; -.br - unsigned long *\fIlength_return\fP; -.br - int *\fIformat_return\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget that currently owns this selection. -.IP \fIselection\fP 1i -Specifies the atom naming the selection requested -(for example, -.PN XA_PRIMARY -or -.PN XA_SECONDARY ). -.IP \fItarget\fP 1i -Specifies the target type of the selection that has been requested, -which indicates the desired information about the selection -(for example, File Name, Text, Window). -.IP \fItype_return\fP 1i -Specifies a pointer to an atom into which the property type of the -converted value of the selection is to be stored. -For instance, either File Name or Text might have property type -.PN XA_STRING . -.IP \fIvalue_return\fP 1i -Specifies a pointer into which a pointer to the converted value of the -selection is to be stored. -The selection owner is responsible for allocating this storage. -If the selection owner has provided an -.PN XtSelectionDoneProc -for the selection, -this storage is owned by the selection owner; -otherwise, it is owned by the \*(xI selection mechanism, -which frees it by calling -.PN XtFree -when it is done with it. -.IP \fIlength_return\fP 1i -Specifies a pointer into which the number of elements in \fIvalue_return\fP, -each of size indicated by \fIformat_return\fP, is to be stored. -.IP \fIformat_return\fP 1i -Specifies a pointer into which the size in bits of the data elements -of the selection value is to be stored. -.LP -.eM -This procedure is called by the \*(xI selection mechanism -to get the value of a selection as a given type -from the current selection owner. -It returns -.PN True -if the owner successfully converted the selection to the target type or -.PN False -otherwise. -If the procedure returns -.PN False , -the values of the return arguments are undefined. -Each -.PN XtConvertSelectionProc -should respond to target value -.PN TARGETS -by returning a value containing the list of the targets -into which it is -prepared to convert the selection. -The value returned in -\fIformat_return\fP must be one of 8, 16, or 32 to allow the server to -byte-swap the data if necessary. -.LP -.IN "Selections" "MULTIPLE" -.IN "Selections" "TIMESTAMP" -This procedure does not need to worry about responding to the -MULTIPLE or the TIMESTAMP target values (see Section 2.6.2 in the \fI\*(xC\fP). -A selection request with -the MULTIPLE target type is transparently transformed into a -series of calls to this procedure, one for each target type, and a -selection request with the TIMESTAMP target value is answered -automatically by the \*(xI using the time specified in the -call to -.PN XtOwnSelection -or -.PN XtOwnSelectionIncremental . -.sp -.LP -To retrieve the -.PN SelectionRequest -event that triggered the -.PN XtConvertSelectionProc -procedure, use -.PN XtGetSelectionRequest . -.LP -.IN "XtGetSelectionRequest" "" "@DEF@" -.sM -.FD 0 -XSelectionRequestEvent *XtGetSelectionRequest(\fIw\fP, \fIselection\fP, \ -\fIrequest_id\fP) -.br - Widget \fIw\fP; -.br - Atom \fIselection\fP; -.br - XtRequestId \fIrequest_id\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget that currently owns this selection. \*(cI -.IP \fIselection\fP 1i -Specifies the selection being processed. -.IP \fIrequest_id\fP 1i -Specifies the requestor id in the case of incremental -selections, or NULL in the case of atomic transfers. -.LP -.eM -.PN XtGetSelectionRequest -may be called only from within an -.PN XtConvertSelectionProc -procedure and returns a pointer to the -.PN SelectionRequest -event that caused the conversion procedure to be invoked. -\fIRequest_id\fP specifies a unique id for the individual request in the -case that multiple incremental transfers are outstanding. For atomic -transfers, \fIrequest_id\fP must be specified as NULL. If no -.PN SelectionRequest -event is being processed for the specified -\fIwidget\fP, \fIselection\fP, and \fIrequest_id\fP, -.PN XtGetSelectionRequest -returns NULL. -.sp -.LP -The procedure pointer specified by the owner when it desires -notification upon losing ownership is of type -.PN XtLoseSelectionProc . -.LP -.IN "XtLoseSelectionProc" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtLoseSelectionProc)(Widget, Atom*); -.br - Widget \fIw\fP; -.br - Atom *\fIselection\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget that has lost selection ownership. -.IP \fIselection\fP 1i -Specifies the atom naming the selection. -.LP -.eM -This procedure is called by the \*(xI selection mechanism -to inform the specified widget that it has lost the given selection. -Note that this procedure does not ask the widget to relinquish the -selection ownership; it is merely informative. -.sp -.LP -The procedure pointer specified by the owner when it desires -notification of receipt of the data or when it manages the storage -containing the data is of type -.PN XtSelectionDoneProc . -.LP -.IN "XtSelectionDoneProc" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtSelectionDoneProc)(Widget, Atom*, Atom*); -.br - Widget \fIw\fP; -.br - Atom *\fIselection\fP; -.br - Atom *\fItarget\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget that owns the converted selection. -.IP \fIselection\fP 1i -Specifies the atom naming the selection that was converted. -.IP \fItarget\fP 1i -Specifies the target type to which the conversion was done. -.LP -.eM -This procedure is called by the \*(xI selection mechanism -to inform the selection owner that a selection requestor has successfully -retrieved a selection value. -If the selection owner has registered an -.PN XtSelectionDoneProc , -it should expect it to be called once for each conversion that it performs, -after the converted value has been successfully transferred -to the requestor. -If the selection owner has registered an -.PN XtSelectionDoneProc , -it also owns the storage containing the converted -selection value. - -.NH 4 -Getting the Selection Value -.XS -\*(SN Getting the Selection Value -.XE -.LP -The procedure pointer specified by the requestor to receive the -selection data from the \*(xI is of type -.PN XtSelectionCallbackProc . -.LP -.IN "XtSelectionCallbackProc" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtSelectionCallbackProc)(Widget, XtPointer, Atom*, Atom*, \ -XtPointer, unsigned long*, int*); -.br - Widget \fIw\fP; -.br - XtPointer \fIclient_data\fP; -.br - Atom *\fIselection\fP; -.br - Atom *\fItype\fP; -.br - XtPointer \fIvalue\fP; -.br - unsigned long *\fIlength\fP; -.br - int *\fIformat\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget that requested the selection value. -.IP \fIclient_data\fP 1i -Specifies a value passed in by the widget when it requested the -selection. -.IP \fIselection\fP 1i -Specifies the name of the selection that was requested. -.IP \fItype\fP 1i -Specifies the representation type of the selection value (for example, -.PN XA_STRING ). -Note that it is not the target that was requested (which the client -must remember for itself), but the type that -is used to represent the target. -The special symbolic constant -.PN XT_CONVERT_FAIL -is used to indicate that the selection conversion failed because the -selection owner did not respond within the \*(xI selection timeout -interval. -.IP \fIvalue\fP 1i -Specifies a pointer to the selection value. -The requesting client owns this storage and is responsible for freeing it -by calling -.PN XtFree -when it is done with it. -.IP \fIlength\fP 1i -Specifies the number of elements in \fIvalue\fP. -.IP \fIformat\fP 1i -Specifies the size in bits of the data in each element of \fIvalue\fP. -.LP -.eM -This procedure is called by the \*(xI selection mechanism to deliver the -requested selection to the requestor. -.LP -If the -.PN SelectionNotify -event returns a property of -.PN None , -meaning the conversion has been refused because there is no owner for the -specified selection or the owner cannot convert the selection to the -requested target for any reason, the procedure is called with a value -of NULL and a length of zero. -.sp -.LP -To obtain the selection value in a single logical unit, use -.PN XtGetSelectionValue -or -.PN XtGetSelectionValues . -.LP -.IN "XtGetSelectionValue" "" "@DEF@" -.sM -.FD 0 -void XtGetSelectionValue(\fIw\fP, \fIselection\fP, \fItarget\fP, \ -\fIcallback\fP, \fIclient_data\fP, \fItime\fP) -.br - Widget \fIw\fP; -.br - Atom \fIselection\fP; -.br - Atom \fItarget\fP; -.br - XtSelectionCallbackProc \fIcallback\fP; -.br - XtPointer \fIclient_data\fP; -.br - Time \fItime\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget making the request. \*(cI -.IP \fIselection\fP 1i -Specifies the particular selection desired; for example, -.PN XA_PRIMARY . -.IP \fItarget\fP 1i -Specifies the type of information needed about the selection. -.IP \fIcallback\fP 1i -Specifies the procedure to be called when the selection value -has been obtained. -Note that this is how the selection value is communicated back to the client. -.IP \fIclient_data\fP 1i -Specifies additional data to be passed to the specified procedure -when it is called. -.IP \fItime\fP 1i -Specifies the timestamp that indicates when the selection request was -initiated. -This should be the timestamp of the event that triggered this request; -the value -.PN CurrentTime -is not acceptable. -.LP -.eM -The -.PN XtGetSelectionValue -function requests the value of the selection converted to -the target type. -The specified callback is called at some time after -.PN XtGetSelectionValue -is called, when the selection value is received from the X server. -It may be called before or after -.PN XtGetSelectionValue -returns. -For more information about \fIselection\fP, \fItarget\fP, and -\fItime\fP, see Section 2.6 in the \fI\*(xC\fP. -.sp -.LP -.IN "XtGetSelectionValues" "" "@DEF@" -.sM -.FD 0 -void XtGetSelectionValues(\fIw\fP, \fIselection\fP, \fItargets\fP, \ -\fIcount\fP, \fIcallback\fP, \fIclient_data\fP, \fItime\fP) -.br - Widget \fIw\fP; -.br - Atom \fIselection\fP; -.br - Atom *\fItargets\fP; -.br - int \fIcount\fP; -.br - XtSelectionCallbackProc \fIcallback\fP; -.br - XtPointer *\fIclient_data\fP; -.br - Time \fItime\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget making the request. \*(cI -.IP \fIselection\fP 1i -Specifies the particular selection desired (that is, primary or secondary). -.IP \fItargets\fP 1i -Specifies the types of information needed about the selection. -.IP \fIcount\fP 1i -Specifies the length of the \fItargets\fP and \fIclient_data\fP lists. -.IP \fIcallback\fP 1i -Specifies the callback procedure -to be called with each selection value obtained. -Note that this is how the selection values are communicated back to the -client. -.IP \fIclient_data\fP 1i -Specifies a list of additional data values, one for each target type, -that are passed to the callback procedure when it is called for that target. -.IP \fItime\fP 1i -Specifies the timestamp that indicates when the selection request was -initiated. -This should be the timestamp of the event that triggered this request; -the value -.PN CurrentTime -is not acceptable. -.LP -.eM -The -.PN XtGetSelectionValues -function is similar to multiple calls to -.PN XtGetSelectionValue -except that it guarantees that no other client can assert ownership -between requests and therefore that all the conversions will refer to -the same selection value. The callback is invoked once for each -target value with the corresponding client data. -For more information about \fIselection\fP, \fItarget\fP, and -\fItime\fP, see Section 2.6 in the \fI\*(xC\fP. - -.NH 4 -Setting the Selection Owner -.XS -\*(SN Setting the Selection Owner -.XE -.LP -To set the selection owner and indicate that the selection value will -be provided in one piece, use -.PN XtOwnSelection . -.LP -.IN "XtOwnSelection" "" "@DEF@" -.sM -.FD 0 -Boolean XtOwnSelection(\fIw\fP, \fIselection\fP, \fItime\fP, \ -\fIconvert_proc\fP, \fIlose_selection\fP, \fIdone_proc\fP) -.br - Widget \fIw\fP; -.br - Atom \fIselection\fP; -.br - Time \fItime\fP; -.br - XtConvertSelectionProc \fIconvert_proc\fP; -.br - XtLoseSelectionProc \fIlose_selection\fP; -.br - XtSelectionDoneProc \fIdone_proc\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget that wishes to become the owner. \*(cI -.IP \fIselection\fP 1i -Specifies the name of the selection (for example, -.PN XA_PRIMARY ). -.IP \fItime\fP 1i -Specifies the timestamp that indicates when the ownership request was -initiated. -This should be the timestamp of the event that triggered ownership; -the value -.PN CurrentTime -is not acceptable. -.IP \fIconvert_proc\fP 1i -Specifies the procedure to be called whenever a client requests the -current value of the selection. -.IP \fIlose_selection\fP 1i -Specifies the procedure to be called whenever the widget has -lost selection ownership, or NULL if the owner is not interested in being -called back. -.IP \fIdone_proc\fP 1i -Specifies the procedure called -after the requestor has received the selection value, or NULL if the -owner is not -interested in being called back. -.LP -.eM -The -.PN XtOwnSelection -function informs the \*(xI selection mechanism that a -widget wishes to own a selection. -It returns -.PN True -if the widget successfully becomes the owner and -.PN False -otherwise. -The widget may fail to become the owner if some other widget -has asserted ownership at a time later than this widget. -The widget can lose selection ownership either -because some other widget asserted later ownership of the selection -or because the widget voluntarily gave up ownership of the selection. -The lose_selection procedure is not called -if the widget fails to obtain selection ownership in the first place. -.LP -If a done_proc is specified, the client owns the storage allocated -for passing the value to the \*(xI. If \fIdone_proc\fP is NULL, -the convert_proc must allocate storage using -.PN XtMalloc , -.PN XtRealloc , -or -.PN XtCalloc , -and the value specified is freed by the -\*(xI when the transfer is complete. -.sp -.LP -Usually, a selection owner maintains ownership indefinitely until some -other widget requests ownership, at which time -the \*(xI selection mechanism informs the previous owner that it -has lost ownership of the selection. -However, in response to some user actions -(for example, when a user deletes the information selected), -the application may wish to explicitly inform the \*(xI -by using -.PN XtDisownSelection -that it no longer is to be the selection owner. -.LP -.IN "XtDisownSelection" "" "@DEF@" -.sM -.FD 0 -void XtDisownSelection(\fIw\fP, \fIselection\fP, \fItime\fP) -.br - Widget \fIw\fP; -.br - Atom \fIselection\fP; -.br - Time \fItime\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget that wishes to relinquish ownership. -.IP \fIselection\fP 1i -Specifies the atom naming the selection being given up. -.IP \fItime\fP 1i -Specifies the timestamp that indicates when the request to -relinquish selection ownership was initiated. -.LP -.eM -The -.PN XtDisownSelection -function informs the \*(xI selection mechanism that -the specified widget is to lose ownership of the selection. -If the widget does not currently own the selection, either -because it lost the selection -or because it never had the selection to begin with, -.PN XtDisownSelection -does nothing. -.LP -After a widget has called -.PN XtDisownSelection , -its convert procedure is not called even if a request arrives later -with a timestamp during the period that this widget owned the selection. -However, its done procedure is called if a conversion that started -before the call to -.PN XtDisownSelection -finishes after the call to -.PN XtDisownSelection . - -.NH 3 -Using Incremental Transfers -.XS -\*(SN Using Incremental Transfers -.XE -.LP -When using the incremental interface, an owner may have to process -more than one selection request for the same selection, converted to -the same target, at the same time. The incremental functions take a -\fIrequest_id\fP argument, which is an identifier that is guaranteed to be -unique among all incremental requests that are active concurrently. -.LP -For example, consider the following: -.IP \(bu 5 -Upon receiving a request for the selection value, the owner sends -the first segment. -.IP \(bu 5 -While waiting to be called to provide the next segment value but -before sending it, the owner receives another request from a -different requestor for the same selection value. -.IP \(bu 5 -To distinguish between the requests, the owner uses the request_id -value. This allows the owner to distinguish between the first -requestor, which is asking for the second segment, and the second -requestor, which is asking for the first segment. - -.NH 4 -Incremental Transfer Procedures -.XS -\*(SN Incremental Transfer Procedures -.XE -.IN "Selections" "incremental" -.LP -The following procedures are used by selection owners who wish to -provide the selection data in multiple segments. -.LP -The procedure pointer specified by the incremental owner to supply the -selection data to the \*(xI is of type -.PN XtConvertSelectionIncrProc . -.LP -.sM -.Ds 0 -typedef XtPointer XtRequestId; -.De -.IN "XtRequestId" "" "@DEF@" -.IN "XtConvertSelectionIncrProc" "" "@DEF@" -.FD 0 -typedef Boolean (*XtConvertSelectionIncrProc)(Widget, Atom*, Atom*, \ -Atom*, XtPointer*, - unsigned long*, int*, unsigned long*, \ -XtPointer, XtRequestId*); -.br - Widget \fIw\fP; -.br - Atom *\fIselection\fP; -.br - Atom *\fItarget\fP; -.br - Atom *\fItype_return\fP; -.br - XtPointer *\fIvalue_return\fP; -.br - unsigned long *\fIlength_return\fP; -.br - int *\fIformat_return\fP; -.br - unsigned long *\fImax_length\fP; -.br - XtPointer \fIclient_data\fP; -.br - XtRequestId *\fIrequest_id\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget that currently owns this selection. -.IP \fIselection\fP 1i -Specifies the atom that names the selection requested. -.IP \fItarget\fP 1i -Specifies the type of information required about the selection. -.IP \fItype_return\fP 1i -Specifies a pointer to an atom into which the property -type of the converted value of the selection is to be -stored. -.IP \fIvalue_return\fP 1i -Specifies a pointer into which a pointer to the -converted value of the selection is to be stored. -The selection owner is responsible for allocating this storage. -.IP \fIlength_return\fP 1i -Specifies a pointer into which the number of elements -in \fIvalue_return\fP, each of size indicated by -\fIformat_return\fP, is to be stored. -.IP \fIformat_return\fP 1i -Specifies a pointer into which the size in bits of the -data elements of the selection value is to be stored so that the -server may byte-swap the data if necessary. -.IP \fImax_length\fP 1i -Specifies the maximum number of bytes which may be -transferred at any one time. -.IP \fIclient_data\fP 1i -Specifies the value passed in by the widget when it -took ownership of the selection. -.IP \fIrequest_id\fP 1i -Specifies an opaque identification for a specific request. -.LP -.eM -This procedure is called repeatedly by the \*(xI selection mechanism to get -the next incremental chunk of data from a selection owner who has -called -.PN XtOwnSelectionIncremental . -It must return -.PN True -if the procedure has succeeded in converting the selection data or -.PN False -otherwise. -On the first call with a particular request id, the owner must begin -a new incremental transfer for the requested selection and target. On -subsequent calls with the same request id, the owner may assume that -the previously supplied value is no longer needed by the \*(xI; -that is, a fixed transfer area may be allocated and returned in \fIvalue_return\fP -for each segment to be transferred. This procedure should store a -non-NULL value in \fIvalue_return\fP and zero in \fIlength_return\fP to indicate that the -entire selection has been delivered. After returning this final -segment, the request id may be reused by the \*(xI to begin a -new transfer. -.LP -To retrieve the -.PN SelectionRequest -event that triggered the selection conversion procedure, use -.PN XtGetSelectionRequest , -described in Section 11.5.2.1. -.sp -.LP -The procedure pointer specified by the incremental selection owner -when it desires notification upon no longer having ownership is of -type -.PN XtLoseSelectionIncrProc . -.LP -.IN "XtLoseSelectionIncrProc" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtLoseSelectionIncrProc)(Widget, Atom*, XtPointer); -.br - Widget \fIw\fP; -.br - Atom *\fIselection\fP; -.br - XtPointer \fIclient_data\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget that has lost the selection ownership. -.IP \fIselection\fP 1i -Specifies the atom that names the selection. -.IP \fIclient_data\fP 1i -Specifies the value passed in by the widget when it -took ownership of the selection. -.LP -.eM -This procedure, which is optional, is called by the \*(xI to -inform the selection owner that it no longer owns the selection. -.sp -.LP -The procedure pointer specified by the incremental selection owner -when it desires notification of receipt of the data or when it manages -the storage containing the data is of type -.PN XtSelectionDoneIncrProc . -.LP -.IN "XtSelectionDoneIncrProc" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtSelectionDoneIncrProc)(Widget, Atom*, Atom*, \ -XtRequestId*, XtPointer); -.br - Widget \fIw\fP; -.br - Atom *\fIselection\fP; -.br - Atom *\fItarget\fP; -.br - XtRequestId *\fIrequest_id\fP; -.br - XtPointer \fIclient_data\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget that owns the selection. -.IP \fIselection\fP 1i -Specifies the atom that names the selection being transferred. -.IP \fItarget\fP 1i -Specifies the target type to which the conversion was done. -.IP \fIrequest_id\fP 1i -Specifies an opaque identification for a specific request. -.IP \fIclient_data\fP 1i -Specified the value passed in by the widget when it -took ownership of the selection. -.LP -.eM -This procedure, which is optional, is called by the \*(xI after -the requestor has retrieved the final (zero-length) segment of the -incremental transfer to indicate that the entire transfer is complete. -If this procedure is not specified, the \*(xI will free only the -final value returned by the selection owner using -.PN XtFree . -.sp -.LP -The procedure pointer specified by the incremental selection owner to -notify it if a transfer should be terminated prematurely is of type -.PN XtCancelConvertSelectionProc . -.LP -.IN "XtCancelConvertSelectionProc" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtCancelConvertSelectionProc)(Widget, Atom*, Atom*, \ -XtRequestId*, XtPointer); -.br - Widget \fIw\fP; -.br - Atom *\fIselection\fP; -.br - Atom *\fItarget\fP; -.br - XtRequestId *\fIrequest_id\fP; -.br - XtPointer \fIclient_data\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget that owns the selection. -.IP \fIselection\fP 1i -Specifies the atom that names the selection being transferred. -.IP \fItarget\fP 1i -Specifies the target type to which the conversion was done. -.IP \fIrequest_id\fP 1i -Specifies an opaque identification for a specific request. -.IP \fIclient_data\fP 1i -Specifies the value passed in by the widget when it took ownership of -the selection. -.LP -.eM -This procedure is called by the \*(xI when it has been determined -by means of a timeout or other mechanism that any remaining segments -of the selection no longer need to be transferred. Upon receiving -this callback, the selection request is considered complete and the -owner can free the memory and any other resources that have been -allocated for the transfer. - -.NH 4 -Getting the Selection Value Incrementally -.XS -\*(SN Getting the Selection Value Incrementally -.XE -.LP -To obtain the value of the selection using incremental transfers, use -.PN XtGetSelectionValueIncremental -or -.PN XtGetSelectionValuesIncremental . -.LP -.IN "XtGetSelectionValueIncremental" "" "@DEF@" -.sM -.FD 0 -void XtGetSelectionValueIncremental(\fIw\fP, \fIselection\fP, \fItarget\fP, \ -\fIselection_callback\fP, \fIclient_data\fP, \fItime\fP) -.br - Widget \fIw\fP; -.br - Atom \fIselection\fP; -.br - Atom \fItarget\fP; -.br - XtSelectionCallbackProc \fIselection_callback\fP; -.br - XtPointer \fIclient_data\fP; -.br - Time \fItime\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget making the request. \*(cI -.IP \fIselection\fP 1i -Specifies the particular selection desired. -.IP \fItarget\fP 1i -Specifies the type of information needed -about the selection. -.IP \fIselection_callback\fP 1i -Specifies the callback procedure to be -called to receive each data segment. -.IP \fIclient_data\fP 1i -Specifies client-specific data to be passed to -the specified callback procedure when it is invoked. -.IP \fItime\fP 1i -Specifies the timestamp that indicates when the -selection request was initiated. This should be the -timestamp of the event that triggered this request; -the value -.PN CurrentTime -is not acceptable. -.LP -.eM -The -.PN XtGetSelectionValueIncremental -function is similar to -.PN XtGetSelectionValue -except that the selection_callback procedure will -be called repeatedly upon delivery of multiple segments of the -selection value. The end of the selection value is indicated when -\fIselection_callback\fP is called with a non-NULL value of length zero, -which must still be freed by the client. If the -transfer of the selection is aborted in the middle of a transfer -(for example, because of a timeout), the selection_callback procedure is -called with a type value equal to the symbolic constant -.PN XT_CONVERT_FAIL -so that the requestor can dispose -of the partial selection value it has collected up until that point. -Upon receiving -.PN XT_CONVERT_FAIL , -the requesting client must determine -for itself whether or not a partially completed data transfer is meaningful. -For more information about \fIselection\fP, \fItarget\fP, and -\fItime\fP, see Section 2.6 in the \fI\*(xC\fP. -.LP -.IN "XtGetSelectionValuesIncremental" "" "@DEF@" -.sM -.FD 0 -void XtGetSelectionValuesIncremental(\fIw\fP, \fIselection\fP, \fItargets\fP, \ -\fIcount\fP, \fIselection_callback\fP, \fIclient_data\fP, \fItime\fP) -.br - Widget \fIw\fP; -.br - Atom \fIselection\fP; -.br - Atom *\fItargets\fP; -.br - int \fIcount\fP; -.br - XtSelectionCallbackProc \fIselection_callback\fP; -.br - XtPointer *\fIclient_data\fP; -.br - Time \fItime\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget making the request. \*(cI -.IP \fIselection\fP 1i -Specifies the particular selection desired. -.IP \fItargets\fP 1i -Specifies the types of information needed about -the selection. -.IP \fIcount\fP 1i -Specifies the length of the \fItargets\fP and \fIclient_data\fP lists. -.IP \fIselection_callback\fP 1i -Specifies the callback procedure to be called -to receive each selection value. -.IP \fIclient_data\fP 1i -Specifies a list of client data (one for each target -type) values that are passed to the callback procedure when -it is invoked for the corresponding target. -.IP \fItime\fP 1i -Specifies the timestamp that indicates when the -selection request was initiated. This should be the -timestamp of the event that triggered this request; -the value -.PN CurrentTime -is not acceptable. -.LP -.eM -The -.PN XtGetSelectionValuesIncremental -function is similar to -.PN XtGetSelectionValueIncremental -except that it takes a list of targets and client data. -.PN XtGetSelectionValuesIncremental -is equivalent to calling -.PN XtGetSelectionValueIncremental -successively for each \fItarget/client_data\fP pair except that -.PN XtGetSelectionValuesIncremental -does guarantee that all the conversions will use the same selection -value because the ownership of the selection cannot change in the -middle of the list, as would be possible when calling -.PN XtGetSelectionValueIncremental -repeatedly. -For more information about \fIselection\fP, \fItarget\fP, and -\fItime\fP, see Section 2.6 in the \fI\*(xC\fP. - -.NH 4 -Setting the Selection Owner for Incremental Transfers -.XS -\*(SN Setting the Selection Owner for Incremental Transfers -.XE -.LP -To set the selection owner when using incremental transfers, use -.PN XtOwnSelectionIncremental . -.LP -.IN "XtOwnSelectionIncremental" "" "@DEF@" -.sM -.FD 0 -Boolean XtOwnSelectionIncremental(\fIw\fP, \fIselection\fP, \fItime\fP, \ -\fIconvert_callback\fP, \fIlose_callback\fP, - \fIdone_callback\fP, \ -\fIcancel_callback\fP, \fIclient_data\fP) -.br - Widget \fIw\fP; -.br - Atom \fIselection\fP; -.br - Time \fItime\fP; -.br - XtConvertSelectionIncrProc \fIconvert_callback\fP; -.br - XtLoseSelectionIncrProc \fIlose_callback\fP; -.br - XtSelectionDoneIncrProc \fIdone_callback\fP; -.br - XtCancelConvertSelectionProc \fIcancel_callback\fP; -.br - XtPointer \fIclient_data\fP; -.FN -.IP \fIw\fP 1.25i -Specifies the widget that wishes to become the owner. \*(cI -.IP \fIselection\fP 1.25i -Specifies the atom that names the selection. -.IP \fItime\fP 1.25i -Specifies the timestamp that indicates when the -selection ownership request was initiated. This should be -the timestamp of the event that triggered ownership; the value -.PN CurrentTime -is not acceptable. -.IP \fIconvert_callback\fP 1.25i -Specifies the procedure to be called whenever -the current value of the selection is requested. -.IP \fIlose_callback\fP 1.25i -Specifies the procedure to be called whenever -the widget has lost selection ownership, or NULL if the -owner is not interested in being notified. -.IP \fIdone_callback\fP 1.25i -Specifies the procedure called after the -requestor has received the entire selection, or NULL if -the owner is not interested in being notified. -.IP \fIcancel_callback\fP 1.25i -Specifies the callback procedure to be called -when a selection request aborts because a timeout expires, -or NULL if the owner is not interested in being notified. -.IP \fIclient_data\fP 1.25i -Specifies the argument to be passed to each of -the callback procedures when they are called. -.LP -.eM -The -.PN XtOwnSelectionIncremental -procedure informs the \*(xI -incremental selection mechanism that the specified widget wishes to -own the selection. It returns -.PN True -if the specified widget successfully becomes the selection owner or -.PN False -otherwise. -For more information about \fIselection\fP, \fItarget\fP, and -\fItime\fP, see Section 2.6 in the \fI\*(xC\fP. -.LP -If a done_callback procedure is specified, the client owns the storage allocated -for passing the value to the \*(xI. If \fIdone_callback\fP is NULL, -the convert_callback procedure must allocate storage using -.PN XtMalloc , -.PN XtRealloc , -or -.PN XtCalloc , -and the final value specified is freed by the -\*(xI when the transfer is complete. After a selection transfer -has started, only one of the done_callback or cancel_callback -procedures is invoked to indicate completion of the transfer. -.LP -The lose_callback procedure does not indicate completion of any in-progress -transfers; it is invoked at the time a -.PN SelectionClear -event is dispatched regardless of any active transfers, which are still -expected to continue. -.LP -A widget that becomes the selection owner using -.PN XtOwnSelectionIncremental -may use -.PN XtDisownSelection -to relinquish selection ownership. - -.NH 3 -Setting and Retrieving Selection Target Parameters -.XS -\*(SN Setting and Retrieving Selection Target Parameters -.XE -.LP -To specify target parameters for a selection request with a single target, -use -.PN XtSetSelectionParameters . -.LP -.IN "XtSetSelectionParameters" "" "@DEF@" -.sM -.FD 0 -void XtSetSelectionParameters(\fIrequestor\fP, \fIselection\fP, \fItype\fP, \ -\fIvalue\fP, \fIlength\fP, \fIformat\fP) -.br - Widget \fIrequestor\fP; -.br - Atom \fIselection\fP; -.br - Atom \fItype\fP; -.br - XtPointer \fIvalue\fP; -.br - unsigned long \fIlength\fP; -.br - int \fIformat\fP; -.FN -.IP \fIrequestor\fP 1i -Specifies the widget making the request. \*(cI -.IP \fIselection\fP 1i -Specifies the atom that names the selection. -.IP \fItype\fP 1i -Specifies the type of the property in which the parameters are passed. -.IP \fIvalue\fP 1i -Specifies a pointer to the parameters. -.IP \fIlength\fP 1i -Specifies the number of elements containing data in \fIvalue\fP, -each element of a size indicated by \fIformat\fP. -.IP \fIformat\fP 1i -Specifies the size in bits of the data in the elements of \fIvalue\fP. -.LP -The specified parameters are copied and stored in a new property -of the specified type and format on the requestor's window. To initiate -a selection request with a target and these parameters, a subsequent -call to -.PN XtGetSelectionValue -or to -.PN XtGetSelectionValueIncremental -specifying the same requestor widget and selection atom will generate a -.PN ConvertSelection -request referring to the property containing the parameters. If -.PN XtSetSelectionParameters -is called more than once with the same widget and selection without -a call to specify a request, the most recently specified parameters -are used in the subsequent request. -.LP -.eM -The possible values of \fIformat\fP are 8, 16, or 32. If the format is 8, -the elements of \fIvalue\fP are assumed to be sizeof(char); -if 16, sizeof(short); if 32, sizeof(long). -.LP -To generate a MULTIPLE -target request with parameters for any of the multiple targets of the -selection request, precede individual calls to -.PN XtGetSelectionValue -and -.PN XtGetSelectionValueIncremental -with corresponding individual calls to -.PN XtSetSelectionParameters , -and enclose these all within -.PN XtCreateSelectionRequest -and -.PN XtSendSelectionRequest. -.PN XtGetSelectionValues -and -.PN XtGetSelectionValuesIncremental -cannot be used to make selection requests with parameterized targets. -.sp -.LP -To retrieve any target parameters needed to perform a selection conversion, -the selection owner calls -.PN XtGetSelectionParameters . -.LP -.IN "XtGetSelectionParameters" "" "@DEF@" -.sM -.FD 0 -void XtGetSelectionParameters(\fIowner\fP, \fIselection\fP, \ -\fIrequest_id\fP, \fItype_return\fP, \fIvalue_return\fP, - \fIlength_return\fP, \ -\fIformat_return\fP) -.br - Widget \fIowner\fP; -.br - Atom \fIselection\fP; -.br - XtRequestId \fIrequest_id\fP; -.br - Atom *\fItype_return\fP; -.br - XtPointer *\fIvalue_return\fP; -.br - unsigned long *\fIlength_return\fP; -.br - int *\fIformat_return\fP; -.FN -.IP \fIowner\fP 1i -Specifies the widget that owns the specified selection. -.IP \fIselection\fP 1i -Specifies the selection being processed. -.IP \fIrequest_id\fP 1i -Specifies the requestor id in the case of incremental selections, -or NULL in the case of atomic transfers. -.IP \fItype_return\fP 1i -Specifies a pointer to an atom in which the property type -of the parameters is stored. -.IP \fIvalue_return\fP 1i -Specifies a pointer into which a pointer to the parameters is to be stored. -A NULL is stored if no parameters accompany the request. -.IP \fIlength_return\fP 1i -Specifies a pointer into which the number of data elements -in \fIvalue_return\fP of size indicated by \fIformat_return\fP are stored. -.IP \fIformat_return\fP 1i -Specifies a pointer into which the size in bits of the parameter data -in the elements of \fIvalue\fP is stored. -.LP -.eM -.PN XtGetSelectionParameters -may be called only from within an -.PN XtConvertSelectionProc -or from within the first call to an -.PN XtConvertSelectionIncrProc -with a new request_id. -.LP -It is the responsibility of the caller to free the returned parameters using -.PN XtFree -when the parameters are no longer needed. - -.NH 3 -Generating MULTIPLE Requests -.XS -\*(SN Generating MULTIPLE Requests -.XE -.LP -To have the \*(xI bundle multiple calls to make selection requests into -a single request using a \s-1MULTIPLE\s+1 target, use -.PN XtCreateSelectionRequest -and -.PN XtSendSelectionRequest . -.LP -.IN "XtCreateSelectionRequest" "" "@DEF@" -.sM -.FD 0 -void XtCreateSelectionRequest(\fIrequestor\fP, \fIselection\fP) -.br - Widget \fIrequestor\fP; -.br - Atom \fIselection\fP; -.FN -.IP \fIrequestor\fP 1i -Specifies the widget making the request. \*(cI -.IP \fIselection\fP 1i -Specifies the particular selection desired. -.LP -.eM -When -.PN XtCreateSelectionRequest -is called, subsequent calls to -.PN XtGetSelectionValue , -.PN XtGetSelectionValueIncremental , -.PN XtGetSelectionValues , -and -.PN XtGetSelectionValuesIncremental , -with the requestor and selection as specified to -.PN XtCreateSelectionRequest , -are bundled into a single selection request with -multiple targets. The request is made by calling -.PN XtSendSelectionRequest . -.LP -.IN "XtSendSelectionRequest" "" "@DEF@" -.sM -.FD 0 -void XtSendSelectionRequest(\fIrequestor\fP, \fIselection\fP, \fItime\fP) -.br - Widget \fIrequestor\fP; -.br - Atom \fIselection\fP; -.br - Time \fItime\fP; -.FN -.IP \fIrequestor\fP 1i -Specifies the widget making the request. \*(cI -.IP \fIselection\fP 1i -Specifies the particular selection desired. -.IP \fItime\fP 1i -Specifies the timestamp that indicates when the selection request was -initiated. The value -.PN CurrentTime -is not acceptable. -.LP -.eM -When -.PN XtSendSelectionRequest -is called with a value of \fIrequestor\fP and \fIselection\fP matching -a previous call to -.PN XtCreateSelectionRequest , -a selection request is sent to the selection owner. -If a single target request is queued, that request is made. -If multiple targets are queued, they are bundled into a single request -with a target of MULTIPLE using the specified timestamp. -As the values are returned, the callbacks specified in -.PN XtGetSelectionValue , -.PN XtGetSelectionValueIncremental , -.PN XtGetSelectionValues , -and -.PN XtGetSelectionValueIncremental -are invoked. -.LP -Multi-threaded applications should lock the application context before -calling -.PN XtCreateSelectionRequest -and release the lock after calling -.PN XtSendSelectionRequest -to ensure that the thread assembling the request is safe from interference -by another thread assembling a different request naming the same widget -and selection. -.sp -.LP -To relinquish the composition of a MULTIPLE request without sending it, use -.PN XtCancelSelectionRequest . -.LP -.IN "XtCancelSelectionRequest" "" "@DEF@" -.sM -.FD 0 -void XtCancelSelectionRequest(\fIrequestor\fP, \fIselection\fP) -.br - Widget \fIrequestor\fP; -.br - Atom \fIselection\fP; -.FN -.IP \fIrequestor\fP 1i -Specifies the widget making the request. \*(cI -.IP \fIselection\fP 1i -Specifies the particular selection desired. -.LP -.eM -When -.PN XtCancelSelectionRequest -is called, any requests queued since the last call to -.PN XtCreateSelectionRequest -for the same widget and selection are discarded -and any resources reserved are released. -A subsequent call to -.PN XtSendSelectionRequest -will not result in any request being made. -Subsequent calls to -.PN XtGetSelectionValue , -.PN XtGetSelectionValues , -.PN XtGetSelectionValueIncremental , -or -.PN XtGetSelectionValuesIncremental -will not be deferred. - -.NH 3 -Auxiliary Selection Properties -.XS -\*(SN Auxiliary Selection Properties -.XE -.LP -Certain uses of parameterized selections require clients to name -other window properties within a selection parameter. To permit -reuse of temporary property names in these circumstances and -thereby reduce the number of unique atoms created in the server, -the \*(xI provides two interfaces for acquiring temporary property names. -.LP -To acquire a temporary property name atom for use in a selection -request, the client may call -.PN XtReservePropertyAtom . -.LP -.IN "XtReservePropertyAtom" "" "@DEF@" -.sM -.FD 0 -Atom XtReservePropertyAtom(\fIw\fP) -.br - Widget \fIw\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget making a selection request. -.LP -.eM -.PN XtReservePropertyAtom -returns an atom that may be used as a property name during selection -requests involving the specified widget. -As long as the atom remains reserved, it is unique with respect to all -other reserved atoms for the widget. -.LP -To return a temporary property name atom for reuse and to delete -the property named by that atom, use -.PN XtReleasePropertyAtom . -.LP -.IN "XtReleasePropertyAtom" "" "@DEF@" -.sM -.FD 0 -void XtReleasePropertyAtom(\fIw\fP, \fIatom\fP) -.br - Widget \fIw\fP; -.br - Atom \fIatom\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget used to reserve the property name atom. -.IP \fIatom\fP 1i -Specifies the property name atom returned by -.PN XtReservePropertyAtom -that is to be released for reuse. -.LP -.eM -.PN XtReleasePropertyAtom -marks the specified property name atom as -no longer in use and ensures that any property having that name -on the specified widget's window is deleted. If \fIatom\fP does not -specify a value returned by -.PN XtReservePropertyAtom -for the specified widget, the results are undefined. - -.NH 3 -Retrieving the Most Recent Timestamp -.XS -\*(SN Retrieving the Most Recent Timestamp -.XE -.LP -To retrieve the timestamp from the most recent call to -.PN XtDispatchEvent -that contained a timestamp, use -.PN XtLastTimestampProcessed . -.LP -.IN "XtLastTimestampProcessed" "" "@DEF@" -.sM -.FD 0 -Time XtLastTimestampProcessed(\fIdisplay\fP) -.br - Display *\fIdisplay\fP; -.FN -.IP \fIdisplay\fP 1i -Specifies an open display connection. -.LP -.eM -If no -.PN KeyPress , -.PN KeyRelease , -.PN ButtonPress , -.PN ButtonRelease , -.PN MotionNotify , -.PN EnterNotify , -.PN LeaveNotify , -.PN PropertyNotify , -or -.PN SelectionClear -event has yet been passed to -.PN XtDispatchEvent -for the specified display, -.PN XtLastTimestampProcessed -returns zero. - -.NH 3 -Retrieving the Most Recent Event -.XS -\*(SN Retrieving the Most Recent Event -.XE -.LP -To retrieve the event from the most recent call to -.PN XtDispatchEvent -for a specific display, use -.PN XtLastEventProcessed . -.LP -.IN "XtLastEventProcessed" "" "@DEF@" -.sM -.FD 0 -XEvent *XtLastEventProcessed(\fIdisplay\fP) -.br - Display *\fIdisplay\fP; -.FN -.IP \fIdisplay\fP 1i -Specifies the display connection from which to retrieve the event. -.LP -.eM -Returns the last event passed to -.PN XtDispatchEvent -for the specified display. Returns NULL if there is no such event. -The client must not modify the contents of the returned event. - -.NH 2 -Merging Exposure Events into a Region -.XS -\*(SN Merging Exposure Events into a Region -.XE -.LP -The \*(xI provide an -.PN XtAddExposureToRegion -utility function that merges -.PN Expose -and -.PN GraphicsExpose -events into a region for clients to process at once -rather than processing individual rectangles. -For further information about regions, -see Section 16.5 in \fI\*(xL\fP. -.sp -.LP -To merge -.PN Expose -and -.PN GraphicsExpose -events into a region, use -.PN XtAddExposureToRegion . -.LP -.IN "XtAddExposureToRegion" "" "@DEF@" -.sM -.FD 0 -void XtAddExposureToRegion(\fIevent\fP, \fIregion\fP) -.br - XEvent *\fIevent\fP; -.br - Region \fIregion\fP; -.FN -.IP \fIevent\fP 1i -Specifies a pointer to the -.PN Expose -or -.PN GraphicsExpose -event. -.IP \fIregion\fP 1i -Specifies the region object (as defined in -.Pn < X11/Xutil.h >). -.LP -.eM -The -.PN XtAddExposureToRegion -function computes the union of the rectangle defined by the exposure -event and the specified region. -Then it stores the results back in \fIregion\fP. -If the event argument is not an -.PN Expose -or -.PN GraphicsExpose -event, -.PN XtAddExposureToRegion -returns without an error and without modifying \fIregion\fP. -.LP -This function is used by the exposure compression mechanism; -see Section 7.9.3. - -.NH 2 -Translating Widget Coordinates -.XS -\fB\*(SN Translating Widget Coordinates\fP -.XE -.LP -To translate an x-y coordinate pair from widget coordinates to root -window absolute coordinates, use -.PN XtTranslateCoords . -.LP -.IN "XtTranslateCoords" "" "@DEF@" -.sM -.FD 0 -void XtTranslateCoords(\fIw\fP, \fIx\fP, \fIy\fP, \fIrootx_return\fP, \ -\fIrooty_return\fP) -.br - Widget \fIw\fP; -.br - Position \fIx\fP, \fIy\fP; -.br - Position *\fIrootx_return\fP, *\fIrooty_return\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget. \*(rI -.IP \fIx\fP 1i -.br -.ns -.IP \fIy\fP 1i -Specify the widget-relative x and y coordinates. -.IP \fIrootx_return\fP 1i -.br -.ns -.IP \fIrooty_return\fP 1i -Return the root-relative x and y coordinates. -.LP -.eM -While -.PN XtTranslateCoords -is similar to the Xlib -.PN XTranslateCoordinates -function, it does not generate a server request because all the required -information already is in the widget's data structures. - -.NH 2 -Translating a Window to a Widget -.XS -\fB\*(SN Translating a Window to a Widget\fP -.XE -.LP -To translate a given window and display pointer into a widget instance, use -.PN XtWindowToWidget . -.LP -.IN "XtWindowToWidget" "" "@DEF@" -.sM -.FD 0 -Widget XtWindowToWidget(\fIdisplay\fP, \fIwindow\fP) -.br - Display *\fIdisplay\fP; -.br - Window \fIwindow\fP; -.FN -.IP \fIdisplay\fP 1i -Specifies the display on which the window is defined. -.IP \fIwindow\fP 1i -Specifies the drawable for which you want the widget. -.LP -.eM -If there is a realized widget whose window is the specified drawable on -the specified \fIdisplay\fP, -.PN XtWindowToWidget -returns that widget. -If not and if the drawable has been associated with a widget through -.PN XtRegisterDrawable , -.PN XtWindowToWidget -returns the widget associated with the drawable. In other cases it -returns NULL. - -.NH 2 -Handling Errors -.XS -\fB\*(SN Handling Errors\fP -.XE -.LP -The \*(xI allow a client to register procedures that are called -whenever a fatal or nonfatal error occurs. -These facilities are intended for both error reporting and logging -and for error correction or recovery. -.LP -Two levels of interface are provided: -.IP \(bu 5 -A high-level interface that takes an error -name and class and retrieves the error message text from -an error resource database. -.IP \(bu 5 -A low-level interface that takes a simple string to display. -.LP -The high-level functions construct a string to pass to the lower-level -interface. -The strings may be specified in application code and are -overridden by the contents of an external systemwide file, -the ``error database file''. The location and name of this file are -implementation-dependent. -.NT -The application-context-specific error handling is not -implemented on many systems, although the interfaces are -always present. -Most implementations will have just one set of error handlers -for all application contexts within a process. -If they are set for different application contexts, -the ones registered last will prevail. -.NE -.sp -.LP -To obtain the error database (for example, to merge with -an application- or widget-specific database), use -.PN XtAppGetErrorDatabase . -.LP -.IN "XtAppGetErrorDatabase" "" "@DEF@" -.sM -.FD 0 -XrmDatabase *XtAppGetErrorDatabase(\^\fIapp_context\fP\^) -.br - XtAppContext \fIapp_context\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context. -.LP -.eM -The -.PN XtAppGetErrorDatabase -function returns the address of the error database. -The \*(xI do a lazy binding of the error database and do not merge in the -database file until the first call to -.PN XtAppGetErrorDatabaseText . -.LP -For a complete listing of all errors and warnings -that can be generated by the \*(xI, see Appendix D. -.sp -.LP -The high-level error and warning handler procedure pointers are of type -.PN XtErrorMsgHandler . -.LP -.IN "XtErrorMsgHandler" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtErrorMsgHandler)(String, String, String, String, \ -String*, Cardinal*); -.br - String \fIname\fP; -.br - String \fItype\fP; -.br - String \fIclass\fP; -.br - String \fIdefaultp\fP; -.br - String *\fIparams\fP; -.br - Cardinal *\fInum_params\fP; -.FN -.IP \fIname\fP 1i -Specifies the name to be concatenated with the specified type to form -the resource name of the error message. -.IP \fItype\fP 1i -Specifies the type to be concatenated with the name to form the -resource name of the error message. -.IP \fIclass\fP 1i -Specifies the resource class of the error message. -.IP \fIdefaultp\fP 1i -Specifies the default message to use if no error database entry is found. -.IP \fIparams\fP 1i -Specifies a pointer to a list of parameters to be substituted in the message. -.IP \fInum_params\fP 1i -Specifies the number of entries in \fIparams\fP. -.LP -.eM -The specified name can be a general kind of error, -like ``invalidParameters'' or ``invalidWindow'', -and the specified type gives extra information -such as the name of the routine in which the error was detected. -Standard -.PN printf -notation is used to substitute the parameters into the message. -.sp -.LP -An error message handler can obtain the error database text for an -error or a warning by calling -.PN XtAppGetErrorDatabaseText . -.LP -.IN "XtAppGetErrorDatabaseText" "" "@DEF@" -.sM -.FD 0 -void XtAppGetErrorDatabaseText(\fIapp_context\fP, \fIname\fP, \fItype\fP, \fIclass\fP, \fIdefault\fP, \fIbuffer_return\fP, \fInbytes\fP, \fIdatabase\fP) -.br - XtAppContext \fIapp_context\fP; -.br - String \fIname\fP, \fItype\fP, \fIclass\fP; -.br - String \fIdefault\fP; -.br - String \fIbuffer_return\fP; -.br - int \fInbytes\fP; -.br - XrmDatabase \fIdatabase\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context. -.IP \fIname\fP 1i -.br -.ns -.IP \fItype\fP 1i -Specify the name and type concatenated to form the resource name -of the error message. -.IP \fIclass\fP 1i -Specifies the resource class of the error message. -.IP \fIdefault\fP 1i -Specifies the default message to use if an error database entry is not found. -.IP \fIbuffer_return\fP 1i -Specifies the buffer into which the error message is to be returned. -.IP \fInbytes\fP 1i -Specifies the size of the buffer in bytes. -.IP \fIdatabase\fP 1i -Specifies the name of the alternative database to be used, -or NULL if the application context's error database is to be used. -.LP -.eM -The -.PN XtAppGetErrorDatabaseText -returns the appropriate message from the error database -or returns the specified default message if one is not found in the -error database. -To form the full resource name and class when querying the database, -the \fIname\fP and \fItype\fP are concatenated with a single ``.'' -between them and the \fIclass\fP is concatenated with itself with a -single ``.'' if it does not already contain a ``.''. -.sp -.LP -To return the application name and class as passed to -.PN XtDisplayInitialize -for a particular Display, use -.PN XtGetApplicationNameAndClass . -.LP -.IN "XtGetApplicationNameAndClass" "" "@DEF@" -.sM -.FD 0 -void XtGetApplicationNameAndClass(\fIdisplay\fP, \fIname_return\fP, \ -\fIclass_return\fP) -.br - Display* \fIdisplay\fP; -.br - String* \fIname_return\fP; -.br - String* \fIclass_return\fP; -.FN -.IP \fIdisplay\fP 1i -Specifies an open display connection that has been initialized with -.PN XtDisplayInitialize . -.IP \fIname_return\fP 1i -Returns the application name. -.IP \fIclass_return\fP 1i -Returns the application class. -.LP -.eM -.PN XtGetApplicationNameAndClass -returns the application name and class passed to -.PN XtDisplayInitialize -for the specified display. If the display was -never initialized or has been closed, the result is undefined. The -returned strings are owned by the \*(xI and must not be modified -or freed by the caller. -.sp -.LP -To register a procedure to be called on fatal error conditions, use -.PN XtAppSetErrorMsgHandler . -.LP -.IN "XtAppSetErrorMsgHandler" "" "@DEF@" -.sM -.FD 0 -XtErrorMsgHandler XtAppSetErrorMsgHandler(\fIapp_context\fP, \fImsg_handler\fP) -.br - XtAppContext \fIapp_context\fP; -.br - XtErrorMsgHandler \fImsg_handler\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context. -.IP \fImsg_handler\fP 1i -Specifies the new fatal error procedure, which should not return. -.LP -.eM -.PN XtAppSetErrorMsgHandler -returns a pointer to the previously -installed high-level fatal error handler. -The default high-level fatal error handler provided by the \*(xI is named -.PN _XtDefaultErrorMsg -.IN "_XtDefaultErrorMsg" "" "@DEF" -and constructs a string from the error resource database and calls -.PN XtError . -Fatal error message handlers should not return. -If one does, -subsequent \*(xI behavior is undefined. -.sp -.LP -To call the high-level error handler, use -.PN XtAppErrorMsg . -.LP -.IN "XtAppErrorMsg" "" "@DEF@" -.sM -.FD 0 -void XtAppErrorMsg(\fIapp_context\fP, \fIname\fP, \fItype\fP, \fIclass\fP, \ -\fIdefault\fP, \ \fIparams\fP, \fInum_params\fP) -.br - XtAppContext \fIapp_context\fP; -.br - String \fIname\fP; -.br - String \fItype\fP; -.br - String \fIclass\fP; -.br - String \fIdefault\fP; -.br - String *\fIparams\fP; -.br - Cardinal *\fInum_params\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context. -.IP \fIname\fP 1i -Specifies the general kind of error. -.IP \fItype\fP 1i -Specifies the detailed name of the error. -.IP \fIclass\fP 1i -Specifies the resource class. -.IP \fIdefault\fP 1i -Specifies the default message to use if an error database entry is not found. -.IP \fIparams\fP 1i -Specifies a pointer to a list of values to be stored in the message. -.IP \fInum_params\fP 1i -Specifies the number of entries in \fIparams\fP. -.LP -.eM -The \*(xI internal errors all have class -``XtToolkitError''. -.sp -.LP -To register a procedure to be called on nonfatal error conditions, use -.PN XtAppSetWarningMsgHandler . -.LP -.IN "XtAppSetWarningMsgHandler" "" "@DEF@" -.sM -.FD 0 -XtErrorMsgHandler XtAppSetWarningMsgHandler(\fIapp_context\fP, \fImsg_handler\fP) -.br - XtAppContext \fIapp_context\fP; -.br - XtErrorMsgHandler \fImsg_handler\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context. -.IP \fImsg_handler\fP 1i -Specifies the new nonfatal error procedure, which usually returns. -.LP -.eM -.PN XtAppSetWarningMsgHandler -returns a pointer to the previously -installed high-level warning handler. -The default high-level warning handler provided by the \*(xI is named -.PN _XtDefaultWarningMsg -.IN "_XtDefaultWarningMsg" "" "@DEF@" -and constructs a string -from the error resource database and calls -.PN XtWarning . -.sp -.LP -To call the installed high-level warning handler, use -.PN XtAppWarningMsg . -.LP -.IN "XtAppWarningMsg" "" "@DEF@" -.sM -.FD 0 -void XtAppWarningMsg(\fIapp_context\fP, \fIname\fP, \fItype\fP, \fIclass\fP, \fIdefault\fP, \fIparams\fP, \fInum_params\fP) -.br - XtAppContext \fIapp_context\fP; -.br - String \fIname\fP; -.br - String \fItype\fP; -.br - String \fIclass\fP; -.br - String \fIdefault\fP; -.br - String *\fIparams\fP; -.br - Cardinal *\fInum_params\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context. -.IP \fIname\fP 1i -Specifies the general kind of error. -.IP \fItype\fP 1i -Specifies the detailed name of the error. -.IP \fIclass\fP 1i -Specifies the resource class. -.IP \fIdefault\fP 1i -Specifies the default message to use if an error database entry is not found. -.IP \fIparams\fP 1i -Specifies a pointer to a list of values to be stored in the message. -.IP \fInum_params\fP 1i -Specifies the number of entries in \fIparams\fP. -.LP -.eM -The \*(xI internal warnings all have class -``XtToolkitError''. -.sp -.LP -The low-level error and warning handler procedure pointers are of type -.PN XtErrorHandler . -.LP -.IN "XtErrorHandler" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtErrorHandler)(String); -.br - String \fImessage\fP; -.FN -.IP \fImessage\fP 1i -Specifies the error message. -.LP -.eM -The error handler should display the message string in some appropriate fashion. -.sp -.LP -To register a procedure to be called on fatal error conditions, use -.PN XtAppSetErrorHandler . -.LP -.IN "XtAppSetErrorHandler" "" "@DEF@" -.sM -.FD 0 -XtErrorHandler XtAppSetErrorHandler(\fIapp_context\fP, \fIhandler\fP) -.br - XtAppContext \fIapp_context\fP; -.br - XtErrorHandler \fIhandler\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context. -.IP \fIhandler\fP 1i -Specifies the new fatal error procedure, which should not return. -.LP -.eM -.PN XtAppSetErrorHandler -returns a pointer to the previously installed -low-level fatal error handler. -The default low-level error handler provided by the \*(xI is -.PN _XtDefaultError . -.IN "_XtDefaultError" "" "@DEF@" -On POSIX-based systems, -it prints the message to standard error and terminates the application. -Fatal error message handlers should not return. -If one does, -subsequent \*(xI behavior is undefined. -.sp -.LP -To call the installed fatal error procedure, use -.PN XtAppError . -.LP -.IN "XtAppError" "" "@DEF@" -.sM -.FD 0 -void XtAppError(\fIapp_context\fP, \fImessage\fP) -.br - XtAppContext \fIapp_context\fP; -.br - String \fImessage\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context. -.IP \fImessage\fP 1i -Specifies the message to be reported. -.LP -.eM -Most programs should use -.PN XtAppErrorMsg , -not -.PN XtAppError , -to provide for customization and internationalization of error messages. -.sp -.LP -To register a procedure to be called on nonfatal error conditions, use -.PN XtAppSetWarningHandler . -.LP -.IN "XtAppSetWarningHandler" "" "@DEF@" -.sM -.FD 0 -XtErrorHandler XtAppSetWarningHandler(\fIapp_context\fP, \fIhandler\fP) -.br - XtAppContext \fIapp_context\fP; -.br - XtErrorHandler \fIhandler\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context. -.IP \fIhandler\fP 1i -Specifies the new nonfatal error procedure, which usually returns. -.LP -.eM -.PN XtAppSetWarningHandler -returns a pointer to the previously installed -low-level warning handler. -The default low-level warning handler provided by the \*(xI is -.PN _XtDefaultWarning . -.IN "_XtDefaultWarning" "" "@DEF@" -On POSIX-based systems, -it prints the message to standard error and returns to the caller. -.sp -.LP -To call the installed nonfatal error procedure, use -.PN XtAppWarning . -.LP -.IN "XtAppWarning" "" "@DEF@" -.sM -.FD 0 -void XtAppWarning(\fIapp_context\fP, \fImessage\fP) -.br - XtAppContext \fIapp_context\fP; -.br - String \fImessage\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context. -.IP \fImessage\fP 1i -Specifies the nonfatal error message to be reported. -.LP -.eM -Most programs should use -.PN XtAppWarningMsg , -not -.PN XtAppWarning , -to provide for customization and internationalization of warning messages. - -.NH 2 -Setting WM_COLORMAP_WINDOWS -.XS -\fB\*(SN Setting WM_COLORMAP_WINDOWS\fP -.XE -.LP -A client may set the value of the \s-1WM_COLORMAP_WINDOWS\s+1 -.IN "WM_COLORMAP_WINDOWS" "" "@DEF@" -property on a widget's window by calling -.PN XtSetWMColormapWindows . -.LP -.IN "XtSetWMColormapWindows" "" "@DEF@" -.sM -.FD 0 -void XtSetWMColormapWindows(\fIwidget\fP, \fIlist\fP, \fIcount\fP) -.br - Widget \fIwidget\fP; -.br - Widget* \fIlist\fP; -.br - Cardinal \fIcount\fP; -.FN -.IP \fIwidget\fP 1i -Specifies the widget on whose window the \s-1WM_COLORMAP_WINDOWS\s+1 -property is stored. \*(cI -.IP \fIlist\fP 1i -Specifies a list of widgets whose windows are potentially to be -listed in the \s-1WM_COLORMAP_WINDOWS\s+1 property. -.IP \fIcount\fP 1i -Specifies the number of widgets in \fIlist\fP. -.LP -.eM -.PN XtSetWMColormapWindows -returns immediately if \fIwidget\fP is not realized or if \fIcount\fP is 0. -Otherwise, -.PN XtSetWMColormapWindows -constructs an ordered list of windows -by examining each widget in \fIlist\fP in turn and -ignoring the widget if it is not realized, or -adding the widget's window to the window list if the widget is realized -and if its colormap resource is different from the colormap -resources of all widgets whose windows are already on the window list. -.LP -Finally, -.PN XtSetWMColormapWindows -stores the resulting window list in the \s-1WM_COLORMAP_WINDOWS\s+1 -property on the specified widget's window. -Refer to Section 4.1.8 in the \fI\*(xC\fP for details of -the semantics of the \s-1WM_COLORMAP_WINDOWS\s+1 property. - -.NH 2 -Finding File Names -.XS -\fB\*(SN Finding File Names\fP -.XE -.LP -The \*(xI provide procedures to look for a file by name, allowing -string substitutions in a list of file specifications. Two -routines are provided for this: -.PN XtFindFile -and -.PN XtResolvePathname . -.PN XtFindFile -uses an arbitrary set of client-specified substitutions, and -.PN XtResolvePathname -uses a set of standard substitutions corresponding -to the \fIX/Open Portability Guide\fP language localization conventions. -Most applications should use -.PN XtResolvePathname . -.LP -A string substitution is defined by a list of -.PN Substitution -.IN "Substitution" "" "@DEF@" -entries. -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - char match; - String substitution; -} SubstitutionRec, *Substitution; -.De -.eM -.LP -File name evaluation is handled in an operating-system-dependent -fashion by an -.PN XtFilePredicate -.IN "XtFilePredicate" "" "@DEF@" -procedure. -.LP -.sM -.FD 0 -typedef Boolean (*XtFilePredicate)(String); -.br - String \fIfilename\fP; -.FN -.IP \fIfilename\fP 1i -Specifies a potential filename. -.LP -.eM -A file predicate procedure is called with a string that is -potentially a file name. It should return -.PN True -if this string specifies a file that is appropriate for the intended use and -.PN False -otherwise. -.sp -.LP -To search for a file using substitutions in a path list, use -.PN XtFindFile . -.LP -.IN "XtFindFile" "" "@DEF@" -.sM -.FD 0 -String XtFindFile(\fIpath\fP, \fIsubstitutions\fP, \fInum_substitutions\fP, \ -\fIpredicate\fP) -.br - String \fIpath\fP; -.br - Substitution \fIsubstitutions\fP; -.br - Cardinal \fInum_substitutions\fP; -.br - XtFilePredicate \fIpredicate\fP; -.FN -.IP \fIpath\fP 1.2i -Specifies a path of file names, including substitution characters. -.IP \fIsubstitutions\fP 1.2i -Specifies a list of substitutions to make into the path. -.IP \fInum_substitutions\fP 1.2i -Specifies the number of substitutions passed in. -.IP \fIpredicate\fP 1.2i -Specifies a procedure called to judge each potential file name, or NULL. -.LP -.eM -The \fIpath\fP parameter specifies a string that consists of a series of -potential file names delimited by colons. Within each name, the -percent character specifies a string substitution selected by the -following character. The character sequence ``%:'' specifies an -embedded colon that is not a delimiter; the sequence is replaced by a -single colon. The character sequence ``%%'' specifies a percent -character that does not introduce a substitution; the sequence is -replaced by a single percent character. If a percent character is -followed by any other character, -.PN XtFindFile -looks through the -specified \fIsubstitutions\fP for that character in the \fImatch\fP field -and, if found, -replaces the percent and match characters with the string in the -corresponding \fIsubstitution\fP field. A \fIsubstitution\fP field entry of NULL -is equivalent to a pointer to an empty string. If the operating -system does not interpret multiple embedded name separators in the -path (i.e., ``/'' in POSIX) the same way as a single separator, -.PN XtFindFile -will collapse multiple separators into a single one after performing -all string substitutions. Except for collapsing embedded separators, -the contents of the string substitutions are not interpreted by -.PN XtFindFile -and may therefore contain any operating-system-dependent -characters, including additional name separators. Each resulting -string is passed to the predicate procedure until a string is found for -which the procedure returns -.PN True ; -this string is the return value for -.PN XtFindFile . -If no string yields a -.PN True -return from the predicate, -.PN XtFindFile -returns NULL. -.LP -If the \fIpredicate\fP parameter is NULL, an internal procedure that checks -if the file exists, is readable, and is not a directory is used. -.LP -It is the responsibility of the caller to free the returned string using -.PN XtFree -when it is no longer needed. -.sp -.LP -To search for a file using standard substitutions in a path list, use -.PN XtResolvePathname . -.LP -.IN "XtResolvePathname" "" "@DEF@" -.sM -.FD 0 -String XtResolvePathname(\fIdisplay\fP, \fItype\fP, \fIfilename\fP, \fIsuffix\fP, \ -\fIpath\fP, \fIsubstitutions\fP, \fInum_substitutions\fP, \fIpredicate\fP) -.br - Display *\fIdisplay\fP; -.br - String \fItype\fP, \fIfilename\fP, \fIsuffix\fP, \fIpath\fP; -.br - Substitution \fIsubstitutions\fP; -.br - Cardinal \fInum_substitutions\fP; -.br - XtFilePredicate \fIpredicate\fP; -.FN -.IP \fIdisplay\fP 1.2i -Specifies the display to use to find the language for language substitutions. -.IP \fItype\fP -.br -.ns -.IP \fIfilename\fP -.br -.ns -.IP \fIsuffix\fP 1.2i -Specify values to substitute into the path. -.IP \fIpath\fP 1.2i -Specifies the list of file specifications, or NULL. -.IP \fIsubstitutions\fP 1.2i -Specifies a list of additional substitutions to make into the path, or NULL. -.IP \fInum_substitutions\fP 1.2i -Specifies the number of entries in \fIsubstitutions\fP. -.IP \fIpredicate\fP 1.2i -Specifies a procedure called to judge each potential file name, or NULL. -.LP -.eM -The substitutions specified by -.PN XtResolvePathname -are determined from the value of the language string retrieved by -.PN XtDisplayInitialize -for the specified display. -To set the -language for all applications specify ``*xnlLanguage: \fIlang\fP'' in the -resource database. -.IN "xnlLanguage" -The format and content of the language string are -implementation-defined. One suggested syntax is to compose -the language string of three parts; a ``language part'', a -``territory part'' and a ``codeset part''. The manner in which -this composition is accomplished is implementation-defined, -and the \*(xI make no interpretation of the parts other -than to use them in substitutions as described below. -.LP -.PN XtResolvePathname -calls -.PN XtFindFile -with the following substitutions -in addition to any passed by the caller and returns the value returned by -.PN XtFindFile : -.IP %N 5 -The value of the \fIfilename\fP parameter, or the application's -class name if \fIfilename\fP is NULL. -.IP %T 5 -The value of the \fItype\fP parameter. -.IP %S 5 -The value of the \fIsuffix\fP parameter. -.IP %L 5 -The language string associated with the specified display. -.IP %l 5 -The language part of the display's language string. -.IP %t 5 -The territory part of the display's language string. -.IP %c 5 -The codeset part of the display's language string. -.IP %C 5 -The customization string retrieved from the resource -database associated with \fIdisplay\fP. -.IP %D 5 -The value of the implementation-specific default path. -.LP -If a path is passed to -.PN XtResolvePathname , -it is passed along to -.PN XtFindFile . -If the \fIpath\fP argument is NULL, the value of the -.PN \s-1XFILESEARCHPATH\s+1 -.IN "XFILESEARCHPATH" "" "@DEF@" -environment variable is passed to -.PN XtFindFile . -If -.PN \s-1XFILESEARCHPATH\s+1 -is not defined, an implementation-specific default path is used -that contains at least six entries. These entries -must contain the following substitutions: - -.nf -.ta .3i 2i 2.5i -1. %C, %N, %S, %T, %L or %C, %N, %S, %T, %l, %t, %c -2. %C, %N, %S, %T, %l -3. %C, %N, %S, %T -4. %N, %S, %T, %L or %N, %S, %T, %l, %t, %c -5. %N, %S, %T, %l -6. %N, %S, %T -.fi - -The order of these six entries within the path must be as given above. -The order and use of substitutions within a given entry -are implementation-dependent. -If the path begins -with a colon, it is preceded by %N%S. If the path includes two -adjacent colons, \fB%N%S\fP is inserted between them. -.LP -The \fItype\fP parameter is intended to be a category of files, usually -being translated into a directory in the pathname. Possible values -might include ``app-defaults'', ``help'', and ``bitmap''. -.LP -The \fIsuffix\fP parameter is intended to be appended to the file name. -Possible values might include ``.txt'', ``.dat'', and ``.bm''. -.LP -A suggested value for the default path on POSIX-based systems is -.IP -/usr/lib/X11/%L/%T/%N%C%S:/usr/lib/X11/%l/%T/%N%C%S:\\ -.br -/usr/lib/X11/%T/%N%C%S:/usr/lib/X11/%L/%T/%N%S:\\ -.br -/usr/lib/X11/%l/%T/%N%S:/usr/lib/X11/%T/%N%S - -.LP -Using this example, if the user has specified a language, it is -used as a subdirectory of /usr/lib/X11 that is searched for other -files. If the desired file is not found there, the lookup is -tried again using just the language part of the specification. If the -file is not there, it is looked for in /usr/lib/X11. The \fItype\fP -parameter is used as a subdirectory of the language directory or of -/usr/lib/X11, and \fIsuffix\fP is appended to the file name. -.LP -The %D substitution allows the addition of path -elements to the implementation-specific default path, typically to -allow additional directories to be searched without preventing -resources in the system directories from being found. For example, a -user installing resource files under a directory called ``ourdir'' -might set -.PN \s-1XFILESEARCHPATH\s+1 -to -.IP -%D:ourdir/%T/%N%C:ourdir/%T/%N -.LP -The customization string is obtained by querying the resource database -currently associated with the display (the database returned by -.PN XrmGetDatabase ) -for the resource \fIapplication_name\fP.customization, class -\fIapplication_class\fP.Customization, where \fIapplication_name\fP -and \fIapplication_class\fP are the values returned by -.PN XtGetApplicationNameAndClass . -If no value is specified in the database, the empty string is used. -.LP -It is the responsibility of the caller to free the returned string using -.PN XtFree -when it is no longer needed. - -.NH 2 -Hooks for External Agents -.XS -\fB\*(SN Hooks for External Agents\fP -.XE -.LP -Applications may register -functions that are called at a particular control points in the \*(xI. -These functions are intended to be used to provide notification -of an \*Q\*(tk event\*U, such as widget creation, to an external agent, -such as an interactive resource editor, drag-and-drop server, or -an aid for physically challenged users. -The control points containing such registration hooks are identified -in a \*Qhook registration\*U object. -.LP -To retrieve the hook registration widget, use -.PN XtHooksOfDisplay . -.LP -.IN "XtHooksOfDisplay" "" "@DEF@" -.sM -.FD 0 -Widget XtHooksOfDisplay(\fIdisplay\fP) -.br - Display *\fIdisplay\fP; -.FN -.IP \fIdisplay\fP 1i -Specifies the desired display. -.LP -.eM -The class of this object is a private, implementation-dependent -subclass of -.PN Object . -The hook object has no parent. The resources of this object are -the callback lists for hooks and the read-only resources for getting -a list of parentless shells. All of the callback lists are initially -empty. When a display is closed, the hook object associated with it -is destroyed. -.LP -The following procedures can be called with the hook registration object -as an argument: -.sp -.IP -.PN XtAddCallback , -.PN XtAddCallbacks , -.PN XtRemoveCallback , -.PN XtRemoveCallbacks , -.PN XtRemoveAllCallbacks , -.PN XtCallCallbacks , -.PN XtHasCallbacks , -.PN XtCallCallbackList -.IP -.PN XtClass , -.PN XtSuperclass , -.PN XtIsSubclass , -.PN XtCheckSubclass , -.PN XtIsObject , -.PN XtIsRectObj , -.PN XtIsWidget , -.PN XtIsComposite , -.PN XtIsConstraint , -.PN XtIsShell , -.PN XtIsOverrideShell , -.PN XtIsWMShell , -.PN XtIsVendorShell , -.PN XtIsTransientShell , -.PN XtIsToplevelShell , -.PN XtIsApplicationShell , -.PN XtIsSessionShell -.IP -.PN XtWidgetToApplicationContext -.IP -.PN XtName , -.PN XtParent , -.PN XtDisplayOfObject , -.PN XtScreenOfObject -.IP -.PN XtSetValues , -.PN XtGetValues , -.PN XtVaSetValues , -.PN XtVaGetValues -.sp -.LP - -.NH 3 -Hook Object Resources -.XS -\fB\*(SN Hook Object Resources\fP -.XE -.LP -The resource names, classes, and representation types that are specified -in the hook object resource list are: -.KS -.TS -lw(1.5i) lw(1.5i) lw(2.5i) . -_ -.sp 6p -Name Class Representation -.sp 6p -_ -.sp 6p -XtNcreateHook XtCCallback XtRCallback -XtNchangeHook XtCCallback XtRCallback -XtNconfigureHook XtCCallback XtRCallback -XtNgeometryHook XtCCallback XtRCallback -XtNdestroyHook XtCCallback XtRCallback -XtNshells XtCReadOnly XtRWidgetList -XtNnumShells XtCReadOnly XtRCardinal -.sp 6p -_ -.TE -.KE -.LP -Descriptions of each of these resources: -.LP -The XtNcreateHook callback list is called from: -.PN XtCreateWidget , -.PN XtCreateManagedWidget , -.PN XtCreatePopupShell , -.PN XtAppCreateShell , -and their corresponding varargs versions. -.LP -The \fIcall_data\fP parameter in a createHook callback may be -cast to type -.PN XtCreateHookData . -.LP -.IN "XtCreateHookData" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - String type; - Widget widget; - ArgList args; - Cardinal num_args; -} XtCreateHookDataRec, *XtCreateHookData; -.De -.eM -.LP -The \fItype\fP is set to -.PN XtHcreate , -\fIwidget\fP is the newly created widget, and \fIargs\fP and \fInum_args\fP -are the arguments passed to the create function. The callbacks are -called before returning from the create function. -.LP -The XtNchangeHook callback list is called from: -.IP -.PN XtSetValues , -.PN XtVaSetValues -.IP -.PN XtManageChild , -.PN XtManageChildren , -.PN XtUnmanageChild , -.PN XtUnmanageChildren -.IP -.PN XtRealizeWidget , -.PN XtUnrealizeWidget -.IP -.PN XtAddCallback , -.PN XtRemoveCallback , -.PN XtAddCallbacks, -.PN XtRemoveCallbacks , -.PN XtRemoveAllCallbacks -.IP -.PN XtAugmentTranslations , -.PN XtOverrideTranslations , -.PN XtUninstallTranslations -.IP -.PN XtSetKeyboardFocus , -.PN XtSetWMColormapWindows -.IP -.PN XtSetMappedWhenManaged , -.PN XtMapWidget , -.PN XtUnmapWidget -.IP -.PN XtPopup , -.PN XtPopupSpringLoaded , -.PN XtPopdown -.LP -.sp -.LP -The \fIcall_data\fP parameter in a changeHook callback may -be cast to type -.PN XtChangeHookData . -.IN "XtChangeHookData" "" "@DFEF@" -.LP -.KS -.sM -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { - String type; - Widget widget; - XtPointer event_data; - Cardinal num_event_data; -} XtChangeHookDataRec, *XtChangeHookData; -.De -.eM -.KE -.LP -When the changeHook callbacks are called as a result of a call to -.PN XtSetValues -or -.PN XtVaSetValues , -\fItype\fP is set to -.PN XtHsetValues , -\fIwidget\fP is the new widget passed to the set_values procedure, and -\fIevent_data\fP may be cast to type -.PN XtChangeHookSetValuesData . -.IN "XtChangeHookSetValuesData" "" "@DEF@" -.LP -.KS -.sM -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { - Widget old, req; - ArgList args; - Cardinal num_args; -} XtChangeHookSetValuesDataRec, *XtChangeHookSetValuesData; -.De -.eM -.KE -.LP -The \fIold\fP, \fIreq\fP, \fIargs\fP, and \fInum_args\fP are the -parameters passed to the set_values procedure. The callbacks are called -after the set_values and constraint set_values procedures have been called. -.LP -When the changeHook callbacks are called as a result of a call to -.PN XtManageChild -or -.PN XtManageChildren , -\fItype\fP is set to -.PN XtHmanageChildren , -\fIwidget\fP is the parent, \fIevent_data\fP may be cast to type -WidgetList and is the list of children being managed, and -\fInum_event_data\fP is the length of the widget list. -The callbacks are called after the children have been managed. -.LP -When the changeHook callbacks are called as a result of a call to -.PN XtUnmanageChild -or -.PN XtUnmanageChildren , -\fItype\fP is set to -.PN XtHunmanageChildren , -\fIwidget\fP is the parent, \fIevent_data\fP may be cast to type -WidgetList and is a list of the children being unmanaged, and -\fInum_event_data\fP is the length of the widget list. -The callbacks are called after the children have been unmanaged. -.LP -The changeHook callbacks are called twice as a result of a call to -.PN XtChangeManagedSet , -once after unmanaging and again after managing. -When the callbacks are called the first time, \fItype\fP is set to -.PN XtHunmanageSet , -\fIwidget\fP is the parent, \fIevent_data\fP may be cast to type -WidgetList and is a list of the children being unmanaged, and -\fInum_event_data\fP is the length of the widget list. -When the callbacks are called the second time, the \fItype\fP is set to -.PN XtHmanageSet , -\fIwidget\fP is the parent, \fIevent_data\fP may be cast to type -WidgetList and is a list of the children being managed, and -\fInum_event_data\fP is the length of the widget list. -.LP -When the changeHook callbacks are called as a result of a call to -.PN XtRealizeWidget , -the \fItype\fP is set to -.PN XtHrealizeWidget -and \fIwidget\fP is the widget being realized. -The callbacks are called after the widget has been realized. -.LP -When the changeHook callbacks are called as a result of a call to -.PN XtUnrealizeWidget , -the \fItype\fP is set to -.PN XtHunrealizeWidget , -and \fIwidget\fP is the widget being unrealized. -The callbacks are called after the widget has been unrealized. -.LP -When the changeHook callbacks are called as a result of a call to -.PN XtAddCallback , -\fItype\fP is set to -.PN XtHaddCallback , -\fIwidget\fP is the widget to which the callback is being added, and -\fIevent_data\fP may be cast to type String and is the name of the -callback being added. -The callbacks are called after the callback has been added to the widget. -.LP -When the changeHook callbacks are called as a result of a call to -.PN XtAddCallbacks , -the \fItype\fP is set to -.PN XtHaddCallbacks , -\fIwidget\fP is the widget to which the callbacks are being added, and -\fIevent_data\fP may be cast to type String and is the name of the -callbacks being added. -The callbacks are called after the callbacks have been added to the widget. -.LP -When the changeHook callbacks are called as a result of a call to -.PN XtRemoveCallback , -the \fItype\fP is set to -.PN XtHremoveCallback , -\fIwidget\fP is the widget from which the callback is being removed, and -\fIevent_data\fP may be cast to type String and is the name of -the callback being removed. The callbacks are called after the callback -has been removed from the widget. -.LP -When the changeHook callbacks are called as a result of a call to -.PN XtRemoveCallbacks , -the \fItype\fP is set to -.PN XtHremoveCallbacks , -\fIwidget\fP is the widget from which the callbacks are being removed, and -\fIevent_data\fP may be cast to type String and is the name of the -callbacks being removed. The callbacks are called after the callbacks -have been removed from the widget. -.LP -When the changeHook callbacks are called as a result of a call to -.PN XtRemoveAllCallbacks , -the \fItype\fP is set to -.PN XtHremoveAllCallbacks -and \fIwidget\fP is the widget from which the callbacks are being removed. -The callbacks are called after the callbacks have been removed from the -widget. -.LP -When the changeHook callbacks are called as a result of a call to -.PN XtAugmentTranslations , -the \fItype\fP is set to -.PN XtHaugmentTranslations -and \fIwidget\fP is the widget whose translations are being modified. -The callbacks are called after the widget's translations have been -modified. -.LP -When the changeHook callbacks are called as a result of a call to -.PN XtOverrideTranslations , -the \fItype\fP is set to -.PN XtHoverrideTranslations -and \fIwidget\fP is the widget whose translations are being modified. -The callbacks are called after the widget's translations have been -modified. -.LP -When the changeHook callbacks are called as a result of a call to -.PN XtUninstallTranslations , -The \fItype\fP is -.PN XtHuninstallTranslations -and \fIwidget\fP is the widget whose translations are being uninstalled. -The callbacks are called after the widget's translations have been -uninstalled. -.LP -When the changeHook callbacks are called as a result of a call to -.PN XtSetKeyboardFocus , -the \fItype\fP is set to -.PN XtHsetKeyboardFocus -and \fIevent_data\fP may be cast to type Widget and is the value of -the descendant argument passed to \fBXtSetKeyboardFocus\fP. The -callbacks are called before returning from \fBXtSetKeyboardFocus\fP. -.LP -When the changeHook callbacks are called as a result of a call to -.PN XtSetWMColormapWindows , -\fItype\fP is set to -.PN XtHsetWMColormapWindows , -\fIevent_data\fP may be cast to type WidgetList and is the value of -the list argument passed to \fBXtSetWMColormapWindows\fP, and -\fInum_event_data\fP is the length of the list. The callbacks are -called before returning from \fBXtSetWMColormapWindows\fP. -.LP -When the changeHook callbacks are called as a result of a call to -.PN XtSetMappedWhenManaged , -the \fItype\fP is set to -.PN XtHsetMappedWhenManaged -and \fIevent_data\fP may be cast to type Boolean and is the value of -the mapped_when_managed argument passed to \fBXtSetMappedWhenManaged\fP. -The callbacks are called after setting the widget's mapped_when_managed -field and before realizing or unrealizing the widget. -.LP -When the changeHook callbacks are called as a result of a call to -.PN XtMapWidget , -the \fItype \fP is set to -.PN XtHmapWidget -and \fIwidget\fP is the widget being mapped. -The callbacks are called after mapping the widget. -.LP -When the changeHook callbacks are called as a result of a call to -.PN XtUnmapWidget , -the \fItype \fP is set to -.PN XtHunmapWidget -and \fIwidget\fP is the widget being unmapped. -The callbacks are called after unmapping the widget. -.LP -When the changeHook callbacks are called as a result of a call to -.PN XtPopup , -the \fItype\fP is set to -.PN XtHpopup , -\fIwidget\fP is the widget being popped up, and \fIevent_data\fP may -be cast to type XtGrabKind and is the value of the grab_kind argument -passed to \fBXtPopup\fP. -The callbacks are called before returning from \fBXtPopup\fP. -.LP -When the changeHook callbacks are called as a result of a call to -.PN XtPopupSpringLoaded , -the \fItype\fP is set to -.PN XtHpopupSpringLoaded -and \fIwidget\fP is the widget being popped up. -The callbacks are called -before returning from \fBXtPopupSpringLoaded\fP. -.LP -When the changeHook callbacks are called as a result of a call to -.PN XtPopdown , -the \fItype\fP is set to -.PN XtHpopdown -and \fIwidget\fP is the widget being popped down. -The callbacks are called -before returning from \fBXtPopdown\fP. -.LP -A widget set that exports interfaces that change application state -without employing the \*(xI library should invoke the change hook -itself. This is done by: -.sp -.Ds -.TA .5i 2i -.ta .5i 2i - XtCallCallbacks(XtHooksOfDisplay(dpy), XtNchangeHook, call_data); -.De -.sp -.LP -The XtNconfigureHook callback list is called any time the \*(xI -move, resize, or configure a widget and when -.PN XtResizeWindow -is called. -.LP -The \fIcall_data\fP parameter may be cast to type -.PN XtConfigureHookData. -.LP -.IN "XtConfigureHookData" "" "@DEF@" -.KS -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - String type; - Widget widget; - XtGeometryMask changeMask; - XWindowChanges changes; -} XtConfigureHookDataRec, *XtConfigureHookData; -.De -.eM -.KE -.sp -.LP -When the configureHook callbacks are called, the \fItype\fP is -.PN XtHconfigure , -\fIwidget\fP is the widget being configured, and \fIchangeMask\fP and -\fIchanges\fP reflect the changes made to the widget. The callbacks -are called after changes have been made to the widget. -.LP -The XtNgeometryHook callback list is called from -.PN XtMakeGeometryRequest -and -.PN XtMakeResizeRequest -once before and once after geometry negotiation occurs. -.LP -The \fIcall_data\fP parameter may be cast to type -.PN XtGeometryHookData . -.LP -.IN "XtGeometryHookData" "" "@DFEF@" -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - String type; - Widget widget; - XtWidgetGeometry* request; - XtWidgetGeometry* reply; - XtGeometryResult result; -} XtGeometryHookDataRec, *XtGeometryHookData; -.De -.eM -.sp -.LP -When the geometryHook callbacks are called prior to geometry negotiation, -the \fItype\fP is -.PN XtHpreGeometry , -\fIwidget\fP is the widget for which the request is being made, and -\fIrequest\fP is the requested geometry. -When the geometryHook callbacks -are called after geometry negotiation, the \fItype\fP is -.PN XtHpostGeometry , -\fIwidget\fP is the widget for which the request was made, \fIrequest\fP -is the requested geometry, \fIreply\fP is the resulting geometry granted, -and \fIresult\fP is the value returned from the geometry negotiation. -.LP -The XtNdestroyHook callback list is called when a widget is destroyed. -The \fIcall_data parameter\fP may be cast to type -.PN XtDestroyHookData . -.LP -.IN "XtDestroyHookData" "" "@DFEF@" -.sp -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - String type; - Widget widget; -} XtDestroyHookDataRec, *XtDestroyHookData; -.De -.eM -.sp -.LP -When the destroyHook callbacks are called as a result of a call to -.PN XtDestroyWidget , -the \fItype\fP is -.PN XtHdestroy -and \fIwidget\fP is the widget being destroyed. The callbacks are -called upon completion of phase one destroy for a widget. -.LP -The XtNshells and XtnumShells are read-only resources that report a -list of all parentless shell widgets associated with a display. -.LP -Clients who use these hooks must exercise caution in calling \*(xI -functions in order to avoid recursion. - -.NH 3 -Querying Open Displays -.XS -\fB\*(SN Querying Open Displays\fP -.XE -.LP -To retrieve a list of the Displays associated with an application context, -use -.PN XtGetDisplays . -.LP -.IN "XtGetDisplays" "" "@DEF@" -.sM -.FD 0 -void XtGetDisplays(\fIapp_context\fP, \fIdpy_return\fP, \fInum_dpy_return\fP) -.br - XtAppContext \fIapp_context\fP; -.br - Display ***\fIdpy_return\fP; -.br - Cardinal *\fInum_dpy_return\fP; -.FN -.IP \fIapp_context\fP 1.5i -Specifies the application context. -.IP \fIdpy_return\fP 1.5i -Returns a list of open Display connections in the specified application -context. -.IP \fInum_dpy_return\fP 1.5i -Returns the count of open Display connections in \fIdpy_return\fP. -.LP -.eM -\fBXtGetDisplays\fP may be used by an external agent to query the -list of open displays that belong to an application context. To free -the list of displays, use -.PN XtFree . -.bp diff --git a/doc/xorg-docs/specs/Xt/CH12 b/doc/xorg-docs/specs/Xt/CH12 deleted file mode 100644 index 34e8ec77e..000000000 --- a/doc/xorg-docs/specs/Xt/CH12 +++ /dev/null @@ -1,1067 +0,0 @@ -.\" $Xorg: CH12,v 1.3 2000/08/17 19:42:47 cpqbld Exp $ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" Digital Equipment Corporation, Maynard, Massachusetts. -.\" -.\" Permission to use, copy, modify and distribute this documentation for any -.\" purpose and without fee is hereby granted, provided that the above copyright -.\" notice appears in all copies and that both that copyright notice and this -.\" permission notice appear in supporting documentation, and that the name of -.\" Digital not be used in in advertising or publicity pertaining -.\" to distribution of the software without specific, written prior permission. -.\" Digital makes no representations about the suitability of the -.\" software described herein for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBChapter 12\fP\s-1 - -\s+1\fBNonwidget Objects\fP\s-1 -.sp 2 -.nr H1 12 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.LP -.XS -Chapter 12 \(em Nonwidget Objects -.XE -.LP -Although widget writers are free to treat -Core -as the base class of -the widget hierarchy, there are actually three classes above it. -These classes are -Object, -RectObj -(Rectangle Object), and (\fIunnamed\fP), -and members of these classes -are referred to generically as \fIobjects\fP. By convention, the term -\fIwidget\fP refers only to objects that are a subclass of -Core, -and the term \fInonwidget\fP refers to objects that are not a subclass of -Core. -In the preceding portion of this specification, the interface -descriptions indicate explicitly whether the generic \fIwidget\fP argument -is restricted to particular subclasses of Object. Sections 12.2.5, -12.3.5, and 12.5 summarize the permissible classes of the arguments to, and -return values from, each of the \*(xI routines. - -.NH 2 -Data Structures -.XS -\*(SN Data Structures -.XE -.LP -In order not to conflict with previous widget code, the data -structures used by nonwidget objects do not follow all the same -conventions as those for widgets. In particular, the class records -are not composed of parts but instead are complete data structures -with filler for the widget fields they do not use. This -allows the static class initializers for existing widgets to remain -unchanged. - -.NH 2 -Object Objects -.XS -\fB\*(SN Object Objects\fP -.XE -.LP -.IN "Object" "" "@DEF@" -The -Object -object contains the definitions of fields common to all -objects. It encapsulates the mechanisms for resource management. -All objects and widgets are members of subclasses of -Object, -which is defined by the -.PN ObjectClassPart -and -.PN ObjectPart -structures. - -.NH 3 -ObjectClassPart Structure -.XS -\*(SN ObjectClassPart Structure -.XE -.LP -The common fields for all object classes are defined in the -.PN ObjectClassPart -structure. All fields have the same purpose, -function, and restrictions as the corresponding fields in -.PN CoreClassPart ; -fields whose -names are obj\fI\s+1n\s-1\fP for some integer \s+1\fIn\fP\s-1 are not -used for Object, -but exist to pad the data structure so that it matches Core's class -record. The class record initialization must fill all -obj\fI\s+1n\s-1\fP fields with NULL or zero as appropriate to the type. -.LP -.IN "ObjectClassPart" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct _ObjectClassPart { - WidgetClass superclass; - String class_name; - Cardinal widget_size; - XtProc class_initialize; - XtWidgetClassProc class_part_initialize; - XtEnum class_inited; - XtInitProc initialize; - XtArgsProc initialize_hook; - XtProc obj1; - XtPointer obj2; - Cardinal obj3; - XtResourceList resources; - Cardinal num_resources; - XrmClass xrm_class; - Boolean obj4; - XtEnum obj5; - Boolean obj6; - Boolean obj7; - XtWidgetProc destroy; - XtProc obj8; - XtProc obj9; - XtSetValuesFunc set_values; - XtArgsFunc set_values_hook; - XtProc obj10; - XtArgsProc get_values_hook; - XtProc obj11; - XtVersionType version; - XtPointer callback_private; - String obj12; - XtProc obj13; - XtProc obj14; - XtPointer extension; -} ObjectClassPart; -.De -.LP -.eM -The extension record defined for -.PN ObjectClassPart -with a \fIrecord_type\fP equal to -.PN \s-1NULLQUARK\s+1 -is -.PN ObjectClassExtensionRec . -.LP -.IN "ObjectClassExtensionRec" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct { - XtPointer next_extension; See Section 1.6.12 - XrmQuark record_type; See Section 1.6.12 - long version; See Section 1.6.12 - Cardinal record_size; See Section 1.6.12 - XtAllocateProc allocate; See Section 2.5.5. - XtDeallocateProc deallocate; See Section 2.8.4. -} ObjectClassExtensionRec, *ObjectClassExtension; -.De -.LP -.eM -The prototypical -.PN ObjectClass -consists of just the -.PN ObjectClassPart . -.LP -.IN "ObjectClassRec" "" "@DEF@" -.IN "ObjectClass" "" "@DEF@" -.IN "objectClass" "" "@DEF@" -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct _ObjectClassRec { - ObjectClassPart object_class; -} ObjectClassRec, *ObjectClass; -.De -.LP -.eM -The predefined class record and pointer for -.PN ObjectClassRec -are -.LP -In -.PN IntrinsicP.h : -.sM -.Ds 0 -extern ObjectClassRec objectClassRec; -.De -.LP -.eM -In -.PN Intrinsic.h : -.sM -.Ds 0 -extern WidgetClass objectClass; -.De -.LP -.eM -The opaque types -.PN Object -and -.PN ObjectClass -and the opaque variable -.PN objectClass -are defined for generic actions on objects. -The symbolic constant for the -.PN ObjectClassExtension -version identifier is -.PN XtObjectExtensionVersion -(see Section 1.6.12). -.PN Intrinsic.h -uses an incomplete structure definition to ensure that the -compiler catches attempts to access private data: -.LP -.sM -.Ds 0 -typedef struct _ObjectClassRec* ObjectClass; -.De -.LP -.eM - -.NH 3 -ObjectPart Structure -.XS -\*(SN ObjectPart Structure -.XE -.LP -The common fields for all object instances are defined in the -.PN ObjectPart -structure. All fields have the same meaning as the -corresponding fields in -.PN CorePart . -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -.IN "ObjectPart" "" "@DEF@" -typedef struct _ObjectPart { - Widget self; - WidgetClass widget_class; - Widget parent; - Boolean being_destroyed; - XtCallbackList destroy_callbacks; - XtPointer constraints; -} ObjectPart; -.De -.LP -.eM -All object instances have the -Object -fields as their first component. The prototypical type -.PN Object -is defined with only this set of fields. -Various routines can cast object pointers, as needed, to specific -object types. -.LP -In -.PN IntrinsicP.h : -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -typedef struct _ObjectRec { - ObjectPart object; -} ObjectRec, *Object; -.De -.LP -.eM -.IN "ObjectRec" "" "@DEF@" -In -.PN Intrinsic.h : -.LP -.sM -.Ds 0 -typedef struct _ObjectRec *Object; -.De -.LP -.eM - -.NH 3 -Object Resources -.XS -\fB\*(SN Object Resources\fP -.XE -.LP -The resource names, classes, and representation types specified in the -.PN objectClassRec -resource list are: -.LP -.TS -lw(1.5i) lw(1.5i) lw(2.5i) . -_ -.sp 6p -Name Class Representation -.sp 6p -_ -.sp 6p -XtNdestroyCallback XtCCallback XtRCallback -.sp 6p -_ -.TE - -.NH 3 -ObjectPart Default Values -.XS -\fB\*(SN ObjectPart Default Values\fP -.XE -.LP -All fields in -.PN ObjectPart -have the same default values as the corresponding fields in -.PN CorePart . - -.NH 3 -Object Arguments to \*(xI Routines -.XS -\*(SN Object Arguments to \*(xI Routines -.XE -.LP -The WidgetClass arguments to the following procedures may be -.PN objectClass -or any subclass: -.sp -.IP -.PN XtInitializeWidgetClass , -.PN XtCreateWidget , -.PN XtVaCreateWidget -.IP -.PN XtIsSubclass , -.PN XtCheckSubclass -.IP -.PN XtGetResourceList , -.PN XtGetConstraintResourceList -.sp -.LP -The Widget arguments to the following procedures may be of class -Object -or any subclass: -.sp -.IP -.PN XtCreateWidget , -.PN XtVaCreateWidget -.IP -.PN XtAddCallback , -.PN XtAddCallbacks , -.PN XtRemoveCallback , -.PN XtRemoveCallbacks , -.PN XtRemoveAllCallbacks , -.PN XtCallCallbacks , -.PN XtHasCallbacks , -.PN XtCallCallbackList -.IP -.PN XtClass , -.PN XtSuperclass , -.PN XtIsSubclass , -.PN XtCheckSubclass , -.PN XtIsObject , -.PN XtIsRectObj , -.PN XtIsWidget , -.PN XtIsComposite , -.PN XtIsConstraint , -.PN XtIsShell , -.PN XtIsOverrideShell , -.PN XtIsWMShell , -.PN XtIsVendorShell , -.PN XtIsTransientShell , -.PN XtIsToplevelShell , -.PN XtIsApplicationShell , -.PN XtIsSessionShell -.IP -.PN XtIsManaged , -.PN XtIsSensitive -.br -(both will return -.PN False -if argument is not a subclass of -RectObj) -.IP -.PN XtIsRealized -.br -(returns the state of the nearest windowed ancestor -if class of argument is not a subclass of -Core) -.IP -.PN XtWidgetToApplicationContext -.IP -.PN XtDestroyWidget -.IP -.PN XtParent , -.PN XtDisplayOfObject , -.PN XtScreenOfObject , -.PN XtWindowOfObject -.IP -.PN XtSetKeyboardFocus -(descendant) -.IP -.PN XtGetGC , -.PN XtReleaseGC -.IP -.PN XtName -.IP -.PN XtSetValues , -.PN XtGetValues , -.PN XtVaSetValues , -.PN XtVaGetValues -.IP -.PN XtGetSubresources , -.PN XtGetApplicationResources , -.PN XtVaGetSubresources , -.PN XtVaGetApplicationResources -.IP -.PN XtConvert , -.PN XtConvertAndStore -.sp -.LP -The return value of the following procedures will be of class -Object -or a subclass: -.sp -.IP -.PN XtCreateWidget , -.PN XtVaCreateWidget -.IP -.PN XtParent -.IP -.PN XtNameToWidget -.sp -.LP -The return value of the following procedures will be -.PN objectClass -or a subclass: -.sp -.IP -.PN XtClass , -.PN XtSuperclass - -.NH 3 -Use of Objects -.XS -\fB\*(SN Use of Objects\fP -.XE -.LP -The -Object -class exists to enable programmers to use the \*(xI' -classing and resource-handling mechanisms for things smaller -and simpler than widgets. -Objects make obsolete many common uses of subresources as described in -Sections 9.4, 9.7.2.4, and 9.7.2.5. -.LP -Composite -widget classes that wish to accept nonwidget children must -set the \fIaccepts_objects\fP field in the -.PN CompositeClassExtension -structure to -.PN True . -.PN XtCreateWidget -will otherwise generate an error message on an attempt to create a -nonwidget child. -.LP -Of the classes defined by the \*(xI, -ApplicationShell -and -SessionShell -accept nonwidget children, and the class of any nonwidget child -must not be -.PN rectObjClass -or any subclass. The intent of allowing -Object -children of -ApplicationShell -and -SessionShell -is to provide clients a simple mechanism -for establishing the resource-naming root of an object hierarchy. - -.NH 2 -Rectangle Objects -.XS -\fB\*(SN Rectangle Objects\fP -.XE -.LP -The class of rectangle objects is a subclass of -Object -that represents -rectangular areas. It encapsulates the mechanisms for geometry -management and is called RectObj -.IN "RectObj" "" "@DEF@" -to avoid conflict with the Xlib -.PN Rectangle -data type. - -.NH 3 -RectObjClassPart Structure -.XS -\*(SN RectObjClassPart Structure -.XE -.LP -As with the -.PN ObjectClassPart -structure, all fields in the -.PN RectObjClassPart -structure have the same -purpose and function as the corresponding fields in -.PN CoreClassPart ; -fields whose names are rect\fI\s+1n\s-1\fP for some integer -\fI\s+1n\s-1\fP are not used for -RectObj, but exist to pad the data structure so that it matches -Core's -class record. The class record initialization must fill all -rect\fI\s+1n\s-1\fP fields with NULL or zero as appropriate to the type. -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -.IN "RectObjClassPart" "" "@DEF@" -typedef struct _RectObjClassPart { - WidgetClass superclass; - String class_name; - Cardinal widget_size; - XtProc class_initialize; - XtWidgetClassProc class_part_initialize; - XtEnum class_inited; - XtInitProc initialize; - XtArgsProc initialize_hook; - XtProc rect1; - XtPointer rect2; - Cardinal rect3; - XtResourceList resources; - Cardinal num_resources; - XrmClass xrm_class; - Boolean rect4; - XtEnum rect5; - Boolean rect6; - Boolean rect7; - XtWidgetProc destroy; - XtWidgetProc resize; - XtExposeProc expose; - XtSetValuesFunc set_values; - XtArgsFunc set_values_hook; - XtAlmostProc set_values_almost; - XtArgsProc get_values_hook; - XtProc rect9; - XtVersionType version; - XtPointer callback_private; - String rect10; - XtGeometryHandler query_geometry; - XtProc rect11; - XtPointer extension ; -} RectObjClassPart; -.De -.LP -.eM -The -RectObj -class record consists of just the -.PN RectObjClassPart . -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -.IN "RectObjClassRec" "" "@DEF@" -.IN "RectObjClass" "" "@DEF@" -typedef struct _RectObjClassRec { - RectObjClassPart rect_class; -} RectObjClassRec, *RectObjClass; -.De -.LP -.eM -The predefined class record and pointer for -.PN RectObjClassRec -are -.LP -In -.PN Intrinsic.h : -.LP -.sM -.Ds 0 -extern RectObjClassRec rectObjClassRec; -.De -.LP -.eM -In -.PN Intrinsic.h : -.LP -.sM -.Ds 0 -extern WidgetClass rectObjClass; -.De -.LP -.eM -The opaque types -.PN RectObj -and -.PN RectObjClass -and the opaque variable -.PN rectObjClass -are defined for generic actions on objects -whose class is RectObj or a subclass of -RectObj. -.PN Intrinsic.h -uses an incomplete structure definition to ensure that the compiler -catches attempts to access private data: -.LP -.sM -.Ds 0 -typedef struct _RectObjClassRec* RectObjClass; -.De -.LP -.eM - -.NH 3 -RectObjPart Structure -.XS -\*(SN RectObjPart Structure -.XE -.LP -In addition to the -.PN ObjectPart -fields, -RectObj -objects have the following fields defined in the -.PN RectObjPart -structure. All fields have the same meaning as the corresponding field in -.PN CorePart . -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -.IN "RectObjPart" "" "@DEF@" -typedef struct _RectObjPart { - Position x, y; - Dimension width, height; - Dimension border_width; - Boolean managed; - Boolean sensitive; - Boolean ancestor_sensitive; -} RectObjPart; -.De -.LP -.eM -RectObj -objects have the RectObj fields immediately following the Object fields. -.LP -.sM -.Ds 0 -.TA .5i 3i -.ta .5i 3i -.IN "RectObjRec" "" "@DEF@" -typedef struct _RectObjRec { - ObjectPart object; - RectObjPart rectangle; -} RectObjRec, *RectObj; -.De -.LP -.eM -In -.PN Intrinsic.h : -.LP -.sM -.Ds 0 -typedef struct _RectObjRec* RectObj; -.De -.LP -.eM - -.NH 3 -RectObj Resources -.XS -\fB\*(SN RectObj Resources\fP -.XE -.LP -The resource names, classes, and representation types that are specified in the -.PN rectObjClassRec -resource list are: -.TS -lw(1.5i) lw(1.5i) lw(2.5i) . -_ -.sp 6p -Name Class Representation -.sp 6p -_ -.sp 6p -XtNancestorSensitive XtCSensitive XtRBoolean -XtNborderWidth XtCBorderWidth XtRDimension -XtNheight XtCHeight XtRDimension -XtNsensitive XtCSensitive XtRBoolean -XtNwidth XtCWidth XtRDimension -XtNx XtCPosition XtRPosition -XtNy XtCPosition XtRPosition -.sp 6p -_ -.TE - -.NH 3 -RectObjPart Default Values -.XS -\fB\*(SN RectObjPart Default Values\fP -.XE -.LP -All fields in -.PN RectObjPart -have the same default values as the corresponding fields in -.PN CorePart . - -.NH 3 -Widget Arguments to \*(xI Routines -.XS -\fB\*(SN Widget Arguments to \*(xI Routines\fP -.XE -.LP -The WidgetClass arguments to the following procedures may be -.PN rectObjClass -or any subclass: -.sp -.IP -.PN XtCreateManagedWidget , -.PN XtVaCreateManagedWidget -.sp -.LP -The Widget arguments to the following procedures may be of class -RectObj -or any subclass: -.sp -.IP -.PN XtConfigureWidget , -.PN XtMoveWidget , -.PN XtResizeWidget -.IP -.PN XtMakeGeometryRequest , -.PN XtMakeResizeRequest -.IP -.PN XtManageChildren , -.PN XtManageChild , -.PN XtUnmanageChildren , -.PN XtUnmanageChild , -.PN XtChangeManagedSet -.IP -.PN XtQueryGeometry -.IP -.PN XtSetSensitive -.IP -.PN XtTranslateCoords -.sp -.LP -The return value of the following procedures will be of class -RectObj -or a subclass: -.sp -.IP -.PN XtCreateManagedWidget , -.PN XtVaCreateManagedWidget - -.NH 3 -Use of Rectangle Objects -.XS -\*(SN Use of Rectangle Objects -.XE -.LP -RectObj -can be subclassed to provide widgetlike objects (sometimes -called gadgets) that do not use windows and do not have those -features that are seldom used in simple widgets. This can save memory -resources both in the server and in applications -but requires additional support code in the parent. -In the following -discussion, \fIrectobj\fP refers only to objects -whose class is RectObj or a subclass of -RectObj, -but not Core or a subclass of -Core. -.LP -Composite -widget classes that wish to accept rectobj children must set -the \fIaccepts_objects\fP field in the -.PN CompositeClassExtension -extension structure to -.PN True . -.PN XtCreateWidget -or -.PN XtCreateManagedWidget -will otherwise generate an error if called to create a nonwidget child. -If the composite widget supports only children of class -RectObj -or a subclass (i.e., not of the general Object class), it -must declare an insert_child procedure and check the subclass of each -new child in that procedure. None of the classes defined by the -\*(xI accept rectobj children. -.LP -If gadgets are defined in an object set, the parent is responsible for -much more than the parent of a widget. The parent must request and handle -input events that occur for the gadget and is responsible for making -sure that when it receives an exposure event the gadget children get -drawn correctly. -Rectobj children may -have expose procedures -specified in their class records, but the parent is free to -ignore them, instead drawing the contents of the child itself. This -can potentially save graphics context switching. The precise contents -of the exposure event and region arguments to the RectObj expose -procedure are not specified by the \*(xI; a particular rectangle object is -free to define the coordinate system origin (self-relative or -parent-relative) and whether or not the rectangle or region is assumed to -have been intersected with the visible region of the object. -.LP -In general, it is expected that a composite widget that accepts -nonwidget children will document those children it is able to handle, -since a gadget cannot be viewed as a completely self-contained entity, -as can a widget. Since a particular composite widget class is usually -designed to handle nonwidget children of only a limited set of classes, it should -check the classes of newly added children in its insert_child -procedure to make sure that it can deal with them. -.LP -The \*(xI will clear areas of a parent window obscured by -rectobj children, causing exposure events, under the following -circumstances: -.IP \(bu 5 -A rectobj child is managed or unmanaged. -.IP \(bu 5 -In a call to -.PN XtSetValues -on a rectobj child, one or more of the set_values procedures returns -.PN True . -.IP \(bu 5 -In a call to -.PN XtConfigureWidget -on a rectobj child, areas will -be cleared corresponding to both the old and the new child -geometries, including the border, if the geometry changes. -.IP \(bu 5 -In a call to -.PN XtMoveWidget -on a rectobj child, areas will be -cleared corresponding to both the old and the new child -geometries, including the border, if the geometry changes. -.IP \(bu 5 -In a call to -.PN XtResizeWidget -on a rectobj child, a single -rectangle will be cleared corresponding to the larger of the -old and the new child geometries if they are different. -.IP \(bu 5 -In a call to -.PN XtMakeGeometryRequest -(or -.PN XtMakeResizeRequest ) -on a rectobj child with -.PN XtQueryOnly -not set, if the manager returns -.PN XtGeometryYes , -two rectangles will be cleared corresponding to both the old and -the new child geometries. -.LP -Stacking order is not supported for rectobj children. Composite widgets with -rectobj children are free to define any semantics desired if the child -geometries overlap, including making this an error. -.LP -When a rectobj is playing the role of a widget, developers must be -reminded to avoid making assumptions about the object passed in the -Widget argument to a callback procedure. - -.NH 2 -Undeclared Class -.XS -\*(SN Undeclared Class -.XE -.LP -The \*(xI define an unnamed class between -RectObj -and -Core -for possible future use by the X Consortium. The only assumptions that -may be made about the unnamed class are -.IP \(bu 5 -The \fIcore_class.superclass\fP field of -.PN coreWidgetClassRec -contains a pointer to the unnamed class record. -.IP \(bu 5 -A pointer to the unnamed class record when dereferenced as an -.PN ObjectClass -will contain a pointer to -.PN rectObjClassRec -in its \fIobject_class.superclass\fP field. -.LP -Except for the above, the contents of the class record for this class -and the result of an attempt to subclass or to create a widget of this -unnamed class are undefined. - -.NH 2 -Widget Arguments to \*(xI Routines -.XS -\*(SN Widget Arguments to \*(xI Routines -.XE -.LP -The WidgetClass arguments to the following procedures must be of class -Shell -or a subclass: -.sp -.IP -.PN XtCreatePopupShell , -.PN XtVaCreatePopupShell , -.PN XtAppCreateShell , -.PN XtVaAppCreateShell , -.PN XtOpenApplication , -.PN XtVaOpenApplication -.sp -.LP -The Widget arguments to the following procedures must be of class -Core -or any subclass: -.sp -.IP -.PN XtCreatePopupShell , -.PN XtVaCreatePopupShell -.IP -.PN XtAddEventHandler , -.PN XtAddRawEventHandler , -.PN XtRemoveEventHandler , -.br -.PN XtRemoveRawEventHandler , -.PN XtInsertEventHandler , -.PN XtInsertRawEventHandler -.br -.PN XtInsertEventTypeHandler , -.PN XtRemoveEventTypeHandler , -.IP -.PN XtRegisterDrawable -.PN XtDispatchEventToWidget -.IP -.PN XtAddGrab , -.PN XtRemoveGrab , -.PN XtGrabKey , -.PN XtGrabKeyboard , -.PN XtUngrabKey , -.PN XtUngrabKeyboard , -.PN XtGrabButton , -.PN XtGrabPointer , -.PN XtUngrabButton , -.br -.PN XtUngrabPointer -.IP -.PN XtBuildEventMask -.IP -.PN XtCreateWindow , -.PN XtDisplay , -.PN XtScreen , -.PN XtWindow -.IP -.PN XtNameToWidget -.IP -.PN XtGetSelectionValue , -.PN XtGetSelectionValues , -.PN XtOwnSelection , -.PN XtDisownSelection , -.PN XtOwnSelectionIncremental , -.PN XtGetSelectionValueIncremental , -.PN XtGetSelectionValuesIncremental , -.br -.PN XtGetSelectionRequest -.IP -.PN XtInstallAccelerators , -.PN XtInstallAllAccelerators -(both destination and source) -.IP -.PN XtAugmentTranslations , -.PN XtOverrideTranslations , -.PN XtUninstallTranslations , -.br -.PN XtCallActionProc -.IP -.PN XtMapWidget , -.PN XtUnmapWidget -.IP -.PN XtRealizeWidget , -.PN XtUnrealizeWidget -.IP -.PN XtSetMappedWhenManaged -.IP -.PN XtCallAcceptFocus , -.PN XtSetKeyboardFocus -(subtree) -.IP -.PN XtResizeWindow -.IP -.PN XtSetWMColormapWindows -.sp -.LP -The Widget arguments to the following procedures must be of class -Composite -or any subclass: -.sp -.IP -.PN XtCreateManagedWidget , -.PN XtVaCreateManagedWidget -.sp -.LP -The Widget arguments to the following procedures must be of a subclass of -Shell: -.sp -.IP -.PN XtPopdown , -.PN XtCallbackPopdown , -.PN XtPopup , -.PN XtCallbackNone , -.PN XtCallbackNonexclusive , -.PN XtCallbackExclusive , -.PN XtPopupSpringLoaded -.sp -.LP -The return value of the following procedure will be of class -Core -or a subclass: -.sp -.IP -.PN XtWindowToWidget -.sp -.LP -The return value of the following procedures will be of a subclass of -Shell: -.sp -.IP -.PN XtAppCreateShell , -.PN XtVaAppCreateShell , -.PN XtAppInitialize , -.PN XtVaAppInitialize , -.PN XtCreatePopupShell , -.PN XtVaCreatePopupShell -.bp diff --git a/doc/xorg-docs/specs/Xt/CH13 b/doc/xorg-docs/specs/Xt/CH13 deleted file mode 100644 index 401f3d420..000000000 --- a/doc/xorg-docs/specs/Xt/CH13 +++ /dev/null @@ -1,805 +0,0 @@ -.\" $Xorg: CH13,v 1.3 2000/08/17 19:42:47 cpqbld Exp $ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" Digital Equipment Corporation, Maynard, Massachusetts. -.\" -.\" Permission to use, copy, modify and distribute this documentation for any -.\" purpose and without fee is hereby granted, provided that the above copyright -.\" notice appears in all copies and that both that copyright notice and this -.\" permission notice appear in supporting documentation, and that the name of -.\" Digital not be used in in advertising or publicity pertaining -.\" to distribution of the software without specific, written prior permission. -.\" Digital makes no representations about the suitability of the -.\" software described herein for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBChapter 13\fP\s-1 - -\s+1\fBEvolution of the \*(xI\fP\s-1 -.sp 2 -.nr H1 13 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.LP -.XS -Chapter 13 \(em Evolution of the \*(xI -.XE -.LP -The interfaces described by this specification have undergone several -sets of revisions in the course of adoption as an X Consortium -standard specification. Having now been adopted by the Consortium as -a standard part of the X Window System, it is expected that this and -future revisions will retain -backward compatibility in the sense that fully conforming -implementations of these specifications may be produced that provide -source compatibility with widgets and applications written to -previous Consortium standard revisions. -.LP -The \*(xI do not place any special requirement on widget -programmers to retain source or binary compatibility for their widgets -as they evolve, but several conventions have been established to -assist those developers who want to provide such compatibility. -.LP -In particular, widget programmers may wish to conform to the convention -described in Section 1.6.12 when defining class extension records. - -.NH 2 -Determining Specification Revision Level -.XS -\fB\*(SN Determining Specification Revision Level\fP -.XE -.LP -Widget and application developers who wish to maintain a common source -pool that will build properly with implementations of the \*(xI -at different revision levels of these specifications but that take -advantage of newer features added in later revisions may use the -symbolic macro -.PN XtSpecificationRelease . -.LP -.Ds 0 -#define XtSpecificationRelease 6 -.De -.IN "XtSpecificationRelease" "" "@DEF@" -.LP -As the symbol -.PN XtSpecificationRelease -was new to Release 4, widgets and -applications desiring to build against earlier implementations should -test for the presence of this symbol and assume only Release 3 -interfaces if the definition is not present. - -.NH 2 -Release 3 to Release 4 Compatibility -.XS -\fB\*(SN Release 3 to Release 4 Compatibility\fP -.XE -.LP -At the data structure level, Release 4 retains binary compatibility -with Release 3 (the first X Consortium standard release) for all data -structures except -.PN WMShellPart, -.PN TopLevelShellPart , -and -.PN TransientShellPart . -Release 4 changed the argument type to most procedures that now take -arguments of type -.PN XtPointer -and structure members that are now of type -.PN XtPointer -in order to avoid potential ANSI C conformance problems. It is -expected that most implementations will be binary compatible with the -previous definition. -.LP -Two fields in -.PN CoreClassPart -were changed from -.PN Boolean -to -.PN XtEnum -to allow implementations additional freedom in specifying the -representations of each. This change should require no source -modification. - -.NH 3 -Additional Arguments -.XS -\*(SN Additional Arguments -.XE -.LP -Arguments were added to the procedure definitions for -.PN XtInitProc , -.PN XtSetValuesFunc , -and -.PN XtEventHandler -to provide more information and to -allow event handlers to abort further dispatching of the current event -(caution is advised!). The added arguments to -.PN XtInitProc -and -.PN XtSetValuesFunc -make the initialize_hook and set_values_hook methods -obsolete, but the hooks have been retained for those widgets that used -them in Release 3. - -.NH 3 -set_values_almost Procedures -.XS -\*(SN set_values_almost Procedures -.XE -.LP -The use of the arguments by a set_values_almost procedure was poorly -described in Release 3 and was inconsistent with other conventions. -.LP -The current specification for the manner in which a set_values_almost -procedure returns information to the \*(xI is not compatible with -the Release 3 specification, and all widget implementations should -verify that any set_values_almost procedures conform to the current -interface. -.LP -No known implementation of the \*(xI correctly implemented the -Release 3 interface, so it is expected that the impact of this -specification change is small. - -.NH 3 -Query Geometry -.XS -\*(SN Query Geometry -.XE -.LP -A composite widget layout routine that calls -.PN XtQueryGeometry -is now expected to store the complete new geometry in the intended structure; -previously the specification said ``store the changes it intends to -make''. Only by storing the complete geometry does the child have -any way to know what other parts of the geometry may still be -flexible. Existing widgets should not be affected by this, except -to take advantage of the new information. - -.NH 3 -unrealizeCallback Callback List -.XS -\*(SN unrealizeCallback Callback List -.XE -.LP -In order to provide a mechanism for widgets to be notified when they -become unrealized through a call to -.PN XtUnrealizeWidget , -the callback -list name ``unrealizeCallback'' has been defined by the \*(xI. A -widget class that requires notification on unrealize may declare a -callback list resource by this name. No class is required to declare -this resource, but any class that did so in a prior revision may find -it necessary to modify the resource name if it does not wish to use the new -semantics. - -.NH 3 -Subclasses of WMShell -.XS -\*(SN Subclasses of WMShell -.XE -.LP -The formal adoption of the \fI\*(xC\fP as -an X Consortium standard has meant the addition of four fields to -.PN WMShellPart -and one field to -.PN TopLevelShellPart . -In deference to some -widget libraries that had developed their own additional conventions -to provide binary compatibility, these five new fields were added at -the end of the respective data structures. -.LP -To provide more convenience for TransientShells, a field was added -to the previously empty -.PN TransientShellPart . -On some architectures the size of the part structure will not -have changed as a result of this. -.LP -Any widget implementation whose class is a subclass of -TopLevelShell -or -TransientShell -must at minimum be -recompiled with the new data structure declarations. Because -.PN WMShellPart -no longer contains a contiguous -.PN XSizeHints -data structure, -a subclass that expected to do a single structure assignment of an -.PN XSizeHints -structure to the \fIsize_hints\fP field of -.PN WMShellPart -must be revised, though the old fields remain at the same positions within -.PN WMShellPart . - -.NH 3 -Resource Type Converters -.XS -\*(SN Resource Type Converters -.XE -.LP -A new interface declaration for resource type converters was defined -to provide more information to converters, to support conversion -cache cleanup with resource reference counting, and to allow -additional procedures to be declared to free resources. The old -interfaces remain (in the compatibility section), and a new set of -procedures was defined that work only with the new type converter -interface. -.LP -In the now obsolete old type converter interface, converters are -reminded that they must return the size of the converted value as well -as its address. The example indicated this, but the description of -.PN XtConverter -was incomplete. - -.NH 3 -KeySym Case Conversion Procedure -.XS -\*(SN KeySym Case Conversion Procedure -.XE -.LP -The specification for the -.PN XtCaseProc -function type has been changed -to match the Release 3 implementation, which included necessary -additional information required by the function (a pointer to the -display connection), and corrects the argument type of the source -KeySym parameter. No known implementation of the \*(xI -implemented the previously documented interface. - -.NH 3 -Nonwidget Objects -.XS -\*(SN Nonwidget Objects -.XE -.LP -Formal support for nonwidget objects is new to Release 4. A -prototype implementation was latent in at least one Release 3 -implementation of the \*(xI, but the specification has changed -somewhat. The most significant change is the requirement for a -composite widget to declare the -.PN CompositeClassExtension -record with the \fIaccepts_objects\fP field set to -.PN True -in order to permit a client to create a nonwidget child. -.LP -The addition of this extension field ensures that composite widgets -written under Release 3 will not encounter unexpected errors if an -application attempts to create a nonwidget child. In Release 4 there -is no requirement that all composite widgets implement the extra -functionality required to manage windowless children, so the -\fIaccept_objects\fP field allows a composite widget to declare that it -is not prepared to do so. - -.NH 2 -Release 4 to Release 5 Compatibility -.XS -\fB\*(SN Release 4 to Release 5 Compatibility\fP -.XE -.LP -At the data structure level, Release 5 retains complete binary -compatibility with Release 4. The specification of the -.PN ObjectPart , -.PN RectObjPart , -.PN CorePart , -.PN CompositePart , -.PN ShellPart , -.PN WMShellPart , -.PN TopLevelShellPart , -and -.PN ApplicationShellPart -instance records was made less strict to permit implementations to -add internal fields to these structures. Any implementation that -chooses to do so would, of course, force a recompilation. -The Xlib specification for -.PN XrmValue -and -.PN XrmOptionDescRec -was updated to use a new type, -.PN XPointer , -for the \fIaddr\fP and \fIvalue\fP fields, respectively, to avoid -ANSI C conformance problems. The definition of -.PN XPointer -is binary compatible with the previous implementation. - -.NH 3 -baseTranslations Resource -.XS -\fB\*(SN baseTranslations Resource\fP -.XE - -.LP -A new pseudo-resource, XtNbaseTranslations, was defined to permit -application developers to specify translation tables in application -defaults files while still giving end users the ability to augment -or override individual event sequences. This change will affect -only those applications that wish to take advantage of the new -functionality or those widgets that may have previously defined -a resource named ``baseTranslations''. -.LP -Applications wishing to take advantage of the new functionality -would change their application defaults file, e.g., from -.Ds - app.widget.translations: \fIvalue\fP -.DE -to -.Ds - app.widget.baseTranslations: \fIvalue\fP -.DE -If it is important to the application to preserve complete -compatibility of the defaults file between different versions -of the application running under Release 4 and Release 5, -the full translations can be replicated in both the ``translations'' -and the ``baseTranslations'' resource. - -.NH 3 -Resource File Search Path -.XS -\fB\*(SN Resource File Search Path\fP -.XE - -.LP -The current specification allows implementations greater flexibility -in defining the directory structure used to hold the application class -and per-user application defaults files. Previous specifications -required the substitution strings to appear in the default path in a -certain order, preventing sites from collecting all the files for -a specific application together in one directory. The Release 5 -specification allows the default path to specify the substitution -strings in any order within a single path entry. Users will need to -pay close attention to the documentation for the specific -implementation to know where to find these files and how to specify -their own -.PN \s-1XFILESEARCHPATH\s+1 -and -.PN \s-1XUSERFILESEARCHPATH\s+1 -values when overriding the system defaults. - -.NH 3 -Customization Resource -.XS -\fB\*(SN Customization Resource\fP -.XE - -.LP -.PN XtResolvePathname -supports a new substitution string, %C, for specifying separate -application class resource files according to arbitrary user-specified -categories. The primary motivation for this addition was separate -monochrome and color application class defaults files. The -substitution value is obtained by querying the current resource -database for the application resource name ``customization'', class -``Customization''. Any application that previously used this -resource name and class will need to be aware of the possibly -conflicting semantics. - -.NH 3 -Per-Screen Resource Database -.XS -\fB\*(SN Per-Screen Resource Database\fP -.XE - -.LP -To allow a user to specify separate preferences for each screen of a -display, a per-screen resource specification string has been added and -multiple resource databases are created; one for each screen. This -will affect any application that modified the (formerly unique) -resource database associated with the display subsequent to the \*(xI -database initialization. Such applications will need to be aware -of the particular screen on which each shell widget is to be created. -.LP -Although the wording of the specification changed substantially in the -description of the process by which the resource database(s) is -initialized, the net effect is the same as in prior releases with the -exception of the added per-screen resource specification and the new -customization substitution string in -.PN XtResolvePathname . - -.NH 3 -Internationalization of Applications -.XS -\fB\*(SN Internationalization of Applications\fP -.XE - -.LP -Internationalization as defined by ANSI is a technology that -allows support of an application in a single locale. In -adding support for internationalization to the \*(xI -the restrictions of this model have been followed. -In particular, the new \*(xI interfaces are designed not to -preclude an application from using other alternatives. -For this reason, no \*(xI routine makes a call to establish the -locale. However, a convenience routine to establish the -locale at initialize time has been provided, in the form -of a default procedure that must be explicitly installed -if the application desires ANSI C locale behavior. -.LP -As many objects in X, particularly resource databases, now inherit -the global locale when they are created, applications wishing to use -the ANSI C locale model should use the new function -.PN XtSetLanguageProc -to do so. -.LP -The internationalization additions also define event filters -as a part of the Xlib Input Method specifications. The -\*(xI enable the use of event filters through additions to -.PN XtDispatchEvent . -Applications that may not be dispatching all events through -.PN XtDispatchEvent -should be reviewed in the context of this new input method mechanism. -.LP -In order to permit internationalization of error messages, the name -and path of the error database file are now allowed to be -implementation-dependent. -No adequate standard mechanism has yet been suggested to -allow the \*(xI to locate the database from localization information -supplied by the client. -.LP -The previous specification for the syntax of the language string -specified by -.PN xnlLanguage -has been dropped to avoid potential conflicts with other standards. -The language string syntax is now implementation-defined. -The example syntax cited is consistent with the previous -specification. - -.NH 3 -Permanently Allocated Strings -.XS -\*(SN Permanently Allocated Strings -.XE - -.LP -In order to permit additional memory savings, an Xlib interface was -added to allow the resource manager to avoid copying certain string -constants. The \*(xI specification was updated to explicitly require -the Object \fIclass_name\fP, \fIresource_name\fP, \fIresource_class\fP, -\fIresource_type\fP, \fIdefault_type\fP in resource tables, Core \fIactions\fP -\fIstring\fP field, and Constraint \fIresource_name\fP, \fIresource_class\fP, -\fIresource_type\fP, and \fIdefault_type\fP resource fields to be -permanently allocated. This explicit requirement is expected to -affect only applications that may create and destroy classes -on the fly. - -.NH 3 -Arguments to Existing Functions -.XS -\fB\*(SN Arguments to Existing Functions\fP -.XE - -.LP -The \fIargs\fP argument to -.PN XtAppInitialize , -.PN XtVaAppInitialize , -.PN XtOpenDisplay , -.PN XtDisplayInitialize , -and -.PN XtInitialize -were changed from -.PN Cardinal * -to int* to conform to pre-existing convention and avoid otherwise -annoying typecasting in ANSI C environments. - -.NH 2 -Release 5 to Release 6 Compatibility -.XS -\fB\*(SN Release 5 to Release 6 Compatibility\fP -.XE -.LP -At the data structure level, Release 6 retains binary compatibility -with Release 5 for all data structures except -.PN WMShellPart . -Three resources were added to the specification. -The known implementations had unused space in the data structure, -therefore on some architectures and implementations, -the size of the part structure will not have changed as a result of this. - -.NH 3 -Widget Internals -.XS -\*(SN Widget Internals -.XE -.LP -Two new widget methods for instance allocation and deallocation were added -to the Object class. These new methods -allow widgets to be treated as C++ objects in the C++ environment -when an appropriate allocation method is specified or inherited -by the widget class. -.LP -The textual descriptions of the processes of widget creation and -widget destruction have been edited to provide clarification to widget -writers. Widgets writers may have reason to rely on the specific order of -the stages of widget creation and destruction; with that motivation, -the specification now more exactly describes the process. -.LP -As a convenience, an interface to locate a widget class extension -record on a linked list, -.PN XtGetClassExtension , -has been added. -.LP -A new option to allow bundled changes to the managed set of a Composite -widget is introduced in the Composite class extension record. -Widgets that define a change_managed procedure that can accommodate -additions and deletions to the managed set of children in a single -invocation should set allows_change_managed_set to \fBTrue\fP in the -extension record. -.LP -The wording of the process followed by -.PN XtUnmanageChildren -has changed slightly to better handle changes to the managed set -during phase 2 destroy processing. -.LP -A new exposure event compression flag, -.PN XtExposeNoRegion , -was added. Many widgets specify exposure compression, but either -ignore the actual damage region passed to the core expose procedure or -use only the cumulative bounding box data available in the event. -Widgets with expose procedures that do not make use of exact -exposure region information can indicate that the \*(xI need not -compute the region. - -.NH 3 -General Application Development -.XS -\*(SN General Application Development -.XE -.LP -.PN XtOpenApplication -is a new convenience procedure to initialize the toolkit, create an -application context, open an X display connection, and create the -root of the widget instance tree. It is identical to the interface -it replaces, -.PN XtAppInitialize , -in all respects except that it takes an additional argument specifying -the widget class of the root shell to create. -This interface is now the recommended one so that clients may easily -become session participants. -The old convenience procedures appear in the compatibility section. -.LP -The toolkit initialization function -.PN XtToolkitInitialize -may be called multiple times without penalty. -.LP -In order to optimize changes in geometry to a set of geometry-managed -children, a new interface, -.PN XtChangeManagedSet , -has been added. - -.NH 3 -Communication with Window and Session Managers -.XS -\*(SN Communication with Window and Session Managers -.XE -.LP -The revision of the \fI\*(xC\fP as an X Consortium standard has resulted -in the addition of three fields to the specification of -.PN WMShellPart . -These are \fIurgency\fP, \fIclient_leader\fP, and \fIwindow_role\fP. -.LP -The adoption of the \fIX Session Management Protocol\fP as an X Consortium -standard has resulted in the addition of a new shell widget, -.PN SessionShell , -and an accompanying subclass verification interface, -.PN XtIsSessionShell . -This widget provides support for communication between an application -and a session manager, as well as a window manager. -In order to preserve compatibility with existing subclasses of -.PN ApplicationShell , -the -.PN ApplicationShell -was subclassed to create the new widget class. -The session protocol requires a modal response to certain checkpointing -operations by participating applications. The -.PN SessionShell -structures -the application's notification of and responses to messages from the session -manager by use of various callback lists and by use of the new interfaces -.PN XtSessionGetToken -and -.PN XtSessionReturnToken . -There is also a new command line argument, -xtsessionID, which facilitates -the session manager in restarting applications based on the \*(xI. -.LP -The resource name and class strings defined by the \*(xI shell -widgets in -.Pn < X11/Shell.h > -are now listed in Appendix E. The addition of a new symbol -for the -.PN WMShell -\fIwait_for_wm\fP resource was made to bring the external symbol -and the string it represents into agreement. The actual resource name -string in -.PN WMShell -has not changed. -The resource representation type of the XtNwinGravity resource of the -.PN WMShell -was changed to XtRGravity in order to register a type -converter so that window gravity resource values could be specified by name. - -.NH 3 -Geometry Management -.XS -\*(SN Geometry Management -.XE -.LP -A clarification to the specification was made to indicate that geometry -requests may include current values along with the requested changes. - -.NH 3 -Event Management -.XS -\*(SN Event Management -.XE -.LP -In Release 6, support is provided for registering selectors -and event handlers for events generated by X protocol extensions -and for dispatching those events to the appropriate widget. -The new event handler registration interfaces are -.PN XtInsertEventTypeHandler -and -.PN XtRemoveEventTypeHandler . -Since the mechanism to indicate selection of extension events is specific -to the extension being used, the \*(xI introduces -.PN XtRegisterExtensionSelector , -which allows the application to select for the events of interest. -In order to change the dispatching algorithm to accommodate extension events -as well as core X protocol events, -the \*(xI event dispatcher may now be replaced or enveloped -by the application with -.PN XtSetEventDispatcher . -The dispatcher may wish to call -.PN XtGetKeyboardFocusWidget -to determine the widget with the current \*(xI keyboard focus. -A dispatcher, after determining the destination widget, may use -.PN XtDispatchEventToWidget -to cause the event to be dispatched to the event handlers registered -by a specific widget. -.LP -To permit the dispatching of events -for nonwidget drawables, such as pixmaps that are not associated -with a widget's window, -.PN XtRegisterDrawable -and -.PN XtUnregisterDrawable -have been added to the library. A related update was made to -the description of -.PN XtWindowToWidget . -.LP -The library is now thread-safe, allowing one thread at a time to -enter the library and protecting global data as necessary from concurrent use. -Threaded toolkit applications are supported by the -new interfaces -.PN XtToolkitThreadInitialize , -.PN XtAppLock , -.PN XtAppUnlock , -.PN XtAppSetExitFlag , -and -.PN XtAppGetExitFlag . -Widget writers may also use -.PN XtProcessLock -and -.PN XtProcessUnlock . -.LP -Safe handling of POSIX signals and other asynchronous notifications -is now provided by use of -.PN XtAppAddSignal , -.PN XtNoticeSignal , -and -.PN XtRemoveSignal . -.LP -The application can receive notification of an impending block -in the \*(xI event manager by registering interest through -.PN XtAppAddBlockHook -and -.PN XtRemoveBlockHook . -.LP -.PN XtLastEventProcessed -returns the most recent event passed to -.PN XtDispatchEvent -for a specified display. - -.NH 3 -Resource Management -.XS -\*(SN Resource Management -.XE -.LP -Resource converters are registered by the \*(xI for window gravity -and for three new resource types associated with session participation: -RestartStyle, CommandArgArray and DirectoryString. -.LP -The file search path syntax has been extended to make it easier to -include the default search path, which controls resource -database construction, by using the new substitution string, %D. - -.NH 3 -Translation Management -.XS -\*(SN Translation Management -.XE -.LP -The default key translator now recognizes the NumLock modifier. -If NumLock is on and the second keysym is a keypad keysym -(a standard keysym named with a ``KP'' prefix or a -vendor-specific keysym in the hexadecimal range 0x11000000 to 0x1100FFFF), -then the default key translator will -use the first keysym if Shift and/or ShiftLock is on and will -use the second keysym if neither is on. Otherwise, it will -ignore NumLock and apply the normal protocol semantics. - -.NH 3 -Selections -.XS -\*(SN Selections -.XE -.LP -The targets of selection requests may be parameterized, as described -by the revised \fI\*(xC\fP. -When such requests are made, -.PN XtSetSelectionParameters -is used by the requestor to specify the target parameters and -.PN XtGetSelectionParameters -is used by the selection owner to retrieve the parameters. -When a parameterized target is specified in the context of a bundled -request for multiple targets, -.PN XtCreateSelectionRequest , -.PN XtCancelSelectionRequest , -and -.PN XtSendSelectionRequest -are used to envelop the assembly of the request. -When the parameters themselves are the names of properties, -the \*(xI provides support for the economical use of property atom names; -see -.PN XtReservePropertyAtom -and -.PN XtReleasePropertyAtom . - -.NH 3 -External Agent Hooks -.XS -\*(SN External Agent Hooks -.XE -.LP -External agent hooks were added for the benefit of applications -that instrument other applications for purposes of accessibility, -testing, and customization. The external agent and the application -communicate by a shared protocol which is transparent to the application. -The hook callbacks permit the external agent to register interest -in groups or classes of toolkit activity and to be notified of the -type and details of the activity as it occurs. The new interfaces -related to this effort are -.PN XtHooksOfDisplay , -which returns the hook registration widget, and -.PN XtGetDisplays , -which returns a list of the X displays associated with an application context. -.bp diff --git a/doc/xorg-docs/specs/Xt/Xtk.intr.front b/doc/xorg-docs/specs/Xt/Xtk.intr.front deleted file mode 100644 index 0deb6dd32..000000000 --- a/doc/xorg-docs/specs/Xt/Xtk.intr.front +++ /dev/null @@ -1,334 +0,0 @@ -.\" $Xorg: Xtk.intr.front,v 1.3 2000/08/17 19:42:48 cpqbld Exp $ -.\" MIT header page and copyright notice -.\" MIT page header and footers -.\" -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.ps 11 -.nr PS 11 -\& -.sp 8 -.ce 4 -\s+2\fB\*(xT\fP\s-2 - -\s+1\fBX Window System\fP\s-1 - -\s+1\fBX Version 11, Release \*(Rn\fP\s-1 - - -First Revision - April, 1994 -.sp 5 -.ce 4 -\s-1Joel McCormack -.sp 6p -Digital Equipment Corporation -Western Software Laboratory -.sp 2 -.ce 4 -Paul Asente -.sp 6p -Digital Equipment Corporation -Western Software Laboratory -.sp 2 -.ce 4 -Ralph R. Swick -.sp 6p -Digital Equipment Corporation -External Research Group -MIT X Consortium -.sp 2 -.ce 3 -version 6 edited by Donna Converse -.sp 6p -X Consortium, Inc.\s+1 -.bp -\& -.ps 9 -.nr PS 9 -.sp 8 -.LP -X Window System is a trademark of X Consortium, Inc. -.LP -Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -X Consortium -.LP -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: -.LP -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. -.LP -Except as contained in this notice, the name of the X Consortium shall -not be used in advertising or otherwise to promote the sale, use or -other dealings in this Software without prior written authorization -from the X Consortium. -.LP -Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -Digital Equipment Corporation, Maynard, Massachusetts. -.LP -Permission to use, copy, modify and distribute this documentation for any -purpose and without fee is hereby granted, provided that the above copyright -notice appears in all copies and that both that copyright notice and this -permission notice appear in supporting documentation, and that the name of -Digital not be used in in advertising or publicity pertaining -to distribution of the software without specific, written prior permission. -Digital makes no representations about the suitability of the -software described herein for any purpose. -It is provided ``as is'' without express or implied warranty. -.ps 11 -.nr PS 11 -.bp 11 -.EF ''\fB \\\\n(PN \fP'' -.OF ''\fB \\\\n(PN \fP'' -.af PN i -.XS ix -Acknowledgments -.XE -\& -.sp 1 -.ce 3 -\s+1\fBAcknowledgments\fP\s-1 -.sp 2 -.na -.LP -The design of the X11 Intrinsics was done primarily -by Joel McCormack of Digital WSL. -Major contributions to the design and implementation also -were done by Charles Haynes, Mike Chow, and Paul Asente of Digital WSL. -Additional contributors to the design and/or implementation were: -.LP -.Ds -.ta 3i -Loretta Guarino-Reid (Digital WSL) Rich Hyde (Digital WSL) -Susan Angebranndt (Digital WSL) Terry Weissman (Digital WSL) -Mary Larson (Digital UEG) Mark Manasse (Digital SRC) -Jim Gettys (Digital SRC) Leo Treggiari (Digital SDT) -Ralph Swick (Project Athena and Digital ERP) Mark Ackerman (Project Athena) -Ron Newman (Project Athena) Bob Scheifler (MIT LCS) -.De -.LP -The contributors to the X10 toolkit also deserve mention. -Although the X11 Intrinsics present an entirely different programming style, -they borrow heavily from the implicit and explicit concepts in the X10 -toolkit. -.LP -The design and implementation of the X10 Intrinsics were done by: -.LP -.Ds -Terry Weissman (Digital WSL) -Smokey Wallace (Digital WSL) -Phil Karlton (Digital WSL) -Charles Haynes (Digital WSL) -Frank Hall (HP) -.De -.LP -The design and implementation of the X10 toolkit's sample widgets were -by the above, as well as by: -.LP -.Ds -Ram Rao (Digital UEG) -Mary Larson (Digital UEG) -Mike Gancarz (Digital UEG) -Kathleen Langone (Digital UEG) -.De -These widgets provided a checklist of requirements that we -had to address in the X11 Intrinsics. -.LP -Thanks go to Al Mento of Digital's UEG Documentation Group for -formatting and generally improving this document -and to John Ousterhout of Berkeley for extensively reviewing -early drafts of it. -.LP -Finally, a special thanks to Mike Chow, -whose extensive performance analysis of the X10 toolkit provided -the justification to redesign it entirely for X11. -.LP -.sp -.Ds 0 -Joel McCormack -Western Software Laboratory -Digital Equipment Corporation - -March 1988 -.De -.bp -.LP -The current design of the \*(xI has benefited greatly from the -input of several dedicated reviewers in the membership of the -X Consortium. -In addition to those already mentioned, -the following individuals have dedicated significant time -to suggesting improvements to the \*(xI: -.LP -.Ds -.ta 3i -Steve Pitschke (Stellar) C. Doug Blewett (AT&T) -Bob Miller (HP) David Schiferl (Tektronix) -Fred Taft (HP) Michael Squires (Sequent) -Marcel Meth (AT&T) Jim Fulton (MIT) -Mike Collins (Digital) Kerry Kimbrough (Texas Instruments) -Scott McGregor (Digital) Phil Karlton (Digital) -Julian Payne (ESS) Jacques Davy (Bull) -Gabriel Beged-Dov (HP) Glenn Widener (Tektronix) -.De -.LP -Thanks go to each of them for the countless hours spent -reviewing drafts and code. -.LP -.sp -.Ds 0 -Ralph R. Swick -External Research Group -Digital Equipment Corporation -MIT Project Athena - -June 1988 -.De -.sp -.LP -From Release 3 to Release 4, several new members joined the design -team. We greatly appreciate the thoughtful comments, suggestions, -lengthy discussions, and in some cases implementation code contributed by each -of the following: -.LP -.Ds -.ta 3i -Don Alecci (AT&T) Ellis Cohen (OSF) -Donna Converse (MIT) Clive Feather (IXI) -Nayeem Islam (Sun) Dana Laursen (HP) -Keith Packard (MIT) Chris Peterson (MIT) -Richard Probst (Sun) Larry Cable (Sun) -.De -.sp -.LP -In Release 5, the effort to define the internationalization additions was -headed by Bill McMahon of Hewlett Packard and Frank Rojas of IBM. This -has been an educational process for many of us, and Bill and Frank's -tutelage has carried us through. Vania Joloboff of the OSF also contributed -to the internationalization additions. The implementation efforts of -Bill, Gabe Beged-Dov, and especially Donna Converse for this release -are also gratefully acknowledged. -.sp -.Ds 0 -Ralph R. Swick - -December 1989 -and -July 1991 -.De -.bp -.LP -The Release 6 Intrinsics is a result of the collaborative -efforts of participants in the X Consortium's \fBintrinsics\fP -working group. -A few individuals contributed substantial design proposals, -participated in lengthy discussions, reviewed final specifications, -and in most cases, were also responsible for sections of the implementation. -They deserve recognition and thanks for their major contributions: -.LP -.Ds -.ta 3i -Paul Asente (Adobe) Larry Cable (SunSoft) -Ellis Cohen (OSF) Daniel Dardailler (OSF) -Vania Joloboff (OSF) Kaleb Keithley (X Consortium) -Courtney Loomis (HP) Douglas Rand (OSF) -Bob Scheifler (X Consortium) Ajay Vohra (SunSoft) -.De -.LP -Many others analyzed designs, offered useful comments and suggestions, -and participated in a significant subset of the process. -The following people deserve thanks for their contributions: -Andy Bovingdon, Sam Chang, Chris Craig, -George Erwin-Grotsky, Keith Edwards, Clive Feather, Stephen Gildea, -Dan Heller, Steve Humphrey, David Kaelbling, -Jaime Lau, Rob Lembree, Stuart Marks, Beth Mynatt, -Tom Paquin, Chris Peterson, Kamesh Ramakrishna, Tom Rodriguez, -Jim VanGilder, Will Walker, and Mike Wexler. -.LP -I am especially grateful to two of my colleagues: Ralph Swick for -expert editorial guidance, and Kaleb Keithley for leadership in -the implementation and the specification work. -.sp -.Ds 0 -Donna Converse -X Consortium -April 1994 -.De -.bp -.XS xii -About This Manual -.XE -\& -.sp 1 -.ce 3 -\s+1\fBAbout This Manual\fP\s-1 -.sp 2 -.na -.LP -\fI\*(xT\fP is intended to be read by both application programmers who will -use one or more of the many widget sets built with the \*(xI -and by widget programmers who will use the \*(xI to build widgets -for one of the widget sets. -Not all the information in this manual, however, applies to both audiences. -That is, because the application programmer is likely to use only a number of -the \*(xI functions in writing an application and because the widget programmer -is likely to use many more, if not all, of the \*(xI functions in building -a widget, -an attempt has been made to highlight those areas of information that are -deemed to be of special interest for the application programmer. -(It is assumed the widget programmer will have to be familiar with all -the information.) -Therefore, all entries in the table of contents that are printed in \fBbold\fP -indicate the information that should be of special interest to an -application programmer. -.LP -It is also assumed that, as application programmers become -more familiar with the concepts discussed in this manual, -they will find it more convenient to implement -portions of their applications as special-purpose or custom widgets. -It is possible, nonetheless, to use widgets without knowing how to build them. -.SH -Conventions Used in this Manual -.LP -This document uses the following conventions: -.IP \(bu 5 -Global symbols are printed in -.PN this -.PN special -.PN font . -These can be either function names, -symbols defined in include files, data types, or structure names. -Arguments to functions, procedures, or macros are printed in \fIitalics\fP. -.IP \(bu 5 -Each function is introduced by a general discussion that -distinguishes it from other functions. -The function declaration itself follows, -and each argument is specifically explained. -General discussion of the function, if any is required, -follows the arguments. -.IP \(bu 5 -To eliminate any ambiguity between those arguments that you pass and those that -a function returns to you, -the explanations for all arguments that you pass start with the word -\fIspecifies\fP or, in the case of multiple arguments, the word \fIspecify\fP. -The explanations for all arguments that are returned to you start with the -word \fIreturns\fP or, in the case of multiple arguments, the word \fIreturn\^\fP. -.bp 1 -.af PN 1 -.EH '\fBX Toolkit Intrinsics\fP''\fBX11 Release \*(Rn\fP' -.OH '\fBX Toolkit Intrinsics\fP''\fBX11 Release \*(Rn\fP' diff --git a/doc/xorg-docs/specs/Xt/appA b/doc/xorg-docs/specs/Xt/appA deleted file mode 100644 index 57a1890a7..000000000 --- a/doc/xorg-docs/specs/Xt/appA +++ /dev/null @@ -1,107 +0,0 @@ -.\" $Xorg: appA,v 1.3 2000/08/17 19:42:48 cpqbld Exp $ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" Digital Equipment Corporation, Maynard, Massachusetts. -.\" -.\" Permission to use, copy, modify and distribute this documentation for any -.\" purpose and without fee is hereby granted, provided that the above copyright -.\" notice appears in all copies and that both that copyright notice and this -.\" permission notice appear in supporting documentation, and that the name of -.\" Digital not be used in in advertising or publicity pertaining -.\" to distribution of the software without specific, written prior permission. -.\" Digital makes no representations about the suitability of the -.\" software described herein for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -.bp -\& -.sp 1 -.ce 3 -\s+1\fBAppendix A\fP\s-1 - -\s+1\fBResource File Format\fP\s-1 -.sp 2 -.LP -.XS -\fBAppendix A \(em Resource File Format\fP -.XE -A resource file contains text representing the default resource values for an -application or set of applications. -.LP -The format of resource files is defined by \fI\*(xL\fP and is reproduced here -for convenience only. -.LP -The format of a resource specification is -.TS -l l . -ResourceLine = Comment | IncludeFile | ResourceSpec | -Comment = ``!'' {} -IncludeFile = ``#'' WhiteSpace ``include'' WhiteSpace FileName WhiteSpace -FileName = -ResourceSpec = WhiteSpace ResourceName WhiteSpace ``:'' WhiteSpace Value -ResourceName = [Binding] {Component Binding} ComponentName -Binding = ``.'' | ``*'' -WhiteSpace = { | } -Component = ``?'' | ComponentName -ComponentName = NameChar {NameChar} -NameChar = ``a''-``z'' | ``A''-``Z'' | ``0''-``9'' | ``_'' | ``-'' -Value = {} -.TE -.LP -Elements separated by vertical bar (|) are alternatives. -Curly braces ({\&.\&.\&.}) indicate zero or more repetitions -of the enclosed elements. -Square brackets ([\&.\&.\&.]) indicate that the enclosed element is optional. -Quotes (``\&.\&.\&.'') are used around literal characters. -.LP -If the last character on a line is a backslash (\\), -that line is assumed to continue on the next line. -.LP -To allow a Value to begin with whitespace, -the two-character sequence ``\\\^\fIspace\fP'' (backslash followed by space) -is recognized and replaced by a space character, -and the two-character sequence ``\\\^\fItab\fP'' -(backslash followed by horizontal tab) -is recognized and replaced by a horizontal tab character. - -To allow a Value to contain embedded newline characters, -the two-character sequence ``\\\^n'' is recognized and replaced by a -newline character. -To allow a Value to be broken across multiple lines in a text file, -the two-character sequence ``\\\^\fInewline\fP'' -(backslash followed by newline) is -recognized and removed from the value. - -To allow a Value to contain arbitrary character codes, -the four-character sequence ``\\\^\fInnn\fP'', -where each \fIn\fP is a digit character in the range of ``0''\-``7'', -is recognized and replaced with a single byte that contains -the octal value specified by the sequence. -Finally, the two-character sequence ``\\\\'' is recognized -and replaced with a single backslash. diff --git a/doc/xorg-docs/specs/Xt/appB b/doc/xorg-docs/specs/Xt/appB deleted file mode 100644 index 3eb9ccc7b..000000000 --- a/doc/xorg-docs/specs/Xt/appB +++ /dev/null @@ -1,783 +0,0 @@ -.\" $Xorg: appB,v 1.3 2000/08/17 19:42:48 cpqbld Exp $ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" Digital Equipment Corporation, Maynard, Massachusetts. -.\" -.\" Permission to use, copy, modify and distribute this documentation for any -.\" purpose and without fee is hereby granted, provided that the above copyright -.\" notice appears in all copies and that both that copyright notice and this -.\" permission notice appear in supporting documentation, and that the name of -.\" Digital not be used in in advertising or publicity pertaining -.\" to distribution of the software without specific, written prior permission. -.\" Digital makes no representations about the suitability of the -.\" software described herein for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -.bp -\& -.sp 1 -.ce 3 -\s+1\fBAppendix B\fP\s-1 - -\s+1\fBTranslation Table Syntax\fP\s-1 -.sp 2 -.LP -.XS -\fBAppendix B \(em Translation Table Syntax\fP -.XE -.IN "Translation tables" -.SH -Notation -.LP -Syntax is specified in EBNF notation with the following conventions: -.TS -l l. -[ a ] Means either nothing or ``a'' -{ a } Means zero or more occurrences of ``a'' -( a | b ) Means either ``a'' or ``b'' -\\\\n Is the newline character -.TE -.LP -All terminals are enclosed in double quotation marks (`` ''). -Informal descriptions are enclosed in angle brackets (< >). -.SH -Syntax -.LP -The syntax of a translation table is -.TS -l l . -translationTable = [ directive ] { production } -directive = ( ``#replace'' | ``#override'' | ``#augment'' ) ``\\\\n'' -production = lhs ``:'' rhs ``\\\\n'' -lhs = ( event | keyseq ) { ``,'' (event | keyseq) } -keyseq = ``"'' keychar {keychar} ``"'' -keychar = [ ``^'' | ``$'' | ``\\\\'' ] -event = [modifier_list] ``<''event_type``>'' [ ``('' count[``+''] ``)'' ] {detail} -modifier_list = ( [``!''] [``:''] {modifier} ) | ``None'' -modifier = [``~''] modifier_name -count = (``1'' | ``2'' | ``3'' | ``4'' | ...) -modifier_name = ``@'' | -event_type = -detail = -rhs = { name ``('' [params] ``)'' } -name = namechar { namechar } -namechar = { ``a''-``z'' | ``A''-``Z'' | ``0''-``9'' | ``_'' | ``-'' } -params = string {``,'' string} -string = quoted_string | unquoted_string -quoted_string = ``"'' { | escape_char} [``\\\\\\\\'' ] ``"'' -escape_char = ``\\\\"'' -unquoted_string = {} -.TE - -.LP -The \fIparams\fP field is parsed into a list of -.PN String -values that will be passed to the named action procedure. A -\fIquoted string\fP may contain an embedded quotation mark if the -quotation mark is preceded by a single backslash (\\). The -three-character sequence ``\\\\"'' is interpreted as ``single backslash -followed by end-of-string''. - -.SH -Modifier Names -.LP -The modifier field is used to specify standard X keyboard and button -modifier mask bits. -Modifiers are legal on event types -.PN KeyPress , -.PN KeyRelease , -.PN ButtonPress , -.PN ButtonRelease , -.PN MotionNotify , -.PN EnterNotify , -.PN LeaveNotify , -and their abbreviations. -An error is generated when a translation table -that contains modifiers for any other events is parsed. -.IP \(bu 5 -If the modifier list has no entries and is not ``None'', -it means ``don't care'' on all modifiers. -.IP \(bu 5 -If an exclamation point (!) is specified at the beginning -of the modifier list, -it means that the listed modifiers must be in the correct state -and no other modifiers can be asserted. -.IP \(bu 5 -If any modifiers are specified -and an exclamation point (!) is not specified, -it means that the listed modifiers must be in the -correct state and ``don't care'' about any other modifiers. -.IP \(bu 5 -If a modifier is preceded by a tilde (~), -it means that that modifier must not be asserted. -.IP \(bu 5 -If ``None'' is specified, it means no modifiers can be asserted. -.IP \(bu 5 -If a colon (:) is specified at the beginning of the modifier list, -it directs the \*(xI to apply any standard modifiers in the -event to map the event keycode into a KeySym. -The default standard modifiers are Shift and Lock, -with the interpretation as defined in \fI\*(xP\fP, Section 5. -The resulting KeySym must exactly match the specified -KeySym, and the nonstandard modifiers in the event must match the -modifier list. -For example, ``:a'' is distinct from ``:A'', -and ``:ShiftA'' is distinct from ``:A''. -.IP \(bu 5 -If both an exclamation point (!) and a colon (:) are specified at -the beginning of the modifier list, it means that the listed -modifiers must be in the correct state and that no other modifiers -except the standard modifiers can be asserted. Any standard -modifiers in the event are applied as for colon (:) above. -.IP \(bu 5 -If a colon (:) is not specified, -no standard modifiers are applied. -Then, for example, ``A'' and ``a'' are equivalent. -.LP -In key sequences, -a circumflex (^) is an abbreviation for the Control modifier, -a dollar sign ($) is an abbreviation for Meta, -and a backslash (\\) can be used to quote any -character, in particular a double quote ("), a circumflex (^), -a dollar sign ($), and another backslash (\\). -Briefly: -.LP -.Ds 0 -.TA 2.5i -.ta 2.5i -No modifiers: None detail -Any modifiers: detail -Only these modifiers: ! mod1 mod2 detail -These modifiers and any others: mod1 mod2 detail -.De -.LP -The use of ``None'' for a modifier list is identical to the use -of an exclamation point with no modifers. -.LP -.TS H -lw(1i) lw(1i) lw(3i). -_ -.sp 6p -Modifier Abbreviation Meaning -.sp 6p -_ -.sp 6p -.R -.TH -Ctrl c Control modifier bit -Shift s Shift modifier bit -Lock l Lock modifier bit -Meta m Meta key modifier -Hyper h Hyper key modifier -Super su Super key modifier -Alt a Alt key modifier -Mod1 Mod1 modifier bit -Mod2 Mod2 modifier bit -Mod3 Mod3 modifier bit -Mod4 Mod4 modifier bit -Mod5 Mod5 modifier bit -Button1 Button1 modifier bit -Button2 Button2 modifier bit -Button3 Button3 modifier bit -Button4 Button4 modifier bit -Button5 Button5 modifier bit -None No modifiers -Any Any modifier combination -.sp 6p -_ -.TE -.LP -.IN "key modifier" -A key modifier is any modifier bit one of whose corresponding KeyCodes -contains the corresponding left or right KeySym. -For example, -``m'' or ``Meta'' means any modifier bit mapping to a KeyCode -whose KeySym list contains XK_Meta_L or XK_Meta_R. -Note that this interpretation is for each display, -not global or even for each application context. -The Control, Shift, and Lock modifier names refer -explicitly to the corresponding modifier bits; -there is no additional interpretation of KeySyms for these modifiers. -.LP -Because it is possible to associate arbitrary KeySyms with modifiers, the set of -key modifiers is extensible. The ``@'' syntax means any -modifier bit whose corresponding KeyCode contains the specified KeySym name. -.LP -A modifier_list/KeySym combination in a translation matches a -modifiers/KeyCode combination in an event in the following ways: -.IP 1. 5 -If a colon (:) is used, the \*(xI call the display's -.PN XtKeyProc -with the KeyCode and modifiers. -To match, (\fImodifiers\fP & ~\fImodifiers_return\fP) must equal \fImodifier_list\fP, and -\fIkeysym_return\fP must equal the given KeySym. -.IP 2. 5 -If (:) is not used, the \*(xI mask off all don't-care bits from the -modifiers. -This value must be equal to \fImodifier_list\fP. -Then, for each possible combination of -don't-care modifiers in the modifier list, the \*(xI call the display's -.PN XtKeyProc -with the KeyCode and that combination ORed with the cared-about modifier bits -from the event. -\fIKeysym_return\fP must match the KeySym in the translation. -.SH -Event Types -.LP -The event-type field describes XEvent types. -In addition to the standard -Xlib symbolic event type names, the following event type synonyms -are defined: -.TS H -lw(1.5i) lw(3i). -_ -.sp 6p -Type Meaning -.sp 6p -_ -.sp 6p -.TH -Key T{ -.PN KeyPress -T} -KeyDown T{ -.PN KeyPress -T} -KeyUp T{ -.PN KeyRelease -T} -BtnDown T{ -.PN ButtonPress -T} -BtnUp T{ -.PN ButtonRelease -T} -Motion T{ -.PN MotionNotify -T} -PtrMoved T{ -.PN MotionNotify -T} -MouseMoved T{ -.PN MotionNotify -T} -Enter T{ -.PN EnterNotify -T} -EnterWindow T{ -.PN EnterNotify -T} -Leave T{ -.PN LeaveNotify -T} -LeaveWindow T{ -.PN LeaveNotify -T} -FocusIn T{ -.PN FocusIn -T} -FocusOut T{ -.PN FocusOut -T} -Keymap T{ -.PN KeymapNotify -T} -Expose T{ -.PN Expose -T} -GrExp T{ -.PN GraphicsExpose -T} -NoExp T{ -.PN NoExpose -T} -Visible T{ -.PN VisibilityNotify -T} -Create T{ -.PN CreateNotify -T} -Destroy T{ -.PN DestroyNotify -T} -Unmap T{ -.PN UnmapNotify -T} -Map T{ -.PN MapNotify -T} -MapReq T{ -.PN MapRequest -T} -Reparent T{ -.PN ReparentNotify -T} -Configure T{ -.PN ConfigureNotify -T} -ConfigureReq T{ -.PN ConfigureRequest -T} -Grav T{ -.PN GravityNotify -T} -ResReq T{ -.PN ResizeRequest -T} -Circ T{ -.PN CirculateNotify -T} -CircReq T{ -.PN CirculateRequest -T} -Prop T{ -.PN PropertyNotify -T} -SelClr T{ -.PN SelectionClear -T} -SelReq T{ -.PN SelectionRequest -T} -Select T{ -.PN SelectionNotify -T} -Clrmap T{ -.PN ColormapNotify -T} -Message T{ -.PN ClientMessage -T} -Mapping T{ -.PN MappingNotify -T} -.sp 6p -_ -.TE -The supported abbreviations are: -.TS H -lw(1.5i) lw(1.25i) lw(1.75i). -_ -.sp 6p -Abbreviation Event Type Including -.sp 6p -_ -.sp 6p -.TH -.R -Ctrl T{ -.PN KeyPress -T} with Control modifier -Meta T{ -.PN KeyPress -T} with Meta modifier -Shift T{ -.PN KeyPress -T} with Shift modifier -Btn1Down T{ -.PN ButtonPress -T} with Button1 detail -Btn1Up T{ -.PN ButtonRelease -T} with Button1 detail -Btn2Down T{ -.PN ButtonPress -T} with Button2 detail -Btn2Up T{ -.PN ButtonRelease -T} with Button2 detail -Btn3Down T{ -.PN ButtonPress -T} with Button3 detail -Btn3Up T{ -.PN ButtonRelease -T} with Button3 detail -Btn4Down T{ -.PN ButtonPress -T} with Button4 detail -Btn4Up T{ -.PN ButtonRelease -T} with Button4 detail -Btn5Down T{ -.PN ButtonPress -T} with Button5 detail -Btn5Up T{ -.PN ButtonRelease -T} with Button5 detail -BtnMotion T{ -.PN MotionNotify -T} with any button modifier -Btn1Motion T{ -.PN MotionNotify -T} with Button1 modifier -Btn2Motion T{ -.PN MotionNotify -T} with Button2 modifier -Btn3Motion T{ -.PN MotionNotify -T} with Button3 modifier -Btn4Motion T{ -.PN MotionNotify -T} with Button4 modifier -Btn5Motion T{ -.PN MotionNotify -T} with Button5 modifier -.sp 6p -_ -.TE -.sp -.LP -The detail field is event-specific and normally corresponds to the -detail field of the corresponding event as described -by \fI\*(xP\fP, Section 11. The detail field is supported -for the following event types: -.LP -.TS H -l l . -_ -.sp 6p -Event Event Field -.sp 6p -_ -.TH -.sp 6p -KeyPress KeySym from event \fIdetail\fP (keycode) -KeyRelease KeySym from event \fIdetail\fP (keycode) -ButtonPress button from event \fIdetail\fP -ButtonRelease button from event \fIdetail\fP -MotionNotify event \fIdetail\fP -EnterNotify event \fImode\fP -LeaveNotify event \fImode\fP -FocusIn event \fImode\fP -FocusOut event \fImode\fP -PropertyNotify \fIatom\fP -SelectionClear \fIselection\fP -SelectionRequest \fIselection\fP -SelectionNotify \fIselection\fP -ClientMessage \fItype\fP -MappingNotify \fIrequest\fP -.sp 6p -_ -.TE -.LP -If the event type is -.PN KeyPress -or -.PN KeyRelease , -the detail field -specifies a KeySym name in standard format which is matched against -the event as described above, for example, A. -.LP -For the -.PN PropertyNotify , -.PN SelectionClear , -.PN SelectionRequest , -.PN SelectionNotify , -and -.PN ClientMessage -events the detail field is specified -as an atom name; for example, WM_PROTOCOLS. For the -.PN MotionNotify , -.PN EnterNotify , -.PN LeaveNotify , -.PN FocusIn , -.PN FocusOut , -and -.PN MappingNotify -events, either the symbolic constants as defined by -\fI\*(xP\fP, Section 11, -or the numeric values may be specified. -.LP -If no detail field is specified, then any value in the event detail is -accepted as a match. -.LP -A KeySym can be specified as any of the standard KeySym names, -a hexadecimal number prefixed with ``0x'' or ``0X'', -an octal number prefixed with ``0'', or a decimal number. -A KeySym expressed as a single digit is interpreted as the -corresponding Latin 1 KeySym, for example, ``0'' is the KeySym XK_0. -Other single character KeySyms are treated as literal constants from Latin 1, -for example, ``!'' is treated as 0x21. -Standard KeySym names are as defined in -.Pn < X11/keysymdef.h > -with the ``XK_'' prefix removed. -.LP -.SH -Canonical Representation -.LP -Every translation table has a unique, canonical text representation. This -representation is passed to a widget's -.PN display_accelerator -procedure to describe the accelerators installed on that widget. -The canonical representation of a translation table is (see also -``Syntax'') -.TS -l l . -translationTable = { production } -production = lhs ``:'' rhs ``\\\\n'' -lhs = event { ``,'' event } -event = [modifier_list] ``<''event_type``>'' [ ``('' count[``+''] ``)'' ] {detail} -modifier_list = [``!''] [``:''] {modifier} -modifier = [``~''] modifier_name -count = (``1'' | ``2'' | ``3'' | ``4'' | ...) -modifier_name = ``@'' | -event_type = -detail = -rhs = { name ``('' [params] ``)'' } -name = namechar { namechar } -namechar = { ``a''-``z'' | ``A''-``Z'' | ``0''-``9'' | ``_'' | ``-'' } -params = string {``,'' string} -string = quoted_string -quoted_string = ``"'' { | escape_char} [``\\\\\\\\'' ] ``"'' -escape_char = ``\\\\"'' -.TE -.LP -The canonical modifier names are -.LP -.Ds -.TA 1i 2.5i -.ta 1i 2.5i -Ctrl Mod1 Button1 -Shift Mod2 Button2 -Lock Mod3 Button3 - Mod4 Button4 - Mod5 Button5 -.De -.LP -The canonical event types are -.IP -.TS -l l. -T{ -.PN KeyPress -T} T{ -.PN KeyRelease -T} -T{ -.PN ButtonPress -T} T{ -.PN ButtonRelease -T} -T{ -.PN MotionNotify -T} T{ -.PN EnterNotify -T} -T{ -.PN LeaveNotify -T} T{ -.PN FocusIn -T} -T{ -.PN FocusOut -T} T{ -.PN KeymapNotify -T} -T{ -.PN Expose -T} T{ -.PN GraphicsExpose, -T} -T{ -.PN NoExpose -T} T{ -.PN VisibilityNotify -T} -T{ -.PN CreateNotify -T} T{ -.PN DestroyNotify -T} -T{ -.PN UnmapNotify -T} T{ -.PN MapNotify -T} -T{ -.PN MapRequest -T} T{ -.PN ReparentNotify -T} -T{ -.PN ConfigureNotify -T} T{ -.PN ConfigureRequest -T} -T{ -.PN GravityNotify -T} T{ -.PN ResizeRequest -T} -T{ -.PN CirculateNotify -T} T{ -.PN CirculateRequest -T} -T{ -.PN PropertyNotify -T} T{ -.PN SelectionClear -T} -T{ -.PN SelectionRequest -T} T{ -.PN SelectionNotify -T} -T{ -.PN ColormapNotify -T} T{ -.PN ClientMessage -T} -.TE -.LP - -.SH -Examples -.LP -.IP \(bu 5 -Always put more specific events in the table before more general ones: -.LP -.Ds -Shift : twas()\\n\\ - : brillig() -.De -.LP -.IP \(bu 5 -For double-click on Button1 Up with Shift, use this specification: -.IP -.Ds -Shift(2) : and() -.DE -.IP -This is equivalent to the following line with appropriate timers set -between events: -.IP -.Ds -Shift,Shift,Shift,Shift : and() -.De -.IP \(bu 5 -For double-click on Button1 Down with Shift, use this specification: -.IP -.Ds -Shift(2) : the() -.De -.IP -This is equivalent to the following line with appropriate timers set -between events: -.IP -.Ds -Shift,Shift,Shift : the() -.De -.IP \(bu 5 -Mouse motion is always discarded when it occurs between events in a table -where no motion event is specified: -.IP -.Ds -, : slithy() -.De -.IP -This is taken, even if the pointer moves a bit between the down and -up events. -Similarly, any motion event specified in a translation matches any number -of motion events. -If the motion event causes an action procedure to be invoked, -the procedure is invoked after each motion event. -.IP \(bu 5 -If an event sequence consists of a sequence of events that is also a -noninitial subsequence of another translation, -it is not taken if it occurs in the context of the longer sequence. -This occurs mostly in sequences like the following: -.IP -.Ds -, : toves()\\n\\ - : did() -.De -.IP -The second translation is taken only if the button release is not -preceded by a button press or if there are intervening events between the -press and the release. -Be particularly aware of this when using the repeat notation, above, -with buttons and keys, -because their expansion includes additional events; -and when specifying motion events, because they are implicitly included -between any two other events. -In particular, -pointer motion and double-click translations cannot coexist in the same -translation table. -.IP \(bu 5 -For single click on Button1 Up with Shift and Meta, use this specification: -.IP -.Ds -Shift Meta , Shift Meta: gyre() -.De -.IP \(bu 5 -For multiple clicks greater or equal to a minimum number, -a plus sign (+) may be appended to the final (rightmost) -count in an event sequence. The actions will be invoked -on the \fIcount\fP-th click and each subsequent one arriving -within the multi-click time interval. For example: -.IP -.Ds -Shift (2+) : and() -.De -.IP \(bu 5 -To indicate -.PN EnterNotify -with any modifiers, use this specification: -.IP -.Ds - : gimble() -.De -.IP \(bu 5 -To indicate -.PN EnterNotify -with no modifiers, use this specification: -.IP -.Ds -None : in() -.De -.IP \(bu 5 -To indicate -.PN EnterNotify -with Button1 Down and Button2 Up and ``don't care'' about -the other modifiers, use this specification: -.IP -.Ds -Button1 ~Button2 : the() -.De -.IP \(bu 5 -To indicate -.PN EnterNotify -with Button1 down and Button2 down exclusively, use this specification: -.IP -.Ds -! Button1 Button2 : wabe() -.De -.IP -You do not need to use a tilde (~) with an exclamation point (!). diff --git a/doc/xorg-docs/specs/Xt/appC b/doc/xorg-docs/specs/Xt/appC deleted file mode 100644 index 6f31fd7d5..000000000 --- a/doc/xorg-docs/specs/Xt/appC +++ /dev/null @@ -1,1204 +0,0 @@ -.\" $Xorg: appC,v 1.3 2000/08/17 19:42:48 cpqbld Exp $ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" Digital Equipment Corporation, Maynard, Massachusetts. -.\" -.\" Permission to use, copy, modify and distribute this documentation for any -.\" purpose and without fee is hereby granted, provided that the above copyright -.\" notice appears in all copies and that both that copyright notice and this -.\" permission notice appear in supporting documentation, and that the name of -.\" Digital not be used in in advertising or publicity pertaining -.\" to distribution of the software without specific, written prior permission. -.\" Digital makes no representations about the suitability of the -.\" software described herein for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -.bp -\& -.sp 1 -.ce 3 -\s+1\fBAppendix C\fP\s-1 - -\s+1\fBCompatibility Functions\fP\s-1 -.sp 2 -.LP -.XS -\fBAppendix C \(em Compatibility Functions\fP -.XE -.FS -This appendix is part of the formal Intrinsics Specification. -.FE -.LP -In prototype versions of the \*(tk -each widget class -implemented an Xt<\^\fIWidget\fP\^>Create (for example, -.PN XtLabelCreate ) -function, in which most of the code was identical from widget to widget. -In the \*(xI, a single generic -.PN XtCreateWidget -performs most of the common work and then calls the initialize procedure -implemented for the particular widget class. -.LP -Each Composite class also implemented the procedures -Xt<\^\fIWidget\fP\^>Add and an Xt<\^\fIWidget\fP\^>Delete (for example, -.PN XtButtonBoxAddButton -and -.PN XtButtonBoxDeleteButton ). -In the \*(xI, the Composite generic procedures -.PN XtManageChildren -and -.PN XtUnmanageChildren -perform error checking and screening out of certain children. -Then they call the change_managed procedure -implemented for the widget's Composite class. -If the widget's parent has not yet been realized, -the call to the change_managed procedure is delayed until realization time. -.LP -Old-style calls can be implemented in the \*(tk by defining -one-line procedures or macros that invoke a generic routine. For example, -you could define the macro -.PN XtLabelCreate -as: -.IP -.Ds 0 -.TA .5i 3i -.ta .5i 3i -#define XtLabelCreate(\fIname\fP, \fIparent\fP, \fIargs\fP, \fInum_args\fP) \\ - ((LabelWidget) XtCreateWidget(\fIname\fP, \fIlabelWidgetClass\fP, \ -\fIparent\fP, \fIargs\fP, \fInum_args\fP)) -.De -.sp -.LP -Pop-up shells in some of the prototypes automatically performed an -.PN XtManageChild -on their child within their insert_child procedure. -.IN "insert_child procedure" -Creators of pop-up children need to call -.PN XtManageChild -themselves. -.sp -.LP -.PN XtAppInitialize -and -.PN XtVaAppInitialize -have been replaced by -.PN XtOpenApplication -and -.PN XtVaOpenApplication . -.LP -To initialize the \*(xI internals, create an application context, -open and initialize a display, and create the initial application shell -instance, an application may use -.PN XtAppInitialize -or -.PN XtVaAppInitialize . -.LP -.IN "XtAppInitialize" "" "@DEF@" -.sM -.FD 0 -Widget XtAppInitialize(\fIapp_context_return\fP, \fIapplication_class\fP, \ -\fIoptions\fP, \fInum_options\fP, -.br - \fIargc_in_out\fP, \fIargv_in_out\fP, \ -\fIfallback_resources\fP, \fIargs\fP, \fInum_args\fP) -.br - XtAppContext *\fIapp_context_return\fP; -.br - String \fIapplication_class\fP; -.br - XrmOptionDescList \fIoptions\fP; -.br - Cardinal \fInum_options\fP; -.br - int *\fIargc_in_out\fP; -.br - String *\fIargv_in_out\fP; -.br - String *\fIfallback_resources\fP; -.br - ArgList \fIargs\fP; -.br - Cardinal \fInum_args\fP; -.FN -.IP \fIapp_context_return\fP 1.5i -Returns the application context, if non-NULL. -.IP \fIapplication_class\fP 1.5i -Specifies the class name of the application. -.IP \fIoptions\fP 1.5i -Specifies the command line options table. -.IP \fInum_options\fP 1.5i -Specifies the number of entries in \fIoptions\fP. -.IP \fIargc_in_out\fP 1.5i -Specifies a pointer to the number of command line arguments. -.IP \fIargv_in_out\fP 1.5i -Specifies a pointer to the command line arguments. -.IP \fIfallback_resources\fP 1.5i -Specifies resource values to be used if the application class resource -file cannot be opened or read, or NULL. -.IP \fIargs\fP 1.5i -Specifies the argument list to override any -other resource specifications for the created shell widget. -.IP \fInum_args\fP 1.5i -Specifies the number of entries in the argument list. -.LP -.eM -The -.PN XtAppInitialize -function calls -.PN XtToolkitInitialize -followed by -.PN XtCreateApplicationContext , -then calls -.PN XtOpenDisplay -with \fIdisplay_string\fP NULL and -\fIapplication_name\fP NULL, and finally calls -.PN XtAppCreateShell -with \fIapplication_name\fP NULL, \fIwidget_class\fP -.PN application\%Shell\%Widget\%Class , -and the specified \fIargs\fP and \fInum_args\fP -and returns the created shell. The modified \fIargc\fP and \fIargv\fP returned by -.PN XtDisplayInitialize -are returned in \fIargc_in_out\fP and \fIargv_in_out\fP. If -\fIapp_context_return\fP is not NULL, the created application context is -also returned. If the display specified by the command line cannot be -opened, an error message is issued and -.PN XtAppInitialize -terminates the application. If \fIfallback_resources\fP is non-NULL, -.PN XtAppSetFallbackResources -is called with the value prior to calling -.PN XtOpenDisplay . -.sp -.LP -.IN "XtVaAppInitialize" "" "@DEF@" -.sM -.FD 0 -Widget XtVaAppInitialize(\fIapp_context_return\fP, \fIapplication_class\fP, \ -\fIoptions\fP, \fInum_options\fP, -.br - \fIargc_in_out\fP, \fIargv_in_out\fP, \ -\fIfallback_resources\fP, ...) -.br - XtAppContext *\fIapp_context_return\fP; -.br - String \fIapplication_class\fP; -.br - XrmOptionDescList \fIoptions\fP; -.br - Cardinal \fInum_options\fP; -.br - int *\fIargc_in_out\fP; -.br - String *\fIargv_in_out\fP; -.br - String *\fIfallback_resources\fP; -.FN -.IP \fIapp_context_return\fP 1.5i -Returns the application context, if non-NULL. -.IP \fIapplication_class\fP 1.5i -Specifies the class name of the application. -.IP \fIoptions\fP 1.5i -Specifies the command line options table. -.IP \fInum_options\fP 1.5i -Specifies the number of entries in \fIoptions\fP. -.IP \fIargc_in_out\fP 1.5i -Specifies a pointer to the number of command line arguments. -.IP \fIargv_in_out\fP 1.5i -Specifies the command line arguments array. -.IP \fIfallback_resources\fP 1.5i -Specifies resource values to be used if the application class -resource file cannot be opened, or NULL. -.IP ... 1.5i -Specifies the variable argument list to override any other -resource specifications for the created shell. -.LP -.eM -The -.PN XtVaAppInitialize -procedure is identical in function to -.PN XtAppInitialize -with the \fIargs\fP and \fInum_args\fP parameters replaced by a varargs list, -as described -in Section 2.5.1. -.sp -.LP -As a convenience to people converting from earlier versions of the toolkit -without application contexts, the following routines exist: -.PN XtInitialize , -.PN XtMainLoop , -.PN XtNextEvent , -.PN XtProcessEvent , -.PN XtPeekEvent , -.PN XtPending , -.PN XtAddInput , -.PN XtAddTimeOut , -.PN XtAddWorkProc , -.PN XtCreateApplicationShell , -.PN XtAddActions , -.PN XtSetSelectionTimeout , -and -.PN XtGetSelectionTimeout . -.LP -.IN "XtInitialize" "" "@DEF@" -.sM -.FD 0 -Widget XtInitialize(\fIshell_name\fP, \fIapplication_class\fP, \fIoptions\fP, \ -\fInum_options\fP, \fIargc\fP, \fIargv\fP) -.br - String \fIshell_name\fP; -.br - String \fIapplication_class\fP; -.br - XrmOptionDescRec \fIoptions\fP[]; -.br - Cardinal \fInum_options\fP; -.br - int *\fIargc\fP; -.br - String \fIargv\fP[]; -.FN -.IP \fIshell_name\fP 1i -This parameter is ignored; therefore, you can specify NULL. -.IP \fIapplication_class\fP 1i -Specifies the class name of this application. -.IP \fIoptions\fP 1i -Specifies how to parse the command line for any application-specific resources. -The \fIoptions\fP argument is passed as a parameter to -.PN XrmParseCommand . -.IP \fInum_options\fP 1i -Specifies the number of entries in the options list. -.IP \fIargc\fP 1i -Specifies a pointer to the number of command line parameters. -.IP \fIargv\fP 1i -Specifies the command line parameters. -.LP -.eM -.PN XtInitialize -calls -.PN XtToolkitInitialize -to initialize the toolkit internals, -creates a default application context for use by the other convenience -routines, calls -.PN XtOpenDisplay -with \fIdisplay_string\fP NULL and \fIapplication_name\fP NULL, and -finally calls -.PN XtAppCreateShell -with \fIapplication_name\fP NULL and -returns the created shell. -The semantics of calling -.PN XtInitialize -more than once are undefined. -This routine has been replaced by -.PN XtOpenApplication . -.sp -.IN "XtMainLoop" "" "@DEF@" -.sM -.FD 0 -void XtMainLoop(void) -.FN -.LP -.eM -.PN XtMainLoop -first reads the next alternate input, timer, or X event by calling -.PN XtNextEvent . -Then it dispatches this to the appropriate registered procedure by calling -.PN XtDispatchEvent . -This routine has been replaced by -.PN XtAppMainLoop . -.sp -.IN "XtNextEvent" "" "@DEF@" -.sM -.FD 0 -void XtNextEvent(\fIevent_return\fP) -.br - XEvent *\fIevent_return\fP; -.FN -.IP \fIevent_return\fP 1i -Returns the event information to the specified event structure. -.LP -.eM -If no input is on the X input queue for the default application context, -.PN XtNextEvent -flushes the X output buffer -and waits for an event while looking at the alternate input sources -and timeout values and calling any callback procedures triggered by them. -This routine has been replaced by -.PN XtAppNextEvent . -.PN XtInitialize -must be called before using this routine. -.sp -.IN "XtProcessEvent" "" "@DEF@" -.sM -.FD 0 -void XtProcessEvent(\fImask\fP) -.br - XtInputMask \fImask\fP; -.FN -.IP \fImask\fP 1i -Specifies the type of input to process. -.LP -.eM -.PN XtProcessEvent -processes one X event, timeout, or alternate input source -(depending on the value of \fImask\fP), blocking if necessary. -It has been replaced by -.PN XtAppProcessEvent . -.PN XtInitialize -must be called before using this function. -.sp -.IN "XtPeekEvent" "" "@DEF@" -.sM -.FD 0 -Boolean XtPeekEvent(\fIevent_return\fP) -.br - XEvent *\fIevent_return\fP; -.FN -.IP \fIevent_return\fP 1i -Returns the event information to the specified event structure. -.LP -.eM -If there is an event in the queue for the default application context, -.PN XtPeekEvent -fills in the event and returns a nonzero value. -If no X input is on the queue, -.PN XtPeekEvent -flushes the output buffer and blocks until input is available, possibly -calling some timeout callbacks in the process. -If the input is an event, -.PN XtPeekEvent -fills in the event and returns a nonzero value. -Otherwise, the input is for an alternate input source, and -.PN XtPeekEvent -returns zero. -This routine has been replaced by -.PN XtAppPeekEvent . -.PN XtInitialize -must be called before using this routine. -.sp -.IN "XtPending" "" "@DEF@" -.sM -.FD 0 -Boolean XtPending() -.FN -.LP -.eM -.PN XtPending -returns a nonzero value if there are -events pending from the X server or alternate input sources in the default -application context. -If there are no events pending, -it flushes the output buffer and returns a zero value. -It has been replaced by -.PN XtAppPending . -.PN XtInitialize -must be called before using this routine. -.sp -.IN "XtAddInput" "" "@DEF@" -.sM -.FD 0 -XtInputId XtAddInput(\fIsource\fP, \fIcondition\fP, \fIproc\fP, \ -\fIclient_data\fP) -.br - int \fIsource\fP; -.br - XtPointer \fIcondition\fP; -.br - XtInputCallbackProc \fIproc\fP; -.br - XtPointer \fIclient_data\fP; -.FN -.IP \fIsource\fP 1i -Specifies the source file descriptor on a POSIX-based system -or other operating-system-dependent device specification. -.IP \fIcondition\fP 1i -Specifies the mask that indicates either a read, write, or exception condition -or some operating-system-dependent condition. -.IP \fIproc\fP 1i -Specifies the procedure called when input is available. -.IP \fIclient_data\fP 1i -Specifies the parameter to be passed to \fIproc\fP when input is available. -.LP -.eM -The -.PN XtAddInput -function registers in the default application context a new -source of events, -which is usually file input but can also be file output. -(The word \fIfile\fP should be loosely interpreted to mean any sink -or source of data.) -.PN XtAddInput -also specifies the conditions under which the source can generate events. -When input is pending on this source in the default application context, -the callback procedure is called. -This routine has been replaced by -.PN XtAppAddInput . -.PN XtInitialize -must be called before using this routine. -.sp -.IN "XtAddTimeOut" "" "@DEF@" -.sM -.FD 0 -XtIntervalId XtAddTimeOut(\fIinterval\fP, \fIproc\fP, \fIclient_data\fP) -.br - unsigned long \fIinterval\fP; -.br - XtTimerCallbackProc \fIproc\fP; -.br - XtPointer \fIclient_data\fP; -.FN -.IP \fIinterval\fP 1i -Specifies the time interval in milliseconds. -.IP \fIproc\fP 1i -Specifies the procedure to be called when time expires. -.IP \fIclient_data\fP 1i -Specifies the parameter to be passed to \fIproc\fP when it is called. -.LP -.eM -The -.PN XtAddTimeOut -function creates a timeout in the default application context -and returns an identifier for it. -The timeout value is set to \fIinterval\fP. -The callback procedure will be called after -the time interval elapses, after which the timeout is removed. -This routine has been replaced by -.PN XtAppAddTimeOut . -.PN XtInitialize -must be called before using this routine. -.sp -.IN "XtAddWorkProc" "" "@DEF@" -.sM -.FD 0 -XtWorkProcId XtAddWorkProc(\fIproc\fP, \fIclient_data\fP) -.br - XtWorkProc \fIproc\fP; -.br - XtPointer \fIclient_data\fP; -.FN -.IP \fIproc\fP 1i -Procedure to call to do the work. -.IP \fIclient_data\fP 1i -Client data to pass to \fIproc\fP when it is called. -.LP -.eM -This routine registers a work procedure in the default application context. It has -been replaced by -.PN XtAppAddWorkProc . -.PN XtInitialize -must be called before using this routine. -.sp -.IN "XtCreateApplicationShell" "" "@DEF@" -.sM -.FD 0 -Widget XtCreateApplicationShell(\fIname\fP, \fIwidget_class\fP, \fIargs\fP, \ -\fInum_args\fP) -.br - String \fIname\fP; -.br - WidgetClass \fIwidget_class\fP; -.br - ArgList \fIargs\fP; -.br - Cardinal \fInum_args\fP; -.FN -.IP \fIname\fP 1i -This parameter is ignored; therefore, you can specify NULL. -.IP \fIwidget_class\fP 1i -Specifies the widget class pointer for the created application shell widget. -This will usually be -.PN topLevelShellWidgetClass -or a subclass thereof. -.IP \fIargs\fP 1i -Specifies the argument list to override any other resource specifications. -.IP \fInum_args\fP 1i -Specifies the number of entries in \fIargs\fP. -.LP -.eM -The procedure -.PN XtCreateApplicationShell -calls -.PN XtAppCreateShell -with \fIapplication_name\fP NULL, the application class passed to -.PN XtInitialize , -and the default application context created by -.PN XtInitialize . -This routine has been replaced by -.PN XtAppCreateShell . -.sp -.LP -An old-format resource type converter procedure pointer is of type -.PN XtConverter . -.LP -.IN "XtConverter" "" "@DEF@" -.sM -.FD 0 -typedef void (*XtConverter)(XrmValue*, Cardinal*, XrmValue*, XrmValue*); -.br - XrmValue *\fIargs\fP; -.br - Cardinal *\fInum_args\fP; -.br - XrmValue *\fIfrom\fP; -.br - XrmValue *\fIto\fP; -.FN -.IP \fIargs\fP 1i -Specifies a list of additional -.PN XrmValue -arguments to the converter if additional context is needed -to perform the conversion, or NULL. -.IP \fInum_args\fP 1i -Specifies the number of entries in \fIargs\fP. -.IP \fIfrom\fP 1i -Specifies the value to convert. -.IP \fIto\fP 1i -Specifies the descriptor to use to return the converted value. -.LP -.eM -Type converters should perform the following actions: -.IP \(bu 5 -Check to see that the number of arguments passed is correct. -.IP \(bu 5 -Attempt the type conversion. -.IP \(bu 5 -If successful, return the size and pointer to the data in the \fIto\fP argument; -otherwise, call -.PN XtWarningMsg -and return without modifying the \fIto\fP argument. -.LP -Most type converters just take the data described by the specified \fIfrom\fP -argument and return data by writing into the specified \fIto\fP argument. -A few need other information, which is available in the specified -argument list. -A type converter can invoke another type converter, -which allows differing sources that may convert into a common intermediate -result to make maximum use of the type converter cache. -.LP -Note that the address returned in \fIto->addr\fP cannot be that of a local variable of -the converter because this is not valid after the converter returns. -It should be a pointer to a static variable. -.LP -The procedure type -.PN XtConverter -has been replaced by -.PN XtTypeConverter . -.sp -.LP -The -.PN XtStringConversionWarning -.IN "XtStringConversionWarning" "" "@DEF@" -function is a convenience routine for old-format resource converters -that convert from strings. -.LP -.sM -.FD 0 -void XtStringConversionWarning(\fIsrc\fP, \fIdst_type\fP) -.br - String \fIsrc\fP, \fIdst_type\fP; -.FN -.IP \fIsrc\fP 1i -Specifies the string that could not be converted. -.IP \fIdst_type\fP 1i -Specifies the name of the type to which the string could not be converted. -.LP -.eM -The -.PN XtStringConversionWarning -function issues a warning message with name ``conversionError'', -type ``string'', class ``XtToolkitError, and the default message string -``Cannot convert "\fIsrc\fP" to type \fIdst_type\fP''. This routine -has been superseded by -.PN XtDisplayStringConversionWarning . -.sp -.LP -To register an old-format converter, use -.PN XtAddConverter -.IN "XtAddConverter" "" "@DEF@" -or -.PN XtAppAddConverter . -.IN "XtAppAddConverter" "" "@DEF@" -.LP -.sM -.FD 0 -void XtAddConverter(\fIfrom_type\fP, \fIto_type\fP, \fIconverter\fP, \ -\fIconvert_args\fP, \fInum_args\fP) -.br - String \fIfrom_type\fP; -.br - String \fIto_type\fP; -.br - XtConverter \fIconverter\fP; -.br - XtConvertArgList \fIconvert_args\fP; -.br - Cardinal \fInum_args\fP; -.FN -.IP \fIfrom_type\fP 1i -Specifies the source type. -.IP \fIto_type\fP 1i -Specifies the destination type. -.IP \fIconverter\fP 1i -Specifies the type converter procedure. -.IP \fIconvert_args\fP 1i -Specifies how to compute the additional arguments to the converter, or NULL. -.IP \fInum_args\fP 1i -Specifies the number of entries in \fIconvert_args\fP. -.sp -.LP -.eM -.PN XtAddConverter -is equivalent in function to -.PN XtSetTypeConverter -with \fIcache_type\fP equal to -.PN XtCacheAll -for old-format type converters. It has been superseded by -.PN XtSetTypeConverter . -.sp -.sM -.FD 0 -void XtAppAddConverter(\fIapp_context\fP, \fIfrom_type\fP, \fIto_type\fP, \ -\fIconverter\fP, \fIconvert_args\fP, \fInum_args\fP) -.br - XtAppContext \fIapp_context\fP; -.br - String \fIfrom_type\fP; -.br - String \fIto_type\fP; -.br - XtConverter \fIconverter\fP; -.br - XtConvertArgList \fIconvert_args\fP; -.br - Cardinal \fInum_args\fP; -.FN -.IP \fIapp_context\fP 1i -Specifies the application context. -.IP \fIfrom_type\fP 1i -Specifies the source type. -.IP \fIto_type\fP 1i -Specifies the destination type. -.IP \fIconverter\fP 1i -Specifies the type converter procedure. -.IP \fIconvert_args\fP 1i -Specifies how to compute the additional arguments to the converter, or NULL. -.IP \fInum_args\fP 1i -Specifies the number of entries in \fIconvert_args\fP. -.LP -.eM -.PN XtAppAddConverter -is equivalent in function to -.PN XtAppSetTypeConverter -with \fIcache_type\fP equal to -.PN XtCacheAll -for old-format type converters. It has been superseded by -.PN XtAppSetTypeConverter . -.sp -.LP -To invoke resource conversions, a client may use -.PN XtConvert -or, for old-format converters only, -.PN XtDirectConvert . -.LP -.IN "XtConvert" "" "@DEF@" -.sM -.FD 0 -void XtConvert(\fIw\fP, \fIfrom_type\fP, \fIfrom\fP, \fIto_type\fP, \ -\fIto_return\fP) -.br - Widget \fIw\fP; -.br - String \fIfrom_type\fP; -.br - XrmValuePtr \fIfrom\fP; -.br - String \fIto_type\fP; -.br - XrmValuePtr \fIto_return\fP; -.FN -.IP \fIw\fP 1i -Specifies the widget to use for additional arguments, if any are -needed. -.IP \fIfrom_type\fP 1i -Specifies the source type. -.IP \fIfrom\fP 1i -Specifies the value to be converted. -.IP \fIto_type\fP 1i -Specifies the destination type. -.IP \fIto_return\fP 1i -Returns the converted value. -.LP -.IN "XtDirectConvert" "" "@DEF@" -.FD 0 -void XtDirectConvert(\fIconverter\fP, \fIargs\fP, \fInum_args\fP, \fIfrom\fP, \ -\fIto_return\fP) -.br - XtConverter \fIconverter\fP; -.br - XrmValuePtr \fIargs\fP; -.br - Cardinal \fInum_args\fP; -.br - XrmValuePtr \fIfrom\fP; -.br - XrmValuePtr \fIto_return\fP; -.FN -.IP \fIconverter\fP 1i -Specifies the conversion procedure to be called. -.IP \fIargs\fP 1i -Specifies the argument list that contains the additional arguments -needed to perform the conversion (often NULL). -.IP \fInum_args\fP 1i -Specifies the number of entries in \fIargs\fP. -.IP \fIfrom\fP 1i -Specifies the value to be converted. -.IP \fIto_return\fP 1i -Returns the converted value. -.LP -.eM -The -.PN XtConvert -function looks up the type converter registered to convert \fIfrom_type\fP -to \fIto_type\fP, computes any additional arguments needed, and then calls -.PN XtDirectConvert -or -.PN XtCallConverter . -The -.PN XtDirectConvert -function looks in the converter cache to see if this conversion procedure -has been called with the specified arguments. -If so, it returns a descriptor for information stored in the cache; -otherwise, it calls the converter and enters the result in the cache. -.LP -Before calling the specified converter, -.PN XtDirectConvert -sets the return value size to zero and the return value address to NULL. -To determine if the conversion was successful, -the client should check \fIto_return.addr\fP for non-NULL. -The data returned by -.PN XtConvert -must be copied immediately by the caller, -as it may point to static data in the type converter. -.LP -.PN XtConvert -has been replaced by -.PN XtConvertAndStore , -and -.PN XtDirectConvert -has been superseded by -.PN XtCallConverter . -.sp -.LP -To deallocate a shared GC when it is no longer needed, use -.PN XtDestroyGC . -.LP -.IN "XtDestroyGC" "" "@DEF@" -.sM -.FD 0 -void XtDestroyGC(\fIw\fP, \fIgc\fP) -.br - Widget \fIw\fP; -.br - GC \fIgc\fP; -.FN -.IP \fIw\fP 1i -Specifies any object on the display for which the shared GC was -created. \*(oI -.IP \fIgc\fP 1i -Specifies the shared GC to be deallocated. -.LP -.eM -References to sharable GCs are counted and a free request is generated to the -server when the last user of a given GC destroys it. -Note that some earlier versions of -.PN XtDestroyGC -had only a \fIgc\fP argument. -Therefore, this function is not very portable, -and you are encouraged to use -.PN XtReleaseGC -instead. -.sp -.LP -To declare an action table in the default application context -and register it with the translation manager, use -.PN XtAddActions . -.LP -.IN "XtAddActions" "" "@DEF@" -.sM -.FD 0 -void XtAddActions(\fIactions\fP, \fInum_actions\fP) -.br - XtActionList \fIactions\fP; -.br - Cardinal \fInum_actions\fP; -.FN -.IP \fIactions\fP 1i -Specifies the action table to register. -.IP \fInum_actions\fP 1i -Specifies the number of entries in \fIactions\fP. -.LP -.eM -If more than one action is registered with the same name, -the most recently registered action is used. -If duplicate actions exist in an action table, -the first is used. -The \*(xI register an action table for -.PN XtMenuPopup -and -.PN XtMenuPopdown -as part of \*(tk initialization. -This routine has been replaced by -.PN XtAppAddActions . -.PN XtInitialize -must be called before using this routine. -.sp -.LP -To set the \*(xI selection timeout in the default application context, use -.PN XtSetSelectionTimeout . -.LP -.IN "XtSetSelectionTimeout" "" "@DEF@" -.sM -.FD 0 -void XtSetSelectionTimeout(\fItimeout\fP) -.br - unsigned long \fItimeout\fP; -.FN -.IP \fItimeout\fP 1i -Specifies the selection timeout in milliseconds. -This routine has been replaced by -.PN XtAppSetSelectionTimeout . -.PN XtInitialize -must be called before using this routine. -.LP -.eM -.sp -.LP -To get the current selection timeout value in the default application -context, use -.PN XtGetSelectionTimeout . -.LP -.IN "XtGetSelectionTimeout" "" "@DEF@" -.sM -.FD 0 -unsigned long XtGetSelectionTimeout() -.FN -.LP -.eM -The selection timeout is the time within which the two communicating -applications must respond to one another. -If one of them does not respond within this interval, -the \*(xI abort the selection request. -.LP -This routine has been replaced by -.PN XtAppGetSelectionTimeout . -.PN XtInitialize -must be called before using this routine. -.sp -.LP -To obtain the global error database (for example, to merge with -an application- or widget-specific database), use -.PN XtGetErrorDatabase . -.LP -.IN "XtGetErrorDatabase" "" "@DEF@" -.sM -.FD 0 -XrmDatabase *XtGetErrorDatabase() -.FN -.LP -.eM -The -.PN XtGetErrorDatabase -function returns the address of the error database. -The \*(xI do a lazy binding of the error database and do not merge in the -database file until the first call to -.PN XtGetErrorDatbaseText . -This routine has been replaced by -.PN XtAppGetErrorDatabase . -.sp -.LP -An error message handler can obtain the error database text for an -error or a warning by calling -.PN XtGetErrorDatabaseText . -.LP -.IN "XtGetErrorDatabaseText" "" "@DEF@" -.sM -.FD 0 -void XtGetErrorDatabaseText(\fIname\fP, \fItype\fP, \fIclass\fP, \ -\fIdefault\fP, \fIbuffer_return\fP, \fInbytes\fP) -.br - String \fIname\fP, \fItype\fP, \fIclass\fP; -.br - String \fIdefault\fP; -.br - String \fIbuffer_return\fP; -.br - int \fInbytes\fP; -.FN -.IP \fIname\fP 1i -.br -.ns -.IP \fItype\fP 1i -Specify the name and type that are concatenated to form the resource name -of the error message. -.IP \fIclass\fP 1i -Specifies the resource class of the error message. -.IP \fIdefault\fP 1i -Specifies the default message to use if an error database entry is not found. -.IP \fIbuffer_return\fP 1i -Specifies the buffer into which the error message is to be returned. -.IP \fInbytes\fP 1i -Specifies the size of the buffer in bytes. -.LP -.eM -The -.PN XtGetErrorDatabaseText -returns the appropriate message from the error database -associated with the default application context -or returns the specified default message if one is not found in the -error database. -To form the full resource name and class when querying the database, -the \fIname\fP and \fItype\fP are concatenated with a single ``.'' -between them and the \fIclass\fP is concatenated with itself with a -single ``.'' if it does not already contain a ``.''. -This routine has been superseded by -.PN XtAppGetErrorDatabaseText . -.sp -.LP -To register a procedure to be called on fatal error conditions, use -.PN XtSetErrorMsgHandler . -.LP -.IN "XtSetErrorMsgHandler" "" "@DEF@" -.sM -.FD 0 -void XtSetErrorMsgHandler(\fImsg_handler\fP) -.br - XtErrorMsgHandler \fImsg_handler\fP; -.FN -.IP \fImsg_handler\fP 1i -Specifies the new fatal error procedure, which should not return. -.LP -.eM -The default error handler provided by the \*(xI constructs a -string from the error resource database and calls -.PN XtError . -Fatal error message handlers should not return. -If one does, -subsequent \*(xI behavior is undefined. -This routine has been superseded by -.PN XtAppSetErrorMsgHandler . -.sp -.LP -To call the high-level error handler, use -.PN XtErrorMsg . -.LP -.IN "XtErrorMsg" "" "@DEF@" -.sM -.FD 0 -void XtErrorMsg(\fIname\fP, \fItype\fP, \fIclass\fP, \fIdefault\fP, \ -\fIparams\fP, \fInum_params\fP) -.br - String \fIname\fP; -.br - String \fItype\fP; -.br - String \fIclass\fP; -.br - String \fIdefault\fP; -.br - String *\fIparams\fP; -.br - Cardinal *\fInum_params\fP; -.FN -.IP \fIname\fP 1i -Specifies the general kind of error. -.IP \fItype\fP 1i -Specifies the detailed name of the error. -.IP \fIclass\fP 1i -Specifies the resource class. -.IP \fIdefault\fP 1i -Specifies the default message to use if an error database entry is not found. -.IP \fIparams\fP 1i -Specifies a pointer to a list of values to be stored in the message. -.IP \fInum_params\fP 1i -Specifies the number of entries in \fIparams\fP. -.LP -.eM -This routine has been superseded by -.PN XtAppErrorMsg . -.sp -.LP -To register a procedure to be called on nonfatal error conditions, use -.PN XtSetWarningMsgHandler . -.LP -.IN "XtSetWarningMsgHandler" "" "@DEF@" -.sM -.FD 0 -void XtSetWarningMsgHandler(\fImsg_handler\fP) -.br - XtErrorMsgHandler \fImsg_handler\fP; -.FN -.IP \fImsg_handler\fP 1i -Specifies the new nonfatal error procedure, which usually returns. -.LP -.eM -The default warning handler provided by the \*(xI constructs a string -from the error resource database and calls -.PN XtWarning . -This routine has been superseded by -.PN XtAppSetWarningMsgHandler . -.sp -.LP -To call the installed high-level warning handler, use -.PN XtWarningMsg . -.LP -.IN "XtWarningMsg" "" "@DEF@" -.sM -.FD 0 -void XtWarningMsg(\fIname\fP, \fItype\fP, \fIclass\fP, \fIdefault\fP, \ -\fIparams\fP, \fInum_params\fP) -.br - String \fIname\fP; -.br - String \fItype\fP; -.br - String \fIclass\fP; -.br - String \fIdefault\fP; -.br - String *\fIparams\fP; -.br - Cardinal *\fInum_params\fP; -.FN -.IP \fIname\fP 1i -Specifies the general kind of error. -.IP \fItype\fP 1i -Specifies the detailed name of the error. -.IP \fIclass\fP 1i -Specifies the resource class. -.IP \fIdefault\fP 1i -Specifies the default message to use if an error database entry is not found. -.IP \fIparams\fP 1i -Specifies a pointer to a list of values to be stored in the message. -.IP \fInum_params\fP 1i -Specifies the number of entries in \fIparams\fP. -.LP -.eM -This routine has been superseded by -.PN XtAppWarningMsg . -.sp -.LP -To register a procedure to be called on fatal error conditions, use -.PN XtSetErrorHandler . -.LP -.IN "XtSetErrorHandler" "" "@DEF@" -.sM -.FD 0 -void XtSetErrorHandler(\fIhandler\fP) -.br - XtErrorHandler \fIhandler\fP; -.FN -.IP \fIhandler\fP 1i -Specifies the new fatal error procedure, which should not return. -.LP -.eM -The default error handler provided by the \*(xI is -.PN _XtError . -On POSIX-based systems, -it prints the message to standard error and terminates the application. -Fatal error message handlers should not return. -If one does, -subsequent \*(tk behavior is undefined. -This routine has been superseded by -.PN XtAppSetErrorHandler . -.sp -.LP -To call the installed fatal error procedure, use -.PN XtError . -.LP -.IN "XtError" "" "@DEF@" -.sM -.FD 0 -void XtError(\fImessage\fP) -.br - String \fImessage\fP; -.FN -.IP \fImessage\fP 1i -Specifies the message to be reported. -.LP -.eM -Most programs should use -.PN XtAppErrorMsg , -not -.PN XtError , -to provide for customization and internationalization of error -messages. This routine has been superseded by -.PN XtAppError . -.sp -.LP -To register a procedure to be called on nonfatal error conditions, use -.PN XtSetWarningHandler . -.LP -.IN "XtSetWarningHandler" "" "@DEF@" -.sM -.FD 0 -void XtSetWarningHandler(\fIhandler\fP) -.br - XtErrorHandler \fIhandler\fP; -.FN -.IP \fIhandler\fP 1i -Specifies the new nonfatal error procedure, which usually returns. -.LP -.eM -The default warning handler provided by the \*(xI is -.PN _XtWarning . -On POSIX-based systems, -it prints the message to standard error and returns to the caller. -This routine has been superseded by -.PN XtAppSetWarningHandler . -.sp -.LP -To call the installed nonfatal error procedure, use -.PN XtWarning . -.LP -.IN "XtWarning" "" "@DEF@" -.sM -.FD 0 -void XtWarning(\fImessage\fP) -.br - String \fImessage\fP; -.FN -.IP \fImessage\fP 1i -Specifies the nonfatal error message to be reported. -.LP -.eM -Most programs should use -.PN XtAppWarningMsg , -not -.PN XtWarning , -to provide for customization and internationalization of warning messages. -This routine has been superseded by -.PN XtAppWarning . diff --git a/doc/xorg-docs/specs/Xt/appD b/doc/xorg-docs/specs/Xt/appD deleted file mode 100644 index 5322ff97b..000000000 --- a/doc/xorg-docs/specs/Xt/appD +++ /dev/null @@ -1,602 +0,0 @@ -.\" $Xorg: appD,v 1.3 2000/08/17 19:42:48 cpqbld Exp $ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" Digital Equipment Corporation, Maynard, Massachusetts. -.\" -.\" Permission to use, copy, modify and distribute this documentation for any -.\" purpose and without fee is hereby granted, provided that the above copyright -.\" notice appears in all copies and that both that copyright notice and this -.\" permission notice appear in supporting documentation, and that the name of -.\" Digital not be used in in advertising or publicity pertaining -.\" to distribution of the software without specific, written prior permission. -.\" Digital makes no representations about the suitability of the -.\" software described herein for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -.bp -\& -.sp 1 -.ce 3 -\s+1\fBAppendix D\fP\s-1 - -\s+1\fBIntrinsics Error Messages\fP\s-1 -.sp 2 -.LP -.XS -\fBAppendix D \(em Intrinsics Error Messages\fP -.XE -.LP -All \*(xI errors and warnings have class -``XtToolkitError''. -The following two tables summarize the common errors and warnings that can be -generated by the \*(xI. -Additional implementation-dependent messages are permitted. -.SH -Error Messages -.LP -.ps 9 -.nr PS 9 -.TS -lw(1.3i) lw(1.4i) lw(2.9i). -_ -.sp 6p -Name Type Default Message -.sp 6p -_ -.sp 6p -allocError calloc T{ -Cannot perform calloc -T} -allocError malloc T{ -Cannot perform malloc -T} -allocError realloc T{ -Cannot perform realloc -T} -internalError xtMakeGeometryRequest T{ -internal error; ShellClassExtension is NULL -T} -invalidArgCount xtGetValues T{ -Argument count > 0 on NULL argument list in XtGetValues -T} -invalidArgCount xtSetValues T{ -Argument count > 0 on NULL argument list in XtSetValues -T} -invalidClass applicationShellInsertChild T{ -ApplicationShell does not accept RectObj children; ignored -T} -invalidClass constraintSetValue T{ -Subclass of Constraint required in CallConstraintSetValues -T} -invalidClass xtAppCreateShell T{ -XtAppCreateShell requires non-NULL widget class -T} -invalidClass xtCreatePopupShell T{ -XtCreatePopupShell requires non-NULL widget class -T} -invalidClass xtCreateWidget T{ -XtCreateWidget requires non-NULL widget class -T} -invalidClass xtPopdown T{ -XtPopdown requires a subclass of shellWidgetClass -T} -invalidClass xtPopup T{ -XtPopup requires a subclass of shellWidgetClass -T} -invalidDimension xtCreateWindow T{ -Widget %s has zero width and/or height -T} -invalidDimension shellRealize T{ -Shell widget %s has zero width and/or height -T} -invalidDisplay xtInitialize T{ -Can't open display: %s -T} -invalidGetValues xtGetValues T{ -NULL ArgVal in XtGetValues -T} -invalidExtension shellClassPartInitialize T{ -widget class %s has invalid ShellClassExtension record -T} -invalidExtension xtMakeGeometryRequest T{ -widget class %s has invalid ShellClassExtension record -T} -invalidGeometryManager xtMakeGeometryRequest T{ -XtMakeGeometryRequest - parent has no geometry manager -T} -invalidParameter xtAddInput T{ -invalid condition passed to XtAddInput -T} -invalidParameter xtAddInput T{ -invalid condition passed to XtAppAddInput -T} -invalidParent xtChangeManagedSet T{ -Attempt to manage a child when parent is not Composite -T} -invalidParent xtChangeManagedSet T{ -Attempt to unmanage a child when parent is not Composite -T} -invalidParent xtCreatePopupShell T{ -XtCreatePopupShell requires non-NULL parent -T} -invalidParent xtCreateWidget T{ -XtCreateWidget requires non-NULL parent -T} -invalidParent xtMakeGeometryRequest T{ -non-shell has no parent in XtMakeGeometryRequest -T} -invalidParent xtMakeGeometryRequest T{ -XtMakeGeometryRequest - parent not composite -T} -invalidParent xtManageChildren T{ -Attempt to manage a child when parent is not Composite -T} -invalidParent xtUnmanageChildren T{ -Attempt to unmanage a child when parent is not Composite -T} -invalidProcedure inheritanceProc T{ -Unresolved inheritance operation -T} -invalidProcedure realizeProc T{ -No realize class procedure defined -T} -invalidWindow eventHandler T{ -Event with wrong window -T} -missingWidget fetchDisplayArg T{ -FetchDisplayArg called without a widget to reference -T} -nonWidget xtCreateWidget T{ -attempt to add non-widget child "%s" to parent "%s" which supports only widgets -T} -noPerDisplay closeDisplay T{ -Couldn't find per display information -T} -noPerDisplay getPerDisplay T{ -Couldn't find per display information -T} -noSelectionProperties freeSelectionProperty T{ -internal error: no selection property context for display -T} -noWidgetAncestor windowedAncestor T{ -Object "%s" does not have windowed ancestor -T} -nullDisplay xtRegisterExtensionSelector T{ -XtRegisterExtensionSelector requires a non-NULL display -T} -nullProc insertChild T{ -"%s" parent has NULL insert_child method -T} -r2versionMismatch widget T{ -Widget class %s must be re-compiled. -T} -R3versionMismatch widget T{ -Widget class %s must be re-compiled. -T} -R4orR5versionMismatch widget T{ -Widget class %s must be re-compiled. -T} -rangeError xtRegisterExtensionSelector T{ -Attempt to register multiple selectors for one extension event type -T} -sessionManagement SmcOpenConnection T{ -Tried to connect to session manager, %s -T} -subclassMismatch xtCheckSubclass T{ -Widget class %s found when subclass of %s expected: %s -T} -.sp 6p -_ -.TE -.ps 11 -.nr PS 11 -.SH -Warning Messages -.LP -.ps 9 -.nr PS 9 -.TS -lw(1.3i) lw(1.4i) lw(2.9i). -_ -.sp 6p -Name Type Default Message -.sp 6p -_ -.sp 6p -ambiguousParent xtChangeManagedSet T{ -Not all children have same parent -T} -ambiguousParent xtManageChildren T{ -Not all children have same parent in XtManageChildren -T} -ambiguousParent xtUnmanageChildren T{ -Not all children have same parent in XtUnmanageChildren -T} -badFormat xtGetSelectionValue T{ -Selection owner returned type INCR property with format != 32 -T} -badGeometry shellRealize T{ -Shell widget "%s" has an invalid geometry specification: "%s" -T} -badValue cvtStringToPixel T{ -Color name "%s" is not defined -T} -communicationError select T{ -Select failed; error code %s -T} -conversionError string T{ -Cannot convert string "%s" to type %s -T} -conversionError stringToVisual T{ -Cannot find Visual of class %s for display %s -T} -conversionFailed xtConvertVarToArgList T{ -Type conversion failed -T} -conversionFailed xtGetTypedArg T{ -Type conversion (%s to %s) failed for widget '%s' -T} -displayError invalidDisplay T{ -Can't find display structure -T} -grabError xtAddGrab T{ -XtAddGrab requires exclusive grab if spring_loaded is TRUE -T} -grabError xtRemoveGrab T{ -XtRemoveGrab asked to remove a widget not on the list -T} -.TE -.TS -lw(1.3i) lw(1.4i) lw(2.9i). -initializationError xtInitialize T{ -Initializing Resource Lists twice -T} -insufficientSpace xtGetTypedArg T{ -Insufficient space for converted type '%s' in widget '%s' -T} -internalError shell T{ -Shell's window manager interaction is broken -T} -invalidAddressMode computeArgs T{ -Conversion arguments for widget '%s' contain an unsupported address mode -T} -invalidArgCount getResources T{ -argument count > 0 on NULL argument list -T} -invalidCallbackList xtAddCallback T{ -Cannot find callback list in XtAddCallback -T} -invalidCallbackList xtAddCallback T{ -Cannot find callback list in XtAddCallbacks -T} -invalidCallbackList xtCallCallback T{ -Cannot find callback list in XtCallCallbacks -T} -invalidCallbackList xtRemoveAllCallback T{ -Cannot find callback list in XtRemoveAllCallbacks -T} -invalidCallbackList xtRemoveCallback T{ -Cannot find callback list in XtRemoveCallbacks -T} -invalidChild xtChangeManagedSet T{ -Null child passed to UnmanageChildren -T} -invalidChild xtManageChildren T{ -null child passed to ManageChildren -T} -invalidChild xtManageChildren T{ -null child passed to XtManageChildren -T} -invalidChild xtUnmanageChildren T{ -Null child passed to XtUnmanageChildren -T} -invalidChild xtUnmanageChildren T{ -Null child found in argument list to unmanage -T} -invalidDepth setValues T{ -Can't change widget depth -T} -invalidExtension xtCreateWidget T{ -widget "%s" class %s has invalid CompositeClassExtension record -T} -invalidExtension xtCreateWidget T{ -widget class %s has invalid ConstraintClassExtension record -T} -invalidGrab ungrabKeyOrButton T{ -Attempt to remove nonexistent passive grab -T} -invalidGrabKind xtPopup T{ -grab kind argument has invalid value; XtGrabNone assumed -T} -invalidParameters freeTranslations T{ -Freeing XtTranslations requires no extra arguments -T} -invalidParameters mergeTranslations T{ -MergeTM to TranslationTable needs no extra arguments -T} -invalidParameters xtMenuPopdown T{ -XtMenuPopdown called with num_params != 0 or 1 -T} -invalidParameters xtMenuPopupAction T{ -MenuPopup wants exactly one argument -T} -invalidParent xtCopyFromParent T{ -CopyFromParent must have non-NULL parent -T} -invalidPopup xtMenuPopup T{ -Can't find popup widget "%s" in XtMenuPopup -T} -invalidPopup xtMenuPopdown T{ -Can't find popup in widget "%s" in XtMenuPopdown -T} -invalidPopup unsupportedOperation T{ -Pop-up menu creation is only supported on ButtonPress, KeyPress or EnterNotify events. -T} -invalidPopup unsupportedOperation T{ -Pop-up menu creation is only supported on Button, Key or EnterNotify events. -T} -invalidProcedure deleteChild T{ -null delete_child procedure for class %s in XtDestroy -T} -invalidProcedure inputHandler T{ -XtRemoveInput: Input handler not found -T} -invalidProcedure set_values_almost T{ -set_values_almost procedure shouldn't be NULL -T} -invalidResourceCount getResources T{ -resource count > 0 on NULL resource list -T} -invalidResourceName computeArgs T{ -Cannot find resource name %s as argument to conversion -T} -invalidShell xtTranslateCoords T{ -Widget has no shell ancestor -T} -invalidSizeOverride xtDependencies T{ -Representation size %d must match superclass's to override %s -T} -missingCharsetList cvtStringToFontSet T{ -Missing charsets in String to FontSet conversion -T} -noActionProc xtCallActionProc T{ -No action proc named "%s" is registered for widget "%s" -T} -noColormap cvtStringToPixel T{ -Cannot allocate colormap entry for "%s" -T} -noFont cvtStringToFont T{ -Unable to load any usable ISO8859-1 font -T} -noFont cvtStringToFontSet T{ -Unable to load any usable fontset -T} -noFont cvtStringToFontStruct T{ -Unable to load any usable ISO8859-1 font -T} -.TE -.TS -lw(1.3i) lw(1.4i) lw(2.9i). -notInConvertSelection xtGetSelectionRequest T{ -XtGetSelectionRequest or XtGetSelectionParameters called for widget "%s" outside of ConvertSelection proc -T} -notRectObj xtChangeManagedSet T{ -child "%s", class %s is not a RectObj -T} -notRectObj xtManageChildren T{ -child "%s", class %s is not a RectObj -T} -nullWidget xtConvertVarToArgList T{ -XtVaTypedArg conversion needs non-NULL widget handle -T} -r3versionMismatch widget T{ -Shell Widget class %s binary compiled for R3 -T} -translationError nullTable T{ -Can't remove accelerators from NULL table -T} -translationError nullTable T{ -Tried to remove nonexistent accelerators -T} -translationError ambiguousActions T{ -Overriding earlier translation manager actions. -T} -translationError newActions T{ -New actions are:%s -T} -translationError nullTable T{ -table to (un)merge must not be null -T} -translationError nullTable T{ -Can't translate event through NULL table -T} -translationError oldActions T{ -Previous entry was: %s %s -T} -translationError unboundActions T{ -Actions not found: %s -T} -translationError xtTranslateInitialize T{ -Initializing Translation manager twice. -T} -translationParseError missingComma T{ - ... possibly due to missing ',' in event sequence. -T} -translationParseError nonLatin1 T{ - ... probably due to non-Latin1 character in quoted string -T} -translationParseError parseError T{ -translation table syntax error: %s -T} -translationParseError parseString T{ -Missing '"'. -T} -translationParseError showLine T{ - ... found while parsing '%s' -T} -typeConversionError noConverter T{ -No type converter registered for '%s' to '%s' conversion. -T} -unknownType xtConvertVarToArgList T{ -Unable to find type of resource for conversion -T} -unknownType xtGetTypedArg T{ -Unable to find type of resource for conversion -T} -versionMismatch widget T{ -Widget class %s version mismatch (recompilation needed):\\n widget %d vs. intrinsics %d. -T} -wrongParameters cvtIntOrPixelToXColor T{ -Pixel to color conversion needs screen and colormap arguments -T} -wrongParameters cvtIntToBool T{ -Integer to Bool conversion needs no extra arguments -T} -wrongParameters cvtIntToBoolean T{ -Integer to Boolean conversion needs no extra arguments -T} -wrongParameters cvtIntToFloat T{ -Integer to Float conversion needs no extra arguments -T} -wrongParameters cvtIntToFont T{ -Integer to Font conversion needs no extra arguments -T} -wrongParameters cvtIntToPixel T{ -Integer to Pixel conversion needs no extra arguments -T} -wrongParameters cvtIntToPixmap T{ -Integer to Pixmap conversion needs no extra arguments -T} -wrongParameters cvtIntToShort T{ -Integer to Short conversion needs no extra arguments -T} -wrongParameters cvtIntToUnsignedChar T{ -Integer to UnsignedChar conversion needs no extra arguments -T} -wrongParameters cvtStringToAcceleratorTable T{ -String to AcceleratorTable conversion needs no extra arguments -T} -wrongParameters cvtStringToAtom T{ -String to Atom conversion needs Display argument -T} -wrongParameters cvtStringToBool T{ -String to Bool conversion needs no extra arguments -T} -wrongParameters cvtStringToBoolean T{ -String to Boolean conversion needs no extra arguments -T} -wrongParameters cvtStringToCommandArgArray T{ -String to CommandArgArray conversion needs no extra arguments -T} -wrongParameters cvtStringToCursor T{ -String to cursor conversion needs display argument -T} -wrongParameters cvtStringToDimension T{ -String to Dimension conversion needs no extra arguments -T} -wrongParameters cvtStringToDirectoryString T{ -String to DirectoryString conversion needs no extra arguments -T} -.TE -.TS -lw(1.3i) lw(1.4i) lw(2.9i). -wrongParameters cvtStringToDisplay T{ -String to Display conversion needs no extra arguments -T} -wrongParameters cvtStringToFile T{ -String to File conversion needs no extra arguments -T} -wrongParameters cvtStringToFloat T{ -String to Float conversion needs no extra arguments -T} -wrongParameters cvtStringToFont T{ -String to font conversion needs display argument -T} -wrongParameters cvtStringToFontSet T{ -String to FontSet conversion needs display and locale arguments -T} -wrongParameters cvtStringToFontStruct T{ -String to font conversion needs display argument -T} -wrongParameters cvtStringToGravity T{ -String to Gravity conversion needs no extra arguments -T} -wrongParameters cvtStringToInitialState T{ -String to InitialState conversion needs no extra arguments -T} -wrongParameters cvtStringToInt T{ -String to Integer conversion needs no extra arguments -T} -wrongParameters cvtStringToPixel T{ -String to pixel conversion needs screen and colormap arguments -T} -wrongParameters cvtStringToRestartStyle T{ -String to RestartStyle conversion needs no extra arguments -T} -wrongParameters cvtStringToShort T{ -String to Integer conversion needs no extra arguments -T} -wrongParameters cvtStringToTranslationTable T{ -String to TranslationTable conversion needs no extra arguments -T} -wrongParameters cvtStringToUnsignedChar T{ -String to Integer conversion needs no extra arguments -T} -wrongParameters cvtStringToVisual T{ -String to Visual conversion needs screen and depth arguments -T} -wrongParameters cvtXColorToPixel T{ -Color to Pixel conversion needs no extra arguments -T} -wrongParameters freeCursor T{ -Free Cursor requires display argument -T} -wrongParameters freeDirectoryString T{ -Free Directory String requires no extra arguments -T} -wrongParameters freeFile T{ -Free File requires no extra arguments -T} -wrongParameters freeFont T{ -Free Font needs display argument -T} -wrongParameters freeFontSet T{ -FreeFontSet needs display and locale arguments -T} -wrongParameters freeFontStruct T{ -Free FontStruct requires display argument -T} -wrongParameters freePixel T{ -Freeing a pixel requires screen and colormap arguments -T} -.sp 6p -_ -.TE -.ps 11 -.nr PS 11 diff --git a/doc/xorg-docs/specs/Xt/appE b/doc/xorg-docs/specs/Xt/appE deleted file mode 100644 index 1ce7270bf..000000000 --- a/doc/xorg-docs/specs/Xt/appE +++ /dev/null @@ -1,606 +0,0 @@ -.\" $Xorg: appE,v 1.3 2000/08/17 19:42:48 cpqbld Exp $ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" Digital Equipment Corporation, Maynard, Massachusetts. -.\" -.\" Permission to use, copy, modify and distribute this documentation for any -.\" purpose and without fee is hereby granted, provided that the above copyright -.\" notice appears in all copies and that both that copyright notice and this -.\" permission notice appear in supporting documentation, and that the name of -.\" Digital not be used in in advertising or publicity pertaining -.\" to distribution of the software without specific, written prior permission. -.\" Digital makes no representations about the suitability of the -.\" software described herein for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -.bp -\& -.sp 1 -.ce 3 -\s+1\fBAppendix E\fP\s-1 - -\s+1\fB\fBDefined Strings\fP\s-1 -.sp 2 -.LP -.XS -\fBAppendix E \(em Defined Strings\fP -.XE -.LP -The -.PN StringDefs.h -header file contains definitions for the following resource name, -class, and representation type symbolic constants. -.IN "String Constants" "resource names" -.LP -Resource names: -.TS -lw(2i) lw(2.5i). -_ -.sp 6p -Symbol Definition -.sp 6p -_ -.sp 6p -XtNaccelerators "accelerators" -XtNallowHoriz "allowHoriz" -XtNallowVert "allowVert" -XtNancestorSensitive "ancestorSensitive" -XtNbackground "background" -XtNbackgroundPixmap "backgroundPixmap" -XtNbitmap "bitmap" -XtNborder "borderColor" -XtNborderColor "borderColor" -XtNborderPixmap "borderPixmap" -XtNborderWidth "borderWidth" -XtNcallback "callback" -XtNchangeHook "changeHook" -XtNchildren "children" -XtNcolormap "colormap" -XtNconfigureHook "configureHook" -XtNcreateHook "createHook" -XtNdepth "depth" -XtNdestroyCallback "destroyCallback" -XtNdestroyHook "destroyHook" -XtNeditType "editType" -XtNfile "file" -XtNfont "font" -XtNfontSet "fontSet" -XtNforceBars "forceBars" -XtNforeground "foreground" -XtNfunction "function" -XtNgeometryHook "geometryHook" -XtNheight "height" -XtNhighlight "highlight" -XtNhSpace "hSpace" -XtNindex "index" -XtNinitialResourcesPersistent "initialResourcesPersistent" -XtNinnerHeight "innerHeight" -XtNinnerWidth "innerWidth" -XtNinnerWindow "innerWindow" -XtNinsertPosition "insertPosition" -XtNinternalHeight "internalHeight" -XtNinternalWidth "internalWidth" -XtNjumpProc "jumpProc" -XtNjustify "justify" -XtNknobHeight "knobHeight" -XtNknobIndent "knobIndent" -XtNknobPixel "knobPixel" -XtNknobWidth "knobWidth" -XtNlabel "label" -XtNlength "length" -XtNlowerRight "lowerRight" -XtNmappedWhenManaged "mappedWhenManaged" -XtNmenuEntry "menuEntry" -XtNname "name" -XtNnotify "notify" -XtNnumChildren "numChildren" -XtNnumShells "numShells" -XtNorientation "orientation" -XtNparameter "parameter" -XtNpixmap "pixmap" -XtNpopupCallback "popupCallback" -XtNpopdownCallback "popdownCallback" -XtNresize "resize" -XtNreverseVideo "reverseVideo" -XtNscreen "screen" -XtNscrollProc "scrollProc" -XtNscrollDCursor "scrollDCursor" -XtNscrollHCursor "scrollHCursor" -XtNscrollLCursor "scrollLCursor" -XtNscrollRCursor "scrollRCursor" -XtNscrollUCursor "scrollUCursor" -XtNscrollVCursor "scrollVCursor" -XtNselection "selection" -XtNselectionArray "selectionArray" -XtNsensitive "sensitive" -XtNsession "session" -XtNshells "shells" -XtNshown "shown" -XtNspace "space" -XtNstring "string" -XtNtextOptions "textOptions" -XtNtextSink "textSink" -XtNtextSource "textSource" -XtNthickness "thickness" -XtNthumb "thumb" -XtNthumbProc "thumbProc" -XtNtop "top" -XtNtranslations "translations" -XtNunrealizeCallback "unrealizeCallback" -XtNupdate "update" -XtNuseBottom "useBottom" -XtNuseRight "useRight" -XtNvalue "value" -XtNvSpace "vSpace" -XtNwidth "width" -XtNwindow "window" -XtNx "x" -XtNy "y" -.sp 6p -_ -.TE -.sp 6p -.IN "String Constants" "resource classes" -.LP -Resource classes: -.TS -lw(2i) lw(2.5i). -_ -.sp 6p -Symbol Definition -.sp 6p -_ -.sp 6p -XtCAccelerators "Accelerators" -XtCBackground "Background" -XtCBitmap "Bitmap" -XtCBoolean "Boolean" -XtCBorderColor "BorderColor" -XtCBorderWidth "BorderWidth" -XtCCallback "Callback" -XtCColormap "Colormap" -XtCColor "Color" -XtCCursor "Cursor" -XtCDepth "Depth" -XtCEditType "EditType" -XtCEventBindings "EventBindings" -XtCFile "File" -XtCFont "Font" -XtCFontSet "FontSet" -XtCForeground "Foreground" -XtCFraction "Fraction" -XtCFunction "Function" -XtCHeight "Height" -XtCHSpace "HSpace" -XtCIndex "Index" -XtCInitialResourcesPersistent "InitialResourcesPersistent" -XtCInsertPosition "InsertPosition" -XtCInterval "Interval" -XtCJustify "Justify" -XtCKnobIndent "KnobIndent" -XtCKnobPixel "KnobPixel" -XtCLabel "Label" -XtCLength "Length" -XtCMappedWhenManaged "MappedWhenManaged" -XtCMargin "Margin" -XtCMenuEntry "MenuEntry" -XtCNotify "Notify" -XtCOrientation "Orientation" -XtCParameter "Parameter" -XtCPixmap "Pixmap" -XtCPosition "Position" -XtCReadOnly "ReadOnly" -XtCResize "Resize" -XtCReverseVideo "ReverseVideo" -XtCScreen "Screen" -XtCScrollProc "ScrollProc" -XtCScrollDCursor "ScrollDCursor" -XtCScrollHCursor "ScrollHCursor" -XtCScrollLCursor "ScrollLCursor" -XtCScrollRCursor "ScrollRCursor" -XtCScrollUCursor "ScrollUCursor" -XtCScrollVCursor "ScrollVCursor" -XtCSelection "Selection" -XtCSelectionArray "SelectionArray" -XtCSensitive "Sensitive" -XtCSession "Session" -XtCSpace "Space" -XtCString "String" -XtCTextOptions "TextOptions" -XtCTextPosition "TextPosition" -XtCTextSink "TextSink" -XtCTextSource "TextSource" -XtCThickness "Thickness" -XtCThumb "Thumb" -XtCTranslations "Translations" -XtCValue "Value" -XtCVSpace "VSpace" -XtCWidth "Width" -XtCWindow "Window" -XtCX "X" -XtCY "Y" -.sp 6p -_ -.TE -.sp 6p -.IN "String Constants" "representation types" -.LP -Resource representation types: -.TS -lw(2i) lw(2.5i). -_ -.sp 6p -Symbol Definition -.sp 6p -_ -.sp 6p -XtRAcceleratorTable "AcceleratorTable" -XtRAtom "Atom" -XtRBitmap "Bitmap" -XtRBool "Bool" -XtRBoolean "Boolean" -XtRCallback "Callback" -XtRCallProc "CallProc" -XtRCardinal "Cardinal" -XtRColor "Color" -XtRColormap "Colormap" -XtRCommandArgArray "CommandArgArray" -XtRCursor "Cursor" -XtRDimension "Dimension" -XtRDirectoryString "DirectoryString" -XtRDisplay "Display" -XtREditMode "EditMode" -XtREnum "Enum" -XtREnvironmentArray "EnvironmentArray" -XtRFile "File" -XtRFloat "Float" -XtRFont "Font" -XtRFontSet "FontSet" -XtRFontStruct "FontStruct" -XtRFunction "Function" -XtRGeometry "Geometry" -XtRGravity "Gravity" -XtRImmediate "Immediate" -XtRInitialState "InitialState" -XtRInt "Int" -XtRJustify "Justify" -XtRLongBoolean XtRBool -XtRObject "Object" -XtROrientation "Orientation" -XtRPixel "Pixel" -XtRPixmap "Pixmap" -XtRPointer "Pointer" -XtRPosition "Position" -XtRRestartStyle "RestartStyle" -XtRScreen "Screen" -XtRShort "Short" -XtRSmcConn "SmcConn" -XtRString "String" -XtRStringArray "StringArray" -XtRStringTable "StringTable" -XtRUnsignedChar "UnsignedChar" -XtRTranslationTable "TranslationTable" -XtRVisual "Visual" -XtRWidget "Widget" -XtRWidgetClass "WidgetClass" -XtRWidgetList "WidgetList" -XtRWindow "Window" -.sp 6p -_ -.TE -.sp 6p -.LP -Boolean enumeration constants: -.TS -lw(2i) lw(2.5i). -_ -.sp 6p -Symbol Definition -.sp 6p -_ -.sp 6p -XtEoff "off" -XtEfalse "false" -XtEno "no" -XtEon "on" -XtEtrue "true" -XtEyes "yes" -.sp 6p -_ -.TE -.sp 6p -.LP -Orientation enumeration constants: -.TS -lw(2i) lw(2.5i). -_ -.sp 6p -Symbol Definition -.sp 6p -_ -.sp 6p -XtEvertical "vertical" -XtEhorizontal "horizontal" -.sp 6p -_ -.TE -.sp 6p -.LP -Text edit enumeration constants: -.TS -lw(2i) lw(2.5i). -_ -.sp 6p -Symbol Definition -.sp 6p -_ -.sp 6p -XtEtextRead "read" -XtEtextAppend "append" -XtEtextEdit "edit" -.sp 6p -_ -.TE -.sp 6p -.LP -Color enumeration constants: -.TS -lw(2i) lw(2.5i). -_ -.sp 6p -Symbol Definition -.sp 6p -_ -.sp 6p -XtExtdefaultbackground "xtdefaultbackground" -XtExtdefaultforeground "xtdefaultforeground" -.sp 6p -_ -.TE -.sp 6p -.LP -Font constant: -.TS -lw(2i) lw(2.5i). -_ -.sp 6p -Symbol Definition -.sp 6p -_ -.sp 6p -XtExtdefaultfont "xtdefaultfont" -.sp 6p -_ -.TE -.sp 6p -.LP -Hooks for External Agents constants: -.TS -lw(2i) lw(2.5i). -_ -.sp 6p -Symbol Definition -.sp 6p -_ -.sp 6p -XtHcreate "Xtcreate" -XtHsetValues "Xtsetvalues" -XtHmanageChildren "XtmanageChildren" -XtHunmanageChildren "XtunmanageChildren" -XtHmanageSet "XtmanageSet" -XtHunmanageSet "XtunmanageSet" -XtHrealizeWidget "XtrealizeWidget" -XtHunrealizeWidget "XtunrealizeWidget" -XtHaddCallback "XtaddCallback" -XtHaddCallbacks "XtaddCallbacks" -XtHremoveCallback "XtremoveCallback" -XtHremoveCallbacks "XtremoveCallbacks" -XtHremoveAllCallbacks "XtremoveAllCallbacks" -XtHaugmentTranslations "XtaugmentTranslations" -XtHoverrideTranslations "XtoverrideTranslations" -XtHuninstallTranslations "XtuninstallTranslations" -XtHsetKeyboardFocus "XtsetKeyboardFocus" -XtHsetWMColormapWindows "XtsetWMColormapWindows" -XtHmapWidget "XtmapWidget" -XtHunmapWidget "XtunmapWidget" -XtHpopup "Xtpopup" -XtHpopupSpringLoaded "XtpopupSpringLoaded" -XtHpopdown "Xtpopdown" -XtHconfigure "Xtconfigure" -XtHpreGeometry "XtpreGeometry" -XtHpostGeometry "XtpostGeometry" -XtHdestroy "Xtdestroy" -.sp 6p -_ -.TE -.sp 6p -.LP -The -.PN Shell.h -header file contains definitions for the following resource name, -class, and representation type symbolic constants. -.IN "String Constants" "resource names" -.LP -Resource names: -.TS -lw(2i) lw(2.5i). -_ -.sp 6p -Symbol Definition -.sp 6p -_ -.sp 6p -XtNallowShellResize "allowShellResize" -XtNargc "argc" -XtNargv "argv" -XtNbaseHeight "baseHeight" -XtNbaseWidth "baseWidth" -XtNcancelCallback "cancelCallback" -XtNclientLeader "clientLeader" -XtNcloneCommand "cloneCommand" -XtNconnection "connection" -XtNcreatePopupChildProc "createPopupChildProc" -XtNcurrentDirectory "currentDirectory" -XtNdieCallback "dieCallback" -XtNdiscardCommand "discardCommand" -XtNenvironment "environment" -XtNerrorCallback "errorCallback" -XtNgeometry "geometry" -XtNheightInc "heightInc" -XtNiconMask "iconMask" -XtNiconName "iconName" -XtNiconNameEncoding "iconNameEncoding" -XtNiconPixmap "iconPixmap" -XtNiconWindow "iconWindow" -XtNiconX "iconX" -XtNiconY "iconY" -XtNiconic "iconic" -XtNinitialState "initialState" -XtNinput "input" -XtNinteractCallback "interactCallback" -XtNjoinSession "joinSession" -XtNmaxAspectX "maxAspectX" -XtNmaxAspectY "maxAspectY" -XtNmaxHeight "maxHeight" -XtNmaxWidth "maxWidth" -XtNminAspectX "minAspectX" -XtNminAspectY "minAspectY" -XtNminHeight "minHeight" -XtNminWidth "minWidth" -XtNoverrideRedirect "overrideRedirect" -XtNprogramPath "programPath" -XtNresignCommand "resignCommand" -XtNrestartCommand "restartCommand" -XtNrestartStyle "restartStyle" -XtNsaveCallback "saveCallback" -XtNsaveCompleteCallback "saveCompleteCallback" -XtNsaveUnder "saveUnder" -XtNsessionID "sessionID" -XtNshutdownCommand "shutdownCommand" -XtNtitle "title" -XtNtitleEncoding "titleEncoding" -XtNtransient "transient" -XtNtransientFor "transientFor" -XtNurgency "urgency" -XtNvisual "visual" -XtNwaitForWm "waitforwm" -XtNwaitforwm "waitforwm" -XtNwidthInc "widthInc" -XtNwindowGroup "windowGroup" -XtNwindowRole "windowRole" -XtNwinGravity "winGravity" -XtNwmTimeout "wmTimeout" -.sp 6p -_ -.TE -.sp 6p -.IN "String Constants" "resource classes" -.LP -Resource classes: -.TS -lw(2i) lw(2.5i). -_ -.sp 6p -Symbol Definition -.sp 6p -_ -.sp 6p -XtCAllowShellResize "allowShellResize" -XtCArgc "Argc" -XtCArgv "Argv" -XtCBaseHeight "BaseHeight" -XtCBaseWidth "BaseWidth" -XtCClientLeader "ClientLeader" -XtCCloneCommand "CloneCommand" -XtCConnection "Connection" -XtCCreatePopupChildProc "CreatePopupChildProc" -XtCCurrentDirectory "CurrentDirectory" -XtCDiscardCommand "DiscardCommand" -XtCEnvironment "Environment" -XtCGeometry "Geometry" -XtCHeightInc "HeightInc" -XtCIconMask "IconMask" -XtCIconName "IconName" -XtCIconNameEncoding "IconNameEncoding" -XtCIconPixmap "IconPixmap" -XtCIconWindow "IconWindow" -XtCIconX "IconX" -XtCIconY "IconY" -XtCIconic "Iconic" -XtCInitialState "InitialState" -XtCInput "Input" -XtCJoinSession "JoinSession" -XtCMaxAspectX "MaxAspectX" -XtCMaxAspectY "MaxAspectY" -XtCMaxHeight "MaxHeight" -XtCMaxWidth "MaxWidth" -XtCMinAspectX "MinAspectX" -XtCMinAspectY "MinAspectY" -XtCMinHeight "MinHeight" -XtCMinWidth "MinWidth" -XtCOverrideRedirect "OverrideRedirect" -XtCProgramPath "ProgramPath" -XtCResignCommand "ResignCommand" -XtCRestartCommand "RestartCommand" -XtCRestartStyle "RestartStyle" -XtCSaveUnder "SaveUnder" -XtCSessionID "SessionID" -XtCShutdownCommand "ShutdownCommand" -XtCTitle "Title" -XtCTitleEncoding "TitleEncoding" -XtCTransient "Transient" -XtCTransientFor "TransientFor" -XtCUrgency "Urgency" -XtCVisual "Visual" -XtCWaitForWm "Waitforwm" -XtCWaitforwm "Waitforwm" -XtCWidthInc "WidthInc" -XtCWindowGroup "WindowGroup" -XtCWindowRole "WindowRole" -XtCWinGravity "WinGravity" -XtCWmTimeout "WmTimeout" -.sp 6p -_ -.TE -.sp 6p -.IN "String Constants" "representation types" -.LP -Resource representation types: -.TS -lw(2i) lw(2.5i). -_ -.sp 6p -Symbol Definition -.sp 6p -_ -.sp 6p -XtRAtom "Atom" -.sp 6p -_ -.TE diff --git a/doc/xorg-docs/specs/Xt/appF b/doc/xorg-docs/specs/Xt/appF deleted file mode 100644 index b74cf4a3e..000000000 --- a/doc/xorg-docs/specs/Xt/appF +++ /dev/null @@ -1,125 +0,0 @@ -.\" $Xorg: appF,v 1.3 2000/08/17 19:42:49 cpqbld Exp $ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 -.\" Digital Equipment Corporation, Maynard, Massachusetts. -.\" -.\" Permission to use, copy, modify and distribute this documentation for any -.\" purpose and without fee is hereby granted, provided that the above copyright -.\" notice appears in all copies and that both that copyright notice and this -.\" permission notice appear in supporting documentation, and that the name of -.\" Digital not be used in in advertising or publicity pertaining -.\" to distribution of the software without specific, written prior permission. -.\" Digital makes no representations about the suitability of the -.\" software described herein for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -.bp -\& -.sp 1 -.ce 3 -\s+1\fBAppendix F\fP\s-1 - -\s+1\fBResource Configuration Management\fP\s-1 -.sp 2 -.LP -.XS -\fBAppendix F \(em Resource Configuration Management\fP -.XE -Setting and changing resources in X applications can be difficult for -both the application programmer and the end user. \fBResource -Configuration Management (RCM)\fP addresses this problem by changing -the \fBX Intrinsics\fP to immediately modify a resource for a -specified widget and each child widget in the hierarchy. -In this context, immediate means: no sourcing of a resource -file is required; the application does not need to be restarted for the -new resource values to take effect; and the change -occurs immediately. -.LP -The main difference between \fBRCM\fP and the \fBEditres\fP -protocol is that the \fBRCM\fP -customizing hooks reside in the \fBIntrinsics\fP and thus are linked with -other toolkits such as Motif and the Athena widgets. However, the -\fBEditRes\fP protocol requires the application to link with the -\fBEditRes\fP -routines in the Xmu library and Xmu is not used by all applications that -use Motif. Also, the \fBEditRes\fP protocol uses ClientMessage, -whereas the -\fBRCM\fP \fBIntrinsics\fP hooks use \fBPropertyNotify\fP events. -.LP -X Properties and the \fBPropertyNotify\fP events are used -to implement \fBRCM\fP and -allow on-the-fly resource customization. When the X Toolkit is -initialized, two atoms are interned with the strings -\fICustom Init\fP and -\fICustom Data\fP. Both -.PN _XtCreatePopupShell -and -.PN _XtAppCreateShell -register a \fBPropertyNotify\fP event handler to handle these properties. -.LP -A customization tool uses the \fICustom Init\fP property to \fIping\fP an -application to get the application's toplevel window. When the -application's property notify event handler is invoked, the handler -deletes the property. No data is transferred in this property. -.LP -A customization tool uses the \fICustom Data\fP property to tell an -application that it should change a resource's value. The data in -the property contains the length of the resource name (the number -of bytes in the resource name), the resource name and the new -value for the resource. This property's type is \fBXA_STRING\fP and -the format of the string is: -.IP 1. 5 -The length of the resource name (the number of bytes in -the resource name) -.IP 2. 5 -One space character -.IP 3. 5 -The resource name -.IP 4. 5 -One space character -.IP 5. 5 -The resource value -.LP -When setting the application's resource, the event handler calls -functions to walk the application's widget tree, determining which -widgets are affected by the resource string, and then applying the value -with -.PN XtSetValues. -As the widget tree is recursively descended, at -each level in the widget tree a resource part is tested for a match. -When the entire resource string has been matched, the value is applied -to the widget or widgets. -.LP -Before a value is set on a widget, it is first determined if the last -part of the resource is a valid resource for that widget. It must also -add the resource to the application's resource database and then query -it using specific resource strings that is builds from the widget -information. - - diff --git a/doc/xorg-docs/specs/Xt/intr.idxmac.t b/doc/xorg-docs/specs/Xt/intr.idxmac.t deleted file mode 100644 index 9a3572d2e..000000000 --- a/doc/xorg-docs/specs/Xt/intr.idxmac.t +++ /dev/null @@ -1,3 +0,0 @@ -.eh '\fBX Toolkit Intrinsics\fP''\fBX11 Release \*(Rn\fP' -.oh '\fBX Toolkit Intrinsics\fP''\fBX11 Release \*(Rn\fP' -.so index.pageno diff --git a/doc/xorg-docs/specs/Xt/postproc b/doc/xorg-docs/specs/Xt/postproc deleted file mode 100644 index 588b1de2c..000000000 --- a/doc/xorg-docs/specs/Xt/postproc +++ /dev/null @@ -1,19 +0,0 @@ -.\" $Xorg: postproc,v 1.3 2000/08/17 19:42:49 cpqbld Exp $ -.EH '''' -.OH '''' -.if o .bp \" blank page to make index and ToC start on odd page -\& -.nr PN +1 -.XS -Index -.XE -.EQ -delim $$ -.EN -.tm .pn \n(PN -.nr PN -1 -.\" print Table of Contents -.bp 3 -.af PN i -.PX - diff --git a/doc/xorg-docs/specs/Xt/strings.mit b/doc/xorg-docs/specs/Xt/strings.mit deleted file mode 100644 index 7a93ba8c6..000000000 --- a/doc/xorg-docs/specs/Xt/strings.mit +++ /dev/null @@ -1,17 +0,0 @@ -.\" $Xorg: strings.mit,v 1.3 2000/08/17 19:42:49 cpqbld Exp $ -.ds tk X Toolkit -.ds xT X Toolkit Intrinsics \(em C Language Interface -.ds xI Intrinsics -.ds xW X Toolkit Athena Widgets \(em C Language Interface -.ds xL Xlib \(em C Language X Interface -.ds xC Inter-Client Communication Conventions Manual -.ds xP X Window System Protocol -.ds Rn 6.8 -.ds Vn 2.2 -.ds oI Must be of class Object or any subclass thereof. -.ds rI Must be of class RectObj or any subclass thereof. -.ds cI Must be of class Core or any subclass thereof. -.ds oC Must be \fBobjectClass\fP or any subclass thereof. -.ds rC Must be \fBrectObjClass\fP or any subclass thereof. -.hw XtMake-Geometry-Request XtQuery-Geometry wid-get Composite-Part \ -Rect-Obj-Rec XtIsOverrideShell super-class diff --git a/doc/xorg-docs/specs/Xv/xv-protocol-v2.txt b/doc/xorg-docs/specs/Xv/xv-protocol-v2.txt deleted file mode 100644 index 31e2013bb..000000000 --- a/doc/xorg-docs/specs/Xv/xv-protocol-v2.txt +++ /dev/null @@ -1,654 +0,0 @@ - - - - - - - - - - X Video Extension - Protocol Description - - Version 2 - - 25-JUL-91 - - David Carver - - Digital Equipment Corporation - Workstation Engineering/Project Athena - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts, - and the Massachusetts Institute of Technology, Cambridge, Massachusetts. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, provided - that the above copyright notice appear in all copies and that both that - copyright notice and this permission notice appear in supporting - documentation, and that the names of Digital or MIT not be used in - advertising or publicity pertaining to distribution of the software - without specific, written prior permission. - - DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING - ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL - DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR - ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER - IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Preface - ------- - - The following is an outline for an X video extension protocol. It - is preliminary and subject to change. My goal in writing this was - to fix some the shortcomings of existing overly simplistic - extensions while avoiding pitfalls in an overly complex extension. - - Your feedback is desired, and since the major design directions - have been stable for some time, feel free to hammer on the details - of the protocol. - - When you receive a revision of the document, refer to the changes - and issues sections to guide your review and analysis. - - - Acknowledgements - --------------- - - The following people have made major contributions to the design of - the Xv protocol: - - Branko Gerovac (DEC/Corporate Research) - Russ Sasnett (GTE/Project Athena) - Ralph Swick (DEC/Project Athena) - - Many ideas and approaches in Xv were the product of discussions - with several groups, including - - Project Athena's Visual Computing Group - The MIT X Consortium - The MIT Media Lab's Interactive Cinema Group - - - - Changes - ------- - - From version 1.3 to 2.0 - - -- Changed SetPortControl and GetPortControl to GetPortAttribute - and SetPortAttribute. - - -- Changed QueryBestSize - - -- Simplified SelectVideoNotify and SelectPortNotify requests. - - -- Changed the way SetPortControl and GetPortControl works. - - -- Added a QueryExtension request to return the version and - revision information of the extension. - - -- Changed the name of the QueryVideo request to QueryAdaptors; - Removed the list of encodings from QueryVideo and added a - QueryEncodings request. - - -- Added a PortNotify event that notifies interested clients that - a port control has been changed. - - -- Added SelectPortNotify request to select for PortNotify events. - - -- The XvInterruped reason has been replaced by two new reasons: - one for when video is preempted by another video request and - one for when video is terminated because of hard transmission - or reception errors. - - -- Changed the wording of the QueryBestSize request. Added issue - about whether or not returned sizes should maintain the - requested aspect ratio. - - - - Introduction - ------------ - - Video technology is moving very quickly. Standards for processing - high resolution video are currently a hot topic of discussion - internationally, and it will soon be possible to process video - entirely within the digital domain. The Xv extension, however, - does not attempt to address issues of digital video. Its purpose - is to provide a mechanism for support of current and near term - interactive video technology. - - It is somewhat ironic that Xv contains nothing particularly - innovative. It takes a minimalistic approach, and without a doubt - it could have been defined years ago, and with several revisions. - So, the life expectancy of Xv is not long. Nevertheless, it may - undergo further revision and experimentation that will help our - progress towards digital video systems. - - One premise of the Xv extension is that the X server is not alone. - A separate video server is often used to manage other aspects of - video processing, though the partition between what the X server - does and what a video server does is a matter of great debate. - - - Model - ----- - - This extension models video monitor capabilities in the X Window - System. Some advanced monitors support the simultaneous display - of multiple video signals (into separate windows), and that is - prepresented here through the ability to display video from - multiple video input adaptors into X drawables. - - Some monitors support multiple video encodings (mostly for - internationalization purposes) either through switches or - automatic detection, thus each video adaptor specifies the set of - encodings it supports. - - The requests to display video from an adaptor into a drawable are - modeled after the core PutImage request, though extended to - support scaling and source clipping. - - Video output is also supported and is symmetric with the video - input function, though fewer GC components are used. - - - Mechanism - --------- - - The Xv extension does the following: - - -- lists available video adaptors - -- identifies the number of ports each adaptor supports - -- describes what drawable formats each adaptor supports - -- describes what video encodings each adaptor supports - -- displays video from a port to a drawable - -- captures video from a drawable to a port - -- grabs and ungrabs ports - -- sets and gets port attributes - -- delivers event notification - - - - Adaptors - -------- - - A display may have multiple video input and output adaptors. An - adaptor may support multiple simultaneously active ports, and in - some cases the number of ports has no fixed limit. - - An input port receives encoded video data and converts it to a - stream of data used to update a drawable. An output port samples - data from a drawable and produces a stream of encoded video data. - - The ADAPTORINFO structure is used to describe a video adaptor. - - ADAPTORINFO: - [base-id: PORT - num-ports: CARD16 - type: SETofADAPTORTYPE - formats: LISTofFORMAT - name: STRING] - - ADAPTORTYPE: {Input, Output} - - FORMAT: - [depth: CARD8 - visual: VISUALID] - - The base-id field specifies the XID of the first port of the - adaptor. The `num-ports' field specifies how many ports the - adaptor supports. The ports of the adaptor have XIDs in the range - [base-id..base-id + num-ports - 1] - - The type attribute determines if the adaptor can process video - input, output, or input and output. The if the adaptor can - process input then Input is asserted, if the adaptor can process - output then Output is asserted. - - The drawable depths and visual types supported by the adaptor are - listed in `formats'. Note: that when video is being processed for - pixmaps the visual format is taken to be the visual of the first - pair that matches the depth of the pixmap. - - The name field contains an a vendor specific string that - identifies the adaptor. - - It should be noted that the existence of separate adaptors doesn't - necessarily imply that simultaneous operation is supported. - - - - Errors - ------ - - Port - - A Port error is returned if any request names a PORT that does not - exist. - - - Encoding - - An Encoding error is returned if any request names an ENCODINGID - that does not exist. - - - - - Query Requests - ------------------- - - QueryExtension - ==> - version: CARD16 - revision: CARD16 - - The QueryExtension request returns the extension version and - revision numbers. - - - QueryAdaptors - win: WINDOW - ==> - adaptors: LISTofADAPTORINFO - - The QueryAdaptors request returns the video adaptor information for - the screen of the specified window. - - Errors: {Window} - - - QueryEncodings - port: PORT - ==> - encodings: LISTofENCODINGINFO - - The QueryEncodings request returns the list of encodings supported - by the port adaptor. Use the SetPortAttribute request to set - which encoding a port is to process. The ENCODINGINFO record - describes an encoding: - - ENCODINGINFO: - [encoding: ENCODINGID - name: STRING - width, height: CARD16 - rate: FRACTION] - - The `encoding' field identifies an encoding supported by a port. - Its value is unique for a screen. Width and height specify the - size of the video image and rate specifies the rate at which - fields of image information are encoded. - - An encoding is identified by a string that names the encoding. - Encoding naming conventions need to be established (i.e., - something along the lines of font naming, but simpler) - - FRACTION - [numerator, denominator: INT32] - - The FRACTION structure is used to specify a fractional number. - - Errors: {Port} - - - - Put Video Requests - ------------------ - - PutVideo - port: PORT - drawable: DRAWABLE - gc: GCONTEXT - vid-x, vid-y: INT16 - vid-w, vid-h: CARD16 - drw-x, drw-y: INT16 - drw-w, drw-h: CARD16 - - The PutVideo request writes video into a drawable. The position - and size of the source rectangle is specified by vid-x, vid-y, - vid-w, and vid-h. The position and size of the destination - rectangle is specified by drw-x, drw-y, drw-w, drw-h. - - Video data is clipped to the bounds of the video encoding, scaled - to the requested drawable region size (or the closest size - supported), and clipped to the bounds of the drawable. - - If video is successfully initiated, a VideoNotify event with - detail Started is generated for the drawable. If the port is - already in use, its video is preempted, and if the new drawable is - different than the old, a VideoNotify event with detail Preempted - is generated for the old drawable. If the port is grabbed by - another client, this request is ignored, and a VideoNotify event - with detail Busy is generated for the drawable. If the port is - not receiving a valid video signal or if the video signal is - interrupted while video is active a VideoNotify event with detail - HardError is generated for the drawable. - - GC components: subwindow-mode, clip-x-origin, clip-y-origin, clip-mask. - - Errors: {Match, Value, GContext, Port, Alloc} - - - PutStill - port: PORT - drawable: DRAWABLE - gc: GCONTEXT - vid-x, vid-y: INT16 - vid-w, vid-h: CARD16 - drw-x, drw-y: INT16 - drw-w, drw-h: CARD16 - - The PutStill request writes a single frame of video into a - drawable. The position and size of the source rectangle is - specified by vid-x, vid-y, vid-w, and vid-h. The position and - size of the destination rectangle is specified by drw-x, drw-y, - drw-w, drw-h. - - Video data is clipped to the bounds of the video encoding, scaled - to the requested drawable region size (or the closest size - supported) and clipped to the bounds of the drawable. - - If the port is grabbed by another client, this request is ignored, - and a VideoNotify event with detail Busy is generated for the - drawable. If the port is not receiving a valid video signal a - VideoNotify event with detail HardError is generated for the - drawable. - - GC components: subwindow-mode, clip-x-origin, clip-y-origin, clip-mask. - - Errors: {Match, Value, GContext, Port, Alloc} - - - - Get Video Requests - ------------------ - - GetVideo - port: PORT - drawable: DRAWABLE - gc: GCONTEXT - vid-x, vid-y: INT16 - vid-w, vid-h: CARD16 - drw-x, drw-y: INT16 - drw-w, drw-h: CARD16 - - The GetVideo request outputs video from a drawable. The position - and size of the destination rectangle is specified by vid-x, - vid-y, vid-w, and vid-h. The position and size of the source - rectangle is specified by drw-x, drw-y, drw-w, and drw-h. - - Drawable data is clipped to the bounds of the drawable, scaled to - the requested video region size (or the closest size supported) - and clipped to the bounds of the video encoding. The contents of - any region not updated with drawable data is undefined. - - If video is successfully initiated, a VideoNotify event with - detail Started is generated for the drawable. If the port is - already in use, its video is preempted, and if the new drawable is - different than the old, a VideoNotify event with detail Preempted - is generated for the old drawable. If the port is grabbed by - another client, this request is ignored, and a VideoNotify event - with detail Busy is generated for the drawable. - - GC components: subwindow-mode, clip-x-origin, clip-y-origin, - clip-mask. - - Errors: {Match, Value, GContext, Port, Alloc} - - - GetStill - port: PORT - drawable: DRAWABLE - gc: GCONTEXT - vid-x, vid-y: INT16 - vid-w, vid-h: CARD16 - drw-x, drw-y: INT16 - drw-w, drw-h: CARD16 - - The GetStill request outputs video from a drawable. The position - and size of the destination rectangle is specified by vid-x, - vid-y, vid-w, and vid-h. The position and size of the source - rectangle is specified by drw-x, drw-y, drw-w, and drw-h. - - Drawable data is clipped to the bounds of the drawable, scaled to - the requested video region size (or the closest size supported) - and clipped to the bounds of the video encoding. The contents of - any region not updated with drawable data is undefined. - - If the still is successfully captured a VideoNotify event with - detail Still is generated for the drawable. If the port is - grabbed by another client, this request is ignored, and a - VideoNotify event with detail Busy is generated for the drawable. - - GC components: subwindow-mode, clip-x-origin, clip-y-origin, - clip-mask. - - Errors: {Match, Value, GContext, Port, Alloc} - - - - - Grab Requests - ------------- - - GrabPort - port: PORT - timestamp: {TIMESTAMP, CurrentTime} - ==> - status: {Success, AlreadyGrabbed, InvalidTime} - - The GrabPort request grabs a port. While a port is grabbed, only - video requests from the grabbing client are permitted. - - If timestamp specifies a time older than the current port time, a - status of InvalidTime is returned. If the port is already grabbed - by another client, a status of AlreadyGrabbed is returned. - Otherwise a status of Success is returned. The port time is - updated when the following requests are processed: GrabPort, - UngrabPort, PutVideo, PutStill, GetVideo, GetStill - - If the port is actively processing video for another client, the - video is preempted, and an VideoNotify event with detail Preempted - is generated for its drawable. - - Errors: {Port} - - - UngrabPort - port: PORT - timestamp: {TIMESTAMP, CurrentTime} - - The UngrabPort request ungrabs a port. If timestamp specifies a - time before the last connection request time of this port, the - request is ignored. - - Errors: {Port} - - - - Other Requests - -------------- - - StopVideo - port: PORT - drawable: DRAWABLE - - The StopVideo request stops active video for the specified port - and drawable. If the port isn't processing video, or if it is - processing video in a different drawable, the request is ignored. - When video is stopped a VideoNotify event with detail Stopped is - generated for the associated drawable. - - Errors: {Drawable, Port} - - - SelectVideoNotify - drawable: DRAWABLE - onoff: BOOL - - The SelectVideoNotify request enables or disables VideoNotify - event delivery to the requesting client. VideoNotify events are - generated when video starts and stops. - - Errors: {Drawable} - - - SelectPortNotify - port: PORT - onoff: BOOL - - The SelectPortNotify request enables or disables PortNotify event - delivery to the requesting client. PortNotify events are - generated when port attributes are changed using SetPortAttribute. - - Errors: {Port} - - - QueryBestSize - port: PORT - motion: BOOL - vid-w, vid-h: CARD16 - drw-w, drw-h: CARD16 - ==> - actual-width, actual-height: CARD16 - - The QueryBestSize request returns, for the given source size and - desired destination size, the closest destination size that the - port adaptor supports. The returned size will be equal - or smaller than the requested size if one is supported. If motion - is True then the requested size is intended for use with full - motion video. If motion is False, the requested size is intended - for use with stills only. - - The retuned size is also chosen to maintain the requested aspect ratio - if possible. - - Errors: {Port} - - - - SetPortAttribute - port: PORT - attribute: ATOM - value: INT32 - - The SetPortAttribute request sets the value of a port attribute. - The port attribute is identified by the attribute atom. The - following strings are guaranteed to generate valid atoms using the - InternAtom request. - - String Type - ----------------------------------------------------------------- - - "XV_ENCODING" ENCODINGID - "XV_HUE" [-1000..1000] - "XV_SATURATION" [-1000..1000] - "XV_BRIGHTNESS" [-1000..1000] - "XV_CONTRAST" [-1000..1000] - - - If the given attribute doesn't match an attribute supported by the - port adaptor a Match error is generated. The supplied encoding - must be one of the encodings listed for the adaptor, otherwise an - Encoding error is generated. - - If the adaptor doesn't support the exact hue, saturation, - brightness, and contrast levels supplied, the closest levels - supported are assumed. The GetPortAttribute request can be used - to query the resulting levels. - - When a SetPortAttribute request is processed a PortNotify event is - generated for all clients that have requested port change - notification using SelectPortNotify. - - Errors: {Port, Match, Value} - - - GetPortAttribute - port: PORT - attribute: ATOM - ==> - value: INT32 - - - The GetPortAttribute request returns the current value of the - attribute identified by the given atom. If the given atom - doesn't match an attribute supported by the adaptor a Match - error is generated. - - Errors: {Port, Match} - - - - Events - ------ - - VideoNotify - drawable: DRAWABLE - port: PORT - reason: REASON - time: TIMESTAMP - - REASON: {Started, Still, Stopped, Busy, Preempted, HardError} - - A VideoNotify event is generated when video activity is started, - stopped, or unable to proceed in a drawable. - - A Started reason is generated when video starts in a drawable. - - A Stopped reason is generated when video is stopped in a - drawable upon request. - - A Busy reason is generated when a put or get request cannot - proceed because the port is grabbed by another client. - - A Preempted reason is generated when video is stopped by a - conflicting request. - - A HardError reason is generated when the video port cannot - initiate or continue processing a video request because of an - underlying transmission or reception error. - - - PortNotify - port: PORT - attribute: ATOM - value: INT32 - time: TIMESTAMP - - The PortNotify event is generated when a SetPortAttribute request - is processed. The event is delivered to all clients that have - performed a SelectPortNotify request for the port. The event - contains the atom identifying the attribute that changed, and the - new value of that attribute. diff --git a/doc/xorg-docs/specs/XvMC/XvMC_API.txt b/doc/xorg-docs/specs/XvMC/XvMC_API.txt deleted file mode 100644 index 9aded3ae9..000000000 --- a/doc/xorg-docs/specs/XvMC/XvMC_API.txt +++ /dev/null @@ -1,1293 +0,0 @@ - - X-Video Motion Compensation - API specification v. 1.0 - - Mark Vojkovich - - -/* history */ - - first draft (9/6/00) - second draft (10/31/00) - Changed to allow acceleration at both - the motion compensation and IDCT level. - third draft (1/21/01) - Some refinements and subpicture support. - fourth draft (5/2/01) - Dual Prime clarification, add - XvMCSetAttribute. - fifth draft (6/26/01) - Change definition of XvMCCompositeSubpicture - plus some clarifications and fixed typographical errors. - sixth draft (9/24/01) - Added XVMC_SECOND_FIELD and removed - XVMC_PROGRESSIVE_FRAME and XVMC_TOP_FIELD_FIRST flags. - seventh draft (10/26/01) - Added XVMC_INTRA_UNSIGNED option. - eighth draft (11/13/02) - Removed IQ level acceleration and - changed some structures to remove unused fields. - -/* acknowledgements */ - - Thanks to Matthew J. Sottek from Intel for lots of input. - -/********************************************************************/ - - OVERVIEW - -/********************************************************************/ - - XvMC extends the X-Video extension (Xv) and makes use of the - familar concept of the XvPort. Ports have attributes that can be set - and queried through Xv. In XvMC ports can also have hardware motion - compensation contexts created for use with them. Ports which support - XvImages (ie. they have an "XV_IMAGE" port encoding as described in - the Xv version 2.2 API addendum) can be queried for the list of XvMCSurface - types they support. If they support any XvMCSurface types an - XvMCContext can be created for that port. - - An XvMCContext describes the state of the motion compensation - pipeline. An individual XvMCContext can be created for use with - a single port, surface type, motion compensation type, width and - height combination. For example, a context might be created for a - particular port that does MPEG-2 motion compensation on 720 x 480 - 4:2:0 surfaces. Once the context is created, referencing it implies - the port, surface type, size and the motion compensation type. Contexts - may be "direct" or "indirect". For indirect contexts the X server - renders all video using the data passed to it by the client. For - direct contexts the client libraries render the video with little - or no interaction with the X server. - - XvMCSurfaces are buffers into which the motion compensation - hardware can render. The data in the buffers themselves are not client - accessible and may be stored in a hardware-specific format. Any - number of buffers can be created for use with a particular context - (resources permitting). - - XvMC provides video acceleration starting at one of two places - in the video pipeline. Acceleration starting at the first point, - which we shall call the "Motion Compensation" level, begins after the - the inverse quantization and IDCT at the place where motion compensation - is to be applied. The second point, which we shall call the "IDCT" - level, begins before the IDCT just after the inverse quantization. - - Rendering is done by presenting the library with a target XvMCSurface - and up to two reference XvMCSurfaces for the motion compensation, a - buffer of 8x8 blocks and a command buffer which describes how to - use the 8x8 blocks along with motion compensation vectors to construct - the data in the target XvMCSurface. When the pipeline starts at the - IDCT level, Xv will perform the IDCT on the blocks before performing - the motion compensation. A function is provided to copy/overlay a - portion of the XvMCSurface to a drawable with arbitrary scaling. - - XvMCSubpictures are separate surfaces that may be blended with the - target surface. Any number of XvMCSubpictures may be created for use - with a context (resources permitting). Both "backend" and "frontend" - subpicture behavior are supported. - -/********************************************************************/ - - QUERYING THE EXTENSION - -/********************************************************************/ - -/* Errors */ -#define XvMCBadContext 0 -#define XvMCBadSurface 1 -#define XvMCBadSubpicture 2 - -Bool XvMCQueryExtension (Display *display, int *eventBase, int *errBase) - - Returns True if the extension exists, False otherwise. Also returns - the error and event bases. - - display - The connection to the server. - - eventBase - - errBase - The returned event and error bases. Currently there - are no events defined. - -Status XvMCQueryVersion (Display *display, int *major, int *minor) - - Query the major and minor version numbers of the extension. - - display - The connection to the server. - - major - - minor - The returned major and minor version numbers. - -/********************************************************************/ - - QUERYING SURFACE TYPES - -/********************************************************************/ - -/* Chroma formats */ -#define XVMC_CHROMA_FORMAT_420 0x00000001 -#define XVMC_CHROMA_FORMAT_422 0x00000002 -#define XVMC_CHROMA_FORMAT_444 0x00000003 - -/* XvMCSurfaceInfo Flags */ -#define XVMC_OVERLAID_SURFACE 0x00000001 -#define XVMC_BACKEND_SUBPICTURE 0x00000002 -#define XVMC_SUBPICTURE_INDEPENDENT_SCALING 0x00000004 -#define XVMC_INTRA_UNSIGNED 0x00000008 - -/* Motion Compensation types */ -#define XVMC_MOCOMP 0x00000000 -#define XVMC_IDCT 0x00010000 - -#define XVMC_MPEG_1 0x00000001 -#define XVMC_MPEG_2 0x00000002 -#define XVMC_H263 0x00000003 -#define XVMC_MPEG_4 0x00000004 - - -typedef struct { - int surface_type_id; - int chroma_format; - unsigned short max_width; - unsigned short max_height; - unsigned short subpicture_max_width; - unsigned short subpicture_max_height; - int mc_type; - int flags; -} XvMCSurfaceInfo; - - surface_type_id - Unique descriptor for this surface type. - - chroma_format - Chroma format of this surface (eg. XVMC_CHROMA_FORMAT_420, - XVMC_CHROMA_FORMAT_422, XVMC_CHROMA_FORMAT_444). - - max_width - - max_height - Maximum dimensions of the luma data in pixels. - - subpicture_max_width - - subpicture_max_height - The Maximum dimensions of the subpicture - that can be created for use with this surface - Both fields are zero if subpictures are not - supported. - - mc_type - The type of motion compensation available for this - surface. This consists of XVMC_MPEG_1, XVMC_MPEG_2, XVMC_H263 - or XVMC_MPEG_4 OR'd together with any of the following: - - XVMC_MOCOMP - Acceleration starts at the motion compensation - level; - - XVMC_IDCT - Acceleration starts at the IDCT level. - - flags - Any combination of the following may be OR'd together. - - XVMC_OVERLAID_SURFACE - Displayed data is overlaid and not - physically in the visible framebuffer. - When this is set the client is responsible - for painting the colorkey. - - XVMC_BACKEND_SUBPICTURE - The supicture is of the "backend" - variety. It is "frontend" otherwise. - There is more information on this in the - section on subpictures below. - - XVMC_SUBPICTURE_INDEPENDENT_SCALING - The subpicture can be scaled - independently of the video - surface. See the section on - subpictures below. - - XVMC_INTRA_UNSIGNED - When this flag is set, the motion compenstation - level Intra macroblock data should be in an - unsigned format rather than the signed format - present in the mpeg stream. This flag applies - only to motion compensation level acceleration. - -XvMCSurfaceInfo * XvMCListSurfaceTypes(Display *dpy, XvPortID port, int *num) - - Returns the number of surface types supported by the XvPort and an array - of XvMCSurfaceInfo describing each surface type. The returned array - should be freed with XFree(). - - dpy - The connection to the server. - - port - The port we want to get the XvMCSurfaceInfo array for. - - num - The number of elements returned in the array. - - Errors: - - XvBadPort - The requested port does not exist. - - BadAlloc - There are insufficient resources to complete this request. - - -/********************************************************************/ - - CREATING A CONTEXT - -/********************************************************************/ - -/* XvMCContext flags */ -#define XVMC_DIRECT 0x00000001 - -typedef struct { - XID context_id; - int surface_type_id; - unsigned short width; - unsigned short height; - XVPortID port; - int flags; - void * privData; /* private to the library */ -} XvMCContext; - - context_id - An XID associated with the context. - - surface_type_id - This refers to the XvMCSurfaceInfo that describes - the surface characteristics. - - width - - height - The dimensions (of the luma data) this context supports. - - port - The port that this context supports. - - flags - Any combination may be OR'd together. - - XVMC_DIRECT - This context is direct rendered. - - -Status XvMCCreateContext ( - Display display, - XVPortID port, - int surface_type_id, - int width, - int height, - int flags, - XvMCContext * context -); - - This creates a context by filling out the XvMCContext structure passed - to it and returning Success. - - display - Specifies the connection to the server. - - port - Specifies the port to create the context for. - - surface_type_id - - width - - height - Specifies the surface type and dimensions that this - context will be used for. The surface_type_id corresponds - to the surface_type_id referenced by the XvMCSurfaceInfo. - The surface returned may be larger than the surface requested - (usually the next larger multiple of 16x16 pixels). - - flags - Any of the following may by OR'd together: - - XVMC_DIRECT - A direct context is requested. - If a direct context cannot be created the request - will not fail, rather, an indirect context will - be created instead. - - context - Pointer to the pre-allocated XvMCContext structure. - - - - Errors: - - XvBadPort - The requested port does not exist. - - BadValue - The dimensions requested are not supported by the - surface type. - - BadMatch - The surface_type_id is not supported by the port. - - BadAlloc - There are not sufficient resources to fulfill this - request. - - -Status XvMCDestroyContext (Display display, XvMCContext * context) - - Destroys the specified context. - - display - Specifies the connection to the server. - - context - The context to be destroyed. - - Errors: - - XvMCBadContext - The XvMCContext is not valid. - - -/*********************************************************************/ - - SURFACE CREATION - -/*********************************************************************/ - -typedef struct { - XID surface_id; - XID context_id; - int surface_type_id; - unsigned short width; - unsigned short height; - void *privData; /* private to the library */ -} XvMCSurface; - - surface_id - An XID associated with the surface. - - context_id - The XID of the context for which the surface was created. - - surface_type_id - Derived from the context_id, it specifies the - XvMCSurfaceInfo describing the surface. - - width - - height - The width and height of the luma data. - - -Status -XvMCCreateSurface( - Display *display, - XvMCContext * context; - XvMCSurface * surface; -); - - Creates a surface (Frame) for use with the specified context. - The surface structure is filled out and Success is returned if no - error occured. - - context - pointer to a valid context. The context implies - the surface type to be created, and its dimensions. - - surface - pointer to a pre-allocated XvMCSurface structure. - - Errors: - - XvMCBadContext - the context is not valid. - - BadAlloc - there are insufficient resources to complete - this operation. - -Status XvMCDestroySurface(Display *display, XvMCSurface *surface); - - Destroys the given surface. - - display - Specifies the connection to the server. - - surface - The surface to be destroyed. - - Errors: - - XvMCBadSurface - The XvMCSurface is not valid. - - - -/*********************************************************************/ - - RENDERING A FRAME - -/*********************************************************************/ - -typedef struct { - XID context_id; - unsigned int num_blocks; - short *blocks; - void *privData; /* private to the library */ -} XvMCBlockArray; - - num_blocks - Number of 64 element blocks in the blocks array. - - context_id - XID of the context these blocks were allocated for. - - blocks - Pointer to an array of (64 * num_blocks) shorts. - -Status XvMCCreateBlocks ( - Display *display, - XvMCContext *context, - unsigned int num_blocks, - XvMCBlockArray * block -); - - This allocates an array of DCT blocks in the XvMCBlockArray - structure passed to it. Success is returned if no error occured. - - display - The connection to the server. - - context - The context the block array is being created for. - - num_blocks - The number of 64 element short blocks to be allocated. - This number must be non-zero. - - block - A pointer to a pre-allocated XvMCBlockArray structure. - - Errors: - - XvMCBadContext - the context is invalid. - - BadAlloc - There are insufficient resources to complete the - operation. - - BadValue - num_blocks was zero. - -Status XvMCDestroyBlocks (Display *display, XvMCBlockArray * block) - - Frees the given array. - - display - The connection to the server. - - block - The block array to be freed. - - - ---------------------------------------------------------- - -#define XVMC_MB_TYPE_MOTION_FORWARD 0x02 -#define XVMC_MB_TYPE_MOTION_BACKWARD 0x04 -#define XVMC_MB_TYPE_PATTERN 0x08 -#define XVMC_MB_TYPE_INTRA 0x10 - -#define XVMC_PREDICTION_FIELD 0x01 -#define XVMC_PREDICTION_FRAME 0x02 -#define XVMC_PREDICTION_DUAL_PRIME 0x03 -#define XVMC_PREDICTION_16x8 0x02 -#define XVMC_PREDICTION_4MV 0x04 - -#define XVMC_SELECT_FIRST_FORWARD 0x01 -#define XVMC_SELECT_FIRST_BACKWARD 0x02 -#define XVMC_SELECT_SECOND_FORWARD 0x04 -#define XVMC_SELECT_SECOND_BACKWARD 0x08 - -#define XVMC_DCT_TYPE_FRAME 0x00 -#define XVMC_DCT_TYPE_FIELD 0x01 - -typedef struct { - unsigned short x; - unsigned short y; - unsigned char macroblock_type; - unsigned char motion_type; - unsigned char motion_vertical_field_select; - unsigned char dct_type; - short PMV[2][2][2]; - unsigned int index; - unsigned short coded_block_pattern; - unsigned short pad0; -} XvMCMacroBlock; - - x, y - location of the macroblock on the surface in units of macroblocks. - - macroblock_type - can be any of the following flags OR'd together: - - XVMC_MB_TYPE_MOTION_FORWARD - Forward motion prediction should - be done. This flag is ignored for - Intra frames. - - XVMC_MB_TYPE_MOTION_BACKWARD - Backward motion prediction should - be done. This flag is ignored when - the frame is not bidirectionally - predicted. - - XVMC_MB_TYPE_PATTERN - Blocks are referenced and they contain - differentials. The coded_block_pattern will - indicate the number of blocks and index will - note their locations in the block array. - - XVMC_MB_TYPE_INTRA - Blocks are referenced and they are intra blocks. - The coded_block_pattern will indicate the number - of blocks and index will note their locations in - the block array. XVMC_MB_TYPE_PATTERN and - XVMC_MB_TYPE_INTRA are mutually exclusive. If - both are specified, XVMC_MB_TYPE_INTRA takes - precedence. - - motion_type - If the surface is a field, the following are valid: - XVMC_PREDICTION_FIELD - XVMC_PREDICTION_16x8 - XVMC_PREDICTION_DUAL_PRIME - If the surface is a frame, the following are valid: - XVMC_PREDICTION_FIELD - XVMC_PREDICTION_FRAME - XVMC_PREDICTION_DUAL_PRIME - - motion_vertical_field_select - The following flags may be OR'd together - - XVMC_SELECT_FIRST_FORWARD - XVMC_SELECT_FIRST_BACKWARD - XVMC_SELECT_SECOND_FORWARD - XVMC_SELECT_SECOND_BACKWARD - - If the bit is set the bottom field is indicated. - If the bit is clear the top field is indicated. - - X X X X D C B A - ------- | | | |_ First vector forward - | | | |___ First vector backward - unused | |_____ Second vector forward - |_______ Second vector backward - - PMV - The motion vector(s) - - PMV[c][b][a] - - a - This holds the vector. 0 = horizontal, 1 = vertical. - b - 0 = forward, 1 = backward. - c - 0 = first vector, 1 = second vector. - - The motion vectors are used only when XVMC_MB_TYPE_MOTION_FORWARD - or XVMC_MB_TYPE_MOTION_BACKWARD are set. - - DualPrime vectors must be fully decoded and placed in the PMV - array as follows. - - Field structure: - - PMV[0][0][1:0] from same parity - PMV[0][1][1:0] from opposite parity - - Frame structure: - - PMV[0][0][1:0] top from top - PMV[0][1][1:0] bottom from bottom - PMV[1][0][1:0] top from bottom - PMV[1][1][1:0] bottom from top - - - index - The offset in units of (64 * sizeof(short)) from the start of - the block array where this macroblock's DCT blocks, as indicated - by the coded_block_pattern, are stored. - - coded_block_pattern - Indicates the blocks to be updated. The bitplanes - are specific to the mc_type of the surface. This - field is valid only if XVMC_MB_TYPE_PATTERN or - XVMC_MB_TYPE_INTRA are set. In that case the blocks - are differential or intra blocks respectively. - The bitplanes are described in ISO/IEC 13818-2 - Figures 6.10-12. - - dct_type - This field indicates whether frame pictures are frame DCT - coded or field DCT coded. ie XVMC_DCT_TYPE_FIELD or - XVMC_DCT_TYPE_FRAME. - - -typedef struct { - unsigned int num_blocks; - XID context_id; - XvMCMacroBlock *macro_blocks; - void *privData; /* private to the library */ -} XvMCMacroBlockArray; - - - num_blocks - Number of XvMCMacroBlocks in the macro_blocks array. - - context_id - XID of the context these macroblocks were allocated for. - - macro_blocks - Pointer to an array of num_blocks XvMCMacroBlocks. - - -Status XvMCCreateMacroBlocks ( - Display *display, - XvMCContext *context, - unsigned int num_blocks, - XvMCMacroBlockArray * blocks -); - - This allocates an array of XvMCMacroBlocks in the XvMCMacroBlockArray - structure passed to it. Success is returned if no error occured. - - display - The connection to the server. - - context - The context the macroblock array is being created for. - - num_blocks - The number of XvMCMacroBlocks to be allocated. - This number must be non-zero. - - blocks - A pointer to a pre-allocated XvMCMacroBlockArray structure. - - Errors: - - XvMCBadContext - the context is invalid. - - BadAlloc - There are insufficient resources to complete the - operation. - - BadValue - num_blocks was zero. - -Status XvMCDestroyMacroBlocks (Display *display, XvMCMacroBlockArray * block) - - Frees the given array. - - display - The connection to the server. - - block - The macro block array to be freed. - - - ------------------------------------------------------------ - -#define XVMC_TOP_FIELD 0x00000001 -#define XVMC_BOTTOM_FIELD 0x00000002 -#define XVMC_FRAME_PICTURE (XVMC_TOP_FIELD | XVMC_BOTTOM_FIELD) - -#define XVMC_SECOND_FIELD 0x00000004 - -Status XvMCRenderSurface( - Display *display, - XvMCContext *context, - unsigned int picture_structure, - Surface *target_surface, - Surface *past_surface, - Surface *future_surface, - unsigned int flags, - unsigned int num_macroblocks, - unsigned int first_macroblock, - XvMCMacroBlockArray *macroblock_array, - XvMCBlockArray *blocks -); - - This function renders the macroblocks passed to it. It will not - return until it has read all of the macroblocks, however, rendering - will usually not be completed by that time. The return of this - function means it is safe to touch the blocks and macroblock_array. - To synchronize rendering see the section on sychronization below. - - display - The connection to the server. - - context - The context used to render. - - target_surface - - past_surface - - furture_surface - - - The target_surface is required. If the future and past - surfaces are NULL, the target_surface is an "Intra" frame. - - If the past surface is provided but not the future surface, - the target_surface is a "Predicted Inter" frame. - - If both past and future surfaces are provided, the - target_surface is a "Bidirectionally-predicted Inter" frame. - - Specifying a future surface without a past surface results - in a BadMatch. - - All surfaces must belong to the same context. - - picture_structure - XVMC_TOP_FIELD, XVMC_BOTTOM_FIELD or - XVMC_FRAME_PICTURE. - - - flags - Flags may include: - - XVMC_SECOND_FIELD - For field pictures this indicates whether - the current field (top or bottom) is first - or second in the sequence. - - num_macroblocks - The number of XvMCMacroBlock structures to execute in - the macroblock_array. - - first_macroblock - The index of the first XvMCMacroBlock to process in the - macroblock_array. - - blocks - The array of XvMCBlocks to be referenced by the XvMCMacroBlocks. - The data in the individual blocks are in raster scan order and - should be clamped to the limits specific to the acceleration - level. For motion compensation level acceleration this is 8 - bits for Intra and 9 bits for non-Intra data. At the IDCT level - this is 12 bits. - - Errors: - - XvMCBadContext - The context is not valid. - - XvMCBadSurface - Any of the surfaces are not valid. - - BadMatch - Any of the surfaces do not belong to the specified - context or a future surface was specified without - a past surface. - - BadValue - Unrecognized data for the picture_structure. - - -/***********************************************************************/ - - DISPLAYING THE SURFACE - -/***********************************************************************/ - - -Status -XvMCPutSurface( - Display *display, - XvMCSurface *surface, - Drawable draw, - short srcx, - short srcy, - unsigned short srcw, - unsigned short srch, - short destx, - short desty, - unsigned short destw, - unsigned short desth, - int flags -); - - Display the rectangle from the source defined by srcx/y/w/h scaled - to destw by desth and placed at (destx, desty) on the given drawable. - This function is not guaranteed to be pipelined with previous rendering - commands and may display the surface immediately. Therefore, the client - must query that the surface has finished rendering before calling this - function. - - display - The connection to the server. - - surface - The surface to copy/overlay from. - - draw - The drawable to copy/overlay the video on. - - srcx - - srcy - - srcw - - srch - The rectangle in the source area from the surface that is - to be displayed. - - destx - - desty - - destw - - desth - The rectangle in the destination drawable where the scaled - source rectangle should be displayed. - - flags - this indicates the field to be displayed and can be XVMC_TOP_FIELD, - XVMC_BOTTOM_FIELD or XVMC_FRAME_PICTURE. XVMC_FRAME_PICTURE - displays both fields (weave). - - Errors: - - XvMCBadSurface - The surface is not valid. - - BadDrawable - The drawable does not exist. - - -Status XvMCHideSurface(Display *display, XvMCSurface *surface) - - Stops display of a surface. This is only needed if the surface is an - overlaid surface as indicated in the XvMCSurfaceInfo - it is a no-op - otherwise. - - display - The connection to the server. - - surface - The surface to be hidden. - - Errors: - - XvMCBadSurface - The surface is not valid. - - -/***********************************************************************/ - - COMPOSITING THE SUBPICTURE - -/***********************************************************************/ - - -XvImageFormatValues * XvMCListSubpictureTypes ( - Display * display, - XvPortID port, - int surface_type_id, - int *count_return -) - - Returns an array of XvImageFormatValues supported by the surface_type_id - describing the surface. The surface_type_id is acquired from the - XvMCSurfaceInfo. This list should be freed with XFree(). - - display - Specifies the connection to the X-server. - - port - Specifies the port we are interested in. - - surface_type_id - Specifies the surface type for which we want to - query the supported subpicture types. - - count_return - the size of the returned array. - - Errors: - - BadPort - The port doesn't exist. - - BadAlloc - There are insufficient resources to complete this request. - - BadMatch - The surface type is not supported on that port. - - -typedef struct { - XID subpicture_id; - XID context_id; - int xvimage_id; - unsigned short width; - unsigned short height; - int num_palette_entries; - int entry_bytes; - char component_order[4]; - void *privData; /* private to the library */ -} XvMCSubpicture; - - - subpicture_id - An XID associated with this subpicture. - - context_id - The XID of the context this subpicture was created for. - - xvimage_id - The id descriptor of the XvImage format that may be used - with this subpicture. - - width - - height - The dimensions of the subpicture. - - num_palette_entries - For paletted formats only. This is the number - of palette entries. It is zero for XvImages - without palettes. - - entry_bytes - Each component is one byte and entry_bytes indicates - the number of components in each entry (eg. 3 for - YUV palette entries). This field is zero when - palettes are not used. - - component_order - Is an array of ascii characters describing the order - of the components within the bytes. Only entry_bytes - characters of the string are used. - -Status -XvMCCreateSubpicture ( - Display *display, - XvMCContext *context, - XvMCSubpicture *subpicture, - unsigned short width, - unsigned short height, - int xvimage_id -) - - This creates a subpicture by filling out the XvMCSubpicture structure - passed to it and returning Success. - - display - Specifies the connection to the X-Server. - - context - The context to create the subpicture for. - - subpicture - Pre-allocated XvMCSubpicture structure to be filled - out by this function. - - width - - height - The dimensions of the subpicture. - - xvimage_id - The id describing the XvImage format. - - - Errors: - - BadAlloc - There are insufficient resources to complete this request. - - XvMCBadContext - The specified context does not exist. - - BadMatch - The XvImage format id specified is not supported by - the context. - - BadValue - If the size requested is larger than the max size reported - in the XvMCSurfaceInfo. - - -Status -XvMCClearSubpicture ( - Display *display, - XvMCSubpicture *subpicture, - short x, - short y, - unsigned short width, - unsigned short height, - unsigned int color -) - - Clear the area of the given subpicture to "color". - - display - The connection to the server. - - subpicture - The subpicture to clear. - - x - - y - - width - - height - The rectangle in the subpicture to be cleared. - - color - The data to fill the rectangle with. - - Errors: - - XvMCBadSubpicture - The subpicture is invalid. - -Status -XvMCCompositeSubpicture ( - Display *display, - XvMCSubpicture *subpicture, - XvImage *image, - short srcx, - short srcy, - unsigned short width, - unsigned short height, - short dstx, - short dsty -) - - Copies the XvImage to the XvMCSubpicture. - - display - The connection to the server. - - subpicture - The subpicture used as the destination of the copy. - - image - The XvImage to be used as the source of the copy. - XvImages should be of the shared memory variety for - indirect contexts. - - srcx - - srcy - - width - - height - The rectangle from the image to be composited. - - dstx - - dsty - The location in the subpicture where the source rectangle - should be composited. - - Errors: - - XvMCBadSubpicture - The subpicture is invalid. - - BadMatch - The subpicture does not support the type of XvImage - passed to this function. - -Status -XvMCDestroySubpicture (Display *display, XvMCSubpicture *subpicture) - - Destroys the specified subpicture. - - display - Specifies the connection to the X-server. - - subpicture - The subpicture to be destroyed. - - Errors: - - XvMCBadSubpicture - The subpicture specified does not exist. - - -Status -XvMCSetSubpicturePalette ( - Display *display, - XvMCSubpicture *subpicture, - unsigned char *palette -) - - Set the subpicture's palette. This applies to paletted subpictures - only. - - display - The connection to the server. - - subpicture - The subpicture on which to change the palette. - - palette - A pointer to an array holding the palette data. The - size of this array is - - num_palette_entries * entry_bytes - - in size. The order of the components in the palette - is described by the component_order in the XvMCSubpicture - structure. - - Errors: - - XvMCBadSubpicture - The subpicture specified does not exist. - - BadMatch - The specified subpicture does not use palettes. - - -Status -XvMCBlendSubpicture ( - Display *display, - XvMCSurface *target_surface, - XvMCSubpicture *subpicture, - short subx, - short suby, - unsigned short subw, - unsigned short subh, - short surfx, - short surfy, - unsigned short surfw, - unsigned short surfh -) - -Status -XvMCBlendSubpicture2 ( - Display *display, - XvMCSurface *source_surface, - XvMCSurface *target_surface, - XvMCSubpicture *subpicture, - short subx, - short suby, - unsigned short subw, - unsigned short subh, - short surfx, - short surfy, - unsigned short surfw, - unsigned short surfh -) - - The behavior of these two functions is different depending on whether -or not the XVMC_BACKEND_SUBPICTURE flag is set in the XvMCSurfaceInfo. - - XVMC_BACKEND_SUBPICTURE set: - - XvMCBlendSubpicture associates the subpicture with the target_surface. - Both will be displayed at the next call to XvMCPutSurface. Additional - blends before the call to XvMCPutSurface simply overrides the association. - Both the target_surface and subpicture will query XVMC_DISPLAYING from - the call to XvMCPutSurface until they are no longer displaying. It is - safe to associate the subpicture and target_surface before rendering has - completed (while they still query XVMC_RENDERING) but it is not safe to - call XvMCPutSurface at that time. - - XvMCBlendSubpicture2 copies the source_surface to the target_surface - and associates the subpicture with the target_surface. This essentially - calls XvMCBlendSubpicture on the target_surface after the copy. Both - the subpicture and target_surface will query XVMC_DISPLAYING from the - call to XvMCPutSurface until they are no longer displaying. The - source_surface will not query XVMC_DISPLAYING as a result of this function. - The copy is pipelined with the rendering and will cause XVMC_RENDERING - to be queried until the copy is done. - - - XVMC_BACKEND_SUBPICTURE not set ("frontend" behavior): - - XvMCBlendSubpicture is a no-op in this case. - - XvMCBlendSubpicture2 blends the source_surface and subpicture and - puts it in the target_surface. This does not effect the status of - the source surface but will cause the target_surface to query - XVMC_RENDERING until the blend is completed. - - - display - The connection to the server. - - subpicture - The subpicture to be blended into the video. - - target_surface - The surface to be displayed with the blended subpicture. - - source_surface - Source surface prior to blending. - - subx - - suby - - subw - - subh - The rectangle from the subpicture to be blended. - - surfx - - surfy - - surfw - - surfh - The rectangle in the XvMCSurface to blend the subpicture rectangle - into. If XVMC_SUBPICTURE_INDEPENDENT_SCALING is not set in the - XvMCSurfaceInfo subw must be equal to surfw and subh must be - equal to surfh height or else a BadValue error occurs. - - Errors: - - XvMCBadSurface - Any of the surfaces are invalid. - - XvMCBadSubpicture - The subpicture is invalid. - - BadMatch - The subpicture or any of the surfaces do not belong to the - same context. - - BadValue - XVMC_SUBPICTURE_INDEPENDENT_SCALING is set and the source - and destination rectangles are different sizes. - - -/***********************************************************************/ - - SURFACE SYNCHRONIZATION - -/***********************************************************************/ - - -#define XVMC_RENDERING 0x00000001 -#define XVMC_DISPLAYING 0x00000002 - -Status -XvMCSyncSurface (Display *display, XvMCSurface *surface) - - This function blocks until all rendering requests on the surface - have been completed. - - display - The connection to the server. - - surface - The surface to synchronize. - - Errors: - - XvMCBadSurface - The surface is not valid. - - -Status -XvMCFlushSurface (Display *display, XvMCSurface *surface) - - This function commits pending rendering requests to ensure that - they will be completed in a finite amount of time. - - display - The connnection to the server. - - surface - The surface whos rendering requests should be flushed. - - Errors: - - XvMCBadSurface - The surface is not valid. - - -Status -XvMCGetSurfaceStatus (Display *display, XvMCSurface *surface, int *stat) - - display - The connection to the server. - - surface - The surface whos status is being queried. - - stat - May be any of the following OR'd together: - - XVMC_RENDERING - The last XvMCRenderSurface request has not completed - yet. - - XVMC_DISPLAYING - The surface is currently being displayed or a - display is pending (ie. it is not safe to render - to it). - - Errors: - - XvMCBadSurface - The surface is not valid. - - -/***********************************************************************/ - - SUBPICTURE SYNCHRONIZATION - -/***********************************************************************/ - - - -Status -XvMCSyncSubpicture (Display *display, XvMCSubpicture *subpicture) - - This function blocks until all composite/clear requests on the supicture - have been completed. - - display - The connection to the server. - - subpicture - The subpicture to synchronize. - - Errors: - - XvMCBadSubpicture - The subpicture is not valid. - - -Status -XvMCFlushSubpicture (Display *display, XvMCSubpicture *subpicture) - - This function commits pending composite/clear requests to ensure that - they will be completed in a finite amount of time. - - display - The connection to the server. - - subpicture - The subpicture whos compositing should be flushed. - - Errors: - - XvMCBadSubpicture - The surface is not valid. - - -Status -XvMCGetSubpictureStatus (Display *display, XvMCSubpicture *subpic, int *stat) - - display - The connection to the server. - - subpic - The subpicture whos status is being queried. - - stat - may be any of the following OR'd together: - - XVMC_RENDERING - The last XvMCCompositeSubpicture or XvMCClearSubpicture - request has not completed yet. - - XVMC_DISPLAYING - The subpicture is currently being displayed or a - display is pending (ie. it is not safe to render - to it). - - Errors: - - XvMCBadSubpicture - The surface is not valid. - -/********************************************************************/ - - ATTRIBUTES - -/********************************************************************/ - - Context specific attribute functions are provided. These are -similar to their Xv Counterparts XvQueryPortAttributes, XvSetPortAttribute -and XvGetPortAttribute but their state is specific to the context. - -XvAttribute * -XvMCQueryAttributes ( - Display *display, - XvMCContext *context, - int *number -) - - An array of XvAttributes of size "number" is returned by this function. - If there are no attributes, NULL is returned and number is set to 0. - The array may be freed with XFree(). - - display - The connection to the server. - - context - The context whos attributes we are querying. - - number - The returned number of recognized atoms. - - Errors: - - XvMCBadContext - The context is invalid. - -Status -XvMCSetAttribute ( - Display *display, - XvMCContext *context, - Atom attribute, - int value -) - - This function sets a context-specific attribute and returns Success - if no error has occurred. - - display - The connection to the server. - - context - The context for which the attribute change is to go into effect. - - attribute - The X Atom of the attribute to be changed. - - value - The new value of the attribute. - - Errors: - - XvMCBadContext - The context is not valid. - - BadValue - An invalid value was specified. - - BadMatch - This attribute is not defined for this context. - -Status -XvMCGetAttribute ( - Display *display, - XvMCContext *context, - Atom attribute, - int *value -) - - This function queries a context-specific attribute and return - Success and the value if no error has occurred. - - display - The connection to the server. - - context - The context whos attribute we are querying. - - attribute - The X Atom of the attribute to be retrieved. - - value - The returned attribute value. - - Errors: - - XvMCBadContext - The context is not valid. - - BadMatch - This attribute is not defined for this context. - diff --git a/doc/xorg-docs/specs/i18n/Framework.ms b/doc/xorg-docs/specs/i18n/Framework.ms deleted file mode 100644 index cd467e9f2..000000000 --- a/doc/xorg-docs/specs/i18n/Framework.ms +++ /dev/null @@ -1,1567 +0,0 @@ -.\" $Xorg: Framework.ms,v 1.3 2000/08/17 19:42:49 cpqbld Exp $ -.\" $XdotOrg: xc/doc/specs/i18n/Framework.ms,v 1.2 2004/04/23 18:42:19 eich Exp $ -.\" To print this out, type tbl macros.t ThisFile | troff -ms -.\" $XFree86: xc/doc/specs/i18n/Framework.ms,v 1.4 2001/01/17 16:57:45 dawes Exp $ -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.ps 11 -.nr PS 11 -\& -.TL -\s+3\fBX11R6 Sample Implementation Frame Work\fP\s-3 -.sp 2 -.AU -Katsuhisa Yano -.AI -TOSHIBA Corporation -.AU -Yoshio Horiuchi -.AI -IBM Japan -.LP -.bp -.br -\& -.sp 15 -.ps 9 -.nr PS 9 -.LP -Copyright \(co 1994 by TOSHIBA Corporation -.br -Copyright \(co 1994 by IBM Corporation -.LP -Permission to use, copy, modify, and distribute this documentation -for any purpose and without fee is hereby granted, provided -that the above copyright notice and this permission notice appear -in all copies. -TOSHIBA Corporation and IBM Corporation make no representations about -the suitability for any purpose of the information in this document. -This documentation is provided as is without express or implied warranty. -.sp 5 -Copyright \(co 1994 X Consortium -.LP -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -.LP -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -.LP -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. -.sp 3 -\fIX Window System\fP is a trademark of The Open Group. -.ps 11 -.nr PS 11 -.bp 1 -.EH '\fBSample Implementation Frame Work\fP''\fBX11, Release 6.8\fP' -.OH '\fBSample Implementation Frame Work\fP''\fBX11, Release 6.8\fP' -.EF ''\fB % \fP'' -.OF ''\fB % \fP'' -.NH 1 -Preface -.XS \*(SN Preface -.XE -.LP -This document proposes to define the structures, methods and their -signatures that are expected to be common to all locale dependent -functions within the Xlib sample implementation. The following -illustration (Fig.1) is proposed to outline the separating of -the components within the sample implementation. -.LP -.\" figure start -.in +1c -\^... 0.237 5.796 5.24 10.14 -\^... 0.000i 4.344i 5.003i 0.000i -.nr 00 \n(.u -.nf -.PS 4.344i 5.003i -.br -.ps 11 -\h'1.753i'\v'2.130i'\v'-.13m'\L'-1.000i\(br'\v'.13m' -.sp -1 -\h'1.753i'\v'1.130i'\l'1.500i' -.sp -1 -\h'3.253i'\v'1.130i'\v'-.13m'\L'1.000i\(br'\v'.13m' -.sp -1 -\h'3.253i'\v'2.130i'\l'-1.500i' -.sp -1 -\h'1.751i'\v'1.628i'\l'1.499i' -.sp -1 -\h'2.500i'\v'1.128i'\v'-.13m'\L'0.500i\(br'\v'.13m' -.sp -1 -\h'1.875i'\v'1.344i'\h'-0.0m'\v'0.2m'\s12\fRInput\fP -.sp -1 -\h'1.875i'\v'1.532i'\h'-0.0m'\v'0.2m'\s12\fRMethod\fP -.sp -1 -\h'2.625i'\v'1.344i'\h'-0.0m'\v'0.2m'\s12\fROutput\fP -.sp -1 -\h'2.625i'\v'1.532i'\h'-0.0m'\v'0.2m'\s12\fRMethod\fP -.sp -1 -\h'1.938i'\v'1.844i'\h'-0.0m'\v'0.2m'\s12\fR\fP -.sp -1 -\h'2.000i'\v'2.032i'\h'-0.0m'\v'0.2m'\s12\fRX Locale Object\fP -.sp -1 -\h'3.503i'\v'1.630i'\v'-.13m'\L'-0.500i\(br'\v'.13m' -.sp -1 -\h'3.503i'\v'1.130i'\l'1.500i' -.sp -1 -\h'5.003i'\v'1.130i'\v'-.13m'\L'0.500i\(br'\v'.13m' -.sp -1 -\h'5.003i'\v'1.630i'\l'-1.500i' -.sp -1 -\h'3.625i'\v'1.344i'\h'-0.0m'\v'0.2m'\s12\fRC Library\fP -.sp -1 -\h'4.250i'\v'1.532i'\h'-0.0m'\v'0.2m'\s12\fRANSI impl.\fP -.sp -1 -\h'0.003i'\v'1.630i'\v'-.13m'\L'-0.500i\(br'\v'.13m' -.sp -1 -\h'0.003i'\v'1.130i'\l'1.500i' -.sp -1 -\h'1.503i'\v'1.130i'\v'-.13m'\L'0.500i\(br'\v'.13m' -.sp -1 -\h'1.503i'\v'1.630i'\l'-1.500i' -.sp -1 -\h'0.125i'\v'1.344i'\h'-0.0m'\v'0.2m'\s12\fRLocale Library\fP -.sp -1 -\h'0.438i'\v'1.507i'\h'-0.0m'\v'0.2m'\s12\fRnon-AnSI impl.\fP -.sp -1 -\h'3.500i'\v'0.782i'\h'-0.0m'\v'0.2m'\s12\fR<< ANSI/MSE API >>\fP -.sp -1 -\h'4.250i'\v'0.969i'\h'-0.0m'\v'0.2m'\h'-\w'\s12\fR(X Contrib)\fP'u/2u'\s12\fR(X Contrib)\fP\h'-\w'\s12\fR(X Contrib)\fP'u/2u' -.sp -1 -\h'0.125i'\v'3.094i'\h'-0.0m'\v'0.2m'\s12\fRXLC_XLOCALE\fP -.sp -1 -\h'0.125i'\v'3.282i'\h'-0.0m'\v'0.2m'\s12\fR- MB_CUR_MAX\fP -.sp -1 -\h'0.125i'\v'3.444i'\h'-0.0m'\v'0.2m'\s12\fR- codeset info\fP -.sp -1 -\h'0.125i'\v'3.607i'\h'-0.0m'\v'0.2m'\s12\fRo char/charset\fP -.sp -1 -\h'0.125i'\v'3.769i'\h'-0.0m'\v'0.2m'\s12\fRo conv/charset\fP -.sp -1 -\h'0.003i'\v'3.880i'\v'-.13m'\L'-1.000i\(br'\v'.13m' -.sp -1 -\h'0.003i'\v'2.880i'\l'1.500i' -.sp -1 -\h'1.503i'\v'2.880i'\v'-.13m'\L'1.000i\(br'\v'.13m' -.sp -1 -\h'1.503i'\v'3.880i'\l'-1.500i' -.sp -1 -\h'1.875i'\v'3.094i'\h'-0.0m'\v'0.2m'\s12\fRXLC_FONTSET\fP -.sp -1 -\h'1.875i'\v'3.282i'\h'-0.0m'\v'0.2m'\s12\fR- fonset info\fP -.sp -1 -\h'1.875i'\v'3.444i'\h'-0.0m'\v'0.2m'\s12\fR- charset info\fP -.sp -1 -\h'1.875i'\v'3.607i'\h'-0.0m'\v'0.2m'\s12\fR- font/charset\fP -.sp -1 -\h'1.875i'\v'3.769i'\h'-0.0m'\v'0.2m'\s12\fR- XLFD, GL/GR\fP -.sp -1 -\h'1.753i'\v'3.880i'\v'-.13m'\L'-1.000i\(br'\v'.13m' -.sp -1 -\h'1.753i'\v'2.880i'\l'1.500i' -.sp -1 -\h'3.253i'\v'2.880i'\v'-.13m'\L'1.000i\(br'\v'.13m' -.sp -1 -\h'3.253i'\v'3.880i'\l'-1.500i' -.sp -1 -\h'3.625i'\v'3.444i'\h'-0.0m'\v'0.2m'\s12\fR- codeset info\fP -.sp -1 -\h'3.625i'\v'3.607i'\h'-0.0m'\v'0.2m'\s12\fRo char/charset\fP -.sp -1 -\h'3.625i'\v'3.769i'\h'-0.0m'\v'0.2m'\s12\fRo conv/charset\fP -.sp -1 -\h'3.625i'\v'3.282i'\h'-0.0m'\v'0.2m'\s12\fR- MB_CUR_MAX\fP -.sp -1 -\h'3.625i'\v'3.094i'\h'-0.0m'\v'0.2m'\s12\fRlocaledef DB\fP -.sp -1 -\h'3.503i'\v'3.880i'\v'-.13m'\L'-1.000i\(br'\v'.13m' -.sp -1 -\h'3.503i'\v'2.880i'\l'1.500i' -.sp -1 -\h'5.003i'\v'2.880i'\v'-.13m'\L'1.000i\(br'\v'.13m' -.sp -1 -\h'5.003i'\v'3.880i'\l'-1.500i' -.sp -1 -\h'0.753i'\v'0.250i'\D'l0.000i -0.250i' -.sp -1 -\h'0.753i'\l'3.500i' -.sp -1 -\h'4.253i'\D'l0.000i 0.250i' -.sp -1 -\h'4.253i'\v'0.250i'\l'-3.500i' -.sp -1 -\h'2.500i'\v'0.157i'\h'-0.0m'\v'0.2m'\h'-\w'\s12\fRApplication\fP'u/2u'\s12\fRApplication\fP\h'-\w'\s12\fRApplication\fP'u/2u' -.sp -1 -\v'0.782i'\h'-0.0m'\v'0.2m'\s12\fR<< ANSI/MSE API >>\fP -.sp -1 -\h'0.751i'\v'0.969i'\h'-0.0m'\v'0.2m'\h'-\w'\s12\fR(X Contrib)\fP'u/2u'\s12\fR(X Contrib)\fP\h'-\w'\s12\fR(X Contrib)\fP'u/2u' -.sp -1 -\h'2.500i'\v'2.128i'\v'-.13m'\L'0.749i\(br'\v'.13m' -.sp -1 -\h'2.475i'\v'2.777i'\D'l0.025i 0.100i' -.sp -1 -\h'2.525i'\v'2.777i'\D'l-0.025i 0.100i' -.sp -1 -\h'2.500i'\v'2.315i'\D'l-0.250i 0.187i' -.sp -1 -\h'2.250i'\v'2.502i'\l'-1.124i' -.sp -1 -\h'1.126i'\v'2.502i'\v'-.13m'\L'0.375i\(br'\v'.13m' -.sp -1 -\h'1.101i'\v'2.777i'\D'l0.025i 0.100i' -.sp -1 -\h'1.151i'\v'2.777i'\D'l-0.025i 0.100i' -.sp -1 -\h'2.500i'\v'2.315i'\D'l0.250i 0.187i' -.sp -1 -\h'2.750i'\v'2.502i'\l'1.125i' -.sp -1 -\h'3.875i'\v'2.502i'\v'-.13m'\L'0.375i\(br'\v'.13m' -.sp -1 -\h'3.850i'\v'2.777i'\D'l0.025i 0.100i' -.sp -1 -\h'3.900i'\v'2.777i'\D'l-0.025i 0.100i' -.sp -1 -\h'0.376i'\v'1.628i'\v'-.13m'\L'1.249i\(br'\v'.13m' -.sp -1 -\h'0.351i'\v'2.777i'\D'l0.025i 0.100i' -.sp -1 -\h'0.401i'\v'2.777i'\D'l-0.025i 0.100i' -.sp -1 -\h'4.625i'\v'1.628i'\v'-.13m'\L'1.249i\(br'\v'.13m' -.sp -1 -\h'4.600i'\v'2.777i'\D'l0.025i 0.100i' -.sp -1 -\h'4.650i'\v'2.777i'\D'l-0.025i 0.100i' -.sp -1 -\h'2.125i'\v'0.253i'\v'-.13m'\L'0.375i\(br'\v'.13m' -.sp -1 -\h'2.100i'\v'0.528i'\D'l0.025i 0.100i' -.sp -1 -\h'2.150i'\v'0.528i'\D'l-0.025i 0.100i' -.sp -1 -\h'2.875i'\v'0.253i'\v'-.13m'\L'0.375i\(br'\v'.13m' -.sp -1 -\h'2.850i'\v'0.528i'\D'l0.025i 0.100i' -.sp -1 -\h'2.900i'\v'0.528i'\D'l-0.025i 0.100i' -.sp -1 -\h'1.126i'\v'0.253i'\v'-.13m'\L'0.375i\(br'\v'.13m' -.sp -1 -\h'1.101i'\v'0.528i'\D'l0.025i 0.100i' -.sp -1 -\h'1.151i'\v'0.528i'\D'l-0.025i 0.100i' -.sp -1 -\h'3.875i'\v'0.253i'\v'-.13m'\L'0.375i\(br'\v'.13m' -.sp -1 -\h'3.850i'\v'0.528i'\D'l0.025i 0.100i' -.sp -1 -\h'3.900i'\v'0.528i'\D'l-0.025i 0.100i' -.sp -1 -\v'4.002i'\D'l0.125i 0.125i' -.sp -1 -\h'0.125i'\v'4.127i'\l'3.000i' -.sp -1 -\h'3.125i'\v'4.127i'\D'l0.125i -0.125i' -.sp -1 -\h'3.500i'\v'4.002i'\D'l0.125i 0.125i' -.sp -1 -\h'3.625i'\v'4.127i'\l'1.250i' -.sp -1 -\h'4.875i'\v'4.127i'\D'l0.125i -0.125i' -.sp -1 -\h'1.626i'\v'4.344i'\h'-0.0m'\v'0.2m'\h'-\w'\s12\fRXLocale Source (X Core)\fP'u/2u'\s12\fRXLocale Source (X Core)\fP\h'-\w'\s12\fRXLocale Source (X Core)\fP'u/2u' -.sp -1 -\h'4.250i'\v'4.344i'\h'-0.0m'\v'0.2m'\h'-\w'\s12\fRSystem LOcale Source\fP'u/2u'\s12\fRSystem LOcale Source\fP\h'-\w'\s12\fRSystem LOcale Source\fP'u/2u' -.sp -1 -\h'2.500i'\v'0.782i'\h'-0.0m'\v'0.2m'\h'-\w'\s12\fRXLib API\fP'u/2u'\s12\fRXLib API\fP\h'-\w'\s12\fRXLib API\fP'u/2u' -.sp -1 -\h'2.500i'\v'0.969i'\h'-0.0m'\v'0.2m'\h'-\w'\s12\fR(X Core)\fP'u/2u'\s12\fR(X Core)\fP\h'-\w'\s12\fR(X Core)\fP'u/2u' -.sp -1 -\h'1.751i'\v'0.782i'\h'-0.0m'\v'0.2m'\s12\fR<<\fP -.sp -1 -\h'3.063i'\v'0.782i'\h'-0.0m'\v'0.2m'\s12\fR>>\fP -.sp -1 -.sp 1+4.344i -.in -1c -.PE -.if \n(00 .fi -.\" figure end -.LP -.ce -.sp 6p -Fig.1 : Frame Work of Locale Service API Proposal -.LP -Generally speaking, the internationalized portion of Xlib (Locale -Dependent X, LDX) consists of three objects; -locale (LC) , input method (IM) and output method (OM). -The LC provides a set of information that depends on user's language -environment. The IM manages text inputing, and the OM manages text -drawing. Both IM and OM highly depend on LC data. -.LP -In X11R5, there are two sample implementations, Ximp and Xsi, for -Xlib internationalization. But in both implementations, IM and OM -actually refer the private extension of LC. It breaks coexistence -of these two sample implementations. For example, if a user creates -a new OM for special purpose as a part of Ximp, it will not work with -Xsi. -.LP -As a solution of this problem, we propose to define the standard -APIs between these three objects, and define the structure that are -common to these objects. -.LP -.NH 1 -Objective -.XS \*(SN Objective -.XE -.LP -.IP \(bu -Explain the current X11R6 sample implementation -.IP \(bu -Document the common set of locale dependent interfaces -.IP \(bu -Provide more flexible pluggable layer -.LP -.NH 1 -Locale Object Binding Functions -.XS \*(SN Locale Object Binding Functions -.XE -.LP -This chapter describes functions related locale object binding for -implementing the pluggable layer. -.LP -A locale loader is an entry point for locale object, which -instantiates XLCd object and binds locale methods with specified -locale name. The behavior of loader is implementation dependent. -And, what kind of loaders are available is also implementation -dependent. -.LP -The loader is called in -.PN _XOpenLC, -but caller of -.PN _XOpenLC -does not need to care about its inside. For example, if the loader is -implemented with dynamic load functions, and the dynamic module is -expected to be unloaded when the corresponding XLCd is freed, -close methods of XLCdMethods should handle unloading. -.LP -.sp -\fBInitializing a locale loader list\fP -.LP -.FD 0 -void _XlcInitLoader() -.FN -The -.PN _XlcInitLoader -function initializes the locale loader list with vendor specific -manner. Each loader is registered with calling -.PN _XlcAddLoader. -The number of loaders and their order in the loader list is -implementation dependent. -.sp -.LP -\fBAdd a loader\fP -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef XLCd (*XLCdLoadProc)(\fIname\fP); - char \fI*name\fP; - -typedef int XlcPosition; -.De -.TS -lw(.5i) lw(2i) lw(2i). -T{ -#define -T} T{ -XlcHead -T} T{ - 0 -T} -T{ -#define -T} T{ -XlcTail -T} T{ --1 -T} -.TE -.LP -.FD 0 -Bool _XlcAddLoader(\fIproc, position\fP) -.br - XLCdLoadProc \fIproc\fP; -.br - XlcPosition \fIposition\fP; -.FN -.LP -The -.PN _XlcAddLoader -function registers the specified locale loader ``\fIproc\fP'' to the -internal loader list. The position specifies that the loader -``\fIproc\fP'' should be placed in the top of the loader list(XlcHead) -or last(XlcTail). -.LP -The object loader is called from the top of the loader list in order, -when calling time. -.sp -.LP -\fBRemove a loader\fP -.LP -.FD 0 -void _XlcRemoveLoader(\fIproc\fP) -.br - XLCdLoadProc \fIproc\fP; -.FN -.LP -The -.PN _XlcRemoveLoader -function removes the locale loader specified by ``\fIproc\fP'' from the -loader list. -.LP -Current implementation provides following locale loaders; -.DS -.PN _XlcDefaultLoader -.PN _XlcGenericLoader -.PN _XlcEucLoader -.PN _XlcSjisLoader -.PN _XlcUtfLoader -.PN _XaixOsDynamicLoad -.DE -.LP -.NH 1 -Locale Method Interface -.XS \*(SN Locale Method Interface -.XE -.LP -This chapter describes the locale method API, which is a set of -accessible functions from both IM and OM parts. -The locale method API provides the functionalities; obtaining locale -dependent information, handling charset, converting text, etc. -.LP -As a result of using these APIs instead of accessing vender private -extension of the locale object, we can keep locale, IM and OM -independently each other. -.LP -.NH 1 -Locale Method Functions -.XS \*(SN Locale Method Functions -.XE -.LP -\fBOpen a Locale Method\fP -.LP -.FD 0 -XLCd _XOpenLC(\fIname\fP) -.br - char \fI*name\fP; -.FN -.LP -The -.PN _XOpenLC -function opens a locale method which corresponds to the -specified locale name. -.PN _XOpenLC -calls a locale object loader, which is registered via -.PN _XlcAddLoader into the internal loader list. If the called loader -is valid and successfully opens a locale, -.PN _XOpenLC -returns the XLCd. If the loader is invalid or failed to open a locale, -.PN _XOpenLC -calls the next loader. If all registered loaders cannot open a locale, -.PN _XOpenLC -returns NULL. -.LP -.FD 0 -XLCd _XlcCurrentLC() -.FN -.LP -The -.PN _XlcCurrentLC -function returns an XLCd that are bound to current locale. -.sp -.LP -\fBClose a Locale Method\fP -.LP -.FD 0 -void _XCloseLC(\fIlcd\fP) -.br - XLCd \fIlcd\fP; -.FN -.LP -The -.PN _XCloseLC -function close a locale method the specified lcd. -.sp -.LP -\fBObtain Locale Method values\fP -.LP -.FD 0 -char * _XGetLCValues(\fIlcd\fP, ...) -.br - XLCd \fIlcd\fP; -.FN -.LP -The -.PN _XGetLCValues -function returns NULL if no error occurred; otherwise, it returns the -name of the first argument that could not be obtained. -The following values are defined as standard arguments. Other values -are implementation dependent. -.LP -.TS H -tab(:); -l l l. -_ -.sp 6p -.B -Name:Type:Description -.sp 6p -_ -.sp 6p -.TH -.R -XlcNCodeset:char*:codeset part of locale name -XlcNDefaultString:char*:XDefaultString() -XlcNEncodingName:char*:encoding name -XlcNLanguage:char*:language part of locale name -XlcNMbCurMax:int:ANSI C MB_CUR_MAX -XlcNStateDependentEncoding:Bool:is state-dependent encoding or not -XlcNTerritory:char*:territory part of locale name -.sp 6p -_ -.TE -.LP -.NH 1 -Charset functions -.XS \*(SN -Charset functions -.XE -.LP -The XlcCharSet is an identifier which represents a subset of characters -(character set) in the locale object. -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef enum { - XlcUnknown, XlcC0, XlcGL, XlcC1, XlcGR, XlcGLGR, XlcOther -} XlcSide; - -typedef struct _XlcCharSetRec *XlcCharSet; - -typedef struct { - char *name; - XPointer value; -} XlcArg, *XlcArgList; - -typedef char* (*XlcGetCSValuesProc)(\fIcharset\fP, \fIargs\fP, \fInum_args\fP); - XlcCharSet \fIcharset\fP; - XlcArgList \fIargs\fP; - int \fInum_args\fP; - -typedef struct _XlcCharSetRec { - char *name; - XrmQuark xrm_name; - char *encoding_name; - XrmQuark xrm_encoding_name; - XlcSide side; - int char_size; - int set_size; - char *ct_sequence; - XlcGetCSValuesProc get_values; -} XlcCharSetRec; -.De -.sp -.LP -\fBGet an XlcCharSet\fP -.LP -.FD 0 -XlcCharSet _XlcGetCharSet(\fIname\fP) -.br - char \fI*name\fP; -.FN -.LP -The -.PN _XlcGetCharSet -function gets an XlcCharSet which corresponds to the charset name -specified by ``\fIname\fP''. -.PN _XlcGetCharSet -returns NULL, if no XlcCharSet bound to specified ``\fIname\fP''. -.LP -The following character sets are pre-registered. -.LP -.TS H -tab(@); -l l. -_ -.sp 6p -.B -Name@Description -.sp 6p -_ -.sp 6p -.TH -.R -ISO8859-1:GL@7-bit ASCII graphics (ANSI X3.4-1968), -@Left half of ISO 8859 sets -JISX0201.1976-0:GL@Left half of JIS X0201-1976 (reaffirmed 1984), -@8-Bit Alphanumeric-Katakana Code -.sp -ISO8859-1:GR@Right half of ISO 8859-1, Latin alphabet No. 1 -ISO8859-2:GR@Right half of ISO 8859-2, Latin alphabet No. 2 -ISO8859-3:GR@Right half of ISO 8859-3, Latin alphabet No. 3 -ISO8859-4:GR@Right half of ISO 8859-4, Latin alphabet No. 4 -ISO8859-7:GR@Right half of ISO 8859-7, Latin/Greek alphabet -ISO8859-6:GR@Right half of ISO 8859-6, Latin/Arabic alphabet -ISO8859-8:GR@Right half of ISO 8859-8, Latin/Hebrew alphabet -ISO8859-5:GR@Right half of ISO 8859-5, Latin/Cyrillic alphabet -ISO8859-9:GR@Right half of ISO 8859-9, Latin alphabet No. 5 -JISX0201.1976-0:GR@Right half of JIS X0201-1976 (reaffirmed 1984), -@8-Bit Alphanumeric-Katakana Code -.sp -GB2312.1980-0:GL@GB2312-1980, China (PRC) Hanzi defined as GL -GB2312.1980-0:GR@GB2312-1980, China (PRC) Hanzi defined as GR -JISX0208.1983-0:GL@JIS X0208-1983, Japanese Graphic Character Set -@defined as GL -JISX0208.1983-0:GR@JIS X0208-1983, Japanese Graphic Character Set -@defined as GR -KSC5601.1987-0:GL@KS C5601-1987, Korean Graphic Character Set -@defined as GL -KSC5601.1987-0:GR@KS C5601-1987, Korean Graphic Character Set -@defined as GR -JISX0212.1990-0:GL@JIS X0212-1990, Japanese Graphic Character Set -@defined as GL -JISX0212.1990-0:GR@JIS X0212-1990, Japanese Graphic Character Set -@defined as GR -.\" CNS11643.1986-0:GL -.\" CNS11643.1986-1:GL -.\" TIS620-0:GR -.sp 6p -_ -.TE -.LP -.sp -\fBAdd an XlcCharSet\fP -.LP -.FD 0 -Bool _XlcAddCharSet(\fIcharset\fP) - XlcCharSet \fIcharset\fP; -.FN -.LP -The -.PN _XlcAddCharSet -function registers XlcCharSet specified by ``\fIcharset\fP''. -.LP -.sp -\fBObtain Character Set values\fP -.LP -.FD 0 -char * _XlcGetCSValues(\fIcharset\fP, ...) -.br - XlcCharSet \fIcharset\fP; -.FN -.LP -The -.PN _XlcGetCSValues -function returns NULL if no error occurred; -otherwise, it returns the name of the first argument that could not -be obtained. The following values are defined as standard arguments. -Other values are implementation dependent. -.LP -.TS H -tab(:); -l l l. -_ -.sp 6p -.B -Name:Type:Description -.sp 6p -_ -.sp 6p -.TH -.R -XlcNName:char*:charset name -XlcNEncodingName:char*:XLFD CharSet Registry and Encoding -XlcNSide:XlcSide:charset side (GL, GR, ...) -XlcNCharSize:int:number of octets per character -XlcNSetSize:int:number of character sets -XlcNControlSequence:char*:control sequence of Compound Text -.sp 6p -_ -.TE -.LP -.NH 1 -Converter Functions -.XS \*(SN Converter Functions -.XE -.LP -We provide a set of the common converter APIs, that are independent -from both of source and destination text type. -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct _XlcConvRec *XlcConv; - -typedef void (*XlcCloseConverterProc)(\fIconv\fP); - XlcConv \fIconv\fP; - -typedef int (*XlcConvertProc)(\fIconv\fP, \fIfrom\fP, \fIfrom_left\fP, \fIto\fP, \fIto_left\fP, \fIargs\fP, \fInum_args\fP); - XlcConv \fIconv\fP; - XPointer \fI*from\fP; - int \fI*from_left\fP; - XPointer \fI*to\fP; - int \fI*to_left\fP; - XPointer \fI*args\fP; - int \fInum_args\fP; - -typedef void (*XlcResetConverterProc)(\fIconv\fP); - XlcConv \fIconv\fP; - -typedef struct _XlcConvMethodsRec { - XlcCloseConverterProc close; - XlcConvertProc convert; - XlcResetConverterProc reset; -} XlcConvMethodsRec, *XlcConvMethods; - -typedef struct _XlcConvRec { - XlcConvMethods methods; - XPointer state; -} XlcConvRec; -.De -.LP -.sp -\fBOpen a converter\fP -.LP -.FD 0 -XlcConv _XlcOpenConverter(\fIfrom_lcd\fP, \fIfrom_type\fP, \fIto_lcd\fP, \fIto_type\fP) -.br - XLCd \fIfrom_lcd\fP; -.br - char \fI*from_type\fP; -.br - XLCd \fIto_lcd\fP; -.br - char \fI*to_type\fP; -.FN -.LP -.PN _XlcOpenConverter -function opens the converter which converts a text from specified -``\fIfrom_type\fP'' to specified ``\fIto_type\fP'' encoding. If the -function cannot find proper converter or cannot open a corresponding -converter, it returns NULL. Otherwise, it returns the conversion -descriptor. -.LP -The following types are pre-defined. Other types are implementation -dependent. -.LP -.TS H -tab(:); -l l l l. -_ -.sp 6p -.B -Name:Type:Description:Arguments -.sp 6p -_ -.sp 6p -.TH -.R -XlcNMultiByte:char *:multibyte:- -XlcNWideChar:wchar_t *:wide character:- -XlcNCompoundText:char *:COMPOUND_TEXT:- -XlcNString:char *:STRING:- -XlcNCharSet:char *:per charset:XlcCharSet -XlcNChar:char *:per character:XlcCharSet -.sp 6p -_ -.TE -.LP -.sp -\fBClose a converter\fP -.LP -.FD 0 -void _XlcCloseConverter(\fIconv\fP) -.br - XlcConv \fIconv\fP; -.FN -.LP -The -.PN _XlcCloseConverter -function closes the specified converter ``\fIconv\fP''. -.LP -.sp -\fBCode conversion\fP -.LP -.FD 0 -int _XlcConvert(\fIconv\fP, \fIfrom\fP, \fIfrom_left\fP, \fIto\fP, \fIto_left\fP, \fIargs\fP, \fInum_args\fP) -.br - XlcConv \fIconv\fP; -.br - XPointer \fI*from\fP; -.br - int \fI*from_left\fP; -.br - XPointer \fI*to\fP; -.br - int \fI*to_left\fP; -.br - XPointer \fI*args\fP; -.br - int \fInum_args\fP; -.FN -.LP -The -.PN _XlcConvert -function converts a sequence of characters from one type, in the array -specified by ``\fIfrom\fP'', into a sequence of corresponding characters -in another type, in the array specified by ``\fIto\fP''. The types are -those specified in the -.PN _XlcOpenConverter() -call that returned the conversion descriptor, ``\fIconv\fP''. -The arguments ``\fIfrom\fP'', ``\fIfrom_left\fP'', ``\fIto\fP'' and -``\fIto_left\fP'' have the same specification of XPG4 iconv function. -.LP -For state-dependent encodings, the conversion descriptor ``\fIconv\fP'' -is placed into its initial shift state by a call for which ``\fIfrom\fP'' -is a NULL pointer, or for which ``\fIfrom\fP'' points to a null pointer. -.LP -The following 2 converters prepared by locale returns appropriate -charset (XlcCharSet) in an area pointed by args[0]. -.LP -.TS -tab(:); -l l l. -_ -.sp 6p -.B -From:To:Description -.sp 6p -_ -.sp 6p -.R -XlcNMultiByte:XlcNCharSet:Segmentation (Decomposing) -XlcNWideChar:XlcNCharSet:Segmentation (Decomposing) -.sp 6p -_ -.TE -.LP -The conversion, from XlcNMultiByte/XlcNWideChar to XlcNCharSet, -extracts a segment which has same charset encoding characters. -More than one segment cannot be converted in a call. -.LP -.sp -\fBReset a converter\fP -.LP -.FD 0 -void _XlcResetConverter(\fIconv\fP) -.br - XlcConv \fIconv\fP; -.FN -.LP -The -.PN _XlcResetConverter -function reset the specified converter ``\fIconv\fP''. -.LP -.sp -\fBRegister a converter\fP -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef XlcConv (*XlcOpenConverterProc)(\fIfrom_lcd\fP, \fIfrom_type\fP, \fIto_lcd\fP, \fIto_type\fP); - XLCd \fIfrom_lcd\fP; - char \fI*from_type\fP; - XLCd \fIto_lcd\fP; - char \fI*to_type\fP; -.De -.LP -.FD 0 -Bool _XlcSetConverter(\fIfrom_lcd\fP, \fIfrom\fP, \fIto_lcd\fP, \fIto\fP, \fIconverter\fP) -.br - XLCd \fIfrom_lcd\fP; -.br - char \fI*from\fP; -.br - XLCd \fIto_lcd\fP; -.br - char \fI*to\fP; -.br - XlcOpenConverterProc \fIconverter\fP; -.FN -.LP -The \fBXlcSetConverter\fP function registers a converter which convert -from ``\fIfrom_type\fP'' to ``\fIto_type\fP'' into the converter list -(in the specified XLCd). -.LP -.NH 1 -X Locale Database functions -.XS \*(SN X Locale Database functions -.XE -.LP -X Locale Database contains the subset of user's environment that -depends on language. The following APIs are provided for accessing -X Locale Database and other locale relative files. -.LP -For more detail about X Locale Database, please refer -X Locale Database Definition document. -.LP -.sp -\fBGet a resource from database\fP -.LP -.FD 0 -void _XlcGetResource(\fIlcd\fP, \fIcategory\fP, \fIclass\fP, \fIvalue\fP, \fIcount\fP) -.br - XLCd \fIlcd\fP; -.br - char \fI*category\fP; -.br - char \fI*class\fP; -.br - char \fI***value\fP; -.br - int \fI*count\fP; -.FN -.LP -The -.PN _XlcGetResource -function obtains a locale dependent data which is associated with the -locale of specified ``\fIlcd\fP''. -The locale data is provided by system locale or by X Locale Database -file, and what kind of data is available is implementation dependent. -.LP -The specified ``\fIcategory\fP'' and ``\fIclass\fP'' are used for -finding out the objective locale data. -.LP -The returned value is returned in value argument in string list form, -and the returned count shows the number of strings in the value. -.LP -The returned value is owned by locale method, and should not be modified -or freed by caller. -.LP -.sp -\fBGet a locale relative file name\fP -.LP -.FD 0 -char * _XlcFileName(\fIlcd\fP, \fIcategory\fP) -.br - XLCd \fIlcd\fP; -.br - char \fI*category\fP; -.FN -.LP -The -.PN _XlcFileName -functions returns a file name which is bound to the specified ``\fIlcd\fP'' -and ``\fIcategory\fP'', as a null-terminated string. If no file name can -be found, or there is no readable file for the found file name, -.PN _XlcFileName -returns NULL. The returned file name should be freed by caller. -.LP -The rule for searching a file name is implementation dependent. -In current implementation, -.PN _XlcFileName -uses ``{category}.dir'' file as mapping table, which has pairs of -strings, a full locale name and a corresponding file name. -.LP -.NH 1 -Utility Functions -.XS \*(SN Utility Functions -.XE -.LP -\fBCompare Latin-1 strings\fP -.LP -.FD 0 -int _XlcCompareISOLatin1(\fIstr1\fP, \fIstr2\fP) -.br - char \fI*str1\fP, \fI*str2\fP; -.FN -.FD 0 -int _XlcNCompareISOLatin1(\fIstr1\fP, \fIstr2\fP, \fIlen\fP) -.br - char \fI*str1\fP, \fI*str2\fP; -.br - int \fIlen\fP; -.FN -.LP -The -.PN _XlcCompareIsoLatin1 -function to compares two ISO-8859-1 strings. Bytes representing ASCII lower -case letters are converted to upper case before making the comparison. -The value returned is an integer less than, equal to, or greater than -zero, depending on whether ``\fIstr1\fP'' is lexicographicly less than, -equal to, or greater than ``\fIstr2\fP''. -.LP -The -.PN _XlcNCompareIsoLatin1 -function is identical to -.PN _XlcCompareISOLatin1, -except that at most ``\fIlen\fP'' bytes are compared. -.LP -.sp -\fBResource Utility\fP -.LP -.FD 0 -int XlcNumber(\fIarray\fP) - ArrayType \fIarray\fP; -.FN -.LP -Similar to XtNumber. -.LP -.FD 0 -void _XlcCopyFromArg(\fIsrc\fP, \fIdst\fP, \fIsize\fP) -.br - char \fI*src\fP; -.br - char \fI*dst\fP; -.br - int \fIsize\fP; -.FN -.FD 0 -void _XlcCopyToArg(\fIsrc\fP, \fIdst\fP, \fIsize\fP) -.br - char \fI*src\fP; -.br - char \fI**dst\fP; -.br - int \fIsize\fP; -.FN -.LP -Similar to -.PN _XtCopyFromArg -and -.PN _XtCopyToArg. -.LP -.FD 0 -void _XlcCountVaList(\fIvar\fP, \fIcount_ret\fP) -.br - va_list \fIvar\fP; -.br - int \fI*count_ret\fP; -.FN -.LP -Similar to -.PN _XtCountVaList. -.LP -.FD 0 -void _XlcVaToArgList(\fIvar\fP, \fIcount\fP, \fIargs_ret\fP) -.br - va_list \fIvar\fP; -.br - int \fIcount\fP; -.br - XlcArgList \fI*args_ret\fP; -.FN -.LP -Similar to -.PN _XtVaToArgList. -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct _XlcResource { - char *name; - XrmQuark xrm_name; - int size; - int offset; - unsigned long mask; -} XlcResource, *XlcResourceList; -.De -.LP -.TS -lw(.5i) lw(2i) lw(2i). -T{ -#define -T} T{ -XlcCreateMask -T} T{ -(1L<<0) -T} -T{ -#define -T} T{ -XlcDefaultMask -T} T{ -(1L<<1) -T} -T{ -#define -T} T{ -XlcGetMask -T} T{ -(1L<<2) -T} -T{ -#define -T} T{ -XlcSetMask -T} T{ -(1L<<3) -T} -T{ -#define -T} T{ -XlcIgnoreMask -T} T{ -(1L<<4) -T} -.TE -.LP -.FD 0 -void _XlcCompileResourceList(\fIresources\fP, \fInum_resources\fP) -.br - XlcResourceList \fIresources\fP; -.br - int \fInum_resources\fP; -.FN -.LP -Similar to -.PN _XtCompileResourceList. -.LP -.FD 0 -char * _XlcGetValues(\fIbase\fP, \fIresources\fP, \fInum_resources\fP, \fIargs\fP, \fInum_args\fP, \fImask\fP) -.br - XPointer \fIbase\fP; -.br - XlcResourceList \fIresources\fP; -.br - int \fInum_resources\fP; -.br - XlcArgList \fIargs\fP; -.br - int \fInum_args\fP; -.br - unsigned long \fImask\fP; -.FN -.LP -Similar to XtGetSubvalues. -.LP -.FD 0 -char * _XlcSetValues(\fIbase\fP, \fIresources\fP, \fInum_resources\fP, \fIargs\fP, \fInum_args\fP, \fImask\fP) -.br - XPointer \fIbase\fP; -.br - XlcResourceList \fIresources\fP; -.br - int \fInum_resources\fP; -.br - XlcArgList \fIargs\fP; -.br - int \fInum_args\fP; -.br - unsigned long \fImask\fP; -.FN -.LP -Similar to XtSetSubvalues. -.LP -.sp -\fBANSI C Compatible Functions\fP -.LP -The following are ANSI C/MSE Compatible Functions for non-ANSI C environment. -.LP -.FD 0 -int _Xmblen(\fIstr\fP, \fIlen\fP) -.br - char \fI*str\fP; -.br - int \fIlen\fP; -.FN -.LP -The -.PN _Xmblen -function returns the number of characters pointed to by ``\fIstr\fP''. -Only ``\fIlen\fP'' bytes in ``\fIstr\fP'' are used in determining the -character count returned. ``\fIStr\fP'' may point at characters from -any valid codeset in the current locale. -.LP -The call -.PN _Xmblen -is equivalent to -.RS -_Xmbtowc(_Xmbtowc((\fIwchar_t*\fP)NULL, \fIstr\fP, \fIlen\fP)) -.RE -.LP -.FD 0 -int _Xmbtowc(\fIwstr\fP, \fIstr\fP, \fIlen\fP) -.br - wchar_t \fI*wstr\fP; -.br - char \fI*str\fP; -.br - int \fIlen\fP; -.FN -.LP -The -.PN _Xmbtowc -function converts the character(s) pointed to by ``\fIstr\fP'' -to their wide character representation(s) pointed to by ``\fIwstr\fP''. -``\fILen\fP'' is the number of bytes in ``\fIstr\fP'' to be converted. -The return value is the number of characters converted. -.LP -The call -.PN _Xmbtowc -is equivalent to -.RS -_Xlcmbtowc((XLCd)NULL, \fIwstr\fP, \fIstr\fP, \fIlen\fP) -.RE -.LP -.FD 0 -int _Xlcmbtowc(\fIlcd\fP, \fIwstr\fP, \fIstr\fP, \fIlen\fP) -.br - XLCd \fIlcd\fP; -.br - wchar_t \fI*wstr\fP; -.br - char \fI*str\fP; -.br - int \fIlen\fP; -.FN -.LP -The -.PN _Xlcmbtowc -function is identical to -.PN _Xmbtowc, -except that it requires the ``\fIlcd\fP'' argument. If ``\fIlcd\fP'' -is (XLCd) NULL, -.PN _Xlcmbtowc, -calls -.PN _XlcCurrentLC -to determine the current locale. -.LP -.FD 0 -int _Xwctomb(\fIstr\fP, \fIwc\fP) -.br - char \fI*str\fP; -.br - wchar_t \fIwc\fP; -.FN -.LP -The -.PN _Xwctomb -function converts a single wide character pointed to by ``\fIwc\fP'' to -its multibyte representation pointed to by ``\fIstr\fP''. -On success, the return value is 1. -.LP -The call -.PN _Xwctomb -is equivalent to -.RS -_Xlcwctomb((XLCd)NULL, \fIstr\fP, \fIwstr\fP) -.RE -.LP -.FD 0 -int _Xlcwctomb(\fIlcd\fP, \fIstr\fP, \fIwc\fP) -.br - XLCd \fIlcd\fP; -.br - char \fI*str\fP; -.br - wchar_t \fIwc\fP; -.FN -.LP -The -.PN _Xlcwctomb -function is identical to _Xwctomb, except that it requires the -``\fIlcd\fP'' argument. If ``\fIlcd\fP'' is (XLCd) NULL, -.PN _Xlcwctomb, -calls -.PN _XlcCurrentLC -to determine the current locale. -.LP -.FD 0 -int _Xmbstowcs(\fIwstr\fP, \fIstr\fP, \fIlen\fP) -.br - wchar_t \fI*wstr\fP; -.br - char \fI*str\fP; -.br - int \fIlen\fP; -.FN -.LP -The -.PN _Xmbstowcs -function converts the NULL-terminated string pointed to by ``\fIstr\fP'' -to its wide character string representation pointed to by ``\fIwstr\fP''. -``\fILen\fP'' is the number of characters in ``\fIstr\fP'' to be converted. -.LP -The call -.PN _Xmbstowcs -is equivalent to -.RS -_Xlcmbstowcs((XLCd)NULL, \fIwstr\fP, \fIstr\fP, \fIlen\fP) -.RE -.LP -.FD 0 -int _Xlcmbstowcs(\fIlcd\fP, \fIwstr\fP, \fIstr\fP, \fIlen\fP) -.br - XLCd \fIlcd\fP; -.br - wchar_t \fI*wstr\fP; -.br - char \fI*str\fP; -.br - int \fIlen\fP; -.FN -.LP -The -.PN _Xlcmbstowcs -function is identical to _Xmbstowcs, except that it requires the -``\fIlcd\fP'' argument. If ``\fIlcd\fP'' is (XLCd) NULL, -.PN _Xlcmbstowcs, -calls -.PN _XlcCurrentLC -to determine the current locale. -.LP -.FD 0 -int _Xwcstombs(\fIstr\fP, \fIwstr\fP, \fIlen\fP) -.br - char \fI*str\fP; -.br - wchar_t \fI*wstr\fP; -.br - int \fIlen\fP; -.FN -.LP -The -.PN _Xwcstombs -function converts the (wchar_t) NULL terminated wide character string -pointed to by ``\fIwstr\fP'' to the NULL terminated multibyte string -pointed to by ``\fIstr\fP''. -.LP -The call -.PN _Xwcstombs -is equivalent to -.RS -_Xlcwcstombs((XLCd)NULL, \fIstr\fP, \fIwstr\fP, \fIlen\fP) -.RE -.LP -.FD 0 -int _Xlcwcstombs(\fIlcd\fP, \fIstr\fP, \fIwstr\fP, \fIlen\fP) -.br - XLCd \fIlcd\fP; -.br - char \fI*str\fP; -.br - wchar_t \fI*wstr\fP; -.br - int \fIlen\fP; -.FN -.LP -The -.PN _Xlcwcstombs -function is identical to _Xwcstombs, except that it requires the -``\fIlcd\fP'' argument. If ``\fIlcd\fP'' is (XLCd) NULL, -.PN _Xlcwcstombs, -calls -.PN _XlcCurrentLC -to determine the current locale. -.LP -.FD 0 -int _Xwcslen(\fIwstr\fP) -.br - wchar_t \fI*wstr\fP; -.FN -.LP -The -.PN _Xwcslen -function returns the count of wide characters in the (wchar_t) NULL -terminated wide character string pointed to by ``\fIwstr\fP''. -.LP -.FD 0 -wchar_t * _Xwcscpy(\fIwstr1\fP, \fIwstr2\fP) -.br - wchar_t \fI*wstr1\fP, \fI*wstr2\fP; -.FN -.FD 0 -wchar_t * _Xwcsncpy(\fIwstr1\fP, \fIwstr2\fP, \fIlen\fP) -.br - wchar_t \fI*wstr1\fP, \fI*wstr2\fP; -.br - int \fIlen\fP; -.FN -.LP -The -.PN _Xwcscpy -function copies the (wchar_t) NULL terminated wide character string -pointed to by ``\fIwstr2\fP'' to the object pointed at by ``\fIwstr1\fP''. -``\fIWstr1\fP'' is (wchar_t) NULL terminated. The return value is a -pointer to ``\fIwstr1\fP''. -.LP -The -.PN _Xwcsncpy -function is identical to -.PN _Xwcscpy, -except that it copies ``\fIlen\fP'' wide characters from the object -pointed to by ``\fIwstr2\fP'' to the object pointed to ``\fIwstr1\fP''. -.LP -.FD 0 -int _Xwcscmp(\fIwstr1\fP, \fIwstr2\fP) -.br - wchar_t \fI*wstr1\fP, \fI*wstr2\fP; -.FN -.FD 0 -int _Xwcsncmp(\fIwstr1\fP, \fIwstr2\fP, \fIlen\fP) -.br - wchar_t \fI*wstr1\fP, \fI*wstr2\fP; -.br - int \fIlen\fP; -.FN -.LP -The -.PN _Xwcscmp -function compares two (wchar_t) NULL terminated wide character strings. -The value returned is an integer less than, equal to, or greater than zero, -depending on whether ``\fIwstr1\fP'' is lexicographicly less then, equal to, -or greater than ``\fIstr2\fP''. -.LP -The -.PN _Xwcsncmp -function is identical to -.PN _XlcCompareISOLatin1, -except that at most ``\fIlen\fP'' wide characters are compared. -.sp -.\" -------------------------------------------------------------------- -.\" .LP -.\" \fBLocale Method Internal Functions\fP -.\" .LP -.\" .FD 0 -.\" XlcCharSet _XlcCreateDefaultCharSet(\fIname\fP, \fIct_sequence\fP) -.\" .br -.\" char \fI*name\fP; -.\" .br -.\" char \fI*ct_sequence\fP; -.\" .FN -.\" .FD 0 -.\" Bool _XlcParseCharSet(\fIcharset\fP) -.\" .br -.\" XlcCharSet \fIcharset\fP; -.\" .FN -.\" .FD 0 -.\" void _XlcGetLocaleDataBase(\fIlcd\fP, \fIcategory\fP, \fIname\fP, \fIvalue\fP, \fIcount\fP) -.\" .br -.\" XLCd \fIlcd\fP; -.\" .br -.\" char \fI*category\fP; -.\" .br -.\" char \fI*name\fP; -.\" .br -.\" char \fI***value\fP; -.\" .br -.\" int \fI*count\fP; -.\" .FN -.\" .FD 0 -.\" void _XlcDestroyLocaleDataBase(\fIlcd\fP) -.\" .br -.\" XLCd \fIlcd\fP; -.\" .FN -.\" .FD 0 -.\" XPointer _XlcCreateLocaleDataBase(\fIlcd\fP) -.\" .br -.\" XLCd \fIlcd\fP; -.\" .FN -.\" .LP -.\" .sp -.\" \fBObtain an locale database path\fP -.\" .LP -.\" .FD 0 -.\" int _XlcResolveI18NPath(\fIdir\fP) -.\" .br -.\" char \fI*dir\fP; -.\" .FN -.\" .LP -.\" The -.\" .PN _XlcResolveI18NPath -.\" function returns path name list that is related to X Locale Database. -.\" The obtained path is stored into the array which is pointed by -.\" specified ``\fIdir\fP''. The path consists of directory paths which -.\" are separated with colon. -.\" If the environment variable XLOCALEDIR is specified, the path -.\" contains its contents. -.\" .LP -.\" The default path of X Locale Database is implementation dependent. -.\" In current implementation, it's determined in build time. -.\" .LP -.\" .PN _XlcResolveI18NPath -.\" does not check overflow of the array to which the ``\fIdir\fP'' -.\" parameter points. Caller should provide enough buffer to store this -.\" string. -.\" .LP -.\" .sp -.\" \fBObtain a full locale name\fP -.\" .LP -.\" .FD 0 -.\" int _XlcResolveLocaleName(\fIlc_name\fP, \fIfull_name\fP, \fIlanguage\fP, \fIterritory\fP, \fIcodeset\fP) -.\" .br -.\" char \fI*lc_name\fP; -.\" .br -.\" char \fI*full_name\fP; -.\" .br -.\" char \fI*language\fP; -.\" .br -.\" char \fI*territory\fP; -.\" .br -.\" char \fI*codeset\fP; -.\" .FN -.\" .LP -.\" The -.\" .PN _XlcResolveLocaleName -.\" function returns a full locale name. -.\" The obtained full locale name is stored into the array which is -.\" pointed by specified ``\fIfull_name\fP''. -.\" The language, territory and codeset part of the full locale name -.\" are copied to the return arguments, ``\fIlanguage\fP'', -.\" ``\fIterritory\fP'' and ``\fIcodeset\fP'', respectively. -.\" NULL can be specified for these arguments. -.\" .LP -.\" The rule for mapping from locale name to full locale name is -.\" implementation dependent. -.\" .LP -.\" .PN _XlcResolveLocaleName -.\" does not check overflow of the array to which -.\" ``\fIfull_name\fP'', ``\fIlanguage\fP'', ``\fIterritory\fP'' and -.\" ``\fIcodeset\fP'' parameter point. -.\" Caller should provide enough buffer to store those string. -.\" .LP -.\" In current implementation, -.\" .PN _XlcResolveLocaleName -.\" uses locale.alias file as mapping table, which has pairs of strings, -.\" a locale name and a full locale name. -.\" .LP -.\" .FD 0 -.\" int _XlcResolveDBName(\fIlc_name\fP, \fIfile_name\fP) -.\" .br -.\" char \fI*lc_name\fP; -.\" .br -.\" char \fI*file_name\fP; -.\" .FN -.\" .FD 0 -.\" XLCd _XlcCreateLC(\fIname\fP, \fImethods\fP) -.\" .br -.\" char \fI*name\fP; -.\" .br -.\" XLCdMethods \fImethods\fP; -.\" .FN -.\" .FD 0 -.\" void _XlcDestroyLC(\fIlcd\fP) -.\" .br -.\" XLCd \fIlcd\fP; -.\" .FN -.\" .LP -.\" - diff --git a/doc/xorg-docs/specs/i18n/LocaleDB.ms b/doc/xorg-docs/specs/i18n/LocaleDB.ms deleted file mode 100644 index f9a16d8b3..000000000 --- a/doc/xorg-docs/specs/i18n/LocaleDB.ms +++ /dev/null @@ -1,502 +0,0 @@ -.\" $Xorg: LocaleDB.ms,v 1.3 2000/08/17 19:42:49 cpqbld Exp $ -.\" $XdotOrg: xc/doc/specs/i18n/LocaleDB.ms,v 1.2 2004/04/23 18:42:19 eich Exp $ -.\" To print this out, type tbl macros.t ThisFile | troff -ms -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.ps 11 -.nr PS 11 -\& -.TL -\s+3\fBX Locale Database Definition\fP\s-3 -.sp 2 -.AU -Yoshio Horiuchi -.AI -IBM Japan -.LP -.bp -.br -\& -.ps 9 -.nr PS 9 -.sp 2 -.LP -Copyright \(co IBM Corporation 1994 -.LP -All Rights Reserved -.LP -License to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of IBM not be -used in advertising or publicity pertaining to distribution of the -software without specific, written prior permission. -.LP -IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING -ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS, AND -NONINFRINGEMENT OF THIRD PARTY RIGHTS, IN NO EVENT SHALL -IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS -SOFTWARE. -.sp 5 -Copyright \(co 1994 X Consortium -.LP -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -.LP -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -.LP -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. -.sp 3 -\fIX Window System\fP is a trademark of The Open Group. -.LP -.bp 1 -.ps 11 -.nr PS 11 -.EH '\fBX Locale Database Definition\fP''\fBX11, Release 6.8\fP' -.OH '\fBX Locale Database Definition\fP''\fBX11, Release 6.8\fP' -.EF ''\fB % \fP'' -.OF ''\fB % \fP'' -.NH 1 -General -.XS -\*(SN General -.XE -.LP -An X Locale Database contains the subset of a user's environment that -depends on language, in X Window System. It is made up from one or more -categories. Each category consists of some classes and sub-classes. -.LP -It is provided as a plain ASCII text file, so a user can change its -contents easily. It allows a user to customize the behavior of -internationalized portion of Xlib without changing Xlib itself. -.LP -This document describes; -.RS -.IP -Database Format Definition -.IP -Contents of Database in sample implementation -.RE -.LP -Since it is hard to define the set of required information for all -platforms, only the flexible database format is defined. -The available entries in database are implementation dependent. -.LP -.NH 1 -Database Format Definition -.XS -\*(SN Database Format Definition -.XE -.LP -The X Locale Database contains one or more category definitions. -This section describes the format of each category definition. -.LP -The category definition consists of one or more class definitions. -Each class definition has a pair of class name and class value, or -has several subclasses which are enclosed by the left brace ({) and -the right brace (}). -.LP -Comments can be placed by using the number sign character (#). -Putting the number sign character on the top of the line indicates -that the entire line is comment. Also, putting any whitespace character -followed by the number sign character indicates that a part of the line -(from the number sign to the end of the line) is comment. -A line can be continued by placing backslash (\\) character as the -last character on the line; this continuation character will be -discarded from the input. Comment lines cannot be continued on -a subsequent line using an escaped new line character. -.LP -X Locale Database only accepts XPCS, the X Portable Character Set. -The reserved symbols are; the quotation mark("), the number sign (#), -the semicolon(;), the backslash(\\), the left brace({) and -the right brace(}). -.LP -The format of category definition is; -.RS -.TS -tab(@); -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l r l -l r l -l l l. -CategoryDefinition@::=@CategoryHeader CategorySpec CategoryTrailer -CategoryHeader@::=@CategoryName NL -CategorySpec@::=@{ ClassSpec } -CategoryTrailer@::=@"END" Delimiter CategoryName NL -CategoryName@::=@String -ClassSpec@::=@ClassName Delimiter ClassValue NL -ClassName@::=@String -ClassValue@::=@ValueList | "{" NL { ClassSpec } "}" -ValueList@::=@Value | Value ";" ValueList -Value@::=@ValuePiece | ValuePiece Value -ValuePiece@::=@String | QuotedString | NumericString -String@::=@Char { Char } -QuotedString@::=@""" QuotedChar { QuotedChar } """ -NumericString@::=@"\\\\o" OctDigit { OctDigit } -@|@"\\\\d" DecDigit { DecDigit } -@|@"\\\\x" HexDigit { HexDigit } -Char@::=@ -QuotedChar@::=@ -OctDigit@::=@ -DecDigit@::=@ -HexDigit@::=@ -Delimiter@::=@ Space { Space } -Space@::=@ | -NL@::=@ -.TE -.RE -.LP -Elements separated by vertical bar (|) are alternatives. Curly -braces ({...}) indicate zero or more repetitions of the enclosed -elements. Square brackets ([...]) indicate that the enclosed element -is optional. Quotes ("...") are used around literal characters. -.LP -The backslash, which is not the top character of the NumericString, is -recognized as an escape character, so that the next one character is -treated as a literal character. For example, the two-character -sequence, ``\\"''(the backslash followed by the quotation mark) is -recognized and replaced with a quotation mark character. -Any whitespace character, that is not the Delimiter, unquoted and -unescaped, is ignored. -.LP -.NH 1 -Contents of Database -.XS -\*(SN Contents of Database -.XE -.LP -The available categories and classes depend on implementation, because -different platform will require different information set. -For example, some platform have system locale but some platform don't. -Furthermore, there might be a difference in functionality even if the -platform has system locale. -.LP -In current sample implementation, categories listed below are available. -.RS -.TS -tab(:); -l l. -XLC_FONTSET:XFontSet relative information -XLC_XLOCALE:Character classification and conversion information -.TE -.RE -.LP -.NH 1 -XLC_FONTSET Category -.XS -\*(SN XLC_FONTSET Category -.XE -.LP -The XLC_FONTSET category defines the XFontSet relative information. -It contains the CHARSET_REGISTRY-CHARSET_ENCODING name and character -mapping side (GL, GR, etc), and is used in Output Method (OM). -.RS -.TS H -tab(:); -lw(1.5i) l l. -_ -.sp 6p -.B -class:super class:description -.sp 6p -_ -.sp 6p -.TH -.R -fsN::Nth fontset (N=0,1,2, ...) -.sp -charset:fsN:list of encoding name -font:fsN:list of font encoding name -.sp 6p -_ -.TE -.RE -.LP -.IP "fsN" -.br -Includes an encoding information for Nth charset, where N is -the index number (0,1,2,...). If there are 4 charsets available -in current locale, 4 fontsets, fs0, fs1, fs2 and fs3, should be -defined. -This class has two subclasses, `charset' and `font'. -.IP "charset" -Specifies an encoding information to be used internally in Xlib -for this fontset. The format of value is; -.RS -.TS -tab(;); -l l l. -EncodingInfo;::=;EncodingName [ ":" EncodingSide ] -EncodingName;::=;CHARSET_REGISTRY-CHARSET_ENCODING -EncodingSide;::=;"GL" | "GR" -.TE -.RE -For detail definition of CHARSET_REGISTRY-CHARSET_ENCODING, refer -"X Logical Font Descriptions" document. -.IP -example: -.br - ISO8859-1:GL -.IP "font" -.br -Specifies a list of encoding information which is used for searching -appropriate font for this fontset. The left most entry has highest -priority. -.LP -.NH 1 -XLC_XLOCALE Category -.XS -\*(SN XLC_XLOCALE Category -.XE -.LP -The XLC_XLOCALE category defines character classification, conversion -and other character attributes. -.RS -.TS H -tab(:); -lw(1.5i) l l. -_ -.sp 6p -.B -class:super class:description -.sp 6p -_ -.sp 6p -.TH -.R -encoding_name::codeset name -mb_cur_max::MB_CUR_MAX -state_depend_encoding::state dependent or not -wc_encoding_mask::for parsing wc string -wc_shift_bits::for conversion between wc and mb -csN::Nth charset (N=0,1,2,...) -.sp -side:csN:mapping side (GL, etc) -length:csN:length of a character -mb_encoding:csN:for parsing mb string -wc_encoding:csN:for parsing wc string -ct_encoding:csN:list of encoding name for ct -.sp 6p -_ -.TE -.RE -.LP -.IP "encoding_name" -Specifies a codeset name of current locale. -.IP "mb_cur_max" -Specifies a maximum allowable number of bytes in a multi-byte character. -It is corresponding to MB_CUR_MAX of "ISO/IEC 9899:1990 C Language Standard". -.IP "state_depend_encoding" -Indicates a current locale is state dependent. The value should be -specified "True" or "False". -.IP "wc_encoding_mask" -Specifies a bit-mask for parsing wide-char string. Each wide character is -applied bit-and operation with this bit-mask, then is classified into -the unique charset, by using `wc_encoding'. -.IP "wc_shift_bits" -Specifies a number of bit to be shifted for converting from a multi-byte -character to a wide character, and vice-versa. -.IP "csN" -.br -Includes a character set information for Nth charset, where N is the -index number (0,1,2,...). If there are 4 charsets available in current -locale, cs0, cs1, cs2 and cs3 should be defined. This class has five -subclasses, `side', `length', `mb_encoding' `wc_encoding' and `ct_encoding'. -.IP "side" -.br -Specifies a mapping side of this charset. The format of this value is; -.RS -.TS -tab(@); -l l l. -Side@::=@EncodingSide [``:Default''] -.TE -.RE -The suffix ":Default" can be specified. It indicates that a character -belongs to the specified side is mapped to this charset in initial state. -.IP "length" -.br -Specifies a number of bytes of a multi-byte character of this charset. -It should not contain the length of any single-shift sequence. -.IP "mb_encoding" -Specifies a list of shift sequence for parsing multi-byte string. -The format of this value is; -.RS -.TS -tab(@); -l l l -l r l -l l l -l l l -l l l -l l l -c l s -c l s. -MBEncoding@::=@ShiftType ShiftSequence -@|@ShiftType ShiftSequence ";" MBEncoding -ShiftType@::=@"" | "" | "" -ShiftSequence@::=@SequenceValue | SequenceValue ShiftSequence -SequenceValue@::=@NumericString -.sp -shift types: -@Indicates single shift sequence -@Indicates locking shift left sequence -@Indicates locking shift right sequence -.TE -.RE -example: -.br - \\x1b \\x28 \\x4a; \\x1b \\x28 \\x42 -.LP -.IP "wc_encoding" -Specifies an integer value for parsing wide-char string. -It is used to determine the charset for each wide character, after -applying bit-and operation using `wc_encoding_mask'. -This value should be unique in all csN classes. -.IP "ct_encoding" -Specifies a list of encoding information that can be used for Compound -Text. -.LP -.NH 1 -Sample of X Locale Database -.XS -\*(SN Sample of X Locale Database -.XE -.LP -The following is sample X Locale Database file. -.LP -.sp -.RS -.nf -# $Xorg: LocaleDB.ms,v 1.3 2000/08/17 19:42:49 cpqbld Exp $ -# XLocale Database Sample for ja_JP.euc -# - -# -# XLC_FONTSET category -# -XLC_FONTSET -# fs0 class (7 bit ASCII) -fs0 { - charset ISO8859-1:GL - font ISO8859-1:GL; JISX0201.1976-0:GL -} -# fs1 class (Kanji) -fs1 { - charset JISX0208.1983-0:GL - font JISX0208.1983-0:GL -} -# fs2 class (Half Kana) -fs2 { - charset JISX0201.1976-0:GR - font JISX0201.1976-0:GR -} -# fs3 class (User Defined Character) -# fs3 { -# charset JISX0212.1990-0:GL -# font JISX0212.1990-0:GL -# } -END XLC_FONTSET - -# -# XLC_XLOCALE category -# -XLC_XLOCALE - -encoding_name ja.euc -mb_cur_max 3 -state_depend_encoding False - -wc_encoding_mask \\x00008080 -wc_shift_bits 8 - -# cs0 class -cs0 { - side GL:Default - length 1 - wc_encoding \\x00000000 - ct_encoding ISO8859-1:GL; JISX0201.1976-0:GL -} -# cs1 class -cs1 { - side GR:Default - length 2 - - wc_encoding \\x00008080 - - ct_encoding JISX0208.1983-0:GL; JISX0208.1983-0:GR;\\ - JISX0208.1983-1:GL; JISX0208.1983-1:GR -} - -# cs2 class -cs2 { - side GR - length 1 - mb_encoding \\x8e - - wc_encoding \\x00000080 - - ct_encoding JISX0201.1976-0:GR -} - -# cs3 class -# cs3 { -# side GL -# length 2 -# mb_encoding \\x8f -# #if HasWChar32 -# wc_encoding \\x20000000 -# #else -# wc_encoding \\x00008000 -# #endif -# ct_encoding JISX0212.1990-0:GL; JISX0212.1990-0:GR -# } - -END XLC_XLOCALE -.fi -.RE -.LP -.NH 1 -Reference -.XS -\*(SN Reference -.XE -.LP -.XP -[1] \fIISO/IEC 9899:1990 C Language Standard\fP -.XP -[2] \fIX Logical Font Descriptions\fP -.LP diff --git a/doc/xorg-docs/specs/i18n/Trans.ms b/doc/xorg-docs/specs/i18n/Trans.ms deleted file mode 100644 index f12411983..000000000 --- a/doc/xorg-docs/specs/i18n/Trans.ms +++ /dev/null @@ -1,1146 +0,0 @@ -.\" $Xorg: Trans.ms,v 1.3 2000/08/17 19:42:49 cpqbld Exp $ -.\" $XdotOrg: xc/doc/specs/i18n/Trans.ms,v 1.2 2004/04/23 18:42:19 eich Exp $ -.\" To print this out, type tbl macros.t This File | troff -ms -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.ps 11 -.nr PS 11 -.\" .nr PD 1v -.\" .nr DD 1v -\& -.sp 8 -.TL -\s+3\fBThe XIM Transport Specification\s-3\fP -.sp -.sp -\fBRevision 0.1\fP -.sp -\fBX Version 11, Release 6.8\fP -.sp 3 -.AU -Takashi Fujiwara -.AI -FUJITSU LIMITED -.sp 3 -.AB -.LP -This specification describes the transport layer interfaces between -Xlib and IM Server, which makes various channels usable such as X -protocol or, TCP/IP, DECnet and etc. -.AE -.ce 0 -.br -.LP -.bp -\& -.ps 9 -.nr PS 9 -.sp 8 -.LP -Copyright \(co 1994 by FUJITSU LIMITED -.LP -Permission to use, copy, modify, and distribute this documentation -for any purpose and without fee is hereby granted, provided -that the above copyright notice and this permission -notice appear in all copies. -Fujitsu makes no representations about the suitability -for any purpose of the information in this document. -This documentation is provided as is without express or implied warranty. -.sp 5 -Copyright \(co 1994 X Consortium -.LP -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -.LP -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -.LP -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. -.sp 3 -\fIX Window System\fP is a trademark of The Open Group. -.ps 11 -.nr PS 11 -.bp 1 -.EH '\fBXIM Transport Specification\fP''\fBX11, Release 6.8\fP' -.OH '\fBXIM Transport Specification\fP''\fBX11, Release 6.8\fP' -.EF ''\fB % \fP'' -.OF ''\fB % \fP'' -.NH 1 -Introduction -.XS -\*(SN Introduction -.XE -.LP -The Xlib XIM implementation is layered into three functions, a protocol -layer, an interface layer and a transport layer. The purpose of this -layering is to make the protocol independent of transport implementation. -Each function of these layers are: -.RS 3 -.IP "\fIThe protocol layer\fP" -.br -implements overall function of XIM and calls the interface layer -functions when it needs to communicate to IM Server. -.IP "\fIThe interface layer\fP" -.br -separates the implementation of the transport layer from the protocol -layer, in other words, it provides implementation independent hook for -the transport layer functions. -.IP "\fIThe transport layer\fP" -.br -handles actual data communication with IM Server. It is done by a set -of several functions named transporters. -.RE -.LP -This specification describes the interface layer and the transport -layer, which makes various communication channels usable such as -X protocol or, TCP/IP, DECnet, STREAM, etc., and provides -the information needed for adding another new transport layer. -In addition, sample implementations for the transporter using the -X connection is described in section 4. -.NH 1 -Initialization -.XS -\*(SN Initialization -.XE -.NH 2 -Registering structure to initialize -.XS -\*(SN Registering structure to initialize -.XE -.LP -The structure typed as TransportSW contains the list of the transport -layer the specific implementations supports. -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { -.br - char *transport_name; -.br - Bool (*config); -} TransportSW; -.De -.LP -.IP "\fItransport_name\fP" 15 -name of transport(*1) -.FS -(*1) Refer to "The Input Method Protocol: Appendix B" -.FE -.IP "\fIconfig\fP" 15 -initial configuration function -.LP -A sample entry for the Xlib supporting transporters is shown below: -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -TransportSW _XimTransportRec[] = { -.sp 3p -/* char \fI*: -\ * transport_name\fP, Bool \fI(*config)()\fP -\ */ - ``X'', _XimXConf, - ``tcp'', _XimTransConf, - ``local'', _XimTransConf, - ``decnet'', _XimTransConf, - ``streams'', _XimTransConf, - (char *)NULL, (Bool (*)())NULL, -}; -.De -.LP -.NH 2 -Initialization function -.XS -\*(SN Initialization function -.XE -.LP -The following function will be called once when Xlib configures the -transporter functions. -.sp 6p -.FD 0 -Bool (*config)(\fIim\fP, \fItransport_data\fP) -.br - XIM \fIim\fP; -.br - char \fI*transport_data\fP; -.br -.FN -.IP \fIim\fP 1i -Specifies XIM structure address. -.IP \fItransport_data\fP 1i -Specifies the data specific to the transporter, in IM Server address. (*1) -.FS -(*1) Refer to "The Input Method Protocol: Appendix B" -.FE -.sp 6p -.LP -This function must setup the transporter function pointers. -.LP -The actual \fIconfig\fP function will be chosen by IM Server at the -pre-connection time, matching by the \fItransport_name\fP specified -in the \fB_XimTransportRec\fP array; The specific members of XimProto -structure listed below must be initialized so that point they -appropriate transporter functions. -.LP -If the specified transporter has been configured successfully, this -function returns True. There is no Alternative Entry for config -function itself. -.LP -The structure XimProto contains the following function pointers: -.DS -.TA .5i 2.5i -.ta .5i 2.5i -Bool (*connect)(); /* Open connection */ -Bool (*shutdown)(); /* Close connection */ -Bool (*write)(); /* Write data */ -Bool (*read)(); /* Read data */ -Bool (*flush)(); /* Flush data buffer */ -Bool (*register_dispatcher)(); /* Register asynchronous data handler */ -Bool (*call_dispatcher)(); /* Call dispatcher */ -.DE -These functions are called when Xlib needs to communicate the -IM Server. These functions must process the appropriate procedure -described below. -.LP -.NH 1 -The interface/transport layer functions -.XS -\*(SN The interface/transport layer functions -.XE -.LP -Following functions are used for the transport interface. -.LP -.ce -Table 3-1; The Transport Layer Functions. -.SM -.TS -tab(:) center box; -cw(4c) | cw(4c) | c -c | c | c -l | l | c. -.B -Alternative Entry:XimProto member:Section -(Interface Layer):(Transport Layer):\^ -= -.R -\fB_XimConnect\fP:connect:3.1 -_ -\fB_XimShutdown\fP:shutdown:3.2 -_ -\fB_XimWrite\fP:write:3.3 -_ -\fB_XimRead\fP:read:3.4 -_ -\fB_XimFlush\fP:flush:3.5 -_ -\fB_XimRegisterDispatcher\fP:register_dispatcher:3.6 -_ -\fB_XimCallDispatcher\fP:call_dispatcher:3.7 -.TE -.NL -.LP -The Protocol layer calls the above functions using the Alternative -Entry in the left column. The transport implementation defines -XimProto member function in the right column. The Alternative Entry is -provided so as to make easier to implement the Protocol Layer. -.LP -.NH 2 -Opening connection -.XS -\*(SN Opening connection -.XE -.LP -When \fBXOpenIM\fP is called, the following function is called to connect -with the IM Server. -.sp 6p -.FD 0 -Bool (*connect)(\fIim\fP) -.br - XIM \fIim\fP; -.FN -.IP \fIim\fP 1i -Specifies XIM structure address. -.sp 6p -.LP -This function must establishes the connection to the IM Server. If the -connection is established successfully, this function returns True. -The Alternative Entry for this function is: -.sp 6p -.FD 0 -Bool _XimConnect(\fIim\fP) -.br - XIM \fIim\fP; -.FN -.IP \fIim\fP 1i -Specifies XIM structure address. -.LP -.NH 2 -Closing connection -.XS -\*(SN Closing connection -.XE -.LP -When \fBXCloseIM\fP is called, the following function is called to -disconnect the connection with the IM Server. The Alternative Entry -for this function is: -.sp 6p -.FD 0 -Bool (*shutdown)(\fIim\fP) -.br - XIM \fIim\fP; -.FN -.IP \fIim\fP 1i -Specifies XIM structure address. -.sp 6p -.LP -This function must close connection with the IM Server. If the -connection is closed successfully, this function returns True. The -Alternative Entry for this function is: -.sp 6p -.FD 0 -Bool _XimShutdown(\fIim\fP) -.br - XIM \fIim\fP; -.FN -.IP \fIim\fP -Specifies XIM structure address. -.LP -.NH 2 -Writing data -.XS -\*(SN Writing data -.XE -.LP -The following function is called, when Xlib needs to write data to the -IM Server. -.sp 6p -.FD 0 -Bool (*write)(\fIim\fP, \fIlen\fP, \fIdata\fP) -.br - XIM \fIim\fP; -.br - INT16 \fIlen\fP; -.br - XPointer \fIdata\fP; -.FN -.IP \fIim\fP 1i -Specifies XIM structure address. -.IP \fIlen\fP 1i -Specifies the length of writing data. -.IP \fIdata\fP 1i -Specifies the writing data. -.sp 6p -.LP -This function writes the \fIdata\fP to the IM Server, regardless -of the contents. The number of bytes is passed to \fIlen\fP. The -writing data is passed to \fIdata\fP. If data is sent successfully, -the function returns True. Refer to "The Input Method Protocol" for -the contents of the writing data. The Alternative Entry for this -function is: -.sp 6p -.FD 0 -Bool _XimWrite(\fIim\fP, \fIlen\fP, \fIdata\fP) -.br - XIM \fIim\fP; -.br - INT16 \fIlen\fP; -.br - XPointer \fIdata\fP; -.FN -.IP \fIim\fP 1i -Specifies XIM structure address. -.IP \fIlen\fP 1i -Specifies the length of writing data. -.IP \fIdata\fP 1i -Specifies the writing data. -.LP -.NH 2 -Reading data -.XS -\*(SN Reading data -.XE -.LP -The following function is called when Xlib waits for response from IM -server synchronously. -.sp 6p -.FD 0 -Bool (*read)(\fIim\fP, \fIread_buf\fP, \fIbuf_len\fP, \fIret_len\fP) -.br - XIM \fIim\fP; -.br - XPointer \fIread_buf\fP; -.br - int \fIbuf_len\fP; -.br - int \fI*ret_len\fP; -.FN -.IP \fIim\fP 1i -Specifies XIM structure address. -.IP \fIread_buf\fP 1i -Specifies the buffer to store data. -.IP \fIbuf_len\fP 1i -Specifies the size of the \fIbuffer\fP -.IP \fIret_len\fP -Specifies the length of stored data. -.sp 6p -.LP -This function stores the read data in \fIread_buf\fP, which size is -specified as \fIbuf_len\fP. The size of data is set to \fIret_len\fP. -This function return True, if the data is read normally or reading -data is completed. -.LP -The Alternative Entry for this function is: -.sp 6p -.FD 0 -Bool _XimRead(\fIim\fP, \fIret_len\fP, \fIbuf\fP, \fIbuf_len\fP, \fIpredicate\fP, \fIpredicate_arg\fP) -.br - XIM \fIim\fP; -.br - INT16 \fI*ret_len\fP; -.br - XPointer \fIbuf\fP; -.br - int \fIbuf_len\fP; -.br - Bool \fI(*predicate)()\fP; -.br - XPointer \fIpredicate_arg\fP; -.FN -.IP \fIim\fP 1i -Specifies XIM structure address. -.IP \fIret_len\fP 1i -Specifies the size of the \fIdata\fP buffer. -.IP \fIbuf\fP 1i -Specifies the buffer to store data. -.IP \fIbuf_len\fP 1i -Specifies the length of \fIbuffer\fP. -.IP \fIpredicate\fP 1i -Specifies the predicate for the XIM data. -.IP \fIpredicate_arg\fP 1i -Specifies the predicate specific data. -.sp 6p -.LP -The predicate procedure indicates whether the \fIdata\fP is for the -XIM or not. \fIlen\fP -This function stores the read data in \fIbuf\fP, which size is specified -as \fIbuf_len\fP. The size of data is set to \fIret_len\fP. -If \fIpreedicate()\fP returns True, this function returns True. -If not, it calls the registered callback function. -.LP -The procedure and its arguments are: -.LP -.sp 6p -.FD 0 -Bool (*predicate)(\fIim\fP, \fIlen\fP, \fIdata\fP, \fIpredicate_arg\fP) -.br - XIM \fIim\fP; -.br - INT16 \fIlen\fP; -.br - XPointer \fIdata\fP; -.br - XPointer \fIpredicate_arg\fP; -.FN -.IP \fIim\fP 1i -Specifies XIM structure address. -.IP \fIlen\fP 1i -Specifies the size of the \fIdata\fP buffer. -.IP \fIdata\fP 1i -Specifies the buffer to store data. -.IP \fIpredicate_arg\fP 1i -Specifies the predicate specific data. -.LP -.NH 2 -Flushing buffer -.XS -\*(SN Flushing buffer -.XE -.LP -The following function is called when Xlib needs to flush the data. -.sp 6p -.FD 0 -void (*flush)(\fIim\fP) -.br - XIM \fIim\fP; -.FN -.IP \fIim\fP 1i -Specifies XIM structure address. -.sp 6p -.LP -This function must flush the data stored in internal buffer on the -transport layer. If data transfer is completed, the function returns -True. The Alternative Entry for this function is: -.sp 6p -.FD 0 -void _XimFlush(\fIim\fP) -.br - XIM \fIim\fP; -.FN -.IP \fIim\fP 1i -Specifies XIM structure address. -.LP -.NH 2 -Registering asynchronous data handler -.XS -\*(SN Registering asynchronous data handler -.XE -.LP -Xlib needs to handle asynchronous response from IM Server. This is -because some of the XIM data occur asynchronously to X events. -.LP -Those data will be handled in the \fIFilter\fP, and the \fIFilter\fP -will call asynchronous data handler in the protocol layer. Then it -calls dispatchers in the transport layer. The dispatchers are -implemented by the protocol layer. This function must store the -information and prepare for later call of the dispatchers using -\fB_XimCallDispatcher\fP. -.LP -When multiple dispatchers are registered, they will be called -sequentially in order of registration, on arrival of asynchronous -data. The register_dispatcher is declared as following: -.sp 6p -.FD 0 -Bool (*register_dispatcher)(\fIim\fP, \fIdispatcher\fP, \fIcall_data\fP) -.br - XIM \fIim\fP; -.br - Bool \fI(*dispatcher)()\fP; -.br - XPointer \fIcall_data\fP; -.FN -.IP \fIim\fP 1i -Specifies XIM structure address. -.IP \fIdispatcher\fP 1i -Specifies the dispatcher function to register. -.IP \fIcall_data\fP 1i -Specifies a parameter for the \fIdispatcher\fP. -.LP -The dispatcher is a function of the following type: -.sp 6p -.FD 0 -Bool (*dispatcher)(\fIim\fP, \fIlen\fP, \fIdata\fP, \fIcall_data\fP) -.br - XIM \fIim\fP; -.br - INT16 \fIlen\fP; -.br - XPointer \fIdata\fP; -.br - XPointer \fIcall_data\fP; -.FN -.IP \fIim\fP 1i -Specifies XIM structure address. -.IP \fIlen\fP 1i -Specifies the size of the \fIdata\fP buffer. -.IP \fIdata\fP 1i -Specifies the buffer to store data. -.IP \fIcall_data\fP 1i -Specifies a parameter passed to the register_dispatcher. -.sp 6p -.LP -The dispatcher is provided by the protocol layer. They are called once -for every asynchronous data, in order of registration. If the data is -used, it must return True. otherwise, it must return False. -.LP -If the dispatcher function returns True, the Transport Layer assume -that the data has been processed by the upper layer. The Alternative -Entry for this function is: -.sp 6p -.FD 0 -Bool _XimRegisterDispatcher(\fIim\fP, \fIdispatcher\fP, \fIcall_data\fP) -.br - XIM \fIim\fP; -.br - Bool \fI(*dispatcher)()\fP; -.br - XPointer \fIcall_data\fP; -.FN -.IP \fIim\fP 1i -Specifies XIM structure address. -.IP \fIdispatcher\fP 1i -Specifies the dispatcher function to register. -.IP \fIcall_data\fP 1i -Specifies a parameter for the \fIdispatcher\fP. -.LP -.NH 2 -Calling dispatcher -.XS -\*(SN Calling dispatcher -.XE -.LP -The following function is used to call the registered dispatcher -function, when the asynchronous response from IM Server has arrived. -.sp 6p -.FD 0 -Bool (*call_dispatcher)(\fIim\fP, \fIlen\fP, \fIdata\fP) -.br - XIM \fIim\fP; -.br - INT16 \fIlen\fP; -.br - XPointer \fIdata\fP; -.FN -.IP \fIim\fP 1i -Specifies XIM structure address. -.IP \fIlen\fP 1i -Specifies the size of \fIdata\fP buffer. -.IP \fIdata\fP 1i -Specifies the buffer to store data. -.LP -The call_dispatcher must call the dispatcher function, in order of -their registration. \fIlen\fP and \fIdata\fP are the data passed to -register_dispatcher. -.LP -The return values are checked at each invocation, and if it finds -True, it immediately return with true for its return value. -.LP -It is depend on the upper layer whether the read data is XIM -Protocol packet unit or not. -The Alternative Entry for this function is: -.sp 6p -.FD 0 -Bool _XimCallDispatcher(\fIim\fP, \fIlen\fP, \fIdata\fP) -.br - XIM \fIim\fP; -.br - INT16 \fIlen\fP; -.br - XPointer \fIcall_data\fP; -.FN -.LP -.bp -.NH 1 -Sample implementations for the Transport Layer -.XS -\*(SN Sample implementations for the Transport Layer -.XE -.LP -Sample implementations for the transporter using the X connection is -described here. -.LP -.NH 2 -X Transport -.XS -\*(SN X Transport -.XE -.LP -At the beginning of the X Transport connection for the XIM transport -mechanism, two different windows must be created either in an Xlib XIM -or in an IM Server, with which the Xlib and the IM Server exchange the -XIM transports by using the ClientMessage events and Window Properties. -In the following, the window created by the Xlib is referred as the -"client communication window", and on the other hand, the window created -by the IM Server is referred as the "IMS communication window". -.LP -.NH 3 -Connection -.XS -\*(SN X Connection -.XE -.LP -In order to establish a connection, a communication window is created. -A ClientMessage in the following event's format is sent to the owner -window of XIM_SERVER selection, which the IM Server has created. -.LP -Refer to "The Input Method Protocol" for the XIM_SERVER atom. -.LP -.ce -Table 4-1; The ClientMessage sent to the IMS window. -.TS H -tab(:); -l s|l -l l|l. -_ -.sp 6p -.B -Structure Member:Contents -.sp 6p -_ -.sp 6p -.TH -.R -int:type:ClientMessage -u_long:serial:Set by the X Window System -Bool:send_event:Set by the X Window System -Display:*display:The display to which connects -Window:window:IMS Window ID -Atom:message_type:XInternAtom(display, ``_XIM_XCONNECT'', False) -int:format:32 -long:data.l[0]:client communication window ID -long:data.l[1]:client-major-transport-version (*1) -long:data.l[2]:client-major-transport-version (*1) -.sp 6p -_ -.TE -.LP -In order to establish the connection (to notify the IM Server communication -window), the IM Server sends a ClientMessage in the following event's -format to the client communication window. -.LP -.ce -Table 4-2; The ClientMessage sent by IM Server. -.TS H -tab(:); -l s | l -l l | l. -_ -.sp 6p -.B -Structure Member:Contents -.sp 6p -_ -.sp 6p -.TH -.R -int:type:ClientMessage -u_long:serial:Set by the X Window System -Bool:send_event:Set by the X Window System -Display:*display:The display to which connects -Window:window:client communication window ID -Atom:message_type:XInternAtom(display, ``_XIM_XCONNECT'', False) -int:format:32 -long:data.l[0]:IMS communication window ID -long:data.l[1]:server-major-transport-version (*1) -long:data.l[2]:server-minor-transport-version (*1) -long:data.l[3]:dividing size between ClientMessage and Property (*2) -.sp 6p -_ -.TE -.LP -.IP (*1) -major/minor-transport-version -.RS -The read/write method is decided by the combination of -major/minor-transport-version, as follows: -.LP -.ce -Table 4-3; The read/write method and the major/minor-transport-version -.TS -center, tab(:); -| c s | l | -| c | c | l |. -_ -.sp 6p -.B -Transport-version:read/write -.sp 6p -_ -.sp 6p -major:minor: -.sp 6p -_ -.sp 6p -.R -0:0:only-CM & Property-with-CM -:1:only-CM & multi-CM -:2:only-CM & multi-CM & Property-with-CM -.sp 6p -_ -.sp 6p -1:0:PropertyNotify -.sp 6p -_ -.sp 6p -2:0:only-CM & PropertyNotify -:1:only-CM & multi-CM & PropertyNotify -.sp 6p -_ -.TE -.LP -.RS -.TS -center, tab(;); -l n l. -only-CM;:;data is sent via a ClientMessage -multi-CM;:;data is sent via multiple ClientMessages -Property-with-CM;:;T{ -data is written in Property, and its Atom is send via ClientMessage -T} -PropertyNotify;:;T{ -data is written in Property, and its Atom is send via PropertyNotify -T} -.TE -.RE -.LP -The method to decide major/minor-transport-version is as follows: -.LP -.IP (1) -The client sends 0 as major/minor-transport-version to the IM Server. -The client must support all methods in Table 4-3. -The client may send another number as major/minor-transport-version to -use other method than the above in the future. -.IP (2) -The IM Server sends its major/minor-transport-version number to -the client. The client sends data using the method specified by the -IM Server. -.IP (3) -If major/minor-transport-version number is not available, it is regarded -as 0. -.RE -.LP -.IP (*2) -dividing size between ClientMessage and Property -.RS -If data is sent via both of multi-CM and Property, specify the dividing -size between ClientMessage and Property. The data, which is smaller than -this size, is sent via multi-CM (or only-CM), and the data, which is -lager than this size, is sent via Property. -.RE -.LP -.NH 3 -read/write -.XS -\*(SN read/write -.XE -.LP -The data is transferred via either ClientMessage or Window Property in -the X Window System. -.LP -.NH 4 -Format for the data from the Client to the IM Server -.XS -\*(SN Format for the data from the Client to the IM Server -.XE -.LP -.B -ClientMessage -.LP -.RS -If data is sent via ClientMessage event, the format is as follows: -.LP -.ce -Table 4-4; The ClientMessage event's format (first or middle) -.TS H -tab(;); -l s | l -l l | l. -_ -.sp 6p -.B -Structure Member;Contents -.sp 6p -_ -.sp 6p -.TH -.R -int;type;ClientMessage -u_long;serial;Set by the X Window System -Bool;send_event;Set by the X Window System -Display;*display;The display to which connects -Window;window;IMS communication window ID -Atom;message_type;XInternAtom(display, ``_XIM_MOREDATA'', False) -int;format;8 -char;data.b[20];(read/write DATA : 20 byte) -.sp 6p -_ -.TE -.LP -.ce -Table 4-5; The ClientMessage event's format (only or last) -.TS H -tab(;); -l s | l -l l | l. -_ -.sp 6p -.B -Structure Member;Contents -.sp 6p -_ -.sp 6p -.TH -.R -int;type;ClientMessage -u_long;serial;Set by the X Window System -Bool;send_event;Set by the X Window System -Display;*display;The display to which connects -Window;window;IMS communication window ID -Atom;message_type;XInternAtom(display, ``_XIM_PROTOCOL'', False) -int;format;8 -char;data.b[20];(read/write DATA : MAX 20 byte) (*1) -.sp 6p -_ -.TE -.IP (*1) -If the data is smaller than 20 byte, all data other than available data -must be 0. -.RE -.LP -.B -Property -.LP -.RS -In the case of large data, data will be sent via the Window Property -for the efficiency. There are the following two methods to notify -Property, and transport-version is decided which method is used. -.LP -.IP (1) -The XChangeProperty function is used to store data in the client -communication window, and Atom of the stored data is notified to the -IM Server via ClientMessage event. -.IP (2) -The XChangeProperty function is used to store data in the client -communication window, and Atom of the stored data is notified to the -IM Server via PropertyNotify event. -.LP -The arguments of the XChangeProperty are as follows: -.LP -.ce -Table 4-6; The XChangeProperty event's format -.TS H -tab(:); -l s | l -l l | l. -_ -.sp 6p -.B -Argument:Contents -.sp 6p -_ -.sp 6p -.TH -.R -Display:*display:The display to which connects -Window:window:IMS communication window ID -Atom:property:read/write property Atom (*1) -Atom:type:XA_STRING -int:format:8 -int:mode:PropModeAppend -u_char:*data:read/write DATA -int:nelements:length of DATA -.sp 6p -_ -.TE -.LP -.IP (*1) -The read/write property ATOM allocates the following strings by -\fBXInternAtom\fP. -.RS -``_clientXXX'' -.RE -.LP -The client changes the property with the mode of PropModeAppend and -the IM Server will read it with the delete mode i.e. (delete = True). -.LP -If Atom is notified via ClientMessage event, the format of the ClientMessage -is as follows: -.LP -.ce -Table 4-7; The ClientMessage event's format to send Atom of property -.TS H -tab(:); -l s | l -l l | l. -_ -.sp 6p -.B -Structure Member:Contents -.sp 6p -_ -.sp 6p -.TH -.R -int:type:ClientMessage -u_long:serial:Set by the X Window System -Bool:send_event:Set by the X Window System -Display:*display:The display to which connects -Window:window:IMS communication window ID -Atom:message_type:XInternAtom(display, ``_XIM_PROTOCOL'', False) -int:format:32 -long:data.l[0]:length of read/write property Atom -long:data.l[1]:read/write property Atom -.sp 6p -_ -.TE -.RE -.LP -.NH 4 -Format for the data from the IM Server to the Client -.XS -\*(SN Format for the data from the Client to the Client -.XE -.LP -.B -ClientMessage -.LP -.RS -The format of the ClientMessage is as follows: -.LP -.ce -Table 4-8; The ClientMessage event's format (first or middle) -.TS H -tab(;); -l s | l -l l | l. -_ -.sp 6p -.B -Structure Member;Contents -.sp 6p -_ -.sp 6p -.TH -.R -int;type;ClientMessage -u_long;serial;Set by the X Window System -Bool;send_event ;Set by the X Window System -Display;*display;The display to which connects -Window;window;client communication window ID -Atom;message_type;XInternAtom(display, ``_XIM_MOREDATA'', False) -int;format;8 -char;data.b[20];(read/write DATA : 20 byte) -.sp 6p -_ -.TE -.LP -.ce -Table 4-9; The ClientMessage event's format (only or last) -.TS H -tab(;); -l s | l -l l | l. -_ -.sp 6p -.B -Structure Member;Contents -.sp 6p -_ -.sp 6p -.TH -.R -int;type;ClientMessage -u_long;serial;Set by the X Window System -Bool;send_event ;Set by the X Window System -Display;*display;The display to which connects -Window;window;client communication window ID -Atom;message_type;XInternAtom(display, ``_XIM_PROTOCOL'', False) -int;format;8 -char;data.b[20];(read/write DATA : MAX 20 byte) (*1) -.sp 6p -_ -.TE -.LP -.IP (*1) -If the data size is smaller than 20 bytes, all data other than available -data must be 0. -.RE -.LP -.B -Property -.LP -.RS -In the case of large data, data will be sent via the Window Property -for the efficiency. There are the following two methods to notify -Property, and transport-version is decided which method is used. -.LP -.IP (1) -The XChangeProperty function is used to store data in the IMS -communication window, and Atom of the property is sent via the -ClientMessage event. -.IP (2) -The XChangeProperty function is used to store data in the IMS -communication window, and Atom of the property is sent via -PropertyNotify event. -.LP -The arguments of the XChangeProperty are as follows: -.LP -.ce -Table 4-10; The XChangeProperty event's format -.TS H -tab(:); -l s | l -l l | l. -_ -.sp 6p -.B -Argument:Contents -.sp 6p -_ -.sp 6p -.TH -.R -Display:*display:The display which to connects -Window:window:client communication window ID -Atom:property:read/write property Atom (*1) -Atom:type:XA_STRING -int:format:8 -int:mode:PropModeAppend -u_char:*data:read/write DATA -int:nelements:length of DATA -.sp 6p -_ -.TE -.LP -.IP (*1) -The read/write property ATOM allocates some strings, which are not -allocated by the client, by \fBXInternAtom\fP. -.LP -The IM Server changes the property with the mode of PropModeAppend and -the client reads it with the delete mode, i.e. (delete = True). -.LP -If Atom is notified via ClientMessage event, the format of the ClientMessage -is as follows: -.LP -.ce -Table 4-11; The ClientMessage event's format to send Atom of property -.TS H -tab(:); -l s | l -l l | l. -_ -.sp 6p -.B -Structure Member:Contents -.sp 6p -_ -.sp 6p -.TH -.R -int:type:ClientMessage -u_long:serial:Set by the X Window System -Bool:send_event:Set by the X Window System -Display:*display:The display to which connects -Window:window:client communication window ID -Atom:message_type:XInternAtom(display, ``_XIM_PROTOCOL'', False) -int:format:32 -long:data.l[0]:length of read/write property ATOM -long:data.l[1]:read/write property ATOM -.sp 6p -_ -.TE -.RE -.LP -.NH 3 -Closing Connection -.XS -\*(SN Closing Connection -.XE -.LP -If the client disconnect with the IM Server, shutdown function should -free the communication window properties and etc.. -.LP -.NH 1 -References -.XS -\*(SN References -.XE -.LP -[1] Masahiko Narita and Hideki Hiura, \fI``The Input Method Protocol''\fP -.LP - diff --git a/doc/xorg-docs/specs/rstart/fix.awk b/doc/xorg-docs/specs/rstart/fix.awk deleted file mode 100644 index 626b7978c..000000000 --- a/doc/xorg-docs/specs/rstart/fix.awk +++ /dev/null @@ -1,23 +0,0 @@ -#! /bin/awk -f -# $Xorg: fix.awk,v 1.3 2000/08/17 19:42:50 cpqbld Exp $ -# - -BEGIN { - ignore = 1; -} - -# following line starts /^L/ -/ / { - print; - ignore = 1; - next; -} - -/^$/ { - if(ignore) next; -} - -{ - ignore = 0; - print; -} diff --git a/doc/xorg-docs/specs/rstart/fix.nawk b/doc/xorg-docs/specs/rstart/fix.nawk deleted file mode 100644 index a7d960092..000000000 --- a/doc/xorg-docs/specs/rstart/fix.nawk +++ /dev/null @@ -1,24 +0,0 @@ -#! /bin/nawk -f -# $Xorg: fix.nawk,v 1.3 2000/08/17 19:42:50 cpqbld Exp $ -# - -BEGIN { - ignore = 1; -} - -/FORMFEED\[Page/ { - sub("FORMFEED", " "); - print; - print " "; - ignore = 1; - next; -} - -$0 == "" { - if(ignore) next; -} - -{ - ignore = 0; - print; -} diff --git a/doc/xorg-docs/specs/rstart/fix.sed b/doc/xorg-docs/specs/rstart/fix.sed deleted file mode 100644 index e5a4867d7..000000000 --- a/doc/xorg-docs/specs/rstart/fix.sed +++ /dev/null @@ -1,12 +0,0 @@ -#! /bin/sed -f -# -# $Xorg: fix.sed,v 1.3 2000/08/17 19:42:50 cpqbld Exp $ -# -s/o+/./g -s/|-/+/g -s/.//g -/FORMFEED\[Page/{ -s/FORMFEED/ / -a\ - -} diff --git a/doc/xorg-docs/specs/rstart/rstart.ms b/doc/xorg-docs/specs/rstart/rstart.ms deleted file mode 100644 index e243fdc90..000000000 --- a/doc/xorg-docs/specs/rstart/rstart.ms +++ /dev/null @@ -1,841 +0,0 @@ -.\" $XFree86$ -.ds iL Brown -.ds iI J. -.ds iO Quarterdeck Office Systems -.ds iG X Consortium -.ds iN DRAFT -.ds iD August 1993 -.so tmac.build -.LG -.LG -.ce -A Flexible Remote Execution Protocol Based on \fBrsh\fP -.SM -.SM -.sp 2 -.fi -.ne 4 -Status of this Memo -.sp -.QP -This document is being distributed to members of the -Internet community in order to solicit their reactions -to the proposals contained in it. This memo does not -specify an Internet Standard. -Distribution of this memo is unlimited. - -.dH "(filename here)" -.LP -.sp -.ne 4 -Background: -.sp -One of the X Window System's main strengths is the ability to display -and control graphical -applications remotely. It does not, however, address the issue of how to -start these applications - the application initiates the connection to the -server sitting in front of the user, not the other way 'round. Some other, -non-X, mechanism must be used to start the application. - -.ne 4 -Current methods and their problems: -.IP 1) -Walk over to the other machine, log in, and run something with its -display redirected to your workstation. Not very appealing, but simple. -No security problems associated with whether or not you should be able to -run something on that machine. -.IP 2) -Telnet to the other machine, log in, and run something with its display -redirected to your workstation. Relatively simple, but doesn't allow for -starting remote apps using a menu item - requires either human intervention -or an autologin mechanism with its associated troubles. Security implication -is that the password is passed \*Qraw\*U over the telnet connection and is -susceptible to snooping. -.IP 3) -Use one of the non-standard Berkeley -.UX -\*Qremote command\*U facilities, or their -Kerberized equivalents - rsh, rexec, krsh. These can provide for the -no-human-involved startup desired for menus, but have security implications -which have been adequately documented elsewhere and require tuning to -achieve \*Qdesirable\*U operation, or indeed operation at all. -.IP 4) -Other proprietary schemes. -.LP -Well, (1) is obviously not very pleasant. (2) isn't much better, because -you can't run things off menu items. Neither (1) nor (2) is \*Qfriendly\*U -to an automatic session-restart system. (4), being proprietary, isn't of -much interest in a wide context. (Note that in any of these cases once -you've started an app, an xterm say, you can ask it to start others. This -is OK for some people, but not very acceptable if you want things picked off -menus and especially not if you want apps on various machines picked off -the same menu. It also isn't friendly to automatic session-restart schemes.) - -(3) is what this memo discusses. - -.ne 4 -Problems: -.IP \(bu -Systems and shells vary in what exactly constitutes a \*Qcommand\*U -and what the syntax is. -.IP \(bu -The apps might not be in the \*Qsystem default search path\*U. -.IP \(bu -The apps might require additional setup before they can run - -environment variables, etc. (LD_LIBRARY_PATH with OpenWindows 2 on Suns) -.IP \(bu -Resources (TCP connections, processes, etc) get held open on both -ends to support the (mostly-idle) rsh connection. -.IP \(bu -No standard way to pass environment variables - DISPLAY, SESSION_MANAGER, -etc. -.LP -These issues, both in their complexity and in their system-specificity, -cause continual trouble for less technically aware users and are a nuisance -even for technical users. In addition, more sophisticated uses of remote -execution mechanisms (session restart for instance) may require more control -over the environment than is available through the normal rsh mechanism. - -The result is that a great deal of system-dependent manual tuning is required -to achieve a pleasant result, where the DISPLAY and SESSION_MANAGER -values (and others -in the future) are passed transparently, where the app actually gets -started(!), where unnecessary resources are not held open, etc. - -The obvious answer is to define a \*Qbetter\*U remote execution mechanism, -but that has a host of problems - while rsh and friends have their -security problems, at least they are reasonably well understood and -the \*Qtrusted\*U executables have been extensively tested. A new mechanism -would have to be analysed and tested before it could be trusted. - -Better to make effective use of current services, and take advantage -of such services as may become available in the future. In the future -some better remote execution protocol may become available. Such a -protocol may address some of the issues this paper is intended to -address like passing auxiliary information, but will probably not address -issues like setting up the environment required to run an X app. Fine, -adopt it, and adopt conventions like those discussed here to allow its -convenient use for X applications. - -In this spirit this paper does not mandate \*Qthou shalt start X apps -using rsh\*U, but rather \*QIf you support X, you should arrange that the -following rsh request will start an X app properly\*U. - -Such a solution would be to layer a more flexible protocol on top -of rsh et al, using rsh's standard in/out mechanism to pass initial -setup information to a \*Qhelper\*U program on the other end. Since rsh -(or whatever) has already handled the security aspects of the request, -the helper need have no particular special privileges and hence adds -no new security considerations. - -\*QWhy rsh?\*U While this paper refers to \*Qrsh\*U all over the place, few -if any of the concepts are peculiar to rsh. Any form of remote execution -protocol that handles the security aspects of remote execution and -provides a bidirectional data stream to the resulting program can be used. -Rsh, rexec, and krsh are obvious examples, but there is no reason why -telnet could not be used, when combined with a scripting mechanism to -do autologin. - -\*QBut I don't use X, why do I want this?\*U Again, while this paper -refers to X all over the place and the impetus for creation of this -protocol is starting and restarting X applications, the mechanisms -defined are as independent of X as possible and are applicable to -non-X start/restart problems. - -\*QI don't use POSIX. What do I do?\*U The initial target systems are -generally POSIX-based or POSIX-like, and so there are some POSIX-specific -features and lots of POSIX-specific examples, but the protocol is -designed to be operating-system independent. Such OS independence is, -in fact, one of the primary goals - to provide an OS-independent -remote execution mechanism. -.bp -.ce -The Remote Start Protocol \*Qrstart\*U - -Goals: - -.IP \(bu -A requester should be able to have a program started in any of a -number of predefined \*Qcontexts\*U. (For instance, on a dual-universe -Berkeley -.UX -/ System V -.UX -system those might be two such contexts. -On a system with multiple versions of the X Window System installed each -would be available as a predefined context. A VAX might support VMS -and Eunice contexts.) -.IP \(bu -A requester should be able to override (within security bounds usual -to the system) any aspect of the environment. -.IP \(bu -Neither the requesting program nor the \*Qhelper\*U program on the -host end should need to have any special privileges. -.IP \(bu -Any parameter of the environment that can be controlled should be -controllable through this mechanism. In particular, on POSIX systems -environment variables, open files(?), umask, current directory, etc -should all be controllable. -.IP \(bu -The full richness of the host's command argument mechanism should -be available. In particular, on POSIX this means that arguments may -contain any character and may be of any length. -.IP \(bu -Notwithstanding all of the control afforded the requester, none -of it should be required - the requester should be able to provide -simple \*Qcommand lines\*U which will be executed in the desired environment -much as if they were typed to a conventional command processor. -.IP \(bu -A \*QGeneric Command\*U mechanism is provided, where standardized -commands result in an appropriate response, independent of the host -system. (This might be considered to be similar to the FTP model, -where the LIST command will produce a directory listing no matter what -the underlying system.) -.LP - -Requesting System Requirements: - -The requesting system MUST support an \*Qrsh\*U client or a suitable -replacement. Support of the rsh standard error and control connection -is desirable but not essential. - -Host System Requirements: - -The host system MUST support an \*Qrsh\*U server or a suitable replacement. -Support of the rsh standard error and control connection is desirable but -not essential. Invocation of the \*Qrstartd\*U program in the default rsh -environment MUST \*Qwork\*U. On POSIX systems this might require that rstartd -be installed in one of the directories in the default $PATH and that rstartd -not need any non-default shared library setup, etc. On other systems it -might require that the rsh server specially recognize the string \*Qrstartd\*U -and take appropriate action. - -The protocol itself: - -The requesting system makes a remote execution request using rsh (or -other suitable protocol) to execute the program \*Qrstartd\*U. The host -system responds with any amount of data (to accomodate systems that -want to natter before starting a program), and then sends a line -consisting of (exactly): -.nf - rstartd:Ready: -.fi -Failure to receive this line before the connection closes -indicates that the host system does not support Extended rsh. A -timeout is probably appropriate in addition. - -The requester then sends a series of lines of ASCII specifying the -program to be run and the environment in which it is to be run. The -request is terminated by a blank line. - -Syntax: rstart data is passed as a series of lines of ASCII, with -spaces delimiting words in each line, terminated by a blank line. -A \*Qline\*U is terminated by an ASCII LF. CRs and NULs MUST be ignored, -to allow for a system transmitting in Internet NVT ASCII. (Yes, rsh -et al are POSIX-style tools and won't have CRs, but if there's ever an -Internet standard remote exec mechanism it will almost certainly require -NVT ASCII, so it seems wise to provide for that possibility from the start.) -It is explicitly allowed for a system to discard characters other than -LF outside the range decimal 32-126; characters outside that range MUST -NOT be used. Words may contain spaces and non-printable characters by -representing them as octal escape sequences consisting of a backslash -followed by three octal digits. Note that backslashes themselves MUST -be passed using this mechanism. Thus the initial parsing sequence -consists of: - -.IP 1) -Receive data until the first blank line. -.IP 2) -Break data into lines at LFs, discarding CRs and NULs. -.IP 3) -Break lines into words at spaces. -.IP 4) -Translate \\nnn sequences in words into the appropriate characters. -.IP 5) -Process each line as appropriate. -.IP 6) -Pass (or more likely, allow to be passed) the connection and any data -after the blank line to the program. (??? Hmm. stdio buffering -considerations. Byte count instead of blank line?) -.LP -The first word of each line is a keyword specifying the interpretation of -the line. Keywords SHOULD be transmitted as shown in this document, -but the receiver MUST accept them in any case, even mIxEd. - -Unless otherwise specified, only one instance of any given keyword is -permitted in a given request. CONTEXT MUST be specified first, and -after that keywords may be given in any order. - -After receiving the blank line, the host responds with any number of -lines of output of the following forms, terminated by a blank line. - -rstartd: Ready: -.IP -(This isn't one of the \*Qresponse\*U lines, but it's -included here for completeness.) -This is rstartd's \*Qhello\*U line, and confirms that the host -does indeed support rstartd. -.LP - -rstartd: Failure: -.IP -An unrecoverable error has occurred which indicates that either -the requester or the host is fatally misconfigured. This might -occur if, for instance, a request is malformed or a required -configuration file is not present. -.LP - -rstartd: Error: -.IP -An unrecoverable error has occurred which indicates that the -request is in error. The most common such error would be that -the requested program is unavailable. -.LP - -rstartd: Warning: -.IP -A recoverable error has occurred. The program will be executed -but may not behave as desired. -.LP - -rstartd: Success: -.IP -No errors were detected. Unfortunately this does not mean that -no errors will occur, because there are many classes of errors -that cannot be detected until rstartd actually attempts to pass -control to the program. -.LP - -rstartd: Debug: -.IP -A debug message. Programs (and most humans!) should ignore these. -.LP - - -.IP -Indicates that something else in the system just HAD to say -something; should be treated as a Warning. -.LP -.bp -.LG -Keywords -.SM - -.B CONTEXT -.I name - -Initializes defaults suitable for the specified context. See the section -on contexts for more information. - -CONTEXT must be present, and must be the first line of the request. - -.B CMD -.I "command args args args" - -Executes the specified command with the specified arg in the same general -way as it would have been executed if typed to a the user's command -interpreter. (If the user's primary interface is not a command language, -a system default command language should be used.) It is expected that -the command will have been provided by a user, who will expect \*Qnormal\*U -command language handling of it. (For POSIX people, consider this as -roughly equivalent to system().) - -Note: No particular parsing or interpretation is guaranteed. The -interpretation should be unsurprising to an ordinary user of the host -system. This mechanism is therefore unsuitable for completely automated -use; EXEC and GENERIC-CMD are provided for that purpose. - -Exactly one of CMD, EXEC, or GENERIC-CMD must be present. - -.B EXEC -.I "progname namearg arg arg arg ..." - -Executes a program using a low-level execution mechanism which provides -minimal interpretation; in particular a command processor should not enter -the picture and no quoting other than that required by this protocol should -be required. It is expected that this interface will be used by programs -requesting restart; presumably they know exactly what their desired -arguments are and a command processor will only confuse the issue. -(For POSIX people, consider this to be like execlp().) - -.I Progname -is the name of the executable. This will typically be a -single word but is allowed to be a (system-specific) full filename -specification; if the latter then the behavior is system-specific but -normally path searching would be disabled. - -.I Namearg -should be the program name as it should be passed to the program. -Generally, it should be exactly equal to progname. Hosts which do not -pass a program's name to it should ignore it. - -The -.I args -are the arguments to be passed to the program. Hosts which do -not separate their arguments into words should concatenate the arguments -back together with spaces between them. (Optionally, they could elect to -not fully parse the line, and leave in the spaces as originally delivered.) - -Note: The interpretation of the command may not be intuitive to -an ordinary user of the host system; this interface is for precision, -not intuition. - -Exactly one of -.B CMD , -.B EXEC , -or -.B GENERIC-CMD -must be present. - -.B DIR -.I initial-directory - -Specifies (in a system-specific way) the initial default file system -location for the program. If no -.B DIR -line is supplied the program is -started in a system-specific initial location, presumably the user's -\*Qhome\*U. - -Note: It is expected that this value would come from a source with -a priori knowlege of the host - either the user or a \*Qrestart\*U request. -It is not expected that an automated mechanism with no advance knowlege -would be able to make use of this request. - -.B MISC -.I "registryname name=value" - -Passes a value to the program using a system-specific mechanism. -(Under POSIX and similar systems environment variables should generally -be used.) The -.I registryname -specifies the naming authority, and is intended to prevent conflicts and -allow for intelligent conversion. The idea is that systems that -understand a given registry will map these straight into environment -variables. Systems that don't entirely understand a given registry or -use a different but convertable mechanism can be picky and convert as -needed. An appendix lists the names that all systems are strongly -encouraged to support. - -Note: The names in the \*Qsuggested\*U appendix are expected to be supplied -by requesters with no advance knowlege of the host, only the blind -assumption that the host will support those \*Qwell-known\*U names with -their \*Qwell-known\*U semantics. Other names may be used by requesters -with advance knowlege of the host - restart requests, for example. - -Any number of -.B MISC -lines may be present. - -.B DETACH - -This line directs rstartd to attempt to \*Qdetach\*U the resulting process -from the rsh connection, leaving as little overhead (processes, connections, -etc) as possible. In POSIX-land, this will probably consist of redirecting -standard input, output, and error to /dev/null or a log file and then -executing the program using fork() and exec() and not having the parent -wait. - -It would be nice to have a mechanism for specifying where the output -should be redirected - log file or perhaps log/display program/server. -For the moment that's left as a matter of local implementation and -configuration. - -Only one of -.B DETACH -and -.B NODETACH -may be present. - -.B NODETACH - -This line directs rstartd to attempt NOT to \*Qdetach\*U. It is intended to -allow one to override a configuration default to -.B DETACH . - -Only one of -.B DETACH and -.B NODETACH -may be present. - -.B AUTH -.I "authscheme authdata ..." - -Specifies authentication data to be used by the specified authentication -scheme. This keyword may be given multiple times to give data for -multiple authentication schemes or for a single scheme to use for multiple -purposes. -.bp -System-specific lines begin with -.B SYSTEMNAME- . -No system-independent line -will be defined that includes a \*Q-\*U in its name. -.B X- -is reserved for experimental use. (\*QReserved\*U is an interesting word, -there; anybody can use -.B X- -for experiments and nobody can rely on there not being a conflict.) -.B INTERNAL- -is reserved for internal use by rstartd. - -.B POSIX-UMASK -.I nnn - -Sets the POSIX umask to -.I nnn -(octal). - -.B MSDOS-DIR -.I d:path - -Sets the current directory on drive -.I d: -to -.I path. -This differs from -.B DIR -in that -.B DIR -sets the current working drive and directory and -.B MSDOS-DIR -doesn't set the current drive; -.B MSDOS-DIR -would be used to set the current directory on drives other than the -current one. - -.B DESQVIEW-MEM -.I nnn - -Requests -.I nnn -kilobytes of conventional memory. - -.B DESQVIEW-EXPMEM -.I nnn - -Requests -.I nnn -kilobytes of expanded memory. (To be more verbose, requests -that the \*Qmax expanded memory\*U parameter be -.I nnn .) - -.B GENERIC-xxx - -The -.B GENERIC -system is a hypothetical system that offers various services -that can be supported on different real systems; it provides a common -interface for heterogenous systems. - -.B GENERIC-CMD -.I "generic-command-name args ..." - -Runs the local equivalent to -.I generic-command-name . -See the section on generic commands for more information. Exactly one of -.B CMD , -.B EXEC , -or -.B GENERIC-CMD -must be present. -.bp -.LG -Generic Commands -.SM - -Unless otherwise noted, generic commands are optional. - -.B "GENERIC-CMD Terminal" - -Runs a default terminal emulator for the current context. (It's not clear -what, if anything, this means outside a windowing system context.) In POSIX -X contexts this probably means xterm. - -.B "GENERIC-CMD LoadMonitor" - -Runs a default load monitor for the current context. In POSIX X contexts, -this probably means xload. - -.B "GENERIC-CMD ListContexts" - -Sends to standard output a list of available contexts, one per line, -with a comma-separated list of context names followed by a space followed by -a brief description of the context. If multiple context names invoke the -same context (as for instance X, X11, and X11R4 might) ListContexts SHOULD -list the most specific context first. - -This command MUST be available in the Default context, and SHOULD be -available in every context. - -.B "GENERIC-CMD ListGenericCommands" - -Sends to standard output a list of generic commands available in the -current context, one per line, with the command name followed by a space -followed by a brief description of the command. - -This command SHOULD be available in every context. -.bp -.LG -Contexts -.SM - -A request can specify what -.I context -a program should be run in. A context -will most likely include a set of default values for all of the controllable -aspects of the program's execution environment. - -Examples of Predefined Context Names - -.nf -None A minimal environment. Under POSIX, no environment variables. -Default The default environment. -X The X Window System, any version -X11 Version 11 of the X Window System, any release -X11R4 Version 11 of the X Window System, Release 4 -X11R5 Version 11 of the X Window System, Release 5 -OpenWindows Sun's OpenWindows, any version -OpenWindows2 Version 2 of Sun's OpenWindows -OpenWindows3 Version 3 of Sun's OpenWindows -NeWS Some version of Sun's Network Window System. -.fi - -Contexts are allowed (encouraged even) to support multiple names for -the same environment configuration. For instance: \*QX\*U, \*QX11\*U, -\*QX11R4\*U might all refer to exactly the same configuration. -\*QOpenWindows3\*U might well refer to a configuration that is a union -of \*QX11R4\*U and \*QNeWS\*U. -.bp -.LG -Suggested \*Qrequired\*U MISC commands -.SM - -General - -For most of these the \*Qsimple\*U behavior is to simply pass the value -to the app as an environment variable. This should be appropriate on -any POSIX systems. Other systems should use whatever mechanism is -appropriate to the given item; note that different mechanisms may be -appropriate to different items. - -All systems are encouraged to \*Qunderstand\*U all of these names, translating -them as appropriate to the local environment. - -\fBMISC X LANG=\fP\fIlocale identifier\fP - -Specifies the locale desired. If POSIX specifies a list of locale -identifiers then we can use that (and move it to the POSIX registry), -but if not then we will have to define a list (perhaps based on a good -de facto standard). Note that if there is no POSIX-standardized list -of locale names the host SHOULD translate from our list to the local -list. Note that this is based on the POSIX LANG environment variable, -but rumor says that POSIX does not specify a list of identifiers; -since we want a standarized list we must specify a registry and must -assume \*Qcontrol\*U of the name. If in the future POSIX specifies a -different list then during a transition period MISC X LANG and -MISC POSIX LANG would perform similar functions but using different -names for the locales. [[ It may be that ISO country/language codes -may supply a suitable registry. -- jb ]] - -\fBMISC X DISPLAY=\fP\fIhost\fP\fB:\fP\fIdisplaynum\fP - -Specifies the X server the app is to connect to. - -\fBMISC X SESSION_MANAGER=tcp/\fP\fIhost\fP\fB:\fP\fIport\fP - -Specifies the session manager the app is to connect to. - -\fBMISC POSIX TZ=\fP\fItime zone info\fP - -Specifies the time zone the user is in, using POSIX standard notation. -.bp -.LG -Specific Notes on use of Extended rsh with the X Window System -.SM - -To start an X program, the requester should specify an X context (\*QX\*U if -nothing else) and specify the display parameter by saying -.DS -\fBMISC X DISPLAY=\fP\fIhost\fP\fB:\fP\fIport.screen\fP -.DE -If the program is to join a session the requester should say: -.DS -\fBMISC X SESSION_MANAGER=tcp/\fP\fIhost\fP\fB:\fP\fIport\fP -.DE - -An X host MUST understand at least the X context and MUST, regardless -of whether or not it has environment variables as a system concept, -interpret \fBMISC X DISPLAY=\fP\fIhost\fP\fB:\fP\fIport\fP and pass it -to the program in -whatever way is locally appropriate. An X host supporting session -management (which all will do by the time this is adopted, right?) -MUST interpret \fBMISC X SESSION_MANAGER=tcp/\fP\fIhost\fP\fB:\fP\fIport\fP -similarly. - -An X host MUST understand the -.B X11 -authentication scheme for the -.B AUTH -keyword. The data given MUST be in the form given by \*Qxauth list\*U and -understood by \*Qxauth add\*U. AUTH X11 may be given several times to -pass multiple kinds of authorization data or data about multiple displays. - -Input methods? Extensibility? (Would be nice if new features could -be incorporated without new rstartd executables, which argues for passing -most data as environment variables.) -.bp -.LG -Suggestions for Implementation -.SM - -Configurability, extensibility. Nobody is ever happy with the default. -The host implementation should allow for as much configurability and -extensibility as possible. In particular, provision should be made for -administrator- and user- defined contexts, with user defined contexts -overriding or augmenting the administrator-defined and system-supplied -contexts. One good implementation scheme would be to have system-wide -and per-user configuration files which use the same syntax as the protocol. -ListContexts SHOULD list both system-wide and per-user contexts. - -Provision SHOULD be made for administrator- and user- defined generic -commands, with user-defined commands overriding system-wide ones. -ListGenericCommands SHOULD list both. -.bp -.LG -Notes on Outstanding specification issues -.SM - -Note: This is not part of the proposal. - -Syntax -.IP -The syntax is OK so far for machine generation, but is yucky for human -generation, especially spaces in environment variables in -config files. -.LP - -Environment variables -.IP -it would be nice if one could say things like -$HOME in values, especially in config files. -.LP - -Error handling -.IP -how to reliably mark successfully starting the app. -Can report syntax errors or lack thereof, but reporting startup or -execution errors is problematical. (Application execution errors -are tough no matter what; startup errors are tough because you want -to report an error if the exec*() fails, but if it succeeds you -don't have the opportunity to give a success report.) [[Clive gives -a clever trick for reliably distinguishing success, but I think -there's a race condition if the app is allowed to use the rsh -channel for output after it starts. -- jb]] -.LP - -Error handling -.IP -how to report post-startup errors and warnings to the -user. (Can say \*Qnot our problem\*U, but it would be nice if there -was a standard way to say \*Qgive output to a program that will -report it back to the user\*U or something like that. Session Manager -\*Qdeath reason\*U messages might be adequate, but don't cover warnings.) -.LP - -I18n -.IP -What character set should messages and requests be in? Can this -be determined by the locale as specified by -.B "MISC X LANG" ? -(Does this require that -.B "MISC X LANG" -be one of the first lines?) -.LP - -Protocol -.IP -One reviewer suggests an FTP- and SMTP- style protocol with requests -and responses. Personally I don't think individual responses to -the lines are required and that the roundtrips involved would -be wasted. The entire conversation is a single request and can -be rejected or accepted en toto. The response mechanism does -not provide for fabulously rich interpretation by an automaton, -but it does allow for a success / serious failure / routine -failure / warning distinction. -.LP - -Multiple requests/connection -.IP -Some have suggested that you should be able -to start multiple programs with a single connection, either to -start multiple apps on login or to allow a \*Qmaster\*U to request -apps occasionally during the course of a session. As doing so -would make it less possible (or at least more difficult) to use -the data channel for communicating with the app after start, -and as the overhead of starting a new connection isn't all that -high, I'm not enchanted with the idea. Admittedly, if the overhead -involved got higher (how fast is a Kerberos authentication?) -it might become more attractive. -.LP -.bp -Conclusion: - -A small protocol could be easily defined which would layer on top of a -relatively primitive remote execution facility like rsh, rexec, or krsh, -that would allow flexible application startup in a fairly machine-independent -way. By mandating appropriate local configuration, X applications could -be started (or restarted) conveniently, without requiring the requester -to understand the detailed requirements of the remote system. The -implementation cost, for both the requester and the \*Qserver\*U, is small. -Security issues are \*Qnot our problem\*U, since they are all handled by -existing protocols. -.sp -Security Considerations -.sp -.QP -Security is assumed handled by the underlying remote execution mechanism. -The \*Qhelper\*U program described by this memo runs with the privileges of -the user and so generally introduces no additional security considerations. -Systems where security is controlled by controlling what programs -may be run - where programs are trusted but users are not - may see -a security impact unless their \*Qhelper\*U is careful about what programs -it is willing to run. -.LP -.sp -Copyright -.sp -.QP -Copyright -.if t \(co -.if n (c) -1993 Quarterdeck Office Systems -.sp -Permission to use, copy, modify, distribute, and sell this software and -its documentation for any purpose is hereby granted without fee, provided -that the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name Quarterdeck Office Systems, Inc. not -be used in advertising or publicity pertaining to distribution of this -software without specific, written prior permission. - -THIS SOFTWARE IS PROVIDED `AS-IS'. QUARTERDECK OFFICE SYSTEMS, INC., -DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING WITHOUT -LIMITATION ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE, OR NONINFRINGEMENT. IN NO EVENT SHALL QUARTERDECK -OFFICE SYSTEMS, INC., BE LIABLE FOR ANY DAMAGES WHATSOEVER, INCLUDING -SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES, INCLUDING LOSS OF USE, -DATA, OR PROFITS, EVEN IF ADVISED OF THE POSSIBILITY THEREOF, AND -REGARDLESS OF WHETHER IN AN ACTION IN CONTRACT, TORT OR NEGLIGENCE, ARISING -OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -.LP -.sp -.ne 5 -Author's Address: -.sp -.IP -.nf -Jordan Brown -Quarterdeck Office Systems -Santa Monica, CA -jbrown@qdeck.com -.LP diff --git a/doc/xorg-docs/specs/rstart/rstartd.txt b/doc/xorg-docs/specs/rstart/rstartd.txt deleted file mode 100644 index 554730d1e..000000000 --- a/doc/xorg-docs/specs/rstart/rstartd.txt +++ /dev/null @@ -1,229 +0,0 @@ -rstartd - a sample implementation of an Remote Start rsh helper -hjb 02/24/93 - -Copyright (c) 1993 Quarterdeck Office Systems - -Permission to use, copy, modify, distribute, and sell this software and -its documentation for any purpose is hereby granted without fee, provided -that the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name Quarterdeck Office Systems, Inc. not -be used in advertising or publicity pertaining to distribution of this -software without specific, written prior permission. - -THIS SOFTWARE IS PROVIDED `AS-IS'. QUARTERDECK OFFICE SYSTEMS, INC., -DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING WITHOUT -LIMITATION ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE, OR NONINFRINGEMENT. IN NO EVENT SHALL QUARTERDECK -OFFICE SYSTEMS, INC., BE LIABLE FOR ANY DAMAGES WHATSOEVER, INCLUDING -SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES, INCLUDING LOSS OF USE, -DATA, OR PROFITS, EVEN IF ADVISED OF THE POSSIBILITY THEREOF, AND -REGARDLESS OF WHETHER IN AN ACTION IN CONTRACT, TORT OR NEGLIGENCE, ARISING -OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -Rstartd is an implementation of an Extended rsh "helper" as defined in -my "Remote Start protocol" document. - -This document describes the peculiarities of rstartd and how it is -configured. - -Rstartd is by design highly configurable. One would like things like -configuration file locations to be fixed, so that users and administrators -can find them without searching, but reality is that no two vendors will -agree on where things should go, and nobody thinks the original location -is "right". Thus, rstartd allows one to relocate _all_ of its files and -directories. - -Rstartd has a hierarchy of configuration files which are executed in -order when a request is made. They are: - - global config - per-user ("local") config - global per-context config - per-user ("local") per-context config - config from request - -As you might guess from the presence of "config from request", all of the -config files are in the format of an rstart request. Rstartd defines a few -additional keywords with the INTERNAL- prefix for specifying its configuration. - -Normally, a shell script is installed as "rstartd"; this script provides -the name of the global configuration file to the "real" rstartd using -its -c option. If rstartd is directly, it defaults to -/usr/lib/X11/rstart/config. - -Rstartd starts by reading and executing the global config file. -This file will normally specify the locations of the other configuration -files and any systemwide defaults. - -Rstartd will then read the user's local config file, default name -$HOME/.rstart. - -Rstartd will then start interpreting the request. - -Presumably one of the first lines in the request will be a CONTEXT line. -The context name is converted to lower case. - -Rstartd will read the global config file for that context, default name -/usr/lib/X11/rstart/contexts/, if any. - -It will then read the user's config file for that context, default name -$HOME/.rstart.contexts/, if any. - -(If neither of these exists, rstartd aborts with a Failure message.) - -Rstartd will finish interpreting the request, and execute the program -specified. - -This allows the system administrator and the user a large degree of control -over the operation of rstartd. The administrator has final say, because -the global config file doesn't need to specify a per-user config file. -If it does, however, the user can override anything from the global file, -and can even completely replace the global context config files. - -The config files have a somewhat more flexible format than requests do; -they are allowed to contain blank lines and lines beginning with "#" -are comments and ignored. (#s in the middle of lines are data, not comment -markers.) - -Any commands run are provided a few useful pieces of information in -environment variables. The exact names are configurable, but the supplied -defaults are: - - $RSTART_CONTEXT the name of the context - $RSTART_GLOBAL_CONTEXTS the global contexts directory - $RSTART_LOCAL_CONTEXTS the local contexts directory - $RSTART_GLOBAL_COMMANDS the global generic commands directory - $RSTART_LOCAL_COMMANDS the local generic commands directory - -$RSTART_{GLOBAL,LOCAL}_CONTEXTS should contain one special file, @List, -which contains a list of the contexts in that directory in the format -specified for ListContexts. The supplied version of ListContexts will -cat both the global and local copies of @List. - -Generic commands are searched for in several places: (defaults) - - per-user per-context directory ($HOME/.rstart.commands/) - global per-context directory (/usr/lib/X11/rstart/commands/) - per-user all-contexts directory ($HOME/.rstart.commands) - global all-contexts directory (/usr/lib/X11/rstart/commands) - -(Yes, this means you can't have an all-contexts generic command with the -same name as a context. It didn't seem like a big deal.) - -Each of these directories should have a file called @List that gives -the names and descriptions of the commands in that directory in the -format specified for ListGenericCommands. - -There are several "special" rstart keywords defined for rstartd configuration. -Unless otherwise specified, there are no defaults; related features are -disabled in this case. - -INTERNAL-REGISTRIES - Gives a space-separated list of "MISC" registries that this system - understands. (Registries other than this are accepted but generate - a Warning.) - -INTERNAL-LOCAL-DEFAULT - Gives the name ($HOME relative) of the per-user config file. - -INTERNAL-GLOBAL-CONTEXTS - Gives the name of the system-wide contexts directory. - -INTERNAL-LOCAL-CONTEXTS - Gives the name ($HOME relative) of the per-user contexts directory. - -INTERNAL-GLOBAL-COMMANDS - Gives the name of the system-wide generic commands directory. - -INTERNAL-LOCAL-COMMANDS - Gives the name ($HOME relative) of the per-user generic commands - directory. - -INTERNAL-VARIABLE-PREFIX - Gives the prefix for the configuration environment variables rstartd - passes to its kids. - -INTERNAL-AUTH-PROGRAM authscheme program argv[0] argv[1] ... - Specifies the program to run to set up authentication for the - specified authentication scheme. "program argv[0] ..." gives - the program to run and its arguments, in the same form as the - EXEC keyword. - -INTERNAL-AUTH-INPUT authscheme - Specifies the data to be given to the authorization program as - its standard input. Each argument is passed as a single line. - $n, where n is a number, is replaced by the n'th argument to the - "AUTH authscheme arg1 arg2 ..." line. - -INTERNAL-PRINT - Prints its arguments as a Debug message. Mostly for rstartd - debugging, but could be used to debug config files. - - -Various Notes: - -rstartd currently limits lines, both from config files and requests, to -BUFSIZ bytes. - -DETACH is implemented by redirecting file descriptors 0,1, and 2 to -/dev/null and forking before executing the program. - -CMD is implemented by invoking $SHELL (default /bin/sh) with "-c" and -the specified command as arguments. - -POSIX-UMASK is implemented in the obvious way. - -The X authorization program is run in the same context as the target -program - same environment variables, path, etc. Long term this might -be a problem. - -In the X context, GENERIC-CMD Terminal runs xterm. -In the OpenWindows context, GENERIC-CMD Terminal runs cmdtool. - -In the X context, GENERIC-CMD LoadMonitor runs xload. -In the OpenWindows context, GENERIC-CMD LoadMonitor runs perfmeter. - -GENERIC-CMD ListContexts lists the contents of @List in both the -system-wide and per-user contexts directories. It is available in -all contexts. - -GENERIC-CMD ListGenericCommands lists the contents of @List in the -system-wide and per-user commands directories, including the -per-context subdirectories for the current context. It is available -in all contexts. - -CONTEXT None is not implemented. - -CONTEXT Default is really dull. - -For installation ease, the "contexts" directory in the distribution contains -a file "@Aliases" which lists a context name and aliases for that context. -This file is used to make symlinks in the contexts and commands directories. - -All MISC values are passed unmodified as environment variables. - -One can mistreat rstartd in any number of ways, resulting in anything -from stupid behavior to core dumps. Other than by explicitly running -programs I don't think it can write or delete any files, but there's -no guarantee of that. The important thing is that (a) it probably won't -do anything REALLY stupid and (b) it runs with the user's permissions, -so it can't do anything catastrophic. - -@List files need not be complete; contexts or commands which are dull -or which need not or should not be advertised need not be listed. -In particular, per-user @List files should not list things which are in -the system-wide @List files. In the future, perhaps ListContexts and -ListGenericCommands will automatically suppress lines from the -system-wide files when there are per-user replacements for those lines. - -Error handling is OK to weak. In particular, no attempt is made to -properly report errors on the exec itself. (Perversely, exec errors -could be reliably reported when detaching, but not when passing the -stdin/out socket to the app.) - -If compiled with -DODT1_DISPLAY_HACK, rstartd will work around a bug in -SCO ODT version 1. (1.1?) (The bug is that the X clients are all compiled -with a bad library that doesn't know how to look host names up using DNS. -The fix is to look up a host name in $DISPLAY and substitute an IP address.) -This is a trivial example of an incompatibility that rstart can hide. diff --git a/doc/xorg-docs/specs/rstart/tmac.rfc b/doc/xorg-docs/specs/rstart/tmac.rfc deleted file mode 100644 index cfc02d738..000000000 --- a/doc/xorg-docs/specs/rstart/tmac.rfc +++ /dev/null @@ -1,81 +0,0 @@ -.\" Troff/nroff macros for RFCs -.\" Use ".so tmac.rfc" and nroff -ms rfc1234.t | fix.nawk -.\" or nroff -ms tmac.rfc rfc1234.t | fix.nawk -.\" or the obvious troff variants. -.\" Registers (all strings): -.\" iL Author's Last name -.\" iN RFC number -.\" iD Date -.\" iI Author's Initial -.\" iO Author's Organization (usually employer) -.\" iG Author's Group (eg IETF WG) -.\"--------------------------------------------------------------------------- -.\" Set up page header/footer stuff -.ds RF [Page %] -.ds LF \*(iL -.ds CF -.ie '\*(iN'DRAFT' .ds LH DRAFT -.el .ds LH RFC \*(iN -.ds RH \*(iD -.ds CH -.\"--------------------------------------------------------------------------- -.\" Online vs fully-formatted distinctions. -.ie n \{\ -.\" Set up for online use. While this is compatible with printing, it -.\" is intended for producing "standard" RFC text files. -.pl 10.0i -.po 0 -.ll 7.2i -.lt 7.2i -.nr LL 7.2i -.nr LT 7.2i -.ad l -.\" nroff normally does not put out ^Ls. The FORMFEED below is part of a -.\" hack involving "nroff|fix.nawk" or "nroff|fix.sed|fix.awk" to put -.\" out pages that look like -.\" last line of page -.\" ^L -.\" first line of new page -.ds RF FORMFEED\*(RF -.\} -.el \{\ -.\" Set up for troff use. Optimized for groff and my LJ-IIIP w/PostScript. -.pl -.5i -.\} -.\"--------------------------------------------------------------------------- -.\" I don't like hyphenation. -.hy 0 -.\" And stupid -ms tries to turn it back on, so defeat that... -.de hy -.. -.de dH -.if '\*(iN'DRAFT' \{\ -This document is an Internet-Draft. Internet-Drafts are -working documents of the Internet Engineering Task Force -(IETF), its areas, and its working groups. Note that other -groups may also distribute working documents as -Internet-Drafts. - -Internet-Drafts are draft documents valid for a maximum of six -months. Internet-Drafts may be updated, replaced, or obsoleted -by other documents at any time. It is not appropriate to use -Internet-Drafts as reference material or to cite them other -than as a \*Qworking draft\*U or \*Qwork in progress.\*U - -To learn the current status of any Internet-Draft, please check -the 1id-abstracts.txt listing contained in the Internet-Drafts -Shadow Directories on ds.internic.net, nic.nordu.net, -ftp.nisc.sri.com, or munnari.oz.au. - -This document is filed under \*Q\\$1\*U. -.\} -.. -.\"--------------------------------------------------------------------------- -.\" Put the standard header at the top of the first page. Perhaps -.\" this should be a macro which you must explicitly call. -.br -.tl `\*(iG``\*(iI \*(iL` -.ie '\*(iN'DRAFT' .tl `INTERNET-DRAFT``\*(iO` -.el .tl `Request for Comments: \*(iN``\*(iO` -.tl ```\*(iD` -.sp 2 diff --git a/doc/xorg-docs/specs/saver/saver.ms b/doc/xorg-docs/specs/saver/saver.ms deleted file mode 100644 index d92ebe4c8..000000000 --- a/doc/xorg-docs/specs/saver/saver.ms +++ /dev/null @@ -1,881 +0,0 @@ -.\" Use tbl, -ms -.\" $XConsortium: saver.ms,v 1.5 92/02/11 17:05:26 keith Exp $ -.\" $NCDId: @(#)screensaver.ms,v 1.24 1992/02/22 14:00:00 jim Exp jim $ -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.\" Change the contents of the following of Pp to PP to have it indent -.de Pp -.LP -.. -.de PN -\\fB\\^\\$1\^\\fR\\$2 -.. -.de Pn -\\$1\\fB\\^\\$2\^\\fR\\$3 -.. -.de Rq -.sp -.LP -.\" .in +.50i -.PN \\$1 -.in +.33i -.sp .5v -.\".LP -.. -.de Sm -.\".in -.50i -.in -.33i -.Pp -.. -.de Ar -.br -\\fI\\$1\\fP\\^: \\$2 -.. -.de Rp -.in -.2i -.br -.sp .5v -\(-> -.br -.sp .5v -.in +.2i -.. -.de Rv -.br -\\$1: \\$2 -.. -.ps 11 -.nr PS 11 -.nr PD 1v -\& -.sp 8 -.ce 1 -\s+2\fBX11 SCREEN SAVER EXTENSION\fP\s-2 -.sp 3 -.ce 3 -Version 1.0 -MIT X Consortium Proposed Standard -X Version 11, Release 5 -.sp 6 -.ce 4 -\s-1Jim Fulton -.sp 6p -Network Computing Devices, Inc.\s+1 -.sp 3 -.ce 4 -\s-1Keith Packard -.sp 6p -X Consortium -Laboratory for Computer Science -Massachusetts Institute of Technology\s+1 -.ps 9 -.nr PS 9 -.sp 8 -.LP -Copyright \(co 1992 by the Massachusetts Institute of Technology and -Network Computing Devices, Inc. -.LP -Permission to use, copy, modify, and distribute this documentation for any -purpose and without fee is hereby granted, provided that the above copyright -notice and this permission notice appear in all copies. MIT and -Network Computing Devices, Inc. make no -representations about the suitability for any purpose of the information in -this document. This documentation is provided ``as is'' without express or -implied warranty. -.ps 11 -.nr PS 11 -.bp 1 -.EH ''\s10X11 Screen Saver Extension\s0'' -.OH ''\s10X11 Screen Saver Extension\s0'' -.EF ''\s10\fB % \fP\s0'' -.OF ''\s10\fB % \fP\s0'' -.NH 1 -Introduction -.Pp -The X Window System provides support for changing the image on a display screen -after a user-settable period of inactivity to avoid burning the cathode ray -tube phosphors. However, no interfaces are provided for the user to control -the image that is drawn. This extension allows an external ``screen saver'' -client to detect when the alternate image is to be displayed and to provide the -graphics. -.Pp -Current X server implementations typically provide at least one form of -``screen saver'' image. Historically, this has been a copy of the X logo -drawn against the root background pattern. However, many users have asked -for the mechanism to allow them to write screen saver programs that provide -capabilities similar to those provided by other window systems. In -particular, such users often wish to be able to display corporate logos, -instructions on how to reactivate the screen, and automatic screen-locking -utilities. This extension provides a means for writing such clients. -.NH 1 -Assumptions -.Pp -This extension exports the notion of a special screen saver window that is -mapped above all other windows on a display. This window has the -\fIoverride-redirect\fP attribute set so that it is not subject to manipulation by -the window manager. Furthermore, the X identifier for the window is never -returned by \fBQueryTree\fP requests on the root window, so it is typically -not visible to other clients. -.NH 1 -Overview -.Pp -The core -.PN SetScreenSaver -request can be used to set the length of time without -activity on any input devices after which the screen saver should ``activate'' -and alter the image on the screen. This image periodically ``cycles'' to -reduce -the length of time that any particular pixel is illuminated. Finally, the -screen saver is ``deactivated'' in response to activity on any of the input -devices -or particular X requests. -.Pp -Screen saving is typically done by disabling video output to the display tube -or by drawing a changing pattern onto the display. If the server chooses the -latter approach, a window with a special identifier is created and mapped at -the top of the stacking order where it remains until the screen saver -deactivates. At this time, the window is unmapped and is not accessible to any -client requests. -.Pp -The server's default mechanism is refered to as the \fIinternal\fP screen -saver. An \fIexternal\fP -screen saver client requires a means of determining the window -id for the screen saver window and setting the attributes (e.g. size, -location, visual, colormap) to be used when the window is mapped. These -requirements form the basis of this extension. -.NH 1 -Issues -.Pp -This extension raises several interesting issues. First is the question of -what should be done if some other client has the server grabbed when the screen -saver is supposed to activate? This commonly occurs with window managers that -automatically ask the user to position a window when it is first mapped by -grabbing the server and drawing XORed lines on the root window. -.Pp -Second, a screen saver program must control the actual RGB values sent to the -display tube to ensure that the values change periodically to avoid phosphor -burn in. Thus, the client must have a known colormap installed whenever the -screen saver window is displayed. To prevent screen flashing, the visual type -of the screen saver window should also be controlable. -.Pp -Third, some implementations may wish to destroy the screen saver window when -it is not mapped so that it need not be avoided during event delivery. Thus, -screen saver clients may find that the requests that reference the screen -saver window may fail when the window is not displayed. -.NH 1 -Protocol -.Pp -The Screen Saver extension is as follows: -.NH 2 -Types -.Pp -In adition to the comon types described in the core protocol, the following -type is used in the request and event definitions in subsequent sections. -.Pp -.TS -lw(2i) lw(3.75i). -_ -.sp 6p -.B -Name Value -.sp 6p -_ -.sp 6p -.R -SCREENSAVEREVENT T{ -.Pn { ScreenSaverNotify , -.PN ScreenSaverCycle } -T} -.TE -.NH 2 -Errors -.Pp -The Screen Saver extension adds no errors beyond the core protocol. -.NH 2 -Requests -.Pp -The Screen Saver extension adds the following requests: -.Rq ScreenSaverQueryVersion -.Ar client-major-version CARD8 -.Ar client-minor-version CARD8 -.Rp -.Rv server-major-version CARD8 -.Rv server-minor-version CARD8 -.Sm -This request allows the client and server to determine which version of -the protocol should be used. The client sends the version that it -prefers; if the server understands that -version, it returns the same values and interprets subsequent requests -for this extension according to the specified version. Otherwise, -the server returns the closest version of the protocol that it can -support and interprets subsequent requests according to that version. -This document describes major version 1, minor version 0; the major -and minor revision numbers should only be incremented in response to -incompatible and compatible changes, respectively. -.Rq ScreenSaverQueryInfo -.Ar drawable DRAWABLE -.Rp -.Rv saver-window WINDOW -.Rv state -.Pn { Disabled , -.PN Off , -.PN On } -.Rv kind -.Pn { Blanked , -.PN Internal , -.PN External } -.Rv til-or-since CARD32 -.Rv idle CARD32 -.Rv event-mask SETofSCREENSAVEREVENT -.LP -.Rv Errors -.PN Drawable -.Sm -This request returns information about the state of the screen -saver on the screen associated with \fIdrawable\fP. The \fIsaver-window\fP -is the XID that is associated with the screen saver window. This -window is not guaranteed to exist -except when external screen saver is active. Although it is a -child of the root, this window is not returned by -.PN QueryTree -requests on the root. Whenever this window is mapped, it is always above -any of its siblings in the stacking order. XXX - TranslateCoords? -.Pp -The \fIstate\fP field specifies whether or not the screen saver is currently -active and how the \fItil-or-since\fP value should be interpretted: -.in +.5i -.TS -lw(1.5i) lw(3.5i). -T{ -.PN Off -T} T{ -The screen is not currently being saved; \fItil-or-since\fP -specifies the number of milliseconds until the screen saver is expected to -activate. -T} -.sp -T{ -.PN On -T} T{ -The screen is currently being saved; \fItil-or-since\fP specifies -the number of milliseconds since the screen saver activated. -T} -.sp -T{ -.PN Disabled -T} T{ -The screen saver is currently disabled; \fItil-or-since\fP is zero. -T} -.TE -.in -.5i -.Pp -The \fIkind\fP field specifies the mechanism that either is currently being -used or would have been were the screen being saved: -.in +.5i -.TS -lw(1.5i) lw(3.5i). -T{ -.PN Blanked -T} T{ -The video signal to the display monitor was disabled. -T} -.sp -T{ -.PN Internal -T} T{ -A server-dependent, built-in screen saver image was displayed; either no -client had set the screen saver window attributes or a different client -had the server grabbed when the screen saver activated. -T} -.sp -T{ -.PN External -T} T{ -The screen saver window was mapped with attributes set by a -client using the \fBScreenSaverSetAttributes\fP request. -T} -.TE -.in -.5i -.Pp -The \fIidle\fP field specifies the number of milliseconds since the last -input was received from the user on any of the input devices. -.Pp -The \fIevent-mask\fP field specifies which, if any, screen saver -events this client has requested using \fBScreenSaverSelectInput\fP. -.Pp -If \fIdrawable\fP is not a valid drawable identifier, a Drawable -error is returned and the request is ignored. -.Rq ScreenSaverSelectInput -.Ar drawable DRAWABLE -.Ar event-mask SETofSCREENSAVEREVENT -.LP -Errors: -.PN Drawable , -.PN Match -.Sm -This request specifies which Screen Saver extension events on the screen -associated with \fIdrawable\fP should be generated for this client. If -no bits are set in \fIevent-mask\fP, then no events will be generated. -Otherwise, any combination of the following bits may be set: -.in +.5i -.TS -lw(1.5i) lw(3.5i). -T{ -.PN ScreenSaverNotify -T} T{ -If this bit is set, \fBScreenSaverNotify\fP events are generated whenever -the screen saver is activated or deactivated. -T} -.sp -T{ -.PN ScreenSaverCycle -T} T{ -If this bit is set, \fBScreenSaverNotify\fP events are generated whenever -the screen saver cycle interval passes. -T} -.TE -.in -.5i -.Pp -If \fIdrawable\fP is not a valid drawable identifier, a Drawable -error is returned. If any undefined bits are set in \fIevent-mask\fP, -a Value error is returned. If an error is returned, -the request is ignored. -.Rq ScreenSaverSetAttributes -.Ar drawable DRAWABLE -.Ar class -.Pn { InputOutput , -.PN InputOnly , -.PN CopyFromParent } -.Ar depth CARD8 -.Ar visual "VISUALID or" -.PN CopyFromParent -.Ar "x, y" INT16 -.Ar "width, height, border-width" CARD16 -.Ar value-mask BITMASK -.Ar value-list LISTofVALUE -.LP -.Rv Errors -.PN Access , -.PN Window , -.PN Pixmap , -.PN Colormap , -.PN Cursor , -.PN Match , -.PN Value , -.PN Alloc -.Sm -This request sets the attributes that this client would like to see -used in creating the screen saver window on the screen associated -with \fIdrawable\fP. If another client currently has the attributes set, -an Access error is generated and the request is ignored. -.Pp -Otherwise, the specified window attributes are checked as if -they were used in a core \fBCreateWindow\fP request whose -parent is the root. The \fIoverride-redirect\fP field is ignored as -it is implicitly set to True. If the window attributes result in an -error according to the rules for \fBCreateWindow\fP, the request is -ignored. -.Pp -Otherwise, the attributes are stored and will take effect on the next -activation that occurs when the server is not grabbed by another client. -Any resources specified for the -\fIbackground-pixmap\fP or \fIcursor\fP attributes may be -freed immediately. The server is free to copy the \fIbackground-pixmap\fP -or \fIcursor\fP resources or to use them in place; therefore, the effect of -changing the contents of those resources is undefined. If the -specified \fIcolormap\fP no longer exists when the screen saver activates, -the parent's colormap is used instead. If no errors are generated by this -request, any previous -screen saver window attributes set by this client are released. -.Pp -When the screen saver next activates and the server is not grabbed by -another client, the screen saver window is -created, if necessary, and set to the specified attributes and events -are generated as usual. The colormap -associated with the screen saver window is -installed. Finally, the screen saver window is mapped. -.Pp -The window remains mapped and at the top of the stacking order -until the screen saver is deactivated in response to activity on -any of the user input devices, a \fBForceScreenSaver\fP request with -a value of Reset, or any request that would cause the window to be -unmapped. -.Pp -If the screen saver activates while the server is grabbed by another -client, the internal saver mechanism is used. The \fBForceScreenSaver\fP -request may be used with a value of Active to -deactivate the internal saver and activate the external saver. -.Pp -If the screen saver client's connection to the server is broken -while the screen saver is activated and the client's close down mode has not -been RetainPermanent or RetainTemporary, the current screen saver -is deactivated and the internal screen saver is immediately activated. -.Pp -When the screen saver deactivates, the screen saver window's colormap -is uninstalled and the window is unmapped (except as described below). -The screen saver XID is disassociated -with the window and the server may, but is not required to, -destroy the window along with any children. -.Pp -When the screen saver is being deactivated and then immediately -reactivated (such as when switching screen savers), the server -may leave the screen saver window mapped (typically to avoid -generating exposures). -.Rq ScreenSaverUnsetAttributes -.Ar drawble DRAWABLE -.LP -.Rv Errors -.PN Drawable -.Sm -This request notifies the server that this client no longer -wishes to control the screen saver window. Any screen saver -attributes set by this client and any descendents of the screen -saver window created by this client should be released -immediately if the screen saver is not active, else upon -deactivation. -.Pp -This request is ignored if the client has not previously set the screen saver -window attributes. -.NH 2 -Events -.Pp -The Screen Saver extension adds one event: -.Rq ScreenSaverNotify -.Ar root WINDOW -.Ar window WINDOW -.Ar state -.Pn { Off , -.PN On , -.PN Cycle } -.Ar kind -.Pn { Blanked , -.PN Internal , -.PN External } -.Ar forced BOOL -.Ar time TIMESTAMP -.Sm -This event is delivered to clients that have requested -ScreenSaverNotify events using the \fBScreenSaverSelectInput\fP request -whenever the screen saver activates or deactivates. -.Pp -The \fIroot\fP field specifies root window of the screen for -which the event was generated. The \fIwindow\fP field specifies -the value that is returned by \fBScreenSaverQueryInfo\fP as -the identifier for the screen saver window. This window is not -required to exist if the external screen saver is not active. -.Pp -The \fIstate\fP field specifies the cause of the event: -.in +.5i -.TS -lw(1.5i) lw(3.5i). -T{ -.PN Off -T} T{ -The screen saver deactivated; this event is sent if the client has set the -ScreenSaverNotify bit in its event mask. -T} -.sp -T{ -.PN On -T} T{ -The screen saver activated. This event is sent if the client has set the -ScreenSaverNotify bit in its event mask. -T} -.sp -T{ -.PN Cycle -T} T{ -The cycle interval passed and the client is expected to change the image on -the screen. This event is sent if the client has set the -ScreenSaverCycle bit in its event mask. -T} -.TE -.in -.5i -.LP -If \fIstate\fP is set to -.PN On -or -.PN Off -then \fIforced\fP indicates whether or not activation or -deactivation was caused by a core -.PN ForceScreenSaver -request; otherwise, \fIforced\fP is set to False. -.Pp -The \fIkind\fP field specifies mechanism that was used to save the screen -when the screen saver was activated, as described in -\fBScreenSaverQueryInfo\fP. -.Pp -The \fItime\fP field indicates the server time when the -event was generated. -.NH 1 -Encoding -.Pp -Please refer to the X11 Protocol Encoding document as this document uses -conventions established there. -.Pp -The name of this extension is ``SCREEN-SAVER''. -.LP -.NH 2 -Common Types -.LP -.TA .75i 1.75i -.ta .75i 1.75i -.nf -.R -SETofSCREENSAVEREVENT - #x00000001 ScreenSaverNotifyMask - #x00000002 ScreenSaverCycleMask -.fi -.NH 2 -Requests -.de En -.LP -.PN \\$1 -.TA .5i 1.5i 2.5i -.ta .5i 1.5i 2.5i -.in +.33i -.nf -.. -.de Ee -.in -.33i -.fi -.. -.En ScreenSaverQueryVersion -1 CARD8 screen saver opcode -1 0 minor opcode -2 2 request length -1 CARD8 client major version -1 CARD8 client minor version -2 unused -.Rp -1 1 Reply -1 unused -2 CARD16 sequence number -4 0 reply length -1 CARD8 server major version -1 CARD8 server minor version -22 unused -.Ee -.En ScreenSaverQueryInfo -1 CARD8 screen saver opcode -1 1 minor opcode -2 2 request length -4 DRAWABLE drawable associated with screen -.Rp -1 1 Reply -1 CARD8 state - 0 Off - 1 On - 3 Disabled -2 CARD16 sequence number -4 0 reply length -4 WINDOW saver window -4 CARD32 milliseconds until saver or since saver -4 CARD32 milliseconds since last user device input -4 SETofSCREENSAVEREVENT event mask -1 CARD8 kind - 0 Blanked - 1 Internal - 2 External -10 unused -.Ee -.En ScreenSaverSelectInput -1 CARD8 screen saver opcode -1 2 minor opcode -2 3 request length -4 DRAWABLE drawable associated with screen -4 SETofSCREENSAVEREVENT event mask -.Ee -.En ScreenSaverSetAttributes -1 CARD8 screen saver opcode -1 3 minor opcode -2 6+n request length -4 DRAWABLE drawable associated with screen -2 INT16 x -2 INT16 y -2 CARD16 width -2 CARD16 height -2 CARD16 border-width -1 class - 0 CopyFromParent - 1 InputOutput - 2 InputOnly -1 CARD8 depth -4 VISUALID visual - 0 CopyFromParent -4 BITMASK value-mask (has n bits set to 1) - encodings are the same as for core CreateWindow -4n LISTofVALUE value-list - encodings are the same as for core CreateWindow -.Ee -.En ScreenSaverUnsetAttributes -1 CARD8 screen saver opcode -1 4 minor opcode -2 3 request length -4 DRAWABLE drawable associated with screen -.Ee -.NH 2 -Events -.En ScreenSaverNotify -1 CARD8 code assigned by core -1 CARD8 state - 0 Off - 1 On - 2 Cycle -2 CARD16 sequence number -4 TIMESTAMP time -4 WINDOW root -4 WINDOW screen saver window -1 CARD8 kind - 0 Blanked - 1 Internal - 2 External -1 BOOL forced -14 unused -.Ee -.NH 1 -Inter-Client Communications Conventions -.Pp -Screen saver clients should create at least one resource value whose -identifier can be stored in a property named -.PN _SCREEN_SAVER_ID -on the root of each screen it is managing. -This property should have one 32-bit value corresponding to the resource -identifier; the type of the property should indicate the type of the -resource and should be one of the following: -.PN WINDOW , -.PN PIXMAP , -.PN CURSOR , -.PN FONT , or -.PN COLORMAP . -.NH 1 -C language binding -.Pp -The C binding for this extension simply provide access to the protocol; they -add no semantics beyond what is described above. -.Pp -The include file for this extension is -.Pn < X11/extensions/scrnsaver.h >. -.LP -Bool -.br -XScreenSaverQueryExtension (display, event_base, error_base) -.RS -Display *display; -.br -int *event_base; /* RETURN */ -.br -int *error_base; /* RETURN */ -.RE -.IP -This routine returns -.PN True -if the specified \fIdisplay\fP supports the SCREEN-SAVER extension; -otherwise it returns -.PN False . -If the extension is supported, the event number for -.PN ScreenSaverNotify -events is returned in the value pointed to by \fIevent_base\fP. Since -no additional errors are defined by this extension, the results -of \fIerror_base\fP are not defined. -.LP -Status -.br -XScreenSaverQueryVersion (display, major, minor) -.RS -Display *display; -.br -int *major; /* RETURN */ -.br -int *minor; /* RETURN */ -.RE -.IP -If the specified \fIdisplay\fP supports the extension, -the version numbers of the protocol -expected by the server are returned in \fImajor\fP and \fIminor\fP and -a non-zero value is returned. Otherwise, the arguments are not -set and 0 is returned. -.LP -XScreenSaverInfo * -.br -XScreenSaverAllocInfo () -.IP -This routine allocates and returns an \fBXScreenSaverInfo\fP structure -for use in calls to \fBXScreenSaverQueryInfo\fP. All fields in the -structure are initialized to zero. If insufficient memory is available, -NULL is returned. The results of this routine can be released -using \fIXFree\fP. -.LP -Status -.br -XScreenSaverQueryInfo (display, drawable, saver_info) -.RS -Display *display; -.br -Drawable drawable; -.br -XScreenSaverInfo *saver_info; /* RETURN */ -.RE -.IP -If the specified \fIdisplay\fP supports the extension, -information about the current state of the -screen server is returned in \fIsaver_info\fP and a non-zero value is -returned. The \fBXScreenSaverInfo\fP structure is defined as follows: -.sp -.in +.5i -.TA 4i -.ta 4i -typedef struct { - Window window; /* screen saver window */ - int state; /* ScreenSaver{Off,On,Disabled} */ - int kind; /* ScreenSaver{Blanked,Internal,External} */ - unsigned long til_or_since; /* milliseconds */ - unsigned long idle; /* milliseconds */ - unsigned long event_mask; /* events */ -.br -} XScreenSaverInfo; -.in -.5i -.sp -See the \fBScreenSaverQueryInfo\fP request for a description of the fields. -If the extension is not supported, \fIsaver_info\fP is not changed and 0 -is returned. -.LP -void -.br -XScreenSaverSelectInput (display, drawable, event_mask) -.RS -Display *display; -.br -Drawable drawable; -.br -unsigned long event_mask; -.RE -.IP -If the specified \fIdisplay\fP supports the extension, -this routine asks that events related to -the screen saver be generated for this client. -The format of the events generated is: -.sp -.in +.5i -.TA 4i -.ta 4i -typedef struct { - int type; /* of event */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came frome a SendEvent request */ - Display *display; /* Display the event was read from */ - Window window; /* screen saver window */ - Window root; /* root window of event screen */ - int state; /* ScreenSaver{Off,On,Cycle} */ - int kind; /* ScreenSaver{Blanked,Internal,External} */ - Bool forced; /* extents of new region */ - Time time; /* event timestamp */ -.br -} XScreenSaverNotifyEvent; -.in -.5i -.sp -See the -definition of the \fBScreenSaverSelectInput\fP request for descriptions -of the allowed event masks. -.LP -void -.br -XScreenSaverSetAttributes (display, drawable, x, y, width, height, border_width, depth, class, visual, valuemask, attributes) -.RS -Display *dpy; -.br -Drawable drawable; -.br -int x; -.br -int y; -.br -unsigned int width; -.br -unsigned int height; -.br -unsigned int border_width; -.br -int depth; -.br -unsigned int class; -.br -Visual *visual; -.br -unsigned long valuemask; -.br -XSetWindowAttributes *attributes; -.RE -.IP -If the specified \fIdisplay\fP supports the extension, -this routine sets the attributes to be used -the next time the external screen saver is activated. See the definition -of the \fBScreenSaverSetAttributes\fP request for a description of each of -the arguments. -.LP -void -.br -XScreenSaverUnsetAttributes (display, drawable) -.RS -Display *display; -.br -Drawable drawable; -.RE -.IP -If the specified \fIdisplay\fP supports the extension, -this routine instructs the server to discard -any previous screen saver window attributes set by this client. -.LP -Status -.br -XScreenSaverRegister (display, screen, xid, type) -.RS -Display *display; -.br -int screen; -.br -XID xid; -.br -Atom type; -.RE -.IP -This routine stores the given \fIXID\fP in the \fB_SCREEN_SAVER_ID\fP -property (of the given \fItype\fP) on the -root window of the specified \fIscreen\fP. It returns zero if an error -is encountered and the property is not changed, otherwise it returns -non-zero. -.LP -Status -.br -XScreenSaverUnregister (display, screen) -.RS -Display *display; -.br -int screen; -.RE -.IP -This routine removes any \fB_SCREEN_SAVER_ID\fP from the -root window of the specified \fIscreen\fP. It returns zero if an error -is encountered and the property is changed, otherwise it returns -non-zero. -.LP -Status -.br -XScreenSaverGetRegistered (display, screen, xid, type) -.RS -Display *display; -.br -int screen; -.br -XID *xid; /* RETURN */ -.br -Atom *type; /* RETURN */ -.RE -.IP -This routine returns the \fIXID\fP and \fItype\fP stored in -the \fB_SCREEN_SAVER_ID\fP property on the -root window of the specified \fIscreen\fP. It returns zero if an error -is encountered or if the property does not exist or is not of the correct -format; otherwise it returns non-zero. diff --git a/doc/xorg-docs/specs/xfs/FSlib.doc b/doc/xorg-docs/specs/xfs/FSlib.doc deleted file mode 100644 index 8cf5de0be..000000000 --- a/doc/xorg-docs/specs/xfs/FSlib.doc +++ /dev/null @@ -1,222 +0,0 @@ -$Xorg: FSlib.doc,v 1.3 2000/08/17 19:42:50 cpqbld Exp $ - -Protocol requests - -These functions make protocol requests corresponding to their names. - -Connection Setup - -FSServer * -FSOpenServer(server) - char *server; - -Creates a connection to the font server specified in the 'server' string. - -FSCloseServer(svr) - FSServer *svr; - -Closes the connection to the font server. - -Font Manipulation - -Font -FSOpenXBitmap(svr, hint, fmask, name, originalid) - FSServer *svr; - fsBitmapFormat hint; - fsBitmapFormatMask fmask; - char *name; - Font *originalid; - -Opens the font that matches the given name (which may have '*' and '?' -as wildcards). The hint contains format information that will probably -be used in subsequent QueryXBitmaps() requests. The fmask tells which -bits in the mask are valid. If originalid is non-zero, then the server -already has the font opened under that ID. - -FSCloseFont(svr, fid) - FSServer *svr; - Font fid; - -Closes the font. - -char ** -FSListFonts(svr, pattern, maxNames, actualCount) - FSServer *svr; - char *pattern; - int maxNames; - int *actualCount; - -Returns the full names of the fonts matching pattern. Up to maxNames -names will be returned. The actual value number be placed in -actualCount. The return value should be freed with FSFreeFontNames. - -FSFreeFontNames(list) - char **list - -Frees the list of font names returned by FSListFonts. - -char ** -FSListWithXInfo(svr, pattern, maxNames, actualCount, info, pprops, offsets, - prop_data) - FSServer *svr; - char *pattern; - int maxNames; - int *actualCount; - fsFontHeader ***info; - fsPropInfo ***pprops; - fsPropOffset ***offsets; - unsigned char ***prop_data; - -Returns the full names of the fonts matching pattern. Up to maxNames -names will be returned. The actual value number be placed in -actualCount, and each font's header and property information will also -be returned. - -int -FSQueryXInfo(svr, fid, info, props, offsets, prop_data) - FSServer *svr; - Font fid; - fsFontHeader *info; - fsPropInfo *props; - fsPropOffset **offsets; - unsigned char **prop_data; - -Returns the font's header information. - -int -FSQueryXExtents8(svr, fid, range_type, str, str_len, extents) - FSServer *svr; - Font fid; - Bool range_type; - unsigned char *str; - unsigned long str_len; - fsCharInfo **extents; - -int -FSQueryXExtents16(svr, fid, range_type, str, str_len, extents) - FSServer *svr; - Font fid; - Bool range_type; - fsChar2b *str; - unsigned long str_len; - fsCharInfo **extents; - -Returns the extents of the given characters. If 'range_type' is set, -the 'str' is considered a range, otherwise its considered a list of -characters. A NULL str when range_type is set means that all the -character extents will be returned. - -int -FSQueryXBitmaps8(svr, fid, format, range_type, str, str_len,, offsets, glyph_data) - FSServer *svr; - Font fid; - fsRange *range; - fsBitmapFormat format; - Bool range_type; - unsigned char *str; - unsined long str_len; - unsigned long **offsets; - unsigned char **glyph_data; - -int -FSQueryXBitmaps16(svr, fid, format, range_type, str, str_len,, offsets, glyph_data) - FSServer *svr; - Font fid; - fsRange *range; - fsBitmapFormat format; - Bool range_type; - fsChar2b *str; - unsined long str_len; - unsigned long **offsets; - unsigned char **glyph_data; - -Returns the font's bitmaps in the requested format. The other arguments -are used as in QueryExtents above. - -Extensions - -char ** -FSListExtensions(svr, next) - FSServer *svr; - int *next; - -Lists any extension built into the font server. - -Bool -FSQueryExtension(svr, name, major_opcode, first_event, first_error) - FSServer *svr; - char *name; - int *major_opcode; - int *first_event; - int *first_error; - -Returns information on the specified extension. - -FSFreeExtensionList(list) - char **list; - -Frees the list returned by FSListExtensions(). - - -Helper functions -- these don't map to protocol requests, but -can make writing a FS client simpler. - -Synchronization - -FSSync(svr, discard) - FSServer *svr; - Bool discard; - -Flushes the output queue and waits for a reply from the server, -which will flush the server's output queue. - -int -(* FSSynchronize(svr, onoff)) () - FSServer *svr; - int onoff; - -Controls whether the server does every request in synchronous form. - -int -(* FSSetAfterFunction(svr, func)) () - FSServer *svr; - int (*func) (); - -Sets the function that will be called after every request. This -is usually NULL or FSSync(). - -FSFlush(svr) - FSServer *svr; - -Flushes any queued requests to the font server. - -Error Handling - -int (* FSSetErrorHandler(handler)) () - int (*handler) (); - -Changes the error handler to 'handler'. A NULL value will reset -it to use the default. - -int (* FSSetIOErrorHandler(handler)) () - int (*handler) (); - -Changes the I/O error handler to 'handler'. A NULL value will reset -it to use the default. - -Miscellaneous - -long -FSMaxRequestSize(svr) - FSServer *svr; - -Returns the largest request size in 4 byte quantities) that the -server can handle. - -char * -FSServerName(server) - char *server; - -Returns the name that FSlib would use to connect to the server. -Translates a NULL in the value of $FONT_SERVER. - diff --git a/doc/xorg-docs/specs/xfs/design.ms b/doc/xorg-docs/specs/xfs/design.ms deleted file mode 100644 index feb3c9632..000000000 --- a/doc/xorg-docs/specs/xfs/design.ms +++ /dev/null @@ -1,1498 +0,0 @@ -.\" $Xorg: design.ms,v 1.3 2000/08/17 19:42:51 cpqbld Exp $ -.\" roff -ms -.de Ip -.IP \(bu 3 -.. -.de Qp -.nr PS -2 -.nr VS -2 -.QP -.. -.\" These macros should select a typewriter font if you have one. -.de LS -.KS -.LD -.ft CB -.ta .6i 1.2i 1.8i 2.4i 3i 3.6i 4.2i -.. -.de LE -.ft P -.DE -.KE -.. -.de Ls -.nr PS -2 -.nr VS -3 -.sp -.LS -.. -.de Le -.LE -.nr PS +2 -.nr VS +3 -.LP -.. -.TL -Font server implementation overview -.AU -Dave Lemke -.AI -Network Computing Devices, Inc. -Copyright \(co 1991 Network Computing Devices, Inc. -.NH -Introduction -.PP -The font server uses the same client/server model as X. The basic structure -is that of the X Consortium X11R5 X server, and those -who know that code should find the -.I os -and -.I difs -(device independent font server) layers familiar. -.nf -.Ls - - +-----------------+ - +-----| difs |------+ - | +-----------------+ | - | | - +----+ +------------+ - | os | | renderers | - +----+ +------------+ -.Le -.fi -\fBDefinitions\fR -.Ip -Renderer. Code that knows how to take font data in its raw format and -convert it to the font server's format. -.Ip -Font Path Element (FPE). An instance of a renderer, associated with a -specific font source, (ie a directory of PCF bitmaps). -.PP -The -.I difs -layer interprets the requests, and handles the renderer -independent work. This includes error checking of requests, and the -top level font database. It also contains various utility functionality -such as caching and byte swapping. -.PP -The -.I os -layer sets up the communications channel, reads requests and -sends the raw data of replies and events. It also handles font server -configuration issues, controlled by command line arguments and -a configuration file. -.PP -The renderer layer contains all font-specific code, -and is responsible for rendering a font (which may mean -just reading a bitmap from disk, or may include scaling of outline -data), computing a fonts properties and header information. -.NH -Startup -.PP -At startup, the font server handles any command line arguments, -initializes any OS-specific data, and then sets up the communications. -Various internal databases are then initialized (extensions, the font -catalogue, etc). -.PP -The config file, an ordered list of font sources, cache size hints, -default resolutions, and security information, is then read in. Each -of these source names could be a directory name, the name of another -font server, or some other string that a particular renderer can -recognize. -.PP -The default font catalogue is then built up by taking each of the font -source names and comparing it with the names a renderer recognizes. -The one that matches this name will become attached to this -source. A renderer will ``understand'' a name if it can parse the data -in that directory, or recognize that it is a valid font server address, -or recognizes a special string. Thus a collection of valid font path -elements is built up. Each -.B FPE -has a set of functions to support opening a font and accessing its -data. -.PP -Font information is accessed via method functions in the -.B Font. -When a font is -first loaded, the header information and properties are -loaded/computed. The font also initializes its function pointers to do -the proper work. When specific metrics or bitmaps are required, they -are access via the font's functions. A disk-based bitmap font will -probably want to load all data when first accessed. A scaled font or -FS font may want to do more selective caching. In both cases, the -renderer can use the utility functions to keep track of this data. -Changing values of bitmap formats could result in the font having -multiple copies of data in different formats, which the renderer may -use the utility functions to manage. -.NH -Per client processing -.PP -Each entity attaching to the server is a client. Each client has -its own authorization and resolution information, and its own view -of the font database. A font open to one client may not be open to -another, though the font server may have it loaded. -.PP -After initialization, new clients can attach to the font server and -have their requests processed. For each request that is searching for -a font -.B (OpenBitmapFont) -or listing font names -.B (ListFonts, -.B ListFontsWithXInfo), -the pattern is given to each -.B FPE. -.PP -.B OpenBitmapFont -will take the supplied name and pass it to each -.B FPE. -The -.B FPE -will return one of three things: -.I Success, -and the font object; -.I BadFont, -because it doesn't know the font; or -.I BadFont -and an alias -name, when it has an alias for the font. If -.I Success -is returned, the -server goes on to create an ID (or find an existing one) and return a -reply. If -.I BadFont -is returned, it goes on to the next -.B FPE. -If it -reaches the end without finding a font, an error is returned to the -client. If an alias is returned, the search resets to the first -.B FPE -and starts again, using the alias as the new font name. This allows -aliases to work across different -.B FPEs, -without any ordering -restrictions. -.PP -When each -.B FPE -receives a font name to open, it searches for the font's -existence. If it can't find, or can only find an alias, it returns -.I BadFont -and any alias. If it finds the font, it checks the -authorization and license status of the font to that of the client. If -it passes, it then creates a new font object, and reads and/or computes -at least the font's header information and properties. (It may also -want to produce the bitmaps and extents, but that choice is left to the -renderer.) -.PP -When a font's information is accessed, the interpreter routine looks up -the font ID to find the font object, and then uses the font's access -functions to get the data. These functions will return the data in -the format expected by the client. - -.NH -Client shutdown -.PP -When a client disconnects, all its references to any fonts it -still has opened are removed. If no other clients reference these fonts, they -may be freed, though the server may choose to cache them. - -.NH -Server reset and cleanup -.PP -A server may be reset to flush the caches, re-read the configuration file, -and a new list of -.B FPEs -to be built, via an OS-specific outside -action. In UNIX, this will be handled via signals; in VMS it could be -handled via an async trap or event flag. - -.NH -Server offloading -.PP -In order to deal with numerous clients without major performance -degradation, the server must be able to clone itself, or provide the -client with a substitute server via the alternate server mechanism. -Since both strategies have their uses, both will be supported. For a -server that has plenty of host memory or CPU, but insufficient sockets, -cloning may be a good choice. For a host with limited memory, -assigning an alternate server on a different host may be a good -choice. The server will make this decision based on configuration -options. - -.NH -Font server data structures -.LP -.IP -The -.B Client -handles per-client information and interpreter status. -.Ls -typedef struct _Client { - int index; - pointer osPrivate; - int noClientException; - int (**requestVector) (); - pointer requestBuffer; - int clientGone; - int sequence; - Bool swapped; - long last_request_time; - void (*pSwapReplyFunc) (); - AuthContextPtr auth; - char *catalogues; - int num_catalogues; - Mask eventmask; - fsResolution *resolutions; - int num_resolutions; -} ClientRec, *ClientPtr; -.Le -.IP -The -.B Font -contains basic font information, including header information and properties. -.Ls -typedef struct _font { - int refcount; - fsHeader header; - fsBitmapFormat format; - int (*get_glyphs)(); - int (*get_metrics)(); - int (*get_extents)(); - int (*get_bitmaps)(); - int (*unload_font)(); - FontPathElementPtr fpe; - int *client_ids; - Bool restricted_font; -} FontRec *FontPtr; -.Le -.IP -The -.B ClientFont -is a wrapper on top of -.B Font, -handling client specific font information. -.Ls -typedef struct _clientfont { - FontPtr font; - int clientindex; -} ClientFontRec, *ClientFontRec; -.Le -.IP -The -.B AuthContext -contains authorization information. -.IP -.Ls -typedef struct _authcontext { - char *authname; - char *authdata; - FSID acid; -} AuthContextRec *AuthContextPtr; -.Le - -.NH -Font Path Element functions -.PP -These functions are associated with each renderer, and handle -all aspects of font access. Font data access is controlled via -another set of functions described later. These functions are -intended to support the R5 X server as well as the font server. -As a result, some design decisions were made to support both -models. When the -.I difs -layer needs to access a font, it uses these functions. -.IP -.Ls -typedef unsigned long Mask; -.sp -typedef unsigned char *pointer; -.sp -typedef struct _FontPathElement { - int name_length; - char *name; - int type; - int refcount; - pointer private; -} FontPathElementRec, *FontPathElementPtr; -.Le -.PP -The FPE's reference count is incremented when it is added to the -current list of FPEs and when it opens a font. It is decremented -when it is no longer in the current list and when it closes a font. -All reference changes are handled by the -.I difs -layer. The count is required to support font catalogue changes -that may occur while the fontserver has fonts open, and keeps FPEs -from being lost. -.IP -.Ls -.sp -typedef struct FontNames { - int nnames; - int size; - int *length; - char **names; -} FontNamesRec, *FontNamesPtr; -.sp -typedef struct { - Bool (*name_check)(); - int (*init_fpe)(); - int (*reset_fpe)(); - int (*free_fpe)(); - int (*open_font)(); - int (*close_font)(); - int (*list_fonts)(); - int (*start_list_fonts_with_info)(); - int (*list_next_font_with_info)(); - int (*wakeup_fpe)(); - int (*client_died); - FontNamesPtr renderer_names; -} FPEFunctions; -.sp -int init_fpe_type(Bool (name_func)(), - int (init_func)(), int (free_func)(), int (reset_func), - int (open_func)(), int (close_func)(), - int (list_func)(), - int (start_lfwi_func)(), int (next_lfwi_func)(), - int (wakeup_func)(), - int (client_died_func)() - ) -.Le -.sp -.LP -This is called by the renderer when it is initialized at the beginning -of time, and sets up -an FPEFunctions entry for the renderer. -.LP -The -.B FPEFunctions -have the following parameters: -.IP -.Ls -Bool name_check(char *name); -.Le -.LP -If -.I name -is something the renderer recognizes as a valid font -source name, it return True, otherwise False. ie, if -.I name -is a directory name, or is prefixed by the renderer's prefix, and the -directory contains font data the renderer can interpret, it would return -True. -.IP -.Ls -int init_fpe(FontPathElementPtr fpe); -.Le -.LP -Does any initialization work for the renderer. The name in -.I fpe -will be one whose prefix matches the list returned when the renderer -was initialized. -.IP -.Ls -int reset_fpe(FontPathElementPtr fpe); -.Le -.LP -Tells -.I fpe -to reset any internal state about what fonts it has available. -This will typically be called because the font server's -.B FPE -search list has been changed. The -.I fpe -should reset any cached state of available fonts (ie, re-read -.I fonts.dir) when this function is called. -.IP -.Ls -int free_fpe(FontPathElementPtr fpe); -.Le -.LP -Frees any renderer-specific data and closes any files or sockets. -.IP -.Ls -int open_font(pointer client, FontPathElementPtr fpe, Mask flags, - char *fontname, int namelength, - fsBitmapFormat format_hint, fsBitmapFormatMask format_mask, - XID fontid, FontPtr *ppfont, char **alias); -.Le -.LP -Opens the font. -The bits marked by -.I format_mask in the -.I format_hint -are used where applicable. -The resulting FontPtr is returned in -.I ppfont. -The -.I client -is optional state -information for use with blocking renderers. If the -.I fontname - resolves to an alias, it is returned in -.I alias -with a -.I FontNameAlias -error. This tells the -calling code to start searching again, using -.I alias -as the font name. -The renderer is expected to fill in any information -specified by the -.I flags. -.IP -Possible flags values are: -.Ls -#define FontLoadInfo 0x0001 /* font header info */ -#define FontLoadProps 0x0002 /* font properties */ -#define FontLoadMetrics 0x0004 /* font extents */ -#define FontLoadBitmaps 0x0008 /* glyph bitmaps */ -#define FontLoadAll 0x000f -#define FontOpenSync 0x0010 /* force synchronous loading */ -.Le -.LP -Once a font has been opened, the server may place it and the pattern -it matched into a name cache, to avoid lengthy searching if the font -is reopened. If the renderer does not wish the font to be in this -cache (for licensing reasons), it should set the font's -.I restricted_access -flag. -.IP -.Ls -int close_font(FontPtr pfont); -.Le -.LP -Frees up all the data associated with the font. -.IP -.Ls -int list_fonts(pointer client, FontPathElementPtr fpe, - char *pattern, int pattern_length, int maxnames, - FontNamesPtr *paths); -.Le -.LP -Returns in -.I paths -up to -.I maxnames -font names the fpe recognizes as matching the given pattern. -.IP -.Ls -int start_list_fonts_with_info(pointer client, - FontPathElementPtr fpe, char *pattern, int pattern_length, - int maxnames, pointer fpe_data); -.Le -.LP -Initiates a -.B ListFontsWithXInfo. -Typically, a disk-based renderer -will do the equivalent of ListFonts to gather all the font names -matching the pattern. A font server renderer will send the request. -.I fpe_data -provides a handle for any FPE-private data that needs -to be passed in later via -.B list_next_font_with_info(), -eg, the list of font names for a disk-based renderer. -.IP -.Ls -int list_next_font_with_info(pointer client, FontPathElementPtr fpe, - char **name, int *namelen, FontInfoPtr &pinfo, - int &num_fonts, pointer fpe_data); -.Le -.LP -Returns the next font's information. The renderer should keep any state -it requires in the -.I fpe_data -field. -.I num_fonts -contains the number -of replies remaining. -.LP -These two routines are split for because of the way both disk-based -renderers and font server renderers handle this request. -The first function initiates the action, the second is used to gather -the results. For a -disk-based renderer, a list of font names matching the pattern is first -built up when -.B start_list_fonts_with_info() -is called, and the results are gathered with each call to -.B list_next_font_with_info. -In a font server renderer, the first function sends the -.B ListFontsWithXInfo -request, and -the second processes the replies. -.IP -.Ls -int wakeup_fpe(FontPathElementPtr fpe, unsigned long *mask) -.Le -.LP -Optional function which can be used for blocking renderers. Typical -usage is for a font server renderer, where it is called when a reply is -received, allowing the data to be read and the client to be signaled -and unblocked. -.IP -.Ls -int client_died(pointer client, FontPathElementPtr fpe) -.Le -.LP -This function is called when a client dies in the middle of a blocked -request, allowing the renderer to clean up. - -.NH -Font specific functions -.LP -These functions are contained in each -.B Font. -For many renderers, every font will -use the same functions, but some renderers may wish to use different interfaces -for different fonts. -.IP -.Ls -typedef struct { - INT16 left B16, - right B16; - INT16 width B16; - INT16 ascent B16, - descent B16; - CARD16 attributes B16; -} fsCharInfo; - -typedef struct { - CARD8 low, - high; -} fsChar2b; - -typedef struct { - fsChar2b min_char, - max_char; -} fsRange; - -int get_extents(pointer client, - FontPtr pfont, Mask flags, int num_ranges, fsRange *ranges, - int *num_extents, fsCharInfo **extents); -.Le -.LP -Possible flags: -.IP -.Ls -LoadAll /* ignore the ranges and get everything */ -FinishRange /* magic for range completion as specified by protocol */ -.Le -.LP -Builds up the requested array of extents. The extent data (which -the renderer allocates) is returned, as well as the number of extents. -.I closure -contains any blocking state information. -.IP -.Ls -int get_bitmaps(pointer client, - FontPtr pfont, fsBitmapFormat format, Mask flags, - int num_ranges, fsRange *ranges, - unsigned long *size, unsigned long *num_glyphs, - unsigned long **offsets, pointer *glyph_data); -.Le -.LP -Possible flags: -.IP -.Ls -LoadAll -FinishRange /* magic for range completion as specified by protocol */ -.Le -.LP -Builds up the requested array of bitmaps. The glyph and offset data -(which the renderer allocates) is returned, as well as the number of -glyphs. The -.I closure -contains any blocking state information. This function will build up the -bitmap data in the format specified by -.I format -so that the interpreter can return it without any additional -modification. This should minimize data massaging, since outline -renderers will hopefully be able to produce the bitmaps in the proper -format. -.IP -.Ls -void unload_font(FontPtr pfont) -.Le -.LP -The render will free any allocated data. Note that the -.B FPE -function -.B close_font() -will also be called, and should handle any -.B FPE -data allocated for the font. -.IP -.Ls -int get_glyphs() -int get_metrics() -.Le -.LP -These two functions are used by the X server for loading glyphs and -metrics. They expect the results in a considerably different -form. The -.I get_bitmaps() -and -.I get_extents() -routines both allow for better cache control by the renderer. - -.NH -Font directories and aliases -.PP -Existing bitmap renderers already have their own concept of font -organization. In the X sample server, the files -.B fonts.dir -and -.B fonts.alias -are used to list the known fonts. -.B fonts.dir -maps file names to font names, while -.B fonts.alias -maps font names to other font names. -.PP -These concepts will also be needed by other forms of fonts -which the sample X server does not currently use, but the font server -will, like Bitstream outlines. - -.NH -Handling scalable fonts -.PP -For those renderers that support scalable fonts, several issues -must be addressed: -.br -.Ip -Name Parsing. An XLFD name must be parsed to determine the requested -resolutions and/or sizes. -.Ip -Property scaling. Many of the standard font properties have values -that depend on scaling (eg, -.I RESOLUTION_X. -.I POINT_SIZE) -.Ip -Default values. If resolution information is wildcarded, the proper -default resolution should be supplied. -.LP -Name Parsing -.PP -The font name pattern supplied to -.B OpenBitmapFont -or -.B ListFonts -may require some parsing to be recognized as a scalable font known -to the renderer. The -.B PIXEL_SIZE, -.B POINT_SIZE, -.B RESOLUTION_X, -.B RESOLUTION_Y -and -.B AVERAGE_WIDTH -all need to determined from the font name pattern. The master font -must then be found, and scaled appropriately. Any unspecified values -that cannot be determined should be replaced by the proper defaults. -For size fields, this is whatever the configuration specifies. For -resolution fields, these should be taken from the client's resolution -list, if set, or from the server's configuration. -.LP -Property scaling -.PP -Part of scaling a font is scaling its properties. Many scalable fonts -will have a very large number of scalable properties. One way -to deal with these is for the ``master'' outline to keep track of the -property names, and supply new values for each instance of the font. -If the property names are stored as Atoms, memory usage is kept to -a minimum. -.LP -Using defaults -.PP -Using default values as substitutions for missing values was covered above. -These defaults will also be useful in handling -.B ListFonts -requests. Returning a scalable font with an instance using the -default values will provide the most user-friendly environment. - -.NH -Access control -.PP -The font server will also support large grain security. It will have -both a limit of the number of users, and on the hosts which it will -support. -.PP -Limiting the number of users is as much a server loading issue as -a security issue. The limitation will be typically be set via -configuration options or OS limitations. To change it, use: -.IP -.Ls -void AccessSetConnectionLimit(int limit) -.Le -.LP -A -.I limit -of 0 will set it to a compiled constant based on OS resources -(eg, number of file descriptors). -.PP -Client-host based access control can be used to supplement licensing, -and support font server load balancing by restricting access. -As with licensing, this is OS-specific code. -To manipulate these functions, use: -.IP -.Ls -typedef struct _host_address { - int type; - pointer address; - struct _host_address *next; -} HostAddress; -.sp -typedef HostAddress *HostList; -.sp -int AddHost(HostList list, HostAddress *address) -int RemoveHost(HostList list, HostAddress *address) -Bool ValidHost(HostList list, HostAddress *address) -.Le -.LP -.B AddHost() -adds a host to the -.I list. -.B RemoveHost() -removes it, and -.B ValidHost() -checks to see if its on the -.I list. -In all functions, the -.I address -has will ignore any value in the -.I next -field. -.PP -Network addresses are used here to avoid issues with host name aliases. -The caller fills in the desired type, and an address of that form is -returned. This is highly OS-specific, but values for the -.I type -and -.I address -fields could include: -.IP -.Ls -#define HOST_AF_INET 1 -struct in_addr *address; -.sp -#define HOST_AF_DECnet 2 -struct dn_addr *address; -.Le -.LP -The server will use a global host list, but having the list -as an argument will allow licensing schemes to have their -own host lists. - -.NH -Licensing -.PP -Licensing is a tricky issue, which each renderer will support in a -different way. The sample font server will attempt to provide some -guidelines, and present a possible implementation of some simple -licensing schemes. -.LP -\fBHost Address licensing\fR -.LP -This is simplistic licensing based on the client's host. With -this form of licensing, a font may be accessible to some host but not -others. To get the current client's host, the following is used: -.IP -.Ls -void GetHostAddress(HostAddress *address); -.Le -.LP -A renderer can also use the host access functions to keep a list -of the licensed hosts, and -.B ValidHost() -to check a client. -.LP -\fBSimultaneous use license\fR -.PP -This licensing allows for a limited number of copies of the font to -be open at once. Since this should be a simple per-font counter, -no support should be required outside of the renderer. - -.NH -DIFS contents -.PP -This contains the protocol dispatcher, interpreter and reply encoding -routines. -.PP -The interpreter is table driven off the request code. The dispatcher -gets a request from the os layer from -.B WaitForSomething(), -and uses -the request code to determine which function to call. eg, a -.I CloseFont -request would call -.B ProcCloseFont(). -.PP -Each request's routine handles any applicable error checking, and then -does as much work as it can. For font related requests, this means -converting the request to the proper arguments for the renderers. -.PP -If any replies are generated, the reply data is gathered into the -bytestream format, and sent via -.I os -write functions to the client. -.PP -If the byte order of the client and server differ, the above is -modified by having the dispatcher call an intermediate function which -re-orders the request to the proper byte order. Replies go through -similar swapping. -.LP -\fBClient blocking\fR -.PP -To minimize delay caused by font server request, clients can -be blocked while they wait for data to be produced. This is primarily -intended for -.B FPEs -using a remote font server, -but can be used anywhere where the font server can pause to handle -other client requests while data needed to satisfy another is produced -(possibly via multiple processes). -.IP -.Ls -Bool ClientSleep(ClientPtr client, Bool (*function)(), pointer closure) -.Le -.LP -Puts a client to 'sleep'. This means the client will no longer be -considered while the server is dispatching requests. -.I function -will be called when the client is signaled, with the -.I client -and -.I closure -as its arguments. -.Ls -Bool ClientSignal(ClientPtr client) -.Le -.LP -This should be called when the client is ready to do more work. -At this point, the function given to -.B ClientSleep() -will be called. -.Ls -void ClientWakeup(ClientPtr client) -.Le -.LP -Puts the client back to its normal state processing requests. -.Ls -Bool ClientIsAsleep(ClientPtr client) -.Le -.LP -Can be used to check if a client is asleep. This is useful for handling -client termination, so that any requests the client is waiting upon can be -properply cleaned up. -.LP -\fBSample Usage\fR -.PP -For handling a font server renderer request for -.B OpenBitmapFont -the renderer will send the request to the remote font server, and -the call -.B ClientSleep(). -The font server will then continue processing requests from other clients, -while the one making the request is blocked. -When the reply returns, the renderer will notice when its -.B wakeup_fpe() -function is called. At this point the font server renderer will -read and process the reply. -.B ClientSignal() -will be called, and the -.I closure -function will be called. It will request the data from the renderer, -completing the request, and call -.B ClientWakeup() -to return the client to normal status. -.sp -.PP -This layer also contains the resource database, which associates fonts -with IDs, extension interface functions and the server initialization -and reset control. -.NH -OS contents -.PP -This layer contains OS specific routines for configuration, command -line parsing, client/server communications, and various OS-dependent -utilities such as memory management and error handling. -.PP -.B ReadRequestFromClient() -returns a full request to the dispatcher. -.B WaitForSomething() -is where the server spends its idle time, waiting -for any action from a client or processing any work left from a blocked -client. -.PP -When a client attempts to connect, the server will call -.IP -.Ls -int CheckClientAuthorization(ClientPtr client, AuthPtr client_auth, - int *accept, int *index, int *size, char **authdata) -.Le -.LP -to see if the server is set to allow the client to connect. It may -use licensing or configuration information to determine if the client -can connect. -.PP -When then connection is established, the server will use the -.IP -.Ls -typedef struct _alt_server { - char subset; - char namelen; - char *name; -} AlternateServerRec, *AlternateServerPtr; -.sp -int ListAlternateServers(AlternateServerPtr *servers) -.Le -.LP -to return any alternate server information it may have. -.LP -When the client limit is reached, the font server may attempt to -copy itself, by calling -.IP -.Ls -int CloneMyself() -.Le -.LP -This function will (if the configuartion options allow) start a new -font server process. This is done in such a way that no pending -connections should be lost, and that the original server will accept -no new connections. Once the original server has no more clients, it will -exit. - -Catalogue manipulation -.PP -Catalogues are configuration dependent, and hence sent by OS-dependent -methods. In order for the -.I difs -layer to get them, it uses -.IP -.Ls -int ListCatalogues(char *pattern, int pattern_length, - int maxnames, char **catalogues, int *len) -.Le -.LP -which returns the list of all catalogues it supports which match the pattern. -This function -will be used by the catalogue manipulation requests, as well as by renderers -when they give their -.B ListFonts -results. -.LP -.Ls -int ValidateCatalogues(int number, char *catalogues) -.Le -.LP -Can be used to validate a list of catalogues, returning True if the -list is acceptable. - -.NH -Utility functions -.LP -Client data functions -.PP -These provide access to the current client's resolution and -authorization data. This form of interface is supplied rather than -passing it to all renderers in the -.B FPE -functions because the data may -be complex and/or uninteresting to all renderers. -.IP -.Ls -AuthContextPtr GetClientAuthorization() -.Le -.LP -Returns the authorization data for the current client. -.IP -.Ls -fsResolution *GetClientResolutions(int *num_resolutions) -.Le -.LP -Returns the list of resolutions that the current client has set. -.sp 2 -.LP -\fBCaching functions\fR -.PP -These are functions that simplify caching of renderer data. These are -for use by -renderers that take significant resources to produce data. The data -must be re-creatable -- the cache is not meant for general storage. -The data may also be moved by the cache, so it should only be accessed -by CacheID. -.IP -.Ls -typedef void (*CacheFree)(); -typedef unsigned long CacheID; -typedef unsigned long Cache; -.sp 2 -Cache CacheInit(int renderer_id) -.Le -.LP -Initializes a cache object for the renderer. the returned ID should be -passed to -.B CacheStoreMemory() -when adding an object to the cache. -.IP -.Ls -void CacheStats(Cache cid, unsigned long *num_entries, - unsigned long *max_storage, unsigned long *current_storage, - unsigned long *num_lookups, unsigned long *hit_ratio) -.Le -.LP -Returns statistics on the cache. Useful if the renderer wants some -hints about whether to place an object in the cache. If the cache is -nearly full, and the priority low, it may want to take different -action. -.IP -.Ls -CacheID CacheStoreMemory(Cache cacheid, pointer data, unsigned long size, - CacheFree free_func) -.Le -.LP -The renderer hands the cache some chunk of contiguous memory, which the -cache timestamps and stores. When it needs to remove them, it calls -the -.I free_func, -which must take responsibility for properly freeing the data. -.I size -is primarily a hint to the cache, so that cache limits can be properly -calculated. A return value of zero means the store failed, probably -because the given size was over the cache limit. If the given data is -too large for the current cache, it will attempt to free old data to -make room. The returned ID is a unique value that refers both to the -object and the cache in which it was placed. -.IP -.Ls -pointer CacheFetchMemory(CacheID cid, Bool update) -.Le -.LP -Returns the memory attached to the id. If -.I update -is set, the timestamp is updated. (some accesses may wish to be 'silent', -which allows some control over the freeing scheduling.) If the cid is invalid, -.I NULL -is returned. -.IP -.Ls -int CacheFreeMemory(CacheID cid, Bool notify) -.Le -.LP -Allows the cache to flush the data. If -.I notify -is set, the CacheFree -function passed in when the data was cached will also be called. -.IP -.Ls -void MemoryFreed(CacheID cid, pointer data, int reason) -.Le -.LP -Callback function from the cache to the renderer notifying it that its -data has been flushed. This function then has the responsibility to -free that data. -.I reason -may be one of: -.IP -.Ls -CacheReset /* all cache freed because of server reset */ -CacheEntryFreed /* explicit request via free_memory() */ -CacheEntryOld /* cache hit limit, and memory being freed because its old */ -.Le -.LP -and is supplied so that the renderer may choose how to deal with the -free request. (It will probably be ignored by most, but some may want to -keep the memory around by bypassing the cache, or re-inserting it.) -Note that the cache will consider the data gone, so it -.B must -be re-inserted to keep it alive. -.IP -.Ls -void CacheSimpleFree(CacheID cid, pointer data, int reason) -.Le -.LP -Just calls -.B free() -on the data. Simple CacheFree defined here to -prevent it being redefined in each renderer. -.PP -Typical usage of the cache is for the renderer to store a CacheID -rather than a pointer to the cacheable data. The renderer is -responsible for both allocating and freeing the data, as well as -keeping track of just what it is. When the renderer needs the cached -data, it will request it from the cache. If it fails, it must rebuild -it. -.PP -A possible configuration parameter is the size of the cache. when the -cache is filled (with the calculation based on the given size), it -sweeps the cache and frees old data. The amount of memory actually -freed may wish to be tunable: some systems may want to keep the cache -as full as possible, others may want to free some percentage such that -sweeps occur less frequently. -.PP -Cache statistics may want to be available for administrators. They -could be dumped to a file when a signal is received. (SNMP seems like -a perfect match, but apparently the technology isn't there yet. -.PP -Cached data could also be compressed, if the memory/CPU tradeoffs -make it worthwhile. -.PP -ISSUE: Is a time-based freeing schedule sufficient? Should priorities -or size also be taken into account? [ No. Anything that the renderer -thinks should have a higher priority should probably not be placed into -the cache. ] -.sp 2 -.LP -\fBByte swapping\fR -.LP -Functions for swapping a 4-byte quantity, a 2-byte quantity and inverting -a byte. -.IP -.Ls -void BitOrderInvert(pointer buffer, unsigned long num_bytes) -void TwoByteSwap(pointer buffer, unsigned long num_shorts) -void FourByteSwap(pointer buffer, unsigned long num_longs) -.Le -.LP -\fBBitmap padding\fR -.LP -Functions taking a desired extents and a bitmap that will return the -bitmap properly padded. -.Ls -int RepadBitmap(pointer src, pointer dst, fsFormat src_format, - fsFormat dst_format, int width, int height) -.Le -.LP -Takes a bitmap in -.I src_format -and converts it to one in -.I dst_format. -.LP -\fBAtoms\fR -.PP -Existing bitmap-based renderers use atoms to store strings for property -information. Rather than duplicate this code in each renderer, it -lives in the -.I util -directory. -.PP -Atoms will be especially useful for property information, to prevent -many copies of the same strings from being saved. Using atoms for -comparison when modifying properties after scaling is also more -efficient. Since -.I atoms -will will exist until the server is reset, they may want to be used -sparingly for property values to avoid extraneous string data. -.IP -.Ls -typedef unsigned long Atom; -.sp -Atom MakeAtom(char *string, unsigned int length, Bool create) -.Le -.LP -Returns the atom associated with -.I string. -If -.I create -is true, a new atom will be created. -.IP -.Ls -char *NameForAtom(Atom atom) -.Le -.LP -Returns the string associated with -.I atom. - -.NH -Server request details -.PP -This section describes in-depth the action of each protocol request. -In all cases, the request is first error checked for simple length -or value errors, with the server -immediately returning an error if one is encountered. -.NH 2 -Connection -.PP -When a new client attempts to connect, the server first checks -its initial authorization information to see if the server is willing -to talk to it. This will be handled in some OS-specific form -using -.B CheckClientAuthorization(). -If it passes -this test, and the server has sufficient to resources to talk to it, the -server sends accepts the connection and returns its connection block. -If the connection fails, the server returns the proper status and -a list of any alternate servers it may know of (gathered from -.B ListAlternateServers().) -.NH 2 -ListExtension -.PP -Returns the list of extensions the server knows about. -Any extensions will be initialized when the server is first started. -.NH 2 -QueryExtension -.PP -Returns the information about the requested extension, which was set -when the extension was initialized. -.NH 2 -ListCatalogues -.PP -Returns the catalogues the server recognizes (the results of -.B ListCatalogues().) -.NH 2 -SetCatalogues -.PP -Sets the requesting client's catalogues after verifying them with the -supported catalogues. -.NH 2 -GetCatalogues -.PP -Returns the requesting client's catalogues. -.NH 2 -CreateAC -.PP -Creates a new authorization context and fills it in. The list of -authorization protocols is then checked by the server with -.B CheckClientAuthorization(). -If any are accepted, -the -.B AC -is placed in the resource database and -.I Success -is returned with the name of the accepted protocol. If more than one is -accepted, -.I Continue -is returned with each of the accepted protocols, until the last one -which has status -.I Success -Otherwise -.I Denied -is returned. -.NH 2 -FreeAC -.PP -Looks up the -.B AC -in the resource database, and frees it if it finds it. Otherwise an -.I Access -error is returned. -.NH 2 -SetAuthorization -.PP -Looks up the -.B AC -in the resource database, and set the client's AuthContextPtr -to its value if it is found. Otherwise it sends an -.I Access -error. -.NH 2 -SetResolution -.PP -Sets the requesting client's resolution list to the supplied list. -.NH 2 -GetResolution -.PP -Returns the requesting client's list of resolutions. -.NH 2 -ListFonts -.PP -Iterates over each open FPE, calling the FPE's -.B list_fonts() -routine passing it the pattern. -When all FPE's have been processed, the list that has been built up -is returned. Note that the same -.B FontNamesPtr -is sent to each FPE in turn, so that one list is built up. -An FPE may restrict the fonts it returns based on the client's -catalogue. -.NH 2 -ListFontsWithXInfo -.PP -Iterates over each FPE, calling its -.B start_list_fonts_with_info() -function to prime the FPE's renderer. It then calls the FPE's -.B list_next_font_with_info(), -sending each font's data to the client until no more fonts remain. -When all FPEs have been processed, the final reply with a zero-length -name is then sent to mark the end of the replies. -An FPE may restrict the fonts it returns based -on the client's catalogue. -Note: an issue -exists with font aliases which may require this to change, since an FPE -may contain an alias pointing to another FPE, and cannot therefore -return the font's info. -.NH 2 -OpenBitmapFont -.PP -The pattern is first searched for in the font server's name cache. -If it doesn't find it, the server iterates over each FPE, calling its -.B open_font -function with the supplied pattern. This will return one of the following -values: -.Ip -an -.B Access -error, which means the renderer has the font but the client does not -have access to it because of some form of licensing restriction -.Ip -a -.B Font -error and a NULL -.I alias -parameter, which will cause the next FPE to be tried -.Ip -a -.B Font -error but a non-NULL -.I alias, -which will cause the search to start over with the first FPE using -.I alias -as the new font pattern -.Ip -.B Success, -in which case a valid font has been found. -.PP -If the end of the FPE list is reached without having found the font, -an error is returned to the client. If an -.B Access -error was encountered, it is returned, otherwise a -.B Font -error is returned. -If a valid font is found, its reference count will be incremented and -it will be checked to see if the client has -already opened it before. If so, the previous ID will be returned. -Otherwise the font will be placed in the resource database. -.PP -The renderer will fill in the font's header and property information, -and may also choose to load or create the font's metrics or glyphs. -If the glyphs are built, they will use any supplied \fIformat hint\fR. -.PP -Whenever a new font is successfuly opened, the font and its name pattern -will be placed in a name cache. This cache exists to minimize the amount -of work spent searching for a font. It will be flushed when the -font catalogue is modified. Client's with private font catalogues -will require private name caches. -.NH 2 -QueryXInfo -.PP -The -.I fontid -is looked up in the resource database, and the font's header and -property info is returned. -.NH 2 -QueryXExtents8 QueryXExtents16 -.PP -The -.I fontid -is looked up in the resource database. The supplied list of -characters (interpreted according to request type) is then translated -into a list of ranges. The font's -.B get_extents() -function is then called. It builds the requested list of extents, -and returns them along with the number of extents. -The results are properly swapped and sent to the client. -.NH 2 -QueryXBitmaps8 QueryXBitmaps16 -.PP -The -.I fontid -is looked up in the resource database. The supplied list of -characters (interpreted according to request type) is then translated -into a list of ranges. The font's -.B get_bitmaps() -function is called, and the renderer will build up the requested -bitmaps, using the specified -.I format, -and returns the bitmaps, the number of glyphs and the offsets. -The offsets are properly swapped and the offsets and bitmaps are -sent to the clients. -.NH 2 -CloseFont -.PP -The font's reference count is decremented. If this was the last reference, -the font's -.B unload_font() -function is called to free the renderer's data, and the font's -FPE -.B close_font() -function is called to free up any FPE specific data. - -.NH -Configuration -.PP -The configuration mechanism is a simple keyword-value pair, separated -by an '='. -.LP -Configuration types: -.ta .6i 2.1i -.nf -.sp - cardinal non-negative number -.sp - boolean "[Yy]es", "[Yy]" "on", "1", "[Nn]o", "[Nn]", "off", "0" -.sp - resolution \fIcardinal,cardinal\fR -.sp - list of foo 1 or more of foo, separated by commas -.sp -.fi -.LP -Here is an incomplete list of the supported keywords: -.sp -.ta .6i 1.5i -.nf -# in the first column, a comment character -.\".sp -.\"cache-size (cardinal) -.\" Size in bytes of the FS cache. -.sp -catalogue (list of string) - Ordered list of font path element names. -.sp -alternate-servers (list of string) - List of alternate servers for this FS. -.sp -client-limit (cardinal) - Number of clients this FS will support before refusing - service. -.sp -clone-self (boolean) - Whether this FS should attempt to clone itself or - use delegates when it reachs the client-limit. -.sp -default-point-size (cardinal) - The default pointsize (in decipoints) for fonts that - don't specify. -.sp -default-resolutions (list of resolutions) - Resolutions the server supports by default. - This information may be used as a hint for pre-rendering. -.sp -error-file (string) - Filename of the error file. All warnings and errors - will be logged here. -.sp -port (cardinal) - The TCP port on which the server will listen for connections. -.sp -use-syslog (boolean) - Whether syslog(3) is to be used for errors. -.\".sp -.\"trusted-clients (list of string) -.\" Those clients the fontserver will talk to. Others -.\" will be refused for the initial connection. An empty -.\" list means the server will talk to any client. -.fi -.IP -Each renderer may also want private configuration options. The names -should be prefixed by the renderer name, ie -.I pcf-, -.I atm-. -.LP -Examples: -.sp -# allow a ~a megabyte of memory to be reserved for cache data -.br -cache-size = 1000000 -.sp -catalogue = pcf:/usr/lib/X11/fonts/misc,speedo:/usr/lib/fonts/speedo diff --git a/doc/xorg-docs/specs/xtrans/Xtrans.mm b/doc/xorg-docs/specs/xtrans/Xtrans.mm deleted file mode 100644 index 0d39e7d51..000000000 --- a/doc/xorg-docs/specs/xtrans/Xtrans.mm +++ /dev/null @@ -1,789 +0,0 @@ -.\" $XFree86: xc/doc/specs/xtrans/Xtrans.mm,v 1.2 2003/07/09 15:27:27 tsi Exp $ -'\".nr Ej 1 -.PH "'''" -.ce -\fBX Transport Interface\fR -.sp -Copyright (c) 1993, 1994 NCR Corporation - Dayton, Ohio, USA -.sp -All Rights Reserved -.sp -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, provided -that the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name NCR not be used in advertising -or publicity pertaining to distribution of the software without specific, -written prior permission. NCR makes no representations about the -suitability of this software for any purpose. It is provided "as is" -without express or implied warranty. -.sp -NCR DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN -NO EVENT SHALL NCR BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -.sp -Copyright 1993, 1994, 2002 The Open Group -.sp -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -.sp -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.sp -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -.sp -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. -.sp -X Window System is a trademark of The Open Group, Inc. -.sp -Designed by Stuart Anderson (NCR) with help from Ralph Mor (X Consortium) -.sp -.ce -\fIDraft Version 0.6\fR -.sp -NOTE: This documentation does not completely match the implementation in R6 -(as a result of some late changes made in the code). Specifically, support -was added for font server cloning, and conditional compliation was introduced -for client vs. server code. -.bp -.H 1 "Purposes and Goals" -.P -The X Transport Interface is intended to combine all system and transport -specific code into a single place in the source tree. This API should be used -by all libraries, clients and servers of the X Window System. Use of this API -should allow the addition of new types of transports and support for new -platforms without making any changes to the source except in the X Transport -Interface code. -.P -This interface should solve the problem of multiple #ifdef TRANSPORT and -#ifdef PLATFORM statements scattered throughout the source tree. -.P -This interface should provide enough functionality to support all types of -protocols, including connection oriented protocols such as X11 and FS, and -connection-less oriented protocols such as XDMCP. -.H 1 "Overview of the interface" -.P -The interface provides an API for use by applications. The functions in this -API perform work that is common to all transports and systems, such as -parsing an address into a host and port number. The functions in this API -call transport specific functions that are contained in a table whose -contents are defined at compile time. This table contains an entry for each -type of transport. Each entry is a record containing mostly pointers to -function that implements the interface for the given transport. -.P -This API does not provide an abstraction for select() or poll(). -These function are themselves transport independent, so an additional interface -is not needed for these functions. It is also unclear how such an interface -would affect performance. -.H 1 "Definition of Address Specification Format" -.P -Addresses are specified in the following syntax, -.sp -\fIprotocol/host:port\fR -.sp -where \fIprotocol\fR specifies a protocol family or an alias for a protocol -family. A definition of common protocol families is given in a later section. -.P -The \fIhost\fR part specifies the name of a host or other transport dependent -entity that could be interpreted as a Network Service Access Point (NSAP). -.P -The \fIport\fR part specifies the name of a Transport Service Access Point -(TSAP). The format of the TSAP is defined by the underlying transport -implementation, but it is represented using a string format when it is part -of an address. -.H 1 "Internal Data Structures" -.P -There are two major data structures associated with the transport independent -portion of this interface. Additional data structures may be used internally -by each transport. -.H 2 "Xtransport" -.P -Each transport supported has an entry in the transport table. -The transport table is an array of \fIXtransport\fR records. Each record -contains all the entry points for a single transport. This record is defined as: -.DS -.nf -typedef struct _Xtransport { - - char *TransName; - int flags; - - XtransConnInfo (*OpenCOTSClient)( - struct _Xtransport *, /* transport */ - char *, /* protocol */ - char *, /* host */ - char * /* port */ - ); - - XtransConnInfo (*OpenCOTSServer)( - struct _Xtransport *, /* transport */ - char *, /* protocol */ - char *, /* host */ - char * /* port */ - ); - - XtransConnInfo (*OpenCLTSClient)( - struct _Xtransport *, /* transport */ - char *, /* protocol */ - char *, /* host */ - char * /* port */ - ); - - XtransConnInfo (*OpenCLTSServer)( - struct _Xtransport *, /* transport */ - char *, /* protocol */ - char *, /* host */ - char * /* port */ - ); - - int (*SetOption)( - XtransConnInfo, /* connection */ - int, /* option */ - int /* arg */ - ); - - int (*CreateListener)( - XtransConnInfo, /* connection */ - char *, /* port */ - int /* flags */ - ); - - int (*ResetListener)( - XtransConnInfo /* connection */ - ); - - XtransConnInfo (*Accept)( - XtransConnInfo /* connection */ - ); - - int (*Connect)( - XtransConnInfo, /* connection */ - char *, /* host */ - char * /* port */ - ); - - int (*BytesReadable)( - XtransConnInfo, /* connection */ - BytesReadable_t * /* pend */ - ); - - int (*Read)( - XtransConnInfo, /* connection */ - char *, /* buf */ - int /* size */ - ); - - int (*Write)( - XtransConnInfo, /* connection */ - char *, /* buf */ - int /* size */ - ); - - int (*Readv)( - XtransConnInfo, /* connection */ - struct iovec *, /* buf */ - int /* size */ - ); - - int (*Writev)( - XtransConnInfo, /* connection */ - struct iovec *, /* buf */ - int /* size */ - ); - - int (*Disconnect)( - XtransConnInfo /* connection */ - ); - - int (*Close)( - XtransConnInfo /* connection */ - ); - -} Xtransport; - -.fi -.DE -.P -The \fIflags\fR field can contain an OR of the following masks: -.sp -\fITRANS_ALIAS\fR: indicates that this record is providing an alias, -and should not be used to create a listner. -.sp -\fITRANS_LOCAL\fR: indicates that this is a LOCALCONN transport. - -.H 2 "XtransConnInfo" -.P -Each connection will have an opaque \fIXtransConnInfo\fR transport connection -object allocated for it. This record contains information specific to the -connection. The record is defined -as: -.DS -.nf -typedef struct _XtransConnInfo *XtransConnInfo; - -struct _XtransConnInfo { - struct _Xtransport *transptr; - char *priv; - int flags; - int fd; - int family; - char *addr; - int addrlen; - char *peeraddr; - int peeraddrlen; -}; -.fi -.DE -.H 1 "Exposed Transport Independent API" -.P -This API is included in each library and server that uses it. The API -may be used by the library, but it is not added to the public API for that -library. This interface is simply an implementation -facilitator. This API contains a low level set of core primitives, and a few -utility functions that are built on top of the primitives. The utility -functions exist to provide a more familiar interface that can be used to -port existing code. -.P -A macro is defined in Xtrans.h for TRANS(func) that creates a unique function -name depending on where the code is compiled. For example, when built for Xlib, -TRANS(OpenCOTSClient) becomes _X11TransOpenCOTSClient. -.P -All failures are considered fatal, and the connection should be closed and -re-established if desired. In most cases, however, the value of errno will -be available for debugging purposes. -.H 2 "Core Interface API" -.BL -.LI -XtransConnInfo -TRANS(OpenCOTSClient)(char *address) -.P -This function creates a Connection-Oriented Transport that is suitable for -use by a client. -The parameter \fIaddress\fR contains the full address of the -server to which this endpoint will be connected. -This functions returns an opaque transport connection object on success, -or NULL on failure. -.LI -XtransConnInfo -TRANS(OpenCOTSServer)(char *address) -.P -This function creates a Connection-Oriented Transport that is suitable for -use by a server. -The parameter \fIaddress\fR contains the full address to which this -server will be bound. -This functions returns an opaque transport connection object on success, -or NULL on failure. -.LI -XtransConnInfo -TRANS(OpenCLTSClient)(char *address) -.P -This function creates a Connection-Less Transport that is suitable for -use by a client. -The parameter \fIaddress\fR contains the full address of the -server to which this endpoint will be connected. -This functions returns an opaque transport connection object on success, -or NULL on failure. -.LI -XtransConnInfo -TRANS(OpenCLTSServer)(char *address) -.P -This function creates a Connection-Less Transport that is suitable for -use by a server. -The parameter \fIaddress\fR contains the full address to which this -server will be bound. -This functions returns an opaque transport connection object on success, -or NULL on failure. -.LI -int TRANS(SetOption)(XtransConnInfo connection, int option, int arg) -.P -This function sets transport options, similar to the way setsockopt() and -ioctl() work. -The parameter \fIconnection\fR is an endpoint that was obtained from -_XTransOpen*() functions. -The parameter \fIoption\fR contains the option that will be set. The actual -values for \fIoption\fR are defined in a later section. -The parameter \fIarg\fR can be used to pass in an additional value that may -be required by some options. -This function return 0 on success and -1 on failure. -.P -Note: Based on current usage, the complimentary function TRANS(GetOption)() -is not necessary. -.LI -int TRANS(CreateListener)(XtransConnInfo connection, char *port, int flags) -.P -This function sets up the server endpoint for listening. -The parameter \fIconnection\fR is an endpoint that was obtained from -TRANS(OpenCOTSServer)() or TRANS(OpenCLTSServer)(). -The parameter \fIport\fR specifies the port to which this endpoint -should be bound for listening. -If \fIport\fR is NULL, then the transport may attempt to allocate any -available TSAP for this connection. If the transport cannot support this, -then this function will return a failure. -The \fIflags\fR parameter can be set to ADDR_IN_USE_ALLOWED to allow -the call to the underlying binding function to fail with a EADDRINUSE -error without causing the TRANS(CreateListener) function itself to -fail. -This function return 0 on success and -1 on failure. -.LI -int TRANS(ResetListener)(XtransConnInfo connection) -.P -When a server is restarted, certain listen ports may need to be reset. -For example, unix domain needs to check that the file used for communication -has not been deleted. If it has, it must be recreated. -The parameter \fIconnection\fR is an opened and bound endpoint that was -obtained from TRANS(OpenCOTSServer)() and passed to TRANS(CreateListener)(). -This function will return one of the following values: TRANS_RESET_NOOP, -TRANS_RESET_NEW_FD, or TRANS_RESET_FAILURE. -.LI -XtransConnInfo -TRANS(Accept)(XtransConnInfo connection) -.P -Once a connection indication is received, this function can be called to -accept the connection. -The parameter \fIconnection\fR is an opened and bound endpoint that was -obtained from TRANS(OpenCOTSServer)() and passed to TRANS(CreateListener)(). -This function will return a new opaque transport connection object upon -success, NULL otherwise. -.LI -int TRANS(Connect)(XtransConnInfo connection, char *address) -.P -This function creates a connection to a server. -The parameter \fIconnection\fR is an endpoint that was obtained from -TRANS(OpenCOTSClient)(). -The parameters \fIaddress\fR specify the TSAP to which this -endpoint should connect. If the protocol is included in the address, it will -be ignored. -This function return 0 on success and -1 on failure. -.LI -int TRANS(BytesReadable)(XtransConnInfo connection, BytesReadable_t *pend); -.P -This function provides the same functionality as the BytesReadable macro. -.LI -int TRANS(Read)(XtransConnInfo connection, char *buf, int size) -.P -This function will return the number of bytes requested on a COTS connection, -and will return the minimum of the number bytes requested or the size of -the incoming packet on a CLTS connection. -.LI -int TRANS(Write)(XtransConnInfo connection, char *buf, int size) -.P -This function will write the requested number of bytes on a COTS connection, and -will send a packet of the requested size on a CLTS connection. -.LI -int TRANS(Readv)(XtransConnInfo connection, struct iovec *buf, int size) -.P -Similar to TRANS(Read)(). -.LI -int TRANS(Writev)(XtransConnInfo connection, struct iovec *buf, int size) -.P -Similar to TRANS(Write)(). -.LI -int TRANS(Disconnect)(XtransConnInfo connection) -.P -This function is used when an orderly disconnect is desired. This function -breaks the connection on the transport. It is similar to the -socket function shutdown(). -.LI -int TRANS(Close)(XtransConnInfo connection) -.P -This function closes the transport, unbinds it, and frees all resources that -was associated with the transport. If a TRANS(Disconnect) call was not made -on the connection, a disorderly disconnect may occur. -.LI -int TRANS(IsLocal)(XtransConnInfo connection) -.P -Returns TRUE if it is a local transport. -.LI -int TRANS(GetMyAddr)(XtransConnInfo connection, -.br - int *familyp, int *addrlenp, Xtransaddr **addrp) -.P -This function is similar to getsockname(). This function will allocate space -for the address, so it must be freed by the caller. Not all transports will -have a valid address until a connection is established. This function should -not be used until the connection is established with Connect() or Accept(). -.LI -int TRANS(GetPeerAddr)(XtransConnInfo connection, -.br - int *familyp, int *addrlenp, Xtransaddr **addrp) -.P -This function is similar to getpeername(). This function will allocate space -for the address, so it must be freed by the caller. Not all transports will -have a valid address until a connection is established. This function should -not be used until the connection is established with Connect() or Accept(). -.LI -int TRANS(GetConnectionNumber)(XtransConnInfo connection) -.P -Returns the file descriptor associated with this transport. -.LI -int TRANS(MakeAllCOTSServerListeners)( -.br - char *port, int *partial_ret, int *count_ret, XtransConnInfo **connections_ret) -.P -This function should be used by most servers. It will try to establish a COTS -server endpoint for each transport listed in the transport table. -\fIpartial_ret\fR will be set to True if only a partial network could be -created. \fIcount_ret\fR is the number of transports returns, and -\fIconnections_ret\fR is the list of transports. -.LI -int TRANS(MakeAllCLTSServerListeners)( -.br - char *port, int *partial_ret, int *count_ret, XtransConnInfo **connections_ret) -.P -This function should be used by most servers. It will try to establish a CLTS -server endpoint for each transport listed in the transport table. -\fIpartial_ret\fR will be set to True if only a partial network could be -created. \fIcount_ret\fR is the number of transports returns, and -\fIconnections_ret\fR is the list of transports. -.LE -.H 2 "Utility API" -.P -This section describes a few useful functions that have been implemented on top -of the Core Interface API. These functions are being provided as a convenience. -.BL -.LI -int TRANS(ConvertAddress)(int *familyp, int *addrlenp, Xtransaddr *addrp) -.P -This function converts a sockaddr based address to an -X authorization based address (ie AF_INET, AF_UNIX to the -X protocol definition (ie FamilyInternet, FamilyLocal)). - -.LE -.H 1 "Transport Option Definition" -.P -The following options are defined for the TRANS(SetOption)() function. If an -OS or transport does not support any of these options, then it will silently -ignore the option. -.BL -.LI -TRANS_NONBLOCKING -.P -This option controls the blocking mode of the connection. If the argument -is set to 1, then the connection will be set to blocking. If the argument -is set to 0, then the connection will be set to non-blocking. -.LI -TRANS_CLOSEONEXEC -.P -This option determines what will happen to the connection when an exec -is encountered. If the argument is set to 1, then the connection will be -closed when an exec occurs. If the argument is set to 0, then the connection -will not be closed when an exec occurs. -.LE -.H 1 "Hidden Transport Dependent API" -.P -The hidden transport dependent functions are placed in the Xtransport record. -These function are similar to the Exposed Transport Independent API, but some -of the parameters and return values are slightly different. -Stuff like the #ifdef SUNSYSV should be handled inside these functions. -.BL -.LI -XtransConnInfo *OpenCOTSClient ( -.br - struct _Xtransport *thistrans, char *protocol, char *host, char *port) -.P -This function creates a Connection-Oriented Transport. The parameter -\fIthistrans\fR points to an Xtransport entry in the transport table. The -parameters \fIprotocol\fR, \fIhost\fR, and \fIport\fR point to strings -containing the corresponding parts of the address that was passed into -TRANS(OpenCOTSClient)(). -.P -This function must allocate and initialize the contents of the XtransConnInfo -structure that is returned by this function. This function will open the -transport, and bind it into the transport namespace if applicable. The -local address portion of the XtransConnInfo structure will also be filled -in by this function. -.LI -XtransConnInfo *OpenCOTSServer ( -.br - struct _Xtransport *thistrans, char *protocol, char *host, char *port) -.P -This function creates a Connection-Oriented Transport. The parameter -\fIthistrans\fR points to an Xtransport entry in the transport table. The -parameters \fIprotocol\fR, \fIhost\fR, and \fIport\fR point to strings -containing the corresponding parts of the address that was passed into -TRANS(OpenCOTSClient)(). -.P -This function must allocate and initialize the contents of the XtransConnInfo -structure that is returned by this function. This function will open the -transport. -.LI -XtransConnInfo *OpenCLTSClient ( -.br - struct _Xtransport *thistrans, char *protocol, char *host, char *port) -.P -This function creates a Connection-Less Transport. The parameter -\fIthistrans\fR points to an Xtransport entry in the transport table. The -parameters \fIprotocol\fR, \fIhost\fR, and \fIport\fR point to strings -containing the corresponding parts of the address that was passed into -TRANS(OpenCOTSClient)(). -.P -This function must allocate and initialize the contents of the XtransConnInfo -structure that is returned by this function. This function will open the -transport, and bind it into the transport namespace if applicable. The -local address portion of the XtransConnInfo structure will also be filled -in by this function. -.LI -XtransConnInfo *OpenCLTSServer ( -.br - struct _Xtransport *thistrans, char *protocol, char *host, char *port) -.P -This function creates a Connection-Less Transport. The parameter -\fIthistrans\fR points to an Xtransport entry in the transport table. The -parameters \fIprotocol\fR, \fIhost\fR, and \fIport\fR point to strings -containing the corresponding parts of the address that was passed into -TRANS(OpenCOTSClient)(). -.P -This function must allocate and initialize the contents of the XtransConnInfo -structure that is returned by this function. This function will open the -transport. -.LI -int SetOption (struct _Xtransport *thistrans, int option, int arg) -.P -This function provides a transport dependent way of implementing the options -defined by the X Transport Interface. In the current prototype, this function -is not being used, because all of the option defined so far, are transport -independent. This function will have to be used if a radically different -transport type is added, or a transport dependent option is defined. -.LI -int CreateListener (struct _Xtransport *thistrans, char *port, int flags ) -.P -This function takes a transport endpoint opened for a server, and sets it -up to listen for incoming connection requests. The parameter \fIport\fR -should contain the port portion of the address that was passed to the Open -function. -.P -The parameter \fIflags\fR should be set to ADDR_IN_USE_ALLOWED if the -underlying transport endpoint may be already bound and this should not -be considered as an error. Otherwise \fIflags\fR sould be set to 0. -This is used by IPv6 code, where the same socket can be bound to both -an IPv6 address and then to a IPv4 address. -.P -This function will bind the transport into the transport name space if -applicable, and fill in the local address portion of the XtransConnInfo -structure. The transport endpoint will then be set to listen for -incoming connection requests. -.LI -int ResetListener (struct _Xtransport *thistrans) -.P -This function resets the transport for listening. -.LI -XtransConnInfo Accept(struct _Xtransport *thistrans) -.P -This function creates a new transport endpoint as a result of an incoming -connection request. The parameter \fIthistrans\fR is the endpoint that was opened -for listening by the server. The new endpoint is opened and bound into the -transport's namespace. A XtransConnInfo structure describing the new endpoint -is returned from this function -.LI -int Connect(struct _Xtransport *thistrans, char *host, char *port ) -.P -This function establishes a connection to a server. The parameters \fIhost\fR -and \fIport\fR describe the server to which the connection should be -established. The connection will be established so that Read() and Write() -call can be made. -.LI -int BytesReadable(struct _Xtransport *thistrans, BytesReadable_t *pend ) -.P -This function replaces the BytesReadable() macro. This allows each transport -to have it's own mechanism for determining how much data is ready to be read. -.LI -int Read(struct _Xtransport *thistrans, char *buf, int size ) -.P -This function reads \fIsize\fR bytes into \fIbuf\fR from the connection. -.LI -int Write(struct _Xtransport *thistrans, char *buf, int size ) -.P -This function writes \fIsize\fR bytes from \fIbuf\fR to the connection. -.LI -int Readv(struct _Xtransport *thistrans, struct iovec *buf, int size ) -.P -This function performs a readv() on the connection. -.LI -int Writev(struct _Xtransport *thistrans, struct iovec *buf, int size ) -.P -This function performs a writev() on the connection. -.LI -int Disconnect(struct _Xtransport *thistrans) -.P -This function initiates an orderly shutdown of a connection. If a transport -does not distinguish between orderly and disorderly disconnects, then a -call to this function will have no affect. -.LI -int Close(struct _Xtransport *thistrans) -.P -This function will break the connection, and close the endpoint. -.LE -.H 1 "Configuration" -.P -The implementation of each transport can be platform specific. It is expected -that existing connection types such as TCPCONN, UNIXCONN, LOCALCONN and -STREAMSCONN will be replaced with flags for each possible transport type. -.P -Below are the flags that can be set in \fIConnectionFlags\fR in the vendor.cf -or site.def config files. -.TS -center; -l l . -TCPCONN Enables the INET (IPv4) Domain Socket based transport -IPv6 Extends TCPCONN to enable IPv6 Socket based transport -UNIXCONN Enables the UNIX Domain Sokcet based transport -STREAMSCONN Enables the TLI based transports -LOCALCONN Enables the SYSV Local connection transports -DNETCONN Enables the DECnet transports -.TE -.H 1 "Transport Specific Definitions" -.TS -center box; -lb | cb sb sb -lb | cb | cb | cb -lb | cb | cb | cb -l | l | l | l. -Protocol Address Component - _ _ _ -Family protocol host port -= -Internet T{ -inet -.br -inet6 -.br -tcp -.br -udp -T} name of an internet addressable host T{ -string containing the name of a service or a valid port number. -.br -Example: "xserver0", "7100" -T} -_ -DECnet decnet name of a DECnet addressable host T{ -string containing the complete name of the object. -.br -Example: "X$X0" -T} -_ -NETware ipx name of a NETware addressable host T{ -Not sure of the specifics yet. -T} -_ -OSI osi name of an OSI addressable host T{ -Not sure of the specifics yet. -T} -_ -Local T{ -local -.br -pts -.br -named -.br -sco -.br -isc -T} (ignored) T{ -String containing the port name, ie "xserver0", "fontserver0". -T} -.TE -.H 1 "Implementation Notes" -.P -This section refers to the prototype implementation that is being developed -concurrently with this document. This prototype has been able to flush out -many details and problems as the specification was being developed. -.P -All of the source code for this interface is located in xc/lib/xtrans. -.P -All functions names in the source are of the format TRANS(func)(). The TRANS() -macro is defined as -.DS -.sp -#if (__STDC__ && !defined(UNIXCPP)) || defined(ANSICPP) -#define TRANS(func) _PROTOCOLTrans##func -#else -#define TRANS(func) _PROTOCOLTrans/**/func -#endif -.sp -.DE -PROTOCOL will be uniquely defined in each directory where this code -is compiled. PROTOCOL will be defined to be the name of the protocol that is -implemented by the library or server, such as X11, FS, and ICE. -.P -All libraries and servers that use the X Transport Interface should have a new -file called transport.c. This file will include the transports based -on the configuration flags \fIConnectionFlags\fR. Below is an example -transport.c. -.DS -.nf -#include "Xtransint.h" - -#ifdef DNETCONN -#include "Xtransdnet.c" -#endif -#ifdef LOCALCONN -#include "Xtranslocal.c" -#endif -#ifdef TCPCONN -#include "Xtranssock.c" -#endif -#ifdef STREAMSCONN -#include "Xtranstli.c" -#endif -#include "Xtrans.c" -#include "Xtransutil.c" -.fi -.DE -.P -The source files for this interface are listed below. -.DS -.TS -center; -l l. -Xtrans.h T{ -Function prototypes and defines for -the Transport Independent API. -T} -Xtransint.h T{ -Used by the interface implementation only. -Contains the internal data structures. -T} -Xtranssock.c T{ -Socket implementation of the Transport Dependent API. -T} -Xtranstli.c T{ -TLI implementation of the Transport Dependent API. -T} -Xtransdnet.c T{ -DECnet implementation of the Transport Dependent API. -T} -Xtranslocal.c T{ -Implementation of the Transport Dependent API for -SYSV Local connections. -T} -Xtrans.c T{ -Exposed Transport Independent API Functions. -T} -Xtransutil.c T{ -Collection of Utility functions that use the -X Transport Interface. -T} -.TE -.DE -.P -The file \fIXtransint.h\fR contains much of the transport related code that -previously in Xlibint.h and Xlibnet.h. This will make the definitions -available for all transport users. This should also obsolete the equivalent -code in other libraries. diff --git a/doc/xorg-docs/xmlrules.in b/doc/xorg-docs/xmlrules.in new file mode 100644 index 000000000..41abb1b4b --- /dev/null +++ b/doc/xorg-docs/xmlrules.in @@ -0,0 +1,65 @@ +# +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice (including the next +# paragraph) shall be included in all copies or substantial portions of the +# Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# + +if HAVE_XMLTO +xml_DATA = $(doc_sources:.xml=.html) + +if HAVE_FOP +xml_DATA += $(doc_sources:.xml=.ps) $(doc_sources:.xml=.pdf) +endif + +if HAVE_XMLTO_TEXT +xml_DATA += $(doc_sources:.xml=.txt) +endif + +if HAVE_STYLESHEETS +XMLTO_FLAGS = \ + -m $(XSL_STYLESHEET) \ + --searchpath $(XORG_SGML_PATH)/X11 \ + --stringparam html.stylesheet=$(STYLESHEET_SRCDIR)/xorg.css \ + --stringparam img.src.path=$(abs_builddir)/ +endif + +CLEANFILES = $(xml_DATA) + +SUFFIXES = .xml .ps .pdf .txt .html + +%.txt: %.xml $(dist_xml_DATA) + $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) txt $< + +%.html: %.xml $(dist_xml_DATA) + $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) xhtml-nochunks $< + +%.pdf: %.xml $(dist_xml_DATA) + $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop pdf $< + +%.ps: %.xml $(dist_xml_DATA) + $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop ps $< + +chunked-html: $(doc_sources) + $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) -o html xhtml $(doc_sources) + +clean-local: + $(AM_V_GEN)rm -fr html/ + +endif HAVE_XMLTO

jev;6%?^1P70(dYU4@fFDn;=T3R^p1AW z*=vpGzca8)UsDz4PfX(bN2Ha+)BfZZmv7qNT7R-Wt{VtXCV%JY{MUQqn2DqVYRhwS z@rhoD3|uomkmv)ybs2+SZ;R61mh0*4+Feead%Gg!cg4lYYx_rznZ)_PIc~WD*p*Pg;%hhDNo`%SfrY~kp9v} z*POd;>BXtmkJGU&8}P>nC)&rdtMi}t;7=UC;^;b+%}TbfPvAJISD#cm_I3r?+4Mx3%PYy@A{4E8~buN z|7mB@#G?7}*QxGREYfkh_eQT6`pOyca}t#Q+m}Wj!}a#2-AiNLONY^i^t8&B+UAsO z>rxfydz+@!H_qbA$)*At?QA<~qG#vO_<4yU>d zUyaMrbYp=t7|+d6ZJCpbpU-ny2bN7^?e2;5x~ns~Cwg>G%~EHjYMN5GtV>nZ*EONV ztxipCWqsL*r)ul#XSOt?8XD`X@O=60QjPU^Hdh_esChFyPNA%m31j}Oqj*Mvf-B6YT`3H-Pmjza1IDzInMrc zuC`m*l&Vfo18#MyrjAc-rmM8nR4hxL(?2!7u2vOJ(Wu9f6sokPkxyw#RZg3hu4FWLkYn`JFd#U&Z?4SKBW{kLxg7^imA23IpR!JCa+?jjy{KF>(#{Y#A9351np)pH!whRmV;PN{%3k)Uc7v0+ zdt#&R{R`YP4ZDZNFG*~ZYI0I=N@Z=jUpdXzHP_5WI~HJ9&@{un%s4LwNA1vKrp*E8n_POBBrNsvn9u+C^y4?;{#`;+XbQO}Xn%lPeY<1q)g5T#LvT1H%*jMg7HeOAWGl}cA71=c_g$ds|Gis`2 z^&1&PZFZx)M+XO2&eT0ZRSQ~FYC@YUo4r<}r3rWV9QO$WYcDEWQ>)WAT{pW1&voY6 z?pwzBhsG~WY}3^2^j5wst841Wo9;T}yj1+M zM31_DPQ`wshoBm(>SqDD8X?xwoT{!z{gCq-(}%azpv90(`uUcFQQSXOR+p-(Y{FS{ zW~8AXzsUXGz;XzyzRHmqNQIPx}KHItQKKjGCz&tmr?|M>M4C zawAa#YcIk|r<{r=#IqH2RftZHIod%xPGn#NdM!ZW5?sz^_b-TF6xqzcO2scv^q84; zCRU(a)9P!{v9bH9pKD4{vz)4|t<_zI+0M&QqNlb!s9vY&4D-gG#UKH-K)*(AXj$^G0li&mU47Ux0h|mpPNOj(60#1HAYm zgW-T};omkOZzJr{tWo~&S{mzFT7d7zuhL_INOk*TA*@UB>-8%1i`C9He^9SGYOV#ByKVmY;CeOkH1)e&cl>i) zdzBWXBmM9Ue4pzziEUb&{*ddxJg$wALH_yRdTpY|)YjkS`maC7wRdSjBchEr>slV) zX$|Ed^x~H*btk?O|0uS-tp~34S{v+~;=_gc`zG=H0s8E(VTz~tn4N0CTl_|f=EC+brE%M6UhAB#U3e;Nnr?A`EOHQx`{{Xs73g^!*i zoW1??;fL!v|Fh?!ckb_Z9v$RjALQb7_-!zs>kZ6x>ki|4WMeu#(<6$;!@bKte@Ly{ zlGvy^?UZNDMS1R@AsSgyT7dkgx~I*GnP-#NhGM44aZ-AY%Za~C-kC?;w3h#N##ET#K-dZn@-GikpF(P zKnvr@GT8Ba;LgT)t<~w+2jkHTHhMllv+C??oWG?zC$SL#Cz*qXx_W#3Acr#4a_cKa z^w54AScBaNX=vX=tpOO`~BAi()v38+gMA51H2ww28XpsOM|xcw$U?8pTX3q_+j@9gl@El>a#sYo^a= zUTMc6ET!=3l{_ZmAb;_#+llFEAcN-(qrEb0%C@9eJQeSqJUil~hC(-5F@7k{Zf!F3 zxc!Ouj`xc9NuC#RDiE_yq-?){EsnQ%A82ivyfET4!G;qZGk!#sF|k< z`PzjaB*=3vk`C&TXf!9nr^)qAzMlE1u#9gAx%oM{=58?&S32pY=Ar4@+EM9Bx_C4X zI}wb=xIBTqnwMknrG4K1fVNYJr}|(I_{KfHtl>>t2K7l&d?Wce>=vm&_0R<`*TL_M zrqYh!&kguo>*P}rhSXQnDm;G!f7Jg@*g-Gas6C<=n>F~;u@1Jv)jX>c=C7L1Y^M=_ z><{vH({fBr*ly}aCzg$Gy*Gvk*v%FnR$OTP!Zm+ed~`Je;}~t9-zhQ*mz=;a^FTJ9 z=5gb5;o5|7@XJ;)j5u^0^I>FfM_bmoz^|59(8XQ_t^+ZvuC_$Qt`&oaj2WKVt!~>r zQGjW=+n5R$par~h6o@6EXv&F>O0Rx*0HQM*Gio$529 zPgKLMYwybRgrJn3NWLJMkG9*5S&hkp}nJ=Wp3sZF#ga zWspxu2>YS4u}+wu;3fUQbB;XnbW?qtIFrxj2w8?L{X%ivlgM`P&T(iQ&+;)*pktrZ zWuMM!osE6MBrdLlmGmiB#ZuI9`y-YHsPQ$fh}gLIN0xzdMwf%^(AJqUbj4T-$bLR3 zBb^;fMbOw8`K!tR%T$Jezh8!0FrahIjcF{QI>Bo%^GN7(BCgAz+j^B^oh}1R6Bouz z8TrsZ;&k2dcgm2OMk_41pD@`mjU^jahC;i)Qf26De}$GzuaYyV@TgG7iFu$i920*t zN37H{sdO-MmGSIsU_BQ7Z5(rHjpYV1>>S79zl~!-Ip&u(h^Nkl&g4}|g0AY(Hf*HY zw+)U-`oRc{JI`khKAqu>nH(n;nCGCnA};jqrci&n|Aj2K;!(Tq zR<}og`Pz1m1Dh$PRN11O34gULyZ!BDDRJBs*178OkS>Z7*JZKF0dHD9q0t(}QfGX! z2UcNb^GU+P4}HKj&j$EJk4?SP6I2e&n(bD%`wl^mpdsOTDKjtrOj-6sSq5i`ufJNB zE(36f1}l1Mj_?ZOlnmZg?@aABSWX6dnNm^dD;l5Z`q`Y{HV)Yz6N7n=n-iT7%$3b- zO<&IH7ul~3=-ZC{f+X^;5QzSdZ zhdoa1Osva`Bsa&!R6qA!RkG}V=DKnUPNgYkH|4m)__J(_3WwKKVF_~G^oeQQyTbwA za?5$8ofEk&<;1nd;Ku1q>;vl4=tVJ~$NHViVZsM`4z7g)eR5~Zm54<7xhA?@rP+D? z`D)|yGX9K#N=jZ|D;<}7u0Idt&oz#la_AW-*q^}XI`>HayazsaadFoS`>XLe;y%Hj zAwz$y|2aZqQ`g}+h)92bKW2{WtJC;)bmgoDV}4%G4WT_jSvuS{u)iA41`yl09poBg zozB)PVte@EExf+Vpyag{PT`}s@QV&ozgn!dHjw8C=#L=(|K)ogxpL&i`11Y-FNA_z zG-B5gWg{m|G;V!x?CLiA&&KXZ#`^2ATLe3lLpok%esVnV_lxy@KaQi0jAN|J;2$f@i)Q+_$@6~O#`*x8%`m1@>l;h(63fLuo;`1NQtNzvYVhnJA^q2d(qExgK?FHw5 zmi9vCfA)Sat@=Hxmt56eaQ>@)kMm#kd(>VGGujJBwHK|}p9=JQiSp*gmMVO+C!Mky z48OggXG747+GL$)+2R_9vu%m7ycczB%|+;WqAVw2?1^=@*7YTFknf@Er%9-AQ>V)u z{EPSd6XReF_xp4H|GwW(ZL-}StAg5ZiSfJ#oUO4v#Zd>F8r$av)~@*DWB;st@48FY zFOA_S=gh4$u`q#8G-82I_8xs;n$@4P#zF)wRY&8=f?@RKHeTbVZSXslz~ugC<{ao- z$hf}E`O9+-slPJkkjp&|jY;TbmWgx1>c^pyZA(n#y(r6;s&A~4YMpJrv4{+h6{4@$ z4aGO^YU)BmQ<&9tZ*uiWZ6M!r&G%nkU(S2}fG?p3;+*Qp9NQHu_WQKp%VqQxQMRi8 z$hbFo|CzXwCh;D`3{jBRFdTBaPV5sP ztNgXs^_lCof@kSi(R-=i$;T@jPpxCUCnjS@w)+0#Ht`SU2EF!BBX&FwC8J*Y%Zwi? z3s>3(#{Iqwg*yNLcz$;1Z5wf{QT^+!GrZ}J+Yo9i3stPB!NVWqDbCT5wD3&$3Yll^C5Z192xV zvJ6qDfLE#oxkm%ceIkEm%tieI(Ef%om;K~1$%|^&?0a&tyR&h90Gk5Gu_`|PLfsM< zS+|(88Hd#{lBSbSpDXY^K_{0!AvFAPE%gCrUUqaHtW4Q&2|PUu8~C><{(rLnq_xz< zMe{GuHE!%%rW@7 zC1dD6e@~x!u;y*u|M~qko~|o`_lzm*%s$ohMHjB?ah0=lKsjB8)J#{?uTFFwwKYfs^Mb%;5%3glaz_j+!;Gv%pd0F>u1 zj+r+BsNZJIH`fBG>zavFxve z=ubT&9ioF10U&?WQo}jpws8)+=M!M;q~_K3l)2U#6EkfBpu?^)%??jGUOB zQ&SN3Sb){!pRDsJ#8dL+xkp;jHyuy5X!5!{K9?BFJk+^J{Qzy9sbgB^+ZcbC}+!XoJ4_ zK|FagcmQeS*%|&bHUGmEe^m*ct$+KP zKtAJqcwMz37Z`Uk&l?xpyuf^{|zqKG|zob0Ia zFxR^=MvYjjV0=cQ)iD^OnPW=bk7e_PZzb?4(V)xLsrxOzcikzkY0Q}Nc$=4=!1ea) z)jl#=0|ZIPR-UNRqITTa5{I+Ux%+QPF>^Y6a>Ec{u&=Z5QZd3$;K!TQW% zpUc}D`u=x~eLh*nt!%$f2llg+m;JR3>uPWlu(DRJ5iqLYhaDF>bGkoWoVbL~qpyB-!Ff4K#T>vfIU1pU}SG;YXm)UWZ!|{7H&fCX}UwvL-8J2I> zq^o5ZQ(Rkd?45rN&X?=FDE{^NMP+!>V^a;D(;zK`%IlqfE%Vm-qt93Qg9@?o)I0CG ztmnlgT&f%ov#re*kKDFh@10BcC^e=&mzT!a<)xV9b8pCcZdZlNH%PMKa$9sGpR30& z8n<8^t(cV=m}ld9adDG(t{E4x36*$$m*pGpoSU9>UWx{2-ra$FORb%Ic_biLXgq7yk$|N;1ya3;g7`BIywCuX%he z)*SM2^el42#o$~|HNFlXgU9LO*xT@{4Mp<%58nAWwwHhWD}3a8Ky*Ap*@Lr<<6mQs zXP=J;?SB(GPLtl=M!zEF+t<7I(jOfB%8Oy2cjqKlCe|h1b>OqPyd$xa-U`duYz)u# zqj>#+b=B#s;!)h0N(pQzFEa%JUy`A<;_9W)VlDOMn zw0qG(MZ4o}R*df>QqJx~N3q4^oAozRv?fu@to;O>%aHwCI($485h=a`8@v>79;YM!#rJ&51bh zzjqS+k4jv)R&&BUjSMQ(M8wS@l8#e7@2bKz;Dlejg5)|EPu)?;bTs1Za&ny^N2z`c zIpz$zzfj4wPDwdE84VA))8AXc+=dfhz+8#%@7HatXfG}Y+@i}t6!hlTEq>S3s9WVI z;`LGC$Aup`d*BS$DSP%=$m<|eIU|NlbsIHg;0?vox9M4d#@B6#?;mr{DH_~K&amma zIkNpIWsby|Hj^_QH#yUBlQSKU1tdWhA&NKavau~p;u^k9B(_# z8>y~##u~qYc#v)-NE7zYz#G}0u5{usG&WZ1c5{1qwlEEZ=ScJO_s~|za%{=%1eL*Y z_B1~G`yWGZJlEXsfDc`#b;q;v@5!uYe9X0gPfvHL`*M&^;fGG&xzu(^ zKJqi!jH&(fxz_kR+~Bjo_#EVKmPPZS`f1L5!T2fWlX72ixo41^B8Z|G?j;+1adLFz*QZ7Lb;$mJ5D+>+?nI-M{7nRd70&| z&M8=quE(D=a!yVwPD@^+;bNFk!Pbu7ccy_w+HqWJk=o)XDw)Qebo?YGN8B>dYm1+( zfjJy3iTC+zqlPe+gFVZcPY0QnLn1Cu$-S2ES@Ivl@L$x)Z`pUSy!=Ft%5 zOlT42VNR`qiHK&Km$8kRUfo`%z9`MW}VYuV0HoKsjztq+o)&E(;(lfWEULfL0+U} zjd`1reauTTcZV=(2?1f&JBJ&XrNBG`Hg9Je4UBmvfl>oRwS zFzL2G`Ln@kG%(?u_&Kn77u&%7Hej3!`EDf>=6R6sQL@IoSIIu+otZmAm{+gnJ_Pf{D_h@=A%mXFrCThFR6bp`;}&Bxv{=ZlhcyC4p6ia2l|bI_V{CL zqnRgt-9n<4V?;Pbk^Ptjhcv!lb3$?WE<$GfpHb&rAj8u zt06z7WR1B@$v$R7=I0RRY-qW$3G`d21}2sBTG)J=ZD529jO!pjqh!Lo9&($KBQEv- z?eXPG_Ax(2InTf`Y74PZpY3*oR-Ee6-8^|E?WHaMBw*g?v=vPx8_*%ln;>I_pF9Wh z%}#q!g_31C+lnSBSz@*qO;&QuMgHUbeU*&m43z&x`zbjW_D;j`{gs>tc^k_c*)xTqf9bM%-^SUH_Ch;;#>+X;@sWs5#$WawjvrGI9N7`3sRP;=O)>8>AJYR zhr(!=6;TUIavt7fJ@?9d z8{$mAITz1`p1Xy?na+s729@4%aW5S<36q$S>?%w`B00ie?Px2aR)Az3&y=Agqn=^0 zt!R#t>5&;!<|CAxtB$uS8L@%m6dV0BUxzqv0WGTM9&S&IGhrObHnzaI67wh}t8sJD zf0Z0j$B$MrVuLvyqvV*2{D-|`m7F8niK4km&UGpO+lr1;a-K{1Pn-v3)`vLvgcfn$ z!c7^RC&2>QIG%0v^f>eNhKq9)rxVq2&6%$^a9ndfSsjnL$bZ;7Mai1;sY=$IPg62+ zp2D0*Wxfb;PC<(}_jG$1oDWi*=dq2H$C~mq+~pPG4nm_@tEH2<#FaQJ!H*!zS1YohY@Ft)BX7kh}@?vg;r0r36A?z z@+!RXmQQok;9MeOW2xp`B4Y#R$a*f3v9VOwbBTM8?KauIEPPd=mP>1>j=#Db!P_~XBitfM{$<1@s!6| z#>P_~XBit$fivP|3`AFt`9{NF>^D@QxDfelEvz%OLE0M9W z%;PL$1Lr8tGB%cZoMmh*^Ek`cSO(6>e{hzuvCQKvV`G`eS;odP=6pPJz7qYQ&6!3q zRL{%YXAI65Z*V<5KLM5ws zF1bp{6wh+JaVz>kn=_5HdLjp(cH0cjXDZHDvyEpw&eteebG}x|n)7u^)|{_ba?C~k zgYyka)|_utvgUk~l8N(qT+a`nAGA5QL5u478F#tC`9j6{X13AhapvnV7w4$h;Oj8R znloRALDro4It+5mMgD^`UsFNWocWpxa;{7H-&V3%;ej*q{}}9BhJMiIyj*c^bK4Eh zIyUZP8_PY;cPUwOzFWzf^F2z|obOd~%tii#(|tk{IWJYR=1eW8<38)f23i=FV=nR^oGIh!xaLgR zM6%{gkxDXgzLaC*bM%8Y=jWhB_57^+yuleOr#QYSavb+LyzmZ8@(RhCGnJTR&6%u` ztn2xCCC6OkKhA$a$(r+vO4giTQZjMAnmPZR`6R@dtPId7C%8{$mfp?H45 zeaYZ_kK+6R+j!CA{GpOH=haHqoYyE>b6%_Dn2Y=e=Z}=EIe)BV&3T=YiSvWZxmRX& zh%-eH)$@z)%LeC16z5Oa#!DXOPnE1Wf2L&3`Ew8@SVkfW38EYL-k0R4Nkb<_NvFp%>@hMBybY`uh5)?t7OGV zM3k&JiKvnlCjrBJzPd&gIZBq-sKn{y%-bPO)VdI-74B;WC#D2WNG_cBs>dl$$(mEX zk~OC;O4ghTl&m>*RkF|N{LGsnPSnB?r&rzA4NhxSJ;m9^Yv4rr-zEx`?1C!QV?xQA zQ<0K2r(z{*P9;kAIW5e*5#mIxYzo!!n)`;qi4b#vDcHvA%qb6?l1g^jPP^Dh$r0ob zao$+TYJNd%qGZi!QziSH7G+)waiW%<>gjcNrNN1+AqGyHv5hyt=_RbuXcOI(>_R5a zn=6?(5$EnomiI5(MX8cwxLZw}dnj4XhfzE|m{}3xM7<4hdc%Fw;6(L=_DO8PHn7GC zHZcz)dMeq4Oq^3njzA{Py_6hnSC%*!E8)O!)9mF`;>CyJLX z*~XhVm)eXrv6Yft$i(>{N{&D#&RZ)v3Yj?fRWkYs=DdxPeNHPfFNQc#4@&X$ru%jl zPXA;ZZ-EoF8Es-)CA*M`({@Ux@6{8heoBr)CQkj89D_{txV@5nPVZ-)4{@Sioaza< zSvc*$Hn36v?E!Hbpkx;^aT=)P2xQ{4qmrYLiPOK79D_`p{;gz>Q=~`cS?``b0*2=l zXe7~#+wpfjP6!3w+Qm+6;~j9KHlt1KtYjB5ar%#vBan&HE=rCPBfw-PVc&_vTz#0Hr@j#YBSozP$j#NiPJD8M<5fY;YyA| zCQc)i9D_`pMk?9oGy?bNZBDD8MV#Jq-_OEn6x&z@PSj?!i83X-kcrdYN{&D#PNS6^ zg-o2rC^-h1IE_`Z^u@NG^svh0Pt18x>ho;at`xAJ07_OYXofHt%eqH`p{jIh0~#IV>LKYo6#mJ zmFz+$PE(Z}flQpLlpKXjoT`-^gG`*#O7=P3k2M4~r!~+bPOIIuSvXB&8*9Lc+Ke_a zUCAzF;xt3a5y-@;M#)jg#OW|4#~>4@nM(FKJ%u#}Hm9}F>Wvs*<9?KdQ!U%TXv(EF zqfN|GvJ06w)hRgwnK;!eISQFLH7Gd-nK&J;WRDZy%e6Uu1g+k&zV2H0WB>lK*Jd`d zjgP=-6+X3zCMCO&iBq$ZBan$xi;|;|iPLN)&6)$i(SLB}X6=r=ye{g-o3OtK=ADs;8rs>~mV6=621tU>&sja9i++ z#|h?mYZu3`4XjYX+8W|?tdeO>3UQjNWLkSeoQ_j+6mpENm7GOc=4L;E7BJm)?x!9m z|7sg>+r{y0;}c*~{*e3Fu*kRy!wV3xVnPoYJapSYhHm^oN` zvk*2;W*eUZllt9uaf*^%m)gm8ajKFr#%E5aDLLw{1}7@#(^=+5KZ6!we(HX1U`C-$ z{+h=&J_9D@f4ewc$u7rDyEsG1@?LDaI8(_{=0un)vdnFM4y``O#n0R?3``oMlfTYl z8=nJ{^1of2tz>E+h|@VrruKn2ovY+1b0W<5v&>C?0WB)$=kAvVCX}(Yi}Tn9R)8XZ z$zSIyS?B)+N|yQGE-qBE%zwiCBFo(3m(U{2FWmJ8=KmDtMQr0sU?Ts4d9jjRbR0~0ZX{BIWv*ap65;!^&%iz}6kwN%LecCk>&YJG^fO36Ov z##!d(zJ?Z+^DFlo0~1w;{BIXmvyHDAb1vj-luVe%LB3YW8uL0O`1%iPv?&?0|+>wa%wQVg9Ao42uz?-&zn zNW|?*CQPg$6L%=Voei6JvW@Q<6KlxCT}mcQ ztRWM3D_LXSqhud*a+bNLAD~5;-@88=m=r_j!{)tg1FH~$fi+~}J|z<-){u$&m8>xz zP_mC%m1S<}M`#h|5AII}CVEulf4g{)ZD3^;FtCP9Jfvj8#2Pa3u#z?ABTDu$8?wwD z{RA!Y=a25s1}4SrWw7}u+xUqwv4%`Mrewmz8Zxm&$r|%M%OO4xjYZT!rb3n4$LWWu}(@=_&h%%_y>W6sMm_wx(12=iz6R|9h{Ft35lWo+XY z#=I8t(@G{xtRWN6C|P5+DcQ%oILqA5uh1gQU)|ciGqS(?UF6ZoBkC8KXuQ@fQWISlc|Y=jOA@X5 zcbwA5VbM<_A4XQYQH%+Z8TivPGBf&VWKCqP8%6#*$bWnbBvKpwEb>w0W9)kjGHqK$ zW<@^-;wRD`7rSqyF8W2})5vGo$0*QCMCzkoMm~>x;YQ_JN+m!FpzlwYn`5G8c@IJ>Wi8MyPj(ijOR$;hKmjfn5-i*wM^@weOvZ1Q+&8z(j zCt?+BaH}RURZ>_6%$y9K!OY=Ed{euQ>efHs)9d0Ej>Z1iklGf8LjHTl_ze8Xj~0$YRK$k1 zR$_g5VDohIa|*}fNZ#1W=?IKUic#rLA5)&#rEmg1UhHUB+LmRizEjh=2}w zw+{R_@Azwf3UGS7qGndQsb5($ek`C$nd>U|O{||)Stsw`;MpH?-w-^oKxrjLrE6!W zn`^2n`x$$S{k`KV@l0o3mM-4@Yt;E0dwcpxO*V74I*MFsX~d5g$orirwSGvk@hLu~ zvSFHf4oMTv3(6(9rf?}I*$yQ;e(Miq#nh|gv!SaaZM(p-P>6H#@T6^7j(jI?VtRT@ zZ6y|;7Lhei9*vmB6I4+%dDst3PcPTW4b-eE-2c7(Uk&_U4g6mX{9g_DHGrRxjBQi= zLF>|w$IVOJ{`t_{uCe#4zC7&gi}zgc;+!L@*6w=jRp&3=b>Dkt%&q+5%qdyLDB&zddTxquy>j_35`yZ2iw!V~_25`?(FbPx$X! zcfQtoR(1NMCpUj^UcYAwZXL1H1$$l7_``s&sy1po`SIQMf3xU^rh@u4)dRj6^8Adc zL!KWw?e6ckZyY=IqUvXMT5wR8sb|j^ne*wcljr~AtNm}Ev(ey9YZr~3w1aa&!(laR zUO(`c>DO;`#8&ecAM1Sa{=B0O`stt<1K-)>^iwu}bmgUs9$B;Vo;UV;rS#%659)jB zg;&mLy<`2Pvv!*G&D`Bz+4;CH^AG7e?wD2I&MCZg&50-F48I}1dHdbFDp4<$d1e`&*`ec*FF&x(;3Zz_eGc+I+KLx1Ta_#JeLa-aGH?X9tcsZu#h&bDJNn zI&b0RJ5DIrwDp2VKO0v4k4MUeK6&@j=U(3N#BQ5^aD43W=ep0?^uJS1sXX_90jmy< z@BGB1Sp3I>OXGbbOLu+l`&X7v*zDf)d0)*Oy!4b;Hh$-k{3kEG^6ov#FRuUUu*iy{ z^UCLzI%j{h^np_^d|}{~8~-x0vi*nopPu*2vN=2TNbNQ(@6I0|SX?~ro=Y}syY#L8 xuU)_SE%ncSlmBDwlkblG=E<#|yS}*plmBneSL%M;I=RE|sEg^E!vf&82LLuXe}@17 diff --git a/doc/xorg-docs/specs/XKB/Proto/encoding.fm5 b/doc/xorg-docs/specs/XKB/Proto/encoding.fm5 deleted file mode 100644 index 1a4a2404d0ed5217f10bd10217ea864d6aefae28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150528 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 r^BBv=AMn^0 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 diff --git a/doc/xorg-docs/specs/XKB/Proto/keysyms.fm5 b/doc/xorg-docs/specs/XKB/Proto/keysyms.fm5 deleted file mode 100644 index 21a5c89e08f11625df9b3e219c5ad35592a4130e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 118784 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 diff --git a/doc/xorg-docs/specs/XKB/Proto/protocol.fm5 b/doc/xorg-docs/specs/XKB/Proto/protocol.fm5 deleted file mode 100644 index 61b28fa2cc6b9a8796d055419099369c66074916..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 705536 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